Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )

> Изменение цены в табличной части документа          
Constantus Подменю пользователя
сообщение 14.12.17, 8:57
Сообщение #1

Почти ветеран
******
Группа: Пользователи
Сообщений: 674
Спасибо сказали: 3 раз
Рейтинг: 3

Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

Функция ПоПоступлению()
    
        Отбор = Новый Структура;
        Отбор.Вставить("Объект", ДокументОбъект.Ссылка);
        Отбор.Вставить("Свойство", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("По поступлению"));
        
        Если РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Отбор).Значение Тогда
            Сообщить("Хорошо");
            Возврат 1;
        Иначе
            Сообщить("Плохо");
            Возврат 0;
        КонецЕсли;    
    
КонецФункции


Свойство документа Оприходования "По поступлению" тип булево.
При срабатывании этой функции получения значения этого свойства, если ранее это свойство вообще не было заполнено, то выдает ошибку:

{Документ.ОприходованиеТоваров.Форма.ФормаДокумента.Форма(1386)}: Преобразование значения к типу Булево не может быть выполнено
Если РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Отбор).Значение Тогда


Нужно сначала вызвать свойство объекта, потом выбрать это свойство и присвоить ему хоть какое либо значение. Я так понимаю изначально это свойство НУЛЛ.

Как правильно написать код проверки значения, чтобы не выдавало подобной ошибки?

Petre Подменю пользователя
сообщение 14.12.17, 9:04
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2372
Из: Київ, Україна
Спасибо сказали: 583 раз
Рейтинг: 543.1

Constantus @ Сегодня, 8:57 * ,
Не используйте неявное преобразование, а пишите конкретно:
Если РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Отбор).Значение = Истина Тогда


Signature
Допрацьовую:
- "Бухгалтерія для України 1.2";
- "Бухгалтерія для України 2.0";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

Спасибо сказали: Constantus,

Vidocq05 Подменю пользователя
сообщение 14.12.17, 9:08
Сообщение #3

Завсегдатай
****
Группа: Пользователи
Сообщений: 141
Из: Сумы
Спасибо сказали: 23 раз
Рейтинг: 23


Если ЗначениеЗаполнено(РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Отбор).Значение) Тогда


Vidocq05 @ Сегодня, 10:05 * ,
Нет, так наверное не правильно.

Constantus Подменю пользователя
сообщение 14.12.17, 9:33
Сообщение #4

Почти ветеран
******
Группа: Пользователи
Сообщений: 674
Спасибо сказали: 3 раз
Рейтинг: 3

Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

В документе Оприходования товара делаю изменение цен по последнему поступлению. Посмотрев код изменения цены на текущей строке (типовой код) видно, что происходит несколько операций. Правильно ли я учел все изменения при изменении цены в каждой строке ТЧ?

    Для Каждого Стр Из ДокументОбъект.Товары Цикл
        Если ПоПоступлению() = 1 Тогда
            Стр.Цена = ПолучитьЦену(Стр.Номенклатура, ПолучитьПоследнееПоступление(Стр.Номенклатура));
            ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(Стр, ЭтотОбъект);
            Стр.СуммаРегл   = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(Стр.Сумма, ПолучитьВалютуУпрУчета(),
                                ПолучитьВалютуРегламентированногоУчета(), ПолучитьКурсУпрУчета(), 1, ПолучитьКратностьУпрУчета(), 1);

            
        КонецЕсли;    
    КонецЦикла;


Результат работы визуально вроде правильный, но всё ли учел? Ведь там столько "тайных махинаций" :-)



logist Подменю пользователя
сообщение 14.12.17, 9:59
Сообщение #5

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Команда
Сообщений: 9334
Из: Харьков
Спасибо сказали: 2449 раз
Рейтинг: 1519.4

Цитата(Constantus @ 14.12.17, 9:33) *
Если ПоПоступлению() = 1 Тогда

Зачем это условие в цикле? Если туда никакие параметры не передаются, и ответ один и тот же, то оно должно быть за циклом, иначе зачем его в холостую гонять.

upd: прочел другую тему, выносите условие за цикл, да и вообще, я бы не писал отдельную функцию, а проверил это условие запросом и если запрос не пустой то выполнить цикл.

upd2: объединил темы, потому что это по сути одна задача, одна и должен быть один кусок процедуры


Signature
Весь комплекс услуг по 1С 8.х. От консультаций до внедрения. ИТС. 1С-Звіт. Интеграция IP-телефонии. Написание конфигураций под требования заказчика, доработка типовых решений. Переход с 7.7 на 8.х.
Пишите в ЛС. Звоните +380 (44) 2227507, (57) 7547700, (98) 5147778, (50) 7147778, (93) 2147778 (участник "САБ")

Constantus Подменю пользователя
сообщение 14.12.17, 10:22
Сообщение #6

Почти ветеран
******
Группа: Пользователи
Сообщений: 674
Спасибо сказали: 3 раз
Рейтинг: 3

logist @ Сегодня, 12:59 * ,

        Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |    ЗначенияСвойствОбъектов.Объект,
        |    ЗначенияСвойствОбъектов.Свойство,
        |    ЗначенияСвойствОбъектов.Значение
        |ИЗ
        |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        |ГДЕ
        |    ЗначенияСвойствОбъектов.Объект = &Объект
        |    И ЗначенияСвойствОбъектов.Свойство = &Свойство
        |    И ЗначенияСвойствОбъектов.Значение = ИСТИНА";
    
    Запрос.УстановитьПараметр("Объект", ДокументОбъект.Ссылка);
    Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("По поступлению"));
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Если НЕ РезультатЗапроса.Пустой() Тогда
        
        Для Каждого Стр Из ДокументОбъект.Товары Цикл
            Стр.Цена = ПолучитьЦену(Стр.Номенклатура, ПолучитьПоследнееПоступление(Стр.Номенклатура));
            ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(Стр, ЭтотОбъект);
            Стр.СуммаРегл   = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(Стр.Сумма, ПолучитьВалютуУпрУчета(),
            ПолучитьВалютуРегламентированногоУчета(), ПолучитьКурсУпрУчета(), 1, ПолучитьКратностьУпрУчета(), 1);
        КонецЦикла;    
        
    КонецЕсли;


Я правильно понял?

logist Подменю пользователя
сообщение 14.12.17, 15:22
Сообщение #7

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Команда
Сообщений: 9334
Из: Харьков
Спасибо сказали: 2449 раз
Рейтинг: 1519.4

Цитата(Constantus @ 14.12.17, 10:22) *
правильно понял?

Да


Signature
Весь комплекс услуг по 1С 8.х. От консультаций до внедрения. ИТС. 1С-Звіт. Интеграция IP-телефонии. Написание конфигураций под требования заказчика, доработка типовых решений. Переход с 7.7 на 8.х.
Пишите в ЛС. Звоните +380 (44) 2227507, (57) 7547700, (98) 5147778, (50) 7147778, (93) 2147778 (участник "САБ")

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.07.18, 19:02
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!

Курсы валют: доллар США к гривне Курсы валют: евро к гривне Курсы валют: российский рубль к гривне