refactor(form-add): объединить с epf-add-form, удалить специфичный навык

form-add теперь покрывает и объекты конфигурации, и standalone EPF/ERF
source tree (тип определяется из корневого XML, маппинг типов уже был).

Изменения form-add scaffold:
- Module.bsl: пустые регионы вместо скелета процедуры ПриСозданииНаСервере
- Form.xml: убран <Events> (раньше привязывал OnCreateAtServer к процедуре)
- Form.xml: <SavedData>true</SavedData> теперь условный — ставится для
  Catalog/Document/etc (стандарт ERP, 99% форм), не ставится для
  DataProcessor/Report/External* (где у объекта нет состояния)

Это согласуется с workflow: form-compile перегенерирует Form.xml целиком,
поэтому привязки в scaffold могут стать orphan; пустые регионы +
без Events — корректная стартовая точка, которую form-edit/form-compile
наполняют атомарно.

Удалён навык epf-add-form (директория + тесты), вызовы заменены на
form-add в integration-тестах, в кейсах epf-validate/help-add, в
description epf-init/epf-bsp-init, в docs и README.

Перегенерированы snapshot'ы 5 навыков (form-add, form-compile,
form-edit, form-info, form-validate). Платформенная верификация в 1С 8.3.24
прошла для всех 9 кейсов form-add.

