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

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

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

		Попытка

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

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

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

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

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

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

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

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

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

	Если Ошибка Тогда

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

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

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

&НаКлиенте
//Тогда текст ячейки таблицы "Таблица" "Наименование" стал равен "111"
//@ТекстТекущейЯчейкиТаблицыСталРавен(Парам01,Парам02)

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

		Попытка
			ДопПараметры = Новый Структура;
			ДопПараметры.Вставить("КоличествоПопыток", 1);
			ТЧ                  = Ванесса.НайтиТЧПоИмени(ИмяТЧ,,,, ДопПараметры);
			ПредставлениеДанных = ТЧ.ПолучитьТекстЯчейки();

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

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

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

&НаКлиенте

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

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

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

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

&НаКлиенте
//И поле "Имя поля" заполнено
//@ПолеЗаполнено(Парам01)

Функция ПолеЗаполнено(ИмяЭлемента) Экспорт

	ПолеЗаполненоСлужебный(ИмяЭлемента, Ложь, Истина);

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

&НаКлиенте
//И поле с именем "Имя поля" заполнено
//@ПолеСИменемЗаполнено(Парам01)

Функция ПолеСИменемЗаполнено(ИмяЭлемента) Экспорт

	ПолеЗаполненоСлужебный(ИмяЭлемента, Истина, Истина);

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

&НаКлиенте
//И поле "Имя поля" не заполнено
//@ПолеНеЗаполнено(Парам01)

Функция ПолеНеЗаполнено(ИмяЭлемента) Экспорт

	ПолеЗаполненоСлужебный(ИмяЭлемента, Ложь, Ложь);

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

&НаКлиенте
//И поле с именем "Имя поля" не заполнено
//@ПолеСИменемНеЗаполнено(Парам01)

Функция ПолеСИменемНеЗаполнено(ИмяЭлемента) Экспорт

	ПолеЗаполненоСлужебный(ИмяЭлемента, Истина, Ложь);

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

&НаКлиенте
//Если поле "Имя поля" заполнено Тогда
//@ПолеЗаполненоТогда(Парам01)

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

&НаКлиенте
//Если поле с именем "Имя поля" заполнено Тогда
//@ПолеСИменемЗаполнено(Парам01)

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

&НаКлиенте

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

// И таблица формы с именем "ИмяТаблицы" стала равной:
//  @ТаблицаФормыСИменемСталаРавной(Парам01, ТабПарам)
//
// Параметры:
//  ИмяТаблицы	 - Строка	 -
//  ТабПарам	 - Массив	 -
//  ДопПараметры - Структура	 -
//
&НаКлиенте

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


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

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

Функция ИмяФункции(СтрокаШапки, ДанныеСтрокиТаблицы, ИмяТаблицы, НомерСтроки)

	Массив = Новый Массив;
	Массив.Добавить("|");

	Для каждого Колонка Из СтрокаШапки Цикл
		Массив.Добавить(" '");
		ИмяКолонкиСтарое = СтрокаШапки[Колонка.Ключ];

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

		Массив.Добавить(ЗначСтарое);
		Массив.Добавить("' |");

	КонецЦикла;

	Возврат Ванесса._СтрСоединить(Массив, "");

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

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

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

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

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

	Ванесса.УстановитьРезультатУсловия(Истина);
КонецФункции

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

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

&НаКлиенте
//И в таблице "ИмяТаблицы" "КоличествоСтрок" строк, у которых колонка "ИмяКолонки" "ВидСравнения" 2
//@ВТаблицеСтрокУКоторыхКолонка(Парам01,Парам02,Парам03,Парам04,Парам05)

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

	ЗначениеТЧ = Ванесса.ПолучитьЗначениеТестируемаяТаблицаФормы(ТЧ);

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

	КоличествоЗначений = 0;

	КоличествоСтрок = ЗначениеТЧ.Количество();

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

	Для Ккк = 0 По КоличествоСтрок-1 Цикл
		СтрокаТаблицы = ЗначениеТЧ[Ккк];

		ЗначениеВКолонке = СтрокаТаблицы[ИмяКолонки];

		ЗначениеСравнения = Неопределено;
		Выражение = "ЗначениеСравнения = (ЗначениеВКолонке " + ПолученныйВидСравнения + " НужноеЗначениеКолонки)";
		Выполнить(Выражение);

		Если ЗначениеСравнения Тогда
			КоличествоЗначений = КоличествоЗначений + 1;
		КонецЕсли;

	КонецЦикла;

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

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

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

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

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

