Files
cc-1c-skills/tests/skills/cases/form-decompile/attribute-title-case.json
T
cf02c69ff5 fix(form-decompile): не терять заголовок, отличающийся от авто-вывода только регистром
Заголовок реквизита формы и параметра динамического списка опускается, если равен
авто-выводу из имени: компилятор восстановит его сам. Сравнение было
регистронезависимым (в ps1 -eq/-ne, в py зеркалящий их _ps_ieq), поэтому
«Организации ВетИС» при имени ОрганизацииВЕТИС считался равным авто-выводу
«Организации ВЕТИС», выпадал из DSL, и обратная сборка молча меняла текст на форме.

Эталон сравнения — не PowerShell, а компилятор: он пишет заголовок как есть, значит
опускать можно только при побайтовом совпадении. В ps1 этого не даёт и -ceq — он
культурный, мягкий перенос и NFD-разложение для него ничего не весят, и порты
разошлись бы между собой. Сравнение идёт через [string]::Equals(..., Ordinal),
что и есть зеркало питоновского ==. _ps_ieq больше не нужен и удалён.

Два регресс-кейса: реквизит формы (регистр + невидимый мягкий перенос) и параметр
динамического списка. Оба падают на исходной версии в обоих портах.

Найдено на типовой конфигурации: Документ.ИсходящаяТранспортнаяОперацияВЕТИС.ФормаСписка.

Co-Authored-By: Шпаков Антон Александрович <shpakov.anton.job@gmail.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SSyRNwSiuAAEQCLSCUGEzQ
2026-09-22 20:06:32 +03:00

38 lines
1.5 KiB
JSON

{
"name": "Заголовок реквизита, отличающийся от авто-вывода только регистром или невидимым символом, не теряется",
"preRun": [
{
"script": "meta-compile/scripts/meta-compile",
"input": { "type": "DataProcessor", "name": "Регистр" },
"args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
},
{
"script": "form-add/scripts/form-add",
"args": { "-ObjectPath": "{workDir}/DataProcessors/Регистр.xml", "-FormName": "Форма" }
},
{
"script": "form-compile/scripts/form-compile",
"input": {
"title": "Регистр",
"elements": [{ "input": "Организации", "path": "ОрганизацииВЕТИС" }],
"attributes": [
{ "name": "Объект", "type": "DataProcessorObject.Регистр", "main": true },
{ "name": "ОрганизацииВЕТИС", "type": "string", "title": "Организации ВетИС" },
{ "name": "СуммаДокумента", "type": "string", "title": "Сумма­ документа" }
]
},
"args": {
"-JsonPath": "{inputFile}",
"-OutputPath": "{workDir}/DataProcessors/Регистр/Forms/Форма/Ext/Form.xml"
}
}
],
"params": {
"formPath": "DataProcessors/Регистр/Forms/Форма/Ext/Form.xml",
"outputPath": "draft.json"
},
"expect": {
"files": ["draft.json"]
}
}