[System] Ты анализируешь код 1С и подбираешь точные имена для процедур и функций.

[User]
Восстанови осмысленное имя процедуры или функции на 1С по её телу. Верни только полную сигнатуру первой строки.

Функция ИмяФункции(ФайлКартинки1, ФайлКартинки2)

	#Если НЕ ВебКлиент Тогда

	ИмяФайлаКартинкиРазница = ПолучитьИмяВременногоФайла("gif");
	Команда = "magick convert  -delay 50 ""%ФайлКартинки1"" ""%ФайлКартинки2"" +repage -loop 0 ""%ФайлКартинки3""";
	Команда = СтрЗаменить(Команда, "%ФайлКартинки1", ФайлКартинки1);
	Команда = СтрЗаменить(Команда, "%ФайлКартинки2", ФайлКартинки2);
	Команда = СтрЗаменить(Команда, "%ФайлКартинки3", ИмяФайлаКартинкиРазница);

	Результат = ВыполнитьКомандуОСБезПоказаЧерногоОкна(Команда);

	Если НЕ ФайлСуществуетКомандаСистемы(ИмяФайлаКартинкиРазница) Тогда
		ТекстСообщения = Локализовать("Не вышло получить анимацию разницы между картинками. Команда:") + Символы.ПС + Команда;
		ЗаписатьЛогВЖРИнформация("КартинкаАнимацияСРазницейКартинок", ТекстСообщения);
		Возврат Неопределено;
	КонецЕсли;

	Возврат ИмяФайлаКартинкиРазница;

	#КонецЕсли

КонецФункции

&НаКлиенте

Функция КартинкаРазницаМеждуКартинками(ФайлКартинки1, ФайлКартинки2)

	#Если НЕ ВебКлиент Тогда

	ИмяФайлаКартинкиРазница = ПолучитьИмяВременногоФайла("png");
	Если ЭтоLinux() Тогда
		Команда = "magick compare -fuzz 10% ""%ФайлКартинки1"" ""%ФайлКартинки2"" ""%ФайлКартинки3""";
	Иначе
		// Надо экранировать символ %
		Команда = "magick compare -fuzz 10%% ""%ФайлКартинки1"" ""%ФайлКартинки2"" ""%ФайлКартинки3""";
	КонецЕсли;
	Команда = СтрЗаменить(Команда, "%ФайлКартинки1", ФайлКартинки1);
	Команда = СтрЗаменить(Команда, "%ФайлКартинки2", ФайлКартинки2);
	Команда = СтрЗаменить(Команда, "%ФайлКартинки3", ИмяФайлаКартинкиРазница);

	Результат = ВыполнитьКомандуОСБезПоказаЧерногоОкна(Команда);

	Если НЕ ФайлСуществуетКомандаСистемы(ИмяФайлаКартинкиРазница) Тогда
		ТекстСообщения = Локализовать("Не вышло получить разницу между картинками. Команда:") + Символы.ПС + Команда;
		ЗаписатьЛогВЖРИнформация("КартинкаРазницаМеждуКартинками", ТекстСообщения);
		Возврат Неопределено;
	КонецЕсли;

	Возврат ИмяФайлаКартинкиРазница;

	#КонецЕсли

КонецФункции

&НаКлиенте

Функция ПреобразоватьPDFВКартинку(ИмяФайлаPDF)

	#Если НЕ ВебКлиент Тогда

	ИмяФайлаКартинки = ПолучитьИмяВременногоФайла("png");

	Команда = "magick convert -density 300 -trim ""%ФайлPDF"" -quality 100 -resize 1066x600! -append ""%ФайлКартинки""";
	Команда = СтрЗаменить(Команда, "%ФайлPDF", ИмяФайлаPDF);
	Команда = СтрЗаменить(Команда, "%ФайлКартинки", ИмяФайлаКартинки);

	Результат = ВыполнитьКомандуОСБезПоказаЧерногоОкна(Команда);

	Если НЕ ФайлСуществуетКомандаСистемы(ИмяФайлаКартинки) Тогда
		ТекстСообщения = Локализовать("Не получилось преобразовать pdf в картинку. Команда:") + Символы.ПС + Команда;
		ЗаписатьЛогВЖРИнформация("ПреобразоватьPDFВКартинку", ТекстСообщения);

		Возврат Неопределено;
	КонецЕсли;

	Возврат ИмяФайлаКартинки;

	#КонецЕсли

КонецФункции

&НаКлиенте

Процедура СохранитьМакетВФайл(ТабДок)

	ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	ДиалогВыбораФайла.МножественныйВыбор = Ложь;
	ДиалогВыбораФайла.Заголовок = Локализовать("Выберите имя файла.");
	ДиалогВыбораФайла.Фильтр = Локализовать("(*.mxl)|*.mxl");
	ДопПараметры = Новый Структура;
	ДопПараметры.Вставить("ТабДок", ТабДок);
	ДиалогВыбораФайла.Показать(Новый ОписаниеОповещения("СохранитьСостояниеФормыКлиентаТестированияВФайлЗавершение", ЭтаФорма, ДопПараметры));

КонецПроцедуры

&НаКлиенте

Процедура СохранитьСостояниеФормыКлиентаТестированияВФайлЗавершение(ВыбранныеФайлы, ДопПараметры) Экспорт
	Если Ложь
		Или ВыбранныеФайлы = Неопределено
		Или ВыбранныеФайлы.Количество() = 0 Тогда

		Возврат;
	КонецЕсли;

	ИмяФайла = ВыбранныеФайлы[0];
	ДопПараметры.ТабДок.НачатьЗапись(, ИмяФайла, ТипФайлаТабличногоДокумента.MXL);

КонецПроцедуры

&НаКлиенте

Процедура ДобавитьВСтруктуруПараметрыКоторыеРаньшеМожноБылоПередатьТолькоВКоманднойСтроке(Данные)

	Если НЕ ТипЗнч(Данные) = Тип("Структура") Тогда
		Возврат;
	КонецЕсли;

	ИменаПараметровБулево = Новый Массив;
	ИменаПараметровБулево.Добавить("StartFeaturePlayer");
	ИменаПараметровБулево.Добавить("QuietInstallVanessaExt");
	ИменаПараметровБулево.Добавить("InstallVanessaExtOnFailOfQuietInstall");
	ИменаПараметровБулево.Добавить("QuietInstallVanessaExtAndClose");
	ИменаПараметровБулево.Добавить("ClearStepsCache");
	ИменаПараметровБулево.Добавить("DisableUserSettingsLoader");
	ИменаПараметровБулево.Добавить("DisableLoadTestClientsTable");
	ИменаПараметровБулево.Добавить("DisableLoadConfig");
	ИменаПараметровБулево.Добавить("DisableFeatureLoadOnOpenForm");
	ИменаПараметровБулево.Добавить("DisableCheckPossibilityOfSynchronousCalls");
	ИменаПараметровБулево.Добавить("GetStepsCache");
	ИменаПараметровБулево.Добавить("DisableFileOptimization");

	Для Каждого ИмяПараметра Из ИменаПараметровБулево Цикл
		Данные.Вставить(ИмяПараметра, ЗначениеПараметраЗапуска(ИмяПараметра, Ложь));
	КонецЦикла;

КонецПроцедуры

&НаКлиенте

Процедура НачатьОзвучкуШага(ТекШаг)

	Если НЕ Объект.ИспользоватьКомпонентуVanessaExt Тогда
		ВызватьИсключение Локализовать("Необходимо включить использование внешней компоненты VanessaExt.");
	КонецЕсли;

	НужноОжидатьОкончанияОзвучкиШага = Истина;
	ПараметрыВидео = ПолучитьПараметрыЗаписиВидео();
	ПодключитьБиблиотекуРаботыСВидео();
	Если ТекШаг.Свойство("ТекстИнструкция") Тогда
		ПараметрыВидео.Вставить("ТекстДляТестаГолоса", ТекШаг.ТекстИнструкция);
	Иначе
		ПараметрыВидео.Вставить("ТекстДляТестаГолоса", "");
	КонецЕсли;
	Если ТекШаг.Свойство("ТекстИнструкция") Тогда
		Отладка("Text=" + ТекШаг.ТекстИнструкция);
	КонецЕсли;
	ПараметрыВидео.Вставить("ОзвучкаВыполненияСценария", Истина);
	ПараметрыВидео.Вставить("Шаг", ТекШаг);
	ПараметрыВидео.Вставить("КопироватьФайлMp3", Ложь);
	ИмяФайлаMp3 = МодульРаботыСВидео.ТестГолоса(ПараметрыВидео);
	Если НЕ ФайлСуществуетКомандаСистемы(ИмяФайлаMp3) Тогда
		ВызватьИсключение _СтрШаблон(Локализовать("Не найден файл <%1>"), Строка(ИмяФайлаMp3));
	КонецЕсли;
	ИДВоспроизведенияMp3 = ИмяФайлаMp3 + Новый УникальныйИдентификатор;
	ВнешняяКомпонентаДляСкриншотов.НачатьВызовВоспроизвестиМедиа(ОписаниеПустогоОбработчика(3), ИмяФайлаMp3, ИДВоспроизведенияMp3);

КонецПроцедуры

&НаКлиенте

Процедура СлужебныйМетодОзвучитьСтрокуСценарияПоНомеру() Экспорт
	ОзвучитьСтрокуСценарияПоНомеру(НомерСтрокиРедактораДляОзвкучки);
КонецПроцедуры

&НаКлиенте

[Assistant] Функция КартинкаАнимацияСРазницейКартинок(ФайлКартинки1, ФайлКартинки2)


[System] Ты анализируешь код 1С и подбираешь точные имена для процедур и функций.

[User]
Восстанови осмысленное имя процедуры или функции на 1С по её телу. Верни только полную сигнатуру первой строки.

Функция ИмяФункции()

	КешЭлементовФормыVanessaAutomationПодсказка = Новый Соответствие;
	КешЭлементовФормыVanessaAutomationЗаголовок = Новый Соответствие;
	Для Каждого Элем Из Элементы Цикл

		ДанныеЭлемента = Неопределено;

		Если ТипЗнч(Элем) = Тип("КнопкаФормы") Тогда
			ДанныеЭлемента = Новый Структура;
			ДанныеЭлемента.Вставить("Имя", Элем.Имя);
			ДанныеЭлемента.Вставить("Тип", "Кнопка формы");
			ДанныеЭлемента.Вставить("Заголовок", Элем.Заголовок);
			Если ЗначениеЗаполнено(Элем.ИмяКоманды) Тогда
				ДанныеЭлемента.Вставить("Подсказка", Команды[Элем.ИмяКоманды].Подсказка);
			Иначе
				ДанныеЭлемента.Вставить("Подсказка", "");
			КонецЕсли;

			Если НЕ ЗначениеЗаполнено(ДанныеЭлемента.Заголовок) И ЗначениеЗаполнено(Элем.ИмяКоманды) Тогда
				ДанныеЭлемента.Вставить("ИмяКоманды", Элем.ИмяКоманды);
				ДанныеЭлемента.Вставить("Заголовок", Команды[Элем.ИмяКоманды].Заголовок);
			КонецЕсли;

		Иначе
			ДанныеЭлемента = Новый Структура;
			ДанныеЭлемента.Вставить("Имя", Элем.Имя);
			ДанныеЭлемента.Вставить("Тип", Строка(ТипЗнч(Элем)));
			ДанныеЭлемента.Вставить("Заголовок", Элем.Заголовок);

			Если НЕ ЗначениеЗаполнено(Элем.Заголовок) Тогда
				Попытка
					ДанныеЭлемента.Вставить("Заголовок", ЗаголовокЭлементаФормыVAИзДанныхОбъектаСервер(Элем.Имя));
				Исключение
				КонецПопытки;
			КонецЕсли;

			Попытка
				ДанныеЭлемента.Вставить("Подсказка", Элем.Подсказка);
			Исключение
				ДанныеЭлемента.Вставить("Подсказка", "");
			КонецПопытки;

			Попытка
				ТекПутьКДанным = СтрЗаменить(Элем.ПутьКДанным, "Объект." , "");
				ТекПутьКДанным = СтрЗаменить(ТекПутьКДанным, "Object." , "");
				ДанныеЭлемента.Вставить("ПутьКДанным", ТекПутьКДанным);
			Исключение
				ДанныеЭлемента.Вставить("Подсказка", "");
			КонецПопытки;

		КонецЕсли;

		Если ДанныеЭлемента <> Неопределено Тогда
			Попытка
				ДанныеЭлемента.Вставить("РасширеннаяПодсказка", Элем.РасширеннаяПодсказка.Заголовок);
			Исключение
				ДанныеЭлемента.Вставить("РасширеннаяПодсказка", "");
			КонецПопытки;

			Если ЗначениеЗаполнено(ДанныеЭлемента.Подсказка) Тогда
				КешЭлементовФормыVanessaAutomationПодсказка.Вставить(НРег(ДанныеЭлемента.Подсказка), ДанныеЭлемента);
			КонецЕсли;
			Если ЗначениеЗаполнено(ДанныеЭлемента.Заголовок) Тогда
				КешЭлементовФормыVanessaAutomationЗаголовок.Вставить(НРег(ДанныеЭлемента.Заголовок), ДанныеЭлемента);
			КонецЕсли;
			Если ЗначениеЗаполнено(ДанныеЭлемента.РасширеннаяПодсказка) Тогда
				КешЭлементовФормыVanessaAutomationПодсказка.Вставить(НРег(ДанныеЭлемента.РасширеннаяПодсказка), ДанныеЭлемента);
			КонецЕсли;
		КонецЕсли;

	КонецЦикла;

	Результат = Новый Структура;
	Результат.Вставить("КешЭлементовФормыVanessaAutomationПодсказка", КешЭлементовФормыVanessaAutomationПодсказка);
	Результат.Вставить("КешЭлементовФормыVanessaAutomationЗаголовок", КешЭлементовФормыVanessaAutomationЗаголовок);

	Возврат Результат;

