Как подключить внешнюю обработку заполнения табличной части к новому документу в 1С?

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

При разработке собственных подсистем в конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как «1С:Бухгалтерия 3.0», «1С:ERP» или «1С:Комплексная автоматизация», разработчики часто сталкиваются с проблемой: внешняя обработка заполнения табличной части корректно регистрируется в справочнике «Дополнительные отчеты и обработки», но кнопка «Заполнить» не появляется в форме документа. В этой статье мы подробно разберем, какие шаги необходимо предпринять, чтобы стандартный механизм БСП «увидел» ваш новый документ и позволил подключать к нему внешние инструменты.

Шаг 1. Регистрация документа в определяемых типах

Первое, с чего стоит начать — это анализ того, как система определяет список объектов, для которых разрешено использование дополнительных команд. В БСП за это отвечают специальные метаданные — Определяемые типы. Если ваш новый документ не включен в этот список, вы не сможете даже выбрать его в качестве назначения при регистрации обработки.

Проанализируем ситуацию: для того чтобы документ стал доступен в справочнике «Дополнительные отчеты и обработки», его необходимо добавить в следующие определяемые типы:

  1. ОбъектСДополнительнымиКомандами — этот тип определяет состав объектов, для которых могут быть созданы команды (заполнение, печать, создание на основании).
  2. ВладелецДополнительныхОтчетовИОбработок — позволяет документу выступать в роли владельца для внешних обработок в интерфейсе.

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

Шаг 2. Обновление идентификаторов объектов метаданных

БСП активно использует справочник ИдентификаторыОбъектовМетаданных для управления правами и настройками интерфейса. Если вы только что создали документ, система может «не знать» о его существовании в контексте дополнительных обработок. Рассмотрим, как принудительно обновить эти данные.

Существует несколько способов обновления:

  1. Запуск информационной базы с параметром командной строки /С ЗапуститьОбновлениеИнформационнойБазы.
  2. Использование консоли кода или внешней обработки для запуска метода:

Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника();

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

Шаг 3. Внедрение программного кода в форму документа

Даже если документ зарегистрирован в метаданных, кнопка «Заполнить» не появится на форме «магическим» образом. Нам необходимо подготовить форму документа к приему команд от БСП. Разберем, какой код должен присутствовать в модуле управляемой формы документа.

Выясним причину: механизм подключаемых команд работает через подписку на события формы. Нам нужно инициализировать эти команды при создании формы и обновлять их при изменении данных. Рассмотрим пример стандартного кода, который необходимо добавить в модуль формы:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // СтандартныеПодсистемы.ПодключаемыеКоманды
    ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
    // Конец СтандартныеПодсистемы.ПодключаемыеКоманды   
    
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
    
    // СтандартныеПодсистемы.ПодключаемыеКоманды
    ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
    // Конец СтандартныеПодсистемы.ПодключаемыеКоманды
    
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    // СтандартныеПодсистемы.ПодключаемыеКоманды
    ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
    // Конец СтандартныеПодсистемы.ПодключаемыеКоманды  
    
КонецПроцедуры

Важный момент: если на форме вашего документа несколько табличных частей и вы хотите, чтобы кнопка «Заполнить» располагалась над конкретной ТЧ, в процедуре ПриСозданииНаСервере можно явно указать имя группы команд. Например:

ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, "ГруппаКомандЗаполненияТЧ");

Шаг 4. Настройка интерфейса формы (Группы команд)

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

Если её нет, создадим её вручную:

  1. Добавьте на форму (в командную панель формы или командную панель конкретной таблицы) новую группу.
  2. Установите вид группы — Подменю.
  3. Имя группы должно соответствовать тому, что ожидает БСП (обычно ПодменюЗаполнить или ГруппаЗаполнение).

Шаг 5. Требования к модулю внешней обработки

Теперь посмотрим на саму внешнюю обработку. Проблема может крыться в функции СведенияОВнешнейОбработке, которая находится в модуле объекта обработки. Для заполнения табличных частей важно правильно указать тип команды.

Рассмотрим структуру настройки команды:


Функция СведенияОВнешнейОбработке() Экспорт
     ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
    
    // Определяем назначение
    ПараметрыРегистрации.Назначение.Добавить("Документ.ХХХВводНачальныхОстатковПоХХ");
    
    // Добавляем команду
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = "Заполнить остатки по данным ХХ";
    НоваяКоманда.Идентификатор = "ЗаполнитьОстатки";
    
    // КРИТИЧЕСКИ ВАЖНО: правильный тип использования
    // Для заполнения формы без записи объекта:
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыЗаполнениеФормы(); 
    
    НоваяКоманда.ПоказыватьОповещение = Истина;
    
    Возврат ПараметрыРегистрации;
КонецФункции

Если вы выбрали ТипКомандыЗаполнениеФормы(), то в модуле формы внешней обработки должна быть экспортная процедура ВыполнитьКоманду(ИмяКоманды, ПараметрыВыполнения). Если же используется ВызовСерверногоМетода, то процедура ВыполнитьКоманду должна располагаться в модуле объекта обработки.

Шаг 6. Проверка функциональных опций

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

Разберем, где это проверить:

  1. Перейдем в раздел Администрирование — Печатные формы, отчеты и обработки.
  2. Убедимся, что установлен флаг Дополнительные отчеты и обработки.
  3. В самом справочнике «Дополнительные отчеты и обработки» откроем карточку вашей обработки.
  4. Проверим статус публикации: он должен быть Используется или В работе (для тестирования).
  5. На вкладке «Команды» проверим колонку Видимость — там должен быть указан ваш документ.

Резюме

Подключение внешнего заполнения к новому объекту — это комплексная задача, требующая изменений на трех уровнях:

Соблюдение этого алгоритма гарантирует стабильную работу ваших доработок и их бесшовную интеграцию в типовой интерфейс конфигурации.

← На главную