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

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

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

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ОписаниеПеременных

// СтандартныеПодсистемы.УправлениеДоступом
Перем ИзмененныеГруппыИсполнителей; // Массив из СправочникСсылка.ГруппыИсполнителейЗадач -
                                    // группы исполнителей, состав которых был изменен.
// Конец СтандартныеПодсистемы.УправлениеДоступом

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

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

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

	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;

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

	// СтандартныеПодсистемы.УправлениеДоступом
	ЗаполнитьИзмененныеГруппыИсполнителейЗадач();
	// Конец СтандартныеПодсистемы.УправлениеДоступом

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

// СтандартныеПодсистемы.УправлениеДоступом

Процедура ПриЗаписи(Отказ, Замещение)

	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;

	МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный");
	МодульУправлениеДоступомСлужебный.ОбновитьПользователейГруппИсполнителей(ИзмененныеГруппыИсполнителей);

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

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

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

Процедура ЗаполнитьИзмененныеГруппыИсполнителейЗадач()

	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("НовыеЗаписи", Выгрузить());
	Запрос.Текст =
	"ВЫБРАТЬ
	|	НовыеЗаписи.РольИсполнителя,
	|	НовыеЗаписи.Исполнитель,
	|	НовыеЗаписи.ОсновнойОбъектАдресации,
	|	НовыеЗаписи.ДополнительныйОбъектАдресации,
	|	НовыеЗаписи.ГруппаИсполнителейЗадач
	|ПОМЕСТИТЬ НовыеЗаписи
	|ИЗ
	|	&НовыеЗаписи КАК НовыеЗаписи
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Итог.ГруппаИсполнителейЗадач
	|ИЗ
	|	(ВЫБРАТЬ РАЗЛИЧНЫЕ
	|		Различия.ГруппаИсполнителейЗадач КАК ГруппаИсполнителейЗадач
	|	ИЗ
	|		(ВЫБРАТЬ
	|			ИсполнителиЗадач.РольИсполнителя КАК РольИсполнителя,
	|			ИсполнителиЗадач.Исполнитель КАК Исполнитель,
	|			ИсполнителиЗадач.ОсновнойОбъектАдресации КАК ОсновнойОбъектАдресации,
	|			ИсполнителиЗадач.ДополнительныйОбъектАдресации КАК ДополнительныйОбъектАдресации,
	|			ИсполнителиЗадач.ГруппаИсполнителейЗадач КАК ГруппаИсполнителейЗадач,
	|			-1 КАК ВидИзмененияСтроки
	|		ИЗ
	|			РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач
	|		ГДЕ
	|			&УсловияОтбора
	|
	|		ОБЪЕДИНИТЬ ВСЕ
	|
	|		ВЫБРАТЬ
	|			НовыеЗаписи.РольИсполнителя,
	|			НовыеЗаписи.Исполнитель,
	|			НовыеЗаписи.ОсновнойОбъектАдресации,
	|			НовыеЗаписи.ДополнительныйОбъектАдресации,
	|			НовыеЗаписи.ГруппаИсполнителейЗадач,
	|			1
	|		ИЗ
	|			НовыеЗаписи КАК НовыеЗаписи) КАК Различия
	|
	|	СГРУППИРОВАТЬ ПО
	|		Различия.РольИсполнителя,
	|		Различия.Исполнитель,
	|		Различия.ОсновнойОбъектАдресации,
	|		Различия.ДополнительныйОбъектАдресации,
	|		Различия.ГруппаИсполнителейЗадач
	|
	|	ИМЕЮЩИЕ
	|		СУММА(Различия.ВидИзмененияСтроки) <> 0) КАК Итог
	|ГДЕ
	|	Итог.ГруппаИсполнителейЗадач <> ЗНАЧЕНИЕ(Справочник.ГруппыИсполнителейЗадач.ПустаяСсылка)";

	УсловияОтбора = "Истина";
	Для каждого ЭлементОтбора Из Отбор Цикл
		Если ЭлементОтбора.Использование Тогда
			УсловияОтбора = УсловияОтбора + "
			|И ИсполнителиЗадач." + ЭлементОтбора.Имя + " = &" + ЭлементОтбора.Имя;
			Запрос.УстановитьПараметр(ЭлементОтбора.Имя, ЭлементОтбора.Значение);
		КонецЕсли;
	КонецЦикла;

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

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

// Конец СтандартныеПодсистемы.УправлениеДоступом

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

#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли

[Assistant] Процедура ПередЗаписью(Отказ, Замещение)


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

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

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

	АвтоматическиОчищатьНенужныеФайлы = АвтоматическаяОчисткаВключена();
	Элементы.Расписание.Заголовок     = ТекущееРасписание();

	Элементы.Расписание.Доступность = АвтоматическиОчищатьНенужныеФайлы;
	Элементы.НастроитьРасписание.Доступность = АвтоматическиОчищатьНенужныеФайлы;

	Если ОбщегоНазначения.РазделениеВключено() Тогда
    // TODO: допиши оставшуюся часть

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

	УстановитьУсловноеОформление();
	ЗаполнитьТипыОбъектовВДеревеЗначений();
	ЗаполнитьСпискиВыбора();

	АвтоматическиОчищатьНенужныеФайлы = АвтоматическаяОчисткаВключена();
	Элементы.Расписание.Заголовок     = ТекущееРасписание();

	Элементы.Расписание.Доступность = АвтоматическиОчищатьНенужныеФайлы;
	Элементы.НастроитьРасписание.Доступность = АвтоматическиОчищатьНенужныеФайлы;

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

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

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

&НаКлиенте

Процедура ПриОткрытии(Отказ)
	ОжидатьЗавершениеРасчетаСведенийОбУдаляемыхФайлах();
КонецПроцедуры

&НаКлиенте

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

	Если ИмяСобытия = "Запись_НаборКонстант" И Источник = "СпособХраненияФайлов" Тогда
		НастроитьРежимыОчисткиФайлов();
	КонецЕсли;

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

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

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

&НаКлиенте

Процедура РежимОчисткиФайловПриИзменении(Элемент)
	РежимОчисткиФайловПриИзмененииСервер();
КонецПроцедуры

&НаСервере

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

&НаКлиенте

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

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоОбъектовМетаданных

&НаКлиенте

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

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

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

&НаКлиенте

Процедура ДеревоОбъектовМетаданныхПередНачаломИзменения(Элемент, Отказ)

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

	Если Элемент.ТекущийЭлемент = Элементы.ДеревоОбъектовМетаданныхДействие Тогда
		ЗаполнитьСписокВыбора(Элементы.ДеревоОбъектовМетаданных.ТекущийЭлемент);
	КонецЕсли;

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

&НаКлиенте

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

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

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

&НаКлиенте

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

	СтандартнаяОбработка = Ложь;
	ПодключитьОбработчикОжидания("ОткрытьФормуНастроек", 0.1, Истина);

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

&НаКлиенте

Процедура ДеревоОбъектовМетаданныхДействиеПриИзменении(Элемент)

	ЗаписатьТекущиеНастройки();

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

&НаКлиенте

Процедура ДеревоОбъектовМетаданныхПериодОчисткиПриИзменении(Элемент)

	ЗаписатьТекущиеНастройки();

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

&НаКлиенте

Процедура ДеревоОбъектовМетаданныхОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

	СтандартнаяОбработка = Ложь;
	ДобавитьНастройкиПоВладельцу(ВыбранноеЗначение);

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

&НаКлиенте

