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

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

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

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

	ИмяВременногоФайла = ПолучитьИмяВременногоФайла("log");
	ВыполнитьКомандуОСБезПоказаЧерногоОкна(Объект.ПутьКadb + "adb devices > " + ИмяВременногоФайла);
	Если ФайлСуществуетКомандаСистемы(ИмяВременногоФайла) Тогда
		Текст = Новый ЧтениеТекста;
		Текст.Открыть(ИмяВременногоФайла);
		Данные = Текст.Прочитать();
		Текст.Закрыть();
	КонецЕсли;

	СлужебноеСообщение = "List of devices attached";
	ИщемСоответствие = Найти(Данные, СлужебноеСообщение);
	Если Не ИщемСоответствие Тогда
		СообщитьПользователю(Локализовать("Ошибка. Возможно не найдена программа adb. Установите ее, или пропишите к ней путь."));
		Возврат Ложь;
	КонецЕсли;

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

	Если НЕ МассивАктивныхУстройств.Количество() Тогда
		СообщитьПользователю(Локализовать("Не найдено подключенных устройств."));
		Возврат Ложь;
	КонецЕсли;
	Возврат Истина;

	#КонецЕсли

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

&НаКлиенте

Процедура ЗапуститьМобильныйКлиент(Команда)
	СтартМобильногоКлиента("com.e1c.mobile.client");
КонецПроцедуры

&НаКлиенте

Процедура СтартМобильногоКлиента(ВидПриложения)
	УбитьМобильныйКлиент(ВидПриложения);
	ЗапускМобильныйКлиент(ВидПриложения);
КонецПроцедуры

&НаКлиенте

Процедура СтартМобильногоКлиентаТестирования(ДанныеЗапускаКлиентаТестирования, ТипКлиента, ТаймаутЗапуска)
	Если ТипКлиента = "МобильныйКлиент" Тогда
		ВидПриложения = "com.e1c.mobile.client";
	ИначеЕсли ТипКлиента = "МобильныйКлиентАвтономный" Тогда
		ВидПриложения = "com.e1c.mobile.standalone";
	ИначеЕсли ТипКлиента = "МобильноеПриложение" Тогда
		ВидПриложения = "com.e1c.mobile";
	Иначе
		ВызватьИсключение ТипКлиента;
	КонецЕсли;
	СтартМобильногоКлиента(ВидПриложения);
	Sleep(1);
	СтрокаЗапуска = "adb shell am broadcast --user current -n " + ВидПриложения + "/com.e1c.mobile.Starter -a com.e1c.mobile.START_CMD -e cmd '%1'";
	СтрокаЗапуска = ПодставитьПараметрыВСтроку(СтрокаЗапуска, ДанныеЗапускаКлиентаТестирования);
	ВыполнитьКомандуОСБезПоказаЧерногоОкна(Объект.ПутьКadb + СтрокаЗапуска);
	Sleep(ТаймаутЗапуска);
КонецПроцедуры

&НаКлиенте

Процедура УбитьМобильныйКлиент(ВидПриложения)
	ВыполнитьКомандуОСБезПоказаЧерногоОкна(Объект.ПутьКadb + "adb shell am force-stop " + ВидПриложения);
КонецПроцедуры

&НаКлиенте

Процедура ЗапускМобильныйКлиент(ВидПриложения)
	ВыполнитьКомандуОСБезПоказаЧерногоОкна(Объект.ПутьКadb + "adb shell am start -n " + ВидПриложения + "/com.e1c.mobile.App -a android.intent.action.MAIN -c android.intent.category.LAUNCHER");
КонецПроцедуры

&НаКлиенте

Функция ПолучитьСтрокуЗапускаМобильныйКлиент(ДанныеЗапускаКлиентаТестирования)
	СтрокаЗапуска = "";
	Если ДанныеЗапускаКлиентаТестирования.ТипКлиента = "МобильноеПриложение" Тогда
		СтрокаЗапуска = "/IBName" + СокрЛП(ДанныеЗапускаКлиентаТестирования.ИмяБазыНаМобильномУстройстве);
	Иначе
		СтрокаЗапуска = СокрЛП(ДанныеЗапускаКлиентаТестирования.ПутьКИнфобазе);
		Если Найти(ВРег(СтрокаЗапуска), ВРег("ws=")) > 0 Тогда
			СтрокаЗапуска = СтрЗаменить(СтрокаЗапуска, "ws=", " /WS");
		КонецЕсли;

		Если Не Найти(ВРег(СтрокаЗапуска), ВРег("/WS")) Тогда
			СтрокаЗапуска = "/WS """ + СтрокаЗапуска + """";
		КонецЕсли;
	КонецЕсли;

	СтрокаЗапуска = СтрокаЗапуска + " " + "/TestClient";
	ДанныеЗапускаКлиентаТестирования.Имя = "id" + СтрЗаменить(Новый УникальныйИдентификатор(), "-", "");
	СтрокаЗапуска = СтрокаЗапуска + " -TPort " + Формат(ДанныеЗапускаКлиентаТестирования.ПортЗапускаТестКлиента, "ЧГ=; ЧН=0") + " ";

	Если ДанныеЗапускаКлиентаТестирования.ТипКлиента = "МобильноеПриложение" Тогда
		СтрокаЗапуска = СтрокаЗапуска + " -TURL" + СокрЛП(ДанныеЗапускаКлиентаТестирования.ПутьКИнфобазе) + " ";
	КонецЕсли;

	СтрокаЗапуска = СтрокаЗапуска + " " + "/TestClientID" + " " + ПолучитьКорректноеИмяTesClient(ДанныеЗапускаКлиентаТестирования.Имя);

	ПараметрыОтладчика = "";
	Если Объект.ЗапускатьТестКлиентВРежимеОтладки Тогда
		// /debug -http -attach /debuggerURL "http://localhost:1560"
		ПараметрыОтладчика = " /debug " + Объект.КлючиОтладки + " /debuggerURL """ + Объект.АдресОтладчика + """";
	КонецЕсли;

	ДопПараметр = ДанныеЗапускаКлиентаТестирования.ДопПараметры;
	Если ЭтоЗапускВРежимеКоманднойСтроки Тогда
		// добавил /CTemp, чтобы убрать передачу параметра /C в TestClient, с которым был запущен TestManager
		СтрокаЗапуска = СтрокаЗапуска + " /CTemp " + ДопПараметр;
 	Иначе
		СтрокаЗапуска = ДопПараметр + " " + ПараметрыОтладчика + " " + СтрокаЗапуска;
	КонецЕсли;

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

&НаКлиенте

Процедура СделатьСкриншотМобильногоКлиента(ДопПараметры)
	#Если НЕ ВебКлиент Тогда

	ИмяФайла = ДопПараметры.ИмяФайла;

	Если ТипЗнч(ИмяФайла) = Тип("Строка") Тогда
		ИмяФайлаСкриншота = ИмяФайла;
	Иначе
		ИмяФайлаСкриншота = СформироватьИмяФайлаСкриншота();
		ИмяФайла.Добавить(ИмяФайлаСкриншота);
	КонецЕсли;

	Если ЭтоLinux Тогда
	Иначе
		ИмяФайлаСкриншота = СтрЗаменить(ИмяФайлаСкриншота, "/", "\");
	КонецЕсли;

	Попытка
		ВыполнитьКомандуОСБезПоказаЧерногоОкна(Объект.ПутьКadb + "adb exec-out screencap -p >" + " """ + ИмяФайлаСкриншота + """");

		КоличествоПопыток = 0;
		МаксКоличествоПопыток = 5;
		Пока Истина Цикл
			Если ФайлСуществуетКомандаСистемы(ИмяФайлаСкриншота) Тогда
				Прервать;
			КонецЕсли;
			sleep(1);
			КоличествоПопыток = КоличествоПопыток + 1;
			Если КоличествоПопыток > МаксКоличествоПопыток Тогда
				Прервать;
			КонецЕсли;
		КонецЦикла;

		ПрикреплятьСкриншотКШагу = Истина;

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

		ДобавитьИмяФайлаСкриншотаКСтрокеТекущегоСценария(ДанныеФайла);
		Если ПрикреплятьСкриншотКШагу Тогда
			ДанныеФайла = Новый Структура;
			ИмяФайлаСкриншота2 = ПолучитьИмяВременногоФайла("png");
			КопироватьФайлКомандаСистемы(ИмяФайлаСкриншота, ИмяФайлаСкриншота2);
			ДанныеФайла.Вставить("ИмяФайла", ИмяФайлаСкриншота2);
			Если ДопПараметры.Свойство("ИмяСкриншотаДляОтчета") Тогда
				ДанныеФайла.Вставить("ИмяСкриншотаДляОтчета", ДопПараметры.ИмяСкриншотаДляОтчета);
			КонецЕсли;
			ДанныеФайла.Вставить("ПрикреплятьСкриншотКШагу",ПрикреплятьСкриншотКШагу);

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

	Исключение
		СообщитьПользователю(ПодставитьПараметрыВСтроку(
			Локализовать("Ошибка создания скриншота:%1 команда:%2"),
			ОписаниеОшибки()
		));
	КонецПопытки;

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

	#КонецЕсли
КонецПроцедуры

// Мобильное приложение

&НаКлиенте

Процедура ЗапуститьМобильноеПриложение(Команда)
	СтартМобильногоКлиента("com.e1c.mobile");
КонецПроцедуры

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

#Область ИнтерактивнаяСправка

&НаКлиенте

[Assistant] Функция ВозможноЗапуститьМобильныйКлиент()


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

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

Функция ИмяФункции(ИмяФайла, ДанныеОшибки)

	Если НЕ ЗначениеЗаполнено(Объект.ЗаписьВидеоКэшФайловTTS) Тогда
		ВызватьИсключение Локализовать("Не указан каталог, где будет храниться кеш mp3 файлов.");
	КонецЕсли;

	ПодключитьБиблиотекуРаботыСВидео();

	Текст = Новый ЧтениеТекста;
	Текст.Открыть(ИмяФайла, "UTF-8");
	ТекстФайла = Текст.Прочитать();
	Текст.Закрыть();

	МассивСтрок = _СтрРазделить(ТекстФайла, Символы.ПС);
	КолШаговДляОзвучки = 0;
	Для Каждого Стр Из МассивСтрок Цикл
		Стр = СокрЛП(Стр);
		Если Лев(Стр, 1) = "*" Тогда
			КолШаговДляОзвучки = КолШаговДляОзвучки + 1;
		КонецЕсли;
	КонецЦикла;
	НомерШага = 0;
	ДанныеКэшMp3 = Неопределено;
	НомерСтрокиФичи = 0;
	ПредыдущаяСтрока = Неопределено;
	Для Каждого Стр Из МассивСтрок Цикл
		НомерСтрокиФичи = НомерСтрокиФичи + 1;
		Стр = СокрЛП(Стр);
		Если Лев(Стр, 1) = "*" Тогда
			НомерШага = НомерШага + 1;

			ТекстШага = Сред(Стр, 2);

			ТекШаг = Новый Структура;
			ТекШаг.Вставить("ТекстИнструкция", ТекстШага);
			ТекШаг.Вставить("МассивТеговШага", Новый Массив);

			СтрокаДерева = СтрокаДереваПоНомеруСтрокиФичи(НомерСтрокиФичи);
			Если НомерСтрокиФичи > 1 Тогда
				ПредыдущаяСтрока = СокрЛП(МассивСтрок[НомерСтрокиФичи - 1 - 1]);
				Если Лев(ПредыдущаяСтрока, 1) = "@" Тогда
					// Тут происходит прямое чтение фичи, когда она ещё не загружена в дерево шагов
					ТекШаг.МассивТеговШага.Добавить(СокрЛП(Сред(ПредыдущаяСтрока, 2)));
				КонецЕсли;
			КонецЕсли;

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

			Если ПараметрыВидео.Свойство("ДанныеКэшMp3") Тогда
				ДанныеКэшMp3 = ПараметрыВидео.ДанныеКэшMp3;
			КонецЕсли;

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

	Возврат Истина;

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

&НаСервере

Функция ЗаголовокКомандыСервер(Знач ИмяКоманды)
	Возврат Команды[ИмяКоманды].Заголовок;
КонецФункции

&НаСервере

Функция ЗаголовокЭлементаФормыVAИзДанныхОбъектаСервер(Знач ИмяЭлемента)

	ПутьКДанным = ВтораяЧастьВПутиКДанным(ИмяЭлемента);
	ОбъектСервер = РеквизитФормыВЗначение("Объект");
	ДанныеРеквизита = ОбъектСервер.Метаданные().Реквизиты[ПутьКДанным];

	Возврат ДанныеРеквизита.Синоним;

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

&НаСервере

Функция ИмяОбъектаДанныхЭлементаФормыVAИзДанныхОбъектаСервер(Знач ИмяЭлемента)

	Возврат ВтораяЧастьВПутиКДанным(ИмяЭлемента);

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

&НаСервере

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

	Возврат ПутьКДанным;
КонецФункции

&НаКлиенте

Функция ЗаголовокЭлементаVA(Стр)

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

	Возврат Текст;

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

&НаКлиенте

Функция ПроверкаЧтоРежимОбученияБудетРаботать(ПараметрыВидео, ИмяФичи)

	Если НЕ Объект.ИспользоватьКомпонентуVanessaExt Тогда
		Возврат Ложь;
	КонецЕсли;

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

		Если НЕ ФайлСуществуетКомандаСистемы(Объект.КаталогКешОзвучкиДляИнтерактивнойСправки) Тогда
			Возврат Ложь;
		КонецЕсли;

		ДанныеКешОзвучкиИнтерактивнойСправки = ПрочитатьДанныеКешОзвучкиИнтерактивнойСправки();

		Если НЕ ВКешЕстьВсеMp3ДляДаннойФичи(ДанныеКешОзвучкиИнтерактивнойСправки, ИмяФичи) Тогда
			Возврат Ложь;
		КонецЕсли;

	КонецЕсли;

	Возврат Истина;

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

&НаКлиенте

Функция Установлен_ffmpeg()

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

	Строка_ffmpeg = Объект.ЗаписьВидеоКомандаFfmpeg;
	Если НЕ ЗначениеЗаполнено(Строка_ffmpeg) Тогда
		Строка_ffmpeg = "ffmpeg";
	КонецЕсли;

	Лог = ПолучитьИмяВременногоФайла("txt");
	Команда = """" + Строка_ffmpeg + """ -version > """ + Лог + """";
	Отладка(Команда);
	ВыполнитьКомандуОСБезПоказаЧерногоОкна(Команда);

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

	Возврат ВФайлеЕстьСтрока(Лог,"ffmpeg version");

	#КонецЕсли

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

