Можно ли проверить код 1С на ошибки, если 1С не установлена? Опыт со скриптом в Docker

23.10.26

Разработка - Рефакторинг и качество кода

Скрипт, который должен был проверять код 1С в Docker, на деле проверял только, что файл не пустой: из 11 модулей с ошибками он пропустил все. Я переписала проверку и сравнила её с самой 1С на тех же 11 модулях из нашей конфигурации «Нано-УТ». Новый скрипт нашёл незакрытые «Если», процедуры и скобки в 10 случаях из 11. Вызов несуществующей процедуры находит только сама 1С. В архиве скрипт, файлы для Docker, примеры с ошибками и журналы проверки.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Скрипт проверки кода 1С для Docker: файлы, примеры с ошибками и журналы (версия 2)
.zip 14,29Kb
0 4 200 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.
Разработка 1С
О чём это (в трёх тезисах)
1.Скрипт проверки из первого варианта контейнера всегда завершался с кодом 0: он смотрел только, что файл не пустой. Из 11 модулей, семь из которых сама 1С отвергла, он пропустил все.
2.Переписанный скрипт находит незакрытые Если, Процедуры, Циклы, скобки и кавычки без установленной 1С и совпал с Конфигуратором 8.3.27 на 10 модулях из 11.
3.Вызов несуществующей процедуры нашла только сама 1С: контейнер служит быстрой первой проверкой перед /CheckModules и не заменяет её.
Протокол проверки
Что проверялосьскрипт headless_runner.py (первая и вторая версии), файлы Dockerfile и docker-compose.yml, verify.py, platform_check.py
Где и когда22.10.2026; 1С:Предприятие 8.3.27.2130 (x86), «Нано-УТ 2.0» с 11 модулями для проверки; Docker Desktop 29.8.0, Python 3.12.10; Windows 11 Pro, Intel Core i5-2400, 7,9 ГБ ОЗУ, SATA SSD
Как4 целых модуля, 6 с поломкой и 1 с вызовом несуществующей процедуры подали обоим скриптам и Конфигуратору (/CheckModules); защита контейнера проверена из чистой распаковки архива
РезультатСкрипт из первого варианта: 11 из 11 отмечены [OK]. Новый скрипт: все 6 поломок отклонены, целые модули пропущены. 1С указала на 7 модулей. verify.py --docker: все проверки пройдены
Не провереноGitLab CI и GitHub Actions, 1С для Linux внутри контейнера, бинарные .epf и .erf, другие версии платформы
Суть статьи

Что на самом деле проверяет скрипт в контейнере Docker и почему зелёный отчёт ничего не говорит, пока скрипт не умеет ошибаться в нужную сторону. Сравнение с самой 1С на 11 модулях «Нано-УТ 2.0».

Ключевые идеи
  • Проверка, которая не может дать ошибку, ничего не проверяет: скрипт, смотревший только на размер файла, пропустил 7 из 7 негодных модулей.
  • Парность блоков, скобок и кавычек в BSL можно проверить без 1С и без лицензии за доли секунды.
  • Контейнер запускается без сети и с файловой системой только для чтения; 1С в образе нет.
  • Вызов несуществующей процедуры, типы и параметры остаются за проверкой /CheckModules самой 1С.
Главная мысль

Контейнер со скриптом годится как быстрая первая проверка перед 1С, если скрипт умеет находить негодное. Полную проверку выполняет Конфигуратор.

Для кого: разработчики 1С, которые настраивают автоматическую проверку конфигураций и расширений и хотят понимать, что показывает зелёный статус.

В статьях про автоматическую проверку 1С обычно рисуют такую схему: контейнер Docker, в нём скрипт, на выходе отчёт, который GitLab показывает в запросе на слияние. Скрипт из моего первого варианта этой статьи делал ровно это и всегда завершался с кодом 0, то есть «всё в порядке». Я подала ему одиннадцать модулей, семь из которых сама 1С отвергла, и он пропустил все одиннадцать. Он проверял только одно: файл не пустой.

Ниже расскажу, как это выяснилось, что умеет переписанный скрипт, как запускать его в Docker без доступа к сети и что в любом случае остаётся за самой 1С. Всё прогонялось на этом компьютере 22 октября 2026 года.

Стенд

