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

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

Процедура ИмяФункции(Отказ, СтандартнаяОбработка)

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

	ВыбраннаяСтраницаНастроек = Элементы.ВидыНастроек.ТекущаяСтраница.Имя;

	ИмяФормыПерсональныхНастроек =
		ОбщегоНазначения.ОбщиеПараметрыБазовойФункциональности().ИмяФормыПерсональныхНастроек;

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

&НаКлиенте

Процедура ПриЗакрытии(ЗавершениеРаботы)

	Если ДанныеВХранилищеНастроекСохранены
	   И ТипЗнч(ВладелецФормы) = Тип("ФормаКлиентскогоПриложения") Тогда

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

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

&НаСервере

Процедура ПриСохраненииДанныхВНастройкахНаСервере(Настройки)

	Настройки.Удалить("ВнешнийВид");
	Настройки.Удалить("НастройкиОтчетов");
	Настройки.Удалить("ПрочиеНастройки");

	ВнешнийВидДерево       = РеквизитФормыВЗначение("ВнешнийВид");
	НастройкиОтчетовДерево = РеквизитФормыВЗначение("НастройкиОтчетов");
	ПрочиеНастройкиДерево  = РеквизитФормыВЗначение("ПрочиеНастройки");

	ПомеченныеНастройкиВнешнегоВида = ПомеченныеНастройки(ВнешнийВидДерево);
	ПомеченныеНастройкиОтчетов      = ПомеченныеНастройки(НастройкиОтчетовДерево);
	ПомеченныеПрочиеНастройки       = ПомеченныеНастройки(ПрочиеНастройкиДерево);

	Настройки.Вставить("ПомеченныеНастройкиВнешнегоВида", ПомеченныеНастройкиВнешнегоВида);
	Настройки.Вставить("ПомеченныеНастройкиОтчетов",      ПомеченныеНастройкиОтчетов);
	Настройки.Вставить("ПомеченныеПрочиеНастройки",       ПомеченныеПрочиеНастройки);

	ДанныеВХранилищеНастроекСохранены = Истина;

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

&НаСервере

Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)

	ВсеВыбранныеНастройки = Новый Структура;
	ВсеВыбранныеНастройки.Вставить("ПомеченныеНастройкиВнешнегоВида");
	ВсеВыбранныеНастройки.Вставить("ПомеченныеНастройкиОтчетов");
	ВсеВыбранныеНастройки.Вставить("ПомеченныеПрочиеНастройки");

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

	ПомеченныеНастройкиВнешнегоВида = Настройки.Получить("ПомеченныеНастройкиВнешнегоВида");
	ПомеченныеНастройкиОтчетов      = Настройки.Получить("ПомеченныеНастройкиОтчетов");
	ПомеченныеПрочиеНастройки       = Настройки.Получить("ПомеченныеПрочиеНастройки");

	ВсеВыбранныеНастройки.ПомеченныеНастройкиВнешнегоВида = ПомеченныеНастройкиВнешнегоВида;
	ВсеВыбранныеНастройки.ПомеченныеНастройкиОтчетов = ПомеченныеНастройкиОтчетов;
	ВсеВыбранныеНастройки.ПомеченныеПрочиеНастройки = ПомеченныеПрочиеНастройки;

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

&НаКлиенте

Процедура ПриОткрытии(Отказ)
	ОбновитьСписокНастроек();
КонецПроцедуры

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте

Процедура ПриСменеСтраницы(Элемент, ТекущаяСтраница)

	ВыбраннаяСтраницаНастроек = ТекущаяСтраница.Имя;

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

&НаКлиенте

Процедура ДеревоНастроекВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

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

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

&НаКлиенте

Процедура ПометкаПриИзменении(Элемент)

	ИзменитьПометку(Элемент);

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

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

#Область ОбработчикиКомандФормы

&НаКлиенте

Процедура Обновить(Команда)

	ОбновитьСписокНастроек();

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

&НаКлиенте

Процедура ОткрытьНастройку(Команда)

	ПользователиСлужебныйКлиент.ОткрытьОтчетИлиФорму(
		ТекущийЭлемент, ПользовательИнформационнойБазы, ТекущийПользователь, ИмяФормыПерсональныхНастроек);

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

&НаКлиенте

Процедура ПометитьВсе(Команда)

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

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

&НаКлиенте

Процедура СнятьПометкуСоВсех(Команда)

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

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

&НаКлиенте

Процедура Выбрать(Команда)

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

	ВыбранныеНастройкиВнешнегоВида    = ВыбранныеНастройки(ВнешнийВид);
	ВыбранныеНастройкиОтчетов         = ВыбранныеНастройки(НастройкиОтчетов);
	ВыбранныеПрочиеНастройкиСтруктура = ВыбранныеНастройки(ПрочиеНастройки);

	КоличествоНастроек = ВыбранныеНастройкиВнешнегоВида.КоличествоНастроек
	                   + ВыбранныеНастройкиОтчетов.КоличествоНастроек
	                   + ВыбранныеПрочиеНастройкиСтруктура.КоличествоНастроек;

	Если ВыбранныеНастройкиОтчетов.КоличествоНастроек = 1 Тогда
		ПредставленияНастроек = ВыбранныеНастройкиОтчетов.ПредставленияНастроек;
	ИначеЕсли ВыбранныеНастройкиВнешнегоВида.КоличествоНастроек = 1 Тогда
		ПредставленияНастроек = ВыбранныеНастройкиВнешнегоВида.ПредставленияНастроек;
	ИначеЕсли ВыбранныеПрочиеНастройкиСтруктура.КоличествоНастроек = 1 Тогда
		ПредставленияНастроек = ВыбранныеПрочиеНастройкиСтруктура.ПредставленияНастроек;
	КонецЕсли;

	Результат.Вставить("ВнешнийВид",       ВыбранныеНастройкиВнешнегоВида.МассивНастроек);
	Результат.Вставить("НастройкиОтчетов", ВыбранныеНастройкиОтчетов.МассивНастроек);
	Результат.Вставить("ПрочиеНастройки",  ВыбранныеПрочиеНастройкиСтруктура.МассивНастроек);

	Результат.Вставить("ПредставленияНастроек", ПредставленияНастроек);
	Результат.Вставить("КоличествоНастроек",    КоличествоНастроек);

	Результат.Вставить("ТаблицаВариантовОтчетов",  ТаблицаПользовательскихВариантовОтчетов);
	Результат.Вставить("ВыбранныеВариантыОтчетов", ВыбранныеНастройкиОтчетов.ВариантыОтчетов);

	Результат.Вставить("ПерсональныеНастройки",           ВыбранныеПрочиеНастройкиСтруктура.МассивПерсональныхНастроек);
	Результат.Вставить("ПрочиеПользовательскиеНастройки", ВыбранныеПрочиеНастройкиСтруктура.ПрочиеПользовательскиеНастройки);

	Закрыть(Результат);

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

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

#Область СлужебныеПроцедурыИФункции

////////////////////////////////////////////////////////////////////////////////
// Процедуры и функции, отвечающие за вывод настроек пользователю.

&НаКлиенте

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

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

	ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
	ПараметрыОжидания.ВыводитьОкноОжидания = Ложь;
	ОповещениеОЗавершении = Новый ОписаниеОповещения("ОбновитьСписокНастроекЗавершение", ЭтотОбъект);

	ДлительныеОперацииКлиент.ОжидатьЗавершение(Результат, ОповещениеОЗавершении, ПараметрыОжидания);

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

&НаСервере

[Assistant] Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)


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

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

Процедура Скопировать(Команда)
ОчиститьСообщения();

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

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

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

	// При копировании настроек внешнего вида или всех настроек другим пользователям
	// проверяем работают они с программой или нет. Если работают - выводим сообщение об этом.
	ОткрытыеКопируемыеФормы = ОткрытыеКопируемыеФормы();
	ПроверитьАктивныхПользователей();
	Если РезультатПроверки = "ЕстьАктивныеПользователиПолучатели"
		Или (ЗначениеЗаполнено(ОткрытыеКопируемыеФормы) И РезультатПроверки = "ТекущийПользовательПолучатель") Тогда
    // TODO: допиши оставшуюся часть

[Assistant]
Процедура Скопировать(Команда)

	ОчиститьСообщения();

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

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

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

	// При копировании настроек внешнего вида или всех настроек другим пользователям
	// проверяем работают они с программой или нет. Если работают - выводим сообщение об этом.
	ОткрытыеКопируемыеФормы = ОткрытыеКопируемыеФормы();
	ПроверитьАктивныхПользователей();
	Если РезультатПроверки = "ЕстьАктивныеПользователиПолучатели"
		Или (ЗначениеЗаполнено(ОткрытыеКопируемыеФормы) И РезультатПроверки = "ТекущийПользовательПолучатель") Тогда

		Если ПереключательКопируемыеНастройки = "СкопироватьВсе"
			Или (ПереключательКопируемыеНастройки = "СкопироватьОтдельные"
			И ВыбранныеНастройки.ВнешнийВид.Количество() <> 0) Тогда

			ОповещениеОЗакрытии = Новый ОписаниеОповещения("СкопироватьПродолжение", ЭтотОбъект);

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

		КонецЕсли;

	КонецЕсли;
	СкопироватьНастройки(Команда.Имя);

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

&НаКлиенте