&НаКлиенте

Функция ВФайлеЕстьСтрока(ИмяФайла, ЧтоИщем)

	Текст = Новый ЧтениеТекста;
	Текст.Открыть(ИмяФайла, "UTF-8");

	Нашли = Ложь;
	Пока Истина Цикл
		Стр = Текст.ПрочитатьСтроку();
		Если Стр = Неопределено Тогда
			Прервать;
		КонецЕсли;

		Если Найти(Стр, ЧтоИщем)  > 0 Тогда
			Нашли = Истина;
			Прервать;
		КонецЕсли;

	КонецЦикла;

	Текст.Закрыть();

	Возврат Нашли;

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

&НаКлиенте

Процедура ОткрытьМастерНастройкиИнтерактивнойСправки(ПараметрыВидео, ИмяФайла, ДопПараметры = Неопределено)

	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("ПроверяемыйФичаФайл", ИмяФайла);
	ПараметрыФормы.Вставить("ДопПараметры", ДопПараметры);
	ОткрытьФорму(ПолучитьИмяОбработкиVA() + ".Форма.МастерНастройкиИнтерактивнойСправки", ПараметрыФормы, ЭтаФорма);

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

&НаКлиенте

Процедура ПолучитьКоординатыОбласти(Команда)

	ФормаПолучениеКоординатПоОбласти = ПолучитьМодульПолучениеКоординатПоОбласти();
	Если ФормаПолучениеКоординатПоОбласти <> Неопределено Тогда
		ФормаПолучениеКоординатПоОбласти.Открыть();
	КонецЕсли;

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

&НаКлиенте

Процедура НастройкиРаботыСБраузером(Команда)

	ФормаПолучениеНастройкиРаботыСБраузером = ПолучитьМодульНастройкиРаботыСБраузером();
	Если ФормаПолучениеНастройкиРаботыСБраузером <> Неопределено Тогда
		ФормаПолучениеНастройкиРаботыСБраузером.Открыть();
	КонецЕсли;

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

&НаКлиенте

Функция ПолучитьМодульПолучениеКоординатПоОбласти()

	Если Не Объект.ИспользоватьКомпонентуVanessaExt Тогда
		Возврат Неопределено;
	КонецЕсли;

	ДескрипторОсновногоОкнаVA = 0;
	ВычислитьPIDЭтогоСеансаСлужебный();
	ДанныеОконJSON = ВнешняяКомпонентаДляСкриншотов.ПолучитьСписокОкон(Число(PIDЭтогоСеанса));
	ДанныеОкон = ПрочитатьСтрокуJSON(ДанныеОконJSON);
	Если ТипЗнч(ДанныеОкон) = Тип("Массив") Тогда
		ДескрипторОсновногоОкнаVA = ДанныеОкон[0].Window;
	КонецЕсли;

	ПараметрыФормы = Новый Структура;
	ПараметрыФормы.Вставить("ТекущийTestclientЭтоWebКлиент", ТекущийTestclientЭтоWebКлиент);
	ПараметрыФормы.Вставить("ДескрипторОсновногоОкнаТекущегоКлиентаТестирования", ДескрипторОсновногоОкнаТекущегоКлиентаТестирования);
	ПараметрыФормы.Вставить("ДескрипторОсновногоОкнаVA", ДескрипторОсновногоОкнаVA);
	ФормаПолучениеКоординатПоОбласти = ПолучитьФорму(ПолучитьИмяОбработкиVA() + ".Форма.ПолучениеКоординатПоОбласти", ПараметрыФормы, ЭтаФорма);
	ФормаПолучениеКоординатПоОбласти.ИнициализацияФормы(ЭтаФорма);

	Возврат ФормаПолучениеКоординатПоОбласти;

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

&НаКлиенте

Функция ПолучитьМодульНастройкиРаботыСБраузером()

	Если Не Объект.ИспользоватьКомпонентуVanessaExt Тогда
		Возврат Неопределено;
	КонецЕсли;

	ПараметрыФормы = Новый Структура;
	ФормаНастройкиРаботыСБраузером = ПолучитьФорму(ПолучитьИмяОбработкиVA() + ".Форма.НастройкиРаботыСБраузером", ПараметрыФормы, ЭтаФорма);
	ФормаНастройкиРаботыСБраузером.ИнициализацияФормы(ЭтаФорма, ПараметрыФормы);

	Возврат ФормаНастройкиРаботыСБраузером;

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

&НаКлиенте

[Assistant] Функция СгенерироватьMP3ДляИнтерактивнойСправки(ИмяФайла, ДанныеОшибки)


[System] Ты пишешь корректный код на 1С:Enterprise Script и отвечаешь только кодом, если тебя просят дописать код.

[User]
Дополни код на 1С. Ниже начало функция `ПолучитьСписокТестов`.
Сохрани стиль и синтаксис, верни только готовый код без пояснений.

Функция ПолучитьСписокТестов(КонтекстФреймворкаBDD)
Экспорт
	Ванесса = КонтекстФреймворкаBDD;

	ВсеТесты = Новый Массив;

	//описание параметров
    // TODO: допиши оставшуюся часть

[Assistant]
//начало текста модуля
&НаКлиенте
Перем Ванесса;

&НаКлиенте
Перем Контекст Экспорт;

&НаКлиенте
Перем КонтекстСохраняемый Экспорт;

&НаКлиенте
Функция ПолучитьСписокТестов(КонтекстФреймворкаBDD) Экспорт
	Ванесса = КонтекстФреймворкаBDD;

	ВсеТесты = Новый Массив;

	//описание параметров
	//ДобавитьШагВМассивТестов(ВсеТесты,Снипет,ИмяПроцедуры,ПредставлениеТеста,Транзакция,Параметр);

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

&НаКлиенте
Процедура ПередНачаломСценария() Экспорт
	Контекст.Вставить("Зн",-1);
КонецПроцедуры

&НаКлиенте
Процедура ПередОкончаниемСценария() Экспорт

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

//окончание текста модуля


[System] Ты пишешь корректный код на 1С:Enterprise Script и отвечаешь только кодом, если тебя просят дописать код.

[User]
Дополни код на 1С. Ниже начало функция `ОбработчикОжиданияВОткрытойФормеЯЖдуДоступностиЭлементаВТечениеСекунд`.
Сохрани стиль и синтаксис, верни только готовый код без пояснений.

Функция ОбработчикОжиданияВОткрытойФормеЯЖдуДоступностиЭлементаВТечениеСекунд()
ИмяОбработчика = "ОбработчикОжиданияВОткрытойФормеЯЖдуДоступностиЭлементаВТечениеСекунд";

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

	Ванесса.ПроверитьНеобходимостьЗакрытьСистемныйДиалог();

	ЭлементФормы = Ванесса.НайтиРеквизитОткрытойФормыПоЗаголовку(ИмяПоляОбработкаОжидания,ИскатьПоИмениОбрабткаОжидания,Ложь);

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

	ТекущаяДоступность = Неопределено;
	Попытка
		ТекущаяДоступность = ЭлементФормы.ТекущаяДоступность();
	Исключение
		ТекущаяДоступность = Неопределено;
	КонецПопытки;
    // TODO: допиши оставшуюся часть

[Assistant]
Функция ОбработчикОжиданияВОткрытойФормеЯЖдуДоступностиЭлементаВТечениеСекунд()
	ИмяОбработчика = "ОбработчикОжиданияВОткрытойФормеЯЖдуДоступностиЭлементаВТечениеСекунд";

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

	Ванесса.ПроверитьНеобходимостьЗакрытьСистемныйДиалог();

	ЭлементФормы = Ванесса.НайтиРеквизитОткрытойФормыПоЗаголовку(ИмяПоляОбработкаОжидания,ИскатьПоИмениОбрабткаОжидания,Ложь);

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

	ТекущаяДоступность = Неопределено;
	Попытка
		ТекущаяДоступность = ЭлементФормы.ТекущаяДоступность();
	Исключение
		ТекущаяДоступность = Неопределено;
	КонецПопытки;

	Если ТекущаяДоступность = ОжидатьДоступности Тогда
		ОтключитьОбработчикОжидания(ИмяОбработчика);
		Ванесса.ПродолжитьВыполнениеШагов();
		Возврат Неопределено;
	КонецЕсли;

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

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

&НаКлиенте
//И я жду доступности элемента "Имя элемента" в течение "Таймаут" секунд
//@ЯЖдуДоступностиЭлементаВТечениеСекунд(Парам01, Парам02)

Функция ЯЖдуДоступностиЭлементаВТечениеСекунд(ИмяЭлемента, КоличествоСекунд, ИскатьПоИмени = Ложь) Экспорт
	Ванесса.ЗапретитьВыполнениеШагов();
	ДатаНачалаОбработкиОжидания       = ТекущаяДата();
	ИмяПоляОбработкаОжидания          = ИмяЭлемента;
	ИскатьПоИмениОбрабткаОжидания     = ИскатьПоИмени;
	ОжидатьДоступности                = Истина;
	КоличествоСекундОбработкаОжидания = Ванесса.ЗначениеТаймаутаДляАсинхронногоШага(КоличествоСекунд);
	ПодключитьОбработчикОжидания("ОбработчикОжиданияВОткрытойФормеЯЖдуДоступностиЭлементаВТечениеСекунд",1,Ложь);
КонецФункции

&НаКлиенте
//И я жду доступности элемента с именем "ИмяЭлемента" в течение "Таймаут" секунд
//@ЯЖдуДоступностиЭлементаСИменемВТечениеСекунд(Парам01, Парам02)

Функция ЯЖдуДоступностиЭлементаСИменемВТечениеСекунд(ИмяЭлемента, КоличествоСекунд) Экспорт
	ЯЖдуДоступностиЭлементаВТечениеСекунд(ИмяЭлемента, КоличествоСекунд, Истина);
КонецФункции

&НаКлиенте
//И я жду недоступности элемента "Имя элемента" в течение "Таймаут" секунд
//@ЯЖдуНедоступностиЭлементаВТечениеСекунд(Парам01, Парам02)

Функция ЯЖдуНедоступностиЭлементаВТечениеСекунд(ИмяЭлемента, КоличествоСекунд, ИскатьПоИмени = Ложь) Экспорт
	Ванесса.ЗапретитьВыполнениеШагов();
	ДатаНачалаОбработкиОжидания       = ТекущаяДата();
	ИмяПоляОбработкаОжидания          = ИмяЭлемента;
	ИскатьПоИмениОбрабткаОжидания     = ИскатьПоИмени;
	ОжидатьДоступности                = Ложь;
	КоличествоСекундОбработкаОжидания = Ванесса.ЗначениеТаймаутаДляАсинхронногоШага(КоличествоСекунд);
	ПодключитьОбработчикОжидания("ОбработчикОжиданияВОткрытойФормеЯЖдуДоступностиЭлементаВТечениеСекунд",1,Ложь);
КонецФункции

&НаКлиенте
//И я жду недоступности элемента с именем "ИмяЭлемента" в течение "Таймаут" секунд
//@ЯЖдуДоступностиЭлементаСИменемВТечениеСекунд(Парам01, Парам02)

Функция ЯЖдуНедоступностиЭлементаСИменемВТечениеСекунд(ИмяЭлемента, КоличествоСекунд) Экспорт
	ЯЖдуНедоступностиЭлементаВТечениеСекунд(ИмяЭлемента, КоличествоСекунд, Истина);
КонецФункции

&НаКлиенте
//И я перехожу к следующему реквизиту
//@ЯПерехожуКСледующемуРеквизиту()

Функция ЯПерехожуКСледующемуРеквизиту() Экспорт

	СтрокаОшибки = "";
	БылаОшибка = Ложь;

	КоличествоПопыток = Ванесса.ЗначениеКоличествоПопытокВыполненияДействия();
	Для СчетчикПопыток = 1 По КоличествоПопыток Цикл
		СтрокаОшибки = "";
		БылаОшибка = Ложь;

		Попытка

		    АктивноеОкно = Ванесса.ПолучитьАктивноеОкноИзТестовоеПриложение();
		    АктивнаяФорма = АктивноеОкно.НайтиОбъект(Тип("ТестируемаяФорма"));
		    АктивнаяФорма.ПерейтиКСледующемуЭлементу();
			Прервать;

		Исключение
			СтрокаОшибки = ОписаниеОшибки();
			БылаОшибка = Истина;
			Если СчетчикПопыток < КоличествоПопыток Тогда
				Ванесса.sleep(1);
			КонецЕсли;
		КонецПопытки;

		Если НЕ БылаОшибка Тогда
			Прервать;
		КонецЕсли;
	КонецЦикла;

	Если БылаОшибка Тогда
		ВызватьИсключение СтрокаОшибки;
	КонецЕсли;

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

