Переносим файл .epf внутрь расширения конфигурации: объект, права, вызов
Содержание
Добавить внешнюю обработку
в расширение 1С можно двумя путями. Первый — сделать её «своей» обработкой расширения: в Конфигураторе создать в ветке Обработки расширения новый объект и перенести в него реквизиты, формы и модуль из файла .epf. Второй — оставить обработку внешней, положить файл в общий макет расширения и подключать его из кода методом ВнешниеОбработки.Подключить().
Первый путь выбирают, когда обработкой пользуются каждый день и её нужно поставить в меню раздела с нормальными правами. Второй — когда файл часто меняет сторонний разработчик и пересобирать расширение под каждую его версию неудобно. Есть и третий вариант без расширения — справочник Дополнительные отчеты и обработки в типовых конфигурациях на БСП, — но к расширению он отношения не имеет.
Какой способ выбрать: объект расширения, макет или дополнительные обработки
Решение зависит от того, кто правит код обработки и как часто.
| Способ | Когда подходит | Минусы |
|---|---|---|
| Своя обработка расширения | Обработка стабильна, нужна в меню раздела, нужны права через роль | Любая правка кода — новая версия расширения |
.epf в общем макете расширения | Файл обновляет сторонний разработчик, расширение служит «упаковкой» и точкой вызова | Сложнее отлаживать, нужно продумать безопасный режим |
Дополнительные отчеты и обработки (БСП) | Нужно просто дать пользователям файл с регистрацией и командами | Обработку надо дорабатывать под интерфейс регистрации, расширение не участвует |
Дальше разобраны первые два способа: именно они отвечают на вопрос «как завести внешнюю обработку в расширение».
Подготовка: файл .epf, расширение и префикс имён
Перед переносом соберите всё необходимое.
- 📄 Файл обработки
.epfи, если есть, исходники от разработчика. Откройте его в Конфигураторе черезФайл → Открытьи убедитесь, что он открывается без ошибок в вашей версии платформы. - 🧩 Расширение. Если расширения ещё нет, создайте его:
Конфигурация → Расширения конфигурации, кнопка «Добавить». Расширения появились в платформе 8.3.6, но для работы с собственными объектами лучше актуальная платформа 8.3.2x. - 🏷️ Префикс имён. В свойствах расширения задайте префикс, например
Расш1_. Имена собственных объектов расширения должны начинаться с него, иначе проверка конфигурации выдаст предупреждение, а при совпадении имён с объектами основной конфигурации расширение не применится. - 💾 Копия базы. Расширение не меняет основную конфигурацию, но при обновлении структуры базы данных ошибка в нём может помешать запуску у пользователей.
Сначала посмотрите, к каким объектам конфигурации обращается обработка: справочникам, регистрам, общим модулям. Если она вызывает процедуры общих модулей, расширению понадобится доступ к ним. Экспортные процедуры общих модулей вызываются из кода расширения напрямую, заимствовать модуль ради вызова не нужно.
Сохраните исходную обработку
Положите исходный .epf рядом с выгрузкой расширения .cfe. Если перенос пойдёт не так, вы всегда вернётесь к рабочему файлу, а позже сможете сравнить поведение «до» и «после».
Создание обработки в дереве метаданных расширения
Это основной способ. Обработка становится полноценным объектом расширения: у неё есть свои формы, модуль объекта, модуль менеджера, команды и права.
Шаг 1. Добавьте объект
- Откройте дерево расширения:
Конфигурация → Расширения конфигурации, выделите расширение, кнопка «Открыть». - В дереве найдите ветку
Обработки, щёлкните по ней правой кнопкой и выберите «Добавить». - Задайте имя с префиксом, например
Расш1_ЗагрузкаЦенПоставщика, и синоним — его пользователи увидят в интерфейсе.
Шаг 2. Замените содержимое внешней обработкой
В контекстном меню созданной обработки есть команда Заменить на внешнюю обработку, отчет.... Она берёт файл .epf и переносит в объект его реквизиты, табличные части, формы, макеты и модуль. Имя объекта при этом остаётся вашим, с префиксом.
Обратная команда — Сохранить как внешнюю обработку, отчет.... Она пригодится, чтобы отдать обработку на доработку разработчику в виде файла.
Шаг 3. Если команды замены нет — перенесите вручную
В некоторых версиях платформы команда замены для объектов расширения может быть недоступна. Тогда переносите по частям:
- Откройте
.epfв том же Конфигураторе черезФайл → Открыть, окна обработки и расширения поставьте рядом. - Создайте в объекте расширения те же реквизиты и табличные части с теми же именами и типами.
- Перетащите формы и макеты из дерева внешней обработки в дерево объекта расширения или скопируйте их через буфер обмена.
- Скопируйте текст модуля объекта и модуля менеджера.
Имена реквизитов должны совпасть до буквы. Форма ссылается на реквизиты объекта по имени, и при расхождении элементы формы потеряют связь с данными.
Шаг 4. Поправьте код
Внешняя обработка обращается к себе как к ВнешняяОбработка.Имя, а объект расширения — как к Обработка.Имя. Найдите в модулях строки вида "ВнешняяОбработка. и замените их. То же с вызовами ВнешниеОбработки.Создать() внутри самой обработки: теперь вместо них нужен Обработки.Расш1_ЗагрузкаЦенПоставщика.Создать().
Затем запустите Конфигурация → Проверка конфигурации в окне расширения и Синтаксический контроль модулей.
Свойства обработки, команда и место в интерфейсе
Сама по себе обработка в расширении пользователю не видна. Её нужно вывести в командный интерфейс.
Основная форма
В свойствах обработки на закладке Формы проверьте, что указана основная форма. Если её нет, платформа построит форму автоматически, и пользователь увидит не то, что делал разработчик.
Подсистема
Чтобы обработка появилась в разделе, например «Склад» или «Администрирование»:
- В основной конфигурации найдите нужную подсистему и через контекстное меню выберите
Добавить в расширение— подсистема станет заимствованной. - В свойствах вашей обработки на закладке
Подсистемыотметьте эту заимствованную подсистему. - Откройте командный интерфейс подсистемы и проверьте, в какую группу попала команда открытия обработки и видна ли она.
Своя команда
Если нужна кнопка с особым названием или открытие с параметрами, добавьте обработке команду на закладке Команды. Укажите группу, например панель действий раздела, и опишите обработчик:
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
ОткрытьФорму("Обработка.Расш1_ЗагрузкаЦенПоставщика.Форма", ,
ПараметрыВыполненияКоманды.Источник,
ПараметрыВыполненияКоманды.Уникальность,
ПараметрыВыполненияКоманды.Окно);
КонецПроцедуры
Свойства самого расширения
При загрузке расширения в режиме предприятия (в типовых конфигурациях: Администрирование → Печатные формы, отчеты и обработки → Расширения) обратите внимание на флажок «Безопасный режим». В безопасном режиме код расширения не может работать с файлами на сервере, COM-объектами, внешними компонентами и подключать внешние обработки без безопасного режима. Если обработка что-то читает с диска сервера, это ограничение сработает первым.
Права доступа: роль расширения и профили
Обработка расширения подчиняется тем же правилам ролей, что и объекты основной конфигурации. Без права на неё пользователь получит Нарушение прав доступа! или просто не увидит команду.
- В дереве расширения добавьте в ветку
Ролиновую роль, напримерРасш1_ИспользованиеЗагрузкиЦен. - Откройте её и найдите вашу обработку. Установите права
ИспользованиеиПросмотр. - Если обработка читает или пишет данные справочников и документов, этих прав в роли расширения недостаточно сами по себе: у пользователя должны быть права на эти объекты из основной конфигурации.
- Обновите конфигурацию базы данных (F7 в окне расширения).
Дальше роль нужно выдать пользователю:
- в конфигурациях на БСП — включить её в профиль групп доступа:
Администрирование → Настройки пользователей и прав → Профили групп доступа, затем добавить пользователя в группу с этим профилем; - в конфигурациях без БСП — отметить роль у пользователя в Конфигураторе:
Администрирование → Пользователи, закладка «Прочие».
Роли расширения можно также заимствовать и дописать в них права на свои объекты. Это работает, но при обновлении типовой конфигурации заимствованная роль требует внимания. Отдельная своя роль проще в сопровождении.
Отдельное право на интерактивное открытие внешних обработок обработке расширения не нужно: для платформы это обычный объект конфигурации. Это ещё один довод переносить обработку внутрь, а не открывать файлом.
Вызов внешней обработки из кода расширения
Есть два варианта вызова: вашей обработки расширения и «настоящей» внешней обработки, которая лежит в расширении файлом.
Вызов обработки расширения
Из любого модуля расширения обработка вызывается по имени менеджера. Пример на сервере — выполнить загрузку без открытия формы:
&НаСервереБезКонтекста
Процедура ЗагрузитьЦеныНаСервере(ИмяФайла)
Обработка = Обработки.Расш1_ЗагрузкаЦенПоставщика.Создать();
Обработка.ИмяФайла = ИмяФайла;
Обработка.ВыполнитьЗагрузку();
КонецПроцедуры
Здесь ИмяФайла — реквизит обработки, а ВыполнитьЗагрузку — экспортная процедура модуля объекта. Без слова Экспорт в модуле объекта вызов не сработает.
Подключение .epf из общего макета
Если обработка должна остаться внешней, упакуйте её файл в расширение:
- В ветке
Общие макетырасширения добавьте макет с типомДвоичные данные, напримерРасш1_ВнешняяЗагрузка. - Загрузите в него файл
.epfиз окна макета. - В модуле формы или общем модуле расширения подключите обработку из макета.
&НаСервереБезКонтекста
Функция ПодключитьОбработкуИзМакета()
ДвоичныеДанные = ПолучитьОбщийМакет("Расш1_ВнешняяЗагрузка");
Адрес = ПоместитьВоВременноеХранилище(ДвоичныеДанные);
Защита = Новый ОписаниеЗащитыОтОпасныхДействий;
Защита.ПредупреждатьОбОпасныхДействиях = Ложь;
Возврат ВнешниеОбработки.Подключить(Адрес, , Истина, Защита);
КонецФункции
&НаКлиенте
Процедура ОткрытьВнешнююЗагрузку(Команда)
ИмяОбработки = ПодключитьОбработкуИзМакета();
ОткрытьФорму("ВнешняяОбработка." + ИмяОбработки + ".Форма");
КонецПроцедуры
Третий параметр Подключить — безопасный режим. Значение Истина запрещает обработке опасные действия: работу с файлами сервера, COM, привилегированный режим. Если обработке они нужны, передайте Ложь, но тогда само расширение должно быть загружено без безопасного режима.
Объект ОписаниеЗащитыОтОпасныхДействий снимает вопрос пользователю о запуске потенциально опасного кода. Отключайте предупреждение только для файла, которому вы доверяете: он хранится в вашем же расширении.
Чтобы обновить внешнюю обработку, достаточно загрузить новый .epf в макет и выгрузить расширение заново. Код вызова при этом не меняется.
Если обработка не видна или не открывается: диагностика
Большинство проблем после переноса укладывается в несколько симптомов.
Как отладить код обработки расширения
Точки останова в модулях расширения ставятся так же, как в основной конфигурации. Запустите предприятие из Конфигуратора (F5) или подключитесь к работающему сеансу через Отладка → Подключение.
Для серверного кода в клиент-серверном варианте сервер 1С должен работать с включённой отладкой: у службы агента сервера в командной строке есть ключ -debug. Изменение параметров службы требует её перезапуска, а перезапуск агента оборвёт сеансы всех пользователей — делайте это вне рабочего времени.
С обработкой, подключённой из макета, точки останова в Конфигураторе срабатывают хуже: код живёт во временном файле. Удобнее отладить .epf отдельно, открыв его через Файл → Открыть, и только потом загружать в макет.