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