Функция ОткрытыеКопируемыеФормы()

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

	Настройки = ВыбранныеНастройки.ВнешнийВид;

	СтрокаОткрытыеФормы          = "";
	СтрокаВсеКопируемыеНастройки = "";
	Для Каждого НастройкиФормы Из Настройки Цикл
		Для Каждого НастройкаФормы Из НастройкиФормы Цикл
			СтрокаВсеКопируемыеНастройки = СтрокаВсеКопируемыеНастройки + Символы.ПС + НастройкаФормы.Значение;
		КонецЦикла;
	КонецЦикла;

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

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

		Если СтрНайти(СтрокаВсеКопируемыеНастройки, ИмяОткрытойФормы) > 0 Тогда
			СтрокаОткрытыеФормы = ?(ЗначениеЗаполнено(СтрокаОткрытыеФормы),
				СтрокаОткрытыеФормы + Символы.ПС + "- " + ОткрытоеОкно.Заголовок,
				НСтр("ru = 'Открытые окна'") + ":" + Символы.ПС + "- " + ОткрытоеОкно.Заголовок)
		КонецЕсли;

	КонецЦикла;

	Возврат СтрокаОткрытыеФормы;

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

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

#Область СлужебныеПроцедурыИФункции

&НаКлиенте

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

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

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

&НаКлиенте

Процедура ВыбратьНастройкиПослеВыбора(Параметр, Контекст) Экспорт

	Если ТипЗнч(Параметр) <> Тип("Структура") Тогда
		Возврат;
	КонецЕсли;

	ВыбранныеНастройки = Новый Структура;
	ВыбранныеНастройки.Вставить("ВнешнийВид",       Параметр.ВнешнийВид);
	ВыбранныеНастройки.Вставить("НастройкиОтчетов", Параметр.НастройкиОтчетов);
	ВыбранныеНастройки.Вставить("ПрочиеНастройки",  Параметр.ПрочиеНастройки);

	ВыбранныеНастройки.Вставить("ТаблицаВариантовОтчетов",  Параметр.ТаблицаВариантовОтчетов);
	ВыбранныеНастройки.Вставить("ВыбранныеВариантыОтчетов", Параметр.ВыбранныеВариантыОтчетов);

	ВыбранныеНастройки.Вставить("ПерсональныеНастройки",           Параметр.ПерсональныеНастройки);
	ВыбранныеНастройки.Вставить("ПрочиеПользовательскиеНастройки", Параметр.ПрочиеПользовательскиеНастройки);

	КоличествоНастроек = Параметр.КоличествоНастроек;

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

	Элементы.ВыбратьНастройки.Заголовок = ТекстЗаголовка;
	Элементы.ВыбратьНастройки.Подсказка = "";

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

&НаКлиенте

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

	Если ПереключательКомуКопироватьНастройки = "ВыбраннымПользователям" Тогда

		ПояснениеКомуСкопированыНастройки = ПользователиСлужебныйКлиент.ПояснениеПользователи(
			КоличествоПользователей, ПользователиПолучателиНастроек.МассивПользователей[0]);
	Иначе
		ПояснениеКомуСкопированыНастройки = НСтр("ru = 'всем пользователям'");
	КонецЕсли;

	ТекстОповещения    = НСтр("ru = 'Копирование настроек'");
	КартинкаОповещения = БиблиотекаКартинок.Информация32;

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

		Если Отчет <> Неопределено Тогда
			ТекстВопроса = НСтр("ru = 'Не все варианты отчетов и настройки были скопированы.'");
			КнопкиВопроса = Новый СписокЗначений;
			КнопкиВопроса.Добавить("Ок", НСтр("ru = 'ОК'"));
			КнопкиВопроса.Добавить("ПоказатьОтчет", НСтр("ru = 'Показать отчет'"));

			Оповещение = Новый ОписаниеОповещения("СкопироватьНастройкиПоказатьВопрос", ЭтотОбъект, Отчет);
			ПоказатьВопрос(Оповещение, ТекстВопроса, КнопкиВопроса,, КнопкиВопроса[0].Значение);
			Возврат;
		КонецЕсли;

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

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

			ПоказатьПредупреждение(, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Настройки не были скопированы, так как у пользователя ""%1"" не было сохранено ни одной настройки.'"),
				Строка(ПользовательСсылка)));
			Возврат;
		КонецЕсли;

		ПояснениеОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Скопированы все настройки %1'"), ПояснениеКомуСкопированыНастройки);

		ПоказатьОповещениеПользователя(ТекстОповещения, , ПояснениеОповещения, КартинкаОповещения);
	КонецЕсли;

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

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

	Возврат;

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

&НаКлиенте

Процедура СкопироватьНастройкиПоказатьВопрос(Ответ, Отчет) Экспорт

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

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

&НаСервере

Tasks-develope/src/cf/DataProcessors/НастройкиПользователей/Forms/КопированиеНастроекПользователей/Ext/Form/Module.bsl


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

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

Процедура ЗавершениеРедактированияОбработчика(Результат, ДополнительныеПараметры)
Экспорт

	Если ТекущийЭлемент <> Неопределено И ТекущийЭлемент.Имя <> "ОбработчикиОбновления" Тогда
		ТекущийЭлемент = Элементы.ОбработчикиОбновления;
		Если ТекущийЭлемент.ТекущийЭлемент  <> Неопределено И ТекущийЭлемент.ТекущийЭлемент.Имя <> "ОбработчикиОбновленияПроцедура" Тогда
			ТекущийЭлемент.ТекущийЭлемент = Элементы.ОбработчикиОбновленияПроцедура;
		КонецЕсли;
	КонецЕсли;

	Если ЗначениеЗаполнено(Результат) Тогда
    // TODO: допиши оставшуюся часть

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

	Если ТекущийЭлемент <> Неопределено И ТекущийЭлемент.Имя <> "ОбработчикиОбновления" Тогда
		ТекущийЭлемент = Элементы.ОбработчикиОбновления;
		Если ТекущийЭлемент.ТекущийЭлемент  <> Неопределено И ТекущийЭлемент.ТекущийЭлемент.Имя <> "ОбработчикиОбновленияПроцедура" Тогда
			ТекущийЭлемент.ТекущийЭлемент = Элементы.ОбработчикиОбновленияПроцедура;
		КонецЕсли;
	КонецЕсли;

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

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

&НаКлиенте

Процедура ОбработчикиОбновленияПередУдалением(Элемент, Отказ)

	Отказ = Истина;
	ОбработчикОтвета = Новый ОписаниеОповещения("ЗавершениеУдаленияОписанияОбработчика", ЭтотОбъект);
	ТекстВопроса = НСтр("ru = 'Удалить описание обработчика?'");
	ПоказатьВопрос(ОбработчикОтвета, ТекстВопроса, РежимДиалогаВопрос.ДаНет);

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

&НаКлиенте

Процедура ЗавершениеУдаленияОписанияОбработчика(Результат, ДополнительныеСвойства) Экспорт

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

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

&НаКлиенте

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

	ИсходнаяТекущаяСтрока = Элемент.ТекущаяСтрока;

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

&НаКлиенте

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

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

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

&НаКлиенте

Процедура ОбработчикиОбновленияТехПроектПриИзменении(Элемент)

	ЗаполнитьБыстрыеОтборы();

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

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

#Область ОбработчикиКомандФормы

&НаКлиенте

Процедура ЗагрузитьОбработчики(Команда)

	ОбработчикиТехПроекта = ЗагрузитьСписокОбработчиковТехПроекта();
	ЗагрузитьИзТекущейКонфигурацииНаСервере(ОбработчикиТехПроекта);
	Элементы.ГруппаНастройкиЗагрузкиВыгрузки.Скрыть();

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

&НаКлиенте

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

	ПостроитьОчередьНаСервере();
	Элементы.ГруппаНастройкиЗагрузкиВыгрузки.Скрыть();

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

&НаКлиенте

Процедура СохранитьВРепозиторий(Команда)

	Если НЕ ПравильноУказанКаталогSRC() Тогда
		Возврат;
	КонецЕсли;

	ЗаписатьДанныеНаДиск();
	Элементы.ГруппаНастройкиЗагрузкиВыгрузки.Скрыть();
	Модифицированность = Ложь;

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

&НаКлиенте

