Форма П-4 "Сведения о численности, заработной плате и движении работников" / Форма П-4 / Модуль формы

файл
&НаСервере
Перем мОбъектОтчета;

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

	// Обход ошибки платформы Параметр сеанса отсутствует или удален
	ПолеТабличногоДокументаФормаОтчета.Очистить();
	
	СформироватьСтруктуруРеквизитовФормы();
	
	СтруктураРеквизитовФормы.СписокПечатаемыхЛистов = Новый СписокЗначений;

	// ОПИСАНИЕ ПАРМЕТРОВ ФОРМЫ
	//
	// Версия формы
	СтруктураРеквизитовФормы.мВерсияФормы = "";
	// Код отчета, равен коду по ОКУД
	СтруктураРеквизитовФормы.мКодОтчета   = "0606010";
	СтруктураРеквизитовФормы.мСоставПоказателей = СтруктураРеквизитовФормы["ИмяМакетаСоставаПоказателей"];
	
	СтруктураРеквизитовФормы.мПечатныеФормы = Новый СписокЗначений;
	мСтруктураВариантыЗаполнения = Новый Структура;
	
	ПорядкиОкругленияОтчетности = Новый Структура;
	ПорядкиОкругленияОтчетности.Вставить("ПеречислениеПорядкиОкругленияОтчетностиОкр1",
		Перечисления.ПорядкиОкругленияОтчетности.Окр1);
	ПорядкиОкругленияОтчетности.Вставить("ПеречислениеПорядкиОкругленияОтчетностиОкр1000",
		Перечисления.ПорядкиОкругленияОтчетности.Окр1000);
	ПорядкиОкругленияОтчетности.Вставить("ПеречислениеПорядкиОкругленияОтчетностиОкр1000000",
		Перечисления.ПорядкиОкругленияОтчетности.Окр1000000);
	
	СоответствиеЕдиницыИзмеренияДелителю = Новый Структура;
	СоответствиеЕдиницыИзмеренияДелителю.Вставить("Окр1", 1);
	СоответствиеЕдиницыИзмеренияДелителю.Вставить("Окр1000", 1000);
	СоответствиеЕдиницыИзмеренияДелителю.Вставить("Окр1000000", 1000000);
	
	СтруктураРеквизитовФормы.мОписаниеТиповЧислоЕ   = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(17, 2));
	
	РегламентированнаяОтчетность.ВывестиШапкуРегистрацияРеспондента(ПолеТабличногоДокументаФормаОтчета);
	ПолеТабличногоДокументаФормаОтчета.Вывести(ОбъектОтчета(ИмяФормы).ПолучитьМакет(
		СтруктураРеквизитовФормы["ИмяМакетаТабличногоДокумента"]));
		
	СтруктураРеквизитовФормы.НаимТекущегоРаздела      = "ПолеТабличногоДокументаФормаОтчета";
	СтруктураРеквизитовФормы.мВыбраннаяФорма          = Параметры.мВыбраннаяФорма;
	СтруктураРеквизитовФормы.мДатаКонцаПериодаОтчета  = Параметры.мДатаКонцаПериодаОтчета;
	СтруктураРеквизитовФормы.мДатаНачалаПериодаОтчета = Параметры.мДатаНачалаПериодаОтчета;
	СтруктураРеквизитовФормы.мПериодичность           = Параметры.мПериодичность;
	СтруктураРеквизитовФормы.мСкопированаФорма        = Параметры.мСкопированаФорма;
	СтруктураРеквизитовФормы.мСохраненныйДок          = Параметры.мСохраненныйДок;
	СтруктураРеквизитовФормы.Организация              = Параметры.Организация;
	
	ДатаПодписи = ТекущаяДатаСеанса();
	
	Если ЗначениеЗаполнено(Параметры.мСохраненныйДок) И Параметры.мСкопированаФорма = Неопределено Тогда
		СтруктураРеквизитовФормы.мПериодичность =  Параметры.мСохраненныйДок.Периодичность;
	КонецЕсли;
	
	РегламентированнаяОтчетность.СформироватьСтруктуруЦветовРаскраски(ЭтотОбъект);
	
	мСтруктураВариантыЗаполнения = Новый Структура;
	мСтруктураВариантыЗаполненияЭталон = Новый Структура;
	
	СтруктураРеквизитовФормы.СправочникиВидыКонтактнойИнформацииПочтовыйАдресОрганизации
		= Справочники.ВидыКонтактнойИнформации.ПочтовыйАдресОрганизации;
	
	Инициализация(Параметры.БезОткрытияФормы);
	
	ИнициализироватьВыводСтатусовИВажныхСообщений_85();

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

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

	Если Периодичность = Перечисления.Периодичность.Месяц Тогда
		ИмяМакетаАтр = "АтрибВыгрузкиXML2023Кв1_месяц";
		ИмяШаблона   = "ШаблонРосстата2023Кв1_месяц";
		ИмяСписки    = "Списки2023Кв1_месяц";
	Иначе
		ИмяМакетаАтр = "АтрибВыгрузкиXML2023Кв1_квартал";
		ИмяШаблона   = "ШаблонРосстата2023Кв1_квартал";
		ИмяСписки    = "Списки2023Кв1_квартал";
	КонецЕсли;
	
	СтруктураРеквизитовФормы["ИмяМакетаТабличногоДокумента"] = "ФормаОтчета2023Кв1_ФормаОтчета";
	СтруктураРеквизитовФормы["ИмяМакетаАтрибутовВыгрузки"] = ИмяМакетаАтр;
	СтруктураРеквизитовФормы["ИмяМакетаСхемыВыгрузки"] = "СхемаВыгрузкиXML2023Кв1";
	СтруктураРеквизитовФормы["ИмяМакетаШаблона"] = ИмяШаблона;
	СтруктураРеквизитовФормы["ИмяМакетаСписков"] = ИмяСписки;
	СтруктураРеквизитовФормы["ИмяМакетаСоставаПоказателей"] = "СоставПоказателей2023Кв1";
	
КонецПроцедуры

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

	Если СтруктураРеквизитовФормы.мСохраненныйДок = Неопределено Тогда

		Если СтруктураРеквизитовФормы.мСкопированаФорма <> Неопределено Тогда
			// документ скопирован
			ВосстановитьСохраненныеДанные();
		КонецЕсли;
		
		Модифицированность = Истина;

	Иначе

		// При открытии или при копировании сохраненного
		// отчета восстанавливаем сохраненные данные.
		ВосстановитьСохраненныеДанные();
		
		Если ЗначениеЗаполнено(СтруктураРеквизитовФормы.мСкопированаФорма) Тогда
			СтруктураРеквизитовФормы.мСохраненныйДок = Неопределено;
		КонецЕсли;
		
		Если НЕ БезОткрытияФормы
			И НЕ СтруктураРеквизитовФормы.мСохраненныйДок = Неопределено Тогда
				
			РегламентированнаяОтчетность.БлокировкаИлиЗапретРедактированияОтчета(ЭтотОбъект);
		КонецЕсли;
		
	КонецЕсли;
	
	Если СтруктураРеквизитовФормы.мСохраненныйДок = Неопределено Тогда
		НомерКорректировки = 0;
	Иначе
		НомерКорректировки = СтруктураРеквизитовФормы.мСохраненныйДок.Вид;
	КонецЕсли;
	
	ПолеТабличногоДокументаФормаОтчета.Области.НомерКорректировки.Значение = НомерКорректировки;
	ПолеТабличногоДокументаФормаОтчета.Области.ДатаСоставленияОтчета.Значение = ДатаПодписи;
	ПолеТабличногоДокументаФормаОтчета.Области.П0001001В1.Значение = "00";
	
	УстановитьДоступностьЭУВыбораОбособленныхПодразделений(ЭтотОбъект);

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

&НаСервере
Процедура ФормироватьСтруктуруСтраницОтчета() Экспорт
	
	// Дерево содержит коллекцию страниц отчета.
	// В колонках дерева хранятся следующие данные:
	//    - представление листа;
	//    - имя страницы основной панели формы, содержащей выводимый на печать лист;
	//    - имя поля табличного документа;
	//    - имя области ячеек табличного документа (используется в случае вывода
	//      на печать отдельных страниц титульного листа);
	//    - ориентация страницы при печати;
	//    - число, метка вывода страницы на печать;
	//    - число, метка показа страницы на основной панели формы;
	//    - число, метка выгрузки данных страницы в ИМНС.
	//
	
	мДеревоСтраницОтчета.ПолучитьЭлементы().Очистить();
	
	СтрокаУровня1 = мДеревоСтраницОтчета.ПолучитьЭлементы().Добавить();
	СтрокаУровня1.ИмяСтраницы              = "ПолеТабличногоДокументаФормаОтчета";
	СтрокаУровня1.Представление            = "Статистика: Форма П-4";
	СтрокаУровня1.ОриентацияСтраницы       = "Ландшафт";
	СтрокаУровня1.ВыводНаПечать            = 1;
	СтрокаУровня1.ПоказатьСтраницу         = 1;
	СтрокаУровня1.ВыгрузитьСтраницу        = 2;
	
КонецПроцедуры