[Assistant] Функция ПолучитьПредставлениеСтрокиИзТаблицыЭталона(СтрокаШапки, ДанныеСтрокиТаблицы, ИмяТаблицы, НомерСтроки)


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

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

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

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

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

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

	ТабПарам = ТабПарамОбработкаОжидания;

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

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

		Попытка
			ЗначениеТЧ = Ванесса.ПолучитьЗначениеТестируемаяТаблицаФормы(ТЧ, ДопПараметры);
		Исключение
			//возможно форма не отвечает
			ЗначениеТЧ = Новый Массив;
		КонецПопытки;

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

			СтрокиКоторыеИскалисьВТаблице = Ванесса.ПреобразоватьЗначениеВМакет(ТабПарам);
			Ванесса.ПрикрепитьМакетКСценарию(СтрокиКоторыеИскалисьВТаблице,Ванесса.Локализовать("СтрокиКоторыеИскалисьВТаблице"));
		КонецЕсли;

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

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

	Попытка
		КоличествоПолученныхСтрок = ЗначениеТЧ.Количество();
	Исключение
		//значит не получилось получить строки таблицы
		Возврат Неопределено;
	КонецПопытки;

	МассивОшибок = Новый Массив;

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

	Если ВидСравненияОбрабткаОжидания = "Содержит" Тогда
		Если Отказ Тогда
			Стр = "";
			Для Каждого Элем Из МассивОшибок Цикл
				Стр = Стр + Элем + Символы.ПС;
			КонецЦикла;

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

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

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

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

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

	//ТабПарам = Ванесса.ПолучитьЗначенияТаблицыGherkinИзКонтекста(ТабПарам);

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

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

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

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

	//ТабПарам = Ванесса.ПолучитьЗначенияТаблицыGherkinИзКонтекста(ТабПарам);

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

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

&НаКлиенте
//Тогда таблица формы с именем "ТабличнаяЧасть1" содержит изменения:
//@ТаблицаФормыСИменемСталаРавной(Парам01,ТабПарам)

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

&НаКлиенте

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

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

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

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

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

&НаКлиенте
//И таблица "ИмяТаблицы" содержит строки только из макета "ИмяМакета" по шаблону
//@ТаблицаСодержитСтрокиТолькоИзМакетаПоШаблону(Парам01,Парам02)

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


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

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

Функция ИмяФункции(ПереданныеКолонки,КолонкиТаблицыTestClient,ТабПарам,ЗначениеТЧ,ИмяТЧ)
	ПерваяСтрокаПереданнойТаблицы = ТабПарам[0];
	Для Каждого Значение Из ПерваяСтрокаПереданнойТаблицы Цикл
		ПереданныеКолонки.Добавить(Значение.Значение)
	КонецЦикла;

	ПерваяСтрокаЗначениеТЧ = ЗначениеТЧ[0];
	Для Каждого Значение Из ПерваяСтрокаЗначениеТЧ Цикл
		КолонкиТаблицыTestClient.Добавить(Значение.Ключ)
	КонецЦикла;

	Стр = "";
	Для Каждого ИмяКолонки Из ПереданныеКолонки Цикл
		Ид = КолонкиТаблицыTestClient.Найти(ИмяКолонки);
		Если Ид = Неопределено Тогда
			Стр = Стр + ИмяКолонки + ";";
		КонецЕсли;
	КонецЦикла;

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

&НаКлиенте
//Тогда таблица "ТабличнаяЧасть1" не содержит строки:
//@ТаблицаНеСодержитСтроки(ИмяТЧ,ТабПарам)

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

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

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

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

			ЗначениеТЧ = ПолучитьСтрокиИзТаблицыTestClient(ТЧ);

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

			Если ЗначениеТЧ.Количество() = 0 Тогда
				//значит таблица точно не содержит строки
				Прервать;
			КонецЕсли;

			//проверим, что переданы все колонки
			ПереданныеКолонки        = Новый Массив;
			КолонкиТаблицыTestClient = Новый Массив;

			КолонкиОжидаемойИРельнойТаблицыСовпадают(ПереданныеКолонки,КолонкиТаблицыTestClient,ТабПарам,ЗначениеТЧ,ИмяТЧ);

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

			//проверим, что в таблице нет указанных строк
			Для Ккк = 0 По ЗначениеТЧ.Количество()-1 Цикл
				СтрокаТаблицыTestClient = ЗначениеТЧ[Ккк];

				Для Ррр = 1 По ТабПарам.Количество()-1 Цикл
					СтрокаПереданнойТаблицы = ТабПарам[Ррр];

					НашлиСтроку = Истина;

					Ном = -1;
					Для Каждого ИмяКолонки Из ПереданныеКолонки Цикл
						Ном                       = Ном + 1;
						ЗначениеTestClient        = СтрокаТаблицыTestClient[ИмяКолонки];
						ЗначениеПереданнойТаблицы = СтрокаПереданнойТаблицы["Кол"+ Формат(Ном+1, "ЧГ=; ЧН=0")];

						Если ЗначениеTestClient <> ЗначениеПереданнойТаблицы Тогда
							НашлиСтроку = Ложь;
							Прервать;
						КонецЕсли;
					КонецЦикла;

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

				КонецЦикла;

			КонецЦикла;

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

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

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

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

&НаКлиенте
//Тогда таблица "ТабличнаяЧасть1" не содержит строки из макета
//@ТаблицаНеСодержитСтрокиИзМакета(ИмяТЧ,ТабПарам)

Функция ТаблицаНеСодержитСтрокиИзМакета(ИмяТЧ,ИмяМакета) Экспорт
	ТаблицаНеСодержитСтроки(ИмяТЧ,Неопределено,ИмяМакета);
