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

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

&НаКлиенте
Перем ОбработкаКС Экспорт;

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

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

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

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

&НаСервере
Процедура ДополнитьРеквизитыФормы()
	
	КатегорииКлассификатора =
		СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("П0010010002;П0010020002", ";", Истина);
	
	мСтруктураМногострочныхРазделов = Новый Структура;
	мСтруктураМногостраничныхРазделов = Новый Структура;
	мСтруктураИсхКолвоСтрокРазделов = Новый Структура;
	мСтруктураКолвоКолонокРазделов = Новый Структура;
	СтруктураРеквизитовФормы.мСоответствияМнгЧ = Новый Соответствие;
	
	ДобавляемыеРеквизиты = Новый Массив;
	
	Для Каждого Стр Из КатегорииКлассификатора Цикл
		
		ДобавляемыеРеквизиты.Очистить();
		
		ИмяДобавляемогоРеквизита = Стр;
		
		ДобавляемыеРеквизиты.Добавить(
			Новый РеквизитФормы(ИмяДобавляемогоРеквизита, Новый ОписаниеТипов("ТаблицаЗначений")));
		ИзменитьРеквизиты(ДобавляемыеРеквизиты);
		ДобавляемыеРеквизиты.Очистить();
		
		Если Стр = "П0010010002" Тогда
			
			ТипКолонкиСтрока = Новый ОписаниеТипов("Строка");
			ТипКолонкиЧисло12_2 = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(12, 2));
			ТипКолонкиЧисло12_0 = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(12, 0));
			
			Для Инд = 1 По 4 Цикл
				ДобавляемыйРеквизит = Новый РеквизитФормы(
					ИмяДобавляемогоРеквизита + Формат(Инд, "ЧЦ=2; ЧВН="), ТипКолонкиЧисло12_2, ИмяДобавляемогоРеквизита);
				ДобавляемыеРеквизиты.Добавить(ДобавляемыйРеквизит);
			КонецЦикла;
			
			Для Инд = 5 По 6 Цикл
				ДобавляемыйРеквизит = Новый РеквизитФормы(
					ИмяДобавляемогоРеквизита + Формат(Инд, "ЧЦ=2; ЧВН="), ТипКолонкиЧисло12_0, ИмяДобавляемогоРеквизита);
				ДобавляемыеРеквизиты.Добавить(ДобавляемыйРеквизит);
			КонецЦикла;
			
			Для Инд = 7 По 9 Цикл
				ДобавляемыйРеквизит = Новый РеквизитФормы(
					ИмяДобавляемогоРеквизита + Формат(Инд, "ЧЦ=2; ЧВН="), ТипКолонкиСтрока, ИмяДобавляемогоРеквизита);
				ДобавляемыеРеквизиты.Добавить(ДобавляемыйРеквизит);
			КонецЦикла;
			
			ИзменитьРеквизиты(ДобавляемыеРеквизиты);
			СтруктураРеквизитовФормы.Вставить("мИдГруппы1", ИмяДобавляемогоРеквизита);
			мСтруктураМногострочныхРазделов.Вставить(ИмяДобавляемогоРеквизита, ИмяДобавляемогоРеквизита);
			мСтруктураИсхКолвоСтрокРазделов.Вставить(ИмяДобавляемогоРеквизита, 10);
			мСтруктураКолвоКолонокРазделов.Вставить(ИмяДобавляемогоРеквизита, 9);
			СтруктураРеквизитовФормы.мСоответствияМнгЧ.Вставить(ИмяДобавляемогоРеквизита, "МногострочнаяЧасть1");
			
		ИначеЕсли Стр = "П0010020002" Тогда
			
			ТипКолонкиСтрока = Новый ОписаниеТипов("Строка");
			ТипКолонкиЧисло16_1 = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(16, 1));
			
			Для Инд = 1 По 11 Цикл
				
				Если Инд = 4 Или Инд = 5 Или Инд = 6 Тогда
					Продолжить;
				КонецЕсли;
				
				Если Инд = 1 Или Инд = 2 Или Инд = 3 Тогда
					ДобавляемыйРеквизит = Новый РеквизитФормы(
						ИмяДобавляемогоРеквизита + Формат(Инд, "ЧЦ=2; ЧВН="), ТипКолонкиСтрока, ИмяДобавляемогоРеквизита);
					ДобавляемыеРеквизиты.Добавить(ДобавляемыйРеквизит);
				Иначе
					ДобавляемыйРеквизит = Новый РеквизитФормы(
						ИмяДобавляемогоРеквизита + Формат(Инд, "ЧЦ=2; ЧВН="), ТипКолонкиЧисло16_1, ИмяДобавляемогоРеквизита);
					ДобавляемыеРеквизиты.Добавить(ДобавляемыйРеквизит);
				КонецЕсли;
			КонецЦикла;
			
			ИзменитьРеквизиты(ДобавляемыеРеквизиты);
			СтруктураРеквизитовФормы.Вставить("мИдГруппы2", ИмяДобавляемогоРеквизита);
			мСтруктураМногострочныхРазделов.Вставить(ИмяДобавляемогоРеквизита, ИмяДобавляемогоРеквизита);
			мСтруктураИсхКолвоСтрокРазделов.Вставить(ИмяДобавляемогоРеквизита, 10);
			мСтруктураКолвоКолонокРазделов.Вставить(ИмяДобавляемогоРеквизита, 8);
			СтруктураРеквизитовФормы.мСоответствияМнгЧ.Вставить(ИмяДобавляемогоРеквизита, "МногострочнаяЧасть2");
			
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

