mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-14 23:39:02 +03:00
feat(cfe-validate): полнота GeneratedType, ТЧ из AdditionalColumns, сверка путей с -ConfigPath
Три вещи, на которых платформа отвергала расширение, а валидатор молчал. Check 9 — полнота набора GeneratedType у заимствованной оболочки: неполный набор платформа не читает («отсутствует один или более типов объекта»). Карта категорий взята из той же таблицы спецификации (§2.5) и заведена в реестр check-type-maps.mjs, чтобы копия не разошлась с остальными. Check 12 — <AdditionalColumns table="Объект.X"> при незаимствованной табличной части. В отличие от соседних проверок блока, здесь сигнал точный (имя из атрибута), а последствие жёсткое, поэтому ошибка, а не warning. Check 14 — пути Объект.* заимствованных форм против конфигурации-источника, по новому опциональному -ConfigPath. Без него проверка пропускается с явной строкой в отчёте. Отличить живой путь от висячего иначе нельзя: Объект.Партнер валиден и без заимствования (наследуется от базы), а Объект.Товары.Артикул не разрешится нигде. Итоги колонок (Total<Колонка>) и стандартные реквизиты пропускаются — иначе ложные срабатывания на типовых формах. Проверено на пяти расширениях: наши (оба режима) и оба эталона Конфигуратора проходят чисто, расширение с дефектом ловится. Регресс cfe-* 51/51 на обоих рантаймах, гарды дрейфа зелёные.
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"name": "Ошибка: <AdditionalColumns table=\"Объект.X\"> при незаимствованной табличной части",
|
||||
"preRun": [
|
||||
{
|
||||
"script": "meta-compile/scripts/meta-compile",
|
||||
"input": {
|
||||
"type": "Document", "name": "ЗаказКлиента",
|
||||
"tabularSections": { "Товары": [ { "name": "Количество", "type": "Number(10,3)" } ] }
|
||||
},
|
||||
"args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
|
||||
},
|
||||
{
|
||||
"script": "form-add/scripts/form-add",
|
||||
"args": { "-ObjectPath": "{workDir}/Documents/ЗаказКлиента.xml", "-FormName": "ФормаДокумента" }
|
||||
},
|
||||
{
|
||||
"script": "form-compile/scripts/form-compile",
|
||||
"input": {
|
||||
"title": "Заказ клиента",
|
||||
"elements": [
|
||||
{ "table": "Товары", "path": "Объект.Товары", "columns": [
|
||||
{ "input": "Количество", "path": "Объект.Товары.Количество" }
|
||||
] }
|
||||
],
|
||||
"attributes": [
|
||||
{
|
||||
"name": "Объект", "type": "DocumentObject.ЗаказКлиента", "main": true,
|
||||
"additionalColumns": [
|
||||
{ "table": "Объект.Оплата", "columns": [ { "name": "СуммаПрописью", "type": "String(200)" } ] }
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
"args": { "-JsonPath": "{inputFile}", "-OutputPath": "{workDir}/Documents/ЗаказКлиента/Forms/ФормаДокумента/Ext/Form.xml" }
|
||||
},
|
||||
{
|
||||
"script": "cfe-init/scripts/cfe-init",
|
||||
"args": { "-Name": "Тест", "-OutputDir": "{workDir}/ext", "-ConfigPath": "{workDir}" }
|
||||
},
|
||||
{
|
||||
"script": "cfe-borrow/scripts/cfe-borrow",
|
||||
"args": { "-ExtensionPath": "{workDir}/ext", "-ConfigPath": "{workDir}", "-Object": "Document.ЗаказКлиента.Form.ФормаДокумента", "-BorrowMainAttribute": "Form" }
|
||||
}
|
||||
],
|
||||
"params": { "extensionPath": "ext" },
|
||||
"expectError": true,
|
||||
"expect": { "stdoutContains": "TabularSection.Оплата" }
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
{
|
||||
"name": "С -ConfigPath ловится путь на несуществующую колонку ТЧ (Объект.Товары.Артикул)",
|
||||
"preRun": [
|
||||
{
|
||||
"script": "meta-compile/scripts/meta-compile",
|
||||
"input": {
|
||||
"type": "Document", "name": "ЗаказКлиента",
|
||||
"tabularSections": { "Товары": [ { "name": "Количество", "type": "Number(10,3)" } ] }
|
||||
},
|
||||
"args": { "-JsonPath": "{inputFile}", "-OutputDir": "{workDir}" }
|
||||
},
|
||||
{
|
||||
"script": "form-add/scripts/form-add",
|
||||
"args": { "-ObjectPath": "{workDir}/Documents/ЗаказКлиента.xml", "-FormName": "ФормаДокумента" }
|
||||
},
|
||||
{
|
||||
"script": "form-compile/scripts/form-compile",
|
||||
"input": {
|
||||
"title": "Заказ клиента",
|
||||
"elements": [
|
||||
{ "table": "Товары", "path": "Объект.Товары", "columns": [
|
||||
{ "input": "Количество", "path": "Объект.Товары.Количество" },
|
||||
{ "input": "Артикул", "path": "Объект.Товары.Артикул" }
|
||||
] }
|
||||
],
|
||||
"attributes": [ { "name": "Объект", "type": "DocumentObject.ЗаказКлиента", "main": true } ]
|
||||
},
|
||||
"args": { "-JsonPath": "{inputFile}", "-OutputPath": "{workDir}/Documents/ЗаказКлиента/Forms/ФормаДокумента/Ext/Form.xml" }
|
||||
},
|
||||
{
|
||||
"script": "cfe-init/scripts/cfe-init",
|
||||
"args": { "-Name": "Тест", "-OutputDir": "{workDir}/ext", "-ConfigPath": "{workDir}" }
|
||||
},
|
||||
{
|
||||
"script": "cfe-borrow/scripts/cfe-borrow",
|
||||
"args": { "-ExtensionPath": "{workDir}/ext", "-ConfigPath": "{workDir}", "-Object": "Document.ЗаказКлиента.Form.ФормаДокумента", "-BorrowMainAttribute": "Form" }
|
||||
}
|
||||
],
|
||||
"params": { "extensionPath": "ext" },
|
||||
"args_extra": ["-ConfigPath", "{workDir}"],
|
||||
"expectError": true,
|
||||
"expect": { "stdoutContains": "Объект.Товары.Артикул" }
|
||||
}
|
||||
@@ -85,6 +85,10 @@ const MAPS = [
|
||||
IntegrationService: '',
|
||||
},
|
||||
},
|
||||
{
|
||||
skill: 'cfe-validate', file: 'cfe-validate', kind: 'gencats',
|
||||
py: 'GENERATED_TYPE_CATEGORIES', ps1: '$generatedTypeCategories',
|
||||
},
|
||||
{
|
||||
skill: 'meta-validate', file: 'meta-validate', kind: 'gencats',
|
||||
py: 'generated_type_categories', ps1: '$generatedTypeCategories',
|
||||
@@ -204,8 +208,8 @@ function extractGen(text, name, kind, lang) {
|
||||
cur = h[1];
|
||||
out.set(cur, []);
|
||||
if (kind === 'gencats') {
|
||||
// категории лежат в той же строке: "Catalog" = @("Object","Ref",…)
|
||||
for (const c of line.slice(h[0].length).matchAll(/"(\w+)"/g)) out.get(cur).push([null, c[1]]);
|
||||
// категории лежат в той же строке: "Catalog" = @("Object","Ref",…) / 'Catalog': ['Object', …]
|
||||
for (const c of line.slice(h[0].length).matchAll(/['"](\w+)['"]/g)) out.get(cur).push([null, c[1]]);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user