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

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

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

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

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

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

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

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

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

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

			КонецЕсли;

			Прервать;

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

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

&НаКлиенте

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

&НаКлиенте
//Тогда HTML документ с именем "ПриветственнаяИнформация" стал равен
//@HTMLДокументСИменемСталРавен(Парам01)

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

&НаКлиенте
//Тогда HTML документ "ПриветственнаяИнформация" стал равен по шаблону
//@HTMLДокументСталРавенПоШаблону(Парам01)

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

&НаКлиенте
//Тогда HTML документ с именем "ПриветственнаяИнформация" стал равен по шаблону
//@HTMLДокументСИменемСталРавенПоШаблону(Парам01)

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

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

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

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

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

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

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

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

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

	ВТаблицеЕстьКолонки(ИмяТЧ, ТабПарам, Истина);

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

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

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

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

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

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

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

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

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

		Попытка

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

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

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

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

			КонтрольУникальности = Новый Соответствие;
			Для Каждого Элем Из ПредставлениеСпискаВыбора Цикл
				Если КонтрольУникальности[НРег(Элем.ОтображаемыйТекст)] <> Неопределено Тогда
					МассивОшибок.Добавить(Элем.ОтображаемыйТекст);
					Продолжить;
				КонецЕсли;

				КонтрольУникальности.Вставить(НРег(Элем.ОтображаемыйТекст), Истина);

			КонецЦикла;

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

			КонтрольУникальности = Новый Соответствие;
			Для Каждого Элем Из ПредставлениеСпискаВыбора Цикл
				Если КонтрольУникальности[НРег(Элем.ОтображаемыйТекст)] <> Неопределено Тогда
					МассивОшибок.Добавить(Элем.ОтображаемыйТекст);
					Продолжить;
				КонецЕсли;

				КонтрольУникальности.Вставить(НРег(Элем.ОтображаемыйТекст), Истина);

			КонецЦикла;

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
//И Я устанавливаю фильтр на список
//@ЯУстанавливаюФильтрНаСписок(ТабПарам)

Функция ЯУстанавливаюФильтрНаСписок(ТабПарам, ЕслиЭтоВозможно = Ложь) Экспорт

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

	Если ТекЯзык = "ru" Тогда
		ВОткрытойФормеЯНажимаюНаКнопкуСЗаголовком("*НастройкаСписка", Истина);
	Иначе
		ВОткрытойФормеЯНажимаюНаКнопкуСЗаголовком("*ListSettings", Истина);
	КонецЕсли;

	Если ТекЯзык = "ru" Тогда
		ВОткрытойФормеЯНажимаюНаКнопкуСЗаголовком("ФормаСтандартныеНастройки", Истина);
	Иначе
		ВОткрытойФормеЯНажимаюНаКнопкуСЗаголовком("FormStandardSettings", Истина);
	КонецЕсли;

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

	Если ЕслиЭтоВозможно Тогда
		ДляКаждойСтрокиТаблицыОтбораЯУстанавливаюОтборВСпискеЕслиЭтоВозможно(ТабПарам);
	Иначе
		ДляКаждойСтрокиТаблицыОтбораЯУстанавливаюОтборВСписке(ТабПарам);
	КонецЕсли;

	Если ТекЯзык = "ru" Тогда
		ВОткрытойФормеЯНажимаюНаКнопкуСЗаголовком("ФормаЗакончитьРедактирование", Истина);
	Иначе
		ВОткрытойФормеЯНажимаюНаКнопкуСЗаголовком("FormEndEdit", Истина);
	КонецЕсли;

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

&НаКлиенте
//И Я устанавливаю фильтр на список если это возможно
//@ЯУстанавливаюФильтрНаСписокЕслиЭтоВозможно(ТабПарам)

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

&НаКлиенте
//И Я очищаю фильтр на форме списка
//@ЯОчищаюФильтрНаФормеСписка()

Функция ЯОчищаюФильтрНаФормеСписка() Экспорт

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

	Если ТекЯзык = "ru" Тогда
		ВОткрытойФормеЯНажимаюНаКнопкуСЗаголовком("*НастройкаСписка", Истина);
	Иначе
		ВОткрытойФормеЯНажимаюНаКнопкуСЗаголовком("*ListSettings", Истина);
	КонецЕсли;

	Если ТекЯзык = "ru" Тогда
		ВОткрытойФормеЯНажимаюНаКнопкуСЗаголовком("ФормаСтандартныеНастройки", Истина);
	Иначе
		ВОткрытойФормеЯНажимаюНаКнопкуСЗаголовком("FormStandardSettings", Истина);
	КонецЕсли;

	Если ТекЯзык = "ru" Тогда
		ВОткрытойФормеЯНажимаюНаКнопкуСЗаголовком("ФормаЗакончитьРедактирование", Истина);
	Иначе
		ВОткрытойФормеЯНажимаюНаКнопкуСЗаголовком("FormEndEdit", Истина);
	КонецЕсли;

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

&НаКлиенте
//И Я устанавливаю фильтр на список если это возможно ru
//@ЯУстанавливаюФильтрНаСписокЕслиЭтоВозможноRu()

Функция ЯУстанавливаюФильтрНаСписокЕслиЭтоВозможноRu(ТабПарам) Экспорт
	ЯУстанавливаюФильтрНаСписокЕслиЭтоВозможно(ТабПарам);
КонецФункции

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

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


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

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

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

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

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

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

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

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

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

&НаКлиенте

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
//И в таблице "Список" в дополнение формы 'СписокСтрокаПоиска' я ввожу текст '111'
//@ВТаблицеВДополнениеФормыЯВвожуТекст(Парам01,Парам02,Парам03)

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

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

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

&НаКлиенте
//И в таблице "Список" в дополнение формы с именем 'СписокСтрокаПоиска' я ввожу текст '111'
//@ВТаблицеВДополнениеФормыСИменемЯВвожуТекст(Парам01,Парам02,Парам03)

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

Функция ИмяФункции(Name,ИмяПеременной) Экспорт

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

		Попытка

			Ванесса.СохранитьЗначениеПеременнойВКонтекст(ИмяПеременной, ЗначениеТекстаЭлементаБраузера("name", Name));

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

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

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

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

&НаКлиенте
//И в странице браузера для элемента с именем "Name" я получаю ссылку в переменную "ИмяПеременной"
//@ВСтраницеБраузераДляЭлементаСИменемЯПолучаюСсылкуВПеременную(Парам01,Парам02)

Функция ВСтраницеБраузераДляЭлементаСИменемЯПолучаюСсылкуВПеременную(name,ИмяПеременной) Экспорт

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

		Попытка

			Ванесса.СохранитьЗначениеПеременнойВКонтекст(ИмяПеременной, ЗначениеАтрибутаЭлементаБраузера("name", name, "href"));

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

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

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

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

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

Функция ВСтраницеБраузераДляЭлементаСИменемЯПолучаюТекстКнопкиВПеременную(Name,ИмяПеременной) Экспорт

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

		Попытка

			Ванесса.СохранитьЗначениеПеременнойВКонтекст(ИмяПеременной, ЗначениеАтрибутаЭлементаБраузера("Name", Name, "value"));

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

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

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

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

&НаКлиенте
//И в странице браузера для элемента с именем "Name" я устанавливаю текст поля "ТекстПоля"
//@ВСтраницеБраузераДляЭлементаСИменемЯУстанавливаюТекстПоля(Парам01,Парам02)

Функция ВСтраницеБраузераДляЭлементаСИменемЯУстанавливаюТекстПоля(Парам01,Парам02) Экспорт

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

		Попытка

			ТекстШаблонаНачало = JavascriptДляЭлементаСтраницыБраузера("name", Парам01);
			ТекстJavaScript = ТекстШаблонаНачало + "
			|    node.value = '%ТекстПоля%';
			|};";
			ТекстJavaScript = СтрЗаменить(ТекстJavaScript, "%ТекстПоля%", Парам02);

			ПроверитьРезультатВыполненияJavaScript(Ванесса.ВыполнитьJavaScriptБраузер(ТекстJavaScript));

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

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

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

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

&НаКлиенте
//И в странице браузера для элемента с именем "Name" я получаю список значений в переменную "ИмяПеременной"
//@ВСтраницеБраузераДляЭлементаСИменемЯПолучаюСписокЗначенийВПеременную(Парам01,Парам02)

Функция ВСтраницеБраузераДляЭлементаСИменемЯПолучаюСписокЗначенийВПеременную(name,ИмяПеременной) Экспорт

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

		Попытка

			Результат = ЗначениеАтрибутаЭлементаБраузера("name", name, "options");

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

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

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

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

&НаКлиенте
//И в странице браузера для элемента с именем "Name" я выбираю значение "ЗначениеЭлемента" в списке выбора
//@ВСтраницеБраузераДляЭлементаСИменемЯВыбираюЗначениеВСпискеВыбора(Парам01,Парам02)

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

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

		Попытка

			ТекстШаблонаНачало = JavascriptДляЭлементаСтраницыБраузера("name", Парам01);
			ТекстJavaScript = ТекстШаблонаНачало + "
			|    node.value = '%ТекстПоля%';
			|};";

			ТекстJavaScript = СтрЗаменить(ТекстJavaScript, "%ТекстПоля%", Парам02);

			ПроверитьРезультатВыполненияJavaScript(Ванесса.ВыполнитьJavaScriptБраузер(ТекстJavaScript));

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

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

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

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

