feat(mxl-validate): предупреждать о флажке у типа, отличного от булева и числа

Конфигуратор предлагает флажок только для Булево и Числа, но ограничение
интерфейсное: макет с флажком у строки и у даты платформа принимает и
возвращает GUID дословно — проверено сборкой EPF и обратной выгрузкой
через базу. Поэтому предупреждение, а не ошибка компиляции: собрать
такую ячейку вручную нельзя, и почти наверняка это описка автора.

На корпусе ERP предупреждение не срабатывает ни разу: все семь флажков
стоят у булева.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-15 12:40:31 +03:00
co-authored by Claude Opus 5
parent aaeb752cf1
commit d7c81505d8
5 changed files with 134 additions and 0 deletions
@@ -422,6 +422,13 @@ def main():
ctl = fmt.find(f'{{{NS_D}}}controlType')
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()}')
# Флажок Конфигуратор предлагает только для булева и числа. Движок принимает его на
# любом типе (проверено сборкой 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:
for ri in root.findall(f'{{{NS_D}}}rowsItem'):