From 3c50d3caa0715accf83cb4706b63344d167861a4 Mon Sep 17 00:00:00 2001 From: Nick Shirokov Date: Sat, 8 Aug 2026 20:04:06 +0300 Subject: [PATCH] =?UTF-8?q?fix(form,meta,skd):=20=D1=81=D1=80=D0=B5=D0=B7?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D0=BB=D1=8E=D0=B1=D0=BE=D0=B9=20=D1=81?= =?UTF-8?q?=D0=B3=D0=B5=D0=BD=D0=B5=D1=80=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=BF=D1=80=D0=B5=D1=84=D0=B8=D0=BA?= =?UTF-8?q?=D1=81=20dNpM:,=20=D0=BD=D0=B5=20=D1=82=D0=BE=D0=BB=D1=8C=D0=BA?= =?UTF-8?q?=D0=BE=20d5p1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Имя префикса для .../8.1/data/enterprise/current-config платформа выдаёт по порядку объявления в файле: в корпусе acc_8.3.27 на этом URI встречаются d4p1, d5p1 и d6p1. Литеральное d5p1: покрывало лишь часть случаев — тип, скопированный из Predefined.xml, приходит с d4p1: и даёт ту же ошибку «Неизвестное имя типа». Обобщено до ^d\d+p\d+: — так же, как это уже делает form-info. Условие «только у ссылочных типов, с точкой» сохранено: все 11 спец-типов чужих пространств имён (d5p1:Chart, mxl:SpreadsheetDocument, pl:Planner и др.) точки не имеют. Регресс-кейс расширен на d4p1 и d6p1: все шесть форм ввода дают один cfg:CatalogRef.Склады. Co-Authored-By: Claude Opus 5 (1M context) --- .../form-compile/scripts/form-compile.ps1 | 15 ++-- .../form-compile/scripts/form-compile.py | 15 ++-- .../skills/form-edit/scripts/form-edit.ps1 | 15 ++-- .claude/skills/form-edit/scripts/form-edit.py | 15 ++-- .../meta-compile/scripts/meta-compile.ps1 | 15 ++-- .../meta-compile/scripts/meta-compile.py | 15 ++-- .../skills/meta-edit/scripts/meta-edit.ps1 | 15 ++-- .claude/skills/meta-edit/scripts/meta-edit.py | 15 ++-- .../skd-compile/scripts/skd-compile.ps1 | 15 ++-- .../skills/skd-compile/scripts/skd-compile.py | 15 ++-- .claude/skills/skd-edit/scripts/skd-edit.ps1 | 15 ++-- .claude/skills/skd-edit/scripts/skd-edit.py | 15 ++-- .../type-prefix-lenient/Catalogs/Товары.xml | 80 +++++++++++++++++++ .../meta-compile/type-prefix-lenient.json | 10 ++- 14 files changed, 185 insertions(+), 85 deletions(-) diff --git a/.claude/skills/form-compile/scripts/form-compile.ps1 b/.claude/skills/form-compile/scripts/form-compile.ps1 index 75fa34b8..9de22daf 100644 --- a/.claude/skills/form-compile/scripts/form-compile.ps1 +++ b/.claude/skills/form-compile/scripts/form-compile.ps1 @@ -1,4 +1,4 @@ -# form-compile v1.186 — Compile 1C managed form from JSON or object metadata (+resolve_type_str: срезание префикса cfg:/d5p1:) +# form-compile v1.187 — Compile 1C managed form from JSON or object metadata (+resolve_type_str: срезание префикса cfg:/d5p1:) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$JsonPath, @@ -2407,14 +2407,15 @@ function Resolve-TypeStr { # Прощающий ввод: ведущий префикс приходит копипастой из выгрузки. Без срезания он ломает # поиск в словаре — русское имя типа остаётся непереведённым, и платформа отвечает - # «Неизвестное имя типа». cfg: снимаем всегда (однозначно = текущая конфигурация), d5p1: — - # только у ССЫЛОЧНЫХ типов (с точкой): сам по себе префикс неоднозначен, в формах d5p1:Chart, - # d5p1:TextDocument, d5p1:GeographicalSchema и др. адресуют свои пространства имён, и там он - # часть канонического значения. + # «Неизвестное имя типа». cfg: снимаем всегда — он однозначно означает текущую конфигурацию. + # Сгенерированный dNpM: (в корпусе на этом URI встречаются d4p1, d5p1, d6p1 — имя префикса + # платформа выдаёт по порядку объявления) снимаем ТОЛЬКО у ссылочных типов, с точкой: + # сам по себе префикс многозначен — в формах d5p1:Chart, d5p1:TextDocument, + # d5p1:GeographicalSchema адресуют чужие пространства имён, и там он часть значения. if ($typeStr.StartsWith('cfg:')) { $typeStr = $typeStr.Substring(4) - } elseif ($typeStr.StartsWith('d5p1:') -and $typeStr.Contains('.')) { - $typeStr = $typeStr.Substring(5) + } elseif ($typeStr.Contains('.') -and $typeStr -match '^d\d+p\d+:') { + $typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1) } # Параметризованные типы: Number(15,2), Строка(100) diff --git a/.claude/skills/form-compile/scripts/form-compile.py b/.claude/skills/form-compile/scripts/form-compile.py index 2f9e46aa..e0918a45 100644 --- a/.claude/skills/form-compile/scripts/form-compile.py +++ b/.claude/skills/form-compile/scripts/form-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# form-compile v1.186 — Compile 1C managed form from JSON or object metadata (+resolve_type_str: срезание префикса cfg:/d5p1:) +# form-compile v1.187 — Compile 1C managed form from JSON or object metadata (+resolve_type_str: срезание префикса cfg:/d5p1:) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import copy @@ -3767,14 +3767,15 @@ def resolve_type_str(type_str): return type_str # Прощающий ввод: ведущий префикс приходит копипастой из выгрузки. Без срезания он ломает # поиск в словаре — русское имя типа остаётся непереведённым, и платформа отвечает - # «Неизвестное имя типа». cfg: снимаем всегда (однозначно = текущая конфигурация), d5p1: — - # только у ССЫЛОЧНЫХ типов (с точкой): сам по себе префикс неоднозначен, в формах d5p1:Chart, - # d5p1:TextDocument, d5p1:GeographicalSchema и др. адресуют свои пространства имён, и там он - # часть канонического значения. + # «Неизвестное имя типа». cfg: снимаем всегда — он однозначно означает текущую конфигурацию. + # Сгенерированный dNpM: (в корпусе на этом URI встречаются d4p1, d5p1, d6p1 — имя префикса + # платформа выдаёт по порядку объявления) снимаем ТОЛЬКО у ссылочных типов, с точкой: + # сам по себе префикс многозначен — в формах d5p1:Chart, d5p1:TextDocument, + # d5p1:GeographicalSchema адресуют чужие пространства имён, и там он часть значения. if type_str.startswith('cfg:'): type_str = type_str[4:] - elif type_str.startswith('d5p1:') and '.' in type_str: - type_str = type_str[5:] + elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str): + type_str = type_str[type_str.index(':') + 1:] # Параметризованные типы: Number(15,2), Строка(100) m = re.match(r'^([^(]+)\((.+)\)$', type_str) if m: diff --git a/.claude/skills/form-edit/scripts/form-edit.ps1 b/.claude/skills/form-edit/scripts/form-edit.ps1 index 57b5a376..f81e8f8d 100644 --- a/.claude/skills/form-edit/scripts/form-edit.ps1 +++ b/.claude/skills/form-edit/scripts/form-edit.ps1 @@ -1,4 +1,4 @@ -# form-edit v1.10 — Edit 1C managed form elements (+resolve_type_str: срезание префикса cfg:/d5p1:) +# form-edit v1.11 — Edit 1C managed form elements (+resolve_type_str: срезание префикса cfg:/d5p1:) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -321,14 +321,15 @@ function Resolve-TypeStr { # Прощающий ввод: ведущий префикс приходит копипастой из выгрузки. Без срезания он ломает # поиск в словаре — русское имя типа остаётся непереведённым, и платформа отвечает - # «Неизвестное имя типа». cfg: снимаем всегда (однозначно = текущая конфигурация), d5p1: — - # только у ССЫЛОЧНЫХ типов (с точкой): сам по себе префикс неоднозначен, в формах d5p1:Chart, - # d5p1:TextDocument, d5p1:GeographicalSchema и др. адресуют свои пространства имён, и там он - # часть канонического значения. + # «Неизвестное имя типа». cfg: снимаем всегда — он однозначно означает текущую конфигурацию. + # Сгенерированный dNpM: (в корпусе на этом URI встречаются d4p1, d5p1, d6p1 — имя префикса + # платформа выдаёт по порядку объявления) снимаем ТОЛЬКО у ссылочных типов, с точкой: + # сам по себе префикс многозначен — в формах d5p1:Chart, d5p1:TextDocument, + # d5p1:GeographicalSchema адресуют чужие пространства имён, и там он часть значения. if ($typeStr.StartsWith('cfg:')) { $typeStr = $typeStr.Substring(4) - } elseif ($typeStr.StartsWith('d5p1:') -and $typeStr.Contains('.')) { - $typeStr = $typeStr.Substring(5) + } elseif ($typeStr.Contains('.') -and $typeStr -match '^d\d+p\d+:') { + $typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1) } # Параметризованные типы: Number(15,2), Строка(100) diff --git a/.claude/skills/form-edit/scripts/form-edit.py b/.claude/skills/form-edit/scripts/form-edit.py index 10746fc6..205b614b 100644 --- a/.claude/skills/form-edit/scripts/form-edit.py +++ b/.claude/skills/form-edit/scripts/form-edit.py @@ -1,4 +1,4 @@ -# form-edit v1.10 — Edit 1C managed form elements (Python port) (+resolve_type_str: срезание префикса cfg:/d5p1:) +# form-edit v1.11 — Edit 1C managed form elements (Python port) (+resolve_type_str: срезание префикса cfg:/d5p1:) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json @@ -396,14 +396,15 @@ def resolve_type_str(type_str): return type_str # Прощающий ввод: ведущий префикс приходит копипастой из выгрузки. Без срезания он ломает # поиск в словаре — русское имя типа остаётся непереведённым, и платформа отвечает - # «Неизвестное имя типа». cfg: снимаем всегда (однозначно = текущая конфигурация), d5p1: — - # только у ССЫЛОЧНЫХ типов (с точкой): сам по себе префикс неоднозначен, в формах d5p1:Chart, - # d5p1:TextDocument, d5p1:GeographicalSchema и др. адресуют свои пространства имён, и там он - # часть канонического значения. + # «Неизвестное имя типа». cfg: снимаем всегда — он однозначно означает текущую конфигурацию. + # Сгенерированный dNpM: (в корпусе на этом URI встречаются d4p1, d5p1, d6p1 — имя префикса + # платформа выдаёт по порядку объявления) снимаем ТОЛЬКО у ссылочных типов, с точкой: + # сам по себе префикс многозначен — в формах d5p1:Chart, d5p1:TextDocument, + # d5p1:GeographicalSchema адресуют чужие пространства имён, и там он часть значения. if type_str.startswith('cfg:'): type_str = type_str[4:] - elif type_str.startswith('d5p1:') and '.' in type_str: - type_str = type_str[5:] + elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str): + type_str = type_str[type_str.index(':') + 1:] # Параметризованные типы: Number(15,2), Строка(100) m = re.match(r'^([^(]+)\((.+)\)$', type_str) if m: diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1 index b4871b4d..5de67d44 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.ps1 +++ b/.claude/skills/meta-compile/scripts/meta-compile.ps1 @@ -1,4 +1,4 @@ -# meta-compile v1.90 — Compile 1C metadata object from JSON (+resolve_type_str: срезание префикса cfg:/d5p1:) +# meta-compile v1.91 — Compile 1C metadata object from JSON (+resolve_type_str: срезание префикса cfg:/d5p1:) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [Parameter(Mandatory)] @@ -583,14 +583,15 @@ function Resolve-TypeStr { # Прощающий ввод: ведущий префикс приходит копипастой из выгрузки. Без срезания он ломает # поиск в словаре — русское имя типа остаётся непереведённым, и платформа отвечает - # «Неизвестное имя типа». cfg: снимаем всегда (однозначно = текущая конфигурация), d5p1: — - # только у ССЫЛОЧНЫХ типов (с точкой): сам по себе префикс неоднозначен, в формах d5p1:Chart, - # d5p1:TextDocument, d5p1:GeographicalSchema и др. адресуют свои пространства имён, и там он - # часть канонического значения. + # «Неизвестное имя типа». cfg: снимаем всегда — он однозначно означает текущую конфигурацию. + # Сгенерированный dNpM: (в корпусе на этом URI встречаются d4p1, d5p1, d6p1 — имя префикса + # платформа выдаёт по порядку объявления) снимаем ТОЛЬКО у ссылочных типов, с точкой: + # сам по себе префикс многозначен — в формах d5p1:Chart, d5p1:TextDocument, + # d5p1:GeographicalSchema адресуют чужие пространства имён, и там он часть значения. if ($typeStr.StartsWith('cfg:')) { $typeStr = $typeStr.Substring(4) - } elseif ($typeStr.StartsWith('d5p1:') -and $typeStr.Contains('.')) { - $typeStr = $typeStr.Substring(5) + } elseif ($typeStr.Contains('.') -and $typeStr -match '^d\d+p\d+:') { + $typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1) } # Параметризованные типы: Number(15,2), Строка(100) diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py index 3367da35..8dd9035b 100644 --- a/.claude/skills/meta-compile/scripts/meta-compile.py +++ b/.claude/skills/meta-compile/scripts/meta-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# meta-compile v1.90 — Compile 1C metadata object from JSON (+resolve_type_str: срезание префикса cfg:/d5p1:) +# meta-compile v1.91 — Compile 1C metadata object from JSON (+resolve_type_str: срезание префикса cfg:/d5p1:) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -657,14 +657,15 @@ def resolve_type_str(type_str): return type_str # Прощающий ввод: ведущий префикс приходит копипастой из выгрузки. Без срезания он ломает # поиск в словаре — русское имя типа остаётся непереведённым, и платформа отвечает - # «Неизвестное имя типа». cfg: снимаем всегда (однозначно = текущая конфигурация), d5p1: — - # только у ССЫЛОЧНЫХ типов (с точкой): сам по себе префикс неоднозначен, в формах d5p1:Chart, - # d5p1:TextDocument, d5p1:GeographicalSchema и др. адресуют свои пространства имён, и там он - # часть канонического значения. + # «Неизвестное имя типа». cfg: снимаем всегда — он однозначно означает текущую конфигурацию. + # Сгенерированный dNpM: (в корпусе на этом URI встречаются d4p1, d5p1, d6p1 — имя префикса + # платформа выдаёт по порядку объявления) снимаем ТОЛЬКО у ссылочных типов, с точкой: + # сам по себе префикс многозначен — в формах d5p1:Chart, d5p1:TextDocument, + # d5p1:GeographicalSchema адресуют чужие пространства имён, и там он часть значения. if type_str.startswith('cfg:'): type_str = type_str[4:] - elif type_str.startswith('d5p1:') and '.' in type_str: - type_str = type_str[5:] + elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str): + type_str = type_str[type_str.index(':') + 1:] # Параметризованные типы: Number(15,2), Строка(100) m = re.match(r'^([^(]+)\((.+)\)$', type_str) if m: diff --git a/.claude/skills/meta-edit/scripts/meta-edit.ps1 b/.claude/skills/meta-edit/scripts/meta-edit.ps1 index eb7f473e..6093be77 100644 --- a/.claude/skills/meta-edit/scripts/meta-edit.ps1 +++ b/.claude/skills/meta-edit/scripts/meta-edit.ps1 @@ -1,4 +1,4 @@ -# meta-edit v1.33 — Edit existing 1C metadata object XML (+resolve_type_str: срезание префикса cfg:/d5p1:) +# meta-edit v1.34 — Edit existing 1C metadata object XML (+resolve_type_str: срезание префикса cfg:/d5p1:) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$DefinitionFile, @@ -463,14 +463,15 @@ function Resolve-TypeStr { # Прощающий ввод: ведущий префикс приходит копипастой из выгрузки. Без срезания он ломает # поиск в словаре — русское имя типа остаётся непереведённым, и платформа отвечает - # «Неизвестное имя типа». cfg: снимаем всегда (однозначно = текущая конфигурация), d5p1: — - # только у ССЫЛОЧНЫХ типов (с точкой): сам по себе префикс неоднозначен, в формах d5p1:Chart, - # d5p1:TextDocument, d5p1:GeographicalSchema и др. адресуют свои пространства имён, и там он - # часть канонического значения. + # «Неизвестное имя типа». cfg: снимаем всегда — он однозначно означает текущую конфигурацию. + # Сгенерированный dNpM: (в корпусе на этом URI встречаются d4p1, d5p1, d6p1 — имя префикса + # платформа выдаёт по порядку объявления) снимаем ТОЛЬКО у ссылочных типов, с точкой: + # сам по себе префикс многозначен — в формах d5p1:Chart, d5p1:TextDocument, + # d5p1:GeographicalSchema адресуют чужие пространства имён, и там он часть значения. if ($typeStr.StartsWith('cfg:')) { $typeStr = $typeStr.Substring(4) - } elseif ($typeStr.StartsWith('d5p1:') -and $typeStr.Contains('.')) { - $typeStr = $typeStr.Substring(5) + } elseif ($typeStr.Contains('.') -and $typeStr -match '^d\d+p\d+:') { + $typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1) } # Параметризованные типы: Number(15,2), Строка(100) diff --git a/.claude/skills/meta-edit/scripts/meta-edit.py b/.claude/skills/meta-edit/scripts/meta-edit.py index 58ca5933..9dd34205 100644 --- a/.claude/skills/meta-edit/scripts/meta-edit.py +++ b/.claude/skills/meta-edit/scripts/meta-edit.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# meta-edit v1.33 — Edit existing 1C metadata object XML (+resolve_type_str: срезание префикса cfg:/d5p1:) +# meta-edit v1.34 — Edit existing 1C metadata object XML (+resolve_type_str: срезание префикса cfg:/d5p1:) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse @@ -426,14 +426,15 @@ def resolve_type_str(type_str): return type_str # Прощающий ввод: ведущий префикс приходит копипастой из выгрузки. Без срезания он ломает # поиск в словаре — русское имя типа остаётся непереведённым, и платформа отвечает - # «Неизвестное имя типа». cfg: снимаем всегда (однозначно = текущая конфигурация), d5p1: — - # только у ССЫЛОЧНЫХ типов (с точкой): сам по себе префикс неоднозначен, в формах d5p1:Chart, - # d5p1:TextDocument, d5p1:GeographicalSchema и др. адресуют свои пространства имён, и там он - # часть канонического значения. + # «Неизвестное имя типа». cfg: снимаем всегда — он однозначно означает текущую конфигурацию. + # Сгенерированный dNpM: (в корпусе на этом URI встречаются d4p1, d5p1, d6p1 — имя префикса + # платформа выдаёт по порядку объявления) снимаем ТОЛЬКО у ссылочных типов, с точкой: + # сам по себе префикс многозначен — в формах d5p1:Chart, d5p1:TextDocument, + # d5p1:GeographicalSchema адресуют чужие пространства имён, и там он часть значения. if type_str.startswith('cfg:'): type_str = type_str[4:] - elif type_str.startswith('d5p1:') and '.' in type_str: - type_str = type_str[5:] + elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str): + type_str = type_str[type_str.index(':') + 1:] # Параметризованные типы: Number(15,2), Строка(100) m = re.match(r'^([^(]+)\((.+)\)$', type_str) if m: diff --git a/.claude/skills/skd-compile/scripts/skd-compile.ps1 b/.claude/skills/skd-compile/scripts/skd-compile.ps1 index 8cf5424d..29cb7adb 100644 --- a/.claude/skills/skd-compile/scripts/skd-compile.ps1 +++ b/.claude/skills/skd-compile/scripts/skd-compile.ps1 @@ -1,4 +1,4 @@ -# skd-compile v1.112 — Compile 1C DCS from JSON (+resolve_type_str: срезание префикса cfg:/d5p1:) +# skd-compile v1.113 — Compile 1C DCS from JSON (+resolve_type_str: срезание префикса cfg:/d5p1:) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills param( [string]$DefinitionFile, @@ -350,14 +350,15 @@ function Resolve-TypeStr { # Прощающий ввод: ведущий префикс приходит копипастой из выгрузки. Без срезания он ломает # поиск в словаре — русское имя типа остаётся непереведённым, и платформа отвечает - # «Неизвестное имя типа». cfg: снимаем всегда (однозначно = текущая конфигурация), d5p1: — - # только у ССЫЛОЧНЫХ типов (с точкой): сам по себе префикс неоднозначен, в формах d5p1:Chart, - # d5p1:TextDocument, d5p1:GeographicalSchema и др. адресуют свои пространства имён, и там он - # часть канонического значения. + # «Неизвестное имя типа». cfg: снимаем всегда — он однозначно означает текущую конфигурацию. + # Сгенерированный dNpM: (в корпусе на этом URI встречаются d4p1, d5p1, d6p1 — имя префикса + # платформа выдаёт по порядку объявления) снимаем ТОЛЬКО у ссылочных типов, с точкой: + # сам по себе префикс многозначен — в формах d5p1:Chart, d5p1:TextDocument, + # d5p1:GeographicalSchema адресуют чужие пространства имён, и там он часть значения. if ($typeStr.StartsWith('cfg:')) { $typeStr = $typeStr.Substring(4) - } elseif ($typeStr.StartsWith('d5p1:') -and $typeStr.Contains('.')) { - $typeStr = $typeStr.Substring(5) + } elseif ($typeStr.Contains('.') -and $typeStr -match '^d\d+p\d+:') { + $typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1) } # Параметризованные типы: Number(15,2), Строка(100) diff --git a/.claude/skills/skd-compile/scripts/skd-compile.py b/.claude/skills/skd-compile/scripts/skd-compile.py index 5143f8ce..d11e68db 100644 --- a/.claude/skills/skd-compile/scripts/skd-compile.py +++ b/.claude/skills/skd-compile/scripts/skd-compile.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -# skd-compile v1.112 — Compile 1C DCS from JSON (+resolve_type_str: срезание префикса cfg:/d5p1:) +# skd-compile v1.113 — Compile 1C DCS from JSON (+resolve_type_str: срезание префикса cfg:/d5p1:) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json @@ -285,14 +285,15 @@ def resolve_type_str(type_str): return type_str # Прощающий ввод: ведущий префикс приходит копипастой из выгрузки. Без срезания он ломает # поиск в словаре — русское имя типа остаётся непереведённым, и платформа отвечает - # «Неизвестное имя типа». cfg: снимаем всегда (однозначно = текущая конфигурация), d5p1: — - # только у ССЫЛОЧНЫХ типов (с точкой): сам по себе префикс неоднозначен, в формах d5p1:Chart, - # d5p1:TextDocument, d5p1:GeographicalSchema и др. адресуют свои пространства имён, и там он - # часть канонического значения. + # «Неизвестное имя типа». cfg: снимаем всегда — он однозначно означает текущую конфигурацию. + # Сгенерированный dNpM: (в корпусе на этом URI встречаются d4p1, d5p1, d6p1 — имя префикса + # платформа выдаёт по порядку объявления) снимаем ТОЛЬКО у ссылочных типов, с точкой: + # сам по себе префикс многозначен — в формах d5p1:Chart, d5p1:TextDocument, + # d5p1:GeographicalSchema адресуют чужие пространства имён, и там он часть значения. if type_str.startswith('cfg:'): type_str = type_str[4:] - elif type_str.startswith('d5p1:') and '.' in type_str: - type_str = type_str[5:] + elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str): + type_str = type_str[type_str.index(':') + 1:] # Параметризованные типы: Number(15,2), Строка(100) m = re.match(r'^([^(]+)\((.+)\)$', type_str) if m: diff --git a/.claude/skills/skd-edit/scripts/skd-edit.ps1 b/.claude/skills/skd-edit/scripts/skd-edit.ps1 index 772527a0..366629f9 100644 --- a/.claude/skills/skd-edit/scripts/skd-edit.ps1 +++ b/.claude/skills/skd-edit/scripts/skd-edit.ps1 @@ -1,4 +1,4 @@ -# skd-edit v1.33 — Atomic 1C DCS editor (+resolve_type_str: срезание префикса cfg:/d5p1:) +# skd-edit v1.34 — Atomic 1C DCS editor (+resolve_type_str: срезание префикса cfg:/d5p1:) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills # NB: парный .py собирает выражения автодат вне f-string ради совместимости с python 3.9 (PEP 701). param( @@ -249,14 +249,15 @@ function Resolve-TypeStr { # Прощающий ввод: ведущий префикс приходит копипастой из выгрузки. Без срезания он ломает # поиск в словаре — русское имя типа остаётся непереведённым, и платформа отвечает - # «Неизвестное имя типа». cfg: снимаем всегда (однозначно = текущая конфигурация), d5p1: — - # только у ССЫЛОЧНЫХ типов (с точкой): сам по себе префикс неоднозначен, в формах d5p1:Chart, - # d5p1:TextDocument, d5p1:GeographicalSchema и др. адресуют свои пространства имён, и там он - # часть канонического значения. + # «Неизвестное имя типа». cfg: снимаем всегда — он однозначно означает текущую конфигурацию. + # Сгенерированный dNpM: (в корпусе на этом URI встречаются d4p1, d5p1, d6p1 — имя префикса + # платформа выдаёт по порядку объявления) снимаем ТОЛЬКО у ссылочных типов, с точкой: + # сам по себе префикс многозначен — в формах d5p1:Chart, d5p1:TextDocument, + # d5p1:GeographicalSchema адресуют чужие пространства имён, и там он часть значения. if ($typeStr.StartsWith('cfg:')) { $typeStr = $typeStr.Substring(4) - } elseif ($typeStr.StartsWith('d5p1:') -and $typeStr.Contains('.')) { - $typeStr = $typeStr.Substring(5) + } elseif ($typeStr.Contains('.') -and $typeStr -match '^d\d+p\d+:') { + $typeStr = $typeStr.Substring($typeStr.IndexOf(':') + 1) } # Параметризованные типы: Number(15,2), Строка(100) diff --git a/.claude/skills/skd-edit/scripts/skd-edit.py b/.claude/skills/skd-edit/scripts/skd-edit.py index ebccec48..f686015c 100644 --- a/.claude/skills/skd-edit/scripts/skd-edit.py +++ b/.claude/skills/skd-edit/scripts/skd-edit.py @@ -1,4 +1,4 @@ -# skd-edit v1.33 — Atomic 1C DCS editor (Python port) (+resolve_type_str: срезание префикса cfg:/d5p1:) +# skd-edit v1.34 — Atomic 1C DCS editor (Python port) (+resolve_type_str: срезание префикса cfg:/d5p1:) # Source: https://github.com/Nikolay-Shirokov/cc-1c-skills import argparse import json @@ -346,14 +346,15 @@ def resolve_type_str(type_str): return type_str # Прощающий ввод: ведущий префикс приходит копипастой из выгрузки. Без срезания он ломает # поиск в словаре — русское имя типа остаётся непереведённым, и платформа отвечает - # «Неизвестное имя типа». cfg: снимаем всегда (однозначно = текущая конфигурация), d5p1: — - # только у ССЫЛОЧНЫХ типов (с точкой): сам по себе префикс неоднозначен, в формах d5p1:Chart, - # d5p1:TextDocument, d5p1:GeographicalSchema и др. адресуют свои пространства имён, и там он - # часть канонического значения. + # «Неизвестное имя типа». cfg: снимаем всегда — он однозначно означает текущую конфигурацию. + # Сгенерированный dNpM: (в корпусе на этом URI встречаются d4p1, d5p1, d6p1 — имя префикса + # платформа выдаёт по порядку объявления) снимаем ТОЛЬКО у ссылочных типов, с точкой: + # сам по себе префикс многозначен — в формах d5p1:Chart, d5p1:TextDocument, + # d5p1:GeographicalSchema адресуют чужие пространства имён, и там он часть значения. if type_str.startswith('cfg:'): type_str = type_str[4:] - elif type_str.startswith('d5p1:') and '.' in type_str: - type_str = type_str[5:] + elif '.' in type_str and re.match(r'^d\d+p\d+:', type_str): + type_str = type_str[type_str.index(':') + 1:] # Параметризованные типы: Number(15,2), Строка(100) m = re.match(r'^([^(]+)\((.+)\)$', type_str) if m: diff --git a/tests/skills/cases/meta-compile/snapshots/type-prefix-lenient/Catalogs/Товары.xml b/tests/skills/cases/meta-compile/snapshots/type-prefix-lenient/Catalogs/Товары.xml index 9974d7df..70ef3d18 100644 --- a/tests/skills/cases/meta-compile/snapshots/type-prefix-lenient/Catalogs/Товары.xml +++ b/tests/skills/cases/meta-compile/snapshots/type-prefix-lenient/Catalogs/Товары.xml @@ -208,6 +208,86 @@ + + СкладD4p1 + + + ru + Складd4p1 + + + + + cfg:CatalogRef.Склады + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + + + СкладD6p1 + + + ru + Складd6p1 + + + + + cfg:CatalogRef.Склады + + false + + + + false + + false + false + + + false + + DontCheck + Items + + + Auto + Auto + + + Auto + ForItem + DontIndex + Use + Use + + + СкладEng diff --git a/tests/skills/cases/meta-compile/type-prefix-lenient.json b/tests/skills/cases/meta-compile/type-prefix-lenient.json index c648e48a..1ee975e0 100644 --- a/tests/skills/cases/meta-compile/type-prefix-lenient.json +++ b/tests/skills/cases/meta-compile/type-prefix-lenient.json @@ -7,6 +7,8 @@ "СкладПлайн: СправочникСсылка.Склады", "СкладCfg: cfg:СправочникСсылка.Склады", "СкладD5p1: d5p1:СправочникСсылка.Склады", + "СкладD4p1: d4p1:СправочникСсылка.Склады", + "СкладD6p1: d6p1:СправочникСсылка.Склады", "СкладEng: cfg:CatalogRef.Склады" ] }, @@ -19,7 +21,13 @@ }, "fileNotContains": { "file": "Catalogs/Товары.xml", - "text": ["cfg:СправочникСсылка", "d5p1:СправочникСсылка", "cfg:cfg:"] + "text": [ + "cfg:СправочникСсылка", + "d5p1:СправочникСсылка", + "d4p1:СправочникСсылка", + "d6p1:СправочникСсылка", + "cfg:cfg:" + ] } } }