&НаКлиенте
//И в странице браузера для элемента с именем "Name" я делаю клик
//@ВСтраницеБраузераДляЭлементаСИменемЯДелаюКлик(Парам01)

Функция ВСтраницеБраузераДляЭлементаСИменемЯДелаюКлик(Парам01) Экспорт

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

		Попытка

			ТекстШаблонаНачало = JavascriptДляЭлементаСтраницыБраузера("name", Парам01);
			ТекстJavaScript = ТекстШаблонаНачало + "
			|    node.click();
			|};";

			ПроверитьРезультатВыполненияJavaScript(Ванесса.ВыполнитьJavaScriptБраузер(ТекстJavaScript));

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

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

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

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

&НаКлиенте
//И в странице браузера для элемента с именем "Name" я делаю клик
//@ВСтраницеБраузераДляЭлементаСИменемЯДелаюКлик(Парам01)

Функция ВСтраницеБраузераДляЭлементаСIDЯДелаюКлик(Парам01) Экспорт

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

		Попытка

			ТекстШаблонаНачало = JavascriptДляЭлементаСтраницыБраузера("id", Парам01);
			ТекстJavaScript = ТекстШаблонаНачало + "
			|    node.click();
			|};";

			ПроверитьРезультатВыполненияJavaScript(Ванесса.ВыполнитьJavaScriptБраузер(ТекстJavaScript));

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

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

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

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

&НаКлиенте
//И в странице браузера для элемента с именем "Name" я делаю правый клик
//@ВСтраницеБраузераДляЭлементаСИменемЯДелаюПравыйКлик(Парам01)

[Assistant] Функция ВСтраницеБраузераДляЭлементаСИменемЯПолучаюТекстВПеременную(Name,ИмяПеременной)


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

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

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

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

		Попытка

			ТекстШаблонаНачало = JavascriptДляЭлементаСтраницыБраузера("classname", Парам01);
			ТекстJavaScript = ТекстШаблонаНачало + "
			|    node.click();
			|};";

			ПроверитьРезультатВыполненияJavaScript(Ванесса.ВыполнитьJavaScriptБраузер(ТекстJavaScript));

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

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

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

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

&НаКлиенте
//И в странице браузера для элемента с именем класса "className" я делаю правый клик
//@ВСтраницеБраузераДляЭлементаСИменемКлассаЯДелаюПравыйКлик(Парам01)

Функция ВСтраницеБраузераДляЭлементаСИменемКлассаЯДелаюПравыйКлик(Парам01) Экспорт

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

		Попытка

			ТекстШаблонаНачало = JavascriptДляЭлементаСтраницыБраузера("classname", Парам01);
			ТекстJavaScript = ТекстШаблонаНачало + "
			|    node.contextMenu();
			|};";

			ПроверитьРезультатВыполненияJavaScript(Ванесса.ВыполнитьJavaScriptБраузер(ТекстJavaScript));

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

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

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

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

&НаКлиенте
//И в странице браузера я провожу скролл к координатам "500" "1000"
//@ВСтраницеБраузераЯПровожуСкроллККоординатам(Парам01,Парам02)

Функция ВСтраницеБраузераЯПровожуСкроллККоординатам(Парам01,Парам02) Экспорт

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

		Попытка

			ТекстШаблона = "{
			|	 window.scrollTo(%ТочкаX%, %ТочкаY%);
			|};";

			ТекстJavaScript = ТекстШаблона;

			ТабПарам = Новый Структура("ТочкаX,ТочкаY", Парам01,Парам02);
			Для Каждого СтрокаПарам Из ТабПарам Цикл
				ТекстJavaScript = СтрЗаменить(ТекстJavaScript, "%"+СтрокаПарам.Ключ+"%", СтрокаПарам.Значение)
			КонецЦикла;

			ПроверитьРезультатВыполненияJavaScript(Ванесса.ВыполнитьJavaScriptБраузер(ТекстJavaScript));

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

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

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

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

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

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

		Попытка

			Ванесса.ОткрытьВкладкуБраузера(Адрес);

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

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

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

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

&НаКлиенте

Процедура ПроверитьРезультатВыполненияJavaScript(Результат)

	Если ТипЗнч(Результат) = Тип("Структура") Тогда
		Если Результат.Свойство("error") Тогда
			ВызватьИсключение Результат.error.message;
		ИначеЕсли Результат.Свойство("result") Тогда
			Если Результат.result.Свойство("exceptionDetails") Тогда
				ВызватьИсключение Результат.result.exceptionDetails.exception.description;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;

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

&НаКлиенте
//И я активизирую вкладку браузера с заголовком "Заголовок"
//@ЯАктивизируюВкладкуБраузераСзаголовком(Парам01)

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

		Попытка

			Ванесса.АктивизироватьВкладкуБраузераПоЗаголовкуВкладки(ЗаголовокВкладки);

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

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

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

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

&НаКлиенте

Функция СтраницаБраузераСодержитТекстСлужебный(ТекстHTML, Данные)
	Результат = Ложь;

	СтраницаБраузераСодержитТекстСлужебныйРекурсивно(ТекстHTML, Данные, Результат);

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

&НаКлиенте

Процедура СтраницаБраузераСодержитТекстСлужебныйРекурсивно(ИскомыйТекст, Данные, Результат)
	Если Результат Тогда
		Возврат;
	КонецЕсли;

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

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

		Если Элем.Свойство("children") Тогда
			СтраницаБраузераСодержитТекстСлужебныйРекурсивно(ИскомыйТекст, Элем.children, Результат);
			Если Результат Тогда
				Прервать;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;

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

&НаКлиенте

Функция ЗначениеТекстаЭлементаБраузера(Идентификатор, Значение);

	ТекстJavaScript = ТекстJavaScriptЗначениеТекстаЭлементаБраузера();

	Если ВРег(Идентификатор) = "ID" Тогда
		ТекстJavaScript = СтрЗаменить(ТекстJavaScript, "%function%", "getElementById");
	ИначеЕсли ВРег(Идентификатор) = "NAME" Тогда
		ТекстJavaScript = СтрЗаменить(ТекстJavaScript, "%function%", "getElementsByName");
	ИначеЕсли ВРег(Идентификатор) = "CLASSNAME" Тогда
		ТекстJavaScript = СтрЗаменить(ТекстJavaScript, "%function%", "getElementsByClassName");
	Иначе
		Возврат Неопределено
	КонецЕсли;

	ТекстJavaScript = СтрЗаменить(ТекстJavaScript, "%Element%", Значение);

	Результат = Ванесса.ВыполнитьJavaScriptБраузер(ТекстJavaScript);
	Возврат Результат.result.result.value;

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

&НаКлиенте

Функция ЗначениеАтрибутаЭлементаБраузера(Идентификатор, Значение, ИмяАтрибута);

	ТекстJavaScript = ТекстJavaScriptЗначениеАтрибутаЭлементаБраузера();

	Если ВРег(Идентификатор) = "ID" Тогда
		ТекстJavaScript = СтрЗаменить(ТекстJavaScript, "%function%", "getElementById");
		ТекстJavaScript = СтрЗаменить(ТекстJavaScript, "[0]", "");

	ИначеЕсли ВРег(Идентификатор) = "NAME" Тогда
		ТекстJavaScript = СтрЗаменить(ТекстJavaScript, "%function%", "getElementsByName");
	ИначеЕсли ВРег(Идентификатор) = "CLASSNAME" Тогда
		ТекстJavaScript = СтрЗаменить(ТекстJavaScript, "%function%", "getElementsByClassName");
	Иначе
		Возврат Неопределено
	КонецЕсли;

	ТекстJavaScript = СтрЗаменить(ТекстJavaScript, "%Element%", Значение);
	ТекстJavaScript = СтрЗаменить(ТекстJavaScript, "%ИмяАтрибута%", ИмяАтрибута);

	Результат = Ванесса.ВыполнитьJavaScriptБраузер(ТекстJavaScript);
	ПроверитьРезультатВыполненияJavaScript(Результат);
	Возврат Результат.result.result.value;

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

&НаКлиенте

[Assistant] Функция ВСтраницеБраузераДляЭлементаСИменемКлассаЯДелаюКлик(Парам01)


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

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

Функция ИмяФункции(ТабПарам) Экспорт

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

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

	СостояниеVanessaAutomation = Ванесса.ПолучитьСостояниеVanessaBehavior();
	РезультатПрохожденияТестовВСценарии = СостояниеVanessaAutomation["ТекущийСценарий"].РезультатПрохожденияТестовСценария;

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

	// Обрабатываем со второй строки (индекс 1)
	Для Индекс = 1 По ТабПарам.ВГраница() Цикл
		СтрокаТаблицы = ТабПарам[Индекс];

		ИмяПараметра = Неопределено;
		ЗначениеПараметра = Неопределено;

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

		// Попытка 2: по позиции (Кол1, Кол2)
		Если ИмяПараметра = Неопределено ИЛИ ЗначениеПараметра = Неопределено Тогда
			ИмяПараметра = СокрЛП(СтрЗаменить(СтрокаТаблицы["Кол1"], "'", ""));
			ЗначениеПараметра = СокрЛП(СтрЗаменить(СтрокаТаблицы["Кол2"], "'", ""));
		КонецЕсли;

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

	КонецЦикла;

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

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