КонецФункции

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

Функция ВПанелиРазделовЯВыбираю(ИмяКнопки, ДопПараметры = Неопределено) Экспорт

	Ванесса.ВПанелиРазделовЯВыбираю(ИмяКнопки, ДопПараметры);

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

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

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

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

	Если КнопкаКомандногоИнтерфейса = Неопределено Тогда
		Если МенюФункцийТекущегоРаздела <> Неопределено Тогда
			КнопкаКомандногоИнтерфейса = МенюФункцийТекущегоРаздела.НайтиОбъект(Тип("ТестируемаяКнопкаКомандногоИнтерфейса"), ИмяКнопки,,10);
		КонецЕсли;
	КонецЕсли;

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

	КнопкаКомандногоИнтерфейса.Активизировать();
	Ванесса.ОбработатьСменуАктивногоОкна();
КонецФункции

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

Функция ВПанелиФункцийЯВыбираю(ИмяКнопки, ДопПараметры = Неопределено) Экспорт

	Ванесса.ВПанелиФункцийЯВыбираю(ИмяКнопки, ДопПараметры);

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

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

[Assistant] Функция КолонкиОжидаемойИРельнойТаблицыСовпадают(ПереданныеКолонки,КолонкиТаблицыTestClient,ТабПарам,ЗначениеТЧ,ИмяТЧ)


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

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

Функция ИмяФункции(ИмяГруппы,ИмяКнопки) Экспорт
	Ванесса.ОбработатьСменуАктивногоОкна();

	ОкноПриложенияОсновноеCommandInterface = КонтекстСохраняемый.ГлавноеОкноТестируемого.ПолучитьКомандныйИнтерфейс();
	//ОкноПриложенияОсновноеCommandInterface = КонтекстСохраняемый.ОкноПриложенияОсновноеCommandInterface;
	ПодчиненныеОбъекты = ОкноПриложенияОсновноеCommandInterface.ПолучитьПодчиненныеОбъекты();
	//Ванесса.ПосмотретьЗначение(ПодчиненныеОбъекты,Истина);
	МенюФункций                = Неопределено;
	МенюФункцийТекущегоРаздела = Неопределено;
	Для каждого Элем Из ПодчиненныеОбъекты Цикл
		Если НРег(Элем.ТекстЗаголовка) = НРег("Меню функций") Тогда
			МенюФункций = Элем;
		ИначеЕсли НРег(Элем.ТекстЗаголовка) = НРег("Functions menu") Тогда
			МенюФункций = Элем;
		ИначеЕсли НРег(Элем.ТекстЗаголовка) = НРег("Панель функций текущего раздела") Тогда
			МенюФункцийТекущегоРаздела = Элем;
			Прервать;
		КонецЕсли;
	КонецЦикла;

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

	ГруппаИнтерфейса = МенюФункций.НайтиОбъект(Тип("ТестируемаяГруппаКомандногоИнтерфейса"), ИмяГруппы,,10);

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

	КнопкаКомандногоИнтерфейса = ГруппаИнтерфейса.НайтиОбъект(Тип("ТестируемаяКнопкаКомандногоИнтерфейса"), ИмяКнопки,,10);

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

	КнопкаКомандногоИнтерфейса.Нажать();
	Ванесса.ОбработатьСменуАктивногоОкна();
КонецФункции

&НаКлиенте
//Когда В панели открытых я выбираю "Склады"
//@ВПанелиОткрытыхЯВыбираю(Парам01)

Функция ВПанелиОткрытыхЯВыбираю(ИмяКнопки) Экспорт
	Ванесса.ОбработатьСменуАктивногоОкна();

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

		Попытка
			ПанельОткрытых = Ванесса.ПанельОткрытых();

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

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

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

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

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

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

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

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

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

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

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

	СтрокаОшибки = "";
	БылаОшибка = Ложь;
	ПолучилосьАктивизировать = Ложь;

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

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

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

			Ванесса.ОткрытьКнопкуВыбораБраузер(Поле);

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

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

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

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

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

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

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

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

