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

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

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

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

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

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

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

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

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

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

	Иначе

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

	КонецЕсли;

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

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

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

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

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

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

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

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

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

	ДатаПодписи            		   = СтруктураРеквизитовФормы.мСохраненныйДок.ДатаПодписи;
	СтруктураРеквизитовФормы.ЕдиницаИзмерения         = СтруктураРеквизитовФормы.мСохраненныйДок.ЕдиницаИзмерения;
	СтруктураРеквизитовФормы.ТочностьЕдиницыИзмерения = СтруктураРеквизитовФормы.мСохраненныйДок.ТочностьЕдиницыИзмерения;
	Комментарий                    = СтруктураРеквизитовФормы.мСохраненныйДок.Комментарий;

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

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

	ВывестиПоказателиОтчетаВТабличныйДокумент(ПоказателиОтчета);

	СтруктураРеквизитовФормы.мАдресвФорматеДляВыгрузки = ПолеТабличногоДокументаФормаОтчета.Области.ОргАдрес.Значение;
	ПолеТабличногоДокументаФормаОтчета.Области.ОргАдрес.Значение = РегламентированнаяОтчетностьКлиентСервер.ПредставлениеАдресаВФормате9Запятых(СтруктураРеквизитовФормы.мАдресвФорматеДляВыгрузки);

	РегламентированнаяОтчетность.ОперацииПриВосстановленииРегламентированногоОтчета(ЭтаФорма);
	РегламентированнаяОтчетность.ЗаполнитьДанныеВШапкеОбособленныхПодразделений(ЭтаФорма);
	Модифицированность   = Ложь;

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

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

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

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

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

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

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

	Сведения = Новый СписокЗначений;

	Если НЕ ВПрограммеИзмененаДатаПодписи Тогда
		
		Сведения.Добавить("", "ИННЮЛ"); // ИНН
		Сведения.Добавить("", "ОКПО");  // ОКПО
		Сведения.Добавить("", "АдрПочт");
		Сведения.Добавить("", "НаимЮЛПол");
		Сведения.Добавить("", "ОснВидДеят");
		Сведения.Добавить("", "ОКВЭД");

	КонецЕсли;

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

	Если НЕ ВПрограммеИзмененаДатаПодписи Тогда

		ИННЮЛ = "";
		ОКПО = "";
		АдрПочт     = "";
		НаимЮЛПол = "";
		ОснВидДеят = "";
		ОКВЭД = "";

	КонецЕсли;

	ДолжнИсп = "";
	ФИОИсп = "";
	ТелИсп = "";
	АдресЭлПочтыИсп = "";

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

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

	Если ВПрограммеИзмененаДатаПодписи Тогда

		Форма.ПолеТабличногоДокументаФормаОтчета.Области.ОргИсполнитель.Значение = ФИОИсп;
		Форма.ПолеТабличногоДокументаФормаОтчета.Области.ОргДолжностьИсп.Значение = ДолжнИсп;
		Форма.ПолеТабличногоДокументаФормаОтчета.Области.ОргТелефонИсп.Значение = ТелИсп;
		Форма.ПолеТабличногоДокументаФормаОтчета.Области.ОргАдресЭлектроннойПочты.Значение = АдресЭлПочтыИсп;

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

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

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

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

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

&НаСервере
Процедура ПоказатьПериод()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Очистить() Экспорт
		
	ОчиститьТабличноеПолеНаСервере();

	// устанавливаем флаг модифицированности формы
	Модифицированность = Истина;

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

&НаСервере
Процедура ОчиститьТабличноеПолеНаСервере()
	
	ОчиститьТабличноеПоле(ЭтаФорма);
	РасчетНаСервере();
	
КонецПроцедуры

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

	СписокПоказателейНеПодлежащихОчистке.Добавить("КодЗнач1");
	СписокПоказателейНеПодлежащихОчистке.Добавить("КодЗнач2");
	СписокПоказателейНеПодлежащихОчистке.Добавить("КодЗнач3");
	СписокПоказателейНеПодлежащихОчистке.Добавить("КодЗнач4");

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

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

		Если Не ТекущаяОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Прямоугольник Тогда
			Продолжить;
		КонецЕсли;

		Если Не ТекущаяОбласть.СодержитЗначение Тогда
			Продолжить;
		КонецЕсли;

		Если ТекущаяОбласть.Защита Тогда
			Продолжить;
		КонецЕсли;

		ТекущаяОбласть.Очистить();
		ТекущаяОбласть.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(ТекущаяОбласть.Формат, "ЧН=' '");
	КонецЦикла;

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

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

	Расчет(ЭтаФорма, ИмяСтраницыПанели);

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

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

	Расчет(ЭтаФорма, ИмяСтраницыПанели);

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

