diff --git a/README.md b/README.md
index 8616a1b..f541fd8 100644
--- a/README.md
+++ b/README.md
@@ -12,9 +12,9 @@
В РАЗРАБОТКЕ.
Скрипт для непрерывной интеграции с использованием GitLab.
-#### ГенераторФичVA.sbsl
+#### АвтоФичиVA.sbsl
В РАЗРАБОТКЕ.
-Скрипт, позволяющий по шаблону сгенерировать файлы feature для использования с VanessaAutomation.
+Скрипт, позволяющий сгенерировать и запустить тесты в VanessaAutomation по шаблонам.
### Библиотеки
#### ЗапускСкриптов.sbsl
diff --git a/VA-Тесты/Шаблоны/Документы-Открытие-Создание-Печать-Исправление.feature b/VA-Тесты/Шаблоны/Документы-Открытие-Создание-Печать-Исправление.feature
new file mode 100644
index 0000000..dc4f069
--- /dev/null
+++ b/VA-Тесты/Шаблоны/Документы-Открытие-Создание-Печать-Исправление.feature
@@ -0,0 +1,23 @@
+#report.feature=Документ "%ИмяОбъекта%"
+Сценарий: Открытие формы списка документа "%ИмяОбъекта%"
+ Дано Открытие формы списка документа "%ИмяОбъекта%"
+
+#report.feature=Документ "%ИмяОбъекта%"
+Сценарий: Открытие формы существующего документа "%ИмяОбъекта%"
+ Дано Открытие формы существующего документа "%ИмяОбъекта%"
+
+#report.feature=Документ "%ИмяОбъекта%"
+Сценарий: Открытие формы нового документа "%ИмяОбъекта%"
+ Дано Открытие формы нового документа "%ИмяОбъекта%"
+
+#report.feature=Документ "%ИмяОбъекта%"
+Сценарий: Перепроведение существующего документа "%ИмяОбъекта%"
+ Дано Перепроведение существующего документа "%ИмяОбъекта%"
+
+#report.feature=Документ "%ИмяОбъекта%"
+Сценарий: Исправление существующего документа "%ИмяОбъекта%"
+ Дано Исправление существующего документа "%ИмяОбъекта%"
+
+#report.feature=Документ "%ИмяОбъекта%"
+Сценарий: Печать существующего документа "%ИмяОбъекта%"
+ Дано Печать существующего документа "%ИмяОбъекта%"
diff --git a/VA-Тесты/Шаблоны/Документы-Открытие-Создание-Печать.feature b/VA-Тесты/Шаблоны/Документы-Открытие-Создание-Печать.feature
new file mode 100644
index 0000000..474bddf
--- /dev/null
+++ b/VA-Тесты/Шаблоны/Документы-Открытие-Создание-Печать.feature
@@ -0,0 +1,19 @@
+#report.feature=Документ "%ИмяОбъекта%"
+Сценарий: Открытие формы списка документа "%ИмяОбъекта%"
+ Дано Открытие формы списка документа "%ИмяОбъекта%"
+
+#report.feature=Документ "%ИмяОбъекта%"
+Сценарий: Открытие формы существующего документа "%ИмяОбъекта%"
+ Дано Открытие формы существующего документа "%ИмяОбъекта%"
+
+#report.feature=Документ "%ИмяОбъекта%"
+Сценарий: Открытие формы нового документа "%ИмяОбъекта%"
+ Дано Открытие формы нового документа "%ИмяОбъекта%"
+
+#report.feature=Документ "%ИмяОбъекта%"
+Сценарий: Перепроведение существующего документа "%ИмяОбъекта%"
+ Дано Перепроведение существующего документа "%ИмяОбъекта%"
+
+#report.feature=Документ "%ИмяОбъекта%"
+Сценарий: Печать существующего документа "%ИмяОбъекта%"
+ Дано Печать существующего документа "%ИмяОбъекта%"
diff --git a/VA-Тесты/Шаблоны/Документы-Открытие-Создание.feature b/VA-Тесты/Шаблоны/Документы-Открытие-Создание.feature
new file mode 100644
index 0000000..52d10d6
--- /dev/null
+++ b/VA-Тесты/Шаблоны/Документы-Открытие-Создание.feature
@@ -0,0 +1,15 @@
+#report.feature=Документ "%ИмяОбъекта%"
+Сценарий: Открытие формы списка документа "%ИмяОбъекта%"
+ Дано Открытие формы списка документа "%ИмяОбъекта%"
+
+#report.feature=Документ "%ИмяОбъекта%"
+Сценарий: Открытие формы существующего документа "%ИмяОбъекта%"
+ Дано Открытие формы существующего документа "%ИмяОбъекта%"
+
+#report.feature=Документ "%ИмяОбъекта%"
+Сценарий: Открытие формы нового документа "%ИмяОбъекта%"
+ Дано Открытие формы нового документа "%ИмяОбъекта%"
+
+#report.feature=Документ "%ИмяОбъекта%"
+Сценарий: Перепроведение существующего документа "%ИмяОбъекта%"
+ Дано Перепроведение существующего документа "%ИмяОбъекта%"
diff --git a/VA-Тесты/Шаблоны/Документы-Открытие.feature b/VA-Тесты/Шаблоны/Документы-Открытие.feature
new file mode 100644
index 0000000..26dce44
--- /dev/null
+++ b/VA-Тесты/Шаблоны/Документы-Открытие.feature
@@ -0,0 +1,7 @@
+#report.feature=Документ "%ИмяОбъекта%"
+Сценарий: Открытие формы списка документа "%ИмяОбъекта%"
+ Дано Открытие формы списка документа "%ИмяОбъекта%"
+
+#report.feature=Документ "%ИмяОбъекта%"
+Сценарий: Открытие формы существующего документа "%ИмяОбъекта%"
+ Дано Открытие формы существующего документа "%ИмяОбъекта%"
diff --git a/VA-Тесты/Шаблоны/ЖурналыДокументов.feature b/VA-Тесты/Шаблоны/ЖурналыДокументов.feature
new file mode 100644
index 0000000..c27fdaf
--- /dev/null
+++ b/VA-Тесты/Шаблоны/ЖурналыДокументов.feature
@@ -0,0 +1,3 @@
+#report.feature=Журнал документов "%ИмяОбъекта%"
+Сценарий: Открытие формы журнала документов "%ИмяОбъекта%"
+ Дано Открытие формы журнала документов "%ИмяОбъекта%"
diff --git a/VA-Тесты/Шаблоны/Обработки.feature b/VA-Тесты/Шаблоны/Обработки.feature
new file mode 100644
index 0000000..e987efa
--- /dev/null
+++ b/VA-Тесты/Шаблоны/Обработки.feature
@@ -0,0 +1,3 @@
+#report.feature=Обработка "%ИмяОбъекта%"
+Сценарий: Открытие основной формы обработки "%ИмяОбъекта%"
+ Дано Открытие основной формы обработки "%ИмяОбъекта%"
diff --git a/VA-Тесты/Шаблоны/ОбщиеФормы.feature b/VA-Тесты/Шаблоны/ОбщиеФормы.feature
new file mode 100644
index 0000000..8408f54
--- /dev/null
+++ b/VA-Тесты/Шаблоны/ОбщиеФормы.feature
@@ -0,0 +1,3 @@
+#report.feature=Общая форма "%ИмяОбъекта%"
+Сценарий: Открытие общей формы "%ИмяОбъекта%"
+ Дано Открытие общей формы "%ИмяОбъекта%"
diff --git a/VA-Тесты/Шаблоны/Отчеты.feature b/VA-Тесты/Шаблоны/Отчеты.feature
new file mode 100644
index 0000000..cac7e2d
--- /dev/null
+++ b/VA-Тесты/Шаблоны/Отчеты.feature
@@ -0,0 +1,3 @@
+#report.feature=Отчет "%ИмяОбъекта%"
+Сценарий: Формирование отчета "%ИмяОбъекта%"
+ Дано Формирование отчета "%ИмяОбъекта%"
diff --git a/VA-Тесты/Шаблоны/Справочники-Открытие-Создание-Печать.feature b/VA-Тесты/Шаблоны/Справочники-Открытие-Создание-Печать.feature
new file mode 100644
index 0000000..7c17b8f
--- /dev/null
+++ b/VA-Тесты/Шаблоны/Справочники-Открытие-Создание-Печать.feature
@@ -0,0 +1,19 @@
+#report.feature=Справочник "%ИмяОбъекта%"
+Сценарий: Открытие формы списка справочника "%ИмяОбъекта%"
+ Дано Открытие формы списка справочника "%ИмяОбъекта%"
+
+#report.feature=Справочник "%ИмяОбъекта%"
+Сценарий: Открытие формы существующего элемента справочника "%ИмяОбъекта%"
+ Дано Открытие формы существующего элемента справочника "%ИмяОбъекта%"
+
+#report.feature=Справочник "%ИмяОбъекта%"
+Сценарий: Открытие формы нового элемента справочника "%ИмяОбъекта%"
+ Дано Открытие формы нового элемента справочника "%ИмяОбъекта%"
+
+#report.feature=Справочник "%ИмяОбъекта%"
+Сценарий: Перезапись существующего элемента справочника "%ИмяОбъекта%"
+ Дано Перезапись существующего элемента справочника "%ИмяОбъекта%"
+
+#report.feature=Справочник "%ИмяОбъекта%"
+Сценарий: Печать существующего элемента справочника "%ИмяОбъекта%"
+ Дано Печать существующего элемента справочника "%ИмяОбъекта%"
diff --git a/VA-Тесты/Шаблоны/Справочники-Открытие-Создание.feature b/VA-Тесты/Шаблоны/Справочники-Открытие-Создание.feature
new file mode 100644
index 0000000..9b1bd29
--- /dev/null
+++ b/VA-Тесты/Шаблоны/Справочники-Открытие-Создание.feature
@@ -0,0 +1,15 @@
+#report.feature=Справочник "%ИмяОбъекта%"
+Сценарий: Открытие формы списка справочника "%ИмяОбъекта%"
+ Дано Открытие формы списка справочника "%ИмяОбъекта%"
+
+#report.feature=Справочник "%ИмяОбъекта%"
+Сценарий: Открытие формы существующего элемента справочника "%ИмяОбъекта%"
+ Дано Открытие формы существующего элемента справочника "%ИмяОбъекта%"
+
+#report.feature=Справочник "%ИмяОбъекта%"
+Сценарий: Открытие формы нового элемента справочника "%ИмяОбъекта%"
+ Дано Открытие формы нового элемента справочника "%ИмяОбъекта%"
+
+#report.feature=Справочник "%ИмяОбъекта%"
+Сценарий: Перезапись существующего элемента справочника "%ИмяОбъекта%"
+ Дано Перезапись существующего элемента справочника "%ИмяОбъекта%"
diff --git a/VA-Тесты/Шаблоны/Справочники-Открытие.feature b/VA-Тесты/Шаблоны/Справочники-Открытие.feature
new file mode 100644
index 0000000..4f9b26e
--- /dev/null
+++ b/VA-Тесты/Шаблоны/Справочники-Открытие.feature
@@ -0,0 +1,7 @@
+#report.feature=Справочник "%ИмяОбъекта%"
+Сценарий: Открытие формы списка справочника "%ИмяОбъекта%"
+ Дано Открытие формы списка справочника "%ИмяОбъекта%"
+
+#report.feature=Справочник "%ИмяОбъекта%"
+Сценарий: Открытие формы существующего элемента справочника "%ИмяОбъекта%"
+ Дано Открытие формы существующего элемента справочника "%ИмяОбъекта%"
diff --git a/VA-Тесты/Шаблоны/Шапка.feature b/VA-Тесты/Шаблоны/Шапка.feature
new file mode 100644
index 0000000..114aa94
--- /dev/null
+++ b/VA-Тесты/Шаблоны/Шапка.feature
@@ -0,0 +1,10 @@
+#language: ru
+
+@tree
+
+#report.story=Пользователь "%ПредставлениеПользователя%"
+Функциональность: Тесты под пользователем "%ПредставлениеПользователя%"
+
+Контекст:
+ Дано я подключаю TestClient "%ПредставлениеПользователя%" логин "%ИмяПользователя%" пароль "%ПарольПользователя%"
+ И я закрыл все окна клиентского приложения
diff --git a/VA-Тесты/Шаги/kapral.epf b/VA-Тесты/Шаги/kapral.epf
new file mode 100644
index 0000000..25370d0
Binary files /dev/null and b/VA-Тесты/Шаги/kapral.epf differ
diff --git a/VA-Тесты/Шаги/Документы.feature b/VA-Тесты/Шаги/Документы.feature
new file mode 100644
index 0000000..ab85298
--- /dev/null
+++ b/VA-Тесты/Шаги/Документы.feature
@@ -0,0 +1,120 @@
+#language: ru
+
+@tree
+@ExportScenarios
+
+Функциональность: Проверка Документов
+
+Сценарий: Открытие формы списка документа "ИмяДокумента"
+ Дано я закрыл все окна клиентского приложения
+
+ Если нет права "Просмотр" к объекту "Документ.[ИмяДокумента]" тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+
+ Дано я открываю основную форму списка документа "ИмяДокумента"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось открыть форму списка документа [ИмяДокумента]"
+ И я закрыл все окна клиентского приложения
+
+Сценарий: Открытие формы существующего документа "ИмяДокумента"
+ Дано я закрыл все окна клиентского приложения
+
+ Если нет права "Просмотр" к объекту "Документ.[ИмяДокумента]" тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+
+ Дано я ищу последние 5 документов "ИмяДокумента" по каждой организации в переменную "СписокДокументов"
+ Если '$СписокДокументов$.Количество() = 0' Тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+ И для каждого значения "СсылкаДокумента" из массива "$СписокДокументов$"
+ Тогда я запоминаю значение выражения 'ПолучитьНавигационнуюСсылку($СсылкаДокумента$)' в переменную "НавигационнаяСсылкаДокумента"
+ Затем я открываю навигационную ссылку "$НавигационнаяСсылкаДокумента$"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось открыть навигационную ссылку $НавигационнаяСсылкаДокумента$"
+ И я закрыл все окна клиентского приложения
+
+Сценарий: Открытие формы нового документа "ИмяДокумента"
+ Дано я закрыл все окна клиентского приложения
+
+ Если нет права "ИнтерактивноеДобавление" к объекту "Документ.[ИмяДокумента]" тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+
+ Дано я открываю основную форму документа "ИмяДокумента"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось открыть основную форму документа [ИмяДокумента]"
+ И я закрыл все окна клиентского приложения
+
+Сценарий: Перепроведение существующего документа "ИмяДокумента"
+ Дано я закрыл все окна клиентского приложения
+
+ Если нет права "ИнтерактивноеДобавление" к объекту "Документ.[ИмяДокумента]" тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+
+ Дано я ищу последние 5 документов "ИмяДокумента" по каждой организации в переменную "СписокДокументов"
+ Если '$СписокДокументов$.Количество() = 0' Тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+ И для каждого значения "СсылкаДокумента" из массива "$СписокДокументов$"
+ Тогда я запоминаю значение выражения 'ПолучитьНавигационнуюСсылку($СсылкаДокумента$)' в переменную "НавигационнаяСсылкаДокумента"
+ Затем я открываю навигационную ссылку "$НавигационнаяСсылкаДокумента$"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось открыть навигационную ссылку $НавигационнаяСсылкаДокумента$"
+ И я нажимаю на кнопку "Провести и закрыть"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось перепровести документ $НавигационнаяСсылкаДокумента$"
+ Если в текущем окне есть сообщения пользователю Тогда
+ Тогда я вызываю исключение с текстом сообщения
+ И я закрыл все окна клиентского приложения
+
+Сценарий: Исправление существующего документа "ИмяДокумента"
+ Дано я закрыл все окна клиентского приложения
+
+ Если нет права "ИнтерактивноеДобавление" к объекту "Документ.[ИмяДокумента]" тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+
+ Дано я ищу последние 5 документов "ИмяДокумента" по каждой организации в переменную "СписокДокументов"
+ Если '$СписокДокументов$.Количество() = 0' Тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+ И для каждого значения "СсылкаДокумента" из массива "$СписокДокументов$"
+ Тогда я запоминаю значение выражения 'ПолучитьНавигационнуюСсылку($СсылкаДокумента$)' в переменную "НавигационнаяСсылкаДокумента"
+ Затем я открываю навигационную ссылку "$НавигационнаяСсылкаДокумента$"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось открыть навигационную ссылку $НавигационнаяСсылкаДокумента$"
+ И я нажимаю на гиперссылку с именем "Исправить"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось исправить документ $НавигационнаяСсылкаДокумента$"
+ Тогда открылось окно "*(создание)"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось дождаться создания исправленного документа $НавигационнаяСсылкаДокумента$"
+ И я нажимаю на кнопку "Провести"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось записать и провести документ-исправление"
+ Если в текущем окне есть сообщения пользователю Тогда
+ Тогда я вызываю исключение с текстом сообщения
+ И я нажимаю на кнопку "Пометить на удаление / Снять пометку"
+ Затем Если появилось окно диалога я нажимаю на кнопку "Да"
+ И я закрыл все окна клиентского приложения
+
+Сценарий: Печать существующего документа "ИмяДокумента"
+ Дано я закрыл все окна клиентского приложения
+
+ Если нет права "Просмотр" к объекту "Документ.[ИмяДокумента]" тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+
+ Дано я получаю список команд печати для объекта метаданных "Документ.[ИмяДокумента]" в переменную "СписокПечатныхФорм"
+ Если '$СписокПечатныхФорм$.Количество() = 0' Тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+ И я ищу последние 5 документов "ИмяДокумента" по каждой организации в переменную "СписокДокументов"
+ Если '$СписокДокументов$.Количество() = 0' Тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+ И для каждого значения "СсылкаДокумента" из массива "$СписокДокументов$"
+ Тогда я запоминаю значение выражения 'ПолучитьНавигационнуюСсылку($СсылкаДокумента$)' в переменную "НавигационнаяСсылкаДокумента"
+ Затем я открываю навигационную ссылку "$НавигационнаяСсылкаДокумента$"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось открыть навигационную ссылку $НавигационнаяСсылкаДокумента$"
+ И для каждого значения "ПечатнаяФормаОбъекта" из массива "$СписокПечатныхФорм$"
+ Тогда я запоминаю значение выражения '$ПечатнаяФормаОбъекта$.Представление' в переменную "НаименованиеПечатнойФормы"
+ Если элемент с заголовком "$НаименованиеПечатнойФормы$" присутствует на форме тогда
+ Тогда я нажимаю на кнопку "$НаименованиеПечатнойФормы$"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось напечатать форму $НаименованиеПечатнойФормы$ для документа $НавигационнаяСсылкаДокумента$"
+ И я закрываю текущее окно
+ И я закрыл все окна клиентского приложения
diff --git a/VA-Тесты/Шаги/ЖурналыДокументов.feature b/VA-Тесты/Шаги/ЖурналыДокументов.feature
new file mode 100644
index 0000000..2943702
--- /dev/null
+++ b/VA-Тесты/Шаги/ЖурналыДокументов.feature
@@ -0,0 +1,17 @@
+#language: ru
+
+@tree
+@ExportScenarios
+
+Функциональность: Проверка Журналов документов
+
+Сценарий: Открытие формы журнала документов "ИмяЖурналаДокументов"
+ Дано я закрыл все окна клиентского приложения
+
+ Если нет права "Просмотр" к объекту "ЖурналДокументов.[ИмяЖурналаДокументов]" тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+
+ Дано я открываю основную форму журнала документов "ИмяЖурналаДокументов"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось открыть форму журнала документов [ИмяЖурналаДокументов]"
+ И я закрыл все окна клиентского приложения
diff --git a/VA-Тесты/Шаги/Обработки.feature b/VA-Тесты/Шаги/Обработки.feature
new file mode 100644
index 0000000..6c011ca
--- /dev/null
+++ b/VA-Тесты/Шаги/Обработки.feature
@@ -0,0 +1,17 @@
+#language: ru
+
+@tree
+@ExportScenarios
+
+Функциональность: Проверка Обработок
+
+Сценарий: Открытие основной формы обработки "ИмяОбработки"
+ Дано я закрыл все окна клиентского приложения
+
+ Если нет права "Использование" к объекту "Обработка.[ИмяОбработки]" тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+
+ Дано я открываю основную форму обработки "ИмяОбработки"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось открыть форму основную обработки [ИмяОбработки]"
+ И я закрыл все окна клиентского приложения
diff --git a/VA-Тесты/Шаги/ОбщиеФормы.feature b/VA-Тесты/Шаги/ОбщиеФормы.feature
new file mode 100644
index 0000000..8023da5
--- /dev/null
+++ b/VA-Тесты/Шаги/ОбщиеФормы.feature
@@ -0,0 +1,17 @@
+#language: ru
+
+@tree
+@ExportScenarios
+
+Функциональность: Проверка Общих форм
+
+Сценарий: Открытие общей формы "ИмяОбщейФормы"
+ Дано я закрыл все окна клиентского приложения
+
+ Если нет права "Просмотр" к объекту "ОбщаяФорма.[ИмяОбщейФормы]" тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+
+ Дано я открываю общую форму "ИмяОбщейФормы"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось открыть общую форму [ИмяОбщейФормы]"
+ И я закрыл все окна клиентского приложения
diff --git a/VA-Тесты/Шаги/Отчеты.feature b/VA-Тесты/Шаги/Отчеты.feature
new file mode 100644
index 0000000..3ac8582
--- /dev/null
+++ b/VA-Тесты/Шаги/Отчеты.feature
@@ -0,0 +1,21 @@
+#language: ru
+
+@tree
+@ExportScenarios
+
+Функциональность: Проверка Отчетов
+
+Сценарий: Формирование отчета "ИмяОтчета"
+ Дано я закрыл все окна клиентского приложения
+
+ Если нет права "Использование" к объекту "Отчет.[ИмяОтчета]" тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+
+ Дано я открываю основную форму отчета "ИмяОтчета"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось открыть форму отчета [ИмяОтчета]"
+ И я нажимаю на кнопку "Сформировать"
+ И я жду заполнение табличного документа 'ОтчетТабличныйДокумент' в течение 10 секунд
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось сформировать отчет [ИмяОтчета]"
+ И я закрыл все окна клиентского приложения
diff --git a/VA-Тесты/Шаги/Справочники.feature b/VA-Тесты/Шаги/Справочники.feature
new file mode 100644
index 0000000..e63a02a
--- /dev/null
+++ b/VA-Тесты/Шаги/Справочники.feature
@@ -0,0 +1,91 @@
+#language: ru
+
+@tree
+@ExportScenarios
+
+Функциональность: Проверка Справочников
+
+Сценарий: Открытие формы списка справочника "ИмяСправочника"
+ Дано я закрыл все окна клиентского приложения
+
+ Если нет права "Просмотр" к объекту "Справочник.[ИмяСправочника]" тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+
+ Дано я открываю основную форму списка справочника "ИмяСправочника"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось открыть форму списка справочника [ИмяСправочника]"
+ И я закрыл все окна клиентского приложения
+
+Сценарий: Открытие формы существующего элемента справочника "ИмяСправочника"
+ Дано я закрыл все окна клиентского приложения
+
+ Если нет права "Просмотр" к объекту "Справочник.[ИмяСправочника]" тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+
+ Дано я ищу последние 5 элементов объекта "Справочник.[ИмяСправочника]" в переменную "СписокЭлементов"
+ Если '$СписокЭлементов$.Количество() = 0' Тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+ И для каждого значения "СсылкаСправочника" из массива "$СписокЭлементов$"
+ Тогда я запоминаю значение выражения 'ПолучитьНавигационнуюСсылку($СсылкаСправочника$)' в переменную "НавигационнаяСсылкаСправочника"
+ Затем я открываю навигационную ссылку "$НавигационнаяСсылкаСправочника$"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось открыть навигационную ссылку $НавигационнаяСсылкаСправочника$"
+ И я закрыл все окна клиентского приложения
+
+Сценарий: Открытие формы нового элемента справочника "ИмяСправочника"
+ Дано я закрыл все окна клиентского приложения
+
+ Если нет права "ИнтерактивноеДобавление" к объекту "Справочник.[ИмяСправочника]" тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+
+ Дано я открываю основную форму справочника "ИмяСправочника"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось открыть основную форму элемента справочника [ИмяСправочника]"
+ И я закрыл все окна клиентского приложения
+
+Сценарий: Перезапись существующего элемента справочника "ИмяСправочника"
+ Дано я закрыл все окна клиентского приложения
+
+ Если нет права "ИнтерактивноеДобавление" к объекту "Справочник.[ИмяСправочника]" тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+
+ Дано я ищу последние 5 элементов объекта "Справочник.[ИмяСправочника]" в переменную "СписокЭлементов"
+ Если '$СписокЭлементов$.Количество() = 0' Тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+ И для каждого значения "СсылкаСправочника" из массива "$СписокЭлементов$"
+ Тогда я запоминаю значение выражения 'ПолучитьНавигационнуюСсылку($СсылкаСправочника$)' в переменную "НавигационнаяСсылкаСправочника"
+ Затем я открываю навигационную ссылку "$НавигационнаяСсылкаСправочника$"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось открыть навигационную ссылку $НавигационнаяСсылкаСправочника$"
+ И я нажимаю на кнопку "Записать и закрыть"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось перезаписать элемент справочника $НавигационнаяСсылкаСправочника$"
+ Если в текущем окне есть сообщения пользователю Тогда
+ Тогда я вызываю исключение с текстом сообщения
+ И я закрыл все окна клиентского приложения
+
+Сценарий: Печать существующего элемента справочника "ИмяСправочника"
+ Дано я закрыл все окна клиентского приложения
+
+ Если нет права "Просмотр" к объекту "Справочник.[ИмяСправочника]" тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+
+ Дано я получаю список команд печати для объекта метаданных "Справочник.[ИмяСправочника]" в переменную "СписокПечатныхФорм"
+ Если '$СписокПечатныхФорм$.Количество() = 0' Тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+ Дано я ищу последние 5 элементов объекта "Справочник.[ИмяСправочника]" в переменную "СписокЭлементов"
+ Если '$СписокЭлементов$.Количество() = 0' Тогда
+ Тогда я останавливаю выполнение сценария "Skipped"
+ И для каждого значения "СсылкаСправочника" из массива "$СписокЭлементов$"
+ Тогда я запоминаю значение выражения 'ПолучитьНавигационнуюСсылку($СсылкаСправочника$)' в переменную "НавигационнаяСсылкаСправочника"
+ Затем я открываю навигационную ссылку "$НавигационнаяСсылкаСправочника$"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось открыть навигационную ссылку $НавигационнаяСсылкаСправочника$"
+ И для каждого значения "ПечатнаяФормаОбъекта" из массива "$СписокПечатныхФорм$"
+ Тогда я запоминаю значение выражения '$ПечатнаяФормаОбъекта$.Представление' в переменную "НаименованиеПечатнойФормы"
+ Если элемент с заголовком "$НаименованиеПечатнойФормы$" присутствует на форме тогда
+ Тогда я нажимаю на кнопку "$НаименованиеПечатнойФормы$"
+ Если появилось предупреждение тогда
+ Тогда я вызываю исключение "Не удалось напечатать форму $НаименованиеПечатнойФормы$ для элемента справочника $НавигационнаяСсылкаСправочника$"
+ И я закрываю текущее окно
+ И я закрыл все окна клиентского приложения
diff --git a/Скрипты/АвтоФичиVA.sbsl b/Скрипты/АвтоФичиVA.sbsl
new file mode 100644
index 0000000..7588522
--- /dev/null
+++ b/Скрипты/АвтоФичиVA.sbsl
@@ -0,0 +1,466 @@
+#!/usr/bin/executor
+
+/*******************************************************************************
+ * Copyright (c) 2020 Alexander Kapralov and Contributors
+ * This program and the accompanying materials are made available under
+ * the terms of the BSD 3-Clause License which is available at
+ * https://spdx.org/licenses/BSD-3-Clause.html#licenseText
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ * Contributors:
+ *
+ *
+ ******************************************************************************/
+
+структура ОписаниеНастроек
+ пер НастройкиVA: ОписаниеНастроекVA
+ пер НастройкиТестовойБазы: ОписаниеНастроекТестовойБазы
+ пер НастройкиАвтофич: ОписаниеНастроекАвтофич
+;
+
+структура ОписаниеНастроекVA
+ пер ПутьVanessaAutomationSingle: Строка
+ пер КаталогПроекта: Строка
+ пер КаталогФич: Строка
+ пер КаталогиБиблиотек: Массив
+ пер КаталогОтчетов: Строка
+;
+
+структура ОписаниеНастроекТестовойБазы
+ пер ВерсияПлатформы: Строка
+ пер ПутьКИБ: Строка
+ пер ИмяПользователя: Строка
+ пер ПарольПользователя: Строка
+;
+
+структура ОписаниеНастроекАвтофич
+ пер КаталогАвтофич: Строка
+ пер КаталогШаблоновШагов: Строка
+ пер ФайлШаблонаШапки: Строка
+ пер Пользователи: Массив
+;
+
+структура ОписаниеПользователя
+ пер Представление: Строка
+ пер Имя: Строка
+ пер Пароль: Строка
+;
+
+структура ОписаниеОбъектаАвтофичи
+ пер Объект: Строка
+ пер ШаблонФичи: Строка
+ пер Пользователи: Массив
+;
+
+структура VAParams
+ пер КаталогПроекта: Строка
+ пер КаталогФич: Строка
+ пер ВыполнитьСценарии: Булево = Истина
+ пер ВыполнятьШагиАссинхронно: Булево = Ложь
+ пер ДелатьЛогВыполненияСценариевВЖР: Булево = Ложь
+ пер ЗавершитьРаботуСистемы: Булево = Истина
+ пер ЗакрытьTestClientПослеЗапускаСценариев: Булево = Истина
+ пер ОбновлятьСтатистикуВДереве: Булево = Ложь
+ пер ОбновлятьДеревоПриНачалеВыполненияСценария: Булево = Ложь
+ пер КаталогиБиблиотек: Массив
+ пер ДелатьОтчетВФорматеjUnit: Булево = Истина
+ пер КаталогВыгрузкиjUnit: Строка
+ пер ДелатьОтчетВФорматеАллюр: Булево = Истина
+ пер ОтчетAllure: VAParamsОтчетAllure
+
+ конструктор(КаталогПроекта, КаталогФич, КаталогиБиблиотек, КаталогВыгрузкиjUnit, ОтчетAllure)
+;
+
+структура VAParamsОтчетAllure
+ пер КаталогВыгрузкиAllure: Строка
+ пер КаталогОтносительноКоторогоНадоСтроитьИерархию: Строка
+ пер УровеньОтчета1: Строка = "#report.epic=;Каталог1"
+ пер УровеньОтчета2: Строка = "#report.feature="
+ пер УровеньОтчета3: Строка = "#report.story="
+ пер ГруппировкаTestSuites: Строка = "#report.feature="
+
+ конструктор(КаталогВыгрузкиAllure, КаталогОтносительноКоторогоНадоСтроитьИерархию)
+;
+
+
+метод CreateFeatures(имяФайлаНастроек: Строка)
+ знч настройки = ПрочитатьНастройки(имяФайлаНастроек)
+
+ пер автофичи = новый Соответствие()
+
+ пер настройкиПоиска = новый НастройкиПоискаФайлов()
+ настройкиПоиска.ИмяСодержит(".tsv")
+ для файлАвтофичи из Файлы.Найти(настройки.НастройкиАвтофич.КаталогАвтофич, настройкиПоиска)
+ пер массивОбъектов = новый Массив()
+
+ исп потокФайлаАвтофичи = файлАвтофичи.ОткрытьПотокЧтения()
+ пер чтениеФайлаАвтофичи = новый ЧтениеДанных(потокФайлаАвтофичи)
+ пока не чтениеФайлаАвтофичи.ЧтениеЗавершено()
+ знч строкаФайла = чтениеФайлаАвтофичи.ПрочитатьСтроку("cp1251")
+ если строкаФайла.Пусто()
+ продолжить
+ ;
+ знч массивСтроки = строкаФайла.Разделить("\т", Истина)
+ если массивСтроки.Размер() != 3
+ выбросить новый ИсключениеИндексВнеГраниц(
+ "В каждой строке автофича файла должно быть 3 значения, разделенных табуляцией.")
+ ;
+
+ знч пользователиАвтофичи = массивСтроки[2].Разделить(",")
+ знч объектАвтофичи = новый ОписаниеОбъектаАвтофичи(массивСтроки[0], массивСтроки[1], пользователиАвтофичи)
+ массивОбъектов.Добавить(объектАвтофичи)
+ ;
+
+ автофичи.Вставить(файлАвтофичи.ИмяБезРасширения, массивОбъектов)
+ ;
+
+ пер файлШаблонаШапки = новый Файл("%{настройки.НастройкиАвтофич.КаталогШаблоновШагов}/%{настройки.НастройкиАвтофич
+ .ФайлШаблонаШапки}")
+ исп потокШаблонаШапки = файлШаблонаШапки.ОткрытьПотокЧтения()
+ знч текстШаблонаШапки = потокШаблонаШапки.ПрочитатьКакТекст()
+
+ пер текстыШаблоновОбъектов = новый Соответствие()
+
+ для пользователь из настройки.НастройкиАвтофич.Пользователи
+ пер текстФичи = текстШаблонаШапки
+ текстФичи = текстФичи.Заменить("\%ПредставлениеПользователя\%", пользователь.Представление)
+ текстФичи = текстФичи.Заменить("\%ИмяПользователя\%", пользователь.Имя)
+ текстФичи = текстФичи.Заменить("\%ПарольПользователя\%", пользователь.Пароль)
+
+ для автофича из автофичи
+ для описаниеОбъекта из автофича.Значение
+ если описаниеОбъекта.Пользователи.Найти(пользователь.Представление) == Неопределено
+ продолжить
+ ;
+
+ пер текстОбъекта = ""
+ если текстыШаблоновОбъектов.СодержитКлюч(описаниеОбъекта.ШаблонФичи)
+ текстОбъекта = текстыШаблоновОбъектов.Получить(описаниеОбъекта.ШаблонФичи)
+ иначе
+ пер файлШаблонаОбъекта = новый Файл("%{настройки.НастройкиАвтофич
+ .КаталогШаблоновШагов}/%{описаниеОбъекта.ШаблонФичи}")
+ исп потокШаблонаОбъекта = файлШаблонаОбъекта.ОткрытьПотокЧтения()
+ знч текстШаблонаОбъекта = потокШаблонаОбъекта.ПрочитатьКакТекст()
+ текстыШаблоновОбъектов.Вставить(описаниеОбъекта.ШаблонФичи, текстШаблонаОбъекта)
+
+ текстОбъекта = текстШаблонаОбъекта
+ ;
+
+ текстОбъекта = текстОбъекта.Заменить("\%ИмяОбъекта\%", описаниеОбъекта.Объект.Разделить(".")[1])
+ текстФичи = текстФичи + Символы.НоваяСтрока + текстОбъекта
+ ;
+
+ Файлы.СоздатьКаталог("%{настройки.НастройкиVA.КаталогФич}/%{автофича.Ключ}")
+ пер файлФичи = новый Файл("%{настройки.НастройкиVA.КаталогФич}/%{автофича.Ключ}/%{автофича.Ключ}-%{пользователь
+ .Представление}.feature")
+ исп потокФичи = файлФичи.ОткрытьПотокЗаписи()
+ потокФичи.Записать(текстФичи)
+ ;
+ ;
+;
+
+метод RunTests(имяФайлаНастроек: Строка)
+ знч настройки = ПрочитатьНастройки(имяФайлаНастроек)
+
+ знч каталогВыгрузкиAllure = "%{настройки.НастройкиVA.КаталогОтчетов}/allure"
+
+ если не Файлы.Найти(каталогВыгрузкиAllure).Пусто()
+ Файлы.Удалить(каталогВыгрузкиAllure)
+ ;
+ Файлы.СоздатьКаталог("%каталогВыгрузкиAllure/history")
+ для файлИстории из Файлы.Найти("%{настройки.НастройкиVA.КаталогОтчетов}/allure-report/history")
+ Файлы.Скопировать(файлИстории, "%каталогВыгрузкиAllure/history/%{файлИстории.Имя}")
+ ;
+
+ знч исполняемыйФайлПлатформы = ИсполняемыйФайлПлатформыПоМаксимальнойСборке(настройки.НастройкиТестовойБазы
+ .ВерсияПлатформы)
+
+ знч временныйФайлНастроекVA = Файлы.СоздатьВременныйФайл("VAParams", ".json")
+ пер настройкиVAParamsОтчетAllure = новый VAParamsОтчетAllure(каталогВыгрузкиAllure, настройки.НастройкиVA.КаталогФич)
+ пер настройкиVAParams = новый VAParams(настройки.НастройкиVA.КаталогПроекта, настройки.НастройкиVA.КаталогФич, настройки.НастройкиVA
+ .КаталогиБиблиотек, "%{настройки.НастройкиVA.КаталогОтчетов}/junit", настройкиVAParamsОтчетAllure)
+ исп потокНастроекVA = временныйФайлНастроекVA.ОткрытьПотокЗаписи()
+ СериализацияJson.ЗаписатьОбъект(потокНастроекVA, настройкиVAParams)
+ потокНастроекVA.Закрыть()
+
+ знч параметрыVA = "StartFeaturePlayer;VBParams=%временныйФайлНастроекVA"
+
+ ExecuteDataProcessorTestManager(настройки.НастройкиVA.ПутьVanessaAutomationSingle, параметрыVA, настройки.НастройкиТестовойБазы
+ .ПутьКИБ, исполняемыйФайлПлатформы, настройки.НастройкиТестовойБазы.ИмяПользователя, настройки.НастройкиТестовойБазы
+ .ПарольПользователя)
+
+ AllureGenerate(настройки)
+;
+
+метод OpenReport(имяФайлаНастроек: Строка)
+ знч настройки = ПрочитатьНастройки(имяФайлаНастроек)
+
+ AllureOpen(настройки)
+;
+
+метод ПрочитатьНастройки(имяФайлаНастроек: Строка): ОписаниеНастроек
+ пер файлНастроек = новый Файл(имяФайлаНастроек)
+ исп потокФайлаНастроек = файлНастроек.ОткрытьПотокЧтения()
+ пер настройкиJson = новый НастройкиЧтенияОбъектовJson()
+ настройкиJson.ИгнорироватьНеизвестныеСвойства = Истина
+ пер настройки = СериализацияJson.ПрочитатьОбъект(потокФайлаНастроек, Тип(ОписаниеНастроек),
+ настройкиJson) как ОписаниеНастроек
+ пер пользователи = новый Массив()
+ для пользователь из настройки.НастройкиАвтофич.Пользователи
+ знч описаниеПользователя = новый ОписаниеПользователя(пользователь["ПредставлениеПользователя"],
+ пользователь["ИмяПользователя"], пользователь["ПарольПользователя"])
+ пользователи.Добавить(описаниеПользователя)
+ ;
+ настройки.НастройкиАвтофич.Пользователи = пользователи
+
+ возврат настройки
+;
+
+метод AllureOpen(настройки: ОписаниеНастроек)
+ пер имяКоманды = ""
+ пер параметрыПроцесса = новый Массив()
+
+ знч версияОС = ИспользуемаяОС()
+ выбор версияОС
+ когда ОперационныеСистемы.Windows
+ имяКоманды = "allure.bat"
+ иначе
+ имяКоманды = "allure"
+ ;
+
+ параметрыПроцесса.Добавить("open")
+ параметрыПроцесса.Добавить("%{настройки.НастройкиVA.КаталогОтчетов}/allure-report")
+
+ ВыполнитьКомандуСистемы(имяКоманды, параметрыПроцесса)
+;
+
+метод AllureGenerate(настройки: ОписаниеНастроек)
+ пер имяКоманды = ""
+ пер параметрыПроцесса = новый Массив()
+
+ знч версияОС = ИспользуемаяОС()
+ выбор версияОС
+ когда ОперационныеСистемы.Windows
+ имяКоманды = "allure.bat"
+ иначе
+ имяКоманды = "allure"
+ ;
+
+ параметрыПроцесса.Добавить("generate")
+ параметрыПроцесса.Добавить("%{настройки.НастройкиVA.КаталогОтчетов}/allure")
+ параметрыПроцесса.Добавить("--clean")
+ параметрыПроцесса.Добавить("-o")
+ параметрыПроцесса.Добавить("%{настройки.НастройкиVA.КаталогОтчетов}/allure-report")
+
+ ВыполнитьКомандуСистемы(имяКоманды, параметрыПроцесса)
+;
+
+метод ВыполнитьКомандуСистемы(имяКоманды: Строка, параметры: Массив)
+ знч процесс = новый ПроцессОс(имяКоманды, параметры, Ложь)
+ процесс.Запустить()
+ процесс.ОжидатьЗавершения()
+
+ знч кодВозврата = процесс.ПолучитьКодВозврата()
+ Консоль.Записать("Код возврата:" + кодВозврата)
+
+ пер результатВыполненияСкрипта = процесс.ПолучитьПотокВывода()
+ знч текстРезультата = результатВыполненияСкрипта.ПрочитатьКакТекст(КодировкаПотокаВывода())
+ если не текстРезультата.Пусто()
+ Консоль.Записать("Поток вывода:")
+ Консоль.Записать(текстРезультата)
+ ;
+
+ пер ошибкиВыполненияСкрипта = процесс.ПолучитьПотокОшибок()
+ знч текстОшибок = ошибкиВыполненияСкрипта.ПрочитатьКакТекст(КодировкаПотокаВывода())
+ если не текстОшибок.Пусто()
+ Консоль.Записать("Поток ошибок:")
+ Консоль.Записать(текстОшибок)
+ ;
+;
+
+метод КодировкаПотокаВывода(): Строка
+ возврат "Cp1251"
+;
+
+
+перечисление ОперационныеСистемы
+ Windows,
+ MacOS,
+ Linux
+;
+
+
+метод ИспользуемаяОС(): ОперационныеСистемы
+ знч имяОС = СредаИсполнения.ПолучитьСвойство("os.name")
+
+ выбор когда имяОС.НачинаетсяС("windows", Истина)
+ возврат ОперационныеСистемы.Windows
+
+ когда имяОС.Содержит("mac", Истина)
+ возврат ОперационныеСистемы.MacOS
+
+ когда имяОС.Содержит("nux", Истина)
+ возврат ОперационныеСистемы.Linux
+
+ иначе
+ выбросить новый ИсключениеНедопустимоеСостояние("Неизвестная ОС")
+ ;
+;
+
+метод ИсполняемыйФайлПлатформыПоМаксимальнойСборке(версияПлатформы: Строка): Строка
+ знч установленныеПлатформы = УстановленныеПлатформы()
+ если установленныеПлатформы.СодержитКлюч(версияПлатформы)
+ знч путьКПлатформе = установленныеПлатформы.Получить(версияПлатформы)
+ возврат "%путьКПлатформе/bin/1cv8"
+ ;
+
+ знч максимальныеПлатформы = МаксимальныеПлатформы()
+ если максимальныеПлатформы.СодержитКлюч(версияПлатформы)
+ знч путьКПлатформе = максимальныеПлатформы.Получить(версияПлатформы)
+ возврат "%путьКПлатформе/bin/1cv8"
+ ;
+
+ знч текстОшибки = "Не найдена установленная платформа %версияПлатформы"
+ выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки)
+;
+
+метод МаксимальныеПлатформы(): Соответствие
+ знч установленныеПлатформы = УстановленныеПлатформы()
+
+ пер максимальныеПлатформы: Соответствие
+
+ для платформа из установленныеПлатформы
+ знч разложенныйТекущийРелиз = платформа.Ключ.Разделить(".")
+
+ пер релизБезВерсииМассивом = новый Массив(разложенныйТекущийРелиз)
+ релизБезВерсииМассивом.УдалитьПоИндексу(3)
+
+ знч релизБезВерсии = Строки.Соединить(релизБезВерсииМассивом, ".")
+
+ если не максимальныеПлатформы.СодержитКлюч(релизБезВерсии)
+ максимальныеПлатформы.Вставить(релизБезВерсии, платформа.Значение)
+ продолжить
+ ;
+
+ знч последнийРелиз = максимальныеПлатформы.Получить(релизБезВерсии)
+ знч разложенныйПоследнийРелиз = последнийРелиз.Разделить(".")
+
+ если разложенныйТекущийРелиз[3] > разложенныйПоследнийРелиз[3]
+ максимальныеПлатформы.Вставить(релизБезВерсии, платформа.Значение)
+ ;
+ ;
+
+ возврат максимальныеПлатформы
+;
+
+метод УстановленныеПлатформы(): Соответствие
+ пер установленныеПлатформы: Соответствие
+
+ знч каталогиПлатформы = КаталогиПлатформы()
+
+ знч настройкиПоискаФайлов = новый НастройкиПоискаФайлов()
+ настройкиПоискаФайлов.ИсключитьФайлы(Истина)
+ настройкиПоискаФайлов.МаксимальнаяГлубина(1)
+
+ для каталогПлатформы из каталогиПлатформы
+ знч найденныеФайлы = Файлы.Найти(каталогПлатформы, настройкиПоискаФайлов)
+ для найденныйФайл из найденныеФайлы
+ если не найденныйФайл.Имя.НачинаетсяС("8.3")
+ продолжить
+ ;
+ установленныеПлатформы.Вставить(найденныйФайл.Имя, найденныйФайл.Путь)
+ ;
+ ;
+
+ возврат установленныеПлатформы
+;
+
+метод КаталогиПлатформы(): Массив
+ пер списокКаталогов: Массив
+
+ знч используемаяОС = ИспользуемаяОС()
+
+ выбор используемаяОС
+ когда ОперационныеСистемы.Windows
+ знч каталог32 = СредаИсполнения.ПолучитьПеременную("ProgramFiles(x86)")
+ списокКаталогов.Добавить("%каталог32\\1Cv8")
+ знч каталог64 = СредаИсполнения.ПолучитьПеременную("ProgramFiles")
+ списокКаталогов.Добавить("%каталог64\\1Cv8")
+ когда ОперационныеСистемы.MacOS
+ списокКаталогов.Добавить("/opt/1Cv8")
+ когда ОперационныеСистемы.Linux
+ списокКаталогов.Добавить("/opt/1C/v8.3/x86_64")
+ ;
+
+ возврат списокКаталогов
+;
+
+метод ExecuteDataProcessorTestManager(имяВнешнейОбработки: Строка, вспомогательныеПараметры: Строка, путьКИБ: Строка,
+ имяФайлаПлатформы: Строка, имяПользователя: Строка = "", пароль: Строка = "")
+ пер параметрыПроцесса = новый Массив()
+ параметрыПроцесса.Добавить("ENTERPRISE")
+ параметрыПроцесса.Добавить("/TestManager")
+ параметрыПроцесса.Добавить("/Execute")
+ параметрыПроцесса.Добавить(имяВнешнейОбработки)
+ если не вспомогательныеПараметры.Пусто()
+ параметрыПроцесса.Добавить("/C\"%вспомогательныеПараметры\"")
+ ;
+ параметрыПроцесса.Добавить("/IBConnectionString")
+ параметрыПроцесса.Добавить("\"File=\"\"%путьКИБ\"\"\"")
+ параметрыПроцесса.Добавить("/DisableStartupDialogs")
+ параметрыПроцесса.Добавить("/WA-")
+ если не имяПользователя.Пусто()
+ параметрыПроцесса.Добавить("/N")
+ параметрыПроцесса.Добавить("\"%имяПользователя\"")
+ ;
+ если не пароль.Пусто()
+ параметрыПроцесса.Добавить("/P")
+ параметрыПроцесса.Добавить(пароль)
+ ;
+
+ ВыполнитьКомандуПлатформы(имяФайлаПлатформы, параметрыПроцесса)
+ Консоль.Записать("Обработка запущена.")
+;
+
+метод ВыполнитьКомандуПлатформы(имяКоманды: Строка, параметры: Массив, выводитьОшибки: Булево = Истина)
+ знч временныйФайлЛогов = Файлы.СоздатьВременныйФайл()
+
+ параметры.Добавить("/Out")
+ параметры.Добавить(временныйФайлЛогов.Путь)
+
+ пер процесс = новый ПроцессОс(имяКоманды, параметры)
+ процесс.Запустить()
+ процесс.ОжидатьЗавершения()
+
+ исп результатВыполненияСкрипта = процесс.ПолучитьПотокВывода()
+ знч текстРезультата = результатВыполненияСкрипта.ПрочитатьКакТекст()
+ если не текстРезультата.Пусто()
+ Консоль.Записать(текстРезультата)
+ ;
+
+ знч кодВозврата = процесс.ПолучитьКодВозврата()
+
+ если кодВозврата == 0
+ возврат
+ ;
+
+ пер текстОшибки = "Код возврата: %кодВозврата"
+ если не выводитьОшибки
+ выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки)
+ ;
+
+ текстОшибки += Строки.Шаблон("\в\нКоманда: $0\в\нПараметры: $1", [имяКоманды, Строки.Соединить(параметры, " ")])
+
+ исп ошибкиВыполненияСкрипта = временныйФайлЛогов.ОткрытьПотокЧтения()
+ текстОшибки += "\в\н" + ошибкиВыполненияСкрипта.ПрочитатьКакТекст(КодировкаПотокаВыводаПлатформы())
+ выбросить новый ИсключениеНедопустимоеСостояние(текстОшибки)
+;
+
+метод КодировкаПотокаВыводаПлатформы(): Строка
+ если ИспользуемаяОС() == ОперационныеСистемы.Windows
+ возврат "windows-1251"
+ ;
+
+ возврат "UTF-8"
+;
\ No newline at end of file
diff --git a/Скрипты/ГенераторФичVA.sbsl b/Скрипты/ГенераторФичVA.sbsl
deleted file mode 100644
index 8d6fd64..0000000
--- a/Скрипты/ГенераторФичVA.sbsl
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/executor
-
-/*******************************************************************************
- * Copyright (c) 2020 Alexander Kapralov and Contributors
- * This program and the accompanying materials are made available under
- * the terms of the BSD 3-Clause License which is available at
- * https://spdx.org/licenses/BSD-3-Clause.html#licenseText
- *
- * SPDX-License-Identifier: BSD-3-Clause
- *
- * Contributors:
- *
- *
- ******************************************************************************/
-
-структура ОписаниеНастроек
- пер КаталогФич: Строка
- пер ШаблонШапки: Строка
- пер ШаблонОбъекта: Строка
- пер ИмяПеременнойОбъекта: Строка
- пер Объекты: Массив
- пер Пользователи: Массив
-;
-
-структура ОписаниеПользователя
- пер Представление: Строка
- пер Имя: Строка
- пер Пароль: Строка
-;
-
-
-метод Скрипт(путьНастройки: Строка, путьШаблоны: Строка, путьФичи: Строка)
- пер списокНастроек = новый Массив()
-
- пер настройкиПоиска = новый НастройкиПоискаФайлов()
- настройкиПоиска.ИмяСодержит(".json")
- для файлНастроек из Файлы.Найти(путьНастройки, настройкиПоиска)
- исп потокФайлаНастроек = файлНастроек.ОткрытьПотокЧтения()
-
- пер настройкиJson = новый НастройкиЧтенияОбъектовJson()
- настройкиJson.ИгнорироватьНеизвестныеСвойства = Истина
-
- пер настройки = СериализацияJson.ПрочитатьОбъект(потокФайлаНастроек, Тип(ОписаниеНастроек), настройкиJson) как ОписаниеНастроек
- пер пользователи = новый Массив()
- для пользователь из настройки.Пользователи
- знч описаниеПользователя = новый ОписаниеПользователя(пользователь["ПредставлениеПользователя"], пользователь["ИмяПользователя"],
- пользователь["ПарольПользователя"])
- пользователи.Добавить(описаниеПользователя)
- ;
- настройки.Пользователи = пользователи
-
- списокНастроек.Добавить(настройки)
- ;
-
- для настройки из списокНастроек
- пер файлШаблонаШапки = новый Файл("%путьШаблоны/%{настройки.ШаблонШапки}")
- исп потокШаблонаШапки = файлШаблонаШапки.ОткрытьПотокЧтения()
- знч текстШаблонаШапки = потокШаблонаШапки.ПрочитатьКакТекст()
-
- пер файлШаблонаОбъекта = новый Файл("%путьШаблоны/%{настройки.ШаблонОбъекта}")
- исп потокШаблонаОбъекта = файлШаблонаОбъекта.ОткрытьПотокЧтения()
- знч текстШаблонаОбъекта = потокШаблонаОбъекта.ПрочитатьКакТекст()
-
- пер имяФайлаБезРасширения = файлШаблонаОбъекта.ИмяБезРасширения
- для пользователь из настройки.Пользователи
- пер текстФичи = текстШаблонаШапки
- текстФичи = текстФичи.Заменить("\%ПредставлениеПользователя\%", пользователь.Представление)
- текстФичи = текстФичи.Заменить("\%ИмяПользователя\%", пользователь.Имя)
- текстФичи = текстФичи.Заменить("\%ПарольПользователя\%", пользователь.Пароль)
-
- для объект из настройки.Объекты
- пер текстОбъекта = текстШаблонаОбъекта
- текстОбъекта = текстОбъекта.Заменить("\%%{настройки.ИмяПеременнойОбъекта}\%", объект)
- текстФичи = текстФичи + Символы.НоваяСтрока + текстОбъекта
- ;
-
- пер файлФичи = новый Файл("%путьФичи/%{настройки.КаталогФич}/%имяФайлаБезРасширения-%{пользователь.Представление}.feature")
- исп потокФичи = файлФичи.ОткрытьПотокЗаписи()
- потокФичи.Записать(текстФичи)
- ;
- ;
-;
\ No newline at end of file