mirror of
https://github.com/bia-technologies/yaxunit.git
synced 2024-11-27 08:31:11 +02:00
Merge pull request #408 from bia-technologies/feature/local-testing
Скрипты локального запуска тестов и правки выявленных ошибок.
This commit is contained in:
commit
a7cf3b908a
2
.gitignore
vendored
2
.gitignore
vendored
@ -37,3 +37,5 @@ tests/.settings/*
|
||||
documentation/api/
|
||||
*.jar
|
||||
/tools/**/distr/
|
||||
workpath/
|
||||
.env
|
@ -273,7 +273,7 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ШаблонУсловия(ВыражениеПредиката, ВыраженияПредикатов, ТипРеквизита)
|
||||
Функция ШаблонУсловия(ВыражениеПредиката, ВыраженияПредикатов, ТипРеквизита) // BSLLS:CognitiveComplexity-off
|
||||
Выражение = ВыражениеПредиката.ВидСравнения;
|
||||
|
||||
Отрицание = ЮТПредикатыСлужебныйКлиентСервер.ЭтоВыраженияОтрицания(Выражение);
|
||||
|
@ -35,12 +35,14 @@
|
||||
|
||||
Хранилище = Новый Соответствие();
|
||||
|
||||
Для Каждого Модуль Из ТестовыеМодули Цикл
|
||||
Для Каждого ОсновнойМодуль Из ТестовыеМодули Цикл
|
||||
|
||||
Модуль = ЮТКоллекции.СкопироватьСтруктуру(ОсновнойМодуль, Ложь);
|
||||
Идентификатор = ЮТИсполнительСлужебныйКлиентСервер.ИдентификаторТестовогоМодуля(Модуль);
|
||||
|
||||
Хранилище.Вставить(Идентификатор, Модуль);
|
||||
|
||||
Для Каждого Набор Из Модуль.НаборыТестов Цикл
|
||||
Для Каждого Набор Из ОсновнойМодуль.НаборыТестов Цикл
|
||||
|
||||
Идентификатор = ЮТИсполнительСлужебныйКлиентСервер.ИдентификаторТестовогоНабора(Модуль, Набор);
|
||||
Хранилище.Вставить(Идентификатор, Набор);
|
||||
@ -54,9 +56,7 @@
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
#Если НЕ ТолстыйКлиентОбычноеПриложение И НЕ ТолстыйКлиентУправляемоеПриложение Тогда // Исключение для толстого клиента в файловом варианте
|
||||
Модуль.НаборыТестов = Новый Массив; // Уже не нужно, поэтому очистим
|
||||
#КонецЕсли
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
|
@ -143,7 +143,7 @@
|
||||
ПараметрыЗаписи.УникальныйИдентификаторСсылки = Контекст.УникальныйИдентификаторСсылки;
|
||||
ПараметрыЗаписи.ОбменДаннымиЗагрузка = ОбменДаннымиЗагрузка;
|
||||
|
||||
Ссылка = ЮТТестовыеДанныеСлужебныйВызовСервера.СоздатьЗапись(Контекст.Менеджер, Контекст.Данные, ПараметрыЗаписи, ВернутьОбъект);
|
||||
Ссылка = ЮТТестовыеДанныеСлужебный.СоздатьЗапись(Контекст.Менеджер, Контекст.Данные, ПараметрыЗаписи, ВернутьОбъект);
|
||||
|
||||
Возврат Ссылка;
|
||||
|
||||
@ -151,12 +151,10 @@
|
||||
|
||||
Функция НовыйОбъект(Контекст) Экспорт
|
||||
|
||||
Возврат ЮТТестовыеДанныеСлужебныйВызовСервера.НовыйОбъект(
|
||||
Контекст.Менеджер,
|
||||
Контекст.Данные,
|
||||
Контекст.ДополнительныеСвойства,
|
||||
Контекст.УникальныйИдентификаторСсылки
|
||||
);
|
||||
Возврат ЮТТестовыеДанныеСлужебный.НовыйОбъект(Контекст.Менеджер,
|
||||
Контекст.Данные,
|
||||
Контекст.ДополнительныеСвойства,
|
||||
Контекст.УникальныйИдентификаторСсылки);
|
||||
|
||||
КонецФункции
|
||||
|
||||
@ -167,7 +165,7 @@
|
||||
ПараметрыЗаписи.УникальныйИдентификаторСсылки = Контекст.УникальныйИдентификаторСсылки;
|
||||
ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение;
|
||||
|
||||
Ссылка = ЮТТестовыеДанныеСлужебныйВызовСервера.СоздатьЗапись(Контекст.Менеджер, Контекст.Данные, ПараметрыЗаписи, ВернутьОбъект);
|
||||
Ссылка = ЮТТестовыеДанныеСлужебный.СоздатьЗапись(Контекст.Менеджер, Контекст.Данные, ПараметрыЗаписи, ВернутьОбъект);
|
||||
|
||||
Возврат Ссылка;
|
||||
|
||||
|
@ -56,18 +56,6 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ВыборкаИзТабличногоДокумента(ТабличныйДокумент) Экспорт
|
||||
|
||||
Возврат ЗапросКТабличномуДокументу(ТабличныйДокумент).Выбрать();
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ТаблицаИзТабличногоДокумента(ТабличныйДокумент) Экспорт
|
||||
|
||||
Возврат ЗапросКТабличномуДокументу(ТабличныйДокумент).Выгрузить();
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ИзХранилищаЗначений(Знач ХранилищеЗначений) Экспорт
|
||||
|
||||
Возврат ХранилищеЗначений.Получить();
|
||||
@ -86,20 +74,4 @@
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция ЗапросКТабличномуДокументу(ТабличныйДокумент)
|
||||
|
||||
ВсегоСтрок = ТабличныйДокумент.ВысотаТаблицы;
|
||||
ВсегоКолонок = ТабличныйДокумент.ШиринаТаблицы;
|
||||
|
||||
Область = ТабличныйДокумент.Область(1, 1, ВсегоСтрок, ВсегоКолонок);
|
||||
|
||||
ИсточникДанных = Новый ОписаниеИсточникаДанных(Область);
|
||||
ПостроительОтчета = Новый ПостроительОтчета;
|
||||
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
|
||||
ПостроительОтчета.Выполнить();
|
||||
|
||||
Возврат ПостроительОтчета.Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -132,7 +132,7 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ШаблонВыражения(Знач Выражение) Экспорт
|
||||
Функция ШаблонВыражения(Знач Выражение) Экспорт // BSLLS:CognitiveComplexity-off
|
||||
|
||||
Отрицание = СтрНачинаетсяС(Выражение, "Не");
|
||||
Если Отрицание Тогда
|
||||
|
@ -1,6 +1,6 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
|
||||
// Copyright 2021-2024 BIA-Technologies Limited Liability Company
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
@ -18,6 +18,15 @@
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
// Проверить тип параметра.
|
||||
//
|
||||
// Параметры:
|
||||
// Значение - Произвольный
|
||||
// ОжидаемыйТип - Тип, ОписаниеТипов - Ожидаемый тип или описание типа
|
||||
// - Строка - Имена типов разделенные запятой
|
||||
// ИмяМетода - Строка
|
||||
// ИмяПараметра - Строка
|
||||
// ЕслиУстановлен - Булево - Выполнять проверку только если значение не неопределено
|
||||
Процедура ПроверитьТипПараметра(Значение, ОжидаемыйТип, ИмяМетода, ИмяПараметра, ЕслиУстановлен = Ложь) Экспорт
|
||||
|
||||
Если ЕслиУстановлен И Значение = Неопределено Тогда
|
||||
|
@ -63,57 +63,64 @@
|
||||
// https://github.com/vanessa-opensource/add
|
||||
// перенесен из Functest
|
||||
|
||||
ТипТабличногоДокумента = ТипЗнч(ТабличныйДокумент);
|
||||
Если ТипТабличногоДокумента <> Тип("ТабличныйДокумент") И ТипТабличногоДокумента <> Тип("ПолеТабличногоДокумента") Тогда
|
||||
ВызватьИсключение "ПолучитьТаблицуЗначенийИзТабличногоДокумента: Требуется тип ТабличныйДокумент или ПолеТабличногоДокумента";
|
||||
КонецЕсли;
|
||||
ЮТПроверкиСлужебный.ПроверитьТипПараметра(ТабличныйДокумент,
|
||||
Тип("ТабличныйДокумент"),
|
||||
"ЮТСравнениеСлужебныйСервер.ПолучитьТаблицуЗначенийИзТабличногоДокумента",
|
||||
"ТабличныйДокумент");
|
||||
|
||||
Если УчитыватьТолькоВидимыеКолонки И УчитыватьТолькоВидимыеСтроки Тогда
|
||||
ЮТОбщийСлужебныйВызовСервера.ТаблицаИзТабличногоДокумента(ТипТабличногоДокумента);
|
||||
ЮТТестовыеДанныеСлужебныйСервер.ТаблицаИзТабличногоДокумента(ТабличныйДокумент);
|
||||
КонецЕсли;
|
||||
|
||||
НомерПоследнейКолонки = ТабличныйДокумент.ШиринаТаблицы;
|
||||
НомерПоследнейСтроки = ТабличныйДокумент.ВысотаТаблицы;
|
||||
|
||||
НоваяТаблицаЗначений = Новый ТаблицаЗначений;
|
||||
Колонки = НоваяТаблицаЗначений.Колонки;
|
||||
ТипСтрока = Новый ОписаниеТипов("Строка");
|
||||
|
||||
// TODO При определении видимости не учитывается наличие нескольких форматов строк, сейчас видимость колонки определяется по формату первой строки
|
||||
УчитываемыеКолонки = Новый Массив;
|
||||
Для НомерКолонки = 1 По НомерПоследнейКолонки Цикл
|
||||
ОбластьКолонки = ТабличныйДокумент.Область(0, НомерКолонки, 1, НомерКолонки);
|
||||
|
||||
УчитыватьКолонку = Не УчитыватьТолькоВидимыеКолонки Или ОбластьКолонки.Видимость;
|
||||
Если УчитыватьКолонку Тогда
|
||||
УчитываемыеКолонки.Добавить(НомерКолонки);
|
||||
ШиринаКолонки = ОбластьКолонки.ШиринаКолонки;
|
||||
Если ШиринаКолонки <= 1 Тогда
|
||||
ШиринаКолонки = 1;
|
||||
КонецЕсли;
|
||||
ИмяКолонки = "К" + Формат(Колонки.Количество() + 1, "ЧН=; ЧГ=0");
|
||||
Колонки.Добавить(ИмяКолонки, ТипСтрока, ИмяКолонки, ШиринаКолонки);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
УчитываемыеКолонки = УчитываемыеКолонки(ТабличныйДокумент, НоваяТаблицаЗначений, УчитыватьТолькоВидимыеКолонки);
|
||||
|
||||
ГраницаКолонок = УчитываемыеКолонки.ВГраница();
|
||||
НомерПоследнейСтроки = ТабличныйДокумент.ВысотаТаблицы;
|
||||
|
||||
Для НомерСтроки = 1 По НомерПоследнейСтроки Цикл
|
||||
|
||||
Если УчитыватьТолькоВидимыеСтроки И Не ТабличныйДокумент.Область(НомерСтроки, , НомерСтроки).Видимость Тогда
|
||||
УчитыватьСтроку = УчитыватьТолькоВидимыеСтроки И Не ТабличныйДокумент.Область(НомерСтроки, , НомерСтроки).Видимость;
|
||||
Если УчитыватьСтроку Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
НоваяСтрока = НоваяТаблицаЗначений.Добавить();
|
||||
|
||||
Для Индекс = 0 По ГраницаКолонок Цикл
|
||||
НомерКолонки = УчитываемыеКолонки[Индекс];
|
||||
Область = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки);
|
||||
Область = ТабличныйДокумент.Область(НомерСтроки, УчитываемыеКолонки[Индекс]);
|
||||
НоваяСтрока[Индекс] = Область.Текст;
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат НоваяТаблицаЗначений;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция УчитываемыеКолонки(ТабличныйДокумент, ТаблицаЗначений, УчитыватьТолькоВидимыеКолонки)
|
||||
|
||||
ТипСтрока = Новый ОписаниеТипов("Строка");
|
||||
НомерПоследнейКолонки = ТабличныйДокумент.ШиринаТаблицы;
|
||||
Колонки = ТаблицаЗначений.Колонки;
|
||||
|
||||
// При определении видимости не учитывается наличие нескольких форматов строк, сейчас видимость колонки определяется по формату первой строки
|
||||
УчитываемыеКолонки = Новый Массив;
|
||||
Для НомерКолонки = 1 По НомерПоследнейКолонки Цикл
|
||||
|
||||
ОбластьКолонки = ТабличныйДокумент.Область(1, НомерКолонки);
|
||||
УчитыватьКолонку = Не УчитыватьТолькоВидимыеКолонки Или ОбластьКолонки.Видимость;
|
||||
|
||||
Если УчитыватьКолонку Тогда
|
||||
УчитываемыеКолонки.Добавить(НомерКолонки);
|
||||
ИмяКолонки = "К" + Формат(Колонки.Количество() + 1, "ЧН=; ЧГ=0");
|
||||
Колонки.Добавить(ИмяКолонки, ТипСтрока);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат УчитываемыеКолонки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -44,7 +44,7 @@
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
Ссылка = ЮТТестовыеДанныеСлужебныйВызовСервера.СоздатьЗапись(Менеджер, Данные, ПараметрыЗаписи, Ложь);
|
||||
Ссылка = ЮТТестовыеДанныеСлужебный.СоздатьЗапись(Менеджер, Данные, ПараметрыЗаписи, Ложь);
|
||||
|
||||
Возврат Ссылка;
|
||||
|
||||
@ -73,7 +73,7 @@
|
||||
Данные.Удалить("РежимЗаписи");
|
||||
КонецЕсли;
|
||||
|
||||
Ссылка = ЮТТестовыеДанныеСлужебныйВызовСервера.СоздатьЗапись(Менеджер, Данные, ПараметрыЗаписи, Ложь);
|
||||
Ссылка = ЮТТестовыеДанныеСлужебный.СоздатьЗапись(Менеджер, Данные, ПараметрыЗаписи, Ложь);
|
||||
|
||||
Возврат Ссылка;
|
||||
|
||||
@ -524,7 +524,11 @@
|
||||
// Результат = СлучайноеЗначениеПеречисления(Перечисление); // Результат будет содержать одно из значений перечисления "Пол" (Мужской, Женский).
|
||||
Функция СлучайноеЗначениеПеречисления(Перечисление) Экспорт
|
||||
|
||||
#Если Сервер Тогда
|
||||
Возврат ЮТТестовыеДанныеСлужебныйСервер.СлучайноеЗначениеПеречисления(Перечисление);
|
||||
#Иначе
|
||||
Возврат ЮТТестовыеДанныеСлужебныйВызовСервера.СлучайноеЗначениеПеречисления(Перечисление);
|
||||
#КонецЕсли
|
||||
|
||||
КонецФункции
|
||||
|
||||
@ -546,7 +550,11 @@
|
||||
// // объекта конфигурации "ВидыЦен" непомеченное на удаление".
|
||||
Функция СлучайноеПредопределенноеЗначение(Менеджер, Отбор = Неопределено) Экспорт
|
||||
|
||||
#Если Сервер Тогда
|
||||
Возврат ЮТТестовыеДанныеСлужебныйСервер.СлучайноеПредопределенноеЗначение(Менеджер, Отбор);
|
||||
#Иначе
|
||||
Возврат ЮТТестовыеДанныеСлужебныйВызовСервера.СлучайноеПредопределенноеЗначение(Менеджер, Отбор);
|
||||
#КонецЕсли
|
||||
|
||||
КонецФункции
|
||||
|
||||
@ -565,14 +573,15 @@
|
||||
// Результат = СлучайныйНомерТелефона(); // Результат будет содержать случайный номер телефона в формате "+7(XXX)XXX-XX-XX".
|
||||
// Результат = СлучайныйНомерТелефона("666"); // Результат будет содержать случайный номер телефона в формате "+666(XXX)XXX-XX-XX".
|
||||
Функция СлучайныйНомерТелефона(КодСтраны = "7") Экспорт
|
||||
Результат = СтрШаблон(
|
||||
"+%1(%2)%3-%4-%5",
|
||||
?(ПустаяСтрока(КодСтраны), "7", КодСтраны),
|
||||
Формат(СлучайноеЧисло(0, 999), "ЧЦ=3; ЧН=000; ЧВН=; ЧГ=0;"),
|
||||
Формат(СлучайноеЧисло(0, 999), "ЧЦ=3; ЧН=000; ЧВН=; ЧГ=0;"),
|
||||
Формат(СлучайноеЧисло(0, 99), "ЧЦ=2; ЧН=00; ЧВН=; ЧГ=0;"),
|
||||
Формат(СлучайноеЧисло(0, 99), "ЧЦ=2; ЧН=00; ЧВН=; ЧГ=0;")
|
||||
);
|
||||
ТриЗнака = 999;
|
||||
ДваЗнака = 99;
|
||||
|
||||
Результат = СтрШаблон("+%1(%2)%3-%4-%5",
|
||||
?(ПустаяСтрока(КодСтраны), "7", КодСтраны),
|
||||
Формат(СлучайноеЧисло(0, ТриЗнака), "ЧЦ=3; ЧН=000; ЧВН=; ЧГ=0;"),
|
||||
Формат(СлучайноеЧисло(0, ТриЗнака), "ЧЦ=3; ЧН=000; ЧВН=; ЧГ=0;"),
|
||||
Формат(СлучайноеЧисло(0, ДваЗнака), "ЧЦ=2; ЧН=00; ЧВН=; ЧГ=0;"),
|
||||
Формат(СлучайноеЧисло(0, ДваЗнака), "ЧЦ=2; ЧН=00; ЧВН=; ЧГ=0;"));
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
@ -858,10 +867,16 @@
|
||||
// Привилегированно - Булево - Выполнить удаление в привилегированном режиме (без учета прав на объекты)
|
||||
Процедура Удалить(Ссылки, Привилегированно = Ложь) Экспорт
|
||||
|
||||
Если ЗначениеЗаполнено(Ссылки) Тогда
|
||||
ЮТТестовыеДанныеСлужебныйВызовСервера.Удалить(Ссылки, Привилегированно);
|
||||
Если НЕ ЗначениеЗаполнено(Ссылки) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
#Если Сервер Тогда
|
||||
ЮТТестовыеДанныеСлужебныйСервер.Удалить(Ссылки, Привилегированно);
|
||||
#Иначе
|
||||
ЮТТестовыеДанныеСлужебныйВызовСервера.Удалить(Ссылки, Привилегированно);
|
||||
#КонецЕсли
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
// Возвращает объект подражателя для формирования осмысленных тестовых данных
|
||||
@ -907,12 +922,23 @@
|
||||
|
||||
ЮТПроверкиСлужебный.ПроверитьТипПараметра(ОписанияТипов, "Структура, Соответствие", "ЮТТестовыеДанные.ЗагрузитьИзМакета", "ОписанияТипов");
|
||||
|
||||
Возврат ЮТТестовыеДанныеСлужебный.ЗагрузитьИзМакета(Макет,
|
||||
ОписанияТипов,
|
||||
КэшЗначений,
|
||||
ЗаменяемыеЗначения,
|
||||
ПараметрыСозданияОбъектов,
|
||||
ТаблицаЗначений);
|
||||
ПараметрыЗаполнения = ЮТФабрикаСлужебный.ПараметрыЗаполненияТаблицыЗначений(ПараметрыСозданияОбъектов);
|
||||
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
|
||||
Возврат ЮТТестовыеДанныеСлужебныйСервер.ЗагрузитьИзМакета(Макет,
|
||||
ОписанияТипов,
|
||||
КэшЗначений,
|
||||
ЗаменяемыеЗначения,
|
||||
ПараметрыЗаполнения,
|
||||
ТаблицаЗначений);
|
||||
#Иначе
|
||||
Возврат ЮТТестовыеДанныеСлужебныйВызовСервера.ЗагрузитьИзМакета(Макет,
|
||||
ОписанияТипов,
|
||||
КэшЗначений,
|
||||
ЗаменяемыеЗначения,
|
||||
ПараметрыЗаполнения,
|
||||
ТаблицаЗначений);
|
||||
#КонецЕсли
|
||||
|
||||
КонецФункции
|
||||
|
||||
@ -958,7 +984,11 @@
|
||||
// Длительность - Число - Длительность блокировки в секундах
|
||||
Процедура УстановитьФоновуюБлокировку(Блокировка, Длительность = 30) Экспорт
|
||||
|
||||
#Если Сервер Тогда
|
||||
ЮТТестовыеДанныеСлужебныйСервер.УстановитьФоновуюБлокировку(Блокировка, Длительность);
|
||||
#Иначе
|
||||
ЮТТестовыеДанныеСлужебныйВызовСервера.УстановитьФоновуюБлокировку(Блокировка, Длительность);
|
||||
#КонецЕсли
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@ -970,7 +1000,7 @@
|
||||
// Ссылка - ЛюбаяСсылка
|
||||
// ИмяРеквизита - Строка
|
||||
// ЗначениеРеквизита - Произвольный
|
||||
// ПараметрыЗаписи - см. ЮТФабрикаСлужебный.ПараметрыЗаписи
|
||||
// ПараметрыЗаписи - см. ЮТОбщий.ПараметрыЗаписи
|
||||
Процедура УстановитьЗначениеРеквизита(Ссылка, ИмяРеквизита, ЗначениеРеквизита, ПараметрыЗаписи = Неопределено) Экспорт
|
||||
|
||||
Значения = Новый Соответствие();
|
||||
@ -984,10 +1014,14 @@
|
||||
// Параметры:
|
||||
// Ссылка - ЛюбаяСсылка - Ссылка
|
||||
// ЗначенияРеквизитов - Структура, Соответствие из Произвольный - Значения реквизитов
|
||||
// ПараметрыЗаписи - см. ЮТФабрикаСлужебный.ПараметрыЗаписи
|
||||
// ПараметрыЗаписи - см. ЮТОбщий.ПараметрыЗаписи
|
||||
Процедура УстановитьЗначенияРеквизитов(Ссылка, ЗначенияРеквизитов, ПараметрыЗаписи = Неопределено) Экспорт
|
||||
|
||||
#Если Сервер Тогда
|
||||
ЮТТестовыеДанныеСлужебныйСервер.УстановитьЗначенияРеквизитов(Ссылка, ЗначенияРеквизитов, ПараметрыЗаписи);
|
||||
#Иначе
|
||||
ЮТТестовыеДанныеСлужебныйВызовСервера.УстановитьЗначенияРеквизитов(Ссылка, ЗначенияРеквизитов, ПараметрыЗаписи);
|
||||
#КонецЕсли
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
@ -56,7 +56,7 @@
|
||||
|
||||
Иначе
|
||||
|
||||
Значение = ЮТТестовыеДанныеСлужебныйВызовСервера.ФикцияЗначенияБазы(Тип, РеквизитыЗаполнения);
|
||||
Значение = ФикцияЗначенияБазы(Тип, РеквизитыЗаполнения);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
@ -158,6 +158,56 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ГенераторСлучайныхЧисел() Экспорт
|
||||
|
||||
Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста(ИмяКонтекстаГенераторСлучайныхЧисел());
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьЗапись(Менеджер, Данные, ПараметрыЗаписи, ВернутьОбъект) Экспорт
|
||||
|
||||
#Если Сервер Тогда
|
||||
Возврат ЮТТестовыеДанныеСлужебныйСервер.СоздатьЗапись(Менеджер, Данные, ПараметрыЗаписи, ВернутьОбъект);
|
||||
#Иначе
|
||||
Возврат ЮТТестовыеДанныеСлужебныйВызовСервера.СоздатьЗапись(Менеджер, Данные, ПараметрыЗаписи, ВернутьОбъект);
|
||||
#КонецЕсли
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Создает новый объект и заполняет его данными
|
||||
//
|
||||
// Параметры:
|
||||
// Менеджер - Произвольный
|
||||
// Данные - Структура - Данные заполнения объекта
|
||||
// ДополнительныеСвойства - Структура - Дополнительные свойства объекта
|
||||
// УникальныйИдентификаторСсылки - УникальныйИдентификатор - Уникальный идентификатор, который будет установлен в качестве ссылки для объекта
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Произвольный - Созданный объект
|
||||
Функция НовыйОбъект(Менеджер, Данные, ДополнительныеСвойства = Неопределено, УникальныйИдентификаторСсылки = Неопределено) Экспорт
|
||||
|
||||
#Если Сервер Тогда
|
||||
Возврат ЮТТестовыеДанныеСлужебныйСервер.НовыйОбъект(Менеджер, Данные, ДополнительныеСвойства, УникальныйИдентификаторСсылки);
|
||||
#Иначе
|
||||
Возврат ЮТТестовыеДанныеСлужебныйВызовСервера.НовыйОбъект(Менеджер, Данные, ДополнительныеСвойства, УникальныйИдентификаторСсылки);
|
||||
#КонецЕсли
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ФикцияЗначенияБазы(ТипЗначения, РеквизитыЗаполнения = Неопределено) Экспорт
|
||||
|
||||
#Если Сервер Тогда
|
||||
Возврат ЮТТестовыеДанныеСлужебныйСервер.ФикцияЗначенияБазы(ТипЗначения, РеквизитыЗаполнения);
|
||||
#Иначе
|
||||
Возврат ЮТТестовыеДанныеСлужебныйВызовСервера.ФикцияЗначенияБазы(ТипЗначения, РеквизитыЗаполнения);
|
||||
#КонецЕсли
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
#Область ОбработчикиСобытий
|
||||
|
||||
Процедура ПослеКаждогоТеста(ОписаниеСобытия) Экспорт
|
||||
@ -192,38 +242,6 @@
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
Функция ЗагрузитьИзМакета(Макет, ОписанияТипов, КэшЗначений, ЗаменяемыеЗначения, ПараметрыСозданияОбъектов, ТаблицаЗначений) Экспорт
|
||||
|
||||
ПараметрыЗаполнения = ЮТФабрикаСлужебный.ПараметрыЗаполненияТаблицыЗначений(ПараметрыСозданияОбъектов);
|
||||
|
||||
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Тогда
|
||||
Возврат ЮТТестовыеДанныеСлужебныйСервер.ЗагрузитьИзМакета(Макет,
|
||||
ОписанияТипов,
|
||||
КэшЗначений,
|
||||
ЗаменяемыеЗначения,
|
||||
ПараметрыЗаполнения,
|
||||
ТаблицаЗначений);
|
||||
#Иначе
|
||||
Возврат ЮТТестовыеДанныеСлужебныйВызовСервера.ЗагрузитьИзМакета(Макет,
|
||||
ОписанияТипов,
|
||||
КэшЗначений,
|
||||
ЗаменяемыеЗначения,
|
||||
ПараметрыЗаполнения,
|
||||
ТаблицаЗначений);
|
||||
#КонецЕсли
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ГенераторСлучайныхЧисел() Экспорт
|
||||
|
||||
Возврат ЮТКонтекстСлужебный.ЗначениеКонтекста(ИмяКонтекстаГенераторСлучайныхЧисел());
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
Функция СлучайноЗначениеСистемногоПеречисления(Тип)
|
||||
|
||||
Менеджер = ЮТМетодыСлужебный.ВычислитьБезопасно(ЮТТипыДанныхСлужебный.ИмяСистемногоПеречисления(Тип));
|
||||
|
@ -20,138 +20,25 @@
|
||||
|
||||
Функция СоздатьЗапись(Знач Менеджер, Знач Данные, Знач ПараметрыЗаписи, Знач ВернутьОбъект) Экспорт
|
||||
|
||||
ПараметрыЗаписи = ПараметрыЗаписи(ПараметрыЗаписи);
|
||||
|
||||
Объект = НовыйОбъект(Менеджер, Данные, ПараметрыЗаписи.ДополнительныеСвойства, ПараметрыЗаписи.УникальныйИдентификаторСсылки);
|
||||
|
||||
КлючЗаписи = ЗаписатьОбъект(Объект, ПараметрыЗаписи);
|
||||
ЮТТестовыеДанныеСлужебный.ДобавитьТестовуюЗапись(КлючЗаписи);
|
||||
|
||||
Если ВернутьОбъект Тогда
|
||||
Возврат Объект;
|
||||
Иначе
|
||||
Возврат КлючЗаписи;
|
||||
КонецЕсли;
|
||||
Возврат ЮТТестовыеДанныеСлужебныйСервер.СоздатьЗапись(Менеджер, Данные, ПараметрыЗаписи, ВернутьОбъект);
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Создает новый объект и заполняет его данными
|
||||
//
|
||||
// Параметры:
|
||||
// Менеджер - Произвольный
|
||||
// Данные - Структура - Данные заполнения объекта
|
||||
// ДополнительныеСвойства - Структура - Дополнительные свойства объекта
|
||||
// УникальныйИдентификаторСсылки - УникальныйИдентификатор - Уникальный идентификатор, который будет установлен в качестве ссылки для объекта
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Произвольный - Созданный объект
|
||||
Функция НовыйОбъект(Знач Менеджер,
|
||||
Знач Данные,
|
||||
Знач ДополнительныеСвойства = Неопределено,
|
||||
Знач УникальныйИдентификаторСсылки = Неопределено) Экспорт
|
||||
Функция НовыйОбъект(Знач Менеджер, Знач Данные, Знач ДополнительныеСвойства, Знач УникальныйИдентификаторСсылки) Экспорт
|
||||
|
||||
ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(Менеджер);
|
||||
Менеджер = ЮТОбщий.Менеджер(ОписаниеОбъектаМетаданных);
|
||||
|
||||
ЭтоРегистр = ЮТМетаданные.ЭтоРегистр(ОписаниеОбъектаМетаданных);
|
||||
|
||||
Объект = СоздатьОбъект(Менеджер, ОписаниеОбъектаМетаданных.ОписаниеТипа, Данные);
|
||||
|
||||
Если ДополнительныеСвойства <> Неопределено Тогда
|
||||
ЮТКоллекции.ДополнитьСтруктуру(Объект.ДополнительныеСвойства, ДополнительныеСвойства);
|
||||
КонецЕсли;
|
||||
|
||||
Если УникальныйИдентификаторСсылки <> Неопределено И ОписаниеОбъектаМетаданных.ОписаниеТипа.Ссылочный Тогда
|
||||
Ссылка = Менеджер.ПолучитьСсылку(УникальныйИдентификаторСсылки);
|
||||
Объект.УстановитьСсылкуНового(Ссылка);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЭтоРегистр Тогда
|
||||
ЗаполнитьНаборРегистра(Объект, Данные);
|
||||
Возврат Объект;
|
||||
КонецЕсли;
|
||||
|
||||
ЗаполнитьЗначенияСвойств(Объект, Данные);
|
||||
|
||||
Если ОписаниеОбъектаМетаданных.ОписаниеТипа.ТабличныеЧасти Тогда
|
||||
|
||||
Для Каждого ОписаниеТабличнойЧасти Из ОписаниеОбъектаМетаданных.ТабличныеЧасти Цикл
|
||||
|
||||
ИмяТабличнойЧасти = ОписаниеТабличнойЧасти.Ключ;
|
||||
Если НЕ Данные.Свойство(ИмяТабличнойЧасти) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Запись Из Данные[ИмяТабличнойЧасти] Цикл
|
||||
Строка = Объект[ИмяТабличнойЧасти].Добавить();
|
||||
ЗаполнитьЗначенияСвойств(Строка, Запись);
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ЗаполнитьБазовыеРеквизиты(Объект, ОписаниеОбъектаМетаданных);
|
||||
|
||||
Возврат Объект;
|
||||
Возврат ЮТТестовыеДанныеСлужебныйСервер.НовыйОбъект(Менеджер, Данные, ДополнительныеСвойства, УникальныйИдентификаторСсылки);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура Удалить(Знач Ссылки, Привилегированно = Ложь) Экспорт
|
||||
Процедура Удалить(Знач Ссылки, Знач Привилегированно) Экспорт
|
||||
|
||||
Если ТипЗнч(Ссылки) <> Тип("Массив") Тогда
|
||||
Ссылки = ЮТКоллекции.ЗначениеВМассиве(Ссылки);
|
||||
КонецЕсли;
|
||||
|
||||
Ошибки = Новый Массив;
|
||||
|
||||
Если Привилегированно И НЕ ПривилегированныйРежим() Тогда
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Ссылка Из Ссылки Цикл
|
||||
|
||||
УдалитьСсылку(Ссылка, Ошибки);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ОбновитьНумерациюОбъектов();
|
||||
|
||||
Если ЗначениеЗаполнено(Ошибки) Тогда
|
||||
ВызватьИсключение СтрСоединить(Ошибки, Символы.ПС);
|
||||
КонецЕсли;
|
||||
ЮТТестовыеДанныеСлужебныйСервер.Удалить(Ссылки, Привилегированно);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ФикцияЗначенияБазы(Знач ТипЗначения, Знач РеквизитыЗаполнения = Неопределено) Экспорт
|
||||
Функция ФикцияЗначенияБазы(Знач ТипЗначения, Знач РеквизитыЗаполнения) Экспорт
|
||||
|
||||
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗначения);
|
||||
|
||||
Если ОбъектМетаданных = Неопределено Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Если Метаданные.Перечисления.Содержит(ОбъектМетаданных) Тогда
|
||||
|
||||
Возврат СлучайноеЗначениеПеречисления(ОбъектМетаданных);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(ОбъектМетаданных);
|
||||
Менеджер = ЮТОбщий.Менеджер(ОбъектМетаданных);
|
||||
|
||||
Объект = СоздатьОбъект(Менеджер, ОписаниеОбъектаМетаданных.ОписаниеТипа, РеквизитыЗаполнения);
|
||||
|
||||
Если ЗначениеЗаполнено(РеквизитыЗаполнения) Тогда
|
||||
ЗаполнитьЗначенияСвойств(Объект, РеквизитыЗаполнения);
|
||||
КонецЕсли;
|
||||
|
||||
ЗаполнитьБазовыеРеквизиты(Объект, ОписаниеОбъектаМетаданных);
|
||||
|
||||
КлючЗаписи = ЗаписатьОбъект(Объект, ПараметрыЗаписи());
|
||||
ЮТТестовыеДанныеСлужебный.ДобавитьТестовуюЗапись(КлючЗаписи);
|
||||
|
||||
Возврат КлючЗаписи;
|
||||
Возврат ЮТТестовыеДанныеСлужебныйСервер.ФикцияЗначенияБазы(ТипЗначения, РеквизитыЗаполнения);
|
||||
|
||||
КонецФункции
|
||||
|
||||
@ -173,97 +60,25 @@
|
||||
|
||||
Функция СлучайноеЗначениеПеречисления(Знач Перечисление) Экспорт
|
||||
|
||||
Менеджер = ЮТОбщий.Менеджер(Перечисление);
|
||||
|
||||
НомерЗначения = ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(Менеджер.Количество());
|
||||
Возврат Менеджер.Получить(НомерЗначения - 1);
|
||||
Возврат ЮТТестовыеДанныеСлужебныйСервер.СлучайноеЗначениеПеречисления(Перечисление);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СлучайноеПредопределенноеЗначение(Менеджер, Отбор) Экспорт
|
||||
Функция СлучайноеПредопределенноеЗначение(Знач Менеджер, Знач Отбор) Экспорт
|
||||
|
||||
ИмяТаблицы = ЮТМетаданные.НормализованноеИмяТаблицы(Менеджер);
|
||||
Условия = ЮТест.Предикат(Отбор)
|
||||
.Реквизит("Предопределенный").Равно(Истина);
|
||||
|
||||
ОписаниеЗапроса = ЮТЗапросыСлужебныйКлиентСервер.ОписаниеЗапроса(ИмяТаблицы, Условия, "Ссылка");
|
||||
|
||||
Данные = ЮТЗапросы.РезультатЗапроса(ОписаниеЗапроса);
|
||||
|
||||
Если Данные.Количество() = 1 Тогда
|
||||
Значение = Данные[0].Ссылка;
|
||||
ИначеЕсли Данные.Количество() > 1 Тогда
|
||||
Индекс = ЮТест.Данные().СлучайноеЧисло(0, Данные.Количество() - 1);
|
||||
Значение = Данные[Индекс].Ссылка;
|
||||
Иначе
|
||||
Значение = Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Значение;
|
||||
Возврат ЮТТестовыеДанныеСлужебныйСервер.СлучайноеПредопределенноеЗначение(Менеджер, Отбор);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура УстановитьЗначенияРеквизитов(Знач Ссылка, Знач ЗначенияРеквизитов, Знач ПараметрыЗаписи = Неопределено) Экспорт
|
||||
Процедура УстановитьЗначенияРеквизитов(Знач Ссылка, Знач ЗначенияРеквизитов, Знач ПараметрыЗаписи) Экспорт
|
||||
|
||||
Объект = Ссылка.ПолучитьОбъект();
|
||||
ПараметрыЗаписи = ПараметрыЗаписи(ПараметрыЗаписи);
|
||||
|
||||
Для Каждого Элемент Из ЗначенияРеквизитов Цикл
|
||||
Объект[Элемент.Ключ] = Элемент.Значение;
|
||||
КонецЦикла;
|
||||
|
||||
ЗаписатьОбъект(Объект, ПараметрыЗаписи);
|
||||
ЮТТестовыеДанныеСлужебныйСервер.УстановитьЗначенияРеквизитов(Ссылка, ЗначенияРеквизитов, ПараметрыЗаписи);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьФоновуюБлокировку(Блокировка, Длительность) Экспорт
|
||||
Процедура УстановитьФоновуюБлокировку(Знач Блокировка, Знач Длительность) Экспорт
|
||||
|
||||
ОписаниеБлокировки = ОписаниеБлокировки(Блокировка);
|
||||
Параметры = ЮТКоллекции.ЗначениеВМассиве(ОписаниеБлокировки, Длительность);
|
||||
|
||||
Задание = ФоновыеЗадания.Выполнить("ЮТТестовыеДанныеСлужебныйВызовСервера.УстановитьБлокировку", Параметры);
|
||||
|
||||
Если Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
|
||||
//@skip-check empty-except-statement
|
||||
Попытка
|
||||
ФоновыеЗадания.ОжидатьЗавершения(ЮТКоллекции.ЗначениеВМассиве(Задание), 1);
|
||||
Исключение
|
||||
// Исключение не интересно
|
||||
КонецПопытки;
|
||||
Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Задание.УникальныйИдентификатор);
|
||||
КонецЕсли;
|
||||
|
||||
Если Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
|
||||
ВызватьИсключение Задание.ИнформацияОбОшибке;
|
||||
ИначеЕсли Задание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда
|
||||
ВызватьИсключение "Фоновое задание с блокировкой завершилось";
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьБлокировку(ОписаниеБлокировки, Длительность) Экспорт
|
||||
|
||||
Блокировка = Новый БлокировкаДанных();
|
||||
|
||||
Для Каждого ОписаниеЭлемента Из ОписаниеБлокировки Цикл
|
||||
Элемент = Блокировка.Добавить();
|
||||
ЗаполнитьЗначенияСвойств(Элемент, ОписаниеЭлемента, "Область, Режим");
|
||||
|
||||
Для Каждого ОписаниеПоля Из ОписаниеЭлемента.Поля Цикл
|
||||
Элемент.УстановитьЗначение(ОписаниеПоля.Поле, ОписаниеПоля.Значение);
|
||||
КонецЦикла;
|
||||
КонецЦикла;
|
||||
|
||||
// BSLLS:BeginTransactionBeforeTryCatch-off
|
||||
// BSLLS:PairingBrokenTransaction-off
|
||||
// BSLLS:PairingBrokenTransaction-off
|
||||
НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);
|
||||
// BSLLS:BeginTransactionBeforeTryCatch-on
|
||||
// BSLLS:PairingBrokenTransaction-on
|
||||
// BSLLS:PairingBrokenTransaction-on
|
||||
//@skip-check lock-out-of-try
|
||||
Блокировка.Заблокировать();
|
||||
ЮТОбщий.Пауза(Длительность);
|
||||
ЮТТестовыеДанныеСлужебныйСервер.УстановитьФоновуюБлокировку(Блокировка, Длительность);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@ -274,254 +89,3 @@
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
||||
// Создать объект.
|
||||
//
|
||||
// Параметры: ОписаниеМенеджера -
|
||||
// См. ОписаниеМенеджера
|
||||
// Менеджер - Произвольный - Менеджер
|
||||
// ОписаниеТипа - см. ЮТМетаданные.СтруктураОписанияОбъектаМетаданных
|
||||
// Данные - Структура
|
||||
// Возвращаемое значение:
|
||||
// Произвольный - Создать объект
|
||||
Функция СоздатьОбъект(Менеджер, ОписаниеТипа, Данные)
|
||||
|
||||
Если ОписаниеТипа.Конструктор = "СоздатьЭлемент" Тогда
|
||||
|
||||
ЭтоГруппа = ?(Данные = Неопределено, Ложь, ЮТКоллекции.ЗначениеСтруктуры(Данные, "ЭтоГруппа", Ложь));
|
||||
Если ЭтоГруппа Тогда
|
||||
Результат = Менеджер.СоздатьГруппу();
|
||||
Иначе
|
||||
Результат = Менеджер.СоздатьЭлемент();
|
||||
КонецЕсли;
|
||||
|
||||
ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьДокумент" Тогда
|
||||
Результат = Менеджер.СоздатьДокумент();
|
||||
ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьСчет" Тогда
|
||||
Результат = Менеджер.СоздатьСчет();
|
||||
ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьВидРасчета" Тогда
|
||||
Результат = Менеджер.СоздатьВидРасчета();
|
||||
ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьУзел" Тогда
|
||||
Результат = Менеджер.СоздатьУзел();
|
||||
ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьНаборЗаписей" Тогда
|
||||
Результат = Менеджер.СоздатьНаборЗаписей();
|
||||
ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьМенеджерЗаписи" Тогда
|
||||
Результат = Менеджер.СоздатьМенеджерЗаписи();
|
||||
ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьБизнесПроцесс" Тогда
|
||||
Результат = Менеджер.СоздатьБизнесПроцесс();
|
||||
ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьЗадачу" Тогда
|
||||
Результат = Менеджер.СоздатьЗадачу();
|
||||
Иначе
|
||||
ВызватьИсключение СтрШаблон("Для %1 не поддерживается создание записей ИБ", ОписаниеТипа.Имя);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Записать объект.
|
||||
//
|
||||
// Параметры:
|
||||
// Объект - Произвольный - Объект
|
||||
// ПараметрыЗаписи - см. ЮТОбщий.ПараметрыЗаписи
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// ЛюбаяСсылка
|
||||
Функция ЗаписатьОбъект(Объект, ПараметрыЗаписи)
|
||||
|
||||
Если ПараметрыЗаписи.ОбменДаннымиЗагрузка Тогда
|
||||
Объект.ОбменДанными.Загрузка = Истина;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
|
||||
Если ПараметрыЗаписи.РежимЗаписи <> Неопределено Тогда
|
||||
Объект.Записать(ПараметрыЗаписи.РежимЗаписи);
|
||||
Иначе
|
||||
Объект.Записать();
|
||||
КонецЕсли;
|
||||
|
||||
Если ПараметрыЗаписи.ОбменДаннымиЗагрузка Тогда
|
||||
Объект.ОбменДанными.Загрузка = Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат КлючЗаписи(Объект);
|
||||
|
||||
Исключение
|
||||
|
||||
ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки(СтрШаблон("Не удалось записать объект `%1` (%2)", Объект, ТипЗнч(Объект)));
|
||||
ВызватьИсключение;
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаполнитьБазовыеРеквизиты(Объект, ОписаниеОбъектаМетаданных)
|
||||
|
||||
АнглийскийЯзык = ЮТОкружение.ИспользуетсяАнглийскийВстроенныйЯзык();
|
||||
ИмяТипаДокумент = ?(АнглийскийЯзык, "Document", "Документ");
|
||||
ИмяРеквизитаКод = ?(АнглийскийЯзык, "Code", "Код");
|
||||
ИмяРеквизитаНаименование = ?(АнглийскийЯзык, "Description", "Наименование");
|
||||
|
||||
ОписаниеТипа = ОписаниеОбъектаМетаданных.ОписаниеТипа;
|
||||
Если ОписаниеТипа.Имя = ИмяТипаДокумент Тогда
|
||||
Если НЕ ЗначениеЗаполнено(Объект.Дата) Тогда
|
||||
Объект.Дата = ТекущаяДатаСеанса();
|
||||
КонецЕсли;
|
||||
Если НЕ ЗначениеЗаполнено(Объект.Номер) Тогда
|
||||
Объект.УстановитьНовыйНомер();
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
УстановитьНовыйКод = ОписаниеОбъектаМетаданных.ОписаниеТипа.УстановитьНовыйКод
|
||||
И ОписаниеОбъектаМетаданных.Реквизиты.Свойство(ИмяРеквизитаКод)
|
||||
И ОписаниеОбъектаМетаданных.Реквизиты[ИмяРеквизитаКод].Обязательный
|
||||
И Не ЗначениеЗаполнено(Объект.Код);
|
||||
|
||||
УстановитьНаименование = ОписаниеОбъектаМетаданных.Реквизиты.Свойство(ИмяРеквизитаНаименование)
|
||||
И ОписаниеОбъектаМетаданных.Реквизиты[ИмяРеквизитаНаименование].Обязательный
|
||||
И НЕ ЗначениеЗаполнено(Объект.Наименование);
|
||||
|
||||
Если УстановитьНовыйКод Тогда
|
||||
Объект.УстановитьНовыйКод();
|
||||
КонецЕсли;
|
||||
|
||||
Если УстановитьНаименование Тогда
|
||||
РеквизитНаименование = ОписаниеОбъектаМетаданных.Реквизиты[ИмяРеквизитаНаименование];
|
||||
Объект.Наименование = ЮТТестовыеДанные.Фикция(РеквизитНаименование.Тип);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция КлючЗаписи(Объект)
|
||||
|
||||
ТипЗначения = ТипЗнч(Объект);
|
||||
|
||||
Если ЮТТипыДанныхСлужебный.ЭтоТипОбъекта(ТипЗначения) Тогда
|
||||
|
||||
Возврат Объект.Ссылка;
|
||||
|
||||
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоМенеджерЗаписи(ТипЗначения) Тогда
|
||||
|
||||
Описание = ЮТМетаданные.ОписаниеОбъектаМетаданных(Объект);
|
||||
|
||||
КлючевыеРеквизиты = Новый Структура();
|
||||
Для Каждого Реквизит Из Описание.Реквизиты Цикл
|
||||
Если Реквизит.Значение.ЭтоКлюч Тогда
|
||||
КлючевыеРеквизиты.Вставить(Реквизит.Ключ, Объект[Реквизит.Ключ]);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Менеджер = ЮТОбщий.Менеджер(Описание);
|
||||
Возврат Менеджер.СоздатьКлючЗаписи(КлючевыеРеквизиты);
|
||||
|
||||
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоТипНабораЗаписей(ТипЗначения) Тогда
|
||||
|
||||
КлючевыеРеквизиты = Новый Структура();
|
||||
|
||||
Для Каждого ЭлементОтбора Из Объект.Отбор Цикл
|
||||
КлючевыеРеквизиты.Вставить(ЭлементОтбора.Имя, ЭлементОтбора.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
Менеджер = ЮТОбщий.Менеджер(Объект);
|
||||
Возврат Менеджер.СоздатьКлючЗаписи(КлючевыеРеквизиты);
|
||||
|
||||
Иначе
|
||||
|
||||
Сообщение = ЮТИсключения.НеподдерживаемыйПараметрМетода("ЮТТестовыеДанныеВызовСервера.КлючЗаписи", Объект);
|
||||
ВызватьИсключение Сообщение;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПараметрыЗаписи(ВходящиеПараметрыЗаписи = Неопределено)
|
||||
|
||||
Если ВходящиеПараметрыЗаписи = Неопределено Тогда
|
||||
Возврат ЮТОбщий.ПараметрыЗаписи();
|
||||
Иначе
|
||||
ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
|
||||
ЗаполнитьЗначенияСвойств(ПараметрыЗаписи, ВходящиеПараметрыЗаписи);
|
||||
Возврат ПараметрыЗаписи;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаполнитьНаборРегистра(Набор, ДанныеЗаписи)
|
||||
|
||||
Запись = Набор.Добавить();
|
||||
ЗаполнитьЗначенияСвойств(Запись, ДанныеЗаписи);
|
||||
|
||||
Для Каждого ЭлементОтбора Из Набор.Отбор Цикл
|
||||
ЭлементОтбора.Установить(Запись[ЭлементОтбора.Имя]);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УдалитьСсылку(Значение, ОшибкиОбработки)
|
||||
|
||||
ТипЗначения = ТипЗнч(Значение);
|
||||
|
||||
Если Значение = Неопределено ИЛИ ЮТТипыДанныхСлужебный.ЭтоТипПеречисления(ТипЗначения) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
|
||||
Если ЮТТипыДанныхСлужебный.ЭтоТипОбъекта(ТипЗначения) Тогда
|
||||
Если НЕ Значение.ЭтоНовый() Тогда
|
||||
Значение.Удалить();
|
||||
КонецЕсли;
|
||||
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипЗначения) Тогда
|
||||
Объект = Значение.ПолучитьОбъект();
|
||||
Если Объект <> Неопределено Тогда
|
||||
Объект.Удалить();
|
||||
КонецЕсли;
|
||||
Иначе
|
||||
Менеджер = ЮТОбщий.Менеджер(ТипЗначения);
|
||||
Запись = Менеджер.СоздатьМенеджерЗаписи();
|
||||
ЗаполнитьЗначенияСвойств(Запись, Значение);
|
||||
Запись.Прочитать();
|
||||
Запись.Удалить();
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
|
||||
ОшибкиОбработки.Добавить(ЮТРегистрацияОшибокСлужебный.ПредставлениеОшибки("Удаление " + Значение, ИнформацияОбОшибке()));
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ОписаниеБлокировки(Блокировка)
|
||||
|
||||
Описание = Новый Массив();
|
||||
|
||||
Для Каждого Элемент Из Блокировка Цикл
|
||||
Описание.Добавить(ОписаниеЭлементаБлокировки(Элемент));
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Описание;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОписаниеЭлементаБлокировки(ЭлементБлокировки)
|
||||
|
||||
Описание = Новый Структура;
|
||||
Описание.Вставить("Область", ЭлементБлокировки.Область);
|
||||
Описание.Вставить("Режим", ЭлементБлокировки.Режим);
|
||||
Описание.Вставить("Поля", Новый Массив);
|
||||
|
||||
Для Каждого Поле Из ЭлементБлокировки.Поля Цикл
|
||||
ОписаниеПоля = Новый Структура;
|
||||
ОписаниеПоля.Вставить("Поле", Поле.Поле);
|
||||
ОписаниеПоля.Вставить("Значение", Поле.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Описание;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -18,12 +18,7 @@
|
||||
|
||||
#Область СлужебныйПрограммныйИнтерфейс
|
||||
|
||||
Функция ЗагрузитьИзМакета(Знач Макет,
|
||||
Знач ОписанияТипов,
|
||||
КэшЗначений,
|
||||
Знач ЗаменяемыеЗначения,
|
||||
Знач ПараметрыЗаполнения,
|
||||
Знач ТаблицаЗначений) Экспорт
|
||||
Функция ЗагрузитьИзМакета(Макет, ОписанияТипов, КэшЗначений, ЗаменяемыеЗначения, ПараметрыЗаполнения, ТаблицаЗначений) Экспорт
|
||||
|
||||
Таблица = ЗагрузитьВТаблицуИзМакета(Макет, ОписанияТипов, КэшЗначений, ЗаменяемыеЗначения, ПараметрыЗаполнения);
|
||||
|
||||
@ -44,6 +39,238 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ВыборкаИзТабличногоДокумента(ТабличныйДокумент) Экспорт
|
||||
|
||||
Возврат ЗапросКТабличномуДокументу(ТабличныйДокумент).Выбрать();
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ТаблицаИзТабличногоДокумента(ТабличныйДокумент) Экспорт
|
||||
|
||||
Возврат ЗапросКТабличномуДокументу(ТабличныйДокумент).Выгрузить();
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьЗапись(Менеджер, Данные, ПараметрыЗаписи, ВернутьОбъект) Экспорт
|
||||
|
||||
ПараметрыЗаписи = ПараметрыЗаписи(ПараметрыЗаписи);
|
||||
|
||||
Объект = НовыйОбъект(Менеджер, Данные, ПараметрыЗаписи.ДополнительныеСвойства, ПараметрыЗаписи.УникальныйИдентификаторСсылки);
|
||||
|
||||
КлючЗаписи = ЗаписатьОбъект(Объект, ПараметрыЗаписи);
|
||||
ЮТТестовыеДанныеСлужебный.ДобавитьТестовуюЗапись(КлючЗаписи);
|
||||
|
||||
Если ВернутьОбъект Тогда
|
||||
Возврат Объект;
|
||||
Иначе
|
||||
Возврат КлючЗаписи;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция НовыйОбъект(Знач Менеджер, Данные, ДополнительныеСвойства, УникальныйИдентификаторСсылки) Экспорт
|
||||
|
||||
ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(Менеджер);
|
||||
Менеджер = ЮТОбщий.Менеджер(ОписаниеОбъектаМетаданных);
|
||||
|
||||
ЭтоРегистр = ЮТМетаданные.ЭтоРегистр(ОписаниеОбъектаМетаданных);
|
||||
|
||||
Объект = СоздатьОбъект(Менеджер, ОписаниеОбъектаМетаданных.ОписаниеТипа, Данные);
|
||||
|
||||
Если ДополнительныеСвойства <> Неопределено Тогда
|
||||
ЮТКоллекции.ДополнитьСтруктуру(Объект.ДополнительныеСвойства, ДополнительныеСвойства);
|
||||
КонецЕсли;
|
||||
|
||||
Если УникальныйИдентификаторСсылки <> Неопределено И ОписаниеОбъектаМетаданных.ОписаниеТипа.Ссылочный Тогда
|
||||
Ссылка = Менеджер.ПолучитьСсылку(УникальныйИдентификаторСсылки);
|
||||
Объект.УстановитьСсылкуНового(Ссылка);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЭтоРегистр Тогда
|
||||
ЗаполнитьНаборРегистра(Объект, Данные);
|
||||
Возврат Объект;
|
||||
КонецЕсли;
|
||||
|
||||
ЗаполнитьЗначенияСвойств(Объект, Данные);
|
||||
|
||||
Если ОписаниеОбъектаМетаданных.ОписаниеТипа.ТабличныеЧасти Тогда
|
||||
|
||||
Для Каждого ОписаниеТабличнойЧасти Из ОписаниеОбъектаМетаданных.ТабличныеЧасти Цикл
|
||||
|
||||
ИмяТабличнойЧасти = ОписаниеТабличнойЧасти.Ключ;
|
||||
Если НЕ Данные.Свойство(ИмяТабличнойЧасти) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Запись Из Данные[ИмяТабличнойЧасти] Цикл
|
||||
Строка = Объект[ИмяТабличнойЧасти].Добавить();
|
||||
ЗаполнитьЗначенияСвойств(Строка, Запись);
|
||||
КонецЦикла;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ЗаполнитьБазовыеРеквизиты(Объект, ОписаниеОбъектаМетаданных);
|
||||
|
||||
Возврат Объект;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура Удалить(Ссылки, Привилегированно) Экспорт
|
||||
|
||||
Если ТипЗнч(Ссылки) <> Тип("Массив") Тогда
|
||||
Ссылки = ЮТКоллекции.ЗначениеВМассиве(Ссылки);
|
||||
КонецЕсли;
|
||||
|
||||
Ошибки = Новый Массив;
|
||||
|
||||
Если Привилегированно И НЕ ПривилегированныйРежим() Тогда
|
||||
УстановитьПривилегированныйРежим(Истина);
|
||||
КонецЕсли;
|
||||
|
||||
Для Каждого Ссылка Из Ссылки Цикл
|
||||
|
||||
УдалитьСсылку(Ссылка, Ошибки);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
ОбновитьНумерациюОбъектов();
|
||||
|
||||
Если ЗначениеЗаполнено(Ошибки) Тогда
|
||||
ВызватьИсключение СтрСоединить(Ошибки, Символы.ПС);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ФикцияЗначенияБазы(ТипЗначения, РеквизитыЗаполнения) Экспорт
|
||||
|
||||
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗначения);
|
||||
|
||||
Если ОбъектМетаданных = Неопределено Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Если Метаданные.Перечисления.Содержит(ОбъектМетаданных) Тогда
|
||||
|
||||
Возврат СлучайноеЗначениеПеречисления(ОбъектМетаданных);
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
ОписаниеОбъектаМетаданных = ЮТМетаданные.ОписаниеОбъектаМетаданных(ОбъектМетаданных);
|
||||
Менеджер = ЮТОбщий.Менеджер(ОбъектМетаданных);
|
||||
|
||||
Объект = СоздатьОбъект(Менеджер, ОписаниеОбъектаМетаданных.ОписаниеТипа, РеквизитыЗаполнения);
|
||||
|
||||
Если ЗначениеЗаполнено(РеквизитыЗаполнения) Тогда
|
||||
ЗаполнитьЗначенияСвойств(Объект, РеквизитыЗаполнения);
|
||||
КонецЕсли;
|
||||
|
||||
ЗаполнитьБазовыеРеквизиты(Объект, ОписаниеОбъектаМетаданных);
|
||||
|
||||
КлючЗаписи = ЗаписатьОбъект(Объект, ПараметрыЗаписи());
|
||||
ЮТТестовыеДанныеСлужебный.ДобавитьТестовуюЗапись(КлючЗаписи);
|
||||
|
||||
Возврат КлючЗаписи;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СлучайноеЗначениеПеречисления(Перечисление) Экспорт
|
||||
|
||||
Менеджер = ЮТОбщий.Менеджер(Перечисление);
|
||||
|
||||
НомерЗначения = ЮТТестовыеДанные.СлучайноеПоложительноеЧисло(Менеджер.Количество());
|
||||
Возврат Менеджер.Получить(НомерЗначения - 1);
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СлучайноеПредопределенноеЗначение(Менеджер, Отбор) Экспорт
|
||||
|
||||
ИмяТаблицы = ЮТМетаданные.НормализованноеИмяТаблицы(Менеджер);
|
||||
Условия = ЮТест.Предикат(Отбор)
|
||||
.Реквизит("Предопределенный").Равно(Истина);
|
||||
|
||||
ОписаниеЗапроса = ЮТЗапросыСлужебныйКлиентСервер.ОписаниеЗапроса(ИмяТаблицы, Условия, "Ссылка");
|
||||
|
||||
Данные = ЮТЗапросы.РезультатЗапроса(ОписаниеЗапроса);
|
||||
|
||||
Если Данные.Количество() = 1 Тогда
|
||||
Значение = Данные[0].Ссылка;
|
||||
ИначеЕсли Данные.Количество() > 1 Тогда
|
||||
Индекс = ЮТест.Данные().СлучайноеЧисло(0, Данные.Количество() - 1);
|
||||
Значение = Данные[Индекс].Ссылка;
|
||||
Иначе
|
||||
Значение = Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Значение;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура УстановитьЗначенияРеквизитов(Ссылка, ЗначенияРеквизитов, ПараметрыЗаписи) Экспорт
|
||||
|
||||
Объект = Ссылка.ПолучитьОбъект();
|
||||
ПараметрыЗаписи = ПараметрыЗаписи(ПараметрыЗаписи);
|
||||
|
||||
Для Каждого Элемент Из ЗначенияРеквизитов Цикл
|
||||
Объект[Элемент.Ключ] = Элемент.Значение;
|
||||
КонецЦикла;
|
||||
|
||||
ЗаписатьОбъект(Объект, ПараметрыЗаписи);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьФоновуюБлокировку(Блокировка, Длительность) Экспорт
|
||||
|
||||
ОписаниеБлокировки = ОписаниеБлокировки(Блокировка);
|
||||
Параметры = ЮТКоллекции.ЗначениеВМассиве(ОписаниеБлокировки, Длительность);
|
||||
|
||||
Задание = ФоновыеЗадания.Выполнить("ЮТТестовыеДанныеСлужебныйСервер.УстановитьБлокировку", Параметры);
|
||||
|
||||
Если Задание.Состояние = СостояниеФоновогоЗадания.Активно Тогда
|
||||
//@skip-check empty-except-statement
|
||||
Попытка
|
||||
ФоновыеЗадания.ОжидатьЗавершения(ЮТКоллекции.ЗначениеВМассиве(Задание), 1);
|
||||
Исключение
|
||||
// Исключение не интересно
|
||||
КонецПопытки;
|
||||
Задание = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(Задание.УникальныйИдентификатор);
|
||||
КонецЕсли;
|
||||
|
||||
Если Задание.Состояние = СостояниеФоновогоЗадания.ЗавершеноАварийно Тогда
|
||||
ВызватьИсключение Задание.ИнформацияОбОшибке;
|
||||
ИначеЕсли Задание.Состояние <> СостояниеФоновогоЗадания.Активно Тогда
|
||||
ВызватьИсключение "Фоновое задание с блокировкой завершилось";
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УстановитьБлокировку(ОписаниеБлокировки, Длительность) Экспорт
|
||||
|
||||
Блокировка = Новый БлокировкаДанных();
|
||||
|
||||
Для Каждого ОписаниеЭлемента Из ОписаниеБлокировки Цикл
|
||||
Элемент = Блокировка.Добавить();
|
||||
ЗаполнитьЗначенияСвойств(Элемент, ОписаниеЭлемента, "Область, Режим");
|
||||
|
||||
Для Каждого ОписаниеПоля Из ОписаниеЭлемента.Поля Цикл
|
||||
Элемент.УстановитьЗначение(ОписаниеПоля.Поле, ОписаниеПоля.Значение);
|
||||
КонецЦикла;
|
||||
КонецЦикла;
|
||||
|
||||
// BSLLS:BeginTransactionBeforeTryCatch-off
|
||||
// BSLLS:PairingBrokenTransaction-off
|
||||
// BSLLS:PairingBrokenTransaction-off
|
||||
НачатьТранзакцию(РежимУправленияБлокировкойДанных.Управляемый);
|
||||
// BSLLS:BeginTransactionBeforeTryCatch-on
|
||||
// BSLLS:PairingBrokenTransaction-on
|
||||
// BSLLS:PairingBrokenTransaction-on
|
||||
//@skip-check lock-out-of-try
|
||||
Блокировка.Заблокировать();
|
||||
ЮТОбщий.Пауза(Длительность);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
@ -75,7 +302,7 @@
|
||||
|
||||
ПараметрыЗагрузки = ПараметрыЗагрузки(КолонкиМакета, ОписанияТипов, ЗаменяемыеЗначения, КэшЗначений, ПараметрыЗаполнения);
|
||||
|
||||
Выборка = ЮТОбщийСлужебныйВызовСервера.ВыборкаИзТабличногоДокумента(ДанныеМакета);
|
||||
Выборка = ВыборкаИзТабличногоДокумента(ДанныеМакета);
|
||||
|
||||
Пока Выборка.Следующий() Цикл
|
||||
|
||||
@ -244,7 +471,7 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ДанныеМакета(Знач Макет)
|
||||
Функция ДанныеМакета(Макет)
|
||||
|
||||
ТипПараметра = ТипЗнч(Макет);
|
||||
ДанныеМакета = Неопределено;
|
||||
@ -585,4 +812,251 @@
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
Функция ЗапросКТабличномуДокументу(ТабличныйДокумент)
|
||||
|
||||
ВсегоСтрок = ТабличныйДокумент.ВысотаТаблицы;
|
||||
ВсегоКолонок = ТабличныйДокумент.ШиринаТаблицы;
|
||||
|
||||
Область = ТабличныйДокумент.Область(1, 1, ВсегоСтрок, ВсегоКолонок);
|
||||
|
||||
ИсточникДанных = Новый ОписаниеИсточникаДанных(Область);
|
||||
ПостроительОтчета = Новый ПостроительОтчета;
|
||||
ПостроительОтчета.ИсточникДанных = ИсточникДанных;
|
||||
ПостроительОтчета.Выполнить();
|
||||
|
||||
Возврат ПостроительОтчета.Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СоздатьОбъект(Менеджер, ОписаниеТипа, Данные)
|
||||
|
||||
Если ОписаниеТипа.Конструктор = "СоздатьЭлемент" Тогда
|
||||
|
||||
ЭтоГруппа = ?(Данные = Неопределено, Ложь, ЮТКоллекции.ЗначениеСтруктуры(Данные, "ЭтоГруппа", Ложь));
|
||||
Если ЭтоГруппа Тогда
|
||||
Результат = Менеджер.СоздатьГруппу();
|
||||
Иначе
|
||||
Результат = Менеджер.СоздатьЭлемент();
|
||||
КонецЕсли;
|
||||
|
||||
ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьДокумент" Тогда
|
||||
Результат = Менеджер.СоздатьДокумент();
|
||||
ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьСчет" Тогда
|
||||
Результат = Менеджер.СоздатьСчет();
|
||||
ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьВидРасчета" Тогда
|
||||
Результат = Менеджер.СоздатьВидРасчета();
|
||||
ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьУзел" Тогда
|
||||
Результат = Менеджер.СоздатьУзел();
|
||||
ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьНаборЗаписей" Тогда
|
||||
Результат = Менеджер.СоздатьНаборЗаписей();
|
||||
ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьМенеджерЗаписи" Тогда
|
||||
Результат = Менеджер.СоздатьМенеджерЗаписи();
|
||||
ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьБизнесПроцесс" Тогда
|
||||
Результат = Менеджер.СоздатьБизнесПроцесс();
|
||||
ИначеЕсли ОписаниеТипа.Конструктор = "СоздатьЗадачу" Тогда
|
||||
Результат = Менеджер.СоздатьЗадачу();
|
||||
Иначе
|
||||
ВызватьИсключение СтрШаблон("Для %1 не поддерживается создание записей ИБ", ОписаниеТипа.Имя);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ЗаписатьОбъект(Объект, ПараметрыЗаписи)
|
||||
|
||||
Если ПараметрыЗаписи.ОбменДаннымиЗагрузка Тогда
|
||||
Объект.ОбменДанными.Загрузка = Истина;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
|
||||
Если ПараметрыЗаписи.РежимЗаписи <> Неопределено Тогда
|
||||
Объект.Записать(ПараметрыЗаписи.РежимЗаписи);
|
||||
Иначе
|
||||
Объект.Записать();
|
||||
КонецЕсли;
|
||||
|
||||
Если ПараметрыЗаписи.ОбменДаннымиЗагрузка Тогда
|
||||
Объект.ОбменДанными.Загрузка = Ложь;
|
||||
КонецЕсли;
|
||||
|
||||
Возврат КлючЗаписи(Объект);
|
||||
|
||||
Исключение
|
||||
|
||||
ЮТРегистрацияОшибок.ДобавитьПояснениеОшибки(СтрШаблон("Не удалось записать объект `%1` (%2)", Объект, ТипЗнч(Объект)));
|
||||
ВызватьИсключение;
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаполнитьБазовыеРеквизиты(Объект, ОписаниеОбъектаМетаданных)
|
||||
|
||||
АнглийскийЯзык = ЮТОкружение.ИспользуетсяАнглийскийВстроенныйЯзык();
|
||||
ИмяТипаДокумент = ?(АнглийскийЯзык, "Document", "Документ");
|
||||
ИмяРеквизитаКод = ?(АнглийскийЯзык, "Code", "Код");
|
||||
ИмяРеквизитаНаименование = ?(АнглийскийЯзык, "Description", "Наименование");
|
||||
|
||||
ОписаниеТипа = ОписаниеОбъектаМетаданных.ОписаниеТипа;
|
||||
Если ОписаниеТипа.Имя = ИмяТипаДокумент Тогда
|
||||
Если НЕ ЗначениеЗаполнено(Объект.Дата) Тогда
|
||||
Объект.Дата = ТекущаяДатаСеанса();
|
||||
КонецЕсли;
|
||||
Если НЕ ЗначениеЗаполнено(Объект.Номер) Тогда
|
||||
Объект.УстановитьНовыйНомер();
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
|
||||
УстановитьНовыйКод = ОписаниеОбъектаМетаданных.ОписаниеТипа.УстановитьНовыйКод
|
||||
И ОписаниеОбъектаМетаданных.Реквизиты.Свойство(ИмяРеквизитаКод)
|
||||
И ОписаниеОбъектаМетаданных.Реквизиты[ИмяРеквизитаКод].Обязательный
|
||||
И Не ЗначениеЗаполнено(Объект.Код);
|
||||
|
||||
УстановитьНаименование = ОписаниеОбъектаМетаданных.Реквизиты.Свойство(ИмяРеквизитаНаименование)
|
||||
И ОписаниеОбъектаМетаданных.Реквизиты[ИмяРеквизитаНаименование].Обязательный
|
||||
И НЕ ЗначениеЗаполнено(Объект.Наименование);
|
||||
|
||||
Если УстановитьНовыйКод Тогда
|
||||
Объект.УстановитьНовыйКод();
|
||||
КонецЕсли;
|
||||
|
||||
Если УстановитьНаименование Тогда
|
||||
РеквизитНаименование = ОписаниеОбъектаМетаданных.Реквизиты[ИмяРеквизитаНаименование];
|
||||
Объект.Наименование = ЮТТестовыеДанные.Фикция(РеквизитНаименование.Тип);
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция КлючЗаписи(Объект)
|
||||
|
||||
ТипЗначения = ТипЗнч(Объект);
|
||||
|
||||
Если ЮТТипыДанныхСлужебный.ЭтоТипОбъекта(ТипЗначения) Тогда
|
||||
|
||||
Возврат Объект.Ссылка;
|
||||
|
||||
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоМенеджерЗаписи(ТипЗначения) Тогда
|
||||
|
||||
Описание = ЮТМетаданные.ОписаниеОбъектаМетаданных(Объект);
|
||||
|
||||
КлючевыеРеквизиты = Новый Структура();
|
||||
Для Каждого Реквизит Из Описание.Реквизиты Цикл
|
||||
Если Реквизит.Значение.ЭтоКлюч Тогда
|
||||
КлючевыеРеквизиты.Вставить(Реквизит.Ключ, Объект[Реквизит.Ключ]);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Менеджер = ЮТОбщий.Менеджер(Описание);
|
||||
Возврат Менеджер.СоздатьКлючЗаписи(КлючевыеРеквизиты);
|
||||
|
||||
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоТипНабораЗаписей(ТипЗначения) Тогда
|
||||
|
||||
КлючевыеРеквизиты = Новый Структура();
|
||||
|
||||
Для Каждого ЭлементОтбора Из Объект.Отбор Цикл
|
||||
КлючевыеРеквизиты.Вставить(ЭлементОтбора.Имя, ЭлементОтбора.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
Менеджер = ЮТОбщий.Менеджер(Объект);
|
||||
Возврат Менеджер.СоздатьКлючЗаписи(КлючевыеРеквизиты);
|
||||
|
||||
Иначе
|
||||
|
||||
Сообщение = ЮТИсключения.НеподдерживаемыйПараметрМетода("ЮТТестовыеДанныеВызовСервера.КлючЗаписи", Объект);
|
||||
ВызватьИсключение Сообщение;
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ПараметрыЗаписи(ВходящиеПараметрыЗаписи = Неопределено)
|
||||
|
||||
Если ВходящиеПараметрыЗаписи = Неопределено Тогда
|
||||
Возврат ЮТОбщий.ПараметрыЗаписи();
|
||||
Иначе
|
||||
ПараметрыЗаписи = ЮТОбщий.ПараметрыЗаписи();
|
||||
ЗаполнитьЗначенияСвойств(ПараметрыЗаписи, ВходящиеПараметрыЗаписи);
|
||||
Возврат ПараметрыЗаписи;
|
||||
КонецЕсли;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ЗаполнитьНаборРегистра(Набор, ДанныеЗаписи)
|
||||
|
||||
Запись = Набор.Добавить();
|
||||
ЗаполнитьЗначенияСвойств(Запись, ДанныеЗаписи);
|
||||
|
||||
Для Каждого ЭлементОтбора Из Набор.Отбор Цикл
|
||||
ЭлементОтбора.Установить(Запись[ЭлементОтбора.Имя]);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура УдалитьСсылку(Значение, ОшибкиОбработки)
|
||||
|
||||
ТипЗначения = ТипЗнч(Значение);
|
||||
|
||||
Если Значение = Неопределено ИЛИ ЮТТипыДанныхСлужебный.ЭтоТипПеречисления(ТипЗначения) Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
|
||||
Попытка
|
||||
|
||||
Если ЮТТипыДанныхСлужебный.ЭтоТипОбъекта(ТипЗначения) Тогда
|
||||
Если НЕ Значение.ЭтоНовый() Тогда
|
||||
Значение.Прочитать();
|
||||
Значение.Удалить();
|
||||
КонецЕсли;
|
||||
ИначеЕсли ЮТТипыДанныхСлужебный.ЭтоСсылочныйТип(ТипЗначения) Тогда
|
||||
Объект = Значение.ПолучитьОбъект();
|
||||
Если Объект <> Неопределено Тогда
|
||||
Объект.Удалить();
|
||||
КонецЕсли;
|
||||
Иначе
|
||||
Менеджер = ЮТОбщий.Менеджер(ТипЗначения);
|
||||
Запись = Менеджер.СоздатьМенеджерЗаписи();
|
||||
ЗаполнитьЗначенияСвойств(Запись, Значение);
|
||||
Запись.Прочитать();
|
||||
Запись.Удалить();
|
||||
КонецЕсли;
|
||||
|
||||
Исключение
|
||||
|
||||
ОшибкиОбработки.Добавить(ЮТРегистрацияОшибокСлужебный.ПредставлениеОшибки("Удаление " + Значение, ИнформацияОбОшибке()));
|
||||
|
||||
КонецПопытки;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ОписаниеБлокировки(Блокировка)
|
||||
|
||||
Описание = Новый Массив();
|
||||
|
||||
Для Каждого Элемент Из Блокировка Цикл
|
||||
Описание.Добавить(ОписаниеЭлементаБлокировки(Элемент));
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Описание;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОписаниеЭлементаБлокировки(ЭлементБлокировки)
|
||||
|
||||
Описание = Новый Структура;
|
||||
Описание.Вставить("Область", ЭлементБлокировки.Область);
|
||||
Описание.Вставить("Режим", ЭлементБлокировки.Режим);
|
||||
Описание.Вставить("Поля", Новый Массив);
|
||||
|
||||
Для Каждого Поле Из ЭлементБлокировки.Поля Цикл
|
||||
ОписаниеПоля = Новый Структура;
|
||||
ОписаниеПоля.Вставить("Поле", Поле.Поле);
|
||||
ОписаниеПоля.Вставить("Значение", Поле.Значение);
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Описание;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -1850,7 +1850,7 @@
|
||||
ПолноеОписаниеПроверки = ЮТСтроки.ДобавитьСтроку(Контекст.ПрефиксОшибки, ОписаниеПроверки, " ");
|
||||
|
||||
ПараметрыСообщенийОбОшибке = ЮТПредикатыСлужебныйКлиентСервер.ПараметрыСообщенийОбОшибке(ПолноеОписаниеПроверки,
|
||||
,
|
||||
"проверяемое значение",
|
||||
Контекст.ОбъектПроверки.Представление);
|
||||
Результат = ЮТПредикатыСлужебныйКлиентСервер.ПроверитьПредикаты(Контекст.ОбъектПроверки.Значение,
|
||||
Предикат,
|
||||
|
@ -28,4 +28,10 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Инициализация(ПараметрыЗапуска) Экспорт
|
||||
|
||||
ПомощникТестированияВызовСервера.ПервичнаяНастройка();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -28,16 +28,10 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПередКаждымТестом() Экспорт
|
||||
|
||||
ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста("__ПараметрыЗапуска", ЮТКонтекстСлужебный.ПараметрыЗапуска());
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПослеКаждогоТеста() Экспорт
|
||||
|
||||
СохраненныеПараметрыЗапуска = ЮТКонтекстСлужебный.ЗначениеКонтекста("__ПараметрыЗапуска");
|
||||
ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста("КонтекстПараметрыЗапуска", СохраненныеПараметрыЗапуска);
|
||||
КлиентскиеПараметрыЗапуска = ЮТКонтекстСлужебный.ПараметрыЗапуска();
|
||||
ЮТКонтекстСлужебныйВызовСервера.УстановитьЗначениеКонтекста("КонтекстПараметрыЗапуска", КлиентскиеПараметрыЗапуска);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@ -142,9 +136,24 @@
|
||||
|
||||
ДеревоТестов = ДТОткрытиеФормСлужебныйВызовСервера.ТипыТестов();
|
||||
|
||||
ЮТест.ОжидаетЧто(ДеревоТестов, "Глобальная настройка")
|
||||
.НеЗаполнено();
|
||||
|
||||
Если НЕ ЮТест.Окружение().ТолстыйКлиент Тогда
|
||||
ЮТест.ОжидаетЧто(ДеревоТестов, "Глобальная настройка (Тонкий клиент)")
|
||||
.НеЗаполнено();
|
||||
Иначе
|
||||
Утверждение = ЮТест.ОжидаетЧто(ДеревоТестов, "Глобальная настройка (Толстый клиент)")
|
||||
.Заполнено()
|
||||
.ИмеетДлину(1)
|
||||
.Свойство("[0].ИмяКоллекции").Равно("Справочники")
|
||||
.Свойство("[0].Объекты").ИмеетДлину(1)
|
||||
.Свойство("[0].Объекты[0].Имя").Равно("Банки");
|
||||
#Если ТолстыйКлиентОбычноеПриложение Тогда
|
||||
Утверждение
|
||||
.Свойство("[0].Объекты[0].ТипыТестов").ИмеетДлину(5);
|
||||
#Иначе
|
||||
Утверждение
|
||||
.Свойство("[0].Объекты[0].ТипыТестов").ИмеетДлину(2);
|
||||
#КонецЕсли
|
||||
КонецЕсли;
|
||||
// Для коллекции метаданных
|
||||
БазоваяНастройка = БазоваяНастройка();
|
||||
БазоваяНастройка.ДымовыеТесты.ОткрытиеФорм.Вставить("Документы", Новый Структура("УправляемыеФормы", Ложь));
|
||||
@ -165,14 +174,14 @@
|
||||
|
||||
ДеревоТестов = ДТОткрытиеФормСлужебныйВызовСервера.ТипыТестов();
|
||||
|
||||
ЮТест.ОжидаетЧто(ДеревоТестов, "Настройка для объекта метаданных")
|
||||
Утверждение = ЮТест.ОжидаетЧто(ДеревоТестов, "Настройка для объекта метаданных")
|
||||
.Заполнено()
|
||||
.Содержит(ЮТест.Предикат().Реквизит("ИмяКоллекции").Равно("Справочники"))
|
||||
.Свойство("[0].Объекты")
|
||||
.Содержит(ЮТест.Предикат().Реквизит("Имя").Равно("Валюты"))
|
||||
.НеСодержит(ЮТест.Предикат().Реквизит("Имя").Равно("Банки"))
|
||||
;
|
||||
|
||||
.Свойство("[0].Объекты");
|
||||
Утверждение.Содержит(ЮТест.Предикат().Реквизит("Имя").Равно("Валюты"));
|
||||
#Если ТонкийКлиент Тогда
|
||||
Утверждение.НеСодержит(ЮТест.Предикат().Реквизит("Имя").Равно("Банки"));
|
||||
#КонецЕсли
|
||||
// Для переопределение настройки
|
||||
БазоваяНастройка = БазоваяНастройка();
|
||||
БазоваяНастройка.ДымовыеТесты.ОткрытиеФорм.Вставить("УправляемыеФормы", Ложь);
|
||||
@ -278,7 +287,7 @@
|
||||
|
||||
Процедура УстановитьПараметрыДымовыхТестов(ПараметрыЗапуска)
|
||||
|
||||
ЮТКонтекстСлужебный.УстановитьЗначениеКонтекста("КонтекстПараметрыЗапуска", ПараметрыЗапуска);
|
||||
ЮТКонтекстСлужебныйВызовСервера.УстановитьЗначениеКонтекста("КонтекстПараметрыЗапуска", ПараметрыЗапуска);
|
||||
|
||||
КонецПроцедуры
|
||||
#КонецОбласти
|
||||
|
@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="1d679118-cd54-4ee6-804a-81fead23318c">
|
||||
<name>ОМ_ДТОткрытиеФормСлужебныйВызовСервера</name>
|
||||
<server>true</server>
|
||||
<clientManagedApplication>true</clientManagedApplication>
|
||||
<clientOrdinaryApplication>true</clientOrdinaryApplication>
|
||||
</mdclass:CommonModule>
|
||||
|
@ -31,6 +31,9 @@
|
||||
|
||||
Процедура ЛомающийКонтекстТест() Экспорт
|
||||
|
||||
#Если ТолстыйКлиентУправляемоеПриложение Или ТолстыйКлиентОбычноеПриложение Тогда
|
||||
ЮТест.Пропустить("На файловой базе не работает");
|
||||
#КонецЕсли
|
||||
ЮТест.ОжидаетЧто(ЮТКонтекстСлужебный.ДанныеКонтекста())
|
||||
.ЭтоНеНеопределено();
|
||||
|
||||
|
@ -21,22 +21,17 @@
|
||||
Процедура ИсполняемыеСценарии() Экспорт
|
||||
|
||||
ЮТТесты
|
||||
.ДобавитьТест("ОписаниеОбъектаМетаданных")
|
||||
.ДобавитьСерверныйТест("ОписаниеОбъектаМетаданных").СПараметрами(Истина)
|
||||
.ДобавитьКлиентскийТест("ОписаниеОбъектаМетаданных").СПараметрами(Ложь)
|
||||
.ДобавитьТест("РегистрыДвиженийДокумента")
|
||||
.ДобавитьТест("НормализованноеИмяТаблицы")
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОписаниеОбъектаМетаданных() Экспорт
|
||||
Процедура ОписаниеОбъектаМетаданных(НаСервере) Экспорт
|
||||
|
||||
#Если Сервер Тогда
|
||||
ДляСервера = Истина;
|
||||
#Иначе
|
||||
ДляСервера = Ложь;
|
||||
#КонецЕсли
|
||||
|
||||
Данные = ПомощникТестированияВызовСервера.ТестовыеДанныеДляОписаниеОбъектаМетаданных(ДляСервера);
|
||||
Данные = ПомощникТестированияВызовСервера.ТестовыеДанныеДляОписаниеОбъектаМетаданных(НаСервере);
|
||||
|
||||
Для Каждого Значение Из Данные Цикл
|
||||
|
||||
|
@ -24,9 +24,8 @@
|
||||
.ДобавитьТест("Пауза")
|
||||
.ДобавитьТест("ВывестиВКонсоль")
|
||||
.ДобавитьТест("ЗначениеСвойства")
|
||||
.ДобавитьТест("ОписаниеТиповЛюбаяСсылка")
|
||||
.ДобавитьСерверныйТест("Менеджер")
|
||||
.ДобавитьСерверныйТест("ЗначениеСвойства_Субконто")
|
||||
.ДобавитьСерверныйТест("ЗначениеСвойства_Субконто").ВТранзакции()
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
@ -91,21 +90,12 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОписаниеТиповЛюбаяСсылка() Экспорт
|
||||
|
||||
ЛюбаяСсылка = ЮТОбщий.ОписаниеТиповЛюбаяСсылка();
|
||||
|
||||
ЮТест.ОжидаетЧто(ЛюбаяСсылка)
|
||||
.ИмеетТип("ОписаниеТипов")
|
||||
.Что(ЛюбаяСсылка.СодержитТип(Тип("СправочникСсылка.Банки")));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#Если Сервер Тогда
|
||||
Процедура ЗначениеСвойства_Субконто() Экспорт
|
||||
|
||||
Валюта = ЮТест.Данные().СоздатьЭлемент(Справочники.Валюты);
|
||||
Счет = ЮТест.Данные().КонструкторОбъекта("ПланыСчетов.Основной")
|
||||
.ФикцияОбязательныхПолей()
|
||||
.Установить("Валютный", Истина)
|
||||
.Установить("Количественный", Истина)
|
||||
.ТабличнаяЧасть("ВидыСубконто")
|
||||
|
@ -164,17 +164,38 @@
|
||||
|
||||
Процедура ЗначенияРавны_ТабличныйДокумент() Экспорт
|
||||
|
||||
Макет1 = ЮТОбщий.Макет("ОбщийМакет.ЮТ_МакетТестовыхДанных");
|
||||
Макет2 = ЮТОбщий.Макет("ОбщийМакет.ЮТ_МакетТестовыхДанных");
|
||||
Равные = ЮТест.Варианты("Область1, Область2")
|
||||
.Добавить("R2C1:R3C2", "R2C3:R3C4")
|
||||
.Добавить("R2C1:R2C2", "R2C3:R2C4")
|
||||
.Добавить("R4C2", "R4C6");
|
||||
|
||||
Макет3 = ЮТОбщий.Макет("ОбщийМакет.ЮТ_МакетТестовыхДанных.R2C1:R5C10");
|
||||
Макет4 = ЮТОбщий.Макет("ОбщийМакет.ЮТ_МакетТестовыхДанных.R2C2:R5C11");
|
||||
Для Каждого Вариант Из Равные.СписокВариантов() Цикл
|
||||
Макет1 = ЮТОбщий.Макет("ОбщийМакет.ЮТ_СравнениеТабличныхДокументов." + Вариант.Область1);
|
||||
Макет2 = ЮТОбщий.Макет("ОбщийМакет.ЮТ_СравнениеТабличныхДокументов." + Вариант.Область2);
|
||||
|
||||
Описание = СтрШаблон("Равные области: `%1` и `%2`", Вариант.Область1, Вариант.Область2);
|
||||
ЮТест.ОжидаетЧто(Макет1, Описание)
|
||||
.Равно(Макет2);
|
||||
КонецЦикла;
|
||||
|
||||
ЮТест.ОжидаетЧто(Макет1, "Равные макеты")
|
||||
.Равно(Макет2);
|
||||
НеРавные = ЮТест.Варианты("Область1, Область2")
|
||||
.Добавить("R1C1:R4C2", "R1C3:R4C4")
|
||||
.Добавить("R1C1:R3C2", "R1C3:R3C4")
|
||||
.Добавить("R2C1:R4C2", "R2C3:R4C4")
|
||||
.Добавить("R1C2:R2C2", "R1C4:R2C4")
|
||||
.Добавить("R1C2:R2C2", "R1C4:R2C4")
|
||||
.Добавить("R1C2:R1C3", "R1C4:R1C5")
|
||||
.Добавить("R4C2", "R4C4")
|
||||
;
|
||||
|
||||
ЮТест.ОжидаетЧто(Макет3, "Разные макеты")
|
||||
.НеРавно(Макет4);
|
||||
Для Каждого Вариант Из НеРавные.СписокВариантов() Цикл
|
||||
Макет1 = ЮТОбщий.Макет("ОбщийМакет.ЮТ_СравнениеТабличныхДокументов." + Вариант.Область1);
|
||||
Макет2 = ЮТОбщий.Макет("ОбщийМакет.ЮТ_СравнениеТабличныхДокументов." + Вариант.Область2);
|
||||
|
||||
Описание = СтрШаблон("Разные области: `%1` и `%2`", Вариант.Область1, Вариант.Область2);
|
||||
ЮТест.ОжидаетЧто(Макет1, Описание)
|
||||
.НеРавно(Макет2);
|
||||
КонецЦикла;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
|
@ -58,6 +58,7 @@
|
||||
.СПараметрами("HTTPСервисЗапрос")
|
||||
.СПараметрами("ОбъектXDTO")
|
||||
.СПараметрами("ОбъектМетаданных")
|
||||
.ДобавитьТест("ОписаниеТиповЛюбаяСсылка")
|
||||
;
|
||||
|
||||
КонецПроцедуры
|
||||
@ -111,6 +112,16 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ОписаниеТиповЛюбаяСсылка() Экспорт
|
||||
|
||||
ЛюбаяСсылка = ЮТОбщий.ОписаниеТиповЛюбаяСсылка();
|
||||
|
||||
ЮТест.ОжидаетЧто(ЛюбаяСсылка)
|
||||
.ИмеетТип("ОписаниеТипов")
|
||||
.Что(ЛюбаяСсылка.СодержитТип(Тип("СправочникСсылка.Банки")));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область СлужебныеПроцедурыИФункции
|
||||
|
@ -58,7 +58,7 @@
|
||||
.ДобавитьТест("УказаниеПараметровПоУмолчанию")
|
||||
.ДобавитьТест("ИмеетМетод")
|
||||
.ДобавитьСерверныйТест("ПроверкаМетодаВТранзакции").ВТранзакции(Ложь)
|
||||
.ДобавитьТест("ПроверкаМетодаВТранзакцииНаКлиенте", , , "КлиентУправляемоеПриложение")
|
||||
.ДобавитьТест("ПроверкаМетодаВТранзакцииНаКлиенте", , , "КлиентУправляемоеПриложение").ВТранзакции(Ложь)
|
||||
.ДобавитьСерверныйТест("СравнениеСложныхОбъектов")
|
||||
.ДобавитьТест("ФормированиеСообщения")
|
||||
.ДобавитьТест("НачинаетсяС")
|
||||
@ -1847,6 +1847,9 @@
|
||||
|
||||
Процедура ПроверкаМетодаВТранзакцииНаКлиенте() Экспорт
|
||||
|
||||
#Если НЕ ТонкийКлиент Тогда
|
||||
ЮТест.Пропустить("Только для тонкого клиента");
|
||||
#КонецЕсли
|
||||
ОшибкаИспользованияТранзакции = "Использование транзакции доступно только на сервере (толстом клиенте)";
|
||||
|
||||
Попытка
|
||||
|
@ -76,14 +76,11 @@
|
||||
Процедура ПослеВсехТестов() Экспорт
|
||||
|
||||
ЮТест.Контекст().Значение("Коллекция").Добавить("ПослеВсехТестов");
|
||||
#Если Клиент Тогда
|
||||
ЮТест.ОжидаетЧто(ЮТест.Контекст().Значение("Коллекция"))
|
||||
.ИмеетДлину(24); // Количество вызванных обработчиков событий
|
||||
#Иначе
|
||||
ЮТест.ОжидаетЧто(ЮТест.Контекст().Значение("Коллекция"))
|
||||
.ИмеетДлину(26); // Количество вызванных обработчиков событий
|
||||
#КонецЕсли
|
||||
|
||||
|
||||
// Нелья точно понять сколько будет тестов для толстого клиента в файловом режиме
|
||||
ЮТест.ОжидаетЧто(ЮТест.Контекст().Значение("Коллекция").Количество())
|
||||
.ВСписке(ЮТКоллекции.ЗначениеВМассиве(24, 26));
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура Пропустить() Экспорт
|
||||
|
@ -1,6 +1,6 @@
|
||||
//©///////////////////////////////////////////////////////////////////////////©//
|
||||
//
|
||||
// Copyright 2021-2023 BIA-Technologies Limited Liability Company
|
||||
// Copyright 2021-2024 BIA-Technologies Limited Liability Company
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
@ -110,4 +110,11 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура ПервичнаяНастройка() Экспорт
|
||||
|
||||
ИнициализироватьПредопределенныеДанные();
|
||||
ОбновитьНумерациюОбъектов();
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -0,0 +1,208 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document xmlns="http://v8.1c.ru/8.2/data/spreadsheet" xmlns:style="http://v8.1c.ru/8.1/data/ui/style" xmlns:v8="http://v8.1c.ru/8.1/data/core" xmlns:v8ui="http://v8.1c.ru/8.1/data/ui" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<languageSettings>
|
||||
<currentLanguage>ru</currentLanguage>
|
||||
<defaultLanguage>#</defaultLanguage>
|
||||
<languageInfo>
|
||||
<id>ru</id>
|
||||
<code>Русский</code>
|
||||
<description/>
|
||||
</languageInfo>
|
||||
</languageSettings>
|
||||
<columns>
|
||||
<size>6</size>
|
||||
</columns>
|
||||
<rowsItem>
|
||||
<index>0</index>
|
||||
<row>
|
||||
<c>
|
||||
<i>1</i>
|
||||
<c>
|
||||
<f>0</f>
|
||||
<tl>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>1</v8:content>
|
||||
</v8:item>
|
||||
</tl>
|
||||
</c>
|
||||
</c>
|
||||
<c>
|
||||
<i>3</i>
|
||||
<c>
|
||||
<f>0</f>
|
||||
<tl>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>11</v8:content>
|
||||
</v8:item>
|
||||
</tl>
|
||||
</c>
|
||||
</c>
|
||||
<c>
|
||||
<c>
|
||||
<f>1</f>
|
||||
</c>
|
||||
</c>
|
||||
<c>
|
||||
<c>
|
||||
<f>1</f>
|
||||
<tl>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>1</v8:content>
|
||||
</v8:item>
|
||||
</tl>
|
||||
</c>
|
||||
</c>
|
||||
</row>
|
||||
</rowsItem>
|
||||
<rowsItem>
|
||||
<index>1</index>
|
||||
<row>
|
||||
<c>
|
||||
<i>1</i>
|
||||
<c>
|
||||
<f>0</f>
|
||||
<tl>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>2</v8:content>
|
||||
</v8:item>
|
||||
</tl>
|
||||
</c>
|
||||
</c>
|
||||
<c>
|
||||
<i>3</i>
|
||||
<c>
|
||||
<f>0</f>
|
||||
<tl>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>2</v8:content>
|
||||
</v8:item>
|
||||
</tl>
|
||||
</c>
|
||||
</c>
|
||||
<c>
|
||||
<c>
|
||||
<f>1</f>
|
||||
</c>
|
||||
</c>
|
||||
<c>
|
||||
<c>
|
||||
<f>1</f>
|
||||
<tl>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>2</v8:content>
|
||||
</v8:item>
|
||||
</tl>
|
||||
</c>
|
||||
</c>
|
||||
</row>
|
||||
</rowsItem>
|
||||
<rowsItem>
|
||||
<index>2</index>
|
||||
<row>
|
||||
<c>
|
||||
<i>1</i>
|
||||
<c>
|
||||
<f>0</f>
|
||||
<tl>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>3</v8:content>
|
||||
</v8:item>
|
||||
</tl>
|
||||
</c>
|
||||
</c>
|
||||
<c>
|
||||
<i>3</i>
|
||||
<c>
|
||||
<f>0</f>
|
||||
<tl>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>3</v8:content>
|
||||
</v8:item>
|
||||
</tl>
|
||||
</c>
|
||||
</c>
|
||||
<c>
|
||||
<c>
|
||||
<f>1</f>
|
||||
<tl>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>1</v8:content>
|
||||
</v8:item>
|
||||
</tl>
|
||||
</c>
|
||||
</c>
|
||||
<c>
|
||||
<c>
|
||||
<f>1</f>
|
||||
<tl>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>3</v8:content>
|
||||
</v8:item>
|
||||
</tl>
|
||||
</c>
|
||||
</c>
|
||||
</row>
|
||||
</rowsItem>
|
||||
<rowsItem>
|
||||
<index>3</index>
|
||||
<row>
|
||||
<c>
|
||||
<i>1</i>
|
||||
<c>
|
||||
<f>0</f>
|
||||
<tl>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>4</v8:content>
|
||||
</v8:item>
|
||||
</tl>
|
||||
</c>
|
||||
</c>
|
||||
<c>
|
||||
<i>3</i>
|
||||
<c>
|
||||
<f>0</f>
|
||||
<tl>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>44</v8:content>
|
||||
</v8:item>
|
||||
</tl>
|
||||
</c>
|
||||
</c>
|
||||
<c>
|
||||
<c>
|
||||
<f>1</f>
|
||||
</c>
|
||||
</c>
|
||||
<c>
|
||||
<c>
|
||||
<f>1</f>
|
||||
<tl>
|
||||
<v8:item>
|
||||
<v8:lang>ru</v8:lang>
|
||||
<v8:content>4</v8:content>
|
||||
</v8:item>
|
||||
</tl>
|
||||
</c>
|
||||
</c>
|
||||
</row>
|
||||
</rowsItem>
|
||||
<templateMode>true</templateMode>
|
||||
<defaultFormatIndex>1</defaultFormatIndex>
|
||||
<height>4</height>
|
||||
<vgRows>4</vgRows>
|
||||
<format>
|
||||
<width>72</width>
|
||||
</format>
|
||||
</document>
|
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonTemplate xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="071892ea-a320-47ce-85f7-e06f7a9a1d75">
|
||||
<name>ЮТ_СравнениеТабличныхДокументов</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Ю т сравнение табличных документов</value>
|
||||
</synonym>
|
||||
</mdclass:CommonTemplate>
|
@ -24,6 +24,7 @@
|
||||
</languages>
|
||||
<subsystems>Subsystem.Тесты_ЮТПодключаемыеМодули</subsystems>
|
||||
<commonTemplates>CommonTemplate.ЮТ_МакетТестовыхДанных</commonTemplates>
|
||||
<commonTemplates>CommonTemplate.ЮТ_СравнениеТабличныхДокументов</commonTemplates>
|
||||
<commonTemplates>CommonTemplate.ЮТ_ТестовыеДанныеMarkdown</commonTemplates>
|
||||
<commonModules>CommonModule.Интеграция</commonModules>
|
||||
<commonModules>CommonModule.НастройкаYAxUnit</commonModules>
|
||||
|
@ -1,90 +0,0 @@
|
||||
FROM alpine:latest as downloader
|
||||
|
||||
ARG ONEC_USERNAME
|
||||
ARG ONEC_PASSWORD
|
||||
ARG ONEC_VERSION
|
||||
ENV installer_type=server
|
||||
ENV downloads=downloads/platform83/${ONEC_VERSION}
|
||||
|
||||
COPY ./scripts/download_og.sh /download_og.sh
|
||||
|
||||
WORKDIR /tmp
|
||||
COPY ./distr ./${downloads}
|
||||
RUN rm ./${downloads}/.gitkeep \
|
||||
&& rm -rf ${downloads}/thin.client*.tar.gz \
|
||||
&& rm -rf ${downloads}/client*.tar.gz \
|
||||
&& rm -rf ${downloads}/1c_edt*.tar.gz \
|
||||
&& if [ -z "$(ls -A ${downloads})" ]; then \
|
||||
apk --no-cache add bash curl grep tar \
|
||||
&& set -x \
|
||||
&& sync; /download_og.sh; \
|
||||
fi \
|
||||
&& rm -rf ${downloads}/*thin*.tar.gz \
|
||||
&& ls ${downloads} \
|
||||
&& for file in ${downloads}/*.tar.gz; do tar -xzf "$file"; done \
|
||||
&& rm -rf ${downloads}/*.*
|
||||
|
||||
FROM debian:bullseye-slim as base
|
||||
|
||||
ARG ONEC_VERSION
|
||||
ENV installer_type=server
|
||||
ARG gosu_ver=1.11
|
||||
ARG nls_enabled=false
|
||||
ENV nls=$nls_enabled
|
||||
|
||||
COPY ./scripts/install.sh /install.sh
|
||||
COPY --from=downloader /tmp/*.* /tmp/
|
||||
WORKDIR /tmp
|
||||
|
||||
SHELL ["/bin/bash", "-c"]
|
||||
RUN ls . \
|
||||
&& chmod +x /install.sh \
|
||||
&& sync; /install.sh
|
||||
|
||||
# create symlink to current 1c:enterprise directory
|
||||
COPY ./scripts/create-symlink-to-current-1cv8.sh /create-symlink-to-current-1cv8.sh
|
||||
RUN chmod +x /create-symlink-to-current-1cv8.sh \
|
||||
&& /create-symlink-to-current-1cv8.sh \
|
||||
&& rm /create-symlink-to-current-1cv8.sh
|
||||
|
||||
ADD https://github.com/tianon/gosu/releases/download/$gosu_ver/gosu-amd64 /bin/gosu
|
||||
|
||||
RUN chmod +x /bin/gosu
|
||||
|
||||
FROM debian:bullseye-slim
|
||||
LABEL maintainer="Anton Kvashenkin <anton.jugatsu@gmail.com> (@jugatsu)"
|
||||
|
||||
ARG onec_uid="999"
|
||||
ARG onec_gid="999"
|
||||
|
||||
COPY --from=base /opt /opt
|
||||
COPY --from=base /bin/gosu /bin/gosu
|
||||
|
||||
RUN set -xe \
|
||||
&& apt-get update \
|
||||
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||
locales \
|
||||
imagemagick \
|
||||
fontconfig \
|
||||
&& rm -rf \
|
||||
/var/lib/apt/lists/* \
|
||||
/var/cache/debconf \
|
||||
&& localedef -i ru_RU -c -f UTF-8 -A /usr/share/locale/locale.alias ru_RU.UTF-8
|
||||
ENV LANG ru_RU.UTF-8
|
||||
|
||||
RUN groupadd -r grp1cv8 --gid=$onec_gid \
|
||||
&& useradd -r -g grp1cv8 --uid=$onec_uid --home-dir=/home/usr1cv8 --shell=/bin/bash usr1cv8 \
|
||||
&& mkdir -p /var/log/1C /home/usr1cv8/.1cv8/1C/1cv8/conf /opt/1cv8/current/conf \
|
||||
&& chown -R usr1cv8:grp1cv8 /var/log/1C /home/usr1cv8
|
||||
|
||||
VOLUME /home/usr1cv8/.1cv8 /var/log/1C
|
||||
|
||||
COPY ./server/logcfg.xml /home/usr1cv8/.1cv8/1C/1cv8/conf
|
||||
COPY ./server/logcfg.xml /opt/1cv8/current/conf
|
||||
|
||||
COPY ./server/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
|
||||
RUN ln -s usr/local/bin/docker-entrypoint.sh / # backwards compat
|
||||
ENTRYPOINT ["docker-entrypoint.sh"]
|
||||
|
||||
EXPOSE 1540 1541 1545 1560
|
||||
CMD ["ragent"]
|
2
tools/local-test/default.env
Normal file
2
tools/local-test/default.env
Normal file
@ -0,0 +1,2 @@
|
||||
export EDT_VERSION=2023.3.5+10
|
||||
export ONEC_VERSION=8.3.21.1895
|
90
tools/local-test/onec-server/build/Dockerfile
Normal file
90
tools/local-test/onec-server/build/Dockerfile
Normal file
@ -0,0 +1,90 @@
|
||||
# Создан на основании https://github.com/firstBitMarksistskaya/onec-docker/blob/feature/first-bit/server/Dockerfile
|
||||
|
||||
# Начало основной стадии сборки
|
||||
FROM ubuntu:20.04 as installer
|
||||
|
||||
# Копируем скрипты и файлы установки
|
||||
ARG ONEC_VERSION
|
||||
ARG gosu_ver=1.11
|
||||
ARG nls_enabled=false
|
||||
|
||||
ENV nls=$nls_enabled
|
||||
ENV installer_type=server
|
||||
|
||||
# Установка зависимостей и настройка локали
|
||||
RUN apt-get update \
|
||||
&& apt-get install -yq \
|
||||
procps \
|
||||
tzdata \
|
||||
debconf-utils \
|
||||
curl \
|
||||
fontconfig \
|
||||
unixodbc \
|
||||
ttf-mscorefonts-installer \
|
||||
libgsf-1-114 \
|
||||
keyboard-configuration \
|
||||
&& dpkg-reconfigure -f noninteractive tzdata \
|
||||
&& dpkg-reconfigure -f noninteractive keyboard-configuration \
|
||||
&& apt-get install -yq geoclue-2.0 gstreamer1.0-plugins-bad \
|
||||
&& export LANG=ru_RU.UTF-8
|
||||
|
||||
COPY ./scripts/install_new.sh /install.sh
|
||||
COPY ./distr/current /tmp
|
||||
|
||||
WORKDIR /tmp
|
||||
RUN ls -ona \
|
||||
&& chmod +x /install.sh \
|
||||
&& sync; /install.sh
|
||||
|
||||
# Создание символической ссылки на текущую директорию 1C
|
||||
COPY ./scripts/create-symlink-to-current-1cv8.sh /create-symlink-to-current-1cv8.sh
|
||||
RUN chmod +x /create-symlink-to-current-1cv8.sh \
|
||||
&& /create-symlink-to-current-1cv8.sh \
|
||||
&& rm /create-symlink-to-current-1cv8.sh
|
||||
|
||||
# Установка gosu
|
||||
ADD https://github.com/tianon/gosu/releases/download/$gosu_ver/gosu-amd64 /bin/gosu
|
||||
RUN chmod +x /bin/gosu
|
||||
|
||||
# Переход к финальному образу
|
||||
FROM ubuntu:20.04
|
||||
LABEL maintainer="ivanov egor"
|
||||
|
||||
# Создание пользователя и установка локали
|
||||
ARG onec_uid="999"
|
||||
ARG onec_gid="999"
|
||||
COPY --from=installer /opt/1cv8 /opt/1cv8
|
||||
COPY --from=installer /bin/gosu /bin/gosu
|
||||
RUN set -xe \
|
||||
&& apt-get update \
|
||||
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
|
||||
locales \
|
||||
iproute2 \
|
||||
imagemagick \
|
||||
fontconfig \
|
||||
ca-certificates \
|
||||
&& rm -rf /var/lib/apt/lists/* /var/cache/debconf \
|
||||
&& localedef -i ru_RU -c -f UTF-8 -A /usr/share/locale/locale.alias ru_RU.UTF-8
|
||||
ENV LANG ru_RU.UTF-8
|
||||
|
||||
# Настройка группы и пользователя
|
||||
RUN groupadd -r grp1cv8 --gid=$onec_gid \
|
||||
&& useradd -r -g grp1cv8 --uid=$onec_uid --home-dir=/home/usr1cv8 --shell=/bin/bash usr1cv8 \
|
||||
&& mkdir -p /var/log/1C /home/usr1cv8/.1cv8/1C/1cv8/conf /opt/1cv8/current/conf \
|
||||
&& chown -R usr1cv8:grp1cv8 /var/log/1C /home/usr1cv8
|
||||
|
||||
# Копирование конфигурационных файлов
|
||||
COPY ./conf.cfg /home/usr1cv8/.1cv8/1C/1cv8/conf
|
||||
COPY ./conf.cfg /opt/1cv8/current/conf
|
||||
|
||||
# Установка точки входа и выполнение дополнительных настроек
|
||||
COPY ./docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh
|
||||
RUN ln -s usr/local/bin/docker-entrypoint.sh / # backwards compat
|
||||
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
|
||||
RUN apt-get update && apt-get install -yq procps
|
||||
RUN chmod +x /opt/1cv8/current/ragent
|
||||
|
||||
# Настройка точки входа и экспонирование портов
|
||||
ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]
|
||||
EXPOSE 1540 1541 1545 1560
|
||||
CMD ["ragent"]
|
11
tools/local-test/onec-server/build/build-server.sh
Executable file
11
tools/local-test/onec-server/build/build-server.sh
Executable file
@ -0,0 +1,11 @@
|
||||
WORK_PATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
|
||||
|
||||
source $WORK_PATH/../../.env
|
||||
|
||||
rm -rf $WORK_PATH/distr/current/*
|
||||
cp -r $WORK_PATH/distr/$ONEC_VERSION/* $WORK_PATH/distr/current/
|
||||
|
||||
docker build \
|
||||
-t onec-server:$ONEC_VERSION \
|
||||
-f $WORK_PATH/Dockerfile \
|
||||
$WORK_PATH/
|
1
tools/local-test/onec-server/build/conf.cfg
Normal file
1
tools/local-test/onec-server/build/conf.cfg
Normal file
@ -0,0 +1 @@
|
||||
DisableUnsafeActionProtection=.*
|
67
tools/local-test/onec-server/build/docker-entrypoint.sh
Executable file
67
tools/local-test/onec-server/build/docker-entrypoint.sh
Executable file
@ -0,0 +1,67 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Установка значений по умолчанию
|
||||
setup_defaults() {
|
||||
DEFAULT_PORT=1540
|
||||
DEFAULT_REGPORT=1541
|
||||
DEFAULT_RANGE=1560:1591
|
||||
DEFAULT_SECLEVEL=0
|
||||
DEFAULT_PINGPERIOD=1000
|
||||
DEFAULT_PINGTIMEOUT=5000
|
||||
DEFAULT_DEBUG=-tcp
|
||||
DEFAULT_DEBUGSERVERPORT=1550
|
||||
DEFAULT_RAS_PORT=1545
|
||||
}
|
||||
|
||||
# Настройка команды запуска ragent
|
||||
setup_ragent_cmd() {
|
||||
RAGENT_CMD="gosu usr1cv8 /opt/1cv8/current/ragent"
|
||||
RAGENT_CMD+=" /port ${PORT:-$DEFAULT_PORT}"
|
||||
RAGENT_CMD+=" /regport ${REGPORT:-$DEFAULT_REGPORT}"
|
||||
RAGENT_CMD+=" /range ${RANGE:-$DEFAULT_RANGE}"
|
||||
RAGENT_CMD+=" /seclev ${SECLEVEL:-$DEFAULT_SECLEVEL}"
|
||||
RAGENT_CMD+=" /d ${D:-/home/usr1cv8/.1cv8}"
|
||||
RAGENT_CMD+=" /pingPeriod ${PINGPERIOD:-$DEFAULT_PINGPERIOD}"
|
||||
RAGENT_CMD+=" /pingTimeout ${PINGTIMEOUT:-$DEFAULT_PINGTIMEOUT}"
|
||||
RAGENT_CMD+=" /debug ${DEBUG:-$DEFAULT_DEBUG}"
|
||||
[ -n "$DEBUGSERVERADDR" ] && RAGENT_CMD+=" /debugServerAddr $DEBUGSERVERADDR"
|
||||
RAGENT_CMD+=" /debugServerPort ${DEBUGSERVERPORT:-$DEFAULT_DEBUGSERVERPORT}"
|
||||
[ -n "$DEBUGSERVERPWD" ] && RAGENT_CMD+=" /debugServerPwd $DEBUGSERVERPWD"
|
||||
}
|
||||
|
||||
# Настройка команды запуска ras
|
||||
setup_ras_cmd() {
|
||||
RAS_CMD="gosu usr1cv8 /opt/1cv8/current/ras cluster --daemon"
|
||||
RAS_CMD+=" --port ${RAS_PORT:-$DEFAULT_RAS_PORT}"
|
||||
RAS_CMD+=" localhost:${PORT:-$DEFAULT_PORT}"
|
||||
}
|
||||
|
||||
# Изменение прав доступа к директории пользователя
|
||||
change_directory_permissions() {
|
||||
chown -R usr1cv8:grp1cv8 /home/usr1cv8
|
||||
}
|
||||
|
||||
# Главная функция скрипта
|
||||
main() {
|
||||
setup_defaults
|
||||
change_directory_permissions
|
||||
|
||||
if [ "$1" = "ragent" ]; then
|
||||
setup_ragent_cmd
|
||||
setup_ras_cmd
|
||||
|
||||
echo "Запускаем ras с необходимыми параметрами"
|
||||
echo "Выполняемая команда: $RAS_CMD"
|
||||
$RAS_CMD 2>&1 & # Запуск ras в фоновом режиме
|
||||
|
||||
echo "Запускаем ragent с необходимыми параметрами"
|
||||
echo "Выполняемая команда: $RAGENT_CMD"
|
||||
exec $RAGENT_CMD 2>&1
|
||||
else
|
||||
# Если первый аргумент не 'ragent', выполняем команду, переданную в аргументах
|
||||
"$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# Вызов главной функции
|
||||
main "$@"
|
9
tools/local-test/onec-server/build/logcfg.xml
Normal file
9
tools/local-test/onec-server/build/logcfg.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<config xmlns="http://v8.1c.ru/v8/tech-log">
|
||||
<log location="/var/log/1C" history="1">
|
||||
<event>
|
||||
<eq property="name" value="excp"/>
|
||||
</event>
|
||||
<property name="all"/>
|
||||
</log>
|
||||
</config>
|
@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
platform_path=$(find / -type f -name "1cv8c" -exec dirname {} \; -or -type f -name "1cv8" -exec dirname {} \; -or -type f -name "ragent" -exec dirname {} \; -or -type f -name "crserver" -exec dirname {} \; | uniq)
|
||||
|
||||
mkdir -p /opt/1cv8 \
|
||||
&& ln -s $platform_path /opt/1cv8/current
|
72
tools/local-test/onec-server/build/scripts/download_og.sh
Executable file
72
tools/local-test/onec-server/build/scripts/download_og.sh
Executable file
@ -0,0 +1,72 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z "$ONEC_USERNAME" ]
|
||||
then
|
||||
echo "ONEC_USERNAME not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$ONEC_PASSWORD" ]
|
||||
then
|
||||
echo "ONEC_PASSWORD not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$ONEC_VERSION" ]
|
||||
then
|
||||
echo "ONEC_VERSION not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ONEC_RELEASE=`echo $ONEC_VERSION | cut -d . -f 3`
|
||||
echo "Release: "$ONEC_RELEASE
|
||||
|
||||
echo "Downloading Oneget tool from https://github.com/firstBitMarksistskaya/oneget"
|
||||
curl -L -o oneget.tar.gz https://github.com/firstBitMarksistskaya/oneget/releases/latest/download/oneget_Linux_x86_64.tar.gz \
|
||||
&& mkdir /tmp/oneget_tool \
|
||||
&& tar xzf oneget.tar.gz -C /tmp/oneget_tool \
|
||||
&& rm oneget.tar.gz
|
||||
|
||||
if [ ! -f /tmp/oneget_tool/oneget ]; then
|
||||
echo "Oneget not found!"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$ONEC_RELEASE" -lt "20" ]]; then
|
||||
package="deb"
|
||||
package_installer_type="."$installer_type
|
||||
else
|
||||
package="linux"
|
||||
package_installer_type=""
|
||||
fi
|
||||
|
||||
case "$installer_type" in
|
||||
edt)
|
||||
echo "EDT"
|
||||
/tmp/oneget_tool/oneget get "edt:linux@"$ONEC_VERSION
|
||||
;;
|
||||
server)
|
||||
/tmp/oneget_tool/oneget get "platform:"$package$package_installer_type".x64@"$ONEC_VERSION
|
||||
;;
|
||||
server32)
|
||||
/tmp/oneget_tool/oneget get "platform:"$package${package_installer_type/32/}".x32@"$ONEC_VERSION
|
||||
;;
|
||||
client)
|
||||
if [[ "$ONEC_RELEASE" -lt "20" ]]; then
|
||||
/tmp/oneget_tool/oneget get "platform:"$package".server.x64@"$ONEC_VERSION
|
||||
fi
|
||||
/tmp/oneget_tool/oneget get "platform:"$package$package_installer_type".x64@"$ONEC_VERSION
|
||||
;;
|
||||
client32)
|
||||
if [[ "$ONEC_RELEASE" -lt "20" ]]; then
|
||||
/tmp/oneget_tool/oneget get "platform:"$package".server.x32@"$ONEC_VERSION
|
||||
fi
|
||||
/tmp/oneget_tool/oneget get "platform:"$package${package_installer_type/32/}".x32@"$ONEC_VERSION
|
||||
;;
|
||||
thin-client)
|
||||
/tmp/oneget_tool/oneget get "platform:"$package"."$installer_type".x64@"$ONEC_VERSION
|
||||
;;
|
||||
thin-client32)
|
||||
/tmp/oneget_tool/oneget get "platform:"$package"."${installer_type/32/}".x32@"$ONEC_VERSION
|
||||
esac
|
||||
|
234
tools/local-test/onec-server/build/scripts/download_yard.sh
Normal file
234
tools/local-test/onec-server/build/scripts/download_yard.sh
Normal file
@ -0,0 +1,234 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Аргументы скрипта
|
||||
ONEC_USERNAME=$1
|
||||
ONEC_PASSWORD=$2
|
||||
ONEC_VERSION=$3
|
||||
installer_type=$4
|
||||
|
||||
if [ "$installer_type" = "edt" ]; then
|
||||
FOLDER_NAME="DevelopmentTools10"
|
||||
else
|
||||
FOLDER_NAME="Platform83"
|
||||
fi
|
||||
|
||||
DOWNLOADS_PATH=/tmp/downloads/${FOLDER_NAME}/${ONEC_VERSION}
|
||||
|
||||
|
||||
# Преобразование версии для различных целей
|
||||
ONEC_VERSION_DOTS=$ONEC_VERSION
|
||||
ONEC_VERSION_UNDERSCORES=$(echo $ONEC_VERSION_DOTS | sed 's/\./\_/g')
|
||||
ESCAPED_VERSION=$(echo $ONEC_VERSION_DOTS | sed 's/\./\\./g')
|
||||
|
||||
# Поищем дистрибутив в папке distr и если он есть скопируем его куда надо и распакуем
|
||||
copy_distr_to_downloads_path() {
|
||||
found=1
|
||||
found_run_file=1
|
||||
case "$installer_type" in
|
||||
edt)
|
||||
local edt_pattern="1c_edt_distr_offline_${ONEC_VERSION}_*_linux_x86_64.tar.gz"
|
||||
# Ищем файлы, соответствующие шаблону
|
||||
local matching_files=($(ls /distr/$edt_pattern 2> /dev/null))
|
||||
if [ ${#matching_files[@]} -gt 0 ]; then
|
||||
local edt_filename=${matching_files[0]}
|
||||
echo "Найден локальный дистрибутив: $edt_filename"
|
||||
cp $edt_filename $DOWNLOADS_PATH/
|
||||
found=0
|
||||
else
|
||||
echo "Локального дистрибутива edt не найдено в папке distr"
|
||||
fi
|
||||
;;
|
||||
server)
|
||||
local file_name_srv="deb64_$ONEC_VERSION_UNDERSCORES.tar.gz"
|
||||
local file_name_platform="server64_$ONEC_VERSION_UNDERSCORES.tar.gz"
|
||||
local file_name_run="setup-full-$ONEC_VERSION_DOTS-x86_64.run"
|
||||
|
||||
if [ -f "/distr/$file_name_srv" ]; then
|
||||
echo "Найден локальный дистрибутив: $file_name_srv"
|
||||
cp /distr/$file_name_srv $DOWNLOADS_PATH/
|
||||
found=0
|
||||
elif [ -f "/distr/$file_name_platform" ]; then
|
||||
echo "Найден локальный дистрибутив: $file_name_platform"
|
||||
cp /distr/$file_name_platform $DOWNLOADS_PATH/
|
||||
found=0
|
||||
elif [ -f "/distr/$file_name_run" ]; then
|
||||
echo "Найден локальный дистрибутив: $file_name_run"
|
||||
cp /distr/$file_name_run $DOWNLOADS_PATH/
|
||||
found=0
|
||||
found_run_file=0
|
||||
fi
|
||||
;;
|
||||
server32)
|
||||
local file_name_srv="deb_$ONEC_VERSION_UNDERSCORES.tar.gz"
|
||||
local file_name_platform="server32_$ONEC_VERSION_UNDERSCORES.tar.gz"
|
||||
|
||||
if [ -f "/distr/$file_name_srv" ]; then
|
||||
echo "Найден локальный дистрибутив: $file_name_srv"
|
||||
cp /distr/$file_name_srv $DOWNLOADS_PATH/
|
||||
found=0
|
||||
elif [ -f "/distr/$file_name_platform" ]; then
|
||||
echo "Найден локальный дистрибутив: $file_name_platform"
|
||||
cp /distr/$file_name_platform $DOWNLOADS_PATH/
|
||||
found=0
|
||||
fi
|
||||
;;
|
||||
client)
|
||||
local file_name_deb="client_$ONEC_VERSION_UNDERSCORES.deb64.tar.gz"
|
||||
local file_name_platform="server64_$ONEC_VERSION_UNDERSCORES.tar.gz"
|
||||
local file_name_run="setup-full-$ONEC_VERSION_DOTS-x86_64.run"
|
||||
|
||||
if [ -f "/distr/$file_name_deb" ]; then
|
||||
echo "Найден локальный дистрибутив: $file_name_deb"
|
||||
cp /distr/$file_name_deb $DOWNLOADS_PATH/
|
||||
found=0
|
||||
elif [ -f "/distr/$file_name_platform" ]; then
|
||||
echo "Найден локальный дистрибутив: $file_name_platform"
|
||||
cp /distr/$file_name_platform $DOWNLOADS_PATH/
|
||||
found=0
|
||||
elif [ -f "/distr/$file_name_run" ]; then
|
||||
echo "Найден локальный дистрибутив: $file_name_run"
|
||||
cp /distr/$file_name_run $DOWNLOADS_PATH/
|
||||
found=0
|
||||
found_run_file=0
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ $found -eq 0 ] && [ $found_run_file -eq 1 ] ; then
|
||||
# Распаковка скачанных файлов (если такие есть)
|
||||
for file in $DOWNLOADS_PATH/*.tar.gz; do
|
||||
tar -xzf "$file" -C $DOWNLOADS_PATH
|
||||
rm -f "$file"
|
||||
done
|
||||
fi
|
||||
|
||||
return $found
|
||||
}
|
||||
|
||||
|
||||
check_local_distr() {
|
||||
|
||||
copy_distr_to_downloads_path
|
||||
found=$?
|
||||
|
||||
if [ $found -ne 0 ]; then
|
||||
return $found
|
||||
fi
|
||||
|
||||
check_file
|
||||
local_distr_found=$?
|
||||
return $local_distr_found
|
||||
}
|
||||
|
||||
# Функция для скачивания дистрибутива
|
||||
download_distr() {
|
||||
local distr_filter=$1
|
||||
|
||||
echo "Попытка скачать дистрибутив с фильтром: $distr_filter"
|
||||
yard releases -u $ONEC_USERNAME -p $ONEC_PASSWORD get \
|
||||
--app-filter "$APP_FILTER" \
|
||||
--version-filter $ESCAPED_VERSION \
|
||||
--path /tmp/downloads \
|
||||
--distr-filter "$distr_filter" \
|
||||
--download-limit 1
|
||||
}
|
||||
|
||||
# Функция проверки наличия нужных файлов после распаковки
|
||||
check_file() {
|
||||
found=1
|
||||
# Проверяем, появились ли файлы в каталоге
|
||||
if [ "$installer_type" = "edt" ]; then
|
||||
# Для edt проверяем наличие специфичного файла
|
||||
if ls $DOWNLOADS_PATH/1ce-installer-cli 1> /dev/null 2>&1; then
|
||||
echo "Дистрибутив найден и скачан: $filter"
|
||||
found=0
|
||||
else
|
||||
echo "Не найден файл 1ce-installer-cli"
|
||||
echo "Содержимое каталога $DOWNLOADS_PATH:"
|
||||
ls -l $DOWNLOADS_PATH
|
||||
fi
|
||||
elif ls $DOWNLOADS_PATH/*.deb 1> /dev/null 2>&1 || ls $DOWNLOADS_PATH/*.run 1> /dev/null 2>&1; then
|
||||
echo "Дистрибутив найден и скачан: $filter"
|
||||
found=0
|
||||
else
|
||||
echo "Не найден дистрибутив по шаблону: $filter"
|
||||
fi
|
||||
return $found
|
||||
}
|
||||
|
||||
# Попытка скачивания дистрибутива для каждого фильтра
|
||||
try_download() {
|
||||
|
||||
# Определим фильтры для скачивания. Если шаблонов >1 они должны разделяться "|" Скачивается дистрибутив по первому найденному шаблону.
|
||||
APP_FILTER="Технологическая платформа *8\.3"
|
||||
case "$installer_type" in
|
||||
edt)
|
||||
echo "Скачиваем дистрибутив EDT"
|
||||
APP_FILTER="1C:Enterprise Development Tools"
|
||||
DISTR_FILTERS="Дистрибутив для оффлайн установки 1C:EDT для ОС Linux 64 бит|Дистрибутив 1C:EDT для ОС Linux для установки без интернета"
|
||||
;;
|
||||
server)
|
||||
echo "Скачиваем дистрибутив для установки 64-битного сервера"
|
||||
DISTR_FILTERS="Технологическая платформа 1С:Предприятия \(64\-bit\) для Linux$|Сервер 1С:Предприятия \(64\-bit\) для DEB-based Linux-систем$"
|
||||
;;
|
||||
server32)
|
||||
echo "Скачиваем дистрибутив для установки 32-битного сервера"
|
||||
DISTR_FILTERS="Технологическая платформа 1С:Предприятия для Linux$|Сервер 1С:Предприятия для DEB-based Linux-систем$"
|
||||
;;
|
||||
client)
|
||||
echo "Скачиваем дистрибутив для установки 64-битного клиента 1с"
|
||||
DISTR_FILTERS="Технологическая платформа 1С:Предприятия \(64\-bit\) для Linux$|Клиент 1С:Предприятия \(64\-bit\) для DEB-based Linux-систем$"
|
||||
;;
|
||||
client32)
|
||||
echo "Скачиваем дистрибутив для установки 32-битного клиента 1с"
|
||||
DISTR_FILTERS="Технологическая платформа 1С:Предприятия для Linux$|Клиент 1С:Предприятия для DEB-based Linux-систем$"
|
||||
;;
|
||||
thin-client)
|
||||
echo "Скачиваем дистрибутив для установки 32-битного тонкого клиента 1с"
|
||||
DISTR_FILTERS="Тонкий клиент 1С:Предприятия \(64\-bit\) для DEB-based Linux-систем$|Тонкий клиент 1С:Предприятия \(64\-bit\) для Linux$"
|
||||
;;
|
||||
thin-client32)
|
||||
echo "Скачиваем дистрибутив для установки 32-битного тонкого клиента 1с"
|
||||
DISTR_FILTERS="Тонкий клиент 1С:Предприятия для DEB-based Linux-систем$|Тонкий клиент 1С:Предприятия для Linux$"
|
||||
;;
|
||||
esac
|
||||
|
||||
echo $DISTR_FILTERS
|
||||
local download_success=1
|
||||
IFS='|'
|
||||
read -ra FILTERS <<< "$DISTR_FILTERS"
|
||||
for filter in "${FILTERS[@]}"; do
|
||||
download_distr "$filter"
|
||||
check_file
|
||||
download_success=$?
|
||||
if [ $download_success -eq 0 ]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
return $download_success
|
||||
}
|
||||
|
||||
# Удаление ненужных файлов
|
||||
mkdir -p $DOWNLOADS_PATH
|
||||
rm -f $DOWNLOADS_PATH/.gitkeep
|
||||
chmod 777 -R /tmp
|
||||
|
||||
# Проверяем, есть ли дистрибутивы локально
|
||||
check_local_distr
|
||||
local_distr_found=$?
|
||||
|
||||
if [ $local_distr_found -ne 0 ]; then
|
||||
echo "Скачаных дистрибутивов не найдено. Попытаемся скачать через yard."
|
||||
if [ "$ONEC_VERSION" = "8.3.24.1342" ] || [ "$ONEC_VERSION" = "8.3.24.1368" ]; then
|
||||
echo "Ошибка: Скачивание версии 8.3.24.1342 и 8.3.24.1368 не поддерживается. Скачайте и распакуйте релиз самостоятельно, и поместите его в папку distr"
|
||||
exit 1
|
||||
else
|
||||
echo "Версия 1с: $ONEC_VERSION"
|
||||
fi
|
||||
try_download
|
||||
download_attempted=$?
|
||||
if [ $download_attempted -ne 0 ]; then
|
||||
echo "Ошибка: не удалось найти дистрибутив ни локально, ни удаленно."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
78
tools/local-test/onec-server/build/scripts/install.sh
Executable file
78
tools/local-test/onec-server/build/scripts/install.sh
Executable file
@ -0,0 +1,78 @@
|
||||
#!/bin/bash
|
||||
|
||||
ONEC_RELEASE=`echo $ONEC_VERSION | cut -d . -f 3`
|
||||
echo "Release: "$ONEC_RELEASE
|
||||
nls_install="ru"
|
||||
|
||||
if [[ "$ONEC_RELEASE" -lt "20" ]]; then
|
||||
case "$installer_type" in
|
||||
edt)
|
||||
echo "edt"
|
||||
;;
|
||||
server)
|
||||
if [ "$nls" = true ]; then \
|
||||
dpkg -i 1c-enterprise*-{common,server}*.deb; \
|
||||
else \
|
||||
dpkg -i 1c-enterprise*-{common,server}_*.deb; \
|
||||
fi
|
||||
;;
|
||||
server32)
|
||||
if [ "$nls" = true ]; then \
|
||||
dpkg -i 1c-enterprise*-{common,server,ws,crs}*.deb; \
|
||||
else \
|
||||
dpkg -i 1c-enterprise*-{common,server,ws,crs}_*.deb; \
|
||||
fi
|
||||
;;
|
||||
client)
|
||||
if [ "$nls" = true ]; then \
|
||||
dpkg -i 1c-enterprise*-{common,server}_*.deb; \
|
||||
dpkg -i 1c-enterprise*-{common,client}*.deb; \
|
||||
else \
|
||||
dpkg -i 1c-enterprise*-{common,server,client}_*.deb; \
|
||||
fi
|
||||
;;
|
||||
client32)
|
||||
;;
|
||||
thin-client)
|
||||
if [ "$nls" = true ]; then \
|
||||
dpkg -i 1c-enterprise83-thin-client*.deb; \
|
||||
else \
|
||||
dpkg -i 1c-enterprise83-thin-client_*.deb; \
|
||||
fi
|
||||
;;
|
||||
thin-client32)
|
||||
curl --fail -b /tmp/cookies.txt -o thin-client32.tar.gz -L "$THINCLIENT32LINK"
|
||||
esac
|
||||
else
|
||||
if [ "$nls" = true ]; then
|
||||
nls_install="az,ar,hy,bg,hu,el,vi,ka,kk,zh,it,es,lv,lt,de,pl,ro,ru,tr,tk,fr,uk"
|
||||
else
|
||||
nls_install="ru"
|
||||
fi
|
||||
case "$installer_type" in
|
||||
edt)
|
||||
echo "edt"
|
||||
;;
|
||||
server)
|
||||
set -x
|
||||
echo $nls_install
|
||||
./setup-full-${ONEC_VERSION}-x86_64.run --mode unattended --enable-components server,ws,$nls_install
|
||||
;;
|
||||
server32)
|
||||
./setup-full-${ONEC_VERSION}-i386.run --mode unattended --enable-components server,ws,config_storage_server,$nls_install
|
||||
;;
|
||||
client)
|
||||
./setup-full-${ONEC_VERSION}-x86_64.run --mode unattended --enable-components server,client_full,$nls_install
|
||||
;;
|
||||
client32)
|
||||
./setup-full-${ONEC_VERSION}-i386.run --mode unattended --enable-components server,client_full,$nls_install
|
||||
;;
|
||||
thin-client)
|
||||
./setup-thin-${ONEC_VERSION}-x86_64.run --mode unattended --enable-components ru
|
||||
;;
|
||||
thin-client32)
|
||||
./setup-thin-${ONEC_VERSION}-i386.run --mode unattended --enable-components ru
|
||||
;;
|
||||
|
||||
esac
|
||||
fi
|
94
tools/local-test/onec-server/build/scripts/install_new.sh
Normal file
94
tools/local-test/onec-server/build/scripts/install_new.sh
Normal file
@ -0,0 +1,94 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Установка из .deb пакетов
|
||||
install_from_deb() {
|
||||
|
||||
case "$installer_type" in
|
||||
server)
|
||||
if [ "$nls" = true ]; then
|
||||
dpkg -i 1c-enterprise*-{common,server}*.deb
|
||||
else
|
||||
dpkg -i 1c-enterprise*-{common,server}_*.deb
|
||||
fi
|
||||
;;
|
||||
server_crs)
|
||||
if [ "$nls" = true ]; then
|
||||
dpkg -i "1c-enterprise*-{common,server,ws,crs}*.deb"
|
||||
else
|
||||
dpkg -i "1c-enterprise*-{common,server,ws,crs}_*.deb"
|
||||
fi
|
||||
;;
|
||||
client)
|
||||
if [ "$nls" = true ]; then
|
||||
dpkg -i "1c-enterprise*-{common,server,client}*.deb"
|
||||
else
|
||||
dpkg -i "1c-enterprise*-{common,server,client}_*.deb"
|
||||
fi
|
||||
;;
|
||||
thin-client)
|
||||
if [ "$nls" = true ]; then
|
||||
dpkg -i "1c-enterprise83-thin-client*.deb"
|
||||
else
|
||||
dpkg -i "1c-enterprise83-thin-client_*.deb"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
}
|
||||
# Установка из .run файла
|
||||
install_from_run() {
|
||||
local run_components=""
|
||||
local run_file=$(ls *.run | head -1)
|
||||
|
||||
if [ -z "$run_file" ]; then
|
||||
echo "Не найден файл установки .run"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
chmod +x "$run_file"
|
||||
|
||||
if [ "$nls" = true ]; then
|
||||
nls_install="az,ar,hy,bg,hu,el,vi,ka,kk,zh,it,es,lv,lt,de,pl,ro,ru,tr,tk,fr,uk"
|
||||
else
|
||||
nls_install="ru"
|
||||
fi
|
||||
|
||||
case "$installer_type" in
|
||||
server)
|
||||
run_components="server,ws,config_storage_server,$nls_install"
|
||||
;;
|
||||
server_crs)
|
||||
run_components="server,ws,config_storage_server,$nls_install"
|
||||
;;
|
||||
client)
|
||||
run_components="server,client_full,$nls_install"
|
||||
;;
|
||||
client32)
|
||||
run_components="server,client_full,$nls_install"
|
||||
;;
|
||||
thin-client)
|
||||
run_components="ru"
|
||||
;;
|
||||
thin-client32)
|
||||
run_components="ru"
|
||||
;;
|
||||
esac
|
||||
|
||||
if [ -n "$run_components" ]; then
|
||||
./"$run_file" --mode unattended --enable-components $run_components
|
||||
else
|
||||
echo "Не указаны компоненты для установки"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Определяем, есть ли .deb файлы
|
||||
if ls *.deb 1> /dev/null 2>&1; then
|
||||
echo "Установка из .deb пакетов"
|
||||
install_from_deb
|
||||
elif ls *.run 1> /dev/null 2>&1; then
|
||||
echo "Установка из .run файла"
|
||||
install_from_run
|
||||
else
|
||||
echo "Не найдены файлы установки"
|
||||
exit 1
|
||||
fi
|
@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
FILE=/usr/share/ca-certificates/mozilla/DST_Root_CA_X3.crt
|
||||
if [[ -f "$FILE" ]]; then
|
||||
rm -r $FILE
|
||||
update-ca-certificates
|
||||
fi
|
@ -1,6 +1,6 @@
|
||||
services:
|
||||
onec-server:
|
||||
image: onec-server:${echo }
|
||||
image: onec-server:${ONEC_VERSION}
|
||||
container_name: onec-server
|
||||
restart: always
|
||||
depends_on:
|
BIN
tools/local-test/scripts/lib/DisableSafeMode.epf
Normal file
BIN
tools/local-test/scripts/lib/DisableSafeMode.epf
Normal file
Binary file not shown.
30
tools/local-test/scripts/lib/prepare-db.sh
Executable file
30
tools/local-test/scripts/lib/prepare-db.sh
Executable file
@ -0,0 +1,30 @@
|
||||
CONNECTION_STRING=$1
|
||||
JOB_NAME=$2
|
||||
|
||||
BASE_ARGUMENTS="$CONNECTION_STRING /DisableStartupDialogs /DisableStartupMessages /Out $TMP_PATH/$JOB_NAME.log"
|
||||
DESIGNER_COMMAND="$ONEC_PATH/1cv8 DESIGNER $BASE_ARGUMENTS"
|
||||
|
||||
echo "=========== Загрузка конфигурации ($JOB_NAME)"
|
||||
$DESIGNER_COMMAND /LoadCfg $BINARY_PATH/configuration.cf /UpdateDBCfg
|
||||
SUCCESS=$?
|
||||
cat $TMP_PATH/$JOB_NAME.log
|
||||
|
||||
EXTENSIONS_SET=("smoke" "tests" "yaxunit")
|
||||
|
||||
for key in "${EXTENSIONS_SET[@]}";do
|
||||
if [[ $SUCCESS -eq 0 ]]; then
|
||||
echo "=========== Загрузка расширения $key ($JOB_NAME)"
|
||||
$DESIGNER_COMMAND /LoadCfg $BINARY_PATH/$key.cfe -Extension $key /UpdateDBCfg
|
||||
SUCCESS=$?
|
||||
cat $TMP_PATH/$JOB_NAME.log
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ $SUCCESS -eq 0 ]]; then
|
||||
echo "=========== Снятие безопасного режима ($JOB_NAME)"
|
||||
$ONEC_PATH/1cv8 ENTERPRISE $BASE_ARGUMENTS /Execute $LIB_PATH/DisableSafeMode.epf
|
||||
SUCCESS=$?
|
||||
cat $TMP_PATH/$JOB_NAME.log
|
||||
fi
|
||||
|
||||
exit $SUCCESS
|
16
tools/local-test/scripts/lib/print.sh
Normal file
16
tools/local-test/scripts/lib/print.sh
Normal file
@ -0,0 +1,16 @@
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m'
|
||||
|
||||
function print_success {
|
||||
echo -e "${GREEN}#${NC} $1"
|
||||
}
|
||||
|
||||
function print_error {
|
||||
echo -e "${RED}#${NC} $1"
|
||||
}
|
||||
|
||||
function print_warn {
|
||||
echo -e "${YELLOW}#${NC} $1"
|
||||
}
|
38
tools/local-test/scripts/lib/run-tests.sh
Executable file
38
tools/local-test/scripts/lib/run-tests.sh
Executable file
@ -0,0 +1,38 @@
|
||||
. $LIB_PATH/print.sh
|
||||
|
||||
MODE=$1
|
||||
CONNECTION_STRING=$2
|
||||
JOB_NAME=$3
|
||||
|
||||
CONFIG=$TMP_PATH/yaxunit-config-$JOB_NAME.json
|
||||
|
||||
case "$MODE" in
|
||||
"Ordinary" ) APP=1cv8; RUN_MODE="/RunModeOrdinaryApplication";;
|
||||
"Thick" ) APP=1cv8; RUN_MODE="/RunModeManagedApplication";;
|
||||
"Thin" ) APP=1cv8c;;
|
||||
esac
|
||||
|
||||
cat >$CONFIG <<EOL
|
||||
{
|
||||
"reportFormat": "jUnit",
|
||||
"reportPath": "$RESULT_PATH/report-$JOB_NAME.xml",
|
||||
"closeAfterTests": true,
|
||||
"exitCode": "$RESULT_PATH/exit-code-$JOB_NAME.txt",
|
||||
"projectPath": "$ROOT_PATH",
|
||||
"logging": {
|
||||
"console": false
|
||||
}
|
||||
}
|
||||
EOL
|
||||
|
||||
echo "=========== Тестирование $JOB_NAME"
|
||||
$ONEC_PATH/$APP ENTERPRISE $CONNECTION_STRING /DisableSplash /DisableStartupDialogs /DisableStartupMessages $RUN_MODE /C "RunUnitTests=$CONFIG"
|
||||
|
||||
RESULT=$(head -n 1 $RESULT_PATH/exit-code-$JOB_NAME.txt)
|
||||
RESULT=${RESULT:1:1}
|
||||
|
||||
if [[ "$RESULT" == "0" ]]; then
|
||||
print_success "Тестирование $JOB_NAME завершилось успешно"
|
||||
else
|
||||
print_error "Тестирование $JOB_NAME завершилось с ошибкой"
|
||||
fi
|
38
tools/local-test/scripts/steps/build-artifacts.sh
Executable file
38
tools/local-test/scripts/steps/build-artifacts.sh
Executable file
@ -0,0 +1,38 @@
|
||||
TEMP_DB_PATH=$TMP_PATH/file-db
|
||||
rm -rf $TEMP_DB_PATH/*
|
||||
|
||||
extensions=("smoke" "tests" "yaxunit")
|
||||
configuration_exists=0
|
||||
|
||||
if [[ -f $BINARY_PATH/configuration.cf ]]; then
|
||||
configuration_exists=1
|
||||
echo " Сборка конфигурации не требуется"
|
||||
fi
|
||||
|
||||
extensions_set=()
|
||||
for key in "${extensions[@]}";do
|
||||
if [[ -f $BINARY_PATH/$key.cfe ]]; then
|
||||
echo " Сборка $key не требуется"
|
||||
else
|
||||
extensions_set+=($key)
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ ${#extensions_set[@]} -eq 0 && $configuration_exists -eq 1 ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo " Создание информационной базы"
|
||||
$ONEC_PATH/ibcmd infobase create --db-path=$TEMP_DB_PATH --import=$EXPORT_PATH/configuration --apply --force
|
||||
|
||||
if [[ $configuration_exists -eq 0 ]]; then
|
||||
echo " Сохрание тестовой конфигурации"
|
||||
$ONEC_PATH/ibcmd infobase config save --db-path=$TEMP_DB_PATH $BINARY_PATH/configuration.cf
|
||||
fi
|
||||
|
||||
for key in "${extensions_set[@]}";do
|
||||
echo " Импорт расширения $key"
|
||||
$ONEC_PATH/ibcmd infobase config import --db-path=$TEMP_DB_PATH --extension=$key $EXPORT_PATH/$key
|
||||
echo " Сохрание расширения $key"
|
||||
$ONEC_PATH/ibcmd infobase config save --db-path=$TEMP_DB_PATH --extension=$key $BINARY_PATH/$key.cfe
|
||||
done
|
24
tools/local-test/scripts/steps/clean-outdated.sh
Executable file
24
tools/local-test/scripts/steps/clean-outdated.sh
Executable file
@ -0,0 +1,24 @@
|
||||
PROJECT_NAME=$1
|
||||
PROJECT_PATH=$2
|
||||
|
||||
. $LIB_PATH/print.sh
|
||||
|
||||
function calc_hash {
|
||||
find $1 -type f -print0 | sort -z | xargs -0 sha1sum | sha1sum
|
||||
}
|
||||
|
||||
hash_file_name=$EXPORT_PATH/$PROJECT_NAME.hash
|
||||
current_hash=$(calc_hash $ROOT_PATH/$PROJECT_PATH/src);current_hash=${current_hash:0:40}
|
||||
|
||||
if [ -f $hash_file_name ]; then
|
||||
old_hash=$(head -n 1 $hash_file_name)
|
||||
fi
|
||||
|
||||
if [[ "$current_hash" != "$old_hash" ]]; then
|
||||
print_warn "$PROJECT_NAME, исходники изменены. Будет выполнена сбора"
|
||||
rm -rf $EXPORT_PATH/$PROJECT_NAME
|
||||
rm -rf $BINARY_PATH/$PROJECT_NAME.*
|
||||
echo $current_hash>$hash_file_name
|
||||
else
|
||||
print_success "$PROJECT_NAME, исходники не изменены. Будут использованы существующие артефакты"
|
||||
fi
|
9
tools/local-test/scripts/steps/convert-to-xml.sh
Executable file
9
tools/local-test/scripts/steps/convert-to-xml.sh
Executable file
@ -0,0 +1,9 @@
|
||||
PROJECT_NAME=$1
|
||||
PROJECT_PATH=$2
|
||||
|
||||
if [[ -d $EXPORT_PATH/$PROJECT_NAME ]]; then
|
||||
echo " Конвертация $PROJECT_NAME не требуется"
|
||||
else
|
||||
echo " Конвертация $PROJECT_NAME"
|
||||
$EDT_PATH/1cedtcli -data $TMP_PATH/ws -timeout 300 -command export --configuration-files $EXPORT_PATH/$PROJECT_NAME --project $ROOT_PATH/$PROJECT_PATH
|
||||
fi
|
14
tools/local-test/scripts/steps/run-filedb-test.sh
Executable file
14
tools/local-test/scripts/steps/run-filedb-test.sh
Executable file
@ -0,0 +1,14 @@
|
||||
MODE=$1
|
||||
JOB_NAME=${MODE}Application-File
|
||||
TEST_DB_PATH=$DB_PATH/$MODE
|
||||
CONNECTION_STRING=/F$TEST_DB_PATH
|
||||
|
||||
rm -rf $TEST_DB_PATH
|
||||
|
||||
echo "=========== Создание информационной базы ($JOB_NAME)"
|
||||
$ONEC_PATH/1cv8 CREATEINFOBASE File=$TEST_DB_PATH /DisableStartupDialogs /DisableStartupMessages /Out $TMP_PATH/$JOB_NAME.log
|
||||
cat $TMP_PATH/$JOB_NAME.log
|
||||
|
||||
if $LIB_PATH/prepare-db.sh $CONNECTION_STRING $JOB_NAME; then
|
||||
$LIB_PATH/run-tests.sh $MODE $CONNECTION_STRING $JOB_NAME
|
||||
fi
|
12
tools/local-test/scripts/steps/run-serverdb-test.sh
Executable file
12
tools/local-test/scripts/steps/run-serverdb-test.sh
Executable file
@ -0,0 +1,12 @@
|
||||
MODE=$1
|
||||
JOB_NAME=${MODE}Application-Server
|
||||
DB_NAME=DB_${MODE}Application
|
||||
CONNECTION_STRING=/S\"localhost\\$DB_NAME\"
|
||||
|
||||
echo "=========== Создание информационной базы ($JOB_NAME)"
|
||||
$ONEC_PATH/1cv8 CREATEINFOBASE Srvr=localhost\;Ref=$DB_NAME\;DBMS=PostgreSQL\;DBSrvr=localhost\;DB=$DB_NAME\;DBUID=postgres\;CrSQLDB=Y\;SchJobDn=Y /DisableStartupDialogs /DisableStartupMessages /Out $TMP_PATH/$JOB_NAME.log
|
||||
cat $TMP_PATH/$JOB_NAME.log
|
||||
|
||||
if $LIB_PATH/prepare-db.sh $CONNECTION_STRING $JOB_NAME; then
|
||||
$LIB_PATH/run-tests.sh $MODE $CONNECTION_STRING $JOB_NAME
|
||||
fi
|
61
tools/local-test/scripts/test-by-ibcmd.sh
Executable file
61
tools/local-test/scripts/test-by-ibcmd.sh
Executable file
@ -0,0 +1,61 @@
|
||||
source .env
|
||||
|
||||
SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
|
||||
|
||||
WORK_PATH=/tmp/yaxunit-test
|
||||
EDT_PATH=/opt/1C/1CE/components/1c-edt-$EDT_VERSION-x86_64
|
||||
ONEC_PATH=/opt/1cv8/x86_64/$ONEC_VERSION
|
||||
PROJECT_PATH=$SCRIPTPATH/../..
|
||||
DB_PATH=$WORK_PATH/file-db
|
||||
mkdir -p $WORK_PATH
|
||||
|
||||
# echo "Конвертация configuration"
|
||||
# $EDT_PATH/1cedtcli -data $WORK_PATH/ws -timeout 300 -command export --configuration-files $WORK_PATH/configuration --project $PROJECT_PATH/fixtures/demo-configuration
|
||||
|
||||
# echo "Конвертация yaxunit"
|
||||
# $EDT_PATH/1cedtcli -data $WORK_PATH/ws -timeout 300 -command export --configuration-files $WORK_PATH/yaxunit --project $PROJECT_PATH/exts/yaxunit
|
||||
|
||||
# echo "Конвертация smoke"
|
||||
# $EDT_PATH/1cedtcli -data $WORK_PATH/ws -timeout 300 -command export --configuration-files $WORK_PATH/smoke --project $PROJECT_PATH/exts/smoke
|
||||
|
||||
# echo "Конвертация тесты"
|
||||
# $EDT_PATH/1cedtcli -data $WORK_PATH/ws -timeout 300 -command export --configuration-files $WORK_PATH/tests --project $PROJECT_PATH/tests
|
||||
|
||||
rm -rf $DB_PATH
|
||||
echo "=========== Создание информационной базы"
|
||||
$ONEC_PATH/ibcmd infobase create --db-path=$DB_PATH --import=$WORK_PATH/configuration --apply --force
|
||||
|
||||
echo "=========== Импорт расширения Smoke"
|
||||
$ONEC_PATH/ibcmd infobase config import --db-path=$DB_PATH --extension=Smoke $WORK_PATH/smoke
|
||||
$ONEC_PATH/ibcmd infobase config apply --db-path=$DB_PATH --extension=Smoke --force
|
||||
|
||||
echo "=========== Импорт расширения tests"
|
||||
$ONEC_PATH/ibcmd infobase config import --db-path=$DB_PATH --extension=tests $WORK_PATH/tests
|
||||
$ONEC_PATH/ibcmd infobase config apply --db-path=$DB_PATH --extension=tests --force
|
||||
|
||||
echo "=========== Импорт расширения YAXUNIT"
|
||||
$ONEC_PATH/ibcmd infobase config import --db-path=$DB_PATH --extension=YAXUNIT $WORK_PATH/yaxunit
|
||||
$ONEC_PATH/ibcmd infobase config apply --db-path=$DB_PATH --extension=YAXUNIT --force
|
||||
|
||||
$ONEC_PATH/ibcmd infobase config extension update --db-path=$DB_PATH --name=Smoke --safe-mode=no --unsafe-action-protection=no
|
||||
$ONEC_PATH/ibcmd infobase config extension update --db-path=$DB_PATH --name=tests --safe-mode=no --unsafe-action-protection=no
|
||||
$ONEC_PATH/ibcmd infobase config extension update --db-path=$DB_PATH --name=YAXUNIT --safe-mode=no --unsafe-action-protection=no
|
||||
|
||||
cat >$WORK_PATH/yaxunit-config.json <<EOL
|
||||
{
|
||||
"reportFormat": "jUnit",
|
||||
"reportPath": "$WORK_PATH/report.xml",
|
||||
"closeAfterTests": true,
|
||||
"exitCode": "$WORK_PATH/exit-code.txt",
|
||||
"logging": {
|
||||
"console": true
|
||||
}
|
||||
}
|
||||
EOL
|
||||
|
||||
$ONEC_PATH/ibsrv --db-path=$DB_PATH --daemon
|
||||
IBSRV_PID=$!
|
||||
echo "IBSRV PID=$IBSRV_PID"
|
||||
|
||||
$ONEC_PATH/1cv8c /WS "http://localhost:8314" /C"RunUnitTests=$WORK_PATH/yaxunit-config.json" /DisableStartupDialogs /DisableStartupMessages /DisableUnrecoverableErrorMessage
|
||||
kill $IBSRV_PID
|
65
tools/local-test/scripts/test-it.sh
Executable file
65
tools/local-test/scripts/test-it.sh
Executable file
@ -0,0 +1,65 @@
|
||||
#!/bin/bash
|
||||
|
||||
export SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"
|
||||
|
||||
source $SCRIPTPATH/../.env
|
||||
|
||||
export EDT_PATH=/opt/1C/1CE/components/1c-edt-$EDT_VERSION-x86_64
|
||||
export ONEC_PATH=/opt/1cv8/x86_64/$ONEC_VERSION
|
||||
|
||||
export WORK_PATH=$(realpath $SCRIPTPATH/../workpath)
|
||||
export ROOT_PATH=$(realpath $SCRIPTPATH/../../../)
|
||||
export STEPS_PATH=$(realpath $SCRIPTPATH/steps)
|
||||
export LIB_PATH=$(realpath $SCRIPTPATH/lib)
|
||||
|
||||
export TMP_PATH=$WORK_PATH/tmp
|
||||
export DB_PATH=$WORK_PATH/file-db
|
||||
export EXPORT_PATH=$WORK_PATH/export
|
||||
export BINARY_PATH=$WORK_PATH/binary
|
||||
export RESULT_PATH=$WORK_PATH/result
|
||||
|
||||
mkdir -p $DB_PATH
|
||||
mkdir -p $EXPORT_PATH
|
||||
mkdir -p $BINARY_PATH
|
||||
|
||||
mkdir -p $TMP_PATH
|
||||
mkdir -p $RESULT_PATH
|
||||
|
||||
rm -rf $TMP_PATH/*
|
||||
rm -rf $RESULT_PATH/*
|
||||
|
||||
cat >~/.1cv8/1C/1cv8/conf/conf.cfg <<EOL
|
||||
DisableUnsafeActionProtection=.*
|
||||
EOL
|
||||
|
||||
declare -A SOURCES_HASH
|
||||
declare -A SOURCE_PATHS=( ["yaxunit"]="exts/yaxunit" ["smoke"]="exts/smoke" ["tests"]="tests" ["configuration"]="fixtures/demo-configuration")
|
||||
declare projects=()
|
||||
|
||||
echo "=========== Анализ исходников ==========="
|
||||
for key in "${!SOURCE_PATHS[@]}"; do
|
||||
$STEPS_PATH/clean-outdated.sh $key ${SOURCE_PATHS[$key]}
|
||||
done
|
||||
|
||||
echo "=========== Конвертация исходников ==========="
|
||||
for key in "${!SOURCE_PATHS[@]}"; do
|
||||
$STEPS_PATH/convert-to-xml.sh $key ${SOURCE_PATHS[$key]}
|
||||
done
|
||||
|
||||
echo "=========== Сборка исходников ==========="
|
||||
if ! $STEPS_PATH/build-artifacts.sh; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "=========== Запуск сервера 1с в Docker ==========="
|
||||
docker compose -f $SCRIPTPATH/../onec-server/docker-compose.yml up -d --force-recreate --renew-anon-volumes
|
||||
|
||||
echo "=========== Запуск тестирования ==========="
|
||||
$STEPS_PATH/run-filedb-test.sh Ordinary &
|
||||
$STEPS_PATH/run-filedb-test.sh Thick &
|
||||
$STEPS_PATH/run-filedb-test.sh Thin &
|
||||
$STEPS_PATH/run-serverdb-test.sh Ordinary &
|
||||
$STEPS_PATH/run-serverdb-test.sh Thick &
|
||||
$STEPS_PATH/run-serverdb-test.sh Thin &
|
||||
|
||||
wait
|
@ -4,50 +4,11 @@
|
||||
"version": "2.1",
|
||||
"ФорматEDT": true
|
||||
},
|
||||
"АвтоТестирование": {
|
||||
"Выполнять": true,
|
||||
"ВыполнятьБазовые": true,
|
||||
"ВыполнятьxUnit": true,
|
||||
"ТестыxUnitВРасширении": true,
|
||||
"ИсполнительxUnitВРасширении": true,
|
||||
"ВыполнятьVanessa": false,
|
||||
"ПредварительнаяПодготовкаБазы": false,
|
||||
"ПередаватьПокрытиеТестамиВСонар": false
|
||||
},
|
||||
"АвтоДокументирование": {
|
||||
"Выполнять": false,
|
||||
"КодПространстваConfluence": "yaxunit",
|
||||
"ПоследнийОбработанныйКоммит": "",
|
||||
"Шаблоны": ""
|
||||
},
|
||||
"АнализИсходников": {
|
||||
"Выполнять": true,
|
||||
"ДочерниеПроекты": []
|
||||
},
|
||||
"АвтоСборка": {
|
||||
"ВключитьНомерСборки": true,
|
||||
"ОбновлятьВерсиюКонфигурации": false,
|
||||
"КаталогРасположенияСборок": "\\\\dellin.local\\bia\\СРПО\\1с_install\\Конфигурации ДЛ\\yaxunit",
|
||||
"КаталогРасположенияСборокRelease": "\\\\dellin.local\\bia\\СРПО\\1с_install\\Конфигурации ДЛ\\yaxunit\\releases",
|
||||
"КаталогРасположенияОбразов": "\\\\dellin.local\\bia\\СРПО\\1с_install\\Конфигурации ДЛ\\БСП\\spec",
|
||||
"ВыполнятьНаСервернойБазе": false
|
||||
},
|
||||
"Уведомления": {
|
||||
"Выполнять": true,
|
||||
"Ответственные": [{
|
||||
"Адресат": "arch-bots",
|
||||
"Транспорт": "rocketchat"
|
||||
}]
|
||||
},
|
||||
"СвязанныеПроекты": {
|
||||
"bsp": {
|
||||
"Репозиторий": "git@gitlab.dellin.ru:orais/bsp/bsp.git",
|
||||
"Ветка": "master",
|
||||
"Назначение": "Основная конфигурация"
|
||||
}
|
||||
},
|
||||
"Precommt4onecСценарии": {
|
||||
"ИспользоватьСценарииРепозитория": true,
|
||||
"КаталогЛокальныхСценариев": "tools\\precommit"
|
||||
"ОтключенныеСценарии": [
|
||||
"РазборОтчетовОбработокРасширений.os"
|
||||
],
|
||||
"КаталогЛокальныхСценариев": "tools/precommit"
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user