v8-code-style
v8-code-style copied to clipboard
Добавить проверку, что перед программной записью объекта вызывается ПроверитьЗаполнение(). Исключение - запись в режиме обмена.
Описание проблемы
Перед программной записью объекта всегда должен идти вызов процедуры проверки заполнения (исключение - режим обмена). Часто забывают вызвать проверку заполнения. В результате в базу записываются некорректные данные.
Описание решения проблемы
Предлагаю проверять, что непосредственно перед записью объекта (Набор записей - то же объект) вызывается метод ПроверитьЗаполнение(), если запись идет без флажка Объект.ОбменДанными.Загрузка = Истина;
Дополнительная информация
No response
а что делать если проверка не прошла?
может быть примеры кода привести?
Если проверка заполнения не прошла, документ не записывается, выдается диагностическое сообщение:
Если Не ДокументОбъект.ПроверитьЗаполнение() Тогда
ТекстСообщений = ПолучитьСообщенияПользователюОднойСтрокой();
ЗаписьЖурналаРегистрации(ТекстСообщений);
ВызватьИсключение НСтр("ru = 'Не удалось провести документ.'");
КонецЕсли;
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
или так
Если ДокументОбъект.ПроверитьЗаполнение() Тогда
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Иначе
ОбщегоНазначенияклиентСервер.СообщитьПользователю(НСтр("ru = 'Не удалось провести документ. По причине: документ не прошел проверку заполнения.'"));
КонецЕсли;
Исключение - режим обмена. В нем запись документа в режиме проведения запрещена. Тем не менее Записать() можно использовать и без параметров как в режиме обмена так и при обычной записи и если документ проведен, то Записать() без параметров снова проведет документ. Режим обмена же указывается в свойстве ОбменДанными.Загрузка объекта:
ДокументОбъект.Обменданными.Загрузка = Истина;
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
При такой записи - проверка заполнения как правило не делается.
при обычной записи и если документ проведен, то Записать() без параметров снова проведет документ.
На самом деле это не так. Документ будет просто записан. Проводится он автоматически только при интерактивной работе с формой документа, за что отвечает отдельное свойство формы.
Т.е. если подытожить: проверка заполнения програмно нужна там, где она вызывается и при интерактивной работе с объектом. Для справочников и наборов записей регистра - при записи, для документов - лишь при проведении.