Картинка - Analyzer 1C — граф знаний о конфигурации 1С и расширениях, подключаемый к ИИ через MCP. Обновление поставки за дни вместо недель

Analyzer 1C — граф знаний о конфигурации 1С и расширениях, подключаемый к ИИ через MCP. Обновление поставки за дни вместо недель

Analyzer 1C сводит выгрузку 1С — основную конфигурацию и все расширения — в единый граф знаний. Любой запрос по связям за доли секунды, с пометками «Доб.» / «Заимств.» / «Переопределено». Новое в 2.0 — обновление поставки: сравнение и объединение версий деревом «как в Конфигураторе» с выгрузкой плана решений; поиск конфликтов из-за перехватов расширений и висячих ссылок; загрузка из бинарных .cf/.cfe; циклические зависимости. Плюс анализ влияния, запросы BSL, роли и RLS, граф вызовов. Минута на развёртывание через Docker без необходимости подключения к Интернет. Любая 1С:Предприятие 8.3+.

Арт.: 2669235

Продано: 44

Лицензия (основной продукт)

14 000 руб.

Выгодный пакет

34 000 руб.

Продление обновлений

6 900 руб.

24 900 руб.

Техподдержка

6 000 руб.

Analyzer 1C — граф знаний о конфигурации 1С, подключаемый к ИИ через MCP

Analyzer 1C собирает типовую конфигурацию и все её расширения в единый граф: объекты, модули, функции, права и RLS-условия, подписки, регламенты, запросы BSL. У каждой сущности видно, откуда она — из типовой или из расширения. Вопрос «что сломается, если это поменять» решается за секунды, а не часами поиска по Конфигуратору.

  • Обновление поставки за дни вместо недель — сравнение и объединение версий деревом «как в Конфигураторе», скрытые конфликты с расширениями, готовый план решений для Конфигуратора.
  • Граф для ИИ и прямо в среде разработки — программный доступ для ИИ-агентов по протоколу MCP, Analyzer внутри 1C:EDT и рядом с Конфигуратором.
  • Влияние любой правки — кто вызывает функцию, кто читает объект в запросах, какие роли и RLS-условия его касаются.

Примеры на странице — 1С:ERP. Управление холдингом с расширением «Управление лизингом»: 27 547 модулей, 699 847 функций, 2 032 роли. Демоверсия — в разделе «Бесплатные файлы».

Версия 3.0: Analyzer 1C переходит на PostgreSQL

С версии 3.0 данные хранятся в PostgreSQL 18 — он входит в поставку и разворачивается вместе с приложением, отдельно ставить ничего не нужно. ArangoDB больше не используется. Интерфейс, REST API и MCP работают как прежде.

Переход с версии 2.9.x — обычным deploy.sh (deploy.bat). Распакуйте новую версию и запустите его. Он сам найдёт данные прежней версии, проверит место на диске и предложит: перенести всё вместе с графами систем; перенести пользователей, настройки и наработки, а системы загрузить заново; не переносить сейчас. Данные прежней версии при переносе не меняются, и его можно повторить.

Учтите одно: перенос большой базы занимает часы, приложение в это время остановлено. По ssh запускайте deploy.sh под tmux, screen или nohup. После обновления системы помечаются «нужна перезагрузка»: граф до неё рабочий, перезагружайте системы по одной в удобное время.

Подробно — INSTALL.txt в поставке, раздел 2д.

Analyzer 1C - обзор-3.0.6

Видео-демонстрация

Обновление типовой: за дни, а не недели

Analyzer сравнивает версии деревом, как штатное «Сравнение и объединение конфигураций»: тип метаданных → объект → что изменилось внутри. Для каждого изменения предлагается решение, его можно поменять прямо в строке. Работа сохраняется на сервере, поэтому большое обновление можно вести несколько дней. Готовый набор решений выгружается файлом настроек, который подхватывает «Сравнение и объединение» Конфигуратора.

дерево сравнения версий: тип метаданных, объект, изменённые функции внутри, фильтры по категориям
окно кода функции в три колонки с подсветкой BSL и панелью «Результат объединения»
  • Окно кода в две или три колонки (Основная, Поставщик, База) с подсветкой BSL и панелью «Результат объединения».
  • Скрытые конфликты. Вендор изменил функцию, а расширение подменяет её через &Вместо или &ИзменениеИКонтроль — обновление не вступит в силу, хотя выглядит как «обновится само». Analyzer помечает такое изменение конфликтом и называет расширение.
  • Висячие ссылки. Если вендор удаляет функцию, которую у вас ещё вызывают, окно кода покажет список вызывающих.
  • Поставка из бинарных .cf и .cfe загружается напрямую, без выгрузки в файлы, включая поставки больше гигабайта.

Выгрузка настроек объединения пока в разработке: перед применением сверяйте предложенные решения и итоговый код в Конфигураторе. Ответственность за корректность объединения лежит на пользователе.

Граф для ИИ и прямо в среде разработки

Граф конфигурации доступен ИИ-ассистенту по протоколу MCP (Model Context Protocol): состав объектов, связи, анализ влияния, роли, циклы — те же данные, что видны в интерфейсе. Выводы ИИ опираются на реальное устройство конфигурации, а не на догадки модели.

Чтобы заглянуть в граф, не нужно переключаться в браузер. Оба компаньона скачиваются из верхней панели Analyzer:

  • Effector 1C — плагин для 1C:EDT. Поставили курсор в функцию — рядом её граф вызовов; выбрали объект в дереве метаданных — открылась его карточка. Тот же плагин даёт ИИ-агентам инструменты для работы с кодом открытого проекта под вашей политикой записи.
  • Reflexor 1C — окно рядом с Конфигуратором. Показывает карточку выбранного объекта, а у каждой процедуры открытого модуля — строки, ветвления, запросы и вызовы. Ничего в базе не меняет.
карточка документа: связи, функции с перехватами расширения, запросы — по вкладкам

Код-ревью и авторство по коммитам

Если конфигурация живёт в git, видно, что с ней делала команда: правки за период с отбором по автору, задаче и ветке, дерево затронутых объектов и код «было / стало» рядом. Для каждой строки модуля — автор, дата, коммит и номер задачи со ссылкой на ваш трекер. Дельта к релизу показывает, что накопилось в разработке сверх релиза. Репозиторий подключается в настройках базы, ветки обновляются по расписанию.

список правок за период с отбором по автору, задаче и ветке
дерево затронутых объектов и код метода «было / стало» рядом

Больше возможностей вместе с Analyzer 1C

Analyzer 1C входит в линейку продуктов для работы с конфигурацией 1С. Дополните анализ структуры данными о реальном использовании объектов с помощью Insight 1C или используйте результаты анализа при постановке и реализации новых задач с Pilot 1C.

Insight 1C

Как используется конфигурация

Insight 1C снимает срез реального использования объектов информационной базы и помогает понять, какие возможности конфигурации действительно задействованы.

Pilot 1C

От задачи до готового решения

Pilot 1C превращает бизнес-задачу в техническое задание, код BSL и сценарии проверки, используя данные о структуре конфигурации из Analyzer 1C.

Что ещё умеет Analyzer 1C

Всё ниже работает и для типовой, и для расширений: вклад расширения помечен маркером «Доб.» (создано расширением), «Заимств.» (типовое, дополненное расширением) или именем расширения, если оно подменило обработчик.

Граф вызовов

Кто вызывает функцию и что вызывает она, включая косвенные пути через подписки, регламенты и перехваты расширений. Граф построен заранее, ответ приходит за доли секунды.

Граф вызовов

Функции-монстры

Функции длиннее 500 строк, с 50 и более ветвлениями, запросами в цикле или множеством запросов — и у каждой объяснение, почему она в этом списке.

Функции-монстры

Запросы BSL

Кто читает и пишет объект через язык запросов: модули, динамические списки форм и макеты СКД. Текст запроса раскрывается прямо в карточке.

Запросы BSL

Роли и RLS

Права роли по объектам; текст RLS-условия открывается одним щелчком по пометке (RLS) рядом с правом.

Роли и RLS

Параметры сеанса

Где параметр устанавливается, кто его читает и в каких RLS-условиях он участвует. Установка в привилегированном режиме помечена PRIV.

Параметры сеанса

Конструктор профилей

Отметьте роли — и до создания профиля увидите итоговые разрешения и роль, из которой пришло каждое право.

Конструктор профилей

Дерево типов

Вся конфигурация по видам метаданных со счётчиками; объекты типовой и расширений в одном списке с маркерами.

Дерево типов

Подсистемы

Состав каждой подсистемы и вклад расширений в неё.

Подсистемы

Поиск

По синониму, а не только по символьному имени; результаты сгруппированы по видам метаданных.

Поиск

Подписки и регламенты

Какие процедуры срабатывают при записи объекта, их источники и обработчики; подписки, добавленные расширением, помечены.

Подписки и регламенты

Команды

Команды объектов и общие команды, их группы и роли, которым они доступны.

Команды

Обработчики обновления ИБ

Что отработает при обновлении с версии X до Y по каждой подсистеме БСП, с очерёдностью и режимом.

Обработчики обновления ИБ

Функциональные опции

Что опция отключает в интерфейсе и где её значение читается в коде.

Функциональные опции

Граф связей объекта

Связи документа или справочника графом с отбором по видам узлов.

Граф связей объекта

Циклические зависимости

Кольца взаимных вызовов модулей и самое слабое звено, разрыв которого проще всего разомкнёт цикл.

Циклические зависимости

XDTO-пакеты

Типы пакета, их свойства и Web-операции, которые их используют, — карточкой и графом связей.

XDTO-пакеты

Обзор конфигурации

Подсистемы, модули, функции, вызовы и роли загруженной системы на одной странице.

Обзор конфигурации

Шесть способов загрузки

ZIP-выгрузка, монорепо, отдельные репозитории, EDT-проект, EDT workspace и бинарные .cf/.cfe; формат определяется автоматически, git — с ветками.

Шесть способов загрузки

Чем отличается от Конфигуратора

  • Скорость. «Поиск ссылок на объект» в ERP занимает минуты, в Analyzer — доли секунды: это обход заранее построенного графа.
  • Обратные вопросы. Кто читает объект в запросах, кто вызывает функцию через подписку или регламент — в Конфигураторе это полнотекстовый поиск и ручная сверка.
  • Типовая и расширения вместе. В Конфигураторе они показаны раздельно, здесь — в одном дереве с маркерами вклада.
  • Права до создания профиля. Вместо тестового профиля в базе — конструктор профилей.

Analyzer 1C — только анализ: он работает с выгрузкой конфигурации, а не с информационной базой, и ничего не меняет. Правка кода, отладка и обновление базы остаются в Конфигураторе или EDT.

Что включает лицензия поставки

Программа одна, интерфейс один; что в нём доступно, задаёт лицензия поставки. Без лицензии работает разбор одной загруженной системы — дерево метаданных, карточки объектов, роли и RLS, параметры сеанса, функциональные опции, состав типов, граф вызовов, анализ влияния, циклические зависимости, просмотр кода функций. Число расширений к этой системе не ограничено: счёт идёт по системам, а не по .cfe. Лицензия задаёт число систем и включает обновление поставки, код-ревью, разграничение доступа и программный доступ для агентов.

Возможность Без лицензии Включается лицензией
Граф типовой и расширений, все срезы анализа + +
Загруженных систем одновременно 1 по лицензии
Сравнение и объединение версий, выгрузка плана для Конфигуратора — +
Код-ревью: что изменила команда, авторство строк — +
Разграничение доступа пользователей, вход через каталог предприятия — +
Внешнее API для чтения графа и программный доступ для агентов (MCP) — +

Лицензия приходит письмом строкой или файлом и вводится в самой программе — подключения к интернету и привязки к оборудованию она не требует. Расширить лицензию можно в любой момент, не переустанавливая продукт: программа подхватывает новую строку сразу.

Попробовать можно до покупки: демоверсия лежит на этой же странице, в разделе «Бесплатные файлы». Она работает с ограничениями из таблицы выше — этого достаточно, чтобы посмотреть интерфейс, порядок работы и отчёты на своей конфигурации.

Analyzer 1C поставляется как готовый Docker-образ. Для развёртывания нужен только Docker — ни Python, ни Node.js, ни СУБД устанавливать отдельно не требуется. Всё упаковано в образ.

Windows 10/11:

  1. Скачайте Docker Desktop
  2. Запустите установщик, перезагрузите компьютер
  3. Убедитесь, что Docker запущен (иконка в трее)

Ubuntu / Debian:

sudo apt update
sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable --now docker
sudo usermod -aG docker $USER
# Перелогиньтесь, чтобы применить группу

Скопируйте на сервер файлы из архива поставки:

  • analyzer-1c-offline.tar — Docker-образ
  • docker-compose.prod.yaml — конфигурация запуска
  • deploy.sh (Linux) или deploy.bat (Windows) — скрипт деплоя
  • start.sh, stop.sh (Linux) или .bat-варианты (Windows) — повторный запуск и остановка
  • .env.example — пример настройки переменных окружения

Поставка автономна: в одном архиве и приложение, и база PostgreSQL — они поднимаются вместе одной командой, отдельно базу устанавливать не нужно.

Linux:

bash deploy.sh

Windows (cmd или PowerShell):

deploy.bat

Скрипт загрузит образ, запустит контейнер и удалит архив. После запуска приложение доступно по адресу http: / localhost:8000.

Для остановки: bash stop.sh / stop.bat. Повторный запуск: bash start.sh / start.bat.

Откройте веб-интерфейс, в выпадающем списке систем выберите «Загрузить новую...» и укажите папку для загрузки и ZIP-выгрузку конфигурации либо адрес git-репозитория и ветку. Расширения должны загружаться в ту же папку, что и основная конфигурация, с другим именем архива. Разбор и загрузка ERP УХ (27 547 модулей) занимает около 15 минут. Можно загрузить несколько конфигураций и переключаться между ними.

Обновление ставится поверх текущей установки тем же способом, что и первая установка: скопируйте в ту же папку новый analyzer-1c-offline.tar из свежей поставки и запустите deploy.sh / deploy.bat ещё раз. Скрипт загрузит новый образ и пересоздаст контейнер приложения.

Данные при обновлении не теряются. Обновляется только образ приложения. База PostgreSQL (она хранится в отдельном томе Docker) и папка conf/ с загруженными конфигурациями остаются на месте, поэтому после обновления сохраняются:

  • все загруженные конфигурации и расширения;
  • зафиксированные версии и поставки, история сверки и объединения;
  • уже построенный граф знаний — он сразу доступен после обновления.

Перезагружать конфигурацию заново не требуется, если обновление не меняет логику загрузки. Но если в новой версии доработан разбор (новые поля, коллекции графа, парсеры объектов или связей), конфигурацию нужно перезагрузить кнопкой «Перезагрузить» в шапке — чтобы граф пересобрался с учётом улучшений. Что именно меняется в каждой версии, указано в её описании.

История версий

Перезагрузка систем: ТРЕБУЕТСЯ — формат разбора в этой версии новее: после обновления все системы помечаются «нужна перезагрузка», граф до неё рабочий, перезагружайте системы по одной в удобное время, поставки из бинарного .cf/.cfe зарегистрируйте заново; сам перенос данных прежней версии на PostgreSQL перезагрузки не требует.

Новое

Analyzer 1C хранит данные в PostgreSQL, ArangoDB больше не нужна

PostgreSQL 18 с расширением pgvector входит в поставку (порт наружу не открыт, пароль базы скрипт развёртывания создаёт сам и записывает в .env). Ответы интерфейса, REST API и MCP прежние. База занимает память сверх приложения — требования к памяти и диску см. в начале INSTALL.txt.

Перенос данных прежней версии из ArangoDB: migrate.sh (migrate.bat)

Переносит загруженные системы, пользователей и роли, права, журналы и подтверждения рисков и сверяет результат с источником. Состав выбирается при каждом запуске: только пользователи, настройки и наработки (системы затем загружаются заново из выгрузок, которые остаются в папке conf) или всё вместе с графами систем; без терминала состав задаётся ключом --settings-only или --with-graph. Ход переноса виден на экране по шагам. Строки с недопустимым для PostgreSQL символом NUL переносятся с заменой, все такие места перечисляются в отчёте. Если сверка нашла лишь единичные расхождения в текстах модулей (не больше 100 записей и не больше 0,01 % записей, число записей сошлось), многочасовой перенос не откатывается: приложение запускается на перенесённых данных, а консоль печатает сводку расхождений с ключами записей — такой текст модуля перезагрузкой системы не исправляется, сводка просит обратиться в поддержку. Прочие расхождения отменяют перенос, а консоль показывает сводку: какие данные разошлись, до пяти ключей-примеров, что сделано после отказа и какой каталог отчёта приложить в поддержку. Источник — том ArangoDB прежней версии на этой машине (по умолчанию), своя ArangoDB 3.11 или 3.12 (читается без изменений) или резервная копия (ключ --from-backup). Если в новой версии уже загружены системы или заведены пользователи, перенос откажет без ключа --replace. Неудачный или прерванный перенос возвращает базу PostgreSQL к состоянию до запуска, данные ArangoDB не меняются — запуск можно повторить. Перенос большой базы занимает часы: по ssh запускайте его под tmux, screen или nohup. В Windows перенос со своей ArangoDB и из копии выполняется через WSL. Порядок — INSTALL.txt, раздел 2д.