&НаСервере
Процедура ФормироватьСтруктуруСтраницОтчета() Экспорт
	
	// Дерево содержит коллекцию страниц отчета.
	// В колонках дерева хранятся следующие данные:
	//    - представление листа;
	//    - имя страницы основной панели формы, содержащей выводимый на печать лист;
	//    - имя поля табличного документа;
	//    - имя области ячеек табличного документа (используется в случае вывода
	//      на печать отдельных страниц титульного листа);
	//    - ориентация страницы при печати;
	//    - число, метка вывода страницы на печать;
	//    - число, метка показа страницы на основной панели формы;
	//    - число, метка выгрузки данных страницы в ИМНС.
	//
	
	мДеревоСтраницОтчета.ПолучитьЭлементы().Очистить();
	
	СтрокаУровня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(
			ЭтотОбъект, Область, СтандартнаяОбработка);
	ИначеЕсли СтрЧислоВхождений(Область.Имя, "ДобавитьСтроку") > 0 Тогда
		СтандартнаяОбработка = Ложь;
		ДобавитьСтроку("");
	ИначеЕсли СтрЧислоВхождений(Область.Имя, "УдалитьСтроку") > 0 Тогда
		УдалитьСтроку("");
	ИначеЕсли РегламентированнаяОтчетностьКлиент.ВыбраннаяОбластьРегламентированногоОтчетаНеВерна(ЭтаФорма, Область, СтандартнаяОбработка) Тогда
		Возврат;
	ИначеЕсли Не СтруктураРеквизитовФормы.мАвтоВыборКодов Тогда
		Графа		   = Сред(Область.Имя, 12, 2);
		Подраздел	   = Сред(Область.Имя, 7, 1);
		ПравОбластьИмя = Прав(Область.Имя, 2);
		
		Если Подраздел = "1" И (Графа = "07" Или Графа = "09")
		 Или Подраздел = "2" И (Графа = "01" Или Графа = "03") Тогда
			ПараметрВводаПоля = РегламентированнаяОтчетностьКлиентСервер.НайтиСвойстваПоказателя(ЭтотОбъект, "OKVED2");
			
			Если ПараметрВводаПоля <> Неопределено И ПараметрВводаПоля.ТаблицаЗначений <> Неопределено Тогда
				Если Подраздел = "1" Тогда
					СмежнаяОбласть = ПолеТабличногоДокументаФормаОтчета.Области.Найти(СтрЗаменить(Область.Имя, "П001001000209", "П001001000207"));
					ОбластьДляВвода = ПолеТабличногоДокументаФормаОтчета.Области.Найти(СтрЗаменить(Область.Имя, "П001001000207", "П001001000209"));
				ИначеЕсли Подраздел = "2" Тогда
					СмежнаяОбласть = ПолеТабличногоДокументаФормаОтчета.Области.Найти(СтрЗаменить(Область.Имя, "П001002000203", "П001002000201"));
					ОбластьДляВвода = ПолеТабличногоДокументаФормаОтчета.Области.Найти(СтрЗаменить(Область.Имя, "П001002000201", "П001002000203"));
				КонецЕсли;
				
				Если СмежнаяОбласть <> Неопределено Тогда 
					КодПоказателя = ПараметрВводаПоля.Показатель;
					ВвестиПоказатель(Элемент, ОбластьДляВвода, СмежнаяОбласть, КодПоказателя, Ложь,
						ПараметрВводаПоля.ТекстПриВыборе, ПараметрВводаПоля.ТаблицаЗначений, СтандартнаяОбработка);
				КонецЕсли;
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ВвестиПоказательЗавершение(РезультатВыбора, ДополнительныеПараметры) Экспорт
	Область = ДополнительныеПараметры.Область;
	СмежнаяОбласть = ДополнительныеПараметры.СмежнаяОбласть;
	
	Если РезультатВыбора = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(РезультатВыбора["Код"]) Тогда
		РезультатВыбора["Название"] = "";
	КонецЕсли;
	Область.Значение = РезультатВыбора["Код"];
	СмежнаяОбласть.Значение = РезультатВыбора["Название"];
	
	Подраздел = Сред(Область.Имя, 7, 1);
	Если Подраздел = "1" Тогда
		СмежныйРазделОблКод  = Лев(Область.Имя, 6) + "2" + Сред(Область.Имя, 8, 4) + "03" + Сред(Область.Имя, 14);
		СмежныйРазделОблНаим = Лев(Область.Имя, 6) + "2" + Сред(Область.Имя, 8, 4) + "01" + Сред(Область.Имя, 14);
	ИначеЕсли Подраздел = "2" Тогда
		СмежныйРазделОблКод  = Лев(Область.Имя, 6) + "1" + Сред(Область.Имя, 8, 4) + "09" + Сред(Область.Имя, 14);
		СмежныйРазделОблНаим = Лев(Область.Имя, 6) + "1" + Сред(Область.Имя, 8, 4) + "07" + Сред(Область.Имя, 14);
	КонецЕсли;
	ПолеТабличногоДокументаФормаОтчета.Области[СмежныйРазделОблКод].Значение = РезультатВыбора["Код"];
	ПолеТабличногоДокументаФормаОтчета.Области[СмежныйРазделОблНаим].Значение = РезультатВыбора["Название"];
	
	Модифицированность = Истина;
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура Расчет(Форма, ИмяТекущейСтраницыПанели = "", ОбластьИмя = "")
	
	Если Форма.СтруктураРеквизитовФормы.ФлажокОтклАвтоРасчет Тогда
		Возврат;
	КонецЕсли;
	
	Области = Форма.ПолеТабличногоДокументаФормаОтчета.Области;
	
	Для Гр = 2 По 6 Цикл
		Инд = 0;
		СуммаПоГр = 0;
		Графа = Формат(Гр, "ЧЦ=2; ЧВН=");
		Пока Истина Цикл
			Инд = Инд + 1;
			Обл = Области.Найти("П0010010002" + Графа + "_" + Формат(Инд,"ЧГ="));
			Если Обл = Неопределено Тогда
				Прервать;
			КонецЕсли;
			СуммаПоГр = СуммаПоГр + Обл.Значение;
		КонецЦикла;
		Области["П0010010001" + Графа].Значение = СуммаПоГр;
	КонецЦикла;
	
	Инд = 0;
	Пока Истина Цикл
		Инд = Инд + 1;
		Обл = Области.Найти("П001001000201_" + Формат(Инд,"ЧГ="));
		Если Обл = Неопределено Тогда
			Прервать;
		КонецЕсли;
		
		СуммаПоСтр = 0;
		Для Гр = 2 По 4 Цикл
			Графа = Формат(Гр, "ЧЦ=2; ЧВН=");
			Обл2 = Области.Найти("П0010010002" + Графа + "_" + Формат(Инд,"ЧГ="));
			СуммаПоСтр = СуммаПоСтр + Обл2.Значение;
		КонецЦикла;
		Обл.Значение = СуммаПоСтр;
	КонецЦикла;
	Области.П001001000101.Значение = Области.П001001000102.Значение + Области.П001001000103.Значение + Области.П001001000104.Значение;
	
	//// Раздел 1 продолжение, расчет графы 7 - 11.
	Для Гр = 7 По 11 Цикл
		Инд = 0;
		СуммаПоГр = 0;
		Графа = Формат(Гр, "ЧЦ=2; ЧВН=");
		Пока Истина Цикл
			Инд = Инд + 1;
			Обл = Области.Найти("П0010020002" + Графа + "_" + Формат(Инд,"ЧГ="));
			Если Обл = Неопределено Тогда
				Прервать;
			КонецЕсли;
			СуммаПоГр = СуммаПоГр + Обл.Значение;
		КонецЦикла;
		Области["П0010020001" + Графа].Значение = СуммаПоГр;
	КонецЦикла;
	
	Инд = 0;
	Пока Истина Цикл
		Инд = Инд + 1;
		
		Обл = Области.Найти("П001002000207_" + Формат(Инд,"ЧГ="));
		Если Обл = Неопределено Тогда
			Прервать;
		КонецЕсли;
		
		СуммаПоСтр = 0;
		Для Гр = 8 По 10 Цикл
			Графа = Формат(Гр, "ЧЦ=2; ЧВН=");
			Обл2 = Области.Найти("П0010020002" + Графа + "_" + Формат(Инд,"ЧГ="));
			СуммаПоСтр = СуммаПоСтр + Обл2.Значение;
		КонецЦикла;
		Обл.Значение = СуммаПоСтр;
	КонецЦикла;
	Области.П001002000107.Значение = Области.П001002000108.Значение + Области.П001002000109.Значение + Области.П001002000110.Значение;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ДобавитьСтроку(Команда)
	
	#Если ВебКлиент Тогда
		ДобавитьСтрокуНаСервере("ФормаОтчета");
	#Иначе
		ДобавитьСтрокуНаКлиенте("ФормаОтчета");
	#КонецЕсли
	
