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

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

Функция ИмяФункции(Макет, ТабПарам)

	ПараметрыМакета = ПараметрыИзФайлаМакета(Макет);

	ЦветЯчейки = WebЦвета.Аквамарин;

	МассивРасхождений = Новый Массив;
	Для Каждого СтрокаОжидаемая Из ТабПарам Цикл
		ИмяПараметра = СтрокаОжидаемая.Кол1;
		ЗначениеПараметра = СтрЗаменить(СтрокаОжидаемая.Кол2, Символы.НПП, " ");
		ЗначениеПараметра = СтрЗаменить(ЗначениеПараметра,"\n",Символы.ПС);

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

	Возврат МассивРасхождений;

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

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

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

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

	ДопПараметры.Вставить("ТекстСообщенийПользователю",Ванесса.ДанныеПереводаСообщенийПользователю());
	МассивРасхождений = ПолучитьРасхожденияТД(ТабДок, ТабПарам,"точный",ДопПараметры);

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

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

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

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

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

	ДопПараметры = Новый Структура;
	ДопПараметры.Вставить("ТекстСообщенийПользователю",Ванесса.ДанныеПереводаСообщенийПользователю());
	МассивРасхождений = ПолучитьРасхожденияТД(ТабДок, ТабПарам,"подстрока",ДопПараметры);

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

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

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

Функция ПроверитьВхождениеСтрокВТабличныйДокументСервер(ТабДок,МассивДляПоиска,ЗначенияВходят,ДопПараметры)

	МассивОшибок           = Новый Массив;
	МассивНенайденныхСтрок = Новый Массив;

	Для Каждого СтрокаПоиска Из МассивДляПоиска Цикл
		Область = ТабДок.НайтиТекст(СтрокаПоиска);

		Если Область = Неопределено  и ЗначенияВходят Тогда
			МассивОшибок.Добавить(СтрокаПоиска);
		КонецЕсли;

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

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

	//УдалитьФайлы(ИмяВременногоФайла);
КонецФункции

