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