КонецПроцедуры

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура УдалитьДополнительнуюСтрокуИзГруппы(Форма, СпециальноеДобавление, ИмяКолонкиНомера, ТекущаяСтраница, ИмяГруппы, НомУдаляемойСтроки, НомерСтрокиТаблицы)
	
	Перем СтруктураГруппы;
	Перем СтруктураГруппыСинхронизируемой;
	
	Перем ИсходноеКоличествоСтрокГруппы;
	Перем ИсходноеКоличествоСтрокГруппыСинхронизируемой;
	
	// Сначала выполним проверку на активную страницу панели формы,
	// которая содержит многострочный раздел.
	#Если НаКлиенте Тогда
		ИмяГруппы = Форма.ОпределитьИдМногострочногоРазделаПоАктивнойСтраницеНаКлиенте(ТекущаяСтраница);
	#Иначе
		ИмяГруппы = Форма.ОпределитьИдМногострочногоРазделаПоАктивнойСтраницеНаСервере(ТекущаяСтраница);
	#КонецЕсли
	
	// Исходное количество строк группы.
	Форма.мСтруктураИсхКолвоСтрокРазделов.Свойство(ИмяГруппы, ИсходноеКоличествоСтрокГруппы);
	
	Форма.мСтруктураМногострочныхРазделов.Свойство(ИмяГруппы, СтруктураГруппы);
	
	ТекТабличноеПолеИмя = "ПолеТабличногоДокументаФормаОтчета";
	ТекТабличноеПоле    = Форма["ПолеТабличногоДокументаФормаОтчета"];
	
	ТекущаяОбласть = Форма.Элементы[ТекТабличноеПолеИмя].ТекущаяОбласть;
	ИмяЯчейки      = СтрЗаменить(ТекущаяОбласть.Имя, "УдалитьСтроку", "");
	
	Если ИмяГруппы = "П0010010002" Тогда
		ИмяГруппыСинхронизируемой1 = "П0010020002";
		ИмяЯчейкиСинхронизируемой1 = "П001002" + Сред(ИмяГруппыСинхронизируемой1, 8, 4) + "01_" + Сред(ИмяЯчейки, 15);
		
		ГраФаНач = 1;
		ГраФаКон = 9;
		
		ГраФаНачСинхронизируемой = 1;
		ГраФаКонСинхронизируемой = 11;
	ИначеЕсли ИмяГруппы = "П0010020002" Тогда
		ИмяГруппыСинхронизируемой1 = "П0010010002";
		ИмяЯчейкиСинхронизируемой1 = "П001001" + Сред(ИмяГруппыСинхронизируемой1, 8, 4) + "07_" + Сред(ИмяЯчейки, 15);
		
		ГраФаНач = 1;
		ГраФаКон = 11;
		
		ГраФаНачСинхронизируемой = 1;
		ГраФаКонСинхронизируемой = 9;
	КонецЕсли;
	
	// Предварительно обновим структуру многострочных разделов.
	ОбновитьСтруктуруМногострочногоРаздела(Форма, ИмяГруппы);
	
	// Номер строки многострочного раздела определим
	// по имени выделенной ячейки.
	СтруктураГруппы = Форма[СтруктураГруппы];
	
	// Удаляется добавленная строка.
	ИмяПервойЯчейкиУдаляемойСтроки = ИмяГруппы + Формат(ГраФаНач, "ЧЦ=2; ЧВН=") + "_" + НомУдаляемойСтроки;
	
	Если СтруктураГруппы.Количество() > ИсходноеКоличествоСтрокГруппы Тогда
		
		// Область первой ячейки удаляемой строки многострочного раздела.
		ОбластьЯчейки = ТекТабличноеПоле.Области[ИмяПервойЯчейкиУдаляемойСтроки];
		
		// Номера строк удаляемой области.
		НомерВерхЯчейкиОбласти = ОбластьЯчейки.Верх;
		НомерНижнЯчейкиОбласти = ОбластьЯчейки.Верх;
		
		РегламентированнаяОтчетностьВызовСервера.СпециальногоУдаленияСтроки(
			ТекТабличноеПоле, ТекТабличноеПолеИмя, ИмяГруппы, НомерВерхЯчейкиОбласти, НомерНижнЯчейкиОбласти);
		
		Форма[ТекТабличноеПолеИмя] = ТекТабличноеПоле;
		
		КолвоСдвигаемыхСтрок = СтруктураГруппы.Количество() - НомУдаляемойСтроки;
		
		// Обновим имена ячеек сдвинутых строк.
		Если КолвоСдвигаемыхСтрок > 0 Тогда
			
			Для НСтр = НомУдаляемойСтроки + 1 По СтруктураГруппы.Количество() Цикл
				
				ТекСтрока = СтруктураГруппы[НСтр-1];
				
				Для НомерГрафы = ГраФаНач По ГраФаКон Цикл
					КолонкаИмя = ИмяГруппы + Формат(НомерГрафы, "ЧЦ=2; ЧВН=; ЧН=00");
					
					Если СтруктураГруппы[0].Свойство(КолонкаИмя) Тогда
						
						ИмяСдвинутойЯчейки = КолонкаИмя + "_" + НСтр;
						НовоеИмяСдвинутойЯчейки = КолонкаИмя + "_" + (НСтр - 1);
						
						ОбластьСдвинутойЯчейки     = ТекТабличноеПоле.Области[ИмяСдвинутойЯчейки];
						ОбластьСдвинутойЯчейки.Имя = НовоеИмяСдвинутойЯчейки;
						
						Если (НомерГрафы = 7 И ИмяГруппы = "П0010010002")
						 Или (НомерГрафы = 1 И ИмяГруппы = "П0010020002") Тогда
							НомерПервойКолонки = 2;
							ОбластьЯчейкиУдалитьСтроку = ТекТабличноеПоле.Область(
								ОбластьСдвинутойЯчейки.Верх, НомерПервойКолонки, ОбластьСдвинутойЯчейки.Верх, НомерПервойКолонки);
							ОбластьЯчейкиУдалитьСтроку.Имя = "УдалитьСтроку" + НовоеИмяСдвинутойЯчейки;
							
						КонецЕсли;
						
					КонецЕсли;
				КонецЦикла;
				
			КонецЦикла;
		КонецЕсли;
		
		// Обновляем структуру многострочного раздела.
		СтруктураГруппы.Удалить(НомерСтрокиТаблицы);
		
	Иначе
		// Строка не удаляется в форме табличного документа,
		// должен осуществляться сдвиг строк.
		
		// Обновляем структуру многострочного раздела
		// методом удаления выбранной строки и добавления пустой строки.
		СтруктураГруппы.Удалить(НомерСтрокиТаблицы);
		
		ДобавляемаяСтрока = СтруктураГруппы.Добавить();
		
		// Обновляем формат числовых ячеек
		Для НСтр = НомУдаляемойСтроки По СтруктураГруппы.Количество() Цикл
			
			НомерСтрокиВФормеТаблицы = Формат(НСтр, "ЧГ=0");
			НомерСтрокиВФормеТаблицыСлед = Формат(НСтр + 1, "ЧГ=0");
			
			Для НомерГрафы = ГраФаНач По ГраФаКон Цикл
				
				КолонкаТаблицыИмя = ИмяГруппы + Формат(НомерГрафы, "ЧЦ=2; ЧВН=; ЧН=00");
				
				Если СтруктураГруппы[0].Свойство(КолонкаТаблицыИмя) Тогда
					
					ИмяЯчейкиИзменяемой            = КолонкаТаблицыИмя + "_" + НомерСтрокиВФормеТаблицы;
					ОбластьЯчейкиТаблицыИзменяемой = ТекТабличноеПоле.Области[ИмяЯчейкиИзменяемой];
					
					ИмяЯчейкиСлед                  = КолонкаТаблицыИмя + "_" + НомерСтрокиВФормеТаблицыСлед;
					ОбластьЯчейкиТаблицыСлед       = ТекТабличноеПоле.Области.Найти(ИмяЯчейкиСлед);
					
					Если РегламентированнаяОтчетностьКлиентСервер.ЯвляетсяЧислом(ОбластьЯчейкиТаблицыИзменяемой.Значение) Тогда
						Если ОбластьЯчейкиТаблицыСлед = Неопределено Тогда
							ОбластьЯчейкиТаблицыИзменяемой.Формат = "";
						Иначе
							ОбластьЯчейкиТаблицыИзменяемой.Формат = ОбластьЯчейкиТаблицыСлед.Формат;
						КонецЕсли;
					КонецЕсли;
					
				КонецЕсли;
				
			КонецЦикла;
			
		КонецЦикла;
		
		// Обновляем экранную форму табличного документа.
		#Если НаКлиенте Тогда
			Форма.ВывестиРазделВТабличныйДокументНаКлиенте(ИмяГруппы, СтруктураГруппы);
		#Иначе
			Форма.ВывестиРазделВТабличныйДокументНаСервере(ИмяГруппы, СтруктураГруппы);
		#КонецЕсли
		
	КонецЕсли;
	
	ИмяГруппыСинхронизируемой = ИмяГруппыСинхронизируемой1;
	ИмяЯчейкиСинхронизируемой = ИмяЯчейкиСинхронизируемой1;
	
	Форма.мСтруктураИсхКолвоСтрокРазделов.Свойство(ИмяГруппыСинхронизируемой, ИсходноеКоличествоСтрокГруппыСинхронизируемой);
	
	Форма.мСтруктураМногострочныхРазделов.Свойство(ИмяГруппыСинхронизируемой, СтруктураГруппыСинхронизируемой);
	
	ТекТабличноеПолеИмяСинхронизируемое = "ПолеТабличногоДокументаФормаОтчета";
	
	ТекТабличноеПолеСинхронизируемое = Форма[ТекТабличноеПолеИмяСинхронизируемое];
	
	// Предварительно обновим структуру многострочных разделов.
	ОбновитьСтруктуруМногострочногоРаздела(Форма, ИмяГруппыСинхронизируемой);
	
	// Номер строки многострочного раздела определим
	// по имени выделенной ячейки.
	НомУдаляемойСтрокиСинхронизируемый = Число(Сред(ИмяЯчейкиСинхронизируемой, СтрНайти(ИмяЯчейкиСинхронизируемой, "_") + 1));
	НомерСтрокиТаблицыСинхронизируемый = НомУдаляемойСтрокиСинхронизируемый - 1; // нумерация строк в таблице значений начинается с нуля
	СтруктураГруппыСинхронизируемой    = Форма[СтруктураГруппыСинхронизируемой];
	
	Если СтруктураГруппыСинхронизируемой.Количество() > ИсходноеКоличествоСтрокГруппыСинхронизируемой Тогда
		
		// Удаляется добавленная строка.
		ИмяПервойЯчейкиУдаляемойСтрокиСинхронизируемой =
			ИмяГруппыСинхронизируемой + Формат(ГрафаНачСинхронизируемой, "ЧЦ=2; ЧВН=") + "_" + НомУдаляемойСтрокиСинхронизируемый;
		
		// Область первой ячейки удаляемой строки многострочного раздела.
		ОбластьЯчейкиСинхронизируемой = ТекТабличноеПолеСинхронизируемое.Области[ИмяПервойЯчейкиУдаляемойСтрокиСинхронизируемой];
		
		// Номера строк удаляемой области.
		НомерВерхЯчейкиОбластиСинхронизируемой = ОбластьЯчейкиСинхронизируемой.Верх;
		НомерНижнЯчейкиОбластиСинхронизируемой = ОбластьЯчейкиСинхронизируемой.Верх;
		
		РегламентированнаяОтчетностьВызовСервера.СпециальногоУдаленияСтроки(
			ТекТабличноеПолеСинхронизируемое, ТекТабличноеПолеИмяСинхронизируемое, ИмяГруппыСинхронизируемой,
			НомерВерхЯчейкиОбластиСинхронизируемой, НомерНижнЯчейкиОбластиСинхронизируемой);
		
		Форма[ТекТабличноеПолеИмяСинхронизируемое] = ТекТабличноеПолеСинхронизируемое;
		
		КолвоСдвигаемыхСтрокСинхронизируемое = СтруктураГруппыСинхронизируемой.Количество() - НомУдаляемойСтрокиСинхронизируемый;
		
		// Обновим имена ячеек сдвинутых строк.
		Если КолвоСдвигаемыхСтрокСинхронизируемое > 0 Тогда
			
			Для НСтр = НомУдаляемойСтрокиСинхронизируемый + 1 По СтруктураГруппыСинхронизируемой.Количество() Цикл
			
				ТекСтрокаСинхронизируемая = СтруктураГруппыСинхронизируемой[НСтр-1];
				
				Для НомерГрафы = ГрафаНачСинхронизируемой По ГрафаКонСинхронизируемой Цикл
					
					КолонкаИмяСинхронизируемое = ИмяГруппыСинхронизируемой + Формат(НомерГрафы, "ЧЦ=2; ЧВН=");
					
					Если СтруктураГруппыСинхронизируемой[0].Свойство(КолонкаИмяСинхронизируемое) Тогда
						
						ИмяСдвинутойЯчейкСинхронизируемой = КолонкаИмяСинхронизируемое + "_" + НСтр;
						НовоеИмяСдвинутойЯчейкиСинхронизируемой = КолонкаИмяСинхронизируемое + "_" + (НСтр - 1);
						
						ОбластьСдвинутойЯчейкиСинхронизируемой     = ТекТабличноеПолеСинхронизируемое.Области[ИмяСдвинутойЯчейкСинхронизируемой];
						ОбластьСдвинутойЯчейкиСинхронизируемой.Имя = НовоеИмяСдвинутойЯчейкиСинхронизируемой;
						
						Если (НомерГрафы = 7 И ИмяГруппы = "П0010010002")
						 Или (НомерГрафы = 1 И ИмяГруппы = "П0010020002") Тогда
							ОбластьЯчейкиУдалитьСтроку = ТекТабличноеПолеСинхронизируемое.Область(
								ОбластьСдвинутойЯчейкиСинхронизируемой.Верх, 2, ОбластьСдвинутойЯчейкиСинхронизируемой.Верх, 2);
							ОбластьЯчейкиУдалитьСтроку.Имя = "УдалитьСтроку" + НовоеИмяСдвинутойЯчейкиСинхронизируемой;
						КонецЕсли;
						
					КонецЕсли;
					
				КонецЦикла;
				
			КонецЦикла;
			
		КонецЕсли;
		
		// Обновляем структуру многострочного раздела.
		СтруктураГруппыСинхронизируемой.Удалить(НомерСтрокиТаблицыСинхронизируемый);
		
	Иначе
		
		// Строка не удаляется в форме табличного документа,
		// должен осуществляться сдвиг строк.
		
		// Обновляем структуру многострочного раздела
		// методом удаления выбранной строки и добавления пустой строки.
		СтруктураГруппыСинхронизируемой.Удалить(НомерСтрокиТаблицыСинхронизируемый);
		
		ДобавляемаяСтрокаСинхронизируемая = СтруктураГруппыСинхронизируемой.Добавить();
		
		// Обновляем формат числовых ячеек
		Для НСтр = НомУдаляемойСтрокиСинхронизируемый По СтруктураГруппыСинхронизируемой.Количество() Цикл
			
			НомерСтрокиВФормеТаблицы = Формат(НСтр, "ЧГ=0");
			НомерСтрокиВФормеТаблицыСлед = Формат(НСтр + 1, "ЧГ=0");
			
			Для НомерГрафы = ГрафаНачСинхронизируемой По ГрафаКонСинхронизируемой Цикл
				
				КолонкаТаблицыИмя = ИмяГруппыСинхронизируемой + Формат(НомерГрафы, "ЧЦ=2; ЧВН=; ЧН=00");
				
				Если СтруктураГруппыСинхронизируемой[0].Свойство(КолонкаТаблицыИмя) Тогда
					
					ИмяЯчейкиИзменяемой            = КолонкаТаблицыИмя + "_" + НомерСтрокиВФормеТаблицы;
					ОбластьЯчейкиТаблицыИзменяемой = ТекТабличноеПолеСинхронизируемое.Области[ИмяЯчейкиИзменяемой];
					
					ИмяЯчейкиСлед                  = КолонкаТаблицыИмя + "_" + НомерСтрокиВФормеТаблицыСлед;
					ОбластьЯчейкиТаблицыСлед       = ТекТабличноеПолеСинхронизируемое.Области.Найти(ИмяЯчейкиСлед);
					
					Если РегламентированнаяОтчетностьКлиентСервер.ЯвляетсяЧислом(ОбластьЯчейкиТаблицыИзменяемой.Значение) Тогда
						Если ОбластьЯчейкиТаблицыСлед = Неопределено Тогда
							ОбластьЯчейкиТаблицыИзменяемой.Формат = "";
						Иначе
							ОбластьЯчейкиТаблицыИзменяемой.Формат = ОбластьЯчейкиТаблицыСлед.Формат;
						КонецЕсли;
					КонецЕсли;
					
				КонецЕсли;
				
			КонецЦикла;
		КонецЦикла;
		
		// Обновляем экранную форму табличного документа.
		#Если НаКлиенте Тогда
			Форма.ВывестиРазделВТабличныйДокументНаКлиенте(ИмяГруппыСинхронизируемой, СтруктураГруппыСинхронизируемой);
		#Иначе
			Форма.ВывестиРазделВТабличныйДокументНаСервере(ИмяГруппыСинхронизируемой, СтруктураГруппыСинхронизируемой);
		#КонецЕсли
		
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура УдалитьДополнительнуюСтрокуНаКлиенте(ТекущаяСтраница)
	
	УдалитьДополнительнуюСтроку(ЭтотОбъект, , , ТекущаяСтраница);
	
