Как добавить команду обработки в меню «Заполнить» табличной части в управляемой форме?

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

Многие разработчики при работе с управляемыми формами сталкиваются с необходимостью размещения функционала внешних обработок не в общем меню документа, а непосредственно в контекстном меню или командной панели конкретной табличной части. Давайте разберем, почему это нельзя сделать штатными средствами БСП и как реализовать это архитектурно правильно.

Почему не получается прикрепить обработку стандартным способом?

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

Решение через расширения конфигурации

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

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

В самом обработчике у вас есть два пути: либо перенести логику из внешней обработки непосредственно в код расширения (что предпочтительнее для производительности), либо вызвать внешнюю обработку программно. Рассмотрим пример программного вызова:


&НаКлиенте
Процедура КомандаЗаполнитьТЧ(Команда)
    // Путь к файлу внешней обработки
    АдресФайла = \"C:\\Обработки\\ЗаполнениеТЧ.epf\";
    ИмяОбработки = ВнешниеОбработки.Подключить(АдресФайла);
    ОбъектОбработки = ВнешниеОбработки.Создать(ИмяОбработки);
    
    // Передаем ссылку на текущий документ для заполнения
    ОбъектОбработки.ВыполнитьЗаполнение(Объект.Ссылка);
КонецПроцедуры

Использование переопределяемых модулей и программное создание кнопок

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

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Добавляем новую команду формы
    НоваяКоманда = ЭтаФорма.Команды.Добавить(\"МояКомандаЗаполнения\");
    НоваяКоманда.Действие = \"КомандаЗаполнитьТЧ\";
    НоваяКоманда.Заголовок = \"Заполнить через обработку\";
    
    // Добавляем кнопку на панель
    НоваяКнопка = Элементы.Добавить(\"КнопкаЗаполненияТЧ\", Тип(\"КнопкаФормы\"), Элементы.ГруппаКомандТовары);
    НоваяКнопка.ИмяКоманды = \"МояКомандаЗаполнения\";
КонецПроцедуры

Важные нюансы реализации

При реализации данного функционала обратите внимание на следующие аспекты:

Подводя итог, можно сказать, что хотя штатного «галочного» механизма нет, задача легко решается путем программного управления элементами формы через расширения. Такой подход делает интерфейс 1С чистым, а пользовательский опыт — комфортным, так как кнопка будет находиться ровно там, где ожидается пользователем.

← На главную