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