Условие Значение
Дата 22.10.2026
1С 1С:Предприятие 8.3.27.2130 (x86), Конфигуратор в пакетном режиме, файловая база во временном каталоге
Конфигурация «Нано-УТ 2.0» (ветка codex/nano-ut-v2), к ней добавлены 11 общих модулей для проверки
Docker Docker Desktop 29.8.0, образ python:3.12-slim (Python 3.12.14 внутри, 177 МБ); на самом компьютере Python 3.12.10
Компьютер Intel Core i5-2400 3,1 ГГц (4 ядра, 2011 год), 7,9 ГБ ОЗУ, SSD Samsung 850 EVO (SATA), Windows 11 Pro 10.0.22631. Компьютер рабочий: во время прогонов были открыты браузер и приложение Claude
Рис. 1. Схема стенда: три способа проверки одних и тех же модулей

Самой 1С в образе Docker нет: лицензия и дистрибутив остаются за вами. Контейнер проверяет то, что видно в тексте модуля.

Одиннадцать модулей для проверки

Для проверки я собрала 11 файлов .bsl. Четыре целых: настоящие общие модули «Нано-УТ» (ЦеныУчет, УчетСервер, ФормыСервер, ДокументыСервис). Шесть получены из них одной поломкой: удалён КонецЕсли, КонецПроцедуры, КонецПопытки или КонецЦикла, не закрыта кавычка строки или добавлена лишняя скобка. Один модуль написан без ошибок структуры, но вызывает процедуру НесуществующаяПроцедура().

Скрипт make_corpus.py собирает эти файлы, а make_cf.py добавляет их в копию «Нано-УТ» как общие модули Ok01...Sem01. Конфигуратор загружает конфигурацию в пустую файловую базу и проверяет модули:

1cv8.exe DESIGNER /F <база> /LoadConfigFromFiles <выгрузка> /UpdateDBCfg
1cv8.exe DESIGNER /F <база> /CheckModules -Server -ExternalConnection

Конфигуратор вернул код 101 и указал семь модулей: Bad01...Bad06 и Sem01. Четыре целых модуля замечаний не получили. На чистой «Нано-УТ» без добавленных модулей тот же вызов даёт код 0 и сообщение «Синтаксических ошибок не обнаружено».

Например, для Bad01 1С написала: {ОбщийМодуль.Bad01.Модуль(15,1)}: Ожидается ключевое слово 'КонецЕсли'. Для Sem01: Процедура или функция с указанным именем не определена (НесуществующаяПроцедура).

Что делал скрипт из первого варианта

Скрипт искал файлы *.epf, *.erf и *.bsl, читал каждый, сообщал об ошибке только для файла нулевой длины и печатал [OK] для всех остальных. Вся проверка:

Python UTF-8 фрагмент
1
2
3
content = f.read_bytes()
if len(content) == 0:
    raise ValueError("Пустой файл")

Тесты verify.py к нему проверяли, что файлы Docker на месте, что на одном целом модуле скрипт возвращает 0 и что корневой элемент отчёта называется testsuite. Скрипт не мог провалить ни один тест, потому что содержимое файлов не читал. Вот его ответ на мои 11 модулей:

Рис. 2. Снимок окна консоли: скрипт из первого варианта отметил [OK] все 11 модулей

Из 11 строк [OK] семь относятся к модулям, которые 1С отвергла. Для GitLab такой отчёт означает зелёный статус проверки.

Новый скрипт

Новый headless_runner.py читает только .bsl и просматривает текст по символам. Он запоминает открытые блоки (Процедура, Функция, Если, Цикл, Попытка и их английские написания), считает скобки, следит за строковыми литералами (в том числе многострочными, где строки начинаются с |) и за парой #Если/#КонецЕсли. Строчные комментарии // пропускаются. Основной фрагмент:

Python UTF-8 фрагмент
1
2
3
4
5
6
7
8
if w in OPEN:
    stack.append((OPEN[w], no))
elif w in CLOSE:
    if stack and stack[-1][0] == w:
        stack.pop()
    else:
        want = stack[-1][0] if stack else "ничего"
        errors.append((no, f"{m.group(0)} не соответствует открытому блоку (ожидалось: {want})"))

Ошибки каждого файла скрипт записывает в отчёт для систем непрерывной интеграции (формат JUnit XML, его понимают GitLab и GitHub Actions) с номерами строк. Код завершения 0 означает «все модули целые», 1 - «есть ошибки», 2 - «не найдено ни одного .bsl». Пустой каталог считается ошибкой: иначе неверный путь в настройках конвейера давал бы зелёный статус. Бинарные .epf и .erf скрипт пропускает и сообщает, сколько их было.

