1
0
mirror of https://github.com/bia-technologies/precommit4onec.git synced 2024-11-24 08:32:25 +02:00

Merge branch 'feature/ONECICD-6' into 'develop'

Feature/onecicd 6

See merge request orais/precommit1C-fork-bia!5
This commit is contained in:
Maximov Valery 2019-04-09 12:50:40 +03:00
commit b31cd7f930
25 changed files with 1146 additions and 94 deletions

View File

@ -45,6 +45,7 @@
- `УдалениеЛишнихПустыхСтрок` - выполняет очистку модуля от лишних пустых строк (лишними считаются 2 и более идущих подряд пустых строках) - `УдалениеЛишнихПустыхСтрок` - выполняет очистку модуля от лишних пустых строк (лишними считаются 2 и более идущих подряд пустых строках)
- `ПроверкаКорректностиОбластей` - выполняет проверку на корректность скобок областей: `на парность` и `перед окончание области должно быть ее определение` - `ПроверкаКорректностиОбластей` - выполняет проверку на корректность скобок областей: `на парность` и `перед окончание области должно быть ее определение`
- `ПроверкаДублейПроцедурИФункций` - выполняет поиск одинаковых названий процедур и функций в модуле. - `ПроверкаДублейПроцедурИФункций` - выполняет поиск одинаковых названий процедур и функций в модуле.
- `ОтключениеПолнотекстовогоПоиска` - По умолчанию отключает полнотекстовый поиск в файлах описания метаданных. Имеет настройку для исключения файлов из обработки. Для исключения необходимо указать относительный путь в репозитории до файла описания метаданного. Можно выключать из обработки отдельные реквизиты метаданного, для этого надо задать массив реквизитов в конфигурационном файле.
## Изменение настроек ## Изменение настроек

View File

@ -88,3 +88,44 @@
И я создаю файл "РабочийКаталог\src\epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ\Ext\Form\Module.bsl" с текстом "текст178" И я создаю файл "РабочийКаталог\src\epf\DemoОбработка\DemoОбработка\Forms\ОсновнаяОФ\Ext\Form\Module.bsl" с текстом "текст178"
И я выполняю команду "git" с параметрами "commit -m addFile" И я выполняю команду "git" с параметрами "commit -m addFile"
Тогда Вывод команды "git" не содержит "Module.bsl" Тогда Вывод команды "git" не содержит "Module.bsl"
Сценарий: По умолчанию прекоммит убирает полнотекстовый поиск в исходниках конфигуратора
Когда Я копирую файл "tests\fixtures\Документ.xml" в каталог репозитория "РабочийКаталог"
И Файл "Документ.xml" в рабочем каталоге содержит "FullTextSearch>Use<"
И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "demo коммит"
Тогда Файл "Документ.xml" в рабочем каталоге не содержит "FullTextSearch>Use<"
Сценарий: По умолчанию прекоммит убирает полнотекстовый поиск в исходниках EDT
Когда Я копирую файл "tests\fixtures\Документ.mdo" в каталог репозитория "РабочийКаталог"
И Файл "Документ.mdo" в рабочем каталоге содержит "fullTextSearch>Use<"
И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "demo коммит"
Тогда Файл "Документ.mdo" в рабочем каталоге не содержит "fullTextSearch>Use<"
Сценарий: Отключение полнотекстового поиска игнорирует файл в исключении
Когда Я создаю каталог "src" в рабочем каталоге
И Я копирую файл "Документ.mdo" из каталога "tests\fixtures" проекта в подкаталог "src" рабочего каталога
И Я копирую файл "Документ.xml" из каталога "tests\fixtures" проекта в подкаталог "src" рабочего каталога
И Файл "src\Документ.mdo" в рабочем каталоге содержит "fullTextSearch>Use<"
И Файл "src\Документ.xml" в рабочем каталоге содержит "FullTextSearch>Use<"
И я создаю файл "РабочийКаталог\v8config.json" с текстом
"""
{
"Precommt4onecСценарии": {
"ИспользоватьСценарииРепозитория": false,
"КаталогЛокальныхСценариев": "",
"ГлобальныеСценарии": [
"ОтключениеПолнотекстовогоПоиска.os"
],
"НастройкиСценариев": {
"ОтключениеПолнотекстовогоПоиска": {
"МетаданныеДляИсключения": {
"src\\Документ.mdo": []
}
}
}
}
}
"""
И я фиксирую изменения в репозитории "РабочийКаталог" с комментарием "demo коммит"
Тогда Файл "\src\Документ.mdo" в рабочем каталоге содержит "fullTextSearch>Use<"
И Файл "\src\Документ.xml" в рабочем каталоге не содержит "FullTextSearch>Use<"

View File

@ -28,5 +28,6 @@
Установленные настройки: Установленные настройки:
ИспользоватьСценарииРепозитория = Нет ИспользоватьСценарииРепозитория = Нет
КаталогЛокальныхСценариев = КаталогЛокальныхСценариев =
ГлобальныеСценарии = ДобавлениеПробеловПередКлючевымиСловами.os,ЗапретИспользованияПерейти.os,КорректировкаXMLФорм.os,ПроверкаДублейПроцедурИФункций.os,ПроверкаКорректностиОбластей.os,РазборОбычныхФормНаИсходники.os,РазборОтчетовОбработокРасширений.os,СинхронизацияОбъектовМетаданныхИФайлов.os,СортировкаДереваМетаданных.os,УдалениеДублейМетаданных.os,УдалениеЛишнихКонцевыхПробелов.os,УдалениеЛишнихПустыхСтрок.os ГлобальныеСценарии = ДобавлениеПробеловПередКлючевымиСловами.os,ЗапретИспользованияПерейти.os,КорректировкаXMLФорм.os,ОтключениеПолнотекстовогоПоиска.os,ПроверкаДублейПроцедурИФункций.os,ПроверкаКорректностиОбластей.os,РазборОбычныхФормНаИсходники.os,РазборОтчетовОбработокРасширений.os,СинхронизацияОбъектовМетаданныхИФайлов.os,СортировкаДереваМетаданных.os,УдалениеДублейМетаданных.os,УдалениеЛишнихКонцевыхПробелов.os,УдалениеЛишнихПустыхСтрок.os
""" """

View File

@ -33,7 +33,7 @@
Если НЕ ПараметрыКоманды["-global"] Если НЕ ПараметрыКоманды["-global"]
И НЕ ЗначениеЗаполнено(ПараметрыКоманды["-rep-path"]) Тогда И НЕ ЗначениеЗаполнено(ПараметрыКоманды["-rep-path"]) Тогда
Лог.Ошибка("Для конфгурирования необходимо передать флаг -global или указать каталог репозитория параметром -rep-path"); Лог.Ошибка("Для конфигурирования необходимо передать флаг -global или указать каталог репозитория параметром -rep-path");
Возврат Приложение.РезультатыКоманд().НеверныеПараметры; Возврат Приложение.РезультатыКоманд().НеверныеПараметры;
КонецЕсли; КонецЕсли;
@ -124,7 +124,7 @@
ГлобальныеСценарии = ПолучитьИменаСценариев(ТекущийКаталогСценариев); ГлобальныеСценарии = ПолучитьИменаСценариев(ТекущийКаталогСценариев);
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ГлобальныеСценарии", ГлобальныеСценарии); УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ГлобальныеСценарии", ГлобальныеСценарии);
НастройкиСценариев = СформироватьНастройкиСценариев(); НастройкиСценариев = СформироватьНастройкиСценариев(ГлобальныеСценарии, ТекущийКаталогСценариев);
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\НастройкиСценариев", НастройкиСценариев); УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\НастройкиСценариев", НастройкиСценариев);
КонецПроцедуры КонецПроцедуры
@ -162,17 +162,23 @@
КонецФункции КонецФункции
Функция СформироватьНастройкиСценариев() Функция СформироватьНастройкиСценариев(МассивСценариев, КаталогСценариев)
// todo: Надо будет доработать таким образом, чтобы настройки считывались из сценария НастройкиСценариев = Новый Соответствие;
Рефлектор = Новый Рефлектор;
// для сценария РазборОтчетовОбработокРасширений Для Каждого Сценарий Из МассивСценариев Цикл
НастройкиСценария = Новый Соответствие;
НастройкиСценария.Вставить("ИспользоватьНастройкиПоУмолчанию", Истина); ОбъектСценария = ЗагрузитьСценарий(ОбъединитьПути(КаталогСценариев, Сценарий));
НастройкиСценария.Вставить("ВерсияПлатформы", "");
Если Рефлектор.МетодСуществует(ОбъектСценария, "ПолучитьСтандартныеНастройкиСценария") Тогда
СтруктураНастроек = Рефлектор.ВызватьМетод(ОбъектСценария, "ПолучитьСтандартныеНастройкиСценария");
НастройкиСценариев.Вставить(СтруктураНастроек.ИмяСценария, СтруктураНастроек.Настройка);
НастройкиСценариев = Новый Соответствие; КонецЕсли;
НастройкиСценариев.Вставить("РазборОтчетовОбработокРасширений", НастройкиСценария);
КонецЦикла;
Возврат НастройкиСценариев; Возврат НастройкиСценариев;
@ -212,8 +218,8 @@
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\КаталогЛокальныхСценариев", КаталогЛокальныхСценариев); УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\КаталогЛокальныхСценариев", КаталогЛокальныхСценариев);
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ГлобальныеСценарии", ГлобальныеСценарии); УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\ГлобальныеСценарии", ГлобальныеСценарии);
НастройкиСценариев = СформироватьНастройкиСценариев(ГлобальныеСценарии, КаталогГлобальныхСценариев);
УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\НастройкиСценариев", СформироватьНастройкиСценариев()); УправлениеНастройками.ЗаписатьНастройку(ИмяПриложения + "\НастройкиСценариев", );
КонецПроцедуры КонецПроцедуры