&НаКлиентеНаСервереБезКонтекста
Процедура Расчет(Форма, ИмяСтраницыПанели = "") Экспорт
	
	Области = Форма.ПолеТабличногоДокументаФормаОтчета.Области;
	
	Области.П010000102.Значение = Области.П010000202.Значение + Области.П010000302.Значение + Области.П010000402.Значение + Области.П010000502.Значение + Области.П010000602.Значение
	                                         + Области.П010000702.Значение + Области.П010000802.Значение + Области.П010000902.Значение + Области.П010001002.Значение + Области.П010001102.Значение;
	Если Области.П010000102.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000202.Текст + Области.П010000302.Текст + Области.П010000402.Текст + Области.П010000502.Текст + Области.П010000602.Текст
		                                       + Области.П010000702.Текст + Области.П010000802.Текст + Области.П010000902.Текст + Области.П010001002.Текст + Области.П010001102.Текст), "ЧН=' '", "ЧН=");
		Области.П010000102.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000102.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000103.Значение = Области.П010000203.Значение + Области.П010000303.Значение + Области.П010000403.Значение + Области.П010000503.Значение + Области.П010000603.Значение
	                                         + Области.П010000703.Значение + Области.П010000803.Значение + Области.П010000903.Значение + Области.П010001003.Значение + Области.П010001103.Значение;
	Если Области.П010000103.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000203.Текст + Области.П010000303.Текст + Области.П010000403.Текст + Области.П010000503.Текст + Области.П010000603.Текст
		                                       + Области.П010000703.Текст + Области.П010000803.Текст + Области.П010000903.Текст + Области.П010001003.Текст + Области.П010001103.Текст), "ЧН=' '", "ЧН=");
		Области.П010000103.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000103.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000104.Значение = Области.П010000204.Значение + Области.П010000304.Значение + Области.П010000404.Значение + Области.П010000504.Значение + Области.П010000604.Значение
	                                         + Области.П010000704.Значение + Области.П010000804.Значение + Области.П010000904.Значение + Области.П010001004.Значение + Области.П010001104.Значение;
	Если Области.П010000104.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000204.Текст + Области.П010000304.Текст + Области.П010000404.Текст + Области.П010000504.Текст + Области.П010000604.Текст
		                                       + Области.П010000704.Текст + Области.П010000804.Текст + Области.П010000904.Текст + Области.П010001004.Текст + Области.П010001104.Текст), "ЧН=' '", "ЧН=");
		Области.П010000104.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000104.Формат, ФорматПредставленияНуля);
	КонецЕсли;

	Области.П010000101.Значение = Области.П010000102.Значение + Области.П010000103.Значение + Области.П010000104.Значение;
	Если Области.П010000101.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000102.Текст + Области.П010000103.Текст + Области.П010000104.Текст), "ЧН=' '", "ЧН=");
		Области.П010000101.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000101.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000201.Значение = Области.П010000202.Значение + Области.П010000203.Значение + Области.П010000204.Значение;
	Если Области.П010000201.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000202.Текст + Области.П010000203.Текст + Области.П010000204.Текст), "ЧН=' '", "ЧН=");
		Области.П010000201.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000201.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000301.Значение = Области.П010000302.Значение + Области.П010000303.Значение + Области.П010000304.Значение;
	Если Области.П010000301.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000302.Текст + Области.П010000303.Текст + Области.П010000304.Текст), "ЧН=' '", "ЧН=");
		Области.П010000301.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000301.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000401.Значение = Области.П010000402.Значение + Области.П010000403.Значение + Области.П010000404.Значение;
	Если Области.П010000401.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000402.Текст + Области.П010000403.Текст + Области.П010000404.Текст), "ЧН=' '", "ЧН=");
		Области.П010000401.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000401.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000501.Значение = Области.П010000502.Значение + Области.П010000503.Значение + Области.П010000504.Значение;
	Если Области.П010000501.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000502.Текст + Области.П010000503.Текст + Области.П010000504.Текст), "ЧН=' '", "ЧН=");
		Области.П010000501.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000501.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000601.Значение = Области.П010000602.Значение + Области.П010000603.Значение + Области.П010000604.Значение;
	Если Области.П010000601.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000602.Текст + Области.П010000603.Текст + Области.П010000604.Текст), "ЧН=' '", "ЧН=");
		Области.П010000601.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000601.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000701.Значение = Области.П010000702.Значение + Области.П010000703.Значение + Области.П010000704.Значение;
	Если Области.П010000701.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000702.Текст + Области.П010000703.Текст + Области.П010000704.Текст), "ЧН=' '", "ЧН=");
		Области.П010000701.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000701.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000801.Значение = Области.П010000802.Значение + Области.П010000803.Значение + Области.П010000804.Значение;
	Если Области.П010000801.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000802.Текст + Области.П010000803.Текст + Области.П010000804.Текст), "ЧН=' '", "ЧН=");
		Области.П010000801.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000801.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000901.Значение = Области.П010000902.Значение + Области.П010000903.Значение + Области.П010000904.Значение;
	Если Области.П010000901.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000902.Текст + Области.П010000903.Текст + Области.П010000904.Текст), "ЧН=' '", "ЧН=");
		Области.П010000901.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000901.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010001001.Значение = Области.П010001002.Значение + Области.П010001003.Значение + Области.П010001004.Значение;
	Если Области.П010001001.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010001002.Текст + Области.П010001003.Текст + Области.П010001004.Текст), "ЧН=' '", "ЧН=");
		Области.П010001001.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010001001.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010001101.Значение = Области.П010001102.Значение + Области.П010001103.Значение + Области.П010001104.Значение;
	Если Области.П010001101.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010001102.Текст + Области.П010001103.Текст + Области.П010001104.Текст), "ЧН=' '", "ЧН=");
		Области.П010001101.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010001101.Формат, ФорматПредставленияНуля);
	КонецЕсли;

	// Раздел 1 продолжение, расчет графы 5 и 6.
	Области.П010000105.Значение = Области.П010000205.Значение
	                                         + Области.П010000305.Значение
	                                         + Области.П010000405.Значение
	                                         + Области.П010000505.Значение
	                                         + Области.П010000605.Значение
	                                         + Области.П010000705.Значение
	                                         + Области.П010000805.Значение
	                                         + Области.П010000905.Значение
	                                         + Области.П010001005.Значение
	                                         + Области.П010001105.Значение;
	Если Области.П010000105.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000205.Текст
	                                           + Области.П010000305.Текст
	                                           + Области.П010000405.Текст
	                                           + Области.П010000505.Текст
	                                           + Области.П010000605.Текст
	                                           + Области.П010000705.Текст
	                                           + Области.П010000805.Текст
	                                           + Области.П010000905.Текст
	                                           + Области.П010001005.Текст
	                                           + Области.П010001105.Текст), "ЧН=' '", "ЧН=");
		Области.П010000105.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000105.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	
	Области.П010000106.Значение = Области.П010000206.Значение
	                                         + Области.П010000306.Значение
	                                         + Области.П010000406.Значение
	                                         + Области.П010000506.Значение
	                                         + Области.П010000606.Значение
	                                         + Области.П010000706.Значение
	                                         + Области.П010000806.Значение
	                                         + Области.П010000906.Значение
	                                         + Области.П010001006.Значение
	                                         + Области.П010001106.Значение;
	Если Области.П010000106.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000206.Текст
	                                           + Области.П010000306.Текст
	                                           + Области.П010000406.Текст
	                                           + Области.П010000506.Текст
	                                           + Области.П010000606.Текст
	                                           + Области.П010000706.Текст
	                                           + Области.П010000806.Текст
	                                           + Области.П010000906.Текст
	                                           + Области.П010001006.Текст
	                                           + Области.П010001106.Текст), "ЧН=' '", "ЧН=");
		Области.П010000106.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000106.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	
	Области.П010000107.Значение = Области.П010000207.Значение
	                                         + Области.П010000307.Значение
	                                         + Области.П010000407.Значение
	                                         + Области.П010000507.Значение
	                                         + Области.П010000607.Значение
	                                         + Области.П010000707.Значение
	                                         + Области.П010000807.Значение
	                                         + Области.П010000907.Значение
	                                         + Области.П010001007.Значение
	                                         + Области.П010001107.Значение;
	Если Области.П010000107.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000207.Текст
	                                           + Области.П010000307.Текст
	                                           + Области.П010000407.Текст
	                                           + Области.П010000507.Текст
	                                           + Области.П010000607.Текст
	                                           + Области.П010000707.Текст
	                                           + Области.П010000807.Текст
	                                           + Области.П010000907.Текст
	                                           + Области.П010001007.Текст
	                                           + Области.П010001107.Текст), "ЧН=' '", "ЧН=");
		Области.П010000107.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000107.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	
	Области.П010000108.Значение = Области.П010000208.Значение
	                                         + Области.П010000308.Значение
	                                         + Области.П010000408.Значение
	                                         + Области.П010000508.Значение
	                                         + Области.П010000608.Значение
	                                         + Области.П010000708.Значение
	                                         + Области.П010000808.Значение
	                                         + Области.П010000908.Значение
	                                         + Области.П010001008.Значение
	                                         + Области.П010001108.Значение;
	Если Области.П010000108.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000208.Текст
	                                           + Области.П010000308.Текст
	                                           + Области.П010000408.Текст
	                                           + Области.П010000508.Текст
	                                           + Области.П010000608.Текст
	                                           + Области.П010000708.Текст
	                                           + Области.П010000808.Текст
	                                           + Области.П010000908.Текст
	                                           + Области.П010001008.Текст
	                                           + Области.П010001108.Текст), "ЧН=' '", "ЧН=");
		Области.П010000108.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000108.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	
	Области.П010000109.Значение = Области.П010000209.Значение
	                                         + Области.П010000309.Значение
	                                         + Области.П010000409.Значение
	                                         + Области.П010000509.Значение
	                                         + Области.П010000609.Значение
	                                         + Области.П010000709.Значение
	                                         + Области.П010000809.Значение
	                                         + Области.П010000909.Значение
	                                         + Области.П010001009.Значение
	                                         + Области.П010001109.Значение;
	Если Области.П010000109.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000209.Текст
	                                           + Области.П010000309.Текст
	                                           + Области.П010000409.Текст
	                                           + Области.П010000509.Текст
	                                           + Области.П010000609.Текст
	                                           + Области.П010000709.Текст
	                                           + Области.П010000809.Текст
	                                           + Области.П010000909.Текст
	                                           + Области.П010001009.Текст
	                                           + Области.П010001109.Текст), "ЧН=' '", "ЧН=");
		Области.П010000109.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000109.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	
	Области.П010000110.Значение = Области.П010000210.Значение
	                                         + Области.П010000310.Значение
	                                         + Области.П010000410.Значение
	                                         + Области.П010000510.Значение
	                                         + Области.П010000610.Значение
	                                         + Области.П010000710.Значение
	                                         + Области.П010000810.Значение
	                                         + Области.П010000910.Значение
	                                         + Области.П010001010.Значение
	                                         + Области.П010001110.Значение;
	Если Области.П010000110.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000210.Текст
	                                           + Области.П010000310.Текст
	                                           + Области.П010000410.Текст
	                                           + Области.П010000510.Текст
	                                           + Области.П010000610.Текст
	                                           + Области.П010000710.Текст
	                                           + Области.П010000810.Текст
	                                           + Области.П010000910.Текст
	                                           + Области.П010001010.Текст
	                                           + Области.П010001110.Текст), "ЧН=' '", "ЧН=");
		Области.П010000110.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000110.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	
	Области.П010000111.Значение = Области.П010000211.Значение
	                                         + Области.П010000311.Значение
	                                         + Области.П010000411.Значение
	                                         + Области.П010000511.Значение
	                                         + Области.П010000611.Значение
	                                         + Области.П010000711.Значение
	                                         + Области.П010000811.Значение
	                                         + Области.П010000911.Значение
	                                         + Области.П010001011.Значение
	                                         + Области.П010001111.Значение;
	Если Области.П010000111.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000211.Текст
	                                           + Области.П010000311.Текст
	                                           + Области.П010000411.Текст
	                                           + Области.П010000511.Текст
	                                           + Области.П010000611.Текст
	                                           + Области.П010000711.Текст
	                                           + Области.П010000811.Текст
	                                           + Области.П010000911.Текст
	                                           + Области.П010001011.Текст
	                                           + Области.П010001111.Текст), "ЧН=' '", "ЧН=");
		Области.П010000111.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000111.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	
	Области.П010000107.Значение = Области.П010000108.Значение + Области.П010000109.Значение + Области.П010000110.Значение;
	Если Области.П010000107.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000108.Текст + Области.П010000109.Текст + Области.П010000110.Текст), "ЧН=' '", "ЧН=");
		Области.П010000107.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000107.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000207.Значение = Области.П010000208.Значение + Области.П010000209.Значение + Области.П010000210.Значение;
	Если Области.П010000207.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000208.Текст + Области.П010000209.Текст + Области.П010000210.Текст), "ЧН=' '", "ЧН=");
		Области.П010000207.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000207.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000307.Значение = Области.П010000308.Значение + Области.П010000309.Значение + Области.П010000310.Значение;
	Если Области.П010000307.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000308.Текст + Области.П010000309.Текст + Области.П010000310.Текст), "ЧН=' '", "ЧН=");
		Области.П010000307.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000307.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000407.Значение = Области.П010000408.Значение + Области.П010000409.Значение + Области.П010000410.Значение;
	Если Области.П010000407.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000408.Текст + Области.П010000409.Текст + Области.П010000410.Текст), "ЧН=' '", "ЧН=");
		Области.П010000407.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000407.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000507.Значение = Области.П010000508.Значение + Области.П010000509.Значение + Области.П010000510.Значение;
	Если Области.П010000507.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000508.Текст + Области.П010000509.Текст + Области.П010000510.Текст), "ЧН=' '", "ЧН=");
		Области.П010000507.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000507.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000607.Значение = Области.П010000608.Значение + Области.П010000609.Значение + Области.П010000610.Значение;
	Если Области.П010000607.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000608.Текст + Области.П010000609.Текст + Области.П010000610.Текст), "ЧН=' '", "ЧН=");
		Области.П010000607.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000607.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000707.Значение = Области.П010000708.Значение + Области.П010000709.Значение + Области.П010000710.Значение;
	Если Области.П010000707.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000708.Текст + Области.П010000709.Текст + Области.П010000710.Текст), "ЧН=' '", "ЧН=");
		Области.П010000707.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000707.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000807.Значение = Области.П010000808.Значение + Области.П010000809.Значение + Области.П010000810.Значение;
	Если Области.П010000807.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000808.Текст + Области.П010000809.Текст + Области.П010000810.Текст), "ЧН=' '", "ЧН=");
		Области.П010000807.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000807.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010000907.Значение = Области.П010000908.Значение + Области.П010000909.Значение + Области.П010000910.Значение;
	Если Области.П010000907.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010000908.Текст + Области.П010000909.Текст + Области.П010000910.Текст), "ЧН=' '", "ЧН=");
		Области.П010000907.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010000907.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010001007.Значение = Области.П010001008.Значение + Области.П010001009.Значение + Области.П010001010.Значение;
	Если Области.П010001007.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010001008.Текст + Области.П010001009.Текст + Области.П010001010.Текст), "ЧН=' '", "ЧН=");
		Области.П010001007.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010001007.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	Области.П010001107.Значение = Области.П010001108.Значение + Области.П010001109.Значение + Области.П010001110.Значение;
	Если Области.П010001107.Значение = 0 Тогда
		ФорматПредставленияНуля = ?(ПустаяСтрока(Области.П010001108.Текст + Области.П010001109.Текст + Области.П010001110.Текст), "ЧН=' '", "ЧН=");
		Области.П010001107.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(Области.П010001107.Формат, ФорматПредставленияНуля);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

	// вставляем данные многострочных разделов
	СписокСохранения.Вставить("ДанныеМногострочныхРазделов", Неопределено);

	// вставляем данные вариантов автозаполнения ячеек
	СписокСохранения.Вставить("ДанныеВариантовАвтоЗаполнения", Неопределено);

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

	ХранилищеДанных = Новый ХранилищеЗначения(СписокСохранения);
	СтруктураРеквизитовФормы.мСохраненныйДок.ДанныеОтчета = ХранилищеДанных;

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

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

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

    КонецЕсли;
	
	Если ДанныеДляРазблокирования <> Неопределено Тогда
		РазблокироватьДанныеДляРедактирования(ДанныеДляРазблокирования.Ключ, ДанныеДляРазблокирования.ИдФормы);
	КонецЕсли;
	
	Возврат Истина;

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

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

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

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

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

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

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

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

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

	Команда = ДополнительныеПараметры.Команда;
		
	Если Команда <> Неопределено Тогда
		Печать(Команда.Имя);
	КонецЕсли;
	
КонецПроцедуры

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

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

		Сообщение.Текст = НСтр("ru='Перед формированием печатных форм необходимо определить в системе принтер и задать его в качестве используемого по умолчанию!'");

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	ЗагрузитьПодготовленныеДанные();
КонецПроцедуры

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ИмяОтчета(ЭтаФормаИмя)
	Форма_Имя = СтрЗаменить(ЭтаФормаИмя, "Внешний", "");
	Возврат Сред(Лев(Форма_Имя, СтрНайти(Форма_Имя, ".Форма.") - 1), 7);
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция ИмяФормыОтчета(ЭтаФормаИмя)
	Возврат Сред(ЭтаФормаИмя, СтрНайти(ЭтаФормаИмя, ".Форма.") + 7);
КонецФункции

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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