&НаСервере
Процедура ФормироватьСтруктуруСвойствСтраниц() Экспорт

	// 0 - нет
	// 1 - есть одна многострочная часть
	// 2 - и более, точное кол-во число многострочных частей на листе
	// Позволяет записывать многострочность в многостраничных документ либо как ТаблицуЗначений, либо как Структуру
	// В случае, если как Структура, то необходима еще одна процедура СформироватьСтруктуруДанныхДопСтрокСтраницы
	// Только для Многостраничных документов !
	// 3. Будет ли очищаться раздел по кнопки "Очистить"
	// 4. Если раздел многостраничный, параметр МногостраничностьВРазделе = Истина, тогда имя поля, по которому
	// будет осуществляться Представление доп. страницы
	// 5. Есть ли в разделе значения, отображаемые в квадратном представлении
	// 6. Обязательный раздел для выгрузки или нет
	// 7. Обязательный раздел для выгрузки или нет

	мСвойстваРазделовДекларации.ПолучитьЭлементы().Очистить();

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	Если СтрНайти(Заголовок, СтруктураРеквизитовФормы.СтрПериодОтчета) = 0 Тогда
		Заголовок = Заголовок + " за " + СтруктураРеквизитовФормы.СтрПериодОтчета;
	КонецЕсли;
	
	ОргСтр = " (" + СтруктураРеквизитовФормы.НаимОрганизации + ")";
	Если СтрНайти(Заголовок, ОргСтр) = 0 Тогда
		Заголовок = Заголовок + ОргСтр;
	КонецЕсли;
	
	Заголовок = Заголовок + ?(СтрНайти(ИмяФормы, "Внешний") > 0, " - внешний отчет", "");
	
	ПодключитьОбработчикОжидания("ВыполнитьПроверкуПередОткрытием", 0.1, Истина);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПриОткрытииЗавершение(Отказ, ДополнительныеПараметры) Экспорт
	
	Если Отказ Тогда
		Модифицированность = Ложь;
		Закрыть();
		Возврат;
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
	
	Если ЗавершениеРаботы Тогда
		Возврат;
	КонецЕсли;
	
	ПриЗакрытииНаСервере();
	
КонецПроцедуры

&НаСервере
Процедура ПриЗакрытииНаСервере()
	РегламентированнаяОтчетность.ПриЗакрытииРегламентированногоОтчета(ЭтотОбъект);
КонецПроцедуры

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьДатуВЯчейкахНаСервере() Экспорт
	ЗаполнитьДатуВЯчейках(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьДатуВЯчейкахНаКлиенте() Экспорт
	ЗаполнитьДатуВЯчейках(ЭтотОбъект);
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьДатуВЯчейках(Форма)
	
	// Процедура "заглушка", для роОчистить.
	Возврат;
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура Очистить() Экспорт
	
	ОчиститьНаСервере();
	
	// устанавливаем флаг модифицированности формы
	Модифицированность = Истина;
	
КонецПроцедуры

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

&НаКлиенте
Процедура РасчетНаКлиенте(ИмяСтраницыПанели = "", ОбластьИмя = "") Экспорт
	Расчет(ЭтотОбъект, ИмяСтраницыПанели, ОбластьИмя);
КонецПроцедуры

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

&НаКлиентеНаСервереБезКонтекста
Процедура Расчет(Форма, ИмяТекущейСтраницыПанели = "", ОбластьИмя = "")
	
	Если Форма.СтруктураРеквизитовФормы.ФлажокОтклАвтоРасчет Тогда
		Возврат;
	КонецЕсли;
	
	Области = Форма.ПолеТабличногоДокументаФормаОтчета.Области;
	
	Области.П010000102.Значение = Области.П010000202.Значение + Области.П010000302.Значение + Области.П010000402.Значение
								+ Области.П010000502.Значение + Области.П010000602.Значение + Области.П010000702.Значение
								+ Области.П010000802.Значение + Области.П010000902.Значение + Области.П010001002.Значение
								+ Области.П010001102.Значение;
		
	Области.П010000103.Значение = Области.П010000203.Значение + Области.П010000303.Значение + Области.П010000403.Значение + Области.П010000503.Значение + Области.П010000603.Значение
	                                         + Области.П010000703.Значение + Области.П010000803.Значение + Области.П010000903.Значение + Области.П010001003.Значение + Области.П010001103.Значение;
	
	Области.П010000104.Значение = Области.П010000204.Значение + Области.П010000304.Значение + Области.П010000404.Значение + Области.П010000504.Значение + Области.П010000604.Значение
	                                         + Области.П010000704.Значение + Области.П010000804.Значение + Области.П010000904.Значение + Области.П010001004.Значение + Области.П010001104.Значение;
	
	Области.П010000101.Значение = Области.П010000102.Значение + Области.П010000103.Значение + Области.П010000104.Значение;
	
	Области.П010000201.Значение = Области.П010000202.Значение + Области.П010000203.Значение + Области.П010000204.Значение;
	
	Области.П010000301.Значение = Области.П010000302.Значение + Области.П010000303.Значение + Области.П010000304.Значение;
	
	Области.П010000401.Значение = Области.П010000402.Значение + Области.П010000403.Значение + Области.П010000404.Значение;
	
	Области.П010000501.Значение = Области.П010000502.Значение + Области.П010000503.Значение + Области.П010000504.Значение;
	
	Области.П010000601.Значение = Области.П010000602.Значение + Области.П010000603.Значение + Области.П010000604.Значение;
	
	Области.П010000701.Значение = Области.П010000702.Значение + Области.П010000703.Значение + Области.П010000704.Значение;
	
	Области.П010000801.Значение = Области.П010000802.Значение + Области.П010000803.Значение + Области.П010000804.Значение;
	
	Области.П010000901.Значение = Области.П010000902.Значение + Области.П010000903.Значение + Области.П010000904.Значение;
	
	Области.П010001001.Значение = Области.П010001002.Значение + Области.П010001003.Значение + Области.П010001004.Значение;
	
	Области.П010001101.Значение = Области.П010001102.Значение + Области.П010001103.Значение + Области.П010001104.Значение;
	
	// Раздел 1 продолжение, расчет графы 5 и 6.
	Области.П010000105.Значение = Области.П010000205.Значение
	                                         + Области.П010000305.Значение
	                                         + Области.П010000405.Значение
	                                         + Области.П010000505.Значение
	                                         + Области.П010000605.Значение
	                                         + Области.П010000705.Значение
	                                         + Области.П010000805.Значение
	                                         + Области.П010000905.Значение
	                                         + Области.П010001005.Значение
	                                         + Области.П010001105.Значение;
	
	Области.П010000106.Значение = Области.П010000206.Значение
	                                         + Области.П010000306.Значение
	                                         + Области.П010000406.Значение
	                                         + Области.П010000506.Значение
	                                         + Области.П010000606.Значение
	                                         + Области.П010000706.Значение
	                                         + Области.П010000806.Значение
	                                         + Области.П010000906.Значение
	                                         + Области.П010001006.Значение
	                                         + Области.П010001106.Значение;
	
	Области.П010000107.Значение = Области.П010000207.Значение
	                                         + Области.П010000307.Значение
	                                         + Области.П010000407.Значение
	                                         + Области.П010000507.Значение
	                                         + Области.П010000607.Значение
	                                         + Области.П010000707.Значение
	                                         + Области.П010000807.Значение
	                                         + Области.П010000907.Значение
	                                         + Области.П010001007.Значение
	                                         + Области.П010001107.Значение;
	
	Области.П010000108.Значение = Области.П010000208.Значение
	                                         + Области.П010000308.Значение
	                                         + Области.П010000408.Значение
	                                         + Области.П010000508.Значение
	                                         + Области.П010000608.Значение
	                                         + Области.П010000708.Значение
	                                         + Области.П010000808.Значение
	                                         + Области.П010000908.Значение
	                                         + Области.П010001008.Значение
	                                         + Области.П010001108.Значение;
	
	Области.П010000109.Значение = Области.П010000209.Значение
	                                         + Области.П010000309.Значение
	                                         + Области.П010000409.Значение
	                                         + Области.П010000509.Значение
	                                         + Области.П010000609.Значение
	                                         + Области.П010000709.Значение
	                                         + Области.П010000809.Значение
	                                         + Области.П010000909.Значение
	                                         + Области.П010001009.Значение
	                                         + Области.П010001109.Значение;
	
	Области.П010000110.Значение = Области.П010000210.Значение
	                                         + Области.П010000310.Значение
	                                         + Области.П010000410.Значение
	                                         + Области.П010000510.Значение
	                                         + Области.П010000610.Значение
	                                         + Области.П010000710.Значение
	                                         + Области.П010000810.Значение
	                                         + Области.П010000910.Значение
	                                         + Области.П010001010.Значение
	                                         + Области.П010001110.Значение;
	
	Области.П010000111.Значение = Области.П010000211.Значение
	                                         + Области.П010000311.Значение
	                                         + Области.П010000411.Значение
	                                         + Области.П010000511.Значение
	                                         + Области.П010000611.Значение
	                                         + Области.П010000711.Значение
	                                         + Области.П010000811.Значение
	                                         + Области.П010000911.Значение
	                                         + Области.П010001011.Значение
	                                         + Области.П010001111.Значение;
	
	Области.П010000107.Значение = Области.П010000108.Значение + Области.П010000109.Значение + Области.П010000110.Значение;
	
	Области.П010000207.Значение = Области.П010000208.Значение + Области.П010000209.Значение + Области.П010000210.Значение;
	
	Области.П010000307.Значение = Области.П010000308.Значение + Области.П010000309.Значение + Области.П010000310.Значение;
	
	Области.П010000407.Значение = Области.П010000408.Значение + Области.П010000409.Значение + Области.П010000410.Значение;
	
	Области.П010000507.Значение = Области.П010000508.Значение + Области.П010000509.Значение + Области.П010000510.Значение;
	
	Области.П010000607.Значение = Области.П010000608.Значение + Области.П010000609.Значение + Области.П010000610.Значение;
	
	Области.П010000707.Значение = Области.П010000708.Значение + Области.П010000709.Значение + Области.П010000710.Значение;
	
	Области.П010000807.Значение = Области.П010000808.Значение + Области.П010000809.Значение + Области.П010000810.Значение;
	
	Области.П010000907.Значение = Области.П010000908.Значение + Области.П010000909.Значение + Области.П010000910.Значение;
	
	Области.П010001007.Значение = Области.П010001008.Значение + Области.П010001009.Значение + Области.П010001010.Значение;
	
	Области.П010001107.Значение = Области.П010001108.Значение + Области.П010001109.Значение + Области.П010001110.Значение;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура СохранитьНаКлиентеСВопросом(Автосохранение, Вариант, ВыполняемоеОповещение, ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки, ПодобныйОтчетСуществует, ПоказателиОтчета)
	
	Если ПодобныйОтчетСуществует Тогда
		
		Кнопки = Новый СписокЗначений;
		Кнопки.Добавить(КодВозвратаДиалога.Да, "Сохранить");
		Кнопки.Добавить(КодВозвратаДиалога.Нет, "Отмена");
		
		ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Отчет с видом %1 уже существует.
		|Сохранить отчет с таким же видом?'"), ?(Вариант = 0, """Первичный""", """Корректирующий/" + Вариант + """"));
		ДополнительныеПараметры = Новый Структура("Автосохранение, Вариант, ВыполняемоеОповещение,
			|ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки, ПоказателиОтчета",
			Автосохранение, Вариант, ВыполняемоеОповещение, ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки,
			ПоказателиОтчета);
		ОписаниеОповещения = Новый ОписаниеОповещения(
			"ВопросСохранитьОтчетСТакимЖеВидомЗавершение", ЭтотОбъект, ДополнительныеПараметры);
		ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки, , Кнопки.Получить(1).Значение);
		
	Иначе
		
		СохранитьНаКлиентеСВопросомПродолжение(Автосохранение, Вариант, ВыполняемоеОповещение,
			ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки, ПоказателиОтчета);
		
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