View File

@ -11,7 +11,7 @@
/////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////
Перем ИнициализацияВыпонена; // содержит признак инициализации репозитория Перем ИнициализацияВыполнена; // содержит признак инициализации репозитория
Перем НовыйКонфиг; // содержит признак нового конфига Перем НовыйКонфиг; // содержит признак нового конфига
Перем Конфигурация; // описание конфигурации Перем Конфигурация; // описание конфигурации
Перем АдресКонфигурационногоФайла; // адрес нахождения конфигурационного файла Перем АдресКонфигурационногоФайла; // адрес нахождения конфигурационного файла
@ -34,31 +34,31 @@
КонецФункции // ЭтоНовый() КонецФункции // ЭтоНовый()
// ГлобальныеНастройки // ГлобальныеНастройки
// Возврает набор глобальных настроек // Возвращает набор глобальных настроек
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие - Набор глобальных настроек при их наличии, если настроек нет то будет возвращено пустое соответствие // Соответствие - Набор глобальных настроек при их наличии, если настроек нет то будет возвращено пустое соответствие
// //
Функция ГлобальныеНастройки() Экспорт Функция ГлобальныеНастройки() Экспорт
ПроверкаИницализации(); ПроверкаИнициализации();
Возврат НастройкиПриложения("GLOBAL"); Возврат НастройкиПриложения("GLOBAL");
КонецФункции // ГлобальныеНастройки() Экспорт КонецФункции // ГлобальныеНастройки() Экспорт
// НастройкиПриложения // НастройкиПриложения
// Возврает набор настроек для приложения // Возвращает набор настроек для приложения
// //
// Параметры: // Параметры:
// ИмяПриложения - Строка - Имя приложения // ИмяПриложения - Строка - Имя приложения
// //
// Возвращаемое значение: // Возвращаемое значение:
// Соответствие - Набор гнастроек при их наличии, если настроек нет то будет возвращено пустое соответствие // Соответствие - Набор настроек при их наличии, если настроек нет то будет возвращено пустое соответствие
// //
Функция НастройкиПриложения(ИмяПриложения) Экспорт Функция НастройкиПриложения(ИмяПриложения) Экспорт
ПроверкаИницализации(); ПроверкаИнициализации();
Если ПустаяСтрока(ИмяПриложения) Тогда Если ПустаяСтрока(ИмяПриложения) Тогда
ВызватьИсключение "Не указано имя приложения"; ВызватьИсключение "Не указано имя приложения";
@ -89,7 +89,7 @@
// //
Функция Настройка(ИмяНастройки)Экспорт Функция Настройка(ИмяНастройки)Экспорт
ПроверкаИницализации(); ПроверкаИнициализации();
РазложенноеИмяНастройки = РазобратьИмяНастройки(ИмяНастройки); РазложенноеИмяНастройки = РазобратьИмяНастройки(ИмяНастройки);
ИскомоеПриложение = НастройкиПриложения(РазложенноеИмяНастройки.ИмяПриложения); ИскомоеПриложение = НастройкиПриложения(РазложенноеИмяНастройки.ИмяПриложения);
@ -109,7 +109,7 @@
// //
Процедура ЗаписатьНастройку(ИмяНастройки, Значение) Экспорт Процедура ЗаписатьНастройку(ИмяНастройки, Значение) Экспорт
ПроверкаИницализации(); ПроверкаИнициализации();
РазложенноеИмяНастройки = РазобратьИмяНастройки(ИмяНастройки); РазложенноеИмяНастройки = РазобратьИмяНастройки(ИмяНастройки);
ИскомоеПриложение = НастройкиПриложения(РазложенноеИмяНастройки.ИмяПриложения); ИскомоеПриложение = НастройкиПриложения(РазложенноеИмяНастройки.ИмяПриложения);
@ -133,7 +133,7 @@
// //
Процедура ЗаписатьНастройкиПриложения(ИмяПриложения, Значение) Экспорт Процедура ЗаписатьНастройкиПриложения(ИмяПриложения, Значение) Экспорт
ПроверкаИницализации(); ПроверкаИнициализации();
Если ПустаяСтрока(ИмяПриложения) Тогда Если ПустаяСтрока(ИмяПриложения) Тогда
@ -161,7 +161,7 @@
// //
Процедура УдалитьНастройкиПриложения(ИмяПриложения) Экспорт Процедура УдалитьНастройкиПриложения(ИмяПриложения) Экспорт
ПроверкаИницализации(); ПроверкаИнициализации();
Если ПустаяСтрока(ИмяПриложения) Тогда Если ПустаяСтрока(ИмяПриложения) Тогда
@ -179,15 +179,15 @@
// Служебный функционал // Служебный функционал
/////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////
Функция ПроверкаИницализации() Функция ПроверкаИнициализации()
Если Не ИнициализацияВыпонена Тогда Если Не ИнициализацияВыполнена Тогда
ВызватьИсключение "Необходимо выполнить инициализацию" ВызватьИсключение "Необходимо выполнить инициализацию"
КонецЕсли; КонецЕсли;
КонецФункции // ПроверкаИницализации() КонецФункции // ПроверкаИнициализации()
Функция РазобратьИмяНастройки(Знач ИмяНастройки) Функция РазобратьИмяНастройки(Знач ИмяНастройки)
@ -233,7 +233,7 @@
// //
Процедура ПриСозданииОбъекта(КаталогРепозитория, ОбновлятьКонф = ЛОЖЬ) Процедура ПриСозданииОбъекта(КаталогРепозитория, ОбновлятьКонф = ЛОЖЬ)
ИнициализацияВыпонена = ЛОЖЬ; ИнициализацияВыполнена = ЛОЖЬ;
НовыйКонфиг = ЛОЖЬ; НовыйКонфиг = ЛОЖЬ;
Конфигурация = Неопределено; Конфигурация = Неопределено;
АдресКонфигурационногоФайла = ""; АдресКонфигурационногоФайла = "";
@ -264,6 +264,6 @@
КонецЕсли; КонецЕсли;
ИнициализацияВыпонена = ИСТИНА; ИнициализацияВыполнена = ИСТИНА;
КонецПроцедуры // ПриСозданииОбъекта() КонецПроцедуры // ПриСозданииОбъекта()

View File

