Предпродажная подготовка: инструмент ext_precheck.py для проверки расширения по выгрузке перед поставкой
Разработка - Инструментарий разработчика
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
&ИзменениеИКонтроль, пустые свойства, опасные вызовы, лишние заимствования и отсутствие роли.|
28 из 28
контрольных замечаний в NanoDirty отметил инструмент
|
4 из 28
нашли пять пакетных команд платформы, включая проверку применимости
|
15 из 15
контрольных пунктов в NanoBlind, собранном другой моделью по общему шаблону
|
0,24–0,35 с
диапазон медиан пяти запусков по готовым выгрузкам, со стартом Python
|
Стенд 27.10.2026: Windows 11 Pro, Intel Core i5-2400, 7,9 ГБ ОЗУ, SATA SSD; 1С:Предприятие 8.3.27.2130 x86; основная конфигурация «Нано-УТ 2.0» и выгрузка УТ 11.5.22.77; Python 3.12.10.
В 28 пунктах есть ошибки, предупреждения и сведения для ручного разбора; это покрытие контрольного набора, а не доля любых ошибок расширений. Правила разрабатывались на NanoDirty. NanoBlind — новый экземпляр похожего набора, а не независимая проверка всех видов дефектов. Выгрузка конфигураций во время 0,24–0,35 с не входит. На УТ 11.5 проверяли время и P3; применимость перехватов к УТ этим не доказана.
Расширение, которое работает у разработчика, у покупателя встречает другую версию типовой. Если перехваченную процедуру переименовали или изменили тело под &ИзменениеИКонтроль, обновление базы, /CheckModules и /CheckConfig на стенде возвращали код 0 и «Ошибок не обнаружено». ext_precheck.py читает две выгрузки, расширения и основной конфигурации той версии, на которой расширение будет работать, и выдаёт список находок с файлом, строкой, цитатой и тем, что исправить. Для анализа готовых выгрузок платформа и база не нужны. Команда платформы /CheckCanApplyConfigurationExtensions в этом же опыте обнаружила обе поломки перехватов; инструмент проверяет их по файлам вместе с остальными правилами.
Как работает
| 1 | Читает выгрузку расширения. Свойства, состав объектов, роли, формы и тексты модулей. Расширение не запускается и в базу не загружается. |
| 2 | Сопоставляет с основной конфигурацией. С ключом --base проверяет режим совместимости, наличие перехваченных процедур и совпадение копии тела под &ИзменениеИКонтроль с текущим телом оригинала. |
| 3 | Применяет правила P1–P12. Каждая находка получает важность: ошибка, предупреждение или сведения. |
| 4 | Пишет отчёт. report.md для чтения и report.json для сборки; при ошибках код возврата 1, при сбое запуска 2. Код 0 допускает предупреждения и сведения и сам по себе не подтверждает готовность к продаже. |
Правила
| Правило | Что проверяет |
|---|---|
| P1 | пустые Поставщик, Синоним, Версия; версия вне формата из 2–4 числовых частей через точки или из одних нулей |
| P2 | пустой префикс имён и собственные объекты без префикса |
| P3 | CompatibilityMode не совпадает с основной конфигурацией; отдельно сравнивается ConfigurationExtensionCompatibilityMode (нужен --base) |
| P4 | назначение расширения; «Исправление» на продажу |
| P5 | &Перед, &После, &Вместо, &ИзменениеИКонтроль на процедуру или модуль, которых нет в основной конфигурации; &Перед/&После на функцию; несовпадение вида метода у &Вместо/&ИзменениеИКонтроль (нужен --base) |
| P6 | копия тела под &ИзменениеИКонтроль расходится с текущим телом оригинала вне блоков #Вставка/#Удаление (нужен --base) |
| P7 | заимствованный объект, в котором ничего не изменено и не добавлено |
| P8 | собственный объект, на который нет ссылок |
| P9 | привилегированный собственный общий модуль |
| P10 | Выполнить(, Вычислить(, отключение безопасного режима, COM, запуск приложений, HTTP, удаление файлов, внешние компоненты; комментарии и строки пропускаются |
| P11 | Сообщить( в серверном коде, длинные закомментированные блоки, команды без обработчика или без элемента формы |
| P12 | нет роли, которая даёт права на собственные объекты расширения |
Запуск
Распакуйте архив и перейдите в каталог ext-precheck, где лежит ext_precheck.py. Выгрузки делаются Конфигуратором, затем запускается проверка. Подставьте свои пути вместо обозначений в угловых скобках; пути с пробелами заключайте в кавычки:
Если выгрузки расширения нет, можно передать файл .cfe: инструмент сам создаст временную пустую базу, загрузит расширение и выгрузит его. На одном из расширений стенда этот режим занял 12,7 с и требует установленной платформы 1С. Для каждого запуска задавайте новый отдельный каталог --out: подкаталог _work внутри него удаляется после работы. Ключ --keep сохраняет его.

Прогон на контрольном расширении: сводка находок по правилам

После «обновления типовой» P5 и P6 нашли обе поломки перехватов
- Инструмент проверяет выгрузки и не запускает расширение: поведение в клиентском приложении он не показывает.
- Инструмент не проверяет синтаксис и ограничения мобильной платформы; на стенде их проверяли
/CheckModulesи/CheckConfig; их стоит запускать после инструмента, вместе с/CheckCanApplyConfigurationExtensions. - P5/P6 подтверждены опытом только на общих модулях. Полнота поиска и сопоставления перехватов в модулях форм и объектов не подтверждена.
- Динамически собранное из частей имя объекта правило P8 не видит и может назвать объект неиспользуемым.
- Предупреждения и сведения требуют ручного разбора: опасный вызов может быть нужен продукту, тогда его стоит описать в инструкции.
- P7 оценивает заимствования по эвристике, без полного сравнения метаданных. Для P12 нужна полная выгрузка с
Rights.xml; отсутствие файла требует проверки полноты исходников. HTTP, назначение «Исправление» и более низкий режим совместимости сами по себе не доказывают неисправность. - Без
--baseправила P3, P5 и P6 выдают сведения о невозможности сравнения. - Формат проверен на выгрузках платформы 8.3.27.
Что в архиве
| Файл | Назначение |
|---|---|
ext_precheck.py |
проверка, правила P1–P12, режимы выгрузки и .cfe |
bsl_scan.py |
разбор модулей: комментарии, строки, аннотации, тела методов |
tests/ |
69 тестов на фикстурах из настоящих выгрузок платформы |
README.md |
запуск, коды возврата, правила, пределы |
Проверено на Python 3.12.10, используется только стандартная библиотека; другие версии Python не проверялись. Распаковывайте Проводником Windows, 7-Zip или Python: unzip из Git Bash портит кириллические имена файлов. Проверить архив после распаковки: python -I -m unittest discover -s tests.
Подробный опыт
Как собиралось контрольное расширение, что нашла каждая пакетная команда платформы и как прошёл сценарий обновления типовой, описано в статье «Проверка расширения перед продажей: 28 контрольных замечаний и пять команд Конфигуратора». В комплекте статьи собраны журналы прогонов, чек-лист и команды опыта. Пока статья остаётся черновиком, ссылка недоступна читателям; перед публикацией витрины нужно проверить её доступность.
Вступайте в нашу телеграмм-группу Инфостарт