&НаСервере
Функция Сохранить(Автосохранение = Ложь, КодИФНС = "не применимо", Вариант = Неопределено, ВидДокументаНомерКорректировкиИзменен = Неопределено, ПоказателиОтчета = Неопределено) Экспорт
	
	ДанныеДляРазблокирования = Неопределено;
	
	Если НЕ СтруктураРеквизитовФормы.мСохраненныйДок = Неопределено Тогда
		Если НЕ СтруктураРеквизитовФормы.мБезОткрытияФормы Тогда
			ДанныеДляРазблокирования = Новый Структура("Ключ,ИдФормы",
			СтруктураРеквизитовФормы.мСохраненныйДок, ЭтотОбъект.УникальныйИдентификатор);
		КонецЕсли;
		СтруктураРеквизитовФормы.мСохраненныйДок = СтруктураРеквизитовФормы.мСохраненныйДок.ПолучитьОбъект();
	КонецЕсли;
	
	Если НЕ РегламентированнаяОтчетность.ПриЗаписиРегламентированногоОтчетаНаСервере(ЭтотОбъект, КодИФНС,
		Автосохранение, Вариант, ВидДокументаНомерКорректировкиИзменен, СтруктураРеквизитовФормы.мСохраненныйДок) Тогда
		СтруктураРеквизитовФормы.мСохраненныйДок = СтруктураРеквизитовФормы.мСохраненныйДок.Ссылка;
		Возврат Ложь;
	КонецЕсли;
	
	ОтчетМетаданные = Метаданные.Отчеты[Сред(Лев(СтрЗаменить(ИмяФормы, "Внешний", ""),
		СтрНайти(СтрЗаменить(ИмяФормы, "Внешний", ""), ".Форма.") - 1), 7)];
	
	ВидОтчетности = Перечисления.ВидыОтчетности.РегламентированнаяОтчетность;
	
	ПредставлениеВида = РегламентированнаяОтчетность.ПредставлениеВидаДокумента(Вариант);
	
	// Установим текущие значения реквизитов документа.
	СтруктураРеквизитовФормы.мСохраненныйДок.ФорматВыгрузки           = "Автоматически";
	СтруктураРеквизитовФормы.мСохраненныйДок.ИсточникОтчета           = ОтчетМетаданные.Имя;
	СтруктураРеквизитовФормы.мСохраненныйДок.НаименованиеОтчета       = ОтчетМетаданные.ОсновнаяФорма.Синоним;
	СтруктураРеквизитовФормы.мСохраненныйДок.ДатаНачала               = СтруктураРеквизитовФормы.мДатаНачалаПериодаОтчета;
	СтруктураРеквизитовФормы.мСохраненныйДок.ДатаОкончания            = СтруктураРеквизитовФормы.мДатаКонцаПериодаОтчета;
	СтруктураРеквизитовФормы.мСохраненныйДок.Периодичность            = СтруктураРеквизитовФормы.мПериодичность;
	СтруктураРеквизитовФормы.мСохраненныйДок.ВыбраннаяФорма           = СтруктураРеквизитовФормы.мВыбраннаяФорма;
	СтруктураРеквизитовФормы.мСохраненныйДок.Организация              = СтруктураРеквизитовФормы.Организация;
	СтруктураРеквизитовФормы.мСохраненныйДок.ДатаПодписи              = ДатаПодписи;
	СтруктураРеквизитовФормы.мСохраненныйДок.ЕдиницаИзмерения         = Неопределено;
	СтруктураРеквизитовФормы.мСохраненныйДок.ТочностьЕдиницыИзмерения = СтруктураРеквизитовФормы.ТочностьЕдиницыИзмерения;
	СтруктураРеквизитовФормы.мСохраненныйДок.ВидОтчетности            = ВидОтчетности;
	СтруктураРеквизитовФормы.мСохраненныйДок.Вид                      = Вариант;
	СтруктураРеквизитовФормы.мСохраненныйДок.ПредставлениеВида        = ПредставлениеВида;
	СтруктураРеквизитовФормы.мСохраненныйДок.Комментарий              = Комментарий;
	
	СтруктураРеквизитовФормы.мВариант = Вариант;
	
	// формируем список сохранения
	СписокСохранения = Новый Структура();
	
	ДанныеВариантовАвтоЗаполнения = Новый Структура;
	Для Каждого ЭлементСтруктуры Из мСтруктураВариантыЗаполнения Цикл
		МассивТаблЗнач = Новый Массив;
		ДанныеВариантовАвтоЗаполнения.Вставить(ЭлементСтруктуры.Ключ, МассивТаблЗнач);
		Для Каждого ЭлементМассива Из ЭтотОбъект["ТаблицаВариантыЗаполнения" + ЭлементСтруктуры.Ключ] Цикл
			МассивТаблЗнач.Добавить(ДанныеФормыВЗначение(ЭлементМассива.ТаблицаВариантовЗаполнения, Тип("ТаблицаЗначений")));
		КонецЦикла;
	КонецЦикла;
	
	СписокСохранения.Вставить("ПоказателиОтчета", ПоказателиОтчета);
	СписокСохранения.Вставить("ДанныеМногострочныхРазделов", Неопределено);
	СписокСохранения.Вставить("ДанныеВариантовАвтоЗаполнения", ДанныеВариантовАвтоЗаполнения);
	СписокСохранения.Вставить("Авторасчет", СтруктураРеквизитовФормы.ФлажокОтклАвтоРасчет);
	СписокСохранения.Вставить("ФлОтклВыборЗначений", СтруктураРеквизитовФормы.мАвтоВыборКодов);
	СписокСохранения.Вставить("Адрес_JSON", СтруктураРеквизитовФормы.Адрес_JSON);
	СписокСохранения.Вставить("ВерсияФормы", СтруктураРеквизитовФормы.мВерсияФормы);
	СписокСохранения.Вставить("ИсключитьДанныеОбособленныхПодразделений", ИсключитьДанныеОбособленныхПодразделений);
	СписокСохранения.Вставить("ОбособленноеПодразделение", ОбособленноеПодразделение);
	СписокСохранения.Вставить("ВыгрузкаПредидущегоПериода", ВыгрузкаПредидущегоПериода);
	СписокСохранения.Вставить("ОтчетПредидущегоПериода", ОтчетПредидущегоПериода);
	СписокСохранения.Вставить("КодПодразделенияФСГС_8_14", ПоказателиОтчета.ПолеТабличногоДокументаФормаОтчета.ОргКодОКПО);
	РегламентированнаяОтчетностьКлиентСервер.ДополнитьОпциональныеПараметрыОтчета(ЭтотОбъект, СписокСохранения);
	
	ХранилищеДанных = Новый ХранилищеЗначения(СписокСохранения);
	СтруктураРеквизитовФормы.мСохраненныйДок.ДанныеОтчета = ХранилищеДанных;
	
	// ПроцессыОбработкиДокументов
	//
	РегламентированнаяОтчетность.ПередЗаписьюНаСервере(ЭтотОбъект,
		СтруктураРеквизитовФормы.мСохраненныйДок, Новый Структура);
	//
	// ПроцессыОбработкиДокументов
	
	// записываем документ, хранящий данные отчета
	Попытка
		СтруктураРеквизитовФормы.мСохраненныйДок.Записать();
		РегламентированнаяОтчетность.СохранитьСтатусОтправкиРеглОтчета(ЭтотОбъект);
	Исключение
		
		Если НЕ Автосохранение Тогда
			
			Сообщение = Новый СообщениеПользователю;
			
			Сообщение.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru='%1'"), РегламентированнаяОтчетностьКлиентСервер.СформироватьТекстСообщения(ОписаниеОшибки()));
			
			Сообщение.Сообщить();
			
		КонецЕсли;
		
		СтруктураРеквизитовФормы.мСохраненныйДок = СтруктураРеквизитовФормы.мСохраненныйДок.Ссылка;
		
		Возврат Ложь;
		
	КонецПопытки;
	
	// ПроцессыОбработкиДокументов
	//
	РегламентированнаяОтчетность.ПослеЗаписиНаСервере(ЭтотОбъект,
		СтруктураРеквизитовФормы.мСохраненныйДок, Новый Структура);
	//
	// ПроцессыОбработкиДокументов
	
	Модифицированность = Ложь;
	
	СтруктураРеквизитовФормы.мСохраненныйДок = СтруктураРеквизитовФормы.мСохраненныйДок.Ссылка;
	
	Если НЕ СтруктураРеквизитовФормы.мБезОткрытияФормы
	   И НЕ СтруктураРеквизитовФормы.мСохраненныйДок = Неопределено Тогда
		
		ЗаблокироватьДанныеДляРедактирования(
			СтруктураРеквизитовФормы.мСохраненныйДок, , ЭтотОбъект.УникальныйИдентификатор);
		
	КонецЕсли;
	
	Если ДанныеДляРазблокирования <> Неопределено Тогда
		РазблокироватьДанныеДляРедактирования(ДанныеДляРазблокирования.Ключ, ДанныеДляРазблокирования.ИдФормы);
	КонецЕсли;
	
	Возврат Истина;
	