@ -9,7 +9,7 @@
// ЭтоФайлИсходников // ЭтоФайлИсходников
// Возвращает истину, если файл является файлом исходных кодов // Возвращает истину, если файл является файлом исходных кодов
// Параметры: // Параметры:
// Файл - Строка - Полный путь к файлу // Файл - Файл - Полный путь к файлу
// //
// Возвращаемое значение: // Возвращаемое значение:
// Булево - Признак // Булево - Признак
@ -29,7 +29,7 @@
// ЭтоФайлОписанияКонфигурации // ЭтоФайлОписанияКонфигурации
// Возвращает истину, если файл является файлом описания конфигурации // Возвращает истину, если файл является файлом описания конфигурации
// Параметры: // Параметры:
// Файл - Строка - Полный путь к файлу // Файл - Файл - Полный путь к файлу
// //
// Возвращаемое значение: // Возвращаемое значение:
// Булево - Признак // Булево - Признак
@ -49,7 +49,7 @@
// ЭтоФайлОписанияКонфигурацииEDT // ЭтоФайлОписанияКонфигурацииEDT
// Возвращает истину, если файл является файлом описания конфигурации в формате EDT // Возвращает истину, если файл является файлом описания конфигурации в формате EDT
// Параметры: // Параметры:
// Файл - Строка - Полный путь к файлу // Файл - Файл - Полный путь к файлу
// //
// Возвращаемое значение: // Возвращаемое значение:
// Булево - Признак // Булево - Признак
@ -66,10 +66,102 @@
КонецФункции КонецФункции
// ЭтоФайлОписанияКонфигурации // ЭтоФайлОбычнойФормы
// Возвращает истину, если файл является файлом обычной формы
// Параметры:
// Файл - Файл - Полный путь к файлу
//
// Возвращаемое значение:
// Булево - Признак
//
Функция ЭтоФайлОбычнойФормы(Файл) Экспорт
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СтрСравнить(Файл.Имя, "Form.bin") = 0;
КонецФункции // ЭтоФайлОбычнойФормы
// ЭтоФайлОписанияМетаданных
// Возвращает истину, если файл является описанием метаданных, исключая файлы описания конфигурации.
// Параметры:
// Файл - Файл - Полный путь к файлу
//
// Возвращаемое значение:
// Булево - Признак
//
Функция ЭтоФайлОписанияМетаданных(Файл) Экспорт
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
Возврат ЭтоФайлОписанияМетаданныхКонфигуратора(Файл) ИЛИ ЭтоФайлОписанияМетаданныхEDT(Файл);
КонецФункции // ЭтоФайлОписанияМетаданных
// ЭтоФайлОписанияМетаданныхКонфигуратора
// Возвращает истину, если файл является описанием метаданных конфигуратора, исключая Configuration.xml
// Параметры:
// Файл - Файл - Полный путь к файлу
//
// Возвращаемое значение:
// Булево - Признак
//
Функция ЭтоФайлОписанияМетаданныхКонфигуратора(Файл) Экспорт
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
Если ЭтоФайлОписанияКонфигурации(Файл) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СтрСравнить(Файл.Расширение, ".xml") = 0;
КонецФункции // ЭтоФайлОписанияМетаданныхКонфигуратора
// ЭтоФайлОписанияМетаданныхEDT
// Возвращает истину, если файл является описанием метаданных конфигуратора, исключая Configuration.mdo
// Параметры:
// Файл - Файл - Полный путь к файлу
//
// Возвращаемое значение:
// Булево - Признак
//
Функция ЭтоФайлОписанияМетаданныхEDT(Файл) Экспорт
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
Если ЭтоФайлОписанияКонфигурацииEDT(Файл) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СтрСравнить(Файл.Расширение, ".mdo") = 0;
КонецФункции // ЭтоФайлОписанияМетаданныхEDT
// ЭтоФайлОписанияФормы
// Возвращает истину, если файл является файлом описания формы // Возвращает истину, если файл является файлом описания формы
// Параметры: // Параметры:
// Файл - Строка - Полный путь к файлу // Файл - Файл - Полный путь к файлу
// //
// Возвращаемое значение: // Возвращаемое значение:
// Булево - Признак // Булево - Признак
@ -86,10 +178,10 @@
КонецФункции КонецФункции
// ЭтоФайлОписанияКонфигурации // ЭтоФайлОписанияФормыEDT
// Возвращает истину, если файл является файлом описания формы в формате EDT // Возвращает истину, если файл является файлом описания формы в формате EDT
// Параметры: // Параметры:
// Файл - Строка - Полный путь к файлу // Файл - Файл - Полный путь к файлу
// //
// Возвращаемое значение: // Возвращаемое значение:
// Булево - Признак // Булево - Признак
@ -104,4 +196,4 @@
Возврат СтрСравнить(Файл.Имя, "Form.form") = 0; Возврат СтрСравнить(Файл.Имя, "Form.form") = 0;
КонецФункции КонецФункции

View File

@ -27,7 +27,7 @@
// * Лог - Объект - Текущий лог // * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория // * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария // * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать // и которые необходимо дообработать
// //
// Возвращаемое значение: // Возвращаемое значение:

View File

@ -28,7 +28,7 @@
// * Лог - Объект - Текущий лог // * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория // * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария // * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать // и которые необходимо дообработать
// //
// Возвращаемое значение: // Возвращаемое значение:

View File

@ -26,7 +26,7 @@
// * Лог - Объект - Текущий лог // * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория // * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария // * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать // и которые необходимо дообработать
// //
// Возвращаемое значение: // Возвращаемое значение:

View File

@ -0,0 +1,274 @@
///////////////////////////////////////////////////////////////////////////////
//
// Служебный модуль с реализацией сценариев обработки файлов <ОтключениеПолнотекстовогоПоиска>
//
///////////////////////////////////////////////////////////////////////////////
Перем ЗначениеПоиска;
// ИмяСценария
// Возвращает имя сценария обработки файлов
//
// Возвращаемое значение:
// Строка - Имя текущего сценария обработки файлов
//
Функция ИмяСценария() Экспорт
Возврат "ОтключениеПолнотекстовогоПоиска";
КонецФункции // ИмяСценария()
// ПолучитьСтандартныеНастройкиСценария
// Возвращает структуру настроек сценария
//
// Возвращаемое значение:
// Структура - Структура с настройками сценария
// * ИмяСценария - Строка - Имя, с которым сохранятся настройки
// * Настройка - Соответствие - настройки
//
Функция ПолучитьСтандартныеНастройкиСценария() Экспорт
НастройкиСценария = Новый Соответствие;
ПутьИРеквизиты = Новый Соответствие;
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить("Номер");
МассивРеквизитов.Добавить("ТабличнаяЧасть1.Реквизит");
ПутьИРеквизиты.Вставить("src\_example.xml", МассивРеквизитов);
ПутьИРеквизиты.Вставить("src\_example2.xml", Новый Массив);
НастройкиСценария.Вставить("МетаданныеДляИсключения", ПутьИРеквизиты);
Возврат Новый Структура("ИмяСценария, Настройка", ИмяСценария(), НастройкиСценария);
КонецФункции
// ОбработатьФайл
// Выполняет обработку файла
//
// Параметры:
// АнализируемыйФайл - Файл - Файл из журнала git для анализа
// КаталогИсходныхФайлов - Строка - Каталог расположения исходных файлов относительно каталог репозитория
// ДополнительныеПараметры - Структура - Набор дополнительных параметров, которые можно использовать
// * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать
//
// Возвращаемое значение:
// Булево - Признак выполненной обработки файла
//
Функция ОбработатьФайл(АнализируемыйФайл, КаталогИсходныхФайлов, ДополнительныеПараметры) Экспорт
Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлОписанияМетаданных(АнализируемыйФайл) Тогда
МетаданныеДляИсключения = НастройкиСценария.Получить("МетаданныеДляИсключения");
ОтносительныйПуть = СтрЗаменить(АнализируемыйФайл.ПолноеИмя, ДополнительныеПараметры.КаталогРепозитория, "");
МассивРеквизитов = МетаданныеДляИсключения.Получить(ОтносительныйПуть);
Если МассивРеквизитов = Неопределено ИЛИ ЗначениеЗаполнено(МассивРеквизитов) Тогда
//Неопределено - нет файла в исключении, массив не пустой - исключение только по реквизитам
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
ЭтоEDT = ТипыФайлов.ЭтоФайлОписанияМетаданныхEDT(АнализируемыйФайл);
Если ОтключитьПолнотекстовыйПоиск(АнализируемыйФайл.ПолноеИмя, МассивРеквизитов, ЭтоEDT) Тогда
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
КонецЕсли;
Возврат Истина;
КонецЕсли;
КонецЕсли;
Возврат Ложь;
КонецФункции // ОбработатьФайл()
Функция ОтключитьПолнотекстовыйПоиск(Знач ИмяФайла, МассивРеквизитов, ЭтоEDT)
ТекстФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
СодержимоеФайла = ТекстФайла;
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
Возврат Ложь;
КонецЕсли;
Если ЗначениеЗаполнено(МассивРеквизитов) Тогда
// получение текста файла до табличных частей
Регексп = Новый РегулярноеВыражение("(<\?xml version[\w\W]+?)(<TabularSection|<\/MetaDataObject>|<\/mdclass:Document>)([\w\W]+)?");
Регексп.ИгнорироватьРегистр = Истина;
Регексп.Многострочный = Истина;
Совпадения = Регексп.НайтиСовпадения(СодержимоеФайла);
Если Совпадения.Количество() = 0 Тогда
Возврат Ложь;
КонецЕсли;
СекцияДоТаблиц = Совпадения[0].Группы[1].Значение;
ЗакрывающаяСекция = Совпадения[0].Группы[2].Значение;
СекцияТаблиц = Совпадения[0].Группы[3].Значение;
СекцияДоТаблиц = ОбработатьСтандартныеАтрибуты(СекцияДоТаблиц, МассивРеквизитов);
СекцияДоТаблиц = ОбработатьРеквизиты(СекцияДоТаблиц, МассивРеквизитов);
ЕстьСекцияТаблиц = СекцияТаблиц <> "";
Если ЕстьСекцияТаблиц Тогда
ОбработатьТабличныеЧасти(СекцияТаблиц, МассивРеквизитов, ЭтоEDT);
КонецЕсли;
СодержимоеФайла = СекцияДоТаблиц + ?(ЕстьСекцияТаблиц, ЗакрывающаяСекция + СекцияТаблиц, ЗакрывающаяСекция);
Иначе // Обработается весь файл целиком
СодержимоеФайла = ЗаменитьПоиск(СодержимоеФайла);
КонецЕсли;
Если СтрСравнить(ТекстФайла, СодержимоеФайла) = 0 Тогда
Возврат Ложь;
КонецЕсли;
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
Возврат Истина;
КонецФункции
Функция ЗаменитьПоиск(СодержимоеФайла, Знач ПоискРеквизита = "")
ПолнотекстовыйПоиск = "(<(?:xr\:)?fullTextSearch>)(Use)(<\/(?:xr\:)?fullTextSearch>)";
Выражение = ПоискРеквизита + ПолнотекстовыйПоиск;
Регексп = Новый РегулярноеВыражение(Выражение);
Регексп.ИгнорироватьРегистр = Истина;
Регексп.Многострочный = Истина;
ГруппыИндексов = Регексп.НайтиСовпадения(СодержимоеФайла);
Если ГруппыИндексов.Количество() <> 0 Тогда
Если ЗначениеЗаполнено(ПоискРеквизита) Тогда
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1$2DontUse$4");
Иначе
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1DontUse$3");
КонецЕсли;
КонецЕсли;
Возврат СодержимоеФайла;
КонецФункции
Функция ОбработатьСтандартныеАтрибуты(СодержимоеФайла, Исключения)
СтандартныеАтрибуты = "Attribute name=""([а-яa-zA-ZА-Я0-9_]+)"">[\w\W]+?((<xr:FullTextSearch>(Use)<\/xr:FullTextSearch>)|<\/xr:StandardAttribute>)";
Регексп = Новый РегулярноеВыражение(СтандартныеАтрибуты);
Регексп.ИгнорироватьРегистр = Истина;
Регексп.Многострочный = Истина;
КоллекцияСовпадений = Регексп.НайтиСовпадения(СодержимоеФайла);
Для Каждого Совпадение Из КоллекцияСовпадений Цикл
Если Совпадение.Группы[4].Значение = ЗначениеПоиска.Use И Исключения.Найти(Совпадение.Группы[1].Значение) = Неопределено Тогда
ПоискРеквизита = СтрШаблон("(Attribute name=""%1"">[\w\W]+?)", Совпадение.Группы[1].Значение);
СодержимоеФайла = ЗаменитьПоиск(СодержимоеФайла, ПоискРеквизита);
КонецЕсли;
КонецЦикла;
Возврат СодержимоеФайла;
КонецФункции
Функция ОбработатьРеквизиты(СодержимоеФайла, Исключения)
ПоискРеквизиты = "<Name>([а-яa-zA-ZА-Я0-9_]+)<\/Name>[\w\W]+?(<FullTextSearch>(Use)<\/FullTextSearch>)|<\/Properties>|<\/attributes>";
Регексп = Новый РегулярноеВыражение(ПоискРеквизиты);
Регексп.ИгнорироватьРегистр = Истина;
Регексп.Многострочный = Истина;
КоллекцияСовпадений = Регексп.НайтиСовпадения(СодержимоеФайла);
Для Каждого Совпадение Из КоллекцияСовпадений Цикл
Если Совпадение.Группы[3].Значение = ЗначениеПоиска.Use И Исключения.Найти(Совпадение.Группы[1].Значение) = Неопределено Тогда
ПоискРеквизита = СтрШаблон("(<Name>%1<\/Name>[\w\W]+?)", Совпадение.Группы[1].Значение);
СодержимоеФайла = ЗаменитьПоиск(СодержимоеФайла, ПоискРеквизита);
КонецЕсли;
КонецЦикла;
Возврат СодержимоеФайла;
КонецФункции
Функция ОбработатьТабличныеЧасти(ТекстФайла, Исключения, ЭтоEDT)
Если ЭтоEDT Тогда
Шаблон = "<\/producedTypes>\s+<name>([а-яa-zA-ZА-Я0-9_]+)<\/name>|(<Name>)([а-яa-zA-ZА-Я0-9_]+)<\/Name>|(<FullTextSearch>)(Use)<\/FullTextSearch>";
ШаблонЗамены = "(<\/producedTypes>\s+<name>%1<\/name>[\w\W]+?<Name>%2<\/Name>[\w\W]+?)";
Иначе
Шаблон = "TabularSection\.[\w\W]+?\.([\w\W]+?)""|(<Name>)([а-яa-zA-ZА-Я0-9_]+)<\/Name>|(<FullTextSearch>)(Use)<\/FullTextSearch>";
ШаблонЗамены = "(TabularSection\.[\w\W]+?\.%1""[\w\W]+?<Name>%2<\/Name>[\w\W]+?)";
КонецЕсли;
Регексп = Новый РегулярноеВыражение(Шаблон);
Регексп.ИгнорироватьРегистр = Истина;
Регексп.Многострочный = Истина;
КоллекцияСовпадений = Регексп.НайтиСовпадения(ТекстФайла);
Таблица = "";
Реквизит = "";
Для Каждого Совпадение Из КоллекцияСовпадений Цикл
Таблица = ?(ЗначениеЗаполнено(Совпадение.Группы[1].Значение), Совпадение.Группы[1].Значение, Таблица);
Реквизит = ?(ЗначениеЗаполнено(Совпадение.Группы[3].Значение), Совпадение.Группы[3].Значение, Реквизит);
ИспользованиеПоиска = Совпадение.Группы[4].Значение;
Если ЗначениеЗаполнено(ИспользованиеПоиска) И Исключения.Найти(Таблица + "." + Реквизит) = Неопределено Тогда
ПолнотекстовыйПоиск = СтрШаблон(ШаблонЗамены, Таблица, Реквизит);
ТекстФайла = ЗаменитьПоиск(ТекстФайла, ПолнотекстовыйПоиск)
КонецЕсли;
КонецЦикла;
Возврат ТекстФайла;
КонецФункции
ЗначениеПоиска = Новый Структура ("Use, DontUse", "Use", "DontUse");

