fix(skd-compile): всегда эмитить useRestriction для параметра

Платформа эмитит <useRestriction>true|false</useRestriction> у каждого
параметра безусловно. Раньше compile эмитил только если =true, что
приводило к LOST <useRestriction>false</useRestriction> в roundtrip.

Эффект на sample30: −84 строки diff.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-05-22 19:27:36 +03:00
parent 77fc0cee2f
commit 32e06cbc56
13 changed files with 52 additions and 9 deletions
@@ -1,4 +1,4 @@
# skd-compile v1.49 — Compile 1C DCS from JSON
# skd-compile v1.50 — Compile 1C DCS from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
param(
[string]$DefinitionFile,
@@ -1257,10 +1257,11 @@ function Emit-SingleParam {
$parsed.useRestriction = $true
}
# UseRestriction
if ($parsed.useRestriction -eq $true -or ($p -isnot [string] -and $p.useRestriction -eq $true)) {
X "`t`t<useRestriction>true</useRestriction>"
}
# UseRestriction — платформа всегда эмитит этот тег у параметра (true/false)
$urEmit = $false
if ($parsed.useRestriction -eq $true) { $urEmit = $true }
elseif ($p -isnot [string] -and $p.useRestriction -eq $true) { $urEmit = $true }
X ("`t`t<useRestriction>" + $(if ($urEmit) { 'true' } else { 'false' }) + "</useRestriction>")
# Expression
if ($parsed.expression) {
@@ -1,5 +1,5 @@
#!/usr/bin/env python3
# skd-compile v1.49 — Compile 1C DCS from JSON
# skd-compile v1.50 — Compile 1C DCS from JSON
# Source: https://github.com/Nikolay-Shirokov/cc-1c-skills
import argparse
import json
@@ -1078,9 +1078,12 @@ def emit_single_param(lines, p, parsed):
parsed['availableAsField'] = False
parsed['useRestriction'] = True
# UseRestriction
if parsed.get('useRestriction') is True or (p is not None and not isinstance(p, str) and p.get('useRestriction') is True):
lines.append('\t\t<useRestriction>true</useRestriction>')
# UseRestriction — платформа всегда эмитит этот тег у параметра (true/false)
ur_emit = (
parsed.get('useRestriction') is True
or (p is not None and not isinstance(p, str) and p.get('useRestriction') is True)
)
lines.append(f'\t\t<useRestriction>{"true" if ur_emit else "false"}</useRestriction>')
# Expression
if parsed.get('expression'):
@@ -38,6 +38,7 @@
<v8:startDate>0001-01-01T00:00:00</v8:startDate>
<v8:endDate>0001-01-01T00:00:00</v8:endDate>
</value>
<useRestriction>false</useRestriction>
<denyIncompleteValues>true</denyIncompleteValues>
<use>Always</use>
</parameter>
@@ -87,6 +88,7 @@
<v8:startDate>0001-01-01T00:00:00</v8:startDate>
<v8:endDate>0001-01-01T00:00:00</v8:endDate>
</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>Флаг</name>
@@ -94,6 +96,7 @@
<v8:Type>xs:boolean</v8:Type>
</valueType>
<value xsi:type="xs:boolean">true</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>Сумма</name>
@@ -106,6 +109,7 @@
</v8:NumberQualifiers>
</valueType>
<value xsi:type="xs:decimal">0</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>Ставка</name>
@@ -118,6 +122,7 @@
</v8:NumberQualifiers>
</valueType>
<value xsi:type="xs:decimal">13.5</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>Метка</name>
@@ -129,6 +134,7 @@
</v8:StringQualifiers>
</valueType>
<value xsi:type="xs:string">ТестовоеЗначение</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>ПустаяСтрока</name>
@@ -140,6 +146,7 @@
</v8:StringQualifiers>
</valueType>
<value xsi:type="xs:string"/>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>Валюта</name>
@@ -147,6 +154,7 @@
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.Валюты</v8:Type>
</valueType>
<value xsi:type="dcscor:DesignTimeValue">Справочник.Валюты.EmptyRef</value>
<useRestriction>false</useRestriction>
</parameter>
<settingsVariant>
<dcsset:name>Основной</dcsset:name>
@@ -93,6 +93,7 @@
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:EnumRef.Округления</v8:Type>
</valueType>
<value xsi:type="dcscor:DesignTimeValue">Перечисление.Округления.Окр1_00</value>
<useRestriction>false</useRestriction>
<availableValue>
<value xsi:type="dcscor:DesignTimeValue">Перечисление.Округления.Окр1_00</value>
<presentation xsi:type="v8:LocalStringType">
@@ -123,6 +123,7 @@
</v8:NumberQualifiers>
</valueType>
<value xsi:type="xs:decimal">0</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>ПараметрЦелое</name>
@@ -135,6 +136,7 @@
</v8:NumberQualifiers>
</valueType>
<value xsi:type="xs:decimal">0</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>ПараметрКоличество</name>
@@ -147,6 +149,7 @@
</v8:NumberQualifiers>
</valueType>
<value xsi:type="xs:decimal">0</value>
<useRestriction>false</useRestriction>
</parameter>
<settingsVariant>
<dcsset:name>Основной</dcsset:name>
@@ -31,6 +31,7 @@
<parameter>
<name>Параметр1</name>
<value xsi:nil="true"/>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>Параметр2</name>
@@ -42,12 +43,14 @@
</v8:StringQualifiers>
</valueType>
<value xsi:type="xs:string"/>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>ПараметрСписок</name>
<valueType>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:EnumRef.СтатусТеста</v8:Type>
</valueType>
<useRestriction>false</useRestriction>
<valueListAllowed>true</valueListAllowed>
</parameter>
<parameter>
@@ -56,6 +59,7 @@
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.ПлоскийПростой</v8:Type>
</valueType>
<value xsi:nil="true"/>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>ПараметрДата</name>
@@ -66,6 +70,7 @@
</v8:DateQualifiers>
</valueType>
<value xsi:type="xs:dateTime">0001-01-01T00:00:00</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>ПараметрЧисло</name>
@@ -78,6 +83,7 @@
</v8:NumberQualifiers>
</valueType>
<value xsi:type="xs:decimal">0</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>ПараметрБулево</name>
@@ -85,6 +91,7 @@
<v8:Type>xs:boolean</v8:Type>
</valueType>
<value xsi:type="xs:boolean">false</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>ПараметрСтандартныйПериод</name>
@@ -96,10 +103,12 @@
<v8:startDate>0001-01-01T00:00:00</v8:startDate>
<v8:endDate>0001-01-01T00:00:00</v8:endDate>
</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>ПараметрТипНеЗадан</name>
<value xsi:nil="true"/>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>ПараметрСписокСтрок</name>
@@ -110,6 +119,7 @@
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</valueType>
<useRestriction>false</useRestriction>
<valueListAllowed>true</valueListAllowed>
</parameter>
<parameter>
@@ -121,6 +131,7 @@
</v8:DateQualifiers>
</valueType>
<value xsi:type="xs:dateTime">0001-01-01T12:30:00</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>ПараметрВремяПусто</name>
@@ -131,6 +142,7 @@
</v8:DateQualifiers>
</valueType>
<value xsi:type="xs:dateTime">0001-01-01T00:00:00</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>ПараметрСтрокаФиксСЗначением</name>
@@ -142,6 +154,7 @@
</v8:StringQualifiers>
</valueType>
<value xsi:type="xs:string">АБВ</value>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>ПараметрСтрокаФиксПусто</name>
@@ -153,6 +166,7 @@
</v8:StringQualifiers>
</valueType>
<value xsi:type="xs:string"/>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>СоставнойТип</name>
@@ -165,6 +179,7 @@
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.ПлоскийПростой</v8:Type>
</valueType>
<value xsi:nil="true"/>
<useRestriction>false</useRestriction>
</parameter>
<settingsVariant>
<dcsset:name>Основной</dcsset:name>
@@ -68,6 +68,7 @@
<v8:startDate>0001-01-01T00:00:00</v8:startDate>
<v8:endDate>0001-01-01T00:00:00</v8:endDate>
</value>
<useRestriction>false</useRestriction>
<denyIncompleteValues>true</denyIncompleteValues>
<use>Always</use>
</parameter>
@@ -76,6 +76,7 @@
<v8:startDate>0001-01-01T00:00:00</v8:startDate>
<v8:endDate>0001-01-01T00:00:00</v8:endDate>
</value>
<useRestriction>false</useRestriction>
</parameter>
<settingsVariant>
<dcsset:name>Основной</dcsset:name>
@@ -40,6 +40,7 @@
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:EnumRef.Округления</v8:Type>
</valueType>
<value xsi:type="dcscor:DesignTimeValue">Перечисление.Округления.Окр1_00</value>
<useRestriction>false</useRestriction>
<availableValue>
<value xsi:type="dcscor:DesignTimeValue">Перечисление.Округления.Окр1_00</value>
<presentation xsi:type="v8:LocalStringType">
@@ -63,6 +63,7 @@
<v8:startDate>0001-01-01T00:00:00</v8:startDate>
<v8:endDate>0001-01-01T00:00:00</v8:endDate>
</value>
<useRestriction>false</useRestriction>
<denyIncompleteValues>true</denyIncompleteValues>
<use>Always</use>
</parameter>
@@ -60,6 +60,7 @@
<v8:startDate>0001-01-01T00:00:00</v8:startDate>
<v8:endDate>0001-01-01T00:00:00</v8:endDate>
</value>
<useRestriction>false</useRestriction>
<denyIncompleteValues>true</denyIncompleteValues>
<use>Always</use>
</parameter>
@@ -105,6 +106,7 @@
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.Организации</v8:Type>
</valueType>
<value xsi:nil="true"/>
<useRestriction>false</useRestriction>
</parameter>
<settingsVariant>
<dcsset:name>Основной</dcsset:name>
@@ -103,6 +103,7 @@
<v8:startDate>0001-01-01T00:00:00</v8:startDate>
<v8:endDate>0001-01-01T00:00:00</v8:endDate>
</value>
<useRestriction>false</useRestriction>
<denyIncompleteValues>true</denyIncompleteValues>
<use>Always</use>
</parameter>
@@ -148,12 +149,14 @@
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.Организации</v8:Type>
</valueType>
<value xsi:nil="true"/>
<useRestriction>false</useRestriction>
</parameter>
<parameter>
<name>СписокДокументов</name>
<valueType>
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:CatalogRef.Документы</v8:Type>
</valueType>
<useRestriction>false</useRestriction>
<valueListAllowed>true</valueListAllowed>
</parameter>
<parameter>
@@ -175,6 +178,7 @@
<v8:Type xmlns:d5p1="http://v8.1c.ru/8.1/data/enterprise/current-config">d5p1:EnumRef.Округления</v8:Type>
</valueType>
<value xsi:type="dcscor:DesignTimeValue">Перечисление.Округления.Окр1</value>
<useRestriction>false</useRestriction>
<availableValue>
<value xsi:type="dcscor:DesignTimeValue">Перечисление.Округления.Окр1_00</value>
<presentation xsi:type="v8:LocalStringType">
@@ -81,6 +81,7 @@
<v8:startDate>0001-01-01T00:00:00</v8:startDate>
<v8:endDate>0001-01-01T00:00:00</v8:endDate>
</value>
<useRestriction>false</useRestriction>
<denyIncompleteValues>true</denyIncompleteValues>
<use>Always</use>
</parameter>
@@ -126,6 +127,7 @@
<v8:Type>xs:boolean</v8:Type>
</valueType>
<value xsi:type="xs:boolean">true</value>
<useRestriction>false</useRestriction>
</parameter>
<template>
<name>Шапка</name>