Запуск в Docker без сети

Dockerfile UTF-8 фрагмент
1
2
3
4
5
6
FROM python:3.12-slim
ENV LANG=C.UTF-8 PYTHONUTF8=1 PYTHONDONTWRITEBYTECODE=1
WORKDIR /workspace
COPY headless_runner.py /usr/local/bin/headless_runner.py
ENTRYPOINT ["python", "/usr/local/bin/headless_runner.py"]
CMD ["--scan-dir", "/workspace", "--output-junit", "/reports/junit.xml"]
YAML UTF-8 фрагмент
1
2
3
4
5
6
7
8
9
services:
  runner-1c:
    build: .
    image: bsl-structure-runner:1.0
    network_mode: "none"
    read_only: true
    volumes:
      - ./workspace:/workspace:ro
      - ./reports:/reports:rw

Параметр network_mode: "none" отключает сети у контейнера, read_only: true запрещает запись в его файловую систему, а проверяемые файлы подключены только для чтения. Запись разрешена в одном каталоге, куда попадает отчёт.

Первый вариант тянул Ubuntu 22.04 с xvfb, git, curl и русской локалью. Скрипту из этого нужен только Python: он читает файлы как UTF-8 и ничего не рисует. xvfb (виртуальный экран) понадобился бы клиенту 1С, а 1С в образе нет. Поэтому образ собран на python:3.12-slim.

Защиту проверяет verify.py --docker. Из контейнера без сети попытка соединиться с 1.1.1.1:443 заканчивается ошибкой OSError. Запись в файловую систему контейнера отклоняется. Запуск на примерах с ошибками возвращает код 1. Вот запуск из чистой распаковки архива:

Рис. 3. Снимок окна консоли: verify.py --docker, все проверки пройдены

Сравнение с самой 1С

Те же 11 модулей я подала новому скрипту и сравнила его ответы с ответами 1С. Столбцы «Раннер из черновика» и «Раннер версии 2» в таблице - это скрипт из первого варианта и новый скрипт.

Рис. 4. Снимок окна консоли: новый скрипт совпал с 1С на 10 модулях из 11, скрипт из первого варианта - на 4

Все шесть поломок структуры новый скрипт отклонил, как и 1С. На Bad01 он указывает строки 1, 2 и 15: 1С остановилась на строке 15, где вместо КонецЕсли стоит КонецПроцедуры. Лишние сообщения скрипта о строках 1 и 2 - следствие незакрытых блоков, а первая найденная ошибка совпадает по смыслу.

Одиннадцатый модуль, Sem01, скрипт пропустил, а 1С нет. Скрипт не знает, какие процедуры есть в конфигурации. За самой 1С остаются неверное число параметров, неизвестные свойства и методы, типы значений, доступность вызова на клиенте и на сервере, директивы компиляции. Новый скрипт годится как быстрая первая проверка: он отсеивает поломанные файлы за доли секунды и без лицензии 1С, а полную проверку выполняет Конфигуратор через platform_check.py на компьютере с установленной 1С.

Подключение к GitLab CI

В архиве лежит шаблон gitlab-ci.example.yml: задание запускает образ со скриптом и передаёт GitLab отчёт reports/junit.xml. В GitLab я его не запускала. Проверено другое: скрипт пишет корректный XML с корнем testsuite, атрибутами tests и failures и элементом failure у каждого упавшего модуля.

Что не проверено

  • GitLab CI и GitHub Actions: как отчёт выглядит в запросе на слияние, я не воспроизводила.
  • 1С для Linux внутри контейнера и запуск Конфигуратора с виртуальным экраном xvfb: Linux-версии 1С у меня нет.
  • Бинарные .epf и .erf: скрипт их пропускает.
  • Модули с редкими конструкциями препроцессора, Выполнить() со строкой кода, другие версии платформы.
  • Скорость на других компьютерах: у меня старый процессор и SATA SSD, на современном железе время прогона будет другим.

Если у вас в конвейере уже есть контейнер с 1С, мне интересно, чем вы отсеиваете поломанные файлы до запуска Конфигуратора и сколько времени это экономит.

