Как реализовать визуальный конструктор выражений в режиме 1С:Предприятие для использования с функцией Выполнить()?

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

Вопрос о том, как упростить создание выражений, которые впоследствии передаются в функцию Выполнить(), является актуальным для многих разработчиков 1С. Создание полноценного конструктора «с нуля» — трудоемкая задача, поэтому мы разберем готовые подходы и инструменты, которые позволяют автоматизировать этот процесс.

Использование консолей кода для 1С

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

Рассмотрим преимущества использования таких решений:

  1. Подсветка синтаксиса и проверка кода: Современные консоли умеют проверять синтаксис на лету, что предотвращает ошибки при использовании Выполнить().
  2. Интеграция с метаданными: Многие консоли содержат механизмы IntelliSense, которые анализируют структуру вашей конфигурации и позволяют выбирать объекты и методы из выпадающих списков.
  3. Хранение библиотек: Вы можете сохранять часто используемые выражения в виде шаблонов, что избавляет от необходимости каждый раз набирать сложный код вручную.

Использование функционала Библиотеки стандартных подсистем (БСП)

Если вы хотите встроить конструктор выражений непосредственно в свое прикладное решение, обратите внимание на возможности, заложенные в БСП. В частности, начиная с версии 3.1.6, в БСП встроен специализированный редактор формул.

Почему стоит использовать готовый функционал БСП:

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

Программное использование Компоновщика настроек

Еще один путь — задействовать объекты системы компоновки данных (СКД). Хотя СКД предназначена для отчетов, ее механизмы выбора выражений можно использовать и в прикладных задачах.

Рассмотрим, как это работает на практике:

Мы можем использовать объект КомпоновщикНастроек или стандартные элементы управления, такие как ПолеКомпоновкиДанных. Эти элементы позволяют:

Важные замечания по безопасности

При использовании Выполнить() всегда помните о рисках. Если выражение формируется пользователем или берется из внешнего источника, обязательно внедряйте этап валидации.

Никогда не разрешайте исполнение произвольного кода без проверки на наличие «опасных» конструкций. Вы можете реализовать простую проверку:


// Пример базовой проверки строки перед выполнением
Функция БезопасноеВыполнение(Выражение)
    ЗапрещенныеСлова = Новый Массив;
    ЗапрещенныеСлова.Добавить(\"Удалить\");
    ЗапрещенныеСлова.Добавить(\"Записать\");
    
    Для Каждого Слово Из ЗапрещенныеСлова Цикл
        Если СтрНайти(Врег(Выражение), Врег(Слово)) > 0 Тогда
            ВызватьИсключение \"Обнаружен опасный код!\";
        КонецЕсли;
    КонецЦикла;
    
    Выполнить(Выражение);
КонецФункции

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

← На главную