Книга: Разработка интерфейса прикладных решений на платформе "1С:Предприятие 8"
Назад: Программная установка данных заполнения
Дальше: Глава 3.11. Проверка заполнения

Событие «Обработка заполнения»

Если разработчика не устраивают значения заполнения, установленные в конфигураторе, или значения, переданные в данные заполнения, он может реализовать собственный алгоритм заполнения нового объекта данными. Для этого у объекта есть событие Обработка заполнения, которое может быть обработано в серверной процедуре.

Чтобы лучше представлять себе возможности программной обработки заполнения, рассмотрим еще раз последовательность, в которой платформа использует те или иные элементы механизма заполнения (рис. 3.47).

Рис. 3.47. Последовательность автоматического заполнения реквизитов нового объекта

Сначала будет вызван обработчик события Обработка заполнения и выполнен его код.

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

Если же после выхода из обработчика значение его параметра СтандартнаяОбработка будет Истина (по умолчанию), то сначала платформа попытается заполнить значения реквизитов из данных заполнения.

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

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

Какие возможны варианты? Мы уже говорили о них, перечислим еще раз.

В качестве примера рассмотрим процедуру Обработка заполнения документа Накладная (листинг 3.40).

Примечание

Пример можно посмотреть в демонстрационной базе «Начальное заполнение», модуль документа Накладная, процедура ОбработкаЗаполнения().

Листинг 3.40. Различные варианты обработки автоматического заполнения

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

 

Сообщение = Новый СообщениеПользователю;

Если ДанныеЗаполнения = Неопределено Тогда

Сообщение.Текст = "Ввод новой накладной";

 

ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Поставщики") Тогда

Сообщение.Текст = "Ввод накладной на основании поставщика";

Поставщик = ДанныеЗаполнения;

 

ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда

Сообщение.Текст = "Ввод накладной из отобранного списка";

 

СтандартнаяОбработка = Ложь;

 

ОтобранныйПоставщик = Неопределено;

Если ДанныеЗаполнения.Свойство("Поставщик", ОтобранныйПоставщик) Тогда

Поставщик = ОтобранныйПоставщик;

 

КонецЕсли;

 

КонецЕсли;

 

Сообщение.Сообщить();

 

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

В этой процедуре для наглядности в каждом из возможных вариантов выводится информационное сообщение.

При обычном вводе (Если ДанныеЗаполнения = Неопределено Тогда) не выполняется никаких действий, документ заполняется стандартным способом – реквизит Склад заполняется своим значением заполнения.

При вводе на основании поставщика (ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Поставщики") Тогда) реквизиту Поставщик устанавливается значение того поставщика, на основании которого введена эта накладная. И также используются возможности стандартного заполнения – реквизит Склад заполняется своим значением заполнения.

При вводе из отобранного списка (ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда) стандартное заполнение не используется (склад не заполняется), а из переданного отбора берется только значение для реквизита Поставщик (другие элементы отбора игнорируются).

Назад: Программная установка данных заполнения
Дальше: Глава 3.11. Проверка заполнения