Итог

  • Скрипт, проверявший только «файл не пустой», пропустил все 11 модулей, включая 7 отвергнутых самой 1С. Зелёный отчёт в конвейере такая проверка не гарантирует.
  • Новый скрипт отклонил 6 модулей с поломанной структурой и совпал с 1С на 10 модулях из 11. Он не заменяет /CheckModules: вызов несуществующей процедуры нашла только 1С.
  • Контейнер запускается без сети и с файловой системой только для чтения; эти проверки входят в verify.py --docker.

Источники

  • Руководство администратора 1С:Предприятия 8.3, раздел 7.4 «Running Designer in batch mode» (ключи /LoadConfigFromFiles, /CheckModules): https://kb.1ci.com/1C_Enterprise_Platform/Guides/Administrator_Guides/1C_Enterprise_8.3.23_Administrator_Guide/Appendix_7._The_parameters_of_the_command_line_to_launch_1C_Enterprise/7.4._Running_Designer_in_batch_mode/
  • «Зачем одинэснику docker?», Infostart: //infostart.ru/public/2688032/ - обзор применения Docker в работе 1С-разработчика.
  • «1C:SRE-Suite: автоматизируем непрерывную интеграцию (CI) через GitHub Actions», Infostart: //infostart.ru/public/2780378/ - сборочный агент 1С в контейнере.
  • «Как проверять код на языке 1С с помощью BSL Language Server», Infostart: //infostart.ru/public/1789716/ - полноценный статический анализ BSL; скрипт из этой статьи его не заменяет.

Файл к статье

Архив docker-bsl-runner-companion.zip (версия 2 от 22.10.2026): headless_runner.py, Dockerfile, docker-compose.yml, verify.py, examples/ (пять небольших модулей), platform_check.py, шаблон gitlab-ci.example.yml, README.md и папка evidence с журналами прогона. Архив распаковывайте в обычную папку вроде C:\work\: docker build из папки OneDrive у меня падал. Проверки verify.py запускаются на любой системе с Python 3.9+, флаг --docker требует Docker, platform_check.py - Windows с 1С 8.3 (python platform_check.py --dump <выгрузка> --exe <путь к 1cv8.exe>).

 
Нинель Адольевна Щербакова
Нинель Адольевна Щербакова (Ninel_S)
Архитектор • SRE & DevOps инженер • HighLoad 1С
Автор технических публикаций на Infostart. Разработчик NOPik, SRE-Suite-for-1C и мультиагентных ассистентов для экосистемы 1С:Предприятие.

Вступайте в нашу телеграмм-группу Инфостарт

1С:Предприятие Docker CI/CD BSL Тестирование 1С JUnit Качество кода

См. также

Рефакторинг и качество кода Разработчик 1С 8.3 1С:Управление торговлей 11 Россия Бесплатно (free)

8 приёмов за 10 минут: перестаньте прокручивать общий модуль на три тысячи строк как ленту в соцсети. Outline, #Область и фильтр - и вы уже в нужной процедуре, а не на строке «где-то внизу».

25.09.2026    2196    aleksandrboldyusov    9    

18

Linux Групповая разработка (Git, хранилище) Администрирование СУБД Системный администратор Разработчик 1С 8.3 Абонемент ($m)

Декларативный pipeline в GitHub Actions, тонкости лицензирования в Docker (--net=host), изоляция RUN_ID и интеграция со сборочным конвейером SRE-Suite-for-1C-platform. Вторая часть практического руководства (https://infostart.ru/public/2779597): от первого коммита до детерминированного синтаксического гейта на headless-раннере Linux

1 стартмани

03.09.2026    2055    Ninel_S    0    

4

DevOps и автоматизация разработки Тестирование QA Групповая разработка (Git, хранилище) Разработчик 1С:Предприятие 8 Бесплатно (free)

Четыре года в интеграторе я работал с git и EDT. Git после хранилища полюбил сразу: видно, кто и что менял. С EDT сложнее: тормозит, ошибки при обновлении ERP, автономный сервер внутри него работает только с файловой базой. На новой работе команда захотела перейти на git, я развернул EDT, и оно на второй день разрушило проект при загрузке расширения. Тогда я решил дать команде git с привычным Конфигуратором и инструмент, который за минуту доносит коммит до базы через ibcmd, вместо получасовой загрузки из файлов. На новой работе разрешили ИИ, и я написал это приложение с его помощью: от чтения документации и первого ТЗ до идей в электричке. Впервые за годы снова почувствовал себя творцом, а не закрывателем задач. По дороге приросли выгрузка, объединение и проверка конфигурации по коммитам, YAxUnit и режим MCP-сервера. В статье: схемы, скриншоты, грабли и честный список ограничений. Ссылки пока нет: хочу понять, нужно ли это кому-то, кроме меня.

03.09.2026    12308    KatanaDragon511    30    

40

Инструменты администратора БД Инструментарий разработчика Тестирование QA Системный администратор Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)