[Assistant] Функция ВПанелиФункцийВГруппеЯВыбираю(ИмяГруппы,ИмяКнопки)


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

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

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

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

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

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

				ТекущееЗначениеМакета   = Ванесса.ПреобразоватьЗначениеВМакет(ТабДокСтало);
				Ванесса.ПрикрепитьМакетКСценарию(ТекущееЗначениеМакета,Ванесса.Локализовать("ТекущееЗначениеМакета"));

				ПараметрыАктуализации = Новый Структура;
				ПараметрыАктуализации.Вставить("ТипСравненияЗначения", "СравнениеТабличногоДокументаСТаблицейGherkin");
				Ванесса.УстановитьЗначенияДляАктуализацииПараметровШага(ПараметрыАктуализации);
			КонецЕсли;

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

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

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

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

			Ванесса.ПрикрепитьКСценариюДополнительныеФайлыСравненияЗначенияСЭталоном(ТабПарамБыло, ТабДокСтало);

			ПараметрыАктуализации = Новый Структура;
			ПараметрыАктуализации.Вставить("ТипСравненияЗначения", "СравнениеТабличногоДокументаСТаблицейGherkin");
			Ванесса.УстановитьЗначенияДляАктуализацииПараметровШага(ПараметрыАктуализации);
		КонецЕсли;

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

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

		СтрБыло = ТабПарамБыло[Ном];

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

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

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

				Ванесса.ПрикрепитьКСценариюДополнительныеФайлыСравненияЗначенияСЭталоном(ТабПарамБыло, ТабДокСтало);

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

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

		НомКол = 0;
		Для каждого ЗнСтало Из СтрСтало Цикл
			НомКол  = НомКол + 1;

			ЗнБыло  = СтрБыло["Кол" + НомКол];

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

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

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

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

							Ванесса.ПрикрепитьКСценариюДополнительныеФайлыСравненияЗначенияСЭталоном(ТабПарамБыло, ТабДокСтало);

							ПараметрыАктуализации = Новый Структура;
							ПараметрыАктуализации.Вставить("ТипСравненияЗначения", "СравнениеТабличногоДокументаСТаблицейGherkin");
							Ванесса.УстановитьЗначенияДляАктуализацииПараметровШага(ПараметрыАктуализации);
						КонецЕсли;

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

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

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

						Ванесса.ПрикрепитьКСценариюДополнительныеФайлыСравненияЗначенияСЭталоном(ТабПарамБыло, ТабДокСтало);

						ПараметрыАктуализации = Новый Структура;
						ПараметрыАктуализации.Вставить("ТипСравненияЗначения", "СравнениеТабличногоДокументаСТаблицейGherkin");
						Ванесса.УстановитьЗначенияДляАктуализацииПараметровШага(ПараметрыАктуализации);
					КонецЕсли;

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

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

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

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