[Assistant] Функция ЯДобавляюСписокПараметровДляОтчётаAllure(ТабПарам)


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

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

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

	ТипыПолей = ТипыПолейОбъекта(АдресДанныеСервера, ВидОбъекта, ИмяОбъекта);
	ВыполнитьПриведениеЗначений(АдресДанныеСервера, ЗначенияРеквизитов, ТипыПолей);

	Если ЗначенияПоиска = Неопределено Тогда

		Объект = СоздатьОбъект(ВидОбъекта, ИмяОбъекта);

	Иначе

		ВыполнитьПриведениеЗначений(АдресДанныеСервера, ЗначенияПоиска, ТипыПолей);

		Ссылка = СсылкаПоОтбору(ВидОбъекта, ИмяОбъекта, ЗначенияПоиска);

		Если НЕ ЗначениеЗаполнено(Ссылка) Тогда

			ВызватьИсключение "Не удалось найти ссылку по реквизитам " + ПредставлениеРеквизитов(ЗначенияПоиска);
    // TODO: допиши оставшуюся часть

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

	ВидОбъекта = "Справочник";

	ТипыПолей = ТипыПолейОбъекта(АдресДанныеСервера, ВидОбъекта, ИмяОбъекта);
	ВыполнитьПриведениеЗначений(АдресДанныеСервера, ЗначенияРеквизитов, ТипыПолей);

	Если ЗначенияПоиска = Неопределено Тогда

		Объект = СоздатьОбъект(ВидОбъекта, ИмяОбъекта);

	Иначе

		ВыполнитьПриведениеЗначений(АдресДанныеСервера, ЗначенияПоиска, ТипыПолей);

		Ссылка = СсылкаПоОтбору(ВидОбъекта, ИмяОбъекта, ЗначенияПоиска);

		Если НЕ ЗначениеЗаполнено(Ссылка) Тогда

			ВызватьИсключение "Не удалось найти ссылку по реквизитам " + ПредставлениеРеквизитов(ЗначенияПоиска);

		КонецЕсли;

		Объект = Ссылка.ПолучитьОбъект();

	КонецЕсли;

	ЗаполнитьЗначенияСвойств(Объект, ЗначенияРеквизитов);

	Объект.Записать();

	Возврат Объект.Ссылка;

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

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

Функция ЗаписатьДокумент(Знач АдресДанныеСервера, Знач ИмяОбъекта, Знач ЗначенияРеквизитов, Знач ЗначенияПоиска = Неопределено)

	ВидОбъекта = "Документ";

	ТипыПолей = ТипыПолейОбъекта(АдресДанныеСервера, ВидОбъекта, ИмяОбъекта);
	ВыполнитьПриведениеЗначений(АдресДанныеСервера, ЗначенияРеквизитов, ТипыПолей);

	Если ЗначенияПоиска = Неопределено Тогда

		Объект = СоздатьОбъект(ВидОбъекта, ИмяОбъекта);

	Иначе

		ВыполнитьПриведениеЗначений(АдресДанныеСервера, ЗначенияПоиска, ТипыПолей);

		Ссылка = СсылкаПоОтбору(ВидОбъекта, ИмяОбъекта, ЗначенияПоиска);

		Если НЕ ЗначениеЗаполнено(Ссылка) Тогда

			ВызватьИсключение "Не удалось найти ссылку по реквизитам " + ПредставлениеРеквизитов(ЗначенияПоиска);

		КонецЕсли;

		Объект = Ссылка.ПолучитьОбъект();

	КонецЕсли;

	ЗаполнитьЗначенияСвойств(Объект, ЗначенияРеквизитов);

	Объект.Записать();

	Возврат Объект.Ссылка;

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

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

Функция СоздатьЗаписьРегистра(Знач АдресДанныеСервера, Знач ВидОбъекта, Знач ИмяОбъекта, Знач ЗначенияРеквизитов, Знач Перезаписать = Истина)

	ВыполнитьПриведениеЗначений(АдресДанныеСервера, ЗначенияРеквизитов, ТипыПолейОбъекта(АдресДанныеСервера, ВидОбъекта, ИмяОбъекта));

	Если Перезаписать Тогда

		Запись = СоздатьОбъект(ВидОбъекта, ИмяОбъекта);

	Иначе

		КлючевыеЗначения = ДанныеКлюча(ВидОбъекта, ИмяОбъекта, ЗначенияРеквизитов);

		Для Каждого КлючевоеЗначение Из КлючевыеЗначения Цикл

			Если НЕ ЗначенияРеквизитов.Свойство(КлючевоеЗначение.Ключ) Тогда

				ВызватьИсключение "Неполный набор значений ключа " + ПредставлениеРеквизитов(КлючевыеЗначения);

			КонецЕсли;

		КонецЦикла;

		КлючЗаписи = КлючРегистраПоОтбору(ВидОбъекта, ИмяОбъекта, КлючевыеЗначения);

		Если НЕ ЗначениеЗаполнено(КлючЗаписи) Тогда

			ВызватьИсключение "Не удалось найти запись регистра по ключу " + ПредставлениеРеквизитов(КлючевыеЗначения);

		КонецЕсли;

		Менеджер = МенеджерКоллекции(ВидОбъекта, ИмяОбъекта);

		Запись = Менеджер.СоздатьМенеджерЗаписи();
		ЗаполнитьЗначенияСвойств(Запись, КлючЗаписи);
		Запись.Прочитать();

		Если НЕ Запись.Выбран() Тогда

			ВызватьИсключение "Не смогли считать запись регистра по ключу " + ПредставлениеРеквизитов(КлючевыеЗначения);

		КонецЕсли;

	КонецЕсли;

	ЗаполнитьЗначенияСвойств(Запись, ЗначенияРеквизитов);

	Запись.Записать();

	Возврат СоздатьКлючЗаписи(ВидОбъекта, ИмяОбъекта, Запись);

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

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

Функция УдалитьЭлементыТаблицы(ТипТаблицы,ИмяТаблицы)

	Если ТипТаблицы  =  "РегистрСведений" Тогда

		нз = РегистрыСведений[ИмяТаблицы].СоздатьНаборЗаписей();
		нз.ОбменДанными.Загрузка = Истина;
		нз.Записать();

	ИначеЕсли ЭтоСсылочныйОбъект(ТипТаблицы) Тогда

		Менеджер = ПолучитьМенеджерОбъекта(ТипТаблицы);

		Запрос = Новый Запрос;
		Запрос.Текст =
		"ВЫБРАТЬ
		|	Таб.Ссылка КАК Ссылка
		|ИЗ
		|	"+ТипТаблицы+"."+ИмяТаблицы+" КАК Таб";

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

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

		Пока Выборка.Следующий() Цикл

			Объ = Выборка.Ссылка.ПолучитьОбъект();
			Объ.ОбменДанными.Загрузка = Истина;
			Объ.Удалить();

		КонецЦикла;
	Иначе
		ВызватьИсключение "не поддерживаемое имя таблицы";
	КонецЕсли;

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

#КонецОбласти //Точки_входа_для_шагов

#Область Поиск

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

Функция ТекстОшибкиПоиска(ИмяОбъекта, РезультатПоиска, ЗначенияПоиска, НЕ_ = Ложь)

	Успешно = ЗначениеЗаполнено(РезультатПоиска);

	Если НЕ_ Тогда

		Успешно = НЕ Успешно;

	КонецЕсли;

	Если Успешно Тогда

		Возврат "";

	КонецЕсли;

	ТекстЗначенияПоиска = ПредставлениеРеквизитов(ЗначенияПоиска);

	Если НЕ_ Тогда

		ТекстСообщения = "Существует запись '%1' с: %2"

	Иначе

		ТекстСообщения = "Не удалось найти запись '%1' по: %2";

	КонецЕсли;

	ТекстСообщения = СтрЗаменить(ТекстСообщения, "%1", ИмяОбъекта);
	ТекстСообщения = СтрЗаменить(ТекстСообщения, "%2", ТекстЗначенияПоиска);

	Возврат ТекстСообщения;

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

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

Функция СсылкаПоОтбору(ВидОбъекта, ИмяОбъекта, ЗначенияПоиска)

	НайденноеЗначение = НайтиЗаписьТаблицы(ВидОбъекта, ИмяОбъекта, ЗначенияПоиска, "Ссылка");

	Если НайденноеЗначение = Неопределено Тогда

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

	Иначе

		Возврат НайденноеЗначение.Ссылка;

	КонецЕсли;

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

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