View File

@ -27,7 +27,7 @@
// * Лог - Объект - Текущий лог // * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория // * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария // * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать // и которые необходимо дообработать
// //
// Возвращаемое значение: // Возвращаемое значение:
@ -67,7 +67,7 @@
ТекстОшибки = ""; ТекстОшибки = "";
ШаблонПоиска = Новый РегулярноеВыражение("^\s*(?:Процедура|Функция|procedure|function)\s+?([а-яА-ЯёЁ0-9_\w]+?)\s*?\(\)"); ШаблонПоиска = Новый РегулярноеВыражение("^\s*(?:Процедура|Функция|procedure|function)\s+?([а-яА-ЯёЁ0-9_\w]+?)\s*?\(");
ШаблонПоиска.Многострочный = Истина; ШаблонПоиска.Многострочный = Истина;
ШаблонПоиска.ИгнорироватьРегистр = Истина; ШаблонПоиска.ИгнорироватьРегистр = Истина;

View File

@ -28,7 +28,7 @@
// * Лог - Объект - Текущий лог // * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория // * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария // * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать // и которые необходимо дообработать
// //
// Возвращаемое значение: // Возвращаемое значение:

View File

@ -31,7 +31,7 @@
// * Лог - Объект - Текущий лог // * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория // * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария // * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать // и которые необходимо дообработать
// //
// Возвращаемое значение: // Возвращаемое значение:
@ -42,7 +42,7 @@
Лог = ДополнительныеПараметры.Лог; Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария()); НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
Если ЭтоФайлОбычнойФормы(АнализируемыйФайл) Тогда Если ТипыФайлов.ЭтоФайлОбычнойФормы(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
@ -78,18 +78,6 @@
КонецФункции // ОбработатьФайл() КонецФункции // ОбработатьФайл()
Функция ЭтоФайлОбычнойФормы(Файл)
Если ПустаяСтрока(Файл.Расширение) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СтрСравнить(Файл.Имя, "Form.bin") = 0;
КонецФункции
Функция ПодготовитьКаталогВыгрузки(КаталогИсходныхФайлов, ОбрабатываемыйФайл, ДополнительныеПараметры) Функция ПодготовитьКаталогВыгрузки(КаталогИсходныхФайлов, ОбрабатываемыйФайл, ДополнительныеПараметры)
ФайлУдален = НЕ ОбрабатываемыйФайл.Существует(); ФайлУдален = НЕ ОбрабатываемыйФайл.Существует();

View File

@ -27,6 +27,24 @@
КонецФункции // ИмяСценария() КонецФункции // ИмяСценария()
// ПолучитьСтандартныеНастройкиСценария
// Возвращает структуру настроек сценария
//
// Возвращаемое значение:
// Структура - Структура с настройками сценария
// * ИмяСценария - Строка - Имя, с которым сохранятся настройки
// * Настройка - Соответствие - настройки
//
Функция ПолучитьСтандартныеНастройкиСценария() Экспорт
НастройкиСценария = Новый Соответствие;
НастройкиСценария.Вставить("ИспользоватьНастройкиПоУмолчанию", Истина);
НастройкиСценария.Вставить("ВерсияПлатформы", "");
Возврат Новый Структура("ИмяСценария, Настройка", ИмяСценария(), НастройкиСценария);
КонецФункции
// ОбработатьФайл // ОбработатьФайл
// Выполняет обработку файла // Выполняет обработку файла
// //
@ -37,7 +55,7 @@
// * Лог - Объект - Текущий лог // * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория // * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария // * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать // и которые необходимо дообработать
// //
// Возвращаемое значение: // Возвращаемое значение:

View File

@ -26,7 +26,7 @@
// * Лог - Объект - Текущий лог // * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория // * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария // * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать // и которые необходимо дообработать
// //
// Возвращаемое значение: // Возвращаемое значение:

View File

@ -26,7 +26,7 @@
// * Лог - Объект - Текущий лог // * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория // * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария // * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать // и которые необходимо дообработать
// //
// Возвращаемое значение: // Возвращаемое значение:
@ -133,7 +133,8 @@
Возврат Ложь; Возврат Ложь;
КонецЕсли; КонецЕсли;
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1" + СтрокаЗамены + "$3");
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла); ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
Возврат Истина; Возврат Истина;
@ -208,10 +209,7 @@
КонецЕсли; КонецЕсли;
СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1" + СокрЛП(СтрокаЗамены) + Символы.ПС + "$3"); СодержимоеФайла = Регексп.Заменить(СодержимоеФайла, "$1" + СокрЛП(СтрокаЗамены) + Символы.ПС + "$3");
ЗаписьТекста = Новый ЗаписьТекста; ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла);
ЗаписьТекста.Открыть(ИмяФайла, КодировкаТекста.UTF8NoBOM);
ЗаписьТекста.Записать(СодержимоеФайла);
ЗаписьТекста.Закрыть();
Возврат Истина; Возврат Истина;