Обновление с версии на ArangoDB: deploy.sh сам предлагает перенести данные

deploy.sh (deploy.bat) находит данные прежней версии до любых изменений, показывает том, объём, прежнюю версию и свободное место и предлагает перенести всё, только настройки и наработки или не переносить; перенос запускается сразу после подъёма новой версии. Без терминала выбор задаётся ключом --migrate=full|settings|skip (deploy.bat — --migrate full) или переменной ANALYZER_MIGRATE_ON_DEPLOY. Контейнер ArangoDB останавливается, том с её данными остаётся нетронутым; когда перенос сделан или не нужен, deploy.sh предлагает удалить том — только с подтверждением именем тома. Копию прежней базы снимайте backup.sh из папки прежней версии до распаковки новой, архив прежней поставки храните до переноса.

Резервная копия базы: backup.sh (backup.bat)

Снимает дамп базы PostgreSQL и копию .env в папку backup, заранее проверив место на диске; копия восстанавливается штатной командой pg_restore по README.txt копии.

Протокол проверки внешней обработки

Вкладка в карточке обработки рядом с «Подключением»: что обработка делает по тексту модулей — сеть, выполнение кода, права, файлы и ОС, запись и удаление данных базы, запросы к объектам вне назначения регистрации — с местом, кодом, цепочкой вызовов и командой, кнопкой или событием формы, с которых цепочка начинается. Отдельно перечислено, что разобрать не удалось, в том числе модули, защищённые паролем. Слева — история публикаций со сводкой находок, по умолчанию протокол сравнивается с предыдущей версией обработки: что появилось и что исчезло. Протокол выгружается в PDF и Markdown, протокол прошлой версии собирается из истории.

Раздел «Портфель систем»: риски одного перехода поставки сразу по группе систем

Матрица «конфликт × системы» по всем классам рисков (перехваты, переопределённые формы, заимствованные объекты, удалённые вендором, запросы к снятым полям, обработчики обновления, права ролей), отбор «Общие / Только в одной», столбец «Исправление» (один патч на все системы или несколько вариантов), вкладки «Дрейф расширений» и «Порядок обновления». Большой портфель досчитывается в фоне, экран обновляется сам. Метки портфеля задаёт администратор в настройках системы; видны только системы, к которым у пользователя есть доступ. Ограничивается лицензией поставки.

Портфель систем для ИИ-агента: инструмент MCP portfolio_risks

Конфликты, дрейф расширений и порядок обновления одним инструментом. Права проверяются на каждую систему списка, без списка берутся все доступные пользователю системы; длинные списки читаются страницами (limit и offset).

Снимок контракта с ветки и сверка с контрактом другой ветки; инструмент MCP check_contract

Сверка контракта снимает публичный интерфейс объектов (экспортные методы с параметрами, реквизиты и табличные части, состав регистров и типы) с графа одной ветки и сверяет его с графом другой ветки той же системы. Ветка, изменившаяся за время расчёта, даёт отказ, а не ответ из смеси двух загрузок. Тот же расчёт доступен ИИ-агенту.

Риски обновления ролей: исходы по способу обновления

Для изменённой типовой роли видно, что будет с правами при объединении, при объединении с -force и без объединения; те же исходы — в выгрузке рисков.

Аудит проектирования регистров: три новые подсказки

Регистр сведений с периодичностью «В пределах секунды» или «По позиции регистратора» — с числом запросов среза к нему; регистр сведений, который запросы чаще всего отбирают по измерению, стоящему не первым и не покрытому индексом, — с советом индексировать или переставить измерение; при подключённом Insight 1C к регистрам с находками добавляется число записей таблицы.

Светлая тема интерфейса

Переключатель «солнце/луна» в шапке; выбор запоминается в браузере, по умолчанию — тёмная тема.

Паспорт доработок в PDF

Паспорт доработок системы выгружается и в PDF — с кириллицей, таблицами на всю ширину альбомного листа и номерами страниц.

Улучшения

Дерево подсистем и дерево по типам открываются быстрее

На больших конфигурациях вроде ERP дерево подсистем собиралось около 4 секунд при каждом открытии. Теперь сборка обоих деревьев ускорена сама по себе, без опоры на кеш, и первое открытие тоже быстрое.

Повторная загрузка системы вдвое быстрее

Модуль, у которого не изменились ни текст, ни ответы состава конфигурации, берётся из кеша разбора, а не разбирается заново; повторная перезагрузка расширений тоже берёт часть данных из кеша. Кеш включён по умолчанию, выключается переменной ANALYZER_FULL_PARSE_CACHE=0. Предел ANALYZER_REVIEW_CACHE_MB поднят с 512 до 2048 МБ: конфигурации масштаба 1С:ERP нужно около 0,7 ГБ, на нескольких таких конфигурациях предел стоит поднять больше суммы их кешей. Первая загрузка после обновления Analyzer разбирает модули заново.

Шаг загрузки «Сверка пометок эталонов» быстрее на больших системах

Раньше на больших системах шаг заново записывал пометки всех функций вместе с текстами модулей и мог десятки минут ничего не писать в журнал. Теперь записываются только пометки, которые действительно изменились, а тексты модулей не переписываются; обновление ветки по новым коммитам записывает пометки лишь тех функций, у которых они изменились. Если запись всё же идёт долго, журнал загрузки показывает её ход.

Шаг загрузки «Анализ запросов в формах и СКД» снова идёт в темпе версии 2.9

На крупных конфигурациях этот шаг в 3.0 шёл в несколько раз дольше, чем в 2.9.

Окно журнала загрузки можно скрыть, не останавливая загрузку

Кнопка «Скрыть» или крестик закрывают окно, загрузка идёт дальше; пока она идёт, значок кнопки загрузки вращается. Вернуться к журналу — пунктом «Идёт загрузка — показать журнал» в меню кнопки загрузки. Остановить загрузку — кнопкой «Остановить» в окне журнала.

Список систем объясняет, что устарело у системы с прежним разбором

Подсказка у системы, ждущей перезагрузки, называет, что именно устарело — аналитика запросов и вызовов, сравнение со свежей поставкой (покажет ложные изменения) или то и другое, — и напоминает, что граф до перезагрузки рабочий.

Архивы поставки с номером версии в имени

Имя архива Analyzer 1C, Effector 1C и Reflexor 1C содержит номер версии: analyzer-1c-full-<версия>.zip, effector-1c-<версия>.zip, reflexor-1c-<версия>.zip. Окно «Взаимодействие с 1С» отдаёт архив под его собственным именем.

Новую версию можно распаковать в любую папку

deploy.sh находит прежнюю установку и записывает в .env имена её томов и полный путь к папке conf; если установок на машине несколько, просит указать нужную. База, история загрузок и конфигурации остаются прежними.

Использование объектов по данным Insight 1C — во всех классах рисков обновления

Вес по данным Insight 1C получают позиции всех классов отчёта «Риски обновления», а не только перехваты и снятые реквизиты; по нему можно сортировать (в MCP update_risks — usage=insight и sort=usage). Выгрузка в Markdown и Excel получает столбец «Использование». «Нет признаков использования» тяжесть риска не снижает.

Связи объекта: движения документа по регистрам — отдельный вид связи

Раньше регистры попадали в связи документа только как ссылки или запросы, а сами движения не показывались. Теперь у документа есть строки «Движения в», у регистра — «Регистратор»; вид связи виден в колонке «Связь» и выбирается фильтром «Направление». Движение, дописанное расширением между типовыми документом и регистром, помечено именем расширения.

Форма и табличный макет из бинарной поставки сравниваются с выгрузкой по составу

Окно «Сравнить» у формы из .cf/.cfe показывает вердикт и пять разделов состава (события, реквизиты, параметры, команды, элементы) вместо разницы записи; макет сравнивается по областям, параметрам и текстам ячеек. Без правок — «без изменений», с правкой — «изменён».

Сверка версий: устаревшие методы ищутся и в вызовах модулей менеджеров и объектов

Раньше проверялись только общие модули. Вызов через копию переменной тоже распознаётся, модуль объекта и модуль менеджера с одинаковым именем не смешиваются; цепочки присваиваний, которые не удалось проследить до конца, помечаются непроверенными, а не подтверждёнными.

Портфель систем: варианты исправления общего конфликта проверяются точнее

Перехват сверяется по полному адресу метода (расширение, модуль или форма, метод), а не по имени. Перехваты из нескольких расширений сравниваются с учётом порядка срабатывания по назначению расширения. Перехватчики, которые вызывают метод глобального общего модуля или выполняют код из строки, не объединяются в один вариант без проверки, а помечаются непроверенными.

Состав формы (MCP get_form): видимость элементов, обработчики событий и команды кнопок

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

Прогноз индексов СУБД у регистров сверен с фактическим составом индексов платформы

Периодичность Месяц, Квартал и Год прогнозируется так же, как День; учитывается «Основной отбор по периоду» (для выгрузки в файлы и проекта EDT). Запросы к срезам регистров сведений и к остаткам и оборотам регистров накопления оцениваются по фактической структуре хранения: период таблицы итогов учитывается всегда, период оборотов — всегда диапазон, период, заданный функцией от параметра, считается значением. Покрытие запроса с неизвестными признаками измерений помечается непроверенным, а не подтверждённым.

Запросы разбираются полнее

Распознаются таблицы, перечисленные через запятую, вид объекта в любом регистре букв, запросы, заданные через Query.Text, поле с полным именем таблицы без псевдонима, таблицы внутри групп соединений в скобках и арифметика в значении условия. Строки внутри текста запроса больше не принимаются за таблицы, таблица соединения не помечается как «читается частично». Изменения видны в «кто читает объект» и в отчёте по индексам регистров после перезагрузки систем.

Выходные эффекты параметров функций точнее

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

Аудит проектирования регистров точнее определяет, пишет ли документ свой регистр

Явное отключение записи набора больше не считается записью; набор, переданный в процедуру общего модуля, засчитывается документу; если проверить нечем, регистр попадает в «непроверенные» с причиной, а не в подозрения. Запросы, текст которых не разобран статически, не дают совета перезагрузить систему.

Риски обновления ролей точнее

У роли, скопированной с типовой, больше не появляются строки о правах, которые поставщик выдал только соседней роли. Роль с флагом «Устанавливать права для новых объектов» не показывает объекты из обновления непроверенными. В строке риска и в выгрузке видно, сколько объектов роли проверить не удалось.

Выгрузка процесса в BPMN находит больше внешних вызовов

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

Ответы при равных значениях больше не зависят от порядка загрузки

Клоны кода, тяжёлые запросы и дубли запросов, топы процессной карты, порядок вызывающих и вызываемых функций, права, роли и подсистемы в карточках, выдача поиска и поиска интерфейсной обёртки, отчёты о рискованных движениях и вызовах экспортных методов поставщика при равных значениях выдаются в постоянном порядке. После обновления порядок части строк может один раз смениться.

Регрессионный список не считается параллельно с другими тяжёлыми операциями

Расчёт идёт в общей очереди с выгрузкой поставки и сборкой пакета; пока идёт другая тяжёлая операция, список просит повторить запрос позже. Расчёт дольше 15 минут останавливается с понятным сообщением; предел задаётся переменной ANALYZER_REGRESSION_TIMEOUT.

Ручная перезагрузка во время обновления рабочей копии из git отвечает «занято»

Если расписание веток в этот момент обновляет рабочую копию, перезагрузка сразу отвечает «занято» (код 409), не переключая копию; рабочая копия защищена от чужих операций git до конца загрузки.

Вводится на основании (MCP based_on): реквизит-носитель основания и хеш расширения

У каждой пары заполнения показывается реквизит, в который обработка заполнения записывает документ-основание, и уверенность в этом выводе; у расширения, загруженного из .cfe, — тот же хеш, что платформа показывает у расширения в базе.

Языки конфигурации проекта EDT попадают в граф, как у выгрузки в файлы и поставки .cf

Дрейф расширений не считает расхождением типа реквизита разное написание примитивных типов в EDT и в выгрузке.

Исправление ошибок

Загрузка из бинарного .cf: формы критериев отбора без модуля теперь извлекаются

Предупреждение «формы вне известных коллекций (FilterCriteria)» больше не появляется. Чтобы формы появились, перезагрузите системы, загруженные из .cf, у которых есть критерии отбора с формами.

Система с символом NUL в тексте модуля или формы загружается

Раньше загрузка такой системы обрывалась ошибкой записи в базу. Символ NUL заменяется на «A533;», места замены (файл и число замен) перечислены в журнале загрузки.

Доступ к данным чужой системы по ключу закрыт

Карточки функции, роли, регламентного задания, HTTP- и веб-операции, подписки, связи объекта, предпросмотр профиля, авторство и история функции проверяют, что ключ из запроса принадлежит выбранной системе; ключ другой системы получает тот же ответ, что и несуществующий. При смене системы интерфейс сбрасывает выбранные функцию, роль и объект.

Сообщения об ошибках больше не раскрывают адреса, пути и учётные данные сервера

Ответ «Хранилище недоступно», итоги и журналы загрузки, сравнения и сверки, ответы инструментов MCP, ответы о недоступности каталога LDAP и ключа подписи уведомлений, ошибки запуска фоновых операций и записи файлов раньше могли повторять текст драйвера или системы — с адресом и портом базы, именем пользователя, путями на сервере. Теперь клиент получает постоянный текст с видом сбоя, подробности пишутся в журнал сервера.

Запрос перезагрузки без режима или с неизвестным режимом больше не загружает все системы

POST /api/reload без параметра mode или с режимом вне списка all, dir, ext, changed, processings отвечает ошибкой 400 с перечнем допустимых режимов; mode=all вместе с папкой — ошибкой 400 с подсказкой mode=dir. Скрипты, которые вызывают перезагрузку без mode, должны передавать его явно, например mode=dir&dir=<папка>.

Загрузка только расширений даёт тот же граф, что и полная

Больше не теряются и не искажаются: вызов из типового кода в метод, дописанный расширением в типовой общий модуль; движения регистров в коде расширений; типовые формы и пометка «добавлено расширением» у реквизитов; состав и тип возвращаемого значения функций; данные типовых подсистем, планов видов характеристик и модулей; права и число объектов ролей, дополненных расширением; измерения регистров и ссылки реквизитов расширения; идентификаторы и связи команд расширений (команды больше не множатся, удалённые — убираются); пометки сверки с эталоном у новых и изменённых функций расширений.

Свойства регистров и общих реквизитов из бинарного .cf читаются так же, как из выгрузки

Раньше вид регистра накопления из бинаря всегда считался «остатки», и оборотные регистры получали неверные движения; периодичность и режим записи регистров сведений не читались, и отчёт о проектировании регистров давал ложные находки «запрос без отбора по индексу». Теперь читаются вид и использование в итогах у регистров накопления, периодичность и режим записи у регистров сведений, разделение данных и состав общего реквизита; нераспознанное свойство показывается «не прочитано», а не берётся по умолчанию.

Сверка с эталоном-поставкой из бинарного .cf больше не показывает тысячи «удалённых» функций

Одноимённые методы модулей объекта, менеджера, команд и форм сводятся по типу модуля, а общий макет с образцом кода больше не разбирается как модуль.

Сверка бинарной поставки .cf: меньше ложных «изменено»

Реквизит типа «объект обработки» или «объект отчёта» получает тип, как в выгрузке; определяемые типы с задачами и константами, командный интерфейс подсистем и обычные общие формы сравниваются как в выгрузке; режим совместимости, прочитанный с ошибкой, показывается «не извлечено из бинаря», а не случайным значением.

Сверка версий больше не теряет правку формы за пределами 1500 элементов дерева

Состав формы по-прежнему показывает первые 1500 элементов, а сравнение форм учитывает всё дерево: добавленный, удалённый, переименованный или перенесённый элемент за этой границей больше не теряется.

