mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-18 01:00:24 +03:00
feat(mxl-validate): предупреждать о флажке у типа, отличного от булева и числа
Конфигуратор предлагает флажок только для Булево и Числа, но ограничение интерфейсное: макет с флажком у строки и у даты платформа принимает и возвращает GUID дословно — проверено сборкой EPF и обратной выгрузкой через базу. Поэтому предупреждение, а не ошибка компиляции: собрать такую ячейку вручную нельзя, и почти наверняка это описка автора. На корпусе ERP предупреждение не срабатывает ни разу: все семь флажков стоят у булева. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
aaeb752cf1
commit
d7c81505d8
@@ -434,6 +434,19 @@ for ($i = 0; $i -lt $formatNodes.Count; $i++) {
|
|||||||
if ($ctl -and ($controlGuids -notcontains $ctl.InnerText.Trim().ToLowerInvariant())) {
|
if ($ctl -and ($controlGuids -notcontains $ctl.InnerText.Trim().ToLowerInvariant())) {
|
||||||
Report-Warn "Format ${num}: unknown controlType $($ctl.InnerText.Trim())"
|
Report-Warn "Format ${num}: unknown controlType $($ctl.InnerText.Trim())"
|
||||||
}
|
}
|
||||||
|
# Флажок Конфигуратор предлагает только для булева и числа. Движок принимает его на любом
|
||||||
|
# типе (проверено сборкой EPF и обратной выгрузкой), поэтому это предупреждение, а не ошибка:
|
||||||
|
# собрать такую ячейку в Конфигураторе нельзя, и почти наверняка это описка.
|
||||||
|
if ($ctl -and $ctl.InnerText.Trim().ToLowerInvariant() -ceq $controlGuids[1] -and $vt) {
|
||||||
|
$kinds = @()
|
||||||
|
foreach ($child in $vt.ChildNodes) {
|
||||||
|
if ($child.NodeType -ne [System.Xml.XmlNodeType]::Element) { continue }
|
||||||
|
if ($child.get_LocalName() -ceq 'Type') { $kinds += $child.InnerText.Trim() }
|
||||||
|
}
|
||||||
|
if (-not (($kinds.Count -eq 1) -and ($kinds[0] -ceq 'xs:boolean' -or $kinds[0] -ceq 'xs:decimal'))) {
|
||||||
|
Report-Warn "Format ${num}: checkbox control on a type other than Boolean or Number"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($valueFormatIdx.Count -gt 0) {
|
if ($valueFormatIdx.Count -gt 0) {
|
||||||
|
|||||||
@@ -422,6 +422,13 @@ def main():
|
|||||||
ctl = fmt.find(f'{{{NS_D}}}controlType')
|
ctl = fmt.find(f'{{{NS_D}}}controlType')
|
||||||
if ctl is not None and (ctl.text or '').strip().lower() not in control_guids:
|
if ctl is not None and (ctl.text or '').strip().lower() not in control_guids:
|
||||||
r.warn(f'Format {i}: unknown controlType {(ctl.text or "").strip()}')
|
r.warn(f'Format {i}: unknown controlType {(ctl.text or "").strip()}')
|
||||||
|
# Флажок Конфигуратор предлагает только для булева и числа. Движок принимает его на
|
||||||
|
# любом типе (проверено сборкой EPF и обратной выгрузкой), поэтому это предупреждение,
|
||||||
|
# а не ошибка: собрать такую ячейку в Конфигураторе нельзя, и почти наверняка это описка.
|
||||||
|
if ctl is not None and (ctl.text or '').strip().lower() == control_guids[1] and vt is not None:
|
||||||
|
kinds = [(t.text or '').strip() for t in vt if t.tag.endswith('}Type')]
|
||||||
|
if kinds != ['xs:boolean'] and kinds != ['xs:decimal']:
|
||||||
|
r.warn(f'Format {i}: checkbox control on a type other than Boolean or Number')
|
||||||
|
|
||||||
if value_format_idx:
|
if value_format_idx:
|
||||||
for ri in root.findall(f'{{{NS_D}}}rowsItem'):
|
for ri in root.findall(f'{{{NS_D}}}rowsItem'):
|
||||||
|
|||||||
@@ -557,6 +557,10 @@ pictureSizeMode · picHorizontalAlignment · picVerticalAlignment · textPositio
|
|||||||
У 90 форматов (22 макета регламентированной отчётности, явно машинно-сгенерированных) тега
|
У 90 форматов (22 макета регламентированной отчётности, явно машинно-сгенерированных) тега
|
||||||
`<controlType>` нет вовсе.
|
`<controlType>` нет вовсе.
|
||||||
|
|
||||||
|
Флажок Конфигуратор предлагает **только для Булево и Числа**. Ограничение при этом чисто
|
||||||
|
интерфейсное: макет с флажком у строки и у даты платформа принимает и возвращает GUID дословно
|
||||||
|
(проверено сборкой EPF и обратной выгрузкой через базу — ни отказа, ни нормализации).
|
||||||
|
|
||||||
**Структура `<valueType>`** — то же описание типов, что в метаданных: сначала все `<v8:Type>` и
|
**Структура `<valueType>`** — то же описание типов, что в метаданных: сначала все `<v8:Type>` и
|
||||||
`<v8:TypeSet>` в порядке источника, затем блоки квалификаторов в порядке Number → String → Date.
|
`<v8:TypeSet>` в порядке источника, затем блоки квалификаторов в порядке Number → String → Date.
|
||||||
Голая категория без имени объекта (`CatalogRef`, `AnyRef`) — это `<v8:TypeSet>`, а не `<v8:Type>`.
|
Голая категория без имени объекта (`CatalogRef`, `AnyRef`) — это `<v8:TypeSet>`, а не `<v8:Type>`.
|
||||||
|
|||||||
@@ -0,0 +1,82 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<document xmlns="http://v8.1c.ru/8.2/data/spreadsheet" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<languageSettings>
|
||||||
|
<currentLanguage>ru</currentLanguage>
|
||||||
|
<defaultLanguage>ru</defaultLanguage>
|
||||||
|
<languageInfo>
|
||||||
|
<id>ru</id>
|
||||||
|
<code>Русский</code>
|
||||||
|
<description>Русский</description>
|
||||||
|
</languageInfo>
|
||||||
|
</languageSettings>
|
||||||
|
<columns>
|
||||||
|
<size>3</size>
|
||||||
|
</columns>
|
||||||
|
<rowsItem>
|
||||||
|
<index>0</index>
|
||||||
|
<row>
|
||||||
|
<c>
|
||||||
|
<c>
|
||||||
|
<f>1</f>
|
||||||
|
</c>
|
||||||
|
</c>
|
||||||
|
<c>
|
||||||
|
<c>
|
||||||
|
<f>2</f>
|
||||||
|
</c>
|
||||||
|
</c>
|
||||||
|
<c>
|
||||||
|
<c>
|
||||||
|
<f>3</f>
|
||||||
|
</c>
|
||||||
|
</c>
|
||||||
|
</row>
|
||||||
|
</rowsItem>
|
||||||
|
<templateMode>true</templateMode>
|
||||||
|
<defaultFormatIndex>4</defaultFormatIndex>
|
||||||
|
<height>1</height>
|
||||||
|
<vgRows>1</vgRows>
|
||||||
|
<namedItem xsi:type="NamedItemCells">
|
||||||
|
<name>Проверка</name>
|
||||||
|
<area>
|
||||||
|
<type>Rows</type>
|
||||||
|
<beginRow>0</beginRow>
|
||||||
|
<endRow>0</endRow>
|
||||||
|
<beginColumn>-1</beginColumn>
|
||||||
|
<endColumn>-1</endColumn>
|
||||||
|
</area>
|
||||||
|
</namedItem>
|
||||||
|
<format>
|
||||||
|
<containsValue>true</containsValue>
|
||||||
|
<valueType>
|
||||||
|
<v8:Type>xs:boolean</v8:Type>
|
||||||
|
</valueType>
|
||||||
|
<controlType>35af3d93-d7c7-4a2e-a8eb-bac87a1a3f26</controlType>
|
||||||
|
</format>
|
||||||
|
<format>
|
||||||
|
<containsValue>true</containsValue>
|
||||||
|
<valueType>
|
||||||
|
<v8:Type>xs:decimal</v8:Type>
|
||||||
|
<v8:NumberQualifiers>
|
||||||
|
<v8:Digits>10</v8:Digits>
|
||||||
|
<v8:FractionDigits>2</v8:FractionDigits>
|
||||||
|
<v8:AllowedSign>Any</v8:AllowedSign>
|
||||||
|
</v8:NumberQualifiers>
|
||||||
|
</valueType>
|
||||||
|
<controlType>35af3d93-d7c7-4a2e-a8eb-bac87a1a3f26</controlType>
|
||||||
|
</format>
|
||||||
|
<format>
|
||||||
|
<containsValue>true</containsValue>
|
||||||
|
<valueType>
|
||||||
|
<v8:Type>xs:string</v8:Type>
|
||||||
|
<v8:StringQualifiers>
|
||||||
|
<v8:Length>10</v8:Length>
|
||||||
|
<v8:AllowedLength>Variable</v8:AllowedLength>
|
||||||
|
</v8:StringQualifiers>
|
||||||
|
</valueType>
|
||||||
|
<controlType>35af3d93-d7c7-4a2e-a8eb-bac87a1a3f26</controlType>
|
||||||
|
</format>
|
||||||
|
<format>
|
||||||
|
<width>10</width>
|
||||||
|
</format>
|
||||||
|
</document>
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
"name": "Предупреждение: флажок у типа, отличного от булева и числа",
|
||||||
|
"preRun": [
|
||||||
|
{
|
||||||
|
"script": "mxl-compile/scripts/mxl-compile",
|
||||||
|
"input": {
|
||||||
|
"columns": 3,
|
||||||
|
"areas": [
|
||||||
|
{
|
||||||
|
"name": "Проверка",
|
||||||
|
"rows": [
|
||||||
|
{ "cells": [
|
||||||
|
{ "col": 1, "valueType": "Boolean", "controlType": "checkbox" },
|
||||||
|
{ "col": 2, "valueType": "Number(10,2)", "controlType": "checkbox" },
|
||||||
|
{ "col": 3, "valueType": "String(10)", "controlType": "checkbox" }
|
||||||
|
]}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"args": { "-JsonPath": "{inputFile}", "-OutputPath": "Template.xml" },
|
||||||
|
"cwd": "{workDir}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"params": { "templatePath": "Template.xml" },
|
||||||
|
"args_extra": ["-Detailed"],
|
||||||
|
"expect": { "stdoutContains": "checkbox control on a type other than Boolean or Number" }
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user