View File

@ -26,7 +26,7 @@
// * Лог - Объект - Текущий лог // * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория // * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария // * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать // и которые необходимо дообработать
// //
// Возвращаемое значение: // Возвращаемое значение:

View File

@ -26,7 +26,7 @@
// * Лог - Объект - Текущий лог // * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория // * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария // * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать // и которые необходимо дообработать
// //
// Возвращаемое значение: // Возвращаемое значение:

View File

@ -26,7 +26,7 @@
// * Лог - Объект - Текущий лог // * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория // * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария // * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать // и которые необходимо дообработать
// //
// Возвращаемое значение: // Возвращаемое значение:

View File

@ -17,6 +17,28 @@
КонецФункции // ИмяСценария() КонецФункции // ИмяСценария()
// ПолучитьСтандартныеНастройкиСценария
// Возвращает структуру настроек сценария
//
// Возвращаемое значение:
// Структура - Структура с настройками сценария
// * ИмяСценария - Строка - Имя, с которым сохранятся настройки
// * Настройка - Соответствие - настройки
//
Функция ПолучитьСтандартныеНастройкиСценария() Экспорт
ВызватьИсключение "Настройки отсутствуют";
НастройкиСценария = Новый Соответствие;
НастройкиСценария.Вставить("ИспользоватьПоУмолчанию", Истина);
НастройкиСценария.Вставить("Версия", "");
НастройкиСценария.Вставить("КоличествоПопыток", 5);
НастройкиСценария.Вставить("МассивПараметров", Новый Массив);
Возврат Новый Структура("ИмяСценария, Настройка", ИмяСценария(), НастройкиСценария);
КонецФункции
// ОбработатьФайл // ОбработатьФайл
// Выполняет обработку файла // Выполняет обработку файла
// //
@ -27,8 +49,9 @@
// * Лог - Объект - Текущий лог // * Лог - Объект - Текущий лог
// * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс // * ИзмененныеКаталоги - Массив - Каталоги, которые необходимо добавить в индекс
// * КаталогРепозитория - Строка - Адрес каталога репозитория // * КаталогРепозитория - Строка - Адрес каталога репозитория
// * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образоавшиеся в результате работы сценария // * ФайлыДляПостОбработки - Массив - Файлы, изменившиеся / образовавшиеся в результате работы сценария
// и которые необходимо дообработать // и которые необходимо дообработать
// * ИзмененныеКаталоги - Массив - Каталоги / файлы которые необходимо добавить в индекс
// //
// Возвращаемое значение: // Возвращаемое значение:
// Булево - Признак выполненной обработки файла // Булево - Признак выполненной обработки файла
@ -39,21 +62,41 @@
Лог = ДополнительныеПараметры.Лог; Лог = ДополнительныеПараметры.Лог;
НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария()); НастройкиСценария = ДополнительныеПараметры.УправлениеНастройками.Настройка("Precommt4onecСценарии\НастройкиСценариев").Получить(ИмяСценария());
// анализ файла без изменения его содержимого
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария()); Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
ШаблоннаяОбрабткаФайла(АнализируемыйФайл); ШаблоннаяОбработкаФайла(АнализируемыйФайл);
Возврат Истина; Возврат Истина;
КонецЕсли; КонецЕсли;
// анализ файла с изменением его содержимого
Если АнализируемыйФайл.Существует() И ТипыФайлов.ЭтоФайлИсходников(АнализируемыйФайл) Тогда
Лог.Информация("Обработка файла '%1' по сценарию '%2'", АнализируемыйФайл.ПолноеИмя, ИмяСценария());
Если ШаблоннаяОбработкаФайлаСИзменением(АнализируемыйФайл) Тогда
//Добавим измененный каталог или файл в индекс, чтобы он закоммитился с изменениями
ДополнительныеПараметры.ИзмененныеКаталоги.Добавить(АнализируемыйФайл.ПолноеИмя);
//Добавим измененный файл в журнал изменений без добавления в индекс, чтобы сценарии прошли снова
ДополнительныеПараметры.ФайлыДляПостОбработки.Добавить(АнализируемыйФайл.ПолноеИмя);
Возврат Истина;
КонецЕсли;
КонецЕсли;
Возврат Ложь; Возврат Ложь;
КонецФункции // ОбработатьФайл() КонецФункции // ОбработатьФайл()
Процедура ШаблоннаяОбрабткаФайла(ИмяФайла); Процедура ШаблоннаяОбработкаФайла(ИмяФайла)
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла); СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
@ -63,6 +106,26 @@
КонецЕсли; КонецЕсли;
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла); Если СодержимоеФайла = СодержимоеФайла Тогда
ВызватьИсключение "Содержимое файла равно содержимому файла";
КонецЕсли;
КонецПроцедуры
КонецПроцедуры; Функция ШаблоннаяОбработкаФайлаСИзменением(ИмяФайла)
СодержимоеФайла = ФайловыеОперации.ПрочитатьТекстФайла(ИмяФайла);
Если Не ЗначениеЗаполнено(СодержимоеФайла) Тогда
Возврат Ложь;
КонецЕсли;
ФайловыеОперации.ЗаписатьТекстФайла(ИмяФайла, СодержимоеФайла + "1");
Возврат Истина;
КонецФункции

105
tests/fixtures/Документ.mdo vendored Normal file
View File

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:Document xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="385df754-ca61-4a33-891e-85a76740ce8c">
<producedTypes>
<objectType typeId="dfd6d675-7224-48e1-9f73-27c877f4ebe7" valueTypeId="dc7923eb-814f-4270-94e4-b90e09ba69cc"/>
<refType typeId="514db708-6540-4aac-9572-7bc815a489cd" valueTypeId="e83fcebe-b881-4ea1-ab4f-66ac8b6a9125"/>
<selectionType typeId="cc0398a5-fb11-4964-a2cc-660199555a1a" valueTypeId="cccce58b-d552-4b60-b68b-6d67a46b1241"/>
<listType typeId="f48dffcb-19af-4486-ac12-06c56992a664" valueTypeId="2504943b-5617-4e14-80a4-a5da48ad3ae8"/>
<managerType typeId="5efb0435-af92-4b42-ae5a-411d9fb5250f" valueTypeId="3843301c-ad40-42c1-9e49-1b6bd6f90d32"/>
</producedTypes>
<name>Документ</name>
<synonym>
<key>ru</key>
<value>Документ</value>
</synonym>
<useStandardCommands>true</useStandardCommands>
<inputByString>Document.Документ.StandardAttribute.Number</inputByString>
<createOnInput>Use</createOnInput>
<dataLockControlMode>Managed</dataLockControlMode>
<fullTextSearch>Use</fullTextSearch>
<numberType>String</numberType>
<numberLength>9</numberLength>
<numberAllowedLength>Variable</numberAllowedLength>
<checkUnique>true</checkUnique>
<autonumbering>true</autonumbering>
<postInPrivilegedMode>true</postInPrivilegedMode>
<unpostInPrivilegedMode>true</unpostInPrivilegedMode>
<attributes uuid="01eea830-71a8-4902-b017-62a4d83a4740">
<name>Реквизит</name>
<synonym>
<key>ru</key>
<value>Реквизит</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>10</length>
</stringQualifiers>
</type>
<fullTextSearch>Use</fullTextSearch>
</attributes>
<tabularSections uuid="2c6232da-69cb-4df3-8edb-266590e0b802">
<producedTypes>
<objectType typeId="09b7654a-ee86-421d-af11-ebf35b735f4a" valueTypeId="8550bec4-2626-4a90-9ba4-157e89f19e2d"/>
<rowType typeId="692d5e88-96ff-4bc9-bb0d-3294edbbf1bc" valueTypeId="2ae0c435-e1ea-4b69-8cfc-9bb34e8db960"/>
</producedTypes>
<name>ТабличнаяЧасть</name>
<synonym>
<key>ru</key>
<value>Табличная часть</value>
</synonym>
<attributes uuid="1ebe77fa-0796-4dfe-b378-32e7bb78452c">
<name>Реквизит</name>
<synonym>
<key>ru</key>
<value>Реквизит</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>10</length>
</stringQualifiers>
</type>
<fullTextSearch>Use</fullTextSearch>
</attributes>
<attributes uuid="adbb4501-d947-4486-a88d-6a02a30e5f98">
<name>Реквизит1</name>
<synonym>
<key>ru</key>
<value>Реквизит1</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>10</length>
</stringQualifiers>
</type>
<fullTextSearch>Use</fullTextSearch>
</attributes>
</tabularSections>
<tabularSections uuid="bb551f9f-818a-4572-b64d-9b1b34e714a6">
<producedTypes>
<objectType typeId="5e9118b2-a4a0-4748-9386-763b9731c2cf" valueTypeId="75025611-4968-4d40-84e2-748123f73818"/>
<rowType typeId="1adafac5-71fd-45a0-9814-c5de37e5f917" valueTypeId="e37fc074-f327-4900-b612-6f0510e85636"/>
</producedTypes>
<name>ТабличнаяЧасть1</name>
<synonym>
<key>ru</key>
<value>Табличная часть1</value>
</synonym>
<attributes uuid="cabdb765-3400-4065-8c71-7c355202c9da">
<name>Реквизит</name>
<synonym>
<key>ru</key>
<value>Реквизит</value>
</synonym>
<type>
<types>String</types>
<stringQualifiers>
<length>10</length>
</stringQualifiers>
</type>
<fullTextSearch>Use</fullTextSearch>
</attributes>
</tabularSections>
</mdclass:Document>

