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