КонецФункции

&НаСервере
Процедура ЗаполнитьПоказателиОтчетаНаСервере(ПоказателиОтчета)
	РегламентированнаяОтчетностьКлиентСервер.ЗаполнитьПоказателиОтчета(ЭтотОбъект, ПоказателиОтчета);
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПоказателиОтчетаНаКлиенте(ПоказателиОтчета)
	РегламентированнаяОтчетностьКлиентСервер.ЗаполнитьПоказателиОтчета(ЭтотОбъект, ПоказателиОтчета);
КонецПроцедуры

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

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

&НаКлиенте
Процедура АктивизироватьЯчейку(Ячейка) Экспорт
	
	ИмяПоляТабличногоДокумента = "ПолеТабличногоДокументаФормаОтчета";
	
	НайденнаяОбласть = ЭтотОбъект[ИмяПоляТабличногоДокумента].Области.Найти(Ячейка.ИмяЯчейки);
	
	Если НЕ НайденнаяОбласть = Неопределено Тогда
		
		Элементы[ИмяПоляТабличногоДокумента].ТекущаяОбласть = НайденнаяОбласть;
		
	ИначеЕсли Ячейка.СтрокаПП <> Неопределено И ЗначениеЗаполнено(Ячейка.СтрокаПП) Тогда
		
		НайденнаяОбласть = ЭтотОбъект[ИмяПоляТабличногоДокумента].Области.Найти(Ячейка.ИмяЯчейки + Ячейка.СтрокаПП);
		
		Если НЕ НайденнаяОбласть = Неопределено Тогда
			
			Элементы[ИмяПоляТабличногоДокумента].ТекущаяОбласть = НайденнаяОбласть;
			
		Иначе
			
			НайденнаяОбласть = ЭтотОбъект[ИмяПоляТабличногоДокумента].Области.Найти(Ячейка.ИмяЯчейки + "_" + Ячейка.СтрокаПП);
			
			Если НЕ НайденнаяОбласть = Неопределено Тогда
				
				Элементы[ИмяПоляТабличногоДокумента].ТекущаяОбласть = НайденнаяОбласть;
				
			КонецЕсли;
			
		КонецЕсли;
		
	Иначе
		
		НайденнаяОбласть = ЭтотОбъект[ИмяПоляТабличногоДокумента].Области.Найти(Ячейка.ИмяЯчейки + "1");
		
		Если НЕ НайденнаяОбласть = Неопределено Тогда
			
			Элементы[ИмяПоляТабличногоДокумента].ТекущаяОбласть = НайденнаяОбласть;
			
		Иначе
			
			НайденнаяОбласть = ЭтотОбъект[ИмяПоляТабличногоДокумента].Области.Найти(Ячейка.ИмяЯчейки + "_1");
			
			Если НЕ НайденнаяОбласть = Неопределено Тогда
				Элементы[ИмяПоляТабличногоДокумента].ТекущаяОбласть = НайденнаяОбласть;
			Иначе
				Элементы[ИмяПоляТабличногоДокумента].ТекущаяОбласть =
					ЭтотОбъект[ИмяПоляТабличногоДокумента].Область(Ячейка.ИмяЯчейки);
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ПоказатьБланкЗавершение(Отказ, ДополнительныеПараметры) Экспорт
	
	Если Отказ Тогда
		Возврат;
	КонецЕсли;
	
	Команда = ДополнительныеПараметры.Команда;
	
	Если Команда <> Неопределено Тогда
		Печать(Команда.Имя);
	КонецЕсли;
	
КонецПроцедуры

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

&НаСервере
Функция ПечатьНаСервере(ВидПечати)
	
	Если НЕ РегламентированнаяОтчетность.ПринтерДоступен() Тогда
		
		Сообщение = Новый СообщениеПользователю;
		
		Сообщение.Текст = НСтр("ru='Перед формированием печатных форм необходимо определить в системе принтер и задать его в качестве используемого по умолчанию!'");
		
		Сообщение.Сообщить();
		
		Возврат Ложь;
		
	КонецЕсли;
	
	СтруктураРеквизитовФормы.мПечатныеФормы.Очистить();
	
	ОбластиСтроки = Новый Структура;
	
	Для Каждого Обл Из ПолеТабличногоДокументаФормаОтчета.Области Цикл
		Если Обл.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки И Не РегламентированнаяОтчетность.ЭтоСлужебнаяОбласть(Обл.Имя) Тогда
			ОбластиСтроки.Вставить(Обл.Имя, ПолеТабличногоДокументаФормаОтчета.ПолучитьОбласть(Обл.Имя));
		КонецЕсли;
	КонецЦикла;
	
	Для Каждого Обл Из ОбластиСтроки Цикл
		ПечатнаяФорма = Новый ТабличныйДокумент();
		ПечатнаяФорма.ОтображатьЗаголовки = Ложь;
		ПечатнаяФорма.ОтображатьСетку     = Ложь;
		ПечатнаяФорма.ЧерноБелыйПросмотр  = Истина;
		ПечатнаяФорма.ЧерноБелаяПечать    = Истина;
		ПечатнаяФорма.Автомасштаб         = Истина;
		ПечатнаяФорма.ОриентацияСтраницы  = ОриентацияСтраницы.Ландшафт;
		ПечатнаяФорма.Вывести(Обл.Значение);
		СтруктураРеквизитовФормы.мПечатныеФормы.Добавить(ПечатнаяФорма, "Форма П-4");
	КонецЦикла;
	
	РегламентированнаяОтчетность.УдалитьНомерКорректировки(СтруктураРеквизитовФормы.мПечатныеФормы[0].Значение);
	РегламентированнаяОтчетностьКлиентСервер.ПроставлениеНомеровЛистов(
		ЭтотОбъект, , СтруктураРеквизитовФормы.СписокПечатаемыхЛистов);
	
	Возврат Истина;
	
КонецФункции

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

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

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

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

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

&НаСервере
Функция СравнениеОтчетовНаСервере(ДанныеДляСравнения)
	
	ПараметрыОтчета = СформироватьСтруктуруПараметров();
	
	ДеревоДляСравнения = РегламентированнаяОтчетность.ПолучитьДеревоВыгрузки(ЭтотОбъект,
		СтруктураРеквизитовФормы["ИмяМакетаСхемыВыгрузки"]);
	
	Результат = РегламентированнаяОтчетностьСравнение.СравнениеОтчетов(
		ЭтотОбъект, ПараметрыОтчета, ДанныеДляСравнения, ДеревоДляСравнения);
	
	Возврат Результат;
	
КонецФункции

&НаКлиенте
Процедура ЗагрузитьИзФайлаЗавершение(Отказ, ДополнительныеПараметры) Экспорт
	
	Если Отказ Тогда
		Возврат;
	КонецЕсли;
	
	ЗагрузитьИзФайлаОтчет();
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаСервере
Функция ТекущийФорматВыгрузки(Организация)
	Возврат РегламентированнаяОтчетность.ФорматВыгрузкиСтатистическойОтчетностиВЭлектронномВиде(Организация);
КонецФункции

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

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

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

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

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

