Почему исчезла кнопка «Заполнить» внешней обработки в 1С:Бухгалтерия 3.0 и как её вернуть?

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

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

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

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

Рассмотрим, как выглядел устаревший вариант экспортной функции СведенияОВнешнейОбработке() в модуле объекта обработки, вызывающий сбой:


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

Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
    Команды.Колонки.Добавить("Скрыть", Новый ОписаниеТипов("Булево"));
    Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "", Скрыть = Ложь)
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление;
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
    НоваяКоманда.Скрыть = Скрыть;
КонецПроцедуры

Решение: переход на типовой шаблон БСП

Для восстановления работоспособности обработки перепишем функцию СведенияОВнешнейОбработке(), задействовав штатный программный интерфейс БСП. Вместо ручного конструирования таблиц значений и структур используем метод ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке() с явным указанием совместимой версии БСП (стандартно указывается значение "2.1.2.1" или выше), а также системные методы перечисления типов команд.

Посмотрим на исправленный и оптимизированный вариант:


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

Пошаговый алгоритм обновления и проверки обработки

Проанализируем сопутствующие факторы, из-за которых кнопка может не появиться сразу после изменения исходного кода:

  1. Инкремент номера версии обработки: Обязательно увеличьте номер версии в коде (например, измените ПараметрыРегистрации.Версия = "1.0" на "1.1"). Это заставит подсистему дополнительных отчетов и обработок гарантированно обновить закэшированные сведения о командах.
  2. Обновление файла в информационной базе: Откройте справочник Дополнительные отчеты и обработки (раздел «Администрирование» — «Печатные формы, отчеты и обработки»), найдите нужный элемент, нажмите кнопку Загрузить из файла, выберите обновленный файл обработки и запишите элемент справочника.
  3. Проверка видимости и быстрого доступа: В карточке обработки в таблице команд убедитесь, что колонка Быстрый доступ настроена для нужных пользователей или групп, а публикация находится в статусе Используется, а не «Отключена» или «Режим отладки».
  4. Проверка обработчика выполнения: Убедитесь, что в модуле объекта обработки присутствует экспортная процедура с актуальной сигнатурой БСП:
    
    Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения) Экспорт
        // Логика обработки и модификации формы или объекта
    КонецПроцедуры
    
  5. Проверка командной панели документа: В управляемых формах БСП при нехватке свободного места на панели кнопка заполнения может быть автоматически перенесена внутрь выпадающего подменю Заполнить или в системное меню Еще.

После корректного переопределения регистрационной структуры и обновления элемента в справочнике кнопка «Заполнить» снова появится в командной панели целевого документа.

← На главную