Сверка выгрузок больше не пропускает смену типа реквизита между «объектом» и «ссылкой»

Смена «СправочникОбъект» на «СправочникСсылка» (и значения характеристики на ссылку ПВХ) в реквизитах видна в трёхстороннем сравнении, сверке контрактов и отчёте о сменах типа реквизитов заимствованных объектов, когда обе стороны — выгрузки в файлы.

Права ролей из бинарной поставки .cf: снятое право удаления

Снятые в роли права интерактивного удаления и права на предопределённые данные больше не показываются разрешёнными в отчётах «Роли объекта» и «Права профиля».

Источники подписок на события из расширений и определяемых типов

Источник, который расширение добавляет типовой подписке, и подписка, у которой источник — определяемый тип, теперь видны у каждого объекта в списке подписок и в анализе влияния, в том числе после перезагрузки только расширений.

Отчёт о рискованных движениях не теряет документы

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

Поиск интерфейсной обёртки находит обёртки над регистром и по точной цепочке вызовов

Запрос без поля («обёртка над регистром») раньше ничего не находил, а обёртка, к которой первой вела строковая регистрация или предполагаемый вызов, могла пропасть из ответа. Глубина подъёма ограничена шестью уровнями.

Повреждённая зафиксированная версия даёт сообщение о повреждении, а не «удалены все объекты»

Сравнение версий, трёхстороннее сравнение, отчёты рисков обновления и окна сравнения формы, макета и кода отвечают, что данные версии повреждены и её нужно зафиксировать заново.

Сбой связи с базой больше не выдаётся за «не найдено»

Состав возврата функции, поиск интерфейсной обёртки и список перехватов при обрыве связи отвечают «Хранилище недоступно» (503), а не «функция не найдена» или «обёрток нет»; тяжёлые операции, которые база сняла по сроку, отвечают «повторите позже», а не внутренней ошибкой.

Влияние модуля снова работает

Запрос влияния модуля отвечал ошибкой базы; теперь возвращает связанные модули и цепочки от подписок. На графе влияния функции штриховку «Вместо» получают все функции, перехваченные без ПродолжитьВызов().

Анализ влияния не показывает сам объект среди затронутых

Риск «вызов не находит цели» больше не принимает свойства объекта за отсутствующий общий модуль

Обращения через ЭтотОбъект, ДополнительныеСвойства, Движения, реквизиты и табличные части объекта, переменные модуля и менеджеры вроде ФоновыеЗадания не попадают в отчёт как «общего модуля нет».

Состав возвращаемого значения показывает имя поля, полученное из значения функции, и у вызывающих функций

Свойства типа XDTO без имени больше не сливаются в одно

Квитанция риска «форма, переопределённая расширением» снимается и при правке формы самим расширением

Инкрементальная загрузка пересчитывает модули расширений, вызывающие изменённые методы

Если в модуле менеджера появился новый экспортный метод, инкремент просит полную загрузку.

Объекты и модули с очень длинными именами

Вызовы из форм с длинным путём больше не теряются в поиске вызывающих и рисках, квитанции рисков не путаются между модулями с общим началом имени, инкремент таких систем не падает.

Присваивание, цикл и запись реквизита после метки «~Имя:» распознаются

Загрузка поставки с одноимёнными объектами или функциями больше не отказывает

Неоднозначные элементы показываются как «нет соответствия» и перечисляются предупреждением в журнале загрузки.

Отчёт «Процессы по подсистемам» строится для документов с двумя модулями объекта

Удаление системы не ждёт фиксации версии другой системы и не оставляет записей карты процессов

Выгрузка матрицы прав больше не падает на ролях с незаполненными правами

Авторство и история функции не берут сохранённый ответ из рабочей копии другой загрузки системы

Перезагрузка систем: ТРЕБУЕТСЯ — перезагрузить все системы и заново зарегистрировать поставки и сохранённые версии. Без этого граф вызовов сохраняет ложные вызовы из комментариев, строковых литералов, длинных цепочек обращений и через переменную, которой после общего модуля присвоено другое значение; сверка версий считает изменёнными формы двух бинарных поставок и макеты, отличающиеся только записью. Не появятся и сведения, которые собираются при загрузке: обработчики обновления из модулей менеджеров и их состав объектов, режим совместимости и подписки на события менеджеров у бинарных поставок, вид форм бинарных расширений, состав регистров с учётом расширений и их индексы, выходные эффекты параметров функций; у систем из бинарных файлов исправится число расширений. После обновления Analyzer в фоне строит индекс поиска по функциям; пока индекс системы не готов, поиск работает прежним способом. Внешние обработки, загруженные до обновления системы, помечаются устаревшими, пока их не перезагрузят.

Новое

Регрессионный список для тестировщика

В панели «Риски обновления» появился переключатель «По классам рисков | Регрессионный список». Список показывает объекты, которые стоит проверить руками после обновления на новую поставку: синоним и имя, уровень (подтверждено, не проверено, проверить вручную, для сведения), какие классы рисков или конфликт затронули объект, его формы и реквизиты и что именно проверить — словами, без служебных кодов. Колонка «Пробелы» прямо помечает список неполным, если какая-то проверка не выполнена, и называет места для ручной проверки. Список выгружается файлом Markdown или Excel, доступен через REST (/api/v1/risks/regression) и ИИ-агенту через MCP-инструмент regression_list, который отдаёт и ключи объектов для расчёта приоритета регресса в Insight.

Готовность пакета обновления и квитанции рисков

В панели «Риски обновления» появился пункт «Готовность пакета»: что мешает выпустить пакет (красные риски расширений и непроверенные перехваты) и готов ли он. Руководитель команды принимает риск квитанцией с вердиктом «исправлено» или «принято» и комментарием либо отзывает её; остальные видят состояние без кнопок. Квитанция привязана к содержанию риска: изменился риск — квитанция устаревает и строка возвращается в блокеры, исчез риск — квитанция показана отдельно. Перезагрузка системы квитанции не сбрасывает. Все действия видны в журнале квитанций; если риски посчитать не удалось, квитанции не теряются, а пакет готовым не считается.

Пакет обновления одним архивом

REST-вызов GET /api/diff/update_package собирает zip-пакет к обновлению: сводку готовности, отчёты рисков обновления и расширений, регрессионный список, путь обработчиков обновления, файлы настроек объединения и проверку их полноты. Пакет выдаётся, только когда он готов; иначе ответ называет причины, а по запросу выдаётся черновик с пометкой в имени файла. Сборка идёт отдельным процессом в общей очереди тяжёлых операций, предел времени задаётся параметром ANALYZER_UPDATE_PACKAGE_TIMEOUT. Для выгрузки в формате EDT проверки полноты настроек пока нет, поэтому такой пакет готовым не выдаётся.

Риски обновления: вызовы методов, устаревших в новой поставке

Analyzer находит в коде заказчика (расширения и доработанные функции основной конфигурации) вызовы экспортных методов общих модулей, которые новая поставка помечает «Устарела. Следует использовать…». Отдельно показаны методы, ставшие устаревшими именно в этом обновлении; если вызов не укладывается в новое объявление метода, строка отмечена как риск сигнатуры. Вызов, получателя которого по тексту не определить, уходит в «Не проверено» с причиной.

Риски обновления: вызовы удалённых или изменённых методов вендора

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

Риски обновления: запросы к полям и таблицам, которые новая поставка удалила или переименовала

Analyzer разбирает тексты запросов в коде заказчика и находит обращения к таблицам, табличным частям и полям, которые вендор удалил, переименовал или пометил к удалению префиксом «Удалить», с учётом виртуальных таблиц регистров, вложенных запросов, объединений и псевдонимов. Запросы, текст которых собирается по частям, показаны в «Не проверено».

Риски обновления: обработчики обновления меняют объекты, доработанные заказчиком

Analyzer находит обработчики обновления на пути между поставками, которые изменяют доработанный заказчиком объект (реквизиты, табличные части, движения, код, перехваты, подписки на запись). Обработчик, который объект только блокирует, показан кандидатом, а не риском. Если эталон старой поставки не подтверждён, класс целиком показан непроверенным, а не как «рисков нет».

Риски обновления: права, добавленные вендором в типовые роли

Вендор дал типовой роли новое право, а роль заказчика, сделанная по её образцу, его не получит — строка отчёта подсказывает перенести право. Объекты, которые нельзя однозначно сопоставить между поставками, и изменённые заказчиком типовые роли вынесены в «Не проверено».

Риски обновления: вызовы, несовместимые с новым режимом совместимости платформы

Отчёт показывает, какие доработанные функции основной конфигурации и расширений обращаются к методам и свойствам платформы, поведение которых меняется при переходе на режим совместимости новой поставки. В основе — справочник из 44 правил по разделу документации платформы 8.5 об изменениях, влияющих на совместимость. Правило о методе или свойстве конкретного типа применяется, только когда тип переменной известен; правило с условием и места с неизвестным типом попадают в «проверить вручную». Отчёт доступен через REST (GET /api/diff/platform_compat_call_risks), а в сводку рисков, регрессионный список и выгрузки класс добавляется параметром include_platform.

Внешние обработки в рисках обновления

Риски вызовов устаревших и изменённых методов поставки, снятых реквизитов, значений перечислений и полей запросов учитывают и загруженные внешние обработки и отчёты; находки только из обработок показаны отдельно. Если проверка обработок неполна, панель рисков показывает плашку с перечнем пробелов и кнопку «Открыть внешние обработки».

Свежесть внешних обработок

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

Путь обработчиков обновления между двумя поставками

По паре поставок — текущей версии информационной базы и новой — Analyzer перечисляет обработчики обновления, которые станут кандидатами на исполнение при переходе: по каждой подсистеме с её границей версий, очередью, режимом и составом объектов. Отдельно показаны обработчики «при каждом обновлении», добавленные задним числом и те, границу которых определить нельзя. REST: /api/update_handlers/supply_path.

Обработчики обновления, зарегистрированные в модулях менеджеров

Конфигурации на БСП с регистрацией обработчиков в модулях менеджеров объектов (ERP, УТ, КА) теперь показывают и эти обработчики. У обработчика появились объект-владелец и состав объектов, которые он читает, изменяет и блокирует; состав, который нельзя вычислить по тексту, помечен как неразобранный, а не показан пустым.

Режим совместимости в сверке трёх версий и паспорте обновления

Паспорт сверки трёх версий показывает режим совместимости каждой стороны и режим совместимости расширений — в том числе у поставок и систем, загруженных из бинарного .cf/.cfe.

Запросы к регистру без отбора по индексированным полям

Отчёт о проектировании регистров находит запросы к регистрам сведений и накопления, которые отбирают по полям, ни с одного из которых не начинается индекс регистра. Учитываются измерения и ресурсы, добавленные расширениями, и разделение данных. Запрос, по которому нельзя уверенно судить, попадает в «не проверено» с причиной. Отчёт доступен через REST (GET /api/risks/register_design) и MCP-инструмент get_risks.

Разделение данных в настройках системы

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

Выходные эффекты параметров функций

Описание функции для ИИ-агента (MCP-инструмент get_function) показывает, какие ключи функция вставляет в переданную ей структуру или соответствие и какие временные таблицы кладёт в переданный менеджер временных таблиц, на каком этапе и всегда ли. Если список не установить по тексту, это помечается явно.

Порядок обновления систем портфеля

Отчёт предлагает два порядка обновления группы систем на новую версию: «пилот» — сначала система с наименьшим числом новых конфликтов, и «тяжёлые первыми». По каждому шагу видно, сколько конфликтов новых, а сколько уже разобрано на предыдущих системах. REST: GET /api/risks/portfolio/order.

Проверка дрейфа расширений в CI по обеим ревизиям

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

Улучшения

Поиск функций и поиск механизма для агентов отвечают в разы быстрее и точнее

На конфигурации с сотнями тысяч функций поиск занимал от 9 до 40 секунд, и агент мог не дождаться ответа. Теперь кандидаты отбирает индекс, а найденное и порядок остаются прежними. Предлоги, союзы и основы короче трёх букв не учитываются: запрос «по дате» больше не находит почти любую функцию.

Риски обновления: что не входит в риски, видно отдельно

В списке классов рядом с числом рисков стоят метки «не проверено», «вне поставки» и «по имени». Внутри класса строки, не входящие в риски, разложены по вкладкам «Вне поставки вендора», «По имени», «Обновятся сами» и «Не проверено»; в выгрузке Markdown и Excel — те же разделы с пояснениями.

Снятые реквизиты и значения перечислений: проверяется и код основной конфигурации

Отчёты искали обращения только в расширениях. Теперь проверяется и код заказчика внутри основной конфигурации; у строки указано, где обращение (расширение или основная конфигурация) и в каком объекте и методе. Обращение из обоих мест даёт две строки: править придётся в двух местах.

Отчёт «Расширение под ударом обновления»: устойчивые идентификаторы и поштучный список непроверенных перехватов

У каждого риска есть идентификатор, не меняющийся между пересчётами, и указаны вид перехвата, метод расширения и перехватываемый метод поставки — в выгрузке пакета обновления эти колонки больше не пустые. Перехваты, которые Analyzer не смог проверить, перечислены поштучно с причиной.

Проверка файла настроек объединения предупреждает о составе типов, дополненном заказчиком

Если определяемому типу, плану видов характеристик, функциональной опции или реквизиту назначено «взять из поставки», а в составе есть объекты заказчика, проверка полноты предупреждает: после объединения дополнение пропадёт. Разбираются файлы настроек Конфигуратора и EDT.

Состав регистров с учётом расширений

Измерения и ресурсы, которые расширение добавило в типовой регистр, входят в состав регистра; в карточке видно, какое расширение их добавило.

Пакет обновления и отчёт рисков собираются быстрее

Сравнение трёх версий считается один раз за сборку пакета, описания сторон читаются один раз, а результаты классов рисков сохраняются между запросами, пока не изменились версии, система, внешние обработки и версия Analyzer. Объём кэша задаётся параметром ANALYZER_KERNEL_CACHE_MB, кэш выключается параметром ANALYZER_KERNEL_CACHE=0.

Исправление ошибок

Файл настроек объединения больше не стирает доработки заказчика

При выгрузке файла настроек «моя» сторона сравнения собиралась пустой, и объекты, изменённые вендором, получали «взять из поставки» — в том числе объекты с реквизитами, табличными частями и формами заказчика, которые при объединении удалились бы. Теперь сравнение строится по текущей загрузке системы, а объекту с подчинёнными заказчика ставится объединение с приоритетом основной конфигурации; проверка полноты предупреждает о таких объектах.

Граф вызовов: ложные вызовы общих модулей

Закомментированный вызов, текст «Модуль.Метод()» внутри строки и обращения вида «Объект.Продажи.Добавить()» больше не дают связей с методами общих модулей. Если переменной присвоен общий модуль, а затем другое значение, вызовы через неё больше не приписываются модулю; то же для переменной цикла. Раньше такие связи попадали в «Кто вызывает», анализ влияния и риски обновления.

Сверка версий: формы двух бинарных поставок больше не дают ложных конфликтов

Сверка трёх версий показывала почти все формы конфигурации изменёнными (на ERP — 11 201 из 11 209) и тысячи ложных конфликтов объектов. Формы двух бинарных поставок теперь сверяются по составу и по запросам динамических списков.

Сверка версий: макеты СКД, отличающиеся только записью, не держат объект в конфликте

Разные версии платформы по-разному записывают один и тот же макет компоновки данных; такие расхождения больше не считаются изменением.

Трёхстороннее сравнение и порядок модулей команд

Объекты, у которых различается только порядок модулей команд, больше не считаются конфликтом; модули команд сопоставляются по имени команды.

Отчёт «Расширение под ударом обновления» открывается

Отчёт падал с внутренней ошибкой сервера на любой тройке «старая поставка — новая поставка — система». Теперь он строится и сходится с отчётом о перехватах к актуализации; обёртки «Перед» и «После» тоже сверяются с телом метода поставки.

Перехваты к актуализации на поставках из файла конфигурации

На паре поставок из файлов конфигурации отчёт показывал ноль перехватов к актуализации. Теперь тело метода находится, а перехваты, которые проверить не удалось, перечислены с указанием стороны.

Перехват «Вместо» с вызовом оригинала

Раньше всегда считался безопасным. Теперь попадает в риски, если оригинал вызывается по условию, а его тело изменилось, или если изменилась сигнатура оригинала.

Снятые вендором реквизиты и значения перечислений: обращения из кода расширения

Отчёт засчитывал обращение по одному имени и показывал риск у документов, с которыми расширение не работает. Теперь он видит обычное переименование и физическое удаление, а совпадения по ходовому имени перечислены отдельно. Число рисков может измениться в любую сторону.