[Assistant] Функция ТабличныйДокументФормыСИменемСталРавен(ИмяРеквизита,ТабПарамБыло,СталПустым = Ложь,ДопПараметры = Неопределено)


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

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

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

		Если ДопПараметры.Свойство("ТолькоСтрокиИзЭталона") Тогда
			ТолькоСтрокиИзЭталона = ДопПараметры.ТолькоСтрокиИзЭталона;
		КонецЕсли;
	КонецЕсли;

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

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

	Если ЧтениеИзТабличногоДокумента Тогда
		КолСтрокБыло = ТабПарамБыло.ВысотаТаблицы;
	Иначе
		КолСтрокБыло = ТабПарамБыло.Количество();
	КонецЕсли;

	ПроблемнаяСтрока = Неопределено;
	Для Ном = 1 По КолСтрокБыло Цикл
		Если НЕ ЧтениеИзТабличногоДокумента Тогда
			СтрБыло = ТабПарамБыло[Ном - 1];
		КонецЕсли;

		СтрокаСовпала = Ложь;
		Для Каждого СтрСтало Из ТабДокСтало Цикл

			НомКол = 0;
			КолонкиСовпали = Истина;
			Для каждого ЗнСтало Из СтрСтало Цикл
				НомКол = НомКол + 1;

				Попытка
					Если ЧтениеИзТабличногоДокумента Тогда
						ЗнБыло = ТабПарамБыло.Область(Ном, НомКол, Ном, НомКол).Текст;
					Иначе
						ЗнБыло = СтрБыло["Кол" + НомКол];
					КонецЕсли;
				Исключение
					// Не совпало количество колонок
					КолонкиСовпали = Ложь;
					Прервать;
				КонецПопытки;

				ЗнБыло = СтрЗаменить(ЗнБыло,Символы.ПС,"\n");
				ЗнСтало = СтрЗаменить(ЗнСтало,Символы.ПС,"\n");

				ЗнБыло  = СокрЛП(СтрЗаменить(ЗнБыло,Символы.НПП," "));
				ЗнСтало = СокрЛП(СтрЗаменить(ЗнСтало,Символы.НПП," "));

				Если ЗнСтало <> ЗнБыло Тогда
					Если ПоШаблону Тогда
						Если Ванесса.СтрокаСоответствуетШаблону(ЗнСтало, ЗнБыло) Тогда
							Продолжить;
						КонецЕсли;
					КонецЕсли;

					Если ЗнБыло <> "*" Тогда
						КолонкиСовпали = Ложь;
						Прервать;
					КонецЕсли;
				КонецЕсли;
			КонецЦикла;

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

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

		КонецЦикла;

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

			Если ПроблемнаяСтрока <> Неопределено Тогда
				Стр = "|'";
				Для Сч = 1 По ПроблемнаяСтрока.Количество() Цикл
					Стр = Стр + ПроблемнаяСтрока["Кол" + Сч] + "'|";
				КонецЦикла;
				ТекстСообщения = ТекстСообщения  + ":" + Символы.ПС + Стр;
			КонецЕсли;

			Если ЧтениеИзТабличногоДокумента Тогда
				МакетТабПарам = ТабПарамБыло;
			Иначе
				МакетТабПарам = Ванесса.ПреобразоватьЗначениеВМакет(ТабПарамБыло);
			КонецЕсли;

			Если ДобавлятьФайлыКСценарию Тогда

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

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

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

					Ванесса.ПрикрепитьМакетКСценарию(МакетТабПарам,Ванесса.Локализовать(ИмяПараметраПрикрепленияЭталона));
					Если Ванесса.РежимСовместимостиБольшеИлиРавен837 Тогда
						Ванесса.ПрикрепитьМакетКСценарию(Ванесса.ПолучитьРазличияВМакетах(МакетТабПарам, ТекущееЗначениеМакета), Ванесса.Локализовать("Различия"));
					КонецЕсли;

					Ванесса.УстановитьЗначенияТаблицДляСравнения(ТабПарамБыло,ТабДокСтало,"Макет");

					Ванесса.ПрикрепитьКСценариюДополнительныеФайлыСравненияЗначенияСЭталоном(МакетТабПарам, ТекущееЗначениеМакета);
				КонецЕсли;
			КонецЕсли;

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

	Если ТолькоСтрокиИзЭталона Тогда

		Сч = 0;
		Для Каждого СтрСтало Из ТабДокСтало Цикл
			СтрокаСовпала = Ложь;
			Сч = Сч + 1;

			Для Ном = 1 По КолСтрокБыло Цикл
				Если НЕ ЧтениеИзТабличногоДокумента Тогда
					СтрБыло = ТабПарамБыло[Ном - 1];
				КонецЕсли;

				НомКол = 0;
				КолонкиСовпали = Истина;
				Для каждого ЗнСтало Из СтрСтало Цикл
					НомКол = НомКол + 1;

					Попытка
						Если ЧтениеИзТабличногоДокумента Тогда
							ЗнБыло = ТабПарамБыло.Область(Ном, НомКол, Ном, НомКол).Текст;
						Иначе
							ЗнБыло = СтрБыло["Кол" + НомКол];
						КонецЕсли;
					Исключение
						// Не совпало количество колонок
						КолонкиСовпали = Ложь;
						Прервать;
					КонецПопытки;

					ЗнБыло  = СокрЛП(СтрЗаменить(ЗнБыло,Символы.НПП," "));
					ЗнСтало = СокрЛП(СтрЗаменить(ЗнСтало,Символы.НПП," "));

					ЗнБыло = СтрЗаменить(ЗнБыло,Символы.ПС,"\n");
					ЗнСтало = СтрЗаменить(ЗнСтало,Символы.ПС,"\n");

					Если ЗнСтало <> ЗнБыло Тогда
						Если ПоШаблону Тогда
							Если Ванесса.СтрокаСоответствуетШаблону(ЗнСтало, ЗнБыло) Тогда
								Продолжить;
							КонецЕсли;
						КонецЕсли;

						Если ЗнБыло <> "*" Тогда
							КолонкиСовпали = Ложь;
							Прервать;
						КонецЕсли;
					КонецЕсли;
				КонецЦикла;

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

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

				Если ЧтениеИзТабличногоДокумента Тогда
					МакетТабПарам = ТабПарамБыло;
				Иначе
					МакетТабПарам = Ванесса.ПреобразоватьЗначениеВМакет(ТабПарамБыло);
				КонецЕсли;

				Если ДобавлятьФайлыКСценарию Тогда

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

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

						Ванесса.УстановитьЗначенияТаблицДляСравнения(ТабПарамБыло,ТабДокСтало,"Макет");
						Ванесса.ПрикрепитьКСценариюДополнительныеФайлыСравненияЗначенияСЭталоном(МакетТабПарам, ТекущееЗначениеМакета);
					КонецЕсли;

				КонецЕсли;

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

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

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

[Assistant] Функция СравнитьТабличныйДокументСЭталоном(ТабПарамБыло, ТабДокСтало, ЧтениеИзТабличногоДокумента, ПоШаблону, ДопПараметры = Неопределено)


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

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

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

	Нашли = Ложь;
	МассивФорм = НайтиФормыТекущегоОкна();

	ЧтениеИзТабличногоДокумента = Ложь;
	Если ТипЗнч(ТабПарамБыло) = Тип("ТабличныйДокумент") Тогда
		ЧтениеИзТабличногоДокумента = Истина;
	КонецЕсли;

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

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

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

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

	Если БылаОшибка Тогда

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

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

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

	КонецЕсли;

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

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

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

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

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

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

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

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

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

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

Функция ТабличныйДокументСодержитСтрокиТолькоИзМакета(ИмяРеквизита, ИмяМакета, ПоШаблону = Ложь) Экспорт
	ТабДокБыло = ПолучитьМакетИзОбработкиИлиИзКаталогаПроекта(ИмяМакета);
	ТабличныйДокументФормыСИменемСодержитСтроки(ИмяРеквизита, ТабДокБыло, ПоШаблону, Истина);
КонецФункции

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

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

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

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

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

Функция ЯЗакрываюОкноСЗаголовком(Знач ЗаголовокОкна) Экспорт

	Ванесса.ЯЗакрываюОкноСЗаголовком(ЗаголовокОкна);

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

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

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

&НаКлиенте
//И я закрываю текущее окно
//@ЯЗакрываюТекущееОкно()

