Как правильно зарегистрировать внешнюю обработку в 1С:Розница и почему она может не отображаться в разделах?

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

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

Разбор базовой структуры СведенияОВнешнейОбработке

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

Рассмотрим пример кода, который часто используется в качестве базового:


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

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

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

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

Проблема: Обработка загружена, но ее нет в списке

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

Проанализируем ситуацию: ранее созданные обработки могут быть видны, а новые — нет. Это связано с тем, что современные версии БСП требуют более четкого указания метаданных и разделов, к которым привязана обработка. Если в структуре ПараметрыРегистрации отсутствует массив Разделы, система может не предложить пользователю места для размещения по умолчанию.

Решение 1: Программное указание разделов

Чтобы обработка автоматически «видела» нужные разделы программы, мы можем добавить в код регистрации массив имен подсистем. Выглядит это следующим образом:


// В функции СведенияОВнешнейОбработке
МассивРазделов = Новый Массив;
МассивРазделов.Добавить("Продажи"); // Имя подсистемы в метаданных
МассивРазделов.Добавить("Склад");
ПараметрыРегистрации.Вставить("Разделы", МассивРазделов);

Это позволит системе при регистрации сразу сопоставить обработку с конкретными пунктами меню «Дополнительные обработки» в указанных разделах.

Решение 2: Совместимость версий БСП

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

ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");

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

Решение 3: Проверка типов значений для параметра «Вид»

Иногда использование строкового значения типа "ДополнительнаяОбработка" приводит к ошибкам интерпретации. Рекомендуется использовать предопределенные значения или свойства общих модулей, чтобы избежать опечаток. Рассмотрим пример:

ПараметрыРегистрации.Вставить("Вид", ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта());

Хотя в примере автора использовалась «ДополнительнаяОбработка», если вы создаете инструмент для заполнения табличных частей документов, используйте ВидОбработкиЗаполнениеОбъекта и обязательно добавляйте параметр Назначение.

Нюансы работы с справочником Идентификаторы объектов метаданных

Выясним причину, по которой иногда приходится прибегать к «костылям», как это сделал автор в сообщении №4. В 1С существует справочник ИдентификаторыОбъектовМетаданных. Если этот справочник не актуален (например, после обновления программы или изменения состава подсистем), механизм дополнительных обработок может давать сбои.

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

  1. Запустите программу с параметром /С ЗапуститьОбновлениеИнформационнойБазы.
  2. Или воспользуйтесь стандартной обработкой «Обновление идентификаторов объектов метаданных» (в составе инструментов разработчика или через «Обслуживание»).
  3. После актуализации справочника попробуйте снова указать размещение обработки.

Режимы запуска команд: Важные отличия

Проанализируем параметр Использование в таблице команд. От него зависит, как система будет вызывать ваш код:

Безопасный режим и требования для Fresh

Обратите внимание на параметр БезопасныйРежим. Если вы устанавливаете его в Истина, обработка не сможет:

  1. Работать с файловой системой напрямую (кроме временных файлов).
  2. Использовать COM-объекты.
  3. Устанавливать привилегированный режим.

Если ваша обработка должна обращаться к внешним ресурсам или драйверам оборудования (например, для ЕГАИС), может потребоваться значение Ложь. Однако для работы в облачных сервисах (1C:Fresh) использование небезопасного режима запрещено без специального описания разрешений (параметр Разрешения в структуре регистрации).

Итоги и рекомендации

Подведем итог нашего анализа. Для того чтобы ваша внешняя обработка в 1С:Розница 2.2 работала стабильно и была видна пользователям, придерживайтесь следующих правил:

  1. Всегда проверяйте соответствие колонок в функции ПолучитьТаблицуКоманд актуальным требованиям вашей версии БСП.
  2. Явно указывайте Разделы в параметрах регистрации, чтобы избежать ручной настройки размещения.
  3. Если обработка не появляется, проверьте актуальность справочника Идентификаторы объектов метаданных.
  4. Используйте параметр Назначение (массив полных имен объектов), если вид обработки отличается от «ДополнительнаяОбработка».
  5. Не забывайте настраивать Быстрый доступ для конкретных пользователей в карточке регистрации обработки в самой программе.

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

← На главную