Процедура ДеревоОбъектовМетаданныхПередУдалением(Элемент, Отказ)

	Отказ = Истина;

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

		НастройкаДляУдаленияРодителя = НастройкаДляУдаления.ПолучитьРодителя();

		Если НастройкаДляУдаленияРодителя <> Неопределено И НастройкаДляУдаленияРодителя.ВозможностьДетализации Тогда

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

		КонецЕсли;

	КонецЕсли;

	ТекстСообщения = НСтр("ru = 'Расширенная настройка очистки файлов не предусмотрена для этого объекта.'");
	ПоказатьПредупреждение(, ТекстСообщения);

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

&НаКлиенте

Процедура ДеревоОбъектовМетаданныхПериодОчисткиОчистка(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
КонецПроцедуры

&НаКлиенте

Процедура ДеревоОбъектовМетаданныхДействиеОчистка(Элемент, СтандартнаяОбработка)

	СтандартнаяОбработка = Ложь;
	УстановитьДействиеДляВыбранныхОбъектов(
		ПредопределенноеЗначение("Перечисление.ВариантыОчисткиФайлов.НеОчищать"));

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

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

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

&НаКлиенте

Процедура ОбъемНенужныхФайлов(Команда)

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

	ОткрытьФорму("Отчет.ОбъемНенужныхФайлов.ФормаОбъекта", ПараметрыОтчета);

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

&НаКлиенте

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

&НаКлиенте

Процедура УстановитьДействиеНеОчищать(Команда)

	УстановитьДействиеДляВыбранныхОбъектов(
		ПредопределенноеЗначение("Перечисление.ВариантыОчисткиФайлов.НеОчищать"));

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

&НаКлиенте

Процедура УстановитьДействиеОчиститьВерсии(Команда)

	Если Не МожноОчищатьВерсии() Тогда
		Возврат;
	КонецЕсли;

	УстановитьДействиеДляВыбранныхОбъектов(
		ПредопределенноеЗначение("Перечисление.ВариантыОчисткиФайлов.ОчиститьВерсии"));

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

&НаКлиенте

Процедура УстановитьДействиеОчиститьФайлы(Команда)

	УстановитьДействиеДляВыбранныхОбъектов(
		ПредопределенноеЗначение("Перечисление.ВариантыОчисткиФайлов.ОчиститьФайлы"));

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

&НаКлиенте

Процедура УстановитьДействиеОчиститьФайлыИВерсии(Команда)

	Если Не МожноОчищатьВерсии() Тогда
		Возврат;
	КонецЕсли;

	УстановитьДействиеДляВыбранныхОбъектов(
		ПредопределенноеЗначение("Перечисление.ВариантыОчисткиФайлов.ОчиститьФайлыИВерсии"));

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

&НаКлиенте

Функция МожноОчищатьВерсии()
	Если Элементы.ДеревоОбъектовМетаданных.ВыделенныеСтроки.Количество() = 1 Тогда
		ТекущиеДанные = Элементы.ДеревоОбъектовМетаданных.ТекущиеДанные;
		Если Не ТекущиеДанные.ЭтоФайл
			И ТекущиеДанные.ВладелецФайла <> Неопределено Тогда
			ПоказатьПредупреждение(, НСтр("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
///////////////////////////////////////////////////////////////////////////////////////////////////////

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

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

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

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

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

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

&НаСервере
Функция КлючЗаписи(УчетнаяЗаписьЭлектроннойПочты)

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

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

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

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

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


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

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

Процедура ИмяФункции(Параметры, АдресРезультата) Экспорт

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

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

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

	УстановитьПривилегированныйРежим(Истина);

	// СтандартныеПодсистемы БазоваяФункциональность
	Если Параметры.БазоваяФункциональность.ИдентификаторыОбъектовМетаданных.Обновлять Тогда
		Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(
			Параметры.БазоваяФункциональность.ИдентификаторыОбъектовМетаданных.ЕстьИзменения);
	КонецЕсли;
	Если Параметры.БазоваяФункциональность.ОчиститьКэшПрограммныхИнтерфейсов.Обновлять Тогда
		ОчиститьКэшПрограммныхИнтерфейсов(
			Параметры.БазоваяФункциональность.ОчиститьКэшПрограммныхИнтерфейсов.ЕстьИзменения);
	КонецЕсли;

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

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

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

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

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

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

	ПоместитьВоВременноеХранилище(Параметры, АдресРезультата);

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

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

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

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

// Для вызова из фонового задания с текущим составом расширений конфигурации.

Процедура ОбработчикДлительнойОперацииЗагрузкиПараметровРаботыПрограммы(СообщитьПрогресс, АдресХранилища) Экспорт

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

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

	ПоместитьВоВременноеХранилище(РезультатВыполнения, АдресХранилища);

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

// Для вызова из фонового задания без подключенных расширений конфигурации.

[Assistant] Процедура ОбработчикДлительнойОперацииВыполнитьОбновлениеНеразделенныхДанных(Параметры, АдресРезультата)


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

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

Процедура ОбработчикДлительнойОперацииОбновленияПараметровРаботыПрограммы(СообщитьПрогресс, АдресХранилища)
Экспорт

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

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

[Assistant]
Процедура ОбработчикДлительнойОперацииОбновленияПараметровРаботыПрограммы(СообщитьПрогресс, АдресХранилища) Экспорт

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

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

	ПоместитьВоВременноеХранилище(РезультатВыполнения, АдресХранилища);

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

// Для вызова из фонового задания с текущим составом расширений конфигурации.

Процедура ОбработчикДлительнойОперацииОбновленияПараметровВерсийРасширений(СообщитьПрогресс, АдресХранилища) Экспорт

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

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

	ПоместитьВоВременноеХранилище(РезультатВыполнения, АдресХранилища);

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


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

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

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

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

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

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

	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("ПроизводственныйКалендарь", ПроизводственныйКалендарь);
	Запрос.Текст =
		"ВЫБРАТЬ
		|	ПериодыНерабочихДнейКалендаря.ПроизводственныйКалендарь КАК ПроизводственныйКалендарь,
		|	ПериодыНерабочихДнейКалендаря.НомерПериода КАК НомерПериода,
		|	ПериодыНерабочихДнейКалендаря.ДатаНачала КАК ДатаНачала,
		|	ПериодыНерабочихДнейКалендаря.ДатаОкончания КАК ДатаОкончания,
		|	ПериодыНерабочихДнейКалендаря.Основание КАК Основание
		|ИЗ
		|	РегистрСведений.ПериодыНерабочихДнейКалендаря КАК ПериодыНерабочихДнейКалендаря
		|ГДЕ
		|	ПериодыНерабочихДнейКалендаря.ПроизводственныйКалендарь = &ПроизводственныйКалендарь
		|
		|УПОРЯДОЧИТЬ ПО
		|	НомерПериода";
	Возврат Запрос.Выполнить().Выгрузить();

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

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

#КонецЕсли

[Assistant] Функция ПериодыНерабочихДней(ПроизводственныйКалендарь)


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

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

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

		ВызватьИсключение НСтр("ru ='Самостоятельное использование формы не предусмотрено.'", ОбщегоНазначения.КодОсновногоЯзыка());
    // TODO: допиши оставшуюся часть

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

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

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

	Если НЕ Параметры.Свойство("ДанныеВыделенныхСтрок") Тогда

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

	КонецЕсли;

	УсловноеОформлениеФормы();
	ЗаполнитьТаблицуФормы();

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

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

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

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

	ИзменитьОтметкуСтрок(Истина);

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

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

	ИзменитьОтметкуСтрок(Ложь);

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

&НаКлиенте
Процедура ПоказатьОтличия(Команда)

	ПоказатьОтличияВерсийОбъекта();

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

&НаКлиенте
Процедура ПересмотретьРезультат(Команда)

	ТекстВопроса = НСтр("ru = 'Пересмотреть результаты коллизий по отмеченным строкам?'");

	ОписаниеОповещения = Новый ОписаниеОповещения("ПересмотретьРезультатыКоллизий", ЭтотОбъект);

	ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);

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

&НаКлиенте
Процедура ПересмотретьРезультатыКоллизий(Ответ, ДополнительныеПараметры) Экспорт

	Если Ответ <> КодВозвратаДиалога.Да Тогда

		Возврат;

	КонецЕсли;

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

	ПересмотретьРезультатыНаСервере(ПараметрыПересмотра);

	Если ПараметрыПересмотра.КоличествоПересмотренных > 0 Тогда

		Оповестить("ИсправлениеПредупрежденийСинхронизацииПересмотрКоллизии");

	КонецЕсли;

	ОчиститьСообщения();
	Если ПараметрыПересмотра.КоличествоПересмотренных <> ПараметрыПересмотра.КоличествоВсего Тогда

		ШаблонСообщения = НСтр("ru = 'Отмечено строк: %1. Изменено объектов: %2.'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());

		СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			ШаблонСообщения,
			Формат(ПараметрыПересмотра.КоличествоВсего, "ЧН=; ЧГ=0"),
			Формат(ПараметрыПересмотра.КоличествоПересмотренных, "ЧН=; ЧГ=0"));

		ПоказатьПредупреждение(Неопределено, СообщениеОбОшибке);

	КонецЕсли;

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

&НаКлиенте
Процедура ОткрытьВерсиюЭтойПрограммы(Команда)

	ОткрытьВерсиюНаКлиенте("ВерсияЭтойПрограммы");

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

&НаКлиенте
Процедура ОткрытьВерсиюДругойПрограммы(Команда)

	ОткрытьВерсиюНаКлиенте("ВерсияИзДругойПрограммы");

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

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

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

&НаКлиенте
Процедура ПоказатьОтличияВерсийОбъекта()

	ТекущиеДанныеСтроки = Элементы.ТаблицаОбъектовИсправления.ТекущиеДанные;
	Если ТекущиеДанныеСтроки = Неопределено Тогда

		Возврат;

	КонецЕсли;

	СравниваемыеВерсии = Новый Массив;

	Если ТекущиеДанныеСтроки.ВерсияЭтойПрограммы <> 0 Тогда

		СравниваемыеВерсии.Добавить(ТекущиеДанныеСтроки.ВерсияЭтойПрограммы);

	КонецЕсли;

	Если ТекущиеДанныеСтроки.ВерсияИзДругойПрограммы <> 0 Тогда

		СравниваемыеВерсии.Добавить(ТекущиеДанныеСтроки.ВерсияИзДругойПрограммы);

	КонецЕсли;

	Если СравниваемыеВерсии.Количество() <> 2 Тогда

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

	КонецЕсли;

	ОткрытьОтчетСравненияВерсий(ТекущиеДанныеСтроки.ПроблемныйОбъект, СравниваемыеВерсии);

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

&НаКлиенте
Процедура ИзменитьОтметкуСтрок(ЗначениеОтметки)

	Для Каждого ВыделеннаяСтрока Из ТаблицаОбъектовИсправления Цикл

		ВыделеннаяСтрока.ОбработатьСтроку = ЗначениеОтметки;

	КонецЦикла;

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

&НаКлиенте
Процедура ОткрытьВерсиюНаКлиенте(ПолеВерсия)

	ТекущиеДанные = Элементы.ТаблицаОбъектовИсправления.ТекущиеДанные;
	Если ТекущиеДанные = Неопределено Тогда

		Возврат;

	КонецЕсли;

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

	ОткрытьОтчетСравненияВерсий(ТекущиеДанные.ПроблемныйОбъект, СравниваемыеВерсии);

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

&НаКлиенте
Процедура ОткрытьОтчетСравненияВерсий(Ссылка, СравниваемыеВерсии)

	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда

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

	КонецЕсли;

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

&НаСервере
Процедура УсловноеОформлениеФормы()

	ОшибкиКрасным = УсловноеОформление.Элементы.Добавить();

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

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

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

&НаСервере
Процедура ЗаполнитьТаблицуФормы()

	Если ТипЗнч(Параметры.ДанныеВыделенныхСтрок) <> Тип("Массив") Тогда

		Возврат;

	КонецЕсли;

	Для каждого ДанныеСтроки Из Параметры.ДанныеВыделенныхСтрок Цикл

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

	КонецЦикла;

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

&НаСервере
Процедура ПересмотретьРезультатыНаСервере(ПараметрыПересмотра)

	Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда

		Возврат;

	КонецЕсли;

	МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов");
	ШаблонТекстаОшибки = НСтр("ru = 'Не удалось изменить версию объекта по причине:%1%2'", ОбщегоНазначения.КодОсновногоЯзыка());

	Для Каждого ВыделеннаяСтрока Из ТаблицаОбъектовИсправления Цикл

		Если НЕ ВыделеннаяСтрока.ОбработатьСтроку Тогда

			Продолжить;

		КонецЕсли;

		ПараметрыПересмотра.КоличествоВсего = ПараметрыПересмотра.КоличествоВсего + 1;

		Попытка

			МодульВерсионированиеОбъектов.ПриПереходеНаВерсиюОбъекта(ВыделеннаяСтрока.ПроблемныйОбъект, ВыделеннаяСтрока.ВерсияИзДругойПрограммы);
			ПараметрыПересмотра.КоличествоПересмотренных = ПараметрыПересмотра.КоличествоПересмотренных + 1;

		Исключение

			ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());

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

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

	КонецЦикла;

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

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


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

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

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

		ВызватьИсключение НСтр("ru ='Самостоятельное использование формы не предусмотрено.'", ОбщегоНазначения.КодОсновногоЯзыка());
    // TODO: допиши оставшуюся часть

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

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

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

	Если НЕ Параметры.Свойство("ДанныеВыделенныхСтрок") Тогда

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

	КонецЕсли;

	УсловноеОформлениеФормы();
	ЗаполнитьТаблицуФормы();

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

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

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

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

	ИзменитьОтметкуСтрок(Истина);

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

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

	ИзменитьОтметкуСтрок(Ложь);

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

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

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

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

	ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет);

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

