test(meta-compile): стаб документов последовательности для 1С-cert (sequence)

getStructuralDeps не стабил документы, на которые ссылается Sequence
(inp.documents + documentMap) → 1С-cert падал с «Неизвестный объект
метаданных Document.X» и «Ни один документ не участвует в последовательности».
Пред-существующий пробел (не связан с dataLock — падал идентично на до-dataLock
компиляторе). Добавлен case 'Sequence': стаб каждого документа с реквизитами
из documentMap (тип реквизита берётся из соответствующего измерения).
sequence 1С-cert теперь проходит.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-07-11 15:35:10 +03:00
parent b24b7146b2
commit 4a6060d928
+21
View File
@@ -223,6 +223,27 @@ function getStructuralDeps(input) {
}
}
break;
case 'Sequence':
// Документы последовательности (documents) + реквизиты из documentMap — 1С требует существования
// самого Document.X И реквизита, на который ссылается измерение. Стабим документ с нужными реквизитами
// (тип реквизита берём из соответствующего измерения последовательности).
if (inp.documents) {
const norm = (s) => String(s).replace(/^Документ\./, 'Document.').replace(/\.Реквизит\./, '.Attribute.');
const docAttrs = {}; // имя документа -> Set("Реквизит: Тип")
for (const dim of (inp.dimensions || [])) {
const dtype = dim.type || 'CatalogRef.Организации';
for (const mp of (dim.documentMap || [])) {
const m = norm(mp).match(/^Document\.([^.]+)\.Attribute\.(.+)$/);
if (m) (docAttrs[m[1]] = docAttrs[m[1]] || new Set()).add(`${m[2]}: ${dtype}`);
}
}
for (const dref of inp.documents) {
const dn = String(dref).split('.').pop();
const attrs = [...(docAttrs[dn] || [])];
deps.push({ type: 'Document', name: dn, dsl: { type: 'Document', name: dn, ...(attrs.length ? { attributes: attrs } : {}) } });
}
}
break;
}
}
return deps;