При разработке собственных подсистем в конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как «1С:Бухгалтерия 3.0», «1С:ERP» или «1С:Комплексная автоматизация», разработчики часто сталкиваются с проблемой: внешняя обработка заполнения табличной части корректно регистрируется в справочнике «Дополнительные отчеты и обработки», но кнопка «Заполнить» не появляется в форме документа. В этой статье мы подробно разберем, какие шаги необходимо предпринять, чтобы стандартный механизм БСП «увидел» ваш новый документ и позволил подключать к нему внешние инструменты.
Первое, с чего стоит начать — это анализ того, как система определяет список объектов, для которых разрешено использование дополнительных команд. В БСП за это отвечают специальные метаданные — Определяемые типы. Если ваш новый документ не включен в этот список, вы не сможете даже выбрать его в качестве назначения при регистрации обработки.
Проанализируем ситуацию: для того чтобы документ стал доступен в справочнике «Дополнительные отчеты и обработки», его необходимо добавить в следующие определяемые типы:
После добавления документа в эти типы в конфигураторе, система позволит выбрать ваш документ Документ.ХХХВводНачальныхОстатковПоХХ в списке назначений обработки.
БСП активно использует справочник ИдентификаторыОбъектовМетаданных для управления правами и настройками интерфейса. Если вы только что создали документ, система может «не знать» о его существовании в контексте дополнительных обработок. Рассмотрим, как принудительно обновить эти данные.
Существует несколько способов обновления:
/С ЗапуститьОбновлениеИнформационнойБазы.
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника();
Это гарантирует, что ваш новый документ получит уникальный идентификатор в системе, который будет использоваться механизмом подключения команд.
Даже если документ зарегистрирован в метаданных, кнопка «Заполнить» не появится на форме «магическим» образом. Нам необходимо подготовить форму документа к приему команд от БСП. Разберем, какой код должен присутствовать в модуле управляемой формы документа.
Выясним причину: механизм подключаемых команд работает через подписку на события формы. Нам нужно инициализировать эти команды при создании формы и обновлять их при изменении данных. Рассмотрим пример стандартного кода, который необходимо добавить в модуль формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// СтандартныеПодсистемы.ПодключаемыеКоманды
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры
Важный момент: если на форме вашего документа несколько табличных частей и вы хотите, чтобы кнопка «Заполнить» располагалась над конкретной ТЧ, в процедуре ПриСозданииНаСервере можно явно указать имя группы команд. Например:
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, "ГруппаКомандЗаполненияТЧ");
Для того чтобы команды отрисовались, на форме должны существовать соответствующие «контейнеры». Проанализируем структуру элементов формы. Обычно это группы вида Подменю. Если в конфигурации используется стандартная БСП, то на форме часто уже есть группа ПодменюЗаполнить.
Если её нет, создадим её вручную:
ПодменюЗаполнить или ГруппаЗаполнение).Теперь посмотрим на саму внешнюю обработку. Проблема может крыться в функции СведенияОВнешнейОбработке, которая находится в модуле объекта обработки. Для заполнения табличных частей важно правильно указать тип команды.
Рассмотрим структуру настройки команды:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
// Определяем назначение
ПараметрыРегистрации.Назначение.Добавить("Документ.ХХХВводНачальныхОстатковПоХХ");
// Добавляем команду
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Заполнить остатки по данным ХХ";
НоваяКоманда.Идентификатор = "ЗаполнитьОстатки";
// КРИТИЧЕСКИ ВАЖНО: правильный тип использования
// Для заполнения формы без записи объекта:
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыЗаполнениеФормы();
НоваяКоманда.ПоказыватьОповещение = Истина;
Возврат ПараметрыРегистрации;
КонецФункции
Если вы выбрали ТипКомандыЗаполнениеФормы(), то в модуле формы внешней обработки должна быть экспортная процедура ВыполнитьКоманду(ИмяКоманды, ПараметрыВыполнения). Если же используется ВызовСерверногоМетода, то процедура ВыполнитьКоманду должна располагаться в модуле объекта обработки.
Если все предыдущие шаги выполнены, но кнопки по-прежнему нет, проверим настройки самой программы в режиме «1С:Предприятие». В любой конфигурации на базе БСП существует функциональная опция, отвечающая за работу внешних отчетов и обработок.
Разберем, где это проверить:
Подключение внешнего заполнения к новому объекту — это комплексная задача, требующая изменений на трех уровнях:
ПодключаемыеКоманды.СведенияОВнешнейОбработке.Соблюдение этого алгоритма гарантирует стабильную работу ваших доработок и их бесшовную интеграцию в типовой интерфейс конфигурации.