644 документа
← К списку

В режиме "Конфигуратор"

страница

В режиме «Конфигуратор»

Поэтому вернемся в конфигуратор, закомментируем в модуле формы добавленный нами текст и создадим обработчик события ПередЗаписью в модуле объекта Документ ВводНачальныхОстатковНоменклатуры.

Для этого на закладке Прочее окна редактирования этого объекта конфигурации откроем модуль объекта и внесем в него следующий текст (листинг 21.2).

Листинг 21.2. Обработчик события «ПередЗаписью» модуля объекта

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

 

// Определить, нужно ли обновлять дату в движениях.

ОбновитьДатуДвижений = ЭтоНовый() Или Движения.ОстаткиМатериалов.Модифицированность();

Если Не ОбновитьДатуДвижений Тогда

 

// Проверить, что дата изменилась.

Запрос = Новый Запрос;

Запрос.УстановитьПараметр("ТекущийДокумент", Ссылка);

Запрос.Текст =

"ВЫБРАТЬ

| Дата

|ИЗ

| Документ.ВводНачальныхОстатковНоменклатуры

|ГДЕ

| Ссылка = &ТекущийДокумент";

 

Выборка = Запрос.Выполнить().Выбрать();

Выборка.Следующий();

ОбновитьДатуДвижений = Выборка.Дата <> Дата;

 

КонецЕсли;

 

// Установить всем новую дату, если нужно.

Если ОбновитьДатуДвижений Тогда

 

Если Не Движения.ОстаткиМатериалов.Выбран() И Не Движения.ОстаткиМатериалов.Модифицированность() Тогда

Движения.ОстаткиМатериалов.Прочитать();

 

КонецЕсли;

 

Для Каждого ЗаписьРегистра Из Движения.ОстаткиМатериалов Цикл

ЗаписьРегистра.Период = Дата;

 

КонецЦикла;

 

КонецЕсли;

 

КонецПроцедуры

Как вы видите, в этом случае обработчик содержит больше кода за счет дополнительных проверок, которые выполняются в результате возможности как интерактивной, так и программной записи объекта.

Поясним содержание обработчика. Если записывается новый документ или были изменены его движения, следует обновить дату движений. В противном случае мы считываем запросом дату документа из базы данных и сравниваем ее с датой, установленной у записываемого объекта. Если даты разные, также следует обновить дату движений.

Перед установкой даты мы проверяем, был ли прочитан набор записей в свойстве Движения объекта и изменялся ли он. Если оба эти условия ложны, значит набор записей в свойстве Движения объекта пуст, и это состояние не связано с его изменением. В этом случае, чтобы предотвратить ошибочное удаление записей в регистре (перезапись пустым набором записей), мы предварительно читаем движения из регистра в набор записей в свойстве Движения.

Затем, как и в предыдущем случае (при записи из формы документа), устанавливаем нужную дату для всех записей этого набора. При выполнении записи объекта Документ этот набор будет записан в регистр накопления.