Процедура СохранитьВРепозиторийВсеОбработчики(Команда)

	Если НЕ ПравильноУказанКаталогSRC() Тогда
		Возврат;
	КонецЕсли;

	ПараметрыСохранения = Новый Структура("ВсеОбработчики", Истина);
	ОбработчикОтвета = Новый ОписаниеОповещения("ЗавершениеСохраненияВРепозиторий", ЭтотОбъект, ПараметрыСохранения);
	ТекстВопроса = НСтр("ru = 'Внимание! Будут перезаписаны все процедуры описания обработчиков обновления.
						|Продолжить?'");
	ПоказатьВопрос(ОбработчикОтвета, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
	Элементы.ГруппаНастройкиЗагрузкиВыгрузки.Скрыть();
	Модифицированность = Ложь;

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

&НаКлиенте

Процедура ПоказатьКодОписанияОбработчиковОбновления(Команда)

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

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

&НаКлиенте

Процедура УстановитьНомерСборкиОбработчикам(Команда)

	ДополнительныеПараметры = Новый Структура("НомерСборкиДляОбработчиков", Истина);
	ОбработчикОтвета = Новый ОписаниеОповещения("ЗавершениеВводаНомераСборки", ЭтотОбъект, ДополнительныеПараметры);
	НомераВерсии = СтрРазделить(ВерсияКонфигурации,".");
	ПоказатьВводЧисла(ОбработчикОтвета, Число(НомераВерсии[3])+1, НСтр("ru = 'Новый номер сборки'"));

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

&НаКлиенте

Процедура ЗаписатьСписокОбработчиковТехПроекта(Команда)

	СохранитьСписокОбработчиковТехПроекта();

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

&НаКлиенте

Процедура ПереключитьРежимФормы(Команда)

	Если РасширенныйРежимФормы Тогда
		УстановитьУпрощенныйРежим();
	Иначе
		УстановитьРасширенныйРежим();
	КонецЕсли;

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

&НаКлиенте

Процедура СохранитьВФайл(Команда)

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

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

	#КонецЕсли

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

&НаКлиенте

Процедура ЗагрузитьИзФайла(Команда)

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

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

	#КонецЕсли

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

#Область ПодменюОтладки

&НаКлиенте

Процедура ПроверитьКонфликты(Команда)

	ПроверитьКонфликтыНаСервере();

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

&НаКлиенте

Процедура ПриДобавленииОбработчиковОбновления_Вызовы(Команда)

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

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

&НаКлиенте

Процедура ПриДобавленииОбработчиковОбновления_Описания(Команда)

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

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

&НаКлиенте

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

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

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

&НаКлиенте

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

	ДанныеТаблиц = ВыгрузитьТаблицыВMXL();
	Для Каждого Таблица Из ДанныеТаблиц Цикл
		Таблица.Значение.Показать(Таблица.Ключ);
	КонецЦикла;

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

&НаКлиенте

Tasks-develope/src/cf/DataProcessors/ОписаниеОбработчиковОбновления/Forms/ФормаСпискаОбработчиков/Ext/Form/Module.bsl


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

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

Процедура ЗагрузитьИзТекущейКонфигурацииНаСервере(ОбработчикиТехПроекта = Неопределено)
Обработка = ОбъектОбработки();
	Обработка.ЗагрузитьОбработчики();
	ЗначениеВРеквизитФормы(Обработка, "Объект");

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

[Assistant]
Процедура ЗагрузитьИзТекущейКонфигурацииНаСервере(ОбработчикиТехПроекта = Неопределено)

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

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

	ОбновитьДанныеФормы(Обработка);

	ТекущаяБиблиотека = "";
	Модифицированность = Ложь;

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

&НаКлиенте

Функция ЗагрузитьСписокОбработчиковТехПроекта()

	ИмяФайла = КаталогНастроек() + "tech-project.updaters";

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

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

	Возврат ОбработчикиТехПроекта;

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

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

#Область СохранениеВРепозиторий

&НаКлиенте

Функция ПравильноУказанКаталогSRC()

	Результат = Истина;
	Если НЕ ЗначениеЗаполнено(Объект.КаталогSRC) Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю(
			НСтр("ru = 'Не указан путь к каталогу SRC'"),
			,
			,
			"Объект.КаталогSRC");
		Результат = Ложь;
	КонецЕсли;

	КаталогНаДиске = Новый Файл(Объект.КаталогSRC);
	Если НЕ КаталогНаДиске.Существует() Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю(
			НСтр("ru = 'Не найден каталог SRC'"),
			,
			,
			"Объект.КаталогSRC");
		Результат = Ложь;
	КонецЕсли;

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

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

&НаКлиенте

Процедура ЗавершениеСохраненияВРепозиторий(Результат, ДополнительныеПараметры) Экспорт

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

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

&НаКлиенте

Процедура ЗаписатьДанныеНаДиск(ВсеОбработчики = Ложь)

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

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

&НаКлиенте


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

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

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

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

[Assistant]
Процедура ИнициализироватьНастройкиПошаговогоМастера()
	НастройкиМастера = Новый Структура;
	НастройкиМастера.Вставить("Шаги", Новый Массив);
	НастройкиМастера.Вставить("ТекущийШаг", Неопределено);

	// Идентификаторы частей интерфейса.
	НастройкиМастера.Вставить("ГруппаСтраниц", Элементы.ШагиМастера.Имя);
	НастройкиМастера.Вставить("КнопкаДалее",   Элементы.ШагМастераДалее.Имя);
	НастройкиМастера.Вставить("КнопкаНазад",   Элементы.ШагМастераНазад.Имя);
	НастройкиМастера.Вставить("КнопкаОтмена",  Элементы.ШагМастераОтмена.Имя);

	// Для обработки длительных операций.
	НастройкиМастера.Вставить("ПоказатьДиалогПередЗакрытием", Ложь);

	// По умолчанию все отключено.
	Элементы.ШагМастераДалее.Видимость  = Ложь;
	Элементы.ШагМастераНазад.Видимость  = Ложь;
	Элементы.ШагМастераОтмена.Видимость = Ложь;
КонецПроцедуры

// Параметры:
//  Страница - ГруппаФормы
//
// Возвращаемое значение:
//  Структура:
//    * Индекс - Число
//    * ИмяСтраницы - Строка
//    * КнопкаНазад - см. КнопкаМастера
//    * КнопкаДалее - см. КнопкаМастера
//    * КнопкаОтмена - см. КнопкаМастера
//
&НаСервере

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

	ОписаниеШага.КнопкаНазад = КнопкаМастера();
	ОписаниеШага.КнопкаНазад.Заголовок = НСтр("ru = '< Назад'");

	ОписаниеШага.КнопкаДалее = КнопкаМастера();
	ОписаниеШага.КнопкаДалее.КнопкаПоУмолчанию = Истина;
	ОписаниеШага.КнопкаДалее.Заголовок = НСтр("ru = 'Далее >'");

	ОписаниеШага.КнопкаОтмена = КнопкаМастера();
	ОписаниеШага.КнопкаОтмена.Заголовок = НСтр("ru = 'Отмена'");

	НастройкиМастера.Шаги.Добавить(ОписаниеШага);

	ОписаниеШага.Индекс = НастройкиМастера.Шаги.ВГраница();
	Возврат ОписаниеШага;
КонецФункции

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

Процедура УстановитьВидимостьДоступность(Форма)

	Элементы = Форма.Элементы;
	НастройкиМастера = Форма.НастройкиМастера;
	ТекущийШаг = НастройкиМастера.ТекущийШаг;

	// Переключение страницы.
	Элементы[НастройкиМастера.ГруппаСтраниц].ТекущаяСтраница = Элементы[ТекущийШаг.ИмяСтраницы];

	// Обновление кнопок.
	ОбновитьСвойстваКнопкиМастера(Элементы[НастройкиМастера.КнопкаДалее],  ТекущийШаг.КнопкаДалее);
	ОбновитьСвойстваКнопкиМастера(Элементы[НастройкиМастера.КнопкаНазад],  ТекущийШаг.КнопкаНазад);
	ОбновитьСвойстваКнопкиМастера(Элементы[НастройкиМастера.КнопкаОтмена], ТекущийШаг.КнопкаОтмена);

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

&НаКлиенте

Процедура ПерейтиНаШагМастера(Знач ШагИлиИндексИлиГруппаФормы)

	// Поиск шага.
	Тип = ТипЗнч(ШагИлиИндексИлиГруппаФормы);
	Если Тип = Тип("Структура") Тогда
		ОписаниеШага = ШагИлиИндексИлиГруппаФормы;
	ИначеЕсли Тип = Тип("Число") Тогда
		ИндексШага = ШагИлиИндексИлиГруппаФормы;
		Если ИндексШага < 0 Тогда
			ВызватьИсключение НСтр("ru = 'Попытка выхода назад из первого шага мастера'");
		ИначеЕсли ИндексШага > НастройкиМастера.Шаги.ВГраница() Тогда
			ВызватьИсключение НСтр("ru = 'Попытка выхода за последний шаг мастера'");
		КонецЕсли;
		ОписаниеШага = НастройкиМастера.Шаги[ИндексШага];
	Иначе
		ШагНайден = Ложь;
		ИмяИскомойСтраницы = ШагИлиИндексИлиГруппаФормы.Имя;
		Для Каждого ОписаниеШага Из НастройкиМастера.Шаги Цикл
			Если ОписаниеШага.ИмяСтраницы = ИмяИскомойСтраницы Тогда
				ШагНайден = Истина;
				Прервать;
			КонецЕсли;
		КонецЦикла;
		Если Не ШагНайден Тогда
			ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'Не найден шаг ""%1"".'"),
				ИмяИскомойСтраницы);
		КонецЕсли;
	КонецЕсли;

	// Переключение шага.
	НастройкиМастера.ТекущийШаг = ОписаниеШага;

	// Обновление видимости.
	УстановитьВидимостьДоступность(ЭтотОбъект);
	ПриАктивацииШагаМастера();

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

#Область СобытияМастера

&НаКлиенте

Процедура ПриАктивацииШагаМастера()

	ТекущаяСтраница = Элементы.ШагиМастера.ТекущаяСтраница;

	Если ТекущаяСтраница = Элементы.ШагПоискНеВыполнялся Тогда

		Элементы.Шапка.Доступность = Истина;

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

		// Представление правил поиска.
		Союз = " " + НСтр("ru = 'И'") + " ";
		ТекстПравил = "";
		Для Каждого Правило Из ПравилаПоиска Цикл
			Если Правило.Правило = "Равно" Тогда
				Сравнение = Правило.ПредставлениеРеквизита + " " + НСтр("ru = 'совпадает'");
			ИначеЕсли Правило.Правило = "Подобно" Тогда
				Сравнение = Правило.ПредставлениеРеквизита + " " + НСтр("ru = 'совпадает по похожим словам'");
			Иначе
				Продолжить;
			КонецЕсли;
			ТекстПравил = ?(ТекстПравил = "", "", ТекстПравил + Союз) + Сравнение;
		КонецЦикла;
		Если УчитыватьПрикладныеПравила Тогда
			Для Позиция = 1 По СтрЧислоСтрок(ОписаниеПрикладныхПравил) Цикл
				СтрокаПравила = СокрЛП(СтрПолучитьСтроку(ОписаниеПрикладныхПравил, Позиция));
				Если Не ПустаяСтрока(СтрокаПравила) Тогда
					ТекстПравил = ?(ТекстПравил = "", "", ТекстПравил + Союз) + СтрокаПравила;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		Если ПустаяСтрока(ТекстПравил) Тогда
			ТекстПравил = НСтр("ru = 'Правила не заданы'");
		КонецЕсли;

		Если СкрыватьНезначимыеДубли Тогда
			СтрокаПравил = НСтр("ru = 'не показывать помеченные на удаление без мест использования'");
			ТекстПравил = ?(ТекстПравил = "", "", ТекстПравил + Союз) + СтрокаПравил;
		КонецЕсли;

		ПредставлениеПравилПоиска = ТекстПравил;

		// Доступность.
		Элементы.ПредставлениеПравилОтбора.Доступность = Не ПустаяСтрока(ОбластьПоискаДублей);
		Элементы.ПредставлениеПравилПоиска.Доступность = Не ПустаяСтрока(ОбластьПоискаДублей);

	ИначеЕсли ТекущаяСтраница = Элементы.ШагВыполнениеПоиска Тогда

		Если Не ЭтоАдресВременногоХранилища(АдресСхемыКомпоновки) Тогда
			Возврат; // Не инициализировано.
		КонецЕсли;
		Элементы.Шапка.Доступность = Ложь;
		НастройкиМастера.ПоказатьДиалогПередЗакрытием = Истина;
		НайтиИУдалитьДублиКлиент();

	ИначеЕсли ТекущаяСтраница = Элементы.ШагВыборОсновногоЭлемента Тогда

		Элементы.Шапка.Доступность = Истина;
		Элементы.ПовторитьПоиск.Видимость = Истина;
		РазвернутьГруппуДублей();

	ИначеЕсли ТекущаяСтраница = Элементы.ШагВыполнениеУдаления Тогда

		Элементы.Шапка.Доступность = Ложь;
		НастройкиМастера.ПоказатьДиалогПередЗакрытием = Истина;
		НайтиИУдалитьДублиКлиент();

	ИначеЕсли ТекущаяСтраница = Элементы.ШагУспешноеУдаление Тогда

		Элементы.Шапка.Доступность = Ложь;

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

	ИначеЕсли ТекущаяСтраница = Элементы.ШагНеудачныеЗамены Тогда

		Элементы.Шапка.Доступность = Ложь;

	ИначеЕсли ТекущаяСтраница = Элементы.ШагДублейНеНайдено Тогда

		Элементы.Шапка.Доступность = Истина;
		Если ПустаяСтрока(ОписаниеОшибкиПоискаДублей) Тогда
			Сообщение = НСтр("ru = 'Не обнаружено дублей по указанным параметрам.'");
		Иначе
			Сообщение = ОписаниеОшибкиПоискаДублей;
		КонецЕсли;
		Элементы.ДублейНеНайдено.ОтображениеСостояния.Текст = Сообщение + Символы.ПС
			+ НСтр("ru = 'Измените условия и нажмите ""Найти дубли""'");

	ИначеЕсли ТекущаяСтраница = Элементы.ШагВозниклаОшибка Тогда

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

	КонецЕсли;

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

&НаКлиенте


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

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

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ИдентификаторОсновнойФормы = Параметры.ИдентификаторОсновнойФормы;

	КомпоновщикПредварительногоОтбора = Новый КомпоновщикНастроекКомпоновкиДанных;
	КомпоновщикПредварительногоОтбора.Инициализировать(
		Новый ИсточникДоступныхНастроекКомпоновкиДанных(Параметры.АдресСхемыКомпоновки) );

	АдресНастроекКомпоновщикаОтбора = Параметры.АдресНастроекКомпоновщикаОтбора;
	КомпоновщикПредварительногоОтбора.ЗагрузитьНастройки(ПолучитьИзВременногоХранилища(АдресНастроекКомпоновщикаОтбора));
	УдалитьИзВременногоХранилища(АдресНастроекКомпоновщикаОтбора);
    // TODO: допиши оставшуюся часть

[Assistant]
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2023, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

// Ожидаются параметры:
//
//     ИдентификаторОсновнойФормы      - УникальныйИдентификатор - Идентификатор формы, через хранилище которой
//                                                                 происходит обмен.
//     АдресСхемыКомпоновки            - Строка - Адрес временного хранилища схемы компоновки, для которой
//                                                редактируются настройки.
//     АдресНастроекКомпоновщикаОтбора - Строка - Адрес временного хранилища редактируемых настроек компоновщика.
//     ПредставлениеОбластиОтбора      - Строка - Представление для формирования заголовка.
//
// Возвращается результатом выбора:
//
//     Неопределено - Отказ от редактирования.
//     Строка       - Адрес временного хранилища новых настроек компоновщика.
//

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	ИдентификаторОсновнойФормы = Параметры.ИдентификаторОсновнойФормы;

	КомпоновщикПредварительногоОтбора = Новый КомпоновщикНастроекКомпоновкиДанных;
	КомпоновщикПредварительногоОтбора.Инициализировать(
		Новый ИсточникДоступныхНастроекКомпоновкиДанных(Параметры.АдресСхемыКомпоновки) );

	АдресНастроекКомпоновщикаОтбора = Параметры.АдресНастроекКомпоновщикаОтбора;
	КомпоновщикПредварительногоОтбора.ЗагрузитьНастройки(ПолучитьИзВременногоХранилища(АдресНастроекКомпоновщикаОтбора));
	УдалитьИзВременногоХранилища(АдресНастроекКомпоновщикаОтбора);

	Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Правила отбора ""%1""'"), Параметры.ПредставлениеОбластиОтбора);

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

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

&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)

	Если Модифицированность И ЭтоМобильныйКлиент Тогда
		ОповеститьОВыборе(АдресНастроекКомпоновщикаОтбора());
	КонецЕсли;

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

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура Выбрать(Команда)

	Если Модифицированность Тогда
		ОповеститьОВыборе(АдресНастроекКомпоновщикаОтбора());
	Иначе
		Закрыть();
	КонецЕсли;

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

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