[Assistant] Функция ТабличныйДокументФормыСИменемСодержитСтроки(ИмяРеквизита, ТабПарамБыло, ПоШаблону = Ложь, ТолькоСтрокиИзЭталона = Ложь, ДопПараметрыМетода = Неопределено)


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

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

Функция ИмяФункции(ИмяРеквизита, Знач ПараметрТекст, ИскатьПоИмени = Ложь) Экспорт
	ПолучилосьВычислить = Ложь;
	Попытка
		Текст = Формат(Ванесса.ВычислитьВнутреннееВыражение(ПараметрТекст, "ЧГ=; ЧН=0"));
		ПолучилосьВычислить = Истина;
	Исключение
		Текст = ПараметрТекст;
	КонецПопытки;

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

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

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

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

&НаКлиенте
//И в поле с именем "Наименование" я ввожу значение выражения "1+1"
//@ВПолеСИменемЯВвожуЗначениеВыражения(Парам01,Парам02)

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

&НаКлиенте
//И в таблице "ТабличнаяЧасть1" в поле 'Реквизит строка' я ввожу значение выражения '"Значение" + $ТекНомерСтроки$'
//@ВТаблицеВПолеЯВвожуЗначениеВыражения(Парам01,Парам02,Парам03)

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

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

	ТЧ = Ванесса.НайтиТЧПоИмени(ИмяТаблицы);

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

	ПолеРеквизит.Активизировать();

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

	//ПолеРеквизит.ВвестиТекст(Текст);
	Ванесса.ВвестиВПолеТекст(ПолеРеквизит,Текст);

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

&НаКлиенте
//И в таблице "ТабличнаяЧасть1" в поле с именем 'РеквизитСтрока' я ввожу значение выражения '"Значение" + $ТекНомерСтроки$'
//@ВТаблицеВПолеСименемЯВвожуЗначениеВыражения(Парам01,Парам02,Парам03)

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

&НаКлиенте
//И я нажимаю кнопку выбора у поля "Реквизит2"
//@ЯНажимаюКнопкуВыбораУПоля(Парам01)

Функция ЯНажимаюКнопкуВыбораУПоля(Парам01) Экспорт
	ВОткрытойФормеЯНажимаюКнопкуВыбораУПоля(Парам01);
КонецФункции

&НаКлиенте
//И я нажимаю кнопку выбора у поля с именем "Реквизит4"
//@ЯНажимаюКнопкуВыбораУПоляСИменем(Парам01)

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

&НаКлиенте
//И я нажимаю на кнопку "Создать"
//@ЯНажимаюНаКнопку(Парам01)

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

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

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

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

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

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

			КонецЦикла;

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

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

	КонецЦикла;

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

	ПолучилосьАктивизировать = АктивизироватьКнопку(Кнопка,ТекущаяФорма);

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

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

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

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

Функция ВПолеСИменемЯВвожуТекст(Парам01,Парам02,ЧастьИмени2 = Неопределено,
	                                       ЧастьИмени3 = Неопределено,
	                                       ЧастьИмени4 = Неопределено,
	                                       ЧастьИмени5 = Неопределено,
	                                       ЧастьИмени6 = Неопределено,
	                                       ЧастьИмени7 = Неопределено) Экспорт

	Ванесса.СоединитьСтрокиЕслиЭтоВозможно(Парам02,ЧастьИмени2,
	                                       ЧастьИмени3,
	                                       ЧастьИмени4,
	                                       ЧастьИмени5,
	                                       ЧастьИмени6,
	                                       ЧастьИмени7);
	ВОткрытойФормеВПолеСИменемЯВвожуТекст(Парам01,Парам02);
КонецФункции

&НаКлиенте
//И в полосе регулирования 'ЗаголовокПоля' я перехожу к значению 'Значение'
//@ВПолосеРегулированияЯПерехожуКЗначению(ЗаголовокПоля,Значение)

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


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

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

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

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

		Попытка

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

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

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

		Попытка

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

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

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

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

&НаКлиенте
//И я выбираю из списка 'Пун*т2' по шаблону
//@ЯВыбираюИзСпискаПоШаблону(Парам01)

Функция ЯВыбираюИзСпискаПоШаблону(Знач Значение) Экспорт

	ТекущаяФорма = НайтиТекущуюФорму();
	НадоПрервать = Ложь;
	БылаОшибка   = Ложь;

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

		Попытка

			ПредставлениеСпискаВыбора = Неопределено;

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

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

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

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

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

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

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

&НаКлиенте

Функция ПривестиЗначениеФлагаКСтандарту(Значение)
	Возврат Ванесса.ПривестиЗначениеФлагаКСтандарту(Значение);
КонецФункции

&НаКлиенте
//И флаг "Реквизит булево" равен "Истина"
//@ФлагРавен(Парам01,Парам02)

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

&НаКлиенте
//И флаг с именем "РеквизитБулево" равен "Истина"
//@ФлагСИменемРавен(Парам01,Парам02)

Функция ФлагСИменемРавен(Заголовок,Значение) Экспорт
	ФлагРавен(Заголовок,Значение,Истина);