&НаСервере
Процедура ЗаполнитьДанными(ДеревоВыгрузки, ПараметрыВыгрузки) Экспорт 
	
	РегламентированнаяОтчетность.ОбработатьУсловныеЭлементы(ЭтотОбъект, ПараметрыВыгрузки, ДеревоВыгрузки); // формируем точную структуру XML-макета
	ЗаполнитьДаннымиУзел(ПараметрыВыгрузки, ДеревоВыгрузки); // заполняем дерево данными
	РегламентированнаяОтчетность.ОтсечьНезаполненныеНеобязательныеУзлыСтатистики(ДеревоВыгрузки);
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьДаннымиУзел(ПараметрыВыгрузки, Узел, НомерСтроки = Неопределено)
	
	СтрокиУзла = Новый Массив;
	Для Каждого Стр Из Узел.Строки Цикл
		СтрокиУзла.Добавить(Стр);
	КонецЦикла;
	
	Для Каждого Стр из СтрокиУзла Цикл
		
		Если ПустаяСтрока(Стр.ЗначениеПоУмолчанию) Тогда
			Если НЕ ПустаяСтрока(Стр.Ключ) Тогда
				ПолныйКодПоказателя = Стр.Ключ + ?(ЗначениеЗаполнено(НомерСтроки), "_" + Формат(НомерСтроки, "ЧГ="), "");
				ЗначениеПоказателя = Неопределено;
				Если ПараметрыВыгрузки.Свойство(ПолныйКодПоказателя, ЗначениеПоказателя) Тогда
					ФорматПредставленияНуля = Неопределено;
					Если ПараметрыВыгрузки.Свойство("ЧН" + ПолныйКодПоказателя, ФорматПредставленияНуля) Тогда
						РегламентированнаяОтчетность.ВывестиПоказательСтатистикиВXML(Стр, ЗначениеПоказателя, ФорматПредставленияНуля);
					Иначе
						РегламентированнаяОтчетность.ВывестиПоказательСтатистикиВXML(Стр, ЗначениеПоказателя);
					КонецЕсли;
				Иначе
					РегламентированнаяОтчетность.ВывестиПоказательСтатистикиВXML(Стр, "");
				КонецЕсли;
			Иначе
				Стр.Значение = "";
			КонецЕсли;
		ИначеЕсли Лев(Стр.ЗначениеПоУмолчанию, 1) = "&" Тогда
			РегламентированнаяОтчетность.ВывестиПоказательСтатистикиВXML(
				Стр, ПараметрыВыгрузки[Сред(Стр.ЗначениеПоУмолчанию, 2)]);
		Иначе
			Стр.Значение = Стр.ЗначениеПоУмолчанию;
			Если НЕ ПустаяСтрока(Стр.Ключ) Тогда
				ПолныйКодПоказателя = Стр.Ключ + ?(ЗначениеЗаполнено(НомерСтроки), "_" + Формат(НомерСтроки, "ЧГ="), "");
				ЗначениеПоказателя = Неопределено;
				Если ПараметрыВыгрузки.Свойство(ПолныйКодПоказателя, ЗначениеПоказателя) Тогда
					ФорматПредставленияНуля = Неопределено;
					Если ПараметрыВыгрузки.Свойство("ЧН" + ПолныйКодПоказателя, ФорматПредставленияНуля) Тогда
						РегламентированнаяОтчетность.ВывестиПоказательСтатистикиВXML(Стр, ЗначениеПоказателя, ФорматПредставленияНуля);
					Иначе
						РегламентированнаяОтчетность.ВывестиПоказательСтатистикиВXML(Стр, ЗначениеПоказателя);
					КонецЕсли;
				Иначе
					РегламентированнаяОтчетность.ВывестиПоказательСтатистикиВXML(Стр, "");
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
		
		Если Стр.Тип = "С" ИЛИ Стр.Тип = "C" Тогда // учтем оба варианта: кириллицу и латиницу
			ЗаполнитьДаннымиУзел(ПараметрыВыгрузки, Стр, НомерСтроки);
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Функция СформироватьИмяФайла(ПараметрыВыгрузки, ДопАтрибуты)
	
	Перем ПолученноеЗначение;
	
	КодОКУД        = ДопАтрибуты.OKUD;
	КодФормы       = ДопАтрибуты.idf;
	Периодичность  = ДопАтрибуты.idp;
	КодОКПО        = ПараметрыВыгрузки.ОКПО;
	РасчетныйГод   = ПараметрыВыгрузки.РасчПериод;
	ОтчетныйПериод = ПараметрыВыгрузки.ОтчПериод;
	
	ПараметрыВыгрузки.Свойство("ОКФС", ПолученноеЗначение);
	КодОКФС = ПолученноеЗначение;
	ПараметрыВыгрузки.Свойство("ОКВЭД", ПолученноеЗначение);
	КодОКВЭД = СтрЗаменить(ПолученноеЗначение, ".", "-");
	
	// Преобразование кодов - составляющих имени файла.
	КодыИФ = Новый Структура;
	КодыИФ.Вставить("Документ",       СтруктураРеквизитовФормы.мСохраненныйДок);
	КодыИФ.Вставить("КодФормы",       КодФормы);
	КодыИФ.Вставить("Периодичность",  Периодичность);
	КодыИФ.Вставить("ОтчетныйПериод", ОтчетныйПериод);
	КодыИФ.Вставить("ДатаВыгрузки",   "");
	
	РегламентированнаяОтчетность.КодыДляИмениФайлаВФорматеВыгрузки(КодыИФ);
	
	// Формирование имени файла, в зависимости
	// от формата выгрузки статотчетности.
	Если ПустаяСтрока(КодыИФ.ДатаВыгрузки) Тогда // "старый" формат
		ИмяФайлаXML = КодОКУД + "_"
					+ КодФормы + "_"
					+ Периодичность + "_"
					+ КодОКПО + "_"
					+ РасчетныйГод + "_"
					+ ОтчетныйПериод
					+ ?(ПустаяСтрока(КодОКФС), "", "_" + КодОКФС)
					+ ?(ПустаяСтрока(КодОКВЭД), "", "_" + КодОКВЭД) + ".xml";
	Иначе										 // "новый" формат
		ИмяФайлаXML = КодОКУД + "_"
					+ КодыИФ.КодФормы + "_"
					+ КодыИФ.Периодичность + "_"
					+ КодОКПО + "_"
					+ РасчетныйГод + "_"
					+ КодыИФ.ОтчетныйПериод + "__"
					+ КодыИФ.ДатаВыгрузки + ".xml";
	КонецЕсли;
	
	Возврат ИмяФайлаXML;
	
КонецФункции

&НаСервере
Функция СформироватьСтруктуруПараметров() Экспорт 
	
	Перем ПолученноеЗначение;
	
	РегламентированнаяОтчетность.СформироватьСтруктуруПоказателей(ЭтотОбъект);
	
	ТабДокумент = мДанныеОтчета.ПолеТабличногоДокументаФормаОтчета;
	
	ДопАтрибуты = РегламентированнаяОтчетность.СформироватьСтруктуруДопАтрибутов(ИмяФормы,
		СтруктураРеквизитовФормы["ИмяМакетаАтрибутовВыгрузки"]);
	
	СтрокаСведений = "ФИОРук, ОКВЭД2, ОКФС";
	СведенияОбОрганизации = РегламентированнаяОтчетностьВызовСервера.ПолучитьСведенияОбОрганизации(
		СтруктураРеквизитовФормы.Организация, СтруктураРеквизитовФормы.мСохраненныйДок.ДатаПодписи, СтрокаСведений);
	
	ПараметрыВыгрузки = Новый Структура;
	
	ДопАтрибуты.Свойство("code", ПолученноеЗначение);
	ПараметрыВыгрузки.Вставить("КодШаблона", ПолученноеЗначение);
	ДопАтрибуты.Свойство("idf", ПолученноеЗначение);
	ПараметрыВыгрузки.Вставить("КодФормы", ПолученноеЗначение);
	ДопАтрибуты.Свойство("shifr", ПолученноеЗначение);
	ПараметрыВыгрузки.Вставить("ШифрФормы", ПолученноеЗначение);
	ДопАтрибуты.Свойство("version", ПолученноеЗначение);
	ПараметрыВыгрузки.Вставить("ВерсияШаблона", ПолученноеЗначение);
	ДопАтрибуты.Свойство("format_version", ПолученноеЗначение);
	ПараметрыВыгрузки.Вставить("ВерсияФормата", ПолученноеЗначение);
	
	ОтчПериод  = Месяц(СтруктураРеквизитовФормы.мСохраненныйДок.ДатаОкончания);
	РасчПериод = Формат(Год(СтруктураРеквизитовФормы.мСохраненныйДок.ДатаОкончания),"ЧГ=0");
	
	ПараметрыВыгрузки.Вставить("ОКПО", СокрЛП(ТабДокумент.ОргКодОКПО));
	ПараметрыВыгрузки.Вставить("ОтчПериод", СокрЛП(ОтчПериод));
	ПараметрыВыгрузки.Вставить("РасчПериод", СокрЛП(РасчПериод));
	ПараметрыВыгрузки.Вставить("ОргНазв", СокрЛП(ТабДокумент.ОргНазв));
	ПараметрыВыгрузки.Вставить("ОргДиректор", СокрЛП(СведенияОбОрганизации.ФИОРук));
	ПараметрыВыгрузки.Вставить("ОргДолжностьИсп", СокрЛП(ТабДокумент.ОргДолжностьИсп));
	ПараметрыВыгрузки.Вставить("ОргИсполнитель", СокрЛП(ТабДокумент.ОргИсполнитель));
	ПараметрыВыгрузки.Вставить("ОргТелефонИсп", СокрЛП(ТабДокумент.ОргТелефонИсп));
	ПараметрыВыгрузки.Вставить("ОргЭлектроннаяПочта", СокрЛП(ТабДокумент.ОргАдресЭлектроннойПочты));
	
	// Преобразование выгружаемых атрибутов, в соответствии
	// с форматом выгрузки статотчетности.
	ДопАтрибуты.Свойство("idp", ПолученноеЗначение);
	ПараметрыВыгрузки.Вставить("КодПериодичности", Число(СокрЛП(ПолученноеЗначение)));
	ПараметрыВыгрузки.Вставить("Документ", СтруктураРеквизитовФормы.мСохраненныйДок);
	
	РегламентированнаяОтчетность.АтрибутыВФорматеВыгрузки(ПараметрыВыгрузки);
	
	ПараметрыВыгрузки.Вставить("ИмяФайла", СформироватьИмяФайла(ПараметрыВыгрузки, ДопАтрибуты));
	ПараметрыВыгрузки.Вставить("ИмяКлючевогоУзлаСодержательнойЧасти", "row");
	
	Возврат ПараметрыВыгрузки;
	
КонецФункции

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

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

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