&НаКлиенте
Процедура ПринятьВерсиюЗавершение(Ответ, ДополнительныеПараметры) Экспорт

	Если Ответ <> КодВозвратаДиалога.Да Тогда

		Возврат;

	КонецЕсли;

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

	ПересмотретьРезультатыНаСервере(ПараметрыПересмотра);

	Если ПараметрыПересмотра.КоличествоПересмотренных > 0 Тогда

		Оповестить("ИсправлениеПредупрежденийСинхронизацииПересмотрДатыЗапрета");

	КонецЕсли;

	ОчиститьСообщения();
	Если ПараметрыПересмотра.КоличествоПересмотренных <> ПараметрыПересмотра.КоличествоВсего Тогда

		ШаблонСообщения = НСтр("ru = 'Отмечено строк: %1. Изменено объектов: %2.'", ОбщегоНазначенияКлиент.КодОсновногоЯзыка());

		СообщениеОбОшибке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			ШаблонСообщения,
			Формат(ПараметрыПересмотра.КоличествоВсего, "ЧН=; ЧГ=0"),
			Формат(ПараметрыПересмотра.КоличествоПересмотренных, "ЧН=; ЧГ=0"));

		ПоказатьПредупреждение(Неопределено, СообщениеОбОшибке);

	КонецЕсли;

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