КонецФункции

&НаКлиенте
//Тогда появилось предупреждение, содержащее текст "Текст"
//@ПоявилосьПредупреждениеСодержащееТекст(Парам01)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
//Тогда появилось предупреждение, содержащее текст "Текст" по шаблону
//@ПоявилосьПредупреждениеСодержащееТекстПоШаблону(Парам01)

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

&НаКлиенте
//Если появилось предупреждение, содержащее текст "Текст" тогда
//@ПоявилосьПредупреждениеСодержащееТекстТогда(Парам01)

Функция ПоявилосьПредупреждениеСодержащееТекстТогда(Текст) Экспорт
	ПоявилосьПредупреждениеСодержащееТекст(Текст,Истина);
КонецФункции

&НаКлиенте
//Если появилось предупреждение, тогда
//@ПоявилосьПредупреждениеТогда(Парам01)

Функция ПоявилосьПредупреждениеТогда() Экспорт
	ПоявилосьПредупреждениеСодержащееТекст(Неопределено,Истина);
КонецФункции

&НаКлиенте
//Если появилось предупреждение, тогда
//@ПоявилосьПредупреждениеВТечениеСекундТогда(Парам01)


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

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

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

	Если ТекущаяДоступность Тогда
		//проверим также видимость групп, т.к. у них видимость может отличаться от видимости элемента
		Если ДопПараметры.ТекущаяФормаЭлемента <> Неопределено Тогда
			ТекущаяДоступность = Ванесса.ДоступностьЭлементаСУчетомРодителя(ДопПараметры.ТекущаяФормаЭлемента,ЭлементФормы,ТекущаяДоступность);
		ИначеЕсли Контекст.АктивноеОкно <> Неопределено Тогда
			ТекущаяДоступность = Ванесса.ДоступностьЭлементаСУчетомРодителя(Контекст.АктивноеОкно,ЭлементФормы,ТекущаяДоступность);
		КонецЕсли;
	КонецЕсли;

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

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

&НаКлиенте

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

&НаКлиенте
//И элемент формы "ИмяЭлемента" доступен
//@ЭлементФормыДоступен(ИмяЭлемента)

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

&НаКлиенте
//И элемент формы "ИмяЭлемента" не доступен
//@ЭлементФормыНеДоступен(ИмяЭлемента)

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

&НаКлиенте
//И элемент формы с именем "ИмяЭлемента" доступен
//@ЭлементФормыСИменемДоступен(ИмяЭлемента)

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

&НаКлиенте
//И элемент формы с именем "ИмяЭлемента" не доступен
//@ЭлементФормыСИменемНеДоступен(ИмяЭлемента)

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

// ТЧ

&НаКлиенте
//И В таблице "ИмяТЧ" поле "ИмяРеквизита" доступно
//@ВТЧПолеДоступно(ИмяТЧ, ИмяРеквизита)

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

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

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

	Нашли = ПолеРеквизит.ТекущаяДоступность();

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

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

&НаКлиенте
//И В таблице "ИмяТЧ" поле "ИмяРеквизита" доступно
//@ВТаблицеПолеДоступно(ИмяТЧ, ИмяРеквизита)

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

&НаКлиенте
//И В таблице "ИмяТЧ" поле с именем "ИмяРеквизита" доступно
//@ВТЧПолеСИменемДоступно(ИмяТЧ, ИмяРеквизита)

Функция ВТЧПолеСИменемДоступно(ИмяТЧ,ИмяРеквизита) Экспорт
	ВТЧПолеДоступно(ИмяТЧ,ИмяРеквизита,Истина);
КонецФункции

&НаКлиенте
//И В таблице "ИмяТЧ" поле с именем "ИмяРеквизита" доступно
//@ВТаблицеПолеСИменемДоступно(ИмяТЧ, ИмяРеквизита)

Функция ВТаблицеПолеСИменемДоступно(ИмяТЧ,ИмяРеквизита) Экспорт
	ВТЧПолеДоступно(ИмяТЧ,ИмяРеквизита,Истина);
КонецФункции

&НаКлиенте
//И В таблице "ИмяТЧ" поле "ИмяРеквизита" не доступно
//@ВТЧПолеНеДоступно(ИмяТЧ, ИмяРеквизита)

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

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

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

	Нашли = ПолеРеквизит.ТекущаяДоступность();

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

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

&НаКлиенте
//И В таблице "ИмяТЧ" поле "ИмяРеквизита" не доступно
//@ВТаблицеПолеНеДоступно(ИмяТЧ, ИмяРеквизита)

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

&НаКлиенте
//И В таблице "ИмяТЧ" поле с именем "ИмяРеквизита" недоступно
//@ВТЧПолеСИменемНеДоступно(ИмяТЧ, ИмяРеквизита)

Функция ВТЧПолеСИменемНеДоступно(ИмяТЧ,ИмяРеквизита) Экспорт
	ВТЧПолеНеДоступно(ИмяТЧ,ИмяРеквизита,Истина);
КонецФункции

&НаКлиенте
//И В таблице "ИмяТЧ" поле с именем "ИмяРеквизита" недоступно
//@ВТаблицеПолеСИменемНеДоступно(ИмяТЧ, ИмяРеквизита)