КонецФункции

&НаКлиенте

Функция ПолучитьЭлементПодКрурсоромИзДанныхЭлементовФормы(ПозицияКурсора, ДанныеЭлементов)
	Результат = Неопределено;

	ПолучитьЭлементПодКрурсоромИзДанныхЭлементовФормыРекурсивно(ПозицияКурсора, ДанныеЭлементов, Результат);

	Возврат Результат;

КонецФункции

&НаКлиенте

Процедура ПолучитьЭлементПодКрурсоромИзДанныхЭлементовФормыРекурсивно(ПозицияКурсора, ДанныеЭлементов, Результат)

	Если НЕ ДанныеЭлементов.Свойство("Tree") Тогда
		Возврат;
	КонецЕсли;

	Для Каждого Элем Из ДанныеЭлементов.Tree Цикл
		Если Элем.Type = "Document" Тогда
			//Поле HTML документа
			Продолжить;
		КонецЕсли;

		Если Элем.Size.Left < ПозицияКурсора.x И Элем.Size.Right > ПозицияКурсора.x И Элем.Size.Top < ПозицияКурсора.y И Элем.Size.Bottom > ПозицияКурсора.y И Элем.Size.Width > 0 И Элем.Size.Height > 0 Тогда
			//Значит элемент имеет смысл рассматривать
			Если Результат = Неопределено Тогда
				Результат = Элем;
			Иначе
				Если Результат.Size.Width * Результат.Size.Height > Элем.Size.Width * Элем.Size.Height Тогда
					// Результату присваивается элемент с наименьшей площадью
					Результат = Элем;
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;

		ПолучитьЭлементПодКрурсоромИзДанныхЭлементовФормыРекурсивно(ПозицияКурсора, Элем, Результат);

	КонецЦикла;

КонецПроцедуры

&НаКлиенте

Процедура ПоказатьПодсказкуРекомендуетсяСохранитьНастройки()

	Если ЗапрещеныСинхронныеВызовы Тогда
		ВызватьИсключение Локализовать("Необходимо разрешить выполнение синхронных вызовов. Достаточно запустить сеанс 1С не из конфигуратора.");
	КонецЕсли;

	ВычислитьPIDЭтогоСеансаСлужебный();
	Если Ванесса.Версия8319ИлиВыше Тогда
		ОтборЭлементов = ЗаписатьОбъектJSON(Новый Структура("ProcessId, HelpText", Число(PIDЭтогоСеанса), Элементы.ГруппаVanessaEditorНастройкиРедактора.Подсказка));
	Иначе
		ОтборЭлементов = ЗаписатьОбъектJSON(Новый Структура("ProcessId, LegacyIAccessibleHelp", Число(PIDЭтогоСеанса), Элементы.ГруппаVanessaEditorНастройкиРедактора.Подсказка));
	КонецЕсли;
	ДанныеПолей = ПрочитатьОбъектJSON(ВнешняяКомпонентаДляСкриншотов.НайтиЭлементы(ОтборЭлементов));
	Если ДанныеПолей = Неопределено ИЛИ ДанныеПолей.Количество() = 0 Тогда
		ВызватьИсключение _СтрШаблон(Локализовать("Не получилось найти элемент формы Vanessa Automation для <%1>."), "ГруппаVanessaEditorНастройкиРедактора");
	КонецЕсли;

	Left = 1000000000000000;
	Top = 1000000000000000;
	Bottom = -1;
	Right = -1;
	ОпределитьКоординатыПоМассивуЭлементовUIAutomation(ДанныеПолей, Left, Top, Bottom, Right);

	НастройкиРисования = ПолучитьНастройкиРисования();
	НастройкиРисования.Вставить("text", Локализовать("Рекомендуется сохранить настройки"));
	ПроверитьКорректностьПараметровДляВыполненияУроков(НастройкиРисования);
	НастройкиРисованияJSON = Ванесса.ЗаписатьОбъектJSON(НастройкиРисования);

	Ванесса.ВнешняяКомпонентаДляСкриншотов.НарисоватьТень(
		НастройкиРисованияJSON,
		Left,
		Top,
		Right - Left,
		Bottom - Top);

КонецПроцедуры

&НаКлиенте

Процедура ДемонстрацияРаботыСправкиПоЭлементу()

	Если ЗапрещеныСинхронныеВызовы Тогда
		ВызватьИсключение Локализовать("Необходимо разрешить выполнение синхронных вызовов. Достаточно запустить сеанс 1С не из конфигуратора.");
	КонецЕсли;

	ВычислитьPIDЭтогоСеансаСлужебный();
	ДанныеКоманды = ДанныеКомандыVanessaAutomation(Элементы["ФормаVanessaEditorСоздатьНовыйСценарий"].ИмяКоманды);
	Если Ванесса.Версия8319ИлиВыше Тогда
		ОтборЭлементов = ЗаписатьОбъектJSON(Новый Структура("ProcessId, HelpText", Число(PIDЭтогоСеанса), ДанныеКоманды.Подсказка));
	Иначе
		ОтборЭлементов = ЗаписатьОбъектJSON(Новый Структура("ProcessId, LegacyIAccessibleHelp", Число(PIDЭтогоСеанса), ДанныеКоманды.Подсказка));
	КонецЕсли;
	ДанныеПолей = ПрочитатьОбъектJSON(ВнешняяКомпонентаДляСкриншотов.НайтиЭлементы(ОтборЭлементов));
	Если ДанныеПолей = Неопределено ИЛИ ДанныеПолей.Количество() = 0 Тогда
		ВызватьИсключение _СтрШаблон(Локализовать("Не получилось найти элемент формы Vanessa Automation для <%1>."), "ФормаVanessaEditorСоздатьНовыйСценарий");
	КонецЕсли;

	Left = 1000000000000000;
	Top = 1000000000000000;
	Bottom = -1;
	Right = -1;
	ОпределитьКоординатыПоМассивуЭлементовUIAutomation(ДанныеПолей, Left, Top, Bottom, Right);

	НастройкиРисования = ПолучитьНастройкиРисования();
	НастройкиРисования.Вставить("text", Локализовать("Нужно подвести курсор к элементу, например к этому, и нажать сочетание клавиш alt+H"));
	ПроверитьКорректностьПараметровДляВыполненияУроков(НастройкиРисования);
	НастройкиРисованияJSON = Ванесса.ЗаписатьОбъектJSON(НастройкиРисования);

	Ванесса.ВнешняяКомпонентаДляСкриншотов.НарисоватьТень(
		НастройкиРисованияJSON,
		Left,
		Top,
		Right - Left,
		Bottom - Top);

	sleep(4);

	ВыполнитьПеремещениеМышкиВнешнейКомпонентой(Цел(Left + (Right - Left)/2), Цел(Top + (Bottom - Top)/2));

	ПоискУроковИнтерактивнойСправкиПоЭлементуПодКурсором();

КонецПроцедуры

&НаКлиенте

Функция ОсновнойЗеленыйЦвет()
	Возврат 32768;
КонецФункции

&НаКлиенте

[Assistant] Функция КешЭлементовФормыVanessaAutomationСервер()


[System] Ты анализируешь код 1С и подбираешь точные имена для процедур и функций.

[User]
Восстанови осмысленное имя процедуры или функции на 1С по её телу. Верни только полную сигнатуру первой строки.

Функция ИмяФункции(Стр1, Стр2, МаксСчетчикПроверок)

	СчетчикПроверок = 0;

	Для РазмерЗамены = 1 По 3 Цикл

		Если СчетчикПроверок > МаксСчетчикПроверок Тогда
			Прервать;
		КонецЕсли;

		Для КолЗамен = 1 По 2 Цикл

			Если СчетчикПроверок > МаксСчетчикПроверок Тогда
				Прервать;
			КонецЕсли;

			КопияСтр2 = Стр2;
			МаксСч = СтрДлина(КопияСтр2);

			Для Сч = 1 По МаксСч Цикл

				ЛеваяЧасть = Лев(КопияСтр2, Сч - 1);
				ПраваяЧасть = Сред(КопияСтр2, Сч + РазмерЗамены);
				НовСтр2 = ЛеваяЧасть + "*" + ПраваяЧасть;

				СчетчикПроверок = СчетчикПроверок + 1;
				Если Ванесса.СтрокаСоответствуетШаблону(Стр1, НовСтр2) Тогда
					Возврат НовСтр2;
				КонецЕсли;

				Если СчетчикПроверок > МаксСчетчикПроверок Тогда
					Прервать;
				КонецЕсли;

				Если КолЗамен = 2 Тогда
					Для Сч2 = Сч+1 По МаксСч Цикл

						Если СчетчикПроверок > МаксСчетчикПроверок Тогда
							Прервать;
						КонецЕсли;

						ЛеваяЧасть = Лев(НовСтр2, Сч2 - 1);
						ПраваяЧасть = Сред(НовСтр2, Сч2 + РазмерЗамены);
						НовСтр3 = ЛеваяЧасть + "*" + ПраваяЧасть;
						СчетчикПроверок = СчетчикПроверок + 1;
						Если Ванесса.СтрокаСоответствуетШаблону(Стр1, НовСтр3) Тогда
							Возврат НовСтр3;
						КонецЕсли;
					КонецЦикла;
				КонецЕсли;

			КонецЦикла;

		КонецЦикла;
	КонецЦикла;

	Возврат Неопределено;

КонецФункции

&НаКлиенте

Функция НайтиФайлыСПомощьюКомпоненты(КаталогПоиска, Маска, ИскатьВПодкаталогах)

	ДанныеПоиска = ПрочитатьСтрокуJSON(ВнешняяКомпонентаДляСкриншотов.НайтиФайлы(КаталогПоиска, Маска,,Истина, ИскатьВПодкаталогах, Ложь));
	//ВнешняяКомпонента.НачатьВызовНайтиФайлы(Директория, МаскаПоиска, ИскомыйТекст, ИгнорироватьРегистр, ИскатьВПодкаталогах, ВключитьПапкиВРезультатыПоиска);

	Если ДанныеПоиска = Неопределено Тогда
		Возврат Новый Массив;
	КонецЕсли;

	Результат = Новый Массив;
	Для Каждого Элем Из ДанныеПоиска Цикл
		Результат.Добавить(Новый Файл(Элем.path));
	КонецЦикла;

	Возврат Результат;

КонецФункции

&НаКлиентеНаСервереБезКонтекста