Bump form-add v1.3 → v1.4.
This commit is contained in:
Nick Shirokov
2026-04-25 15:26:54 +03:00
parent 2a86df1c98
commit bdc38caffa
93 changed files with 93 additions and 882 deletions
@@ -1,14 +0,0 @@
{
"script": "epf-add-form/scripts/add-form",
"setup": "none",
"args": [
{ "flag": "-ProcessorName", "from": "case.processorName" },
{ "flag": "-FormName", "from": "case.formName" },
{ "flag": "-SrcDir", "from": "workDir" }
],
"snapshot": {
"root": "workDir",
"normalizeUuids": true
},
"postValidate": { "script": "epf-validate/scripts/epf-validate", "flag": "-ObjectPath", "pathFrom": "validatePath" }
}
@@ -1,11 +0,0 @@
{
"name": "Добавление формы к обработке",
"preRun": [
{
"script": "epf-init/scripts/init",
"args": { "-Name": "МояОбработка", "-SrcDir": "{workDir}" }
}
],
"params": { "processorName": "МояОбработка", "formName": "Форма" },
"validatePath": "МояОбработка"
}
@@ -1,16 +0,0 @@
{
"name": "Добавление основной формы с флагом --main",
"preRun": [
{
"script": "epf-init/scripts/init",
"args": { "-Name": "МояОбработка", "-SrcDir": "{workDir}" }
},
{
"script": "epf-add-form/scripts/add-form",
"args": { "-ProcessorName": "МояОбработка", "-FormName": "Форма1", "-SrcDir": "{workDir}" }
}
],
"params": { "processorName": "МояОбработка", "formName": "ФормаОсновная" },
"args_extra": ["-Main"],
"validatePath": "МояОбработка"
}
@@ -1,11 +0,0 @@
{
"name": "Добавление формы с произвольным именем",
"preRun": [
{
"script": "epf-init/scripts/init",
"args": { "-Name": "ЗагрузкаДанных", "-SrcDir": "{workDir}" }
}
],
"params": { "processorName": "ЗагрузкаДанных", "formName": "ФормаНастроек" },
"validatePath": "ЗагрузкаДанных"
}
@@ -1,15 +0,0 @@
{
"name": "Добавление второй формы к обработке с существующей формой",
"preRun": [
{
"script": "epf-init/scripts/init",
"args": { "-Name": "МояОбработка", "-SrcDir": "{workDir}" }
},
{
"script": "epf-add-form/scripts/add-form",
"args": { "-ProcessorName": "МояОбработка", "-FormName": "Форма", "-SrcDir": "{workDir}" }
}
],
"params": { "processorName": "МояОбработка", "formName": "ФормаНастроек" },
"validatePath": "МояОбработка"
}
@@ -6,8 +6,8 @@
"args": { "-Name": "МояОбработка", "-SrcDir": "{workDir}" }
},
{
"script": "epf-add-form/scripts/add-form",
"args": { "-ProcessorName": "МояОбработка", "-FormName": "Форма", "-SrcDir": "{workDir}" }
"script": "form-add/scripts/form-add",
"args": { "-ObjectPath": "{workDir}/МояОбработка.xml", "-FormName": "Форма" }
}
],
"params": { "objectPath": "МояОбработка.xml" }
@@ -0,0 +1,12 @@
{
"name": "Добавление формы к внешней обработке (EPF)",
"setup": "none",
"preRun": [
{
"script": "epf-init/scripts/init",
"args": { "-Name": "МояОбработка", "-SrcDir": "{workDir}" }
}
],
"params": { "objectPath": "МояОбработка.xml", "formName": "Форма" },
"validatePath": "МояОбработка/Forms/Форма"
}
@@ -0,0 +1,12 @@
{
"name": "Добавление формы с произвольным именем к внешней обработке",
"setup": "none",
"preRun": [
{
"script": "epf-init/scripts/init",
"args": { "-Name": "ЗагрузкаДанных", "-SrcDir": "{workDir}" }
}
],
"params": { "objectPath": "ЗагрузкаДанных.xml", "formName": "ФормаНастроек" },
"validatePath": "ЗагрузкаДанных/Forms/ФормаНастроек"
}
@@ -0,0 +1,16 @@
{
"name": "Добавление второй формы к внешней обработке с существующей формой",
"setup": "none",
"preRun": [
{
"script": "epf-init/scripts/init",
"args": { "-Name": "МояОбработка", "-SrcDir": "{workDir}" }
},
{
"script": "form-add/scripts/form-add",
"args": { "-ObjectPath": "{workDir}/МояОбработка.xml", "-FormName": "Форма" }
}
],
"params": { "objectPath": "МояОбработка.xml", "formName": "ФормаНастроек" },
"validatePath": "МояОбработка/Forms/ФормаНастроек"
}
@@ -0,0 +1,17 @@
{
"name": "Добавление основной формы к внешней обработке с -SetDefault",
"setup": "none",
"preRun": [
{
"script": "epf-init/scripts/init",
"args": { "-Name": "МояОбработка", "-SrcDir": "{workDir}" }
},
{
"script": "form-add/scripts/form-add",
"args": { "-ObjectPath": "{workDir}/МояОбработка.xml", "-FormName": "Форма1" }
}
],
"params": { "objectPath": "МояОбработка.xml", "formName": "ФормаОсновная" },
"args_extra": ["-SetDefault"],
"validatePath": "МояОбработка/Forms/ФормаОсновная"
}
@@ -3,9 +3,6 @@
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1">
<Autofill>true</Autofill>
</AutoCommandBar>
<Events>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events>
<ChildItems/>
<Attributes>
<Attribute name="Объект" id="1">
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -3,9 +3,6 @@
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1">
<Autofill>true</Autofill>
</AutoCommandBar>
<Events>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events>
<ChildItems/>
<Attributes>
<Attribute name="Объект" id="1">
@@ -13,7 +10,6 @@
<v8:Type>cfg:DataProcessorObject.МояОбработка</v8:Type>
</Type>
<MainAttribute>true</MainAttribute>
<SavedData>true</SavedData>
</Attribute>
</Attributes>
</Form>
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -3,9 +3,6 @@
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1">
<Autofill>true</Autofill>
</AutoCommandBar>
<Events>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events>
<ChildItems/>
<Attributes>
<Attribute name="Объект" id="1">
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -3,9 +3,6 @@
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1">
<Autofill>true</Autofill>
</AutoCommandBar>
<Events>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events>
<ChildItems/>
<Attributes>
<Attribute name="Список" id="1">
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -3,9 +3,6 @@
<AutoCommandBar name="ФормаКоманднаяПанель" id="-1">
<Autofill>true</Autofill>
</AutoCommandBar>
<Events>
<Event name="OnCreateAtServer">ПриСозданииНаСервере</Event>
</Events>
<ChildItems/>
<Attributes>
<Attribute name="Объект" id="1">
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -1,10 +1,5 @@
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовФормы
@@ -6,8 +6,8 @@
"args": { "-Name": "ОбработкаСФормой", "-SrcDir": "{workDir}" }
},
{
"script": "epf-add-form/scripts/add-form",
"args": { "-ProcessorName": "ОбработкаСФормой", "-FormName": "Форма", "-SrcDir": "{workDir}" }
"script": "form-add/scripts/form-add",
"args": { "-ObjectPath": "{workDir}/ОбработкаСФормой.xml", "-FormName": "Форма" }
}
],
"params": { "objectName": "ОбработкаСФормой" }
+4 -4
View File
@@ -1,5 +1,5 @@
// build-epf.test.mjs — Integration test: build an external data processor (EPF) from scratch
// Steps: epf-init → epf-add-form → form-compile → template-add → mxl-compile → epf-validate
// Steps: epf-init → form-add → form-compile → template-add → mxl-compile → epf-validate
export const name = 'Сборка внешней обработки с нуля';
export const setup = 'none';
@@ -15,9 +15,9 @@ export const steps = [
// ── 2. Add form ──
{
name: 'epf-add-form: Форма к ТестоваяОбработка',
script: 'epf-add-form/scripts/add-form',
args: { '-ProcessorName': 'ТестоваяОбработка', '-FormName': 'Форма', '-SrcDir': '{workDir}' },
name: 'form-add: Форма к ТестоваяОбработка',
script: 'form-add/scripts/form-add',
args: { '-ObjectPath': '{workDir}/ТестоваяОбработка.xml', '-FormName': 'Форма' },
validate: { script: 'epf-validate/scripts/epf-validate', flag: '-ObjectPath', path: 'ТестоваяОбработка' },
},
@@ -1,6 +1,6 @@
// platform-epf.test.mjs — Integration test: EPF build/dump roundtrip
// Requires: 1C platform (1cv8.exe) via .v8-project.json
// Steps: epf-init → epf-add-form → form-compile → epf-build → epf-dump
// Steps: epf-init → form-add → form-compile → epf-build → epf-dump
export const name = 'Сборка и разборка внешней обработки (roundtrip)';
export const setup = 'none';
@@ -16,8 +16,8 @@ export const steps = [
// ── 2. Add form to EPF ──
{
name: 'epf-add-form: форма обработки',
script: 'epf-add-form/scripts/add-form',
name: 'form-add: форма обработки',
script: 'form-add/scripts/form-add',
args: {
'-ObjectPath': '{workDir}/RoundtripТест.xml',
'-FormName': 'Форма',
+3 -3
View File
@@ -4,7 +4,7 @@
// Usage: node tests/skills/verify-snapshots.mjs [--skill meta-compile] [--case catalog-basic] [--runtime powershell|python] [--keep] [--verbose]
// Supports: meta-compile, form-compile, form-add, form-edit, skd-compile, skd-edit,
// role-compile, subsystem-compile, subsystem-edit, mxl-compile, template-add,
// help-add, cf-init, cf-edit, epf-init, epf-add-form, meta-edit, interface-edit,
// help-add, cf-init, cf-edit, epf-init, meta-edit, interface-edit,
// cfe-init, cfe-borrow, cfe-patch-method
import { execFileSync } from 'child_process';
@@ -322,7 +322,7 @@ const STANDALONE_SKILLS = new Set([
// EPF/ERF skills — need epf-build to verify, not LoadConfigFromFiles
const EPF_SKILLS = new Set([
'epf-init', 'epf-add-form', 'erf-init', 'template-add', 'help-add',
'epf-init', 'erf-init', 'template-add', 'help-add',
]);
// CFE skills — two-stage load: base config → extension
@@ -703,7 +703,7 @@ const DEFAULT_SKILLS = [
'meta-compile', 'form-compile', 'form-compile-from-object', 'form-add', 'form-edit',
'role-compile', 'subsystem-compile', 'subsystem-edit',
'cf-init', 'cf-edit', 'meta-edit', 'interface-edit',
'epf-init', 'epf-add-form', 'template-add', 'help-add',
'epf-init', 'template-add', 'help-add',
'cfe-init', 'cfe-borrow', 'cfe-patch-method',
'skd-compile', 'skd-edit', 'mxl-compile',
];