Почему не отображается внешняя обработка заполнения табличной части в 1С:Розница и как это исправить?

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

При разработке внешних обработок заполнения табличных частей для конфигураций на платформе 1С:Предприятие 8.3 (особенно использующих Библиотеку стандартных подсистем — БСП, таких как «1С:Розница 2.2», «1С:Управление торговлей» и другие) разработчики часто сталкиваются с ситуацией, когда обработка успешно регистрируется в системе, но заветная кнопка на форме документа так и не появляется.

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

Причина 1. Банальная невнимательность: имя команды по умолчанию

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

Выясним причину. В коде регистрации была добавлена следующая команда:


ДобавитьКоманду(Команды, "Заполнить документ", "ЗаполнитьДокумент", "ВызовКлиентскогоМетода", Ложь,);

Обратите внимание на первый параметр — представление команды: "Заполнить документ". Разработчик ожидал увидеть на форме кнопку с названием самой обработки (например, «Установка закупочных цен» или «Уст.закуп.цены»), однако платформа строго следует заданным параметрам регистрации. Кнопка действительно появилась, но под стандартным именем «Заполнить документ» внутри выпадающего меню «Заполнить» в командной панели табличной части документа.

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


ДобавитьКоманду(Команды, "Установить закупочные цены", "УстановитьЗакупочныеЦены", "ВызовКлиентскогоМетода", Ложь, "");

Причина 2. Кэширование параметров регистрации в информационной базе

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

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

Проанализируем правильный алгоритм обновления параметров:

  1. Перейдите в раздел Администрирование — Печатные формы, отчеты и обработки — Дополнительные отчеты и обработки.
  2. Найдите вашу обработку в списке и откройте её карточку.
  3. Нажмите кнопку «Обновить из файла» и выберите измененный файл внешней обработки (с расширением .epf) на вашем диске.
  4. Платформа перезапишет параметры регистрации, обновит таблицу команд и очистит кэш.
  5. Нажмите кнопку «Записать и закрыть».

Причина 3. Ошибки привязки клиентских и серверных методов (Параметр «Использование»)

В коде автора для команды указан тип запуска "ВызовКлиентскогоМетода". Это важный параметр, который накладывает жесткие требования к архитектуре самой обработки. Рассмотрим подробнее, какие варианты параметра Использование (тип запуска команды) предоставляет БСП и как их правильно обрабатывать:

  1. ВызовКлиентскогоМетода — используется, когда необходимо открыть форму внешней обработки или выполнить клиентский код.

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

    
    &НаКлиенте
    Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
        // Здесь пишется клиентская логика
    КонецПроцедуры
    

    Если формы нет, либо процедура не объявлена как экспортная, либо допущена ошибка в имени — кнопка не сработает, а система выдаст ошибку о недоступности метода.

  2. ЗаполнениеФормы — идеальный вариант для заполнения табличной части открытого документа «на лету» без предварительной записи в базу данных.

    В этом случае форма обработки не требуется. Вся логика выполняется в модуле объекта обработки. Там должна присутствовать следующая экспортная процедура:

    
    Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения) Экспорт
        // Логика заполнения ТЧ документа через API БСП
    КонецПроцедуры
    
  3. ВызовСерверногоМетода — используется для фоновой обработки данных (например, когда документ нужно записать или провести сразу на сервере). Код также размещается в модуле объекта.

Причина 4. Жесткое кодирование (Hardcode) параметров БСП

В исходном коде автора для регистрации используются строковые литералы: "ЗаполнениеОбъекта", "ВызовКлиентскогоМетода". Это рабочий вариант, но он не является лучшей практикой разработки под БСП.

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

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


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

Причина 5. Ограничения безопасного режима выполнения

Обратите внимание на строчку в коде автора: ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);.

Если ваша обработка «Установка закупочных цен» должна выполнять какие-либо из следующих действий:

то в безопасном режиме платформа 1С заблокирует выполнение этих операций по соображениям безопасности. Обработка просто аварийно завершит работу при попытке совершить небезопасное действие.

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

Причина 6. Отключение функциональной опции или не настроен доступ

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

  1. Проверка функциональной опции.

    Убедитесь, что в базе вообще включена возможность использования дополнительных обработок. Для этого перейдите в раздел НСИ и администрирование (или просто Администрирование) — Печатные формы, отчеты и обработки. Флажок «Дополнительные отчеты и обработки» должен быть обязательно включен.

  2. Проверка прав доступа и разделов видимости.

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

Причина 7. Отсутствие поддержки БСП в кастомной форме документа

Типовой документ «Перемещение товаров» в «1С:Розница 2.2» по умолчанию полностью поддерживает подсистему дополнительных отчетов и обработок БСП. Кнопка в меню «Заполнить» внедряется на форму динамически в момент ее создания на сервере.

Однако, если ваша конфигурация была доработана (снята с поддержки) и для документа была создана индивидуальная, кастомная форма, автоматическое внедрение команд может сломаться.

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Стандартные вызовы инициализации формы
    // ...
    
    // Интеграция с подсистемой дополнительных отчетов и обработок
    ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтотОбъект);
    
КонецПроцедуры

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

Резюме

Мы детально разобрали процесс поиска и устранения ошибок при внедрении внешних обработок заполнения ТЧ. Чтобы ваша обработка всегда успешно отображалась на формах документов, следуйте простому правилу чек-листа:

← На главную