Обновление веток по расписанию с общим токеном доступа к git

У систем без своего токена ветки по расписанию падали с ошибкой «не удалось получить коммиты ветки», хотя общий токен ANALYZER_GIT_TOKEN был задан. Общий токен отправляется только на хост рабочей копии или на хосты из новой настройки ANALYZER_GIT_TOKEN_HOSTS.

Ветка, историю которой переписали на сервере, снова обновляется по расписанию

Раньше обновление падало на каждом запуске с ошибкой «Not possible to fast-forward». Рабочая копия теперь выравнивается по серверу, а в журнале загрузок появляется предупреждение с прежним и новым коммитом.

«Обновить по коммитам» больше не отвечает «совпадает», когда рабочая копия отстала от сервера

В ответе сказано, на сколько коммитов сервер впереди или что история не совпадает, и приведена последняя ошибка обновления по расписанию.

Настройки обновления поставки выгружаются за десятки секунд, а не за двадцать минут

На ERP выгрузка шла около 19 минут, а патчи методов строились против пустой «моей» стороны. Теперь тела функций читаются пакетами, сравнение идёт по текущей загрузке системы.

Выгрузка файлов настроек объединения и обновления не оставляет занятой память сервера

Расчёт выполняется в отдельном процессе и прекращается, если пользователь закрыл скачивание.

Сохранение настроек системы при ошибке

Если сервер отклонил сохранение (например, неверный адрес репозитория), окно настроек показывает текст ошибки и остаётся открытым, а не сообщает об успешном сохранении.

Риски пересчитываются после перезагрузки внешних обработок

Повторный расчёт рисков и проверки изменений в CI отдавал прежний результат — без новой или изменённой обработки.

Подписки на события из бинарного .cf и из XML-выгрузки

Источник «менеджер справочника, документа, обработки или отчёта» в бинарном .cf распознаётся как менеджер, а не как объект. Подписка на все документы, все справочники или определяемый тип из XML-выгрузки Конфигуратора больше не теряет список источников, в том числе в расширениях.

Формы бинарных поставок и расширений

Формы бинарного расширения получают вид (обычная или управляемая), как и формы основной конфигурации; в обычных формах распознаются поле выбора и поле HTML-документа. Управляемая форма без модуля и без элементов получает вид, состав и отпечаток для сравнения версий.

Число расширений у системы из бинарных файлов

Система, загруженная из бинарного файла конфигурации и файлов расширений, показывала ноль расширений.

Проверка полноты пакета ищет решение в файле настроек своего владельца

Объект, заимствованный расширением, проверяется по файлу основной конфигурации, собственный объект расширения — по файлу расширения. Решение, пропущенное при записи файла настроек, и правило только о порядке больше не засчитываются как решение по объекту.

Риски перехватов в портфеле систем: адрес формы

Риск модуля формы указывает на саму форму, а общая форма — по имени владельца, а не попадает в список с неполным адресом.

Число реквизитов у поставок фирмы-разработчика

У поставки из файла конфигурации в перечне версий число реквизитов было нулевым. У поставок, загруженных раньше, число исправится после повторной загрузки.

Поиск интерфейсной обёртки по подсказке с буквой «й»

Подсказка вроде «Действие» или «Свойство» не находила ни одной функции.

Выгрузка рисков в Markdown: перевод строки в тексте не ломает таблицу

Любой перевод строки внутри ячейки заменяется пробелом.

Карточка объекта при сбое загрузки прав ролей

Карточка оставалась пустой целиком; теперь заголовок и связи показываются, а права ролей не выводятся.

Перезагрузка систем: ТРЕБУЕТСЯ — полная перезагрузка всех систем. Без неё перечень прямых удалений отвечает «не собрано», а отчёт «Транзакция без отката» не появляется; прочие отчёты и новые возможности этого выпуска работают и без перезагрузки.

Новое

Перечень прямых удалений ссылочных объектов

Analyzer показывает, где в коде вызывается метод Удалить() у объекта справочника, документа, плана видов характеристик, плана счетов, плана видов расчета, плана обмена, бизнес-процесса или задачи — то есть данные удаляются сразу, в обход пометки удаления. Это перечень фактов для аудита доработок, а не список ошибок: в риски и их счётчики он не входит. В перечень попадают только места, где тип удаляемого объекта доказан по коду, в том числе по полю выборки запроса, заданного в той же функции; для каждого указаны модуль, функция, строка, вид и имя объекта, вызов в цикле и признак ОбменДанными.Загрузка перед удалением. Можно оставить только модули расширений. Перечень доступен через REST (GET /api/facts/direct_deletes) и в MCP-инструменте direct_deletes.

Отчёт «Транзакция без отката»

Analyzer находит методы, в которых после НачатьТранзакцию() исключение внутри Попытки гасится без ОтменитьТранзакцию(), а затем транзакция всё равно фиксируется: так в базу уходят частично записанные данные. Это доказанные риски. Отдельно, списком подозрений с указанной причиной, выводятся места, где исход зависит от вызывающего кода или конструкция не проверяется построчно: транзакция без Попытки, откат после КонецПопытки, выход или повторный вызов исключения без отката и другие. Для обработчиков записи объектов указывается, что метод уже выполняется в транзакции платформы. Отчёт доступен через REST (GET /api/risks/write_patterns) и в MCP-инструменте get_risks (вид unsafe_transaction).

Пользователь из каталога LDAP с личной ролью

Администратор находит в каталоге LDAP / Active Directory любого пользователя, видимого учётной записи привязки, кнопкой «Добавить из каталога LDAP» заводит его в Analyzer заранее и выдаёт ему личную роль — без правки групп каталога. Если у пользователя есть и роль по группам, действует старшая из двух; в таблице пользователей видно, откуда роль, кто и когда выдал личную, а также ФИО и должность из каталога. Личная роль закреплена за конкретной учётной записью каталога: если под тем же логином появился другой человек, она перестаёт действовать, а выданные прежнему токены доступа и сессии отклоняются.

Прогресс очереди загрузки

Когда несколько загрузок и перезагрузок систем идут друг за другом, в шапке виден значок общего прогресса — процент и «N из M», для любой роли. Счёт идёт по системам: «Загрузить все» по семи системам показывает «1 из 7», а не одну задачу, и система, загрузившаяся с ошибкой, считается в ошибках, а не в готовых; по клику — подробности и ваши системы в очереди. Если прошлая очередь завершилась с ошибками, значок становится оранжевым и показывает их число. В окне журнала загрузки над журналом — та же строка прогресса: процент всей очереди, счётчики и примерное оставшееся время.

MCP: постраничная выдача больших ответов

Инструменты, отдающие длинные списки, читаются страницами: common_module_callers, impact, object_subscriptions, functional_options, cycles, get_structure, get_passport, get_risks, external_services, scheduled_jobs, defined_types, filter_criteria, xdto_packages, list_functions, customized_objects, update_handlers, based_on и profile_rights. Параметры — limit и offset, для вложенных списков — list и items_limit. В ответе появились блок полноты pages (сколько всего, сколько отдано, есть ли продолжение и как запросить следующую страницу) и метка версии данных data_rev: если система перезагрузилась между чтением страниц, следующая страница с data_rev отвечает ошибкой stale_page вместо склейки двух версий графа. Пакетные get_structure и get_passport докачивают усечённые ответы тем же запросом. Вызов без параметров страницы отвечает как прежде — весь список целиком, поэтому подключённые агенты продолжают работать без изменений.

MCP: чтение и сравнение git-веток

Инструменты, читающие граф системы, принимают необязательный параметр branch и отвечают по графу указанной ветки; без него — как прежде, по графу системы по умолчанию. Новый инструмент compare_branches сравнивает две ветки одной системы тем же набором, что обычная сверка версий: изменённые объекты, функции и роли, вплоть до текста метода построчно; сравнение прав можно сузить одной ролью.

Метка «V17; через параметры» у функций, меняющих свои параметры

Многие процедуры 1С возвращают результат не через Возврат, а наполняя переданный параметр: структуру, таблицу значений, менеджер временных таблиц, поля объекта. Карточка функции показывает у каждого такого параметра вид изменения и затронутые поля, а заголовок блока параметров — сводку «Параметры (N) · K меняется». В списке функций та же метка стоит у имени, и такие функции можно отобрать отдельным пунктом «V17; Через параметры».

Прозрачность веток git

Селектор веток в шапке делит ветки на загруженные в граф и имеющиеся в копии без графа, отмечает рабочую ветку репозитория и второй строкой показывает, отстал ли граф от головы ветки, на сколько коммитов ветка отстаёт от удалённой или опережает её и чем закончился её последний прогон по расписанию. Отставание и опережение показываются, только если сверка с удалённым репозиторием была не давнее суток. Жёлтая точка на селекторе говорит, что по какой-то из веток есть на что посмотреть. Те же сведения отдаёт список веток системы в REST (GET /api/system/{system}/branches); прежние поля ответа не изменились.

Улучшения

Сравнение версий считается в отдельном процессе

Сверка двух версий, трёхстороннее сравнение и HTML-отчёт о сравнении идут в отдельном процессе, а не в процессе веб-сервера: память, занятая сравнением большой конфигурации, освобождается сразу по окончании, и сервер остаётся отзывчивым. Ответ прежний. Одновременно считается одно сравнение, следующие ждут очереди — в окне сравнения видна строка «Ожидает очереди сравнений»; кнопка «Остановить» снимает и ожидание, и идущее вычисление.

Загрузка крупной конфигурации требует меньше памяти

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

Загрузка: тексты методов до записи в граф хранятся сжатыми

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

Загрузка: шаг «Процессы по подсистемам» идёт секунды вместо минут

На крупных конфигурациях шаг занимал до десяти минут, теперь — около двух секунд; результат прежний.

Память сервера возвращается системе после тяжёлых запросов

После сверки версий и отчётов о рисках обновления, а также после любого запроса дольше 20 секунд сервер возвращает освободившуюся память операционной системе, не задерживая ни ответ, ни параллельные запросы. Раньше после сверки двух версий крупной конфигурации процесс занимал несколько гигабайт до перезапуска. Порог задаётся переменной окружения ANALYZER_TRIM_AFTER_SEC (0 — только после сверки версий).

Удержание пользователя при недочитанной группе каталога ограничено сроком

Если синхронизация не смогла прочитать состав группы каталога и потому оставила пользователя включённым, удержание больше не бессрочно: по истечении срока (по умолчанию 24 часа, настройка от 0 до 720 часов) запись выключается на общих основаниях, а вход и обновление сессии ей отказывают. Снять удержание раньше может только синхронизация, нашедшая человека в прочитанном составе группы. Срок задаётся параметром hold_max_hours настроек LDAP через REST.

Окно «Лицензия» — только администратору

Значок «Лицензия» в верхней панели и окно лицензии видит только администратор (при выключенном разграничении доступа — как и прежде, все). Остальным ролям ограничение «ограничено лицензией поставки» в списках систем, в разделе MCP и в окне сверки версий, а также полоса о сроке лицензии объясняются на месте: «Обратитесь к администратору».

Исправление ошибок

«Загрузить все» обновляет и ветки систем

Раньше «Загрузить все» перезагружала только рабочую ветку каждой системы, а остальные ветки, перечисленные в настройках системы, оставались с прежним графом: после обновления, требующего полной перезагрузки, они продолжали отвечать по старому разбору. Теперь вслед за системами эти ветки встают в общую очередь загрузки и загружаются по одной; их видно в прогрессе очереди.

Загрузка ветки по расписанию не вмешивается в начавшуюся загрузку

Если загрузка системы стартовала в тот же момент, когда планировщик брал ветку из очереди, он мог переключить ветку рабочей копии, пока загрузчик читал её файлы. Теперь планировщик в таком случае ждёт окончания загрузки.

Загрузка большой конфигурации не обрывается ошибкой «cursor not found»

На крупной конфигурации загрузка могла упасть на шаге «Регламентные задания: обработчики» ошибкой базы «cursor not found». Теперь связи обработчиков регламентных заданий, HTTP- и веб-сервисов и обработчиков обновления строятся так, что загрузка доходит до конца.

Git-загрузка не выдаёт отказ обновления за успех

При обновлении git-системы отказ git pull (например, из-за локальных правок в рабочей копии) мог приниматься за успешную загрузку, и граф молча отставал от репозитория. Теперь результат обновления источника виден в ответе и в истории загрузок системы, при ошибке — с её текстом; поверхностный клон при повторной загрузке догоняет репозиторий, если рабочая копия чистая. Журнал загрузки больше не содержит учётных данных git.

Токены и сессии прежнего владельца логина каталога больше не действуют

Токен доступа, сессия входа и её продление закрепляются за учётной записью каталога LDAP, при которой выданы. Если под тем же логином появился другой человек, всё выданное прежнему отклоняется, в том числе выданное в самый момент смены.

Пользователь, выключенный администратором, не включается обратно сам

Вход через LDAP или единый вход и синхронизация групп больше не включают запись, которую отключил администратор, — только ту, что выключилась автоматически при выходе из группы. Решение администратора снимается явно, в строке пользователя.

Ошибка чтения вложенной группы каталога больше не выключает её участников

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

Защита последнего администратора срабатывает и при одновременных запросах

Два параллельных понижения роли или удаления больше не оставляют систему без администратора.

Переключение ветки git не попадает на граф, который удаляется

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

Тяжёлые операции не показывают ложное «процесс прерван»

Под нагрузкой несколькими параллельными запросами загрузка поставки, инкрементальная загрузка и сверка с эталоном могли изредка отвечать «процесс прерван», хотя операция завершилась успешно. Теперь сервер всегда получает итог операции.

Окно журнала загрузки не повторяет строки

При медленном ответе сервера один и тот же кусок журнала загрузки мог появиться в окне дважды. Теперь каждый кусок выводится один раз.

Конструктор профилей не теряет роли, скрытые поиском

Если при активном поиске отметить роль флажком, отмеченные ранее, но скрытые фильтром роли молча выпадали из профиля. Теперь флажок меняет только ту роль, по которой щёлкнули.

Перезагрузка систем: ТРЕБУЕТСЯ — повторная загрузка эталонов и поставок из бинарных файлов (.cf), а также систем, загруженных из выгрузки EDT или XML. Без неё сверка с эталоном, загруженным прежней версией, продолжает показывать изменёнными объекты, которые никто не менял.

Паспорт доработок системы

Документ «что в этой базе отличается от поставки» одним файлом — Markdown или Word: отличия от эталона поставщика, состав расширений и перехватов, риски системы. Собирается из уже посчитанного Analyzer и годится для передачи базы от одного подрядчика другому. Отличие от эталона в документе не выдаётся за доказанную доработку. Выгрузка — GET /api/system/<система>/passport, доступна любой роли с доступом к системе и записывается в журнал действий.

Портфель рисков обновления по нескольким системам

Несколько систем одной типовой, которые обновляются одной парой поставок, сверяются разом: GET /api/risks/portfolio отдаёт матрицу «конфликт × системы», чтобы конфликт, найденный в трёх системах из пяти, разбирался один раз; по запросу — варианты исправления по цепочкам перехватов. GET /api/risks/portfolio/extensions показывает, чем расходятся копии одного расширения в разных системах.

Аудит проектирования регистров и табличных частей

Новый отчёт рисков: срез по регистру сведений, который на деле непериодический, регистры без признаков записи в коде и слишком широкие табличные части. Где свойство не удалось доказать (старая загрузка, бинарная поставка), находка помечается непроверенной с причиной, а не пропадает. Доступен по GET /api/risks/register_design и агентам (MCP) через «get_risks».

Сверка контракта ветки

POST /api/diff/contract сверяет заявленный контракт — экспортные методы общего модуля с параметрами, состав реквизитов и табличных частей объекта — с графом выбранной ветки и по каждому пункту отвечает: совпало, отличается (что именно) или нет в графе. Так видно заранее, соберётся ли код, написанный в соседней ветке против прежней сигнатуры.

«Вводится на основании»: инструмент для агентов и сверка версий

Агентам (MCP) добавлен инструмент «based_on»: по каждому объекту — объявленные источники ввода на основании и свидетельства кода (обработчик заполнения, команда). Сверка версий показывает изменение состава «Вводится на основании».

Использование объектов из Insight 1C в рисках обновления

Если подключён Insight 1C, позиции риск-отчётов получают вес — насколько объект используется в рабочей базе; данные рабочей базы остаются в Insight. Выдачу включает администратор отдельно для каждой системы, по умолчанию она выключена. Нет данных — ответ так и говорит, с причиной, а не показывает ноль.

