Отбор = Новый Структура; Отбор.Вставить("Объект", ДокументОбъект.Ссылка); Отбор.Вставить("Свойство", ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("По поступлению"));
Если РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Отбор).Значение Тогда Сообщить("Хорошо"); Возврат 1; Иначе Сообщить("Плохо"); Возврат 0; КонецЕсли;
КонецФункции
Свойство документа Оприходования "По поступлению" тип булево. При срабатывании этой функции получения значения этого свойства, если ранее это свойство вообще не было заполнено, то выдает ошибку:
{Документ.ОприходованиеТоваров.Форма.ФормаДокумента.Форма(1386)}: Преобразование значения к типу Булево не может быть выполнено Если РегистрыСведений.ЗначенияСвойствОбъектов.Получить(Отбор).Значение Тогда
Нужно сначала вызвать свойство объекта, потом выбрать это свойство и присвоить ему хоть какое либо значение. Я так понимаю изначально это свойство НУЛЛ.
Как правильно написать код проверки значения, чтобы не выдавало подобной ошибки?
В документе Оприходования товара делаю изменение цен по последнему поступлению. Посмотрев код изменения цены на текущей строке (типовой код) видно, что происходит несколько операций. Правильно ли я учел все изменения при изменении цены в каждой строке ТЧ?
Для Каждого Стр Из ДокументОбъект.Товары Цикл Если ПоПоступлению() = 1 Тогда Стр.Цена = ПолучитьЦену(Стр.Номенклатура, ПолучитьПоследнееПоступление(Стр.Номенклатура)); ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(Стр, ЭтотОбъект); Стр.СуммаРегл = МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(Стр.Сумма, ПолучитьВалютуУпрУчета(), ПолучитьВалютуРегламентированногоУчета(), ПолучитьКурсУпрУчета(), 1, ПолучитьКратностьУпрУчета(), 1);
КонецЕсли; КонецЦикла;
Результат работы визуально вроде правильный, но всё ли учел? Ведь там столько "тайных махинаций" :-)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Цитата(Constantus @ 14.12.17, 9:33)
Если ПоПоступлению() = 1 Тогда
Зачем это условие в цикле? Если туда никакие параметры не передаются, и ответ один и тот же, то оно должно быть за циклом, иначе зачем его в холостую гонять.
upd: прочел другую тему, выносите условие за цикл, да и вообще, я бы не писал отдельную функцию, а проверил это условие запросом и если запрос не пустой то выполнить цикл.
upd2: объединил темы, потому что это по сути одна задача, одна и должен быть один кусок процедуры
Личные бесплатные консультации не даю, для этого есть форум!
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!