376
tests/fixtures/Документ.xml vendored Normal file
View File

@ -0,0 +1,376 @@
<?xml version="1.0" encoding="UTF-8"?>
<MetaDataObject xmlns="http://v8.1c.ru/8.3/MDClasses" xmlns:app="http://v8.1c.ru/8.2/managed-application/core" xmlns:cfg="http://v8.1c.ru/8.1/data/enterprise/current-config" xmlns:cmi="http://v8.1c.ru/8.2/managed-application/cmi" xmlns:ent="http://v8.1c.ru/8.1/data/enterprise" xmlns:lf="http://v8.1c.ru/8.2/managed-application/logform" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:sys="http://v8.1c.ru/8.1/data/ui/fonts/system" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:web="http://v8.1c.ru/8.1/data/ui/colors/web" xmlns:win="http://v8.1c.ru/8.1/data/ui/colors/windows" xmlns:xen="http://v8.1c.ru/8.3/xcf/enums" xmlns:xpr="http://v8.1c.ru/8.3/xcf/predef" xmlns:xr="http://v8.1c.ru/8.3/xcf/readable" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.7">
<Document uuid="931ff8b9-d808-49bc-a47c-8e3f2faa223f">
<InternalInfo>
<xr:GeneratedType name="DocumentObject.Документ" category="Object">
<xr:TypeId>0a63ee71-6357-4a50-b082-35f60b3be0e0</xr:TypeId>
<xr:ValueId>10bc61a2-ef43-4627-9748-ae6089c9bde1</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentRef.Документ" category="Ref">
<xr:TypeId>e1fe1cb5-e8cb-441e-b2e3-a72ee43a4038</xr:TypeId>
<xr:ValueId>6e4dfc1f-8cc4-4fd9-9331-532a9b25b94a</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentSelection.Документ" category="Selection">
<xr:TypeId>86597e09-2004-4fcc-9c8f-7b1e35aa1431</xr:TypeId>
<xr:ValueId>0dc19544-4f64-4479-ad60-e06dda1298ee</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentList.Документ" category="List">
<xr:TypeId>855d48d4-5dce-4629-9998-d7a693d9d8d2</xr:TypeId>
<xr:ValueId>c74d8db3-5efd-4832-b863-6f8678445184</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentManager.Документ" category="Manager">
<xr:TypeId>0cb5077c-9a73-4650-b93c-9d489b897d3b</xr:TypeId>
<xr:ValueId>5d3b3e0c-fb2e-45a8-b528-d257f903e7bc</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>Документ</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Документ</v8:content>
</v8:item>
</Synonym>
<Comment>Документ</Comment>
<UseStandardCommands>true</UseStandardCommands>
<Numerator/>
<NumberType>String</NumberType>
<NumberLength>10</NumberLength>
<NumberAllowedLength>Fixed</NumberAllowedLength>
<NumberPeriodicity>Year</NumberPeriodicity>
<CheckUnique>true</CheckUnique>
<Autonumbering>true</Autonumbering>
<StandardAttributes>
<xr:StandardAttribute name="Posted">
<xr:LinkByType/>
<xr:FillChecking>DontCheck</xr:FillChecking>
<xr:MultiLine>false</xr:MultiLine>
<xr:FillFromFillingValue>false</xr:FillFromFillingValue>
<xr:CreateOnInput>Auto</xr:CreateOnInput>
<xr:MaxValue xsi:nil="true"/>
<xr:ToolTip/>
<xr:ExtendedEdit>false</xr:ExtendedEdit>
<xr:Format/>
<xr:ChoiceForm/>
<xr:QuickChoice>Auto</xr:QuickChoice>
<xr:ChoiceHistoryOnInput>Auto</xr:ChoiceHistoryOnInput>
<xr:EditFormat/>
<xr:PasswordMode>false</xr:PasswordMode>
<xr:DataHistory>Use</xr:DataHistory>
<xr:MarkNegatives>false</xr:MarkNegatives>
<xr:MinValue xsi:nil="true"/>
<xr:Synonym/>
<xr:Comment/>
<xr:FullTextSearch>Use</xr:FullTextSearch>
<xr:ChoiceParameterLinks/>
<xr:FillValue xsi:nil="true"/>
<xr:Mask/>
<xr:ChoiceParameters/>
</xr:StandardAttribute>
<xr:StandardAttribute name="Ref">
<xr:LinkByType/>
<xr:FillChecking>DontCheck</xr:FillChecking>
<xr:MultiLine>false</xr:MultiLine>
<xr:FillFromFillingValue>false</xr:FillFromFillingValue>
<xr:CreateOnInput>Auto</xr:CreateOnInput>
<xr:MaxValue xsi:nil="true"/>
<xr:ToolTip/>
<xr:ExtendedEdit>false</xr:ExtendedEdit>
<xr:Format/>
<xr:ChoiceForm/>
<xr:QuickChoice>Auto</xr:QuickChoice>
<xr:ChoiceHistoryOnInput>Auto</xr:ChoiceHistoryOnInput>
<xr:EditFormat/>
<xr:PasswordMode>false</xr:PasswordMode>
<xr:DataHistory>Use</xr:DataHistory>
<xr:MarkNegatives>false</xr:MarkNegatives>
<xr:MinValue xsi:nil="true"/>
<xr:Synonym/>
<xr:Comment/>
<xr:FullTextSearch>Use</xr:FullTextSearch>
<xr:ChoiceParameterLinks/>
<xr:FillValue xsi:nil="true"/>
<xr:Mask/>
<xr:ChoiceParameters/>
</xr:StandardAttribute>
<xr:StandardAttribute name="DeletionMark">
<xr:LinkByType/>
<xr:FillChecking>DontCheck</xr:FillChecking>
<xr:MultiLine>false</xr:MultiLine>
<xr:FillFromFillingValue>false</xr:FillFromFillingValue>
<xr:CreateOnInput>Auto</xr:CreateOnInput>
<xr:MaxValue xsi:nil="true"/>
<xr:ToolTip/>
<xr:ExtendedEdit>false</xr:ExtendedEdit>
<xr:Format/>
<xr:ChoiceForm/>
<xr:QuickChoice>Auto</xr:QuickChoice>
<xr:ChoiceHistoryOnInput>Auto</xr:ChoiceHistoryOnInput>
<xr:EditFormat/>
<xr:PasswordMode>false</xr:PasswordMode>
<xr:DataHistory>Use</xr:DataHistory>
<xr:MarkNegatives>false</xr:MarkNegatives>
<xr:MinValue xsi:nil="true"/>
<xr:Synonym/>
<xr:Comment/>
<xr:FullTextSearch>Use</xr:FullTextSearch>
<xr:ChoiceParameterLinks/>
<xr:FillValue xsi:nil="true"/>
<xr:Mask/>
<xr:ChoiceParameters/>
</xr:StandardAttribute>
<xr:StandardAttribute name="Date">
<xr:LinkByType/>
<xr:FillChecking>ShowError</xr:FillChecking>
<xr:MultiLine>false</xr:MultiLine>
<xr:FillFromFillingValue>false</xr:FillFromFillingValue>
<xr:CreateOnInput>Auto</xr:CreateOnInput>
<xr:MaxValue xsi:nil="true"/>
<xr:ToolTip/>
<xr:ExtendedEdit>false</xr:ExtendedEdit>
<xr:Format/>
<xr:ChoiceForm/>
<xr:QuickChoice>Auto</xr:QuickChoice>
<xr:ChoiceHistoryOnInput>Auto</xr:ChoiceHistoryOnInput>
<xr:EditFormat/>
<xr:PasswordMode>false</xr:PasswordMode>
<xr:DataHistory>Use</xr:DataHistory>
<xr:MarkNegatives>false</xr:MarkNegatives>
<xr:MinValue xsi:nil="true"/>
<xr:Synonym/>
<xr:Comment/>
<xr:FullTextSearch>Use</xr:FullTextSearch>
<xr:ChoiceParameterLinks/>
<xr:FillValue xsi:nil="true"/>
<xr:Mask/>
<xr:ChoiceParameters/>
</xr:StandardAttribute>
<xr:StandardAttribute name="Number">
<xr:LinkByType/>
<xr:FillChecking>DontCheck</xr:FillChecking>
<xr:MultiLine>false</xr:MultiLine>
<xr:FillFromFillingValue>false</xr:FillFromFillingValue>
<xr:CreateOnInput>Auto</xr:CreateOnInput>
<xr:MaxValue xsi:nil="true"/>
<xr:ToolTip/>
<xr:ExtendedEdit>false</xr:ExtendedEdit>
<xr:Format/>
<xr:ChoiceForm/>
<xr:QuickChoice>Auto</xr:QuickChoice>
<xr:ChoiceHistoryOnInput>Auto</xr:ChoiceHistoryOnInput>
<xr:EditFormat/>
<xr:PasswordMode>false</xr:PasswordMode>
<xr:DataHistory>Use</xr:DataHistory>
<xr:MarkNegatives>false</xr:MarkNegatives>
<xr:MinValue xsi:nil="true"/>
<xr:Synonym/>
<xr:Comment/>
<xr:FullTextSearch>Use</xr:FullTextSearch>
<xr:ChoiceParameterLinks/>
<xr:FillValue xsi:type="xs:string"> </xr:FillValue>
<xr:Mask/>
<xr:ChoiceParameters/>
</xr:StandardAttribute>
</StandardAttributes>
<Characteristics/>
<BasedOn>
<xr:Item xsi:type="xr:MDObjectRef">Document.ВводНачальныхОстатков</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">Document.РКО</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">Document.ПКО</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">Document.АвансовыйОтчет</xr:Item>
<xr:Item xsi:type="xr:MDObjectRef">Document.ВозмещениеШтрафы</xr:Item>
</BasedOn>
<InputByString>
<xr:Field>Document.РКО.StandardAttribute.Number</xr:Field>
</InputByString>
<CreateOnInput>Use</CreateOnInput>
<SearchStringModeOnInputByString>Begin</SearchStringModeOnInputByString>
<FullTextSearchOnInputByString>Use</FullTextSearchOnInputByString>
<ChoiceDataGetModeOnInputByString>Directly</ChoiceDataGetModeOnInputByString>
<DefaultObjectForm>Document.РКО.Form.ФормаДокумента</DefaultObjectForm>
<DefaultListForm>Document.РКО.Form.ФормаСписка</DefaultListForm>
<DefaultChoiceForm>Document.РКО.Form.ФормаСписка</DefaultChoiceForm>
<AuxiliaryObjectForm/>
<AuxiliaryListForm/>
<AuxiliaryChoiceForm/>
<Posting>Allow</Posting>
<RealTimePosting>Deny</RealTimePosting>
<RegisterRecordsDeletion>AutoDeleteOff</RegisterRecordsDeletion>
<RegisterRecordsWritingOnPost>WriteModified</RegisterRecordsWritingOnPost>
<SequenceFilling>AutoFill</SequenceFilling>
<RegisterRecords></RegisterRecords>
<PostInPrivilegedMode>false</PostInPrivilegedMode>
<UnpostInPrivilegedMode>false</UnpostInPrivilegedMode>
<IncludeHelpInContents>true</IncludeHelpInContents>
<DataLockFields/>
<DataLockControlMode>Automatic</DataLockControlMode>
<FullTextSearch>Use</FullTextSearch>
<ObjectPresentation/>
<ExtendedObjectPresentation/>
<ListPresentation/>
<ExtendedListPresentation/>
<Explanation/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<DataHistory>DontUse</DataHistory>
</Properties>
<ChildObjects>
<Attribute uuid="8fa5eded-c1ec-4edc-b0fe-dc673c7486c7">
<Properties>
<Name>UID</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>UID</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>xs:string</v8:Type>
<v8:StringQualifiers>
<v8:Length>36</v8:Length>
<v8:AllowedLength>Variable</v8:AllowedLength>
</v8:StringQualifiers>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>Index</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Attribute uuid="d39a6a5c-73a0-4df9-a3b1-b62fb0c2041a">
<Properties>
<Name>Автор</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Автор</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>cfg:CatalogRef.Пользователи</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillFromFillingValue>false</FillFromFillingValue>
<FillValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>Index</Indexing>
<FullTextSearch>DontUse</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
<Form>ФормаДокумента</Form>
<Form>ФормаСписка</Form>
<TabularSection uuid="95245065-867e-4d1f-a8f9-ebed62cd0489">
<InternalInfo>
<xr:GeneratedType name="DocumentTabularSection.РКО.ТабличнаяЧасть1" category="TabularSection">
<xr:TypeId>80865b81-ba79-4e7f-bbb6-c9817e08f4dd</xr:TypeId>
<xr:ValueId>3608b01d-e050-453f-ae0a-93e3eea243c3</xr:ValueId>
</xr:GeneratedType>
<xr:GeneratedType name="DocumentTabularSectionRow.РКО.ТабличнаяЧасть1" category="TabularSectionRow">
<xr:TypeId>7720174e-1f6c-4639-98d8-9a488f6488a5</xr:TypeId>
<xr:ValueId>73fe98f8-8875-49ef-ac49-37806daf575b</xr:ValueId>
</xr:GeneratedType>
</InternalInfo>
<Properties>
<Name>ТабличнаяЧасть1</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>ТабличнаяЧасть1</v8:content>
</v8:item>
</Synonym>
<Comment>ТабличнаяЧасть1</Comment>
<ToolTip/>
<FillChecking>DontCheck</FillChecking>
</Properties>
<ChildObjects>
<Attribute uuid="b04234e4-d0ca-4a9c-9735-794e9e798f7c">
<Properties>
<Name>Субконто</Name>
<Synonym>
<v8:item>
<v8:lang>ru</v8:lang>
<v8:content>Субконто</v8:content>
</v8:item>
</Synonym>
<Comment/>
<Type>
<v8:Type>cfg:CatalogRef.ВидыОпераций</v8:Type>
<v8:Type>cfg:CatalogRef.Сотрудники</v8:Type>
<v8:Type>cfg:CatalogRef.СтатьиЗатрат</v8:Type>
<v8:Type>cfg:CatalogRef.Пользователи</v8:Type>
<v8:Type>cfg:CatalogRef.Контрагенты</v8:Type>
<v8:Type>cfg:CatalogRef.ЕдиницыИзмерения</v8:Type>
<v8:Type>cfg:CatalogRef.БанковскиеСчета</v8:Type>
<v8:Type>cfg:CatalogRef.Номенклатура</v8:Type>
<v8:Type>cfg:CatalogRef.Кассы</v8:Type>
<v8:Type>cfg:CatalogRef.Машины</v8:Type>
<v8:Type>cfg:CatalogRef.Подразделения</v8:Type>
</Type>
<PasswordMode>false</PasswordMode>
<Format/>
<EditFormat/>
<ToolTip/>
<MarkNegatives>false</MarkNegatives>
<Mask/>
<MultiLine>false</MultiLine>
<ExtendedEdit>false</ExtendedEdit>
<MinValue xsi:nil="true"/>
<MaxValue xsi:nil="true"/>
<FillChecking>DontCheck</FillChecking>
<ChoiceFoldersAndItems>Items</ChoiceFoldersAndItems>
<ChoiceParameterLinks/>
<ChoiceParameters/>
<QuickChoice>Auto</QuickChoice>
<CreateOnInput>Auto</CreateOnInput>
<ChoiceForm/>
<LinkByType/>
<ChoiceHistoryOnInput>Auto</ChoiceHistoryOnInput>
<Indexing>Index</Indexing>
<FullTextSearch>Use</FullTextSearch>
<DataHistory>Use</DataHistory>
</Properties>
</Attribute>
</ChildObjects>
</TabularSection>
</ChildObjects>
</Document>
</MetaDataObject>

