Где находится обработчик ввода на основании в 1С:УПП 1.3?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При разработке и доработке типовых конфигураций, таких как 1С:Управление производственным предприятием (УПП 1.3), начинающие специалисты часто сталкиваются с ситуацией: в командной панели документа есть стандартная кнопка ввода на основании (синяя стрелка вправо или подменю «Действия — Ввести на основании»), однако при просмотре свойств командной панели или кнопки на форме обработчик нажатия отсутствует. Выясним причину такого поведения платформы и разберем по шагам, где на самом деле выполняется алгоритм заполнения подчиненного документа.

Архитектура стандартного механизма ввода на основании

Проанализируем, как платформа 1С обрабатывает интерактивное нажатие кнопки ввода на основании. Кнопка с синей стрелкой является стандартной платформенной командой. Для нее не требуется создавать отдельное событие в модуле формы исходного документа, так как платформа берет управление на себя:

  1. Платформа определяет список объектов, для которых текущий документ указан в ветке метаданных «Вводится на основании».
  2. При выборе пользователем нужного документа система создает в оперативной памяти новый экземпляр этого подчиненного объекта через внутренний вызов метода Заполнить().
  3. В момент вызова метода Заполнить() управление передается в модуль объекта создаваемого (нового) документа.
  4. После выполнения алгоритма заполнения платформа открывает форму созданного документа для пользователя.

Таким образом, искать код в модуле формы исходного документа (например, ОтчетПроизводстваЗаСмену) бессмысленно — логика формирования нового документа находится исключительно в объекте-приемнике.

В каком модуле и процедуре искать обработчик

Рассмотрим частую ошибку разработчиков: поиск процедуры ОбработкаЗаполнения в модуле формы подчиненного документа. В платформе 1С:Предприятие логика заполнения данных объекта отделена от интерфейса и располагается в модуле объекта целевого документа.

Разберем по шагам, как найти нужный обработчик в конфигураторе:

  1. Определим, какой именно документ создается на основании текущего (например, если на основании документа ОтчетПроизводстваЗаСмену создается ТребованиеНакладная или ПеремещениеТоваров, открывать необходимо именно создаваемый документ).
  2. В дереве метаданных найдем создаваемый документ, кликнем по нему правой кнопкой мыши и выберем пункт «Открыть модуль объекта» (не путать с модулем формы).
  3. В открывшемся модуле найдем экспортную предопределенную процедуру ОбработкаЗаполнения.

Посмотрим на типовой пример структуры такой процедуры в модуле объекта подчиненного документа:


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

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

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

Параметры процедуры и стандартная обработка

Рассмотрим подробнее входящие параметры процедуры ОбработкаЗаполнения:

  1. ДанныеЗаполнения: в этот параметр платформа передает ссылку на документ, из которого был вызван ввод на основании. Стоит учитывать, что при программном создании документа в качестве этого параметра может выступать структура, табличная часть или любой другой тип данных.
  2. СтандартнаяОбработка: булевый флаг. По умолчанию он равен Истина. В этом случае платформа автоматически переносит значения всех реквизитов шапки и строк табличных частей, имена и типы которых полностью совпадают в обоих документах. Если требуется полностью переопределить логику и исключить нежелательное копирование, переменной СтандартнаяОбработка присваивают значение Ложь.

Где еще может быть описана логика ввода на основании

Если в модуле объекта подчиненного документа процедура ОбработкаЗаполнения отсутствует или в ней нет условий для вашего документа, проанализируем альтернативные места реализации:

  1. Стандартный платформенный перенос: если процедуры ОбработкаЗаполнения нет вовсе, а документ все равно успешно заполняется, значит, работает механизм платформы по умолчанию. Платформа сопоставляет имена и типы реквизитов двух документов и копирует данные без использования программного кода.
  2. Подписки на события: алгоритм может быть вынесен в подписку на событие с источником соответствующего типа документа и событием ОбработкаЗаполнения. Этот подход часто используется при доработках типовых конфигураций, чтобы не изменять модуль объекта и не усложнять последующее обновление программы.
  3. Программный ввод на форме: в некоторых нестандартных ситуациях разработчики намеренно скрывают платформенную кнопку, добавляя собственную кнопку на командную панель формы. В ее обработчике создается новый объект через Документы[ИмяДокумента].СоздатьДокумент(), вызывается метод Заполнить(ДокументОснование) и выполняется открытие формы нового документа с помощью метода ОткрытьФорму().

Условия доступности команды ввода на основании

Если кнопка ввода на основании не отображается или неактивна в режиме «1С:Предприятие», проверим следующие условия:

  1. Запись документа: документ-источник должен быть обязательно сохранен в базе данных. Для нового, еще не записанного объекта платформенная команда ввода на основании блокируется.
  2. Связь в метаданных: в конфигураторе на вкладке «Ввод на основании» у подчиненного документа должен быть отмечен флажком документ-источник.
  3. Права доступа: у текущего пользователя должны быть права на чтение документа-основания и интерактивное добавление подчиненного документа. При отсутствии прав команда скрывается из интерфейса.
← На главную