В процессе разработки на платформе 1С:Предприятие часто возникает потребность быстро проверить кусок кода, вычислить сложное выражение или изменить состояние объектов в памяти прямо во время отладки. Традиционный подход с созданием внешних обработок или постоянным перезапуском сеанса отнимает много времени. Рассмотрим способы реализации интерактивной консоли кода (REPL), которые позволяют выполнять произвольный код «на лету» с поддержкой точек останова и доступом к локальному контексту.
Прежде всего, разберем техническую причину, почему в 1С нет встроенной «классической» консоли с точками останова. Когда мы используем встроенные функции Выполнить() или Вычислить(), платформа компилирует переданную строку текста в бинарный код непосредственно в оперативной памяти. Поскольку у этого фрагмента кода нет физического файла-источника на диске, отладчик 1С не может «привязаться» к строкам внутри этого текста.
Проанализируем ситуацию: если вы напишете в окне «Вычислить выражение» (Shift+F9) сложный алгоритм, вы не сможете «зайти» внутрь него по клавише F11. Единственный способ заставить отладчик работать внутри динамического кода — это сохранить его во внешний файл (внешнюю обработку) и подключить его к сеансу.
Одним из самых эффективных решений является использование подсистемы «Инструменты разработчика». Рассмотрим, как она решает проблему отладки:
Рассмотрим пример кода, который можно быстро протестировать в такой консоли:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 10 Ссылка ИЗ Справочник.Номенклатура";
Результат = Запрос.Выполнить().Выгрузить();
Для Каждого Строка Из Результат Цикл
Сообщить(Строка.Ссылка);
КонецЦикла;
Подобный подход позволяет избежать «замусоривания» конфигурации временными объектами и ручного создания файлов через «Файл — Новый».
Если вы используете современную среду разработки EDT (на базе Eclipse), возможности интерактивной работы значительно расширяются. Рассмотрим инструменты, доступные в EDT:
Для разработчиков, предпочитающих легкие редакторы, существует связка VS Code с расширениями для 1С. Выясним, как это помогает в интерактивной разработке:
Если ваш код не требует обязательного наличия базы данных (например, это сложная обработка строк, работа с массивами или расчет математических моделей), можно использовать OneScript. В нем есть встроенный интерактивный режим, который запускается командой oscript -i. Это полноценная консоль, где вы вводите строку кода и сразу видите результат.
Для интеграции с реальной базой данных в VS Code применяются инструменты типа HotReload. Разберем принцип их работы: вы редактируете код во внешнем файле, и при сохранении инструмент автоматически обновляет исполняемый код в запущенном сеансе 1С через механизмы расширений или временных обработок, позволяя мгновенно видеть изменения без перезагрузки.
Многие программисты забывают о мощном скрытом функционале стандартного окна Shift+F9. Его можно использовать не только для чтения, но и для интерактивного изменения состояния программы. Рассмотрим пример: вы остановились на точке останова и поняли, что переменная СтатусДокумента имеет неверное значение, из-за чего алгоритм пойдет по ложному пути.
Вместо перезапуска отладки, введите в окне «Вычислить выражение» команду присваивания:
Объект.Статус = Справочники.Статусы.Согласовано
Нажмите «Вычислить». Платформа исполнит это выражение и изменит значение свойства объекта в памяти. Проанализируем результат: теперь при дальнейшем выполнении по шагам программа пойдет по нужной ветке условия Если. Это простейшая форма интерактивной консоли, доступная «из коробки» в любом Конфигураторе.
Для более продвинутых сценариев, таких как автоматизированное тестирование или массовая обработка данных скриптами, используйте специализированные консоли:
Подведем итог: хотя в классическом Конфигураторе 1С нет одной кнопки «Открыть консоль», мы можем достичь того же результата несколькими путями. Для быстрой правки данных используем Shift+F9, для полноценной разработки и отладки алгоритмов — «Консоль кода» из состава ИР или возможности EDT. Использование этих инструментов значительно повышает скорость разработки и позволяет глубже анализировать поведение системы в динамике.