#Область СлужебныеПроцедурыИФункции

&НаСервере
Функция АдресНастроекКомпоновщикаОтбора()
	Возврат ПоместитьВоВременноеХранилище(КомпоновщикПредварительногоОтбора.Настройки, ИдентификаторОсновнойФормы)
КонецФункции

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


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

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

Процедура ИнициализироватьРеквизитыФормы()
УзелОбмена = Параметры.УзелОбмена;

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

	НаименованиеПриложения = Строка(УзелОбмена);
    // TODO: допиши оставшуюся часть

[Assistant]
Процедура ИнициализироватьРеквизитыФормы()

	УзелОбмена = Параметры.УзелОбмена;

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

	НаименованиеПриложения = Строка(УзелОбмена);

	Параметры.Свойство("ЭтоОбменСПриложениемВСервисе", ЭтоОбменСПриложениемВСервисе);
	Параметры.Свойство("ОбластьДанныхКорреспондента",  ОбластьДанныхКорреспондента);

	ИнициализироватьПараметрыТранспорта();

	УстановитьНаименованиеПриложенияВНадписяхФормы();

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

&НаСервере

Процедура ИнициализироватьПараметрыТранспорта()

	НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспорта(УзелОбмена);
	НастройкиТранспорта.Свойство("ВидТранспортаСообщенийОбменаПоУмолчанию", ВидТранспорта);
	НастройкиТранспорта.Свойство("WSКонечнаяТочкаКорреспондента", КонечнаяТочка);

	Если Не ЗначениеЗаполнено(ВидТранспорта) Тогда
		ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим;
	КонецЕсли;

	ПодключениеЧерезВнешнееСоединение = (ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.COM);

	ИспользоватьПрогресс = Не ЭтоОбменСПриложениемВСервисе
		И Не ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS
		И Не ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим;

	ЗапроситьПароль              = Ложь;
	ПроверкаПодключенияВыполнена = Ложь;
	ВыгрузкаДанныхВыполнена      = Ложь;

	ДоступнаНастройкаТранспорта  = Не (ЭтоОбменСПриложениемВСервисе
		Или ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим);

	Если ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда

		НастройкиТранспорта = РегистрыСведений.НастройкиТранспортаОбменаДанными.НастройкиТранспортаWS(УзелОбмена);

		ЗапроситьПароль = Не (НастройкиТранспорта.WSЗапомнитьПароль
			Или ОбменДаннымиСервер.ПарольСинхронизацииДанныхЗадан(УзелОбмена));

	ИначеЕсли ВидТранспорта = Перечисления.ВидыТранспортаСообщенийОбмена.WSПассивныйРежим Тогда

		ПроверкаПодключенияВыполнена = Истина;
		ВыгрузкаДанныхВыполнена      = Истина;

	КонецЕсли;

	ЗаполнитьТаблицуПереходов();

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

&НаСервере

Процедура УстановитьНаименованиеПриложенияВНадписяхФормы()

	Элементы.ДекорацияНадписьПароль.Заголовок =
		СтрШаблон(Элементы.ДекорацияНадписьПароль.Заголовок, НаименованиеПриложения);

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

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

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

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

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

#Область СценарииРаботыПомощника

&НаСервере

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

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

	Возврат СтрокаПереходов;

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

&НаСервере

Процедура ЗаполнитьТаблицуПереходов()

	ТаблицаПереходов.Очистить();

	НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаНачало", "СтраницаНавигацияНачало");
	НовыйПереход.ИмяОбработчикаПриОткрытии = "Подключаемый_СтраницаНачало_ПриОткрытии";

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

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

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

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

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

	НовыйПереход = ДобавитьСтрокуТаблицыПереходов("СтраницаОкончание", "СтраницаНавигацияОкончание");
	НовыйПереход.ИмяОбработчикаПриОткрытии = "Подключаемый_СтраницаОкончание_ПриОткрытии";

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

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