&НаКлиенте
//И я перехожу к следующему реквизиту
//@ЯПерехожуКПредыдущемуРеквизиту()

Функция ЯПерехожуКПредыдущемуРеквизиту() Экспорт
    АктивноеОкно = Ванесса.ПолучитьАктивноеОкноИзТестовоеПриложение();
    АктивнаяФорма = АктивноеОкно.НайтиОбъект(Тип("ТестируемаяФорма"));
    АктивнаяФорма.ПерейтиКПредыдущемуЭлементу();
КонецФункции

//---------------------------------------

&НаКлиенте
//И у элемента "Имя элемента" я жду значения "Значение"
//@УЭлементаЯЖдуЗначения(Парам01,Парам02)

Функция УЭлементаЯЖдуЗначения(ИмяПоля,Значение) Экспорт
	УЭлементаЯЖдуЗначенияВТеченииСекунд(ИмяПоля,Значение,10,Ложь);
КонецФункции

&НаКлиенте
//И у элемента с именем "Имя элемента" я жду значения "Значение"
//@УЭлементасИменемЯЖдуЗначения(Парам01,Парам02)

Функция УЭлементасИменемЯЖдуЗначения(ИмяПоля,Значение) Экспорт
	УЭлементаЯЖдуЗначенияВТеченииСекунд(ИмяПоля,Значение,10,Истина);
КонецФункции

&НаКлиенте


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

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

Функция ИмяФункции()
	ИмяОбработчика = "ОбработчикОжиданияУЭлементаЯЖдуЗначенияВТеченииСекунд";

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

	Ванесса.ПроверитьНеобходимостьЗакрытьСистемныйДиалог();

	ДопПараметры = Новый Структура;
	ДопПараметры.Вставить("ВызыватьИсключение",Ложь);

	ТекущееЗначение2 = Неопределено;
	Попытка
		ТекущееЗначение = Ванесса.ПолучитьЗначениеРеквизитаОткрытойФормыПоЗаголовку(ИмяПоляОбработкаОжидания,ИскатьПоИмениОбрабткаОжидания,ДопПараметры);
	Исключение
		ТекущееЗначение = Неопределено;
	КонецПопытки;

	Попытка
		Если ДопПараметры.Свойство("ПолеРеквизит") Тогда
			Если ДопПараметры.ПолеРеквизит.Вид = ВидПоляФормы.ПолеФлажка Тогда
				ТекущееЗначение2 = ПривестиЗначениеФлагаКСтандарту(ТекущееЗначение);
			КонецЕсли;
		КонецЕсли;
	Исключение
	КонецПопытки;

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

	КонецЕсли;

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

		ТекстСообщения = Ванесса.ДобавитьСтрокуВозможногоШаблона(ТекстСообщения, ТекущееЗначение, ЗначениеОбрабткаОжидания);

		Ванесса.ПродолжитьВыполнениеШагов(Истина,ТекстСообщения);
		Возврат Неопределено;
	КонецЕсли;
КонецФункции

&НаКлиенте
//И у элемента "Имя элемента" я жду значения "Значение" в течении 11 секунд
//@УЭлементаЯЖдуЗначенияВТеченииСекунд(Парам01,Парам02)

Функция УЭлементаЯЖдуЗначенияВТеченииСекунд(ИмяПоля,Значение,КоличествоСекунд,ИскатьПоИмени = Ложь,ПоШаблону = Ложь) Экспорт
	ДопПараметры = Новый Структура;
	ДопПараметры.Вставить("ВызыватьИсключение",Ложь);

	ТекущееЗначение2 = Неопределено;
	Попытка
		ТекущееЗначение = Ванесса.ПолучитьЗначениеРеквизитаОткрытойФормыПоЗаголовку(ИмяПоля,ИскатьПоИмени,ДопПараметры);
	Исключение
		ТекущееЗначение = Неопределено;
	КонецПопытки;

	Попытка
		Если ДопПараметры.Свойство("ПолеРеквизит") Тогда
			Если ДопПараметры.ПолеРеквизит.Вид = ВидПоляФормы.ПолеФлажка Тогда
				ТекущееЗначение2 = ПривестиЗначениеФлагаКСтандарту(ТекущееЗначение);
			КонецЕсли;
		КонецЕсли;
	Исключение
	КонецПопытки;

	Если ((НРег(Значение) = НРег(ТекущееЗначение)) И (ТекущееЗначение <> Неопределено))
		ИЛИ ((НРег(Значение) = НРег(ТекущееЗначение2)) И (ТекущееЗначение2 <> Неопределено)) Тогда
		Возврат Неопределено;
	КонецЕсли;

	Ванесса.ЗапретитьВыполнениеШагов();
	ДатаНачалаОбработкиОжидания       = ТекущаяДата();
	ИмяПоляОбработкаОжидания          = ИмяПоля;
	ИскатьПоИмениОбрабткаОжидания     = ИскатьПоИмени;
	ПроверкаПоШаблону                 = ПоШаблону;
	ЗначениеОбрабткаОжидания          = Значение;
	КоличествоСекундОбработкаОжидания = Ванесса.ЗначениеТаймаутаДляАсинхронногоШага(КоличествоСекунд);
	ПодключитьОбработчикОжидания("ОбработчикОжиданияУЭлементаЯЖдуЗначенияВТеченииСекунд",1,Ложь);
КонецФункции

&НаКлиенте
//И у элемента "Имя элемента" я жду значения "Значение" в течение 11 секунд
//@УЭлементаЯЖдуЗначенияВТечениеСекунд(Парам01,Парам02)

Функция УЭлементаЯЖдуЗначенияВТечениеСекунд(ИмяПоля,Значение,КоличествоСекунд,ИскатьПоИмени = Ложь) Экспорт
	УЭлементаЯЖдуЗначенияВТеченииСекунд(ИмяПоля,Значение,КоличествоСекунд,ИскатьПоИмени);
КонецФункции

&НаКлиенте
//И у элемента "Имя элемента" я жду значения "Значение" в течение 11 секунд по шаблону
//@УЭлементаЯЖдуЗначенияВТечениеСекундПоШаблону(Парам01,Парам02)

Функция УЭлементаЯЖдуЗначенияВТечениеСекундПоШаблону(ИмяПоля,Значение,КоличествоСекунд,ИскатьПоИмени = Ложь) Экспорт
	УЭлементаЯЖдуЗначенияВТеченииСекунд(ИмяПоля,Значение,КоличествоСекунд,ИскатьПоИмени,Истина);
КонецФункции

&НаКлиенте
//И у элемента с именем "Имя элемента" я жду значения "Значение"
//@УЭлементаСИменемЯЖдуЗначенияВТеченииСекунд(Парам01,Парам02)

Функция УЭлементаСИменемЯЖдуЗначенияВТеченииСекунд(ИмяПоля,Значение,КоличествоСекунд) Экспорт
	УЭлементаЯЖдуЗначенияВТеченииСекунд(ИмяПоля,Значение,КоличествоСекунд,Истина);
КонецФункции

&НаКлиенте
//И у элемента с именем "Имя элемента" я жду значения "Значение"
//@УЭлементаСИменемЯЖдуЗначенияВТечениеСекунд(Парам01,Парам02)

Функция УЭлементаСИменемЯЖдуЗначенияВТечениеСекунд(ИмяПоля,Значение,КоличествоСекунд) Экспорт
	УЭлементаСИменемЯЖдуЗначенияВТеченииСекунд(ИмяПоля,Значение,КоличествоСекунд);
КонецФункции

&НаКлиенте
//И у элемента с именем "Имя элемента" я жду значения "Значение" по шаблону
//@УЭлементаСИменемЯЖдуЗначенияВТечениеСекундПоШаблону(Парам01,Парам02)

Функция УЭлементаСИменемЯЖдуЗначенияВТечениеСекундПоШаблону(ИмяПоля,Значение,КоличествоСекунд) Экспорт
	УЭлементаЯЖдуЗначенияВТеченииСекунд(ИмяПоля,Значение,КоличествоСекунд,Истина,Истина);
КонецФункции

&НаКлиенте
//И в таблице "ТабличнаяЧасть1" я устанавливаю флаг "Реквизит булево"
//@ВТЧЯУстанавливаюФлаг(Парам01,Парам02)

Функция ВТЧЯУстанавливаюФлаг(Парам01,Парам02) Экспорт
	ВОткрытойФормеВТЧЯУстанавливаюФлаг(Парам01,Парам02);
КонецФункции

&НаКлиенте
//И в таблице "ТабличнаяЧасть1" я устанавливаю флаг "Реквизит булево"
//@ВТаблицеЯУстанавливаюФлаг(Парам01,Парам02)

Функция ВТаблицеЯУстанавливаюФлаг(Парам01,Парам02) Экспорт
	ВОткрытойФормеВТЧЯУстанавливаюФлаг(Парам01,Парам02);
КонецФункции

&НаКлиенте
//И в таблице "ТабличнаяЧасть1" я устанавливаю флаг с именем "РеквизитБулево"
//@ВТаблицеЯУстанавливаюФлагСИменем(Парам01,Парам02)

Функция ВТаблицеЯУстанавливаюФлагСИменем(ИмяТЧ,ИмяРеквизита) Экспорт
	ВОткрытойФормеВТЧЯУстанавливаюФлагСЗаголовком(ИмяТЧ,ИмяРеквизита,Истина);
КонецФункции

&НаКлиенте
//В открытой форме в таблице "ТабличнаяЧасть1" я устанавливаю флаг "Реквизит булево"
//@ВОткрытойФормеВТЧЯУстанавливаюФлаг(Парам01,Парам02)

Функция ВОткрытойФормеВТЧЯУстанавливаюФлаг(ИмяТЧ,ИмяРеквизита) Экспорт
	ВОткрытойФормеВТЧЯУстанавливаюФлагСЗаголовком(ИмяТЧ,ИмяРеквизита);
КонецФункции

&НаКлиенте

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

	Возврат Ванесса.ПолучитьПредставлениеДанныхФлага(ПолеРеквизит);

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

&НаКлиенте
//В открытой форме в таблице "ТабличнаяЧасть1" я устанавливаю флаг с заголовком "Реквизит булево"
//@ВОткрытойФормеВТЧЯУстанавливаюФлагСЗаголовком(Парам01,Парам02)

[Assistant] Функция ОбработчикОжиданияУЭлементаЯЖдуЗначенияВТеченииСекунд()


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

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

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

	Если Метаданные.Справочники[ИмяСпр].Иерархический Тогда

		Запрос = Новый Запрос;
		Запрос.Текст =
		"ВЫБРАТЬ
		|	Справочник1.Ссылка
		|ИЗ
		|	Справочник.Справочник1 КАК Справочник1
		|ГДЕ
		|	ИСТИНА
		|	И НЕ Справочник1.ЭтоГруппа";

		Запрос.Текст = СтрЗаменить(Запрос.Текст,"Справочник1",ИмяСпр);

		РезультатЗапроса = Запрос.Выполнить();

		ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

		Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			ОбъектСпр = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
			Попытка
				ОбъектСпр.Удалить();
			Исключение
				Сообщить(ОписаниеОшибки());
			КонецПопытки;
		КонецЦикла;

		Запрос = Новый Запрос;
		Запрос.Текст =
		"ВЫБРАТЬ
		|	Справочник1.Ссылка
		|ИЗ
		|	Справочник.Справочник1 КАК Справочник1
		|ГДЕ
		|	ИСТИНА
		|	И Справочник1.ЭтоГруппа";

		Запрос.Текст = СтрЗаменить(Запрос.Текст,"Справочник1",ИмяСпр);

		РезультатЗапроса = Запрос.Выполнить();

		ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

		Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			ОбъектСпр = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
			Попытка
				ОбъектСпр.Удалить();
			Исключение
				Сообщить(ОписаниеОшибки());
			КонецПопытки;
		КонецЦикла;
	Иначе

		Запрос = Новый Запрос;
		Запрос.Текст =
		"ВЫБРАТЬ
		|	Справочник1.Ссылка
		|ИЗ
		|	Справочник.Справочник1 КАК Справочник1";

		Запрос.Текст = СтрЗаменить(Запрос.Текст,"Справочник1",ИмяСпр);

		РезультатЗапроса = Запрос.Выполнить();

		ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

		Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			ОбъектСпр = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект();
			Попытка
				ОбъектСпр.Удалить();
			Исключение
				Сообщить(ОписаниеОшибки());
			КонецПопытки;
		КонецЦикла;
	КонецЕсли;

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

&НаСервере

Функция ПолучитьМакетСервер(ИмяМакета)
	ОбъектСервер = РеквизитФормыВЗначение("Объект");
	Возврат ОбъектСервер.ПолучитьМакет(ИмяМакета);

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

&НаКлиенте

