При реализации консоли запросов 4.0 возник вопрос в том, как поступить с выполнением произвольного кода на разных версиях платформы на стороне клиента. Традиционное решение в виде дополнительной формы внутри внешней подключенной обработки обладает следующими недостатками:
- При строгой проверке кода 1С конфигуратор будет ругаться на то, что некоторых функций нет. Это неудобно, но не существенно.
- Существенное ограничение на выполнение кода - он должен быть вшит внутрь формы, и управлять её работой можно только заранее прописав необходимый код, оставив параметры вызова.
При этом известно, что WEB клиент и мобильный клиент имеют компьютерную серверную часть, которая имеет возможность подключения внешней обработки. А это значит, что аналог оператора Выполнить можно реализовать следующим образом:
- Распаковать обработку образец через любой распаковщик обработок. Я использовал Yellow packer. В этой обработке нужно создать форму и экспортную процедуру (функцию).
- Вшить в распакованный файл с образом текст кода, который предварительно нужно преобразовать во внутренний формат.
- Собрать из образца итоговую обработку.
- Подключить на стороне сервера.
- После этого просто получить форму и вызвать экспортную процедуру.
Однако, при этом нужно учесть, что 1С имеет полноценный арсенал для работы с двоичными данными только на платформе 8.3.9 и новее. Для старых версий 1С, к которым относится и 8.2 нужно было предварительно реализовать аналогичные интерфейсные функции (см. Легаси библиотека работы с двоичными данными - для версий 1С 8.0 - 8.5).
По итогу реализации, все получилось - произвольный код отрабатывает успешно. Единственное, не очень удобно пока отлаживать код - не доработаны сообщения об ошибках.
Пример в веб-клиенте на платформе 8.3.12:
В тонком клиенте на платформе 8.2 и 8.3 будет такой же результат:
1С 8.2.9:
8.3.14:
Однако, на некоторые операции нужно будет дополнительно соглашаться - так как разрешения для таких обработок - это отдельная история. Обработка не зависит от запускаемой ОС.
Вступайте в нашу телеграмм-группу Инфостарт