Функция КлючРегистраПоОтбору(ВидОбъекта, ИмяОбъекта, ЗначенияПоиска)

	КлючевыеПоля = КлючевыеПоля(ВидОбъекта, ИмяОбъекта);

	НайденноеЗначение = НайтиЗаписьТаблицы(ВидОбъекта, ИмяОбъекта, ЗначенияПоиска, КлючевыеПоля);

	Если НайденноеЗначение = Неопределено Тогда

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

	Иначе

		Возврат СоздатьКлючЗаписи(ВидОбъекта, ИмяОбъекта, НайденноеЗначение);

	КонецЕсли;

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

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

Функция МаксДлинаСтрокиВЗапросе()
	Возврат 1024;
КонецФункции

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

Функция НайтиЗаписьТаблицы(ВидОбъекта, ИмяОбъекта, ЗначенияПоиска, ВыбираемыеПоля)

	Запрос = Новый Запрос;

	Условия = Новый Массив;

	Если ТипЗнч(ВыбираемыеПоля) = Тип("Массив") Тогда

		ВыбираемыеПоля = МассивВСтроку(ВыбираемыеПоля, ", ");

	КонецЕсли;

	ОбъектДляПроверки = СоздатьОбъект(ВидОбъекта, ИмяОбъекта);

	Для Каждого Значение Из ЗначенияПоиска Цикл

		Если ТипЗнч(ОбъектДляПроверки[Значение.Ключ]) = Тип("Строка") Тогда
			ДлиннаЗначения = СтрДлина(Значение.Значение);
			Если ДлиннаЗначения = 0 Тогда
				// Проверка на пустую строку
				Условия.Добавить(СтрЗаменить("ВЫРАЗИТЬ(%1 КАК СТРОКА(1)) = """"", "%1", Значение.Ключ));
			Иначе
				Условия.Добавить(СтрЗаменить("ВЫРАЗИТЬ(%1 КАК СТРОКА("+Формат(МаксДлинаСтрокиВЗапросе(),"ЧГ=")+")) = &%1", "%1", Значение.Ключ));
			КонецЕсли;

		Иначе
			Условия.Добавить(СтрЗаменить("%1 = &%1", "%1", Значение.Ключ));
		КонецЕсли;

		Запрос.УстановитьПараметр(Значение.Ключ, Значение.Значение);

	КонецЦикла;

	ТекстУсловия = МассивВСтроку(Условия, " И ");
	Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 %1.%2.%3 ГДЕ %4";
	Текст = СтрЗаменить(Текст, "%1", ВидОбъекта);
	Текст = СтрЗаменить(Текст, "%2", ИмяОбъекта);
	Текст = СтрЗаменить(Текст, "%3", ВыбираемыеПоля);
	Текст = СтрЗаменить(Текст, "%4", ТекстУсловия);
	Запрос.Текст = Текст;

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

	Если НЕ РезультатЗапроса.Пустой() Тогда

		Выборка = РезультатЗапроса.Выбрать();
		Выборка.Следующий();

		НайденноеЗначение = Новый Структура(ВыбираемыеПоля);

		ЗаполнитьЗначенияСвойств(НайденноеЗначение, Выборка);

	Иначе

		НайденноеЗначение = Неопределено;

	КонецЕсли;

	Возврат НайденноеЗначение;

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

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

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

	Стр = "";
	Для Ккк = 0 По Массив.Количество() - 1 Цикл
		Стр = Стр + Массив[Ккк];
		Если Ккк < Массив.Количество() - 1 Тогда
			Стр = Стр + Символ;
		КонецЕсли;
	КонецЦикла;

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

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

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


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

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

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

[Assistant]
Функция ИнтерактивноНажатьКнопку(Кнопка, ФормаКнопки) Экспорт
    // Удостоверимся что есть права на нажатие
    // Кнопка
    стрОшибка = "";
    Попытка
		Если Кнопка.Видимость = Ложь Тогда
			ТекстСообщения = Ванесса.ПолучитьТекстСообщенияПользователю("Невидима");
            стрОшибка = стрОшибка + ", " + ТекстСообщения;
        КонецЕсли;
    Исключение
    КонецПопытки;
    Попытка
        Если Кнопка.Доступность = Ложь Тогда
			ТекстСообщения = Ванесса.ПолучитьТекстСообщенияПользователю("Недоступна");
            стрОшибка = стрОшибка + ", " + ТекстСообщения;
        КонецЕсли;
    Исключение
    КонецПопытки;
	Если стрОшибка <> "" Тогда
		ТекстСообщения = Ванесса.ПолучитьТекстСообщенияПользователю("кнопка, которую требуется нажать");
        стрОшибка = Сред(стрОшибка, 3)+" " + ТекстСообщения;
        ВызватьИсключение(стрОшибка);
    КонецЕсли;

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

//Когда В форме элемента справочника "Номенклатура" с кодом "NSIN0000982023" интерактивно нажимаю кнопку панели "ДействияФормы" подменю "Подменю" с именем "Действие1"
//@ВФормеСправочникаСКодомИнтерактивноНажимаюКнопкуПанелиПодменюСИменем(Парам01,Парам02,Парам03,Парам04,Парам05)

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

//Когда В форме элемента справочника "Номенклатура" с кодом "NSIN0000982023" интерактивно нажимаю кнопку панели "ДействияФормы" с именем "Настройка"
//@ВФормеСправочникаСКодомИнтерактивноНажимаюКнопкуПанелиСИменем(Парам01,Парам02,Парам03,Парам04)

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


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

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

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

[Assistant]
//начало текста модуля

Перем Ванесса;

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

// Делает отключение модуля
&НаКлиенте
Функция ОтключениеМодуля() Экспорт

	Ванесса = Неопределено;
	Контекст = Неопределено;
	КонтекстСохраняемый = Неопределено;

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

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

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

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

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

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

Процедура ПередНачаломСценария() Экспорт
	//ИмяОжидаемогоФайла = Ванесса.КаталогИнструментов + "\features\Support\Templates\step_definitions\ОбработкаОшибкиВПроцедуреПередНачаломСценария.epf";
	//Контекст.Вставить("ИмяОжидаемогоФайла",ИмяОжидаемогоФайла);
	//ФайлПроверкаСуществования = Новый Файл(ИмяОжидаемогоФайла);
	//Если ФайлПроверкаСуществования.Существует() Тогда
	//	УдалитьФайлы(ИмяОжидаемогоФайла);
	//КонецЕсли;
	//
	//Макет = ПолучитьМакетСервер("Макет");
	//Макет.Записать(ИмяОжидаемогоФайла);
КонецПроцедуры

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

	//безусловное закрытие формы если она осталась
	Попытка
	    ОткрытаяФормаVanessaBehavoir = Контекст.ОткрытаяФормаVanessaBehavoir;
		ОткрытаяФормаVanessaBehavoir.Закрыть();
	Исключение

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

Функция ПолучитьМакетСервер(ИмяМакета)
	Макет = ПолучитьМакет(ИмяМакета);
	Возврат  Макет;
КонецФункции

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

	Ванесса.ПроверитьРавенство(БылНеУспешныйСценарий,Истина,"Был хотя бы один упавший  сценарий.");
КонецПроцедуры

//Тогда в тестируемом экземпляре не выполнился первый сценарий
//@ВТестируемомЭкземпляреНеВыполнилсяПервыйСценарий()
Процедура ВТестируемомЭкземпляреНеВыполнилсяПервыйСценарий() Экспорт
	БылНеУспешныйСценарий = Ложь;
	ПроверитьЧтоСценарийНеВыполнился(Контекст.ОбработкаОбъектVanessaBehavoir.ДеревоТестов.Строки,БылНеУспешныйСценарий);
КонецПроцедуры

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


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

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

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

///////////////////////////////////////////////////
//Служебная часть
///////////////////////////////////////////////////

// контекст фреймворка Vanessa-Behavior
Перем Ванесса;

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

// Делает отключение модуля
&НаКлиенте
Функция ОтключениеМодуля() Экспорт

	Ванесса = Неопределено;
	Контекст = Неопределено;
	КонтекстСохраняемый = Неопределено;

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

// Функция экспортирует список шагов, которые реализованы в данной внешней обработке.
Функция ПолучитьСписокТестов(КонтекстФреймворкаBDD) Экспорт
	Ванесса = КонтекстФреймворкаBDD;

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

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

	ДобавитьШагВМассивТестов(ВсеТесты,"ВДеревеЗагруженнойФичиБудетГруппа(Парам01)","ВДеревеЗагруженнойФичиБудетГруппа","Тогда в дереве загруженной фичи будет группа ""ПерваяГруппа""");
	ДобавитьШагВМассивТестов(ВсеТесты,"ВДеревеЗагруженнойФичиВнутриГруппыБудетГруппа(Парам01,Парам02)","ВДеревеЗагруженнойФичиВнутриГруппыБудетГруппа","И     в дереве загруженной фичи внутри группы ""ПерваяГруппа"" будет группа ""ТретьяГруппа""");
	ДобавитьШагВМассивТестов(ВсеТесты,"ВДеревеЗагруженнойФичиШагБудетВнутриГруппы(Парам01,Парам02)","ВДеревеЗагруженнойФичиШагБудетВнутриГруппы","И     в дереве загруженной фичи шаг ""Первый шаг фичи Проверка работы областей в дереве"" будет внутри группы ""ПерваяГруппа""");

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

// Служебная функция.
Функция ПолучитьМакетСервер(ИмяМакета)
	Возврат ПолучитьМакет(ИмяМакета);
КонецФункции

// Служебная функция для подключения библиотеки создания fixtures.
Функция ПолучитьМакетОбработки(ИмяМакета) Экспорт
	Возврат ПолучитьМакетСервер(ИмяМакета);
КонецФункции

///////////////////////////////////////////////////
//Работа со сценариями
///////////////////////////////////////////////////

// Процедура выполняется перед началом каждого сценария
Процедура ПередНачаломСценария() Экспорт

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

// Процедура выполняется перед окончанием каждого сценария
Процедура ПередОкончаниемСценария() Экспорт
	//безусловное закрытие формы если она осталась
	Попытка
	    ОткрытаяФормаVanessaBehavoir = Контекст.ОткрытаяФормаVanessaBehavoir;
		ОткрытаяФормаVanessaBehavoir.Закрыть();
	Исключение

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

///////////////////////////////////////////////////
//Реализация шагов
///////////////////////////////////////////////////

Процедура НайтиЭлементВДереве(ДеревоСтроки,ИмяОбласти,ЕстьЭлемент)
	Если ЕстьЭлемент Тогда
		Возврат;
	КонецЕсли;

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

		НайтиЭлементВДереве(СтрокаДерева.Строки,ИмяОбласти,ЕстьЭлемент);
	КонецЦикла;
КонецПроцедуры

//Тогда в дереве загруженной фичи будет группа "ПерваяГруппа"
//@ВДеревеЗагруженнойФичиБудетГруппа(Парам01)
Процедура ВДеревеЗагруженнойФичиБудетГруппа(ИмяОбласти) Экспорт
	ДеревоТестов = Контекст.ОткрытаяФормаVanessaBehavoir.ДеревоТестов;

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

Процедура НайтиСтрокуДереваПоИмени(ДеревоСтроки,ИмяОбласти,ИскомаяСтрока);
	Если ИскомаяСтрока <> Неопределено Тогда
		Возврат;
	КонецЕсли;

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

		НайтиСтрокуДереваПоИмени(СтрокаДерева.Строки,ИмяОбласти,ИскомаяСтрока);
	КонецЦикла;
КонецПроцедуры

//И     в дереве загруженной фичи внутри группы "ПерваяГруппа" будет группа "ТретьяГруппа"
//@ВДеревеЗагруженнойФичиВнутриГруппыБудетГруппа(Парам01,Парам02)
Процедура ВДеревеЗагруженнойФичиВнутриГруппыБудетГруппа(ИмяОбласти1,ИмяОбласти2) Экспорт
	ДеревоТестов = Контекст.ОткрытаяФормаVanessaBehavoir.ДеревоТестов;

	ИскомаяСтрока = Неопределено;
	НайтиСтрокуДереваПоИмени(ДеревоТестов.СТроки,ИмяОбласти2,ИскомаяСтрока);
	Ванесса.ПроверитьНеРавенство(ИскомаяСтрока,Неопределено,"Нашли в дереве область " + ИмяОбласти2);

	Ванесса.ПроверитьРавенство(ИскомаяСтрока.Родитель.Имя,ИмяОбласти1,"" + ИмяОбласти2 + " находится внутри " + ИмяОбласти1);
КонецПроцедуры

//И     в дереве загруженной фичи шаг "Первый шаг фичи Проверка работы областей в дереве" будет внутри группы "ПерваяГруппа"
//@ВДеревеЗагруженнойФичиШагБудетВнутриГруппы(Парам01,Парам02)
Процедура ВДеревеЗагруженнойФичиШагБудетВнутриГруппы(Строка1,Строка2) Экспорт
	ДеревоТестов = Контекст.ОткрытаяФормаVanessaBehavoir.ДеревоТестов;

	ИскомаяСтрока = Неопределено;
	НайтиСтрокуДереваПоИмени(ДеревоТестов.СТроки,Строка1,ИскомаяСтрока);
	Ванесса.ПроверитьНеРавенство(ИскомаяСтрока,Неопределено,"Нашли в дереве область <" + Строка1 + ">");

	Ванесса.ПроверитьРавенство(ИскомаяСтрока.Родитель.Имя,Строка2,"" + Строка1 + " находится внутри " + Строка2);
КонецПроцедуры

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

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


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

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

Процедура ПередНачаломРаботыСистемы(Отказ)
Отказ = Истина;

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

	ПутьККомпоненте = ПараметрыЗапуска.AddinPath;
	ИмяФайлаЛога = ПараметрыЗапуска.LogPath;

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

	ДД = Новый ДвоичныеДанные(ПутьККомпоненте);
	МестоположениеВнешнейКомпонентыДляСкриншотов = ПоместитьВоВременноеХранилище(ДД, Новый УникальныйИдентификатор);
	ИдентификаторВнешнейКомпонентыДляСкриншотов = "_" + СтрЗаменить(Новый УникальныйИдентификатор, "-", "");

	Попытка
		Подключение = ПодключитьВнешнююКомпоненту(МестоположениеВнешнейКомпонентыДляСкриншотов,
			ИдентификаторВнешнейКомпонентыДляСкриншотов, ТипВнешнейКомпоненты.Native);
	Исключение
		ЗаписатьВЛог("Ошибка при подключении компоненты.");
		ЗаписатьВЛог(ОписаниеОшибки());
    // TODO: допиши оставшуюся часть

[Assistant]
Перем ИмяФайлаЛога;

Процедура ПередНачаломРаботыСистемы(Отказ)
	Отказ = Истина;

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

	ПутьККомпоненте = ПараметрыЗапуска.AddinPath;
	ИмяФайлаЛога = ПараметрыЗапуска.LogPath;

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

	ДД = Новый ДвоичныеДанные(ПутьККомпоненте);
	МестоположениеВнешнейКомпонентыДляСкриншотов = ПоместитьВоВременноеХранилище(ДД, Новый УникальныйИдентификатор);
	ИдентификаторВнешнейКомпонентыДляСкриншотов = "_" + СтрЗаменить(Новый УникальныйИдентификатор, "-", "");

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

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

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

	ЗаписатьВЛог("Компонента успешно установлена.");
КонецПроцедуры

&НаКлиенте
Функция ПолучитьСтруктуруПараметров(Знач СтрокаПараметров)

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

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

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

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

&НаКлиенте
Процедура ЗаписатьВЛог(ТекстОшибки)
	ЗТ = Новый ЗаписьТекста(ИмяФайлаЛога,"UTF-8",,Истина);
	ЗТ.ЗаписатьСтроку("" + ТекущаяДата() + ": " + ТекстОшибки);
	ЗТ.Закрыть();
КонецПроцедуры


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

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

&НаКлиенте
Процедура ИмяФункции(ПараметрКоманды, ПараметрыВыполненияКоманды)

	Окна = ПолучитьОкна();
	Результат = Новый Массив;

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

	СериализованнаяСтрока = VAExtensionОбщегоНазначения.ЗаписатьОбъектJSON(Результат);

	ПоказатьПредупреждение(,СериализованнаяСтрока);

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

[Assistant] Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)


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

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

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

		Попытка
			Если Окно.Content.Count() > 0 Тогда
				Попытка
					СсылкаНаОбъект = Окно.Content[0].ThisForm.Object.Ref;
    // TODO: допиши оставшуюся часть

