diff --git a/.claude/skills/cf-edit/reference.md b/.claude/skills/cf-edit/reference.md
index 27f21b10a..f3b78b6b3 100644
--- a/.claude/skills/cf-edit/reference.md
+++ b/.claude/skills/cf-edit/reference.md
@@ -23,7 +23,7 @@
| `SynchronousPlatformExtensionAndAddInCallUseMode` | `DontUse`, `Use`, `UseWithWarnings` |
| `InterfaceCompatibilityMode` | `Version8_2`, `Version8_2EnableTaxi`, `Taxi`, `TaxiEnableVersion8_2`, `TaxiEnableVersion8_5`, `Version8_5EnableTaxi`, `Version8_5` |
| `DatabaseTablespacesUseMode` | `DontUse`, `Use` |
-| `MainClientApplicationWindowMode` | `Normal`, `Fullscreen`, `Kiosk` |
+| `MainClientApplicationWindowMode` | `Normal`, `Workplace`, `FullscreenWorkplace`, `Kiosk`, `EmbeddedWorkplace` |
### Ref
`DefaultLanguage` — значение вида `Language.Русский`
diff --git a/.claude/skills/cf-init/scripts/cf-init.ps1 b/.claude/skills/cf-init/scripts/cf-init.ps1
index 4a1b8e98e..84b0ef571 100644
--- a/.claude/skills/cf-init/scripts/cf-init.ps1
+++ b/.claude/skills/cf-init/scripts/cf-init.ps1
@@ -1,4 +1,4 @@
-# cf-init v1.15 — Create empty 1C configuration scaffold (+write_xml_file/write_utf8_bom: общий эталон записи)
+# cf-init v1.16 — Create empty 1C configuration scaffold (+write_xml_file/write_utf8_bom: общий эталон записи)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -58,6 +58,26 @@ if ($CompatibilityMode -and $CompatibilityMode.ToLowerInvariant() -eq 'dontuse')
[Console]::Error.WriteLine("WARNING: CompatibilityMode 'DontUse' is not `"no restrictions`" — the platform stores it as Version8_3_8. For no compatibility restrictions use the target platform version (e.g. Version8_3_27 for 8.3.27).")
}
+# Режим совместимости не новее платформы, которая пишет эту версию формата. Такой конфигурации
+# не выпускает ни одна платформа, а загрузка платформой старше режима МОЛЧА понижает его до своей
+# версии (замерено: Version8_3_25 и Version8_3_27 на 8.3.24 → Version8_3_24). Лестница «платформа →
+# формат» — копия docs/1c-configuration-spec.md §7.1, сверяет tests/skills/check-format-versions.mjs.
+# Режим, которого нет в лестнице (8.3.28), не проверяется: замера нет.
+$platformFormatLadder = [ordered]@{
+ "8.3.20" = "2.13"; "8.3.21" = "2.14"; "8.3.22" = "2.15"; "8.3.23" = "2.16"; "8.3.24" = "2.17"
+ "8.3.25" = "2.18"; "8.3.26" = "2.19"; "8.3.27" = "2.20"; "8.5.1" = "2.21"
+}
+if ($CompatibilityMode -match '^Version(\d+)_(\d+)_(\d+)$') {
+ $compatPlatform = "$($Matches[1]).$($Matches[2]).$($Matches[3])"
+ if ($platformFormatLadder.Contains($compatPlatform)) {
+ $needFormat = $platformFormatLadder[$compatPlatform]
+ if ($formatRank -lt (Get-FormatRank $needFormat)) {
+ [Console]::Error.WriteLine("CompatibilityMode '$CompatibilityMode' needs platform $compatPlatform (format $needFormat or newer), but -FormatVersion is $FormatVersion — no platform writes such a configuration, and loading it into an older platform silently lowers the mode. Use -FormatVersion $needFormat or an older -CompatibilityMode.")
+ exit 1
+ }
+ }
+}
+
# --- Resolve output dir ---
if (-not [System.IO.Path]::IsPathRooted($OutputDir)) {
$OutputDir = Join-Path (Get-Location).Path $OutputDir
diff --git a/.claude/skills/cf-init/scripts/cf-init.py b/.claude/skills/cf-init/scripts/cf-init.py
index d5de6428e..c2e17cff2 100644
--- a/.claude/skills/cf-init/scripts/cf-init.py
+++ b/.claude/skills/cf-init/scripts/cf-init.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# cf-init v1.15 — Create empty 1C configuration scaffold (+write_xml_file/write_utf8_bom: общий эталон записи)
+# cf-init v1.16 — Create empty 1C configuration scaffold (+write_xml_file/write_utf8_bom: общий эталон записи)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
"""Generates minimal XML source files for a 1C configuration."""
import sys, os, argparse, re, uuid
@@ -97,6 +97,27 @@ def main():
if (args.CompatibilityMode or "").lower() == "dontuse":
print("WARNING: CompatibilityMode 'DontUse' is not \"no restrictions\" — the platform stores it as Version8_3_8. For no compatibility restrictions use the target platform version (e.g. Version8_3_27 for 8.3.27).", file=sys.stderr)
+ # Режим совместимости не новее платформы, которая пишет эту версию формата. Такой конфигурации
+ # не выпускает ни одна платформа, а загрузка платформой старше режима МОЛЧА понижает его до своей
+ # версии (замерено: Version8_3_25 и Version8_3_27 на 8.3.24 → Version8_3_24). Лестница «платформа →
+ # формат» — копия docs/1c-configuration-spec.md §7.1, сверяет tests/skills/check-format-versions.mjs.
+ # Режим, которого нет в лестнице (8.3.28), не проверяется: замера нет.
+ platform_format_ladder = {
+ "8.3.20": "2.13", "8.3.21": "2.14", "8.3.22": "2.15", "8.3.23": "2.16", "8.3.24": "2.17",
+ "8.3.25": "2.18", "8.3.26": "2.19", "8.3.27": "2.20", "8.5.1": "2.21",
+ }
+ # Регистронезависимо — как -match в PS-мастере
+ m = re.match(r'^Version(\d+)_(\d+)_(\d+)$', args.CompatibilityMode or "", re.IGNORECASE)
+ if m:
+ compat_platform = f"{m.group(1)}.{m.group(2)}.{m.group(3)}"
+ need_format = platform_format_ladder.get(compat_platform)
+ if need_format and format_rank_value < format_rank(need_format):
+ print(f"CompatibilityMode '{args.CompatibilityMode}' needs platform {compat_platform} (format {need_format} or newer), "
+ f"but -FormatVersion is {args.FormatVersion} — no platform writes such a configuration, and loading it into "
+ f"an older platform silently lowers the mode. Use -FormatVersion {need_format} or an older -CompatibilityMode.",
+ file=sys.stderr)
+ sys.exit(1)
+
name = args.Name
synonym = args.Synonym if args.Synonym else name
output_dir = args.OutputDir
diff --git a/.claude/skills/cf-validate/scripts/cf-validate.ps1 b/.claude/skills/cf-validate/scripts/cf-validate.ps1
index 58424cc76..90f8f4605 100644
--- a/.claude/skills/cf-validate/scripts/cf-validate.ps1
+++ b/.claude/skills/cf-validate/scripts/cf-validate.ps1
@@ -1,4 +1,4 @@
-# cf-validate v1.11 — Validate 1C configuration root structure
+# cf-validate v1.12 — Validate 1C configuration root structure
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -186,7 +186,8 @@ $validEnumValues = @{
"SynchronousPlatformExtensionAndAddInCallUseMode" = @("DontUse","Use","UseWithWarnings")
"InterfaceCompatibilityMode" = @("Version8_2","Version8_2EnableTaxi","Taxi","TaxiEnableVersion8_2","TaxiEnableVersion8_5","Version8_5EnableTaxi","Version8_5")
"DatabaseTablespacesUseMode" = @("DontUse","Use")
- "MainClientApplicationWindowMode" = @("Normal","Fullscreen","Kiosk")
+ # Проверено платформой 8.3.24 и 8.5.1: Fullscreen нет (ошибка XDTO), есть …Workplace и Kiosk
+ "MainClientApplicationWindowMode" = @("Normal","Workplace","FullscreenWorkplace","Kiosk","EmbeddedWorkplace")
"CompatibilityMode" = @("DontUse","Version8_1","Version8_2_13","Version8_2_16","Version8_3_1","Version8_3_2","Version8_3_3","Version8_3_4","Version8_3_5","Version8_3_6","Version8_3_7","Version8_3_8","Version8_3_9","Version8_3_10","Version8_3_11","Version8_3_12","Version8_3_13","Version8_3_14","Version8_3_15","Version8_3_16","Version8_3_17","Version8_3_18","Version8_3_19","Version8_3_20","Version8_3_21","Version8_3_22","Version8_3_23","Version8_3_24","Version8_3_25","Version8_3_26","Version8_3_27","Version8_3_28","Version8_5_1")
}
diff --git a/.claude/skills/cf-validate/scripts/cf-validate.py b/.claude/skills/cf-validate/scripts/cf-validate.py
index c734b040f..fa5403967 100644
--- a/.claude/skills/cf-validate/scripts/cf-validate.py
+++ b/.claude/skills/cf-validate/scripts/cf-validate.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# cf-validate v1.11 — Validate 1C configuration XML structure
+# cf-validate v1.12 — Validate 1C configuration XML structure
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
"""Validates Configuration.xml: root structure, InternalInfo, properties, ChildObjects, languages."""
import sys, os, argparse, re
@@ -119,7 +119,8 @@ VALID_ENUM_VALUES = {
'TaxiEnableVersion8_5', 'Version8_5EnableTaxi', 'Version8_5',
],
'DatabaseTablespacesUseMode': ['DontUse', 'Use'],
- 'MainClientApplicationWindowMode': ['Normal', 'Fullscreen', 'Kiosk'],
+ # Проверено платформой 8.3.24 и 8.5.1: Fullscreen нет (ошибка XDTO), есть …Workplace и Kiosk
+ 'MainClientApplicationWindowMode': ['Normal', 'Workplace', 'FullscreenWorkplace', 'Kiosk', 'EmbeddedWorkplace'],
'CompatibilityMode': [
'DontUse', 'Version8_1', 'Version8_2_13', 'Version8_2_16',
'Version8_3_1', 'Version8_3_2', 'Version8_3_3', 'Version8_3_4', 'Version8_3_5',
diff --git a/.claude/skills/epf-validate/scripts/epf-validate.ps1 b/.claude/skills/epf-validate/scripts/epf-validate.ps1
index f407ad830..cfae470c3 100644
--- a/.claude/skills/epf-validate/scripts/epf-validate.ps1
+++ b/.claude/skills/epf-validate/scripts/epf-validate.ps1
@@ -1,4 +1,4 @@
-# epf-validate v1.8 — Validate 1C external data processor / report structure
+# epf-validate v1.9 — Validate 1C external data processor / report structure
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
# Works for both EPF (ExternalDataProcessor) and ERF (ExternalReport) — auto-detects
[CmdletBinding(PositionalBinding=$false)]
@@ -162,7 +162,7 @@ $childTypeOrder = @{
}
$validPropertyValues = @{
- "FillChecking" = @("DontCheck","ShowError","ShowWarning")
+ "FillChecking" = @("DontCheck","ShowError")
"Indexing" = @("DontIndex","Index","IndexWithAdditionalOrder")
}
diff --git a/.claude/skills/epf-validate/scripts/epf-validate.py b/.claude/skills/epf-validate/scripts/epf-validate.py
index d5d2de458..51b046e08 100644
--- a/.claude/skills/epf-validate/scripts/epf-validate.py
+++ b/.claude/skills/epf-validate/scripts/epf-validate.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
-# epf-validate v1.8 — Validate 1C external data processor / report structure
+# epf-validate v1.9 — Validate 1C external data processor / report structure
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
# Works for both EPF (ExternalDataProcessor) and ERF (ExternalReport) — auto-detects
diff --git a/.claude/skills/meta-compile/reference/attributes.md b/.claude/skills/meta-compile/reference/attributes.md
index 05ae3710e..5e19fb3aa 100644
--- a/.claude/skills/meta-compile/reference/attributes.md
+++ b/.claude/skills/meta-compile/reference/attributes.md
@@ -17,7 +17,7 @@ shorthand — вместо строки задаётся объект:
| `synonym` | из имени | ML (строка или `{ru,en}`) |
| `tooltip` | пусто | ML |
| `comment` | пусто | строка |
-| `fillChecking` | `DontCheck` | `DontCheck` / `ShowError` / `ShowWarning` (то же, что флаг `req`) |
+| `fillChecking` | `DontCheck` | `DontCheck` / `ShowError` (то же, что флаг `req`) |
| `fullTextSearch` | `Use` | `Use` / `DontUse` |
| `fillFromFillingValue` | `false` | bool |
| `fillValue` | по типу (см. ниже) | значение заполнения |
@@ -121,7 +121,7 @@ shorthand — вместо строки задаётся объект:
| `synonym` | из имени | ML |
| `tooltip` | пусто | ML |
| `comment` | пусто | строка |
-| `fillChecking` | `DontCheck` | `DontCheck` / `ShowError` / `ShowWarning` (обязательность заполнения ТЧ) |
+| `fillChecking` | `DontCheck` | `DontCheck` / `ShowError` (обязательность заполнения ТЧ) |
| `use` | `ForItem` | `ForItem` / `ForFolder` / `ForFolderAndItem` (только Catalog / ChartOfCharacteristicTypes) |
| `attributes` | `[]` | колонки (shorthand или объектная форма реквизита) |
| `lineNumber` | — | кастомизация стандартного реквизита НомерСтроки (см. ниже) |
diff --git a/.claude/skills/meta-compile/reference/charts.md b/.claude/skills/meta-compile/reference/charts.md
index 393bac8cc..243942ceb 100644
--- a/.claude/skills/meta-compile/reference/charts.md
+++ b/.claude/skills/meta-compile/reference/charts.md
@@ -87,7 +87,7 @@
| `codeLength` | `5` | длина кода |
| `descriptionLength` | `100` | длина наименования |
| `codeAllowedLength` | `Variable` | `Variable` / `Fixed` |
-| `dependenceOnCalculationTypes` | `DontUse` | `DontUse` / `OnPeriod` / `OnActionPeriod` |
+| `dependenceOnCalculationTypes` | `DontUse` | `DontUse` / `OnActionPeriod` / `OnRegistrationPeriod` |
| `baseCalculationTypes` | `[]` | базовые виды расчёта (список ссылок `ChartOfCalculationTypes.X`) |
| `actionPeriodUse` | `false` | bool (использовать период действия) |
| `createOnInput` | `DontUse` | `Auto` / `Use` / `DontUse` |
diff --git a/.claude/skills/meta-compile/reference/document.md b/.claude/skills/meta-compile/reference/document.md
index 01e25a1df..4d73e3c57 100644
--- a/.claude/skills/meta-compile/reference/document.md
+++ b/.claude/skills/meta-compile/reference/document.md
@@ -22,7 +22,7 @@
| `posting` | `Allow` | `Allow` / `Deny` (проведение) |
| `realTimePosting` | `Deny` | `Allow` / `Deny` (оперативное проведение) |
| `registerRecordsDeletion` | `AutoDelete` | `AutoDelete` / `AutoDeleteOnUnpost` / `AutoDeleteOff` |
-| `registerRecordsWritingOnPost` | `WriteSelected` | `WriteModified` / `WriteSelected` / `WriteAll` |
+| `registerRecordsWritingOnPost` | `WriteSelected` | `WriteModified` / `WriteSelected` |
| `sequenceFilling` | `AutoFill` | заполнение последовательностей |
| `postInPrivilegedMode` | `true` | bool |
| `unpostInPrivilegedMode` | `true` | bool |
diff --git a/.claude/skills/meta-compile/reference/process.md b/.claude/skills/meta-compile/reference/process.md
index 351e1e626..04a7b196d 100644
--- a/.claude/skills/meta-compile/reference/process.md
+++ b/.claude/skills/meta-compile/reference/process.md
@@ -32,6 +32,7 @@
| `checkUnique` | `true` | bool |
| `autonumbering` | `true` | bool |
| `descriptionLength` | `150` | длина наименования |
+| `defaultPresentation` | `AsDescription` | `AsDescription` / `AsNumber` |
| `addressing` | пусто | ссылка на регистр сведений адресации `InformationRegister.X` |
| `mainAddressingAttribute` | пусто | основной реквизит адресации (имя реквизита адресации) |
| `currentPerformer` | пусто | реквизит текущего исполнителя |
diff --git a/.claude/skills/meta-compile/scripts/meta-compile.ps1 b/.claude/skills/meta-compile/scripts/meta-compile.ps1
index 9b3d9da6b..acea668d2 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.114 — Compile 1C metadata object from JSON
+# meta-compile v1.115 — Compile 1C metadata object from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -309,7 +309,7 @@ $script:enumValueAliases = @{
# DefaultPresentation
"ВВидеНаименования" = "AsDescription"; "ВВидеКода" = "AsCode"
# FillChecking
- "НеПроверять" = "DontCheck"; "Ошибка" = "ShowError"; "Предупреждение" = "ShowWarning"
+ "НеПроверять" = "DontCheck"; "Ошибка" = "ShowError"
# Indexing
"НеИндексировать" = "DontIndex"; "Индексировать" = "Index"
"ИндексироватьСДопУпорядочиванием" = "IndexWithAdditionalOrder"
@@ -320,13 +320,17 @@ $script:validEnumValues = @{
"RegisterType" = @("Balance","Turnovers")
"WriteMode" = @("Independent","RecorderSubordinate")
"InformationRegisterPeriodicity" = @("Nonperiodical","Second","Day","Month","Quarter","Year","RecorderPosition")
- "DependenceOnCalculationTypes" = @("DontUse","OnActionPeriod")
+ "DependenceOnCalculationTypes" = @("DontUse","OnActionPeriod","OnRegistrationPeriod")
# AutomaticAndManaged — только у внешнего источника данных и его таблиц: там режим может
# решаться на уровне таблицы, у прочих объектов такого значения нет.
"DataLockControlMode" = @("Automatic","Managed","AutomaticAndManaged")
"FullTextSearch" = @("Use","DontUse")
"DataHistory" = @("Use","DontUse")
"DefaultPresentation" = @("AsDescription","AsCode")
+ # Уточнение по виду объекта («Вид.Свойство») — проверяется раньше общего списка. AsNumber
+ # («в виде номера») есть только у задачи: у справочника и прочих платформа его отвергает
+ # («Неверное значение перечисления», 8.3.24 и 8.5.1).
+ "Task.DefaultPresentation" = @("AsDescription","AsNumber")
"Posting" = @("Allow","Deny")
"RealTimePosting" = @("Allow","Deny")
"EditType" = @("InDialog","InList","BothWays")
@@ -336,10 +340,10 @@ $script:validEnumValues = @{
"NumberType" = @("String","Number")
"NumberAllowedLength" = @("Variable","Fixed")
"RegisterRecordsDeletion" = @("AutoDelete","AutoDeleteOnUnpost","AutoDeleteOff")
- "RegisterRecordsWritingOnPost" = @("WriteModified","WriteSelected","WriteAll")
+ "RegisterRecordsWritingOnPost" = @("WriteModified","WriteSelected")
"ReturnValuesReuse" = @("DontUse","DuringRequest","DuringSession")
"ReuseSessions" = @("DontUse","Use","AutoUse")
- "FillChecking" = @("DontCheck","ShowError","ShowWarning")
+ "FillChecking" = @("DontCheck","ShowError")
"Indexing" = @("DontIndex","Index","IndexWithAdditionalOrder")
"SubordinationUse" = @("ToItems","ToFolders","ToFoldersAndItems")
"CodeSeries" = @("WholeCatalog","WithinSubordination","WithinOwnerSubordination","WholeCharacteristicKind","WholeChartOfAccounts")
@@ -398,8 +402,9 @@ function Normalize-EnumValue {
if ($script:enumValueAliases.ContainsKey($value)) {
return $script:enumValueAliases[$value]
}
- # 2. Case-insensitive match against valid values — silent
- $valid = $script:validEnumValues[$propName]
+ # 2. Case-insensitive match against valid values — silent. Список вида объекта — раньше общего.
+ $valid = $script:validEnumValues["$script:objType.$propName"]
+ if (-not $valid) { $valid = $script:validEnumValues[$propName] }
if ($valid) {
foreach ($v in $valid) {
if ($v -ieq $value) { return $v }
@@ -1294,8 +1299,10 @@ function Parse-AttributeShorthand {
tooltip = $val.tooltip
comment = if ($val.comment) { "$($val.comment)" } else { "" }
flags = @(if ($val.flags) { $val.flags } else { @() })
- fillChecking = $fc
- indexing = if ($val.indexing) { "$($val.indexing)" } else { "" }
+ # Значения перечислений — через список допустимых, как свойства объекта: иначе значение из DSL
+ # (ShowWarning, «Ошибка») уходило в XML как есть, и конфигурация не загружалась.
+ fillChecking = if ($fc) { Normalize-EnumValue "FillChecking" $fc } else { "" }
+ indexing = if ($val.indexing) { Normalize-EnumValue "Indexing" "$($val.indexing)" } else { "" }
multiLine = if ($val.multiLine -eq $true) { $true } else { $false }
choiceHistoryOnInput = if ($val.choiceHistoryOnInput) { "$($val.choiceHistoryOnInput)" } else { "" }
fullTextSearch = if ($val.fullTextSearch) { "$($val.fullTextSearch)" } else { "" }
@@ -1773,7 +1780,7 @@ function Emit-StandardAttributes {
if ($d) {
if ($null -ne $d.synonym) { $ov['Synonym'] = $d.synonym } # строка ИЛИ {ru,en}
if ($null -ne $d.tooltip) { $ov['ToolTip'] = $d.tooltip } # строка ИЛИ {ru,en}
- if ($d.fillChecking) { $ov['FillChecking'] = "$($d.fillChecking)" }
+ if ($d.fillChecking) { $ov['FillChecking'] = Normalize-EnumValue "FillChecking" "$($d.fillChecking)" }
if ($null -ne $d.fillFromFillingValue) { $ov['FillFromFillingValue'] = if ($d.fillFromFillingValue) { 'true' } else { 'false' } }
if ($d.fullTextSearch) { $ov['FullTextSearch'] = "$($d.fullTextSearch)" }
if ($d.dataHistory) { $ov['DataHistory'] = "$($d.dataHistory)" }
@@ -2486,7 +2493,7 @@ function Emit-TabularSection {
Emit-MLText "$indent`t`t" "Synonym" $tsSynonym
if ($tsComment) { X "$indent`t`t$(Esc-XmlText $tsComment)" } else { X "$indent`t`t" }
Emit-MLText "$indent`t`t" "ToolTip" $tsTooltip
- $tsFc = if ($tsFillChecking) { "$tsFillChecking" } else { "DontCheck" }
+ $tsFc = if ($tsFillChecking) { Normalize-EnumValue "FillChecking" "$tsFillChecking" } else { "DontCheck" }
X "$indent`t`t$tsFc"
# TS-блок стандартных реквизитов (LineNumber) эмитим ВСЕГДА, кроме подавления `lineNumber: ""` (дом-конвенция
# суппресса): ~6% ТЧ исторически опускают блок (правило не выводимо — Товары all-default его имеет, соседи нет).
diff --git a/.claude/skills/meta-compile/scripts/meta-compile.py b/.claude/skills/meta-compile/scripts/meta-compile.py
index 1357bd1d3..cd4a62e3b 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.114 — Compile 1C metadata object from JSON
+# meta-compile v1.115 — Compile 1C metadata object from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
@@ -527,7 +527,7 @@ enum_value_aliases = {
# DefaultPresentation
'ВВидеНаименования': 'AsDescription', 'ВВидеКода': 'AsCode',
# FillChecking
- 'НеПроверять': 'DontCheck', 'Ошибка': 'ShowError', 'Предупреждение': 'ShowWarning',
+ 'НеПроверять': 'DontCheck', 'Ошибка': 'ShowError',
# Indexing
'НеИндексировать': 'DontIndex', 'Индексировать': 'Index',
'ИндексироватьСДопУпорядочиванием': 'IndexWithAdditionalOrder',
@@ -542,13 +542,17 @@ valid_enum_values = {
'RegisterType': ['Balance', 'Turnovers'],
'WriteMode': ['Independent', 'RecorderSubordinate'],
'InformationRegisterPeriodicity': ['Nonperiodical', 'Second', 'Day', 'Month', 'Quarter', 'Year', 'RecorderPosition'],
- 'DependenceOnCalculationTypes': ['DontUse', 'OnActionPeriod'],
+ 'DependenceOnCalculationTypes': ['DontUse', 'OnActionPeriod', 'OnRegistrationPeriod'],
# AutomaticAndManaged — только у внешнего источника данных и его таблиц: там режим может
# решаться на уровне таблицы, у прочих объектов такого значения нет.
'DataLockControlMode': ['Automatic', 'Managed', 'AutomaticAndManaged'],
'FullTextSearch': ['Use', 'DontUse'],
'DataHistory': ['Use', 'DontUse'],
'DefaultPresentation': ['AsDescription', 'AsCode'],
+ # Уточнение по виду объекта («Вид.Свойство») — проверяется раньше общего списка. AsNumber
+ # («в виде номера») есть только у задачи: у справочника и прочих платформа его отвергает
+ # («Неверное значение перечисления», 8.3.24 и 8.5.1).
+ 'Task.DefaultPresentation': ['AsDescription', 'AsNumber'],
'Posting': ['Allow', 'Deny'],
'RealTimePosting': ['Allow', 'Deny'],
'EditType': ['InDialog', 'InList', 'BothWays'],
@@ -558,10 +562,10 @@ valid_enum_values = {
'NumberType': ['String', 'Number'],
'NumberAllowedLength': ['Variable', 'Fixed'],
'RegisterRecordsDeletion': ['AutoDelete', 'AutoDeleteOnUnpost', 'AutoDeleteOff'],
- 'RegisterRecordsWritingOnPost': ['WriteModified', 'WriteSelected', 'WriteAll'],
+ 'RegisterRecordsWritingOnPost': ['WriteModified', 'WriteSelected'],
'ReturnValuesReuse': ['DontUse', 'DuringRequest', 'DuringSession'],
'ReuseSessions': ['DontUse', 'Use', 'AutoUse'],
- 'FillChecking': ['DontCheck', 'ShowError', 'ShowWarning'],
+ 'FillChecking': ['DontCheck', 'ShowError'],
'Indexing': ['DontIndex', 'Index', 'IndexWithAdditionalOrder'],
'SubordinationUse': ['ToItems', 'ToFolders', 'ToFoldersAndItems'],
'CodeSeries': ['WholeCatalog', 'WithinSubordination', 'WithinOwnerSubordination', 'WholeCharacteristicKind', 'WholeChartOfAccounts'],
@@ -618,8 +622,8 @@ def normalize_enum_value(prop_name, value):
# 1. Check alias dictionary — silent auto-correct
if value in enum_value_aliases:
return enum_value_aliases[value]
- # 2. Case-insensitive match against valid values — silent
- valid = valid_enum_values.get(prop_name)
+ # 2. Case-insensitive match against valid values — silent. Список вида объекта — раньше общего.
+ valid = valid_enum_values.get(f"{obj_type}.{prop_name}") or valid_enum_values.get(prop_name)
if valid:
for v in valid:
if v.lower() == value.lower():
@@ -1394,8 +1398,10 @@ def parse_attribute_shorthand(val):
'comment': str(val['comment']) if val.get('comment') else '',
# Лоуэркейз как в строковом пути (стр.809): проверки флагов регистронезависимы (зеркало PS -contains).
'flags': [str(f).strip().lower() for f in val.get('flags', [])],
- 'fillChecking': fc,
- 'indexing': str(val['indexing']) if val.get('indexing') else '',
+ # Значения перечислений — через список допустимых, как свойства объекта: иначе значение из DSL
+ # (ShowWarning, «Ошибка») уходило в XML как есть, и конфигурация не загружалась.
+ 'fillChecking': normalize_enum_value('FillChecking', fc) if fc else '',
+ 'indexing': normalize_enum_value('Indexing', str(val['indexing'])) if val.get('indexing') else '',
'multiLine': True if val.get('multiLine') is True else False,
'choiceHistoryOnInput': str(val['choiceHistoryOnInput']) if val.get('choiceHistoryOnInput') else '',
'fullTextSearch': str(val['fullTextSearch']) if val.get('fullTextSearch') else '',
@@ -1884,7 +1890,7 @@ def emit_standard_attributes(indent, object_type):
if d.get('tooltip') is not None:
ov['ToolTip'] = d['tooltip'] # строка ИЛИ {ru,en}
if d.get('fillChecking'):
- ov['FillChecking'] = str(d['fillChecking'])
+ ov['FillChecking'] = normalize_enum_value('FillChecking', str(d['fillChecking']))
if d.get('fillFromFillingValue') is not None:
ov['FillFromFillingValue'] = 'true' if d['fillFromFillingValue'] else 'false'
if d.get('fullTextSearch'):
@@ -2631,7 +2637,8 @@ def emit_tabular_section(indent, ts_name, columns, object_type, object_name, ts_
else:
X(f'{indent}\t\t')
emit_mltext(f'{indent}\t\t', 'ToolTip', ts_tooltip)
- X(f'{indent}\t\t{ts_fill_checking if ts_fill_checking else "DontCheck"}')
+ ts_fc = normalize_enum_value('FillChecking', str(ts_fill_checking)) if ts_fill_checking else 'DontCheck'
+ X(f'{indent}\t\t{ts_fc}')
# TS-блок стандартных реквизитов (LineNumber) эмитим ВСЕГДА, кроме подавления `lineNumber: ""` (дом-конвенция
# суппресса): ~6% ТЧ исторически опускают блок (правило не выводимо — Товары all-default его имеет, соседи нет).
if not (isinstance(ts_line_number, str) and ts_line_number == ''):
diff --git a/.claude/skills/meta-edit/scripts/meta-edit.ps1 b/.claude/skills/meta-edit/scripts/meta-edit.ps1
index bd1f1deff..21fc5609b 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.59 — Edit existing 1C metadata object XML
+# meta-edit v1.60 — Edit existing 1C metadata object XML
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -129,7 +129,7 @@ $script:enumValueAliases = @{
"Разрешить" = "Allow"; "Запретить" = "Deny"
"ВДиалоге" = "InDialog"; "ВСписке" = "InList"; "ОбаСпособа" = "BothWays"
"ВВидеНаименования" = "AsDescription"; "ВВидеКода" = "AsCode"
- "НеПроверять" = "DontCheck"; "Ошибка" = "ShowError"; "Предупреждение" = "ShowWarning"
+ "НеПроверять" = "DontCheck"; "Ошибка" = "ShowError"
"НеИндексировать" = "DontIndex"; "Индексировать" = "Index"
"ИндексироватьСДопУпорядочиванием" = "IndexWithAdditionalOrder"
}
@@ -138,12 +138,16 @@ $script:validEnumValues = @{
"RegisterType" = @("Balance","Turnovers")
"WriteMode" = @("Independent","RecorderSubordinate")
"InformationRegisterPeriodicity" = @("Nonperiodical","Second","Day","Month","Quarter","Year","RecorderPosition")
- "DependenceOnCalculationTypes" = @("DontUse","OnActionPeriod")
+ "DependenceOnCalculationTypes" = @("DontUse","OnActionPeriod","OnRegistrationPeriod")
# AutomaticAndManaged — только у внешнего источника данных и его таблиц.
"DataLockControlMode" = @("Automatic","Managed","AutomaticAndManaged")
"FullTextSearch" = @("Use","DontUse")
"DataHistory" = @("Use","DontUse")
"DefaultPresentation" = @("AsDescription","AsCode")
+ # Уточнение по виду объекта («Вид.Свойство») — проверяется раньше общего списка. AsNumber
+ # («в виде номера») есть только у задачи: у справочника и прочих платформа его отвергает
+ # («Неверное значение перечисления», 8.3.24 и 8.5.1).
+ "Task.DefaultPresentation" = @("AsDescription","AsNumber")
"Posting" = @("Allow","Deny")
"RealTimePosting" = @("Allow","Deny")
"EditType" = @("InDialog","InList","BothWays")
@@ -153,10 +157,10 @@ $script:validEnumValues = @{
"NumberType" = @("String","Number")
"NumberAllowedLength" = @("Variable","Fixed")
"RegisterRecordsDeletion" = @("AutoDelete","AutoDeleteOnUnpost","AutoDeleteOff")
- "RegisterRecordsWritingOnPost" = @("WriteModified","WriteSelected","WriteAll")
+ "RegisterRecordsWritingOnPost" = @("WriteModified","WriteSelected")
"ReturnValuesReuse" = @("DontUse","DuringRequest","DuringSession")
"ReuseSessions" = @("DontUse","Use","AutoUse")
- "FillChecking" = @("DontCheck","ShowError","ShowWarning")
+ "FillChecking" = @("DontCheck","ShowError")
"Indexing" = @("DontIndex","Index","IndexWithAdditionalOrder")
}
@@ -166,8 +170,9 @@ function Normalize-EnumValue {
if ($script:enumValueAliases.ContainsKey($value)) {
return $script:enumValueAliases[$value]
}
- # 2. Case-insensitive match against valid values — silent
- $valid = $script:validEnumValues[$propName]
+ # 2. Case-insensitive match against valid values — silent. Список вида объекта — раньше общего.
+ $valid = $script:validEnumValues["$script:objType.$propName"]
+ if (-not $valid) { $valid = $script:validEnumValues[$propName] }
if ($valid) {
foreach ($v in $valid) {
if ($v -ieq $value) { return $v }
diff --git a/.claude/skills/meta-edit/scripts/meta-edit.py b/.claude/skills/meta-edit/scripts/meta-edit.py
index e342cc285..0b722b330 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.59 — Edit existing 1C metadata object XML
+# meta-edit v1.60 — Edit existing 1C metadata object XML
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
@@ -424,7 +424,7 @@ enum_value_aliases = {
# DefaultPresentation
'ВВидеНаименования': 'AsDescription', 'ВВидеКода': 'AsCode',
# FillChecking
- 'НеПроверять': 'DontCheck', 'Ошибка': 'ShowError', 'Предупреждение': 'ShowWarning',
+ 'НеПроверять': 'DontCheck', 'Ошибка': 'ShowError',
# Indexing
'НеИндексировать': 'DontIndex', 'Индексировать': 'Index',
'ИндексироватьСДопУпорядочиванием': 'IndexWithAdditionalOrder',
@@ -437,12 +437,16 @@ valid_enum_values = {
'RegisterType': ['Balance', 'Turnovers'],
'WriteMode': ['Independent', 'RecorderSubordinate'],
'InformationRegisterPeriodicity': ['Nonperiodical', 'Second', 'Day', 'Month', 'Quarter', 'Year', 'RecorderPosition'],
- 'DependenceOnCalculationTypes': ['DontUse', 'OnActionPeriod'],
+ 'DependenceOnCalculationTypes': ['DontUse', 'OnActionPeriod', 'OnRegistrationPeriod'],
# AutomaticAndManaged — только у внешнего источника данных и его таблиц.
'DataLockControlMode': ['Automatic', 'Managed', 'AutomaticAndManaged'],
'FullTextSearch': ['Use', 'DontUse'],
'DataHistory': ['Use', 'DontUse'],
'DefaultPresentation': ['AsDescription', 'AsCode'],
+ # Уточнение по виду объекта («Вид.Свойство») — проверяется раньше общего списка. AsNumber
+ # («в виде номера») есть только у задачи: у справочника и прочих платформа его отвергает
+ # («Неверное значение перечисления», 8.3.24 и 8.5.1).
+ 'Task.DefaultPresentation': ['AsDescription', 'AsNumber'],
'Posting': ['Allow', 'Deny'],
'RealTimePosting': ['Allow', 'Deny'],
'EditType': ['InDialog', 'InList', 'BothWays'],
@@ -452,10 +456,10 @@ valid_enum_values = {
'NumberType': ['String', 'Number'],
'NumberAllowedLength': ['Variable', 'Fixed'],
'RegisterRecordsDeletion': ['AutoDelete', 'AutoDeleteOnUnpost', 'AutoDeleteOff'],
- 'RegisterRecordsWritingOnPost': ['WriteModified', 'WriteSelected', 'WriteAll'],
+ 'RegisterRecordsWritingOnPost': ['WriteModified', 'WriteSelected'],
'ReturnValuesReuse': ['DontUse', 'DuringRequest', 'DuringSession'],
'ReuseSessions': ['DontUse', 'Use', 'AutoUse'],
- 'FillChecking': ['DontCheck', 'ShowError', 'ShowWarning'],
+ 'FillChecking': ['DontCheck', 'ShowError'],
'Indexing': ['DontIndex', 'Index', 'IndexWithAdditionalOrder'],
}
@@ -464,8 +468,8 @@ def normalize_enum_value(prop_name, value):
# 1. Check alias dictionary — silent auto-correct
if value in enum_value_aliases:
return enum_value_aliases[value]
- # 2. Case-insensitive match against valid values — silent
- valid = valid_enum_values.get(prop_name)
+ # 2. Case-insensitive match against valid values — silent. Список вида объекта — раньше общего.
+ valid = valid_enum_values.get(f"{obj_type}.{prop_name}") or valid_enum_values.get(prop_name)
if valid:
for v in valid:
if v.lower() == value.lower():
diff --git a/.claude/skills/meta-validate/scripts/meta-validate.ps1 b/.claude/skills/meta-validate/scripts/meta-validate.ps1
index 42a035254..913936dd8 100644
--- a/.claude/skills/meta-validate/scripts/meta-validate.ps1
+++ b/.claude/skills/meta-validate/scripts/meta-validate.ps1
@@ -1,4 +1,4 @@
-# meta-validate v1.32 — Validate 1C metadata object structure
+# meta-validate v1.33 — Validate 1C metadata object structure
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
[CmdletBinding(PositionalBinding=$false)]
param(
@@ -361,11 +361,14 @@ $validPropertyValues = @{
"Posting" = @("Allow","Deny")
"RealTimePosting" = @("Allow","Deny")
"RegisterRecordsDeletion" = @("AutoDelete","AutoDeleteOnUnpost","AutoDeleteOff")
- "RegisterRecordsWritingOnPost" = @("WriteModified","WriteSelected","WriteAll")
+ "RegisterRecordsWritingOnPost" = @("WriteModified","WriteSelected")
# AutomaticAndManaged — только у внешнего источника данных и его таблиц.
"DataLockControlMode" = @("Automatic","Managed","AutomaticAndManaged")
"FullTextSearch" = @("Use","DontUse")
"DefaultPresentation" = @("AsDescription","AsCode")
+ # Уточнение по виду объекта («Вид.Свойство») — раньше общего списка. AsNumber («в виде номера»)
+ # есть только у задачи: у справочника и прочих платформа его отвергает (8.3.24 и 8.5.1).
+ "Task.DefaultPresentation" = @("AsDescription","AsNumber")
"HierarchyType" = @("HierarchyFoldersAndItems","HierarchyOfItems")
"EditType" = @("InDialog","InList","BothWays")
"WriteMode" = @("Independent","RecorderSubordinate")
@@ -373,10 +376,10 @@ $validPropertyValues = @{
"RegisterType" = @("Balance","Turnovers")
"ReturnValuesReuse" = @("DontUse","DuringRequest","DuringSession")
"ReuseSessions" = @("DontUse","Use","AutoUse")
- "FillChecking" = @("DontCheck","ShowError","ShowWarning")
+ "FillChecking" = @("DontCheck","ShowError")
"Indexing" = @("DontIndex","Index","IndexWithAdditionalOrder")
"DataHistory" = @("Use","DontUse")
- "DependenceOnCalculationTypes" = @("DontUse","OnActionPeriod")
+ "DependenceOnCalculationTypes" = @("DontUse","OnActionPeriod","OnRegistrationPeriod")
}
# Properties forbidden per type (would cause LoadConfigFromFiles error)
@@ -739,11 +742,14 @@ if ($propsNode) {
$check4Ok = $true
foreach ($propName in $validPropertyValues.Keys) {
+ if ($propName.Contains('.')) { continue } # «Вид.Свойство» — уточнение, не отдельное свойство
$propNode = $propsNode.SelectSingleNode("md:$propName", $ns)
if ($propNode -and $propNode.InnerText) {
$val = $propNode.InnerText
- $allowed = $validPropertyValues[$propName]
- if ($allowed -notcontains $val) {
+ $allowed = $validPropertyValues["$mdType.$propName"]
+ if (-not $allowed) { $allowed = $validPropertyValues[$propName] }
+ # Регистр значим: платформа читает перечисление по точному имени (-notcontains его не различал)
+ if ($allowed -cnotcontains $val) {
Report-Error "4. Property '$propName' has invalid value '$val' (allowed: $($allowed -join ', '))"
$check4Ok = $false
}
diff --git a/.claude/skills/meta-validate/scripts/meta-validate.py b/.claude/skills/meta-validate/scripts/meta-validate.py
index 98d143068..ad66703c1 100644
--- a/.claude/skills/meta-validate/scripts/meta-validate.py
+++ b/.claude/skills/meta-validate/scripts/meta-validate.py
@@ -1,4 +1,4 @@
-# meta-validate v1.32 — Validate 1C metadata object structure (Python port)
+# meta-validate v1.33 — Validate 1C metadata object structure (Python port)
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import os
@@ -416,11 +416,14 @@ valid_property_values = {
"Posting": ["Allow", "Deny"],
"RealTimePosting": ["Allow", "Deny"],
"RegisterRecordsDeletion": ["AutoDelete", "AutoDeleteOnUnpost", "AutoDeleteOff"],
- "RegisterRecordsWritingOnPost": ["WriteModified", "WriteSelected", "WriteAll"],
+ "RegisterRecordsWritingOnPost": ["WriteModified", "WriteSelected"],
# AutomaticAndManaged — только у внешнего источника данных и его таблиц.
"DataLockControlMode": ["Automatic", "Managed", "AutomaticAndManaged"],
"FullTextSearch": ["Use", "DontUse"],
"DefaultPresentation": ["AsDescription", "AsCode"],
+ # Уточнение по виду объекта («Вид.Свойство») — раньше общего списка. AsNumber («в виде номера»)
+ # есть только у задачи: у справочника и прочих платформа его отвергает (8.3.24 и 8.5.1).
+ "Task.DefaultPresentation": ["AsDescription", "AsNumber"],
"HierarchyType": ["HierarchyFoldersAndItems", "HierarchyOfItems"],
"EditType": ["InDialog", "InList", "BothWays"],
"WriteMode": ["Independent", "RecorderSubordinate"],
@@ -428,10 +431,10 @@ valid_property_values = {
"RegisterType": ["Balance", "Turnovers"],
"ReturnValuesReuse": ["DontUse", "DuringRequest", "DuringSession"],
"ReuseSessions": ["DontUse", "Use", "AutoUse"],
- "FillChecking": ["DontCheck", "ShowError", "ShowWarning"],
+ "FillChecking": ["DontCheck", "ShowError"],
"Indexing": ["DontIndex", "Index", "IndexWithAdditionalOrder"],
"DataHistory": ["Use", "DontUse"],
- "DependenceOnCalculationTypes": ["DontUse", "OnActionPeriod"],
+ "DependenceOnCalculationTypes": ["DontUse", "OnActionPeriod", "OnRegistrationPeriod"],
}
# Properties forbidden per type (would cause LoadConfigFromFiles error)
@@ -802,9 +805,12 @@ if props_node is not None:
check4_ok = True
for prop_name, allowed in valid_property_values.items():
+ if "." in prop_name: # «Вид.Свойство» — уточнение, не отдельное свойство
+ continue
prop_node = find(props_node, f"md:{prop_name}")
if prop_node is not None and inner_text(prop_node):
val = inner_text(prop_node)
+ allowed = valid_property_values.get(f"{md_type}.{prop_name}") or allowed
if val not in allowed:
report_error(f"4. Property '{prop_name}' has invalid value '{val}' (allowed: {', '.join(allowed)})")
check4_ok = False
diff --git a/docs/1c-config-objects-spec.md b/docs/1c-config-objects-spec.md
index 235d3acc9..c32e7c632 100644
--- a/docs/1c-config-objects-spec.md
+++ b/docs/1c-config-objects-spec.md
@@ -558,7 +558,7 @@ Ext/ # Расширение конфигураци
|---|---|---|
| `name` | атрибут | Имя стандартного реквизита |
| `LinkByType` | элемент | Связь по типу (обычно пустой) |
-| `FillChecking` | enum | `DontCheck` \| `ShowWarning` \| `ShowError` |
+| `FillChecking` | enum | `DontCheck` \| `ShowError` |
| `MultiLine` | boolean | Многострочное поле |
| `FillFromFillingValue` | boolean | Заполнять из значения заполнения |
| `CreateOnInput` | enum | `Auto` \| `Use` \| `DontUse` |
@@ -848,7 +848,7 @@ XML-элемент: ``. Категория InternalInfo: CatalogObject,
150
true
true
-AsDescription
+AsDescription
```
**Владелец:**
@@ -924,7 +924,7 @@ XML-элемент: ``. Категория InternalInfo: DocumentObjec
AccountingRegister.Хозрасчетный
AutoDeleteOnUnpost
-WriteSelected
+WriteSelected
AutoFill
```
diff --git a/docs/1c-configuration-spec.md b/docs/1c-configuration-spec.md
index 3e1f7263f..7f7603948 100644
--- a/docs/1c-configuration-spec.md
+++ b/docs/1c-configuration-spec.md
@@ -103,7 +103,7 @@ ClassId — фиксированные идентификаторы классо
| `SynchronousPlatformExtensionAndAddInCallUseMode` | enum | Синхр. вызовы (`DontUse` / `Use`) |
| `InterfaceCompatibilityMode` | enum | Совместимость интерфейса (`Taxi` / `TaxiEnableVersion8_2`) |
| `DatabaseTablespacesUseMode` | enum | Табличные пространства (`DontUse` / `Use`) |
-| `MainClientApplicationWindowMode` | enum | Режим окна (`Normal` / `Fullscreen` / `Kiosk`) |
+| `MainClientApplicationWindowMode` | enum | Режим окна (`Normal` / `Workplace` / `FullscreenWorkplace` / `Kiosk` / `EmbeddedWorkplace`) |
#### Назначение и использование
diff --git a/docs/meta-dsl-spec.md b/docs/meta-dsl-spec.md
index f6e1afc12..c4197ee8a 100644
--- a/docs/meta-dsl-spec.md
+++ b/docs/meta-dsl-spec.md
@@ -217,7 +217,7 @@ JSON DSL для описания объектов метаданных конф
|------|-----|-----------|----------|
| `synonym` / `tooltip` | Synonym / ToolTip | авто / пусто | ML (§4.4) |
| `comment` | Comment | пусто | строка |
-| `fillChecking` | FillChecking | DontCheck | DontCheck/ShowError/ShowWarning. Синоним `fillCheck` (из формы; `true`→ShowError). Флаг `req`→ShowError |
+| `fillChecking` | FillChecking | DontCheck | DontCheck/ShowError. Синоним `fillCheck` (из формы; `true`→ShowError). Флаг `req`→ShowError |
| `fullTextSearch` | FullTextSearch | Use | Use/DontUse |
| `fillFromFillingValue` | FillFromFillingValue | false | bool |
| `fillValue` | FillValue | по типу (см. ниже) | значение заполнения — bool/число/строка/дата/DTR-путь; `null` → nil |
@@ -360,7 +360,7 @@ JSON-**строка** → `xsi:type="xs:string"` (напр. год `"2000"`, к
}
```
-Свойства объектной формы ТЧ: `synonym` (ML; нет ключа → авто из имени), `tooltip` (ML), `comment` (строка), `fillChecking` (`DontCheck`|`ShowError`|`ShowWarning`), `use` (`ForItem`|`ForFolder`|`ForFolderAndItem`, только Catalog/ПВХ; omit при дефолте `ForItem`), `attributes` (колонки; синоним `columns`), `lineNumber` (кастомизация стандартного реквизита НомерСтроки, см. ниже), `lineNumberLength` (разрядность номера строки, см. §5.2).
+Свойства объектной формы ТЧ: `synonym` (ML; нет ключа → авто из имени), `tooltip` (ML), `comment` (строка), `fillChecking` (`DontCheck`|`ShowError`), `use` (`ForItem`|`ForFolder`|`ForFolderAndItem`, только Catalog/ПВХ; omit при дефолте `ForItem`), `attributes` (колонки; синоним `columns`), `lineNumber` (кастомизация стандартного реквизита НомерСтроки, см. ниже), `lineNumberLength` (разрядность номера строки, см. §5.2).
Для Catalog/ChartOfCharacteristicTypes в Properties ТЧ пишется `