Функция ВТаблицеПолеСИменемНеДоступно(ИмяТЧ,ИмяРеквизита) Экспорт
	ВТЧПолеНеДоступно(ИмяТЧ,ИмяРеквизита,Истина);
КонецФункции

&НаКлиенте
//И В таблице "ИмяТЧ" поле "ИмяРеквизита" доступно только для просмотра
//@ВТЧПолеДоступноТолькоДляПросмотра(ИмяТЧ, ИмяРеквизита)

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


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

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

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

	Если Ванесса.Версия8312ИлиВыше Тогда
		Попытка
			ТекущийРежимРедактирование = ТЧ.ТекущийРежимРедактирование();
			Если ТекущийРежимРедактирование Тогда
				ТЧ.ЗакончитьРедактированиеСтроки();
			КонецЕсли;
		Исключение
			ТекущийРежимРедактирование = Неопределено;
		КонецПопытки;
	КонецЕсли;

	ЗначениеТЧ = ПолучитьСтрокиИзТаблицыTestClient(ТЧ);
	ОсталосьУдалить = ЗначениеТЧ.Количество();

	Для Счетчик = 1 По ОсталосьУдалить Цикл
		Попытка
			ТЧ.ПерейтиКПоследнейСтроке();
			ТЧ.УдалитьСтроку();
		Исключение
			Прервать;
		КонецПопытки;
	КонецЦикла;

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

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

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

	Таблица.Активизировать();
	Таблица.УдалитьСтроку();
КонецФункции

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

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

&НаКлиенте
//И поле "Реквизит2" существует
//@ПолеСуществует(Парам01)

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

&НаКлиенте
//И кнопка "Реквизит2" существует
//@КнопкаСуществует(Парам01)

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

&НаКлиенте
//И поле "Реквизит2" не существует
//@ПолеНеСуществует(Парам01)

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

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

		Если МассивЭлементов = Неопределено Тогда
			Продолжить;
		КонецЕсли;

		Если МассивЭлементов.Количество() = 0 Тогда
			Продолжить;
		КонецЕсли;

		Нашли = Истина;
		Прервать;
	КонецЦикла;

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

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

&НаКлиенте
//И кнопка "Реквизит2" не существует
//@КнопкаНеСуществует(Парам01)

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

&НаКлиенте
//И поле с именем "Реквизит2" существует
//@ПолеСИменемСуществует(Парам01)

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

&НаКлиенте
//И кнопка с именем "Реквизит2" существует
//@КнопкаСИменемСуществует(Парам01)

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

&НаКлиенте
//И поле с именем "Реквизит2" не существует
//@ПолеСИменемНеСуществует(Парам01)

Функция ПолеСИменемНеСуществует(ИмяПоля) Экспорт
	ПолеНеСуществует(ИмяПоля,Истина);
КонецФункции

&НаКлиенте
//И кнопка с именем "Реквизит2" не существует
//@КнопкаСИменемНеСуществует(Парам01)

Функция КнопкаСИменемНеСуществует(ИмяПоля) Экспорт
	ПолеНеСуществует(ИмяПоля,Истина,Истина);
КонецФункции

&НаКлиенте
//Если поле "Реквизит2" существует тогда
//@ПолеСуществуетТогда(Парам01)

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

&НаКлиенте
//Если поле с именем "Реквизит2" существует тогда
//@ПолеСИменемСуществуетТогда(Парам01)

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

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

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

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

&НаКлиенте
//Если поле с именем "Реквизит2" имеет заголовок Тогда
//@ПолеСИменемИмеетЗаголовокТогда(Парам01,Парам02)

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

&НаКлиенте
//И у поля с именем "Реквизит2" текст подсказки равен "ТекстПодсказки"
//@УПоляСИменемТекстПодсказкиРавен(Парам01,Парам02)

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

	ТекущийТекстПодсказки = Поле.ПолучитьТекстПодсказки();

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

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

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

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

&НаКлиенте
//И у поля таблицы "ИмяТаблицы" с именем "РеквизитСтрока" текст подсказки равен ""
//@УПоляТаблицыСИменемТекстПодсказкиРавен(Парам01,Парам02,Парам03)

[Assistant] Функция ЯУдаляюВсеСтрокиТаблицы(ИмяТаблицы)


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

		Значение = Результат;
	КонецЕсли;

	Если ИмяПеременной = Значение Тогда
		ИмяПеременной = Ванесса.ЗначениеПараметраТекущегоСценария(0);
	КонецЕсли;

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

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

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

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

	ЯВывожуЗначениеПеременной(ИмяПеременной, Истина);

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

&НаКлиенте
//И поле "РеквизитЧисло" равно переменной "ЗначениеРеквизитЧисло"
//@ПолеРавноПеременной(Парам01,Парам02)

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

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

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

&НаКлиенте
//И поле "РеквизитЧисло" не равно переменной "ЗначениеРеквизитЧисло"
//@ПолеРавноПеременной(Парам01,Парам02)

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

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

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

&НаКлиенте

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