#Область ОбработчикиСобытийПереходов

&НаКлиенте

Функция Подключаемый_СтраницаНачало_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее)

	Элементы.РежимВыгрузкиДанных.Доступность = Не НачальнаяВыгрузка;

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

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

&НаКлиенте

Функция Подключаемый_СтраницаНастройкиПодключения_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее)

	ПропуститьСтраницу = ЭтоПереходДалее;

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

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

&НаКлиенте

Функция Подключаемый_СтраницаЗапросПароля_ПриПереходеДалее(Отказ)

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

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

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

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

&НаКлиенте

Функция Подключаемый_СтраницаПроверкаПодключения_ДлительнаяОперация(Отказ, ПерейтиДалее)

	ПерейтиДалее = Ложь;
	ПриНачалеПроверкиПодключения();

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

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

&НаКлиенте

Функция Подключаемый_СтраницаРегистрацияИзменений_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее)

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

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

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

&НаКлиенте

Функция Подключаемый_СтраницаРегистрацияИзменений_ДлительнаяОперация(Отказ, ПерейтиДалее)

	ПерейтиДалее = Ложь;
	ПриНачалеРегистрацииИзменений();

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

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

&НаКлиенте

Функция Подключаемый_СтраницаВыгрузкаДанных_ПриОткрытии(Отказ, ПропуститьСтраницу, ЭтоПереходДалее)

	ПропуститьСтраницу = Не ПроверкаПодключенияВыполнена
		Или Не РегистрацияИзмененийВыполнена;

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

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

&НаКлиенте

Функция Подключаемый_СтраницаВыгрузкаДанных_ДлительнаяОперация(Отказ, ПерейтиДалее)

	ПерейтиДалее = Ложь;
	ПриНачалеВыгрузкиДанныхДляСопоставления();

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

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

&НаКлиенте

Tasks-develope/src/cf/DataProcessors/ПомощникИнтерактивногоОбменаДанными/Forms/ВыгрузкаДанныхДляСопоставления/Ext/Form/Module.bsl


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

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

Процедура ЗаписатьПараметрыПодключения(ЗаписьXML, НастройкиПодключения)
ЗаписьXML.ЗаписатьНачалоЭлемента("ОсновныеПараметрыОбмена"); // @Non-NLS

	ИмяПланаОбмена = ОбменДаннымиТрансляцияФорматаПовтИсп.ТранслироватьИмя(НастройкиПодключения.ИмяПланаОбмена, "ru");
	ДобавитьЗаписьXML(ЗаписьXML, ИмяПланаОбмена,                              "ИмяПланаОбмена"); // @Non-NLS

	ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеЭтойБазы,   "НаименованиеВторойБазы"); // @Non-NLS
	ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеВторойБазы, "НаименованиеЭтойБазы"); // @Non-NLS

	ДобавитьЗаписьXML(ЗаписьXML, КодУзла(НастройкиПодключения), "КодНовогоУзлаВторойБазы"); // @Non-NLS
	ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ПрефиксИнформационнойБазыПриемника, "ПрефиксИнформационнойБазыИсточника"); // @Non-NLS

	// Настройки транспорта сообщений обмена.
	Если ЗначениеЗаполнено(НастройкиПодключения.ВидТранспортаСообщенийОбмена)
		И НастройкиПодключения.ВидТранспортаСообщенийОбмена <> Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда

		Если Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский Тогда
			ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ВидТранспортаСообщенийОбмена, "ВидТранспортаСообщенийОбмена"); // @Non-NLS
		Иначе
			ДобавитьНастройкуВидаТранспортаДляРусскойВерсии(ЗаписьXML, НастройкиПодключения.ВидТранспортаСообщенийОбмена);
		КонецЕсли;

	Иначе
		ДобавитьЗаписьXML(ЗаписьXML, Неопределено, "ВидТранспортаСообщенийОбмена"); // @Non-NLS
	КонецЕсли;
	ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ПарольАрхиваСообщенияОбмена,  "ПарольАрхиваСообщенияОбмена"); // @Non-NLS

	Если НастройкиПодключения.ИспользоватьПараметрыТранспортаEMAIL Тогда

		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.EMAILМаксимальныйДопустимыйРазмерСообщения, "EMAILМаксимальныйДопустимыйРазмерСообщения"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.EMAILСжиматьФайлИсходящегоСообщения,        "EMAILСжиматьФайлИсходящегоСообщения"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.EMAILУчетнаяЗапись,                         "EMAILУчетнаяЗапись"); // @Non-NLS

	КонецЕсли;

	Если НастройкиПодключения.ИспользоватьПараметрыТранспортаFILE Тогда

		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FILEКаталогОбменаИнформацией,       "FILEКаталогОбменаИнформацией"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FILEСжиматьФайлИсходящегоСообщения, "FILEСжиматьФайлИсходящегоСообщения"); // @Non-NLS

	КонецЕсли;

	Если НастройкиПодключения.ИспользоватьПараметрыТранспортаFTP Тогда

		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСжиматьФайлИсходящегоСообщения,                  "FTPСжиматьФайлИсходящегоСообщения"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения, "FTPСоединениеМаксимальныйДопустимыйРазмерСообщения"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПароль,                                "FTPСоединениеПароль"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПассивноеСоединение,                   "FTPСоединениеПассивноеСоединение"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПользователь,                          "FTPСоединениеПользователь"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПорт,                                  "FTPСоединениеПорт"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПуть,                                  "FTPСоединениеПуть"); // @Non-NLS

	КонецЕсли;

	Если НастройкиПодключения.ИспользоватьПараметрыТранспортаCOM Тогда

		ПараметрыПодключенияИБ = ОбщегоНазначенияКлиентСервер.ПолучитьПараметрыПодключенияИзСтрокиСоединенияИнформационнойБазы(
			СтрокаСоединенияИнформационнойБазы());

		ВариантРаботыИнформационнойБазы             = ПараметрыПодключенияИБ.ВариантРаботыИнформационнойБазы;
		ИмяИнформационнойБазыНаСервере1СПредприятия = ПараметрыПодключенияИБ.ИмяИнформационнойБазыНаСервере1СПредприятия;
    // TODO: допиши оставшуюся часть