[Assistant]
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

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

		Попытка
			Если Окно.Content.Count() > 0 Тогда
				Попытка
					СсылкаНаОбъект = Окно.Content[0].ThisForm.Object.Ref;
					СостояниеОбъекта = ПолучитьСостояниеОбъекта(СсылкаНаОбъект);
					СостояниеОбъекта.Вставить("ЗаголовокОкна",Окно.Caption);
					Результат.Добавить(СостояниеОбъекта);
				Исключение
				КонецПопытки;
			КонецЕсли;
		Исключение
		КонецПопытки;

	КонецЦикла;

	СериализованнаяСтрока = VAExtensionОбщегоНазначения.ЗаписатьОбъектJSON(Результат);

	ПоказатьПредупреждение(,СериализованнаяСтрока);

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

&НаСервере
Функция ПолучитьСостояниеОбъекта(Ссылка)
	СостояниеОбъекта = Новый Структура;
	СостояниеОбъекта.Вставить("ТипЭлемента", "Неопределено");
	Если Лев(Ссылка.Метаданные().ПолноеИмя(), 9) = "Документ." ИЛИ Лев(Ссылка.Метаданные().ПолноеИмя(), 9) = "Document." Тогда
		СостояниеОбъекта.Вставить("Проведен", Ссылка.Проведен);
		СостояниеОбъекта.Вставить("ТипЭлемента", "Документ");
		СостояниеОбъекта.Вставить("Дата", "");
		СостояниеОбъекта.Вставить("Номер", "");
		Попытка
			СостояниеОбъекта.Вставить("Дата", Ссылка.Дата);
			СостояниеОбъекта.Вставить("Номер", Ссылка.Номер);
		Исключение
		КонецПопытки;
	ИначеЕсли Лев(Ссылка.Метаданные().ПолноеИмя(), 11) = "Справочник." ИЛИ Лев(Ссылка.Метаданные().ПолноеИмя(), 8) = "Catalog." Тогда
		СостояниеОбъекта.Вставить("ТипЭлемента", "Справочник");
		СостояниеОбъекта.Вставить("Код", "");
		Попытка
			СостояниеОбъекта.Вставить("Код", Ссылка.Код);
		Исключение
		КонецПопытки;
	КонецЕсли;
	СостояниеОбъекта.Вставить("ПометкаУдаления", Ссылка.ПометкаУдаления);
	Возврат СостояниеОбъекта;
