Как найти или сделать консоль кода для платформы 1С:Предприятие 8.3.8?

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

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

Выясним причину несовместимости обработок с версией 8.3.8

Основная сложность заключается в изменении внутреннего формата внешних обработок (файлов с расширением .epf), которое произошло в релизе платформы 8.3.9. Любая внешняя обработка, сохраненная в конфигураторе версии 8.3.9 и новее, не может быть прочитана платформой 8.3.8 и вызывает ошибку формата файла при попытке открытия. Большинство современных инструментов на профильных ресурсах ориентировано на свежие версии платформы, поэтому их стандартные версии просто не откроются в вашей среде.

Вариант 1. Использование портативных Инструментов разработчика (ИР)

Разберем один из самых мощных готовых вариантов — портативную версию комплекса «Инструменты разработчика» (ИР), изначально созданную под платформу 8.2 и ранние релизы 8.3. Она полноценно работает на платформе 8.3.8:

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

Это оптимальный выбор, если вам нужен функциональный инструмент с поддержкой автодополнения, замеров производительности и просмотра дерева объектов без необходимости писать обработку самостоятельно.

Вариант 2. Использование обработок из дистрибутивов БСП редакций 2.2 и 2.3

Проанализируем альтернативный источник готовых решений. В составе дистрибутивов Библиотеки стандартных подсистем редакций 2.2 и 2.3 поставляются сервисные обработки, в том числе консоли запросов и обработчики кода. Так как эти редакции БСП разрабатывались под требования платформ 8.3.6–8.3.8, входящие в их каталог внешние файлы гарантированно открываются конфигуратором и клиентским приложением версии 8.3.8.

Вариант 3. Перенос готовой консоли в конфигураторе 8.3.8 вручную

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

  1. Откроем исходную обработку в актуальной версии конфигуратора (или просмотрим ее исходный код при наличии выгрузки в файлы).
  2. Запустим конфигуратор платформы 8.3.8 и создадим новую внешнюю обработку.
  3. Перенесем реквизиты, форму и программные модули из исходника.
  4. Проверим скопированный код на наличие методов и свойств, появившихся в платформе после релиза 8.3.8 (например, новые параметры функций работы с контекстом или интерфейсом), и удалим их при необходимости.
  5. Сохраним файл обработки непосредственно в конфигураторе 8.3.8.

Вариант 4. Написание собственной консоли кода

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

Создадим новую внешнюю обработку в конфигураторе 8.3.8 и добавим управляемую форму. Разместим следующие элементы:

  1. Реквизит формы ТекстКода с типом Строка (неограниченной длины). На форме свяжем его с полем текстового документа для удобства набора кода.
  2. Реквизит формы РезультатВыполнения с типом Строка.
  3. Команду ВыполнитьКод, для которой создадим обработчик нажатия.

Посмотрим на пример реализации модуля управляемой формы:


&НаКлиенте
Процедура ВыполнитьКод(Команда)
    РезультатВыполнения = "";
    ВыполнитьКодНаСервере();
КонецПроцедуры

&НаСервере
Процедура ВыполнитьКодНаСервере()
    Попытка
        Выполнить(ТекстКода);
        РезультатВыполнения = "Код успешно выполнен в: " + ТекущаяДата();
    Исключение
        РезультатВыполнения = ОписаниеОшибки();
    КонецПопытки;
КонецПроцедуры

Нюансы реализации и платформенные ограничения

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

  1. Клиент-серверный контекст: Любая работа с базой данных (запросы, чтение и запись справочников, документов) в управляемом приложении возможна только на сервере. Поэтому вызов оператора Выполнить() обязательно должен выполняться внутри серверной процедуры (директивы &НаСервере или &НаСервереБезКонтекста). Если требуется вывести на клиент серверный объект (например, результат запроса типа ТаблицаЗначений), его необходимо предварительно преобразовать в реквизит формы с помощью метода ЗначениеВРеквизитФормы() либо выгрузить в массив структур.
  2. Ограничения оператора Выполнить(): Конструкция Выполнить() предназначена только для запуска последовательности операторов в текущей области видимости. В динамически передаваемом тексте нельзя объявлять новые процедуры и функции. Кроме того, этот оператор не возвращает значение. Если ваша задача — рассчитать единичное математическое или логическое выражение, используйте функцию Вычислить().
  3. Безопасный режим: Если подключать обработку через механизм БСП (справочник «Дополнительные отчеты и обработки»), она может автоматически запускаться в безопасном режиме. В этом режиме выполнение динамического кода и операции с внешними ресурсами блокируются. Для беспрепятственной работы открывайте консоль через стандартное меню Файл — Открыть под учетной записью с административными правами.

Встроенная альтернатива без внешних файлов

Напомним, что для быстрой проверки выражений или вызова методов на платформе 8.3.8 вовсе не обязательно создавать внешние файлы. Достаточно запустить сеанс «1С:Предприятия» в режиме отладки из конфигуратора и воспользоваться встроенным окном Табло либо диалоговым окном Вычислить выражение. Эти штатные инструменты позволяют вычислять допустимые выражения и вызывать экспортные методы конфигурации прямо в контексте выполняющегося процесса.

← На главную