View File

@ -0,0 +1,16 @@
Процедура РадномныеВычисления (парам1)
КонецПроцедуры;
Функция РадномныеВычисления() Экспорт
КонецФункции
Процедура Изменить(Парам1, Парам2)
КонецПроцедуры
Процедура Изменить(Парам 1 = Неопределено)
КонецФункции
Функция _Функ1()
КонецФункции

View File

@ -8,15 +8,19 @@
// Основная точка входа // Основная точка входа
Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт
юТест = ЮнитТестирование; юТест = ЮнитТестирование;
ВсеТесты = Новый Массив; ВсеТесты = Новый Массив;
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурВызываетИсключение"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурВызываетИсключение");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНеИсходник"); ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНеИсходник");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаИмеетМетодПолученияНастроек");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийИмеетМетодПолученияНастроек");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаВозвращаетНастройки");
ВсеТесты.Добавить("ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийВозвращаетНастройки");
Возврат ВсеТесты; Возврат ВсеТесты;
@ -28,7 +32,7 @@
Лог = Логирование.ПолучитьЛог(ВремТестер.ИмяЛога()); Лог = Логирование.ПолучитьЛог(ВремТестер.ИмяЛога());
ВключитьПоказОтладки(); ВключитьПоказОтладки();
МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов; МенеджерВременныхФайлов = Новый МенеджерВременныхФайлов;
КонецПроцедуры КонецПроцедуры
@ -37,46 +41,81 @@
МенеджерВременныхФайлов.Удалить(); МенеджерВременныхФайлов.Удалить();
МенеджерВременныхФайлов = Неопределено; МенеджерВременныхФайлов = Неопределено;
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаИмеетМетодПолученияНастроек() Экспорт
ОбъектСценария = ПолучитьСценарий("ОтключениеПолнотекстовогоПоиска.os");
СценарийИмеетМетод(ОбъектСценария, НазваниеМетодаНастроек());
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийИмеетМетодПолученияНастроек() Экспорт
ОбъектСценария = ПолучитьСценарий("РазборОтчетовОбработокРасширений.os");
СценарийИмеетМетод(ОбъектСценария, НазваниеМетодаНастроек());
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийОтключенияПолнотекстовогоПоискаВозвращаетНастройки() Экспорт
ОбъектСценария = ПолучитьСценарий("ОтключениеПолнотекстовогоПоиска.os");
СценарийВозвращаетНастройки(ОбъектСценария, "ОтключениеПолнотекстовогоПоиска");
КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийРазбораОтчетовОбработокРасширенийВозвращаетНастройки() Экспорт
ОбъектСценария = ПолучитьСценарий("РазборОтчетовОбработокРасширений.os");
СценарийВозвращаетНастройки(ОбъектСценария, "РазборОтчетовОбработокРасширений");
КонецПроцедуры КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурВызываетИсключение() Экспорт Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурВызываетИсключение() Экспорт
ОбъектСценария = ПолучитьСценарийОбработкиПроверкаДублейПроцедурИФункций(); ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os");
Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурНегативныйТест.bsl")); Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурНегативныйТест.bsl"));
СПараметрами = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурСПараметрами.bsl"));
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "обнаружены неуникальные имена методов");
ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, "обнаружены неуникальные имена методов");
ВызываетсяИсключениеСТекстом(ОбъектСценария, СПараметрами, "обнаружены неуникальные имена методов");
КонецПроцедуры КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл() Экспорт Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурОбработаетФайл() Экспорт
Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурПоложительныйТест.bsl")); Файл = Новый Файл(ОбъединитьПути(КаталогТестовыхФикстур(), "ПроверкаДублейПроцедурПоложительныйТест.bsl"));
ОбъектСценария = ПолучитьСценарийОбработкиПроверкаДублейПроцедурИФункций(); ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os");
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки()); Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
Ожидаем.Что(Результат, Истина).ЭтоИстина(); Ожидаем.Что(Результат, Истина).ЭтоИстина();
КонецПроцедуры КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл() Экспорт Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНесуществующийФайл() Экспорт
Файл = Новый Файл(ПолучитьИмяВременногоФайла("bsl")); Файл = Новый Файл(ПолучитьИмяВременногоФайла("bsl"));
ОбъектСценария = ПолучитьСценарийОбработкиПроверкаДублейПроцедурИФункций(); ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os");
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки()); Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
Ожидаем.Что(Результат, Истина).ЭтоЛожь(); Ожидаем.Что(Результат, Истина).ЭтоЛожь();
КонецПроцедуры КонецПроцедуры
Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНеИсходник() Экспорт Процедура ТестДолжен_ПроверитьЧтоСценарийПроверкиДублейПроцедурНеОбработаетНеИсходник() Экспорт
Файл = Новый Файл(МенеджерВременныхФайлов.СоздатьФайл("xml")); Файл = Новый Файл(МенеджерВременныхФайлов.СоздатьФайл("xml"));
ОбъектСценария = ПолучитьСценарийОбработкиПроверкаДублейПроцедурИФункций(); ОбъектСценария = ПолучитьСценарий("ПроверкаДублейПроцедурИФункций.os");
Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки()); Результат = ОбъектСценария.ОбработатьФайл(Файл, Файл.Путь, ПолучитьДополнительныеНастройки());
Ожидаем.Что(Результат, Истина).ЭтоЛожь(); Ожидаем.Что(Результат, Истина).ЭтоЛожь();
КонецПроцедуры КонецПроцедуры
Процедура ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, ТекстИсключения) Процедура ВызываетсяИсключениеСТекстом(ОбъектСценария, Файл, ТекстИсключения)
@ -87,20 +126,39 @@
ПараметрыМетода.Добавить(Файл); ПараметрыМетода.Добавить(Файл);
ПараметрыМетода.Добавить(Файл.Путь); ПараметрыМетода.Добавить(Файл.Путь);
ПараметрыМетода.Добавить(ДополнительныеНастройки); ПараметрыМетода.Добавить(ДополнительныеНастройки);
Ожидаем.Что(ОбъектСценария).Метод("ОбработатьФайл", ПараметрыМетода).ВыбрасываетИсключение(ТекстИсключения); Ожидаем.Что(ОбъектСценария).Метод("ОбработатьФайл", ПараметрыМетода).ВыбрасываетИсключение(ТекстИсключения);
КонецПроцедуры КонецПроцедуры
Функция ПолучитьСценарийОбработкиПроверкаДублейПроцедурИФункций() Процедура СценарийИмеетМетод(ОбъектСценария, ИмяМетода)
Сценарий = ОбъединитьПути(КаталогИсходников(), "src", "СценарииОбработки", "ПроверкаДублейПроцедурИФункций.os"); Рефлектор = Новый Рефлектор;
ЕстьМетод = Рефлектор.МетодСуществует(ОбъектСценария, ИмяМетода);
Ожидаем.Что(ЕстьМетод, Истина).ЭтоИстина();
КонецПроцедуры
Функция ПолучитьСценарий(ИмяСценария)
Сценарий = ОбъединитьПути(КаталогИсходников(), "src", "СценарииОбработки", ИмяСценария);
ОбъектСценария = ЗагрузитьСценарий(Сценарий); ОбъектСценария = ЗагрузитьСценарий(Сценарий);
Возврат ОбъектСценария; Возврат ОбъектСценария;
КонецФункции КонецФункции
Процедура СценарийВозвращаетНастройки(ОбъектСценария, ИмяНастройки)
Рефлектор = Новый Рефлектор;
СтруктураНастроек = Рефлектор.ВызватьМетод(ОбъектСценария, НазваниеМетодаНастроек());
Утверждения.ПроверитьРавенство(СтруктураНастроек.ИмяСценария, ИмяНастройки);
Утверждения.ПроверитьРавенство(ТипЗнч(СтруктураНастроек.Настройка), Тип("Соответствие"));
КонецПроцедуры
Процедура ВключитьПоказОтладки() Процедура ВключитьПоказОтладки()
Лог.УстановитьУровень(УровниЛога.Отладка); Лог.УстановитьУровень(УровниЛога.Отладка);
КонецПроцедуры КонецПроцедуры
@ -117,11 +175,17 @@
Возврат ОбъединитьПути(ТекущийСценарий().Каталог, ".."); Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..");
КонецФункции КонецФункции
Функция НазваниеМетодаНастроек()
Возврат "ПолучитьСтандартныеНастройкиСценария";
КонецФункции
Функция ПолучитьДополнительныеНастройки() Функция ПолучитьДополнительныеНастройки()
УправлениеНастройками = Новый НастройкиРепозитория(ТекущийКаталог()); УправлениеНастройками = Новый НастройкиРепозитория(ТекущийКаталог());
ДополнительныеНастройки = Новый Структура("Лог, УправлениеНастройками", Лог, УправлениеНастройками); ДополнительныеНастройки = Новый Структура("Лог, УправлениеНастройками", Лог, УправлениеНастройками);
Возврат ДополнительныеНастройки; Возврат ДополнительныеНастройки;
КонецФункции КонецФункции