&НаКлиенте
Процедура ПоказатьОтличия(Команда)

	ПоказатьОтличияВерсийОбъекта();

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

&НаКлиенте
Процедура ОткрытьВерсиюДругойПрограммы(Команда)

	ПоказатьОтличияВерсийОбъекта();

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

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

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

&НаКлиенте
Процедура ПоказатьОтличияВерсийОбъекта()

	ТекущиеДанныеСтроки = Элементы.ТаблицаОбъектовИсправления.ТекущиеДанные;
	Если ТекущиеДанныеСтроки = Неопределено Тогда

		Возврат;

	КонецЕсли;

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

	ОткрытьОтчетСравненияВерсий(ТекущиеДанныеСтроки.ПроблемныйОбъект, СравниваемыеВерсии);

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

&НаКлиенте
Процедура ИзменитьОтметкуСтрок(ЗначениеОтметки)

	Для Каждого ВыделеннаяСтрока Из ТаблицаОбъектовИсправления Цикл

		ВыделеннаяСтрока.ОбработатьСтроку = ЗначениеОтметки;

	КонецЦикла;

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

&НаКлиенте
Процедура ОткрытьОтчетСравненияВерсий(Ссылка, СравниваемыеВерсии)

	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда

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

	КонецЕсли;

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

&НаСервере
Процедура ПересмотретьРезультатыНаСервере(ПараметрыПересмотра)

	Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВерсионированиеОбъектов") Тогда

		Возврат;

	КонецЕсли;

	МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов");
	ШаблонТекстаОшибки = НСтр("ru = 'Не удалось изменить версию объекта по причине:%1%2'", ОбщегоНазначения.КодОсновногоЯзыка());

	Для Каждого ВыделеннаяСтрока Из ТаблицаОбъектовИсправления Цикл

		Если НЕ ВыделеннаяСтрока.ОбработатьСтроку Тогда

			Продолжить;

		КонецЕсли;

		ПараметрыПересмотра.КоличествоВсего = ПараметрыПересмотра.КоличествоВсего + 1;

		Попытка

			МодульВерсионированиеОбъектов.ПриПереходеНаВерсиюОбъекта(ВыделеннаяСтрока.ПроблемныйОбъект, ВыделеннаяСтрока.ВерсияИзДругойПрограммы);
			ПараметрыПересмотра.КоличествоПересмотренных = ПараметрыПересмотра.КоличествоПересмотренных + 1;

		Исключение

			ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());

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

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

	КонецЦикла;

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

&НаСервере
Процедура УсловноеОформлениеФормы()

	ОшибкиКрасным = УсловноеОформление.Элементы.Добавить();

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

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

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

&НаСервере
Процедура ЗаполнитьТаблицуФормы()

	Если ТипЗнч(Параметры.ДанныеВыделенныхСтрок) <> Тип("Массив") Тогда

		Возврат;

	КонецЕсли;

	Для каждого ДанныеСтроки Из Параметры.ДанныеВыделенныхСтрок Цикл

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

	КонецЦикла;

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

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

Tasks-develope/src/cf/InformationRegisters/РезультатыОбменаДанными/Forms/ОбработкаПредупрежденийПоДатеЗапретаЗагрузки/Ext/Form/Module.bsl


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

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

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

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

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

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

	ТребуетсяОбновлениеПризнакаСкрытьИзСписка = Ложь;
	ТребуетсяОбновлениеКомментария = Ложь;

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)

	ИзменитьКартинкуДекорации()

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

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

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

&НаКлиенте
Процедура СкрытьПредупреждениеПриИзменении(Элемент)

	ТребуетсяОбновлениеПризнакаСкрытьИзСписка = Истина;

	Если СкрытьПредупреждение Тогда

		Элементы.ДекорацияКартинка.Картинка = БиблиотекаКартинок.Информация32;

	Иначе

		Элементы.ДекорацияКартинка.Картинка = БиблиотекаКартинок.Ошибка32;

	КонецЕсли;

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

&НаКлиенте
Процедура КомментарийПредупрежденияПриИзменении(Элемент)

	ТребуетсяОбновлениеКомментария = Истина;

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

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

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

&НаКлиенте
Процедура ОК(Команда)

	ПередЗакрытиемНаСервере();

	Если ТребуетсяОбновлениеПризнакаСкрытьИзСписка
		ИЛИ ТребуетсяОбновлениеКомментария Тогда

		Закрыть(Новый Структура("ТребуетсяОбновлениеСписка", Истина));

	Иначе

		Закрыть();

	КонецЕсли;

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

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

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

&НаКлиенте
Процедура ИзменитьКартинкуДекорации()

	Если СкрытьПредупреждение Тогда

		Элементы.ДекорацияКартинка.Картинка = БиблиотекаКартинок.Информация32;

	Иначе

		Элементы.ДекорацияКартинка.Картинка = БиблиотекаКартинок.Ошибка32;

	КонецЕсли;

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

&НаСервере
Процедура ПередЗакрытиемНаСервере()

	Если НЕ ТребуетсяОбновлениеПризнакаСкрытьИзСписка
		И НЕ ТребуетсяОбновлениеКомментария Тогда

		Возврат;

	КонецЕсли;

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

	МенеджерЗаписи.Прочитать(); // читаем для сохранения реквизитов, которые не передаем на форму
	Если НЕ МенеджерЗаписи.Выбран() Тогда

		// Сценарий: открыли карточку предупреждения, а параллельно поправили проблему
		Возврат;

	КонецЕсли;

	МенеджерЗаписи.ДатаВозникновения = ДатаВозникновения;
	МенеджерЗаписи.Комментарий = КомментарийПредупреждения;
	МенеджерЗаписи.Пропущена = СкрытьПредупреждение;
	МенеджерЗаписи.Записать(Истина);

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

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

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

Tasks-develope/src/cf/InformationRegisters/РезультатыОбменаДанными/Forms/ПредупреждениеАдминистрированияПриложения/Ext/Form/Module.bsl


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

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

Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры)
Экспорт

	ПараметрыВыборки = Параметры.ПараметрыВыборки;
	ПараметрыВыборки.ПолныеИменаРегистров = "РегистрСведений.СведенияОФайлах";
	ПараметрыВыборки.СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиИзмеренияНезависимогоРегистраСведений();

	Файл = "";
	ОтработаныВсеЗаписиРегистра = Ложь;
	Пока Не ОтработаныВсеЗаписиРегистра Цикл

		Запрос = Новый Запрос;
		Запрос.Текст =
		"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000
		|	СведенияОФайлах.Файл КАК Файл
		|ИЗ
		|	РегистрСведений.СведенияОФайлах КАК СведенияОФайлах
		|ГДЕ
		|	СведенияОФайлах.Файл > &Файл
		|	И СведенияОФайлах.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ПустаяСсылка)";
		Запрос.УстановитьПараметр("Файл", Файл);
		// @skip-check query-in-loop - Порционная обработка данных
		ИзмеренияРегистра = Запрос.Выполнить().Выгрузить();
    // TODO: допиши оставшуюся часть

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

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область СлужебныйПрограммныйИнтерфейс