&НаСервере
Функция ЗаполнитьАвтоНаСервере()
	
	ПараметрыОтчета = Новый Структура();
	ПараметрыОтчета.Вставить("Организации", Неопределено);
	ПараметрыОтчета.Вставить("ЗаполняетсяВЦеломПоОрганизации", Ложь);
	ПараметрыОтчета.Вставить("ЗаполняетсяПоКаждомуОП", Истина);
	ПараметрыОтчета.Вставить("Организация",                              СтруктураРеквизитовФормы.Организация);
	ПараметрыОтчета.Вставить("ДатаНачалаПериодаОтчета",                  СтруктураРеквизитовФормы.мДатаНачалаПериодаОтчета);
	ПараметрыОтчета.Вставить("ДатаКонцаПериодаОтчета",                   СтруктураРеквизитовФормы.мДатаКонцаПериодаОтчета);
	ПараметрыОтчета.Вставить("ОбособленноеПодразделение",                ОбособленноеПодразделение);
	ПараметрыОтчета.Вставить("ИсключитьДанныеОбособленныхПодразделений", ИсключитьДанныеОбособленныхПодразделений);
	РегламентированнаяОтчетностьКлиентСервер.ДополнитьОпциональныеПараметрыОтчета(ЭтотОбъект, ПараметрыОтчета);
	
	Контейнер = Новый Структура;
	ЗаполнитьПоказателиОтчетаНаСервере(Контейнер);
	
	Если СтрЧислоВхождений(ИмяФормы, "ВнешнийОтчет.") > 0 Тогда
		ЭтаФормаИмя = СтрЗаменить(ИмяФормы, "ВнешнийОтчет.", "");
	ИначеЕсли СтрЧислоВхождений(ИмяФормы, "Отчет.") > 0 Тогда
		ЭтаФормаИмя = СтрЗаменить(ИмяФормы, "Отчет.", "");
	Иначе
		ЭтаФормаИмя = ИмяФормы;
	КонецЕсли;
	
	ИДОтчета = Лев(ЭтаФормаИмя, СтрНайти(ЭтаФормаИмя, ".Форма.") - 1);
	ИДРедакцииОтчета = Сред(ЭтаФормаИмя, СтрНайти(ЭтаФормаИмя, ".Форма.") + СтрДлина(".Форма."));
	
	ПараметрыВыполненияВФоне = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
	ПараметрыВыполненияВФоне.ЗапуститьВФоне = Истина;
	РезультатВыполнения = ДлительныеОперации.ВыполнитьВФоне(
		"РегламентированнаяОтчетностьПереопределяемый.ЗаполнитьОтчетВФоне",
		Новый Структура("ИДОтчета, ИДРедакцииОтчета, ПараметрыОтчета, Контейнер",
		ИДОтчета, ИДРедакцииОтчета, ПараметрыОтчета, Контейнер),
		ПараметрыВыполненияВФоне);
	
	РезультатВыполнения.Вставить("ЗаданиеВыполнено", НРег(РезультатВыполнения.Статус) = "выполнено");
	АдресХранилища       = РезультатВыполнения.АдресРезультата;
	ИдентификаторЗадания = РезультатВыполнения.ИдентификаторЗадания;
	
	Если РезультатВыполнения.ЗаданиеВыполнено Тогда
		ЗагрузитьПодготовленныеДанные();
	КонецЕсли;
	
	Возврат РезультатВыполнения;
	
КонецФункции

&НаСервере
Процедура ЗагрузитьПодготовленныеДанные()
	
	Перем ТаблицаГруппы;
	
	Контейнер = РегламентированнаяОтчетность.ПолучитьДанныеАвтозаполненияСтатистическогоОтчета(ЭтотОбъект);
	Если Контейнер = Неопределено Тогда 
		Возврат;
	КонецЕсли;
	
	ИдентификаторЗадания = Неопределено;
	ТекТабличноеПоле     = ЭтотОбъект["ПолеТабличногоДокументаФормаОтчета"];
	ТекТабличноеПоле.Очистить();
	РегламентированнаяОтчетность.ВывестиШапкуРегистрацияРеспондента(ТекТабличноеПоле);
	ТекТабличноеПоле.Вывести(ОбъектОтчета(ИмяФормы).ПолучитьМакет(
		СтруктураРеквизитовФормы["ИмяМакетаТабличногоДокумента"]));
	РегламентированнаяОтчетность.ВидимостьОбластиДанныеПредыдущегоПериода(ЭтотОбъект);
	РегламентированнаяОтчетность.ОбновитьОбластьРегистрацииРеспондента(ЭтотОбъект);
	
	Для Каждого ПоказателиСтраницы Из Контейнер Цикл
		Если ТипЗнч(ПоказателиСтраницы.Значение) <> Тип("Структура") Тогда
			Продолжить;
		КонецЕсли;
		
		ПоказателиТаблПоле = РегламентированнаяОтчетность.КонвертированныеЗначенияПоказателейСтатистическойОтчетности(
			ЭтотОбъект, ПоказателиСтраницы.Значение);
		
		Для Каждого Показатель Из ПоказателиТаблПоле Цикл
			ИмяПоказателя       = Показатель.Ключ;
			ЗначениеПоказателя  = Показатель.Значение;
			РегламентированнаяОтчетность.УстановитьЗначениеИФорматВПоле(ТекТабличноеПоле, ИмяПоказателя, ЗначениеПоказателя);
		КонецЦикла;
	КонецЦикла;
	
	РасчетНаСервере();
	ПолеТабличногоДокументаФормаОтчета.Области.П0001001В1.Значение = "00";
	РегламентированнаяОтчетность.УстановитьЦветФорматДоступностьЯчеек(ЭтотОбъект);
	
	Модифицированность = Истина;
	Доступность = Истина;
	Если Элементы.Расшифровать.Видимость Тогда
		Элементы.Расшифровать.Доступность = Истина;
		Элементы.ТабличныйДокументКонтекстноеМенюРасшифровать.Доступность = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьЭУВыбораОбособленныхПодразделений(Форма)
	Форма.ОбособленноеПодразделение =
		?(НЕ Форма.ИсключитьДанныеОбособленныхПодразделений, Форма.ОбособленноеПодразделение, Неопределено);
КонецПроцедуры

&НаКлиенте
Процедура Расшифровать(Команда)
	
	ПараметрыОтчета = Новый Структура;
	ПараметрыОтчета.Вставить("Организация", 			                 СтруктураРеквизитовФормы.Организация);
	ПараметрыОтчета.Вставить("ДатаНачалаПериодаОтчета",                  СтруктураРеквизитовФормы.мДатаНачалаПериодаОтчета);
	ПараметрыОтчета.Вставить("ДатаКонцаПериодаОтчета",                   СтруктураРеквизитовФормы.мДатаКонцаПериодаОтчета);
	ПараметрыОтчета.Вставить("ЗначениеТекущегоПоказателя",               Элементы.ПолеТабличногоДокументаФормаОтчета.ТекущаяОбласть.Текст);
	ПараметрыОтчета.Вставить("ИсключитьДанныеОбособленныхПодразделений", ИсключитьДанныеОбособленныхПодразделений);
	ПараметрыОтчета.Вставить("ОбособленноеПодразделение",                ОбособленноеПодразделение);
	РегламентированнаяОтчетностьКлиентСервер.ДополнитьОпциональныеПараметрыОтчета(ЭтотОбъект, ПараметрыОтчета);
	
	Если СтрЧислоВхождений(Элементы.ПолеТабличногоДокументаФормаОтчета.ТекущаяОбласть.Имя, "П0001") > 0
	 ИЛИ СтрЧислоВхождений(Элементы.ПолеТабличногоДокументаФормаОтчета.ТекущаяОбласть.Имя, "П01") > 0 Тогда
		
		ИмяОбласти = "П0001" + Лев(Прав(Элементы.ПолеТабличногоДокументаФормаОтчета.ТекущаяОбласть.Имя, 5), 3) + "В1";
		
		ПараметрыОтчета.Вставить("КодПоОКВЭД", ПолеТабличногоДокументаФормаОтчета.Области[ИмяОбласти].Значение);
		
	КонецЕсли;
	
	ИДИменПоказателей = Новый Массив;
	ИДИменПоказателей.Добавить(Элементы.ПолеТабличногоДокументаФормаОтчета.ТекущаяОбласть.Имя);
	
	Если СтрЧислоВхождений(ИмяФормы, "ВнешнийОтчет.") > 0 Тогда
		ЭтаФормаИмя = СтрЗаменить(ИмяФормы, "ВнешнийОтчет.", "");
	ИначеЕсли СтрЧислоВхождений(ИмяФормы, "Отчет.") > 0 Тогда
		ЭтаФормаИмя = СтрЗаменить(ИмяФормы, "Отчет.", "");
	Иначе
		ЭтаФормаИмя = ИмяФормы;
	КонецЕсли;
	
	ИДОтчета = Лев(ЭтаФормаИмя, СтрНайти(ЭтаФормаИмя, ".Форма.") - 1);
	ИДРедакцииОтчета = Сред(ЭтаФормаИмя, СтрНайти(ЭтаФормаИмя, ".Форма.") + СтрДлина(".Форма."));
	
	РегламентированнаяОтчетностьКлиент.ОткрытьРасшифровкуОтчета(
		ИДОтчета, ИДРедакцииОтчета, ИДИменПоказателей, ПараметрыОтчета);
КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ СТЫКОВКИ С СЕРВИСОМ СДАЧИ ОТЧЕТНОСТИ ЧЕРЕЗ ПРЕДСТАВИТЕЛЯ

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

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

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

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

#Область ПанельОтправкиВКонтролирующиеОрганы

&НаКлиенте
Процедура ОбновитьОтправку(Команда)
	ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиент.ОбновитьОтправкуИзПанелиОтправки(ЭтотОбъект, "ФСГС");
КонецПроцедуры

&НаКлиенте
Процедура ГиперссылкаПротоколНажатие(Элемент)
	ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиент.ОткрытьПротоколИзПанелиОтправки(ЭтотОбъект, "ФСГС");