Функция ЕслиНаЭкранеДиалогМодальныйДиалогТоНадоЕгоЗакрытьVA()

	Если НЕ КонтекстСохраняемый.Свойство("ТестовоеПриложение") Тогда
		Возврат Неопределено;
	КонецЕсли;

	Если КонтекстСохраняемый.ТестовоеПриложение = Неопределено Тогда
		Возврат Неопределено;
	КонецЕсли;

	Нашли = Ложь;
	НужноеОкно = Неопределено;

	МодальныеОкна = Новый Массив;

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

	Если МодальныеОкна.Количество() = 0 Тогда
		Возврат Неопределено;
	КонецЕсли;

	Ванесса.ОбработатьСменуАктивногоОкна();

	Для Каждого НужноеОкно Из МодальныеОкна Цикл
		МассивКнопок = НужноеОкно.НайтиОбъекты(Тип("ТестируемаяКнопкаФормы"));

		Попытка
			Для Каждого Кнопка Из МассивКнопок Цикл
				Если НРег(Кнопка.ТекстЗаголовка) = "нет" Тогда
					Кнопка.Нажать();
					ЗаписатьВЖурналРегистрацииСообщениеОЗакрытииОкна(НужноеОкно.Заголовок);
					Прервать;
				ИначеЕсли НРег(Кнопка.ТекстЗаголовка) = "no" Тогда
					Кнопка.Нажать();
					ЗаписатьВЖурналРегистрацииСообщениеОЗакрытииОкна(НужноеОкно.Заголовок);
					Прервать;
				ИначеЕсли НРег(Кнопка.ТекстЗаголовка) = "отмена" Тогда
					Кнопка.Нажать();
					ЗаписатьВЖурналРегистрацииСообщениеОЗакрытииОкна(НужноеОкно.Заголовок);
					Прервать;
				ИначеЕсли ВРег(Кнопка.ТекстЗаголовка) = "OK" Тогда
					Кнопка.Нажать();
					ЗаписатьВЖурналРегистрацииСообщениеОЗакрытииОкна(НужноеОкно.Заголовок);
					Прервать;
				ИначеЕсли НРег(Кнопка.ТекстЗаголовка) = "закрыть" Тогда
					//для форм БСП
					Кнопка.Нажать();
					ЗаписатьВЖурналРегистрацииСообщениеОЗакрытииОкна(НужноеОкно.Заголовок);
					Прервать;
				ИначеЕсли НРег(Кнопка.ТекстЗаголовка) = "закрыть форму" Тогда
					Кнопка.Нажать();
					ЗаписатьВЖурналРегистрацииСообщениеОЗакрытииОкна(НужноеОкно.Заголовок);
					Прервать;
				ИначеЕсли НРег(Кнопка.ТекстЗаголовка) = "close the form" Тогда
					Кнопка.Нажать();
					ЗаписатьВЖурналРегистрацииСообщениеОЗакрытииОкна(НужноеОкно.Заголовок);
					Прервать;
				КонецЕсли;
			КонецЦикла;
		Исключение
		КонецПопытки;

	КонецЦикла;

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

&НаКлиенте

Процедура ЗаписатьВЖурналРегистрацииСообщениеОЗакрытииОкна(ЗаголовокОкна)
	Ванесса.ЗаписатьЛогВЖРИнформация("ЗакрытиеОкна", ЗаголовокОкна);
КонецПроцедуры

&НаКлиенте

Функция НаЭкранеДиалогАвторизации()
	Возврат Ванесса.НаЭкранеДиалогАвторизации();
КонецФункции

&НаКлиенте

Функция ЗаголовокиОконТиповыхКонфигурацийНРег()
	Массив = Новый Массив;
	Массив.Добавить(НРег(".:      Выберите операцию      :."));
	Возврат Массив;
КонецФункции

&НаКлиенте
//И я закрыл все окна клиентского приложения
//@ЯЗакрылВсеОкнаКлиентскогоПриложения()

Функция ЯЗакрылВсеОкнаКлиентскогоПриложения() Экспорт

	Ванесса.ЗакрытьОкнаКлиентскогоПриложения();

	Ванесса.ЗапретитьВыполнениеШагов();
	ПодключитьОбработчикОжидания("ЯЗакрылВсеОкнаКлиентскогоПриложенияПродолжение", 0.1, Истина);

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

&НаКлиенте

Процедура ЯЗакрылВсеОкнаКлиентскогоПриложенияПродолжение()

	Попытка
		ЕслиНаЭкранеДиалогМодальныйДиалогТоНадоЕгоЗакрытьVA();
	Исключение
	КонецПопытки;
	Ванесса.ПродолжитьВыполнениеШагов();

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

&НаКлиенте
//И я закрываю все окна клиентского приложения
//@ЯЗакрываюВсеОкнаКлиентскогоПриложения()

Функция ЯЗакрываюВсеОкнаКлиентскогоПриложения() Экспорт

	ЯЗакрылВсеОкнаКлиентскогоПриложения();

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

&НаКлиенте
//И я закрыл все окна клиентского приложения кроме "Нужное окно"
//@ЯЗакрылВсеОкнаКлиентскогоПриложенияКроме(Парам01)

[Assistant] Функция УдалитьВсеЭлементыСправочникаВида(ИмяСпр)


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

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

Функция ИмяФункции(Знач ИмяОкна,ЧастьИмени2 = Неопределено
	                           ,ЧастьИмени3 = Неопределено
	                           ,ЧастьИмени4 = Неопределено
	                           ,ЧастьИмени5 = Неопределено
	                           ,ЧастьИмени6 = Неопределено
	                           ,ЧастьИмени7 = Неопределено) Экспорт

	ПереданМассивОкон = Ложь;
	Если ТипЗнч(ИмяОкна) = Тип("Массив") Тогда
		ПереданМассивОкон = Истина;
		ПереданныеОкна = Новый Массив;
		Для Каждого Элем Из ИмяОкна Цикл
			ПереданныеОкна.Добавить(Элем.Кол1);
		КонецЦикла;
	Иначе
		Ванесса.СоединитьСтрокиЕслиЭтоВозможно(ИмяОкна,ЧастьИмени2,
	                                       ЧастьИмени3,
	                                       ЧастьИмени4,
	                                       ЧастьИмени5,
	                                       ЧастьИмени6,
	                                       ЧастьИмени7);
	КонецЕсли;

	Ванесса.ОбработатьСменуАктивногоОкна();

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

	Если КонтекстСохраняемый.ТестовоеПриложение = Неопределено Тогда
		ВызватьИсключение Ванесса.ПолучитьТекстСообщенияПользователю("Не подключен TestClient.");
	КонецЕсли;

	ДанныеШагаСценария = Ванесса.ДанныеШагаСценария();
	ЭтоОбычныйШагОбернутыйВУсловие = Ложь;
	Если ДанныеШагаСценария.Свойство("ЭтоОбычныйШагОбернутыйВУсловие") Тогда
		ЭтоОбычныйШагОбернутыйВУсловие = ДанныеШагаСценария.ЭтоОбычныйШагОбернутыйВУсловие;
	КонецЕсли;

	ТекДата = ТекущаяДата();
	Если ЭтоОбычныйШагОбернутыйВУсловие Тогда
		//Когда шаг обернут в условие не надо ждать полный таймаут.
		МаксДата = ТекДата + Мин(Макс(Ванесса.ЗначениеКоличествоСекундПоискаОкна(), 1), 10);
	Иначе
		МаксДата = ТекДата + Макс(Ванесса.ЗначениеКоличествоСекундПоискаОкна(), 1);
	КонецЕсли;

	ТекстСообщения = "";
	БылаХотябыОднаИтерация = Ложь;

	Если ПереданМассивОкон Тогда
		НужноеОкноНайдено = Ложь;
		АктивноеОкно = Неопределено;
		Пока Истина Цикл

			Если ТекущаяДата() > МаксДата И БылаХотябыОднаИтерация Тогда
				Прервать;
			КонецЕсли;

			Если Ванесса.ВыполнениеСценариевБудетОстановлено() Тогда
				Возврат Неопределено;
			КонецЕсли;

			БылаХотябыОднаИтерация = Истина;

			Попытка
				Таймаут = 1;

				КоличествоПопытокПолученияОкнаИзПриложения = Ванесса.ЗначениеКоличествоПопытокВыполненияДействия();
				ПолучилосьПолучитьАктивноеОкно             = Ложь;
				Для Ккк = 1 По КоличествоПопытокПолученияОкнаИзПриложения Цикл
					Попытка
						АктивноеОкно                   = КонтекстСохраняемый.ТестовоеПриложение.ПолучитьАктивноеОкно();
						ПолучилосьПолучитьАктивноеОкно = Истина;
						Прервать;
					Исключение
						Ванесса.sleep(1);
					КонецПопытки;
				КонецЦикла;

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

				Заголовок = АктивноеОкно.Заголовок;
				НужноеОкноНайдено = Ложь;
				Для Каждого ТекИмяОкна Из ПереданныеОкна Цикл
					Если Ванесса.СтрокаСоответствуетШаблону(Заголовок,ТекИмяОкна) Тогда
						НужноеОкноНайдено = Истина;
						Прервать;
					КонецЕсли;
				КонецЦикла;

				Если НЕ НужноеОкноНайдено Тогда
					ТекстСообщения = Ванесса.ПолучитьТекстСообщенияПользователю("Ожидали, что активным окном будет окно из списка <%1>, а нашли <%2>. Таймаут поиска окна: %3");

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

				Прервать;
			Исключение
				Ванесса.sleep(1);
			КонецПопытки;
		КонецЦикла;

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

		Ванесса.ЗапомнитьАктивноеОкно(АктивноеОкно);
	ИначеЕсли Ванесса.ЭтоЗаголовокОкнаМодальногоДиалога(ИмяОкна)
		Или НРег(ИмяОкна) = "выбор типа данных"
		Или НРег(ИмяОкна) = "выберите период"
		Или НРег(ИмяОкна) = "найти"
		Тогда

		Пока Истина Цикл

			Если ТекущаяДата() > МаксДата И БылаХотябыОднаИтерация Тогда
				Прервать;
			КонецЕсли;

			Если Ванесса.ВыполнениеСценариевБудетОстановлено() Тогда
				Возврат Неопределено;
			КонецЕсли;

			БылаХотябыОднаИтерация = Истина;

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

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

		Ванесса.ЗапомнитьАктивноеОкно(АктивноеОкно);
	Иначе

		НужноеОкноНайдено = Ложь;
		Пока Истина Цикл
			Попытка

				Если ТекущаяДата() > МаксДата И БылаХотябыОднаИтерация Тогда
					Прервать;
				КонецЕсли;

				Если Ванесса.ВыполнениеСценариевБудетОстановлено() Тогда
					Возврат Неопределено;
				КонецЕсли;

				БылаХотябыОднаИтерация = Истина;

				Таймаут       = 1;

				АктивноеОкно2 = КонтекстСохраняемый.ТестовоеПриложение.НайтиОбъект(Тип("ТестируемоеОкноКлиентскогоПриложения"), ИмяОкна, , Таймаут);

				Если АктивноеОкно2 = Неопределено Тогда
					Попытка
						ТекОкно = Ванесса.ПолучитьАктивноеОкноИзТестовоеПриложение();
						ЗаголовокАктивногоОкна = ТекОкно.Заголовок;
					Исключение
						ЗаголовокАктивногоОкна = "";
					КонецПопытки;

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

				КоличествоПопытокПолученияОкнаИзПриложения = Ванесса.ЗначениеКоличествоПопытокВыполненияДействия();
				ПолучилосьПолучитьАктивноеОкно             = Ложь;
				Для Ккк = 1 По КоличествоПопытокПолученияОкнаИзПриложения Цикл
					Попытка
						АктивноеОкно                   = КонтекстСохраняемый.ТестовоеПриложение.ПолучитьАктивноеОкно();
						ПолучилосьПолучитьАктивноеОкно = Истина;
						Прервать;
					Исключение
						Ванесса.sleep(1);
					КонецПопытки;
				КонецЦикла;

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

				ЭтоМодальныйДиалогПлатформы = Ложь;
				ФормаСПустымИменем = АктивноеОкно2.НайтиОбъект(Тип("ТестируемаяФорма"),,Неопределено);
				Если ФормаСПустымИменем <> Неопределено Тогда
					Если СокрЛП(ФормаСПустымИменем.ИмяФормы) = "" Тогда
						ЭтоМодальныйДиалогПлатформы = Истина;
					КонецЕсли;
				КонецЕсли;

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

				НужноеОкноНайдено = Истина;
				Прервать;
			Исключение
				Ванесса.sleep(1);
			КонецПопытки;
		КонецЦикла;

		Если Не НужноеОкноНайдено Тогда
			Если НЕ ЗначениеЗаполнено(ТекстСообщения) Тогда
				ТекстСообщения = ОписаниеОшибки();
			КонецЕсли;

			Попытка
				ДанныеДляАктуализации = Новый Структура;
				ДанныеДляАктуализации.Вставить("ОжидаемоеЗначение", ИмяОкна);
				ТекОкно = Ванесса.ПолучитьАктивноеОкноИзТестовоеПриложение();
				ЗаголовокАктивногоОкна = ТекОкно.Заголовок;
				ДанныеДляАктуализации.Вставить("ТекущееЗначение", ЗаголовокАктивногоОкна);
				Ванесса.УстановитьДанныеДляАктуализации(ДанныеДляАктуализации);
			Исключение
			КонецПопытки;

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

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

			Попытка

				ТекОкно = Ванесса.ПолучитьАктивноеОкноИзТестовоеПриложение();
				ЗаголовокАктивногоОкна = ТекОкно.Заголовок;
				ТекстСообщения = Ванесса.ДобавитьСтрокуВозможногоШаблона(ТекстСообщения, ЗаголовокАктивногоОкна, ИмяОкна);

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

			Ванесса.ЗаписатьЛогВЖРИнформация("ПроверкаАктивногоОкна.8", ТекстСообщения);
			ВызватьИсключение ТекстСообщения;
		КонецЕсли;

		Ванесса.ЗапомнитьАктивноеОкно(АктивноеОкно2);
	КонецЕсли;

	Если Ванесса.ЗначениеПаузаПриОткрытииОкна() > 0 Тогда
		//чтобы сработали оповещения форм
		Ванесса.Sleep(Ванесса.ЗначениеПаузаПриОткрытииОкна());
	КонецЕсли;

	Ванесса.ОтключитьДляПолейВозможностьЗатиранияТекстаПриЗавершенииСерверногоВызоваПриОткрытииОкна(ИмяОкна);

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

