From cbc20e6b975ae718d4485aa0a2f99b35073b5f45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=97=D0=B0=D0=B7=D1=83=D0=BB=D0=BE=D0=B2=20=D0=90=D0=BB?= =?UTF-8?q?=D0=B5=D0=BA=D1=81=D0=B5=D0=B9=20=D0=90=D0=BB=D0=B5=D0=BA=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=D0=B4=D1=80=D0=BE=D0=B2=D0=B8=D1=87=20=28=D0=97?= =?UTF-8?q?=D0=9A-0001393=29?= Date: Wed, 22 May 2024 17:32:21 +0300 Subject: [PATCH] =?UTF-8?q?ORAIS-1489:=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B8=D0=BD=D0=B4=D0=B5=D0=BA=D1=81?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=B2=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=85=20?= =?UTF-8?q?=D1=80=D0=B0=D1=81=D1=88=D0=B8=D1=80=D0=B5=D0=BD=D0=B8=D0=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Классы/ДанныеФормы.os | 381 ++++++++++++++++++ src/Классы/ЧтениеДанныхФормы.os | 263 ++++++++++++ src/Модули/ТипыФайлов.os | 24 +- src/СценарииОбработки/КорректировкаXMLФорм.os | 128 +----- .../КорректировкаXMLФорм/v8config.json | 48 +++ .../До/Configurator/1/Form.xml | 54 +++ .../До/Configurator/2/Form.xml | 111 +++++ .../До/Configurator/3/Form.xml | 59 +++ .../До/Configurator/4/Form.xml | 121 ++++++ .../До/Configurator/5/Form.xml | 197 +++++++++ .../КорректировкаXMLФорм/До/EDT/1/Form.form | 110 +++++ .../До/EDT/2/BaseForm/Form.form | 110 +++++ .../КорректировкаXMLФорм/До/EDT/2/Form.form | 110 +++++ .../КорректировкаXMLФорм/До/EDT/3/Form.form | 110 +++++ .../До/EDT/4/BaseForm/Form.form | 110 +++++ .../КорректировкаXMLФорм/До/EDT/4/Form.form | 110 +++++ .../До/EDT/5/BaseForm/Form.form | 110 +++++ .../КорректировкаXMLФорм/До/EDT/5/Form.form | 249 ++++++++++++ .../После/Configurator/1/Form.xml | 54 +++ .../После/Configurator/2/Form.xml | 111 +++++ .../После/Configurator/3/Form.xml | 59 +++ .../После/Configurator/4/Form.xml | 121 ++++++ .../После/Configurator/5/Form.xml | 197 +++++++++ .../После/EDT/1/Form.form | 110 +++++ .../После/EDT/2/BaseForm/Form.form | 110 +++++ .../После/EDT/2/Form.form | 110 +++++ .../После/EDT/3/Form.form | 110 +++++ .../После/EDT/4/BaseForm/Form.form | 110 +++++ .../После/EDT/4/Form.form | 110 +++++ .../После/EDT/5/BaseForm/Form.form | 110 +++++ .../После/EDT/5/Form.form | 249 ++++++++++++ tests/ТестПроверкаСценариевОбработки.os | 42 ++ 32 files changed, 3900 insertions(+), 108 deletions(-) create mode 100644 src/Классы/ДанныеФормы.os create mode 100644 src/Классы/ЧтениеДанныхФормы.os create mode 100644 tests/fixtures/КорректировкаXMLФорм/v8config.json create mode 100644 tests/fixtures/КорректировкаXMLФорм/До/Configurator/1/Form.xml create mode 100644 tests/fixtures/КорректировкаXMLФорм/До/Configurator/2/Form.xml create mode 100644 tests/fixtures/КорректировкаXMLФорм/До/Configurator/3/Form.xml create mode 100644 tests/fixtures/КорректировкаXMLФорм/До/Configurator/4/Form.xml create mode 100644 tests/fixtures/КорректировкаXMLФорм/До/Configurator/5/Form.xml create mode 100644 tests/fixtures/КорректировкаXMLФорм/До/EDT/1/Form.form create mode 100644 tests/fixtures/КорректировкаXMLФорм/До/EDT/2/BaseForm/Form.form create mode 100644 tests/fixtures/КорректировкаXMLФорм/До/EDT/2/Form.form create mode 100644 tests/fixtures/КорректировкаXMLФорм/До/EDT/3/Form.form create mode 100644 tests/fixtures/КорректировкаXMLФорм/До/EDT/4/BaseForm/Form.form create mode 100644 tests/fixtures/КорректировкаXMLФорм/До/EDT/4/Form.form create mode 100644 tests/fixtures/КорректировкаXMLФорм/До/EDT/5/BaseForm/Form.form create mode 100644 tests/fixtures/КорректировкаXMLФорм/До/EDT/5/Form.form create mode 100644 tests/fixtures/КорректировкаXMLФорм/После/Configurator/1/Form.xml create mode 100644 tests/fixtures/КорректировкаXMLФорм/После/Configurator/2/Form.xml create mode 100644 tests/fixtures/КорректировкаXMLФорм/После/Configurator/3/Form.xml create mode 100644 tests/fixtures/КорректировкаXMLФорм/После/Configurator/4/Form.xml create mode 100644 tests/fixtures/КорректировкаXMLФорм/После/Configurator/5/Form.xml create mode 100644 tests/fixtures/КорректировкаXMLФорм/После/EDT/1/Form.form create mode 100644 tests/fixtures/КорректировкаXMLФорм/После/EDT/2/BaseForm/Form.form create mode 100644 tests/fixtures/КорректировкаXMLФорм/После/EDT/2/Form.form create mode 100644 tests/fixtures/КорректировкаXMLФорм/После/EDT/3/Form.form create mode 100644 tests/fixtures/КорректировкаXMLФорм/После/EDT/4/BaseForm/Form.form create mode 100644 tests/fixtures/КорректировкаXMLФорм/После/EDT/4/Form.form create mode 100644 tests/fixtures/КорректировкаXMLФорм/После/EDT/5/BaseForm/Form.form create mode 100644 tests/fixtures/КорректировкаXMLФорм/После/EDT/5/Form.form diff --git a/src/Классы/ДанныеФормы.os b/src/Классы/ДанныеФормы.os new file mode 100644 index 0000000..904a388 --- /dev/null +++ b/src/Классы/ДанныеФормы.os @@ -0,0 +1,381 @@ +////////////////////////////////////////////////////////////////////////////////// +// +// Класс предназначен для чтения данных из файлов форм объектов и их последующей +// обработки. +// +// (с) BIA Technologies, LLC +// +////////////////////////////////////////////////////////////////////////////////// + +// BSLLS:LineLength-off + +#Область ОписаниеПеременных + +Перем ДанныеФормы; // Массив строк файла формы +Перем ДанныеБазовойФормы; // Массив строк файла формы +Перем ФорматEDT; // Булево, определяющее формат данных формы +Перем ЭлементыФормы; // +Перем ЭлементыБазовойФормы; // +Перем ТаблицаДублей; // +Перем СвободныеИдентификаторы; // +Перем ПоследнийИдентификатор; // + +Перем ФормаИзменена; // Флаг, отражающий наличие внесенных в форму изменений + +#КонецОбласти + +#Область Конструктор + +// Инициализация объекта. +// +// Параметры: +// Файл - Файл - объект файла формы, данные которой нужно прочитать. +// +Процедура ПриСозданииОбъекта(Файл) + Если НЕ ЗначениеЗаполнено(Файл) Тогда + ВызватьИсключение "В конструктор объекта не передан файл формы"; + КонецЕсли; + + Если НЕ Файл.Существует() Тогда + ВызватьИсключение СтрШаблон("Не найден файл: %1", Файл.ПолноеИмя); + КонецЕсли; + + ФорматEDT = ТипыФайлов.ЭтоФайлОписанияФормыEDT(Файл); + Если НЕ ФорматEDT И НЕ ТипыФайлов.ЭтоФайлОписанияФормыКонфигуратора(Файл) Тогда + ВызватьИсключение СтрШаблон("Файл '%1' не является файлом формы.", Файл.ПолноеИмя); + КонецЕсли; + + ДанныеФормы = Новый Массив; + ДанныеБазовойФормы = Новый Массив; + ФормаИзменена = Ложь; + + Если ФорматEDT Тогда + ПрочитатьДанныеФормыВФорматеEDT(Файл); + Иначе + ПрочитатьДанныеФормыВФорматеКонфигуратора(Файл); + КонецЕсли; + + ЭлементыБазовойФормы = ТаблицаЭлементовФормы(ДанныеБазовойФормы); + Если НЕ ФорматEDT Тогда + СкорректироватьПутьКЭлементам(ЭлементыБазовойФормы); + КонецЕсли; + ЭлементыФормы = ТаблицаЭлементовФормы(ДанныеФормы); +КонецПроцедуры + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Позволяет определить, является ли обрабатываемая форма формой расширения. +// +// Возвращаемое значение: +// Булево - признак, является является ли обрабатываемая форма формой расширения, проверка происходит +// по наличию данных базовой формы. +// +Функция ЭтоФормаРасширения() Экспорт + Возврат ДанныеБазовойФормы <> Неопределено И ДанныеБазовойФормы.Количество() > 0; +КонецФункции + +// Проверяет, существуют ли дубли среди идентификаторов объектов формы. +// +// Возвращаемое значение: +// Булево - признак наличия дублей. +// +Функция ЕстьДублиИдентификаторов() Экспорт + Возврат ТаблицаДублей().Количество() > 0 И ТаблицаДублей(0).Количество > 1; +КонецФункции + +// Определяет, были ли внесены изменения в текст формы. +// +// Возвращаемое значение: +// Булево - признак наличия изменений в тексте формы. +// +Функция ФормаИзменена() Экспорт + Возврат ФормаИзменена; +КонецФункции + +// При наличии у формы базовой формы, заменяет идентификаторы всех заимствованных объектов на идентификаторы +// базовой формы. Поиск заимствованных объектов выполняется по полному пути и имени объекта. +// +Процедура ВосстановитьСвязьЭлементовСБазовойФормой() Экспорт + Для Каждого СтрокаЭлемента Из ЭлементыБазовойФормы Цикл + НайденныеСтроки = ЭлементыФормы.НайтиСтроки(Новый Структура("Путь, Элемент", СтрокаЭлемента.Путь, СтрокаЭлемента.Элемент)); + Если НайденныеСтроки.Количество() > 1 Тогда + ВызватьИсключение СтрШаблон("На форме найдено более одного экземпляра реквизита: %1", СтрокаЭлемента.Путь); + ИначеЕсли НайденныеСтроки.Количество() = 0 Тогда + Продолжить; + Иначе + НайденнаяСтрока = НайденныеСтроки[0]; + ФормаИзменена = ФормаИзменена ИЛИ (НайденнаяСтрока.НовыйИдентификатор <> СтрокаЭлемента.Идентификатор); + + НайденнаяСтрока.НовыйИдентификатор = СтрокаЭлемента.Идентификатор; + НайденнаяСтрока.Заимствован = Истина; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +// Для каждого найденного в форме дубля идентификатора выполняет его замену на свободный идентификатор. +// +Процедура ЗаменитьДублиИдентификаторов() Экспорт + Для Каждого СтрокаДубля Из ТаблицаДублей() Цикл + Если СтрокаДубля.Количество = 1 Тогда + Прервать; + КонецЕсли; + + НайденныеСтроки = ЭлементыФормы.НайтиСтроки(Новый Структура("НовыйИдентификатор", СтрокаДубля.НовыйИдентификатор)); + ЕстьЗаимствованныйЭлемент = Ложь; + Для Каждого СтрокаТЧ Из НайденныеСтроки Цикл + Если НЕ СтрокаТЧ.Заимствован Тогда + Продолжить; + КонецЕсли; + + ЕстьЗаимствованныйЭлемент = Истина; + Прервать; + КонецЦикла; + + Если ЕстьЗаимствованныйЭлемент Тогда + Для Каждого СтрокаТЧ Из НайденныеСтроки Цикл + Если СтрокаТЧ.Заимствован Тогда + Продолжить; + КонецЕсли; + + СтрокаТЧ.НовыйИдентификатор = СвободныйИдентификатор(); + ФормаИзменена = Истина; + КонецЦикла; + Иначе + Для Индекс = 0 По НайденныеСтроки.ВГраница() - 1 Цикл + СтрокаТЧ = НайденныеСтроки[Индекс]; + СтрокаТЧ.НовыйИдентификатор = СвободныйИдентификатор(); + ФормаИзменена = Истина; + КонецЦикла; + КонецЕсли; + КонецЦикла; +КонецПроцедуры + +// Выполняет запись данных формы в файл. +// +// Параметры: +// Файл - Файл - объект файла, содержащий полное имя файла, в который должна быть произведена запись. +// +Процедура Записать(Файл) Экспорт + Кодировка = ФайловыеОперации.ОпределитьКодировку(Файл.ПолноеИмя); + ЗаписьТекста = Новый ЗаписьТекста(Файл.ПолноеИмя, Кодировка); + + Для Каждого СтрокаТЧ Из ЭлементыФормы Цикл + Если СтрокаТЧ.Идентификатор = СтрокаТЧ.НовыйИдентификатор Тогда + Продолжить; + КонецЕсли; + + Шаблон = ?(ФорматEDT, "%1", "id=""%1"""); + ИсходнаяСтрока = СтрШаблон(Шаблон, СтрокаТЧ.Идентификатор); + СтрокаЗамены = СтрШаблон(Шаблон, СтрокаТЧ.НовыйИдентификатор); + + ДанныеФормы[СтрокаТЧ.НомерСтроки] = СтрЗаменить(ДанныеФормы[СтрокаТЧ.НомерСтроки], ИсходнаяСтрока, СтрокаЗамены); + КонецЦикла; + + ШаблонЗаменыБазовойФормы = ШаблонЗаменыБазовойФормы(); + Для Каждого СтрокаФормы Из ДанныеФормы Цикл + Если НЕ ФорматEDT И СтрНайти(СтрокаФормы, ШаблонЗаменыБазовойФормы) > 0 Тогда + Для Каждого СтрокаБазовойФормы Из ДанныеБазовойФормы Цикл + ЗаписьТекста.ЗаписатьСтроку(СтрокаБазовойФормы); + КонецЦикла; + Иначе + ЗаписьТекста.ЗаписатьСтроку(СтрокаФормы); + КонецЕсли; + КонецЦикла; + + ЗаписьТекста.Закрыть(); +КонецПроцедуры + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура ПрочитатьДанныеФормыВФорматеКонфигуратора(Файл) + Кодировка = ФайловыеОперации.ОпределитьКодировку(Файл.ПолноеИмя); + ЧтениеТекста = Новый ЧтениеТекста(Файл.ПолноеИмя, Кодировка); + + ЧтениеБлокаБазовойФормы = Ложь; + ИмяБлокаБазовойФормы = ИмяБлокаБазовойФормы(); + Стр = ЧтениеТекста.ПрочитатьСтроку(); + Пока Стр <> Неопределено Цикл + Если СтрНайти(Стр, ИмяБлокаБазовойФормы) > 0 Тогда + Если ЧтениеБлокаБазовойФормы Тогда + // Завершение чтения блока + ЧтениеБлокаБазовойФормы = Ложь; + ДанныеФормы.Добавить(ШаблонЗаменыБазовойФормы()); + Иначе + // Начало чтения блока + ЧтениеБлокаБазовойФормы = Истина; + КонецЕсли; + КонецЕсли; + + Если ЧтениеБлокаБазовойФормы Тогда + ДанныеБазовойФормы.Добавить(Стр); + Иначе + ДанныеФормы.Добавить(Стр); + КонецЕсли; + + Стр = ЧтениеТекста.ПрочитатьСтроку(); + КонецЦикла; + + ЧтениеТекста.Закрыть(); +КонецПроцедуры + +Процедура ПрочитатьДанныеФормыВФорматеEDT(Файл) + БазоваяФорма = Новый Файл(ОбъединитьПути(Файл.Путь, ТипыФайлов.ПутьКФайлуБазовойФормы())); + Если БазоваяФорма.Существует() Тогда + ДанныеБазовойФормы = СтрокиФайлаВФорматеEDT(БазоваяФорма); + КонецЕсли; + + ДанныеФормы = СтрокиФайлаВФорматеEDT(Файл); +КонецПроцедуры + +Функция СтрокиФайлаВФорматеEDT(Файл) + Кодировка = ФайловыеОперации.ОпределитьКодировку(Файл.ПолноеИмя); + ЧтениеТекста = Новый ЧтениеТекста(Файл.ПолноеИмя, Кодировка); + СодержимоеФайла = Новый Массив; + + Стр = ЧтениеТекста.ПрочитатьСтроку(); + Пока Стр <> Неопределено Цикл + СодержимоеФайла.Добавить(Стр); + Стр = ЧтениеТекста.ПрочитатьСтроку(); + КонецЦикла; + + ЧтениеТекста.Закрыть(); + + Возврат СодержимоеФайла; +КонецФункции + +Функция ТаблицаЭлементовФормы(МассивСтрок) + ТаблицаЭлементов = НоваяТаблицаЭлементов(); + Если МассивСтрок.Количество() = 0 Тогда + Возврат ТаблицаЭлементов; + КонецЕсли; + + ЧтениеДанных = Новый ЧтениеДанныхФормы(МассивСтрок); + Если ФорматEDT Тогда + ИмяЭлемента = ""; + Пока ЧтениеДанных.Прочитать() Цикл + Если ЧтениеДанных.Имя = "name" Тогда + ИмяЭлемента = ЧтениеДанных.Значение; + КонецЕсли; + Если ЧтениеДанных.Имя = "id" И ИмяЭлемента <> "" Тогда + Идентификатор = Число(ЧтениеДанных.Значение); + ДобавитьЭлемент(ТаблицаЭлементов, ЧтениеДанных.Путь(), ИмяЭлемента, Идентификатор, ЧтениеДанных.НомерСтроки()); + КонецЕсли; + КонецЦикла; + Иначе + Пока ЧтениеДанных.Прочитать() Цикл + Идентификатор = ЧтениеДанных.ИдентификаторЭлемента(); + ИмяЭлемента = ЧтениеДанных.ИмяЭлемента(); + Если Идентификатор <> Неопределено И ИмяЭлемента <> Неопределено Тогда + Идентификатор = Число(Идентификатор); + ДобавитьЭлемент(ТаблицаЭлементов, ЧтениеДанных.Путь(), ИмяЭлемента, Идентификатор, ЧтениеДанных.НомерСтроки()); + КонецЕсли; + КонецЦикла; + КонецЕсли; + + ТаблицаЭлементов.Индексы.Добавить("Путь, Элемент"); + ТаблицаЭлементов.Индексы.Добавить("НовыйИдентификатор"); + + Возврат ТаблицаЭлементов; +КонецФункции + +Функция НоваяТаблицаЭлементов() + ТаблицаЭлементов = Новый ТаблицаЗначений; + ТаблицаЭлементов.Колонки.Добавить("Путь"); + ТаблицаЭлементов.Колонки.Добавить("Элемент"); + ТаблицаЭлементов.Колонки.Добавить("Идентификатор"); + ТаблицаЭлементов.Колонки.Добавить("НовыйИдентификатор"); + ТаблицаЭлементов.Колонки.Добавить("НомерСтроки"); + ТаблицаЭлементов.Колонки.Добавить("Количество"); + ТаблицаЭлементов.Колонки.Добавить("Заимствован"); + + Возврат ТаблицаЭлементов; +КонецФункции + +Процедура ДобавитьЭлемент(ТаблицаЭлементов, Путь, Элемент, Идентификатор, НомерСтроки) + Если НЕ ЗначениеЗаполнено(Элемент) ИЛИ НомерСтроки < 0 Тогда + Возврат; + КонецЕсли; + + НоваяСтрока = ТаблицаЭлементов.Добавить(); + НоваяСтрока.Путь = Путь; + НоваяСтрока.Элемент = Элемент; + НоваяСтрока.Идентификатор = Идентификатор; + НоваяСтрока.НовыйИдентификатор = Идентификатор; + НоваяСтрока.НомерСтроки = НомерСтроки; + НоваяСтрока.Количество = 1; + НоваяСтрока.Заимствован = Ложь; +КонецПроцедуры + +Процедура ЗаполнитьСвободныеИдентификаторы(ТаблицаИдентификаторов) + ПоследнийИдентификатор = ТаблицаИдентификаторов[ТаблицаИдентификаторов.Количество() - 1].НовыйИдентификатор; + СвободныеИдентификаторы = Новый Массив; + + ПредыдущийИдентификатор = 0; + ВсегоИдентификаторов = ТаблицаИдентификаторов.Итог("Количество"); + Для Каждого СтрокаТЧ Из ТаблицаИдентификаторов Цикл + ТекущийИдентификатор = Число(СтрокаТЧ.НовыйИдентификатор); + Если ТекущийИдентификатор < ПредыдущийИдентификатор Тогда + Продолжить; + КонецЕсли; + + Для Идентификатор = ПредыдущийИдентификатор + 1 По ТекущийИдентификатор - 1 Цикл + СвободныеИдентификаторы.Добавить(Идентификатор); + Если СвободныеИдентификаторы.Количество() >= ВсегоИдентификаторов Тогда + Возврат; + КонецЕсли; + КонецЦикла; + ПредыдущийИдентификатор = ТекущийИдентификатор; + КонецЦикла; +КонецПроцедуры + +Процедура СкорректироватьПутьКЭлементам(ТаблицаЭлементов) + ИмяБлокаБазовойФормы = ИмяБлокаБазовойФормы(); + Для Каждого СтрокаТЧ Из ТаблицаЭлементов Цикл + СтрокаТЧ.Путь = СтрЗаменить(СтрокаТЧ.Путь, ИмяБлокаБазовойФормы, "Form"); + КонецЦикла; +КонецПроцедуры + +Процедура ЗаполнитьТаблицуДублей() + ТаблицаДублей = ЭлементыФормы.Скопировать(); + + ТаблицаДублей.Сортировать("НовыйИдентификатор"); + ЗаполнитьСвободныеИдентификаторы(ТаблицаДублей); + + ТаблицаДублей.Свернуть("НовыйИдентификатор", "Количество"); + ТаблицаДублей.Сортировать("Количество УБЫВ"); +КонецПроцедуры + +Функция ТаблицаДублей(НомерСтроки = Неопределено) + Если ТаблицаДублей = Неопределено Тогда + ЗаполнитьТаблицуДублей(); + КонецЕсли; + + ПолучитьТолькоСтроку = (ТипЗнч(НомерСтроки) = Тип("Число") И НомерСтроки >= 0 И НомерСтроки <= ТаблицаДублей.Количество() - 1); + + Возврат ?(ПолучитьТолькоСтроку, ТаблицаДублей[НомерСтроки], ТаблицаДублей); +КонецФункции + +Функция СвободныйИдентификатор() + Если СвободныеИдентификаторы.Количество() > 0 Тогда + СвободныйИдентификатор = СвободныеИдентификаторы[0]; + СвободныеИдентификаторы.Удалить(0); + Возврат СвободныйИдентификатор; + Иначе + ПоследнийИдентификатор = ПоследнийИдентификатор + 1; + Возврат ПоследнийИдентификатор; + КонецЕсли; +КонецФункции + +Функция ШаблонЗаменыБазовойФормы() + Возврат ""; +КонецФункции + +Функция ИмяБлокаБазовойФормы() + Возврат "BaseForm"; +КонецФункции + +#КонецОбласти diff --git a/src/Классы/ЧтениеДанныхФормы.os b/src/Классы/ЧтениеДанныхФормы.os new file mode 100644 index 0000000..119a8d1 --- /dev/null +++ b/src/Классы/ЧтениеДанныхФормы.os @@ -0,0 +1,263 @@ +////////////////////////////////////////////////////////////////////////////////// +// +// Класс предназначен для получения данных элементов и реквизитов формы из +// текста файла формы +// +// (с) BIA Technologies, LLC +// +////////////////////////////////////////////////////////////////////////////////// + +#Область ОписаниеПеременных + +Перем МассивСтрок; +Перем Курсор; +Перем ТипЭлемента; +Перем Элементы; +Перем СтрокаАтрибутов; +Перем Атрибуты; + +Перем ВыражениеНачалоЭлемента; +Перем ВыражениеКонецЭлемента; +Перем ВыражениеСтрокаЭлемента; +Перем ВыражениеСтрокаСоЗначением; +Перем ВыражениеЗначенияАтрибутов; + +Перем Имя Экспорт; +Перем Значение Экспорт; + +#КонецОбласти + +#Область Конструктор + +// Инициализация объекта. +// +// Параметры: +// ДанныеФормы - Массив из Строка - массив строк, прочитанных из файла формы. +// +Процедура ПриСозданииОбъекта(ДанныеФормы) + Если ТипЗнч(ДанныеФормы) <> Тип("Массив") Тогда + ВызватьИсключение "Переданный параметр не является массивом"; + КонецЕсли; + + МассивСтрок = ДанныеФормы; + Элементы = Новый Массив; + + ВыражениеНачалоЭлемента = РегулярныеВыражения.Создать("<([\w:]+)([\w :=""\/.-]*?)>"); + ВыражениеКонецЭлемента = РегулярныеВыражения.Создать(""); + ВыражениеСтрокаЭлемента = РегулярныеВыражения.Создать("<([\w:]+)([\w :=""\/.-]*?)/>"); + ВыражениеСтрокаСоЗначением = РегулярныеВыражения.Создать("<([\w:]+)([\w :=""\/.-]*?)>(.*)"); + ВыражениеЗначенияАтрибутов = РегулярныеВыражения.Создать("([\w:]+)=""([\w:\/.-]+)"""); + + Сбросить(); +КонецПроцедуры + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +// Метод последовательного чтения и анализа данных строк формы. При каждом вызове курсор сдвигается на следующую строку. +// +// Возвращаемое значение: +// Булево - Истина в случае, если строка была успешно разобрана, Ложь, если были обработаны все строки. +// +Функция Прочитать() Экспорт + Курсор = Курсор + 1; + Если Курсор < 0 ИЛИ Курсор > МассивСтрок.ВГраница() Тогда + ОчиститьЗначенияПеременных(); + Возврат Ложь; + КонецЕсли; + + РазобратьТекущуюСтроку(); + Возврат Истина; +КонецФункции + +// Сбрасывает значение курсора на начало файла, позволяя обойти все строки заново. +// +Процедура Сбросить() Экспорт + Курсор = -1; + ОчиститьЗначенияПеременных(); +КонецПроцедуры + +// Возвращает иерархию элементов формы, являющихся владельцами текущей обрабатываемой строки. +// +// Возвращаемое значение: +// Строка - строка иерархии элементов формы, разделенных точкой. +// +Функция Путь() Экспорт + Возврат СтрСоединить(Элементы, "."); +КонецФункции + +// Возвращает номер текущей обрабатываемой строки. +// +// Возвращаемое значение: +// Число, Неопределено - Если обработка файла не началась, возвращает Неопределено, иначе - номер обрабатываемой строки. +// +Функция НомерСтроки() Экспорт + Возврат ?(Курсор < 0, -1, Курсор); +КонецФункции + +// Возвращает значение идентификатора текущего элемента. Для формата конфигуратора он хранится в атрибутах тэга, для +// формата EDT - это отдельный тэг. +// +// Возвращаемое значение: +// Строка, Неопределено - идентификатор элемента или Неопределено, если у элемента идентификатора нет. +// +Функция ИдентификаторЭлемента() Экспорт + Возврат ?(Имя = "id", Значение, ЗначениеАтрибута("id")); +КонецФункции + +// Возвращает значение имени текущего элемента. Для формата конфигуратора оно хранится в атрибутах тэга, для +// формата EDT - это отдельный тэг. +// +// Возвращаемое значение: +// Строка, Неопределено - имя элемента или Неопределено, если у элемента нет имени. +// +Функция ИмяЭлемента() Экспорт + Возврат ?(Имя = "name", Значение, ЗначениеАтрибута("name")); +КонецФункции + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Процедура РазобратьТекущуюСтроку() + ОчиститьЗначенияПеременных(); + ТекущаяСтрока = МассивСтрок[Курсор]; + + Совпадения = ВыражениеСтрокаСоЗначением.НайтиСовпадения(ТекущаяСтрока); + Если Совпадения.Количество() > 0 Тогда + Совпадение = Совпадения[0]; + НачалоТэга = Совпадение.Группы[1].Значение; + СтрокаАтрибутов = Совпадение.Группы[2].Значение; + Атрибуты = ЗначенияАтрибутов(); + ТекстЭлемента = Совпадение.Группы[3].Значение; + КонецТэга = Совпадение.Группы[4].Значение; + + Если НачалоТэга <> КонецТэга Тогда + ВызватьИсключение СтрШаблон("Неизвестный формат строки: %1", Совпадение.Группы[0].Значение); + КонецЕсли; + + Имя = НачалоТэга; + Значение = ТекстЭлемента; + ТипЭлемента = ТипСтрокаЭлемента(); + + ОбновитьИмяЭлемента(); + + Возврат; + КонецЕсли; + + Совпадения = ВыражениеСтрокаЭлемента.НайтиСовпадения(ТекущаяСтрока); + Если Совпадения.Количество() > 0 Тогда + Совпадение = Совпадения[0]; + Имя = Совпадение.Группы[1].Значение; + СтрокаАтрибутов = Совпадение.Группы[2].Значение; + Атрибуты = ЗначенияАтрибутов(); + ТипЭлемента = ТипСтрокаЭлемента(); + + Возврат; + КонецЕсли; + + Совпадения = ВыражениеКонецЭлемента.НайтиСовпадения(ТекущаяСтрока); + Если Совпадения.Количество() > 0 Тогда + Совпадение = Совпадения[0]; + Имя = Совпадение.Группы[1].Значение; + ТипЭлемента = ТипКонецТэга(); + + Если Элементы.Количество() > 0 Тогда + Элементы.Удалить(Элементы.ВГраница()); + КонецЕсли; + + Возврат; + КонецЕсли; + + Совпадения = ВыражениеНачалоЭлемента.НайтиСовпадения(ТекущаяСтрока); + Если Совпадения.Количество() > 0 Тогда + Совпадение = Совпадения[0]; + Имя = Совпадение.Группы[1].Значение; + СтрокаАтрибутов = Совпадение.Группы[2].Значение; + Атрибуты = ЗначенияАтрибутов(); + ТипЭлемента = ТипНачалоТэга(); + + Элементы.Добавить(Имя); + + ОбновитьИмяЭлемента(); + Возврат; + КонецЕсли; + + Если СтрНачинаетсяС(ТекущаяСтрока, " 0 Тогда + Элементы[Элементы.ВГраница()] = СтрШаблон("%1.%2", Элементы[Элементы.ВГраница()], ИмяЭлемента); + КонецЕсли; +КонецПроцедуры + +Функция ЗначенияАтрибутов() + Результат = Новый Соответствие; + Если ПустаяСтрока(СтрокаАтрибутов) Тогда + Возврат Результат; + КонецЕсли; + + Совпадения = ВыражениеЗначенияАтрибутов.НайтиСовпадения(СтрокаАтрибутов); + Если Совпадения.Количество() = 0 Тогда + Возврат Результат; + КонецЕсли; + + Для Каждого Совпадение Из Совпадения Цикл + Атрибут = Совпадение.Группы[1].Значение; + ЗначениеАтрибута = Совпадение.Группы[2].Значение; + Результат.Вставить(Атрибут, ЗначениеАтрибута) + КонецЦикла; + + Возврат Результат; +КонецФункции + +Функция ЗначениеАтрибута(ИмяАтрибута) + Возврат Атрибуты.Получить(ИмяАтрибута); +КонецФункции + +Функция ТипНачалоТэга() + Возврат "НачалоТэга"; +КонецФункции + +Функция ТипКонецТэга() + Возврат "КонецТэга"; +КонецФункции + +Функция ТипСтрокаЭлемента() + Возврат "СтрокаЭлемента"; +КонецФункции + +Функция ТипЗаголовокФайла() + Возврат "ЗаголовокФайла"; +КонецФункции + +Функция ТипКомментарий() + Возврат "Комментарий"; +КонецФункции + +Функция ТипМногострочнаяСтрока() + Возврат "МногострочнаяСтрока"; +КонецФункции + +Процедура ОчиститьЗначенияПеременных() + ТипЭлемента = ""; + Имя = ""; + Значение = ""; + СтрокаАтрибутов = ""; + Атрибуты = Новый Соответствие; +КонецПроцедуры + +#КонецОбласти diff --git a/src/Модули/ТипыФайлов.os b/src/Модули/ТипыФайлов.os index 1b27382..01b0b61 100644 --- a/src/Модули/ТипыФайлов.os +++ b/src/Модули/ТипыФайлов.os @@ -118,7 +118,7 @@ КонецФункции -// ЭтоФайлОписанияФормыEDT +// ЭтоФайлОписанияФормыКонфигуратора // Возвращает истину, если файл является файлом описания формы в формате конфигуратора // Параметры: // Файл - Файл - Полный путь к файлу @@ -126,7 +126,7 @@ // Возвращаемое значение: // Булево - Признак // -Функция ЭтоФайлОписанияФормыКонфигуратора(Файл) +Функция ЭтоФайлОписанияФормыКонфигуратора(Файл) Экспорт Возврат СтрСравнить(Файл.Имя, "Form.xml") = 0; @@ -146,6 +146,26 @@ КонецФункции +// Возвращает истину, если передан файл базовой формы расширения в формате EDT. +// Параметры: +// Файл - Файл - Полный путь к файлу +// +// Возвращаемое значение: +// Булево - Определяет, является ли переданный файл базовой формой. +// +Функция ЭтоФайлБазовойФормы(Файл) Экспорт + Возврат СтрЗаканчиваетсяНа(Файл.ПолноеИмя, ПутьКФайлуБазовойФормы()); +КонецФункции + +// Возвращает относительный путь к файлу базовой формы для формы расширения EDT. +// +// Возвращаемое значение: +// Строка - Относительный путь к файлу базовой формы. +// +Функция ПутьКФайлуБазовойФормы() Экспорт + Возврат ОбъединитьПути("BaseForm", "Form.form"); +КонецФункции + // ЭтоФайлЧастьТеста // Возвращает истину, если файл относится к тестовому расширению // Параметры: diff --git a/src/СценарииОбработки/КорректировкаXMLФорм.os b/src/СценарииОбработки/КорректировкаXMLФорм.os index 6ed2343..1244f47 100644 --- a/src/СценарииОбработки/КорректировкаXMLФорм.os +++ b/src/СценарииОбработки/КорректировкаXMLФорм.os @@ -41,11 +41,22 @@ КонецЕсли; ФорматEDT = ТипыФайлов.ЭтоФайлОписанияФормыEDT(АнализируемыйФайл); - Если ТипыФайлов.ЭтоФайлОписанияФормы(АнализируемыйФайл) ИЛИ ФорматEDT Тогда + Если ФорматEDT ИЛИ ТипыФайлов.ЭтоФайлОписанияФормыКонфигуратора(АнализируемыйФайл) Тогда Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); - Если ОбновитьИндексыЭлементовВФорме(АнализируемыйФайл.ПолноеИмя, ФорматEDT) Тогда + Если ФорматEDT Тогда + Если ТипыФайлов.ЭтоФайлБазовойФормы(АнализируемыйФайл) Тогда + Возврат Истина; + Иначе + ФайлБазовойФормы = Новый Файл(ОбъединитьПути(АнализируемыйФайл.Путь, ТипыФайлов.ПутьКФайлуБазовойФормы())); + Если ФайлБазовойФормы.Существует() И ОбновитьИндексыЭлементовВФорме(ФайлБазовойФормы) Тогда + ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(ФайлБазовойФормы.ПолноеИмя); + КонецЕсли; + КонецЕсли; + КонецЕсли; + + Если ОбновитьИндексыЭлементовВФорме(АнализируемыйФайл) Тогда ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя); КонецЕсли; @@ -57,115 +68,20 @@ КонецФункции // ОбработатьФайл() -Функция ОбновитьИндексыЭлементовВФорме(Знач ИмяФайла, EDT = Ложь) - - СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла); - - ПаттернID = ?(EDT, "([0-9]+)<\/id>", "id=\""([0-9]+)\"""); - - Регексп = Новый РегулярноеВыражение(ПаттернID); - Регексп.ИгнорироватьРегистр = ИСТИНА; - Регексп.Многострочный = ИСТИНА; - ГруппыИндексов = Регексп.НайтиСовпадения(СодержимоеФайла); - Если ГруппыИндексов.Количество() = 0 Тогда - - Возврат ЛОЖЬ; - +Функция ОбновитьИндексыЭлементовВФорме(Файл) + ДанныеФормы = Новый ДанныеФормы(Файл); + Если ДанныеФормы.ЭтоФормаРасширения() Тогда + ДанныеФормы.ВосстановитьСвязьЭлементовСБазовойФормой(); КонецЕсли; - ТЧ = Новый ТаблицаЗначений; - ТЧ.Колонки.Добавить("Значение"); - ТЧ.Колонки.Добавить("Количество"); - - Для Каждого ГруппаИндексов Из ГруппыИндексов Цикл - - Значение = Число(ГруппаИндексов.Группы[1].Значение); - - СтрокаТЧ = ТЧ.Найти(Значение, "Значение"); - Если СтрокаТЧ = Неопределено Тогда - СтрокаТЧ = ТЧ.Добавить(); - СтрокаТЧ.Значение = Значение; - СтрокаТЧ.Количество = 1; - Иначе - СтрокаТЧ.Количество = СтрокаТЧ.Количество + 1; - КонецЕсли; - КонецЦикла; - - ТЧ.Свернуть("Значение", "Количество"); - - Если ТЧ.Количество() = ГруппыИндексов.Количество() Тогда - Возврат Ложь; + Если ДанныеФормы.ЕстьДублиИдентификаторов() Тогда + ДанныеФормы.ЗаменитьДублиИдентификаторов(); КонецЕсли; - ТЧ.Сортировать("Значение УБЫВ"); - ПоследнийНомер = ТЧ[0].Значение; - ТЧ.Сортировать("Количество УБЫВ"); - Если ТЧ[0].Количество = 1 Тогда - + Если ДанныеФормы.ФормаИзменена() Тогда + ДанныеФормы.Записать(Файл); Возврат Истина; - - Иначе - - СвободныеИдентификаторы = ВычислитьСвободныеИдентификаторы(ТЧ); - КонецЕсли; - Для каждого СтрокаТЧ Из ТЧ Цикл - - Если СтрокаТЧ.Количество = 1 Тогда - - Прервать; - - КонецЕсли; - - Пока СтрокаТЧ.Количество > 1 Цикл - - ИсходнаяСтрока = ?(EDT, "" + СтрокаТЧ.Значение + "<", "id=""" + СтрокаТЧ.Значение + """"); - СвободныйИдентификатор = ПолучитьСвободныйИдентификатор(СвободныеИдентификаторы, ПоследнийНомер); - СтрокаЗамены = ?(EDT, "" + СвободныйИдентификатор + "<", "id=""" + СвободныйИдентификатор + """"); - - Поз = СтрНайти(СодержимоеФайла, ИсходнаяСтрока); - - НоваяСтрока = Лев(СодержимоеФайла, Поз - 1) + СтрокаЗамены; - СодержимоеФайла = НоваяСтрока + Сред(СодержимоеФайла, Поз + СтрДлина(ИсходнаяСтрока)); - - СтрокаТЧ.Количество = СтрокаТЧ.Количество - 1; - - КонецЦикла; - - КонецЦикла; - - ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла); - - Возврат Истина; - -КонецФункции - -Функция ВычислитьСвободныеИдентификаторы(ТЧ) - СписокЗначений = Новый СписокЗначений(); - СписокЗначений.ЗагрузитьЗначения(ТЧ.ВыгрузитьКолонку("Значение")); - СписокЗначений.СортироватьПоЗначению(); - - СвободныеИдентификаторы = Новый Массив; - Для Ит = 0 По СписокЗначений.Количество() - 2 Цикл - Если СписокЗначений[Ит].Значение = СписокЗначений[Ит + 1].Значение Тогда - Продолжить; - КонецЕсли; - Для Ид = СписокЗначений[Ит].Значение + 1 По СписокЗначений[Ит + 1].Значение - 1 Цикл - СвободныеИдентификаторы.Добавить(Ид); - КонецЦикла; - КонецЦикла; - - Возврат СвободныеИдентификаторы; -КонецФункции - -Функция ПолучитьСвободныйИдентификатор(СвободныеИдентификаторы, ПоследнийНомер) - Если СвободныеИдентификаторы.Количество() Тогда - СвободныйИдентификатор = СвободныеИдентификаторы[0]; - СвободныеИдентификаторы.Удалить(0); - Возврат СвободныйИдентификатор; - Иначе - ПоследнийНомер = ПоследнийНомер + 1; - Возврат ПоследнийНомер; - КонецЕсли; + Возврат Ложь; КонецФункции diff --git a/tests/fixtures/КорректировкаXMLФорм/v8config.json b/tests/fixtures/КорректировкаXMLФорм/v8config.json new file mode 100644 index 0000000..cd9250b --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/v8config.json @@ -0,0 +1,48 @@ +{ + "Precommt4onecСценарии": { + "ИспользоватьСценарииРепозитория": false, + "КаталогЛокальныхСценариев": "", + "ГлобальныеСценарии": [ + "ВставкаКопирайтов.os", + "ДобавлениеПробеловПередКлючевымиСловами.os", + "ЗапретИспользованияПерейти.os", + "ИсправлениеНеКаноническогоНаписания.os", + "КорректировкаXMLФорм.os", + "ОбработкаЮнитТестов.os", + "ОтключениеПолнотекстовогоПоиска.os", + "ОтключениеРазрешенияИзменятьФорму.os", + "ПроверкаДублейПроцедурИФункций.os", + "ПроверкаКорректностиИнструкцийПрепроцессора.os", + "ПроверкаКорректностиОбластей.os", + "ПроверкаНецензурныхСлов.os", + "РазборОбычныхФормНаИсходники.os", + "РазборОтчетовОбработокРасширений.os", + "СинхронизацияОбъектовМетаданныхИФайлов.os", + "СортировкаСостава.os", + "УдалениеДублейМетаданных.os", + "УдалениеЛишнихКонцевыхПробелов.os", + "УдалениеЛишнихПустыхСтрок.os" + ], + "ОтключенныеСценарии": [], + "Проекты": {}, + "НастройкиСценариев": { + "ВставкаКопирайтов": { + "ИгнорироватьМодулиОбъектовПоставки": true, + "ПутьКФайлуКопирайта": "COPYRIGHT", + "ИсключаемыеТэги": [ + "// IMPORT" + ] + }, + "ОтключениеПолнотекстовогоПоиска": { + "МетаданныеДляИсключения": {} + }, + "ПроверкаНецензурныхСлов": { + "ФайлСНецензурнымиСловами": "НецензурныеСлова.txt" + }, + "РазборОтчетовОбработокРасширений": { + "ИспользоватьНастройкиПоУмолчанию": true, + "ВерсияПлатформы": "" + } + } + } +} \ No newline at end of file diff --git a/tests/fixtures/КорректировкаXMLФорм/До/Configurator/1/Form.xml b/tests/fixtures/КорректировкаXMLФорм/До/Configurator/1/Form.xml new file mode 100644 index 0000000..759a0fd --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/До/Configurator/1/Form.xml @@ -0,0 +1,54 @@ + +
+ 800 + LockOwnerWindow + false + useIfNecessary + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + web:Green + + Right + Left + CheckBox + + + + + + + false + + + + + \ No newline at end of file diff --git a/tests/fixtures/КорректировкаXMLФорм/До/Configurator/2/Form.xml b/tests/fixtures/КорректировкаXMLФорм/До/Configurator/2/Form.xml new file mode 100644 index 0000000..1800635 --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/До/Configurator/2/Form.xml @@ -0,0 +1,111 @@ + +
+ 800 + LockOwnerWindow + false + useIfNecessary + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + web:Green + + Right + Left + CheckBox + + + + + + + false + + + + + + 800 + LockOwnerWindow + false + useIfNecessary + + Help + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + web:Green + + Right + Left + CheckBox + + + + + + + false + + + + + + + \ No newline at end of file diff --git a/tests/fixtures/КорректировкаXMLФорм/До/Configurator/3/Form.xml b/tests/fixtures/КорректировкаXMLФорм/До/Configurator/3/Form.xml new file mode 100644 index 0000000..0707de3 --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/До/Configurator/3/Form.xml @@ -0,0 +1,59 @@ + +
+ 800 + LockOwnerWindow + false + useIfNecessary + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + web:Green + + Right + Left + CheckBox + + + + + + + false + + + + + \ No newline at end of file diff --git a/tests/fixtures/КорректировкаXMLФорм/До/Configurator/4/Form.xml b/tests/fixtures/КорректировкаXMLФорм/До/Configurator/4/Form.xml new file mode 100644 index 0000000..b73aea2 --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/До/Configurator/4/Form.xml @@ -0,0 +1,121 @@ + +
+ 800 + LockOwnerWindow + false + useIfNecessary + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + web:Green + + Right + Left + CheckBox + + + + + РеквизитРасширения + + + + + + + false + + + + + + 800 + LockOwnerWindow + false + useIfNecessary + + Help + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + web:Green + + Right + Left + CheckBox + + + + + + + false + + + + + + + \ No newline at end of file diff --git a/tests/fixtures/КорректировкаXMLФорм/До/Configurator/5/Form.xml b/tests/fixtures/КорректировкаXMLФорм/До/Configurator/5/Form.xml new file mode 100644 index 0000000..8f500d0 --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/До/Configurator/5/Form.xml @@ -0,0 +1,197 @@ + +
+ 800 + LockOwnerWindow + false + useIfNecessary + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + web:Green + + Right + Left + CheckBox + + + + + РеквизитРасширения + + + + + + + false + + + + + + + + v8:ValueTable + + + + + xs:string + + 64 + Variable + + + + + + xs:decimal + + 12 + 3 + Any + + + + + + + + v8:ValueTable + + + + + xs:string + + 64 + Variable + + + + + + xs:decimal + + 12 + 3 + Any + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Команда расширения</v8:content> + </v8:item> + + ЮТКомандаРасширенияИзменениеИКонтроль + + + + + + xs:string + + 0 + Variable + + + + + + 800 + LockOwnerWindow + false + useIfNecessary + + Help + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + web:Green + + Right + Left + CheckBox + + + + + + + false + + + + + + + \ No newline at end of file diff --git a/tests/fixtures/КорректировкаXMLФорм/До/EDT/1/Form.form b/tests/fixtures/КорректировкаXMLФорм/До/EDT/1/Form.form new file mode 100644 index 0000000..6f06b4a --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/До/EDT/1/Form.form @@ -0,0 +1,110 @@ + + + + ГруппаШапка + 1 + + Использовать + 2 + true + true + + Объект.Использовать + + Right + CheckBoxField + Left + Enter + true + Left + true + + CheckBox + + + true + true + + <key>ru</key> + <value>Группа шапка</value> + + UsualGroup + + true + true + Auto + Auto + + + + Ответственный + 3 + true + true + + Объект.Ответственный + + InputField + Enter + true + Left + true + + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписатьИЗакрыть + 4 + true + true + Form.Command.ЗаписатьОбъектИЗакрыть + Auto + true + true + UserCmds + Auto + + + ФормаЗаписать + 5 + true + true + Form.Command.ЗаписатьОбъект + Auto + true + true + UserCmds + Auto + + true + true + Left + true + + Help + Write + WriteAndClose + 800 + LockOwnerWindow + true + true + Vertical + true + true + UseIfNecessary + true + true + + + + + + diff --git a/tests/fixtures/КорректировкаXMLФорм/До/EDT/2/BaseForm/Form.form b/tests/fixtures/КорректировкаXMLФорм/До/EDT/2/BaseForm/Form.form new file mode 100644 index 0000000..6f06b4a --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/До/EDT/2/BaseForm/Form.form @@ -0,0 +1,110 @@ + + + + ГруппаШапка + 1 + + Использовать + 2 + true + true + + Объект.Использовать + + Right + CheckBoxField + Left + Enter + true + Left + true + + CheckBox + + + true + true + + <key>ru</key> + <value>Группа шапка</value> + + UsualGroup + + true + true + Auto + Auto + + + + Ответственный + 3 + true + true + + Объект.Ответственный + + InputField + Enter + true + Left + true + + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписатьИЗакрыть + 4 + true + true + Form.Command.ЗаписатьОбъектИЗакрыть + Auto + true + true + UserCmds + Auto + + + ФормаЗаписать + 5 + true + true + Form.Command.ЗаписатьОбъект + Auto + true + true + UserCmds + Auto + + true + true + Left + true + + Help + Write + WriteAndClose + 800 + LockOwnerWindow + true + true + Vertical + true + true + UseIfNecessary + true + true + + + + + + diff --git a/tests/fixtures/КорректировкаXMLФорм/До/EDT/2/Form.form b/tests/fixtures/КорректировкаXMLФорм/До/EDT/2/Form.form new file mode 100644 index 0000000..6f06b4a --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/До/EDT/2/Form.form @@ -0,0 +1,110 @@ + + + + ГруппаШапка + 1 + + Использовать + 2 + true + true + + Объект.Использовать + + Right + CheckBoxField + Left + Enter + true + Left + true + + CheckBox + + + true + true + + <key>ru</key> + <value>Группа шапка</value> + + UsualGroup + + true + true + Auto + Auto + + + + Ответственный + 3 + true + true + + Объект.Ответственный + + InputField + Enter + true + Left + true + + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписатьИЗакрыть + 4 + true + true + Form.Command.ЗаписатьОбъектИЗакрыть + Auto + true + true + UserCmds + Auto + + + ФормаЗаписать + 5 + true + true + Form.Command.ЗаписатьОбъект + Auto + true + true + UserCmds + Auto + + true + true + Left + true + + Help + Write + WriteAndClose + 800 + LockOwnerWindow + true + true + Vertical + true + true + UseIfNecessary + true + true + + + + + + diff --git a/tests/fixtures/КорректировкаXMLФорм/До/EDT/3/Form.form b/tests/fixtures/КорректировкаXMLФорм/До/EDT/3/Form.form new file mode 100644 index 0000000..64fe990 --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/До/EDT/3/Form.form @@ -0,0 +1,110 @@ + + + + ГруппаШапка + 10 + + Использовать + 11 + true + true + + Объект.Использовать + + Right + CheckBoxField + Left + Enter + true + Left + true + + CheckBox + + + true + true + + <key>ru</key> + <value>Группа шапка</value> + + UsualGroup + + true + true + Auto + Auto + + + + Ответственный + 13 + true + true + + Объект.Ответственный + + InputField + Enter + true + Left + true + + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписатьИЗакрыть + 13 + true + true + Form.Command.ЗаписатьОбъектИЗакрыть + Auto + true + true + UserCmds + Auto + + + ФормаЗаписать + 14 + true + true + Form.Command.ЗаписатьОбъект + Auto + true + true + UserCmds + Auto + + true + true + Left + true + + Help + Write + WriteAndClose + 800 + LockOwnerWindow + true + true + Vertical + true + true + UseIfNecessary + true + true + + + + + + diff --git a/tests/fixtures/КорректировкаXMLФорм/До/EDT/4/BaseForm/Form.form b/tests/fixtures/КорректировкаXMLФорм/До/EDT/4/BaseForm/Form.form new file mode 100644 index 0000000..6f06b4a --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/До/EDT/4/BaseForm/Form.form @@ -0,0 +1,110 @@ + + + + ГруппаШапка + 1 + + Использовать + 2 + true + true + + Объект.Использовать + + Right + CheckBoxField + Left + Enter + true + Left + true + + CheckBox + + + true + true + + <key>ru</key> + <value>Группа шапка</value> + + UsualGroup + + true + true + Auto + Auto + + + + Ответственный + 3 + true + true + + Объект.Ответственный + + InputField + Enter + true + Left + true + + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписатьИЗакрыть + 4 + true + true + Form.Command.ЗаписатьОбъектИЗакрыть + Auto + true + true + UserCmds + Auto + + + ФормаЗаписать + 5 + true + true + Form.Command.ЗаписатьОбъект + Auto + true + true + UserCmds + Auto + + true + true + Left + true + + Help + Write + WriteAndClose + 800 + LockOwnerWindow + true + true + Vertical + true + true + UseIfNecessary + true + true + + + + + + diff --git a/tests/fixtures/КорректировкаXMLФорм/До/EDT/4/Form.form b/tests/fixtures/КорректировкаXMLФорм/До/EDT/4/Form.form new file mode 100644 index 0000000..e14da9e --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/До/EDT/4/Form.form @@ -0,0 +1,110 @@ + + + + ГруппаШапка + 1 + + Использовать + 2 + true + true + + Объект.Использовать + + Right + CheckBoxField + Left + Enter + true + Left + true + + CheckBox + + + true + true + + <key>ru</key> + <value>Группа шапка</value> + + UsualGroup + + true + true + Auto + Auto + + + + Ответственный + 3 + true + true + + Объект.Ответственный + + InputField + Enter + true + Left + true + + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписать + 4 + true + true + Form.Command.ЗаписатьОбъект + Auto + true + true + UserCmds + Auto + + + ФормаЗаписатьИЗакрыть + 5 + true + true + Form.Command.ЗаписатьОбъектИЗакрыть + Auto + true + true + UserCmds + Auto + + true + true + Left + true + + Help + Write + WriteAndClose + 800 + LockOwnerWindow + true + true + Vertical + true + true + UseIfNecessary + true + true + + + + + + diff --git a/tests/fixtures/КорректировкаXMLФорм/До/EDT/5/BaseForm/Form.form b/tests/fixtures/КорректировкаXMLФорм/До/EDT/5/BaseForm/Form.form new file mode 100644 index 0000000..6f06b4a --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/До/EDT/5/BaseForm/Form.form @@ -0,0 +1,110 @@ + + + + ГруппаШапка + 1 + + Использовать + 2 + true + true + + Объект.Использовать + + Right + CheckBoxField + Left + Enter + true + Left + true + + CheckBox + + + true + true + + <key>ru</key> + <value>Группа шапка</value> + + UsualGroup + + true + true + Auto + Auto + + + + Ответственный + 3 + true + true + + Объект.Ответственный + + InputField + Enter + true + Left + true + + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписатьИЗакрыть + 4 + true + true + Form.Command.ЗаписатьОбъектИЗакрыть + Auto + true + true + UserCmds + Auto + + + ФормаЗаписать + 5 + true + true + Form.Command.ЗаписатьОбъект + Auto + true + true + UserCmds + Auto + + true + true + Left + true + + Help + Write + WriteAndClose + 800 + LockOwnerWindow + true + true + Vertical + true + true + UseIfNecessary + true + true + + + + + + diff --git a/tests/fixtures/КорректировкаXMLФорм/До/EDT/5/Form.form b/tests/fixtures/КорректировкаXMLФорм/До/EDT/5/Form.form new file mode 100644 index 0000000..df79c18 --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/До/EDT/5/Form.form @@ -0,0 +1,249 @@ + + + + ГруппаШапка + 1 + + Использовать + 2 + true + true + + Объект.Использовать + + Right + CheckBoxField + Left + Enter + true + Left + true + + CheckBox + + + + РеквизитРасширения + 2 + true + true + + РеквизитРасширения + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + true + true + + <key>ru</key> + <value>Группа шапка</value> + + UsualGroup + + true + true + Auto + Auto + + + + Ответственный + 3 + true + true + + Объект.Ответственный + + InputField + Enter + true + Left + true + + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписать + 4 + true + true + Form.Command.ЗаписатьОбъект + Auto + true + true + UserCmds + Auto + + + ФормаЗаписатьИЗакрыть + 5 + true + true + Form.Command.ЗаписатьОбъектИЗакрыть + Auto + true + true + UserCmds + Auto + + true + true + Left + true + + Help + Write + WriteAndClose + 800 + LockOwnerWindow + true + true + Vertical + true + true + UseIfNecessary + true + true + + ТаблицаРасширения1 + 1000001 + + ValueTable + + + true + + + true + + + КолонкаСТипомСтрока + 1000002 + + String + + 64 + + + + true + + + true + + + + КолонкаСТипомЧисло + 1000003 + + Number + + 12 + 3 + + + + true + + + true + + + + + ТаблицаРасширения2 + 1000004 + + ValueTable + + + true + + + true + + + КолонкаСТипомСтрока + 1000005 + + String + + 64 + + + + true + + + true + + + + КолонкаСТипомЧисло + 1000006 + + Number + + 12 + 3 + + + + true + + + true + + + + + КомандаРасширения + + <key>ru</key> + <value>Команда расширения</value> + + 1000001 + + true + + + + ЮТКомандаРасширенияИзменениеИКонтроль + ChangeAndValidate + + + Auto + + + ПараметрРасширения + + String + + + + + + + + + diff --git a/tests/fixtures/КорректировкаXMLФорм/После/Configurator/1/Form.xml b/tests/fixtures/КорректировкаXMLФорм/После/Configurator/1/Form.xml new file mode 100644 index 0000000..759a0fd --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/После/Configurator/1/Form.xml @@ -0,0 +1,54 @@ + +
+ 800 + LockOwnerWindow + false + useIfNecessary + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + web:Green + + Right + Left + CheckBox + + + + + + + false + + + + + \ No newline at end of file diff --git a/tests/fixtures/КорректировкаXMLФорм/После/Configurator/2/Form.xml b/tests/fixtures/КорректировкаXMLФорм/После/Configurator/2/Form.xml new file mode 100644 index 0000000..1800635 --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/После/Configurator/2/Form.xml @@ -0,0 +1,111 @@ + +
+ 800 + LockOwnerWindow + false + useIfNecessary + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + web:Green + + Right + Left + CheckBox + + + + + + + false + + + + + + 800 + LockOwnerWindow + false + useIfNecessary + + Help + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + web:Green + + Right + Left + CheckBox + + + + + + + false + + + + + + + \ No newline at end of file diff --git a/tests/fixtures/КорректировкаXMLФорм/После/Configurator/3/Form.xml b/tests/fixtures/КорректировкаXMLФорм/После/Configurator/3/Form.xml new file mode 100644 index 0000000..18c3a32 --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/После/Configurator/3/Form.xml @@ -0,0 +1,59 @@ + +
+ 800 + LockOwnerWindow + false + useIfNecessary + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + web:Green + + Right + Left + CheckBox + + + + + + + false + + + + + \ No newline at end of file diff --git a/tests/fixtures/КорректировкаXMLФорм/После/Configurator/4/Form.xml b/tests/fixtures/КорректировкаXMLФорм/После/Configurator/4/Form.xml new file mode 100644 index 0000000..7bdde82 --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/После/Configurator/4/Form.xml @@ -0,0 +1,121 @@ + +
+ 800 + LockOwnerWindow + false + useIfNecessary + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + web:Green + + Right + Left + CheckBox + + + + + РеквизитРасширения + + + + + + + false + + + + + + 800 + LockOwnerWindow + false + useIfNecessary + + Help + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + web:Green + + Right + Left + CheckBox + + + + + + + false + + + + + + + \ No newline at end of file diff --git a/tests/fixtures/КорректировкаXMLФорм/После/Configurator/5/Form.xml b/tests/fixtures/КорректировкаXMLФорм/После/Configurator/5/Form.xml new file mode 100644 index 0000000..747914c --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/После/Configurator/5/Form.xml @@ -0,0 +1,197 @@ + +
+ 800 + LockOwnerWindow + false + useIfNecessary + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + web:Green + + Right + Left + CheckBox + + + + + РеквизитРасширения + + + + + + + false + + + + + + + + v8:ValueTable + + + + + xs:string + + 64 + Variable + + + + + + xs:decimal + + 12 + 3 + Any + + + + + + + + v8:ValueTable + + + + + xs:string + + 64 + Variable + + + + + + xs:decimal + + 12 + 3 + Any + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Команда расширения</v8:content> + </v8:item> + + ЮТКомандаРасширенияИзменениеИКонтроль + + + + + + xs:string + + 0 + Variable + + + + + + 800 + LockOwnerWindow + false + useIfNecessary + + Help + + + + + + + + + + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Группа шапка</v8:content> + </v8:item> + + Horizontal + Usual + None + false + + + + web:Green + + Right + Left + CheckBox + + + + + + + false + + + + + + + \ No newline at end of file diff --git a/tests/fixtures/КорректировкаXMLФорм/После/EDT/1/Form.form b/tests/fixtures/КорректировкаXMLФорм/После/EDT/1/Form.form new file mode 100644 index 0000000..6f06b4a --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/После/EDT/1/Form.form @@ -0,0 +1,110 @@ + + + + ГруппаШапка + 1 + + Использовать + 2 + true + true + + Объект.Использовать + + Right + CheckBoxField + Left + Enter + true + Left + true + + CheckBox + + + true + true + + <key>ru</key> + <value>Группа шапка</value> + + UsualGroup + + true + true + Auto + Auto + + + + Ответственный + 3 + true + true + + Объект.Ответственный + + InputField + Enter + true + Left + true + + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписатьИЗакрыть + 4 + true + true + Form.Command.ЗаписатьОбъектИЗакрыть + Auto + true + true + UserCmds + Auto + + + ФормаЗаписать + 5 + true + true + Form.Command.ЗаписатьОбъект + Auto + true + true + UserCmds + Auto + + true + true + Left + true + + Help + Write + WriteAndClose + 800 + LockOwnerWindow + true + true + Vertical + true + true + UseIfNecessary + true + true + + + + + + diff --git a/tests/fixtures/КорректировкаXMLФорм/После/EDT/2/BaseForm/Form.form b/tests/fixtures/КорректировкаXMLФорм/После/EDT/2/BaseForm/Form.form new file mode 100644 index 0000000..6f06b4a --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/После/EDT/2/BaseForm/Form.form @@ -0,0 +1,110 @@ + + + + ГруппаШапка + 1 + + Использовать + 2 + true + true + + Объект.Использовать + + Right + CheckBoxField + Left + Enter + true + Left + true + + CheckBox + + + true + true + + <key>ru</key> + <value>Группа шапка</value> + + UsualGroup + + true + true + Auto + Auto + + + + Ответственный + 3 + true + true + + Объект.Ответственный + + InputField + Enter + true + Left + true + + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписатьИЗакрыть + 4 + true + true + Form.Command.ЗаписатьОбъектИЗакрыть + Auto + true + true + UserCmds + Auto + + + ФормаЗаписать + 5 + true + true + Form.Command.ЗаписатьОбъект + Auto + true + true + UserCmds + Auto + + true + true + Left + true + + Help + Write + WriteAndClose + 800 + LockOwnerWindow + true + true + Vertical + true + true + UseIfNecessary + true + true + + + + + + diff --git a/tests/fixtures/КорректировкаXMLФорм/После/EDT/2/Form.form b/tests/fixtures/КорректировкаXMLФорм/После/EDT/2/Form.form new file mode 100644 index 0000000..6f06b4a --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/После/EDT/2/Form.form @@ -0,0 +1,110 @@ + + + + ГруппаШапка + 1 + + Использовать + 2 + true + true + + Объект.Использовать + + Right + CheckBoxField + Left + Enter + true + Left + true + + CheckBox + + + true + true + + <key>ru</key> + <value>Группа шапка</value> + + UsualGroup + + true + true + Auto + Auto + + + + Ответственный + 3 + true + true + + Объект.Ответственный + + InputField + Enter + true + Left + true + + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписатьИЗакрыть + 4 + true + true + Form.Command.ЗаписатьОбъектИЗакрыть + Auto + true + true + UserCmds + Auto + + + ФормаЗаписать + 5 + true + true + Form.Command.ЗаписатьОбъект + Auto + true + true + UserCmds + Auto + + true + true + Left + true + + Help + Write + WriteAndClose + 800 + LockOwnerWindow + true + true + Vertical + true + true + UseIfNecessary + true + true + + + + + + diff --git a/tests/fixtures/КорректировкаXMLФорм/После/EDT/3/Form.form b/tests/fixtures/КорректировкаXMLФорм/После/EDT/3/Form.form new file mode 100644 index 0000000..3be9b79 --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/После/EDT/3/Form.form @@ -0,0 +1,110 @@ + + + + ГруппаШапка + 10 + + Использовать + 11 + true + true + + Объект.Использовать + + Right + CheckBoxField + Left + Enter + true + Left + true + + CheckBox + + + true + true + + <key>ru</key> + <value>Группа шапка</value> + + UsualGroup + + true + true + Auto + Auto + + + + Ответственный + 1 + true + true + + Объект.Ответственный + + InputField + Enter + true + Left + true + + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписатьИЗакрыть + 13 + true + true + Form.Command.ЗаписатьОбъектИЗакрыть + Auto + true + true + UserCmds + Auto + + + ФормаЗаписать + 14 + true + true + Form.Command.ЗаписатьОбъект + Auto + true + true + UserCmds + Auto + + true + true + Left + true + + Help + Write + WriteAndClose + 800 + LockOwnerWindow + true + true + Vertical + true + true + UseIfNecessary + true + true + + + + + + diff --git a/tests/fixtures/КорректировкаXMLФорм/После/EDT/4/BaseForm/Form.form b/tests/fixtures/КорректировкаXMLФорм/После/EDT/4/BaseForm/Form.form new file mode 100644 index 0000000..6f06b4a --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/После/EDT/4/BaseForm/Form.form @@ -0,0 +1,110 @@ + + + + ГруппаШапка + 1 + + Использовать + 2 + true + true + + Объект.Использовать + + Right + CheckBoxField + Left + Enter + true + Left + true + + CheckBox + + + true + true + + <key>ru</key> + <value>Группа шапка</value> + + UsualGroup + + true + true + Auto + Auto + + + + Ответственный + 3 + true + true + + Объект.Ответственный + + InputField + Enter + true + Left + true + + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписатьИЗакрыть + 4 + true + true + Form.Command.ЗаписатьОбъектИЗакрыть + Auto + true + true + UserCmds + Auto + + + ФормаЗаписать + 5 + true + true + Form.Command.ЗаписатьОбъект + Auto + true + true + UserCmds + Auto + + true + true + Left + true + + Help + Write + WriteAndClose + 800 + LockOwnerWindow + true + true + Vertical + true + true + UseIfNecessary + true + true + + + + + + diff --git a/tests/fixtures/КорректировкаXMLФорм/После/EDT/4/Form.form b/tests/fixtures/КорректировкаXMLФорм/После/EDT/4/Form.form new file mode 100644 index 0000000..2acd08d --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/После/EDT/4/Form.form @@ -0,0 +1,110 @@ + + + + ГруппаШапка + 1 + + Использовать + 2 + true + true + + Объект.Использовать + + Right + CheckBoxField + Left + Enter + true + Left + true + + CheckBox + + + true + true + + <key>ru</key> + <value>Группа шапка</value> + + UsualGroup + + true + true + Auto + Auto + + + + Ответственный + 3 + true + true + + Объект.Ответственный + + InputField + Enter + true + Left + true + + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписать + 5 + true + true + Form.Command.ЗаписатьОбъект + Auto + true + true + UserCmds + Auto + + + ФормаЗаписатьИЗакрыть + 4 + true + true + Form.Command.ЗаписатьОбъектИЗакрыть + Auto + true + true + UserCmds + Auto + + true + true + Left + true + + Help + Write + WriteAndClose + 800 + LockOwnerWindow + true + true + Vertical + true + true + UseIfNecessary + true + true + + + + + + diff --git a/tests/fixtures/КорректировкаXMLФорм/После/EDT/5/BaseForm/Form.form b/tests/fixtures/КорректировкаXMLФорм/После/EDT/5/BaseForm/Form.form new file mode 100644 index 0000000..6f06b4a --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/После/EDT/5/BaseForm/Form.form @@ -0,0 +1,110 @@ + + + + ГруппаШапка + 1 + + Использовать + 2 + true + true + + Объект.Использовать + + Right + CheckBoxField + Left + Enter + true + Left + true + + CheckBox + + + true + true + + <key>ru</key> + <value>Группа шапка</value> + + UsualGroup + + true + true + Auto + Auto + + + + Ответственный + 3 + true + true + + Объект.Ответственный + + InputField + Enter + true + Left + true + + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписатьИЗакрыть + 4 + true + true + Form.Command.ЗаписатьОбъектИЗакрыть + Auto + true + true + UserCmds + Auto + + + ФормаЗаписать + 5 + true + true + Form.Command.ЗаписатьОбъект + Auto + true + true + UserCmds + Auto + + true + true + Left + true + + Help + Write + WriteAndClose + 800 + LockOwnerWindow + true + true + Vertical + true + true + UseIfNecessary + true + true + + + + + + diff --git a/tests/fixtures/КорректировкаXMLФорм/После/EDT/5/Form.form b/tests/fixtures/КорректировкаXMLФорм/После/EDT/5/Form.form new file mode 100644 index 0000000..27a3725 --- /dev/null +++ b/tests/fixtures/КорректировкаXMLФорм/После/EDT/5/Form.form @@ -0,0 +1,249 @@ + + + + ГруппаШапка + 1 + + Использовать + 2 + true + true + + Объект.Использовать + + Right + CheckBoxField + Left + Enter + true + Left + true + + CheckBox + + + + РеквизитРасширения + 6 + true + true + + РеквизитРасширения + + InputField + Enter + true + Left + true + + true + true + true + true + true + true + + + true + true + + <key>ru</key> + <value>Группа шапка</value> + + UsualGroup + + true + true + Auto + Auto + + + + Ответственный + 3 + true + true + + Объект.Ответственный + + InputField + Enter + true + Left + true + + true + true + true + true + true + + + + ФормаКоманднаяПанель + -1 + + ФормаЗаписать + 5 + true + true + Form.Command.ЗаписатьОбъект + Auto + true + true + UserCmds + Auto + + + ФормаЗаписатьИЗакрыть + 4 + true + true + Form.Command.ЗаписатьОбъектИЗакрыть + Auto + true + true + UserCmds + Auto + + true + true + Left + true + + Help + Write + WriteAndClose + 800 + LockOwnerWindow + true + true + Vertical + true + true + UseIfNecessary + true + true + + ТаблицаРасширения1 + 7 + + ValueTable + + + true + + + true + + + КолонкаСТипомСтрока + 1000002 + + String + + 64 + + + + true + + + true + + + + КолонкаСТипомЧисло + 1000003 + + Number + + 12 + 3 + + + + true + + + true + + + + + ТаблицаРасширения2 + 1000004 + + ValueTable + + + true + + + true + + + КолонкаСТипомСтрока + 1000005 + + String + + 64 + + + + true + + + true + + + + КолонкаСТипомЧисло + 1000006 + + Number + + 12 + 3 + + + + true + + + true + + + + + КомандаРасширения + + <key>ru</key> + <value>Команда расширения</value> + + 1000001 + + true + + + + ЮТКомандаРасширенияИзменениеИКонтроль + ChangeAndValidate + + + Auto + + + ПараметрРасширения + + String + + + + + + + + + \ No newline at end of file diff --git a/tests/ТестПроверкаСценариевОбработки.os b/tests/ТестПроверкаСценариевОбработки.os index 2fa5818..7783863 100644 --- a/tests/ТестПроверкаСценариевОбработки.os +++ b/tests/ТестПроверкаСценариевОбработки.os @@ -39,6 +39,7 @@ ВсеТесты.Добавить("ТестДолжен_ПроверитьИзменениеТегаКастомизацииФормы"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийВставкиКопирайтовНеОбновляетКопирайтВФайлахПоставки"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийЗапретаИспользованияПерейтиНеСрабатываетНаСтроку"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийКорректировкаXMLФормУчитываетСвязьФормРасширенийСФормамиКонфигурации"); Возврат ВсеТесты; @@ -585,6 +586,47 @@ #КонецОбласти +#Область КорректировкаXMLФорм + +Процедура ТестДолжен_ПроверитьЧтоСценарийКорректировкаXMLФормУчитываетСвязьФормРасширенийСФормамиКонфигурации() Экспорт + ОбъектСценария = ПолучитьСценарий("КорректировкаXMLФорм.os"); + + ВременныйКаталог = ПолучитьИмяВременногоФайла(); + Фикстура = Фикстура("КорректировкаXMLФорм"); + СоздатьКаталог(ВременныйКаталог); + СкопироватьКаталог(Фикстура, ВременныйКаталог); + + Настройки = ПолучитьДополнительныеНастройки(ВременныйКаталог); + ПутьККаталогуДо = ОбъединитьПути(ВременныйКаталог, "До"); + ПутьККаталогуПосле = ОбъединитьПути(ВременныйКаталог, "После"); + + ФорматыФайла = Новый Структура; + ФорматыФайла.Вставить("Configurator", "Form.xml"); + ФорматыФайла.Вставить("EDT", "Form.form"); + + // Тестовые файлы имеют следующие особенности: + // 1. Форма без родителя, нет изменений, нет дублей + // 2. Форма с родителем, нет изменений, нет дублей + // 3. Форма без родителя, есть дубли, есть пропущенные идентификаторы + // 4. Форма с родителем, идентификаторы заимствованных реквизитов расходятся + // 5. Форма с родителем, идентификаторы заимствованных реквизитов расходятся, есть пропущенные идентификаторы, есть дубли. + Для Каждого Формат Из ФорматыФайла Цикл + Для Подкаталог = 1 По 5 Цикл + Файл = Новый Файл(ОбъединитьПути(ПутьККаталогуДо, Формат.Ключ, Подкаталог, Формат.Значение)); + Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, Настройки); + Ожидаем.Что(Результат, "Файл формы не был обработан").Равно(Истина); + + СодержимоеФайла = СокрЛП(ФайловыеОперации.ПрочитатьТекстФайла(Файл.ПолноеИмя)); + СодержимоеЭталон = СокрЛП(ФайловыеОперации.ПрочитатьТекстФайла(ОбъединитьПути(ПутьККаталогуПосле, Формат.Ключ, Подкаталог, Формат.Значение))); + Ожидаем.Что(СодержимоеФайла, "Файл формы был обработан некорректно").Равно(СодержимоеЭталон); + КонецЦикла; + КонецЦикла; + + МенеджерВременныхФайлов.УдалитьФайл(ВременныйКаталог); +КонецПроцедуры + +#КонецОбласти + #КонецОбласти #Область Служебные