////////////////////////////////////////////////////////////////////////////////
// Обработчики обновления.

Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт

	ПараметрыВыборки = Параметры.ПараметрыВыборки;
	ПараметрыВыборки.ПолныеИменаРегистров = "РегистрСведений.СведенияОФайлах";
	ПараметрыВыборки.СпособВыборки = ОбновлениеИнформационнойБазы.СпособВыборкиИзмеренияНезависимогоРегистраСведений();

	Файл = "";
	ОтработаныВсеЗаписиРегистра = Ложь;
	Пока Не ОтработаныВсеЗаписиРегистра Цикл

		Запрос = Новый Запрос;
		Запрос.Текст =
		"ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 1000
		|	СведенияОФайлах.Файл КАК Файл
		|ИЗ
		|	РегистрСведений.СведенияОФайлах КАК СведенияОФайлах
		|ГДЕ
		|	СведенияОФайлах.Файл > &Файл
		|	И СведенияОФайлах.ТипХраненияФайла = ЗНАЧЕНИЕ(Перечисление.ТипыХраненияФайлов.ПустаяСсылка)";
		Запрос.УстановитьПараметр("Файл", Файл);
		// @skip-check query-in-loop - Порционная обработка данных
		ИзмеренияРегистра = Запрос.Выполнить().Выгрузить();

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

		ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, ИзмеренияРегистра, ДополнительныеПараметры);

		КоличествоЗаписей = ИзмеренияРегистра.Количество();
		Если КоличествоЗаписей < 1000 Тогда
			ОтработаныВсеЗаписиРегистра = Истина;
		КонецЕсли;

		Если КоличествоЗаписей > 0 Тогда
			Файл = ИзмеренияРегистра[КоличествоЗаписей-1].Файл;
		КонецЕсли;

	КонецЦикла;

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

Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт

	ВыбранныеДанные = ОбновлениеИнформационнойБазы.ДанныеДляОбновленияВМногопоточномОбработчике(Параметры);
	ОбъектовОбработано = 0;
	ПроблемныхОбъектов = 0;
	ПлохиеДанные = Новый Соответствие;
	МетаданныеРегистра = Метаданные.РегистрыСведений.СведенияОФайлах;
	ПолноеИмяОбъекта = МетаданныеРегистра.ПолноеИмя();

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

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

			ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(ПолноеИмяОбъекта);
			ЭлементБлокировкиДанных.УстановитьЗначение("Файл", Строка.Файл);

			БлокировкаДанных.Заблокировать();

			НаборЗаписей = РегистрыСведений.СведенияОФайлах.СоздатьНаборЗаписей();
			НаборЗаписей.Отбор.Файл.Установить(Строка.Файл);

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

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

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

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

	КонецЦикла;

	Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъекта);

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

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

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

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

#КонецЕсли


[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
///////////////////////////////////////////////////////////////////////////////////////////////////////

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

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

	УИДПользователяИБ = ПользователиИнформационнойБазы.ТекущийПользователь().УникальныйИдентификатор;
	Пользователь = Справочники.Пользователи.НайтиПоРеквизиту("ИдентификаторПользователяИБ",
		Новый УникальныйИдентификатор(УИДПользователяИБ));

	ИмяСправочникаВариантыОтчетов = "";
	Параметры.Свойство("ИмяСправочникаВариантыОтчетов", ИмяСправочникаВариантыОтчетов);

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

	ОбновитьСнимкиОтчетов(ИмяСправочникаВариантыОтчетов, ВариантОтчета);

	Если СнимкиОтчетов.Количество() > 0 Тогда
		ТекущийСнимокОтчета = 1;
		ПрочитатьСнимокОтчета();
	КонецЕсли;

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

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

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

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

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

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

&НаКлиенте
Процедура ПерейтиККонцу(Команда)

	ТекущийСнимокОтчета = СнимкиОтчетов.Количество();
	ПрочитатьСнимокОтчета();

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

&НаКлиенте
Процедура ПерейтиКНачалу(Команда)

	Если СнимкиОтчетов.Количество() > 0 Тогда
		ТекущийСнимокОтчета = 1;
		ПрочитатьСнимокОтчета();
	КонецЕсли;

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

&НаКлиенте
Процедура ПерейтиНазад(Команда)

	Если ТекущийСнимокОтчета > 1 Тогда
		ТекущийСнимокОтчета = ТекущийСнимокОтчета - 1;
		ПрочитатьСнимокОтчета();
	КонецЕсли;

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

&НаКлиенте
Процедура ПерейтиВперед(Команда)

	Если ТекущийСнимокОтчета < СнимкиОтчетов.Количество() Тогда
		ТекущийСнимокОтчета = ТекущийСнимокОтчета + 1;
		ПрочитатьСнимокОтчета();
	КонецЕсли;

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

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

	Если ТекущийСнимокОтчета <> 0 Тогда
		УдалитьСнимокОтчетаНаСервере();
	КонецЕсли;

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

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

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

&НаСервере
Процедура ОбновитьСнимкиОтчетов(ИмяСправочникаВариантыОтчетов, ВариантОтчета)

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

	Если ЗначениеЗаполнено(ВариантОтчета) Тогда
		Счетчик = 0;
		Пока Счетчик < СнимкиОтчетовПользователя.Количество() Цикл
			Если СнимкиОтчетовПользователя[Счетчик].Вариант = ВариантОтчета Тогда
				Счетчик = Счетчик + 1;
			Иначе
				СнимкиОтчетовПользователя.Удалить(Счетчик);
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;

	СнимкиОтчетов.Загрузить(СнимкиОтчетовПользователя);

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

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

	СтрокаОтчет = СнимкиОтчетов[ТекущийСнимокОтчета-1];

	ОтчетТабличныйДокумент.Очистить();
	ДатаАктуальности = Неопределено;

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

	Заголовок = НСтр("ru = 'Актуальность'") + ": " + ДатаАктуальности;

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

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

	СтрокаОтчет = СнимкиОтчетов[ТекущийСнимокОтчета-1];

	ОтчетТабличныйДокумент.Очистить();

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

	СнимкиОтчетов.Удалить(СтрокаОтчет);

	Если ТекущийСнимокОтчета > СнимкиОтчетов.Количество() Тогда
		ТекущийСнимокОтчета = СнимкиОтчетов.Количество();
	КонецЕсли;

	Если ТекущийСнимокОтчета > 0 Тогда
		ПрочитатьСнимокОтчета();
	КонецЕсли;

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

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


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

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

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

	УсловноеОформление.Элементы.Очистить();

	//

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СнимкиОтчетовПользователь.Имя);

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

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

&НаСервере

Процедура ЗаполнитьСнимкиОтчетов()

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

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

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

[Assistant] Процедура УстановитьУсловноеОформление()


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

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

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

	// Удаляем все узлы, добавленные по авторегистрации, если признак авторегистрации был ошибочно установлен.
	ОбменДанными.Получатели.Очистить();

	// Заполняем свойство УникальныйИдентификаторИсточникаСтрокой из ссылки источника.
	Если Количество() > 0 Тогда

		Если ЭтотОбъект[0].ОбъектВыгруженПоСсылке = Истина
			ИЛИ НЕ ЗначениеЗаполнено(ЭтотОбъект[0]["УникальныйИдентификаторИсточника"]) Тогда
			Возврат;
		КонецЕсли;

		ЭтотОбъект[0]["УникальныйИдентификаторИсточникаСтрокой"] = Строка(ЭтотОбъект[0]["УникальныйИдентификаторИсточника"].УникальныйИдентификатор());
    // TODO: допиши оставшуюся часть

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

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

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

Процедура ПередЗаписью(Отказ, Замещение)

	// Отказываемся от выполнения типового механизма регистрации объектов.
	ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов");

	// Удаляем все узлы, добавленные по авторегистрации, если признак авторегистрации был ошибочно установлен.
	ОбменДанными.Получатели.Очистить();

	// Заполняем свойство УникальныйИдентификаторИсточникаСтрокой из ссылки источника.
	Если Количество() > 0 Тогда

		Если ЭтотОбъект[0].ОбъектВыгруженПоСсылке = Истина
			ИЛИ НЕ ЗначениеЗаполнено(ЭтотОбъект[0]["УникальныйИдентификаторИсточника"]) Тогда
			Возврат;
		КонецЕсли;

		ЭтотОбъект[0]["УникальныйИдентификаторИсточникаСтрокой"] = Строка(ЭтотОбъект[0]["УникальныйИдентификаторИсточника"].УникальныйИдентификатор());

	КонецЕсли;

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

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

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

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