&НаКлиенте
//И я активизирую окно "Справочник1"
//@ЯАктивизируюОкно(Парам01)

[Assistant]
Функция ОткрылосьОкно(Знач ИмяОкна,ЧастьИмени2 = Неопределено
	                           ,ЧастьИмени3 = Неопределено
	                           ,ЧастьИмени4 = Неопределено
	                           ,ЧастьИмени5 = Неопределено
	                           ,ЧастьИмени6 = Неопределено
	                           ,ЧастьИмени7 = Неопределено)


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

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

Функция ИмяФункции(Знач ИмяОкна,ЧастьИмени2 = Неопределено
	                           ,ЧастьИмени3 = Неопределено
	                           ,ЧастьИмени4 = Неопределено
	                           ,ЧастьИмени5 = Неопределено
	                           ,ЧастьИмени6 = Неопределено
	                           ,ЧастьИмени7 = Неопределено) Экспорт

	Ванесса.ОбработатьСменуАктивногоОкна();
	Ванесса.СоединитьСтрокиЕслиЭтоВозможно(ИмяОкна,ЧастьИмени2,
	                                       ЧастьИмени3,
	                                       ЧастьИмени4,
	                                       ЧастьИмени5,
	                                       ЧастьИмени6,
	                                       ЧастьИмени7);

	СтрокаОшибки = "";
	БылаОшибка = Ложь;

	КоличествоПопыток = Ванесса.ЗначениеКоличествоПопытокВыполненияДействия();
	Для СчетчикПопыток = 1 По КоличествоПопыток Цикл
		БылаОшибка = Ложь;
		СтрокаОшибки = "";

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

			Прервать;

		Исключение
			СтрокаОшибки = ОписаниеОшибки();
			БылаОшибка = Истина;
			Если СчетчикПопыток < КоличествоПопыток Тогда
				Ванесса.sleep(1);
			КонецЕсли;
		КонецПопытки;

		Если НЕ БылаОшибка Тогда
			Прервать;
		КонецЕсли;
	КонецЦикла;

	Если БылаОшибка Тогда
		ВызватьИсключение СтрокаОшибки;
	КонецЕсли;

	Ванесса.ЗапомнитьАктивноеОкно(АктивноеОкно);
	АктивноеОкно.Активизировать();
КонецФункции

&НаКлиенте
//И я активизирую форму "ИмяФормы"
//@ЯАктивизируюФорму(Парам01)

Функция ЯАктивизируюФорму(ИмяФормы, ИскатьПоИмени = Ложь) Экспорт
	БылиОшибки = Истина;

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

		Если ТекФорма <> Неопределено Тогда
			Ванесса.ЗапомнитьАктивноеОкно(ТекОкно);
			ТекОкно.Активизировать();
			БылиОшибки = Ложь;
			Прервать;
		КонецЕсли;
	КонецЦикла;

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

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

&НаКлиенте
//И я активизирую форму с именем "ИмяФормы"
//@ЯАктивизируюФормуСИменем(Парам01)

Функция ЯАктивизируюФормуСИменем(ИмяФормы) Экспорт
	ЯАктивизируюФорму(ИмяФормы, Истина);
КонецФункции

&НаКлиенте
//Тогда открылась форма "Справочник.Справочник1.Форма.ФормаЭлемента"
//@ОткрыласьФорма(Парам01)

Функция ОткрыласьФорма(Знач ИмяФормыTestClient,ИскатьПоИмени = Ложь) Экспорт

	Ванесса.ПроверитьОткрыласьФорма(ИмяФормыTestClient, ИскатьПоИмени);

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

&НаКлиенте
//Тогда открылась форма с именем "Справочник.Справочник1.Форма.ФормаЭлемента"
//@ОткрыласьФормаСИменем(Парам01)

Функция ОткрыласьФормаСИменем(Знач ИмяФормыTestClient) Экспорт
	ОткрыласьФорма(ИмяФормыTestClient,Истина);
КонецФункции

&НаКлиенте

Функция ЯЖдуЗакрытияОкнаВТеченииСекундОбработчикОжидания()
	ИмяОбработчика = "ЯЖдуЗакрытияОкнаВТеченииСекундОбработчикОжидания";

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

	Ванесса.ПроверитьНеобходимостьЗакрытьСистемныйДиалог();

	Попытка
		НужноеОкно = Ванесса.НайтиОкноTestClientПоЗаголовку(ЗначениеОбрабткаОжидания);

		Если НужноеОкно = Неопределено Тогда
			ОтключитьОбработчикОжидания(ИмяОбработчика);
			Ванесса.ЗапомнитьАктивноеОкно(Неопределено);
			Ванесса.ПродолжитьВыполнениеШагов();
			Возврат Неопределено;
		КонецЕсли;
	Исключение
	КонецПопытки;

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

&НаКлиенте
//И я жду закрытия окна "Имя окна" в течении 60 секунд
//@ЯЖдуЗакрытияОкнаВТеченииСекунд(Парам01,Парам02)

Функция ЯЖдуЗакрытияОкнаВТеченииСекунд(ИмяОкна,КоличествоСекунд) Экспорт
	Попытка
		НужноеОкно = Ванесса.НайтиОкноTestClientПоЗаголовку(ИмяОкна);
		Если НужноеОкно = Неопределено Тогда
			Ванесса.ЗапомнитьАктивноеОкно(Неопределено);
			Возврат Неопределено;
		КонецЕсли;
	Исключение
		//значит будет подключен таймер
	КонецПопытки;

	Ванесса.ЗапретитьВыполнениеШагов();

	Ванесса.ОбработатьСменуАктивногоОкна();

	ДатаНачалаОбработкиОжидания       = ТекущаяДата();
	ЗначениеОбрабткаОжидания          = ИмяОкна;
	КоличествоСекундОбработкаОжидания = Ванесса.ЗначениеТаймаутаДляАсинхронногоШага(КоличествоСекунд);
	ПодключитьОбработчикОжидания("ЯЖдуЗакрытияОкнаВТеченииСекундОбработчикОжидания",1,Ложь);
КонецФункции

&НаКлиенте
//И я жду закрытия окна "Имя окна" в течение 60 секунд
//@ЯЖдуЗакрытияОкнаВТечениеСекунд(Парам01,Парам02)

Функция ЯЖдуЗакрытияОкнаВТечениеСекунд(ИмяОкна,КоличествоСекунд) Экспорт
	ЯЖдуЗакрытияОкнаВТеченииСекунд(ИмяОкна,КоличествоСекунд);
КонецФункции

&НаКлиенте

Функция ЯЖдуОткрытияОкнаВТеченииСекундОбработчикОжидания()
	ИмяОбработчика = "ЯЖдуОткрытияОкнаВТеченииСекундОбработчикОжидания";

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

	Ванесса.ПроверитьНеобходимостьЗакрытьСистемныйДиалог();

	Попытка
		НужноеОкно = Ванесса.НайтиОкноTestClientПоЗаголовку(ЗначениеОбрабткаОжидания);
	Исключение
		НужноеОкно = Неопределено;
	КонецПопытки;

	Если НужноеОкно <> Неопределено Тогда
		ОтключитьОбработчикОжидания(ИмяОбработчика);
		Если Ванесса.ЗначениеПаузаПриОткрытииОкна() > 0 Тогда
			//чтобы сработали оповещения форм
			Ванесса.Sleep(Ванесса.ЗначениеПаузаПриОткрытииОкна());
		КонецЕсли;
		Ванесса.ПродолжитьВыполнениеШагов();
		Возврат Неопределено;
	КонецЕсли;

	Если (ТекущаяДата() - ДатаНачалаОбработкиОжидания) > КоличествоСекундОбработкаОжидания Тогда
		Попытка
			АктивноеОкно = Ванесса.ПолучитьАктивноеОкноИзТестовоеПриложение();
			ЗаголовокТекущегоОкна = АктивноеОкно.Заголовок;
		Исключение
			ЗаголовокТекущегоОкна = "";
		КонецПопытки;

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

&НаКлиенте
//И я жду открытия окна "Имя окна" в течении 60 секунд
//@ЯЖдуОткрытияОкнаВТеченииСекунд(Парам01,Парам02)

[Assistant]
Функция ЯАктивизируюОкно(Знач ИмяОкна,ЧастьИмени2 = Неопределено
	                           ,ЧастьИмени3 = Неопределено
	                           ,ЧастьИмени4 = Неопределено
	                           ,ЧастьИмени5 = Неопределено
	                           ,ЧастьИмени6 = Неопределено
	                           ,ЧастьИмени7 = Неопределено)


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

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

Функция ИмяФункции(ИмяОкна,КоличествоСекунд) Экспорт
	Попытка
		НужноеОкно = Ванесса.НайтиОкноTestClientПоЗаголовку(ИмяОкна);
	Исключение
		НужноеОкно = Неопределено;
	КонецПопытки;

	Если НужноеОкно <> Неопределено Тогда
		Ванесса.ОбработатьСменуАктивногоОкна();
		Возврат Неопределено;
	КонецЕсли;

	Ванесса.ЗапретитьВыполнениеШагов();
	Ванесса.ОбработатьСменуАктивногоОкна();
	ДатаНачалаОбработкиОжидания       = ТекущаяДата();
	ЗначениеОбрабткаОжидания          = ИмяОкна;
	КоличествоСекундОбработкаОжидания = Ванесса.ЗначениеТаймаутаДляАсинхронногоШага(КоличествоСекунд);
	ПодключитьОбработчикОжидания("ЯЖдуОткрытияОкнаВТеченииСекундОбработчикОжидания",1,Ложь);
КонецФункции

&НаКлиенте
//И я жду открытия окна "Имя окна" в течение 60 секунд
//@ЯЖдуОткрытияОкнаВТечениеСекунд(Парам01,Парам02)

Функция ЯЖдуОткрытияОкнаВТечениеСекунд(ИмяОкна,КоличествоСекунд) Экспорт
	ЯЖдуОткрытияОкнаВТеченииСекунд(ИмяОкна,КоличествоСекунд);
КонецФункции

&НаКлиенте
//И я жду, что активным окном станет "Заголовок окна" в течение 10 секунд
//@ЯЖдуЧтоАктивнымОкномСтанетВТечениеСекунд(Парам01,Парам02)

Функция ЯЖдуЧтоАктивнымОкномСтанетВТечениеСекунд(ИмяОкна, КоличествоСекунд) Экспорт
	Ванесса.ЗапретитьВыполнениеШагов();
	Ванесса.ОбработатьСменуАктивногоОкна();
	ДатаНачалаОбработкиОжидания       = ТекущаяДата();
	ЗначениеОбрабткаОжидания          = ИмяОкна;
	КоличествоСекундОбработкаОжидания = Ванесса.ЗначениеТаймаутаДляАсинхронногоШага(КоличествоСекунд);
	ПодключитьОбработчикОжидания("ЯЖдуЧтоАктивнымОкномСтанетВТечениеСекундОбработчикОжидания",1,Ложь);
КонецФункции

&НаКлиенте

Функция ЯЖдуЧтоАктивнымОкномСтанетВТечениеСекундОбработчикОжидания()
	ИмяОбработчика = "ЯЖдуЧтоАктивнымОкномСтанетВТечениеСекундОбработчикОжидания";

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

	Ванесса.ПроверитьНеобходимостьЗакрытьСистемныйДиалог();

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

	Попытка
		АктивноеОкно = Ванесса.ПолучитьАктивноеОкноИзТестовоеПриложение();
	Исключение
		АктивноеОкно = Неопределено;
	КонецПопытки;

	Если АктивноеОкно <> Неопределено Тогда
		Если АктивноеОкно.Заголовок = ЗначениеОбрабткаОжидания Тогда
			ОтключитьОбработчикОжидания(ИмяОбработчика);
			Если Ванесса.ЗначениеПаузаПриОткрытииОкна() > 0 Тогда
				//чтобы сработали оповещения форм
				Ванесса.Sleep(Ванесса.ЗначениеПаузаПриОткрытииОкна());
			КонецЕсли;
			Ванесса.ПродолжитьВыполнениеШагов();
		КонецЕсли;
	КонецЕсли;

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

&НаКлиенте

Функция ЯЖдуОткрытияОкнаОтличногоОтВТечениеСекундОбработчикОжидания()
	ИмяОбработчика = "ЯЖдуОткрытияОкнаОтличногоОтВТечениеСекундОбработчикОжидания";

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

	Ванесса.ПроверитьНеобходимостьЗакрытьСистемныйДиалог();

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

	Попытка
		АктивноеОкно = Ванесса.ПолучитьАктивноеОкноИзТестовоеПриложение();
	Исключение
		АктивноеОкно = Неопределено;
	КонецПопытки;

	Если АктивноеОкно <> Неопределено Тогда
		Если АктивноеОкно.Заголовок <> ЗначениеОбрабткаОжидания Тогда
			ОтключитьОбработчикОжидания(ИмяОбработчика);
			Если Ванесса.ЗначениеПаузаПриОткрытииОкна() > 0 Тогда
				//чтобы сработали оповещения форм
				Ванесса.Sleep(Ванесса.ЗначениеПаузаПриОткрытииОкна());
			КонецЕсли;
			Ванесса.ПродолжитьВыполнениеШагов();
		КонецЕсли;
	КонецЕсли;

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

