Статический анализатор кода для встроенного языка 1С
Разработка - Инструментарий разработчика
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Назначение инструмента
Программа предназначена для статического анализа модулей встроенного языка 1С (файлов *.bsl).
Зачем это нужно? Применение статического анализа при разработке позволяет сократить количество ошибок, выявляемых на этапе работы и сократить время, затрачиваемое на отладку за счёт выявления этих ошибок на этапе разработки.
В ходе работы проверяется в первую очередь корректность программы на встроенном языке (несколько строже, чем сам 1С), а так же ищутся ошибки в конструкциях программы, которые являются синтаксически правильными, но при этом содержат смысловые ошибки (см. список проверяемых ошибок ниже).
Возможности
Позволяет выполнить проверку файлов на наличие ошибок в интерактивном или пакетном режиме работы.
В интерактивном режиме предоставляется возможности:
- загрузки и проверки файла на наличие ошибок с учётом задаваемых констант компиляции
- отображения списка ошибок и переход из него к месту ошибки в редактируемом файле
- загрузки файла для редактирования
- сохранения файла
- при запуске программы открывается последний редактируемый файл
В пакетном режиме предоставляется возможность проверки одного или нескольких файлов с учётом определённых констант препроцессора и вывод сообщений об ошибках в файл протокола
Запуск в пакетном режиме
bslsa.exe pathToLogFile [ --define=DEFINE [...]] pathToFileToCheck1 [... pathToFileToCheckN]
где:
pathToLogFile - путь к файлу протокола
--define=DEFINE - определение требуемого символа препроцессора, например Клиент или Сервер
pathToFileToCheck1 - путь к файлу или файлам, которые требуется проверить
Пример строки запуска в пакетном режиме
bslsa.exe c:\check.log --define=Клиент --define=Сервер d:\cfgunload\*.bsl
Планы по развитию
В перспективе планируется:
- реализовать возможность проверять файлы не как отдельные единицы, но как часть конфигурации
- реализовать выбор набора правил для анализа
- расширить набор правил анализа
- улучшить работу с протоколом ошибок (сортировка, отбор и т.д.)
- улучшить редактор (раскраска текста и поиск по файлу)
Ошибки и предложения
https://trello.com/b/mwACzUl2/estatico-analisis
Распознаваемые ошибки
- Две последовательные переменные присваиваются через одно и то же выражение, что может являться логической ошибкой или неоптимизированным кодом.
- Не все ветви выполнения в функции %1 возвращают какое-либо значение, что похоже на ошибку.
- В функции ИМЯ отсутствует завершающий оператор ВОЗВРАТ (или ВЫЗВАТЬИСКЛЮЧЕНИЕ) что похоже на ошибку.
- Результат вызова функции '%1' не используется, что может являться ошибкой.
- Функция ИМЯ возвращает одно и тоже значение ЗНАЧЕНИЕ во всех точках возврата, что похоже на ошибку.
- Операторы функции ИМЯ1 полностью совпадают с операторами функции ИМЯ2.
- Возможно конструкция A[B ОПЕРАТОР C] ошибочна и нужна была A[B] ОПЕРАТОР C.
- Функция СтрДлина вызывается в цикле для константного выражения, что может сказываться на производительности.
- В выражении используется неинициализированная локальная переменная %1, что похоже на ошибку.
- Создаваемая переменная ИМЯ имеет тоже имя что и процедура, что может привести к ошибкам.
- Переменная ИМЯ присваивается дважды подряд без её использования между присваиваниями, что похоже на ошибку.
- Переменной ИМЯ присвоено значение, но оно нигде не используется, что похоже на ошибку.
- Переменная ИМЯ имеет имя одинаковое с глобальной переменной, что может привести к ошибкам.
- Переменная %1 переопределяет одноимённый параметр.
- Инструкция ПРОДОЛЖИТЬ является последней в цикле. Она либо является лишней, либо это похоже на ошибку кодирования.
- Отсутствуют какие-либо операторы внутри блока (ЦИКЛ|ЕСЛИ). Возможно это ошибка кодирования.
- Переменная ИМЯ используется для счётчика цикла и в этом и внешнем цикле, что похоже на ошибку кодирования.
- Этот и внешний циклы ДЛЯ КАЖДОГО реализуют обход по одной и той же коллекции %1, что может быть ошибкой.
- Начальное и конечное значение цикла совпадают, что похоже на ошибку кодирования.
- Безусловная операция ВОЗВРАТ внутри цикла. Это может указывать на логическую ошибку.
- Недостижимый код.
- Оператор ? вне зависимости от условия возвращает одинаковые значения.
- Присвоение переменной ИМЯ самой себе похоже на ошибку кодирования.
- Рекурсивная проверка ЕСЛИ (%1) ТОГДА ЕСЛИ (%1) ... похожа на ошибку кодирования, так как условие уже проверено выше.
- Обнаружены два взаимоисключающих условия (%1) и (%2). Второе условие всегда будет ложным.
- Последний оператор ВОЗВРАТ в ветке ТОГДА|ИНАЧЕТОГДА|ИНАЧЕ идентичен оператору ВОЗВРАТ следующему после оператора ЕСЛИ. Похоже, что он не нужен или присутствует ошибка.
- В первом из двух последовательных операторов ЕСЛИ с одинаковыми условиями содержится безусловный оператор ВОЗВРАТ. Второй оператор ЕСЛИ либо не нужен, либо его условие записано с ошибкой.
- Конструкция ЕСЛИ (%1) ТОГДА ... ИНАЧЕ ЕСЛИ (%1) ... похожа на ошибку кодирования, так как оно никогда не будет выполнено.
- Операторы в блоке ТОГДА полностью эквивалентны операторам в блоке ИНАЧЕ.
- Выражение (%1) окружено бесполезными скобками. Может быть они не нужны или присутствует ошибка
- Одинаковые выражения '%2' слева и справа от оператора '%1'. Возможно это ошибка кодирования.
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)
Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.
50000 руб.
10.09.2026 13360 115 0
Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.
24900 руб.
20.08.2024 83218 432 171
Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.
16500 руб.
02.09.2020 285588 1606 423
Инструментарий разработчика Разработка Администрирование веб-серверов Системный администратор Разработчик Аналитик Руководитель проекта 1С 8.3 Платные (руб)
Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.
14000 руб.
17.04.2026 16728 63 62
Пакетная печать Печатные формы Инструментарий разработчика Разработчик 1С:Предприятие 8 Платные (руб)
Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм. Обновление версии от 21.04.26
22570 руб.
06.10.2023 44159 122 54
Инструментарий разработчика Нейросети Платные (руб)
Первые попытки разработки на 1С с использованием больших языковых моделей (LLM) могут разочаровать. LLMки сильно галлюцинируют, потому что не знают устройства конфигураций 1С, не знают нюансов синтаксиса. Но если дать им подсказки с помощью MCP, то результат получается кардинально лучше. Далее в публикации: MCP для поиска по метаданным 1С, справке синтакс-помощника и проверки синтаксиса.
15250 руб.
25.08.2025 76821 147 41
Разработка Инструментарий разработчика Разработчик Руководитель проекта 1С 8.3 Платные (руб)
Pilot 1C превращает задачу, поставленную обычными словами, в техническое задание, код на встроенном языке и сценарии проверки. Прежде чем что-то предложить, он сверяется с устройством вашей конфигурации через граф Analyzer 1C: существует ли объект, из чего он состоит, кто его вызывает, какие роли дают права. Чего найти не удалось – спрашивает, а не выдумывает. Готовый код проходит более полутора сотен проверок по справочнику языка и стандартам разработки, который приезжает вместе с продуктом. Модель – ваша: любой сервер, совместимый с программным интерфейсом OpenAI, в том числе локальный. Правки в конфигурацию Pilot не вносит – их применяет разработчик.
18300 руб.
11.09.2026 3705 5 0
Инструменты администратора БД Инструментарий разработчика Роли и права Разработчик 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)
Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.
17000 руб.
10.11.2023 28720 103 46
"Многострочная
|строка
// коммент +
|с добавленным текстом, окруженным тегами
// коммент -
|завершение строки";
Ну и конечно же интересует запуск из командной строки. Плюс интересно взглянуть на исходники (желательно открытые) :)
Спасибо за инструмент!
Кроме того, в открытый инструмент мы запросто сможем вложиться кодом, делая мир лучше.
(28) Уважаемый, Вы ошибаетесь. Эти проекты из одной и той же области - а именно: тестирование кода модулей на соответствие некоторым стандартам (кто уж какой придумает). Отличие от предлагаемого ПО в данной публикации (+ кстати забыл поставить, исправлюсь) - это открытость кодов и масштабируемость, т.е. возможность написать тест под какие-то свои стандарты оформления кода. Ну и возможность работы над проектом в команде.
Для такого инструмента, как статический анализатор кода, она обязательна должна быть!
Если я делаю, статический анализ кода, мне мало сообщений о потенциальных или существующих ошибках, а хотелось бы без труда охватить взглядом код!
Ведь где то я могу согласится с анализатором, а где то нет, раскраска просто помогает мне визуально пробегать по коду взглядом, без лишнего труда выделять ключевые слова и т.д.
Плюс, я могу просто начать писать какую-нибудь процедуру для своих тестов на анализ сразу в окне, хотелось бы иметь удобный редактор!
2. Свое описание правил и соответственно интерпретатор этих правил.
3. Возможность выключать проверку правила в коде
4. Связь метаданных и кода
5. Расчет метрик для кода
Писать самостоятельно пользовательские правила и их интерпретацию - я пока не вижу перспективы и ресурсов для этого, что самое главное. так же как и вывод дерева в файл, Это-то вообще зачем? Чтобы использовать в сторонних инструментах? И в каком формате?
Пока хочется документировать нормально, сделать настройку списка проверяемых правил, исправить ошибки, внести новые :) правила.
Можно и расчет метрик кода.
Остальное, как мне кажется, сейчас не так важно.
Про генератор - кроме антлр есть море генераторов. Выгода от них - в более быстрой разработке - не надо думать про состояния и переходы. За тебя все сделают. Да и когда захочешь с С++ уйти - не придется много переписывать.
Про правила - ты уверен что будешь успевать реагировать на все просьбы - добавь то или это? проще дать язык описания правил и на нем уже пусть пишут все что хотят. Внутри все равно примитивная перезапись термов и паттернматчинг .
Нужно ли, в конце концов, вообще тратить на это время?
Про генераторы я в курсе. Flex, bison, flex++, bison++, spirit... и иже с ними. А так же про проблемы левой рекурсии и адские сообщения компилятора у некоторых.
Что же про разработку основанную на правилах - считаю, что это ни разу не тривиальная задача по масштабам сравнивая и даже наверное больше с самим анализатором. Время затраченное на её разработку можно потратить довольно много и без особого успеха. Ведь это по сути - интерпретатор ещё одного языка, который будет описывать эти правила.
Можете привести пример хотя бы одного анализатора, который использует такой подход? Я поглядел в википедии, но что-то ничего там такого не нашёл, хотя, нужно признаться, искал тоже не очень сильно.
А так суперская Приблуда! Спасибо!
Для анализа cf, epf, erf - их нужно распаковывать, а это уже другой компот: уже существуют такие инструменты, зачем писать ещё один.
Сделай. Мне нужен этот вывод. Для собственных правил. Это же очевидно.
> А так же про проблемы левой рекурсии ...
Ты грамматику С/С++ разбираешь? Это примитивный 1С. Тупо бейсик, без всяких извращений. Тебе грамматика наоборот поможет и спасет от проблем связанных с неоднозначностью разбора выражений
> Что же про разработку основанную на правилах - считаю, что это ни разу не тривиальная задача
Кто сказал что будет просто? Хотя там сложного ничего и нет . Вот пример простого правила для подобной твоей системы-
(defrule :where 'lexer
:name 'check-id-length
:token ':identifier
:description "Длинна переменной меньше 2 символов"
:check #'(lambda (text type start end file index data)
(> 2 (length text ))))
Где сложность в реализации? Аналогично и для обхода AST строиться набор правил.
Про построение статанализаторов кода - и дальше по ссылкам.
И просьба - сделай что бы под WinXP работала твоя разработка.
про вывод дерева понял. запишу себе в план.
про то, где сложность реализации. Вот есть правило:
(defrule :where 'lexer
:name 'check-id-length
:token ':identifier
:description "Длинна переменной меньше 2 символов"
:check #'(lambda (text type start end file index data)
(> 2 (length text ))))
сложность хотя бы в том, что в С++ нет возможности взять лямбду в виде куска кода из файлы и выполнить. Т.е. Нужно будет написать ещё один интерпретатор. или встроить какой-то, типа lua.
про построение анализаторов - интересно, но примеров анализатора, основанного на правилах (о чём я собственно и задавал вопрос), которые мог бы задавать непосредственно пользователь я там что-то не обнаружил. Плохо искал?
за код стыдно если честно. Последняя версия в ветви VS08.
работает так: распаковываете все модули конфигурации в каталог,
и в этом каталоге запускаете прогу .. а она в консоль выдает все найденные ошибки (имя объекта.имя модуля. имя метода. номер строки. кусок кода)
Ну хоть что-то :) Когда ждать? Где будут обновления?
-> сложность хотя бы в том, что в С++ нет возможности взять лямбду в виде куска кода из файлы и выполнить.
Нет никакой сложности. ecl именно для этого и придуман. Хотя проще сразу перейти на интерпретируемый язык. Выгоды получишь больше. Правда, если планируешь потом продавать свой продукт - будет сложнее защитить.
-> Плохо искал?
Нет, видимо искал хорошо. Но пропустил слова ASTLOG, datalog. Понимаешь в чем дело - нет стандартизированных методик статанализа кода, но все исследования которые проводятся в этом направлении - завершаются словами "Создана база правил для анализа языка " и правила эти до боли похожи на прологовские.
Тот самый крутой статический анализатор на базе AST-деревьев, кеша метаданных и т.п.
Можно свои правила добавлять.
Уже в куче разных компаний юзается, есть и облачные решения для клиентов
По ссылке намного подробнее написано
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 527258
Создание 30.05.16 12:01
Обновление 07.09.16 09:50
Просмотры 17511
Загрузки 34
Рейтинг
56
Комментарии 65
Код открыт Не указано
Рубрики Инструментарий разработчика
Кому Разработчик
Тип файла Архив с данными
Платформа 1С:Предприятие 8
Конфигурация Универсальные
Операционная система Windows
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)