КонецФункции


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

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

Процедура Инициализация(ПараметрыВидео)
Экспорт
	Ванесса.Объект.ИдетЗаписьВидео = Ложь;

	Каталог = ПараметрыВидео.ЗаписьВидеоКаталогДляВременныхФайлов;

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

	Если НЕ Ванесса.ФайлСуществуетКомандаСистемы(Каталог) Тогда

		Ванесса.СоздатьКаталогКомандаСистемы(Каталог);

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

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

	Если НЕ Установлен_ImageMagic(ПараметрыВидео) Тогда
		ВызватьИсключение Ванесса.Локализовать("Не установлен ImageMagic (convert.exe)");
	КонецЕсли;

	// Запишем специальный шаг видео, чтобы VLC проинициализировался (init.mp4)
	Ванесса.Отладка("Инициализация записи видео...");

	НачатьЗаписьВидеоОдногоШага(ПараметрыВидео);
    // TODO: допиши оставшуюся часть

[Assistant]
Процедура Инициализация(ПараметрыВидео) Экспорт
	Ванесса.Объект.ИдетЗаписьВидео = Ложь;

	Каталог = ПараметрыВидео.ЗаписьВидеоКаталогДляВременныхФайлов;

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

	Если НЕ Ванесса.ФайлСуществуетКомандаСистемы(Каталог) Тогда

		Ванесса.СоздатьКаталогКомандаСистемы(Каталог);

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

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

	Если НЕ Установлен_ImageMagic(ПараметрыВидео) Тогда
		ВызватьИсключение Ванесса.Локализовать("Не установлен ImageMagic (convert.exe)");
	КонецЕсли;

	// Запишем специальный шаг видео, чтобы VLC проинициализировался (init.mp4)
	Ванесса.Отладка("Инициализация записи видео...");

	НачатьЗаписьВидеоОдногоШага(ПараметрыВидео);

	// проверим что появился файл
	СчетчикПроверок     = 0;
	МаксСчетчикПроверок = 30;
	ТекДат = ТекущаяДата();
	Пока Истина Цикл
		СчетчикПроверок = СчетчикПроверок + 1;

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

		Если НЕ Ванесса.ФайлСуществуетКомандаСистемы(ПараметрыВидео.ТекущийФайлВидео) Тогда
			Ванесса.Sleep(1);
			Продолжить;
		Иначе
			Прервать;
		КонецЕсли;

	КонецЦикла;

	// остановим запись
	ОстановитьЗаписьВидеоОдногоШага(ПараметрыВидео);

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

&НаКлиенте

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

	Ванесса.Объект.ИдетЗаписьВыполненияТестов = Ложь;
	Ванесса.Отладка("КомандаОстановитьЗапись=q");
	ЭкземплярПроцессаЗаписиВыполненияТестов.ВвестиДанные("q");
	Если Ванесса.ЭтоLinux Тогда
		Ванесса.sleep(3);
	Иначе
		ЭкземплярПроцессаЗаписиВыполненияТестов.Ждать(10000);
	КонецЕсли;

	ИмяФайлаВидеоИсходный = Ванесса.ДополнитьСлешВПуть(ПараметрыВидео.КаталогДляЗаписиВидеоВыполненияТестов)
		+ "scen" + Формат(ПараметрыВидео.ТекИД_СценарияВМассиве, "ЧГ=; ЧН=0") + ".mp4";

	Для Сч = 1 По 10 Цикл
		Если Ванесса.ФайлСуществуетКомандаСистемы(ИмяФайлаВидеоИсходный) Тогда
			Прервать;
		Иначе
			Ванесса.sleep(1);
		КонецЕсли;
	КонецЦикла;

	ИмяФайлаВидеоРезультат = ПараметрыВидео.КаталогДляЗаписиВидеоВыполненияТестов
		+ "\" + Формат(ТекущаяУниверсальнаяДатаВМиллисекундах(), "ЧГ=; ЧН=0") + "_"
		+  Лев(Ванесса.УбратьВсеЗапрещенныеСимволыИзИмениФайла(ПараметрыВидео.СтрокаСценария.Имя), 50) + ".mp4";

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

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

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

&НаКлиенте

Процедура НачатьЗаписьВыполненияТестов(ПараметрыВидео) Экспорт
	ИмяФайлаВидео = Ванесса.ДополнитьСлешВПуть(ПараметрыВидео.КаталогДляЗаписиВидеоВыполненияТестов)
		+ "scen" + Формат(ПараметрыВидео.ТекИД_СценарияВМассиве, "ЧГ=; ЧН=0") + ".mp4";

	ПараметрыВидео.Вставить("ТекущийФайлВидео", ИмяФайлаВидео);
	ИмяФайлаВидеоТекущегоШага = ИмяФайлаВидео;

	КолКадров = ПараметрыВидео.КоличествоКадровВидеоВыполненияТестов;
	Если КолКадров = 0 Тогда
		КолКадров = 5;
	КонецЕсли;

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

	Если Ванесса.ЭтоLinux Тогда
		СмещениеВидео = "+" + Формат(0,"ЧН=0; ЧГ=0") + "," + Формат(0,"ЧН=0; ЧГ=0");
	Иначе
		СмещениеВидео = " -offset_x " + Формат(0,"ЧН=0; ЧГ=0") + " -offset_y " + Формат(0,"ЧН=0; ЧГ=0");
	КонецЕсли;

	КомандаНачатьЗаписьВидео = ""
	+ """" + КомандаЗаписиВидеоВыполненияТестов + """"
	+ " -f " + ПараметрыВидео.Устройство
	+ " -framerate " + Формат(КолКадров, "ЧГ=")
	+ ?(Ванесса.ЭтоLinux, "", СмещениеВидео)
	+ " -video_size " + Формат(ПараметрыВидео.ЗаписьВидеоЭкранШирина,"ЧН=0; ЧГ=0") + "x" + Формат(ПараметрыВидео.ЗаписьВидеоЭкранВысота,"ЧН=0; ЧГ=0")
	+ " -i " + ПараметрыВидео.Дисплей + ?(Ванесса.ЭтоLinux, СмещениеВидео, "")
	+ " -preset ultrafast "
	+ " -crf 0 "
	+ """" + ИмяФайлаВидео + """";

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

	Ванесса.Отладка(КомандаНачатьЗаписьВидео);
	Ванесса.ЗаписатьЛогВЖРИнформация("КомандаНачатьЗаписьВыполненияТестов", КомандаНачатьЗаписьВидео);
	ЭкземплярПроцессаЗаписиВыполненияТестов = Новый("AddIn." + ПараметрыВидео.ИдентификаторВнешнейКомпонентыДляСкриншотов + ".ProcessControl");
	ЭкземплярПроцессаЗаписиВыполненияТестов.Создать(КомандаНачатьЗаписьВидео);

	Ванесса.Объект.ИдетЗаписьВыполненияТестов = Истина;
КонецПроцедуры

&НаКлиенте


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

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

Процедура ИмяФункции(Команда)

	Состояние(НСтр("ru='Выполняется поиск объектов метаданных, которые могут быть выгружены по ссылкам...';en='Searches for metadata objects that can be downloaded by the links...'"));
	СохранитьОтображениеДерева(Объект.ДеревоМетаданных.ПолучитьЭлементы());
	ПересчитатьВыгружаемыеПоСсылкеНаСервере();
	ВосстановитьОтображениеДерева(Объект.ДеревоМетаданных.ПолучитьЭлементы());

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

&НаКлиенте

Процедура СохранитьОтображениеДерева(СтрокиДерева)

	Для Каждого Строка Из СтрокиДерева Цикл

		ИдентификаторСтроки=Строка.ПолучитьИдентификатор();
		Строка.Развернут = Элементы.ДеревоМетаданных.Развернут(ИдентификаторСтроки);

		СохранитьОтображениеДерева(Строка.ПолучитьЭлементы());

	КонецЦикла;

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

&НаКлиенте

Процедура ВосстановитьОтображениеДерева(СтрокиДерева)

	Для Каждого Строка Из СтрокиДерева Цикл

		ИдентификаторСтроки=Строка.ПолучитьИдентификатор();
		Если Строка.Развернут Тогда
			Элементы.ДеревоМетаданных.Развернуть(ИдентификаторСтроки);
		КонецЕсли;

		ВосстановитьОтображениеДерева(Строка.ПолучитьЭлементы());

	КонецЦикла;

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

&НаСервере