&НаКлиенте
//И я жду открытия окна отличного от "Имя окна" в течение 60 секунд
//@ЯЖдуОткрытияОкнаОтличногоОтВТечениеСекунд(Парам01,Парам02)

Функция ЯЖдуОткрытияОкнаОтличногоОтВТечениеСекунд(ИмяОкна,КоличествоСекунд) Экспорт
	//АктивноеОкно = Ванесса.ПолучитьАктивноеОкноИзТестовоеПриложение();
	//Если АктивноеОкно <> Неопределено Тогда
	//	Если АктивноеОкно.Заголовок <> ИмяОкна Тогда
	//		Ванесса.ОбработатьСменуАктивногоОкна();
	//		Возврат Неопределено;
	//	КонецЕсли;
	//КонецЕсли;

	Ванесса.ЗапретитьВыполнениеШагов();
	Ванесса.ОбработатьСменуАктивногоОкна();
	ДатаНачалаОбработкиОжидания       = ТекущаяДата();
	ЗначениеОбрабткаОжидания          = ИмяОкна;
	КоличествоСекундОбработкаОжидания = Ванесса.ЗначениеТаймаутаДляАсинхронногоШага(КоличествоСекунд);
	ПодключитьОбработчикОжидания("ЯЖдуОткрытияОкнаОтличногоОтВТечениеСекундОбработчикОжидания",1,Ложь);
КонецФункции

&НаКлиенте

Функция СделатьПереход(ТаблицаСписок,ОписаниеСтроки,ОшибкаПереходВниз,ОшибкаПереходВверх,ПереключитьВыделение = Ложь, ЗаданноеНаправление = Неопределено)
	Возврат Ванесса.СделатьПереход(ТаблицаСписок,ОписаниеСтроки,ОшибкаПереходВниз,ОшибкаПереходВверх,ПереключитьВыделение, ЗаданноеНаправление);
КонецФункции

&НаКлиенте

Функция ПривестиСтрокиКОднойДлине(ИмяКолонки,ЗначениеКолонки)
	Пока СтрДлина(ИмяКолонки) > СтрДлина(ЗначениеКолонки) Цикл
		ЗначениеКолонки = ЗначениеКолонки + " ";
	КонецЦикла;
	Пока СтрДлина(ИмяКолонки) < СтрДлина(ЗначениеКолонки) Цикл
		ИмяКолонки = ИмяКолонки + " ";
	КонецЦикла;
КонецФункции

&НаКлиенте

Функция ПолучитьОшибкаНетКолонок(ИмяТЧ,ТабПарам)
	Стр = "Не найдены колонки: ";

	Попытка
		Таблица = Ванесса.НайтиТЧПоИмени(ИмяТЧ);
	Исключение
		Возврат "";
	КонецПопытки;

	Попытка
		КолонкиТаблицы = Таблица.НайтиОбъекты();
	Исключение
		Возврат "";
	КонецПопытки;

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

	БылиОшибки = Ложь;

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

	Если Не БылиОшибки Тогда
		Возврат "";
	КонецЕсли;

	Если Прав(Стр,2) = ", " Тогда
		Стр = Лев(Стр,СтрДлина(Стр)-2);
	КонецЕсли;

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

&НаКлиенте

[Assistant] Функция ЯЖдуОткрытияОкнаВТеченииСекунд(ИмяОкна,КоличествоСекунд)


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

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

Функция ИмяФункции(ИмяТЧ,ОшибкаПереходВниз,ОшибкаПереходВверх,ТабПарам)
	ОшибкаНетКолонок = ПолучитьОшибкаНетКолонок(ИмяТЧ,ТабПарам);

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

	СтрокаИмКолонки = "		| ";
	СтрокаЗначение  = "		| ";

	Колонки = ТабПарам[0];
	Для Каждого Элем Из Колонки Цикл
		ИмяКолонки      = "'" + Элем.Значение + "'";
		ЗначениеКолонки = "'" + ТабПарам[1][Элем.Ключ] + "'";

		ПривестиСтрокиКОднойДлине(ИмяКолонки,ЗначениеКолонки);

		СтрокаИмКолонки = СтрокаИмКолонки + ИмяКолонки      + " | ";
		СтрокаЗначение  = СтрокаЗначение  + ЗначениеКолонки + " | ";
	КонецЦикла;

	Стр = Стр + СтрокаИмКолонки + Символы.ПС + СтрокаЗначение;

	Сообщить(Стр);
	Если ОшибкаПереходВниз <> "" Тогда
		Сообщить(ОшибкаПереходВниз);
	КонецЕсли;
	Если ОшибкаПереходВверх <> "" Тогда
		Сообщить(ОшибкаПереходВверх);
	КонецЕсли;

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

&НаКлиенте

Функция ПолучитьОписаниеСтрокиИзТаблицы(ТабПарам,ИмяТаблицы = Неопределено,ДопПараметры = Неопределено)
	Возврат Ванесса.ПолучитьОписаниеСтрокиИзТаблицы(ТабПарам,ИмяТаблицы,ДопПараметры);
КонецФункции

&НаКлиенте
//В форме "Справочник1" в таблице "Список" я перехожу к строке с переключением выделения:
//@ВТаблицеЯПерехожуКСтрокеСПереключениемВыделения(Парам01,Парам02,ТабПарам)

Функция ВТаблицеЯПерехожуКСтрокеСПереключениемВыделения(ИмяТЧ,ТабПарам) Экспорт
	ВТаблицеЯПерехожуКСтрокеСлужебный(ИмяТЧ,ТабПарам,Истина);
КонецФункции

&НаКлиенте
//В форме "Справочник1" в таблице "Список" я перехожу к строке:
//@ВФормеВТаблицеЯПерехожуКСтроке(Парам01,Парам02,ТабПарам)

Функция ВФормеВТаблицеЯПерехожуКСтроке(ИмяФормы,ИмяТЧ,ТабПарам) Экспорт
	ТекстСообщения = Ванесса.ПолучитьТекстСообщенияПользователю("Должна передаваться таблица с двумя строками.");
	Ванесса.ПроверитьРавенство(ТабПарам.Количество(),2,ТекстСообщения);

	НужнаяФорма = НайтиФормуПоЗаголовку(ИмяФормы);

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

	КонецЕсли;

	ТаблицаСписок = Ванесса.НайтиТЧПоИмени(ИмяТЧ,НужнаяФорма);

	ТаблицаСписок.Активизировать();

	ОписаниеСтроки = ПолучитьОписаниеСтрокиИзТаблицы(ТабПарам,ТаблицаСписок.Имя);

	ОшибкаПереходВниз  = "";
	ОшибкаПереходВверх = "";

	ПолучилосьПерейти = СделатьПереход(ТаблицаСписок,ОписаниеСтроки,ОшибкаПереходВниз,ОшибкаПереходВверх);
	Если НЕ ПолучилосьПерейти Тогда
		Попытка
			//Возможно, это  ошибка платформы. Такое бывает с таблицами значений в УФ. Смотри https://github.com/silverbulleters/vanessa-behavior/issues/342
			//Делаем обход проблемы
			ТаблицаСписок.ПерейтиКПервойСтроке();
			ПолучилосьПерейти = СделатьПереход(ТаблицаСписок,ОписаниеСтроки,ОшибкаПереходВниз,ОшибкаПереходВверх);
		Исключение
			Стр = ПолучитьОшибкуПерехода(ИмяТЧ,ОшибкаПереходВниз,ОшибкаПереходВверх,ТабПарам);
			ВызватьИсключение Стр;
		КонецПопытки;
	КонецЕсли;

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

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

&НаКлиенте

Функция ПерейтиКСтрокеТаблицы(ИмяТЧ, ОписаниеСтроки,ТабПарам) Экспорт

	ТаблицаСписок = Ванесса.НайтиТЧПоИмени(ИмяТЧ);
	ТаблицаСписок.Активизировать();

	ОшибкаПереходВниз  = "";
	ОшибкаПереходВверх = "";

	ПолучилосьПерейти = СделатьПереход(ТаблицаСписок,ОписаниеСтроки,ОшибкаПереходВниз,ОшибкаПереходВверх);
	Если НЕ ПолучилосьПерейти Тогда
		Попытка
			//Возможно, это  ошибка платформы. Такое бывает с таблицами значений в УФ. Смотри https://github.com/silverbulleters/vanessa-behavior/issues/342
			//Делаем обход проблемы
			ТаблицаСписок.ПерейтиКПервойСтроке();
			ПолучилосьПерейти = СделатьПереход(ТаблицаСписок,ОписаниеСтроки,ОшибкаПереходВниз,ОшибкаПереходВверх);
		Исключение
			Стр = ПолучитьОшибкуПерехода(ИмяТЧ,ОшибкаПереходВниз,ОшибкаПереходВверх,ТабПарам);
			ВызватьИсключение Стр;
		КонецПопытки;
	КонецЕсли;

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

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

&НаКлиенте
//И в таблице "Таблица" я перехожу к строке содержащей подстроки
//@ВТаблицеЯПерехожуКСтрокеСодержащейПодстроки(Парам01,ТабПарам)

[Assistant] Функция ПолучитьОшибкуПерехода(ИмяТЧ,ОшибкаПереходВниз,ОшибкаПереходВверх,ТабПарам)


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

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

Функция ИмяФункции(ИмяРеквизита,Текст,ИскатьПоИмени = Ложь) Экспорт

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

	ТипПоля = Тип("ТестируемоеПолеФормы");

	ТекстОшибки = "";

	НадоВызватьИсключение = Истина;
	КоличествоПопыток = Ванесса.ЗначениеКоличествоПопытокВыполненияДействия();
	Для СчетчикПопыток = 1 По КоличествоПопыток Цикл
		Попытка

			ДопПараметры = Новый Структура;
			ДопПараметры.Вставить("ИскатьТолькоПоляВКоторыеВозможенВводТекста", Истина);
			ДопПараметры.Вставить("КоличествоПопыток", 1);
			ПолеРеквизит = Ванесса.НайтиРеквизитОткрытойФормыПоЗаголовку(ИмяРеквизита,ИскатьПоИмени, Истина, ТипПоля,ДопПараметры);

			Если ПолеРеквизит.Вид = ВидПоляФормы.ПолеФорматированногоДокумента или ПолеРеквизит.Вид = ВидПоляФормы.ПолеHTMLДокумента Тогда
				ПолеРеквизит.Активизировать();
				Если Ванесса.Версия8325ИлиВыше Тогда
					ПолеРеквизит.ВвестиHTMLДокумента(Текст);
				Иначе
					ПолеРеквизит.ВвестиHTML(Текст);
				КонецЕсли;

			Иначе
				Если Текст = "" Тогда
					ПолеРеквизит.Очистить();
				Иначе
					Ванесса.ВвестиВПолеТекст(ПолеРеквизит, Текст);
				КонецЕсли;
			КонецЕсли;

			НадоВызватьИсключение = Ложь;
			Прервать;
		Исключение
			ТекстОшибки = ОписаниеОшибки();
			Если СчетчикПопыток < КоличествоПопыток Тогда
				Ванесса.sleep(1);
			КонецЕсли;
			Ванесса.ОбработатьСменуАктивногоОкна();
		КонецПопытки;
	КонецЦикла;

	Если НадоВызватьИсключение Тогда
		ВызватьИсключение ТекстОшибки;
	КонецЕсли;

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

&НаКлиенте
//В открытой форме в поле "Реквизит строка" я ввожу текст "тест"
//@ВОткрытойФормеВПолеЯВвожуТекст(Парам01,Парам02)

Функция ВОткрытойФормеВПолеЯВвожуТекст(ИмяРеквизита,Текст,ИскатьПоИмени = Ложь) Экспорт
	ВОткрытойФормеВПолеСЗаголовкомЯВвожуТекст(ИмяРеквизита,Текст,ИскатьПоИмени);
КонецФункции

&НаКлиенте
//В открытой форме в поле с именем "Реквизит строка" я ввожу текст "тест"
//@ВОткрытойФормеВПолеСИменемЯВвожуТекст(Парам01,Парам02)

Функция ВОткрытойФормеВПолеСИменемЯВвожуТекст(ИмяРеквизита,Текст) Экспорт
	ВОткрытойФормеВПолеСЗаголовкомЯВвожуТекст(ИмяРеквизита,Текст,Истина);
КонецФункции

&НаКлиенте

Процедура ВОткрытойФормеВПолосеРегулированияЯПерехожуКЗначению(ИмяИлиЗаголовокПоля, Значение, ИскатьПоИмени = Ложь)

	Если ТипЗнч(Значение) <> Тип("Число") Тогда
		ВызватьИсключение НСтр("ru = 'Укажите в качестве значения число'");
	КонецЕсли;

	ТипПоля = Тип("ТестируемоеПолеФормы");

	ТекстОшибки = "";

	НадоВызватьИсключение = Истина;
	КоличествоПопыток = Ванесса.ЗначениеКоличествоПопытокВыполненияДействия();
	Для СчетчикПопыток = 1 По КоличествоПопыток Цикл
		Попытка

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

			ПолеРеквизит.Активизировать();
			ПолеРеквизит.ПерейтиКЗначению(Значение);

			НадоВызватьИсключение = Ложь;
			Прервать;
		Исключение
			ТекстОшибки = ОписаниеОшибки();
			Если СчетчикПопыток < КоличествоПопыток Тогда
				Ванесса.sleep(1);
			КонецЕсли;
			Ванесса.ОбработатьСменуАктивногоОкна();
		КонецПопытки;
	КонецЦикла;

	Если НадоВызватьИсключение Тогда
		ВызватьИсключение ТекстОшибки;
	КонецЕсли;

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