Функция СпецСимволыРегулярныхВыражений(Знач ДляЛинукс)

	СпецСимволы = Новый Массив;
	СпецСимволы.Добавить("\");
	СпецСимволы.Добавить("^");
	СпецСимволы.Добавить("$");
	СпецСимволы.Добавить("(");
	СпецСимволы.Добавить(")");
	СпецСимволы.Добавить("[");
	СпецСимволы.Добавить("]");
	СпецСимволы.Добавить("{");
	СпецСимволы.Добавить("}");
	СпецСимволы.Добавить("|");
	СпецСимволы.Добавить(".");
	СпецСимволы.Добавить("+");
	СпецСимволы.Добавить("?");

	Если ДляЛинукс Тогда
		СпецСимволы.Добавить("<");
		СпецСимволы.Добавить(">");
	КонецЕсли;

	Возврат СпецСимволы;

КонецФункции

&НаСервере

Функция ПроверкаПереводаЭлементовФормыСлужебный(Знач ИменаЭлементовСРасширеннойПодсказкой)

	Ошибки = Новый Массив;
	Для Каждого Элем Из Элементы Цикл

		Если Лев(Элем.Имя, 17) = "МенюЗагрузитьФичи" Тогда
			Продолжить;
		КонецЕсли;

		Попытка
			Если ВСтрокеЕстьРусскиеБуквыСлужебный(Элем.Заголовок) Тогда
				Ошибки.Добавить("Элемент <" + Элем.Имя + ">, заголовок <" + Элем.Заголовок + ">");
			КонецЕсли;
		Исключение
		КонецПопытки;

		Попытка
			Если ВСтрокеЕстьРусскиеБуквыСлужебный(Элем.Подсказка) Тогда
				Ошибки.Добавить("Команда <" + Элем.Имя + ">, подсказка <" + Элем.Подсказка + ">");
			КонецЕсли;
		Исключение
		КонецПопытки;

		Если Прав(Элем.Имя, 20) = "РасширеннаяПодсказка" И НЕ ЗначениеЗаполнено(Элем.Заголовок) Тогда
			Если УЭлементаДолжнаБытьРасширеннаяПодсказка(Элем.Имя, ИменаЭлементовСРасширеннойПодсказкой) Тогда
				Ошибки.Добавить("Элемент <" + Элем.Имя + ">, пустая расширенная подсказка");
			КонецЕсли;
		КонецЕсли;

	КонецЦикла;

	Для Каждого Элем Из Команды Цикл

		Попытка
			Если ВСтрокеЕстьРусскиеБуквыСлужебный(Элем.Заголовок) Тогда
				Ошибки.Добавить("Команда <" + Элем.Имя + ">, заголовок <" + Элем.Заголовок + ">");
			КонецЕсли;
		Исключение
		КонецПопытки;

		Попытка
			Если ВСтрокеЕстьРусскиеБуквыСлужебный(Элем.Подсказка) Тогда
				Ошибки.Добавить("Элемент <" + Элем.Имя + ">, подсказка <" + Элем.Подсказка + ">");
			КонецЕсли;
		Исключение
		КонецПопытки;
	КонецЦикла;

	Возврат Ошибки;

КонецФункции

&НаКлиенте

Функция ПроверкаУникальностиЗаголовковЭлементов()

	ИменаЭлементовДляПроверки = Новый Соответствие;

	Ошибки = Новый Массив;
	Для Каждого Элем Из Элементы Цикл

		Если Лев(Элем.Имя, 17) = "МенюЗагрузитьФичи" Тогда
			Продолжить;
		КонецЕсли;

		Если ЭтоАвтокнопкиТаблиц(Элем.Имя, Элем) Тогда
			Продолжить;
		КонецЕсли;

		ИменаЭлементовДляПроверки.Вставить(Элем.Имя, Элем.Имя);

	КонецЦикла;

	ПроверкаУникальностиЗаголовковЭлементовСервер(Ошибки, ИменаЭлементовДляПроверки);

	Возврат Ошибки;

КонецФункции

&НаСервере

Процедура ПроверкаУникальностиЗаголовковЭлементовСервер(Ошибки, Знач ИменаЭлементовДляПроверки)

	ОбъектСервер = РеквизитФормыВЗначение("Объект");

	КешЭлементов = Новый Соответствие;
	ВыведенныеЭлементы = Новый Соответствие;

	Для Каждого Элем Из Элементы Цикл

		Если ИменаЭлементовДляПроверки[Элем.Имя] = Неопределено Тогда
			Продолжить;
		КонецЕсли;

		Если НЕ НадоПроверятьУникальностьЗаголовка(Элем.Имя) Тогда
			Продолжить;
		КонецЕсли;

		ЗаголовокЭлемента = ЗаголовокЭлементаVAСервер(ОбъектСервер, Элем);

		Если ТипЗнч(Элем) = Тип("ГруппаФормы") ИЛИ ТипЗнч(Элем) = Тип("ДекорацияФормы") Тогда
			Продолжить;
		КонецЕсли;

		ЗаголовокЭлементаПоиск = НРег(СокрЛП(ЗаголовокЭлемента));

		Если НЕ ЗначениеЗаполнено(ЗаголовокЭлементаПоиск) Тогда
			Продолжить;
		КонецЕсли;

		Если КешЭлементов[ЗаголовокЭлементаПоиск] <> Неопределено Тогда

			ДанныеЭлементаИзКеш = КешЭлементов[ЗаголовокЭлементаПоиск];

			ИмяКоманды = "";

			Если ТипЗнч(Элем) = Тип("КнопкаФормы") И ТипЗнч(ДанныеЭлементаИзКеш) = Тип("КнопкаФормы") Тогда
				Если Элем.ИмяКоманды = ДанныеЭлементаИзКеш.ИмяКоманды Тогда
					//Если есть две кнопки с одинаковым заголовком и они ссылаются на одну команду, то это не ошибка.
					Продолжить;
				КонецЕсли;

			ИначеЕсли ТипЗнч(Элем) = Тип("ПолеФормы") И ТипЗнч(ДанныеЭлементаИзКеш) = Тип("ПолеФормы") Тогда
				Если Элем.ПутьКДанным = ДанныеЭлементаИзКеш.ПутьКДанным И ЗначениеЗаполнено(Элем.ПутьКДанным) Тогда
					//Если есть два поля, которые ссылаются на один реквизит, то это не ошибка.
					Продолжить;
				КонецЕсли;

			КонецЕсли;

			Если ВыведенныеЭлементы[Элем.Имя] = Неопределено Тогда
				СтрокаОшибки = "Имя=" + Элем.Имя + "; Заголовок=" + ЗаголовокЭлемента + "; Тип=" + ТипЗнч(Элем);
				Если ТипЗнч(Элем) = Тип("КнопкаФормы") Тогда
					СтрокаОшибки = СтрокаОшибки + "; ИмяКоманды=" + Элем.ИмяКоманды;
				КонецЕсли;
				Ошибки.Добавить(СтрокаОшибки);
				ВыведенныеЭлементы.Вставить(Элем.Имя, Элем.Имя);
			КонецЕсли;

			Если Найти(СтрокаОшибки, "Имя=" + ДанныеЭлементаИзКеш.Имя + ";") = 0 Тогда
				Если ВыведенныеЭлементы[ДанныеЭлементаИзКеш.Имя] = Неопределено Тогда
					СтрокаОшибки = "Имя=" + ДанныеЭлементаИзКеш.Имя + "; Заголовок=" + ЗаголовокЭлементаVAСервер(ОбъектСервер, ДанныеЭлементаИзКеш) + "; Тип=" + ТипЗнч(ДанныеЭлементаИзКеш);
					Если ТипЗнч(ДанныеЭлементаИзКеш) = Тип("КнопкаФормы") Тогда
						СтрокаОшибки = СтрокаОшибки + "; ИмяКоманды=" + ДанныеЭлементаИзКеш.ИмяКоманды;
					КонецЕсли;
					Ошибки.Добавить(СтрокаОшибки);
					ВыведенныеЭлементы.Вставить(ДанныеЭлементаИзКеш.Имя, ДанныеЭлементаИзКеш.Имя);
				КонецЕсли;
			КонецЕсли;
			Продолжить;
		КонецЕсли;

		КешЭлементов.Вставить(ЗаголовокЭлементаПоиск, Элем);

	КонецЦикла;

КонецПроцедуры

&НаСервере

[Assistant] Функция ШаблонРазличийДвухСтрок(Стр1, Стр2, МаксСчетчикПроверок)


[System] Ты анализируешь код 1С и подбираешь точные имена для процедур и функций.

[User]
Восстанови осмысленное имя процедуры или функции на 1С по её телу. Верни только полную сигнатуру первой строки.

Функция ИмяФункции(ИмяЭлемента)

	Если Найти(ИмяЭлемента, "МенюЗагрузитьФичи") > 0 Тогда
		Возврат Ложь;
	ИначеЕсли Найти(ИмяЭлемента, "МенюЗагрузитьФичиVanessaEditor") > 0 Тогда
		Возврат Ложь;
	ИначеЕсли ИмяЭлемента = "СгенерированныйКод" Тогда
		Возврат Ложь;
	ИначеЕсли ИмяЭлемента = "СгенерированныйСценарийКод" Тогда
		Возврат Ложь;
	ИначеЕсли ИмяЭлемента = "ДанныеКлиентовТестированияИмя" Тогда
		Возврат Ложь;
	ИначеЕсли ИмяЭлемента = "СписокФайловИмя" Тогда
		Возврат Ложь;
	ИначеЕсли ИмяЭлемента = "НастройкиДругогоДвижкаTTSЗначение" Тогда
		Возврат Ложь;
	ИначеЕсли ИмяЭлемента = "КаталогиБиблиотекЗначение" Тогда
		Возврат Ложь;
	ИначеЕсли ИмяЭлемента = "СтрокаСтатуса" Тогда
		Возврат Ложь;
	ИначеЕсли ИмяЭлемента = "НастройкиДругогоДвижкаTTS" Тогда
		Возврат Ложь;
	ИначеЕсли Лев(ИмяЭлемента, 12) = "ДеревоТестов" Тогда
		Возврат Ложь;
	КонецЕсли;

	Возврат Истина;
КонецФункции

&НаКлиентеНаСервереБезКонтекста

Функция ВСтрокеЕстьРусскиеБуквыСлужебный(Знач Стр)

	Стр = НРег(Стр);

	Если Найти(Стр, "а") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "б") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "в") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "г") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "д") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "е") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "ё") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "ж") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "з") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "и") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "й") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "к") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "л") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "м") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "н") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "о") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "п") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "р") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "с") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "т") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "у") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "ф") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "х") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "ц") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "ч") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "ш") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "щ") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "ъ") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "ы") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "ь") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "э") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "ю") > 0 Тогда
		Возврат Истина;
	ИначеЕсли Найти(Стр, "я") > 0 Тогда
		Возврат Истина;
	КонецЕсли;

	Возврат Ложь;

КонецФункции

&НаКлиенте

Функция УбратьПустыеСтрокиИЛишниеСимволыИзТекстаИсключения(Знач Стр)
	МассивСтрок = _СтрРазделить(Стр, Символы.ПС);
	НовыйМассив = Новый Массив;
	Для Сч = 0 По МассивСтрок.Количество()-1 Цикл
		ТекСтр = СокрЛП(МассивСтрок[Сч]);
		Если ЗначениеЗаполнено(ТекСтр) Тогда
			НовыйМассив.Добавить(ТекСтр);
		КонецЕсли;
	КонецЦикла;

	Возврат _СтрСоединить(НовыйМассив, Символы.ПС);

КонецФункции

&НаКлиенте

Функция ДанныеШагаДляТекстовойИнструкции(ТекШаг)
	Результат = Новый Структура;
	Результат.Вставить("УчаствуетВИнструкции", Истина);
	Результат.Вставить("ТекстГруппы", "");
	Результат.Вставить("ИдГруппы", "");
	Результат.Вставить("ШагИмеетТегScreenshot", "");
	Результат.Вставить("ВГруппеЕстьШагиСТегомScreenshot", "");

	Если Объект.ТекстовыеИнструкцииГруппаШаговКакШаг Тогда
		ГруппаВерхнегоУровняДляШага = СтрокаДереваГруппаВерхнегоУровняДляШага(ТекШаг);
		Если ГруппаВерхнегоУровняДляШага <> Неопределено Тогда
			ТекстГруппы = ГруппаВерхнегоУровняДляШага.Имя;
			Если Лев(ТекстГруппы, 1) = "*" Тогда
				ТекстГруппы = СокрЛП(Сред(ТекстГруппы, 2));
			КонецЕсли;

			Результат.Вставить("ТекстГруппы", ТекстГруппы);
			Результат.Вставить("ИдГруппы", ГруппаВерхнегоУровняДляШага.ИдСтроки);

			Если ВГруппеЕстьШагиСТегом(ГруппаВерхнегоУровняДляШага, "screenshot") Тогда
				Результат.Вставить("ВГруппеЕстьШагиСТегомScreenshot", "true");
				Результат.Вставить("УчаствуетВИнструкции", ШагИмеетТег(ТекШаг, "screenshot"));
			КонецЕсли;

			Если ШагИмеетТег(ТекШаг, "screenshot") Тогда
				Результат.Вставить("ШагИмеетТегScreenshot", "true");
			Иначе
				Результат.Вставить("ШагИмеетТегScreenshot", "false");
			КонецЕсли;

		КонецЕсли;
	//+++ ЦВ_ПР 25.11.2025 Часть шагов точно можно исключить для инструкции.
	Иначе
		Если ТекШаг.Свойство("ДопТип") И
			(ТекШаг.ДопТип = "Условие" ИЛИ ТекШаг.ДопТип = "Цикл" ИЛИ ТекШаг.ДопТип = "УсловиеИначеЕсли"
			ИЛИ ТекШаг.ДопТип = "Попытка" ИЛИ ТекШаг.ДопТип = "Исключение") Тогда
			Результат.Вставить("УчаствуетВИнструкции", Ложь);
 		КонецЕсли;
	//--- ЦВ_ПР 25.11.2025

	КонецЕсли;

	Возврат Результат;

КонецФункции

&НаКлиенте

Функция СтрокаДереваГруппаВерхнегоУровняДляШага(ТекШаг)

	СтрокаДерева = ПолучитьСтрокуШагаИзДанныхФормы(ТекШаг.ИдСтроки);
	ТекРодитель = СтрокаДерева.ПолучитьРодителя();

	ТекРезультат = Неопределено;

	Пока Истина Цикл
		Если ТекРодитель.Тип = "Сценарий" Тогда
			Прервать;
		КонецЕсли;

		Если ТекРодитель.Тип = "Область" И Лев(СокрЛ(ТекРодитель.Имя), 1) = "*" Тогда
			ТекРезультат = ТекРодитель;
		Иначе
			ТекРезультат = Неопределено;
		КонецЕсли;

		ТекРодитель = ТекРодитель.ПолучитьРодителя();
		Если ТекРодитель = Неопределено Тогда
			Прервать;
		КонецЕсли;

	КонецЦикла;

	Возврат ТекРезультат;

КонецФункции

&НаКлиенте

Функция ВГруппеЕстьШагиСТегом(СтрокаДерева, Тег)

	СтрокиГруппыШагов = СтрокиГруппыШаговДерева(СтрокаДерева);
	Для Каждого ТекСтрока Из СтрокиГруппыШагов Цикл
		ТекШаг = ШагПоИдСтроки(ТекСтрока.ИДСтроки);
		Если ШагИмеетТег(ТекШаг, Тег) Тогда
			Возврат Истина;
		КонецЕсли;

	КонецЦикла;

	Возврат Ложь;

КонецФункции

&НаКлиентеНаСервереБезКонтекста

Функция ШагИмеетТег(ТекШаг, Тег)

	Если ТекШаг.Свойство("МассивТеговШага") И ТипЗнч(ТекШаг.МассивТеговШага) = Тип("Массив") Тогда
		Для Каждого ТекТег Из ТекШаг.МассивТеговШага Цикл
			Если НРег(Тег) = НРег(ТекТег) Тогда
				Возврат Истина;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;

	Возврат Ложь;