&НаКлиенте
//И табличный документ формы с именем "РеквизитТабличныйДокумент" содержит элементы:
//@ТабличныйДокументСодержитЗначения(Парам01,ТабПарам)

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

	ЭтоФайл = Ложь;
	Если Найти(ИмяЭлементаФормыИлиФайла, "/") > 0 ИЛИ Найти(ИмяЭлементаФормыИлиФайла, "\") > 0 Тогда
		Если Ванесса.ФайлСуществуетКомандаСистемы(ИмяЭлементаФормыИлиФайла) Тогда
			ЭтоФайл = Истина;
		КонецЕсли;
	КонецЕсли;

	ИмяВременногоФайла = "";
	Если ЭтоФайл Тогда
		Файл = Новый Файл(ИмяЭлементаФормыИлиФайла);
		ТабДок = Ванесса.ПолучитьМакетИзФайла(ИмяЭлементаФормыИлиФайла, Файл.Расширение);
	Иначе
		ТабДок = ТабличныйДокументИзTestClient(ИмяВременногоФайла,ИмяЭлементаФормыИлиФайла);
	КонецЕсли;

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

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

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

		ВызватьИсключение;
	КонецПопытки;

	Если ЗначениеЗаполнено(ИмяВременногоФайла) Тогда
		Ванесса.УдалитьФайлыКомандаСистемы(ИмяВременногоФайла);
	КонецЕсли;
КонецФункции

&НаКлиенте
//И табличный документ формы с именем "РеквизитТабличныйДокумент" не содержит элементы:
//@ТабличныйДокументНеСодержитЗначения(Парам01,ТабПарам)

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

&НаКлиенте
//И Табличный документ "РеквизитТабличныйДокумент" содержит в себе значения по шаблону
//@ТабличныйДокументСодержитЗначенияОбластейПоШаблону(Парам01,ТабПарам)

[Assistant] Функция ПолучитьРасхожденияТДRegExp(Макет, ТабПарам)


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

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

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

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

	МассивРасхождений = ПолучитьРасхожденияТДRegExp(ТабДок, ТабПарам);

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

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

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

Функция ПолучитьРядКолонкуИзИмениЯчейки(Стр,Ряд,Колонка)
	Поз     = Найти(Стр,"C");
	Ряд     = Число(Сред(Лев(Стр,Поз-1),2));
	Колонка = Число(Сред(Стр,Поз+1));
КонецФункции

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

Функция ПроверитьЗначениеКолонкиНаЗначениеСтроки(ТабДок,ИмяКолонки,Значение,ПроверятьРавенство,ДопПараметры)

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

	Ряд     = -1;
	Колонка =  -1;
	ПолучитьРядКолонкуИзИмениЯчейки(ОбластьКолонка.Имя,Ряд,Колонка);

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

	КонецЦикла;

	//УдалитьФайлы(ИмяВременногоФайла);
КонецФункции

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

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

	Возврат Число(Стр);
КонецФункции

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

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

	Ряд     = -1;
	Колонка =  -1;
	ПолучитьРядКолонкуИзИмениЯчейки(ОбластьКолонка.Имя,Ряд,Колонка);

	Для Ккк = Ряд+1 По ТабДок.ВысотаТаблицы Цикл
		ТекстОбласти = ТабДок.Область(Ккк,Колонка,Ккк,Колонка).Текст;
		Если ТипЗнч(Значение) = Тип("Число") Тогда
			ТекстОбласти = ПолучитьЧислоИзТекстаОбласти(ТекстОбласти);
		КонецЕсли;

		ЗначениеСравнения = Неопределено;
		Выражение = "ЗначениеСравнения = (ТекстОбласти " + ВидСравнения + " Значение)";
		Выполнить(Выражение);

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

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

&НаКлиенте
//И в табличном документе "РеквизитТабличныйДокумент" значения в колонке "ИмяКолонки" равно значению ""
//@ВТабличномДокументеЗначенияВКолонкеРавноЗначению(Парам01,Парам02,Парам03)

Функция ВТабличномДокументеЗначенияВКолонкеРавноЗначению(ИмяЭлементаФормы,ИмяКолонки,Значение,ПроверятьРавенство = Истина) Экспорт
	ИмяВременногоФайла = "";
	ТабДок = ТабличныйДокументИзTestClient(ИмяВременногоФайла,ИмяЭлементаФормы);

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

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

	Если ЗначениеЗаполнено(ИмяВременногоФайла) Тогда
		Ванесса.УдалитьФайлыКомандаСистемы(ИмяВременногоФайла);
	КонецЕсли;
КонецФункции

&НаКлиенте
//И в табличном документе "РеквизитТабличныйДокумент" значения в колонке "ИмяКолонки" неравно значению ""
//@ВТабличномДокументеЗначенияВКолонкеНеравноЗначению(Парам01,Парам02,Парам03)

Функция ВТабличномДокументеЗначенияВКолонкеНеравноЗначению(ИмяЭлементаФормы,ИмяКолонки,Значение) Экспорт
	ВТабличномДокументеЗначенияВКолонкеРавноЗначению(ИмяЭлементаФормы,ИмяКолонки,Значение,Ложь);
КонецФункции

&НаКлиенте
//И в табличном документе "РеквизитТабличныйДокумент" значения в колонке "ИмяКолонки" соответствуют условию  "равно"  10
//@ВТабличномДокументеЗначенияВКолонкеСоответствуютУсловию(Парам01,Парам02,Парам03,Парам04)

[Assistant] Функция ТабличныйДокументСодержитЗначенияОбластейПоШаблону(ИмяЭлементаФормы,ТабПарам)


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

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

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

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

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

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

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

	Ванесса.ЗафиксироватьФормуГруппуTestClient(ФормаПриложения);
КонецФункции

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

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

&НаКлиенте
//И я отменяю фиксирование формы
//@ЯОтменяюФиксированиеФормы()

Функция ЯОтменяюФиксированиеФормы() Экспорт
	Ванесса.ЗафиксироватьФормуГруппуTestClient(Неопределено);
КонецФункции

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

Функция ЯОтменяюФиксированиеГруппы() Экспорт
	Ванесса.ЗафиксироватьФормуГруппуTestClient(Неопределено);
КонецФункции

&НаКлиенте
//И я фиксирую текущую форму
//@ЯФиксируюТекущуюФорму()

Функция ЯФиксируюТекущуюФорму() Экспорт
	Ванесса.ЗафиксироватьФормуГруппуTestClient(Неопределено);
	МассивФорм = НайтиФормыТекущегоОкна();

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

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

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

	ТекФорма = МассивФорм[0];

	Ванесса.ЗафиксироватьФормуГруппуTestClient(ТекФорма);
КонецФункции

&НаКлиенте
//И я прикрепляю к сценарию значение таблицы "ИмяТаблицы" как "ИмяЗначения"
//@ЯПрикрепляюКСценариюЗначениеТаблицыКак(Парам01)

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

	Ванесса.ПрикрепитьМакетКСценарию(Макет,ИмяЗначения);
КонецФункции

&НаКлиенте
//И я запоминаю значение текущего поля как "ИмяПеременной"
//@ЯЗапоминаюЗначениеТекущегоПоляКак(Парам01)

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

	ТекущееПоле = АктивнаяФорма.ПолучитьТекущийЭлемент();

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

	Если ТипЗнч(ТекущееПоле) = Тип("ТестируемаяТаблицаФормы") Тогда
		ЗначениеПоля = ТекущееПоле.ПолучитьТекстЯчейки();
	Иначе
		ЗначениеПоля = Ванесса.ПолучитьПредставлениеДанныхЭлементаФормы(ТекущееПоле);
	КонецЕсли;

	Ванесса.СохранитьЗначениеПеременнойВКонтекст(ИмяПеременной,ЗначениеПоля);
КонецФункции

&НаКлиенте
//И я запоминаю представление текущего поля как "ИмяПеременной"
//@ЯЗапоминаюПредставлениеТекущегоПоляКак(Парам01)

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

	ТекущееПоле = АктивнаяФорма.ПолучитьТекущийЭлемент();

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

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

	Иначе
		ЗначениеПоля = ТекущееПоле.ПолучитьОтображаемыйТекст();
	КонецЕсли;

	Ванесса.СохранитьЗначениеПеременнойВКонтекст(ИмяПеременной,ЗначениеПоля);
КонецФункции

&НаКлиенте
//И я запоминаю представление элемента формы "Заголовок" как "ИмяПеременной"
//@ЯЗапоминаюПредставлениеЭлементаФормыКак(Парам01,Парам02)

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

&НаКлиенте
//И я запоминаю представление элемента формы с именем "ИмяЭлемента" как "ИмяПеременной"
//@ЯЗапоминаюПредставлениеЭлементаФормыСИменемКак(Парам01,Парам02)

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

&НаКлиенте
//И я запоминаю заголовок поля с именем "ИмяПоля" как "ИмяПеременной"
//@ЯЗапоминаюЗаголовокПоляСИменемКак(Парам01,Парам02)

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

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

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

&НаКлиенте
//И я запоминаю имя текущего поля как "ИмяПеременной"
//@ЯЗапоминаюИмяТекущегоПоляКак(Парам01)

[Assistant] Функция ЯФиксируюФорму(ИмяФормы,ИскатьПоИмени = Ложь)


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

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

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

	ТекущееПоле = АктивнаяФорма.ПолучитьТекущийЭлемент();

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

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

		ТекущееПоле = ТекущееПолеТаблицы;
	КонецЕсли;

	Если ЗапоминатьИмя Тогда
		Ванесса.СохранитьЗначениеПеременнойВКонтекст(ИмяПеременной,ТекущееПоле.Имя);
	Иначе
		Ванесса.СохранитьЗначениеПеременнойВКонтекст(ИмяПеременной,ТекущееПоле.ТекстЗаголовка);
	КонецЕсли;
КонецФункции

&НаКлиенте
//И я запоминаю заголовок текущего поля как "ИмяПеременной"
//@ЯЗапоминаюЗаголовокТекущегоПоляКак(Парам01)

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

&НаКлиенте
//И я запоминаю имя текущей таблицы как "ИмяПеременной"
//@ЯЗапоминаюИмяТекущейТаблицыКак(Парам01)

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

	ТекущееПоле = АктивнаяФорма.ПолучитьТекущийЭлемент();

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

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

	Ванесса.СохранитьЗначениеПеременнойВКонтекст(ИмяПеременной,ТекущееПоле.Имя);
КонецФункции

&НаКлиенте
//И я запоминаю имя поля с заголовком "ЗаголовокПоля" и именем "ИмяПоля" как "ИмяПеременной"
//@ЯЗапоминаюИмяПоляСЗаголовкомИИменемКак(Парам01,Парам02,Парам03)

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

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

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

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

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

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

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

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

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

	ТекущееПоле = АктивнаяФорма.ПолучитьТекущийЭлемент();

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

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

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

&НаКлиенте

[Assistant] Функция ЯЗапоминаюИмяТекущегоПоляКак(ИмяПеременной, ЗапоминатьИмя = Истина)


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

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

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

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

	ТЧ    = ТекущийЭлементФормы;
	ИмяТЧ = ТекущийЭлементФормы.Имя;

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

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

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

&НаКлиенте
//И в таблице текущее поле заполнено
//@ВТаблицеТекущееПолеЗаполнено()

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

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

&НаКлиенте
//И в таблице текущее поле не заполнено
//@ВТаблицеТекущееПолеНезаполнено()

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

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

&НаКлиенте

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

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

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

	ИмяТЧ                            = Неопределено;
	ТекстТекущейЯчейкиТекущейТаблицы = ТекстТекущейЯчейкиТекущейТаблицы(ИмяТЧ,Ложь);

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

	Если ТекстТекущейЯчейкиТекущейТаблицы = Неопределено Тогда
		//значит пока не получилось получить значение
		Возврат Неопределено;
	КонецЕсли;

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

&НаКлиенте
//И я жду, что в таблице текущее поле будет заполнено в течение 10 секунд.
//@ЯЖдуЧтоВТаблицеТекущееПолеБудетЗаполненоВТечениеСекунд(Парам01)

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

&НаКлиенте
//И я жду, что в таблице текущее поле будет не заполнено в течение 10 секунд.
//@ЯЖдуЧтоВТаблицеТекущееПолеБудетНеЗаполненоВТечениеСекунд(Парам01)

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

&НаКлиенте
//И я устанавливаю максимальное время выполнения действия
//@ЯУстанавливаюМаксимальноеВремяВыполненияДействия()

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

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

	Если ТипЗнч(КолСекунд) = Тип("Строка") Тогда
		КолСекунд = Число(КолСекунд);
	КонецЕсли;

	Ванесса.Объект.МаксимальноеВремяВыполненияДействия = КолСекунд;
	КонтекстСохраняемый.ТестовоеПриложение.УстановитьМаксимальноеВремяВыполненияДействия(КолСекунд);
КонецФункции

&НаКлиенте
//И выпадающий список Формы стал равен
//@ВыпадающийСписокФормыСталРавен(Парам01,ТабПарам)

[Assistant] Функция ТекстТекущейЯчейкиТекущейТаблицы(ИмяТЧ,ВызыватьИсключение = Истина)


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

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

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

	БылаОшибка = Ложь;
	ТекстСообщения = "";

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

		Попытка

			ТекФорма = ТекущаяФормаИзКлиентаТестирования();

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

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

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

			МассивРазличий = Новый Массив;

			НомСтр = -1;
			Для Каждого СтрокаТабПарам Из ТабПарам Цикл
				НомСтр = НомСтр + 1;
				СтрокаПредставлениеСпискаВыбора = ПредставлениеСпискаВыбора[НомСтр];

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

			КонецЦикла;

			Если МассивРазличий.Количество() > 0 Тогда
				ТекстСообщения = Ванесса.ПолучитьТекстСообщенияПользователю("Открытый список выбора формы не равен эталону. Различия: %1");

				Стр = Символы.ПС;
				Для Каждого Элем Из МассивРазличий Цикл
					Стр = Стр + Элем + Символы.ПС;
				КонецЦикла;

				ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",Стр);
				ВызватьИсключение ТекстСообщения;
			КонецЕсли;

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

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

	Если ЭтоУсловие Тогда
		Ванесса.УстановитьРезультатУсловия(НЕ БылаОшибка);
	ИначеЕсли БылаОшибка Тогда
		ВызватьИсключение ТекстСообщения;
	КонецЕсли;

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

&НаКлиенте
//И выпадающий список Формы стал равен
//@ВыпадающийСписокФормыСталРавенПоШаблону(Парам01,ТабПарам)

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

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

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

	БылаОшибка = Ложь;
	ТекстСообщения = "";

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

		Попытка

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

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

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

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

			МассивРазличий = Новый Массив;

			НомСтр = -1;
			Для Каждого СтрокаТабПарам Из ТабПарам Цикл
				НомСтр = НомСтр + 1;
				СтрокаПредставлениеСпискаВыбора = ПредставлениеСпискаВыбора[НомСтр];

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

			КонецЦикла;

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

				Стр = Символы.ПС;
				Для Каждого Элем Из МассивРазличий Цикл
					Стр = Стр + Элем + Символы.ПС;
				КонецЦикла;

				ТекстСообщения = СтрЗаменить(ТекстСообщения,"%2",Стр);
				ВызватьИсключение ТекстСообщения;
			КонецЕсли;

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

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

	Если ЭтоУсловие Тогда
		Ванесса.УстановитьРезультатУсловия(НЕ БылаОшибка);
	ИначеЕсли БылаОшибка Тогда
		ВызватьИсключение ТекстСообщения;
	КонецЕсли;

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

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

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

&НаКлиенте
//Если выпадающий список "Реквизит1" содержит значения Тогда
//@ВыпадающийСписокСИменемСодержитЗначения(Парам01,ТабПарам)

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

&НаКлиенте
//Если выпадающий список с именем "Реквизит1" содержит значения Тогда
//@ВыпадающийСписокСИменемСодержитЗначения(Парам01,ТабПарам)

[Assistant] Функция ВыпадающийСписокФормыСталРавен(ТабПарам,ИскатьПоИмени = Ложь, ЭтоУсловие=Ложь, ПоШаблону = Ложь)


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

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

Функция ИмяФункции(ТабПарам, ПоШаблону = Ложь) Экспорт
	БылаОшибка = Ложь;
	ТекстСообщения = "";

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

		Попытка

			ТекФорма = ТекущаяФормаИзКлиентаТестирования();

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

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

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

			МассивРазличий = Новый Массив;

			Если ПоШаблону Тогда
				НомСтр = -1;
				Для Каждого СтрокаТабПарам Из ТабПарам Цикл
					НомСтр = НомСтр + 1;

					ЗначениеИзЭталона = СокрЛП(НРег(СтрокаТабПарам.Кол1));

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

					Если Нашли Тогда
						Если МассивРазличий.Найти(СтрокаТабПарам.Кол1) = Неопределено Тогда
							МассивРазличий.Добавить(СтрокаТабПарам.Кол1);
						КонецЕсли;
					КонецЕсли;

				КонецЦикла;
			Иначе
				НомСтр = -1;
				Для Каждого СтрокаТабПарам Из ТабПарам Цикл
					НомСтр = НомСтр + 1;

					ЗначениеИзЭталона = СокрЛП(НРег(СтрокаТабПарам.Кол1));

					Если МассивТекущихЗначений.Найти(ЗначениеИзЭталона) <> Неопределено Тогда
						Если МассивРазличий.Найти(СтрокаТабПарам.Кол1) = Неопределено Тогда
							МассивРазличий.Добавить(СтрокаТабПарам.Кол1);
						КонецЕсли;
					КонецЕсли;

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

			Если МассивРазличий.Количество() > 0 Тогда
				ТекстСообщения = Ванесса.ПолучитьТекстСообщенияПользователю("Открытый список выбора привязанный к форме содержит значения, которых не должно быть: %1");

				Стр = Символы.ПС;
				Для Каждого Элем Из МассивРазличий Цикл
					Стр = Стр + Элем + Символы.ПС;
				КонецЦикла;

				ТекстСообщения = СтрЗаменить(ТекстСообщения,"%1",Стр);
				ВызватьИсключение ТекстСообщения;
			КонецЕсли;

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

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

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

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

&НаКлиенте
//И выпадающий список формы не содержит значения
//@ВыпадающийСписокФормыНеСодержитЗначенияПоШаблону(ТабПарам)

Функция ВыпадающийСписокФормыНеСодержитЗначенияПоШаблону(ТабПарам) Экспорт

	ВыпадающийСписокФормыНеСодержитЗначения(ТабПарам, Истина);

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

&НаКлиенте
//И выпадающий список "Реквизит1" не содержит значения
//@ВыпадающийСписокНеСодержитЗначения(Парам01,ТабПарам)

Функция ВыпадающийСписокНеСодержитЗначения(ИмяЭлемента,ТабПарам,ИскатьПоИмени = Ложь) Экспорт
	БылаОшибка = Ложь;
	ТекстСообщения = "";

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

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

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

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

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

			МассивРазличий = Новый Массив;

			НомСтр = -1;
			Для Каждого СтрокаТабПарам Из ТабПарам Цикл
				НомСтр = НомСтр + 1;

				ЗначениеИзЭталона = СокрЛП(НРег(СтрокаТабПарам.Кол1));

				Если МассивТекущихЗначений.Найти(ЗначениеИзЭталона) <> Неопределено Тогда
					Если МассивРазличий.Найти(СтрокаТабПарам.Кол1) = Неопределено Тогда
						МассивРазличий.Добавить(СтрокаТабПарам.Кол1);
					КонецЕсли;
				КонецЕсли;

			КонецЦикла;

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

				Стр = Символы.ПС;
				Для Каждого Элем Из МассивРазличий Цикл
					Стр = Стр + Элем + Символы.ПС;
				КонецЦикла;

				ТекстСообщения = СтрЗаменить(ТекстСообщения,"%2",Стр);
				ВызватьИсключение ТекстСообщения;
			КонецЕсли;

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

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

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

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

&НаКлиенте
//И выпадающий список с именем "Реквизит1" не содержит значения
//@ВыпадающийСписокСИменемНеСодержитЗначения(Парам01,ТабПарам)

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

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

[Assistant] Функция ВыпадающийСписокФормыНеСодержитЗначения(ТабПарам, ПоШаблону = Ложь)


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

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

Функция ИмяФункции(ИмяТаблицы,ИмяЭлемента,ТабПарам,ИскатьПоИмени = Ложь) Экспорт
	БылаОшибка = Ложь;
	ТекстСообщения = "";

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

		Попытка

			ДопПараметры = Новый Структура;
			ДопПараметры.Вставить("КоличествоПопыток", 1);

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

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

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

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

			МассивРазличий = Новый Массив;

			НомСтр = -1;
			Для Каждого СтрокаТабПарам Из ТабПарам Цикл
				НомСтр = НомСтр + 1;

				ЗначениеИзЭталона = СокрЛП(НРег(СтрокаТабПарам.Кол1));

				Если МассивТекущихЗначений.Найти(ЗначениеИзЭталона) <> Неопределено Тогда
					Если МассивРазличий.Найти(СтрокаТабПарам.Кол1) = Неопределено Тогда
						МассивРазличий.Добавить(СтрокаТабПарам.Кол1);
					КонецЕсли;
				КонецЕсли;

			КонецЦикла;

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

				Стр = Символы.ПС;
				Для Каждого Элем Из МассивРазличий Цикл
					Стр = Стр + Элем + Символы.ПС;
				КонецЦикла;

				ТекстСообщения = СтрЗаменить(ТекстСообщения,"%2",Стр);
				ВызватьИсключение ТекстСообщения;
			КонецЕсли;

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

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

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

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

&НаКлиенте
//И в таблице "ИмяТаблицы" выпадающий список с именем "Реквизит1" не содержит значения
//@ВТаблицеВыпадающийСписокСИменемНеСодержитЗначения(Парам01,ТабПарам)

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

&НаКлиенте

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

	БылаОшибка = Ложь;
	ТекстСообщения = "";

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

		Попытка

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

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

				Иначе
					Ванесса.НажатьНаГиперссылкуВФорматированнойСтроке(ЭлементФормы, Гиперссылка);
				КонецЕсли;

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

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

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

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

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

&НаКлиенте
//И у поля "Надпись форматированная строка" я нажимаю гиперссылку 'Ссылка1'
//@УПоляЯНажимаюГиперссылку(Парам01,Парам02)

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

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

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

&НаКлиенте
//И у поля с именем "Надпись форматированная строка" я нажимаю гиперссылку 'Ссылка1'
//@УПоляСИменемЯНажимаюГиперссылку(Парам01,Парам02)

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

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

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

&НаКлиенте
//И у поля "Надпись форматированная строка" я нажимаю гиперссылку 'Ссылка1' по шаблону
//@УПоляЯНажимаюГиперссылкуПоШаблону(Парам01,Парам02)

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

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

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

&НаКлиенте
//И у поля с именем "Надпись форматированная строка" я нажимаю гиперссылку 'Ссылка1' по шаблону
//@УПоляСИменемЯНажимаюГиперссылкуПоШаблону(Парам01,Парам02)

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

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

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

&НаКлиенте

[Assistant] Функция ВТаблицеВыпадающийСписокНеСодержитЗначения(ИмяТаблицы,ИмяЭлемента,ТабПарам,ИскатьПоИмени = Ложь)


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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
//И я жду, что в табличном документе "РеквизитТабличныйДокумент" ячейка "r4c2" станет равна "Значение" в течение 20 секунд
//@ЯЖдуЧтоВТабличномДокументеЯчейкаСтанетРавнаВТечениеСекунд(Парам01,Парам02,Парам03,Парам04)

Функция ЯЖдуЧтоВТабличномДокументеЯчейкаСтанетРавнаВТечениеСекунд(ИмяРеквизита,ИмяЯчейки,Значение,КоличествоСекунд) Экспорт
	Ванесса.ЗапретитьВыполнениеШагов();

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

&НаКлиенте
//И я запоминаю значение ячейки табличного документа "РеквизитТабличныйДокумент" "АдресЯчейки" в переменную "ИмяПеременной"
//@ЯЗапоминаюЗначениеЯчейкиТабличногоДокументаВПеременную(Парам01,Парам02,Парам03)

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

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

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

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

&НаКлиенте
//И в таблице "ИмяТаблицы" заголовок активной колонки "Текст"
//@ВТаблицеЗаголовокАктивнойКолонки(Парам01,Парам02)

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

	Если ПолучитьЗаголовок Тогда
		ТекущееИмя = АктивноеПоле.ТекстЗаголовка;
	Иначе
		ТекущееИмя = АктивноеПоле.Имя;
	КонецЕсли;

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

&НаКлиенте
//И в таблице "ИмяТаблицы" имя активной колонки "Текст"
//@ВТаблицеИмяАктивнойКолонки(Парам01,Парам02)

Функция ВТаблицеИмяАктивнойКолонки(ИмяТаблицы,ИмяКолонки) Экспорт
	ВТаблицеЗаголовокАктивнойКолонки(ИмяТаблицы,ИмяКолонки,Ложь);
КонецФункции

&НаКлиенте
//Если в таблице "ИмяТаблицы" есть колонка "Заголовок колонки" Тогда
//@ВТаблицеЕстьКолонкаТогда(Парам01,Парам02)

Функция ВТаблицеЕстьКолонкаТогда(ИмяТаблицы,ИмяКолонки,ИскатьПоИмени = Ложь,ПроверятьНаличие = Истина) Экспорт
	ТЧ = Ванесса.НайтиТЧПоИмени(ИмяТаблицы);
	Если ИскатьПоИмени Тогда
		Колонка = ТЧ.НайтиОбъект(,,ИмяКолонки);
	Иначе
		Колонка = ТЧ.НайтиОбъект(,ИмяКолонки);
	КонецЕсли;

	Если ПроверятьНаличие Тогда
		Если Колонка = Неопределено ИЛИ НЕ Колонка.ТекущаяВидимость() Тогда
			Ванесса.УстановитьРезультатУсловия(Ложь);
		Иначе
			Ванесса.УстановитьРезультатУсловия(Истина);
		КонецЕсли;
	Иначе
		Если Колонка = Неопределено ИЛИ НЕ Колонка.ТекущаяВидимость() Тогда
			Ванесса.УстановитьРезультатУсловия(Истина);
		Иначе
			Ванесса.УстановитьРезультатУсловия(Ложь);
		КонецЕсли;
	КонецЕсли;
КонецФункции

&НаКлиенте
//Если в таблице "ИмяТаблицы" есть колонка с именем "ИмяКолонки" Тогда
//@ВТаблицеЕстьКолонкаСИменемТогда(Парам01,Парам02)

Функция ВТаблицеЕстьКолонкаСИменемТогда(ИмяТаблицы,ИмяКолонки) Экспорт
	ВТаблицеЕстьКолонкаТогда(ИмяТаблицы,ИмяКолонки,Истина,Истина);
КонецФункции

&НаКлиенте
//Если в таблице "ИмяТаблицы" нет колонки "Заголовок колонки" Тогда
//@ВТаблицеНетКолонкиТогда(Парам01,Парам02)

Функция ВТаблицеНетКолонкиТогда(ИмяТаблицы,ИмяКолонки) Экспорт
	ВТаблицеЕстьКолонкаТогда(ИмяТаблицы,ИмяКолонки,Ложь,Ложь);
КонецФункции

&НаКлиенте
//Если в таблице "ИмяТаблицы" нет колонки с именем "ИмяКолонки" Тогда
//@ВТаблицеНетКолонкиСИменемТогда(Парам01,Парам02)

Функция ВТаблицеНетКолонкиСИменемТогда(ИмяТаблицы,ИмяКолонки) Экспорт
	ВТаблицеЕстьКолонкаТогда(ИмяТаблицы,ИмяКолонки,Истина,Ложь);
КонецФункции

&НаКлиенте
//И я запоминаю значение таблицы "Таблица1" как "Таб1"
//@ЯЗапоминаюЗначениеТаблицыКак(Парам01,Парам02,ТабПарам)

[Assistant] Функция ОбработчикОжиданияЯЖдуЧтоВТабличномДокументеЯчейкаСтанетРавнаВТечениеСекунд()


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

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

Функция ИмяФункции(ИмяТаблицы,ИмяПеременной,ТабПарам = Неопределено,ВыделятьВсеСтроки = Истина) Экспорт
	//ТабПарам = Ванесса.ПолучитьЗначенияТаблицыGherkinИзКонтекста(ТабПарам);
	ТЧ = Ванесса.НайтиТЧПоИмени(ИмяТаблицы);

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

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

	НовоеЗначениеТЧ = Новый Массив;

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

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

	Для Каждого СтрокаЗначениеТЧ Из ЗначениеТЧ Цикл
		СтрокаНовоеЗначениеТЧ = Новый Соответствие;

		Для Ккк = 1 По ТабПарам.Количество() Цикл
			ИмяКолонкиТаблицыФормы = ТабПарам[Ккк-1]["Кол1"];
			Если Не ЗначениеЗаполнено(СтрЗаменить(ИмяКолонкиТаблицыФормы, " ", "")) Тогда Продолжить; КонецЕсли;    // проверка на пустой заголовок колонки, такой отбрасываем
			ЗначениеКолонкиТаблицыФормы = СтрокаЗначениеТЧ[ИмяКолонкиТаблицыФормы];
			Если ЗначениеКолонкиТаблицыФормы = Неопределено Тогда
				ИмяКолонкиТаблицыФормы = СтрЗаменить(ИмяКолонкиТаблицыФормы, "\n", "");
				//Ищем подходящие ключи из заголовков колонок
				МассивКлючей = Новый Массив;
				Для Каждого Элем Из СтрокаЗначениеТЧ Цикл
					ТекКлюч = СтрЗаменить(Элем.Ключ, Символы.ПС, "");
					ТекКлюч = СтрЗаменить(ТекКлюч, Символы.ВК, "");
					Если НРег(ИмяКолонкиТаблицыФормы) = НРег(ТекКлюч) Тогда
						МассивКлючей.Добавить(Элем.Ключ);
					КонецЕсли;
				КонецЦикла;
				Если МассивКлючей.Количество() = 1 Тогда
					ЗначениеКолонкиТаблицыФормы = СтрокаЗначениеТЧ[МассивКлючей[0]];
				КонецЕсли;

			КонецЕсли;

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

			СтрокаНовоеЗначениеТЧ.Вставить(ИмяКолонкиТаблицыФормы,ЗначениеКолонкиТаблицыФормы);

		КонецЦикла;

		НовоеЗначениеТЧ.Добавить(СтрокаНовоеЗначениеТЧ);
	КонецЦикла;

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

&НаКлиенте
//И таблица "Таб1" содержится в таблице "Таб2"
//@ТаблицаСодержитсяВТаблице(Парам01,Парам02,ТабПарам)

[Assistant] Функция ЯЗапоминаюЗначениеТаблицыКак(ИмяТаблицы,ИмяПеременной,ТабПарам = Неопределено,ВыделятьВсеСтроки = Истина)


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

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

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

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

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

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

				РеквизитТаблицы = Ванесса.ЗначениеИзСоответствияПоКлючуСУчетомЗаменыПереносаСтроки(Соответствие, ИмяКолонки);

			КонецЕсли;

		Иначе
			РеквизитТаблицы = ТекРеквизитыТаблицы[0];
		КонецЕсли;

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

		РеквизитыТаблицы.Вставить(ИмяКолонки,РеквизитТаблицы);
	КонецЦикла;

	Для Ккк = 1 По ТабПарам.Количество()-1 Цикл
		Таблица.ДобавитьСтроку();
		СтрокаТабПарам = ТабПарам[Ккк];
		НомерКолонки = 0;

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

		Для Каждого СтрокаКолонки Из МассивКолонки Цикл
			НомерКолонки = НомерКолонки + 1;
			ИмяКолонки = СтрокаКолонки.Значение;
			Текст = СтрокаТабПарам[Формат("Кол" + НомерКолонки, "ЧГ=; ЧН=0")];
			Если Текст = "*" Тогда
				Продолжить;
			КонецЕсли;

			РеквизитТаблицы = РеквизитыТаблицы[ИмяКолонки];
			РеквизитТаблицы.Активизировать();

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

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

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

				Иначе
					УстановитьЗначениеВПолеПриЗаполненииТаблицы(Таблица,РеквизитТаблицы,Текст,ИмяТаблицы,Истина);
				КонецЕсли;
			КонецЕсли;

			//Возможно список не успел появиться. Проверяем это через активизацию следущего поля.
			СледущаяКолонка = НомерКолонки;
			Пока Истина Цикл
				СледущаяКолонка = СледущаяКолонка + 1;

				Попытка
					ТекСтрокаКолонки = МассивКолонки[СледущаяКолонка-1];
				Исключение
					Прервать;
				КонецПопытки;

				ИмяКолонки = ТекСтрокаКолонки.Значение;
				ТекстСледущегоПоля = СтрокаТабПарам[Формат("Кол" + СледущаяКолонка, "ЧГ=; ЧН=0")];
				Если ТекстСледущегоПоля = "*" Тогда
					Продолжить;
				КонецЕсли;

				Если ТекстСледущегоПоля = Неопределено Тогда
					Прервать;
				КонецЕсли;

				КоличествоПопыток = 2;
				Для СчетчикПопыток = 1 По КоличествоПопыток Цикл
					ПолучилосьАктивировать = Ложь;
					Попытка
						РеквизитТаблицыСледующий = РеквизитыТаблицы[ИмяКолонки];
						РеквизитТаблицыСледующий.Активизировать();

						АктивнаяКолонка = Таблица.ПолучитьТекущийЭлемент();

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

						ПолучилосьАктивировать = Истина;
					Исключение
						Ванесса.Sleep(1);

						Попытка
							УстановитьЗначениеВПолеПриЗаполненииТаблицы(Таблица,РеквизитТаблицы,Текст,ИмяТаблицы,Ложь);
						Исключение
							Прервать;
						КонецПопытки;
					КонецПопытки;

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

				КонецЦикла;

				Прервать;
			КонецЦикла;

		КонецЦикла;

		ПолучилосьЗавершитьРедактирование = Истина;

		Попытка
			Таблица.ЗакончитьРедактированиеСтроки();
		Исключение
			ПолучилосьЗавершитьРедактирование = Ложь;
		КонецПопытки;
	КонецЦикла;

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

&НаКлиенте
//И у текущего элемента формы я вызываю запись содержимого в файл
//@УТекущегоЭлементаФормыЯВызываюЗаписьСодержимогоВФайл()

Функция УТекущегоЭлементаФормыЯВызываюЗаписьСодержимогоВФайл() Экспорт

	УТекущегоЭлементаФормыЯВызываюЗаписьСодержимогоВФайлСлужебный(Ложь);

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

&НаКлиенте
//И у текущего элемента формы я вызываю запись содержимого в файл сохранить как
//@УТекущегоЭлементаФормыЯВызываюЗаписьСодержимогоВФайлСохранитьКак()

Функция УТекущегоЭлементаФормыЯВызываюЗаписьСодержимогоВФайлСохранитьКак() Экспорт

	УТекущегоЭлементаФормыЯВызываюЗаписьСодержимогоВФайлСлужебный(Истина);

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

&НаКлиенте

Процедура УТекущегоЭлементаФормыЯВызываюЗаписьСодержимогоВФайлСлужебный(СохранитьКак)

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

	ТекущееПоле = АктивнаяФорма.ПолучитьТекущийЭлемент();

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

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

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

&НаКлиенте
//И в таблице "ИмяТаблицы" я активизирую колонку "ИмяКолонки" в группе "ИмяГруппы"
//@ВТаблицеЯАктивизируюКолонкуВГруппе(Парам01,Парам02,Парам03)

[Assistant] Функция ЯЗаполняюТаблицуДанными(ИмяТаблицы,ТабПарам)


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

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

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

	ТаблицаКлиент.ПереключитьПометкуУдаленияСтроки();

	ОкноПредупреждения = Неопределено;
	ТекстПредупреждения = Ванесса.ПолучитьТекстПредупреждения(ОкноПредупреждения);

	ЕстьПометка = Истина;
	Если Ванесса.ЭтоТекстДиалогаПредлагающегоПометитьЭлементНаУдаление(ТекстПредупреждения) Тогда
		ЕстьПометка = Ложь;
	КонецЕсли;

	ОкноПредупреждения.Закрыть();

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

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

&НаКлиенте
//Если в таблице "ИмяТаблицы" текущая строка помечена на удаление тогда
//@ВТаблицеТекущаяСтрокаПомеченаНаУдалениеТогда()

Функция ВТаблицеТекущаяСтрокаПомеченаНаУдалениеТогда(ИмяТаблицы) Экспорт
	ВТаблицеТекущаяСтрокаПомеченаНаУдаление(ИмяТаблицы,Истина);
КонецФункции

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

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

	ТаблицаКлиент.ПереключитьПометкуУдаленияСтроки();

	ОкноПредупреждения = Неопределено;
	ТекстПредупреждения = Ванесса.ПолучитьТекстПредупреждения(ОкноПредупреждения);

	ЕстьПометка = Ложь;
	Если Ванесса.ЭтоТекстДиалогаПредлагающегоСнятьПометкуУдаления(ТекстПредупреждения) Тогда
		ЕстьПометка = Истина;
	КонецЕсли;

	ОкноПредупреждения.Закрыть();

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

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

&НаКлиенте
//Если в таблице "ИмяТаблицы" текущая строка не помечена на удаление тогда
//@ВТаблицеТекущаяСтрокаНеПомеченаНаУдалениеТогда()

Функция ВТаблицеТекущаяСтрокаНеПомеченаНаУдалениеТогда(ИмяТаблицы) Экспорт
	ВТаблицеТекущаяСтрокаНеПомеченаНаУдаление(ИмяТаблицы,Истина);
КонецФункции

&НаКлиенте
//И у элемента формы с именем "ФормаКнопкаСПометкой" установлена пометка
//@УЭлементаФормыСИменемУстановленаПометка(Парам01)

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

&НаКлиенте
//И у элемента формы с именем "ФормаКнопкаСПометкой" не установлена пометка
//@УЭлементаФормыСИменемНеУстановленаПометка(Парам01)

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

&НаКлиенте
//И у элемента формы с именем "ФормаКнопкаСПометкой" установлена пометка
//@УЭлементаФормыСИменемУстановленаПометка(Парам01)

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

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

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

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

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

&НаКлиенте
//И у элемента формы с именем "ФормаКнопкаСПометкой" не установлена пометка
//@УЭлементаФормыСИменемНеУстановленаПометка(Парам01)

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

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

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

	Если Ванесса.Версия8325ИлиВыше Тогда
		Ванесса.СохранитьЗначениеПеременнойВКонтекст(ИмяПеременной, АктивноеОкно.НавигационнаяСсылка);
		Возврат Неопределено;
	КонецЕсли;

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

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

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

			Ванесса.СохранитьЗначениеПеременнойВКонтекст(ИмяПеременной, КнопкаКомандногоИнтерфейса.НавигационнаяСсылка);

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

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

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

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

&НаКлиенте
//И я закрываю выпадающий список "ИмяРеквизита"
//@ЯЗакрываюВыпадающийСписок(Парам01)

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

&НаКлиенте
//И я закрываю выпадающий список с именем "ИмяРеквизита"
//@ЯЗакрываюВыпадающийСписокСИменем(Парам01)

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

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

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

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

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

&НаКлиенте
//И я запоминаю адрес текущей ячейки "ИмяРеквизита" в переменную "ИмяПеременной"
//@ЯЗапоминаюАдресТекущейЯчейкиВПеременную(Парам01,Парам02)

[Assistant] Функция ВТаблицеТекущаяСтрокаПомеченаНаУдаление(ИмяТаблицы, ЭтоУсловие = Ложь)


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

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

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

	НашлиФорму = Ложь;

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

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

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

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

			КонецЦикла;

		Исключение
			СтрокаОшибки = ОписаниеОшибки();
			БылаОшибка = Истина;
		КонецПопытки;

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

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

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

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

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

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

&НаКлиенте

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

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

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

	НашлиФорму = Ложь;
	Попытка

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

			Если ТекФорма <> Неопределено  Тогда
				НашлиФорму = Истина;
				Прервать;
			КонецЕсли;
		КонецЦикла;
	Исключение
	КонецПопытки;

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

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

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

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

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

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

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

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

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

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

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

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

Функция ЯЗапоминаюИмяФормыВПеременную(ИмяПеременной) Экспорт

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

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

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

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

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

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

&НаКлиенте

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере

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

&НаКлиенте

[Assistant] Функция ЯЗакрываюФорму(Имя, ИскатьПоИмени = Ложь)