[Assistant]
Процедура ЗаписатьПараметрыПодключения(ЗаписьXML, НастройкиПодключения)

	ЗаписьXML.ЗаписатьНачалоЭлемента("ОсновныеПараметрыОбмена"); // @Non-NLS

	ИмяПланаОбмена = ОбменДаннымиТрансляцияФорматаПовтИсп.ТранслироватьИмя(НастройкиПодключения.ИмяПланаОбмена, "ru");
	ДобавитьЗаписьXML(ЗаписьXML, ИмяПланаОбмена,                              "ИмяПланаОбмена"); // @Non-NLS

	ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеЭтойБазы,   "НаименованиеВторойБазы"); // @Non-NLS
	ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеВторойБазы, "НаименованиеЭтойБазы"); // @Non-NLS

	ДобавитьЗаписьXML(ЗаписьXML, КодУзла(НастройкиПодключения), "КодНовогоУзлаВторойБазы"); // @Non-NLS
	ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ПрефиксИнформационнойБазыПриемника, "ПрефиксИнформационнойБазыИсточника"); // @Non-NLS

	// Настройки транспорта сообщений обмена.
	Если ЗначениеЗаполнено(НастройкиПодключения.ВидТранспортаСообщенийОбмена)
		И НастройкиПодключения.ВидТранспортаСообщенийОбмена <> Перечисления.ВидыТранспортаСообщенийОбмена.WS Тогда

		Если Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Русский Тогда
			ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ВидТранспортаСообщенийОбмена, "ВидТранспортаСообщенийОбмена"); // @Non-NLS
		Иначе
			ДобавитьНастройкуВидаТранспортаДляРусскойВерсии(ЗаписьXML, НастройкиПодключения.ВидТранспортаСообщенийОбмена);
		КонецЕсли;

	Иначе
		ДобавитьЗаписьXML(ЗаписьXML, Неопределено, "ВидТранспортаСообщенийОбмена"); // @Non-NLS
	КонецЕсли;
	ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ПарольАрхиваСообщенияОбмена,  "ПарольАрхиваСообщенияОбмена"); // @Non-NLS

	Если НастройкиПодключения.ИспользоватьПараметрыТранспортаEMAIL Тогда

		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.EMAILМаксимальныйДопустимыйРазмерСообщения, "EMAILМаксимальныйДопустимыйРазмерСообщения"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.EMAILСжиматьФайлИсходящегоСообщения,        "EMAILСжиматьФайлИсходящегоСообщения"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.EMAILУчетнаяЗапись,                         "EMAILУчетнаяЗапись"); // @Non-NLS

	КонецЕсли;

	Если НастройкиПодключения.ИспользоватьПараметрыТранспортаFILE Тогда

		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FILEКаталогОбменаИнформацией,       "FILEКаталогОбменаИнформацией"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FILEСжиматьФайлИсходящегоСообщения, "FILEСжиматьФайлИсходящегоСообщения"); // @Non-NLS

	КонецЕсли;

	Если НастройкиПодключения.ИспользоватьПараметрыТранспортаFTP Тогда

		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСжиматьФайлИсходящегоСообщения,                  "FTPСжиматьФайлИсходящегоСообщения"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеМаксимальныйДопустимыйРазмерСообщения, "FTPСоединениеМаксимальныйДопустимыйРазмерСообщения"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПароль,                                "FTPСоединениеПароль"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПассивноеСоединение,                   "FTPСоединениеПассивноеСоединение"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПользователь,                          "FTPСоединениеПользователь"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПорт,                                  "FTPСоединениеПорт"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.FTPСоединениеПуть,                                  "FTPСоединениеПуть"); // @Non-NLS

	КонецЕсли;

	Если НастройкиПодключения.ИспользоватьПараметрыТранспортаCOM Тогда

		ПараметрыПодключенияИБ = ОбщегоНазначенияКлиентСервер.ПолучитьПараметрыПодключенияИзСтрокиСоединенияИнформационнойБазы(
			СтрокаСоединенияИнформационнойБазы());

		ВариантРаботыИнформационнойБазы             = ПараметрыПодключенияИБ.ВариантРаботыИнформационнойБазы;
		ИмяИнформационнойБазыНаСервере1СПредприятия = ПараметрыПодключенияИБ.ИмяИнформационнойБазыНаСервере1СПредприятия;
		ИмяСервера1СПредприятия                     = ПараметрыПодключенияИБ.ИмяСервера1СПредприятия;
		КаталогИнформационнойБазы                   = ПараметрыПодключенияИБ.КаталогИнформационнойБазы;

		ПользовательИБ   = ПользователиИнформационнойБазы.ТекущийПользователь();
		АутентификацияОС = ПользовательИБ.АутентификацияОС;
		ИмяПользователя  = ПользовательИБ.Имя;

		ДобавитьЗаписьXML(ЗаписьXML, ВариантРаботыИнформационнойБазы,             "COMВариантРаботыИнформационнойБазы"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, ИмяИнформационнойБазыНаСервере1СПредприятия, "COMИмяИнформационнойБазыНаСервере1СПредприятия"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, ИмяСервера1СПредприятия,                     "COMИмяСервера1СПредприятия"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, КаталогИнформационнойБазы,                   "COMКаталогИнформационнойБазы"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, АутентификацияОС,                            "COMАутентификацияОперационнойСистемы"); // @Non-NLS
		ДобавитьЗаписьXML(ЗаписьXML, ИмяПользователя,                             "COMИмяПользователя");

	КонецЕсли;

	ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ИспользоватьПараметрыТранспортаEMAIL, "ИспользоватьПараметрыТранспортаEMAIL"); // @Non-NLS
	ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ИспользоватьПараметрыТранспортаFILE,  "ИспользоватьПараметрыТранспортаFILE"); // @Non-NLS
	ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.ИспользоватьПараметрыТранспортаFTP,   "ИспользоватьПараметрыТранспортаFTP"); // @Non-NLS

	// Поддержка файла настроек обмена формата версии 1.0.
	ДобавитьЗаписьXML(ЗаписьXML, НастройкиПодключения.НаименованиеЭтойБазы, "НаименованиеНастройкиВыполненияОбмена"); // @Non-NLS

	ДобавитьЗаписьXML(ЗаписьXML, КодУзла(НастройкиПодключения), "КодНовогоУзла"); // @Non-NLS

	КодУзлаИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НастройкиПодключения.УзелИнформационнойБазы, "Код"); // @Non-NLS

	ДобавитьЗаписьXML(ЗаписьXML, КодУзлаИБ, "КодПредопределенногоУзла"); // @Non-NLS

	НомерОтправленного = НастройкиПодключения.УзелИнформационнойБазы.НомерОтправленного;
	Если НомерОтправленного > 0 Тогда
		ДобавитьЗаписьXML(ЗаписьXML, НомерОтправленного, "НомерОтправленного"); // @Non-NLS
	КонецЕсли;

	НомерПринятого = НастройкиПодключения.УзелИнформационнойБазы.НомерПринятого;
	Если НомерПринятого > 0 Тогда
		ДобавитьЗаписьXML(ЗаписьXML, НомерПринятого, "НомерПринятого"); // @Non-NLS
	КонецЕсли;

	ЗаписьXML.ЗаписатьКонецЭлемента(); // ОсновныеПараметрыОбмена

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


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

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

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

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

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

	КонецЕсли;

	НастройкиВнешниеСистемы = Неопределено;
	Если Настройки.Свойство("НастройкиВнешниеСистемы", НастройкиВнешниеСистемы) Тогда

		Элементы.ГруппаОбменВнешниеСистемы.Видимость = Истина;

		Если НастройкиВнешниеСистемы.КодОшибки = "" Тогда

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

		ИначеЕсли НастройкиВнешниеСистемы.КодОшибки = "НеверныйЛогинИлиПароль" Тогда
    // TODO: допиши оставшуюся часть

[Assistant]
Процедура ДобавитьКомандыСозданияНовогоОбмена(Настройки)

	СтандартныеНастройки = Неопределено;
	Если Настройки.Свойство("СтандартныеНастройки", СтандартныеНастройки) Тогда

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

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

	КонецЕсли;

	НастройкиВнешниеСистемы = Неопределено;
	Если Настройки.Свойство("НастройкиВнешниеСистемы", НастройкиВнешниеСистемы) Тогда

		Элементы.ГруппаОбменВнешниеСистемы.Видимость = Истина;

		Если НастройкиВнешниеСистемы.КодОшибки = "" Тогда

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

		ИначеЕсли НастройкиВнешниеСистемы.КодОшибки = "НеверныйЛогинИлиПароль" Тогда

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

		ИначеЕсли ЗначениеЗаполнено(НастройкиВнешниеСистемы.КодОшибки) Тогда

			Элементы.ПанельОбменВнешниеСистемы.ТекущаяСтраница = Элементы.СтраницаВнешниеСистемыОшибка;

		КонецЕсли;

	Иначе

		Элементы.ГруппаОбменВнешниеСистемы.Видимость = Ложь;

	КонецЕсли;

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

// Параметры:
//   ТаблицаНастройки - ТаблицаЗначений - таблица доступных настроек синхронизации.
//   РодительскаяГруппа - ГруппаФормы - родительский элемент формы.
//
&НаСервере

Процедура ДобавитьКомандыСозданияНовогоОбменаСтандартныеНастройки(ТаблицаНастройки, РодительскаяГруппа)

	ТаблицаКонфигурации = ТаблицаНастройки.Скопировать(, "ИмяКонфигурацииКорреспондента");
	ТаблицаКонфигурации.Свернуть("ИмяКонфигурацииКорреспондента");

	Для Каждого СтрокаКонфигурация Из ТаблицаКонфигурации Цикл

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

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

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

			ДобавитьКомандуСозданияНовогоОбменаДляВариантаНастройки(
				РодительскаяГруппа,
				СтрокаНастройки.ИмяПланаОбмена,
				СтрокаНастройки.ИдентификаторНастройки,
				ОписаниеВариантаНастройки);

		КонецЦикла;

	КонецЦикла;

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

&НаСервере

Процедура ДобавитьКомандыСозданияНовогоОбменаНастройкиВнешниеСистемы(ВариантыНастроек, РодительскаяГруппа)

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

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

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

	КонецЦикла;

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

&НаСервере

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

	НавигационнаяСсылка = "Настройка" + ИмяПланаОбмена + "Вариант" + ИдентификаторНастройки;

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

	ЭлементСсылка.РасширеннаяПодсказка.Заголовок = ОписаниеВариантаНастройки.КраткаяИнформацияПоОбмену;
	ЭлементСсылка.РасширеннаяПодсказка.АвтоМаксимальнаяШирина = Ложь;

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

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

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

Функция СтруктураОписанияВариантаНастройки()

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

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

&НаСервере

Процедура ПроверитьВозможностьНастройкиСинхронизацииДанных(Отказ = Ложь)

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

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

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

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

Tasks-develope/src/cf/DataProcessors/ПомощникСозданияОбменаДанными/Forms/НоваяСинхронизацияДанных/Ext/Form/Module.bsl


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

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

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

	ПутиКриптоПро = Новый Соответствие;

	ПутиКриптоПро.Вставить("Linux_x86",    ПутиКМодулямПрограммыКриптоПроНаLinux32());
	ПутиКриптоПро.Вставить("Linux_x86_64", ПутиКМодулямПрограммыКриптоПроНаLinux64());
	ПутиКриптоПро.Вставить("MacOS_x86",    ПутиКМодулямПрограммыКриптоПроНаMacOS());
	ПутиКриптоПро.Вставить("MacOS_x86_64", ПутиКМодулямПрограммыКриптоПроНаMacOS());
	ПутиКриптоПро.Вставить("Linux_E2K",    ПутиКМодулямПрограммыКриптоПроНаLinuxE2K());
	ПутиКриптоПро.Вставить("Linux_ARM64",  ПутиКМодулямПрограммыКриптоПроНаLinuxARM64());

	ПутиКМодулям.Вставить("CryptoPro", Новый ФиксированноеСоответствие(ПутиКриптоПро));

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

Функция ПутиКМодулямПрограммыКриптоПроНаLinuxE2K()

	МодулиПрограммы = Новый Массив;
	МодулиПрограммы.Добавить("/opt/cprocsp/lib/lib64/libcapi10.so");
	МодулиПрограммы.Добавить("/opt/cprocsp/lib/lib64/libcapi20.so");

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

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

Функция ПутиКМодулямПрограммыКриптоПроНаLinuxARM64()

	МодулиПрограммы = Новый Массив;
	МодулиПрограммы.Добавить("/opt/cprocsp/lib/lib64/libcapi10.so");
	МодулиПрограммы.Добавить("/opt/cprocsp/lib/lib64/libcapi20.so");

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

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