#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли


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

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

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

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область СлужебныйПрограммныйИнтерфейс

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

	Если ОбщегоНазначения.РазделениеВключено()
		И ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда

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

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

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

#КонецЕсли

[Assistant] Процедура ДобавитьЗапись(СтруктураЗаписи)


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

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

Процедура ПриЗаполненииОграниченияДоступа(Ограничение)
Экспорт

	Ограничение.Текст =
	"РазрешитьЧтение
	|ГДЕ
	|	ИСТИНА
    // TODO: допиши оставшуюся часть

[Assistant]
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт

	Ограничение.Текст =
	"РазрешитьЧтение
	|ГДЕ
	|	ИСТИНА
	|;
	|РазрешитьИзменениеЕслиРазрешеноЧтение
	|ГДЕ
	|	ИзменениеОбъектаРазрешено(СсылкаНаОбъект)";

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

// Добавить активность пользователя
//
// Параметры:
//  Источник - СправочникОбъект - Источник
//  ДопПараметры - Структура - ДопПараметры
//  Отказ - Булево - Отказ
//

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

	Если Константы.узРегистрироватьАктивностьПользователей.Получить() = Ложь Тогда
		Возврат;
	Конецесли;

	ТипЗнчИсточник = ТипЗнч(Источник);

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

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

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

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

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

	пДатаАктивности = Источник.ДатаВерсии;
	пСсылкаНаОбъект = Источник.Ссылка;
	пПользователь = Источник.Пользователь;

	ПредставлениеЗадачи	= "";
	пЗадача = Источник.Задача;
	Если ЗначениеЗаполнено(пЗадача) Тогда
		ПредставлениеЗадачи = "#" + Формат(пЗадача.Код,"ЧГ=0") + " " + пЗадача;
	Конецесли;

	пОписание = "" + ВидыСобытий_ИзмененаКонфигурация;
	Если ЗначениеЗаполнено(пЗадача) Тогда
		пОписание = "" + ВидыСобытий_ИзмененаКонфигурация + " по задаче " + ПредставлениеЗадачи;
	Конецесли;

	НаборЗаписей = РегистрыСведений.узАктивностиПользователей.СоздатьНаборЗаписей();
	НаборЗаписей.Отбор.СсылкаНаОбъект.Установить(пСсылкаНаОбъект);
	НаборЗаписей.Очистить();

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

	НаборЗаписей.Записать();
КонецПроцедуры

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

	НомерРелиза	= "" + Источник.НомерРелиза;

	ВидыСобытий_СозданДокументВыпускРелиза = ПредопределенноеЗначение("Перечисление.узВидыСобытий.СозданДокументВыпускРелиза");
	ВидыСобытий_ПроведенДокументВыпускРелиза = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ПроведенДокументВыпускРелиза");

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

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

		МенеджерЗаписи = РегистрыСведений.узАктивностиПользователей.СоздатьМенеджерЗаписи();

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

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

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

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

	ПредставлениеЗадачи	= "";
	пЗадача = Источник.Задача;
	Если ЗначениеЗаполнено(пЗадача) Тогда
		ПредставлениеЗадачи = "#" + Формат(пЗадача.Код,"ЧГ=0") + " " + пЗадача;
	Конецесли;

	ВидыСобытий_ДобавленВопрос = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ДобавленВопрос");
	ВидыСобытий_ЗакрытВопрос = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ЗакрытВопрос");
	ВидыСобытий_ИзмененОтвет = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененОтвет");
	ВидыСобытий_ИзмененВопрос = ПредопределенноеЗначение("Перечисление.узВидыСобытий.ИзмененВопрос");

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

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

		МенеджерЗаписи = РегистрыСведений.узАктивностиПользователей.СоздатьМенеджерЗаписи();

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

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

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


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

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

Процедура ОтразитьСостояниеЗадачи(Задачи, Отказ, Очередь = Неопределено)
Экспорт

	Если Отказ Тогда
		Возврат;
	КонецЕсли;

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

	СтруктураПоиска = СтруктураПоискаПредыдущихСостояний();

	ТаблицаСостоянийЗадач = ТаблицаСостоянийЗадач(МассивСсылок);
	ТаблицаПредыдущихСостоянийЗадач = ТаблицаПредыдущихСостоянийЗадач(МассивСсылок);

	Для Каждого СтрокаТаблицы Из ТаблицаСостоянийЗадач Цикл

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

		СостояниеИзменено = НЕ Булево(МассивДействующихСостояний.Количество());

		Если СостояниеИзменено Тогда

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

			Если Не ЭтоПустаяЗапись(СтрокаТаблицы) Тогда
				СтрокаНабора = НаборЗаписей.Добавить();
				ЗаполнитьЗначенияСвойств(СтрокаНабора, СтрокаТаблицы);
			КонецЕсли;
    // TODO: допиши оставшуюся часть

[Assistant]
Процедура ОтразитьСостояниеЗадачи(Задачи, Отказ, Очередь = Неопределено) Экспорт

	Если Отказ Тогда
		Возврат;
	КонецЕсли;

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

	СтруктураПоиска = СтруктураПоискаПредыдущихСостояний();

	ТаблицаСостоянийЗадач = ТаблицаСостоянийЗадач(МассивСсылок);
	ТаблицаПредыдущихСостоянийЗадач = ТаблицаПредыдущихСостоянийЗадач(МассивСсылок);

	Для Каждого СтрокаТаблицы Из ТаблицаСостоянийЗадач Цикл

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

		СостояниеИзменено = НЕ Булево(МассивДействующихСостояний.Количество());

		Если СостояниеИзменено Тогда

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

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

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

				ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение,
					Метаданные.Справочники.узЗадачи, СтрокаТаблицы.Задача, ТекстСообщения);
			КонецПопытки;

		ИначеЕсли Очередь <> Неопределено Тогда

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

			ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(НаборЗаписей);

		КонецЕсли;

	КонецЦикла;

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

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

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

Функция ТаблицаСостоянийЗадач(МассивЗадач)

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

	ТекстЗапроса = СтрСоединить(ПакетЗапросов, ОбщегоНазначения.РазделительПакетаЗапросов());

	Запрос = Новый Запрос;
	Запрос.Текст = ТекстЗапроса;
	Запрос.УстановитьПараметр("МассивЗадач", МассивЗадач);

	ТаблицаСостояний = Запрос.Выполнить().Выгрузить();

	Возврат ТаблицаСостояний;

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

Функция ТаблицаПредыдущихСостоянийЗадач(МассивЗадач)

	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("МассивЗадач", МассивЗадач);
	Запрос.Текст =
	"ВЫБРАТЬ
	|	СостояниеВзаимодействий.Задача КАК Задача,
	|	СостояниеВзаимодействий.КоличествоПрисоединенныхФайлов КАК КоличествоПрисоединенныхФайлов,
	|	СостояниеВзаимодействий.КоличествоВходящихПисем КАК КоличествоВходящихПисем,
	|	СостояниеВзаимодействий.КоличествоИсходящихПисем КАК КоличествоИсходящихПисем,
	|	СостояниеВзаимодействий.ДатаПоследнегоВходящегоПисьма КАК ДатаПоследнегоВходящегоПисьма,
	|	СостояниеВзаимодействий.ДатаПоследнегоИсходящегоПисьма КАК ДатаПоследнегоИсходящегоПисьма,
	|	СостояниеВзаимодействий.КоличествоВложенийПисем КАК КоличествоВложенийПисем
	|ИЗ
	|	РегистрСведений.узСостояниеВзаимодействийПоЗадачам КАК СостояниеВзаимодействий
	|ГДЕ
	|	СостояниеВзаимодействий.Задача В(&МассивЗадач)";

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

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