Процедура ПересчитатьВыгружаемыеПоСсылкеНаСервере()

	ОбъектНаСервере = Объект();
	ЗаполнитьДеревоМетаданныхНаСервере(ОбъектНаСервере);
	ОбъектНаСервере.СоставВыгрузки(Истина);
	ЗначениеВРеквизитФормы(ОбъектНаСервере.ДеревоМетаданных, "Объект.ДеревоМетаданных");

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

&НаСервере

Процедура ЗаполнитьДеревоМетаданныхНаСервере(ОбъектНаСервере)

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

	ОбъектНаСервере.НачальнаяИнициализация();

	ПроставитьПометкиВыгружаемыхДанных(ОбъектНаСервере.ДеревоМетаданных.Строки, ДеревоМетаданных.Строки);

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

&НаСервере

Процедура ПроставитьПометкиВыгружаемыхДанных(СтрокиИсходногоДерева, СтрокиЗаменяемогоДерева)

	КолонкаВыгружать = СтрокиЗаменяемогоДерева.ВыгрузитьКолонку("Выгружать");
	СтрокиИсходногоДерева.ЗагрузитьКолонку(КолонкаВыгружать, "Выгружать");

	КолонкаВыгружатьПриНеобходимости = СтрокиЗаменяемогоДерева.ВыгрузитьКолонку("ВыгружатьПриНеобходимости");
	СтрокиИсходногоДерева.ЗагрузитьКолонку(КолонкаВыгружатьПриНеобходимости, "ВыгружатьПриНеобходимости");

	КолонкаРазвернут = СтрокиЗаменяемогоДерева.ВыгрузитьКолонку("Развернут");
	СтрокиИсходногоДерева.ЗагрузитьКолонку(КолонкаРазвернут, "Развернут");

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

	КолонкаИспользоватьОтбор = СтрокиЗаменяемогоДерева.ВыгрузитьКолонку("ИспользоватьОтбор");
	СтрокиИсходногоДерева.ЗагрузитьКолонку(КолонкаИспользоватьОтбор, "ИспользоватьОтбор");

	Для Каждого СтрокаИсходногоДерева Из СтрокиИсходногоДерева Цикл

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

		ПроставитьПометкиВыгружаемыхДанных(СтрокаИсходногоДерева.Строки, СтрокаИзменяемогоДерева.Строки);

	КонецЦикла;

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

////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ ТАБЛИЦЫ ФОРМЫ ДеревоМетаданных

&НаКлиенте

Процедура ДеревоМетаданныхВыгружатьПриИзменении(Элемент)

	ТекущиеДанные = Элементы.ДеревоМетаданных.ТекущиеДанные;

	Если ТекущиеДанные.Выгружать = 2 Тогда
		ТекущиеДанные.Выгружать = 0;
	КонецЕсли;

	УстановитьПометкиПодчиненных(ТекущиеДанные, "Выгружать");
	УстановитьПометкиРодителей(ТекущиеДанные, "Выгружать");

	УровеньВыгрузкиПриИзменении(Элемент);

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

&НаКлиенте

Процедура ДеревоМетаданныхВыгружатьПриНеобходимостиПриИзменении(Элемент)

	ТекущиеДанные = Элементы.ДеревоМетаданных.ТекущиеДанные;

	Если ТекущиеДанные.ВыгружатьПриНеобходимости = 2 Тогда
		ТекущиеДанные.ВыгружатьПриНеобходимости = 0;
	КонецЕсли;

	УстановитьПометкиПодчиненных(ТекущиеДанные, "ВыгружатьПриНеобходимости");
	УстановитьПометкиРодителей(ТекущиеДанные, "ВыгружатьПриНеобходимости");

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

&НаКлиенте

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

	Подчиненные = ТекСтрока.ПолучитьЭлементы();

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

	Для Каждого Строка из Подчиненные Цикл

		Строка[ИмяФлажка] = ТекСтрока[ИмяФлажка];

		УстановитьПометкиПодчиненных(Строка, ИмяФлажка);

	КонецЦикла;

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

&НаКлиенте

Процедура УстановитьПометкиРодителей(ТекСтрока, ИмяФлажка)

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

	ТекСостояние = Родитель[ИмяФлажка];

	НайденыВключенные  = Ложь;
	НайденыВыключенные = Ложь;

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

	Если НайденыВключенные И НайденыВыключенные Тогда
		Включить = 2;
	ИначеЕсли НайденыВключенные И (Не НайденыВыключенные) Тогда
		Включить = 1;
	ИначеЕсли (Не НайденыВключенные) И НайденыВыключенные Тогда
		Включить = 0;
	ИначеЕсли (Не НайденыВключенные) И (Не НайденыВыключенные) Тогда
		Включить = 2;
	КонецЕсли;

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

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

&НаКлиенте

Процедура ДеревоМетаданныхПриАктивизацииСтроки(Элемент)

	ПодключитьОбработчикОжидания("ДеревоМетаданныхПриАктивизацииСтрокиОбработкаОжидания", 0.1, Истина);

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

&НаКлиенте

Процедура ДеревоМетаданныхПриАктивизацииСтрокиОбработкаОжидания()

	ТекущаяСтрока = Элементы.ДеревоМетаданных.ТекущаяСтрока;
	Если ТекущаяСтрока = ДеревоМетаданныхПредыдущаяСтрока Тогда
		Возврат;
	КонецЕсли;
	ДеревоМетаданныхПредыдущаяСтрока = ТекущаяСтрока;

	НастроитьКомпоновщик();

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

// Служит для настройки построителя при отборе данных
//
// Параметры:
//
&НаКлиенте

Процедура НастроитьКомпоновщик()

	ТекущаяСтрока = Элементы.ДеревоМетаданных.ТекущиеДанные;

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

	Если НЕ ОпределитьПоСтрокеДереваДоступенПостроитель(ТекущаяСтрока) Тогда

		ДоступностьКомпоновщика = ЛОЖЬ;
		УдалитьОтборыКомпоновщика(Объект.КомпоновщикНастроекКомпоновкиДанных);

	Иначе

		Попытка

			НастроитьКомпоновщикНаСервере(Элементы.ДеревоМетаданных.ТекущаяСтрока);

			ДоступностьКомпоновщика = Истина;

		Исключение
			ДоступностьКомпоновщика = ЛОЖЬ;
			УдалитьОтборыКомпоновщика(Объект.КомпоновщикНастроекКомпоновкиДанных);
		КонецПопытки;

	КонецЕсли;

	Элементы.КомпоновщикОтбор.Доступность = ДоступностьКомпоновщика;
	//Элементы.КоманднаяПанельКомпоновщикОтбор.Доступность = ДоступностьКомпоновщика;

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

&НаКлиенте

Функция ОпределитьПоСтрокеДереваДоступенПостроитель(СтрокаДерева)

	Если СтрокаДерева.ПолучитьЭлементы().Количество() > 0 Тогда
		Возврат Ложь;
	Иначе
		Возврат Истина;
	КонецЕсли;

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

&НаКлиенте

Процедура УдалитьОтборыКомпоновщика(Компоновщик)

	Компоновщик.Настройки.Отбор.Элементы.Очистить();

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

&НаСервере

Процедура НастроитьКомпоновщикНаСервере(ТекущаяСтрока)

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

КонецПроцедуры // НастроитьКомпоновщикНаСервере()

&НаКлиенте

Процедура КомпоновщикОтборПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)

	ОбновитьНастройкиПостроителяВТаблицеДляВыгрузки();

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

&НаКлиенте

[Assistant] Процедура ПересчитатьВыгружаемыеПоСсылке(Команда)


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

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