Функция ПутиКМодулямПрограммыКриптоПроНаLinux64()

	МодулиПрограммы = Новый Массив;
	МодулиПрограммы.Добавить("/opt/cprocsp/lib/amd64/libcapi10.so");
	МодулиПрограммы.Добавить("/opt/cprocsp/lib/amd64/libcapi20.so");

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

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

Функция ПутиКМодулямПрограммыКриптоПроНаLinux32()

	МодулиПрограммы = Новый Массив;
	МодулиПрограммы.Добавить("/opt/cprocsp/lib/ia32/libcapi10.so");
	МодулиПрограммы.Добавить("/opt/cprocsp/lib/ia32/libcapi20.so");

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

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

Функция ПутиКМодулямПрограммыКриптоПроНаMacOS()

	МодулиПрограммы = Новый Массив;
	МодулиПрограммы.Добавить("/opt/cprocsp/lib/libcapi10.dylib");
	МодулиПрограммы.Добавить("/opt/cprocsp/lib/libcapi20.dylib");

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

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

#Область ОбновлениеИнформационнойБазы

Процедура ОбновитьВстроенныйКриптопровайдер(Отложенно = Ложь, ОбъектовОбработано = 0, ПроблемныхОбъектов = 0) Экспорт

	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ПрограммыЭлектроннойПодписиИШифрования.Ссылка КАК Ссылка,
	|	ПрограммыЭлектроннойПодписиИШифрования.Наименование КАК Наименование,
	|	ПрограммыЭлектроннойПодписиИШифрования.ПометкаУдаления КАК ПометкаУдаления
	|ИЗ
	|	Справочник.ПрограммыЭлектроннойПодписиИШифрования КАК ПрограммыЭлектроннойПодписиИШифрования
	|ГДЕ
	|	ПрограммыЭлектроннойПодписиИШифрования.ЭтоВстроенныйКриптопровайдер";

	Блокировка = Новый БлокировкаДанных;
	Блокировка.Добавить("Справочник.ПрограммыЭлектроннойПодписиИШифрования");

	Представление = НСтр("ru = 'Встроенный криптопровайдер'");

	НачатьТранзакцию();
	Попытка
		Блокировка.Заблокировать();

		Выборка = Запрос.Выполнить().Выбрать();
		ВстроенныйКриптопровайдер = ?(Выборка.Следующий(), Выборка, Неопределено);

		Если ВстроенныйКриптопровайдер = Неопределено
		 Или ВстроенныйКриптопровайдер.Наименование <> Представление
		 Или ВстроенныйКриптопровайдер.ПометкаУдаления Тогда

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

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

		ЗафиксироватьТранзакцию();
	Исключение
		ОтменитьТранзакцию();

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

			Если Отложенно Тогда
				ПроблемныхОбъектов = ПроблемныхОбъектов + 1;

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

	Если Отложенно И ВстроенныйКриптопровайдер <> Неопределено Тогда
		ОбъектовОбработано = ОбъектовОбработано + 1;
		ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ВстроенныйКриптопровайдер.Ссылка);
	КонецЕсли;

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

// Обработчик обновления для перехода на версию 3.1.6.69

Процедура ОбновитьНаименованиеВстроенногоКриптопровайдера() Экспорт

	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ПрограммыЭлектроннойПодписиИШифрования.Ссылка КАК Ссылка
	|ИЗ
	|	Справочник.ПрограммыЭлектроннойПодписиИШифрования КАК ПрограммыЭлектроннойПодписиИШифрования
	|ГДЕ
	|	ПрограммыЭлектроннойПодписиИШифрования.ЭтоВстроенныйКриптопровайдер
	|	И ПрограммыЭлектроннойПодписиИШифрования.Наименование = &Наименование";

	Запрос.УстановитьПараметр("Наименование", НСтр("ru = 'Облачный сервис'"));
	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		Программа = Выборка.Ссылка.ПолучитьОбъект(); // СправочникОбъект.ПрограммыЭлектроннойПодписиИШифрования.
		ЗаблокироватьДанныеДляРедактирования(Выборка.Ссылка);
		Программа.Наименование = НСтр("ru = 'Встроенный криптопровайдер'", ОбщегоНазначения.КодОсновногоЯзыка());
		ОбновлениеИнформационнойБазы.ЗаписатьОбъект(Программа);
	КонецЦикла;

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

Функция АдресаСерверовМетокВремениДляНачальногоЗаполнения() Экспорт

	ЗначениеКонстанты = Константы.АдресаСерверовМетокВремени.Получить();

	Если Не ЗначениеЗаполнено(ЗначениеКонстанты)
		Или ЗначениеКонстанты = "https://1stdss.1c.ru/TSP/tsp.srf" Тогда

		МассивАдресов = Новый Массив;
		МассивАдресов.Добавить("http://dss.1stdss.1c.ru/TSP/tsp.srf");
		МассивАдресов.Добавить("http://uc.nalog.ru/tsp/tsp.srf");
		Возврат СтрСоединить(МассивАдресов, Символы.ПС);

	КонецЕсли;

	Возврат "";

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

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

#Область Локализация

Функция ПредставленияСвойствСубъектаСертификата() Экспорт

	ПредставленияСвойств = Новый Соответствие;
	ПредставленияСвойств["Должность"] = НСтр("ru = 'Должность'");
	ПредставленияСвойств["ОГРН"] = НСтр("ru = 'ОГРН'");
	ПредставленияСвойств["ОГРНИП"] = НСтр("ru = 'ОГРНИП'");
	ПредставленияСвойств["СНИЛС"] = НСтр("ru = 'СНИЛС'");
	ПредставленияСвойств["ИНН"] = НСтр("ru = 'ИНН'");
	ПредставленияСвойств["ИННЮЛ"] = НСтр("ru = 'ИНН ЮЛ'");
	ПредставленияСвойств["Фамилия"] = НСтр("ru = 'Фамилия'");
	ПредставленияСвойств["Имя"] = НСтр("ru = 'Имя'");
	ПредставленияСвойств["Отчество"] = НСтр("ru = 'Отчество'");
	Возврат ПредставленияСвойств;

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

Функция ПредставленияСвойствИздателяСертификата() Экспорт

	ПредставленияСвойств = Новый Соответствие;
	ПредставленияСвойств["ОГРН"] = НСтр("ru = 'ОГРН'");
	ПредставленияСвойств["ИНН"] = НСтр("ru = 'ИНН'");
	ПредставленияСвойств["ИННЮЛ"] = НСтр("ru = 'ИНН ЮЛ'");
	Возврат ПредставленияСвойств;

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

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

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

#КонецЕсли

[Assistant] Процедура ДобавитьПоставляемыеПутиКМодулямПрограмм(ПутиКМодулям)


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

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

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

	ФайлРедактируетТекущийПользователь = ТекущиеДанныеФайла.ФайлРедактируетТекущийПользователь;
	АвторТекущийПользователь           = ТекущиеДанныеФайла.Автор = АвторизованныйПользователь;
	ФайлРедактируется                  = ТекущиеДанныеФайла.ФайлРедактируется;
	ФайлПодписан                       = ТекущиеДанныеФайла.ПодписанЭП;
	ФайлЗашифрован                     = ТекущиеДанныеФайла.Зашифрован;

	Если ФайлРедактируется Тогда

		Если ФайлРедактируетТекущийПользователь Тогда
			ИменаКоманд["ОбновитьИзФайлаНаДиске"] = Ложь;
		Иначе
			ИменаКоманд["ЗакончитьРедактирование"] = Ложь;
			Если Не ВозможностьОсвободитьФайл Тогда
				ИменаКоманд["Освободить"] = Ложь;
			КонецЕсли;
			ИменаКоманд["Редактировать"] = Ложь;
		КонецЕсли;

		ИменаКоманд["Занять"] = Ложь;
		ИменаКоманд["УстановитьПометкуУдаления"] = Ложь;
		ИменаКоманд["КонтекстноеМенюУстановитьПометкуУдаления"] = Ложь;

		ИменаКоманд["Подписать"] = Ложь;
		ИменаКоманд["ДобавитьЭПИзФайла"] = Ложь;
		ИменаКоманд["СохранитьВместеСЭП"] = Ложь;

		ИменаКоманд["ОбновитьИзФайлаНаДиске"] = Ложь;
		ИменаКоманд["СохранитьКак"] = Ложь;

		ИменаКоманд["Зашифровать"] = Ложь;
		ИменаКоманд["Расшифровать"] = Ложь;

		ИменаКоманд["Удалить"] = Ложь;

	Иначе
		ИменаКоманд["ЗакончитьРедактирование"] = Ложь;
		ИменаКоманд["Освободить"] = Ложь;
	КонецЕсли;

	Если ТекущиеДанныеФайла.ЭтоГруппа Тогда
		ИменаКоманд["Редактировать"] = Ложь;
		ИменаКоманд["Подписать"] = Ложь;
		ИменаКоманд["ДобавитьЭПИзФайла"] = Ложь;
		ИменаКоманд["СохранитьВместеСЭП"] = Ложь;
		ИменаКоманд["Зашифровать"] = Ложь;
		ИменаКоманд["Расшифровать"] = Ложь;
		ИменаКоманд["ОбновитьИзФайлаНаДиске"] = Ложь;
		ИменаКоманд["Скопировать"] = Ложь;
		ИменаКоманд["ОткрытьКаталогФайла"] = Ложь;
		ИменаКоманд["ОткрытьФайлДляПросмотра"] = Ложь;
		ИменаКоманд["СохранитьКак"] = Ложь;
		ИменаКоманд["Занять"] = Ложь;
		ИменаКоманд["Отправить"] = Ложь;
		ИменаКоманд["ПечатьСоШтампом"] = Ложь;
		ИменаКоманд["Печать"] = Ложь;
		ИменаКоманд["Удалить"] = Ложь;
	КонецЕсли;

	Если ФайлПодписан Тогда
		ИменаКоманд["ЗакончитьРедактирование"] = Ложь;
		ИменаКоманд["Освободить"] = Ложь;
		ИменаКоманд["Редактировать"] = Ложь;
		ИменаКоманд["ОбновитьИзФайлаНаДиске"] = Ложь;
		ИменаКоманд["Занять"] = Ложь;
	КонецЕсли;

	Если ФайлЗашифрован Тогда
		ИменаКоманд["Подписать"] = Ложь;
		ИменаКоманд["ДобавитьЭПИзФайла"] = Ложь;
		ИменаКоманд["СохранитьВместеСЭП"] = Ложь;
    // TODO: допиши оставшуюся часть