&НаКлиенте
//В открытой форме я нажимаю на кнопку с заголовком "Записать и закрыть"
//@ВОткрытойФормеЯНажимаюНаКнопкуСЗаголовком(Парам01)

Функция ВОткрытойФормеЯНажимаюНаКнопкуСЗаголовком(Знач ИмяКнопки, ИскатьПоИмени = Ложь) Экспорт

	Ванесса.ВОткрытойФормеЯНажимаюНаКнопкуСЗаголовком(ИмяКнопки, ИскатьПоИмени);

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

&НаКлиенте
//В открытой форме я нажимаю на кнопку "Записать и закрыть"
//@ВОткрытойФормеЯНажимаюНаКнопку(Парам01)

Функция ВОткрытойФормеЯНажимаюНаКнопку(ИмяКнопки,ИскатьПоИмени = Ложь) Экспорт
	ВОткрытойФормеЯНажимаюНаКнопкуСЗаголовком(ИмяКнопки,ИскатьПоИмени);
КонецФункции

&НаКлиенте

Процедура ЯНажимаюНаГруппуСлужебный(ИмяПоля, ИскатьПоИмени)
	Ванесса.ЯНажимаюНаГруппу(ИмяПоля, ИскатьПоИмени);
КонецПроцедуры

&НаКлиенте
//И я нажимаю на группу 'Выемка_Карточка'
//@ЯНажимаюНаГруппу(Парам01)

Функция ЯНажимаюНаГруппу(ИмяПоля) Экспорт
	ЯНажимаюНаГруппуСлужебный(ИмяПоля, Ложь);
КонецФункции

&НаКлиенте
//И я нажимаю на группу с именем 'Выемка_Карточка'
//@ЯНажимаюНаГруппуСИменем(Парам01)

Функция ЯНажимаюНаГруппуСИменем(ИмяПоля) Экспорт
	ЯНажимаюНаГруппуСлужебный(ИмяПоля, Истина);
КонецФункции

&НаКлиенте

Функция НажтиеНаКнопку()
	Ванесса.ПереместитьКурсорМышиКАктивномуОбъекту();
	Ванесса.ПодсветитьАктивныйЭлементФормы();
	ТекущийЭлементДляРаботы.Нажать();
	Ванесса.ОбработатьСменуАктивногоОкна();
	Ванесса.ПродолжитьВыполнениеШагов();
КонецФункции

&НаСервере

[Assistant] Функция ВОткрытойФормеВПолеСЗаголовкомЯВвожуТекст(ИмяРеквизита,Текст,ИскатьПоИмени = Ложь)


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

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

Функция ИмяФункции(ИмяТЧ,ИмяРеквизита,ИскатьПоИмени = Ложь) Экспорт
	ТЧ = Ванесса.НайтиТЧПоИмени(ИмяТЧ);

	Если ИскатьПоИмени Тогда
		ПолеРеквизит = Ванесса.НайтиРеквизитТаблицы(ИмяТЧ,ИмяРеквизита,ИскатьПоИмени,ТЧ);
	Иначе
		ПолеРеквизит = Ванесса.НайтиРеквизитТаблицы(ИмяТЧ,ИмяРеквизита,ИскатьПоИмени,ТЧ);
	КонецЕсли;

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

	ПроверитьВидимостьПоляПользователю(ПолеРеквизит,ИмяРеквизита);
	ПолеРеквизит.Активизировать();

	Если НЕ ТЧ.ТекущийРежимРедактирование() Тогда
		ТЧ.ИзменитьСтроку();
	КонецЕсли;

	Ванесса.ПереместитьКурсорККнопкеОчиститьПоле(ПолеРеквизит);

	ПолеРеквизит.Очистить();
КонецФункции

&НаКлиенте
//И В таблице "ДокументыПоВидам" я нажимаю кнопку очистить у поля с именем "Скан"
//@ВТаблицеЯНажимаюКнопкуОчиститьУПоляСИменем(Парам01,Парам02)

Функция ВТаблицеЯНажимаюКнопкуОчиститьУПоляСИменем(ИмяТЧ,ИмяРеквизита,ИскатьПоИмени = Ложь) Экспорт
	ВТаблицеЯНажимаюКнопкуОчиститьУПоля(ИмяТЧ,ИмяРеквизита,Истина);
КонецФункции

&НаКлиенте
//И В открытой форме в таблице  "Список" я перехожу на первую строку
//@ВОткрытойФормеВТЧЯПерехожуНаПервуюСтроку(Парам01)

Функция ВОткрытойФормеВТЧЯПерехожуНаПервуюСтроку(ИмяТЧ) Экспорт
	ТЧ = Ванесса.НайтиТЧПоИмени(ИмяТЧ);
	ТЧ.ПерейтиКПервойСтроке();
КонецФункции

&НаКлиенте
//И В таблице  "Список" я перехожу на первую строку
//@ВТЧЯПерехожуНаПервуюСтроку(Парам01)

Функция ВТЧЯПерехожуНаПервуюСтроку(ИмяТЧ) Экспорт
	ВОткрытойФормеВТЧЯПерехожуНаПервуюСтроку(ИмяТЧ);
КонецФункции

&НаКлиенте
//И В открытой форме в таблице  "Список" я перехожу на последнюю строку
//@ВОткрытойФормеВТЧЯПерехожуНаПоследнююСтроку(Парам01)

Функция ВОткрытойФормеВТЧЯПерехожуНаПоследнююСтроку(ИмяТЧ) Экспорт
	ТЧ = Ванесса.НайтиТЧПоИмени(ИмяТЧ);
	ТЧ.ПерейтиКПоследнейСтроке();
КонецФункции

&НаКлиенте
//И В таблице  "Список" я перехожу на последнюю строку
//@ВТЧЯПерехожуНаПоследнююСтроку(Парам01)

Функция ВТЧЯПерехожуНаПоследнююСтроку(ИмяТЧ) Экспорт
	ВОткрытойФормеВТЧЯПерехожуНаПоследнююСтроку(ИмяТЧ);
КонецФункции

&НаКлиенте
//И В открытой форме в таблице  "Список" я перехожу на одну строку вверх
//@ВОткрытойФормеВТЧЯПерехожуНаОднуСтрокуВверх(Парам01)

Функция ВОткрытойФормеВТЧЯПерехожуНаОднуСтрокуВверх(ИмяТЧ) Экспорт
	ТЧ = Ванесса.НайтиТЧПоИмени(ИмяТЧ);
	ТЧ.ПерейтиКПредыдущейСтроке();
КонецФункции

&НаКлиенте
//И в таблице  "Список" я перехожу на один уровень вниз
//@ВТаблицеЯПерехожуНаОдинУровеньВниз(Парам01)

Функция ВТаблицеЯПерехожуНаОдинУровеньВниз(ИмяТЧ) Экспорт
	ТЧ = Ванесса.НайтиТЧПоИмени(ИмяТЧ);
	ТЧ.ПерейтиНаУровеньВниз();
КонецФункции

&НаКлиенте
//И в таблице  "Список" я перехожу на один уровень вверх
//@ВТаблицеЯПерехожуНаОдинУровеньВверх(Парам01)

Функция ВТаблицеЯПерехожуНаОдинУровеньВверх(ИмяТЧ) Экспорт
	ТЧ = Ванесса.НайтиТЧПоИмени(ИмяТЧ);
	ТЧ.ПерейтиНаУровеньВверх();
КонецФункции

&НаКлиенте
//И в таблице  ""ИмяТаблицы"" я начинаю редактирование строки
//@ВТаблицеЯНачинаюРедактированиеСтроки(Парам01)

Функция ВТаблицеЯНачинаюРедактированиеСтроки(ИмяТЧ) Экспорт
	ТЧ = Ванесса.НайтиТЧПоИмени(ИмяТЧ);

	Если НЕ ТЧ.ТекущийРежимРедактирование() Тогда
		ТЧ.ИзменитьСтроку();
	КонецЕсли;
КонецФункции

&НаКлиенте
//И В открытой форме в таблице  "Список" я перехожу на одну строку вниз
//@ВОткрытойФормеВТЧЯПерехожуНаОднуСтрокуВниз(Парам01)

Функция ВОткрытойФормеВТЧЯПерехожуНаОднуСтрокуВниз(ИмяТЧ) Экспорт
	ТЧ = Ванесса.НайтиТЧПоИмени(ИмяТЧ);
	ТЧ.ПерейтиКСледующейСтроке();
КонецФункции

&НаКлиенте
//И В открытой форме в таблице  "Список" я перехожу на одну строку вверх
//@ВТЧЯПерехожуНаОднуСтрокуВверх(Парам01)

Функция ВОткрытойФормеВТЧЯПерехожуНаОднуСтрокуВверхСВыделением(ИмяТЧ) Экспорт
	ТЧ = Ванесса.НайтиТЧПоИмени(ИмяТЧ);
	ТЧ.ПерейтиКПредыдущейСтроке(Истина);
КонецФункции

&НаКлиенте
//И В таблице  "Список" я перехожу на одну строку вверх
//@ВТЧЯПерехожуНаОднуСтрокуВверхСВыделением(Парам01)

Функция ВТЧЯПерехожуНаОднуСтрокуВверхСВыделением(ИмяТЧ) Экспорт
	ВОткрытойФормеВТЧЯПерехожуНаОднуСтрокуВверхСВыделением(ИмяТЧ);
КонецФункции

&НаКлиенте
//И В таблице  "Список" я перехожу на одну строку вверх
//@ВТаблицеЯПерехожуНаОднуСтрокуВверхСВыделением(Парам01)

Функция ВТаблицеЯПерехожуНаОднуСтрокуВверхСВыделением(ИмяТЧ) Экспорт
	ВТЧЯПерехожуНаОднуСтрокуВверхСВыделением(ИмяТЧ);
КонецФункции

&НаКлиенте
//И В открытой форме в таблице  "Список" я перехожу на одну строку вниз
//@ВОткрытойФормеВТЧЯПерехожуНаОднуСтрокуВниз(Парам01)

Функция ВОткрытойФормеВТЧЯПерехожуНаОднуСтрокуВнизСВыделением(ИмяТЧ) Экспорт
	ТЧ = Ванесса.НайтиТЧПоИмени(ИмяТЧ);
	ТЧ.ПерейтиКСледующейСтроке(Истина);
КонецФункции

&НаКлиенте
//И В таблице  "Список" я перехожу на одну строку вниз
//ВТЧЯПерехожуНаОднуСтрокуВнизСВыделением(Парам01)

Функция ВТЧЯПерехожуНаОднуСтрокуВнизСВыделением(ИмяТЧ) Экспорт
	ВОткрытойФормеВТЧЯПерехожуНаОднуСтрокуВнизСВыделением(ИмяТЧ);
КонецФункции

&НаКлиенте
//И В таблице  "Список" я перехожу на одну строку вниз
//ВТаблицеЯПерехожуНаОднуСтрокуВнизСВыделением(Парам01)

Функция ВТаблицеЯПерехожуНаОднуСтрокуВнизСВыделением(ИмяТЧ) Экспорт
	ВТЧЯПерехожуНаОднуСтрокуВнизСВыделением(ИмяТЧ);
КонецФункции

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

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

	Если СокрЛП(Элем[ИмяРек]) <> СтроковокПредставление Тогда
		Возврат Ложь;
	КонецЕсли;

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

&НаКлиенте
//И Есть элемент справочника "Справочник1" с наименованием "Тест" и  реквизитом "Реквизит2" равным "Группа2Элем2"
//@ЕстьЭлементСправочникаСНаименованиемИРеквизитомРавным(Парам01,Парам02,Парам03,Парам04)

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

&НаКлиенте
//И В открытой форме я перехожу к закладке с заголовком "Вспомогательная"
//@ВОткрытойФормеЯПерехожуКЗакладкеСЗаголовком(Парам01)

[Assistant] Функция ВТаблицеЯНажимаюКнопкуОчиститьУПоля(ИмяТЧ,ИмяРеквизита,ИскатьПоИмени = Ложь)


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

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

Функция ИмяФункции(ИмяЗакладки,ИскатьПоИмени = Ложь) Экспорт

	ТекстОшибки = "";
	БылаОшибка = Ложь;
	КоличествоПопыток = Ванесса.ЗначениеКоличествоПопытокВыполненияДействия();
	Для СчетчикПопыток = 1 По КоличествоПопыток Цикл
		БылаОшибка = Ложь;
		ТекстОшибки = "";

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

				ВызватьИсключение ТекстСообщения;
			КонецЕсли;

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

		Если НЕ БылаОшибка Тогда
			Прервать;
		КонецЕсли;
	КонецЦикла;

	Если БылаОшибка Тогда
		ВызватьИсключение ТекстОшибки;
	КонецЕсли;

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

&НаКлиенте
//И В открытой форме я перехожу к закладке "Вспомогательная"
//@ВОткрытойФормеЯПерехожуКЗакладке(Парам01)

Функция ВОткрытойФормеЯПерехожуКЗакладке(ИмяЗакладки,ИскатьПоИмени = Ложь) Экспорт
	ВОткрытойФормеЯПерехожуКЗакладкеСЗаголовком(ИмяЗакладки,ИскатьПоИмени);
КонецФункции

&НаКлиенте
//И В открытой форме я перехожу к закладке с именем "Вспомогательная"
//@ВОткрытойФормеЯПерехожуКЗакладкеСИменем(Парам01)

Функция ВОткрытойФормеЯПерехожуКЗакладкеСИменем(ИмяЗакладки) Экспорт
	ВОткрытойФормеЯПерехожуКЗакладкеСЗаголовком(ИмяЗакладки,Истина);
