Синхронизация 1c-metadata-manage с апстримом cc-1c-skills (без Python… - #16
Open
uasy wants to merge 2 commits into
Open
Синхронизация 1c-metadata-manage с апстримом cc-1c-skills (без Python…#16uasy wants to merge 2 commits into
uasy wants to merge 2 commits into
Conversation
added 2 commits
July 13, 2026 12:53
# Conflicts: # content/skills/1c-metadata-manage/SKILL.md # content/skills/1c-metadata-manage/docs/template-manage.md # content/skills/1c-metadata-manage/docs/web-manage.md # content/skills/1c-metadata-manage/tools/1c-form-scaffold/scripts/remove-form.ps1
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Синхронизация 1c-metadata-manage с апстримом cc-1c-skills (без Python-рантайма)
Тип: багфиксы + портирование новых возможностей + актуализация документации
Статус: протестировано на отдельной машине (Windows 10, платформа 1С 8.3.27.2074, база УТ 11) — готово к коммиту и открытию PR
Итог
content/skills/1c-metadata-manage/— это самостоятельный (не сгенерированный) даунстрим-порт скиллов из апстримаcc-1c-skillsпод диспетчерскую архитектуруai_rules_1c(одинSKILL.md+docs/*.md+tools/1c-*/scripts/*.ps1, только PowerShell). Со временем апстрим ушёл вперёд: багфиксы, новая подсистема защиты объектов «на поддержке», движокibcmd, значительно разросшийся DSLform-compile, поддержка.dt, множественные значения по умолчанию в СКД. Часть документации при этом отстала от уже реализованного в скриптах кода.Этот PR закрывает разрыв: 53 изменённых файла + 18 новых, порт выполнен вручную по построчному диффу апстрима.
Не входит в этот PR: портирование Python-рантайма (
.py-твины инструментов + регэксп-переключательdocs/*.md).1. Критичные багфиксы
Порча данных при повторной работе с уже созданными объектами — не новая функциональность, а исправление существующего поведения.
tools/1c-cfe-manage/scripts/cfe-borrow.ps1— портирован целиком с актуальной версии cc (v1.8). До фикса повторное заимствование (re-borrow) объекта расширения:Module.bslпустым файлом;[guid]::NewGuid()для формы вместо переиспользования старого — ломало стабильность идентичности формы между запусками;ChildObjects(не было дедупликации);-replaceпо</ExtendedConfigurationObject>портил XML, если у объекта уже были заимствованные реквизиты (задевал не тот узел — заменён на анкер к первому вхождению);Объект.<ТЧ>.<Колонка>.<Sub>);FooterDataPath,HeaderDataPath,MultipleValueDataPathи др.).tools/1c-form-scaffold/scripts/remove-form.ps1— после удаления формы с назначением ≠Objectмогла остаться битая ссылка наDefault*Form(List/Choice/Record) — чистился толькоDefaultForm. Теперь сканируется любой узел*Form.tools/1c-form-validate/scripts/form-validate.ps1— добавлены проверки уникальности имён (элементы/реквизиты/колонки ТЧ/команды/параметры формы: два элемента с одинаковым именем и разными ID раньше проходили валидацию молча) и расширенная DataPath-валидация (кроме основногоDataPathтеперь проверяютсяTitleDataPath/FooterDataPath/HeaderDataPath/MultipleValueDataPath/MultipleValuePresentDataPath/RowPictureDataPath/MultipleValuePictureDataPath).tools/1c-cf-manage/scripts/cf-edit.ps1,tools/1c-interface-manage/scripts/interface-edit.ps1,tools/1c-subsystem-manage/scripts/{subsystem-edit,subsystem-compile}.ps1,tools/1c-meta-edit/scripts/meta-edit.ps1. Относительный путь к соседнемуX-validate.ps1был скопирован из раскладки апстрима (скиллы — соседние папки), но вai_rules_1cинструменты сгруппированы иначе, поэтомуTest-Pathрезолвился за пределы каталога инструмента и молча падал — автовалидация тихо пропускалась на каждом вызове. Пути поправлены и провереныrealpath -m+test -fна фактическое разрешение файла.tools/1c-web-ops/scripts/web-publish.ps1и весь блок ibcmd (см. §3) — автоопределение версии платформы сортировало кандидатов строково (FullName), а не как[version]— на многоверсионной машине строка"8.3.9"больше"8.3.23", то есть могла выбраться не та версия платформы. Исправлено на версийную сортировку везде, где встречался паттерн.2. Support-guard — защита объектов «на поддержке» (адаптировано под
.dev.env)Апстрим добавил подсистему защиты от правки объектов, находящихся «на поддержке»/«на замке» у поставщика — до этого PR в
ai_rules_1cеё не было вообще (ни одного следаParentConfigurations/editingAllowedCheck).Новое:
tools/_shared/support-guard.ps1— общий helper (в апстриме логика дублирована по ~20 скриптам, здесь — централизована в одном месте). ЭкспортируетAssert-EditAllowed(write-guard, блокирует/предупреждает перед записью в объект на поддержке) иGet-SupportStatusForPath(read-only статус для info-команд). ПарсингExt/ParentConfigurations.binперенесён из cc как есть.tools/1c-support-edit/scripts/support-edit.ps1— новый инструмент, порт из cc почти без изменений. Переключает состояние поддержки (-Set editable|off-support|locked,-Capability on|off).content/skills/1c-metadata-manage/docs/support-manage.md— новая дока: формат.bin, алгоритм guard'а, описаниеsupport-edit..dev.env.example— новый параметрSUPPORT_EDIT_POLICY=deny|warn|off(по умолчаниюdeny, в стиле уже существующегоNEW_OBJECTS_IN).content/skills/1c-metadata-manage/SKILL.md— новая строка диспетчерской таблицы →support-manage.md.Write-guard встроен в 16 скриптов (
cf-edit,role-compile,subsystem-compile,subsystem-edit,interface-edit,add-template,add-help,meta-compile,meta-edit,meta-remove,form-add,form-compile,form-edit,skd-compile,skd-edit,mxl-compile), read-only статус-строка — в 7 (role-info,subsystem-info,mxl-info,skd-info,form-info— через общий helper;meta-info,cf-info— оставлены как самодостаточный перенос из cc, см. §5).3.
ibcmd— headless-движок сборки/БДПорт поддержки
ibcmd.exeкак альтернативы1cv8.exe(headless, без Дизайнера) +Invoke-IbcmdProcess(неинтерактивный запуск: закрытый stdin, декодирование cp866). Задействовано в 12 файлах:tools/1c-epf-build/scripts/{epf-build,stub-db-create}.ps1,tools/1c-epf-dump/scripts/epf-dump.ps1,tools/1c-db-ops/scripts/{db-create,db-dump-cf,db-dump-xml,db-load-cf,db-load-git,db-load-xml,db-run,db-update}.ps1,tools/1c-web-ops/scripts/web-publish.ps1.Обход
.v8-project.json(Find-ProjectV8Path) сознательно не перенесён — в проекте-V8Pathуже явный параметр, который заполняет вызывающий агент из.dev.env/PLATFORM_PATH; сама функция и её вызовы вычищены при переносе.4. Новые инструменты
db-dump-dt/db-load-dt— выгрузка/загрузка ИБ целиком (конфигурация + данные) в.dtчерезibcmd. Новые разделы 9–10 вdocs/db-manage.md,db-load-dtявно помечен как необратимая операция (в стиле уже имевшихся предупреждений дляdb-load-cf/db-load-xml).form-decompile—Form.xml→ JSON-черновик, совместимый сform-compile(не lossless round-trip, явно падает на сложных случаях:ConditionalAppearanceсо scope, дизайн-тайм chart/planner). Даёт scaffold-by-example и структурный рефакторинг существующих форм — раньше такая возможность была только у MXL/СКД decompile. Новый раздел «3a. Decompile» вdocs/form-manage.md, ключевое словоdecompileдобавлено в диспетчерскую таблицуSKILL.md.5.
form-compile— 11 новых DSL-модулейtools/1c-form-compile/scripts/form-compile.ps1заменён целиком версией апстрима (v1.23 → v1.174, 3389 → 6683 строк) поверх — только правка support-guard (§2). Базовый DSL-слой (input/checkbox/radio/label/group/table/columnGroup/pages/button/cmdBar/--from-object/пресеты) был уже в синхроне; локальных доработокai_rules_1cв файле не было — диффом подтверждено, что перенос ничего не потерял.Новые модули:
roles-access(видимость/доступ по ролям в определении формы),dynamic-list(продвинутые параметры запроса,dataParameters, вычисляемые поля,filter/order/группировки),charts(ganttTable,chart,planner),companion-panels,command-interface,appearance(цвет/шрифт/рамка +conditionalAppearance),type-system-advanced,table-advanced,choice-params,special-fields,report-form,layout-advanced. ПлюсAssert-UniqueName— валидатор дублей имён на этапе компиляции (зеркалит фикс §1 вform-validate.ps1).Документация: 12 новых файлов
tools/1c-form-compile/references/{roles-access,dynamic-list,charts,companion-panels,command-interface,appearance,type-system-advanced,table-advanced,layout-advanced,special-fields,choice-params,report-form}.md(зеркалят структуру cc) +docs/form-compile-dsl.mdкак таблица-указатель. Отдельно —docs/form-manage.md, раздел «Extension Forms»: кодform-edit.ps1уже поддерживал редактирование форм расширений (авто-детект по<BaseForm>, сдвиг ID на 1000000+,formEvents/elementEventsсcallTypeBefore/After/Override), но это не было задокументировано.6. СКД — множественные значения по умолчанию
tools/1c-skd-{compile,edit,info}/scripts/*.ps1заменены версиями апстрима + support-guard (§2). Добавлен разборIN (a, b, c)-подобных значений по умолчанию с авто-установкойvalueListAllowed=trueи корректной эмиссией/удалением нескольких<value>-узлов при повторном редактировании параметра (раньше значение по умолчанию всегда было скаляром, а при повторном редактировании параметра со списком значений в XML могли оставаться осиротевшие<value>-узлы — это баг, не только недостающая фича).Новый флаг
skd-info -Name X -Raw -OutFile q.sql— текст запроса без заголовков и без лимита в 150 строк, для сценария round-trip («вытащить запрос → отредактировать →skd-edit set-query @q.sql»). Документация:docs/skd-manage.md(таблица параметров Info, пример, номера версий),tools/1c-skd-info/modes-reference.md(подраздел про-Rawи точный CLI-синтаксис round-trip).7. Документация без изменения кода
Код уже умел, документация молчала:
docs/meta-manage.md,tools/1c-meta-edit/{child-operations,json-dsl}.md— синтаксис составного типа ("Строка + Число(15,2) + СправочникСсылка.Контрагенты"инлайн, JSON-массив"type": [...]).docs/template-manage.md— тип макетаDataCompositionSchema(5-й тип помимо HTML/Text/SpreadsheetDocument/BinaryData) и флаг-SetMainSKD(авто-привязкаMainDataCompositionSchema).tools/1c-cf-manage/cf-edit-reference.md—CompatibilityModeдоVersion8_5_1(обрывался наVersion8_3_27);InterfaceCompatibilityMode— полный список из 7 значений (было только 3, не хваталоVersion8_2EnableTaxi,TaxiEnableVersion8_5,Version8_5EnableTaxi,Version8_5).docs/cf-manage.md— операцииset-panels/set-home-pageописаны как полноценные документированные операции с форматом и примерами (раньше — только упоминание в changelog-заметке); таблица Info-режима (Mode/Section/Limit/Offset/OutFile) дополнена; Init — параметры-Synonym/-Version/-Vendor/-CompatibilityMode.docs/web-manage.md— убраны несуществующие флаги-Force(web-stop) и-KeepApacheRunning/«илиweb-stop -Start» (web-unpublish) — подтверждено, что их нет в актуальных параметрах скриптов ни у cc, ни у ai_rules_1c; добавлена документация реально существующего, но не описанного флага-Allуweb-unpublish.ps1.8. Мелкое
content/skills/img-grid-analysis/scripts/overlay-grid.py— портирован целиком: валидация--cols/--rows(>0/≥0),max(1, round(...))защита от вырожденной сетки в 0 строк,sys.stdout/stderr.reconfigure("utf-8"). Провереноpython3 -m py_compile.docs/bsp-manage.md— не тронут, сознательно (см. §9 «Отклонения», п. 4).9. Сознательные отклонения от апстрима
.dev.env, а не.v8-project.json..v8-project.jsonв проекте только документирован (db-manage.md), но ни один скрипт его не читает — конфигурацию резолвит вызывающий агент, а не PowerShell, и-V8Pathуже явный параметр. Поэтому: (а)Find-ProjectV8Path/Find-V8Projectне портировались вообще; (б) новый параметрSUPPORT_EDIT_POLICYдобавлен в.dev.env.example; (в)tools/_shared/support-guard.ps1читает.dev.envтем же алгоритмом обхода каталогов вверх по дереву, что апстрим использовал для.v8-project.json, но по плоскомуKEY=value, а не JSON.meta-info.ps1иcf-info.ps1не переведены на общий helper. Их собственные read-only статус-функции самодостаточны и не зависят от.dev.env/.v8-project.json, перенесены из cc как есть. Централизация была бы чисто косметической (DRY) ценой смены способа получения UUID объекта (из уже распарсенного XML-атрибута → повторный walk-up дерева) без возможности проверить это исполнением — решили не рисковать в рамках этого PR.docs/bsp-manage.md— параметрМассивЦелевыхОбъектов(текущий уai_rules_1c) сохранён вместо апстримногоОбъектыНазначенияМассив. По оценке отчёта он ближе к реальному контракту диспетчера БСП «Дополнительные отчёты и обработки»; менять нечего до появления более сильного сигнала (например, прямой сверки с исходником БСП).web-publish.ps1(enableStandardOdataкак атрибут<point>уai_rules_1cпротив дочернего элемента<standardOdata enable="true"/>у cc) — не перенесена, отчёт не подтвердил, какой вариант канонический для платформы.10. Тестирование
Проведено на отдельной машине (Windows 10, PowerShell 5.1, платформа 1С 8.3.27.2074, база —
base/ut.dt≈ 2.1 ГБ, выгрузка XML вsrc/ut/, исходникиai_rules_1cвinstall/ai_rules_1c/)..ps1-файлов (PSParser::Tokenize, явный UTF-8)denyбез.dev.env→ exit 1;warn→ предупреждение, exit 0;off→ тихо, exit 0;support-edit -Set editableснимает блокировкуcfe-borrowповторное заимствование формы: код вModule.bslсохранён, форма не задвоилась вChildObjectscf-editавтовалидация (modify-property Comment→cf-validateзапускается автоматически,Validation OK)form-compileновые DSL (roles-access+charts) →form-validate→Validation OK (11 checks)skd-editmulti-value параметр:add-parameterсо списком →modify-parameter→ ровно 2<value>, осиротевших нетdb-dump-dt/db-load-dtчерез ibcmd: load 2102 МБ → база 5610 МБ → dump обратно 2117 МБ (<1% расхождение, ожидаемо после перестройки индексов)Assert-EditAllowedна объекте безExt/ParentConfigurations.bin→ exit 0, вывод пустdb-dump-cf→db-load-cf→db-update→db-dump-cf)db-dump-xml -Mode Full→db-load-xml→db-update→db-dump-cf)Попутно найден и исправлен баг самого патча:
tools/_shared/support-guard.ps1был сохранён без UTF-8 BOM — PowerShell 5.1 при dot-source читает файл без BOM в системной кодировке (CP1252), кириллица в строковых литералах вызывала parse error. Файл пересохранён с BOM (у остальных.ps1в патче BOM уже был).11. Объём изменений
53 изменённых файла, 18 новых (полный список путей —
git statusвinstall/ai_rules_1cили разделы 1–8 выше). Untouched-подтверждено:erf-*/epf-bsp-*(doc-only обёртки, уже в синхроне),web-test(осознанно вынесен на1c-tester),img-grid-analysisskill wrapper (уже установлен, порт — только внутренний скрипт, см. §8).12. Не вошло / следующие шаги
.py-твины инструментов +docs/*.md-переключатель) — намеренно не в этом PR. Требует отдельного решения по раскладке папок и по конвенции параметров окружения (.dev.envvs.v8-project.json), не механический перенос.web-publish.ps1) оставлен открытым — нужна независимая проверка, какой вариант канонический для платформы, прежде чем унифицировать.