Функция ТекстЗапросаКоличестваФайловЗадачи()

	ТекстЗапроса =
	"ВЫБРАТЬ
	|	ФайлыЗадач.ВладелецФайла КАК Задача,
	|	КОЛИЧЕСТВО(*) КАК Количество
	|ПОМЕСТИТЬ ВтПрисоединенныеФайлы
	|ИЗ
	|	ЗадачиПрисоединенныеФайлы КАК ФайлыЗадач
	|ГДЕ
	|	ФайлыЗадач.ВладелецФайла В(&МассивЗадач)
	|	И &ЭтоГруппа = ЛОЖЬ
	|	И &ЭтоСлужебный = ЛОЖЬ
	|
	|СГРУППИРОВАТЬ ПО
	|	ФайлыЗадач.ВладелецФайла
	|
	|ИНДЕКСИРОВАТЬ ПО
	|	Задача";

	ПустаяСсылка = Справочники.узЗадачи.ПустаяСсылка();
	ИмяСправочникаФайлов = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов(ПустаяСсылка);
	МетаданныеСправочникаФайлов = Метаданные.Справочники[ИмяСправочникаФайлов];

	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ЗадачиПрисоединенныеФайлы",
		МетаданныеСправочникаФайлов.ПолноеИмя());

	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоГруппа",
		?(МетаданныеСправочникаФайлов.Иерархический, "ФайлыЗадач.ЭтоГруппа", "ЛОЖЬ"));

	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоСлужебный",
		?(ОбщегоНазначения.ЕстьРеквизитОбъекта("Служебный", МетаданныеСправочникаФайлов), "ФайлыЗадач.Служебный", "ЛОЖЬ"));

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

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

Функция ТекстЗапросаИнформацииОПисьмах(НаправлениеПисьма)

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

	ИмяДокументаПисьма = "ЭлектронноеПисьмо" + НаправлениеПисьма;
	ПустаяСсылка = Документы[ИмяДокументаПисьма].ПустаяСсылка();
	ИмяСправочникаФайлов = РаботаСФайламиСлужебный.ИмяСправочникаХраненияФайлов(ПустаяСсылка);
	МетаданныеСправочникаФайлов = Метаданные.Справочники[ИмяСправочникаФайлов];

	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ВтВзаимодействие",
		"ВтВзаимодействие" + НаправлениеПисьма);

	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ДокументЭлектронноеПисьмо",
		"Документ." + ИмяДокументаПисьма);

	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ЭлектронноеПисьмо.Дата",
		?(НаправлениеПисьма = "Входящее", "ЭлектронноеПисьмо.ДатаПолучения", "ЭлектронноеПисьмо.ДатаОтправления"));

	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "ЭлектронноеПисьмоПрисоединенныеФайлы",
		МетаданныеСправочникаФайлов.ПолноеИмя());

	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоГруппа",
		?(МетаданныеСправочникаФайлов.Иерархический, "ВложенияПисьма.ЭтоГруппа", "ЛОЖЬ"));

	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&ЭтоСлужебный",
		?(ОбщегоНазначения.ЕстьРеквизитОбъекта("Служебный", МетаданныеСправочникаФайлов), "ВложенияПисьма.Служебный", "ЛОЖЬ"));

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

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


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

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

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

	Настройки.ФормироватьСразу = Истина;
    // TODO: допиши оставшуюся часть

[Assistant]
Процедура ОпределитьНастройкиФормы(Форма, КлючВарианта, Настройки) Экспорт

	Настройки.ФормироватьСразу = Истина;

	Если Форма <> Неопределено Тогда
		УстановитьПредопределенныйПоВариантуВнедрения(Форма, КлючВарианта);
	КонецЕсли;

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

// Конец СтандартныеПодсистемы.ВариантыОтчетов

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

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

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

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

	СтандартнаяОбработка = Ложь;

	ДокументРезультат.Очистить();

	Настройки = КомпоновщикНастроек.ПолучитьНастройки();

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

	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);

	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);

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

	ПроцессорВывода.НачатьВывод();
	ЭлементРезультата = ПроцессорКомпоновки.Следующий();
	Пока ЭлементРезультата <> Неопределено Цикл
		ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
		ЭлементРезультата = ПроцессорКомпоновки.Следующий();
	КонецЦикла;
	ПроцессорВывода.ЗакончитьВывод();

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

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

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

Процедура УстановитьПредопределенныйПоВариантуВнедрения(Форма, КлючВарианта)

	Если Форма.Параметры.КлючВарианта <> Неопределено Тогда
		Возврат; // Вариант отчета указан при открытии.
	КонецЕсли;

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

	Если Свойства.ПоказыватьРазделы И НЕ Свойства.ВсеРазделыБезОбъектов Тогда

		Если КлючВарианта <> "ДатыЗапретаИзмененияПоПользователям"
		   И КлючВарианта <> "ДатыЗапретаИзмененияПоРазделамОбъектамДляПользователей" Тогда

			Форма.Параметры.КлючВарианта = "ДатыЗапретаИзмененияПоПользователям";
		КонецЕсли;

	ИначеЕсли Свойства.ВсеРазделыБезОбъектов Тогда

		Если КлючВарианта <> "ДатыЗапретаИзмененияПоПользователямБезОбъектов"
		   И КлючВарианта <> "ДатыЗапретаИзмененияПоРазделамДляПользователей" Тогда

			Форма.Параметры.КлючВарианта = "ДатыЗапретаИзмененияПоПользователямБезОбъектов";
		КонецЕсли;
	Иначе
		Если КлючВарианта <> "ДатыЗапретаИзмененияПоПользователямБезРазделов"
		   И КлючВарианта <> "ДатыЗапретаИзмененияПоОбъектамДляПользователей" Тогда

			Форма.Параметры.КлючВарианта = "ДатыЗапретаИзмененияПоПользователямБезРазделов";
		КонецЕсли;
	КонецЕсли;

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

Функция ДатыЗапретаПодготовленные(ПараметрыДанных)

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

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

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

		Если Строка.Объект <> Строка.Раздел Тогда
			Строка.ОбъектПредставление = Строка(Строка.Объект);

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

		Если ЗначениеЗаполнено(Строка.Раздел) Тогда
			Строка.РазделПредставление = Строка(Строка.Раздел);
		Иначе
			Строка.РазделПредставление = "<" + НСтр("ru = 'Общая дата'") + ">";
		КонецЕсли;

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

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

		Строка.НастройкаОбщаяДата  = Не ЗначениеЗаполнено(Строка.Раздел);
		Строка.НастройкаДляРаздела = Строка.Объект = Строка.Раздел;
		Строка.НастройкаДляВсехАдресатов =
			Строка.АдресатНастройки = Перечисления.ВидыНазначенияДатЗапрета.ДляВсехПользователей;
	КонецЦикла;

	Возврат Таблица;

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

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

	Параметр = ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ИмяПараметра));

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

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

	Массив = Новый Массив;
	Массив.Добавить(Параметр.Значение);

	Возврат Массив;

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


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

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

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

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

	НастройкиОтчета.ОпределитьНастройкиФормы = Истина;

	НастройкиВарианта_Горизонталь = ВариантыОтчетов.ОписаниеВарианта(Настройки, НастройкиОтчета, "Основной");
	НастройкиВарианта_Горизонталь.Описание = НСтр("ru = 'Горизонтальное размещение колонок с измерениями, ресурсами и реквизитами регистров.'");
	НастройкиВарианта_Горизонталь.НастройкиДляПоиска.КлючевыеСлова = НСтр("ru = 'Движения документа'");
    // TODO: допиши оставшуюся часть