КонецФункции

&НаКлиенте

Функция СтрокиГруппыШаговДерева(СтрокаДерева)

	Результат = Новый Массив;

	СтрокиГруппыШаговДереваРекурсивно(Результат, СтрокаДерева);

	Возврат Результат;

КонецФункции

&НаКлиенте

Процедура СтрокиГруппыШаговДереваРекурсивно(Результат, СтрокаДерева)

	Для Каждого ТекСтрока Из СтрокаДерева.ПолучитьЭлементы() Цикл
		Если ТекСтрока.Тип = "Шаг" Тогда
			Результат.Добавить(ТекСтрока);
		КонецЕсли;
		СтрокиГруппыШаговДереваРекурсивно(Результат, ТекСтрока);

	КонецЦикла;

КонецПроцедуры

&НаКлиенте

Функция ШагПоИдСтроки(ИДСтроки)

	Для Каждого ТекШаг Из МассивСценариевДляВыполнения[ТекИД_СценарияВМассиве].Шаги Цикл
		Если ТекШаг.ИДСтроки = ИДСтроки Тогда
			Возврат ТекШаг;
		КонецЕсли;
	КонецЦикла;

	Возврат Неопределено;

КонецФункции

&НаКлиенте

[Assistant] Функция НадоПроверятьУникальностьЗаголовка(ИмяЭлемента)


[System] Ты анализируешь код 1С и подбираешь точные имена для процедур и функций.

[User]
Восстанови осмысленное имя процедуры или функции на 1С по её телу. Верни только полную сигнатуру первой строки.

Функция ИмяФункции(Стр)

	МассивСтрок = _СтрРазделить(Стр, Символы.ПС);
	НовыйМассивСтрок = Неопределено;
	Для Сч = 0 По МассивСтрок.Количество()-1 Цикл
		ТекСтр = МассивСтрок[Сч];
		Если ТекСтр = "Ошибки:" Тогда
			НовыйМассивСтрок = Новый Массив;
			Для Сч2 = Сч + 1 По МассивСтрок.Количество()-1 Цикл
				НовыйМассивСтрок.Добавить(МассивСтрок[Сч2]);
			КонецЦикла;
		КонецЕсли;
	КонецЦикла;

	Если НовыйМассивСтрок = Неопределено Тогда
		НовыйМассивСтрок = МассивСтрок;
	КонецЕсли;

	Спс = Новый СписокЗначений;
	Кеш = Новый Соответствие;
	Для Сч = 0 По НовыйМассивСтрок.Количество() - 1 Цикл
		ТекСтр = НовыйМассивСтрок[Сч];

		Если НЕ СтрокаСодержитТекстИсключенияПроверкиСерверныхВызововВОбработчикахСобытий(ТекСтр) Тогда
			Продолжить;
		КонецЕсли;

		Если Кеш[ТекСтр] <> Неопределено Тогда
			Продолжить;
		КонецЕсли;
		Кеш.Вставить(ТекСтр, Истина);

		Спс.Добавить(ТекСтр);
	КонецЦикла;

	Спс.СортироватьПоЗначению();

	Если Спс.Количество() = 0 Тогда
		Возврат "";
	КонецЕсли;

	Возврат _СтрСоединить(Спс.ВыгрузитьЗначения(), Символы.ПС);

КонецФункции

&НаКлиенте

Функция ТабличыйДокументПоМассивуМассивов(Массив)

	ТабДок = Новый ТабличныйДокумент;

	СчСтрок = 0;
	Для Каждого ТекСтрока Из Массив Цикл
		СчСтрок = СчСтрок + 1;
		СчКолонок = 0;
		Для Каждого ТекЗначение Из ТекСтрока Цикл
			СчКолонок = СчКолонок + 1;
			ТабДок.Область(СчСтрок,СчКолонок,СчСтрок,СчКолонок).Текст = ТекЗначение;
		КонецЦикла;
	КонецЦикла;

	Возврат ТабДок;

КонецФункции

&НаКлиенте

Функция КонтекстДляПередачиНаСервер()

	Результат = Новый Структура;

	Если ТипЗнч(ОбъектКонтекст) = Тип("Структура") Тогда
		Для Каждого Элем Из ОбъектКонтекст Цикл
			Если ЭтоСлужебнаяПеременаяКонтекста(Элем.Ключ) Тогда
				Продолжить;
			КонецЕсли;

			Результат.Вставить(Элем.Ключ, Элем.Значение);

		КонецЦикла;
	КонецЕсли;

	Возврат Результат;

КонецФункции

&НаКлиенте

Функция КонтекстСохранямыйДляПередачиНаСервер()

	Результат = Новый Структура;

	Если ТипЗнч(ОбъектКонтекстСохраняемый) = Тип("Структура") Тогда
		Для Каждого Элем Из ОбъектКонтекстСохраняемый Цикл
			Если ЭтоСлужебнаяПеременаяКонтекста(Элем.Ключ) Тогда
				Продолжить;
			КонецЕсли;

			Результат.Вставить(Элем.Ключ, Элем.Значение);

		КонецЦикла;
	КонецЕсли;

	Возврат Результат;

КонецФункции

&НаКлиенте

Функция СлужебныеПеременныеДляПередачиНаСервер()

	Результат = Новый Структура;
	Результат.Вставить("КаталогПроекта", Объект.КаталогПроекта);
	Результат.Вставить("КаталогИнструментов", Объект.КаталогИнструментов);
	Результат.Вставить("КаталогФичи", КаталогТекущегоИсполняемогоФичаФайла);
	Результат.Вставить("InstrPath", Объект.КаталогИнструментов);
	Результат.Вставить("ProjectPath", Объект.КаталогПроекта);
	Результат.Вставить("FeaturePath", КаталогТекущегоИсполняемогоФичаФайла);
	Возврат Результат;

КонецФункции

&НаСервере

Процедура ЯВыполняюКодВстроенногоЯзыкаНаСервереСПередачейПеременныхСервер(Стр, Контекст, КонтекстСохраняемый, СлужебныеПеременные)

	глТипСтрока = Тип("Строка");
	ТолькоСтроки = Истина;

	Context           = Контекст;
	PersistentContext = КонтекстСохраняемый;
	SavedContext      = КонтекстСохраняемый;

	Если Найти(Стр, "$") > 0 Тогда
		Для Каждого Элем Из СлужебныеПеременные Цикл
			Если ТипЗнч(Элем.Значение) = глТипСтрока ИЛИ НЕ ТолькоСтроки Тогда
				Стр = СтрЗаменить(Стр, "$" + Элем.Ключ + "$", Элем.Значение);
			КонецЕсли;
		КонецЦикла;

		Для Каждого Элем Из Контекст Цикл
			Если ТипЗнч(Элем.Значение) = глТипСтрока ИЛИ НЕ ТолькоСтроки Тогда
				//Для других типов это делать нельзя, т.к. шаги могут ожидать числа, строки, массивы и т.д., а тут идёт преобразование к строке.
				//Если убрать ограничение, то не будет работать передача переменных других типов, т.к. значения обернутые в $ будут сразу преобразовываться к строке
				//Т.е. перестанут работать такие шаги:
				//Тогда в переменной "$ЧисловаяПеременная$" будет находится значение типа "Число"
				Стр = СтрЗаменить(Стр, "$" + Элем.Ключ + "$", Элем.Значение);
			КонецЕсли;
		КонецЦикла;

		Для Каждого Элем Из КонтекстСохраняемый Цикл
			Если ТипЗнч(Элем.Значение) = глТипСтрока ИЛИ НЕ ТолькоСтроки Тогда
				//Для других типов это делать нельзя, т.к. шаги могут ожидать числа, строки, массивы и т.д., а тут идёт преобразование к строке.
				Стр = СтрЗаменить(Стр, "$$" + Элем.Ключ + "$$", Элем.Значение);
			КонецЕсли;
		КонецЦикла;

	КонецЕсли;

	Выполнить(Стр);

КонецПроцедуры

&НаСервереБезКонтекста

Процедура ЯВыполняюКодВстроенногоЯзыкаНаСервереБезКонтекстаСПередачейПеременныхСервер(Стр, Контекст, КонтекстСохраняемый, СлужебныеПеременные)

	глТипСтрока = Тип("Строка");
	ТолькоСтроки = Истина;

	Context           = Контекст;
	PersistentContext = КонтекстСохраняемый;
	SavedContext      = КонтекстСохраняемый;

	Если Найти(Стр, "$") > 0 Тогда
		Для Каждого Элем Из СлужебныеПеременные Цикл
			Если ТипЗнч(Элем.Значение) = глТипСтрока ИЛИ НЕ ТолькоСтроки Тогда
				Стр = СтрЗаменить(Стр, "$" + Элем.Ключ + "$", Элем.Значение);
			КонецЕсли;
		КонецЦикла;

		Для Каждого Элем Из Контекст Цикл
			Если ТипЗнч(Элем.Значение) = глТипСтрока ИЛИ НЕ ТолькоСтроки Тогда
				//Для других типов это делать нельзя, т.к. шаги могут ожидать числа, строки, массивы и т.д., а тут идёт преобразование к строке.
				//Если убрать ограничение, то не будет работать передача переменных других типов, т.к. значения обернутые в $ будут сразу преобразовываться к строке
				//Т.е. перестанут работать такие шаги:
				//Тогда в переменной "$ЧисловаяПеременная$" будет находится значение типа "Число"
				Стр = СтрЗаменить(Стр, "$" + Элем.Ключ + "$", Элем.Значение);
			КонецЕсли;
		КонецЦикла;

		Для Каждого Элем Из КонтекстСохраняемый Цикл
			Если ТипЗнч(Элем.Значение) = глТипСтрока ИЛИ НЕ ТолькоСтроки Тогда
				//Для других типов это делать нельзя, т.к. шаги могут ожидать числа, строки, массивы и т.д., а тут идёт преобразование к строке.
				Стр = СтрЗаменить(Стр, "$$" + Элем.Ключ + "$$", Элем.Значение);
			КонецЕсли;
		КонецЦикла;

	КонецЕсли;

	Выполнить(Стр);

КонецПроцедуры

&НаСервереБезКонтекста

[Assistant] Функция ПодготовитьТекстИсключенияПроверкиСерверныхВызововВОбработчикахСобытий(Стр)


[System] Ты анализируешь код 1С и подбираешь точные имена для процедур и функций.

[User]
Восстанови осмысленное имя процедуры или функции на 1С по её телу. Верни только полную сигнатуру первой строки.

