#std396

Обработчик события ОбработкаЗаполнения

1.

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

Типовые проверки:

  • запрет ввода на основании группы, когда команда Создать на основании одинаково доступна для групп и элементов справочника или плана видов характеристик;
  • запрет ввода на основании непроведенного документа.
2.

Чтобы объяснить пользователю причину отказа, используйте ВызватьИсключение в обработчике ОбработкаЗаполнения.

Пример

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

    Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Сотрудники") Тогда
        Если ПолучитьЗначениеРеквизита(ДанныеЗаполнения, "ЭтоГруппа") Тогда
            ВызватьИсключение "Ввод приказа о приеме на основании группы сотрудников невозможен!
                            |Выберите сотрудника. Для раскрытия группы используйте клавиши Ctrl и стрелку вниз";
        КонецЕсли;

        // Обработка заполнения объекта по данным заполнения.

    КонецЕсли;

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

Не выносите такую проверку в отдельные команды ввода на основании и их обработчики.

3.

Рекомендуется придерживаться единой логической структуры обработчика ОбработкаЗаполнения.

3.1.

Сначала выполняйте специальное заполнение в зависимости от типа ДанныеЗаполнения.

Пример

ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
Если ТипДанныхЗаполнения = Тип("Структура") Тогда
    ЗаполнитьДокументПоОтбору(ДанныеЗаполнения);
ИначеЕсли ТипДанныхЗаполнения = Тип("ДокументСсылка.ЗаказКлиента") Тогда
    ЗаполнитьДокументНаОснованииЗаказаКлиента(ДанныеЗаполнения);
// ...
КонецЕсли;
3.2.

После специального заполнения выполняйте общее заполнение: присваивайте значения по умолчанию только тем реквизитам, которые еще не заполнены.

Перед присвоением проверяйте заполненность реквизита через ЗначениеЗаполнено().

Пример

Если Не ЗначениеЗаполнено(Подразделение) Тогда
    Подразделение = ЗначениеНастроекПовтИсп.ПодразделениеПоУмолчанию();
КонецЕсли;

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

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

См. также
Источник

https://its.1c.ru/db/v8std#content:396