КонецФункции

&НаКлиенте
//И В открытой форме я сворачиваю группу с заголовком "СворачиваемаяГруппа"
//@ВОткрытойФормеЯСворачиваюГруппуСЗаголовком(Парам01)

Функция ВОткрытойФормеЯСворачиваюГруппуСЗаголовком(ИмяГруппы,ИскатьПоИмени = Ложь) Экспорт
	ТекстОшибки = "";
	БылаОшибка = Ложь;
	КоличествоПопыток = Ванесса.ЗначениеКоличествоПопытокВыполненияДействия();
	Для СчетчикПопыток = 1 По КоличествоПопыток Цикл
		БылаОшибка = Ложь;
		ТекстОшибки = "";

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

				ВызватьИсключение ТекстСообщения;
			КонецЕсли;

			Группа.Активизировать();
			Ванесса.ПереместитьКурсорКПолю(Группа);
			Попытка
				Группа.Свернуть();
			Исключение
			КонецПопытки;
		Исключение
			ТекстОшибки = ОписаниеОшибки();
			БылаОшибка = Истина;
			Если СчетчикПопыток < КоличествоПопыток Тогда
				Ванесса.sleep(1);
			КонецЕсли;
		КонецПопытки;

		Если НЕ БылаОшибка Тогда
			Прервать;
		КонецЕсли;
	КонецЦикла;

	Если БылаОшибка Тогда
		ВызватьИсключение ТекстОшибки;
	КонецЕсли;

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

&НаКлиенте
//И В открытой форме я сворачиваю группу "СворачиваемаяГруппа"
//@ВОткрытойФормеЯСворачиваюГруппу(Парам01)

Функция ВОткрытойФормеЯСворачиваюГруппу(ИмяГруппы,ИскатьПоИмени = Ложь) Экспорт
	ВОткрытойФормеЯСворачиваюГруппуСЗаголовком(ИмяГруппы,ИскатьПоИмени);
КонецФункции

&НаКлиенте
//И В открытой форме я сворачиваю группу с именем "СворачиваемаяГруппа"
//@ВОткрытойФормеЯСворачиваюГруппуСИменем(Парам01)

Функция ВОткрытойФормеЯСворачиваюГруппуСИменем(ИмяГруппы) Экспорт
	ВОткрытойФормеЯСворачиваюГруппуСЗаголовком(ИмяГруппы,Истина);
КонецФункции

&НаКлиенте
//И В открытой форме я разворачиваю группу с заголовком "СворачиваемаяГруппа"
//@ВОткрытойФормеЯРазворачиваюГруппуСЗаголовком(Парам01)

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

		Попытка
			Группа = Ванесса.НайтиРеквизитОткрытойФормыПоЗаголовку(ИмяГруппы, ИскатьПоИмени, Истина, Тип("ТестируемаяГруппаФормы"),ДопПараметры);

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

				ВызватьИсключение ТекстСообщения;
			КонецЕсли;

			ТекущаяФорма = ДопПараметры.ТекущаяФормаЭлемента;

			ПредыдущийЭлементФормы = Неопределено;
			ТекущийЭлементФормы    = Неопределено;

			Попытка
				ПредыдущийЭлементФормы = ТекущаяФорма.ПолучитьТекущийЭлемент();
			Исключение
			КонецПопытки;

			Группа.Активизировать();

			Попытка
				ТекущийЭлементФормы = ТекущаяФорма.ПолучитьТекущийЭлемент();
			Исключение
			КонецПопытки;

			Ванесса.ПереместитьКурсорКПолю(Группа);
			Попытка
				Группа.Развернуть();
			Исключение
			КонецПопытки;
		Исключение
			ТекстОшибки = ОписаниеОшибки();
			БылаОшибка = Истина;
			Если СчетчикПопыток < КоличествоПопыток Тогда
				Ванесса.sleep(1);
			КонецЕсли;
		КонецПопытки;

		Если НЕ БылаОшибка Тогда
			Прервать;
		КонецЕсли;
	КонецЦикла;

	Если БылаОшибка Тогда
		ВызватьИсключение ТекстОшибки;
	КонецЕсли;

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

&НаКлиенте
//И В открытой форме я разворачиваю группу "СворачиваемаяГруппа"
//@ВОткрытойФормеЯРазворачиваюГруппу(Парам01)

Функция ВОткрытойФормеЯРазворачиваюГруппу(ИмяГруппы,ИскатьПоИмени = Ложь) Экспорт
	ВОткрытойФормеЯРазворачиваюГруппуСЗаголовком(ИмяГруппы,ИскатьПоИмени);
КонецФункции

&НаКлиенте
//И В открытой форме я разворачиваю группу с именем "СворачиваемаяГруппа"
//@ВОткрытойФормеЯРазворачиваюГруппуСИменем(Парам01)

Функция ВОткрытойФормеЯРазворачиваюГруппуСИменем(ИмяГруппы) Экспорт
	ВОткрытойФормеЯРазворачиваюГруппуСЗаголовком(ИмяГруппы,Истина);
КонецФункции

&НаКлиенте
//И В открытой форме я нажимаю на гиперссылку с заголовком "Гиперссылка"
//@ВОткрытойФормеЯНажимаюНаГиперссылкуСЗаголовком(Парам01)

[Assistant] Функция ВОткрытойФормеЯПерехожуКЗакладкеСЗаголовком(ИмяЗакладки,ИскатьПоИмени = Ложь)


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

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

Функция ИмяФункции(ИмяРеквизита,ИскатьПоИмени = Ложь) Экспорт

	ТекстОшибки = "";
	БылаОшибка = Ложь;
	КоличествоПопыток = Ванесса.ЗначениеКоличествоПопытокВыполненияДействия();
	Для СчетчикПопыток = 1 По КоличествоПопыток Цикл
		БылаОшибка = Ложь;
		ТекстОшибки = "";

		Попытка
			ДопПараметры = Новый Структура;
			ДопПараметры.Вставить("ИскатьТолькоПоляГиперссылок",Истина);
			ДопПараметры.Вставить("КоличествоПопыток", 1);
			ПолеГиперссылка = Ванесса.НайтиРеквизитОткрытойФормыПоЗаголовку(ИмяРеквизита,ИскатьПоИмени, Истина, Неопределено,ДопПараметры);

			ПолеГиперссылка.Активизировать();

			Ванесса.НажатьНаКнопкуФормы(ПолеГиперссылка, Истина);

			//ПолеГиперссылка.Нажать();

		Исключение
			ТекстОшибки = ОписаниеОшибки();
			БылаОшибка = Истина;
			Если СчетчикПопыток < КоличествоПопыток Тогда
				Ванесса.sleep(1);
			КонецЕсли;
		КонецПопытки;

		Если НЕ БылаОшибка Тогда
			Прервать;
		КонецЕсли;
	КонецЦикла;

	Если БылаОшибка Тогда
		ВызватьИсключение ТекстОшибки;
	КонецЕсли;

	ДопПараметрыОбработатьСменуАктивногоОкна = Новый Структура;
	ДопПараметрыОбработатьСменуАктивногоОкна.Вставить("СбрасыватьЗафиксированнуюГруппу", Ложь);
	Ванесса.ОбработатьСменуАктивногоОкна(ДопПараметрыОбработатьСменуАктивногоОкна);
КонецФункции

&НаКлиенте
//И В открытой форме я нажимаю на гиперссылку "Гиперссылка"
//@ВОткрытойФормеЯНажимаюНаГиперссылку(Парам01)

Функция ВОткрытойФормеЯНажимаюНаГиперссылку(ИмяРеквизита,ИскатьПоИмени = Ложь) Экспорт
	ВОткрытойФормеЯНажимаюНаГиперссылкуСЗаголовком(ИмяРеквизита,ИскатьПоИмени);
КонецФункции

&НаКлиенте
//И В открытой форме я нажимаю на гиперссылку с именем "Гиперссылка"
//@ВОткрытойФормеЯНажимаюНаГиперссылкуСИменем(Парам01)

Функция ВОткрытойФормеЯНажимаюНаГиперссылкуСИменем(ИмяРеквизита) Экспорт
	ВОткрытойФормеЯНажимаюНаГиперссылкуСЗаголовком(ИмяРеквизита,Истина);
КонецФункции

&НаКлиенте
//Тогда элемент формы "Наименование" стал равен шаблону "111"
//@ЭлементФормыСталРавенШаблону(Парам01,Парам02)

Функция ЭлементФормыСталРавенШаблону(ИмяЭлемента, СтроковоеПредставление, ИскатьПоИмени = Ложь) Экспорт

	КоличествоПопыток = Ванесса.ЗначениеКоличествоПопытокВыполненияДействия();
	ТекстСообщения = "";
	БылаОшибка = Ложь;
	Для СчетчикПопыток = 1 По КоличествоПопыток Цикл
		ТекстСообщения = "";
		БылаОшибка = Ложь;

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

			ПредставлениеДанных = Ванесса.ПолучитьПредставлениеДанныхЭлементаФормы(ЭлементФормы);

			СтроковоеПредставление = ПолучитьКорректныйТекстДляВставкиВПоле(СтроковоеПредставление);

			Если НЕ Ванесса.СтрокаСоответствуетШаблону(ПредставлениеДанных, СтроковоеПредставление) Тогда
				ТекстСообщения = Ванесса.ПолучитьТекстСообщенияПользователю("Для элемента формы <%1> текущее значение равно:%2, а ожидалось:%3");
				ТекстСообщения = СтрЗаменить(ТекстСообщения, "%1", ИмяЭлемента);
				ТекстСообщения = СтрЗаменить(ТекстСообщения, "%2", Символы.ПС + ПредставлениеДанных + Символы.ПС);
				ТекстСообщения = СтрЗаменить(ТекстСообщения, "%3", Символы.ПС + СтроковоеПредставление);

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

				ВызватьИсключение ТекстСообщения;
			КонецЕсли;

			Прервать;

		Исключение

			ТекстСообщения = ОписаниеОшибки();
			БылаОшибка = Истина;
			Если СчетчикПопыток < КоличествоПопыток Тогда
				Ванесса.sleep(1);
			КонецЕсли;

		КонецПопытки;

	КонецЦикла;

	Если БылаОшибка Тогда
		ВызватьИсключение ТекстСообщения;
	КонецЕсли;

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

&НаКлиенте
//Тогда элемент формы с именем "Наименование" стал равен шаблону "111"
//@ЭлементФормыСИменемСталРавенШаблону(Парам01,Парам02)

Функция ЭлементФормыСИменемСталРавенШаблону(ИмяЭлемента,СтроковоеПредставление,ИскатьПоИмени = Ложь) Экспорт
	ЭлементФормыСталРавенШаблону(ИмяЭлемента,СтроковоеПредставление,Истина);
КонецФункции

&НаКлиенте
//Тогда элемент формы "Наименование" стал равен по шаблону "111"
//@ЭлементФормыСталРавенПоШаблону(Парам01,Парам02)

Функция ЭлементФормыСталРавенПоШаблону(ИмяЭлемента,СтроковоеПредставление,ИскатьПоИмени = Ложь) Экспорт
	ЭлементФормыСталРавенШаблону(ИмяЭлемента, СтроковоеПредставление, Ложь);
КонецФункции

&НаКлиенте
//Тогда элемент формы с именем "Наименование" стал равен по шаблону "111"
//@ЭлементФормыСИменемСталРавенПоШаблону(Парам01,Парам02)

Функция ЭлементФормыСИменемСталРавенПоШаблону(ИмяЭлемента,СтроковоеПредставление) Экспорт
	ЭлементФормыСталРавенШаблону(ИмяЭлемента, СтроковоеПредставление, Истина);
КонецФункции

&НаКлиенте

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

	СчетчикПопыток = ПараметрыПроверки.СчетчикПопыток;
	КоличествоПопыток = ПараметрыПроверки.КоличествоПопыток;
	ПолучатьШаблон = Истина;
	Если ПараметрыПроверки.Свойство("ПолучатьШаблон") Тогда
		ПолучатьШаблон = ПараметрыПроверки.ПолучатьШаблон;
	КонецЕсли;
	ОбернутьВУгловыеСкобки = Истина;
	Если ПараметрыПроверки.Свойство("ОбернутьВУгловыеСкобки") Тогда
		ОбернутьВУгловыеСкобки = ПараметрыПроверки.ОбернутьВУгловыеСкобки;
	КонецЕсли;
	ПоШаблону = Ложь;
	Если ПараметрыПроверки.Свойство("ПоШаблону") Тогда
		ПоШаблону = ПараметрыПроверки.ПоШаблону;
	КонецЕсли;

	СтроковоеПредставление = ПолучитьКорректныйТекстДляВставкиВПоле(СтроковоеПредставление);

	ПредставлениеДанных = Ванесса.ПолучитьПредставлениеДанныхЭлементаФормы(ЭлементФормы);
	Если ЭлементФормы.Вид = ВидПоляФормы.ПолеФлажка Тогда
		ПредставлениеДанных = ПривестиЗначениеФлагаКСтандарту(ПредставлениеДанных);
		СтроковоеПредставление = ПривестиЗначениеФлагаКСтандарту(СтроковоеПредставление);
	КонецЕсли;

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

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

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

		ВызватьИсключение ТекстСообщения;
	КонецЕсли;

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

&НаКлиенте
//Тогда элемент формы "Наименование" стал равен "111"
//@ЭлементФормыСталРавен(Парам01,Парам02)

[Assistant] Функция ВОткрытойФормеЯНажимаюНаГиперссылкуСЗаголовком(ИмяРеквизита,ИскатьПоИмени = Ложь)