Функция ИмяФункции(Знач Стр)

	НайденоНачалоПароля = Ложь;
	НомерСимволаНачалоПароля = 0;
	НомерСимволаКонецПароля = 0;
	Для Сч = 1 По СтрДлина(Стр) - 1 Цикл
		ТекСимвол = Сред(Стр, Сч, 1);
		СледующийСимвол = Сред(Стр, Сч + 1, 1);
		Если (ТекСимвол = "/" И СледующийСимвол = "P") ИЛИ (ТекСимвол = "/" И СледующийСимвол = "p") Тогда
			НайденоНачалоПароля = Истина;
			НомерСимволаНачалоПароля = Сч + 2;
			Прервать;
		КонецЕсли;
	КонецЦикла;

	Если НЕ НайденоНачалоПароля Тогда
		Возврат Стр;
	КонецЕсли;

	Если НомерСимволаНачалоПароля > СтрДлина(Стр) Тогда
		Возврат Стр;
	КонецЕсли;

	ПервыйСимволПароля = Сред(Стр, НомерСимволаНачалоПароля, 1);
	ПромСтр = Сред(Стр, НомерСимволаНачалоПароля + 1);
	Если ПервыйСимволПароля = """" Тогда
		Поз = Найти(ПромСтр, """");
		Если Поз > 0 Тогда
			НомерСимволаКонецПароля = Поз + НомерСимволаНачалоПароля;
		Иначе
			НомерСимволаКонецПароля = СтрДлина(ПромСтр) + НомерСимволаНачалоПароля;
		КонецЕсли;
	Иначе
		Поз = Найти(ПромСтр, " ");
		Если Поз > 0 Тогда
			НомерСимволаКонецПароля = Поз + НомерСимволаНачалоПароля - 1;
		Иначе
			НомерСимволаКонецПароля = СтрДлина(ПромСтр) + НомерСимволаНачалоПароля;
		КонецЕсли;
	КонецЕсли;

	Если ПервыйСимволПароля = """" Тогда
		ЛеваяЧасть = Лев(Стр, НомерСимволаНачалоПароля);
		ПраваяЧасть = Сред(Стр, НомерСимволаКонецПароля);
		Возврат ЛеваяЧасть + "*****" + ПраваяЧасть;
	Иначе
		ЛеваяЧасть = Лев(Стр, НомерСимволаНачалоПароля - 1);
		ПраваяЧасть = Сред(Стр, НомерСимволаКонецПароля + 1);
		Возврат ЛеваяЧасть + "*****" + ПраваяЧасть;
	КонецЕсли;

КонецФункции

&НаСервереБезКонтекста

Процедура АвторизацияСинтезРечи1СНаСервере(Логин, Пароль)
	ТекРаботаСРечью = Вычислить("РаботаСРечью");
	ТекРаботаСРечью.ВыполнитьРегистрациюИнформационнойБазы(Логин, Пароль);
КонецПроцедуры

&НаКлиенте

Процедура ВыполнитьАвторизациюВСервисеСинтезаРечи1С()

	Если НЕ ЗначениеЗаполнено(Объект.ЗаписьВидео1СПароль) Тогда
		ТекстОшибки = Локализовать("Не указан пароль для авторизации в сервисе синтеза речи 1С");
		ВызватьИсключение ТекстОшибки;
	КонецЕсли;

	Если НЕ ФайлСуществуетКомандаСистемы(Объект.ЗаписьВидео1СПароль) Тогда
		ВызватьИсключение ПодставитьПараметрыВСтроку(
			Локализовать("Файл <%1> не найден."),
			Объект.ЗаписьВидео1СПароль
		);
	КонецЕсли;

	Текст = Новый ЧтениеТекста;
	Текст.Открыть(Объект.ЗаписьВидео1СПароль, "UTF-8");
	Пароль = СокрЛП(Текст.Прочитать());
	Текст.Закрыть();

	Если НЕ ЗначениеЗаполнено(Пароль) Тогда
		ТекстОшибки = Локализовать("Указан пустой пароль для авторизации в сервисе синтеза речи 1С");
		ВызватьИсключение ТекстОшибки;
	КонецЕсли;

	АвторизацияСинтезРечи1СНаСервере(Объект.ЗаписьВидео1СЛогин, Пароль);

	ВыполненаАвторизацияСервисаСинтеза1С = Истина;

	СообщитьПользователю(Локализовать("Авторизация в сервисе синтеза речи выполнена успешно"));

КонецПроцедуры

&НаКлиенте

Функция ЯзыкФичиИзТекста(Текст)
	МассивСтрок = _СтрРазделить(Текст, Символы.ПС);
	Для Сч = 0 По МассивСтрок.Количество()-1 Цикл
		Стр = НРег(МассивСтрок[Сч]);
		Поз = Найти(Стр, "#language:");
		Если Поз > 0 Тогда
			Значение = НРег(СокрЛП(Сред(Стр, Поз + 11)));
			Если ЗначениеЗаполнено(Значение) Тогда
				Возврат Значение;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;

	Возврат "";

КонецФункции

&НаКлиенте

Функция ЭтоПолеДатыКлиентаТестирования(Поле)

	Попытка
		ТекстРедактирования = Поле.ПолучитьТекстРедактирования();

		Если ЭтоСтрокаПустойДаты(ТекстРедактирования) Тогда
			Возврат Истина;
		КонецЕсли;

	Исключение
	КонецПопытки;

	Возврат Ложь;

КонецФункции

&НаКлиенте

Функция ЭтоСтрокаПустойДаты(Стр)

	Если СокрЛП(Стр) = ".  ." Тогда
		Возврат Истина;
	ИначеЕсли СокрЛП(Стр) = ".  .       :  :" Тогда
		Возврат Истина;
	ИначеЕсли Стр = "  .    " Тогда
		Возврат Истина;
	КонецЕсли;

	Возврат Ложь;

КонецФункции

&НаКлиенте

Функция КешИДСценариевМассивСценариевДляВыполнения(МассивСценариевДляВыполнения)

	Результат = Новый Соответствие;
	Для Каждого Элем Из МассивСценариевДляВыполнения Цикл
		Результат.Вставить(Элем.СтрокаДерева, Элем);
	КонецЦикла;

	Возврат Результат;

КонецФункции

&НаКлиенте

Функция КешШагиСценария(Шаги)

	Результат = Новый Соответствие;

	Для Каждого Элем Из Шаги Цикл
		Результат.Вставить(Элем.ИдСтроки, Элем);
	КонецЦикла;

	Возврат Результат;

КонецФункции

&НаСервереБезКонтекста

Функция РасширениеУстановленоСрвер(ИмяРасширения)

	Попытка
		УстановленныеРасширения = Вычислить("РасширенияКонфигурации").Получить();
	Исключение
		Возврат Ложь;
	КонецПопытки;

	Если УстановленныеРасширения = Неопределено Тогда
		Возврат Ложь;
	КонецЕсли;

	Для Каждого Расширение Из УстановленныеРасширения Цикл
		Если НРег(Расширение.Имя) = НРег(ИмяРасширения) И Расширение.Активно Тогда
			Возврат Истина;
		КонецЕсли;
	КонецЦикла;

	Возврат Ложь;

КонецФункции

#КонецОбласти

#Область Настройки

#Область СохранениеНастроек

&НаСервере

Процедура СохранитьНастройки()

	Если Объект.РежимСамотестирования Тогда
		Возврат;
	КонецЕсли;

	ДопПараметры = Новый Структура;
	ДопПараметры.Вставить("НастройкиВыгрузки", Истина);
	Настройки = ТекущиеОбщиеНастройки(ДопПараметры);

	ХранилищеОбщихНастроек.Сохранить(ПолучитьИДСохраненияОбщихНастроек(Объект.РежимСамотестирования, Объект.ВерсияПоставки, ЭтоРежимОбученияСервер()), , Настройки);

	Если Объект.СлужебныеПараметры.Свойство("НастройкиВидимостиКнопокКоманднойПанелиРедактора") Тогда
		ХранилищеОбщихНастроек.Сохранить(ПолучитьИДСохраненияВидимостиКнопокКоманднойПанели(), , Объект.СлужебныеПараметры.НастройкиВидимостиКнопокКоманднойПанелиРедактора);
	КонецЕсли;

КонецПроцедуры

#КонецОбласти

#Область ВосстановлениеНастроек

&НаКлиенте

[Assistant] Функция УбратьПарольПользователяИзСтроки(Знач Стр)


[System] Ты анализируешь код 1С и подбираешь точные имена для процедур и функций.

[User]
Восстанови осмысленное имя процедуры или функции на 1С по её телу. Верни только полную сигнатуру первой строки.

Функция ИмяФункции(Знач Значение)

	Если ТипЗнч(Значение) = Тип("Булево") Тогда
	    Возврат Значение;
	КонецЕсли;

	Если ТипЗнч(Значение) = Тип("Строка") Тогда
		Если НРег(Значение) = "истина"
			Или Значение = "1"
			Или НРег(Значение) = "true" Тогда
			Результат = Истина;
		ИначеЕсли НРег(Значение) = "ложь"
			Или Значение = "0"
			Или НРег(Значение) = "false" Тогда
			Результат = Ложь;
		Иначе
			Результат = СокрЛП(Значение);
		КонецЕсли;
	ИначеЕсли ТипЗнч(Значение) = Тип("Число") Тогда
		Результат = Значение;
	ИначеЕсли ТипЗнч(Значение) = Тип("Структура") Тогда
		Результат = Значение;
	ИначеЕсли ТипЗнч(Значение) = Тип("Массив") Тогда
		МассивПараметров = Новый Массив;
		Если ТипЗнч(Значение) = Тип("Строка") Тогда
			МассивПараметров = РазложитьСтрокуВМассивПодстрок(Значение, ",");
		ИначеЕсли ТипЗнч(Значение) = Тип("Массив") Тогда
			МассивПараметров = Значение;
		КонецЕсли;
		Результат = МассивПараметров;
	КонецЕсли;

	Возврат Результат;

КонецФункции

&НаКлиентеНаСервереБезКонтекста

Функция ОбработатьСпецсимволыПриЧтенииНастроек(Знач Стр, Знач КаталогПроекта, Знач КаталогИнструментов, Знач ДополнительныеПараметры = Неопределено)
	Если Лев(Стр, 1) = "."  Тогда
		Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") И ДополнительныеПараметры.Свойство("РазделительПути") Тогда
			РазделительПути = ДополнительныеПараметры.РазделительПути;
		Иначе
			РазделительПути = "/";
		КонецЕсли;
		Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") И ДополнительныеПараметры.Свойство("ЭтоLinuxКлиент") Тогда
			ЭтоLinuxКлиент = ДополнительныеПараметры.ЭтоLinuxКлиент;
		Иначе
			ЭтоLinuxКлиент = Неопределено;
		КонецЕсли;
		Если ТипЗнч(ДополнительныеПараметры) = Тип("Структура") И ДополнительныеПараметры.Свойство("ЭтоLinuxСервер") Тогда
			ЭтоLinuxСервер = ДополнительныеПараметры.ЭтоLinuxСервер;
		Иначе
			ЭтоLinuxСервер = Неопределено;
		КонецЕсли;
		Если ЗначениеЗаполнено(КаталогПроекта) Тогда
			ТекКаталогПроекта = СокрЛП(КаталогПроекта);
			Если Прав(ТекКаталогПроекта, 1) = "\" ИЛИ Прав(ТекКаталогПроекта, 1) = "/" Тогда
				ТекКаталогПроекта = Лев(ТекКаталогПроекта, СтрДлина(ТекКаталогПроекта) - 1);
			КонецЕсли;
			ТекЗнч = Сред(Стр, 2);
			Если Лев(ТекЗнч, 1) = "\" ИЛИ Лев(ТекЗнч, 1) = "/" Тогда
				ТекЗнч = Сред(ТекЗнч, 2);
			КонецЕсли;
			Стр = ТекКаталогПроекта + РазделительПути + ТекЗнч;

			Если ЭтоLinuxКлиент = Ложь И ЭтоLinuxСервер = Ложь Тогда
				Файл = Новый Файл(Стр);
				Стр = Файл.ПолноеИмя
			КонецЕсли;

		КонецЕсли;
	ИначеЕсли Найти(Стр, "$workspaceRoot") > 0 Тогда
		Стр = СтрЗаменить(Стр, "$workspaceRoot", КаталогПроекта);
	ИначеЕсли Найти(Стр, "$instrumentsRoot") > 0 Тогда
		Стр = СтрЗаменить(Стр, "$instrumentsRoot", КаталогИнструментов);
	КонецЕсли;

	Возврат Стр;
КонецФункции

#КонецОбласти

&НаСервереБезКонтекста

Функция ТаблицаИменаКлючейОбщихНастроек()
	ТаблицаИмен = Новый ТаблицаЗначений;
	ТаблицаИмен.Колонки.Добавить("ИмяRU");
	ТаблицаИмен.Колонки.Добавить("ИмяEn");

	Возврат ТаблицаИмен;
КонецФункции

&НаСервереБезКонтекста

[Assistant] Функция ЗначениеСтрокиВБулево(Знач Значение)


[System] Ты анализируешь код 1С и подбираешь точные имена для процедур и функций.

[User]
Восстанови осмысленное имя процедуры или функции на 1С по её телу. Верни только полную сигнатуру первой строки.

Функция ИмяФункции(Знач НижнийРегистр = Ложь)

	ТаблицаИмен = ТаблицаИменаКлючейОбщихНастроек();

	ТаблицаИменНоваяСтрока("StartFeaturePlayer", "startfeatureplayer", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("АдресОтладчика", "testclientdebugaddress", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("АктивизироватьСтроку", "ActivateString", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("БезопасноеВыполнениеШагов", "safeexecutionofsteps", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ВерсияVA", "VersionVA", ТаблицаИмен, НижнийРегистр);

	ТаблицаИменНоваяСтрока("ГенерироватьУФ", "GenerateUF", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СоздаватьОбластиПриГенерацииКода", "CreateRegionsOnCodeGeneration", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ВыводитьТекстМодуляВместоПерегенерацииEPF", "OutputModuleTextInsteadOfRegeneratingEPF", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ВерсияПлатформыДляГенерацииEPF", "platformversiongenerateepf", ТаблицаИмен, НижнийРегистр);

	ТаблицаИменНоваяСтрока("ВыводитьВЛогВыполнениеШагов", "logstepstotext", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПодробныйЛогВыполненияСценариев", "fulllog", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ВыводитьЛогВКонсоль", "outputloginconsole", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("МаскироватьПарольВЛоге", "maskpwdinlog", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИспользоватьПарсерGherkinИзКомпонентыVanessaExt", "usethegherkinparserfromthevanessaextaddin", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПоискФайловСПомощьюКомпонентыVanessaExt", "SearchingForFilesUsingTheVanessaExtComponent", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗвуковоеОповещениеПриОкончанииВыполненияСценария", "soundnotificationwhenscriptends", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПоказыватьОкноОстановкиВыполненияСценария", "ShowWindowForStoppingScriptExecution", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПоказыватьОкноОстановкиЗаписиДействийПользователя", "ShowWindowToStopRecordingUserActions", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИспользоватьДляОстановкиВыполненияСценарияФайл", "UseAFileToStopScriptExecution", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("РазрешеноЗапускатьТолькоОдинКлиентТестирования", "OnlyOneTestClientAllowedToRun", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПроверкаСерверныхВызововВОбработчикахСобытий", "CheckingServerCallsInEventHandlers", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОтображатьЗакладкиСверху", "showbookmarkstop", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПоказыватьРазличияВРедактореОтдельно", "showdifferencesineditorseparately", ТаблицаИмен, НижнийРегистр);

	ТаблицаИменНоваяСтрока("ВыгружатьСтатусВыполненияСценариевВФайл", "createlogs", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ВыгрузитьPIDTestManager", "returnpidoftestmanager", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ВыполнениеСценариев", "RunningScripts", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ВыполнитьСценарии", "vanessarun", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ВыполнитьСценарииСТекущегоШага", "vanessarunfromthisstep", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ВыполнятьШагиАсинхронно", "makestepsasync", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДанныеАллюрМеток", "DataAllureMarks", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("НастройкиДругогоДвижкаTTS", "SettingsOtherEngineTTS", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДанныеКлиентовТестирования", "datatestclients", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДелатьЛогВыполненияСценариевВЖР", "logtogr", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДелатьЛогВыполненияСценариевВТекстовыйФайл", "logtotext", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДелатьЛогОшибокВТекстовыйФайл", "logerrorstotext", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДелатьОтчетВоВнутреннемФормате", "simplereport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДелатьОтчетВФорматеCucumberJson", "cucumbercreatereport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДелатьОтчетВФорматеjUnit", "junitcreatereport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДелатьОтчетВФорматеАллюр", "allurecreatereport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДелатьОтчетВФорматеСППР", "ModelingCreateReport" , ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДелатьСкриншотПриВозникновенииОшибки", "onerrorscreenshot", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДелатьСообщенияТранслитом", "translatemassage", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДиапазонПортовTestclient", "testclientports", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗакрыватьКлиентТестированияПринудительно", "forceclosetestclient", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОпределятьРеальныйПортНаКоторомЗапустилсяКлиентТестирования", "DetermineTheRealPortOnWhichTheTestingClientWasLaunched", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПутьКadb", "PathToadb", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПовторноЗапускатьСеансКлиентаТестированияПриПодключенииЕслиНеНайденЕгоПроцесс", "starttestclientsessionagainonconnectionifitsprocessisnotfound", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИнтервалЗапускаПроцессаКлиентаТестирования", "testclientprocessstartinterval", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогФайловВыводаСлужебныхСообщений", "DirectoryFilesOutputServiceMessages", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("МодальноеОкноПриЗапускеКлиентаТестированияЭтоОшибка", "modalwindowwhenstartingtestclientiserror", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОтключитьЗапускРеглЗаданийВФайловойБазе", "DisableScheduledJobsExecutionForFileInfobase", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДополнительныеПараметрыЗапускаКлиентаТестирования", "AdditionalParametersForLaunchingTheTestingClient", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ВычислятьВыраженияВФигурныхСкобках", "EvaluateExpressionsInCurlyBraces", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ТаймаутПередПринудительнымЗакрытиемКлиентаТестирования", "timeoutbeforeforciblyclosingtestclient", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДобавлятьКИмениСценарияУсловияВыгрузки", "addtofeaturefilter", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписыватьВидеоВыполненияТестов", "recordtestrunvideo", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КоличествоКадровВидеоВыполненияТестов", "thenumberofframesofvideotestsession", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КомандаЗаписиВидеоВыполненияТестов", "testrecordingvideocommand", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогДляЗаписиВидеоВыполненияТестов", "directoryforrecordingvideotestexecution", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДобавлятьПриНакликиванииМетаИнформацию", "addmetainformationclicking", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДопПараметры", "AddItionalParameters", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДополнительныеПараметры", "dopparams", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗавершитьРаботуСистемы", "vanessashutdown", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗагрузитьСценарии", "loadscenarios", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗагрузкаФичПриОткрытии", "DownloadFeaturesOpen", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗакрытьTestClientПослеЗапускаСценариев", "closetestclient", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидео", "VideoRecording", ТаблицаИмен, НижнийРегистр);

	ТаблицаИменНоваяСтрока("ЗаписьВидео1СЛогин", "1CttsLogin", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидео1СПароль", "1CttsPassword", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидео1СГолос", "1CttsVoice", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидео1ССкоростьРечи", "1CttsSpeed", ТаблицаИмен, НижнийРегистр);

	ТаблицаИменНоваяСтрока("ЗаписьВидеоYandexTTSOauthToken", "yandexttsoauthtoken", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоYandexTTSГолос", "yandexttsvoice", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоYandexTTSИдентификаторКаталога", "yandexttsfolderId", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоYandexTTSApiKey", "yandexttsapikey", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоYandexTTSСкорость", "yandexttsspeed", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоYandexTTSЭмоция", "yandexttsemotion", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоYandexTTSЯзык", "yandexttslanguage", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоYandexTTSВариантЗапроса", "yandexttsquerytype", ТаблицаИмен, НижнийРегистр);

	ТаблицаИменНоваяСтрока("ЗаписьВидеоAmazonГолос", "amazonttsvoice", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоAmazonДвижок", "amazonttsengine", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоAmazonЯзык", "amazonttslanguage", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоAmazonРегион", "amazonttsregion", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоAmazonКлючДоступа", "amazonttskey", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоAmazonСекретныйКлюч", "amazonttssecretkey", ТаблицаИмен, НижнийРегистр);

	ТаблицаИменНоваяСтрока("ЗаписьВидеоСберTTSClientID", "sberttsclientid", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоСберTTSClientSecret", "sberttsclientsecret", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоСберTTSГолос", "sberttsvoice", ТаблицаИмен, НижнийРегистр);

	ТаблицаИменНоваяСтрока("ЗаписьВидеоГромкостьМузыки", "musicvolume", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоГруппаШаговКакШаг", "groupofstepsasastep", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоДелатьНаложениеTTS", "dotts", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоДобавитьМузыкуКСлайдуЗаголовок", "addmusictofeaturetitleslide", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоДобавитьМузыкуКСлайдуФинал", "addmusictofinalslide", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоДобавлятьСубтитры", "addsubtitles", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоЗаменитьСлайдЗаголовок", "changefeaturetitleslide", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоЗаменитьСлайдФинал", "changefinalslide", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоИмяTTS", "ttsvoice", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоКаталогДляВременныхФайлов", "tempfolderforvideo", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоКаталогМузыки", "musicpath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоКоличествоКадров", "fps", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоКомандаConvert", "convertcomand", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоКомандаFfmpeg", "ffmpegcomand", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоКомандаНачатьЗаписьВидео", "comandrecvideo", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоКэшВидеоВставок", "videocachepath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоКэшироватьВидеоВставки", "cachevideo", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоКэшироватьФайлыTTS", "cachettsfiles", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоКэшФайловTTS", "ttsfilescache", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоОтключитьМасштабированиеШаговПоВремени", "disablescalingofsteps", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоОтключитьСлайдСЗаголовкомФичи", "turnofffeaturetitleslide", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоОтключитьСлайдСценария", "turnoffscenarioslide", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоОтключитьСлайдФинал", "turnofffinalslide", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоПеремещатьКурсорМышкиКАктивномуЭлементуФормы", "movemouse", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоПодсвечиватьАктивныеЭлементыФорм", "showframe", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоПодсвечиватьНажатияМышки", "highlightmouseclicks", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоПроцентУскорения", "accelerationpercentage", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоПутьКДвижкуTTS", "audioenginetts", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоПутьКСлайдуЗаголовок", "featuretitleslidepath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоПутьКСлайдуФинал", "finalslidepath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоСкоростьПроизношения", "speedofspeech", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоСкрытьСлужебныеОкна", "hideservicewindows", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоСловарьЗамен", "changewordslib", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоТипОзвучкиTTS", "ttstype", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоФайлВодянойЗнак", "watermarkfile", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоФайлКурсораМышки", "mousecurfile", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоФормироватьИнструкциюТипHTML", "instructiontypehtml", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоФормироватьИнструкциюТипMarkdown", "instructiontypemarkdown", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоЭмулироватьДвиженияМышкиSikuliX", "emulatemousemovement", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоПутьКОбработкеДвижкаTTS", "pathprocessingenginetts", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоФормироватьИнструкциюТипВидео", "instructiontypevideo", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоИнструмент", "videocapturetool", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоЭкранВысота", "screenheight", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоЭкранШирина", "screenwidth", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоЭкранСлева", "screenleft", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоЭкранСверху", "screentop", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписьВидеоЭмулироватьВводСКлавиатуры", "emulatekeyboardinput", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗапускатьКлиентТестированияСМаксимизированнымОкном", "runtestclientwithmaximizedwindow", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗапускатьТестКлиентВРежимеОтладки", "testclientdebug", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИмяКаталогаЛогОшибок", "texterrorslogname", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("Имя", "Name", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИмяКомпьютера", "ComputerName", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИмяСборки", "buildname", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИмяТекущейСборки", "NameCurrentBuild", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИмяФайлаPIDTestManager", "filenamepidtestmanager", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИмяФайлаВнешнихКомандФреймворка", "fileofcommand", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИмяФайлаЛогВыполненияСценариев", "textlogname", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИнтервалВыполненияШагаЗаданныйПользователем", "SpacingStepSpecifiedUser", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИскатьЭлементыФормыПоИмени", "searchformelementsbyname", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИспользоватьSikuliXСервер", "usesikulixserver", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогВыгрузкиAllure", "allurepath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогВыгрузкиAllureБазовый", "allurepathbase", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогВыгрузкиCucumberJson", "cucumberreportpath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогВыгрузкиСППР", "modelingreportpath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИмяКонфигурацииСППР", "ModelingConfigurationName", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ВерсияКонфигурацииСППР", "ModelingConfigurationVersion", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогВыгрузкиJUnit", "junitpath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогВыгрузкиИнструкцийВидео", "videopath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогВыгрузкиСкриншотов", "outputscreenshot", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогиБиблиотек", "librarycatalogs", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогИнструментов", "instrpath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогВременныхФайлов", "TemporaryFilesDirectory", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогиСкриптовSikuliX", "sikulixscriptpath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогДляГенерацииКартинок", "pathforpicturegeneration", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогИсполняемогоФайла", "pathtoplatform", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогОтносительноКоторогоНадоСтроитьИерархию", "directorytobuildhierarchy", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогПроекта", "projectpath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогФич", "featurepath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КлиентТестирования", "TestClient", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КлиентыТестирования", "testclienttable", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КлючиОтладки", "testclientdebugkeys", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КоличествоПопытокВыполненияДействия", "numberofattemptstoperformanaction", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КоличествоПопытокВыполненияСценария", "NumberOfAttemptsToExecuteTheScript", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КоличествоСекундПоискаОкна", "timetofindwindow", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КомандаОткрытияФичиВТекстовомРедакторе", "commandtoopenfeatureintexteditor", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КомандаСделатьСкриншот", "commandscreenshot", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИспользоватьКомпонентуVanessaExt", "useaddin", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗавершатьРаботуЕслиНеПолучилосьВыполнитьТихуюУстановкуКомпоненты", "QuitIfSilentInstallationAddinFails", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИспользоватьВнешнююКомпонентуДляСкриншотов", "useaddinforscreencapture", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СпособСнятияСкриншотовВнешнейКомпонентой", "screencaptureaddinmethod", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПроцессыДляСнятияСкриншотов", "ProcessesForTakingScreenshots", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("НомерСтрокиДляЗапускаСТекущегоШагаСценария", "stepnumber", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОбновлятьДеревоПриНачалеВыполненияСценария", "updatetreewhenscenariostarts", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОбновлятьСтатистикуВДереве", "updatestatistics", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОстановкаПриВозникновенииОшибки", "stoponerror", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОтчетAllure", "AllureReport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОтчетJUnit", "JUnitReport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОтчетCucumber", "CucumberReport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОтчетСППР", "ModelingReport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПаузаПриОткрытииОкна", "pauseonwindowopening", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("НомерПервогоСценарияДляЗапуска", "NumberFirstScriptForLaunch", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПоказыватьНомерСтрокиДереваПриВозникновенииОшибки", "showrownumberonerror", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПортЗапускаТестКлиента", "PortTestClient", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПриравниватьPendingКFailed", "pendingequalfailed", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("РазличатьBrokenИFailedПоКлючевомуСловуТогда", "distinguishbrokenorfailedbythenkeyword", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ВыполнятьSleepЧерезPing", "dosleepusingping", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗапрещатьПерезаписыватьПеременные", "banoverwritingvariables", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОбновлятьТаблицыФормыПриПолученииЗначения", "updateformtableswhengettingvalue", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПолучатьМакетыСПомощьюРасширенияVAExtension", "getlayoutsusingextensionvaextension", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаменятьТабыНаПробелы", "replacetabswithspaces", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПутьКИнфобазе", "PathToInfobase", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПутьКФайлуДляВыгрузкиСтатусаВыполненияСценариев", "logpath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СниматьСкриншотКаждогоОкна1С", "onerrorscreenshoteverywindow", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СниматьСкриншотыБраузера", "TakeBrowserScreenshots", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("Синоним", "Synonym", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СобиратьДанныеОСостоянииАктивнойФормыПриОшибке", "getactiveformdataonerror", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СобиратьДанныеОСостоянииВсехФормПриОшибке", "getallformsdataonerror", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СобиратьДанныеОСетевыхСоединениях", "collectnetworkconnectiondata", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СобиратьДанныеОПроцессахОС", "collectdataoftheoperatingsystemprocesses", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СобиратьДанныеОЗначенияхПеременных", "CollectDataOnVariableValues", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КомандаЗапускаБраузера", "browserlaunchcommand", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИспользоватьБраузерПлюсWebSocket", "usebrowserwebsocket", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЭмулироватьДвиженияМышкиVanessaExt", "emulatemousemovementswithVanessaExt", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЭмулироватьВводКлавиатурыVanessaExt", "emulatekeyboardinputwithVanessaExt", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СмещениеПоГоризонталиДвиженияМышкиVanessaExt", "hrizontaloffset", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СмещениеПоВертикалиДвиженияМышкиVanessaExt", "verticaloffset", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КоличествоШаговПриДвиженииМышкиVanessaExt", "thenumberofstepswhenmovingthemouse", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПаузаМеждуШагамиПриДвиженииМышкиVanessaExt", "timeoutbetweenstepswhenmovingthemouse", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПодсвечиватьКликМышкиВБраузереVanessaExt", "hlightmouseclicksinbrowser", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЦветПодсветкиКликаМышкиVanessaExt", "mouseclickhighlightcolor", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("РадиусПодсветкиКликаМышкиVanessaExt", "mouseclickhighlightradius", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДлительностьПодсветкиКликаМышкиVanessaExt", "mouseclickhighlightduration", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ТолщинаПодсветкиКликаМышкиVanessaExt", "mouseclickhighlightwidth", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПрозрачностьПодсветкиКликаМышкиVanessaExt", "mouseclickhighlighttransparency", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПоискКартинокСПомощьюКомпонентыVanessaExt", "findingpicturesusingaddinvanessaext", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПорогПоискаКартинки", "PictureSearchThreshold", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИгнорироватьОшибкиПоискаЭлементовВБраузере", "ignorebrowsersearcherrors", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИспользоватьUIAutomation", "UseUIAutomation", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КоэффициентМасштабированияЭкрана", "scalefactor", ТаблицаИмен, НижнийРегистр);

	//ТаблицаИменНоваяСтрока("ИнструкцияHTML", "HTMLInstruction", ТаблицаИмен, НижнийРегистр);
	//ТаблицаИменНоваяСтрока("ИнструкцияMarkdown", "MarkdownInstruction", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СоздаватьИнструкциюHTML", "htmlcreate", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СоздаватьИнструкциюMarkdown", "markdowncreate", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогВыгрузкиИнструкцийHTML", "htmlpath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогВыгрузкиИнструкцийMarkdown", "markdownpath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ВключитьОзвучкуHTML", "EnableHTMLVoiceover", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ТемпОзвучкиHTML", "HTMLVoiceOverTempo", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДиапазонОзвучкиHTML", "HTMLVoiceoverRange", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ГолосОзвучкиHTML", "HTMLVoiceoverVoice", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("АвтонумерацияШагов", "autonumberingofsteps", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ТекстовыеИнструкцииГруппаШаговКакШаг", "TextStepGroupAsStep", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДобавлятьИмяФичиВТекстовуюИнструкцию", "AddFeatureNameToTextInstruction", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДобавлятьИмяСценарияВТекстовуюИнструкцию", "AddScenarioNameToTextInstruction", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СтилиHTMLИнструкции", "htmlstyles", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ВариантСтилейHTMLИнструкции", "VariantsHTMLInstructions", ТаблицаИмен, НижнийРегистр);

	ТаблицаИменНоваяСтрока("СоздаватьИнструкциюВидео", "videocreate", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОзвучиватьВыполнениеСценария", "soundscenarioexecution", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СоздаватьПодкаталогВКаталогеAllureДляЭтойСборки", "createsubfolderforbuild", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СписокИсключаемыхПеременныхAllure", "allureexcludevars", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СписокТеговИсключение", "ignoretags", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СписокТеговОтбор", "filtertags", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ТаймаутДляАсинхронныхШагов", "timeoutforasynchronoussteps", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("МаксимальноеВремяВыполненияДействия", "MaximumExecutionTimeAction", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СписокСценариевДляВыполнения", "scenariofilter", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СписокФичДляВыполнения", "FeaturesToRun", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ТаймаутЗапуска1С", "testclienttimeout", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ТегTreeВключенПоУмолчанию", "thetreetagisenabledbydefault", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ТипКлиента", "ClientType", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("УровеньОтчета1", "reportlevel1", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("УровеньОтчета2", "reportlevel2", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("УровеньОтчета3", "reportlevel3", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ГруппировкаTestSuites", "testsuites", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПрикладыватьКОтчетуAllureЖурналРегистрацииВыполненияСценария", "attacheventlogtotheallurereport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПрикладыватьКОтчетуAllureДанныеОСостоянииАктивнойФормы", "attachactiveformdatatotheallurereport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПрикладыватьКОтчетуAllureДанныеОЗначенияхПеременных", "attachvariablestotheallurereport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПрикладыватьФайлыMxlКОтчетуAllure", "attachmxlfilestoallurereport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПрикладыватьФайлыXlsxКОтчетуAllure", "attachxlsxfilestoallurereport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПрикладыватьФайлыMxlСохраненныеВФорматеHTMLКОтчетуAllure", "attachmxlfilessavedinhtmlformattoallurereport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПрикладыватьДополнительныеДанныеПриСравненииЗначенияСЭталономAllure", "attachadditionaldatawhencomparingvaluewithreferenceallure", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПодставлятьВОтчетеAllureЗначенияПеременных", "setvariablevaluesinstepsallurereport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПрикладыватьКОтчетуAllureДанныеОСостоянииВсехФорм", "attachallformsdatatotheallurereport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПрикладыватьКОтчетуAllureДанныеОСетевыхСоединениях", "attachnetworkconnectiondatatotheallurereport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПрикладыватьКОтчетуAllureДанныеОПроцессахОС", "attachdataoftheoperatingsystemprocessestotheallurereport", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ТегиПропускающиеСценарийAllure", "tagsskippingscript", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЯзыкГенератораGherkin", "gherkinlanguage", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПоставщикПользовательскихНастроек", "usersettingsprovider", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("АдресПользовательскихНастроек", "addressofcustomsettings", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИспользоватьРедакторVanessaEditor", "usevanessaeditor", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ТемаРедактораVanessaEditor", "vanessaeditortheme", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПоказыватьМиниатюруКода", "showcodeminiature", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПроверкаСинтаксисаВРедакторе", "syntaxcheckingineditor", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОтображениеТабуляцииИПробелов", "displayingtabsandspaces", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПриНажатииЭскейпВРедактореЗакрытьФорму", "OnClickingEscapeInTheEditorCloseTheForm", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ИспользоватьДанныеТекущейФормыПриПодбореШагов", "usecurrentformdatawhenselectingsteps", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПоказыватьСтрокиПодсценариевVanessaEditor", "showsubscenariolines", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПоказыватьЗначенияПеременныхВСтрокахРедактора", "ShowVariableValuesInEditorLines", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОткрыватьНачальнуюСтраницуПриЗапуске", "OpenStartPageAtStartup", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СкриншотыjUnit", "junitscreenshots", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗаписыватьСценарииВJunitЧерезTestSuite", "WriteScriptsInjUnitViaTestSuite", ТаблицаИмен, НижнийРегистр);

	ТаблицаИменНоваяСтрока("МетаданныеБиблиотек", "stepsfrommetadata", ТаблицаИмен, НижнийРегистр);

	ТаблицаИменНоваяСтрока("КаталогКешОзвучкиДляИнтерактивнойСправки", "VoiceActingCacheDirectoryForOnlineHelp", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("СоздаватьФайлыОзвучкиДляСправки", "CreateVoiceoversForOnlineHelp", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПодключатьГорячуюКлавишуДляПолученияСправкиОбЭлементе", "ConnectAHotkeyToGetHelpAboutCurrentItem", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ЗакрыватьСценарийИнтерактивнойСправкиПослеВыполнения", "CloseInteractiveHelpScriptAfterExecution", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПоказыватьПомощникПриПервомЗапуске", "ShowHelperOnFirstLaunch", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОтключатьДляПолейВозможностьЗатиранияТекстаПриСерверномВызове", "DisableForFieldsAbilityToOverwriteTextWhenServerCall", ТаблицаИмен, НижнийРегистр);

	ТаблицаИменНоваяСтрока("ОбучениеЗапуститьУрок", "LearningRunLesson", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОбучениеВидео", "LearningVideo", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОбучениеPDF", "LearningPDF", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ОбучениеMD", "LearningMD", ТаблицаИмен, НижнийРегистр);

	ТаблицаИменНоваяСтрока("ИспользоватьШаблонНовойФичи", "UseTemplateForNewFeature", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ПутьКШаблонуНовойФичи", "DirectoryOfNewFeatureTemplate", ТаблицаИмен, НижнийРегистр);

	// Настройки генератора дымовых тестов
	ТаблицаИменНоваяСтрока("ДымовыеТестыЯзыкШагов", "SmokeTestsLanguageSteps", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДымовыеТестыКаталогВыходныхФайлов", "SmokeTestsDirectoryOutputFiles", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДымовыеТестыОчищатьКаталогВыходныхФайлов", "SmokeTestsCleanDirectoryOutputFiles", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДымовыеТестыКаталогФайловИсключений", "SmokeTestsDirectoryFileExceptions", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДымовыеТестыТолькоВведенныеОбъекты", "SmokeTestsOnlyEnteredObjects", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДымовыеТестыТолькоИзмененныеОтностительноКонфигурацииПоставщика", "SmokeTestsOnlyChangedRelativeToVendorConfiguration", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДымовыеТестыИмяКонфигурацииПоставщика", "SmokeTestsVendorConfigurationName", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДымовыеТестыПутьКФайлуНастроекСценариев", "SmokeTestsPathToFileSettingsScripts", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДымовыеТестыНачальнаяДатаДляПодбораДокументов", "SmokeTestsStartingDateForSelectionDocuments", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("ДымовыеТестыСортироватьДокументыПоДатеУбыв", "SmokeTestsSortDocumentsByDescendingDate", ТаблицаИмен, НижнийРегистр);

	// Удалить. Обратная совместимость
	ТаблицаИменНоваяСтрока("КаталогOutputAllure", "allurepath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогOutputAllureБазовый", "allurepathbase", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогOutputCucumberJson", "cucumberreportpath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогOutputjUnit", "junitpath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогOutputИнструкцияHTML", "htmlpath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогOutputИнструкцияMarkdown", "markdownpath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогOutputИнструкцияВидео", "videopath", ТаблицаИмен, НижнийРегистр);
	ТаблицаИменНоваяСтрока("КаталогOutputСкриншоты", "outputscreenshot", ТаблицаИмен, НижнийРегистр);

	Возврат ТаблицаИмен;

КонецФункции

&НаСервереБезКонтекста

[Assistant] Функция ИменаКлючейОбщихНастроек(Знач НижнийРегистр = Ложь)


[System] Ты анализируешь код 1С и подбираешь точные имена для процедур и функций.

[User]
Восстанови осмысленное имя процедуры или функции на 1С по её телу. Верни только полную сигнатуру первой строки.

Функция ИмяФункции(ПервоеЗначение, ВтороеЗначение, ДопСообщениеОшибки = "") Экспорт
	Если ВтороеЗначение < ПервоеЗначение Тогда
		ТекстСообщения = Локализовать("Первый параметр (%1) меньше второго (%2) а хотели, чтобы был больше или равен.%3");
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%1", ВтороеЗначение);
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%2", ПервоеЗначение);
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%3", ФорматДСО(ДопСообщениеОшибки));

		ОбработатьAssertОжидаемоеРеальноеЗначение(ПервоеЗначение, ВтороеЗначение);
		Возврат ВызватьОшибкуПроверки(ТекстСообщения);
	КонецЕсли;
КонецФункции

// Проверяет, что второе значение меньше первого.
//
// Параметры:
//   ПервоеЗначение - Число, Строка, Дата - Первое проверяемое значение.
//   ВтороеЗначение - Число, Строка, Дата - Второе проверяемое значение.
//   ДопСообщениеОшибки - Строка - Описание ошибки, которое будет использовано в тексте исключения ассерта.
//
// Возвращаемое значение:
//   Структура - Если Vanessa-Automation в режиме ожидания продолжения шагов возвращает СтруктураОшибкаАссерта.
//
&НаКлиенте

Функция ПроверитьМеньше(ПервоеЗначение, ВтороеЗначение, ДопСообщениеОшибки = "") Экспорт
	Если ВтороеЗначение >= ПервоеЗначение Тогда
		ТекстСообщения = Локализовать("Значение <%1> больше или равно, чем <%2>, а ожидалось меньше. %3");
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%1", ВтороеЗначение);
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%2", ПервоеЗначение);
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%3", ФорматДСО(ДопСообщениеОшибки));
		ОбработатьAssertОжидаемоеРеальноеЗначение(ПервоеЗначение, ВтороеЗначение);
		Возврат ВызватьОшибкуПроверки(ТекстСообщения);
	КонецЕсли;
КонецФункции

// Проверяет, что второе значение меньше или равное первому.
//
// Параметры:
//   ПервоеЗначение - Число, Строка, Дата - Первое проверяемое значение.
//   ВтороеЗначение - Число, Строка, Дата - Второе проверяемое значение.
//   ДопСообщениеОшибки - Строка - Описание ошибки, которое будет использовано в тексте исключения ассерта.
//
// Возвращаемое значение:
//   Структура - Если Vanessa-Automation в режиме ожидания продолжения шагов возвращает СтруктураОшибкаАссерта.
//
&НаКлиенте

Функция ПроверитьМеньшеИлиРавно(ПервоеЗначение, ВтороеЗначение, ДопСообщениеОшибки = "") Экспорт
	Если ВтороеЗначение > ПервоеЗначение Тогда
		ТекстСообщения = Локализовать("Значение <%1> больше, чем <%2>, а ожидалось меньше или равно. %3");
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%1", ВтороеЗначение);
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%2", ПервоеЗначение);
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%3", ФорматДСО(ДопСообщениеОшибки));
		ОбработатьAssertОжидаемоеРеальноеЗначение(ВтороеЗначение, ПервоеЗначение);
		Возврат ВызватьОшибкуПроверки(ТекстСообщения);
	КонецЕсли;
КонецФункции

// Проверяет, что переданное выражение корректно выполнилось без ошибок.
//
// Параметры:
//   СтрокаАлгоритм - Строка - Строковое выражение, которое будет выполнено.
//   ДопСообщениеОшибки - Строка - Описание ошибки, которое будет использовано в тексте исключения ассерта.
//
// Возвращаемое значение:
//   Структура - Если Vanessa-Automation в режиме ожидания продолжения шагов возвращает СтруктураОшибкаАссерта.
//
&НаКлиенте

Функция ПроверитьВыполнилось(Знач СтрокаАлгоритм, Знач ДопСообщениеОшибки = "") Экспорт

	Попытка
		Выполнить(СтрокаАлгоритм);
	Исключение
		ПолученноеОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		ТекстСообщения = Локализовать("Хотели, чтобы алгоритм <%1> выполнился, а он упал с ошибкой <%2>. %3");
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%1", СтрокаАлгоритм);
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%2", ПолученноеОписаниеОшибки);
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%3", ФорматДСО(ДопСообщениеОшибки));

		ОбработатьAssertОжидаемоеРеальноеЗначение(Истина, Ложь);
		Возврат ВызватьОшибкуПроверки(ТекстСообщения);
	КонецПопытки;

КонецФункции

// Проверяет, что данный метод у объекта корректно выполнилось без ошибок.
//
// Параметры:
//   Объект - Произвольный - Объект, методо которого будет проверяться.
//   ИмяМетода - Строка - Имя метода.
//   ПараметрыИлиДопСообщениеОшибки - Строка, Массив
//       Если передан массив, то из массива будут получены параметры метода для выполнения.
//       Если передана строка, тогда параметр используется вместо параметра ДопСообщениеОшибки.
//   ДопСообщениеОшибки - Строка - Описание ошибки, которое будет использовано в тексте исключения ассерта.
//
// Возвращаемое значение:
//   Структура - Если Vanessa-Automation в режиме ожидания продолжения шагов возвращает СтруктураОшибкаАссерта.
//
&НаКлиенте

Функция ПроверитьМетодВыполнился(Объект, Знач ИмяМетода, ПараметрыИлиДопСообщениеОшибки = Неопределено, Знач ДопСообщениеОшибки = "") Экспорт

	Если ТипЗнч(ПараметрыИлиДопСообщениеОшибки) = Тип("Строка") Тогда
		ДопСообщениеОшибки = ПараметрыИлиДопСообщениеОшибки;
	Иначе
		ПараметрыМетода = ПараметрыИлиДопСообщениеОшибки;
		Если ПараметрыМетода <> Неопределено Тогда
			ТипПараметра = ТипЗнч(ПараметрыМетода);
			Если ТипПараметра <> Тип("Массив") Тогда
				ВызватьИсключение ПодставитьПараметрыВСтроку(
					Локализовать("Ожидали, что вторым параметром будет передан массив параметров для метода <%1>, а получили другой объект с типом <%2>"),
					ИмяМетода,
					ТипПараметра
				);
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;

	ПараметрыСтрока = ПараметрыСтрокой(ПараметрыМетода, "ПараметрыМетода");

	СтрокаВыполнения = "Объект." + ИмяМетода + "(" + ПараметрыСтрока + ")";

	Попытка
		Выполнить(СтрокаВыполнения);
	Исключение
		ПолученноеОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		ТекстСообщения = Локализовать("Хотели, чтобы код <%1> выполнился, а он упал с ошибкой <%2>. %3");
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%1", СтрокаВыполнения);
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%2", ПолученноеОписаниеОшибки);
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%3", ФорматДСО(ДопСообщениеОшибки));

		Возврат ВызватьОшибкуПроверки(ТекстСообщения);
	КонецПопытки;

КонецФункции

// Проверяет, что переданное выражение не выполнилось без ошибок.
//
// Параметры:
//   СтрокаАлгоритм - Строка - Строковое выражение, которое будет выполнено.
//   ОжидаемоеОписаниеОшибки - Строка - По этой строке будет выполнен поиск в тексте исключения.
//			Если строка не найдена, тогда будет вызвано исключение.
//   ДопСообщениеОшибки - Строка - Описание ошибки, которое будет использовано в тексте исключения ассерта.
//
// Возвращаемое значение:
//   Структура - Если Vanessa-Automation в режиме ожидания продолжения шагов возвращает СтруктураОшибкаАссерта.
//
&НаКлиенте

[Assistant] Функция ПроверитьБольшеИлиРавно(ПервоеЗначение, ВтороеЗначение, ДопСообщениеОшибки = "")


[System] Ты анализируешь код 1С и подбираешь точные имена для процедур и функций.

[User]
Восстанови осмысленное имя процедуры или функции на 1С по её телу. Верни только полную сигнатуру первой строки.

Функция ИмяФункции(Знач СтрокаАлгоритм, Знач ОжидаемоеОписаниеОшибки = "", Знач ДопСообщениеОшибки = "") Экспорт

	НужноВызватьОшибку = Истина;

	Попытка
		Выполнить(СтрокаАлгоритм);
	Исключение
		ПолученноеОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		Если Найти(ПолученноеОписаниеОшибки, ОжидаемоеОписаниеОшибки) = 0 Тогда
			ОбработатьAssertОжидаемоеРеальноеЗначение(Истина, Ложь);

			Возврат ВызватьОшибкуПроверки(ПодставитьПараметрыВСтроку(
				Локализовать("Хотели, чтобы алгоритм <%1> упал с сообщением об ошибке <%2>, а он упал с сообщением <%3>.%4"),
				СтрокаАлгоритм,
				ОжидаемоеОписаниеОшибки,
				ПолученноеОписаниеОшибки,
				ФорматДСО(ДопСообщениеОшибки)
			));
		КонецЕсли;
		НужноВызватьОшибку = Ложь;
	КонецПопытки;

	Если НужноВызватьОшибку Тогда
		ОбработатьAssertОжидаемоеРеальноеЗначение(Истина, Ложь);

		Возврат ВызватьОшибкуПроверки(ПодставитьПараметрыВСтроку(
			Локализовать("Хотели, чтобы алгоритм <%1> упал, а он выполнился%2"),
			СтрокаАлгоритм,
			ФорматДСО(ДопСообщениеОшибки)
		));
	КонецЕсли;

КонецФункции

// Проверяет, что данный метод у объекта вызвал исключение при выполнении.
//
// Параметры:
//   Объект - Произвольный - Объект, методо которого будет проверяться.
//   ИмяМетода - Строка - Имя метода.
//   ПараметрыИлиОжидаемоеОписаниеОшибки - Строка, Массив
//       Если передан массив, то из массива будут получены параметры метода для выполнения.
//       Если передана строка, тогда параметр используется вместо параметра ДопСообщениеОшибки.
//   ОжидаемоеОписаниеОшибкиИлиДопСообщениеОшибки - Строка - Строка, должна быть в строке исключения метода.
//   ДопСообщениеОшибки - Строка - Описание ошибки, которое будет использовано в тексте исключения ассерта.
//
// Возвращаемое значение:
//   Структура - Если Vanessa-Automation в режиме ожидания продолжения шагов возвращает СтруктураОшибкаАссерта.
//
&НаКлиенте

Функция ПроверитьМетодНеВыполнился(Объект, ИмяМетода, ПараметрыИлиОжидаемоеОписаниеОшибки,
		Знач ОжидаемоеОписаниеОшибкиИлиДопСообщениеОшибки = "",
		Знач ДопСообщениеОшибки = "") Экспорт

	Если ТипЗнч(ПараметрыИлиОжидаемоеОписаниеОшибки) = Тип("Строка") Тогда
		ОжидаемоеОписаниеОшибки = ПараметрыИлиОжидаемоеОписаниеОшибки;
		ДопСообщениеОшибки = ОжидаемоеОписаниеОшибкиИлиДопСообщениеОшибки;
	Иначе
		ПараметрыМетода = ПараметрыИлиОжидаемоеОписаниеОшибки;
		Если ПараметрыМетода <> Неопределено Тогда
			ТипПараметра = ТипЗнч(ПараметрыМетода);
			Если ТипПараметра <> Тип("Массив") Тогда
				ВызватьИсключение ПодставитьПараметрыВСтроку(
					Локализовать("Ожидали, что третьим параметром будет передан массив параметров для метода <%1>, а получили другой объект с типом <%2>"),
					ИмяМетода,
					ТипПараметра
				);
			КонецЕсли;
		КонецЕсли;
		ОжидаемоеОписаниеОшибки = ОжидаемоеОписаниеОшибкиИлиДопСообщениеОшибки;
	КонецЕсли;

	ПараметрыСтрока = ПараметрыСтрокой(ПараметрыМетода, "ПараметрыМетода");

	СтрокаВыполнения = "Объект." + ИмяМетода + "(" + ПараметрыСтрока + ")";

	НужноВызватьОшибку = Истина;

	Попытка
		Выполнить(СтрокаВыполнения);
	Исключение
		ПолученноеОписаниеОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
		Если Найти(ПолученноеОписаниеОшибки, ОжидаемоеОписаниеОшибки) = 0 Тогда
			Возврат ВызватьОшибкуПроверки(ПодставитьПараметрыВСтроку(
				Локализовать("Хотели, чтобы код <%1> упал с сообщением об ошибке <%2>, а он упал с сообщением <%3>.%4"),
				СтрокаВыполнения,
				ОжидаемоеОписаниеОшибки,
				ПолученноеОписаниеОшибки,
				ФорматДСО(ДопСообщениеОшибки)
			));
		КонецЕсли;
		НужноВызватьОшибку = Ложь;
	КонецПопытки;

	Если НужноВызватьОшибку Тогда
		Возврат ВызватьОшибкуПроверки(ПодставитьПараметрыВСтроку(
			Локализовать("Хотели, чтобы код <%1> упал, а он выполнился%2"),
			СтрокаВыполнения,
			ФорматДСО(ДопСообщениеОшибки)
		));
	КонецЕсли;

КонецФункции

// Проверяет, что переданное значение не является пустым.
//
// Параметры:
//   ПроверяемоеЗначение - Произвольный - Проверяемое на пустоту значение.
//   ДопСообщениеОшибки - Строка - Описание ошибки, которое будет использовано в тексте исключения ассерта.
//
// Возвращаемое значение:
//   Структура - Если Vanessa-Automation в режиме ожидания продолжения шагов возвращает СтруктураОшибкаАссерта.
//
&НаКлиенте

Функция ПроверитьЗаполненность(ПроверяемоеЗначение, ДопСообщениеОшибки = "") Экспорт
	НужноВызватьОшибку = Истина;
	Попытка
		фЗаполнено = ЗначениеЗаполнено(ПроверяемоеЗначение);
	Исключение
		НужноВызватьОшибку = Ложь;
	КонецПопытки;
	Если НЕ фЗаполнено И НужноВызватьОшибку Тогда
		ТекстСообщения = Локализовать("Значение (%1) не заполнено, а ожидалась заполненность%2");
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%1", ПроверяемоеЗначение);
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%2", ФорматДСО(ДопСообщениеОшибки));
		ОбработатьAssertОжидаемоеРеальноеЗначение(Истина, Ложь);

		Возврат ВызватьОшибкуПроверки(ТекстСообщения);
	КонецЕсли;
КонецФункции

// Проверяет, что переданное значение является пустым.
//
// Параметры:
//   ПроверяемоеЗначение - Произвольный - Проверяемое на пустоту значение.
//   ДопСообщениеОшибки - Строка - Описание ошибки, которое будет использовано в тексте исключения ассерта.
//
// Возвращаемое значение:
//   Структура - Если Vanessa-Automation в режиме ожидания продолжения шагов возвращает СтруктураОшибкаАссерта.
//
&НаКлиенте

Функция ПроверитьНеЗаполненность(ПроверяемоеЗначение, ДопСообщениеОшибки = "") Экспорт
	ТекстСообщения = Локализовать("Значение (%1) заполнено, а ожидалась незаполненность %2");
	ТекстСообщения = СтрЗаменить(ТекстСообщения, "%1", ПроверяемоеЗначение);
	ТекстСообщения = СтрЗаменить(ТекстСообщения, "%2", ФорматДСО(ДопСообщениеОшибки));

	Попытка
		фЗаполнено = ЗначениеЗаполнено(ПроверяемоеЗначение);
	Исключение
		ОбработатьAssertОжидаемоеРеальноеЗначение(Истина, Ложь);
		Возврат ВызватьОшибкуПроверки(ТекстСообщения);
	КонецПопытки;
	Если фЗаполнено Тогда
		ОбработатьAssertОжидаемоеРеальноеЗначение(Истина, Ложь);
		Возврат ВызватьОшибкуПроверки(ТекстСообщения);
	КонецЕсли;
КонецФункции

// Проверяет, что переданное значение нужного типа.
//
// Параметры:
//   ПроверяемоеЗначение - Произвольный - Проверяемое значение.
//   ТипИлиИмяТипа       - Строка, Тип  - Тип значения.
//   ДопСообщениеОшибки - Строка - Описание ошибки, которое будет использовано в тексте исключения ассерта.
//
// Возвращаемое значение:
//   Структура - Если Vanessa-Automation в режиме ожидания продолжения шагов возвращает СтруктураОшибкаАссерта.
//
&НаКлиенте

[Assistant] Функция ПроверитьНеВыполнилось(Знач СтрокаАлгоритм, Знач ОжидаемоеОписаниеОшибки = "", Знач ДопСообщениеОшибки = "")