Процедура ИмяФункции(_конфигурация)
	Если _конфигурация.Версия = "8.2" Тогда
		указательНаБазу = Новый Файл(_конфигурация.СоздаваемаяБаза + "\1Cv8.1cd");
		Если НЕ указательНаБазу.Существует() Тогда
			лог.Отладка("Создание сервисной базы контрибьютора 8.2" + _конфигурация.СоздаваемаяБаза);

			УправлениеКонфигуратором = Новый УправлениеКонфигуратором();
			путьКПлатформе = УправлениеКонфигуратором.ПолучитьПутьКВерсииПлатформы("8.2");
			УправлениеКонфигуратором.ПутьКПлатформе1С(путьКПлатформе);
			УправлениеКонфигуратором.КаталогСборки(".\tools\ServiceBases\");
			УправлениеКонфигуратором.СоздатьФайловуюБазу(_конфигурация.СоздаваемаяБаза);
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры

Лог = Логирование.ПолучитьЛог("behavior.build.log");

массивСервисныхБаз = Новый Массив();
массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
	".\lib\CF\82\",".\tools\ServiceBases\v82ServiceBase82", "8.3.6"));

массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase836", "8.3.6"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase837", "8.3.7"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase838", "8.3.8"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase839", "8.3.9"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8310r01", "8.3.10"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8310r02", "8.3.10"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8310r03", "8.3.10"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8310r04", "8.3.10"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8310r05", "8.3.10"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8310", "8.3.10"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8311", "8.3.11"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8312", "8.3.12"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8313", "8.3.13"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8314", "8.3.14"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8315", "8.3.15"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8316", "8.3.16"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8317", "8.3.17"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8318", "8.3.18"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8319", "8.3.19"));

//массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
//	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8320", "8.3.20"));

массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8321", "8.3.21"));

массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8322", "8.3.22"));

массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8323", "8.3.23"));

массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8324", "8.3.24"));

массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8325", "8.3.25"));

массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase8327", "8.3.27"));

массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
	".\lib\CF\83\",".\tools\ServiceBases\v83ServiceBase851", "8.5.1"));

массивСервисныхБаз.Добавить(Новый Структура("ПутьКИсходникам,СоздаваемаяБаза, Версия",
	".\lib\CF\83NoSync\",".\tools\ServiceBases\v83NoSyncServiceBase", "8.3.21"));

УправлениеКонфигуратором = Новый УправлениеКонфигуратором();
УправлениеКонфигуратором.КаталогСборки(".\tools\ServiceBases\");

Для каждого _конфигурация из массивСервисныхБаз Цикл

	СоздатьБазу82ЕслиЕёНет(_конфигурация);

	Лог.Информация("Обрабатываю исходные файлы " + _конфигурация.ПутьКИсходникам + ", " + _конфигурация.Версия);
	указательНаБазу = Новый Файл(_конфигурация.СоздаваемаяБаза + "\1Cv8.1cd");
	Попытка
		путьКПлатформе = УправлениеКонфигуратором.ПолучитьПутьКВерсииПлатформы(_конфигурация.Версия);
	Исключение
		Лог.Информация("Платформа версии " + _конфигурация.Версия + " на данном компьютере не установлена.");
		Продолжить;
	КонецПопытки;
	УправлениеКонфигуратором.ПутьКПлатформе1С(путьКПлатформе);

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

	УправлениеКонфигуратором.УстановитьКонтекст("/F" + _конфигурация.СоздаваемаяБаза + "\","","");

	ПараметрыЗапуска = УправлениеКонфигуратором.ПолучитьПараметрыЗапуска();
	ПараметрыЗапуска.Добавить("/LoadConfigFromFiles """ + _конфигурация.ПутьКИсходникам + """");

	УправлениеКонфигуратором.ВыполнитьКоманду(ПараметрыЗапуска);

	Если Найти(_конфигурация.ПутьКИсходникам,"82") = 0 Тогда
		//теперь выгрузим конфу в файлы ещё раз и заменим параметр CompatibilityMode на DontUse, чтобы гарантировать, что не используется режим совместимости
		ВременныйКаталог = ПолучитьВременныйКаталог();

		ПараметрыЗапуска = УправлениеКонфигуратором.ПолучитьПараметрыЗапуска();
		ПараметрыЗапуска.Добавить("/DumpConfigToFiles  """ + ВременныйКаталог + """");
		УправлениеКонфигуратором.ВыполнитьКоманду(ПараметрыЗапуска);

		//Сообщить("ВременныйКаталог="+ВременныйКаталог);
		ОбработатьФайлConfiguration_xml(ВременныйКаталог + "\Configuration.xml",_конфигурация.Версия);

		//теперь загрузим конфу обратно
		ПараметрыЗапуска = УправлениеКонфигуратором.ПолучитьПараметрыЗапуска();
		ПараметрыЗапуска.Добавить("/LoadConfigFromFiles  """ + ВременныйКаталог + """");
		УправлениеКонфигуратором.ВыполнитьКоманду(ПараметрыЗапуска);

		ОчиститьВременныйКаталог(ВременныйКаталог);
	КонецЕсли;

	//УправлениеКонфигуратором.ВыполнитьСинтаксическийКонтроль();

	УправлениеКонфигуратором.ОбновитьКонфигурациюБазыДанных();

КонецЦикла;

//УправлениеКонфигуратором.ЗапуститьВРежимеПредприятия("",Истина);

[Assistant] Процедура СоздатьБазу82ЕслиЕёНет(_конфигурация)


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

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

Процедура ПриСозданииОбъекта(Знач ДанныеПроекта_ = Неопределено)
Если ДанныеПроекта_ = Неопределено Тогда
		ДанныеПроекта = Новый ProjectData;
	Иначе
		ДанныеПроекта = ДанныеПроекта_;
	КонецЕсли;

	CommonTools.СообщитьПроцесс("Checking CLI help output");

	Корень = ДанныеПроекта.ПолучитьЗначениеНастройки("paths.root");
	Языки  = ДанныеПроекта.ПолучитьЗначениеНастройки("localization.langs");

	Для Каждого Язык Из Языки Цикл

		ОбъектCLI = ЗагрузитьСценарий(Корень + Язык + "/cli/data/Classes/LibraryComposition.os");
		Состав    = ?(Язык = "ru", ОбъектCLI.ПолучитьПолныйСостав(), ОбъектCLI.GetFullComposition());

		ШаблонВызоваМетода     = СтрШаблон("oscript %1%2/cli/core/Classes/app.os %%1 %%2", Корень, Язык);
		ШаблонВызоваБиблиотеки = СтрШаблон("oscript %1%2/cli/core/Classes/app.os %%1", Корень, Язык);

		СоответствиеВызововБиблиотек = Новый Соответствие();
		СоответствиеВызововМетодов   = Новый Соответствие();

		Для Каждого СтрокаСостава Из Состав Цикл

			ТекущийСостав = СтрокаСостава.Значение;

			Для Каждого Метод Из ТекущийСостав["methods"] Цикл

				ТекущаяБиблиотека = ТекущийСостав["library"];
				ТекущийМетод      = Метод["name"];

				СоответствиеВызововБиблиотек.Вставить(СтрШаблон(ШаблонВызоваБиблиотеки, ТекущаяБиблиотека), ТекущаяБиблиотека);
				СоответствиеВызововМетодов.Вставить(СтрШаблон(ШаблонВызоваМетода, ТекущаяБиблиотека, ТекущийМетод)
					, СтрШаблон("%1 %2", ТекущаяБиблиотека, ТекущийМетод));

			КонецЦикла;
    // TODO: допиши оставшуюся часть

[Assistant]
#Использовать "./internal"

Процедура ПриСозданииОбъекта(Знач ДанныеПроекта_ = Неопределено)

	Если ДанныеПроекта_ = Неопределено Тогда
		ДанныеПроекта = Новый ProjectData;
	Иначе
		ДанныеПроекта = ДанныеПроекта_;
	КонецЕсли;

	CommonTools.СообщитьПроцесс("Checking CLI help output");

	Корень = ДанныеПроекта.ПолучитьЗначениеНастройки("paths.root");
	Языки  = ДанныеПроекта.ПолучитьЗначениеНастройки("localization.langs");

	Для Каждого Язык Из Языки Цикл

		ОбъектCLI = ЗагрузитьСценарий(Корень + Язык + "/cli/data/Classes/LibraryComposition.os");
		Состав    = ?(Язык = "ru", ОбъектCLI.ПолучитьПолныйСостав(), ОбъектCLI.GetFullComposition());

		ШаблонВызоваМетода     = СтрШаблон("oscript %1%2/cli/core/Classes/app.os %%1 %%2", Корень, Язык);
		ШаблонВызоваБиблиотеки = СтрШаблон("oscript %1%2/cli/core/Classes/app.os %%1", Корень, Язык);

		СоответствиеВызововБиблиотек = Новый Соответствие();
		СоответствиеВызововМетодов   = Новый Соответствие();

		Для Каждого СтрокаСостава Из Состав Цикл

			ТекущийСостав = СтрокаСостава.Значение;

			Для Каждого Метод Из ТекущийСостав["methods"] Цикл

				ТекущаяБиблиотека = ТекущийСостав["library"];
				ТекущийМетод      = Метод["name"];

				СоответствиеВызововБиблиотек.Вставить(СтрШаблон(ШаблонВызоваБиблиотеки, ТекущаяБиблиотека), ТекущаяБиблиотека);
				СоответствиеВызововМетодов.Вставить(СтрШаблон(ШаблонВызоваМетода, ТекущаяБиблиотека, ТекущийМетод)
					, СтрШаблон("%1 %2", ТекущаяБиблиотека, ТекущийМетод));

			КонецЦикла;

		КонецЦикла;

		Для Каждого СтрокаВызова Из СоответствиеВызововБиблиотек Цикл

			Попытка
				CommonTools.ЗапуститьПриложениеВКонсолиБезВывода(СтрокаВызова.Ключ);
			Исключение
				ВызватьИсключение СтрШаблон("Ошибка при проверке справки CLI: %1 (%2)", СтрокаВызова.Ключ, Язык);
			КонецПопытки;

		КонецЦикла;

		Для Каждого СтрокаВызова Из СоответствиеВызововМетодов Цикл

			Попытка
				CommonTools.ЗапуститьПриложениеВКонсолиБезВывода(СтрокаВызова.Ключ);
			Исключение
				ВызватьИсключение СтрШаблон("Ошибка при проверке справки CLI: %1 (%2)", СтрокаВызова.Ключ, Язык);
			КонецПопытки;

		КонецЦикла;

	КонецЦикла;

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