История протокола проверки обработки

У протокола проверки внешней обработки появилась история публикаций и сравнение с предыдущей версией той же обработки: видно, какие замечания появились и какие ушли.

Экран «Исходящие уведомления»

Значок в верхней панели открывает список получателей событий: добавить получателя, выбрать события, приостановить и возобновить доставку, сменить ключ подписи, посмотреть очередь и потери доставки, удалить получателя. Экран доступен администратору; при выключенном разграничении доступа значок объясняет, как его включить.

События о загрузке систем — по подпискам

Analyzer сообщает внешним системам (шине, оркестратору, трекеру) об окончании каждой загрузки системы — полной, только расширений и инкрементальной, в том числе неудачной или прерванной. Событие в формате CloudEvents приходит HTTP-запросом на адрес подписки, подписано ключом подписки, при недоступности получателя повторяется по расписанию до 72 часов и не теряется при перезапуске. В событии нет имён систем и объектов — только непрозрачные идентификаторы и ссылка на результат операции (GET /api/v1/ops/<идентификатор>, доступна роли просмотра и выше в пределах её систем). Подписками управляет администратор — на экране «Исходящие уведомления» или через /api/v1/events/subscriptions; при выключенном разграничении доступа управление подписками недоступно. Адреса во внутренней сети разрешаются переменной ANALYZER_EVENTS_ALLOWED_TARGETS, остальные — только публичные по https. Для ссылок в событиях задаётся ANALYZER_PUBLIC_URL. Новая подписка получает события только о загрузках, закончившихся после её создания.

События журнала действий — по подпискам

Подписка может получать и записи журнала действий: тип analyzer.audit.recorded и выбранные группы — пользователи и доступ, неудачные входы, входы и выходы, конфигурации и системы, обновление от поставщика, код-ревью (поле audit_groups подписки, необязательное). Событие несёт код действия, группу, статус и непрозрачную ссылку на запись; подробности записи — GET /api/v1/audit/records/<ссылка>, доступно администратору при включённом разграничении доступа, как и сам журнал. Подписка получает только записи, сделанные после её создания; поток неудачных входов не прореживается.

Скачивание Effector 1C и Reflexor 1C из верхней панели

Значок скачивания в верхней панели открывает окно «Взаимодействие с 1С»: плагин Effector 1C для 1C:EDT и окно Reflexor 1C у Конфигуратора можно взять прямо из Analyzer — с версией, размером, датой сборки и шагами установки. Доступно любой роли. Архивы берутся из каталога поставки, который docker-compose.prod.yaml подключает к приложению только на чтение; если архива в поставке нет, окно говорит об этом. Скачивание записывается в журнал действий.

История пиков памяти загрузок по системе

Каждая загрузка системы (полная, только расширения, инкрементальная) сохраняет пик памяти контейнера во время загрузки, длительность, режим, ветку, версию Analyzer и исход; на систему хранятся последние 50 загрузок, история доступна по GET /api/system/<система>/reload_history. Если пик заметно вырос против прошлой такой же загрузки (в 1,25 раза и не меньше чем на 0,5 ГБ), в журнале загрузки появляется предупреждение. Для поставки добавлен том reload_history: история переживает обновление версии.

Описание REST API в формате OpenAPI

Схемы API отдаются по адресам /api/v1/openapi.json и /api/v2/openapi.json — по ним клиент интеграции генерирует код и сверяется с контрактом своей версии.

Улучшения

Работа на небольшом экране (Full HD с масштабом 150%)

Граф вызовов и таблица вызывающих переключаются вкладками, инструменты графа — приближение, «Вписать в экран», экспорт и легенда — собраны в строку над холстом. Так же устроен граф связей объекта. В «Версиях» после сравнения таблица версий сворачивается в строку-сводку, и результат занимает всю высоту. Модальные окна умещаются в экран: кнопки всегда видны, прокручивается только содержимое. В таблицах карточки имя не сжимается уже 220 px, а второстепенные колонки на узкой таблице уходят второй строкой под имя. Длинные имена переносятся по границам слов, а не по буквам. Шапка карточки объекта стала компактнее: пометка сверки с эталоном раскрывает подробности по щелчку.

Обычные формы в сверке версий и в ответе агенту

Инструмент «get_form» отдаёт состав обычной (неуправляемой) формы и новое необязательное поле «form_kind»: managed, ordinary или пусто, если вид формы не определён. Если обычная форма разобрана не полностью, ответ называет это полем «structure_partial». Сверка версий сравнивает обычные формы по составу, а не по байтам описания, поэтому одна и та же форма из выгрузки Конфигуратора, EDT и бинарного .cf не показывается изменённой. Неполностью разобранная форма никогда не отображается как «без изменений»: она помечается как изменённая с признаком неполноты. Отчёт о формах, переопределённых расширением и изменённых поставщиком, учитывает и обычные формы. Прежние поля ответа не изменились.

Сверка 3-way объясняет рекомендацию по объекту

У объекта-конфликта, рекомендация по которому поднята до приоритета основной конфигурации, рядом с выбором режима стоит метка с главной причиной — «ваши правки», «ваш состав» или «тип не сверен», по щелчку — все причины. Объект, тип которого сверен не полностью, помечен «Тип не сверен» с числом таких мест; в сравнении двух версий такой объект без других изменений больше не пропадает из дерева и отчёта.

Бинарный .cf: модули команд объекта извлекаются

Модули команд справочников, документов и других объектов из бинарного .cf попадают в граф со своими процедурами и функциями — как из выгрузки Конфигуратора и EDT. Для этого систему из бинаря нужно перезагрузить.

Агенту видно, чья форма

Ответ агенту о форме объекта называет её принадлежность: создана расширением, заимствована расширением из типовой или типовая без заимствования.

Агентам (MCP): макеты отчёта и обработки с видом и основная схема компоновки

Инструменты «get_structure» и «get_passport» отдают у отчёта и обработки перечень макетов с видом каждого — схема компоновки данных, табличный документ или прочий — и их число. У отчёта названа основная схема компоновки, и отдельной строкой сказано, чем он открывается: своей основной формой или автоформой по этой схеме. Отчёт без собственных форм агент больше не принимает за пустой. Схемы компоновки отчётов и обработок расширений, загруженных из выгрузки EDT, теперь попадают в граф. Прежние поля ответа не изменились.

Агентам (MCP): длина и точность числа, длина строки в составе объекта

Инструмент «get_structure» отдаёт у реквизитов, реквизитов табличных частей, измерений и ресурсов необязательные поля: у числовой части типа — длину, точность и признак «неотрицательное», у строковой — длину (0 — неограниченная) и признак фиксированной длины. У составного типа квалификаторы относятся к его числовой и строковой части. Агент берёт точность округления из метаданных, а не задаёт её константой. Квалификаторы одинаково читаются из выгрузки Конфигуратора, выгрузки EDT и бинарного .cf. Прежние поля ответа не изменились.

Агентам (MCP): поиск значения перечисления по словам имени

Инструмент «get_structure» принимает необязательный параметр «values_contains»: по нему у перечисления отдаются значения, в имени которых есть все слова запроса без учёта регистра («поступление оплаты» находит «ПоступлениеОплатыОтКлиента»), с их числом. У длинного перечисления ответ подсказывает агенту этот поиск. Полный список значений по-прежнему отдаётся целиком.

Граф вызовов запоминает глубину и флажки

Глубина, «Подписки» и «Динамические вызовы» сохраняются при переходе на граф с другой страницы.

Большой граф не сжимается в линию

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

Тяжёлые операции идут в отдельном процессе, память сервера не растёт

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

Образ поставки — в два слоя

Образ приложения собирается в два слоя вместо прежнего слоя на каждый шаг сборки: архив поставки меньше и быстрее загружается. Команда запуска, рабочий каталог, переменные окружения и порт сохранены — установка и обновление идут прежним порядком, файлы настроек править не нужно.

Исправление ошибок

«Кто вызывает» видит процедуры, зарегистрированные строкой

Процедура общего модуля, названная в коде строкой вида «Модуль.Метод» — в реестре встраивания ERP. Управление холдингом, в «ВыполнитьМетодКонфигурации», в обработчиках БСП, — теперь числится вызванной из функции, где эта строка записана. В таблице вызывающих и графе вызовов такая строка подписана «регистрация по имени (строкой)», агентам (MCP) инструмент «who_calls» отдаёт её с «via» = «string_call», а у системы, загруженной прежней версией, добавляет поле «string_calls_note» с просьбой о перезагрузке. «common_module_callers» учитывает такие вызывающие. Вызов по имени, собранному из частей, по-прежнему не виден.

Загрузка одной системы больше не останавливает работу с остальными

Пока идёт загрузка, интерфейс других пользователей мог открыться пустым: вместо названия системы — её идентификатор, в карточке объекта «Нет данных», сервер не отвечал даже на запрос версии. Выбор версии данных системы и проверка ключей доступа внешних клиентов (Effector, Reflexor, Pilot) больше не задерживают остальные запросы, когда база данных отвечает медленно.

Сверка версий видит изменение квалификаторов типа у реквизитов

Если поставщик изменил у реквизита длину строки или вид её длины, длину, точность или знак числа, состав даты, сверка версий помечает реквизит изменённым и показывает, что именно стало другим: «Длина строки: 10 → 25». Сравниваются только те квалификаторы, которые известны обеим сторонам: бинарный .cf не хранит состав даты и часть признаков, выгрузка EDT не записывает значения по умолчанию — такой квалификатор не считается ни совпавшим, ни изменённым.

Сравнение «Текущее состояние ↔ эталон из .cf» больше не роняет окно «Версии»

Функции поставки, загруженной из бинарного .cf, теперь сопоставляются с функциями живой системы, и сравнение не объявляет удалёнными все функции поставки. Решения, сохранённые в сессии сравнения, переносятся на сопоставленные функции.

Рекомендация по объекту в сверке 3-way не зависит от фильтров

Рекомендация по объекту менялась от того, какие строки скрыты фильтрами отображения, и могла расходиться с тем, что записывается в файл настроек объединения. Теперь интерфейс советует то же, что попадает в файл.

Риски обновления: перехват события без типового обработчика больше не числится под изменённым телом

Перехват стандартного события объекта (например «ОбработкаПроведения» через «Вместо»), у которого в типовой конфигурации нет обработчика, сверялся по коду самого расширения и попадал в «вендор изменил тело». Теперь тела сверяются только у типового метода — цели перехвата; это же исправлено в отчёте «Расширение под ударом обновления». Если вендор добавил обработчик события в новой поставке, перехват показывается отдельным списком: в ответе отчёта о перехватах добавлены поля «handler_added» и «handler_added_count».

Перехваты в модулях HTTP- и Web-сервисов расширения видны в графе и рисках обновления

Метод расширения, перехватывающий процедуру модуля заимствованного HTTP- или Web-сервиса, не сопоставлялся с типовой процедурой: перехват не попадал в граф, в отчёты о перехватах и в риски обновления. Теперь такие перехваты сопоставляются так же, как в общих модулях и модулях объектов, для выгрузки Конфигуратора и выгрузки EDT.

Читатели объекта в запросах: закомментированный код больше не учитывается, формы расширений учитываются

Запрос, закомментированный целиком, больше не числится читателем таблицы. Запросы в модулях форм расширения у заимствованных объектов и динамические списки форм расширения, в том числе общих форм, теперь видны как читатели. Запрос к виртуальной таблице регистра (например «Остатки») больше не даёт второго, неразобранного читателя. Агентам (MCP): у строк «query_readers» добавлены необязательные поля «owner_key» (владелец формы-читателя), «form_name», «source» и «extension».

«Граф вызовов» из редактора кода находит метод модуля формы

Команда «Граф вызовов» в Effector и Reflexor на методе модуля формы объекта возвращала пустой результат: метод формы не находился. Теперь он находится, в том числе у общих и заимствованных форм. Если имя формы не передано, одноимённый метод формы больше не подменяет метод модуля объекта или менеджера, а при нескольких совпадениях ответ всегда один и тот же.

Сверка с эталоном размечает все ветки базы, даже если эталон назначен во время загрузки

Ветка, которая загружалась в момент назначения или снятия эталона, раньше могла остаться без пометок «типовая / доработана». Теперь такая ветка размечается сразу после окончания своей загрузки; то же — после обновления по коммитам и после копирования ветки. В журнале окна «Сопоставление с эталоном» ветка, которая ещё грузится, названа отдельной строкой. Ответ назначения эталона получил необязательное поле «skipped» — ветки, разметка которых отложена до конца загрузки.

Инкрементальная загрузка перестраивает связи функций так же, как полная

Инкрементальная загрузка перестраивает связи функций (параметры сеанса, функциональные опции, проверки ролей, подписки, перехваты) так же, как полная; прежде убранные из кода связи оставались, новые не появлялись, проверки ролей изменённых модулей терялись. Функции изменённых модулей перезаписываются целиком. Если у изменённой функции поменялся состав или тип возврата, а вызывают или перехватывают её функции других модулей, либо изменённый модуль дополнен расширением, инкрементальная загрузка отказывает и просит полную.

Инкрементальная загрузка работает с изменёнными модулями форм

Изменённый модуль формы больше не приводит к отказу инкрементальной загрузки: форма перезаливается вместе с её функциями и проверками ролей. Удалённая форма по-прежнему требует полной загрузки.

Сбой загрузки больше не оставляет ветку на недолитых данных

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

Планы обмена: состав снова разбирается при загрузке

План обмена перестал попадать в разбор состава: признак наличия состава оставался пустым у всех планов, а интерфейс каждый раз предлагал повторную загрузку. Состав плана обмена — в том числе из внешнего файла Ext/Content.xml — и общий реквизит плана снова разбираются при загрузке. Нужна перезагрузка систем с планами обмена.

Формы и макеты хранилищ настроек не теряют состав

У форм хранилищ настроек и других объектов «прочих» видов не было состава (реквизиты, элементы, команды) и отпечатков для сверки версий, а их макеты и запросы динамических списков не попадали в граф: файлы искались не в той папке выгрузки. Нужна перезагрузка систем.

Функциональные опции из бинарного .cf: видно место хранения

У систем, загруженных из бинарного .cf, у всех функциональных опций было пустое место хранения значения. Теперь оно читается из описания опции: константа (Constant.Имя), ресурс регистра сведений или реквизит. Нужна перезагрузка систем, загруженных из .cf.

Поставка из бинарного .cf: регламентные задания сверяются с эталоном

У части регламентных заданий из .cf не читался обработчик, поэтому срез заданий в поставку не входил. Теперь обработчик читается у всех заданий, и поставка из .cf, кроме XDTO-пакетов и обработчиков обновления, сверяет с эталоном регламентные задания. Если обработчик задания распознать не удалось, задание сверяется по расписанию и флагам, без обработчика; такой обработчик не считается пустым. Остальные простые разделы (роли, подсистемы, подписки, функциональные опции, команды и прочие) у поставки из .cf пока не сверяются. Поставка теперь хранит перечень разделов, которые она прочитала. Раздел, не прочитанный хотя бы одной из сравниваемых версий, в сравнении и обновлении поставки помечается как несравнимый: ни «добавлено», ни «удалено», ни конфликта по нему нет (необязательное поле ответа «slices_unknown»). Поэтому поставки, зарегистрированные раньше, по регламентным заданиям ложных результатов не дают, но и не сверяются: чтобы сверять их задания, поставку из .cf нужно зарегистрировать заново.

Смена ветки не сообщает об успехе при отказе

Если сервер отказал в загрузке ветки, окно смены ветки сообщало об успехе. Теперь отказ показывается с причиной.

Токен git-источника больше не сохраняется в настройках клона

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

Язык синонимов не переносится между системами

Если у системы язык синонимов не задан, загрузка брала язык предыдущей загруженной системы. Теперь берётся порядок по умолчанию — русский, затем английский.

Объединение очень большого блока изменений в окне кода не роняет страницу

Варианты «оставить своё» и «взять поставщика» и предложение по обновлению перехвата собираются без переполнения стека браузера на блоках в сотни тысяч строк.

«Клоны кода»: выбор пункта не перебивается, пока догружается список

Пункт, выбранный в первые мгновения после открытия режима, остаётся выбранным; первый кандидат подставляется, только если пользователь ещё ничего не выбрал.

Новое

Перезагрузка систем: ТРЕБУЕТСЯ — полная перезагрузка систем, загруженных из выгрузки EDT, XML или из бинарных поставок (.cf), и повторная загрузка эталонов и поставок из бинарных файлов (.cf). Без неё сверка с эталоном, загруженным прежней версией, продолжает показывать изменёнными объекты, формы и макеты, которые никто не менял.

