fix(meta-compile): LineNumberLength только объектам с хранением в БД

Раундтрип по обработкам и отчётам УТ (7568 объектов) показал 265 лишних
строк: мы эмитили LineNumberLength каждой табличной части, а платформа
пишет его только объектам, у которых есть таблица в базе.

Проверено на двух конфигурациях независимо: у обработок 0 тегов из 235+257
табличных частей, у отчётов 0 из 106+8; у справочников, документов, ПВХ,
планов обмена и бизнес-процессов тег стоит поголовно. Свойство задаёт
разрядность физического номера строки в таблице БД — у обработок и отчётов
таблиц нет, хранить нечего.

Исключены DataProcessor и Report, а также ExternalDataProcessor и
ExternalReport: внешние обработки той же природы, и при сборке EPF на
формате 2.20 мы бы писали тег, которого платформа не пишет.

Кейс format-220-props дополнен обработкой с табличной частью: у неё тега
нет, у справочника в той же конфигурации LineNumberLength=9.

Проверка: УТ tier-2 7543/7543 без расхождений (было 71 diff),
сюита 76/76 на обоих портах, 1С-сертификация на 8.3.27 пройдена.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-01 20:58:31 +03:00
co-authored by Claude Opus 5
parent 4b6c3faa1d
commit dac265995e
7 changed files with 143 additions and 2 deletions
@@ -2094,7 +2094,10 @@ function Emit-TabularSection {
}
# Формат 2.20 (8.3.27): длина номера строки ТЧ (5..9 → до 999 999 999 строк вместо 99 999).
# Последним в Properties. Дефолт платформа берёт из режима совместимости на момент создания ТЧ.
if ($script:isFormat220) {
# ТОЛЬКО у объектов с хранением в БД: обработкам и отчётам платформа тег не пишет вовсе
# (проверено на двух конфигурациях: 0 из 235+257 ТЧ обработок и 0 из 106+8 ТЧ отчётов).
# Свойство задаёт разрядность физического номера строки в таблице — у обработок таблицы нет.
if ($script:isFormat220 -and $objectType -notin @("DataProcessor", "Report", "ExternalDataProcessor", "ExternalReport")) {
$lnl = if ($null -ne $tsLineNumberLength -and "$tsLineNumberLength" -ne '') { [int]$tsLineNumberLength } else { $script:lineNumberLengthDefault }
X "$indent`t`t<LineNumberLength>$lnl</LineNumberLength>"
}
@@ -2151,7 +2151,10 @@ def emit_tabular_section(indent, ts_name, columns, object_type, object_name, ts_
X(f'{indent}\t\t<Use>{ts_use if ts_use else "ForItem"}</Use>')
# Формат 2.20 (8.3.27): длина номера строки ТЧ (5..9 → до 999 999 999 строк вместо 99 999).
# Последним в Properties. Дефолт платформа берёт из режима совместимости на момент создания ТЧ.
if is_format_220:
# ТОЛЬКО у объектов с хранением в БД: обработкам и отчётам платформа тег не пишет вовсе
# (проверено на двух конфигурациях: 0 из 235+257 ТЧ обработок и 0 из 106+8 ТЧ отчётов).
# Свойство задаёт разрядность физического номера строки в таблице — у обработок таблицы нет.
if is_format_220 and object_type not in ('DataProcessor', 'Report', 'ExternalDataProcessor', 'ExternalReport'):
lnl = int(ts_line_number_length) if ts_line_number_length not in (None, '') else line_number_length_default
X(f'{indent}\t\t<LineNumberLength>{lnl}</LineNumberLength>')
X(f'{indent}\t</Properties>')