[Assistant]
Функция ДоступныеКоманды(ТекущиеДанныеФайла, ФайлыРедактируютсяВОблачномСервисе, ВозможностьОсвободитьФайл,
	АвторизованныйПользователь)

	ИменаКоманд = ИменаКомандФормы();

	ФайлРедактируетТекущийПользователь = ТекущиеДанныеФайла.ФайлРедактируетТекущийПользователь;
	АвторТекущийПользователь           = ТекущиеДанныеФайла.Автор = АвторизованныйПользователь;
	ФайлРедактируется                  = ТекущиеДанныеФайла.ФайлРедактируется;
	ФайлПодписан                       = ТекущиеДанныеФайла.ПодписанЭП;
	ФайлЗашифрован                     = ТекущиеДанныеФайла.Зашифрован;

	Если ФайлРедактируется Тогда

		Если ФайлРедактируетТекущийПользователь Тогда
			ИменаКоманд["ОбновитьИзФайлаНаДиске"] = Ложь;
		Иначе
			ИменаКоманд["ЗакончитьРедактирование"] = Ложь;
			Если Не ВозможностьОсвободитьФайл Тогда
				ИменаКоманд["Освободить"] = Ложь;
			КонецЕсли;
			ИменаКоманд["Редактировать"] = Ложь;
		КонецЕсли;

		ИменаКоманд["Занять"] = Ложь;
		ИменаКоманд["УстановитьПометкуУдаления"] = Ложь;
		ИменаКоманд["КонтекстноеМенюУстановитьПометкуУдаления"] = Ложь;

		ИменаКоманд["Подписать"] = Ложь;
		ИменаКоманд["ДобавитьЭПИзФайла"] = Ложь;
		ИменаКоманд["СохранитьВместеСЭП"] = Ложь;

		ИменаКоманд["ОбновитьИзФайлаНаДиске"] = Ложь;
		ИменаКоманд["СохранитьКак"] = Ложь;

		ИменаКоманд["Зашифровать"] = Ложь;
		ИменаКоманд["Расшифровать"] = Ложь;

		ИменаКоманд["Удалить"] = Ложь;

	Иначе
		ИменаКоманд["ЗакончитьРедактирование"] = Ложь;
		ИменаКоманд["Освободить"] = Ложь;
	КонецЕсли;

	Если ТекущиеДанныеФайла.ЭтоГруппа Тогда
		ИменаКоманд["Редактировать"] = Ложь;
		ИменаКоманд["Подписать"] = Ложь;
		ИменаКоманд["ДобавитьЭПИзФайла"] = Ложь;
		ИменаКоманд["СохранитьВместеСЭП"] = Ложь;
		ИменаКоманд["Зашифровать"] = Ложь;
		ИменаКоманд["Расшифровать"] = Ложь;
		ИменаКоманд["ОбновитьИзФайлаНаДиске"] = Ложь;
		ИменаКоманд["Скопировать"] = Ложь;
		ИменаКоманд["ОткрытьКаталогФайла"] = Ложь;
		ИменаКоманд["ОткрытьФайлДляПросмотра"] = Ложь;
		ИменаКоманд["СохранитьКак"] = Ложь;
		ИменаКоманд["Занять"] = Ложь;
		ИменаКоманд["Отправить"] = Ложь;
		ИменаКоманд["ПечатьСоШтампом"] = Ложь;
		ИменаКоманд["Печать"] = Ложь;
		ИменаКоманд["Удалить"] = Ложь;
	КонецЕсли;

	Если ФайлПодписан Тогда
		ИменаКоманд["ЗакончитьРедактирование"] = Ложь;
		ИменаКоманд["Освободить"] = Ложь;
		ИменаКоманд["Редактировать"] = Ложь;
		ИменаКоманд["ОбновитьИзФайлаНаДиске"] = Ложь;
		ИменаКоманд["Занять"] = Ложь;
	КонецЕсли;

	Если ФайлЗашифрован Тогда
		ИменаКоманд["Подписать"] = Ложь;
		ИменаКоманд["ДобавитьЭПИзФайла"] = Ложь;
		ИменаКоманд["СохранитьВместеСЭП"] = Ложь;

		ИменаКоманд["ЗакончитьРедактирование"] = Ложь;
		ИменаКоманд["Освободить"] = Ложь;
		ИменаКоманд["Редактировать"] = Ложь;
		ИменаКоманд["Занять"] = Ложь;

		ИменаКоманд["ОбновитьИзФайлаНаДиске"] = Ложь;

		ИменаКоманд["Зашифровать"] = Ложь;

		ИменаКоманд["ОткрытьКаталогФайла"] = Ложь;
		ИменаКоманд["ОткрытьФайлДляПросмотра"] = Ложь;
		ИменаКоманд["СохранитьКак"] = Ложь;
	Иначе
		ИменаКоманд["Расшифровать"] = Ложь;
	КонецЕсли;

	Если ФайлыРедактируютсяВОблачномСервисе Тогда

		ИменаКоманд["Добавить"] = Ложь;
		ИменаКоманд["ДобавитьИзФайлаНаДиске"] = Ложь;
		ИменаКоманд["ДобавитьФайлПоШаблону"] = Ложь;
		ИменаКоманд["ДобавитьФайлСоСканера"] = Ложь;
		ИменаКоманд["Скопировать"] = Ложь;

		ИменаКоманд["СоздатьГруппу"] = Ложь;
		ИменаКоманд["ПереместитьВГруппу"] = Ложь;
		ИменаКоманд["УстановитьПометкуУдаления"] = Ложь;
		ИменаКоманд["КонтекстноеМенюУстановитьПометкуУдаления"] = Ложь;
		ИменаКоманд["Занять"] = Ложь;
		ИменаКоманд["Освободить"] = Ложь;

		ИменаКоманд["ЗагрузитьФайлы"] = Ложь;
		ИменаКоманд["ЗагрузитьПапку"] = Ложь;

		ИменаКоманд["Удалить"] = Ложь;

		ИменаКоманд["Подписать"] = Ложь;
		ИменаКоманд["ДобавитьЭПИзФайла"] = Ложь;
		ИменаКоманд["Зашифровать"] = Ложь;
		ИменаКоманд["Расшифровать"] = Ложь;

	КонецЕсли;

	Если Не АвторТекущийПользователь Тогда
		ИменаКоманд["Удалить"] = Ложь;
	КонецЕсли;

	Возврат ИменаКоманд;

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

&НаКлиенте

Процедура ПриИзмененииИспользованияПодписанияИлиШифрования()

	ПриИзмененииИспользованияПодписанияИлиШифрованияНаСервере();

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

&НаСервере

Процедура ПриИзмененииИспользованияПодписанияИлиШифрованияНаСервере()

	РаботаСФайламиСлужебный.КриптографияПриСозданииФормыНаСервере(ЭтотОбъект);

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

// Продолжение процедуры Подписать, ДобавитьЭПИзФайла.
&НаКлиенте

Процедура ДобавлениеПодписейЗавершить(Успех, Контекст) Экспорт

	Если Успех = Истина Тогда
		УстановитьДоступностьФайловыхКоманд();
	КонецЕсли;

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

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

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

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

Процедура ПриОтправкеФайловПочтой(ПараметрыОтправки, Знач ФайлыДляОтправки, ВладелецФайлов, УникальныйИдентификатор)
	РаботаСФайламиПереопределяемый.ПриОтправкеФайловПочтой(ПараметрыОтправки, ФайлыДляОтправки, ВладелецФайлов, УникальныйИдентификатор);
КонецПроцедуры

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

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

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

			ЗафиксироватьТранзакцию();
		Исключение
			ОтменитьТранзакцию();
			ВызватьИсключение;
		КонецПопытки;
	КонецЦикла;
КонецПроцедуры

&НаКлиенте

Процедура УстановитьВидимостьПредпросмотра(ИспользоватьПредпросмотр)

	Элементы.АдресДанныхФайла.Видимость = ИспользоватьПредпросмотр;
	Элементы.Предпросмотр.Пометка = ИспользоватьПредпросмотр;

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

&НаКлиенте

Процедура ОбновитьПредпросмотр()

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

	ТекущиеДанные = ТекущиеДанные();
	Если ТекущиеДанные <> Неопределено И РасширенияПоддерживающиеПредпросмотр.НайтиПоЗначению(ТекущиеДанные.Расширение) <> Неопределено Тогда

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

	Иначе

		АдресДанныхФайла         = Неопределено;
		ТекстНевыбраннойКартинки = НСтр("ru = 'Нет данных для предварительного просмотра'");

	КонецЕсли;

	Если НЕ ЗначениеЗаполнено(АдресДанныхФайла) Тогда
		Элементы.АдресДанныхФайла.ТекстНевыбраннойКартинки = ТекстНевыбраннойКартинки;
	КонецЕсли;

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

&НаСервере