Как программно вызывать общие процедуры и функции в портативной версии Инструментов разработчика 1С

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

При работе с замечательным пакетом «Инструменты разработчика» (ИР) автора Сергея Старых многие программисты выбирают портативную (portable) версию. Это крайне удобно: вся мощь инструментов запускается из одной внешней обработки, не требуя внесения изменений в основную конфигурацию базы данных. Однако при разработке собственных внешних отчетов или обработок часто возникает необходимость использовать готовые функции и процедуры, которые уже написаны автором в общем модуле ирОбщий.epf.

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

Архитектура портативной версии: почему прямой вызов не сработает

Давайте проанализируем, как устроена портативная версия «Инструментов разработчика». Обычно она поставляется в виде каталога, где главным исполняемым файлом является внешняя обработка ирПортативный.epf, а все вспомогательные инструменты, включая аналог общего модуля ирОбщий.epf, лежат во вложенной папке Модули (или Modules).

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

Способ 1. Программный вызов через головную обработку

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

Рассмотрим пример кода, который позволяет выполнить такой вызов. Предположим, что портативная версия ИР расположена по определенному пути на диске.


ПутьКПортативнойВерсии = "C:\IR_Portable\ирПортативный.epf"; // Укажите актуальный путь к файлу
ПортативныйКонтекст = ВнешниеОбработки.Создать(ПутьКПортативнойВерсии, Ложь);

// Теперь мы можем обращаться к свойствам созданного объекта.
// Свойство "ирОбщий" содержит инициализированный объект общего модуля.
Результат = ПортативныйКонтекст.ирОбщий.ЗначениеЛкс(ПараметрЗначения);

Разберем этот код по шагам:

  1. Мы определяем точный путь к файлу ирПортативный.epf на диске. Обратите внимание, что этот файл должен быть физически доступен тому сеансу, в котором выполняется данный код.
  2. С помощью метода ВнешниеОбработки.Создать() мы инициализируем контекст ИР. Параметр Ложь указывает платформе, что безопасный режим использовать не нужно (это критически важно для работы низкоуровневых функций ИР).
  3. Через точку от полученного объекта мы обращаемся к свойству ирОбщий, которое предоставляет доступ ко всем экспортным методам одноименного файла.
  4. Большинство универсальных функций ИР имеют суффикс Лкс (например, ОтЛкс, ВычислитьВБезопасномРежимеЛкс, ЗаписатьОбъектЛкс). Используйте именно их.

Важные особенности вызова на стороне сервера

Если ваш код должен выполняться на стороне сервера (например, в модуле объекта внешнего отчета при формировании данных), необходимо учитывать следующие нюансы:

  1. Доступность пути для сервера 1С: Передаваемый путь к файлу ирПортативный.epf должен быть локальным путем на сервере приложений 1С или доступным сетевым ресурсом (UNC-путь), к которому у учетной записи службы usr1cv8 настроен полный доступ.
  2. Ограничения на передачу данных: Передача сложных мутабельных типов данных между клиентом и сервером в портативном режиме ИР может вызывать ошибки сериализации. Инструменты ИР используют собственные механизмы имитации объектов БД для обхода ограничений платформы, но при ручном вызове из стороннего кода за этим соответствием придется следить самостоятельно.

Способ 2. Использование Расширения ИР (рекомендуемый вариант)

Постоянное прописывание жестких путей к файлам обработок на диске в коде своих отчетов усложняет перенос разработок между компьютерами и серверами. Если ваша версия платформы 1С (начиная с 8.3.11) позволяет использовать механизм расширений, настоятельно рекомендуется подключить к базе данных специальное Расширение ИР.

Давайте выясним, какие преимущества это дает разработчику:

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


// Прямой вызов без инициализации файлов на диске
Результат = ирОбщий.ЗначениеЛкс(ПараметрЗначения);

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

Таким образом, для быстрых разовых тестов и отладки вы можете использовать первый способ с программным созданием объекта ирПортативный.epf, а для постоянной и комфортной разработки собственных инструментов — интегрируйте Расширение ИР в вашу рабочую базу данных.

← На главную