View File

@ -6,6 +6,7 @@
"ДобавлениеПробеловПередКлючевымиСловами.os", "ДобавлениеПробеловПередКлючевымиСловами.os",
"ЗапретИспользованияПерейти.os", "ЗапретИспользованияПерейти.os",
"КорректировкаXMLФорм.os", "КорректировкаXMLФорм.os",
"ОтключениеПолнотекстовогоПоиска.os",
"ПроверкаДублейПроцедурИФункций.os", "ПроверкаДублейПроцедурИФункций.os",
"ПроверкаКорректностиОбластей.os", "ПроверкаКорректностиОбластей.os",
"РазборОбычныхФормНаИсходники.os", "РазборОбычныхФормНаИсходники.os",
@ -17,6 +18,14 @@
"УдалениеЛишнихПустыхСтрок.os" "УдалениеЛишнихПустыхСтрок.os"
], ],
"НастройкиСценариев": { "НастройкиСценариев": {
"ОтключениеПолнотекстовогоПоиска": {
"МетаданныеДляИсключения": {
"src\\_example.xml": [
"Номер"
],
"src\\_example2.xml": []
}
},
"РазборОтчетовОбработокРасширений": { "РазборОтчетовОбработокРасширений": {
"ИспользоватьНастройкиПоУмолчанию": true, "ИспользоватьНастройкиПоУмолчанию": true,
"ВерсияПлатформы": "" "ВерсияПлатформы": ""