КонецПроцедуры

&НаКлиенте
Процедура ОтправитьНеотправленноеИзвещение(Команда)
	ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиент.ОтправитьНеотправленноеИзвещениеИзПанелиОтправки(
		ЭтотОбъект, "ФСГС");
КонецПроцедуры

&НаКлиенте
Процедура ЭтапыОтправкиНажатие(Элемент)
	ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиент.ОткрытьСостояниеОтправкиИзПанелиОтправки(ЭтотОбъект, "ФСГС");
КонецПроцедуры

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПослеСохраненияФормыЗавершение(Результат, ДополнительныеПараметры) Экспорт
	ДополнительныеПараметры.Форма.Закрыть();
КонецПроцедуры

&НаСервере
Процедура РазрешитьРедактированиеРеквизитовОбъекта() Экспорт
	РегламентированнаяОтчетность.РазрешитьРедактированиеРеквизитовОтчета(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда)
	РегламентированнаяОтчетностьКлиент.РазрешитьРедактированиеРеквизитовОтчета(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОткрытьПрисоединенныеФайлы(Команда)
	РегламентированнаяОтчетностьКлиент.СохранитьОтчетИОткрытьФормуПрисоединенныеФайлы(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура КомментарийПриИзменении(Элемент)
	Модифицированность = Истина;
КонецПроцедуры

&НаСервере
Процедура УстановитьФорматВыводаВПоляхВвода(Форма, НаимРаздела = "") Экспорт
	
	Перем СтруктураГруппы;
	
	СтрФорматаОкр1       = "; ЧДЦ = " + Форма.СтруктураРеквизитовФормы.ТочностьЕдиницыИзмерения + "; ЧРД=,; ЧН=-; ЧС = 0";
	СтрФорматаОкр1000    = "; ЧДЦ = " + Форма.СтруктураРеквизитовФормы.ТочностьЕдиницыИзмерения + "; ЧРД=,; ЧН=-; ЧС = 3";
	СтрФорматаОкр1000000 = "; ЧДЦ = " + Форма.СтруктураРеквизитовФормы.ТочностьЕдиницыИзмерения + "; ЧРД=,; ЧН=-; ЧС = 6";
	
	Если Форма.СтруктураРеквизитовФормы.ЕдиницаИзмерения =
		Форма.ПорядкиОкругленияОтчетности.ПеречислениеПорядкиОкругленияОтчетностиОкр1 Тогда
		Форма.СтруктураРеквизитовФормы.мСтрокаФормата = СтрФорматаОкр1;
	ИначеЕсли Форма.СтруктураРеквизитовФормы.ЕдиницаИзмерения =
		Форма.ПорядкиОкругленияОтчетности.ПеречислениеПорядкиОкругленияОтчетностиОкр1000 Тогда
		Форма.СтруктураРеквизитовФормы.мСтрокаФормата = СтрФорматаОкр1000;
	ИначеЕсли Форма.СтруктураРеквизитовФормы.ЕдиницаИзмерения =
		Форма.ПорядкиОкругленияОтчетности.ПеречислениеПорядкиОкругленияОтчетностиОкр1000000 Тогда
		Форма.СтруктураРеквизитовФормы.мСтрокаФормата = СтрФорматаОкр1000000;
	КонецЕсли;
	
	Для Каждого СтрПоказатели Из Форма.мТаблицаСоставПоказателей Цикл
		
		Если НЕ ПустаяСтрока(НаимРаздела) И НаимРаздела <> СтрПоказатели.ИмяПоляТаблДокумента Тогда
			Продолжить;
		КонецЕсли;
		
		КодПоказателя            = СокрП(СтрПоказатели.КодПоказателяПоСоставу);
		ПризнМногострочность     = СокрП(СтрПоказатели.ПризнМногострочности);
		КодПоказателяПоСтруктуре = СокрП(СтрПоказатели.КодПоказателяПоСтруктуре);
		КодПоказателяПоФорме     = СокрП(СтрПоказатели.КодПоказателяПоФорме);
		ТипДанныхПоказателя      = СокрП(СтрПоказатели.ТипДанныхПоказателя);
		ИмяПоказателя            = ?(ПустаяСтрока(СтрПоказатели.КодПоказателяПоФорме), КодПоказателя, КодПоказателяПоФорме);
		
		Если ПустаяСтрока(КодПоказателя)
		 ИЛИ КодПоказателя = "==="
		 ИЛИ КодПоказателя = "###"
		 ИЛИ Лев(КодПоказателя, 2) = "//" Тогда
			Продолжить;
		КонецЕсли;
		
		Если ТипДанныхПоказателя = "Е" И ПустаяСтрока(КодПоказателяПоСтруктуре) Тогда
			ТекТабличноеПоле = Форма.ПолеТабличногоДокументаФормаОтчета;
			Если ПризнМногострочность <> "/" Тогда
				ФорматируемаяОбласть = ТекТабличноеПоле.Области[ИмяПоказателя];
				ДопустимыйЗнакПоказателя = ФорматируемаяОбласть.ТипЗначения.КвалификаторыЧисла.ДопустимыйЗнак;
				ЧислоЕЗнак = Форма.СтруктураРеквизитовФормы.мОписаниеТиповЧислоЕ;
				
				Если ДопустимыйЗнакПоказателя = ДопустимыйЗнак.Неотрицательный Тогда
					ЧислоЕЗнак = Новый ОписаниеТипов("Число",
						Новый КвалификаторыЧисла(ЧислоЕЗнак.КвалификаторыЧисла.Разрядность,
						ЧислоЕЗнак.КвалификаторыЧисла.РазрядностьДробнойЧасти, ДопустимыйЗнакПоказателя));
				КонецЕсли;
				ФорматируемаяОбласть.ТипЗначения = ЧислоЕЗнак;
				ФорматируемаяОбласть.Формат = "ЧЦ = "
					+ ЧислоЕЗнак.КвалификаторыЧисла.Разрядность + Форма.СтруктураРеквизитовФормы.мСтрокаФормата;
			Иначе
				// определяем кол-во строк многострочного раздела и применяем процедуру форматирования к данной графе по всем строкам
				НСтр = 1;
				Пока ТекТабличноеПоле.Области.Найти(ИмяПоказателя + "_" + Формат(НСтр, "ЧГ=0")) <> Неопределено Цикл
					ФорматируемаяОбласть = ТекТабличноеПоле.Области[ИмяПоказателя + "_" + Формат(НСтр, "ЧГ=0")];
					ДопустимыйЗнакПоказателя = ФорматируемаяОбласть.ТипЗначения.КвалификаторыЧисла.ДопустимыйЗнак;
					ЧислоЕЗнак = Форма.СтруктураРеквизитовФормы.мОписаниеТиповЧислоЕ;
					Если ДопустимыйЗнакПоказателя = ДопустимыйЗнак.Неотрицательный Тогда
						ЧислоЕЗнак = Новый ОписаниеТипов("Число",
							Новый КвалификаторыЧисла(ЧислоЕЗнак.КвалификаторыЧисла.Разрядность,
							ЧислоЕЗнак.КвалификаторыЧисла.РазрядностьДробнойЧасти, ДопустимыйЗнакПоказателя));
					КонецЕсли;
					ФорматируемаяОбласть.ТипЗначения = ЧислоЕЗнак;
					ФорматируемаяОбласть.Формат = "ЧЦ = "
						+ ЧислоЕЗнак.КвалификаторыЧисла.Разрядность + Форма.СтруктураРеквизитовФормы.мСтрокаФормата;
					НСтр = НСтр + 1;
				КонецЦикла;
			КонецЕсли;
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьЦветФонаЯчейкиНаКлиенте(ИмяЯчейки = Неопределено, ВариантЗаполнения = Неопределено, ИмяТекущейСтраницыПанели = "") Экспорт
	УстановитьЦветФонаЯчейки(ЭтотОбъект, ИмяЯчейки, ВариантЗаполнения, ИмяТекущейСтраницыПанели);
КонецПроцедуры

&НаСервере
Процедура УстановитьЦветФонаЯчейкиНаСервере(ИмяЯчейки = Неопределено, ВариантЗаполнения = Неопределено, ИмяТекущейСтраницыПанели = "") Экспорт
	УстановитьЦветФонаЯчейки(ЭтотОбъект, ИмяЯчейки, ВариантЗаполнения, ИмяТекущейСтраницыПанели);
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьЦветФонаЯчейки(Форма, ИмяЯчейки = Неопределено, ВариантЗаполнения = Неопределено, ИмяТекущейСтраницыПанели = "") Экспорт
	
	Перем ЦветФона;
	
	Если Не ИмяЯчейки = Неопределено Тогда
		
		ИмяПоляТаблДокумента = "ПолеТабличногоДокументаФормаОтчета";
		Ключ = "_" + ВариантЗаполнения;
		Форма.мСтруктураЦветовРаскраски.Свойство(Ключ, ЦветФона);
		
		Если ВариантЗаполнения = 4 Тогда
		
			Форма[ИмяПоляТаблДокумента].Области[ИмяЯчейки].Защита = Истина;
		
		Иначе
		
			Форма[ИмяПоляТаблДокумента].Области[ИмяЯчейки].Защита = Ложь;
		
		КонецЕсли;
		
		Форма[ИмяПоляТаблДокумента].Области[ИмяЯчейки].ЦветФона = ЦветФона;
		
	Иначе
		// устанавливаем цвет фона всех автозаполняемых ячеек активной страницы
		
		ТаблицаВариантыЗаполнения = ПолучитьТаблицуВариантовЗаполнения(Форма, ИмяТекущейСтраницыПанели);
		Если ТаблицаВариантыЗаполнения = Неопределено Тогда
			Возврат;
		КонецЕсли;
		
		Для Каждого Строка Из ТаблицаВариантыЗаполнения Цикл
			ИмяПоказателя     = Строка.КодПоказателя;
			ВариантЗаполнения = Строка.ВариантЗаполнения;
			Комментарий       = Строка.Комментарий;
			
			КолвоСтрокВМногострочнойЧасти =
				РегламентированнаяОтчетностьКлиентСервер.ПоказательВходитВМногострочнуюЧасть(Форма, ИмяПоказателя);
			
			Если КолвоСтрокВМногострочнойЧасти > 0 Тогда
				Многострочность = Истина;
				БазоваяЧасть = ИмяПоказателя;
			Иначе
				Многострочность = Ложь;
				КолвоСтрокВМногострочнойЧасти = 1;
			КонецЕсли;
			
			Для Инд = 1 по КолвоСтрокВМногострочнойЧасти Цикл
				
				Если Многострочность Тогда
					ИмяПоказателя = БазоваяЧасть + "_" + Формат(Инд, "ЧГ=0");
				КонецЕсли;
				
				ТекОбластьЯчеек = Форма.ПолеТабличногоДокументаФормаОтчета.Области[ИмяПоказателя];
				Если (Не ПустаяСтрока(Комментарий)) ИЛИ (Не ПустаяСтрока(ТекОбластьЯчеек.Примечание.Текст)) Тогда
					ТекОбластьЯчеек.Примечание.Текст = Комментарий;
				КонецЕсли;
				
				Ключ = "_" + ВариантЗаполнения;
				Форма.мСтруктураЦветовРаскраски.Свойство(Ключ, ЦветФона);
				
				Если ВариантЗаполнения = 4 Тогда
					Форма.ПолеТабличногоДокументаФормаОтчета.Области[ИмяПоказателя].Защита = Истина;
				Иначе
					Форма.ПолеТабличногоДокументаФормаОтчета.Области[ИмяПоказателя].Защита = Ложь;
				КонецЕсли;
				
				Форма.ПолеТабличногоДокументаФормаОтчета.Области[ИмяПоказателя].ЦветФона = ЦветФона;
				
			КонецЦикла;
			
		КонецЦикла;
	
	КонецЕсли;
	
КонецПроцедуры

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

&НаСервере
Процедура СформироватьСпискиВыбора()
	МакетСоставаПоказателей = ОбъектОтчета(ИмяФормы).ПолучитьМакет(СтруктураРеквизитовФормы["ИмяМакетаСписков"]);
	
	Массив = Новый Массив;
	Массив.Добавить(Тип("Строка"));
	Строка8  = Новый ОписаниеТипов(Массив, , Новый КвалификаторыСтроки(20, ДопустимаяДлина.Переменная));
	Строка512 = Новый ОписаниеТипов(Массив, , Новый КвалификаторыСтроки(512, ДопустимаяДлина.Переменная));
	
	КоллекцияСписковВыбора = Новый Соответствие;
	Для Каждого Область Из МакетСоставаПоказателей.Области Цикл
		Если Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда
			ВерхОбласти = Область.Верх;
			НизОбласти = Область.Низ;
			ТаблСписка = Новый ТаблицаЗначений;
			ТаблСписка.Колонки.Добавить(
				"Код", Строка8, , МакетСоставаПоказателей.Область(ВерхОбласти, 1, ВерхОбласти, 1).ШиринаКолонки);
			ТаблСписка.Колонки.Добавить(
				"Название",Строка512,, МакетСоставаПоказателей.Область(ВерхОбласти, 2, ВерхОбласти, 2).ШиринаКолонки);
			Для НомСтр = ВерхОбласти По НизОбласти Цикл
				КодПоказателя = СокрП(МакетСоставаПоказателей.Область(НомСтр, 1).Текст);
				Если КодПоказателя <> "###" Тогда
					НовСтрока = ТаблСписка.Добавить();
					НовСтрока.Код = КодПоказателя;
					НовСтрока.Название = СокрП(МакетСоставаПоказателей.Область(НомСтр, 2).Текст);
				КонецЕсли;
			КонецЦикла;
			КоллекцияСписковВыбора.Вставить(Область.Имя, ТаблСписка);
		КонецЕсли;
	КонецЦикла;
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("S_OKVED2", КоллекцияСписковВыбора["S_OKVED2"]);
	Запрос.УстановитьПараметр("pril_okved_51", КоллекцияСписковВыбора["pril_okved_51"]);
	Запрос.Текст = "ВЫБРАТЬ
	|	S_OKVED2.Код КАК Код,
	|	S_OKVED2.Название КАК Название
	|ПОМЕСТИТЬ ВТ_S_OKVED2
	|ИЗ
	|	&S_OKVED2 КАК S_OKVED2
	|ИНДЕКСИРОВАТЬ ПО
	|	S_OKVED2.Код
	|;
	|
	|ВЫБРАТЬ
	|	pril_okved_51.Код КАК Код,
	|	pril_okved_51.Название КАК Название
	|ПОМЕСТИТЬ ВТ_pril_okved_51
	|ИЗ
	|	&pril_okved_51 КАК pril_okved_51
	|ИНДЕКСИРОВАТЬ ПО
	|	pril_okved_51.Код
	|;
	|
	|ВЫБРАТЬ
	|	S_OKVED2.Код КАК Код,
	|	S_OKVED2.Название КАК Название
	|ИЗ
	|	ВТ_S_OKVED2 КАК S_OKVED2
	|	ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_pril_okved_51 КАК pril_okved_51
	|	ПО pril_okved_51.Код = S_OKVED2.Код";
	
	ТаблСписка = Новый ТаблицаЗначений;
	ТаблСписка.Колонки.Добавить(
		"Код", Строка8, , МакетСоставаПоказателей.Область(ВерхОбласти, 1, ВерхОбласти, 1).ШиринаКолонки);
	ТаблСписка.Колонки.Добавить(
		"Название", Строка512, , МакетСоставаПоказателей.Область(ВерхОбласти, 2, ВерхОбласти, 2).ШиринаКолонки);
	НовСтр = ТаблСписка.Добавить();
	НовСтр.Код = "";
	НовСтр.Название = "Пустая строка";
	
	РезультатВыборки = Запрос.Выполнить().Выбрать();
	Пока РезультатВыборки.Следующий() Цикл 
		НовСтр = ТаблСписка.Добавить();
		ЗаполнитьЗначенияСвойств(НовСтр, РезультатВыборки);
	КонецЦикла;
	
	РегламентированнаяОтчетность.ДобавитьСтрокуОписанияВвода(
		СвойстваПоказателей, "OKVED2",   512, , "Выбор кода ОКВЭД",   ТаблСписка);
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьФормуНастроек(Команда)
	ОткрытьФормуВыбораСтраниц("ВыбратьДляНастройки");
КонецПроцедуры

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

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

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

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

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

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

#Область ОбработчикиСобытийПроцессыОбработкиДокументов

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

&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокумента(Команда)
	
	РегламентированнаяОтчетностьКлиент.ВыполнитьЗадачу(
		ЭтотОбъект,
		Команда,
		?(ЗначениеЗаполнено(СтруктураРеквизитовФормы.мСохраненныйДок),
			СтруктураРеквизитовФормы.мСохраненныйДок,
			СтруктураРеквизитовФормы.ПустаяСсылкаНаРегламентированныйОтчет));
	
КонецПроцедуры

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

#Область ПроцессыОбработкиДокументов

&НаКлиенте
Процедура Подключаемый_КомментарийНаправившегоОткрытие(Элемент, СтандартнаяОбработка)
	РегламентированнаяОтчетностьКлиент.КомментарийНаправившегоОткрытие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_КомментарийСледующемуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	РегламентированнаяОтчетностьКлиент.КомментарийСледующемуНачалоВыбора(
		ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

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

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

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

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

#Область ПроцессыОбработкиДокументов

&НаКлиенте
Процедура Записать(ПараметрыЗаписи) Экспорт
	СохранитьНаКлиенте();
КонецПроцедуры

&НаСервере
Процедура ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст)
	РегламентированнаяОтчетность.ВыполнитьЗадачу(ЭтотОбъект, Контекст, СтруктураРеквизитовФормы.мСохраненныйДок);
КонецПроцедуры

&НаСервере
Процедура УправлениеДоступностьюРеквизитов(БлокируемыеЭлементы, ТолькоПросмотр) Экспорт
	РегламентированнаяОтчетность.УправлениеДоступностьюРеквизитов(ЭтотОбъект, БлокируемыеЭлементы, ТолькоПросмотр);
КонецПроцедуры

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

&НаСервере
Процедура ИнициализироватьВыводСтатусовИВажныхСообщений_85()

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

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

&НаСервере
Процедура ВывестиСтатусыИВыжныеСообщенияНаФормуНаСервере() Экспорт

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

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

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

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

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

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

	ВывестиСтатусыИВыжныеСообщенияНаФормуНаСервере();

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

&НаКлиенте
Процедура Подключаемый_ОбработкаНажатияКнопкиВВажномСообщении(Команда)

	Если Команда.Имя = "ОтправитьНеотправленноеИзвещение" Тогда
		ОтправитьНеотправленноеИзвещение(Неопределено);
	КонецЕсли;

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

&НаКлиенте
Процедура Подключаемый_ОбработкаНавигационнойСсылкиВВажномСообщении(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)

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

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

&НаКлиенте
Процедура Подключаемый_ОбработкаЗакрытияВажногоСообщения(Команда)

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

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

&НаКлиенте
Процедура Подключаемый_ОбработатьДействиеИнформационногоСообщения(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)

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

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

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

Связанные материалы