В экосистеме 1С давно живут сотни инструментов: от Конфигуратора и Хранилища до систем тестирования, мониторинга, интеграции и CI/CD. Я собрал их в Ландшафт технологий, а теперь добавляю данные о реальном использовании. Рассказываю, как устроена карта, что показал первый опрос и почему в новой волне особенно нужны администраторы, аналитики и тестировщики.

01.09.2026    2843    mrXoxot    6    

25

DevOps и автоматизация разработки Мониторинг Тестирование QA Разработчик 1С:Предприятие 8 Бесплатно (free)

Платформа 1С давно вышла за рамки учетных систем. Сегодня это полноценная среда для создания сложных, высоконагруженных и распределенных приложений. А значит, и стек технологий современного разработчика кардинально изменился. Систематизируем весь инструментарий, который превращает 1С-программиста в инженера: от EDT и Git до автотестов на YAxUnit, контейнеризации приложений в Docker, мониторинга в Prometheus и организации шины данных на Kafka. Разберемся, зачем каждый инструмент нужен, как он вписывается в жизненный цикл разработки и с чего начать его внедрение.

25.08.2026    24659    mrXoxot    55    

88

Рефакторинг и качество кода Обновление 1С Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 Бесплатно (free)

На проекте сложного обновления 1С:ERP 2.4.14.181 до версии 2.5.22.106 нам было нужно уложить обновление в технологическое окно 48 часов (выходные). Исходный замер, с учетом промежуточных релизов 2.5.8.443, 2.5.12.270, 2.5.17.234, 2.5.22.106, показал требуемое время в 659 часов…

07.07.2026    6822    1c-izh    21    

22

DevOps и автоматизация разработки Разработчик Бесплатно (free)

Хватит ограничивать себя родным и уютным стеком 1С. Пора расширять кругозор и осваивать смежные стеки! Разберемся, как Docker может упростить жизнь одинэснику: от сборки и тестирования 1С до запуска инфраструктуры и автоматизации CI/CD, причем быстро, воспроизводимо и без лишнего мусора в системе.

08.05.2026    7525    sleemp    81    

37

Инструментарий разработчика Рефакторинг и качество кода Разработчик 1С:Предприятие 8 Бесплатно (free)

Инструмент для тех, кто устал читать модули по 50 тысяч строк и искать ошибки глазами. MetaVision загружает выгруженные файлы конфигурации и за секунды строит графы функций, находит уязвимости и подсвечивает проблемы производительности. Ключевые возможности: Визуализация логики функций (графы условий, циклов, транзакций и вызовов). Статический аудит безопасности (RCE, SSRF, COM-инъекции, пароли в коде). Поиск проблем производительности (запросы в циклах, вложенные блокировки). Полнотекстовый поиск по всем модулям конфигурации. Статистика по объектам и функциям. Безопасность: Программа работает строго локально. Код вашей конфигурации не отправляется в интернет и не анализируется на сторонних серверах. Попробуйте MetaVision сегодня — узнайте, что скрывает ваш код.

20.04.2026    15490    1483    KHoroshulinAV    64    

95
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. hdworker 3 24.10.26 00:21 Сейчас в теме
Что такое Нано-УТ, просветите пожалуйста?
2. Ninel_S 214 24.10.26 12:30 Сейчас в теме
(1) "Нано-УТ" - совместимая с УТ-11.5 самодельная тестовая конфигурация для изуверских опытов, обычно поставляется в каждом архиве к статье, в которой описываются бесчеловечные опыты над этой малюткой.
;-)
3. hdworker 3 26.10.26 11:23 Сейчас в теме
(2) А вы не хантите светлые головы?
4. Ninel_S 214 26.10.26 13:00 Сейчас в теме
(3) Светлые головы собираем и "втридорого" продаем дружественным конторам.
"Вот на эти три процента и живем" - цитата :-)
Посмотрите, пожалуйста, скриншот.
Ссылку не дам, так как ужасно страшусь бана ;-)
Прикрепленные файлы:
Для отправки сообщения требуется регистрация/авторизация