КонецПроцедуры

&НаСервере
Процедура УдалитьДополнительнуюСтрокуНаСервере(ТекущаяСтраница)
	
	УдалитьДополнительнуюСтроку(ЭтотОбъект, , , ТекущаяСтраница);
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Процедура ПеренумерацияСтрокТаблицы(ЭтотОбъект)
	
	Области = ЭтотОбъект.ПолеТабличногоДокументаФормаОтчета.Области;
	
	Инд = 0;
	Пока Истина Цикл
		Инд = Инд + 1;
		Обл = Области.Найти("П001001000208_" + Формат(Инд,"ЧГ="));
		Если Обл = Неопределено Тогда
			Прервать;
		КонецЕсли;
		Обл2        = Области.Найти("П001002000202_" + Формат(Инд,"ЧГ="));
		НомерСтроки = Инд + 1;
		Если НомерСтроки < 10 Тогда
			Обл.Значение  = Формат(НомерСтроки, "ЧЦ=2; ЧВН=");
			Обл2.Значение = Формат(НомерСтроки, "ЧЦ=2; ЧВН=");
		Иначе
			Обл.Значение  = Формат(НомерСтроки, "ЧГ=");
			Обл2.Значение = Формат(НомерСтроки, "ЧГ=");
		КонецЕсли;
		Обл.Защита  = Истина;
		Обл2.Защита = Истина;
	КонецЦикла;
	