Новое

Сверка с эталоном поставщика — в каждой панели

Объекты, роли, подсистемы, подписки, общие команды, параметры сеанса, XDTO-пакеты, определяемые типы, планы видов характеристик, критерии отбора, функциональные опции и сервисы помечены знаком слева от имени: ≡ совпадает с эталоном, c98; доработан, `71; нет ни в одном эталоне. Подсказка называет эталон и что именно отличается — реквизиты, формы, код, права и так далее. В шапке панели — доли типового, доработанного и своего с числами и флажок «Скрыть типовые», общий для всех панелей. Карточка объекта показывает вердикт и причины. Пометки появляются, когда системе назначен эталон.

Агентам (MCP): кто вызывает каждый общий модуль — одним вызовом

Новый инструмент «common_module_callers» отдаёт по всем общим модулям системы объекты, из модулей и форм которых вызываются их функции, а также подписки, регламентные задания и обработчики обновления, которые платформа зовёт в модуле. Им пользуется Insight 1C, чтобы определить, какие общие модули работают в базе. Первый вызов на крупной конфигурации занимает до минуты, повторный отвечает из кэша.

Поставка из .cf сверяется с эталоном по XDTO-пакетам и обработчикам обновления

Поставка, загруженная из бинарного .cf, раньше несла только объекты и функции, и XDTO-пакеты и обработчики обновления сверять было не с чем. Теперь они читаются из поставки тем же разбором, что и при загрузке системы. Остальные разделы — роли, подсистемы, подписки, функциональные опции, команды, сервисы, определяемые типы и другие — из бинарного .cf пока не сверяются: по ним пометки сверки с эталоном не ставятся. Поставку, загруженную прежней версией, нужно загрузить заново.

Улучшения

«Клоны кода»: похожие модули показываются семейством, а не всеми парами

Восемь почти одинаковых форм-отчётов давали 28 пар, одна и та же функция повторялась в десятке строк. Теперь такие модули собраны в одну группу: каждая копия сравнивается с образцом — модулем, с которым остальные совпадают больше всего. Вид «Функции × копии» показывает варианты текста каждой функции по копиям, так что видно, какой вариант у большинства. Сравнение текстов держится справа при прокрутке списка.

Дерево «Анализ функций» без объектов, у которых не бывает модулей

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

Параллельность загрузки настраивается в .env

Число процессов разбора модулей и записи в граф теперь задаётся в файле .env установки: на сервере с большим числом ядер загрузку можно ускорить, на слабом — снизить нагрузку. Параметры с пояснениями добавлены в .env.example; если их не задавать, действуют прежние значения.

Исправление ошибок

Сверка с поставкой из .cf больше не помечает изменёнными нетронутые объекты

Конфигурация, загруженная из EDT, против поставки той же версии из .cf показывала изменёнными около 1 750 объектов из 24 тысяч, теперь — около двухсот, и примерно у половины из них отличается код. Из бинарной поставки теперь читаются типы «любой справочник», «любой документ» и платформенные типы значений, полный состав определяемых типов, индексирование ресурсов регистров сведений, реквизиты отчётов, регистров бухгалтерии и планов счетов. Текстовые макеты больше не принимаются за формы. Предопределённые элементы внутри групп теперь учитываются, а повтор их имён в выгрузке EDT изменением не считается. Свойства реквизитов и описателей форм, которые разные форматы записывают разными наборами, сравниваются по общим свойствам.

Агентам (MCP): движения документа и поиск возможностей отвечают без сбоев

Запрос движений по регистру, справочнику и другому объекту без модуля объекта завершался ошибкой. Теперь он отвечает и прямо говорит, что движения бывают только у документа-регистратора, и подсказывает, как найти, кто пишет в регистр. Поиск возможности конфигурации с пустым ответом называет, какие глубины поиска не просматривались, чтобы агент мог расширить запрос.

Сверка с эталоном из бинарной поставки больше не показывает изменёнными все формы и макеты

Система, загруженная из выгрузки EDT, против эталона из файла .cf той же версии показывала изменёнными десятки тысяч форм и макетов, хотя их никто не менял: содержимое бинаря и выгрузки записано по-разному. Теперь в такой паре форма сравнивается по составу — реквизитам, командам, событиям и дереву элементов, а макет, состав которого из бинаря не извлекается, не помечается изменённым. У форм документов из выгрузки EDT больше не теряются события «После записи на сервере» и «При чтении на сервере».

«Клоны кода», «Весь, с типовым»: ваши копии больше не тонут в типовом коде

Список занимали тысячи повторов типового кода, в основном регламентированных отчётов, а группы с вашими копиями терялись среди них или не попадали в список вовсе. Теперь над списком кнопки разделов: «С вашим кодом» открывается первым и показывает все такие группы, а типовой код разложен по подсистемам объектов.

«Клоны кода»: закомментированные процедуры больше не считаются копиями

Процедуры, тело которых закомментировано целиком, выглядели копиями друг друга, и выгода считалась по строкам комментариев. Теперь размер функции — это строки кода без комментариев и заголовка, а тела без кода в кандидаты не попадают. Закомментированное обращение к форме тоже больше не помечает копию как «требует доработки».

«Клоны кода»: выгода у группы похожих модулей больше не завышена

Число «строк уйдёт» у модулей-двойников складывалось по всем парам, и функция, общая для восьми копий, засчитывалась 28 раз вместо семи. Теперь выгода считается по копиям каждой функции.

Карточки «Клоны кода», «Хранилища настроек» и «Планы обмена» прокручиваются

Длинная карточка — например, пара модулей с десятками копий — обрезалась по нижнему краю окна, и до сравнения текстов внизу было не добраться. Теперь правая панель этих разделов прокручивается, как у остальных.

Перезагрузка систем: ТРЕБУЕТСЯ — полная перезагрузка систем, загруженных из выгрузки EDT, и повторная загрузка эталонов из бинарных поставок (.cf). Без неё сверка с эталоном продолжает показывать изменённые синонимы и ложное «индексирование изменено» у измерений и ресурсов регистров.

Улучшения

Дерево «Функции»: монстры типового кода не отвлекают

Если системе назначен эталон поставщика, под фильтром дерева «Функции» появляется переключатель «Без типовых (эталон)». При нём функции, текст которых слово в слово совпал с поставкой, не участвуют в красных и жёлтых маркерах: модуль, где всё отмеченное — типовой код, теряет маркер и уходит из отбора «Монстры», а у модуля, где свои отмеченные функции перемешаны с типовыми, рядом с именем написано «N из M своих». Под переключателем видно, сколько модулей скрыто. Состояние переключателя общее с «Скрыть типовые» в таблице функций объекта и запоминается в браузере.

Исправление ошибок

Сверка с эталоном: одинаковые типы в разной записи больше не считаются изменёнными

Выгрузка EDT и поставка пишут один тип по-разному («Number» и «xs:decimal», «DefinedType.X» и «cfg:DefinedType.X», части составного типа в другом порядке). Теперь тип сравнивается по смыслу, а не по записи: на типовой конфигурации ложных «тип изменился» было более 60 тысяч.

Сверка с эталоном: синоним объекта сравнивается на русском языке

У систем, загруженных из выгрузки EDT, многоязычный синоним объекта и реквизита сохранялся на последнем языке выгрузки, обычно английском, а у эталонной поставки — на русском, и сверка показывала изменённый синоним почти у каждого объекта. Теперь синоним сравнивается на русском языке с обеих сторон. Так же исправлены синонимы стандартных реквизитов и заголовки команд объектов: язык заголовка команды выбирается по настройке языков системы, как у заголовков объектов.

Сверка с эталоном: стандартные реквизиты не считаются добавленными

Выгрузка EDT перечисляет все стандартные реквизиты, поставка — только изменённые. Стандартный реквизит, который есть лишь с одной стороны, больше не делает объект изменённым и не меняет порядок реквизитов.

Индексирование измерений и ресурсов регистров

Из бинарной поставки индексирование измерений регистров накопления и сведений, ресурсов регистров накопления и реквизитов регистров расчёта читалось неверно; из выгрузки EDT терялось индексирование ресурсов регистров. Обе стороны исправлены.

Список систем сразу после входа

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

Панель режимов помещается в окно при любой высоте

В невысоком окне нижние режимы, кнопка раскрытия панели и справка уходили за край. Теперь иконки разложены по группам в два столбца, разделы отделены чертой, кнопка раскрытия и справка закреплены внизу и видны всегда, а если режимы всё равно не помещаются, появляется тонкая полоса прокрутки — и в узкой, и в раскрытой панели.

Перезагрузка систем: ТРЕБУЕТСЯ (полная). Иначе справка документов, состав планов обмена, обращения к хранилищам настроек, регистрация внешних обработок в БСП и длины реквизитов в схеме данных не появятся, регламентные задания останутся с прежним признаком использования и без расписания, у функций расширений не определится контекст исполнения, а параметры, принимающие временные таблицы, не будут помечены.

Новое

Справка документа — как в 1С, с оформлением, ссылками и картинками

Авторская справка документов и форм открывается вкладкой «Справка» в карточке документа. Страница показана с заголовками, списками, таблицами, выделением и картинками конфигурации; страницы документа и форм переключаются списком с подписью владельца и языка («Документ · ru», «Форма ФормаДокумента · ru»). Ссылка на объект открывает его карточку в Analyzer, ссылка на внешний сайт — новую вкладку, ссылка на раздел прокручивает к нему. Справа — карточки упомянутых в тексте объектов и возможных связей процесса с исходными фразами для проверки. Справка очищается при загрузке: скрипты, обработчики и встроенные окна убираются, оформление приведено к теме Analyzer.

Внешние обработки и отчёты в графе

Кнопка «Внешние обработки и отчёты системы» в шапке открывает окно, куда добавляются файлы EPF и ERF — несколько одним выбором, файл с тем же именем заменяет прежнюю версию. Кнопка «Загрузить обработки в граф» загружает только их, не перечитывая конфигурацию, и занимает секунды: вызовы функций и запросы обработок связываются с основной конфигурацией, код открывается. У каждой строки — статус: «в графе», «ждёт загрузки», «ошибка разбора» с причиной и «будет удалена»; файл удаляется кнопкой в строке и уходит из графа при следующей загрузке обработок. Поиск по имени и файлу, отбор «Требуют внимания». Повреждённый файл, файл больше 64 МБ или два файла с одинаковым внутренним именем загрузку системы не срывают: такой файл пропускается с причиной в журнале загрузки, при совпадении имён остаётся первый по алфавиту. Загружать, заменять и удалять файлы может руководитель команды или администратор, остальные видят список и статусы. Оценка индексов в запросах обработок к регистрам сведений появляется после одной полной загрузки системы на этой версии.

Внешние обработки и отчёты: как их подключают — через БСП или независимо

В окне внешних обработок колонка «Подключение» показывает регистрацию в дополнительных отчётах и обработках БСП с видом (печатная форма, заполнение объекта, создание связанных объектов, дополнительная обработка или отчёт) либо независимый запуск через «Файл → Открыть», колонка «Назначение» — к каким объектам конфигурации подключается обработка, по синонимам. Отборы «БСП» и «Независимые». Значения, которые вычисляются только при работе программы, не угадываются: так и написано. Если регистрации есть, а в конфигурации нет подсистемы «Дополнительные отчёты и обработки», окно предупреждает об этом.

Карточка объекта: подключённые внешние обработки; карточка обработки: её регистрация

Если внешняя обработка системы в регистрации БСП назначена на объект — лично или на весь вид, — у объекта появляется вкладка «Обработки (N)»: обработка и файл, вид (печатная форма, заполнение объекта, создание связанных объектов), число команд и «этот объект» или «все документы». В карточке самой обработки — вкладка «Подключение»: вид, назначение ссылками на объекты, версия, безопасный режим, запрошенные разрешения и команды регистрации с идентификаторами и способом вызова. Зарегистрирована ли обработка в конкретной базе — данные базы, их показывает Insight.

«Клоны кода» — кандидаты на вынос в общий код

Раздел отвечает на вопрос «что стоит вынести и во что это обойдётся». Слева — кандидаты по выгоде (сколько строк уйдёт) с вердиктом: «Выносится», «С доработкой», «Копии разошлись», «Вызовов не найдено», «Похоже на сгенерированный код». По умолчанию показан только код расширений. Карточка справа — пять проверок (можно ли править, совпадают ли тексты, обращается ли код к форме, один ли контекст исполнения, сколько мест вызова), копии с предложением «оставить / заменить вызовом» и сравнение текстов. Модули, скопированные целиком под префиксом, собраны в одну строку со списком пар и разошедшихся функций.

«Планы обмена» — состав плана и авторегистрация

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

«Хранилища настроек» — кто читает и кто пишет настройки

Отдельный раздел левой полосы: собственные и стандартные хранилища, их обработчики и обращения из кода с переходом к исходнику. У каждого хранилища — число ключей, которые код читает, но нигде не сохраняет; карточка сводит обращения по ключам настройки: кто читает, кто пишет. Поиск в шапке находит хранилище по ключу.

Серверный экспорт процессной карты в BPMN

Кнопка «Экспорт BPMN» в карточке подсистемы скачивает статическую схему ссылок документов. Файл предназначен для работы аналитика и не является исполняемой моделью процесса. Экспорт кластера доступен через API. В схему можно добавить три слоя: дорожки ролей с правом добавления документов, объекты данных — сочетания измерений регистров накопления, в которые пишут несколько документов карты, — и внешних участников: HTTP- и веб-сервисы, у которых путь вызовов от обработчика доходит до записи документа. Та же схема скачивается картинкой SVG или PNG. Фактические частоты переходов в схеме не показываются: журнала выполнения в продукте нет.

Риски обновления показывают перехваты метода, который вендор удалил

Если в новой поставке нет метода, который перехватывает расширение, расширение после обновления не подключится вовсе, какой бы ни была аннотация перехвата. Раньше такой перехват в рисках не появлялся: проверка изменённых тел пропускала метод без тела как «не с чем сравнить». Теперь это отдельный класс в панели «Риски обновления». Метод ищется по объекту, модулю и имени, поэтому ложной тревоги из-за разницы в правилах хранения версий нет. Перехват, чей метод не нашёлся и в старой поставке, показан отдельным списком «не удалось проверить», а не как удалённый.

Риски обновления показывают перехваты метода, у которого вендор изменил параметры

Если вендор добавил, убрал или переименовал параметр перехватываемого метода, а метод расширения объявлен по-старому, перехват после обновления не применится. Раньше это было видно только у перехватов с заменой и контролем кода, и то лишь как «изменилось тело»; для перехватов «перед» и «после» — никак. Теперь в панели «Риски обновления» есть отдельный класс: строка показывает объявление метода в старой и новой поставке и объявление метода расширения. Разное число параметров помечено как «перехват не применится», расхождение имён, «Знач» или значений по умолчанию — как «привести объявление к новому». Если объявление расширения и раньше отличалось от вендорского, а вендор его не менял, тревоги нет.

Риски обновления показывают реквизиты заимствованных объектов, у которых вендор сменил тип

Если вендор сменил тип реквизита объекта, который расширение заимствует, код расширения после обновления может записать в реквизит значение прежнего типа или получить из него значение нового. Раньше риски обновления ловили только снятие реквизита, а смену типа не видели. Теперь это отдельный класс в панели «Риски обновления»: строка показывает тип в старой и новой поставке и в скольких методах расширения есть обращение к реквизиту. Сужение типа (вендор убрал из состава тип, который был) отмечено отдельно от расширения. Смены типа, к которым код расширения не обращается, идут вторым списком: на такой реквизит могут опираться формы и запросы расширения. Длина строки и разрядность числа в сравнении не участвуют.

Риски обновления выгружаются в Markdown и Excel

Список рисков обновления теперь можно получить файлом, чтобы положить его в задачу трекера или раздать исполнителям как план работ: кнопки «Markdown» и «Excel» в шапке панели «Риски обновления» (их же отдаёт `GET /api/risks/export` с параметром `fmt=md` или `fmt=xlsx`). Пока файл готовится, кнопки заблокированы и подписаны; без выбранной пары поставок они неактивны и объясняют, чего не хватает. В отчёте те же классы и те же формулировки, что в панели. Находки, которые Analyzer проверить не смог, идут отдельным списком, а в Excel — отдельным значением столбца «Достоверность», по которому удобно фильтровать. Класс, который не посчитался, назван в отчёте прямо, а не пропущен.

Регламентные задания в MCP

Инструмент scheduled_jobs перечисляет регламентные задания системы: обработчик, расписание, признак использования и происхождение из расширения, в том числе подмену обработчика. Отбор — только используемые, только типовые или задания одного расширения. Задание, чей обработчик не найден в графе, помечено отдельно.

Обработчики обновления информационной базы в MCP

Инструмент update_handlers перечисляет обработчики обновления: версию, очередь, режим выполнения, подсистему-владельца и процедуру-реализацию с ключом для перехода к её тексту. По паре версий строит путь миграций — какие обработчики отработают при обновлении с одной версии на другую. Обработчик, чья процедура не найдена в графе, помечен отдельно.

Параметры сеанса в MCP

Инструмент session_parameters показывает, где параметр сеанса устанавливается и читается, и какие ограничения доступа на уровне записей от него зависят, с текстом условий. Отдельно отмечены параметры, которые устанавливаются при начале сеанса и одновременно участвуют в ограничениях доступа.

Определяемые типы и критерии отбора в MCP

Инструменты defined_types и filter_criteria показывают состав определяемого типа или критерия отбора, объекты с реквизитами этого типа и код, который обращается к критерию. По ключу объекта сообщают, в какие определяемые типы и критерии он входит — при добавлении похожего объекта видно, куда его тоже нужно включить.

Внешние сервисы и планы обмена в MCP

Инструмент external_services перечисляет HTTP- и веб-сервисы с адресами, методами, операциями и типами XDTO, у каждой точки — процедура-обработчик и признак подмены расширением. Сервисы, доступные без аутентификации, перечислены отдельно. Инструмент exchange_plans показывает состав плана обмена с режимом авторегистрации и по ключу объекта сообщает, в какие планы он входит; планы с неизвестным составом названы отдельно.

Суммарные права набора ролей в MCP

Инструмент profile_rights показывает права, которые получит пользователь с заданным набором ролей, — как конструктор профилей: ограничение доступа на уровне записей сохраняется, только если его задают все роли набора, дающие это право. Можно ограничиться одним объектом или одним правом. В инструменте параметров сеанса установка в привилегированном обработчике начала сеанса помечена отдельно.

Точки нагрузки кода в MCP

Инструмент code_hotspots показывает самые крупные и разветвлённые функции с причиной пометки, объекты с перегруженными функциями, экспортные методы общих модулей, которые никто не вызывает, вызовы клиентского кода с сервера и потенциально тяжёлые запросы. Из неиспользуемых экспортов исключены обработчики подписок, регламентных заданий и обновления, а также перехватчики расширений — их вызывает платформа.

Пакеты XDTO в MCP

Инструмент xdto_packages отдаёт то же, что панель XDTO: список пакетов, типы пакета и карточку типа со свойствами, базовым типом, наследниками и местами использования в веб-сервисах и других типах.

Риски обновления в MCP

Инструмент update_risks показывает, что сломается у расширений при переходе на новую поставку вендора: сводку по всем классам рисков обновления для выбранной пары поставок и находки нужного класса. Без выбранных поставок он перечисляет зафиксированные версии системы.

Единый список кандидатов на рефакторинг

API ранжирует модули по циклам, размеру сложных функций, копиям кода, связности и экспортам без статических вызовов. Для каждой цели возвращаются основания рейтинга и радиус влияния.

Экспорт схемы данных подсистемы

Реквизиты, табличные части и ссылки выгружаются в DBML, PlantUML и Mermaid, с длиной строк и точностью чисел.

Пакетная оценка влияния изменений

API принимает один или два набора объектов, возвращает их общую область влияния и связанные расширения. Пересечение отличает общую запись в объект от общей зависимости. При ограниченном обходе ответ явно сообщает, что оценка неполная.

Предупреждение о переборе чужих систем

Если пользователь за 10 минут получил 20 и более отказов на недоступные ему системы или версии (через веб-интерфейс, REST API или MCP), в лог приложения пишется одно предупреждение с его именем и последним запросом. Отдельные отказы в лог не пишутся.

Настройка памяти базы данных

Размер кэша базы данных из комплекта задаётся в .env: ANALYZER_ARANGO_BLOCK_CACHE (по умолчанию 4GiB) и ANALYZER_ARANGO_EDGE_CACHE (по умолчанию 1GiB). Раньше база сама рассчитывала кэши от памяти всей машины — в сумме до половины, не учитывая, что рядом работает приложение. Описание — INSTALL.txt, раздел 2а.

Улучшения

Быстрый разбор расширений при загрузке крупной конфигурации

Разбор каждого расширения занимал минуты — на крупной конфигурации до четверти часа на одно расширение, — и журнал загрузки всё это время молчал. Теперь время разбора расширения не растёт с размером основной конфигурации.

«MCP-инструменты»: форма вызова показывает допустимые значения и значения по умолчанию

Поле с набором допустимых значений стало выпадающим списком, поле да/нет — переключателем. В пустом поле написано значение, которое инструмент возьмёт, если поле не заполнять. Рядом с кнопкой «Вызвать» видно, какие аргументы уйдут в вызов. У всех полей всех инструментов теперь есть описание — его видит и ИИ-агент.

«Перехваты «Вместо»» — по объектам-владельцам, с поиском

Замены, которые подменяют код основы, сгруппированы по объекту и модулю или форме: метод основы, процедура расширения, размеры в строках, состояние и сравнение под строкой. Отбор «все / отличается / совпадает» и поиск по методу, процедуре и объекту. Перехваты обработчиков событий, которых в основе нет, вынесены отдельным блоком и проблемой не помечаются.

Память при загрузке всех систем

Каждая система загружается отдельным процессом, и его память освобождается до начала следующей. Раньше пик следующей системы ложился поверх остатка предыдущей. Журнал сохраняет прежний вид: разделы по системам, пик памяти по каждой и итоговую сводку. Если процесс системы завершён из-за нехватки памяти, это указывается в журнале как причина сбоя, а остальные системы продолжают загружаться.

Память при загрузке крупных конфигураций

Тексты форм и макетов, которые сохраняются для сверки содержимого версий, до записи в базу хранятся в сжатом виде. На конфигурации масштаба «1С:ERP Управление предприятием» это около 6 ГБ памяти на шаге анализа запросов в формах и схемах компоновки.

Сводка рисков обновления считается быстрее

Сравнение поставок большой конфигурации распаковывало список функций поставки заново для каждой проверки перехватов. Теперь он распаковывается один раз на всю сводку.

Лишние тексты методов в сводке рисков обновления

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

Удалённые вендором заимствованные объекты: понятная строка и отдельный список безопасных

Строка риска в панели показывала общую фразу «объект заимствован и изменён вендором» без подробностей. Теперь она говорит, что вендор удалил объект, и называет, где расширение к нему обращается: сколько методов и сколько прав ролей. Объекты, к которым расширение не обращается вовсе, вынесены вторым списком: для них достаточно убрать заимствование.

Начальный масштаб графа подсистемы

При открытии видна вся схема, а не только начальные документы. Короткие цепочки не увеличиваются автоматически выше 100%.

Исправление ошибок

Повторный запуск загрузки сразу после «Остановить» больше не теряет систему

Если запустить загрузку сразу после остановки предыдущей, новая загрузка через несколько секунд объявлялась оборвавшейся, хотя продолжала идти, и Analyzer разрешал запустить ещё одну. Две загрузки одной системы шли одновременно и затирали данные друг друга, после чего система могла пропасть из списка целиком. Теперь, пока остановленная загрузка не завершилась, новый запуск получает ответ «уже идёт», а сам загрузчик не начинает работу, если в граф уже пишет другая загрузка.

MCP-инструмент «Циклические зависимости» находит подсистему по имени, пути или синониму

Отбор колец по подсистеме принимал только внутренний ключ вершины графа, и по имени подсистемы инструмент отвечал «колец нет». Теперь подсистема ищется так же, как в инструменте состава подсистемы: по имени, полному пути или синониму, без учёта регистра и «ё». В ответе видно, какая подсистема выбрана, сколько у неё дочерних (их модули не учитываются) и какие ещё подсистемы подошли так же хорошо; ненайденная подсистема названа прямо, а не выдаётся за отсутствие колец.

Объект, выбранный через поиск, показывал неполные связи

Если выбрать объект в выдаче поиска, связи, роли и запросы строились только по тем модулям, которые попали в выдачу. У справочника «Организации» это были одни формы, и в связях оставалось лишь расширение. Теперь карточка всегда берёт все модули объекта, как при выборе в дереве.

Контекст исполнения у процедур и функций расширений

У функций общих модулей расширения, перехватчиков в заимствованных модулях и функций форм расширения с директивой не определялся контекст исполнения (сервер, клиент, вызов сервера), и они выпадали из проверок, которые его читают: нарушения контекста в точках нагрузки и проверка «один ли контекст у копий» в «Клонах кода». Теперь контекст берётся из директивы, а без неё — из свойств общего модуля (для перехватчика — модуля основы). Функция формы без директивы, как и в основе, остаётся без контекста.

Чтение небольших бинарных контейнеров

Маленькие плоские контейнеры больше не принимаются за страничные поставки большого размера.

Нечитаемое расширение больше не срывает загрузку системы

Если одно из расширений не удалось разобрать, система загружается без него: основная конфигурация и остальные расширения попадают в граф. В журнале загрузки указывается, какое расширение пропущено и почему, а в конце шага расширений — сводка по всем пропущенным.

Ограничение списка систем действует и в MCP

Пользователь, которому доступны не все системы, через MCP-интерфейс получает данные только своих систем и их версий, как и в веб-интерфейсе. Список систем и поиск системы по UUID конфигурации показывают только доступные.

Удаление только своих систем

Администратор, которому доступны не все системы, может удалить только свою систему или её папку конфигурации. На чужую и несуществующую систему он получает одинаковый отказ, и ничего не удаляется. Удаление своей папки больше не затрагивает другую систему, чьё имя совпало с именем типовой конфигурации. Собственную папку с кириллическим именем такой администратор удаляет и перезагружает без отказа.

Единый ответ на недоступную систему

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

Регламентные задания в выгрузке EDT

Выключенные задания больше не показываются включёнными, расписание читается из выгрузки. Задание, которое расширение только заимствовало, не считается переопределённым и сохраняет свой обработчик — это касается и выгрузки EDT, и выгрузки Конфигуратора в файлы. При сравнении с версией, снятой до обновления, у заданий будут показаны изменения признака использования и расписания.

Регламентные задания в бинарном файле поставки

Признак использования, предопределённость, параметры перезапуска при ошибке и расписание читаются из бинарного файла конфигурации. Раньше все задания такой поставки показывались включёнными и без расписания.

Перезагрузка расширений пересчитывает карту процессов

При включённой карте процессов перезагрузка одних расширений не пересчитывала метрики процессов, функциональные кластеры документов и процессные объекты: после снятия расширения кластер и процессный объект сохраняли число участников прежнего состава, а документ, выпавший из кластеров, продолжал на него ссылаться. Теперь эти три шага повторяются в том же порядке, что при полной загрузке.

Перезагрузка расширений сохраняет вызовы типового кода в методы расширений

Когда типовой код вызывает метод, добавленный расширением (например, «Документы.ЗаказКлиента.НовыйМетод()» или «МодульРасширения.Метод()»), перезагрузка одних расширений раньше не восстанавливала эту связь: после снятия и возврата расширения у метода пропадали вызывающие, а вес связи модулей для анализа циклов не уменьшался после удаления метода. Теперь перезагрузка расширений строит эти вызовы заново. Первая такая перезагрузка большой конфигурации дольше обычной примерно на минуту, последующие идут без задержки. Точные веса связей система получит после одной полной перезагрузки.

Сессия объединения с текущей конфигурацией не теряет решения после обновления Analyzer

В 2.7.70 сменилось правило, по которому строятся внутренние ключи функций и сущностей с латиницей, буквой «ё» или подчёркиванием в имени. Сессия объединения поставки с текущей конфигурацией, начатая до полной перезагрузки системы, хранила выбранные режимы, отредактированный код и отметки «проверено» под прежними ключами, и после перезагрузки они молча пропадали из окна и из файлов настроек. Теперь сравнение трёх версий сообщает, какой прежний ключ соответствует текущему, и сессия переносится на текущие ключи — в окне сравнения и при выгрузке настроек объединения и обновления. Переносятся элементы, которые есть в поставке; своя функция, которой в поставке нет, и неоднозначные тёзки не переносятся. Попутно исправлено: окно могло записать пустую сессию поверх сохранённой, если та загружалась дольше полусекунды, а функция объектного модуля, сохранённая в поставке до смены правила, могла быть сопоставлена с одноимённой функцией модуля менеджера того же объекта.

Скрытая подсистема остаётся скрытой после полной перезагрузки системы

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

Риски обновления считаются по открытой ветке системы

Сводка рисков обновления сравнивала поставки с активной веткой системы, даже если на экране была открыта другая. Теперь сводка и выгрузка отчёта идут по той ветке, что выбрана.

Приём временных таблиц через переданный запрос

Процедура, которая присваивает менеджер временных таблиц запросу, пришедшему параметром, помечается у этого параметра как «принимает временные таблицы».

ИИ-агент видит, какие переданные параметры процедура наполняет

Инструмент получения функции теперь сообщает то же, что карточка функции: какие параметры процедура заполняет, дополняет, очищает или наполняет временными таблицами. Раньше процедура без возврата значения выглядела для агента ничего не делающей с данными.

Обрыв соединения после короткого простоя

Сервер больше не закрывает соединение клиента после пяти секунд простоя. Запрос, отправленный после паузы, раньше мог получить обрыв вместо ответа, и Pilot, работающий с Analyzer, видел это как случайную сетевую ошибку. Теперь простаивающее соединение сохраняется 75 секунд.

Остановка загрузки больше не считается сбоем

Загрузка, остановленная кнопкой «Остановить», не отмечается как сбой и не получает причину «возможно, не хватило памяти». Если процесс завершился сам раньше, чем дошла команда остановки, исход определяется по журналу, как и прежде.

Изменение ширины панели типов

При начале перетаскивания границы панель больше не смещается на ширину полосы плашек.

Граф вызовов: выбор объекта или модуля без функций не убирает навигацию

Если в строке навигации над графом выбрать объект или модуль, в котором нет функций, строка пропадала, и перейти к другому объекту можно было только поиском. Теперь она остаётся: тип, объект и выбранный модуль по-прежнему открывают свои списки, а на месте функции написано «нет функций».

Поля с автозаполнением браузера не выбиваются из тёмной темы

Когда браузер подставлял сохранённый логин или пароль, например в окне входа, поле окрашивалось его собственным светлым фоном. Теперь такое поле остаётся в цветах интерфейса.

Перезагрузка систем: ТРЕБУЕТСЯ (полная, а не только расширений). Иначе ключи сущностей с латиницей, буквой «ё» или подчёркиванием в имени останутся собранными по прежнему правилу. До полной перезагрузки перезагрузка одних расширений и инкрементальное обновление системы отказывают с объяснением. Поставки, сохранённые для трёхстороннего сравнения до обновления, стоит загрузить заново: иначе часть рисков актуализации перехватов в модулях таких объектов не найдётся. Незавершённые сессии объединения с живой системой стоит завершить до обновления: решения и отредактированный код в них привязаны к прежним ключам.

Новое

Граф вызовов видит вызовы модуля объекта через переменную

Прежде связь «функция → метод модуля объекта» строилась только по обращению через коллекцию платформы («Документы.ЗаказКлиента.Метод()»). Самый частый в коде 1С способ — создать объект в переменную и звать методы у неё («ДокОбъект = Документы.ЗаказКлиента.СоздатьДокумент(); ДокОбъект.ЗаполнитьПоШаблону()») — в графе отсутствовал: метод модуля объекта оставался без единого вызывающего. Теперь тип переменной выводится в пределах функции там, где он однозначен: конструкторы коллекций («СоздатьДокумент», «СоздатьЭлемент», «СоздатьНаборЗаписей», «СоздатьМенеджерЗначения»), получение объекта по ссылке известного вида («Ссылка = Справочники.X.НайтиПоКоду(…); Ссылка.ПолучитьОбъект().Метод()»), менеджер в переменной, «Новый(Тип("ДокументОбъект.X"))», «Константы.X.СоздатьМенеджерЗначения()» и тип параметра из описания метода, если он один. Знание живёт по операторам: переприсваивание переменной, переменная цикла «Для Каждого» и выражение, продолжающееся на следующей строке, его сбрасывают; сравнение «Если Переменная = …» — нет; текст внутри строковых литералов кодом не считается; «Д = Документы.X.СоздатьДокумент().Метаданные()» объектом не признаётся. Такие связи помечены как выведенные и отличимы от точных: в таблицах «Кто вызывает» и «Что вызывает» строка подписана «вызов через переменную (тип выведен)», в ответе инструмента MCP «who_calls» у неё «via: inferred_call» (у транзитивных вызывающих — признак «inferred»), в графе влияния ребро несёт признак «inferred». В обзоре вызывающих считаются вызывающие, а не рёбра: пара «точное + выведенное» к одной цели — один вызывающий. В срез связей для сравнения версий выведенные связи не входят: сверка сравнивает факты. Веса связей между модулями, поиск циклов, распространение состава возврата, цепочки проведения, улики рисков и поиск интерфейсной обёртки по выведенным связям не идут. Динамические обращения («Документы[Имя]», «Выполнить») по-прежнему не раскрываются. Система, загруженная до этой версии, таких связей не имеет — отчёты помечают её как загруженную прежним разбором.

Колонка «N+1» видит разыменование ссылки при обходе таблицы из запроса

Разыменование ссылки в цикле (поход в базу на каждой итерации) прежде считалось только у выборки («Выборка = …Выбрать()»). Самый массовый носитель этой ошибки в коде 1С — обход строк таблицы, выгруженной из результата запроса («Таблица = Запрос.Выполнить().Выгрузить(); Для Каждого Стр Из Таблица Цикл … Стр.Номенклатура.Артикул») — не считался: текст неотличим от обращения к полю структуры, и без знания о переменной пометка врала бы. Теперь вид переменной цикла выводится по источнику коллекции: результат запроса, таблица из него (в том числе через переменную результата и прямо в заголовке цикла), строки такой таблицы (обход и «НайтиСтроки»), массив из «ВыгрузитьКолонку» такой таблицы и его элементы. У строки таблицы походом считается второе обращение по цепочке («Стр.Номенклатура.Артикул» — данные колонки уже в таблице, в базу платформа идёт за объектом), у элемента массива ссылок — первое («Ссылка.Артикул»). Переменная неизвестного вида — произвольная таблица значений, структура, массив чужого происхождения — по-прежнему не считается; таблица, дополненная колонкой после выгрузки, из знания вычёркивается, переприсваивание и обход другой коллекции знание снимают. Обращения, уже посчитанные как обращение к базе («ПолучитьОбъект»), и служебные («Метаданные», «Получить» у хранилища значения, «УникальныйИдентификатор») не удваиваются. Система, загруженная до этой версии, показывает в колонке только выборки — отчёты помечают её как загруженную прежним разбором.

Рейл режимов раскрывается с подписями

Двадцать пиктограмм в левой колонке не самоочевидны, а подпись прежде показывалась только при наведении. Кнопка внизу рейла раскрывает его в панель «иконка + подпись», группы режимов подписаны заголовками (Дерево, Версии, Анализ, Структура, Интеграции); повторное нажатие сворачивает обратно. Выбор запоминается в браузере и переживает перезагрузку, по умолчанию рейл узкий, как прежде. Замок на возможностях, ограниченных лицензией поставки, и подсветка текущего режима сохраняются в обоих видах.

Ответ на вопрос «откуда берётся значение реквизита»

Граф прежде знал, кто читает реквизит объекта в запросах, но не знал, кто в него пишет: присваивание реквизиту в модуле объекта ничем не отличалось от присваивания локальной переменной. Теперь при разборе модулей запоминается каждое место записи в реквизит, у которого получатель известен точно: реквизит по имени в модуле объекта, через «ЭтотОбъект», через «Объект» в модуле формы и через переменную, только что созданную конструктором менеджера. Новый инструмент MCP «attribute_writers» и запрос «/api/object/attribute_writers» отдают по объекту или по одному его реквизиту список методов с модулем, формой, строкой и каналом записи, а у обработчиков событий называют событие. Записи, получатель которых из кода не выводится (переменная неизвестного типа, копирование свойств пакетом, запись по ссылке из чужого модуля), намеренно не учитываются, и каждый ответ несёт об этом оговорку. Стандартные реквизиты платформы («Код», «Наименование», «Дата», «Номер», «Проведен», «ПометкаУдаления», «Период» и другие по виду объекта, в русском и английском написании) считаются наравне с объявленными в конфигурации.

Граф вызовов выгружается в SVG и PlantUML

К картинке PNG и тексту Mermaid добавились две кнопки на полотне. SVG — векторная картинка того, что сейчас на экране: она масштабируется без потери резкости и открывается в редакторе схем, где узлы можно подвинуть и подписать. PlantUML — текст диаграммы для Confluence и документации, собираемой из исходников: функции прямоугольниками, подписки овалами, регламентные задания шестиугольниками, корень графа выделен. Скрытые фильтром узлы ни в один из файлов не попадают.

У каждого запуска загрузки теперь свой журнал

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

Сохранённая версия конфигурации отвечает на запросы наравне с живой

Запечённую версию (снимок конфигурации, оставленный для сверки) раньше можно было только сравнивать. Теперь к ней обращаются как к обычной системе — смотреть объекты, функции и связи, — но изменить её нельзя: снимок на то и снимок.

Улучшения

Дерево типов и дерево объектов открываются заметно быстрее

Дерево перестраивалось при каждом открытии и обходило граф на каждом объекте, а список объектов вдобавок сортировался на стороне базы и дочитывался частями. Теперь дерево пересобирается только после изменения графа, а список строится одним проходом.

Списки систем и папок честно говорят, что они укорочены

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

Подписки: при отборе по событию видно, какое событие применено

Ответ на запрос с фильтром выглядел так же, как ответ без фильтра, и отличить «подписок нет» от «отобрано по событию» было нельзя.

Выбор системы отвечает на неизвестное имя, а не молчит

Опечатка в имени системы приводила к пустому ответу без объяснения; теперь неизвестное имя называется прямо.

Исправление ошибок

Загрузка больше не останавливается на сущностях, чьи имена различаются только алфавитом

Конфигурация, в которой есть, например, HTTP-сервисы «edo» и «ЭДО», не загружалась: при построении графа имя переводится в латиницу, оба имени давали одно и то же, и загрузка останавливалась с сообщением «Разные имена дают один ключ вершины». Раньше такие имена различались, только если в одном из них было подчёркивание. Теперь различаются и имена с латиницей и с буквой «ё» («Счёт» и «Счет»), причём для всех видов сущностей: объектов, модулей, форм, ролей, подсистем, HTTP- и Web-сервисов с их эндпоинтами и операциями, команд, опций, определяемых типов, параметров сеанса, критериев отбора, планов видов характеристик, подписок, расширений и XDTO-пакетов. Пары, различающиеся только буквами «е» и «э» или «ь» и «ъ», по-прежнему останавливают загрузку с перечнем имён: вместе они так редки, что менять ради них ключи всех имён с этими буквами не стоит.

Перезагрузка расширений теперь перестраивает связи вызовов из кода расширений

Прежде перезагрузка расширений связи «функция расширения → вызываемая функция» не трогала вовсе: функции расширения пересоздавались под теми же ключами, старые связи оставались, и граф вызовов показывал код расширения таким, каким его прочитала последняя полная загрузка. Новый вызов из правленого перехвата не появлялся, убранный — не исчезал, и в таблицах «Кто вызывает» и в графе влияния до следующей полной загрузки жила прежняя версия. Теперь связи вызовов из функций расширений снимаются и строятся заново тем же кодом, что при полной загрузке, а цели вызовов в типовой части берутся из уже загруженного графа. Связи между модулями (веса, по которым считаются циклы и граф влияния) тоже приводятся в порядок: связи модулей расширения перестраиваются целиком, а у типового модуля, в который расширение дописало перехватчик, снимается ровно доля перехватчика — для этого полная загрузка теперь хранит её на связи отдельно. У системы, загруженной до этой версии, доли ещё нет: до первой полной загрузки вес перехватчика на такой связи после перезагрузки расширений будет посчитан дважды. Замер на тестовой конфигурации с расширением: после правки модуля расширения перезагрузка расширений и полная загрузка дают одинаковый набор связей вызовов; после отката правки — тоже; повторная перезагрузка ничего не меняет.

Перезагрузка расширений: связи типовой роли с параметрами сеанса, состав подсистем расширения и счётчик прав

Четыре расхождения между перезагрузкой расширений и полной загрузкой. Типовая роль, которую расширение дополняет хоть одним правом, после каждой перезагрузки расширений теряла все связи «роль → параметр сеанса» из условий ограничения доступа к данным: инструменты анализа RLS отвечали по ней пустотой до следующей полной загрузки. Типовой объект, включённый в подсистему расширения, после перезагрузки выпадал из её состава в дереве, а после снятия расширения продолжал числиться в исчезнувшей подсистеме. Счётчик объектов с правами у типовой роли не пересчитывался после снятия расширения и продолжал считать снятое право. Рёбра подписок расширения после полной загрузки не несли пометки происхождения, после перезагрузки — несли. Замер поимённо по всем коллекциям графа на тестовой конфигурации: с расширениями на месте перезагрузка совпадает с полной загрузкой по всем коллекциям.

Перезагрузка расширений снимает право роли на конфигурацию, выданное расширением

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

Перезагрузка расширений возвращает типовой состав подсистем

После перезагрузки расширений типовая подсистема оставалась с составом из одних объектов расширений, а без расширений — пустой: перезагрузка читала у подсистемы только имя и заголовок и перезаписывала её заново. Теперь типовой состав читается из графа и сохраняется, а вклад расширений добавляется поверх него.

Перезагрузка расширений пересчитывает процессы по подсистемам и роли документов

Сводка «подсистема как процесс» в режиме знакомства, движения из кода проведения и роль документа (инициатор, промежуточный, завершающий) считались только при полной загрузке. После перезагрузки расширений сводка показывала документы убранного расширения и процесс его собственной подсистемы, которой в системе уже не было, а документы добавленного расширения оставались без роли. Теперь все три сводки пересчитываются и при перезагрузке расширений, в том же порядке, что при полной загрузке.

Перезагрузка расширений снимает вклад расширения полностью

Убранное из поставки расширение оставляло за собой следы: типовые объекты продолжали числиться заимствованными, формы расширения оставались в графе призраками, счётчики форм у заимствованных объектов обнулялись, перехваченные расширением свойства не возвращались к типовому значению, а переопределённые регламентные задания и обработчики сервисов оставались за расширением. Два запуска подряд вдобавок стирали типовые команды. Теперь перезагрузка расширений приводит граф ровно к тому виду, какой даёт полная загрузка, а если что-то снять не удалось — это сказано в журнале, а не замолчано.

Объекты-тёзки, различающиеся подчёркиванием, больше не схлопываются в один

Два объекта с именами вроде «усДокумент» и «ус_Документ» получали один ключ и сливались в графе: часть связей приписывалась чужому объекту. Заодно столкновение ключей теперь останавливает загрузку с понятным сообщением, а не теряет сущность молча.

Метод формы называет свою форму

Поиск метода и список вызывающих брали первую подходящую форму, поэтому у объекта с несколькими формами метод мог быть приписан не той. Признак основной формы объекта тоже перестал быть догадкой потребителя и стал фактом графа.

Видно, какое расширение принесло реквизит

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

Проверка роли в коде расширения ведёт к коду, а не к расширению целиком

Прежде такая проверка указывала на расширение в целом, а проверка в модуле формы расширения до графа не доходила вовсе. Теперь связь идёт от конкретного модуля, формы или команды, строится один раз и снимается вместе с расширением.

Вклад расширения в объект другого расширения больше не теряется

Владелец объекта определялся порядком папок на диске, поэтому при двух расширениях результат загрузки зависел от того, какая папка легла первой. Теперь владельца решают данные, а вклад доезжает и при полной загрузке, и при перезагрузке расширений.

Сверка версий переживает смену ключа объекта

После изменения правил построения ключей запечённая версия переставала сопоставляться с живой конфигурацией, а запекание версии могло унести связи живой системы. Слишком длинный ключ теперь укорачивается, а не отменяет запекание.

Журналы и адреса репозиториев не раскрывают лишнего

Пользователь со списком систем мог увидеть в журнале загрузки сведения о чужих системах, а учётные данные из адреса git-репозитория хранились и отдавались открытым текстом. Кроме того, ограничение по списку систем не распространялось на обновление системы через клонирование и на стороны сравнения версий.

Прогноз индексов пересчитывается после перезагрузки расширений

Прежде он оставался прежним, и предложенные индексы не учитывали реквизиты, принесённые расширением.

 

 
Frame 1321315639.png

Технические требования

Работоспособность гарантируется:

  • Программа не задействует платформу 1С: конфигурация разбирается из выгрузки, из репозитория или прямо из бинарного файла поставки.

  • Проверена выгрузка платформы 8.3.27.1719 и будет одинаково работать с любой платформой, где есть выгрузка конфигурации в файлы. Формат 1С:EDT (файлы .mdo / .rights) читается напрямую, без промежуточной выгрузки в XML.

  • Развёртывание: Docker и Docker Compose на сервере (Linux или Windows). Поставка приходит одним архивом с образом внутри — доступ в интернет при установке не нужен, контур может быть полностью закрытым. Работа ведётся в браузере.

  • Оперативная память: от 8 ГБ для небольших и средних конфигураций; 16 ГБ рекомендуется для крупных и для прямой загрузки файлов поставки от 1 ГБ; от 32 ГБ для конфигураций масштаба 1С:ERP с расширениями. Диск: от 20 ГБ, дальше по числу и размеру загруженных конфигураций.

  • Лицензия приходит строкой или файлом и вводится в самой программе: ни обращения к интернету, ни привязки к оборудованию она не требует.

    На слайдах 1С:ERP. Управление холдингом (3.2.8.11) с расширением «Управление лизингом»

 

Техническая поддержка

Бесплатный период техподдержки составляет 1 месяц со дня покупки.

Также после приобретения вы получаете 1 месяц бесплатных обновлений.

В случае возникновения ошибок рекомендуем ознакомиться с описанием и документацией программы. Если не нашли решения своей проблемы в документации или решение не помогает — создайте обращение по инструкции ниже:

1

Создать обращение (тикет)

Создать тикет

2

Заполнить данные

Контакты, номер заказа, подробное описание вопроса
Напишите порядок ваших действий с программой, приложите видео/скриншоты/отчеты об ошибке
Точную конфигурацию 1С, версии платформы, инструмента, СУБД

3

Дождаться ответа

Время ответа до 24 часов в рабочее время

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

Остались вопросы?

Для получения дополнительной информации и помощи в настройке модуля под нужды вашего бизнеса — оставьте заявку

Демоверсия Feedback Pro
Наименование Файл Версия Размер
Руководство пользователя по работе с Analyzer 1C .pdf 8,92Mb 76 Скачать
Описание MCP Server .pdf 875,54Kb 60 Скачать
Демо-версия Analyzer 1C — единый граф типовой и расширений плюс инструмент обновления поставки .txt 4,06Kb 61 Скачать

См. также

Database Compression Tool: Инструмент для свертки и сжатия баз данных 1С

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Може...

24900 руб.

Infostart Toolkit Air: Инструменты разработки в 1С:8.3 и 8.5

Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

Маркировка 2026 для УТ 10.3 (Новые товарные группы)

Доработка для 1С:Управление торговлей 10.3 (релиз 10.3.88.3) добавляет поддержку маркировки новых категорий товаров согласно постановлениям Правительства РФ 2025–2026 гг. Конфигурация УТ 10.3 снята с поддержки — новые маркируемые категории ...

14640 руб.

Infostart PrintWizard (конструктор печатных форм)

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

22570 руб.

Infostart MCP: готовые MCP серверы для вайбкодинга в 1С

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

15250 руб.

Pilot 1C – ИИ-помощник разработчика 1С

Pilot 1C превращает задачу, поставленную обычными словами, в техническое задание, код на встроенном языке и сценарии проверки. Прежде чем что-то предложить, он сверяется с устройством вашей конфигурации через граф Analyzer 1C: существует ли...

18300 руб.

Infostart Dashboard: Монитор показателей, виджеты и дашборды в 1С 8.3

Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы ...

31720 руб.

Infostart DataFormWizard: Управление вводом данных в 1С 8.3

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на л...

17000 руб.

Infostart MagicInput: улучшенный поиск по строке в 1С

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигацион...

6000 руб.

Infostart Validator: свои проверки ввода данных в 1С

Контроль ввода данных в 1С: проверка заполнения реквизитов, обязательные поля, контроль перед записью и проведением, запрет проведения документа. Позволяет настраивать любые проверки данных в 1С 8.3/8.5 от обязательных полей до сложных усло...

6000 руб.

Колба Полная колба