[Assistant]
Процедура НастроитьВариантыОтчета(Настройки, НастройкиОтчета) Экспорт

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

	НастройкиОтчета.ОпределитьНастройкиФормы = Истина;

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

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

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

// Для вызова из процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.
//
// Параметры:
//  КомандыОтчетов - ТаблицаЗначений - таблица команд для вывода в подменю, где:
//       * Идентификатор - Строка - идентификатор команды.
//       * Представление - Строка   - представление команды в форме.
//       * Важность      - Строка   - суффикс группы в подменю, в которой следует вывести эту команду.
//       * Порядок       - Число    - порядок размещения команды в группе. Используется для настройки под конкретное
//                                    рабочее место.
//       * Картинка      - Картинка - картинка команды.
//       * СочетаниеКлавиш - СочетаниеКлавиш - сочетание клавиш для быстрого вызова команды.
//       * ТипПараметра - ОписаниеТипов - типы объектов, для которых предназначена эта команда.
//       * ВидимостьВФормах    - Строка - имена форм через запятую, в которых должна отображаться команда.
//       * ФункциональныеОпции - Строка - имена функциональных опций через запятую, определяющих видимость команды.
//       * УсловияВидимости    - Массив - определяет видимость команды в зависимости от контекста.
//       * ИзменяетВыбранныеОбъекты - Булево - определяет доступность команды.
//       * МножественныйВыбор - Булево
//                            - Неопределено - если Истина, то команда поддерживает множественный выбор.
//             В этом случае в параметре выполнения будет передан список ссылок.
//             Необязательный. Значение по умолчанию: Истина.
//       * РежимЗаписи - Строка - действия, связанные с записью объекта, которые выполняются перед обработчиком команды.
//       * ТребуетсяРаботаСФайлами - Булево - если Истина, то в веб-клиенте предлагается
//             установить расширение для работы с 1С:Предприятием.
//       * Менеджер - Строка - полное имя объекта метаданных, отвечающего за выполнение команды.
//       * ИмяФормы - Строка - имя формы, которую требуется открыть или получить для выполнения команды.
//       * КлючВарианта - Строка - имя варианта отчета, открываемого при выполнении команды.
//       * ИмяПараметраФормы - Строка - имя параметра формы, в который следует передать ссылку или массив ссылок.
//       * ПараметрыФормы - Неопределено
//                        - Структура - параметры формы, указанной в ИмяФормы.
//       * Обработчик - Строка - описание процедуры, обрабатывающей основное действие команды.
//       * ДополнительныеПараметры - Структура - параметры обработчика, указанного в Обработчик.
//  Параметры                   - Структура - структура, содержащая параметры подключения команды.
//  ДокументыСОтчетомОДвижениях - Массив
//                              - Неопределено - массив документов, в которых будет выводится
//                                команда открытия отчета. Неопределено в том случае когда отчет выводится
//                                для всех документов со свойством "Проведение" установленным в "Разрешить"
//                                и непустой коллекцией движений.
//
// Возвращаемое значение:
//  СтрокаТаблицыЗначений, Неопределено - добавленная команда или Неопределено, если нет прав на просмотр отчета.
//

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

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

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

	Команда                    = КомандыОтчетов.Добавить();
	Команда.Представление      = НСтр("ru = 'Движения документа'");
	Команда.МножественныйВыбор = Ложь;
	Команда.ИмяПараметраФормы  = "";
	Команда.Важность           = "СмТакже";
	Команда.ТипПараметра       = ОписаниеТипаПараметраКоманды;
	Команда.Менеджер           = "Отчет.ДвиженияДокумента";
	Команда.СочетаниеКлавиш    = Новый СочетаниеКлавиш(Клавиша.A, Ложь, Истина, Истина);

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

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

// См. ВариантыОтчетовПереопределяемый.НастроитьВариантыОтчетов.

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

	ВариантыОтчетов.НастроитьОтчетВМодулеМенеджера(Настройки, Метаданные.Отчеты.ДвиженияДокумента);

	ОписаниеОтчета = ВариантыОтчетов.ОписаниеОтчета(Настройки, Метаданные.Отчеты.ДвиженияДокумента);
	ОписаниеОтчета.Включен = Ложь;

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

// См. ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов.

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

	ДобавитьКомандуОтчетОДвиженияхДокумента(КомандыОтчетов, Параметры);

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

// Конец СтандартныеПодсистемы.ВариантыОтчетов

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

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

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

Функция ОписаниеТипаПараметраКоманды(Знач КомандыОтчетов, Знач Параметры, Знач ДокументыСОтчетомОДвижениях)

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

	СтрокиИсточников = Параметры.Источники.Строки;

	Если ДокументыСОтчетомОДвижениях <> Неопределено Тогда
		ОтключитьОтчетОтДокументов(КомандыОтчетов);
		ДокументыСОтчетом = Новый Соответствие;
		Для каждого ДокументСОтчетом Из ДокументыСОтчетомОДвижениях Цикл
			ДокументыСОтчетом[ДокументСОтчетом] = Истина;
		КонецЦикла;
	Иначе
		ДокументыСОтчетом = Неопределено;
	КонецЕсли;

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

		ТипСсылкиДанных = СтрокаИсточника.ТипСсылкиДанных;

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

	КонецЦикла;

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

	Индекс = ТипыДокументовСДвижениями.Количество() - 1;
	Пока Индекс >= 0 Цикл
		Если Не ЭтоПодключаемыйТип(ТипыДокументовСДвижениями[Индекс], ДокументыСОтчетом) Тогда
			ТипыДокументовСДвижениями.Удалить(Индекс);
		КонецЕсли;
		Индекс = Индекс - 1;
	КонецЦикла;

	Возврат ?(ТипыДокументовСДвижениями.Количество() > 0, Новый ОписаниеТипов(ТипыДокументовСДвижениями), Неопределено);

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


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

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

Функция ИмяФункции(Знач Строчка, Знач УчитыватьЗапятую = Истина)

	Количество = СтрДлина(строчка);
	НоваяСтрочка = "";
	Попытка
		Для н = 1 по количество  Цикл
			Символ = Сред(Строчка, н, 1);
			Если Символ <> "0" и
				Символ <> "1" и
				Символ <> "2" и
				Символ <> "3" и
				Символ <> "4" и
				Символ <> "5" и
				Символ <> "6" и
				Символ <> "7" и
				Символ <> "8" и
				Символ <> "9" И
				Не (Символ = "," и УчитыватьЗапятую)Тогда
				продолжить;
			КонецЕсли;
			НоваяСтрочка = НоваяСтрочка + Символ;
		КонецЦикла;
		Если НоваяСтрочка = "" или НоваяСтрочка = " " Тогда
			НоваяСтрочка = "0";
		КонецЕсли;
	Исключение
	КонецПопытки;
	Возврат НоваяСтрочка;
КонецФункции

&НаКлиенте

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

&НаКлиенте

[Assistant] Функция ИзСтрокиВЧисло(Знач Строчка, Знач УчитыватьЗапятую = Истина)