КонецПроцедуры

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

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

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

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

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

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

&НаСервере
Функция ПечатьНаСервере(ВидПечати)
	
	Если НЕ РегламентированнаяОтчетность.ПринтерДоступен() Тогда
		
		Сообщение = Новый СообщениеПользователю;
		
		Сообщение.Текст = НСтр("ru='Перед формированием печатных форм необходимо определить в системе принтер и задать его в качестве используемого по умолчанию!'");
		
		Сообщение.Сообщить();
		
		Возврат Ложь;
		
	КонецЕсли;
	
	СтруктураРеквизитовФормы.мПечатныеФормы.Очистить();
	
	ТабличныйДокумент = ЭтотОбъект["ПолеТабличногоДокументаФормаОтчета"];
	
	ПечатнаяФорма = РегламентированнаяОтчетность.НоваяСтраница();
	ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть1а"));
	ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть1б"));
	СтруктураРеквизитовФормы.мПечатныеФормы.Добавить(ПечатнаяФорма, "Форма П-4");
	
	МассивПроверки = Новый Массив;
	
	ПечатнаяФорма = РегламентированнаяОтчетность.НоваяСтраница();
	ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть1_1"));
	ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть1_2"));
	ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть1_3"));
	ВерхМногострочнойЧасти = ТабличныйДокумент.Области.ОсновнаяЧасть1_3.Низ + 1;
	НизМногострочнойЧасти = ТабличныйДокумент.Области.ДобавлениеСтроки1.Верх - 1;
	ТекущийВерх = ВерхМногострочнойЧасти;
	Пока ТекущийВерх <= НизМногострочнойЧасти Цикл
		МассивПроверки.Очистить();
		ТекущаяОбластьМногострочнойЧасти = ПолеТабличногоДокументаФормаОтчета.ПолучитьОбласть(ТекущийВерх, , ТекущийВерх);
		МассивПроверки.Добавить(ТекущаяОбластьМногострочнойЧасти);
		МассивПроверки.Добавить(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть1_4"));
		Если ПечатнаяФорма.ПроверитьВывод(МассивПроверки) Тогда
			ПечатнаяФорма.Вывести(ТекущаяОбластьМногострочнойЧасти);
		Иначе
			СтруктураРеквизитовФормы.мПечатныеФормы.Добавить(ПечатнаяФорма, "Форма П-4");
			ПечатнаяФорма = РегламентированнаяОтчетность.НоваяСтраница();
			ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть1_2"));
			ПечатнаяФорма.Вывести(ТекущаяОбластьМногострочнойЧасти);
		КонецЕсли;
		ТекущийВерх = ТекущийВерх + 1;
	КонецЦикла;
	ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть1_4"));
	СтруктураРеквизитовФормы.мПечатныеФормы.Добавить(ПечатнаяФорма, "Форма П-4");
	
	ПечатнаяФорма = РегламентированнаяОтчетность.НоваяСтраница();
	ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть2_1"));
	ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть2_2"));
	ВерхМногострочнойЧасти = ТабличныйДокумент.Области.ОсновнаяЧасть2_2.Низ + 1;
	НизМногострочнойЧасти = ТабличныйДокумент.Области.ДобавлениеСтроки2.Верх - 1;
	ТекущийВерх = ВерхМногострочнойЧасти;
	Пока ТекущийВерх <= НизМногострочнойЧасти Цикл
		МассивПроверки.Очистить();
		ТекущаяОбластьМногострочнойЧасти = ПолеТабличногоДокументаФормаОтчета.ПолучитьОбласть(ТекущийВерх, , ТекущийВерх);
		МассивПроверки.Добавить(ТекущаяОбластьМногострочнойЧасти);
		МассивПроверки.Добавить(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть2_3"));
		Если ПечатнаяФорма.ПроверитьВывод(МассивПроверки) Тогда
			ПечатнаяФорма.Вывести(ТекущаяОбластьМногострочнойЧасти);
		Иначе
			СтруктураРеквизитовФормы.мПечатныеФормы.Добавить(ПечатнаяФорма, "Форма П-4");
			ПечатнаяФорма = РегламентированнаяОтчетность.НоваяСтраница();
			ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть2_1"));
			ПечатнаяФорма.Вывести(ТекущаяОбластьМногострочнойЧасти);
		КонецЕсли;
		ТекущийВерх = ТекущийВерх + 1;
	КонецЦикла;
	ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть2_3"));
	СтруктураРеквизитовФормы.мПечатныеФормы.Добавить(ПечатнаяФорма, "Форма П-4");
	
	РегламентированнаяОтчетностьКлиентСервер.ПроставлениеНомеровЛистов(
		ЭтотОбъект, , СтруктураРеквизитовФормы.СписокПечатаемыхЛистов);
	
	Возврат Истина;
	
КонецФункции

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

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

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

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

&НаКлиенте
Функция СравнениеОтчетов(ДанныеДляСравнения) Экспорт
	
	Если Модифицированность Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = СтрШаблон(НСтр("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" Тогда // учтем оба варианта: кириллицу и латиницу
			Если Стр.Многострочность Тогда
				НомСтр = 1;
				ПодчиненныйЭлемент = РегламентированнаяОтчетность.ПолучитьПервыйПодчиненныйУзелСЗаполненнымКлючом(Стр);
				КлючПодчиненногоЭлемента = ПодчиненныйЭлемент.Ключ;
				Пока РегламентированнаяОтчетностьКлиентСервер.СвойствоОпределено(ПараметрыВыгрузки, КлючПодчиненногоЭлемента + "_" + Формат(НомСтр, "ЧГ=")) Цикл
					УзелСоответствующийСтроке = РегламентированнаяОтчетность.СкопироватьУзел(Узел, Стр);
					ЗаполнитьДаннымиУзел(ПараметрыВыгрузки, УзелСоответствующийСтроке, НомСтр);
					НомСтр = НомСтр + 1;
				КонецЦикла;
			Иначе
				ЗаполнитьДаннымиУзел(ПараметрыВыгрузки, Стр, НомерСтроки);
			КонецЕсли;
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Расшифровать(Команда)
	
	ПараметрыОтчета = Новый Структура;
	ПараметрыОтчета.Вставить("Организация",                              СтруктураРеквизитовФормы.Организация);
	ПараметрыОтчета.Вставить("ДатаНачалаПериодаОтчета",                  СтруктураРеквизитовФормы.мДатаНачалаПериодаОтчета);
	ПараметрыОтчета.Вставить("ДатаКонцаПериодаОтчета",                   СтруктураРеквизитовФормы.мДатаКонцаПериодаОтчета);
	ПараметрыОтчета.Вставить("ЗначениеТекущегоПоказателя",               Элементы.ПолеТабличногоДокументаФормаОтчета.ТекущаяОбласть.Текст);
	ПараметрыОтчета.Вставить("ИсключитьДанныеОбособленныхПодразделений", ИсключитьДанныеОбособленныхПодразделений);
	ПараметрыОтчета.Вставить("ОбособленноеПодразделение",                ОбособленноеПодразделение);
	РегламентированнаяОтчетностьКлиентСервер.ДополнитьОпциональныеПараметрыОтчета(ЭтотОбъект, ПараметрыОтчета);
	
	ТекущаяОбластьИмя = Элементы.ПолеТабличногоДокументаФормаОтчета.ТекущаяОбласть.Имя;
	
	Если СтрЧислоВхождений(ТекущаяОбластьИмя, "П001") > 0 Тогда
		Если СтрНайти(ТекущаяОбластьИмя, "_") > 0 Тогда
			Подраздел = Сред(ТекущаяОбластьИмя, 7, 1);
			КодОКВЭДГрафа = ?(Подраздел = "1", "9", "3");
			ИмяОбластиОКВЭД = "П00100" + Подраздел + "00020" + КодОКВЭДГрафа + Сред(ТекущаяОбластьИмя, 14);
			КодПоОКВЭД = ПолеТабличногоДокументаФормаОтчета.Области[ИмяОбластиОКВЭД].Значение;
		Иначе
			КодПоОКВЭД = "00";
		КонецЕсли;
		ПараметрыОтчета.Вставить("КодПоОКВЭД", КодПоОКВЭД);
	КонецЕсли;
	
	ИДИменПоказателей = Новый Массив;
	ИДИменПоказателей.Добавить(ТекущаяОбластьИмя);
	
	Если СтрЧислоВхождений(ИмяФормы, "ВнешнийОтчет.") > 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 Тогда
					Форма.ПолеТабличногоДокументаФормаОтчета.Области[ИмяПоказателя].Защита = Истина;
				Иначе
					Форма.ПолеТабличногоДокументаФормаОтчета.Области[ИмяПоказателя].Защита = Ложь;
				КонецЕсли;
				
				Форма.ПолеТабличногоДокументаФормаОтчета.Области[ИмяПоказателя].ЦветФона = ЦветФона;
				
			КонецЦикла;
			
		КонецЦикла;
	
	КонецЕсли;
	
КонецПроцедуры

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

#Область ПроверкаКонтрольныеСоотношенияИзШаблона

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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