&НаСервере
Перем мОбъектОтчета;
&НаКлиенте
Перем ОбработкаКС Экспорт;
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ПолеТабличногоДокументаФормаОтчета.Очистить();
СформироватьСтруктуруРеквизитовФормы();
СтруктураРеквизитовФормы.СписокПечатаемыхЛистов = Новый СписокЗначений;
СтруктураРеквизитовФормы.мВерсияФормы = "";
СтруктураРеквизитовФормы.мКодОтчета = "0606010";
СтруктураРеквизитовФормы.мСоставПоказателей = СтруктураРеквизитовФормы["ИмяМакетаСоставаПоказателей"];
СтруктураРеквизитовФормы.мПечатныеФормы = Новый СписокЗначений;
мСтруктураВариантыЗаполнения = Новый Структура;
ПорядкиОкругленияОтчетности = Новый Структура;
ПорядкиОкругленияОтчетности.Вставить("ПеречислениеПорядкиОкругленияОтчетностиОкр1",
Перечисления.ПорядкиОкругленияОтчетности.Окр1);
ПорядкиОкругленияОтчетности.Вставить("ПеречислениеПорядкиОкругленияОтчетностиОкр1000",
Перечисления.ПорядкиОкругленияОтчетности.Окр1000);
ПорядкиОкругленияОтчетности.Вставить("ПеречислениеПорядкиОкругленияОтчетностиОкр1000000",
Перечисления.ПорядкиОкругленияОтчетности.Окр1000000);
СоответствиеЕдиницыИзмеренияДелителю = Новый Структура;
СоответствиеЕдиницыИзмеренияДелителю.Вставить("Окр1", 1);
СоответствиеЕдиницыИзмеренияДелителю.Вставить("Окр1000", 1000);
СоответствиеЕдиницыИзмеренияДелителю.Вставить("Окр1000000", 1000000);
СтруктураРеквизитовФормы.мОписаниеТиповЧислоЕ = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(17, 2));
РегламентированнаяОтчетность.ВывестиШапкуРегистрацияРеспондента(ПолеТабличногоДокументаФормаОтчета);
ПолеТабличногоДокументаФормаОтчета.Вывести(ОбъектОтчета(ИмяФормы).ПолучитьМакет(
СтруктураРеквизитовФормы["ИмяМакетаТабличногоДокумента"]));
СтруктураРеквизитовФормы.НаимТекущегоРаздела = "ПолеТабличногоДокументаФормаОтчета";
СтруктураРеквизитовФормы.мВыбраннаяФорма = Параметры.мВыбраннаяФорма;
СтруктураРеквизитовФормы.мДатаКонцаПериодаОтчета = Параметры.мДатаКонцаПериодаОтчета;
СтруктураРеквизитовФормы.мДатаНачалаПериодаОтчета = Параметры.мДатаНачалаПериодаОтчета;
СтруктураРеквизитовФормы.мПериодичность = Параметры.мПериодичность;
СтруктураРеквизитовФормы.мСкопированаФорма = Параметры.мСкопированаФорма;
СтруктураРеквизитовФормы.мСохраненныйДок = Параметры.мСохраненныйДок;
СтруктураРеквизитовФормы.Организация = Параметры.Организация;
ДатаПодписи = ТекущаяДатаСеанса();
Если ЗначениеЗаполнено(Параметры.мСохраненныйДок) И Параметры.мСкопированаФорма = Неопределено Тогда
СтруктураРеквизитовФормы.мПериодичность = Параметры.мСохраненныйДок.Периодичность;
КонецЕсли;
РегламентированнаяОтчетность.СформироватьСтруктуруЦветовРаскраски(ЭтотОбъект);
мСтруктураВариантыЗаполнения = Новый Структура;
мСтруктураВариантыЗаполненияЭталон = Новый Структура;
СтруктураРеквизитовФормы.СправочникиВидыКонтактнойИнформацииПочтовыйАдресОрганизации
= Справочники.ВидыКонтактнойИнформации.ПочтовыйАдресОрганизации;
Инициализация(Параметры.БезОткрытияФормы);
Если ОбщегоНазначения.ПодсистемаСуществует("РегламентированнаяОтчетность.Интерфейс85") Тогда
МодульРегламентированнаяОтчетностьИнтерфейс85 = ОбщегоНазначения.ОбщийМодуль("РегламентированнаяОтчетностьИнтерфейс85");
МодульРегламентированнаяОтчетностьИнтерфейс85.УстановитьНазначениеДействияКомандФормыРеглОтчета(Команды);
МодульРегламентированнаяОтчетностьИнтерфейс85.УстановитьТипОтображенияРедактируемойЯчейкиТабличногоДокумента(ПолеТабличногоДокументаФормаОтчета);
КонецЕсли;
ИнициализироватьВыводСтатусовИВажныхСообщений_85();
КонецПроцедуры
&НаСервере
Процедура СформироватьСтруктуруРеквизитовФормы()
СтруктураРеквизитовФормы =
РегламентированнаяОтчетность.СформироватьСтруктуруОбязательныхРеквизитовСтатистическогоОтчета(Параметры.Организация);
СтруктураРеквизитовФормы.Вставить("НаимОрганизацииСокр");
Если ЗначениеЗаполнено(Параметры.мСохраненныйДок) И Параметры.мСкопированаФорма = Неопределено Тогда
Периодичность = Параметры.мСохраненныйДок.Периодичность;
Иначе
Периодичность = Параметры.мПериодичность;
КонецЕсли;
Если Периодичность = Перечисления.Периодичность.Месяц Тогда
ИмяМакетаАтр = "АтрибВыгрузкиXML2025Кв1_месяц";
ИмяШаблона = "ШаблонРосстата2025Кв1_месяц";
ИмяСписки = "Списки2025Кв1_месяц";
Иначе
ИмяМакетаАтр = "АтрибВыгрузкиXML2025Кв1_квартал";
ИмяШаблона = "ШаблонРосстата2025Кв1_квартал";
ИмяСписки = "Списки2025Кв1_квартал";
КонецЕсли;
СтруктураРеквизитовФормы["ИмяМакетаТабличногоДокумента"] = "ФормаОтчета2025Кв1_ФормаОтчета";
СтруктураРеквизитовФормы["ИмяМакетаАтрибутовВыгрузки"] = ИмяМакетаАтр;
СтруктураРеквизитовФормы["ИмяМакетаСхемыВыгрузки"] = "СхемаВыгрузкиXML2025Кв1";
СтруктураРеквизитовФормы["ИмяМакетаШаблона"] = ИмяШаблона;
СтруктураРеквизитовФормы["ИмяМакетаСписков"] = ИмяСписки;
СтруктураРеквизитовФормы["ИмяМакетаСоставаПоказателей"] = "СоставПоказателей2025Кв1";
ДополнитьРеквизитыФормы();
КонецПроцедуры
&НаСервере
Процедура Инициализация(БезОткрытияФормы = Ложь) Экспорт
СтруктураРеквизитовФормы.мВПрограммеИзмененаОрганизация = Ложь;
СтруктураРеквизитовФормы.мБезОткрытияФормы = БезОткрытияФормы;
СтруктураРеквизитовФормы.мРежимПечати = Ложь;
СтруктураРеквизитовФормы.мАвтоВыборКодов = Ложь;
РегламентированнаяОтчетность.ЗаполнитьНачальныеНастройки(ЭтотОбъект);
РегламентированнаяОтчетность.ЗапомнитьИменаСправочниковОбособленныхПодразделений(ЭтотОбъект);
ФормироватьСтруктуруСтраницОтчета();
СформироватьСпискиВыбора();
ТекТабличноеПоле = ПолеТабличногоДокументаФормаОтчета;
СтруктураРеквизитовФормы.ВидДокумента = 0;
НомерКорректировки = 1;
ФормироватьСтруктуруСвойствСтраниц();
СтруктураРеквизитовФормы.мАдресвФорматеДляВыгрузки = "";
РегламентированнаяОтчетность.НачальныеОперацииСМногострочнымиБлоками(ЭтотОбъект);
Если СтруктураРеквизитовФормы.мСохраненныйДок = Неопределено Тогда
Если СтруктураРеквизитовФормы.мСкопированаФорма <> Неопределено Тогда
ВосстановитьСохраненныеДанные();
КонецЕсли;
Модифицированность = Истина;
Иначе
ВосстановитьСохраненныеДанные();
Если ЗначениеЗаполнено(СтруктураРеквизитовФормы.мСкопированаФорма) Тогда
СтруктураРеквизитовФормы.мСохраненныйДок = Неопределено;
КонецЕсли;
Если НЕ БезОткрытияФормы И НЕ СтруктураРеквизитовФормы.мСохраненныйДок = Неопределено Тогда
РегламентированнаяОтчетность.БлокировкаИлиЗапретРедактированияОтчета(ЭтотОбъект);
КонецЕсли;
КонецЕсли;
Если СтруктураРеквизитовФормы.мСохраненныйДок = Неопределено Тогда
НомерКорректировки = 0;
Иначе
НомерКорректировки = СтруктураРеквизитовФормы.мСохраненныйДок.Вид;
КонецЕсли;
ПолеТабличногоДокументаФормаОтчета.Области.НомерКорректировки.Значение = НомерКорректировки;
ПолеТабличногоДокументаФормаОтчета.Области.ДатаСоставленияОтчета.Значение = ДатаПодписи;
УстановитьДоступностьЭУВыбораОбособленныхПодразделений(ЭтотОбъект);
РегламентированнаяОтчетность.ПолучитьСведенияОПоказателяхОтчета(ЭтотОбъект);
НастройкиВидимости = РегламентированнаяОтчетность.НастройкиВидимостиЭлементовФормы(ЭтаФорма);
СтруктураРеквизитовФормы.Вставить("НастройкиВидимостиЭлементовФормы", НастройкиВидимости);
Если НЕ СтруктураРеквизитовФормы.ОтображатьКнопкуЗаполнить Тогда
Элементы.Заполнить.Видимость = Ложь;
КонецЕсли;
Если НЕ (СтруктураРеквизитовФормы.ОтображатьКнопкуЗаполнить
ИЛИ СтруктураРеквизитовФормы.ОтображатьКнопкуРасшифровать) Тогда
Элементы.Расшифровать.Видимость = Ложь;
Элементы.ТабличныйДокументКонтекстноеМенюРасшифровать.Видимость = Ложь;
КонецЕсли;
Если НЕ СтруктураРеквизитовФормы.ОтображатьКнопкуЗаполнить Тогда
Элементы.Заполнить.Видимость = СтруктураРеквизитовФормы.НастройкиВидимостиЭлементовФормы.ПостояннаяВидимость;
КонецЕсли;
ПоказатьПериод();
СтруктураРеквизитовФормы.НаимОрганизации = СтруктураРеквизитовФормы.Организация.Наименование;
Попытка
СтруктураРеквизитовФормы.НаимОрганизацииСокр = СокрЛП(СтруктураРеквизитовФормы.Организация.НаименованиеСокращенное);
Исключение
СтруктураРеквизитовФормы.НаимОрганизацииСокр = "";
КонецПопытки;
Если СтруктураРеквизитовФормы.мСохраненныйДок = Неопределено
Или СтруктураРеквизитовФормы.мВПрограммеИзмененаОрганизация Тогда
ЗаполнитьСведенияОбОрганизацииНаСервере();
КонецЕсли;
ТекущийЭлемент = Элементы["ПолеТабличногоДокументаФормаОтчета"];
РегламентированнаяОтчетность.УстановитьЦветФорматДоступностьЯчеек(ЭтотОбъект);
ПеренумерацияСтрокТаблицы(ЭтотОбъект);
РегламентированнаяОтчетность.ДобавитьКнопкуПрисоединенныеФайлы(ЭтотОбъект);
РегламентированнаяОтчетностьКлиентСервер.ПриИнициализацииФормыРегламентированногоОтчета(ЭтотОбъект, "ФСГС");
РегламентированнаяОтчетность.БлокировкаКнопокПриОтстутствииФорматаРосстата(ЭтотОбъект);
РегламентированнаяОтчетность.ВидимостьОбластиДанныеПредыдущегоПериода(ЭтотОбъект);
РегламентированнаяОтчетность.ОбновитьШаблоныЧерезВебСервисНаСервере(ЭтотОбъект,
СтруктураРеквизитовФормы["ИмяМакетаАтрибутовВыгрузки"]);
РегламентированнаяОтчетность.ОбновитьОбластьРегистрацииРеспондента(ЭтотОбъект);
РегламентированнаяОтчетность.ПриИнициализации(ЭтотОбъект,
?(ЗначениеЗаполнено(СтруктураРеквизитовФормы.мСохраненныйДок),
СтруктураРеквизитовФормы.мСохраненныйДок,
СтруктураРеквизитовФормы.ПустаяСсылкаНаРегламентированныйОтчет));
КонецПроцедуры
&НаСервере
Процедура ДополнитьРеквизитыФормы()
КатегорииКлассификатора =
СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок("П0010010002;П0010020002", ";", Истина);
мСтруктураМногострочныхРазделов = Новый Структура;
мСтруктураМногостраничныхРазделов = Новый Структура;
мСтруктураИсхКолвоСтрокРазделов = Новый Структура;
мСтруктураКолвоКолонокРазделов = Новый Структура;
СтруктураРеквизитовФормы.мСоответствияМнгЧ = Новый Соответствие;
ДобавляемыеРеквизиты = Новый Массив;
Для Каждого Стр Из КатегорииКлассификатора Цикл
ДобавляемыеРеквизиты.Очистить();
ИмяДобавляемогоРеквизита = Стр;
ДобавляемыеРеквизиты.Добавить(
Новый РеквизитФормы(ИмяДобавляемогоРеквизита, Новый ОписаниеТипов("ТаблицаЗначений")));
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
ДобавляемыеРеквизиты.Очистить();
Если Стр = "П0010010002" Тогда
ТипКолонкиСтрока = Новый ОписаниеТипов("Строка");
ТипКолонкиЧисло12_2 = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(12, 2));
ТипКолонкиЧисло12_0 = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(12, 0));
Для Инд = 1 По 4 Цикл
ДобавляемыйРеквизит = Новый РеквизитФормы(
ИмяДобавляемогоРеквизита + Формат(Инд, "ЧЦ=2; ЧВН="), ТипКолонкиЧисло12_2, ИмяДобавляемогоРеквизита);
ДобавляемыеРеквизиты.Добавить(ДобавляемыйРеквизит);
КонецЦикла;
Для Инд = 5 По 6 Цикл
ДобавляемыйРеквизит = Новый РеквизитФормы(
ИмяДобавляемогоРеквизита + Формат(Инд, "ЧЦ=2; ЧВН="), ТипКолонкиЧисло12_0, ИмяДобавляемогоРеквизита);
ДобавляемыеРеквизиты.Добавить(ДобавляемыйРеквизит);
КонецЦикла;
Для Инд = 7 По 9 Цикл
ДобавляемыйРеквизит = Новый РеквизитФормы(
ИмяДобавляемогоРеквизита + Формат(Инд, "ЧЦ=2; ЧВН="), ТипКолонкиСтрока, ИмяДобавляемогоРеквизита);
ДобавляемыеРеквизиты.Добавить(ДобавляемыйРеквизит);
КонецЦикла;
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
СтруктураРеквизитовФормы.Вставить("мИдГруппы1", ИмяДобавляемогоРеквизита);
мСтруктураМногострочныхРазделов.Вставить(ИмяДобавляемогоРеквизита, ИмяДобавляемогоРеквизита);
мСтруктураИсхКолвоСтрокРазделов.Вставить(ИмяДобавляемогоРеквизита, 10);
мСтруктураКолвоКолонокРазделов.Вставить(ИмяДобавляемогоРеквизита, 9);
СтруктураРеквизитовФормы.мСоответствияМнгЧ.Вставить(ИмяДобавляемогоРеквизита, "МногострочнаяЧасть1");
ИначеЕсли Стр = "П0010020002" Тогда
ТипКолонкиСтрока = Новый ОписаниеТипов("Строка");
ТипКолонкиЧисло16_1 = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(16, 1));
Для Инд = 1 По 11 Цикл
Если Инд = 4 Или Инд = 5 Или Инд = 6 Тогда
Продолжить;
КонецЕсли;
Если Инд = 1 Или Инд = 2 Или Инд = 3 Тогда
ДобавляемыйРеквизит = Новый РеквизитФормы(
ИмяДобавляемогоРеквизита + Формат(Инд, "ЧЦ=2; ЧВН="), ТипКолонкиСтрока, ИмяДобавляемогоРеквизита);
ДобавляемыеРеквизиты.Добавить(ДобавляемыйРеквизит);
Иначе
ДобавляемыйРеквизит = Новый РеквизитФормы(
ИмяДобавляемогоРеквизита + Формат(Инд, "ЧЦ=2; ЧВН="), ТипКолонкиЧисло16_1, ИмяДобавляемогоРеквизита);
ДобавляемыеРеквизиты.Добавить(ДобавляемыйРеквизит);
КонецЕсли;
КонецЦикла;
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
СтруктураРеквизитовФормы.Вставить("мИдГруппы2", ИмяДобавляемогоРеквизита);
мСтруктураМногострочныхРазделов.Вставить(ИмяДобавляемогоРеквизита, ИмяДобавляемогоРеквизита);
мСтруктураИсхКолвоСтрокРазделов.Вставить(ИмяДобавляемогоРеквизита, 10);
мСтруктураКолвоКолонокРазделов.Вставить(ИмяДобавляемогоРеквизита, 8);
СтруктураРеквизитовФормы.мСоответствияМнгЧ.Вставить(ИмяДобавляемогоРеквизита, "МногострочнаяЧасть2");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ФормироватьСтруктуруСтраницОтчета() Экспорт
мДеревоСтраницОтчета.ПолучитьЭлементы().Очистить();
СтрокаУровня1 = мДеревоСтраницОтчета.ПолучитьЭлементы().Добавить();
СтрокаУровня1.ИмяСтраницы = "ПолеТабличногоДокументаФормаОтчета";
СтрокаУровня1.Представление = "Статистика: Форма П-4";
СтрокаУровня1.ОриентацияСтраницы = "Ландшафт";
СтрокаУровня1.ВыводНаПечать = 1;
СтрокаУровня1.ПоказатьСтраницу = 1;
СтрокаУровня1.ВыгрузитьСтраницу = 2;
КонецПроцедуры
&НаСервере
Процедура ФормироватьСтруктуруСвойствСтраниц() Экспорт
мСвойстваРазделовДекларации.ПолучитьЭлементы().Очистить();
СтрокаУровня1 = мСвойстваРазделовДекларации.ПолучитьЭлементы().Добавить();
СтрокаУровня1.ИмяСтраницы = "ФормаОтчета";
СтрокаУровня1.МногострочностьВРазделе = 0;
СтрокаУровня1.МногостраничностьВРазделе = Ложь;
СтрокаУровня1.ОчищатьРаздел = Ложь;
СтрокаУровня1.ИмяПредставления = "";
СтрокаУровня1.ПредставлениеДанных = Ложь;
СтрокаУровня1.РазделОбязателенДляВыгрузки = Неопределено;
СтрокаУровня1.НазваниеПанелиТабличногоПоляРаздела = "ОсновнаяПанель";
СтрокаУровня1.СохранятьМногострКакТЗ = Неопределено;
СтрокаУровня1.РазделЯвляетсяАвтозаполняемым = Ложь;
КонецПроцедуры
&НаСервере
Процедура ВосстановитьСохраненныеДанные()
Перем ДанныеМногострочныхРазделов;
Перем ДанныеВариановАвтоЗаполнения;
Перем ПоказателиОтчета;
Перем ВерсияФормы;
Перем ОбособПодразделение;
Если СтруктураРеквизитовФормы.Организация <> СтруктураРеквизитовФормы.мСохраненныйДок.Организация
И СтруктураРеквизитовФормы.Организация <> РегламентированнаяОтчетностьКлиентСервер.ПустоеЗначениеТипа("СправочникСсылка.Организации")
И СтруктураРеквизитовФормы.Организация <> Неопределено Тогда
СтруктураРеквизитовФормы.мВПрограммеИзмененаОрганизация = Истина;
Иначе
СтруктураРеквизитовФормы.Организация = СтруктураРеквизитовФормы.мСохраненныйДок.Организация;
КонецЕсли;
ДатаПодписи = СтруктураРеквизитовФормы.мСохраненныйДок.ДатаПодписи;
СтруктураРеквизитовФормы.ЕдиницаИзмерения = СтруктураРеквизитовФормы.мСохраненныйДок.ЕдиницаИзмерения;
СтруктураРеквизитовФормы.ТочностьЕдиницыИзмерения = СтруктураРеквизитовФормы.мСохраненныйДок.ТочностьЕдиницыИзмерения;
Комментарий = СтруктураРеквизитовФормы.мСохраненныйДок.Комментарий;
СписокСохранения = СтруктураРеквизитовФормы.мСохраненныйДок.ДанныеОтчета.Получить();
Если СписокСохранения.Свойство("ДанныеВариантовАвтоЗаполнения", ДанныеВариановАвтоЗаполнения) Тогда
Если НЕ ДанныеВариановАвтоЗаполнения = Неопределено Тогда
мСтруктураВариантыЗаполнения.Очистить();
Для Каждого ЭлементСтруктуры Из ДанныеВариановАвтоЗаполнения Цикл
мСтруктураВариантыЗаполнения.Вставить(ЭлементСтруктуры.Ключ, ЭлементСтруктуры.Ключ);
ЭтотОбъект["ТаблицаВариантыЗаполнения" + ЭлементСтруктуры.Ключ].Очистить();
Для Каждого ЭлементМассива Из ЭлементСтруктуры.Значение Цикл
ТаблВарЗаполнения =
ЭтотОбъект["ТаблицаВариантыЗаполнения" + ЭлементСтруктуры.Ключ].Добавить().ТаблицаВариантовЗаполнения;
ЗначениеВДанныеФормы(ЭлементМассива, ТаблВарЗаполнения);
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если СписокСохранения.Свойство("ДанныеМногострочныхРазделов", ДанныеМногострочныхРазделов)
И ДанныеМногострочныхРазделов <> Неопределено Тогда
Для Каждого ЭлементСтруктуры Из ДанныеМногострочныхРазделов Цикл
НайденноеЗначение = Неопределено;
мСтруктураМногострочныхРазделов.Свойство(ЭлементСтруктуры.Ключ, НайденноеЗначение);
Если НЕ НайденноеЗначение = Неопределено Тогда
ЗначениеВДанныеФормы(ЭлементСтруктуры.Значение, ЭтотОбъект[НайденноеЗначение]);
ВывестиРазделВТабличныйДокументНаСервере(НайденноеЗначение, ЭтотОбъект[НайденноеЗначение]);
КонецЕсли;
КонецЦикла;
КонецЕсли;
СписокСохранения.Свойство("Авторасчет", СтруктураРеквизитовФормы.ФлажокОтклАвтоРасчет);
Если СтруктураРеквизитовФормы.ФлажокОтклАвтоРасчет = Неопределено Тогда
СтруктураРеквизитовФормы.ФлажокОтклАвтоРасчет = Ложь;
КонецЕсли;
СписокСохранения.Свойство("ФлОтклВыборЗначений", СтруктураРеквизитовФормы.мАвтоВыборКодов);
Если СтруктураРеквизитовФормы.мАвтоВыборКодов = Неопределено Тогда
СтруктураРеквизитовФормы.мАвтоВыборКодов = Ложь;
КонецЕсли;
Если Не СтруктураРеквизитовФормы.мВПрограммеИзмененаОрганизация Тогда
СписокСохранения.Свойство("Адрес_JSON", СтруктураРеквизитовФормы.Адрес_JSON);
Если СписокСохранения.Свойство("ОбособленноеПодразделение", ОбособПодразделение) Тогда
ОбособленноеПодразделение = ОбособПодразделение;
КонецЕсли;
КонецЕсли;
СписокСохранения.Свойство("ВыгрузкаПредидущегоПериода", ВыгрузкаПредидущегоПериода);
СписокСохранения.Свойство("ОтчетПредидущегоПериода", ОтчетПредидущегоПериода);
СписокСохранения.Свойство("ВерсияФормы", ВерсияФормы);
СписокСохранения.Свойство("ИсключитьДанныеОбособленныхПодразделений", ИсключитьДанныеОбособленныхПодразделений);
СписокСохранения.Свойство("ПоказателиОтчета", ПоказателиОтчета);
ВывестиПоказателиОтчетаВТабличныйДокумент(ПоказателиОтчета);
РегламентированнаяОтчетность.ОперацииПриВосстановленииРегламентированногоОтчета(ЭтотОбъект);
РегламентированнаяОтчетность.ЗаполнитьДанныеВШапкеОбособленныхПодразделений(ЭтотОбъект);
Модифицированность = Ложь;
КонецПроцедуры
&НаСервере
Процедура ВывестиПоказателиОтчетаВТабличныйДокумент(ПоказателиОтчета)
Для Каждого ПоказателиСтраницы Из ПоказателиОтчета Цикл
ИмяТекТабличноеПоле = ПоказателиСтраницы.Ключ;
ТекТабличноеПоле = ЭтотОбъект[ИмяТекТабличноеПоле];
ПоказателиТаблПоле = ПоказателиСтраницы.Значение;
Для Каждого Показатель Из ПоказателиТаблПоле Цикл
ИмяПоказателя = Показатель.Ключ;
ЗначениеПоказателя = Показатель.Значение;
РегламентированнаяОтчетность.УстановитьЗначениеИФорматВПоле(ТекТабличноеПоле, ИмяПоказателя, ЗначениеПоказателя);
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСведенияОбОрганизацииНаСервере(ВПрограммеИзмененаДатаПодписи = Ложь)
РегламентированнаяОтчетностьКлиентСервер.ЗаполнитьСведенияОбОрганизацииДляОтчетаСтатистики(
ЭтотОбъект, ВПрограммеИзмененаДатаПодписи, , Истина);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьСведенияОбОрганизацииНаКлиенте(ВПрограммеИзмененаДатаПодписи = Ложь)
РегламентированнаяОтчетностьКлиентСервер.ЗаполнитьСведенияОбОрганизацииДляОтчетаСтатистики(
ЭтотОбъект, ВПрограммеИзмененаДатаПодписи, , Истина);
КонецПроцедуры
&НаСервере
Процедура ПоказатьПериод()
СтруктураРеквизитовФормы.СтрПериодОтчета = ПредставлениеПериода(
НачалоДня(СтруктураРеквизитовФормы.мДатаНачалаПериодаОтчета),
КонецДня(СтруктураРеквизитовФормы.мДатаКонцаПериодаОтчета), "ФП = Истина");
ПериодОтчета = " за " + НРег(СтруктураРеквизитовФормы.СтрПериодОтчета);
ПолеТабличногоДокументаФормаОтчета.Области.ПериодОтчета.Значение = ПериодОтчета;
КонецПроцедуры
&НаКлиенте
Процедура ИсключитьДанныеОбособленныхПодразделенийПриИзменении(Элемент) Экспорт
НачЗначениеОбособленногоПодразделения = ОбособленноеПодразделение;
УстановитьДоступностьЭУВыбораОбособленныхПодразделений(ЭтотОбъект);
Если ИсключитьДанныеОбособленныхПодразделений Тогда
Если НачЗначениеОбособленногоПодразделения <> ОбособленноеПодразделение Тогда
СтруктураРеквизитовФормы.мВПрограммеИзмененаОрганизация = Истина;
ЗаполнитьСведенияОбОрганизацииНаСервере();
СтруктураРеквизитовФормы.мВПрограммеИзмененаОрганизация = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбособленноеПодразделениеПриИзменении(Элемент) Экспорт
СтруктураРеквизитовФормы.мВПрограммеИзмененаОрганизация = Истина;
ЗаполнитьСведенияОбОрганизацииНаСервере();
СтруктураРеквизитовФормы.мВПрограммеИзмененаОрганизация = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если СтрНайти(Заголовок, СтруктураРеквизитовФормы.СтрПериодОтчета) = 0 Тогда
Заголовок = Заголовок + " за " + СтруктураРеквизитовФормы.СтрПериодОтчета;
КонецЕсли;
ОргСтр = " (" + СтруктураРеквизитовФормы.НаимОрганизации + ")";
Если СтрНайти(Заголовок, ОргСтр) = 0 Тогда
Заголовок = Заголовок + ОргСтр;
КонецЕсли;
Заголовок = Заголовок + ?(СтрНайти(ИмяФормы, "Внешний") > 0, " - внешний отчет", "");
ПодключитьОбработчикОжидания("ВыполнитьПроверкуПередОткрытием", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьПроверкуПередОткрытием()
ОписаниеОповещения = Новый ОписаниеОповещения("ПриОткрытииЗавершение", ЭтотОбъект);
Отказ = Ложь;
ОнлайнСервисыРегламентированнойОтчетностиКлиент.ПередОткрытиемФормыРегламентированногоОтчета(
ОписаниеОповещения, ЭтотОбъект, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытииЗавершение(Отказ, ДополнительныеПараметры) Экспорт
Если Отказ Тогда
Модифицированность = Ложь;
Закрыть();
Возврат;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
РегламентированнаяОтчетностьКлиент.ПередЗакрытиемРегламентированногоОтчета(
ЭтотОбъект, Отказ, СтандартнаяОбработка, ЗавершениеРаботы, ТекстПредупреждения);
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
Если ЗавершениеРаботы Тогда
Возврат;
КонецЕсли;
ПриЗакрытииНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПриЗакрытииНаСервере()
РегламентированнаяОтчетность.ПриЗакрытииРегламентированногоОтчета(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПолеТабличногоДокументаФормаОтчетаВыбор(Элемент, Область, СтандартнаяОбработка)
Если Элементы.ПолеТабличногоДокументаФормаОтчета.Защита Тогда
Возврат;
КонецЕсли;
РегламентированнаяОтчетностьКлиент.ОбработкаВыбораПоляОбособленныхПодразделений(ЭтотОбъект,
Область, СтандартнаяОбработка);
РегламентированнаяОтчетностьКлиент.ВыборОтчетаПредидущегоПериода(ЭтотОбъект, Область, СтандартнаяОбработка);
Если Область.Имя = "ОргАдрес" Тогда
РегламентированнаяОтчетностьКлиент.ОбработкаАдресаВСтатистическомОтчетеJSON(
ЭтотОбъект, Область, СтандартнаяОбработка);
ИначеЕсли СтрЧислоВхождений(Область.Имя, "ДобавитьСтроку") > 0 Тогда
СтандартнаяОбработка = Ложь;
ДобавитьСтроку("");
ИначеЕсли СтрЧислоВхождений(Область.Имя, "УдалитьСтроку") > 0 Тогда
УдалитьСтроку("");
ИначеЕсли РегламентированнаяОтчетностьКлиент.ВыбраннаяОбластьРегламентированногоОтчетаНеВерна(ЭтаФорма, Область, СтандартнаяОбработка) Тогда
Возврат;
ИначеЕсли Не СтруктураРеквизитовФормы.мАвтоВыборКодов Тогда
Графа = Сред(Область.Имя, 12, 2);
Подраздел = Сред(Область.Имя, 7, 1);
ПравОбластьИмя = Прав(Область.Имя, 2);
Если Подраздел = "1" И (Графа = "07" Или Графа = "09")
Или Подраздел = "2" И (Графа = "01" Или Графа = "03") Тогда
ПараметрВводаПоля = РегламентированнаяОтчетностьКлиентСервер.НайтиСвойстваПоказателя(ЭтотОбъект, "OKVED2");
Если ПараметрВводаПоля <> Неопределено И ПараметрВводаПоля.ТаблицаЗначений <> Неопределено Тогда
Если Подраздел = "1" Тогда
СмежнаяОбласть = ПолеТабличногоДокументаФормаОтчета.Области.Найти(СтрЗаменить(Область.Имя, "П001001000209", "П001001000207"));
ОбластьДляВвода = ПолеТабличногоДокументаФормаОтчета.Области.Найти(СтрЗаменить(Область.Имя, "П001001000207", "П001001000209"));
ИначеЕсли Подраздел = "2" Тогда
СмежнаяОбласть = ПолеТабличногоДокументаФормаОтчета.Области.Найти(СтрЗаменить(Область.Имя, "П001002000203", "П001002000201"));
ОбластьДляВвода = ПолеТабличногоДокументаФормаОтчета.Области.Найти(СтрЗаменить(Область.Имя, "П001002000201", "П001002000203"));
КонецЕсли;
Если СмежнаяОбласть <> Неопределено Тогда
КодПоказателя = ПараметрВводаПоля.Показатель;
ВвестиПоказатель(Элемент, ОбластьДляВвода, СмежнаяОбласть, КодПоказателя, Ложь,
ПараметрВводаПоля.ТекстПриВыборе, ПараметрВводаПоля.ТаблицаЗначений, СтандартнаяОбработка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВвестиПоказатель(Элемент, Область, СмежнаяОбласть = Неопределено, КодПоказателя, Знач ЭтоСумма, Знач ТекстВыбора, ТаблицаВыбора, СтандартнаяОбработка, КолонкаПоиска = "Код", ПоляДляОчистки = Неопределено) Экспорт
Если ТаблицаВыбора = Неопределено ИЛИ СтруктураРеквизитовФормы.мАвтоВыборКодов Тогда
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
ИсходноеЗначение = Область.Значение;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Заголовок", ТекстВыбора);
ПараметрыФормы.Вставить("ТаблицаЗначений", ТаблицаВыбора);
ПараметрыФормы.Вставить("СтруктураДляПоиска", Новый Структура(КолонкаПоиска, ИсходноеЗначение));
ПараметрыФормы.Вставить("ВключитьВидимостьНадписиРосстат", Истина);
ДополнительныеПараметры = Новый Структура("Область, СмежнаяОбласть", Область, СмежнаяОбласть);
ОписаниеОповещения = Новый ОписаниеОповещения("ВвестиПоказательЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ОткрытьФорму("Обработка.ОбщиеОбъектыРеглОтчетности.Форма.ФормаВыбораЗначенияИзТаблицы",
ПараметрыФормы, ЭтотОбъект, , , , ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ВвестиПоказательЗавершение(РезультатВыбора, ДополнительныеПараметры) Экспорт
Область = ДополнительныеПараметры.Область;
СмежнаяОбласть = ДополнительныеПараметры.СмежнаяОбласть;
Если РезультатВыбора = Неопределено Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(РезультатВыбора["Код"]) Тогда
РезультатВыбора["Название"] = "";
КонецЕсли;
Область.Значение = РезультатВыбора["Код"];
СмежнаяОбласть.Значение = РезультатВыбора["Название"];
Подраздел = Сред(Область.Имя, 7, 1);
Если Подраздел = "1" Тогда
СмежныйРазделОблКод = Лев(Область.Имя, 6) + "2" + Сред(Область.Имя, 8, 4) + "03" + Сред(Область.Имя, 14);
СмежныйРазделОблНаим = Лев(Область.Имя, 6) + "2" + Сред(Область.Имя, 8, 4) + "01" + Сред(Область.Имя, 14);
ИначеЕсли Подраздел = "2" Тогда
СмежныйРазделОблКод = Лев(Область.Имя, 6) + "1" + Сред(Область.Имя, 8, 4) + "09" + Сред(Область.Имя, 14);
СмежныйРазделОблНаим = Лев(Область.Имя, 6) + "1" + Сред(Область.Имя, 8, 4) + "07" + Сред(Область.Имя, 14);
КонецЕсли;
ПолеТабличногоДокументаФормаОтчета.Области[СмежныйРазделОблКод].Значение = РезультатВыбора["Код"];
ПолеТабличногоДокументаФормаОтчета.Области[СмежныйРазделОблНаим].Значение = РезультатВыбора["Название"];
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПолеТабличногоДокументаФормаОтчетаПриИзмененииСодержимогоОбласти(Элемент, Область)
Если Элементы.ПолеТабличногоДокументаФормаОтчета.Защита Тогда
Возврат;
КонецЕсли;
Если Область.Имя = "ДатаСоставленияОтчета" Тогда
ДатаПодписи = Область.Значение;
ЗаполнитьСведенияОбОрганизацииНаКлиенте(Истина);
Модифицированность = Истина;
Возврат;
ИначеЕсли Область.Имя = "НомерКорректировки" Тогда
Если Область.Значение = 0 Тогда
СтруктураРеквизитовФормы.ВидДокумента = 0;
НомерКорректировки = 0;
Иначе
СтруктураРеквизитовФормы.ВидДокумента = 1;
НомерКорректировки = Область.Значение;
КонецЕсли;
Модифицированность = Истина;
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура("Область, Элемент, Форма", Область, Элемент, ЭтотОбъект);
РегламентированнаяОтчетностьКлиент.ПредставлениеНуля(ДополнительныеПараметры);
РасчетНаКлиенте();
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПолеТабличногоДокументаФормаОтчетаПриИзмененииСодержимогоОбластиЗавершение(СписокЭлемент, ДополнительныеПараметры) Экспорт
Область = ДополнительныеПараметры.Область;
Если СписокЭлемент <> Неопределено Тогда
Область.Формат = РегламентированнаяОтчетностьКлиентСервер.ЗаменитьПредставлениеНуляВСтрокеФормата(
Область.Формат, СписокЭлемент.Значение);
КонецЕсли;
РасчетНаКлиенте();
Модифицированность = Истина;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДатуВЯчейкахНаСервере() Экспорт
ЗаполнитьДатуВЯчейках(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьДатуВЯчейкахНаКлиенте() Экспорт
ЗаполнитьДатуВЯчейках(ЭтотОбъект);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьДатуВЯчейках(Форма)
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура Обновить(Команда)
СтруктураРеквизитовФормы.мВПрограммеИзмененаОрганизация = Истина;
ЗаполнитьСведенияОбОрганизацииНаСервере();
СтруктураРеквизитовФормы.мВПрограммеИзмененаОрганизация = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьОтчет(Команда)
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Внимание! Будут очищены все показатели отчета.%1Продолжить операцию?'"), Символы.ПС);
ОписаниеОповещения = Новый ОписаниеОповещения("ОчиститьОтчетЗавершение", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет);
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьОтчетЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ = КодВозвратаДиалога.Нет Тогда
Возврат;
Иначе
Очистить();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Очистить() Экспорт
ОчиститьНаСервере();
Модифицированность = Истина;
КонецПроцедуры
&НаСервере
Процедура ОчиститьНаСервере() Экспорт
Перем СписокПоказателей;
ВыбТабПоле = ПолеТабличногоДокументаФормаОтчета;
СписокПоказателей = Новый СписокЗначений;
СписокПоказателей.Добавить(ВыбТабПоле.Области["ПериодОтчета"].Значение, "ПериодОтчета");
СписокПоказателей.Добавить(ВыбТабПоле.Области["ДатаСоставленияОтчета"].Значение, "ДатаСоставленияОтчета");
СписокПоказателей.Добавить(ВыбТабПоле.Области["ОргНазв"].Значение, "ОргНазв");
СписокПоказателей.Добавить(ВыбТабПоле.Области["ОргАдрес"].Значение, "ОргАдрес");
СписокПоказателей.Добавить(ВыбТабПоле.Области["ОргКодОКПО"].Значение, "ОргКодОКПО");
СписокПоказателей.Добавить(ВыбТабПоле.Области["КодЗнач1"].Значение, "КодЗнач1");
СписокПоказателей.Добавить(ВыбТабПоле.Области["КодЗнач2"].Значение, "КодЗнач2");
СписокПоказателей.Добавить(ВыбТабПоле.Области["КодЗнач3"].Значение, "КодЗнач3");
СписокПоказателей.Добавить(ВыбТабПоле.Области["КодЗнач4"].Значение, "КодЗнач4");
СписокПоказателей.Добавить(ВыбТабПоле.Области["ОргТелефонИсп"].Значение, "ОргТелефонИсп");
СписокПоказателей.Добавить(ВыбТабПоле.Области["ОргИсполнитель"].Значение, "ОргИсполнитель");
СписокПоказателей.Добавить(ВыбТабПоле.Области["ОргДолжностьИсп"].Значение, "ОргДолжностьИсп");
СписокПоказателей.Добавить(ВыбТабПоле.Области["НомерКорректировки"].Значение, "НомерКорректировки");
СписокПоказателей.Добавить(ВыбТабПоле.Области["ОргАдресЭлектроннойПочты"].Значение, "ОргАдресЭлектроннойПочты");
Если ВыбТабПоле.Области.Найти("ОбособленноеПодразделение") <> Неопределено Тогда
СписокПоказателей.Добавить(ВыбТабПоле.Области["ОбособленноеПодразделение"].Значение, "ОбособленноеПодразделение");
СписокПоказателей.Добавить(ВыбТабПоле.Области["ИсключитьДанныеОбособленныхПодразделений"].Значение,
"ИсключитьДанныеОбособленныхПодразделений");
КонецЕсли;
Если ВыбТабПоле.Области.Найти("РегистрацияРеспондента") <> Неопределено Тогда
СписокПоказателей.Добавить(ВыбТабПоле.Области.Найти("РегистрацияРеспондента").Значение, "РегистрацияРеспондента");
КонецЕсли;
ВыбТабПоле.Очистить();
РегламентированнаяОтчетность.ВывестиШапкуРегистрацияРеспондента(ПолеТабличногоДокументаФормаОтчета);
ВыбТабПоле.Вывести(ОбъектОтчета(ИмяФормы).ПолучитьМакет(СтруктураРеквизитовФормы["ИмяМакетаТабличногоДокумента"]));
ПолеТабличногоДокументаФормаОтчета = ВыбТабПоле;
РегламентированнаяОтчетность.НачальныеОперацииСМногострочнымиБлоками(ЭтотОбъект);
Для каждого ЭлементСписка Из СписокПоказателей Цикл
ВыбТабПоле.Области[ЭлементСписка.Представление].Значение = ЭлементСписка.Значение;
КонецЦикла;
РасчетНаСервере();
ПеренумерацияСтрокТаблицы(ЭтотОбъект);
РегламентированнаяОтчетность.УстановитьЦветФорматДоступностьЯчеек(ЭтотОбъект);
РегламентированнаяОтчетность.ЗаполнитьДанныеВШапкеОбособленныхПодразделений(ЭтотОбъект);
РегламентированнаяОтчетность.ОбновитьОбластьРегистрацииРеспондента(ЭтотОбъект);
ЭтотОбъект.ВыгрузкаПредидущегоПериода = Неопределено;
ЭтотОбъект.ОтчетПредидущегоПериода = Неопределено;
РегламентированнаяОтчетность.ВидимостьОбластиДанныеПредыдущегоПериода(ЭтотОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("РегламентированнаяОтчетность.Интерфейс85") Тогда
МодульРегламентированнаяОтчетностьИнтерфейс85 = ОбщегоНазначения.ОбщийМодуль("РегламентированнаяОтчетностьИнтерфейс85");
МодульРегламентированнаяОтчетностьИнтерфейс85.УстановитьТипОтображенияРедактируемойЯчейкиТабличногоДокумента(ПолеТабличногоДокументаФормаОтчета);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РасчетНаКлиенте(ИмяСтраницыПанели = "", ОбластьИмя = "") Экспорт
Расчет(ЭтотОбъект, ИмяСтраницыПанели, ОбластьИмя);
КонецПроцедуры
&НаСервере
Процедура РасчетНаСервере(ИмяСтраницыПанели = "", ОбластьИмя = "") Экспорт
Расчет(ЭтотОбъект, ИмяСтраницыПанели, ОбластьИмя);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура Расчет(Форма, ИмяТекущейСтраницыПанели = "", ОбластьИмя = "")
Если Форма.СтруктураРеквизитовФормы.ФлажокОтклАвтоРасчет Тогда
Возврат;
КонецЕсли;
Области = Форма.ПолеТабличногоДокументаФормаОтчета.Области;
Для Гр = 2 По 6 Цикл
Инд = 0;
СуммаПоГр = 0;
Графа = Формат(Гр, "ЧЦ=2; ЧВН=");
Пока Истина Цикл
Инд = Инд + 1;
Обл = Области.Найти("П0010010002" + Графа + "_" + Формат(Инд,"ЧГ="));
Если Обл = Неопределено Тогда
Прервать;
КонецЕсли;
СуммаПоГр = СуммаПоГр + Обл.Значение;
КонецЦикла;
Области["П0010010001" + Графа].Значение = СуммаПоГр;
КонецЦикла;
Инд = 0;
Пока Истина Цикл
Инд = Инд + 1;
Обл = Области.Найти("П001001000201_" + Формат(Инд,"ЧГ="));
Если Обл = Неопределено Тогда
Прервать;
КонецЕсли;
СуммаПоСтр = 0;
Для Гр = 2 По 4 Цикл
Графа = Формат(Гр, "ЧЦ=2; ЧВН=");
Обл2 = Области.Найти("П0010010002" + Графа + "_" + Формат(Инд,"ЧГ="));
СуммаПоСтр = СуммаПоСтр + Обл2.Значение;
КонецЦикла;
Обл.Значение = СуммаПоСтр;
КонецЦикла;
Области.П001001000101.Значение = Области.П001001000102.Значение + Области.П001001000103.Значение + Области.П001001000104.Значение;
Для Гр = 7 По 11 Цикл
Инд = 0;
СуммаПоГр = 0;
Графа = Формат(Гр, "ЧЦ=2; ЧВН=");
Пока Истина Цикл
Инд = Инд + 1;
Обл = Области.Найти("П0010020002" + Графа + "_" + Формат(Инд,"ЧГ="));
Если Обл = Неопределено Тогда
Прервать;
КонецЕсли;
СуммаПоГр = СуммаПоГр + Обл.Значение;
КонецЦикла;
Области["П0010020001" + Графа].Значение = СуммаПоГр;
КонецЦикла;
Инд = 0;
Пока Истина Цикл
Инд = Инд + 1;
Обл = Области.Найти("П001002000207_" + Формат(Инд,"ЧГ="));
Если Обл = Неопределено Тогда
Прервать;
КонецЕсли;
СуммаПоСтр = 0;
Для Гр = 8 По 10 Цикл
Графа = Формат(Гр, "ЧЦ=2; ЧВН=");
Обл2 = Области.Найти("П0010020002" + Графа + "_" + Формат(Инд,"ЧГ="));
СуммаПоСтр = СуммаПоСтр + Обл2.Значение;
КонецЦикла;
Обл.Значение = СуммаПоСтр;
КонецЦикла;
Области.П001002000107.Значение = Области.П001002000108.Значение + Области.П001002000109.Значение + Области.П001002000110.Значение;
КонецПроцедуры
&НаКлиенте
Процедура СохранитьОтчет(Команда)
СохранитьНаКлиенте();
КонецПроцедуры
&НаКлиенте
Процедура СохранитьНаКлиенте(Автосохранение = Ложь, ВыполняемоеОповещение = Неопределено) Экспорт
Вариант = СтруктураРеквизитовФормы.ВидДокумента * НомерКорректировки;
Если НЕ РегламентированнаяОтчетностьКлиент.ПриЗаписиРегламентированногоОтчетаНаКлиенте(ЭтотОбъект, ,
Автосохранение, Вариант) Тогда
Возврат;
КонецЕсли;
ПодобныйОтчетСуществует = Ложь;
ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки = Ложь;
ПоказателиОтчета = Новый Структура();
#Если ВебКлиент Тогда
ЗаполнитьПоказателиОтчетаНаСервере(ПоказателиОтчета);
#Иначе
ЗаполнитьПоказателиОтчетаНаКлиенте(ПоказателиОтчета);
#КонецЕсли
РезультатСохранения = ПередСохранением(, ПодобныйОтчетСуществует, Вариант,
ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки, Автосохранение, ПоказателиОтчета);
ВидДокументаНомерКорректировкиИзменен = Неопределено;
Если ПодобныйОтчетСуществует И Автосохранение Тогда
Возврат;
КонецЕсли;
НуженВопросПередСохранением
= (ПодобныйОтчетСуществует ИЛИ ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки);
Если НуженВопросПередСохранением Тогда
СохранитьНаКлиентеСВопросом(Автосохранение, Вариант, ВыполняемоеОповещение,
ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки, ПодобныйОтчетСуществует, ПоказателиОтчета);
Иначе
ПослеСохраненияНаКлиенте(ВыполняемоеОповещение, РезультатСохранения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СохранитьНаКлиентеСВопросом(Автосохранение, Вариант, ВыполняемоеОповещение, ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки, ПодобныйОтчетСуществует, ПоказателиОтчета)
Если ПодобныйОтчетСуществует Тогда
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(КодВозвратаДиалога.Да, "Сохранить");
Кнопки.Добавить(КодВозвратаДиалога.Нет, "Отмена");
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='Отчет с видом %1 уже существует.
|Сохранить отчет с таким же видом?'"), ?(Вариант = 0, """Первичный""", """Корректирующий/" + Вариант + """"));
ДополнительныеПараметры = Новый Структура("Автосохранение, Вариант, ВыполняемоеОповещение,
|ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки, ПоказателиОтчета",
Автосохранение, Вариант, ВыполняемоеОповещение, ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки,
ПоказателиОтчета);
ОписаниеОповещения = Новый ОписаниеОповещения(
"ВопросСохранитьОтчетСТакимЖеВидомЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки, , Кнопки.Получить(1).Значение);
Иначе
СохранитьНаКлиентеСВопросомПродолжение(Автосохранение, Вариант, ВыполняемоеОповещение,
ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки, ПоказателиОтчета);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВопросСохранитьОтчетСТакимЖеВидомЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Автосохранение = ДополнительныеПараметры.Автосохранение;
Вариант = ДополнительныеПараметры.Вариант;
ВыполняемоеОповещение = ДополнительныеПараметры.ВыполняемоеОповещение;
ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки =
ДополнительныеПараметры.ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки;
ПоказателиОтчета = ДополнительныеПараметры.ПоказателиОтчета;
Если Ответ = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
СохранитьНаКлиентеСВопросомПродолжение(Автосохранение, Вариант, ВыполняемоеОповещение,
ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки, ПоказателиОтчета);
КонецПроцедуры
&НаКлиенте
Процедура СохранитьНаКлиентеСВопросомПродолжение(Автосохранение, Вариант, ВыполняемоеОповещение, ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки, ПоказателиОтчета)
Если ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки Тогда
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("ВидОтчета", Вариант);
ФормаВопроса = РегламентированнаяОтчетностьКлиент.ПолучитьОбщуюФормуПоИмени(
"ВопросПриИзмененииВидаДокументаНомераКорректировки", ПараметрыФормы);
ДополнительныеПараметры = Новый Структура("Автосохранение, Вариант, ВыполняемоеОповещение, ПоказателиОтчета",
Автосохранение, Вариант, ВыполняемоеОповещение, ПоказателиОтчета);
ОписаниеОповещения = Новый ОписаниеОповещения(
"ВопросПриИзмененииВидаДокументаЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ФормаВопроса.ОписаниеОповещенияОЗакрытии = ОписаниеОповещения;
ФормаВопроса.РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
ФормаВопроса.Открыть();
Иначе
Состояние(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Сохраняется %1...'"), Заголовок), , , БиблиотекаКартинок.Записать);
РезультатСохранения = Сохранить(Автосохранение, , Вариант, Ложь, ПоказателиОтчета);
ПослеСохраненияНаКлиенте(ВыполняемоеОповещение, РезультатСохранения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВопросПриИзмененииВидаДокументаЗавершение(Результат, ДополнительныеПараметры) Экспорт
Автосохранение = ДополнительныеПараметры.Автосохранение;
Вариант = ДополнительныеПараметры.Вариант;
ВыполняемоеОповещение = ДополнительныеПараметры.ВыполняемоеОповещение;
ПоказателиОтчета = ДополнительныеПараметры.ПоказателиОтчета;
КодВозврата = Результат;
Если КодВозврата = КодВозвратаДиалога.Да
ИЛИ КодВозврата = КодВозвратаДиалога.Нет Тогда
ВидДокументаНомерКорректировкиИзменен = ?(КодВозврата = КодВозвратаДиалога.Да, Истина, Ложь);
Иначе
Возврат;
КонецЕсли;
Состояние(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Сохраняется %1...'"), Заголовок), , , БиблиотекаКартинок.Записать);
РезультатСохранения = Сохранить(Автосохранение, , Вариант, ВидДокументаНомерКорректировкиИзменен, ПоказателиОтчета);
ПослеСохраненияНаКлиенте(ВыполняемоеОповещение, РезультатСохранения);
КонецПроцедуры
&НаКлиенте
Процедура ПослеСохраненияНаКлиенте(ВыполняемоеОповещение, РезультатСохранения)
КлючУникальности = СтруктураРеквизитовФормы.мСохраненныйДок;
Если РезультатСохранения Тогда
РегламентированнаяОтчетностьКлиент.ПослеЗаписиРегламентированногоОтчета(ЭтотОбъект);
Если ВыполняемоеОповещение <> Неопределено Тогда
ВыполнитьОбработкуОповещения(ВыполняемоеОповещение);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПередСохранением(КодИФНС = "не применимо", ПодобныйОтчетСуществует="", Вариант="", ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки="", Автосохранение="", ПоказателиОтчета="")
Если РегламентированнаяОтчетность.БылиИзмененыКлючевыеРеквизитыОтчета(ЭтотОбъект, КодИФНС)
И РегламентированнаяОтчетность.СуществуетДокументСАналогичнымиРеквизитами(ЭтотОбъект, КодИФНС) Тогда
ПодобныйОтчетСуществует = Истина;
КонецЕсли;
СтруктураРеквизитовФормы.мЗаписываетсяНовыйДокумент = (СтруктураРеквизитовФормы.мСохраненныйДок = Неопределено
Или СтруктураРеквизитовФормы.мСкопированаФорма <> Неопределено);
НовыйИлиСкопированныйДокумент = (СтруктураРеквизитовФормы.мСохраненныйДок = Неопределено
Или СтруктураРеквизитовФормы.мСкопированаФорма <> Неопределено);
Если Вариант <> Неопределено И Вариант <> СтруктураРеквизитовФормы.мВариант И НЕ НовыйИлиСкопированныйДокумент Тогда
ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки = Истина;
КонецЕсли;
Если ПодобныйОтчетСуществует
Или ОткрытьФормуВопросаПриИзмененииВидаДокументаНомераКорректировки Тогда
Возврат Ложь;
КонецЕсли;
Возврат Сохранить(Автосохранение, КодИФНС, Вариант, , ПоказателиОтчета);
КонецФункции
&НаСервере
Функция Сохранить(Автосохранение = Ложь, КодИФНС = "не применимо", Вариант = Неопределено, ВидДокументаНомерКорректировкиИзменен = Неопределено, ПоказателиОтчета = Неопределено) Экспорт
Если ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтруктураРеквизитовФормы, "ЗаблокированоВДругомСеансе", Ложь) Тогда
Возврат Ложь;
КонецЕсли;
ДанныеДляРазблокирования = Неопределено;
Если НЕ СтруктураРеквизитовФормы.мСохраненныйДок = Неопределено Тогда
Если НЕ СтруктураРеквизитовФормы.мБезОткрытияФормы Тогда
ДанныеДляРазблокирования = Новый Структура("Ключ,ИдФормы",
СтруктураРеквизитовФормы.мСохраненныйДок, ЭтотОбъект.УникальныйИдентификатор);
КонецЕсли;
СтруктураРеквизитовФормы.мСохраненныйДок = СтруктураРеквизитовФормы.мСохраненныйДок.ПолучитьОбъект();
КонецЕсли;
Если НЕ РегламентированнаяОтчетность.ПриЗаписиРегламентированногоОтчетаНаСервере(ЭтотОбъект, КодИФНС,
Автосохранение, Вариант, ВидДокументаНомерКорректировкиИзменен, СтруктураРеквизитовФормы.мСохраненныйДок) Тогда
СтруктураРеквизитовФормы.мСохраненныйДок = СтруктураРеквизитовФормы.мСохраненныйДок.Ссылка;
Возврат Ложь;
КонецЕсли;
ОтчетМетаданные = Метаданные.Отчеты[Сред(Лев(СтрЗаменить(ИмяФормы, "Внешний", ""),
СтрНайти(СтрЗаменить(ИмяФормы, "Внешний", ""), ".Форма.") - 1), 7)];
ВидОтчетности = Перечисления.ВидыОтчетности.РегламентированнаяОтчетность;
ПредставлениеВида = РегламентированнаяОтчетность.ПредставлениеВидаДокумента(Вариант);
СтруктураРеквизитовФормы.мСохраненныйДок.ФорматВыгрузки = "Автоматически";
СтруктураРеквизитовФормы.мСохраненныйДок.ИсточникОтчета = ОтчетМетаданные.Имя;
СтруктураРеквизитовФормы.мСохраненныйДок.НаименованиеОтчета = ОтчетМетаданные.ОсновнаяФорма.Синоним;
СтруктураРеквизитовФормы.мСохраненныйДок.ДатаНачала = СтруктураРеквизитовФормы.мДатаНачалаПериодаОтчета;
СтруктураРеквизитовФормы.мСохраненныйДок.ДатаОкончания = СтруктураРеквизитовФормы.мДатаКонцаПериодаОтчета;
СтруктураРеквизитовФормы.мСохраненныйДок.Периодичность = СтруктураРеквизитовФормы.мПериодичность;
СтруктураРеквизитовФормы.мСохраненныйДок.ВыбраннаяФорма = СтруктураРеквизитовФормы.мВыбраннаяФорма;
СтруктураРеквизитовФормы.мСохраненныйДок.Организация = СтруктураРеквизитовФормы.Организация;
СтруктураРеквизитовФормы.мСохраненныйДок.ДатаПодписи = ДатаПодписи;
СтруктураРеквизитовФормы.мСохраненныйДок.ЕдиницаИзмерения = Неопределено;
СтруктураРеквизитовФормы.мСохраненныйДок.ТочностьЕдиницыИзмерения = СтруктураРеквизитовФормы.ТочностьЕдиницыИзмерения;
СтруктураРеквизитовФормы.мСохраненныйДок.ВидОтчетности = ВидОтчетности;
СтруктураРеквизитовФормы.мСохраненныйДок.Вид = Вариант;
СтруктураРеквизитовФормы.мСохраненныйДок.ПредставлениеВида = ПредставлениеВида;
СтруктураРеквизитовФормы.мСохраненныйДок.Комментарий = Комментарий;
СтруктураРеквизитовФормы.мВариант = Вариант;
СписокСохранения = Новый Структура();
ДанныеВариантовАвтоЗаполнения = Новый Структура;
Для Каждого ЭлементСтруктуры Из мСтруктураВариантыЗаполнения Цикл
МассивТаблЗнач = Новый Массив;
ДанныеВариантовАвтоЗаполнения.Вставить(ЭлементСтруктуры.Ключ, МассивТаблЗнач);
Для Каждого ЭлементМассива Из ЭтотОбъект["ТаблицаВариантыЗаполнения" + ЭлементСтруктуры.Ключ] Цикл
МассивТаблЗнач.Добавить(ДанныеФормыВЗначение(ЭлементМассива.ТаблицаВариантовЗаполнения, Тип("ТаблицаЗначений")));
КонецЦикла;
КонецЦикла;
СписокСохранения.Вставить("ДанныеВариантовАвтоЗаполнения", ДанныеВариантовАвтоЗаполнения);
ДанныеМногострочныхРазделов = Новый Структура;
Для Каждого ЭлементСтруктуры Из мСтруктураМногострочныхРазделов Цикл
ДанныеМногострочныхРазделов.Вставить(
ЭлементСтруктуры.Ключ, ДанныеФормыВЗначение(ЭтотОбъект[ЭлементСтруктуры.Значение], Тип("ТаблицаЗначений")));
КонецЦикла;
СписокСохранения.Вставить("ДанныеМногострочныхРазделов", ДанныеМногострочныхРазделов);
СписокСохранения.Вставить("ПоказателиОтчета", ПоказателиОтчета);
СписокСохранения.Вставить("Авторасчет", СтруктураРеквизитовФормы.ФлажокОтклАвтоРасчет);
СписокСохранения.Вставить("ФлОтклВыборЗначений", СтруктураРеквизитовФормы.мАвтоВыборКодов);
СписокСохранения.Вставить("Адрес_JSON", СтруктураРеквизитовФормы.Адрес_JSON);
СписокСохранения.Вставить("ВерсияФормы", СтруктураРеквизитовФормы.мВерсияФормы);
СписокСохранения.Вставить("ИсключитьДанныеОбособленныхПодразделений", ИсключитьДанныеОбособленныхПодразделений);
СписокСохранения.Вставить("ОбособленноеПодразделение", ОбособленноеПодразделение);
СписокСохранения.Вставить("ВыгрузкаПредидущегоПериода", ВыгрузкаПредидущегоПериода);
СписокСохранения.Вставить("ОтчетПредидущегоПериода", ОтчетПредидущегоПериода);
СписокСохранения.Вставить("КодПодразделенияФСГС_8_14", ПоказателиОтчета.ПолеТабличногоДокументаФормаОтчета.ОргКодОКПО);
РегламентированнаяОтчетностьКлиентСервер.ДополнитьОпциональныеПараметрыОтчета(ЭтотОбъект, СписокСохранения);
ХранилищеДанных = Новый ХранилищеЗначения(СписокСохранения);
СтруктураРеквизитовФормы.мСохраненныйДок.ДанныеОтчета = ХранилищеДанных;
РегламентированнаяОтчетность.ПередЗаписьюНаСервере(ЭтотОбъект,
СтруктураРеквизитовФормы.мСохраненныйДок, Новый Структура);
Попытка
СтруктураРеквизитовФормы.мСохраненныйДок.Записать();
РегламентированнаяОтчетность.СохранитьСтатусОтправкиРеглОтчета(ЭтотОбъект);
Исключение
Если НЕ Автосохранение Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='%1'"), РегламентированнаяОтчетностьКлиентСервер.СформироватьТекстСообщения(ОписаниеОшибки()));
Сообщение.Сообщить();
КонецЕсли;
СтруктураРеквизитовФормы.мСохраненныйДок = СтруктураРеквизитовФормы.мСохраненныйДок.Ссылка;
Возврат Ложь;
КонецПопытки;
РегламентированнаяОтчетность.ПослеЗаписиНаСервере(ЭтотОбъект,
СтруктураРеквизитовФормы.мСохраненныйДок, Новый Структура);
Модифицированность = Ложь;
СтруктураРеквизитовФормы.мСохраненныйДок = СтруктураРеквизитовФормы.мСохраненныйДок.Ссылка;
Если НЕ СтруктураРеквизитовФормы.мБезОткрытияФормы
И НЕ СтруктураРеквизитовФормы.мСохраненныйДок = Неопределено Тогда
ЗаблокироватьДанныеДляРедактирования(
СтруктураРеквизитовФормы.мСохраненныйДок, , ЭтотОбъект.УникальныйИдентификатор);
КонецЕсли;
Если ДанныеДляРазблокирования <> Неопределено Тогда
РазблокироватьДанныеДляРедактирования(ДанныеДляРазблокирования.Ключ, ДанныеДляРазблокирования.ИдФормы);
КонецЕсли;
Возврат Истина;
КонецФункции
&НаСервере
Процедура ЗаполнитьПоказателиОтчетаНаСервере(ПоказателиОтчета)
РегламентированнаяОтчетностьКлиентСервер.ЗаполнитьПоказателиОтчета(ЭтотОбъект, ПоказателиОтчета);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПоказателиОтчетаНаКлиенте(ПоказателиОтчета)
РегламентированнаяОтчетностьКлиентСервер.ЗаполнитьПоказателиОтчета(ЭтотОбъект, ПоказателиОтчета);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьСтроку(Команда)
#Если ВебКлиент Тогда
ДобавитьСтрокуНаСервере("ФормаОтчета");
#Иначе
ДобавитьСтрокуНаКлиенте("ФормаОтчета");
#КонецЕсли
КонецПроцедуры
&НаСервере
Процедура ДобавитьСтрокуНаСервере(КолонкаРазделыОтчетаСокрНаим)
ВставитьДополнительнуюСтроку(ЭтотОбъект,КолонкаРазделыОтчетаСокрНаим);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьСтрокуНаКлиенте(КолонкаРазделыОтчетаСокрНаим)
ВставитьДополнительнуюСтроку(ЭтотОбъект, КолонкаРазделыОтчетаСокрНаим);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ВставитьДополнительнуюСтроку(Форма, ТекущаяСтраница)
Перем СтруктураГруппы;
Перем СтруктураГруппыСинхронизируемой;
Перем МаксимальноеКоличествоСтрокГруппы;
Перем МаксимальноеКоличествоСтрокГруппыСинхронизируемой;
#Если НаКлиенте Тогда
ИмяГруппы = Форма.ОпределитьИдМногострочногоРазделаПоАктивнойСтраницеНаКлиенте(ТекущаяСтраница);
#Иначе
ИмяГруппы = Форма.ОпределитьИдМногострочногоРазделаПоАктивнойСтраницеНаСервере(ТекущаяСтраница);
#КонецЕсли
Если ИмяГруппы = Неопределено Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = НСтр("ru='Не выбран многострочный раздел, в который необходимо добавить строку.'");
Сообщение.Сообщить();
Возврат;
КонецЕсли;
Если ИмяГруппы = "П0010010002" Тогда
ИмяГруппыСинхронизируемой1 = "П0010020002";
ГраФаНач = 1;
ГраФаКон = 9;
ГраФаНачСинхронизируемой = 1;
ГраФаКонСинхронизируемой = 11;
ИначеЕсли ИмяГруппы = "П0010020002" Тогда
ИмяГруппыСинхронизируемой1 = "П0010010002";
ГраФаНач = 1;
ГраФаКон = 11;
ГраФаНачСинхронизируемой = 1;
ГраФаКонСинхронизируемой = 9;
КонецЕсли;
Форма.мСтруктураИсхКолвоСтрокРазделов.Свойство(ИмяГруппы, МаксимальноеКоличествоСтрокГруппы);
ТекТабличноеПолеИмя = "ПолеТабличногоДокументаФормаОтчета";
ТекТабличноеПоле = Форма[ТекТабличноеПолеИмя];
Форма.мСтруктураМногострочныхРазделов.Свойство(ИмяГруппы, СтруктураГруппы);
СтруктураГруппы = Форма[СтруктураГруппы];
КолСтрок = СтруктураГруппы.Количество();
КолСтрокСтр = Формат(КолСтрок, "ЧГ=0");
КолСтрокСтр1 = Формат(КолСтрок + 1, "ЧГ=0");
ИмяПервойЯчейкиПоследнейСтроки = ИмяГруппы + Формат(ГраФаНач, "ЧЦ=2; ЧВН=") + "_" + КолСтрокСтр;
ИмяТекущейОбласти = ИмяГруппы + Формат(ГраФаНач, "ЧЦ=2; ЧВН=") + "_" + КолСтрокСтр1;
ОбластьЯчейки = ТекТабличноеПоле.Области[ИмяПервойЯчейкиПоследнейСтроки];
НомерВерхЯчейкиОбласти = ОбластьЯчейки.Верх;
НомерНижнЯчейкиОбласти = ОбластьЯчейки.Низ;
СдвигСтрок = НомерНижнЯчейкиОбласти - НомерВерхЯчейкиОбласти + 1;
НомерВерхЯчейкиНовойОбласти = НомерВерхЯчейкиОбласти + СдвигСтрок;
НомерНижнЯчейкиНовойОбласти = НомерНижнЯчейкиОбласти + СдвигСтрок;
РегламентированнаяОтчетностьВызовСервера.СпециальногоДобавленияСтроки(
ТекТабличноеПоле, ТекТабличноеПолеИмя, ИмяГруппы, НомерВерхЯчейкиОбласти, НомерНижнЯчейкиОбласти);
Форма[ТекТабличноеПолеИмя] = ТекТабличноеПоле;
Для НомерГрафы = ГраФаНач По ГраФаКон Цикл
ИмяКолонки = ИмяГруппы + Формат(НомерГрафы, "ЧЦ=2; ЧВН=");
Если СтруктураГруппы[0].Свойство(ИмяКолонки) Тогда
ИмяОбластиЯчейки = ИмяКолонки + "_" + КолСтрокСтр;
ИмяНовОбластиЯчейки = ИмяКолонки + "_" + КолСтрокСтр1;
ОбластьЯчейки = ТекТабличноеПоле.Области[ИмяОбластиЯчейки];
ОбластьЯчейки.Имя = ИмяНовОбластиЯчейки;
НомерВерхСтрокиЯчейки = ОбластьЯчейки.Верх - СдвигСтрок;
НомерНижнСтрокиЯчейки = ОбластьЯчейки.Низ - СдвигСтрок;
НомерЛевоКолонкиЯчейки = ОбластьЯчейки.Лево;
НомерПравКолонкиЯчейки = ОбластьЯчейки.Право;
ОбластьЯчейкиИсходнойОбласти = ТекТабличноеПоле.Область(
НомерВерхСтрокиЯчейки, НомерЛевоКолонкиЯчейки, НомерНижнСтрокиЯчейки, НомерПравКолонкиЯчейки);
ОбластьЯчейкиИсходнойОбласти.Имя = ИмяОбластиЯчейки;
Если (НомерГрафы = 7 И ИмяГруппы = "П0010010002")
Или (НомерГрафы = 1 И ИмяГруппы = "П0010020002") Тогда
НомерПервойКолонки = 2;
НовОбластьЯчейкиУдалитьСтроку = ТекТабличноеПоле.Область(
ОбластьЯчейки.Верх, НомерПервойКолонки,
ОбластьЯчейки.Верх, НомерПервойКолонки);
НовОбластьЯчейкиУдалитьСтроку.Имя = "УдалитьСтроку" + ИмяНовОбластиЯчейки;
ИсхОбластьЯчейкиУдалитьСтроку = ТекТабличноеПоле.Область(
ОбластьЯчейкиИсходнойОбласти.Верх, НомерПервойКолонки,
ОбластьЯчейкиИсходнойОбласти.Верх, НомерПервойКолонки);
ИсхОбластьЯчейкиУдалитьСтроку.Имя = "УдалитьСтроку" + ИмяОбластиЯчейки;
КонецЕсли;
Если ОбластьЯчейки.СодержитЗначение = Истина Тогда
ОбластьЯчейки.Очистить();
Если РегламентированнаяОтчетностьКлиентСервер.ЯвляетсяЧислом(ОбластьЯчейки.Значение) Тогда
ОбластьЯчейки.Формат = "";
КонецЕсли;
Иначе
ИсходныйНомер = Число("0" + ОбластьЯчейки.Текст);
НовыйПорядковыйНомер = ИсходныйНомер + 1;
ОбластьЯчейки.Текст = ?(НЕ НовыйПорядковыйНомер > МаксимальноеКоличествоСтрокГруппы, Строка(НовыйПорядковыйНомер), "");
КонецЕсли;
КонецЕсли;
КонецЦикла;
СтруктураГруппы.Добавить();
ИмяГруппыСинхронизируемой = ИмяГруппыСинхронизируемой1;
Форма.мСтруктураИсхКолвоСтрокРазделов.Свойство(ИмяГруппыСинхронизируемой, МаксимальноеКоличествоСтрокГруппыСинхронизируемой);
ТекТабличноеПолеИмяСинхронизируемое = "ПолеТабличногоДокументаФормаОтчета";
ТекТабличноеПолеСинхронизируемое = Форма[ТекТабличноеПолеИмяСинхронизируемое];
Форма.мСтруктураМногострочныхРазделов.Свойство(ИмяГруппыСинхронизируемой, СтруктураГруппыСинхронизируемой);
СтруктураГруппыСинхронизируемой = Форма[СтруктураГруппыСинхронизируемой];
КолСтрокСинхронизируемых = СтруктураГруппыСинхронизируемой.Количество();
КолСтрокСтрСинхронизируемых = Формат(КолСтрокСинхронизируемых, "ЧГ=0");
КолСтрокСтр1Синхронизируемых = Формат(КолСтрокСинхронизируемых + 1, "ЧГ=0");
ИмяПервойЯчейкиПоследнейСтрокиСинхронизируемой = ИмяГруппыСинхронизируемой + Формат(ГраФаНачСинхронизируемой, "ЧЦ=2; ЧВН=") + "_" + КолСтрокСтрСинхронизируемых;
ОбластьЯчейкиСинхронизируемой = ТекТабличноеПолеСинхронизируемое.Области[ИмяПервойЯчейкиПоследнейСтрокиСинхронизируемой];
НомерВерхЯчейкиОбластиСинхронизируемой = ОбластьЯчейкиСинхронизируемой.Верх;
НомерНижнЯчейкиОбластиСинхронизируемой = ОбластьЯчейкиСинхронизируемой.Низ;
СдвигСтрокСинхронизируемых = НомерНижнЯчейкиОбластиСинхронизируемой - НомерВерхЯчейкиОбластиСинхронизируемой + 1;
НомерВерхЯчейкиНовойОбластиСинхронизируемой = НомерВерхЯчейкиОбластиСинхронизируемой + СдвигСтрокСинхронизируемых;
НомерНижнЯчейкиНовойОбластиСинхронизируемой = НомерНижнЯчейкиОбластиСинхронизируемой + СдвигСтрокСинхронизируемых;
РегламентированнаяОтчетностьВызовСервера.СпециальногоДобавленияСтроки(
ТекТабличноеПолеСинхронизируемое, ТекТабличноеПолеИмяСинхронизируемое,
ИмяГруппыСинхронизируемой, НомерВерхЯчейкиОбластиСинхронизируемой, НомерНижнЯчейкиОбластиСинхронизируемой);
Форма[ТекТабличноеПолеИмяСинхронизируемое] = ТекТабличноеПолеСинхронизируемое;
Для НомерГрафыСинхронизируемой = ГраФаНачСинхронизируемой По ГраФаКонСинхронизируемой Цикл
ИмяКолонкиСинхронизируемой = ИмяГруппыСинхронизируемой + Формат(НомерГрафыСинхронизируемой, "ЧЦ=2; ЧВН=");
Если СтруктураГруппыСинхронизируемой[0].Свойство(ИмяКолонкиСинхронизируемой) Тогда
ИмяОбластиЯчейкиСинхронизируемой = ИмяКолонкиСинхронизируемой + "_" + КолСтрокСтрСинхронизируемых;
ИмяНовОбластиЯчейкиСинхронизируемой = ИмяКолонкиСинхронизируемой + "_" + КолСтрокСтр1Синхронизируемых;
ОбластьЯчейкиСинхронизируемой = ТекТабличноеПолеСинхронизируемое.Области[ИмяОбластиЯчейкиСинхронизируемой];
ОбластьЯчейкиСинхронизируемой.Имя = ИмяНовОбластиЯчейкиСинхронизируемой;
НомерВерхСтрокиЯчейкиСинхронизируемой = ОбластьЯчейкиСинхронизируемой.Верх - СдвигСтрокСинхронизируемых;
НомерНижнСтрокиЯчейкиСинхронизируемой = ОбластьЯчейкиСинхронизируемой.Низ - СдвигСтрокСинхронизируемых;
НомерЛевоКолонкиЯчейкиСинхронизируемой = ОбластьЯчейкиСинхронизируемой.Лево;
НомерПравКолонкиЯчейкиСинхронизируемой = ОбластьЯчейкиСинхронизируемой.Право;
ОбластьЯчейкиИсходнойОбластиСинхронизируемой = ТекТабличноеПолеСинхронизируемое.Область(
НомерВерхСтрокиЯчейкиСинхронизируемой, НомерЛевоКолонкиЯчейкиСинхронизируемой,
НомерНижнСтрокиЯчейкиСинхронизируемой, НомерПравКолонкиЯчейкиСинхронизируемой);
ОбластьЯчейкиИсходнойОбластиСинхронизируемой.Имя = ИмяОбластиЯчейкиСинхронизируемой;
Если (НомерГрафыСинхронизируемой = 7 И ИмяГруппыСинхронизируемой = "П0010010002")
Или (НомерГрафыСинхронизируемой = 1 И ИмяГруппыСинхронизируемой = "П0010020002") Тогда
НовОбластьЯчейкиУдалитьСтроку = ТекТабличноеПолеСинхронизируемое.Область(
ОбластьЯчейкиСинхронизируемой.Верх, 2, ОбластьЯчейкиСинхронизируемой.Верх, 2);
НовОбластьЯчейкиУдалитьСтроку.Имя = "УдалитьСтроку" + ИмяНовОбластиЯчейкиСинхронизируемой;
ИсхОбластьЯчейкиУдалитьСтроку = ТекТабличноеПолеСинхронизируемое.Область(
ОбластьЯчейкиИсходнойОбластиСинхронизируемой.Верх, 2, ОбластьЯчейкиИсходнойОбластиСинхронизируемой.Верх, 2);
ИсхОбластьЯчейкиУдалитьСтроку.Имя = "УдалитьСтроку" + ИмяОбластиЯчейкиСинхронизируемой;
КонецЕсли;
Если ОбластьЯчейкиСинхронизируемой.СодержитЗначение = Истина Тогда
ОбластьЯчейкиСинхронизируемой.Очистить();
Если РегламентированнаяОтчетностьКлиентСервер.ЯвляетсяЧислом(ОбластьЯчейкиСинхронизируемой.Значение) Тогда
ОбластьЯчейкиСинхронизируемой.Формат = "";
КонецЕсли;
Иначе
ИсходныйНомерСинхронизируемый = Число("0" + ОбластьЯчейкиСинхронизируемой.Текст);
НовыйПорядковыйНомерСинхронизируемый = ИсходныйНомерСинхронизируемый + 1;
ОбластьЯчейкиСинхронизируемой.Текст = ?(НЕ НовыйПорядковыйНомерСинхронизируемый > МаксимальноеКоличествоСтрокГруппыСинхронизируемой, Строка(НовыйПорядковыйНомерСинхронизируемый), "");
КонецЕсли;
КонецЕсли;
КонецЦикла;
СтруктураГруппыСинхронизируемой.Добавить();
Форма.ТекущийЭлемент = Форма.Элементы[ТекТабличноеПолеИмя];
Подраздел = Сред(ИмяТекущейОбласти, 7, 1);
ОбластьИмя = Лев(ИмяТекущейОбласти, 11) + ?(Подраздел = "1", "07", "01") + Сред(ИмяТекущейОбласти, 14);
Форма.Элементы[ТекТабличноеПолеИмя].ТекущаяОбласть = Форма.ПолеТабличногоДокументаФормаОтчета.Области[ОбластьИмя];
ПеренумерацияСтрокТаблицы(Форма);
Форма.Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьСтроку(Команда)
ТекТабличноеПоле = ЭтотОбъект["ПолеТабличногоДокументаФормаОтчета"];
ТекущаяОбласть = ТекТабличноеПоле.ТекущаяОбласть;
ИмяГруппы = РазделТекущейОбласти(ЭтотОбъект, ТекущаяОбласть);
Если ИмяГруппы = Неопределено Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = НСтр("ru='Не выбрана удаляемая строка многострочного раздела.'");
Сообщение.Сообщить();
Возврат;
КонецЕсли;
ТекстВопроса = НСтр("ru='Удалить выбранную строку?'");
ОписаниеОповещения = Новый ОписаниеОповещения("УдалитьСтрокуЗавершение", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да);
КонецПроцедуры
&НаКлиенте
Процедура УдалитьСтрокуЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
#Если ВебКлиент Тогда
УдалитьДополнительнуюСтрокуНаСервере("ФормаОтчета");
#Иначе
УдалитьДополнительнуюСтрокуНаКлиенте("ФормаОтчета");
#КонецЕсли
РасчетНаКлиенте("", "");
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УдалитьДополнительнуюСтрокуИзГруппы(Форма, СпециальноеДобавление, ИмяКолонкиНомера, ТекущаяСтраница, ИмяГруппы, НомУдаляемойСтроки, НомерСтрокиТаблицы)
Перем СтруктураГруппы;
Перем СтруктураГруппыСинхронизируемой;
Перем ИсходноеКоличествоСтрокГруппы;
Перем ИсходноеКоличествоСтрокГруппыСинхронизируемой;
#Если НаКлиенте Тогда
ИмяГруппы = Форма.ОпределитьИдМногострочногоРазделаПоАктивнойСтраницеНаКлиенте(ТекущаяСтраница);
#Иначе
ИмяГруппы = Форма.ОпределитьИдМногострочногоРазделаПоАктивнойСтраницеНаСервере(ТекущаяСтраница);
#КонецЕсли
Форма.мСтруктураИсхКолвоСтрокРазделов.Свойство(ИмяГруппы, ИсходноеКоличествоСтрокГруппы);
Форма.мСтруктураМногострочныхРазделов.Свойство(ИмяГруппы, СтруктураГруппы);
ТекТабличноеПолеИмя = "ПолеТабличногоДокументаФормаОтчета";
ТекТабличноеПоле = Форма["ПолеТабличногоДокументаФормаОтчета"];
ТекущаяОбласть = Форма.Элементы[ТекТабличноеПолеИмя].ТекущаяОбласть;
ИмяЯчейки = СтрЗаменить(ТекущаяОбласть.Имя, "УдалитьСтроку", "");
Если ИмяГруппы = "П0010010002" Тогда
ИмяГруппыСинхронизируемой1 = "П0010020002";
ИмяЯчейкиСинхронизируемой1 = "П001002" + Сред(ИмяГруппыСинхронизируемой1, 8, 4) + "01_" + Сред(ИмяЯчейки, 15);
ГраФаНач = 1;
ГраФаКон = 9;
ГраФаНачСинхронизируемой = 1;
ГраФаКонСинхронизируемой = 11;
ИначеЕсли ИмяГруппы = "П0010020002" Тогда
ИмяГруппыСинхронизируемой1 = "П0010010002";
ИмяЯчейкиСинхронизируемой1 = "П001001" + Сред(ИмяГруппыСинхронизируемой1, 8, 4) + "07_" + Сред(ИмяЯчейки, 15);
ГраФаНач = 1;
ГраФаКон = 11;
ГраФаНачСинхронизируемой = 1;
ГраФаКонСинхронизируемой = 9;
КонецЕсли;
ОбновитьСтруктуруМногострочногоРаздела(Форма, ИмяГруппы);
СтруктураГруппы = Форма[СтруктураГруппы];
ИмяПервойЯчейкиУдаляемойСтроки = ИмяГруппы + Формат(ГраФаНач, "ЧЦ=2; ЧВН=") + "_" + НомУдаляемойСтроки;
Если СтруктураГруппы.Количество() > ИсходноеКоличествоСтрокГруппы Тогда
ОбластьЯчейки = ТекТабличноеПоле.Области[ИмяПервойЯчейкиУдаляемойСтроки];
НомерВерхЯчейкиОбласти = ОбластьЯчейки.Верх;
НомерНижнЯчейкиОбласти = ОбластьЯчейки.Верх;
РегламентированнаяОтчетностьВызовСервера.СпециальногоУдаленияСтроки(
ТекТабличноеПоле, ТекТабличноеПолеИмя, ИмяГруппы, НомерВерхЯчейкиОбласти, НомерНижнЯчейкиОбласти);
Форма[ТекТабличноеПолеИмя] = ТекТабличноеПоле;
КолвоСдвигаемыхСтрок = СтруктураГруппы.Количество() - НомУдаляемойСтроки;
Если КолвоСдвигаемыхСтрок > 0 Тогда
Для НСтр = НомУдаляемойСтроки + 1 По СтруктураГруппы.Количество() Цикл
ТекСтрока = СтруктураГруппы[НСтр-1];
Для НомерГрафы = ГраФаНач По ГраФаКон Цикл
КолонкаИмя = ИмяГруппы + Формат(НомерГрафы, "ЧЦ=2; ЧВН=; ЧН=00");
Если СтруктураГруппы[0].Свойство(КолонкаИмя) Тогда
ИмяСдвинутойЯчейки = КолонкаИмя + "_" + НСтр;
НовоеИмяСдвинутойЯчейки = КолонкаИмя + "_" + (НСтр - 1);
ОбластьСдвинутойЯчейки = ТекТабличноеПоле.Области[ИмяСдвинутойЯчейки];
ОбластьСдвинутойЯчейки.Имя = НовоеИмяСдвинутойЯчейки;
Если (НомерГрафы = 7 И ИмяГруппы = "П0010010002")
Или (НомерГрафы = 1 И ИмяГруппы = "П0010020002") Тогда
НомерПервойКолонки = 2;
ОбластьЯчейкиУдалитьСтроку = ТекТабличноеПоле.Область(
ОбластьСдвинутойЯчейки.Верх, НомерПервойКолонки, ОбластьСдвинутойЯчейки.Верх, НомерПервойКолонки);
ОбластьЯчейкиУдалитьСтроку.Имя = "УдалитьСтроку" + НовоеИмяСдвинутойЯчейки;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
СтруктураГруппы.Удалить(НомерСтрокиТаблицы);
Иначе
СтруктураГруппы.Удалить(НомерСтрокиТаблицы);
ДобавляемаяСтрока = СтруктураГруппы.Добавить();
Для НСтр = НомУдаляемойСтроки По СтруктураГруппы.Количество() Цикл
НомерСтрокиВФормеТаблицы = Формат(НСтр, "ЧГ=0");
НомерСтрокиВФормеТаблицыСлед = Формат(НСтр + 1, "ЧГ=0");
Для НомерГрафы = ГраФаНач По ГраФаКон Цикл
КолонкаТаблицыИмя = ИмяГруппы + Формат(НомерГрафы, "ЧЦ=2; ЧВН=; ЧН=00");
Если СтруктураГруппы[0].Свойство(КолонкаТаблицыИмя) Тогда
ИмяЯчейкиИзменяемой = КолонкаТаблицыИмя + "_" + НомерСтрокиВФормеТаблицы;
ОбластьЯчейкиТаблицыИзменяемой = ТекТабличноеПоле.Области[ИмяЯчейкиИзменяемой];
ИмяЯчейкиСлед = КолонкаТаблицыИмя + "_" + НомерСтрокиВФормеТаблицыСлед;
ОбластьЯчейкиТаблицыСлед = ТекТабличноеПоле.Области.Найти(ИмяЯчейкиСлед);
Если РегламентированнаяОтчетностьКлиентСервер.ЯвляетсяЧислом(ОбластьЯчейкиТаблицыИзменяемой.Значение) Тогда
Если ОбластьЯчейкиТаблицыСлед = Неопределено Тогда
ОбластьЯчейкиТаблицыИзменяемой.Формат = "";
Иначе
ОбластьЯчейкиТаблицыИзменяемой.Формат = ОбластьЯчейкиТаблицыСлед.Формат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
#Если НаКлиенте Тогда
Форма.ВывестиРазделВТабличныйДокументНаКлиенте(ИмяГруппы, СтруктураГруппы);
#Иначе
Форма.ВывестиРазделВТабличныйДокументНаСервере(ИмяГруппы, СтруктураГруппы);
#КонецЕсли
КонецЕсли;
ИмяГруппыСинхронизируемой = ИмяГруппыСинхронизируемой1;
ИмяЯчейкиСинхронизируемой = ИмяЯчейкиСинхронизируемой1;
Форма.мСтруктураИсхКолвоСтрокРазделов.Свойство(ИмяГруппыСинхронизируемой, ИсходноеКоличествоСтрокГруппыСинхронизируемой);
Форма.мСтруктураМногострочныхРазделов.Свойство(ИмяГруппыСинхронизируемой, СтруктураГруппыСинхронизируемой);
ТекТабличноеПолеИмяСинхронизируемое = "ПолеТабличногоДокументаФормаОтчета";
ТекТабличноеПолеСинхронизируемое = Форма[ТекТабличноеПолеИмяСинхронизируемое];
ОбновитьСтруктуруМногострочногоРаздела(Форма, ИмяГруппыСинхронизируемой);
НомУдаляемойСтрокиСинхронизируемый = Число(Сред(ИмяЯчейкиСинхронизируемой, СтрНайти(ИмяЯчейкиСинхронизируемой, "_") + 1));
НомерСтрокиТаблицыСинхронизируемый = НомУдаляемойСтрокиСинхронизируемый - 1;
СтруктураГруппыСинхронизируемой = Форма[СтруктураГруппыСинхронизируемой];
Если СтруктураГруппыСинхронизируемой.Количество() > ИсходноеКоличествоСтрокГруппыСинхронизируемой Тогда
ИмяПервойЯчейкиУдаляемойСтрокиСинхронизируемой =
ИмяГруппыСинхронизируемой + Формат(ГрафаНачСинхронизируемой, "ЧЦ=2; ЧВН=") + "_" + НомУдаляемойСтрокиСинхронизируемый;
ОбластьЯчейкиСинхронизируемой = ТекТабличноеПолеСинхронизируемое.Области[ИмяПервойЯчейкиУдаляемойСтрокиСинхронизируемой];
НомерВерхЯчейкиОбластиСинхронизируемой = ОбластьЯчейкиСинхронизируемой.Верх;
НомерНижнЯчейкиОбластиСинхронизируемой = ОбластьЯчейкиСинхронизируемой.Верх;
РегламентированнаяОтчетностьВызовСервера.СпециальногоУдаленияСтроки(
ТекТабличноеПолеСинхронизируемое, ТекТабличноеПолеИмяСинхронизируемое, ИмяГруппыСинхронизируемой,
НомерВерхЯчейкиОбластиСинхронизируемой, НомерНижнЯчейкиОбластиСинхронизируемой);
Форма[ТекТабличноеПолеИмяСинхронизируемое] = ТекТабличноеПолеСинхронизируемое;
КолвоСдвигаемыхСтрокСинхронизируемое = СтруктураГруппыСинхронизируемой.Количество() - НомУдаляемойСтрокиСинхронизируемый;
Если КолвоСдвигаемыхСтрокСинхронизируемое > 0 Тогда
Для НСтр = НомУдаляемойСтрокиСинхронизируемый + 1 По СтруктураГруппыСинхронизируемой.Количество() Цикл
ТекСтрокаСинхронизируемая = СтруктураГруппыСинхронизируемой[НСтр-1];
Для НомерГрафы = ГрафаНачСинхронизируемой По ГрафаКонСинхронизируемой Цикл
КолонкаИмяСинхронизируемое = ИмяГруппыСинхронизируемой + Формат(НомерГрафы, "ЧЦ=2; ЧВН=");
Если СтруктураГруппыСинхронизируемой[0].Свойство(КолонкаИмяСинхронизируемое) Тогда
ИмяСдвинутойЯчейкСинхронизируемой = КолонкаИмяСинхронизируемое + "_" + НСтр;
НовоеИмяСдвинутойЯчейкиСинхронизируемой = КолонкаИмяСинхронизируемое + "_" + (НСтр - 1);
ОбластьСдвинутойЯчейкиСинхронизируемой = ТекТабличноеПолеСинхронизируемое.Области[ИмяСдвинутойЯчейкСинхронизируемой];
ОбластьСдвинутойЯчейкиСинхронизируемой.Имя = НовоеИмяСдвинутойЯчейкиСинхронизируемой;
Если (НомерГрафы = 7 И ИмяГруппы = "П0010010002")
Или (НомерГрафы = 1 И ИмяГруппы = "П0010020002") Тогда
ОбластьЯчейкиУдалитьСтроку = ТекТабличноеПолеСинхронизируемое.Область(
ОбластьСдвинутойЯчейкиСинхронизируемой.Верх, 2, ОбластьСдвинутойЯчейкиСинхронизируемой.Верх, 2);
ОбластьЯчейкиУдалитьСтроку.Имя = "УдалитьСтроку" + НовоеИмяСдвинутойЯчейкиСинхронизируемой;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
СтруктураГруппыСинхронизируемой.Удалить(НомерСтрокиТаблицыСинхронизируемый);
Иначе
СтруктураГруппыСинхронизируемой.Удалить(НомерСтрокиТаблицыСинхронизируемый);
ДобавляемаяСтрокаСинхронизируемая = СтруктураГруппыСинхронизируемой.Добавить();
Для НСтр = НомУдаляемойСтрокиСинхронизируемый По СтруктураГруппыСинхронизируемой.Количество() Цикл
НомерСтрокиВФормеТаблицы = Формат(НСтр, "ЧГ=0");
НомерСтрокиВФормеТаблицыСлед = Формат(НСтр + 1, "ЧГ=0");
Для НомерГрафы = ГрафаНачСинхронизируемой По ГрафаКонСинхронизируемой Цикл
КолонкаТаблицыИмя = ИмяГруппыСинхронизируемой + Формат(НомерГрафы, "ЧЦ=2; ЧВН=; ЧН=00");
Если СтруктураГруппыСинхронизируемой[0].Свойство(КолонкаТаблицыИмя) Тогда
ИмяЯчейкиИзменяемой = КолонкаТаблицыИмя + "_" + НомерСтрокиВФормеТаблицы;
ОбластьЯчейкиТаблицыИзменяемой = ТекТабличноеПолеСинхронизируемое.Области[ИмяЯчейкиИзменяемой];
ИмяЯчейкиСлед = КолонкаТаблицыИмя + "_" + НомерСтрокиВФормеТаблицыСлед;
ОбластьЯчейкиТаблицыСлед = ТекТабличноеПолеСинхронизируемое.Области.Найти(ИмяЯчейкиСлед);
Если РегламентированнаяОтчетностьКлиентСервер.ЯвляетсяЧислом(ОбластьЯчейкиТаблицыИзменяемой.Значение) Тогда
Если ОбластьЯчейкиТаблицыСлед = Неопределено Тогда
ОбластьЯчейкиТаблицыИзменяемой.Формат = "";
Иначе
ОбластьЯчейкиТаблицыИзменяемой.Формат = ОбластьЯчейкиТаблицыСлед.Формат;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
#Если НаКлиенте Тогда
Форма.ВывестиРазделВТабличныйДокументНаКлиенте(ИмяГруппыСинхронизируемой, СтруктураГруппыСинхронизируемой);
#Иначе
Форма.ВывестиРазделВТабличныйДокументНаСервере(ИмяГруппыСинхронизируемой, СтруктураГруппыСинхронизируемой);
#КонецЕсли
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УдалитьДополнительнуюСтроку(Форма, СпециальноеДобавление = Ложь, ИмяКолонкиНомера = Неопределено, ТекущаяСтраница = Неопределено) Экспорт
Перем ИсходноеКоличествоСтрокГруппы;
Перем СтруктураГруппы;
#Если НаКлиенте Тогда
ИмяГруппы = Форма.ОпределитьИдМногострочногоРазделаПоАктивнойСтраницеНаКлиенте(ТекущаяСтраница);
#Иначе
ИмяГруппы = Форма.ОпределитьИдМногострочногоРазделаПоАктивнойСтраницеНаСервере(ТекущаяСтраница);
#КонецЕсли
ИмяЯчейки = Форма.Элементы["ПолеТабличногоДокументаФормаОтчета"].ТекущаяОбласть.Имя;
НомУдаляемойСтроки = Число(Сред(ИмяЯчейки, СтрНайти(ИмяЯчейки, "_") + 1));
НомерСтрокиТаблицы = НомУдаляемойСтроки - 1;
УдалитьДополнительнуюСтрокуИзГруппы(Форма, СпециальноеДобавление, ИмяКолонкиНомера, ТекущаяСтраница, ИмяГруппы, НомУдаляемойСтроки, НомерСтрокиТаблицы);
ТекТабличноеПолеИмя = "ПолеТабличногоДокументаФормаОтчета";
ТекТабличноеПоле = Форма[ТекТабличноеПолеИмя];
Подраздел = Сред(ИмяГруппы, 7, 1);
ИмяТекущейОбласти = ИмяГруппы + ?(Подраздел = "1", "07", "01") + "_" + ?(НомерСтрокиТаблицы = 0, 1, НомерСтрокиТаблицы);
Форма.Элементы[ТекТабличноеПолеИмя].ТекущаяОбласть = ТекТабличноеПоле.Области[ИмяТекущейОбласти];
ПеренумерацияСтрокТаблицы(Форма);
Форма.Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьДополнительнуюСтрокуНаКлиенте(ТекущаяСтраница)
УдалитьДополнительнуюСтроку(ЭтотОбъект, , , ТекущаяСтраница);
КонецПроцедуры
&НаСервере
Процедура УдалитьДополнительнуюСтрокуНаСервере(ТекущаяСтраница)
УдалитьДополнительнуюСтроку(ЭтотОбъект, , , ТекущаяСтраница);
КонецПроцедуры
&НаКлиенте
Функция ОпределитьИдМногострочногоРазделаПоАктивнойСтраницеНаКлиенте(ИмяЛиста = Неопределено) Экспорт
ИдГрупп = Новый Структура;
Возврат ОпределитьИдМногострочногоРазделаПоАктивнойСтранице(ЭтотОбъект, ИмяЛиста, ИмяЛиста, ИдГрупп);
КонецФункции
&НаСервере
Функция ОпределитьИдМногострочногоРазделаПоАктивнойСтраницеНаСервере(ИмяЛиста = Неопределено) Экспорт
ИдГрупп = Новый Структура;
Возврат ОпределитьИдМногострочногоРазделаПоАктивнойСтранице(ЭтотОбъект, ИмяЛиста, ИмяЛиста, ИдГрупп);
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОпределитьИдМногострочногоРазделаПоАктивнойСтранице(Форма, ИмяЛиста = Неопределено, ТекущаяСтраница = Неопределено, ИдГрупп = Неопределено)
Перем ИмяГруппы;
Если ИмяЛиста = Неопределено Тогда
ИмяТекущейСтраницыПанели = ТекущаяСтраница.Имя;
Иначе
ИмяТекущейСтраницыПанели = ИмяЛиста;
КонецЕсли;
Если ИмяТекущейСтраницыПанели = "ФормаОтчета" Тогда
ИмяГруппы = РазделТекущейОбласти(Форма, Форма.Элементы.ПолеТабличногоДокументаФормаОтчета.ТекущаяОбласть);
КонецЕсли;
Возврат ИмяГруппы;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьСтруктуруМногострочногоРаздела(Форма, ИмяГруппы) Экспорт
Перем СтруктураГруппы;
Форма.мСтруктураМногострочныхРазделов.Свойство(ИмяГруппы, СтруктураГруппы);
СтруктураГруппы = Форма[СтруктураГруппы];
ТекТабличноеПолеИмя = "ПолеТабличногоДокументаФормаОтчета";
ТекТабличноеПоле = Форма[ТекТабличноеПолеИмя];
Если ИмяГруппы = "П0010010002" Тогда
ГраФаНач = 1;
ГраФаКон = 9;
ИначеЕсли ИмяГруппы = "П0010020002" Тогда
ГраФаНач = 1;
ГраФаКон = 11;
КонецЕсли;
Для НСтр = 1 По СтруктураГруппы.Количество() Цикл
ТекСтрокаТаблицы = СтруктураГруппы[НСтр - 1];
НСтрСтр = Формат(НСтр, "ЧГ=0");
Для НомерГрафы = ГраФаНач По ГраФаКон Цикл
ИмяКолонки = ИмяГруппы + Формат(НомерГрафы, "ЧЦ=2; ЧВН=");
Если СтруктураГруппы[0].Свойство(ИмяКолонки) Тогда
ИмяЯчейки = ИмяКолонки + "_" + НСтрСтр;
ОбластьЯчейки = ТекТабличноеПоле.Области[ИмяЯчейки];
Если ОбластьЯчейки.СодержитЗначение = Истина Тогда
ЗначениеЯчейки = ОбластьЯчейки.Значение;
Иначе
ЗначениеЯчейки = ОбластьЯчейки.Текст;
КонецЕсли;
ТекСтрокаТаблицы[ИмяКолонки] = ЗначениеЯчейки;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ВывестиРазделВТабличныйДокументНаСервере(ИмяГруппы, СтруктураГруппы) Экспорт
ВывестиРазделВТабличныйДокумент(ЭтотОбъект, ИмяГруппы, СтруктураГруппы);
КонецПроцедуры
&НаКлиенте
Процедура ВывестиРазделВТабличныйДокументНаКлиенте(ИмяГруппы, СтруктураГруппы) Экспорт
ВывестиРазделВТабличныйДокумент(ЭтотОбъект, ИмяГруппы, СтруктураГруппы);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ВывестиРазделВТабличныйДокумент(Форма, ИмяГруппы, СтруктураГруппы)
Перем ИсходноеКоличествоСтрокГруппы;
Форма.мСтруктураИсхКолвоСтрокРазделов.Свойство(ИмяГруппы, ИсходноеКоличествоСтрокГруппы);
ТекущееКоличествоСтрокГруппы = СтруктураГруппы.Количество();
ТекТабличноеПолеИмя = "ПолеТабличногоДокументаФормаОтчета";
ТекТабличноеПоле = Форма[ТекТабличноеПолеИмя];
Если ТекущееКоличествоСтрокГруппы > ИсходноеКоличествоСтрокГруппы Тогда
РегламентированнаяОтчетностьКлиентСервер.ДобавитьНеобходимоеКоличествоДопСтрок(
Форма, ТекТабличноеПоле, ТекТабличноеПолеИмя, ИсходноеКоличествоСтрокГруппы,
ТекущееКоличествоСтрокГруппы, ИмяГруппы, СтруктураГруппы);
Форма[ТекТабличноеПолеИмя] = ТекТабличноеПоле;
КонецЕсли;
ТекТабличноеПоле = Форма[ТекТабличноеПолеИмя];
Если ИмяГруппы = "П0010010002" Тогда
ГраФаНач = 1;
ГраФаКон = 9;
ИначеЕсли ИмяГруппы = "П0010020002" Тогда
ГраФаНач = 1;
ГраФаКон = 11;
КонецЕсли;
Для Каждого СтрокаТаблицы Из СтруктураГруппы Цикл
Для НомерГрафы = ГраФаНач По ГраФаКон Цикл
КолонкаТаблицыИмя = ИмяГруппы + Формат(НомерГрафы, "ЧЦ=2; ЧВН=");
Если СтруктураГруппы[0].Свойство(КолонкаТаблицыИмя) Тогда
НомерСтрокиВТаблице = СтруктураГруппы.Индекс(СтрокаТаблицы);
НомерСтрокиВФормеТаблицы = НомерСтрокиВТаблице + 1;
ИмяЯчейки = КолонкаТаблицыИмя + "_" + НомерСтрокиВФормеТаблицы;
ОбластьЯчейкиТаблицы = ТекТабличноеПоле.Области[ИмяЯчейки];
ЗначениеЯчейки = СтрокаТаблицы[КолонкаТаблицыИмя];
Если ОбластьЯчейкиТаблицы.СодержитЗначение Тогда
ОбластьЯчейкиТаблицы.Значение = ЗначениеЯчейки;
Иначе
ОбластьЯчейкиТаблицы.Текст = ЗначениеЯчейки;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция РазделТекущейОбласти(Форма, ТекущаяОбласть)
Если ТекущаяОбласть = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
ИмяТекущейОбласти = СтрЗаменить(ТекущаяОбласть.Имя, "ДобавитьСтрокуЗначок", "ДобавитьСтроку");
Если ИмяТекущейОбласти = "ДобавитьСтроку1" Тогда
Возврат Форма.СтруктураРеквизитовФормы.мИдГруппы1;
ИначеЕсли ИмяТекущейОбласти = "ДобавитьСтроку2" Тогда
Возврат Форма.СтруктураРеквизитовФормы.мИдГруппы2;
ИначеЕсли СтрНайти(ИмяТекущейОбласти, "УдалитьСтроку") > 0 Тогда
ИмяТекущейОбласти = СтрЗаменить(ИмяТекущейОбласти, "УдалитьСтроку", "");
КонецЕсли;
ИмяАктивногоРаздела = Лев(ИмяТекущейОбласти, 13);
Для Каждого ЭлементСтруктуры Из Форма.мСтруктураМногострочныхРазделов Цикл
ИмяГруппы = ЭлементСтруктуры.Ключ;
СтруктураГруппы = Форма[ЭлементСтруктуры.Значение];
Если СтруктураГруппы[0].Свойство(ИмяАктивногоРаздела) Тогда
Возврат ИмяГруппы;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ПеренумерацияСтрокТаблицы(ЭтотОбъект)
Области = ЭтотОбъект.ПолеТабличногоДокументаФормаОтчета.Области;
Инд = 0;
Пока Истина Цикл
Инд = Инд + 1;
Обл = Области.Найти("П001001000208_" + Формат(Инд,"ЧГ="));
Если Обл = Неопределено Тогда
Прервать;
КонецЕсли;
Обл2 = Области.Найти("П001002000202_" + Формат(Инд,"ЧГ="));
НомерСтроки = Инд + 1;
Если НомерСтроки < 10 Тогда
Обл.Значение = Формат(НомерСтроки, "ЧЦ=2; ЧВН=");
Обл2.Значение = Формат(НомерСтроки, "ЧЦ=2; ЧВН=");
Иначе
Обл.Значение = Формат(НомерСтроки, "ЧГ=");
Обл2.Значение = Формат(НомерСтроки, "ЧГ=");
КонецЕсли;
Обл.Защита = Истина;
Обл2.Защита = Истина;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Функция СобратьДанныеТекущегоТаблПоляНаКлиенте(ИмяТабличногоПоля) Экспорт
Возврат РегламентированнаяОтчетностьКлиентСервер.СобратьДанныеТекущегоТаблПоля(ЭтотОбъект, ИмяТабличногоПоля);
КонецФункции
&НаСервере
Функция СобратьДанныеТекущегоТаблПоляНаСервере(ИмяТабличногоПоля) Экспорт
Возврат РегламентированнаяОтчетностьКлиентСервер.СобратьДанныеТекущегоТаблПоля(ЭтотОбъект, ИмяТабличногоПоля);
КонецФункции
&НаКлиенте
Процедура АктивизироватьЯчейку(Ячейка) Экспорт
ИмяПоляТабличногоДокумента = "ПолеТабличногоДокументаФормаОтчета";
НайденнаяОбласть = ЭтотОбъект[ИмяПоляТабличногоДокумента].Области.Найти(Ячейка.ИмяЯчейки);
Если НЕ НайденнаяОбласть = Неопределено Тогда
Элементы[ИмяПоляТабличногоДокумента].ТекущаяОбласть = НайденнаяОбласть;
ИначеЕсли Ячейка.СтрокаПП <> Неопределено И ЗначениеЗаполнено(Ячейка.СтрокаПП) Тогда
НайденнаяОбласть = ЭтотОбъект[ИмяПоляТабличногоДокумента].Области.Найти(Ячейка.ИмяЯчейки + Ячейка.СтрокаПП);
Если НЕ НайденнаяОбласть = Неопределено Тогда
Элементы[ИмяПоляТабличногоДокумента].ТекущаяОбласть = НайденнаяОбласть;
Иначе
НайденнаяОбласть = ЭтотОбъект[ИмяПоляТабличногоДокумента].Области.Найти(Ячейка.ИмяЯчейки + "_" + Ячейка.СтрокаПП);
Если НЕ НайденнаяОбласть = Неопределено Тогда
Элементы[ИмяПоляТабличногоДокумента].ТекущаяОбласть = НайденнаяОбласть;
КонецЕсли;
КонецЕсли;
Иначе
НайденнаяОбласть = ЭтотОбъект[ИмяПоляТабличногоДокумента].Области.Найти(Ячейка.ИмяЯчейки + "1");
Если НЕ НайденнаяОбласть = Неопределено Тогда
Элементы[ИмяПоляТабличногоДокумента].ТекущаяОбласть = НайденнаяОбласть;
Иначе
НайденнаяОбласть = ЭтотОбъект[ИмяПоляТабличногоДокумента].Области.Найти(Ячейка.ИмяЯчейки + "_1");
Если НЕ НайденнаяОбласть = Неопределено Тогда
Элементы[ИмяПоляТабличногоДокумента].ТекущаяОбласть = НайденнаяОбласть;
Иначе
Элементы[ИмяПоляТабличногоДокумента].ТекущаяОбласть =
ЭтотОбъект[ИмяПоляТабличногоДокумента].Область(Ячейка.ИмяЯчейки);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьБланк(Команда)
Отказ = Ложь;
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("Команда", Команда);
ОписаниеОповещения = Новый ОписаниеОповещения("ПоказатьБланкЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ОнлайнСервисыРегламентированнойОтчетностиКлиент.ПередПечатьюРегламентированногоОтчета(
ОписаниеОповещения, ЭтотОбъект, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьБланкЗавершение(Отказ, ДополнительныеПараметры) Экспорт
Если Отказ Тогда
Возврат;
КонецЕсли;
Команда = ДополнительныеПараметры.Команда;
Если Команда <> Неопределено Тогда
Печать(Команда.Имя);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Печать(ВидПечати, НеИзФормыОтчета = Ложь) Экспорт
Состояние(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='%1. Формируется печатная форма...'"), Заголовок), , , БиблиотекаКартинок.Печать);
Если НЕ ПечатьНаСервере(ВидПечати) Тогда
Возврат;
КонецЕсли;
РегламентированнаяОтчетностьКлиент.ОткрытьФормуПредварительногоПросмотра(
ЭтотОбъект, ВидПечати, Неопределено, СтруктураРеквизитовФормы.СписокПечатаемыхЛистов);
КонецПроцедуры
&НаСервере
Функция ПечатьНаСервере(ВидПечати)
Если НЕ РегламентированнаяОтчетность.ПринтерДоступен() Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = НСтр("ru='Перед формированием печатных форм необходимо определить в системе принтер и задать его в качестве используемого по умолчанию!'");
Сообщение.Сообщить();
Возврат Ложь;
КонецЕсли;
СтруктураРеквизитовФормы.мПечатныеФормы.Очистить();
ТабличныйДокумент = ЭтотОбъект["ПолеТабличногоДокументаФормаОтчета"];
ПечатнаяФорма = РегламентированнаяОтчетность.НоваяСтраница();
ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть1а"));
ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть1б"));
СтруктураРеквизитовФормы.мПечатныеФормы.Добавить(ПечатнаяФорма, "Форма П-4");
МассивПроверки = Новый Массив;
ПечатнаяФорма = РегламентированнаяОтчетность.НоваяСтраница();
ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть1_1"));
ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть1_2"));
ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть1_3"));
ВерхМногострочнойЧасти = ТабличныйДокумент.Области.ОсновнаяЧасть1_3.Низ + 1;
НизМногострочнойЧасти = ТабличныйДокумент.Области.ДобавлениеСтроки1.Верх - 1;
ТекущийВерх = ВерхМногострочнойЧасти;
Пока ТекущийВерх <= НизМногострочнойЧасти Цикл
МассивПроверки.Очистить();
ТекущаяОбластьМногострочнойЧасти = ПолеТабличногоДокументаФормаОтчета.ПолучитьОбласть(ТекущийВерх, , ТекущийВерх);
МассивПроверки.Добавить(ТекущаяОбластьМногострочнойЧасти);
МассивПроверки.Добавить(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть1_4"));
Если ПечатнаяФорма.ПроверитьВывод(МассивПроверки) Тогда
ПечатнаяФорма.Вывести(ТекущаяОбластьМногострочнойЧасти);
Иначе
СтруктураРеквизитовФормы.мПечатныеФормы.Добавить(ПечатнаяФорма, "Форма П-4");
ПечатнаяФорма = РегламентированнаяОтчетность.НоваяСтраница();
ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть1_2"));
ПечатнаяФорма.Вывести(ТекущаяОбластьМногострочнойЧасти);
КонецЕсли;
ТекущийВерх = ТекущийВерх + 1;
КонецЦикла;
ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть1_4"));
СтруктураРеквизитовФормы.мПечатныеФормы.Добавить(ПечатнаяФорма, "Форма П-4");
ПечатнаяФорма = РегламентированнаяОтчетность.НоваяСтраница();
ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть2_1"));
ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть2_2"));
ВерхМногострочнойЧасти = ТабличныйДокумент.Области.ОсновнаяЧасть2_2.Низ + 1;
НизМногострочнойЧасти = ТабличныйДокумент.Области.ДобавлениеСтроки2.Верх - 1;
ТекущийВерх = ВерхМногострочнойЧасти;
Пока ТекущийВерх <= НизМногострочнойЧасти Цикл
МассивПроверки.Очистить();
ТекущаяОбластьМногострочнойЧасти = ПолеТабличногоДокументаФормаОтчета.ПолучитьОбласть(ТекущийВерх, , ТекущийВерх);
МассивПроверки.Добавить(ТекущаяОбластьМногострочнойЧасти);
МассивПроверки.Добавить(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть2_3"));
Если ПечатнаяФорма.ПроверитьВывод(МассивПроверки) Тогда
ПечатнаяФорма.Вывести(ТекущаяОбластьМногострочнойЧасти);
Иначе
СтруктураРеквизитовФормы.мПечатныеФормы.Добавить(ПечатнаяФорма, "Форма П-4");
ПечатнаяФорма = РегламентированнаяОтчетность.НоваяСтраница();
ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть2_1"));
ПечатнаяФорма.Вывести(ТекущаяОбластьМногострочнойЧасти);
КонецЕсли;
ТекущийВерх = ТекущийВерх + 1;
КонецЦикла;
ПечатнаяФорма.Вывести(ТабличныйДокумент.ПолучитьОбласть("ОсновнаяЧасть2_3"));
СтруктураРеквизитовФормы.мПечатныеФормы.Добавить(ПечатнаяФорма, "Форма П-4");
РегламентированнаяОтчетностьКлиентСервер.ПроставлениеНомеровЛистов(
ЭтотОбъект, , СтруктураРеквизитовФормы.СписокПечатаемыхЛистов);
Возврат Истина;
КонецФункции
&НаКлиенте
Процедура СравнитьОтчеты(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("СравнитьОтчетыЗавершение", ЭтотОбъект);
Если Модифицированность Тогда
СохранитьНаКлиенте(, ОписаниеОповещения);
Иначе
ВыполнитьОбработкуОповещения(ОписаниеОповещения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзФайла(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьИзФайлаЗавершение", ЭтотОбъект);
Отказ = Ложь;
ОнлайнСервисыРегламентированнойОтчетностиКлиент.ПередЗагрузкойРегламентированногоОтчета(
ОписаниеОповещения, ЭтотОбъект, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура Выгрузить(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("ВыгрузитьЗавершение", ЭтотОбъект);
Отказ = Ложь;
ОнлайнСервисыРегламентированнойОтчетностиКлиент.ПередВыгрузкойРегламентированногоОтчета(
ОписаниеОповещения, ЭтотОбъект, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура СравнитьОтчетыЗавершение(Результат, ДополнительныеПараметры) Экспорт
РегламентированнаяОтчетностьСравнениеКлиент.СравнитьОтчеты(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Функция СравнениеОтчетов(ДанныеДляСравнения) Экспорт
Если Модифицированность Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = СтрШаблон(НСтр("ru='Отчет ""%1"" не сохранен.'"), ЭтотОбъект.Заголовок);
Сообщение.Сообщить();
Возврат Ложь;
КонецЕсли;
Возврат СравнениеОтчетовНаСервере(ДанныеДляСравнения);
КонецФункции
&НаСервере
Функция СравнениеОтчетовНаСервере(ДанныеДляСравнения)
ПараметрыОтчета = СформироватьСтруктуруПараметров();
ДеревоДляСравнения = РегламентированнаяОтчетность.ПолучитьДеревоВыгрузки(ЭтотОбъект,
СтруктураРеквизитовФормы["ИмяМакетаСхемыВыгрузки"]);
Результат = РегламентированнаяОтчетностьСравнение.СравнениеОтчетов(
ЭтотОбъект, ПараметрыОтчета, ДанныеДляСравнения, ДеревоДляСравнения);
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ЗагрузитьИзФайлаЗавершение(Отказ, ДополнительныеПараметры) Экспорт
Если Отказ Тогда
Возврат;
КонецЕсли;
ЗагрузитьИзФайлаОтчет();
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзФайлаОтчет() Экспорт
ОписаниеОповещения = Новый ОписаниеОповещения("ЗагрузитьИзФайлаОтчетЗавершение", ЭтотОбъект);
Если Модифицированность Тогда
СохранитьНаКлиенте(,ОписаниеОповещения);
Иначе
ВыполнитьОбработкуОповещения(ОписаниеОповещения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзФайлаОтчетЗавершение(Результат, ДополнительныеПараметры) Экспорт
РегламентированнаяОтчетностьЗагрузкаКлиент.ЗагрузитьИзФайлаОтчет(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Функция ЗагрузкаОтчетаИзФайла(ДанныеДляЗагрузки) Экспорт
Если Модифицированность Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = СтрШаблон(НСтр("ru='Отчет ""%1"" не сохранен.'"), ЭтотОбъект.Заголовок);
Сообщение.Сообщить();
Возврат Ложь;
КонецЕсли;
Если НЕ ЗагрузкаОтчетаИзФайлаНаСервере(ДанныеДляЗагрузки) Тогда
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаСервере
Функция ЗагрузкаОтчетаИзФайлаНаСервере(ДанныеДляЗагрузки)
ПараметрыОтчета = СформироватьСтруктуруПараметров();
ДеревоДляЗагрузки = РегламентированнаяОтчетность.ПолучитьДеревоВыгрузки(ЭтотОбъект,
СтруктураРеквизитовФормы["ИмяМакетаСхемыВыгрузки"]);
Если НЕ РегламентированнаяОтчетностьЗагрузка.ЗагрузкаОтчетаИзФайла(
ЭтотОбъект, ПараметрыОтчета, ДанныеДляЗагрузки, ДеревоДляЗагрузки) Тогда
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаКлиенте
Процедура ВыгрузитьЗавершение(Отказ, ДополнительныеПараметры) Экспорт
Если Отказ Тогда
Возврат;
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ВыгрузитьИзФормыПослеСохраненияЗавершение", ЭтотОбъект);
Если Модифицированность Тогда
СохранитьНаКлиенте(, ОписаниеОповещения);
Иначе
ВыполнитьОбработкуОповещения(ОписаниеОповещения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьИзФормыПослеСохраненияЗавершение(Результат, ДополнительныеПараметры) Экспорт
ПараметрыВыгрузки = Неопределено;
ТекстВыгрузки = Неопределено;
Если НЕ УниверсальнаяВыгрузкаXMLПроверкаВозможностиВыгрузкиНаСервере(ТекстВыгрузки, ПараметрыВыгрузки) Тогда
ТекстВопроса = НСтр("ru='В ходе выгрузки были найдены ошибки.'");
КнопкиВопроса = Новый СписокЗначений;
КнопкиВопроса.Добавить(КодВозвратаДиалога.Да, "Продолжить выгрузку");
КнопкиВопроса.Добавить(КодВозвратаДиалога.Нет, "Показать ошибки");
ОписаниеОповещения = Новый ОписаниеОповещения("ВыгрузитьИзФормыЗавершение", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, КнопкиВопроса, , КодВозвратаДиалога.Нет);
Иначе
ВыгрузитьОтчет();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьИзФормыЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
ВыгрузитьОтчет(Истина);
Иначе
СпДокОсн = Новый СписокЗначений;
СпДокОсн.Добавить(СтруктураРеквизитовФормы.мСохраненныйДок);
ОшибкиОтчета = Новый Массив;
РегламентированнаяОтчетностьКлиент.ПроверитьРегламентированныеОтчеты(СпДокОсн, ОшибкиОтчета);
РегламентированнаяОтчетностьКлиент.ОткрытьФормуНавигацииПоОшибкамВыгрузки(ОшибкиОтчета);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьВыгрузку(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьВыгрузкуЗавершение", ЭтотОбъект);
Отказ = Ложь;
ОнлайнСервисыРегламентированнойОтчетностиКлиент.ПередВыгрузкойРегламентированногоОтчета(
ОписаниеОповещения, ЭтотОбъект, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьВыгрузкуЗавершение(Отказ, ДополнительныеПараметры) Экспорт
Если Отказ Тогда
Возврат;
КонецЕсли;
ПроверитьВыгрузкуОтчета();
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьВыгрузкуОтчета()
ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьВыгрузкуОтчетаЗавершение", ЭтотОбъект);
Если НЕ ЗначениеЗаполнено(СтруктураРеквизитовФормы.Организация) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = НСтр("ru='Организация не выбрана! Выгрузка невозможна.'");
Сообщение.Сообщить();
Возврат;
КонецЕсли;
Если Модифицированность Тогда
СохранитьНаКлиенте(,ОписаниеОповещения);
Иначе
ВыполнитьОбработкуОповещения(ОписаниеОповещения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьВыгрузкуОтчетаЗавершение(Результат, ДополнительныеПараметры) Экспорт
ФормаВыгрузкиРеглОтчета = ПолучитьФорму(
"Документ.ВыгрузкаРегламентированныхОтчетов.Форма.ФормаДокумента", , ЭтотОбъект);
СпДокОсн = Новый СписокЗначений;
СпДокОсн.Добавить(СтруктураРеквизитовФормы.мСохраненныйДок);
ФормаВыгрузкиРеглОтчета.Проверить(СпДокОсн);
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьОтчет(ВыгружатьСОшибками = Ложь) Экспорт
ДополнительныеПараметры = Новый Структура("ВыгружатьСОшибками", ВыгружатьСОшибками);
ОписаниеОповещения = Новый ОписаниеОповещения("ВыгрузитьОтчетЗавершение", ЭтотОбъект, ДополнительныеПараметры);
Если НЕ ЗначениеЗаполнено(СтруктураРеквизитовФормы.Организация) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = НСтр("ru='Организация не выбрана! Выгрузка невозможна.'");
Сообщение.Сообщить();
Возврат;
КонецЕсли;
Если Модифицированность Тогда
СохранитьНаКлиенте(, ОписаниеОповещения);
Иначе
ВыполнитьОбработкуОповещения(ОписаниеОповещения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыгрузитьОтчетЗавершение(Результат, ДополнительныеПараметры) Экспорт
ФормаВыгрузкиРеглОтчета = ПолучитьФорму(
"Документ.ВыгрузкаРегламентированныхОтчетов.Форма.ФормаДокумента", , ЭтотОбъект);
СпДокОсн = Новый СписокЗначений;
СпДокОсн.Добавить(СтруктураРеквизитовФормы.мСохраненныйДок);
ФормаВыгрузкиРеглОтчета.СформироватьИЗаписать(СпДокОсн,,,,,,,,,ДополнительныеПараметры.ВыгружатьСОшибками);
КонецПроцедуры
&НаСервере
Функция ПроверитьПоказатели() Экспорт
ДеревоВыгрузки = РегламентированнаяОтчетность.ПолучитьДеревоВыгрузки(ЭтотОбъект,
СтруктураРеквизитовФормы["ИмяМакетаСхемыВыгрузки"]);
ПараметрыВыгрузки = СформироватьСтруктуруПараметров();
Если НЕ ПроверитьВозможностьВыгрузки(ПараметрыВыгрузки, ДеревоВыгрузки) Тогда
Возврат Ложь;
КонецЕсли;
ЗаполнитьДанными(ДеревоВыгрузки, ПараметрыВыгрузки);
Если НЕ РегламентированнаяОтчетность.ПроверитьДанные(ЭтотОбъект, ДеревоВыгрузки) Тогда
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаСервере
Функция ТекущийФорматВыгрузки(Организация)
Возврат РегламентированнаяОтчетность.ФорматВыгрузкиСтатистическойОтчетностиВЭлектронномВиде(Организация);
КонецФункции
&НаКлиенте
Функция УниверсальнаяВыгрузка(ТекстВыгрузки = Неопределено, ПроверятьБлокировки = Истина, ИмяФайлаВыгрузки = "", ВыгружатьСОшибками = Ложь) Экспорт
Перем ПараметрыВыгрузки;
Если ТекущийФорматВыгрузки(СтруктураРеквизитовФормы.Организация) = Неопределено Тогда
РегламентированнаяОтчетностьКлиент.ПоказатьФормуНастроекФорматаВыгрузкиСтатистическойОтчетностиВЭлектронномВиде(
СтруктураРеквизитовФормы.Организация, Ложь, Истина);
Возврат "НеВыбранФормат";
КонецЕсли;
Если Модифицированность Тогда
Если СтрНайти(Заголовок, СтруктураРеквизитовФормы.СтрПериодОтчета) = 0 Тогда
ТекстЗаголовка = Заголовок + " за " + СтруктураРеквизитовФормы.СтрПериодОтчета;
Иначе
ТекстЗаголовка = Заголовок;
КонецЕсли;
ОргСтр = " (" + СтруктураРеквизитовФормы.НаимОрганизации + ")";
Если СтрНайти(Заголовок, ОргСтр) = 0 Тогда
ТекстЗаголовка = ТекстЗаголовка + ОргСтр;
КонецЕсли;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Отчет """ + ТекстЗаголовка + """ не сохранен.";
Сообщение.Сообщить();
Возврат Ложь;
КонецЕсли;
Возврат УниверсальнаяВыгрузкаНаСервере(ВыгружатьСОшибками, ТекстВыгрузки, ПараметрыВыгрузки, ИмяФайлаВыгрузки);
КонецФункции
&НаСервере
Функция УниверсальнаяВыгрузкаНаСервере(ВыгружатьСОшибками, ТекстВыгрузки, ПараметрыВыгрузки, ИмяФайлаВыгрузки)
Если НЕ ВыгружатьСОшибками
И НЕ УниверсальнаяВыгрузкаXMLПроверкаВозможностиВыгрузкиНаСервере(ТекстВыгрузки, ПараметрыВыгрузки) Тогда
Возврат Ложь;
КонецЕсли;
Если НЕ УниверсальнаяВыгрузкаXMLПроверкаДанныхНаСервере(ТекстВыгрузки, ПараметрыВыгрузки) Тогда
Возврат Ложь;
КонецЕсли;
ИмяФайлаВыгрузки = ПараметрыВыгрузки.ИмяФайла;
Возврат Истина;
КонецФункции
&НаСервере
Функция УниверсальнаяВыгрузкаXMLПроверкаВозможностиВыгрузкиНаСервере(ТекстВыгрузки, ПараметрыВыгрузки) Экспорт
ПараметрыВыгрузки = СформироватьСтруктуруПараметров();
ДеревоВыгрузки = РегламентированнаяОтчетность.ПолучитьДеревоВыгрузки(ЭтотОбъект,
СтруктураРеквизитовФормы["ИмяМакетаСхемыВыгрузки"]);
Если НЕ ПроверитьВозможностьВыгрузки(ПараметрыВыгрузки, ДеревоВыгрузки) Тогда
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаСервере
Функция УниверсальнаяВыгрузкаXMLПроверкаДанныхНаСервере(ТекстВыгрузки, ПараметрыВыгрузки) Экспорт
Если ПараметрыВыгрузки = Неопределено Тогда
ПараметрыВыгрузки = СформироватьСтруктуруПараметров();
КонецЕсли;
ДеревоВыгрузки = РегламентированнаяОтчетность.ПолучитьДеревоВыгрузки(ЭтотОбъект,
СтруктураРеквизитовФормы["ИмяМакетаСхемыВыгрузки"]);
РегламентированнаяОтчетность.ИзменитьВерсиюФорматаСПроверкойСовместимостиШаблонов(ЭтотОбъект,
СтруктураРеквизитовФормы["ИмяМакетаАтрибутовВыгрузки"],
СтруктураРеквизитовФормы["ИмяМакетаШаблона"], ПараметрыВыгрузки);
ЗаполнитьДанными(ДеревоВыгрузки, ПараметрыВыгрузки);
Если НЕ РегламентированнаяОтчетность.ПроверитьДанные(ЭтотОбъект, ДеревоВыгрузки) Тогда
КоллекцияСписковВыбора = "";
Возврат Ложь;
КонецЕсли;
ТекстВыгрузки = РегламентированнаяОтчетность.ВыгрузитьДеревоВXML(ДеревоВыгрузки, ПараметрыВыгрузки);
КоллекцияСписковВыбора = "";
Возврат Истина;
КонецФункции
&НаСервере
Функция ПроверитьВозможностьВыгрузки(ПараметрыВыгрузки, ДеревоВыгрузки)
СтатусПроверки = Истина;
ИмяПоляТаблДокумента = "ПолеТабличногоДокументаФормаОтчета";
Если ПустаяСтрока(ПараметрыВыгрузки.ОКПО) Тогда
РегламентированнаяОтчетность.СообщитьВТаблицуСообщений(ЭтотОбъект,
"Не задан код ОКПО организации!", ИмяПоляТаблДокумента, "ОргКодОКПО");
СтатусПроверки = Ложь;
КонецЕсли;
Если ПустаяСтрока(ПараметрыВыгрузки.ОргНазв) Тогда
РегламентированнаяОтчетность.СообщитьВТаблицуСообщений(ЭтотОбъект,
"Не задано наименование организации!", ИмяПоляТаблДокумента, "ОргНазв");
СтатусПроверки = Ложь;
КонецЕсли;
Если ПустаяСтрока(ПараметрыВыгрузки.ОргИсполнитель) Тогда
РегламентированнаяОтчетность.СообщитьВТаблицуСообщений(ЭтотОбъект,
"Не указаны Ф.И.О. должностного лица, ответственного за предоставление статистической информации!",
ИмяПоляТаблДокумента, "ОргИсполнитель");
СтатусПроверки = Ложь;
КонецЕсли;
Если ПустаяСтрока(ПараметрыВыгрузки.ОргДолжностьИсп) Тогда
РегламентированнаяОтчетность.СообщитьВТаблицуСообщений(ЭтотОбъект,
"Не указана должность лица, ответственного за предоставление статистической информации!",
ИмяПоляТаблДокумента, "ОргДолжностьИсп");
СтатусПроверки = Ложь;
КонецЕсли;
Если ПустаяСтрока(ПараметрыВыгрузки.ОргТелефонИсп) Тогда
РегламентированнаяОтчетность.СообщитьВТаблицуСообщений(ЭтотОбъект,
"Не указан телефон должностного лица, ответственного за предоставление статистической информации!",
ИмяПоляТаблДокумента, "ОргТелефонИсп");
СтатусПроверки = Ложь;
КонецЕсли;
Если ПустаяСтрока(ПараметрыВыгрузки.ОргЭлектроннаяПочта) Тогда
РегламентированнаяОтчетность.СообщитьВТаблицуСообщений(ЭтотОбъект,
"Не указан адрес электронной почты!", ИмяПоляТаблДокумента, "ОргАдресЭлектроннойПочты");
СтатусПроверки = Ложь;
КонецЕсли;
Если Не ЗначениеЗаполнено(мДанныеОтчета.ПолеТабличногоДокументаФормаОтчета.ДатаСоставленияОтчета) Тогда
РегламентированнаяОтчетность.СообщитьВТаблицуСообщений(ЭтотОбъект,
"Не указана дата составления документа!", ИмяПоляТаблДокумента, "ДатаСоставленияОтчета");
СтатусПроверки = Ложь;
КонецЕсли;
Возврат СтатусПроверки;
КонецФункции
&НаСервере
Процедура ЗаполнитьДанными(ДеревоВыгрузки, ПараметрыВыгрузки) Экспорт
РегламентированнаяОтчетность.ОбработатьУсловныеЭлементы(ЭтотОбъект, ПараметрыВыгрузки, ДеревоВыгрузки);
ЗаполнитьДаннымиУзел(ПараметрыВыгрузки, ДеревоВыгрузки);
РегламентированнаяОтчетность.ОтсечьНезаполненныеНеобязательныеУзлыСтатистики(ДеревоВыгрузки);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДаннымиУзел(ПараметрыВыгрузки, Узел, НомерСтроки = Неопределено)
СтрокиУзла = Новый Массив;
Для Каждого Стр Из Узел.Строки Цикл
СтрокиУзла.Добавить(Стр);
КонецЦикла;
Для Каждого Стр из СтрокиУзла Цикл
Если ПустаяСтрока(Стр.ЗначениеПоУмолчанию) Тогда
Если НЕ ПустаяСтрока(Стр.Ключ) Тогда
ПолныйКодПоказателя = Стр.Ключ + ?(ЗначениеЗаполнено(НомерСтроки), "_" + Формат(НомерСтроки, "ЧГ="), "");
ЗначениеПоказателя = Неопределено;
Если ПараметрыВыгрузки.Свойство(ПолныйКодПоказателя, ЗначениеПоказателя) Тогда
ФорматПредставленияНуля = Неопределено;
Если ПараметрыВыгрузки.Свойство("ЧН" + ПолныйКодПоказателя, ФорматПредставленияНуля) Тогда
РегламентированнаяОтчетность.ВывестиПоказательСтатистикиВXML(Стр, ЗначениеПоказателя, ФорматПредставленияНуля);
Иначе
РегламентированнаяОтчетность.ВывестиПоказательСтатистикиВXML(Стр, ЗначениеПоказателя);
КонецЕсли;
Иначе
РегламентированнаяОтчетность.ВывестиПоказательСтатистикиВXML(Стр, "");
КонецЕсли;
Иначе
Стр.Значение = "";
КонецЕсли;
ИначеЕсли Лев(Стр.ЗначениеПоУмолчанию, 1) = "&" Тогда
РегламентированнаяОтчетность.ВывестиПоказательСтатистикиВXML(
Стр, ПараметрыВыгрузки[Сред(Стр.ЗначениеПоУмолчанию, 2)]);
Иначе
Стр.Значение = Стр.ЗначениеПоУмолчанию;
Если НЕ ПустаяСтрока(Стр.Ключ) Тогда
ПолныйКодПоказателя = Стр.Ключ + ?(ЗначениеЗаполнено(НомерСтроки), "_" + Формат(НомерСтроки, "ЧГ="), "");
ЗначениеПоказателя = Неопределено;
Если ПараметрыВыгрузки.Свойство(ПолныйКодПоказателя, ЗначениеПоказателя) Тогда
ФорматПредставленияНуля = Неопределено;
Если ПараметрыВыгрузки.Свойство("ЧН" + ПолныйКодПоказателя, ФорматПредставленияНуля) Тогда
РегламентированнаяОтчетность.ВывестиПоказательСтатистикиВXML(Стр, ЗначениеПоказателя, ФорматПредставленияНуля);
Иначе
РегламентированнаяОтчетность.ВывестиПоказательСтатистикиВXML(Стр, ЗначениеПоказателя);
КонецЕсли;
Иначе
РегламентированнаяОтчетность.ВывестиПоказательСтатистикиВXML(Стр, "");
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Стр.Тип = "С" ИЛИ Стр.Тип = "C" Тогда
Если Стр.Многострочность Тогда
НомСтр = 1;
ПодчиненныйЭлемент = РегламентированнаяОтчетность.ПолучитьПервыйПодчиненныйУзелСЗаполненнымКлючом(Стр);
КлючПодчиненногоЭлемента = ПодчиненныйЭлемент.Ключ;
Пока РегламентированнаяОтчетностьКлиентСервер.СвойствоОпределено(ПараметрыВыгрузки, КлючПодчиненногоЭлемента + "_" + Формат(НомСтр, "ЧГ=")) Цикл
УзелСоответствующийСтроке = РегламентированнаяОтчетность.СкопироватьУзел(Узел, Стр);
ЗаполнитьДаннымиУзел(ПараметрыВыгрузки, УзелСоответствующийСтроке, НомСтр);
НомСтр = НомСтр + 1;
КонецЦикла;
Иначе
ЗаполнитьДаннымиУзел(ПараметрыВыгрузки, Стр, НомерСтроки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция СформироватьИмяФайла(ПараметрыВыгрузки, ДопАтрибуты)
Перем ПолученноеЗначение;
КодОКУД = ДопАтрибуты.OKUD;
КодФормы = ДопАтрибуты.idf;
Периодичность = ДопАтрибуты.idp;
КодОКПО = ПараметрыВыгрузки.ОКПО;
РасчетныйГод = ПараметрыВыгрузки.РасчПериод;
ОтчетныйПериод = ПараметрыВыгрузки.ОтчПериод;
ПараметрыВыгрузки.Свойство("ОКФС", ПолученноеЗначение);
КодОКФС = ПолученноеЗначение;
ПараметрыВыгрузки.Свойство("ОКВЭД", ПолученноеЗначение);
КодОКВЭД = СтрЗаменить(ПолученноеЗначение, ".", "-");
КодыИФ = Новый Структура;
КодыИФ.Вставить("Документ", СтруктураРеквизитовФормы.мСохраненныйДок);
КодыИФ.Вставить("КодФормы", КодФормы);
КодыИФ.Вставить("Периодичность", Периодичность);
КодыИФ.Вставить("ОтчетныйПериод", ОтчетныйПериод);
КодыИФ.Вставить("ДатаВыгрузки", "");
РегламентированнаяОтчетность.КодыДляИмениФайлаВФорматеВыгрузки(КодыИФ);
Если ПустаяСтрока(КодыИФ.ДатаВыгрузки) Тогда
ИмяФайлаXML = КодОКУД + "_"
+ КодФормы + "_"
+ Периодичность + "_"
+ КодОКПО + "_"
+ РасчетныйГод + "_"
+ ОтчетныйПериод
+ ?(ПустаяСтрока(КодОКФС), "", "_" + КодОКФС)
+ ?(ПустаяСтрока(КодОКВЭД), "", "_" + КодОКВЭД) + ".xml";
Иначе
ИмяФайлаXML = КодОКУД + "_"
+ КодыИФ.КодФормы + "_"
+ КодыИФ.Периодичность + "_"
+ КодОКПО + "_"
+ РасчетныйГод + "_"
+ КодыИФ.ОтчетныйПериод + "__"
+ КодыИФ.ДатаВыгрузки + ".xml";
КонецЕсли;
Возврат ИмяФайлаXML;
КонецФункции
&НаСервере
Функция СформироватьСтруктуруПараметров() Экспорт
Перем ПолученноеЗначение;
РегламентированнаяОтчетность.СформироватьСтруктуруПоказателей(ЭтотОбъект);
ТабДокумент = мДанныеОтчета.ПолеТабличногоДокументаФормаОтчета;
ДопАтрибуты = РегламентированнаяОтчетность.СформироватьСтруктуруДопАтрибутов(ИмяФормы,
СтруктураРеквизитовФормы["ИмяМакетаАтрибутовВыгрузки"]);
СтрокаСведений = "ФИОРук, ОКВЭД2, ОКФС";
СведенияОбОрганизации = РегламентированнаяОтчетностьВызовСервера.ПолучитьСведенияОбОрганизации(
СтруктураРеквизитовФормы.Организация, СтруктураРеквизитовФормы.мСохраненныйДок.ДатаПодписи, СтрокаСведений);
ПараметрыВыгрузки = Новый Структура;
ДопАтрибуты.Свойство("code", ПолученноеЗначение);
ПараметрыВыгрузки.Вставить("КодШаблона", ПолученноеЗначение);
ДопАтрибуты.Свойство("idf", ПолученноеЗначение);
ПараметрыВыгрузки.Вставить("КодФормы", ПолученноеЗначение);
ДопАтрибуты.Свойство("shifr", ПолученноеЗначение);
ПараметрыВыгрузки.Вставить("ШифрФормы", ПолученноеЗначение);
ДопАтрибуты.Свойство("version", ПолученноеЗначение);
ПараметрыВыгрузки.Вставить("ВерсияШаблона", ПолученноеЗначение);
ДопАтрибуты.Свойство("format_version", ПолученноеЗначение);
ПараметрыВыгрузки.Вставить("ВерсияФормата", ПолученноеЗначение);
ОтчПериод = Месяц(СтруктураРеквизитовФормы.мСохраненныйДок.ДатаОкончания);
РасчПериод = Формат(Год(СтруктураРеквизитовФормы.мСохраненныйДок.ДатаОкончания),"ЧГ=0");
ПараметрыВыгрузки.Вставить("ОКПО", СокрЛП(ТабДокумент.ОргКодОКПО));
ПараметрыВыгрузки.Вставить("ОтчПериод", СокрЛП(ОтчПериод));
ПараметрыВыгрузки.Вставить("РасчПериод", СокрЛП(РасчПериод));
ПараметрыВыгрузки.Вставить("ОргНазв", СокрЛП(ТабДокумент.ОргНазв));
ПараметрыВыгрузки.Вставить("ОргДиректор", СокрЛП(СведенияОбОрганизации.ФИОРук));
ПараметрыВыгрузки.Вставить("ОргДолжностьИсп", СокрЛП(ТабДокумент.ОргДолжностьИсп));
ПараметрыВыгрузки.Вставить("ОргИсполнитель", СокрЛП(ТабДокумент.ОргИсполнитель));
ПараметрыВыгрузки.Вставить("ОргТелефонИсп", СокрЛП(ТабДокумент.ОргТелефонИсп));
ПараметрыВыгрузки.Вставить("ОргЭлектроннаяПочта", СокрЛП(ТабДокумент.ОргАдресЭлектроннойПочты));
ДопАтрибуты.Свойство("idp", ПолученноеЗначение);
ПараметрыВыгрузки.Вставить("КодПериодичности", Число(СокрЛП(ПолученноеЗначение)));
ПараметрыВыгрузки.Вставить("Документ", СтруктураРеквизитовФормы.мСохраненныйДок);
РегламентированнаяОтчетность.АтрибутыВФорматеВыгрузки(ПараметрыВыгрузки);
ПараметрыВыгрузки.Вставить("ИмяФайла", СформироватьИмяФайла(ПараметрыВыгрузки, ДопАтрибуты));
ПараметрыВыгрузки.Вставить("ИмяКлючевогоУзлаСодержательнойЧасти", "row");
Возврат ПараметрыВыгрузки;
КонецФункции
&НаКлиенте
Процедура ЗаполнитьАвто(Команда)
Если РегламентированнаяОтчетностьКлиент.АвтозаполнениеБудетРеализованоВБудущихВерсиях(ЭтотОбъект) Тогда
Возврат;
КонецЕсли;
Отказ = Ложь;
РегламентированнаяОтчетностьКлиентПереопределяемый.ПроверитьВозможностьАвтоЗаполненияРеглОтчета(ИмяФормы, Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("Команда", Команда);
ОписаниеОповещения = Новый ОписаниеОповещения("ЗаполнитьАвтоЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ОнлайнСервисыРегламентированнойОтчетностиКлиент.ПередЗаполнениемРегламентированногоОтчета(ОписаниеОповещения, ЭтотОбъект, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьАвтоЗавершение(Отказ, ДополнительныеПараметры) Экспорт
Если Отказ Тогда
Возврат;
КонецЕсли;
Команда = ДополнительныеПараметры.Команда;
РезультатВыполнения = ЗаполнитьАвтоНаСервере();
Если НЕ РезультатВыполнения.ЗаданиеВыполнено Тогда
ОповещениеОЗавершении = Новый ОписаниеОповещения("ЗаполнитьАвтоЗавершениеПослеЗаполнения", ЭтотОбъект);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ТекстСообщения = НСтр("ru = 'Выполняется заполнение по данным информационной базы'");
ДлительныеОперацииКлиент.ОжидатьЗавершение(РезультатВыполнения, ОповещениеОЗавершении, ПараметрыОжидания);
КонецЕсли;
Если Элементы.Расшифровать.Видимость Тогда
Элементы.Расшифровать.Доступность = Истина;
Элементы.ТабличныйДокументКонтекстноеМенюРасшифровать.Доступность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьАвтоЗавершениеПослеЗаполнения(РезультатЗагрузки, ДополнительныеПараметры) Экспорт
ЭтотОбъект.Доступность = Истина;
Если РезультатЗагрузки = Неопределено
ИЛИ РезультатЗагрузки.Статус <> "Выполнено" Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Не удалось выполнить автозаполнение...'"));
Возврат;
КонецЕсли;
ЗагрузитьПодготовленныеДанные();
КонецПроцедуры
&НаСервере
Функция ЗаполнитьАвтоНаСервере()
ПоказателиОтчета = Новый Структура;
ЗаполнитьПоказателиОтчетаНаСервере(ПоказателиОтчета);
ПараметрыОтчета = Новый Структура();
ПараметрыОтчета.Вставить("Организации", Неопределено);
ПараметрыОтчета.Вставить("ЗаполняетсяВЦеломПоОрганизации", Ложь);
ПараметрыОтчета.Вставить("ЗаполняетсяПоКаждомуОП", Истина);
ПараметрыОтчета.Вставить("Организация", СтруктураРеквизитовФормы.Организация);
ПараметрыОтчета.Вставить("ДатаНачалаПериодаОтчета", СтруктураРеквизитовФормы.мДатаНачалаПериодаОтчета);
ПараметрыОтчета.Вставить("ДатаКонцаПериодаОтчета", СтруктураРеквизитовФормы.мДатаКонцаПериодаОтчета);
ПараметрыОтчета.Вставить("ОбособленноеПодразделение", ОбособленноеПодразделение);
ПараметрыОтчета.Вставить("ИсключитьДанныеОбособленныхПодразделений", ИсключитьДанныеОбособленныхПодразделений);
РегламентированнаяОтчетностьКлиентСервер.ДополнитьОпциональныеПараметрыОтчета(ЭтотОбъект, ПараметрыОтчета);
Контейнер = Новый Структура();
Для каждого ЭлементСтруктуры Из ПоказателиОтчета Цикл
Контейнер.Вставить(ЭлементСтруктуры.Ключ,
РегламентированнаяОтчетность.КонвертированныеЗначенияПоказателейСтатистическойОтчетности(ЭтотОбъект, ЭлементСтруктуры.Значение, Ложь));
КонецЦикла;
Контейнер.Вставить("ПолеТабличногоДокументаФормаОтчета_ДанныеДопСтрок1",
РегламентированнаяОтчетность.КонвертированныеЗначенияПоказателейСтатистическойОтчетности(
ЭтотОбъект, ЭтотОбъект[СтруктураРеквизитовФормы.мИдГруппы1], Ложь));
Контейнер.Вставить("ПолеТабличногоДокументаФормаОтчета_ДанныеДопСтрок2",
РегламентированнаяОтчетность.КонвертированныеЗначенияПоказателейСтатистическойОтчетности(
ЭтотОбъект, ЭтотОбъект[СтруктураРеквизитовФормы.мИдГруппы2], Ложь));
Если СтрЧислоВхождений(ИмяФормы, "ВнешнийОтчет.") > 0 Тогда
ЭтаФормаИмя = СтрЗаменить(ИмяФормы, "ВнешнийОтчет.", "");
ИначеЕсли СтрЧислоВхождений(ИмяФормы, "Отчет.") > 0 Тогда
ЭтаФормаИмя = СтрЗаменить(ИмяФормы, "Отчет.", "");
Иначе
ЭтаФормаИмя = ИмяФормы;
КонецЕсли;
ИДОтчета = Лев(ЭтаФормаИмя, СтрНайти(ЭтаФормаИмя, ".Форма.") - 1);
ИДРедакцииОтчета = Сред(ЭтаФормаИмя, СтрНайти(ЭтаФормаИмя, ".Форма.") + СтрДлина(".Форма."));
ПараметрыВыполненияВФоне = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполненияВФоне.ЗапуститьВФоне = Истина;
РезультатВыполнения = ДлительныеОперации.ВыполнитьВФоне("РегламентированнаяОтчетностьПереопределяемый.ЗаполнитьОтчетВФоне",
Новый Структура("ИДОтчета, ИДРедакцииОтчета, ПараметрыОтчета, Контейнер",
ИДОтчета, ИДРедакцииОтчета, ПараметрыОтчета, Контейнер), ПараметрыВыполненияВФоне);
РезультатВыполнения.Вставить("ЗаданиеВыполнено", НРег(РезультатВыполнения.Статус) = "выполнено");
АдресХранилища = РезультатВыполнения.АдресРезультата;
ИдентификаторЗадания = РезультатВыполнения.ИдентификаторЗадания;
Если РезультатВыполнения.ЗаданиеВыполнено Тогда
ЗагрузитьПодготовленныеДанные();
КонецЕсли;
Возврат РезультатВыполнения;
КонецФункции
&НаСервере
Процедура ВывестиМакетВТаблДокНаСервере()
ПолеТабличногоДокументаФормаОтчета.Очистить();
РегламентированнаяОтчетность.ВывестиШапкуРегистрацияРеспондента(ПолеТабличногоДокументаФормаОтчета);
ПолеТабличногоДокументаФормаОтчета.Вывести(ОбъектОтчета(ИмяФормы).ПолучитьМакет(
СтруктураРеквизитовФормы["ИмяМакетаТабличногоДокумента"]));
РегламентированнаяОтчетность.ВидимостьОбластиДанныеПредыдущегоПериода(ЭтотОбъект);
РегламентированнаяОтчетность.ОбновитьОбластьРегистрацииРеспондента(ЭтотОбъект);
ИмяГруппы = СтруктураРеквизитовФормы.мИдГруппы1;
СтруктураГруппы = Неопределено;
мСтруктураМногострочныхРазделов.Свойство(ИмяГруппы, СтруктураГруппы);
СтруктураГруппы = ЭтотОбъект[СтруктураГруппы];
ВывестиРазделВТабличныйДокументНаСервере(ИмяГруппы, СтруктураГруппы);
ИмяГруппы = СтруктураРеквизитовФормы.мИдГруппы2;
СтруктураГруппы = Неопределено;
мСтруктураМногострочныхРазделов.Свойство(ИмяГруппы, СтруктураГруппы);
СтруктураГруппы = ЭтотОбъект[СтруктураГруппы];
ВывестиРазделВТабличныйДокументНаСервере(ИмяГруппы, СтруктураГруппы);
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьПодготовленныеДанные()
Перем ТаблицаГруппы;
Контейнер = РегламентированнаяОтчетность.ПолучитьДанныеАвтозаполненияСтатистическогоОтчета(ЭтотОбъект);
Если Контейнер = Неопределено Тогда
Возврат;
КонецЕсли;
ИдентификаторЗадания = Неопределено;
ТекТабличноеПоле = ЭтотОбъект["ПолеТабличногоДокументаФормаОтчета"];
ИмяГруппы1 = СтруктураРеквизитовФормы.мИдГруппы1;
Если Контейнер.Свойство("ПолеТабличногоДокументаФормаОтчета_ДанныеДопСтрок1", ТаблицаГруппы) И ТаблицаГруппы <> Неопределено Тогда
КонвертированнаяТаблицаГруппы =
РегламентированнаяОтчетность.КонвертированныеЗначенияПоказателейСтатистическойОтчетности(ЭтотОбъект, ТаблицаГруппы);
ЗначениеВДанныеФормы(КонвертированнаяТаблицаГруппы, ЭтотОбъект[ИмяГруппы1]);
Пока ЭтотОбъект[ИмяГруппы1].Количество() < мСтруктураИсхКолвоСтрокРазделов[СтруктураРеквизитовФормы.мИдГруппы1] Цикл
ЭтотОбъект[ИмяГруппы1].Добавить();
КонецЦикла;
КонецЕсли;
ИмяГруппы2 = СтруктураРеквизитовФормы.мИдГруппы2;
Если Контейнер.Свойство("ПолеТабличногоДокументаФормаОтчета_ДанныеДопСтрок2", ТаблицаГруппы) И ТаблицаГруппы <> Неопределено Тогда
КонвертированнаяТаблицаГруппы =
РегламентированнаяОтчетность.КонвертированныеЗначенияПоказателейСтатистическойОтчетности(ЭтотОбъект, ТаблицаГруппы);
ЗначениеВДанныеФормы(КонвертированнаяТаблицаГруппы, ЭтотОбъект[ИмяГруппы2]);
Пока ЭтотОбъект[ИмяГруппы2].Количество() < мСтруктураИсхКолвоСтрокРазделов[СтруктураРеквизитовФормы.мИдГруппы2] Цикл
ЭтотОбъект[ИмяГруппы2].Добавить();
КонецЦикла;
КонецЕсли;
ВывестиМакетВТаблДокНаСервере();
Для Каждого ПоказателиСтраницы Из Контейнер Цикл
Если ТипЗнч(ПоказателиСтраницы.Значение) <> Тип("Структура") Тогда
Продолжить;
КонецЕсли;
ПоказателиТаблПоле = РегламентированнаяОтчетность.КонвертированныеЗначенияПоказателейСтатистическойОтчетности(
ЭтотОбъект, ПоказателиСтраницы.Значение);
Для Каждого Показатель Из ПоказателиТаблПоле Цикл
ИмяПоказателя = Показатель.Ключ;
ЗначениеПоказателя = Показатель.Значение;
РегламентированнаяОтчетность.УстановитьЗначениеИФорматВПоле(ТекТабличноеПоле, ИмяПоказателя, ЗначениеПоказателя);
КонецЦикла;
КонецЦикла;
РегламентированнаяОтчетность.УстановитьЦветФорматДоступностьЯчеек(ЭтотОбъект);
РасчетНаСервере();
Если Элементы.Расшифровать.Видимость Тогда
Элементы.Расшифровать.Доступность = Истина;
Элементы.ТабличныйДокументКонтекстноеМенюРасшифровать.Доступность = Истина;
КонецЕсли;
ПеренумерацияСтрокТаблицы(ЭтотОбъект);
Если ОбщегоНазначения.ПодсистемаСуществует("РегламентированнаяОтчетность.Интерфейс85") Тогда
МодульРегламентированнаяОтчетностьИнтерфейс85 = ОбщегоНазначения.ОбщийМодуль("РегламентированнаяОтчетностьИнтерфейс85");
МодульРегламентированнаяОтчетностьИнтерфейс85.УстановитьТипОтображенияРедактируемойЯчейкиТабличногоДокумента(ПолеТабличногоДокументаФормаОтчета);
КонецЕсли;
Модифицированность = Истина;
Доступность = Истина;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьДоступностьЭУВыбораОбособленныхПодразделений(Форма)
Форма.ОбособленноеПодразделение =
?(НЕ Форма.ИсключитьДанныеОбособленныхПодразделений, Форма.ОбособленноеПодразделение, Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура Расшифровать(Команда)
ПараметрыОтчета = Новый Структура;
ПараметрыОтчета.Вставить("Организация", СтруктураРеквизитовФормы.Организация);
ПараметрыОтчета.Вставить("ДатаНачалаПериодаОтчета", СтруктураРеквизитовФормы.мДатаНачалаПериодаОтчета);
ПараметрыОтчета.Вставить("ДатаКонцаПериодаОтчета", СтруктураРеквизитовФормы.мДатаКонцаПериодаОтчета);
ПараметрыОтчета.Вставить("ЗначениеТекущегоПоказателя", Элементы.ПолеТабличногоДокументаФормаОтчета.ТекущаяОбласть.Текст);
ПараметрыОтчета.Вставить("ИсключитьДанныеОбособленныхПодразделений", ИсключитьДанныеОбособленныхПодразделений);
ПараметрыОтчета.Вставить("ОбособленноеПодразделение", ОбособленноеПодразделение);
РегламентированнаяОтчетностьКлиентСервер.ДополнитьОпциональныеПараметрыОтчета(ЭтотОбъект, ПараметрыОтчета);
ТекущаяОбластьИмя = Элементы.ПолеТабличногоДокументаФормаОтчета.ТекущаяОбласть.Имя;
Если СтрЧислоВхождений(ТекущаяОбластьИмя, "П001") > 0 Тогда
Если СтрНайти(ТекущаяОбластьИмя, "_") > 0 Тогда
Подраздел = Сред(ТекущаяОбластьИмя, 7, 1);
КодОКВЭДГрафа = ?(Подраздел = "1", "9", "3");
ИмяОбластиОКВЭД = "П00100" + Подраздел + "00020" + КодОКВЭДГрафа + Сред(ТекущаяОбластьИмя, 14);
КодПоОКВЭД = ПолеТабличногоДокументаФормаОтчета.Области[ИмяОбластиОКВЭД].Значение;
Иначе
КодПоОКВЭД = "00";
КонецЕсли;
ПараметрыОтчета.Вставить("КодПоОКВЭД", КодПоОКВЭД);
КонецЕсли;
ИДИменПоказателей = Новый Массив;
ИДИменПоказателей.Добавить(ТекущаяОбластьИмя);
Если СтрЧислоВхождений(ИмяФормы, "ВнешнийОтчет.") > 0 Тогда
ЭтаФормаИмя = СтрЗаменить(ИмяФормы, "ВнешнийОтчет.", "");
ИначеЕсли СтрЧислоВхождений(ИмяФормы, "Отчет.") > 0 Тогда
ЭтаФормаИмя = СтрЗаменить(ИмяФормы, "Отчет.", "");
Иначе
ЭтаФормаИмя = ИмяФормы;
КонецЕсли;
ИДОтчета = Лев(ЭтаФормаИмя, СтрНайти(ЭтаФормаИмя, ".Форма.") - 1);
ИДРедакцииОтчета = Сред(ЭтаФормаИмя, СтрНайти(ЭтаФормаИмя, ".Форма.") + СтрДлина(".Форма."));
РегламентированнаяОтчетностьКлиент.ОткрытьРасшифровкуОтчета(
ИДОтчета, ИДРедакцииОтчета, ИДИменПоказателей, ПараметрыОтчета);
КонецПроцедуры
&НаКлиенте
Процедура ОтправитьЧерезПредставителя(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("ОтправитьЧерезПредставителяЗавершение", ЭтотОбъект);
Отказ = Ложь;
ОнлайнСервисыРегламентированнойОтчетностиКлиент.ПередВыгрузкойРегламентированногоОтчета(
ОписаниеОповещения, ЭтотОбъект, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура ОтправитьЧерезПредставителяЗавершение(Отказ, ДополнительныеПараметры) Экспорт
Если Отказ Тогда
Возврат;
КонецЕсли;
РегламентированнаяОтчетностьКлиент.ПриНажатииНаКнопкуОтправкиЧерезПредставителяВРегламентированномОтчете(
ЭтотОбъект, "ФСГС");
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьВИнтернете(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьВИнтернетеЗавершение", ЭтотОбъект);
Отказ = Ложь;
ОнлайнСервисыРегламентированнойОтчетностиКлиент.ПередВыгрузкойРегламентированногоОтчета(
ОписаниеОповещения, ЭтотОбъект, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьВИнтернетеЗавершение(Отказ, ДополнительныеПараметры) Экспорт
Если Отказ Тогда
Возврат;
КонецЕсли;
РегламентированнаяОтчетностьКлиент.ПроверитьВИнтернете(ЭтотОбъект, "ФСГС");
КонецПроцедуры
#Область ПанельОтправкиВКонтролирующиеОрганы
&НаКлиенте
Процедура ОбновитьОтправку(Команда)
ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиент.ОбновитьОтправкуИзПанелиОтправки(ЭтотОбъект, "ФСГС");
КонецПроцедуры
&НаКлиенте
Процедура ГиперссылкаПротоколНажатие(Элемент)
ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиент.ОткрытьПротоколИзПанелиОтправки(ЭтотОбъект, "ФСГС");
КонецПроцедуры
&НаКлиенте
Процедура ОтправитьНеотправленноеИзвещение(Команда)
ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиент.ОтправитьНеотправленноеИзвещениеИзПанелиОтправки(
ЭтотОбъект, "ФСГС");
КонецПроцедуры
&НаКлиенте
Процедура ЭтапыОтправкиНажатие(Элемент)
ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиент.ОткрытьСостояниеОтправкиИзПанелиОтправки(ЭтотОбъект, "ФСГС");
КонецПроцедуры
&НаКлиенте
Процедура КритическиеОшибкиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиент.ОткрытьКритическиеОшибкиИзПанелиОтправки(ЭтотОбъект, "ФСГС");
КонецПроцедуры
&НаКлиенте
Процедура ГиперссылкаНаименованиеЭтапаНажатие(Элемент)
ПараметрыИзменения = Новый Структура;
ПараметрыИзменения.Вставить("Форма", ЭтотОбъект);
ПараметрыИзменения.Вставить("Организация", СтруктураРеквизитовФормы.Организация);
ПараметрыИзменения.Вставить("КонтролирующийОрган",
ПредопределенноеЗначение("Перечисление.ТипыКонтролирующихОрганов.ФСГС"));
РегламентированнаяОтчетностьКлиент.ИзменитьСтатусОтправки(ПараметрыИзменения);
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура ОтправитьВКонтролирующийОрган(Команда)
ОписаниеОповещения =
Новый ОписаниеОповещения("ПроверкаВозможностиВыгрузкиРегламентированногоОтчетаПередОтправкой", ЭтотОбъект);
Отказ = Ложь;
ОнлайнСервисыРегламентированнойОтчетностиКлиент.ПередОтправкойРегламентированногоОтчета(
ОписаниеОповещения, ЭтотОбъект, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура ПроверкаВозможностиВыгрузкиРегламентированногоОтчетаПередОтправкой(Отказ, ДополнительныеПараметры) Экспорт
Если Отказ Тогда
Возврат;
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ОтправитьВКонтролирующийОрганЗавершение", ЭтотОбъект);
ОнлайнСервисыРегламентированнойОтчетностиКлиент.ПередВыгрузкойРегламентированногоОтчета(
ОписаниеОповещения, ЭтотОбъект, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура ОтправитьВКонтролирующийОрганЗавершение(Отказ, ДополнительныеПараметры) Экспорт
Если Отказ Тогда
Возврат;
КонецЕсли;
РегламентированнаяОтчетностьКлиент.ПриНажатииНаКнопкуОтправкиВКонтролирующийОрган(ЭтотОбъект, "ФСГС");
КонецПроцедуры
&НаКлиенте
Процедура ПослеСохраненияФормыЗавершение(Результат, ДополнительныеПараметры) Экспорт
ДополнительныеПараметры.Форма.Закрыть();
КонецПроцедуры
&НаСервере
Процедура РазрешитьРедактированиеРеквизитовОбъекта() Экспорт
РегламентированнаяОтчетность.РазрешитьРедактированиеРеквизитовОтчета(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда)
РегламентированнаяОтчетностьКлиент.РазрешитьРедактированиеРеквизитовОтчета(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОткрытьПрисоединенныеФайлы(Команда)
РегламентированнаяОтчетностьКлиент.СохранитьОтчетИОткрытьФормуПрисоединенныеФайлы(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура КомментарийПриИзменении(Элемент)
Модифицированность = Истина;
КонецПроцедуры
&НаСервере
Процедура УстановитьФорматВыводаВПоляхВвода(Форма, НаимРаздела = "") Экспорт
Перем СтруктураГруппы;
СтрФорматаОкр1 = "; ЧДЦ = " + Форма.СтруктураРеквизитовФормы.ТочностьЕдиницыИзмерения + "; ЧРД=,; ЧН=-; ЧС = 0";
СтрФорматаОкр1000 = "; ЧДЦ = " + Форма.СтруктураРеквизитовФормы.ТочностьЕдиницыИзмерения + "; ЧРД=,; ЧН=-; ЧС = 3";
СтрФорматаОкр1000000 = "; ЧДЦ = " + Форма.СтруктураРеквизитовФормы.ТочностьЕдиницыИзмерения + "; ЧРД=,; ЧН=-; ЧС = 6";
Если Форма.СтруктураРеквизитовФормы.ЕдиницаИзмерения =
Форма.ПорядкиОкругленияОтчетности.ПеречислениеПорядкиОкругленияОтчетностиОкр1 Тогда
Форма.СтруктураРеквизитовФормы.мСтрокаФормата = СтрФорматаОкр1;
ИначеЕсли Форма.СтруктураРеквизитовФормы.ЕдиницаИзмерения =
Форма.ПорядкиОкругленияОтчетности.ПеречислениеПорядкиОкругленияОтчетностиОкр1000 Тогда
Форма.СтруктураРеквизитовФормы.мСтрокаФормата = СтрФорматаОкр1000;
ИначеЕсли Форма.СтруктураРеквизитовФормы.ЕдиницаИзмерения =
Форма.ПорядкиОкругленияОтчетности.ПеречислениеПорядкиОкругленияОтчетностиОкр1000000 Тогда
Форма.СтруктураРеквизитовФормы.мСтрокаФормата = СтрФорматаОкр1000000;
КонецЕсли;
Для Каждого СтрПоказатели Из Форма.мТаблицаСоставПоказателей Цикл
Если НЕ ПустаяСтрока(НаимРаздела) И НаимРаздела <> СтрПоказатели.ИмяПоляТаблДокумента Тогда
Продолжить;
КонецЕсли;
КодПоказателя = СокрП(СтрПоказатели.КодПоказателяПоСоставу);
ПризнМногострочность = СокрП(СтрПоказатели.ПризнМногострочности);
КодПоказателяПоСтруктуре = СокрП(СтрПоказатели.КодПоказателяПоСтруктуре);
КодПоказателяПоФорме = СокрП(СтрПоказатели.КодПоказателяПоФорме);
ТипДанныхПоказателя = СокрП(СтрПоказатели.ТипДанныхПоказателя);
ИмяПоказателя = ?(ПустаяСтрока(СтрПоказатели.КодПоказателяПоФорме), КодПоказателя, КодПоказателяПоФорме);
Если ПустаяСтрока(КодПоказателя)
ИЛИ КодПоказателя = "==="
ИЛИ КодПоказателя = "###"
ИЛИ Лев(КодПоказателя, 2) = "//" Тогда
Продолжить;
КонецЕсли;
Если ТипДанныхПоказателя = "Е" И ПустаяСтрока(КодПоказателяПоСтруктуре) Тогда
ТекТабличноеПоле = Форма.ПолеТабличногоДокументаФормаОтчета;
Если ПризнМногострочность <> "/" Тогда
ФорматируемаяОбласть = ТекТабличноеПоле.Области[ИмяПоказателя];
ДопустимыйЗнакПоказателя = ФорматируемаяОбласть.ТипЗначения.КвалификаторыЧисла.ДопустимыйЗнак;
ЧислоЕЗнак = Форма.СтруктураРеквизитовФормы.мОписаниеТиповЧислоЕ;
Если ДопустимыйЗнакПоказателя = ДопустимыйЗнак.Неотрицательный Тогда
ЧислоЕЗнак = Новый ОписаниеТипов("Число",
Новый КвалификаторыЧисла(ЧислоЕЗнак.КвалификаторыЧисла.Разрядность,
ЧислоЕЗнак.КвалификаторыЧисла.РазрядностьДробнойЧасти, ДопустимыйЗнакПоказателя));
КонецЕсли;
ФорматируемаяОбласть.ТипЗначения = ЧислоЕЗнак;
ФорматируемаяОбласть.Формат = "ЧЦ = "
+ ЧислоЕЗнак.КвалификаторыЧисла.Разрядность + Форма.СтруктураРеквизитовФормы.мСтрокаФормата;
Иначе
НСтр = 1;
Пока ТекТабличноеПоле.Области.Найти(ИмяПоказателя + "_" + Формат(НСтр, "ЧГ=0")) <> Неопределено Цикл
ФорматируемаяОбласть = ТекТабличноеПоле.Области[ИмяПоказателя + "_" + Формат(НСтр, "ЧГ=0")];
ДопустимыйЗнакПоказателя = ФорматируемаяОбласть.ТипЗначения.КвалификаторыЧисла.ДопустимыйЗнак;
ЧислоЕЗнак = Форма.СтруктураРеквизитовФормы.мОписаниеТиповЧислоЕ;
Если ДопустимыйЗнакПоказателя = ДопустимыйЗнак.Неотрицательный Тогда
ЧислоЕЗнак = Новый ОписаниеТипов("Число",
Новый КвалификаторыЧисла(ЧислоЕЗнак.КвалификаторыЧисла.Разрядность,
ЧислоЕЗнак.КвалификаторыЧисла.РазрядностьДробнойЧасти, ДопустимыйЗнакПоказателя));
КонецЕсли;
ФорматируемаяОбласть.ТипЗначения = ЧислоЕЗнак;
ФорматируемаяОбласть.Формат = "ЧЦ = "
+ ЧислоЕЗнак.КвалификаторыЧисла.Разрядность + Форма.СтруктураРеквизитовФормы.мСтрокаФормата;
НСтр = НСтр + 1;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьЦветФонаЯчейкиНаКлиенте(ИмяЯчейки = Неопределено, ВариантЗаполнения = Неопределено, ИмяТекущейСтраницыПанели = "") Экспорт
УстановитьЦветФонаЯчейки(ЭтотОбъект, ИмяЯчейки, ВариантЗаполнения, ИмяТекущейСтраницыПанели);
КонецПроцедуры
&НаСервере
Процедура УстановитьЦветФонаЯчейкиНаСервере(ИмяЯчейки = Неопределено, ВариантЗаполнения = Неопределено, ИмяТекущейСтраницыПанели = "") Экспорт
УстановитьЦветФонаЯчейки(ЭтотОбъект, ИмяЯчейки, ВариантЗаполнения, ИмяТекущейСтраницыПанели);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьЦветФонаЯчейки(Форма, ИмяЯчейки = Неопределено, ВариантЗаполнения = Неопределено, ИмяТекущейСтраницыПанели = "") Экспорт
Перем ЦветФона;
Если Не ИмяЯчейки = Неопределено Тогда
ИмяПоляТаблДокумента = "ПолеТабличногоДокументаФормаОтчета";
Ключ = "_" + ВариантЗаполнения;
Форма.мСтруктураЦветовРаскраски.Свойство(Ключ, ЦветФона);
Если ВариантЗаполнения = 4 Тогда
Форма[ИмяПоляТаблДокумента].Области[ИмяЯчейки].Защита = Истина;
Иначе
Форма[ИмяПоляТаблДокумента].Области[ИмяЯчейки].Защита = Ложь;
КонецЕсли;
Форма[ИмяПоляТаблДокумента].Области[ИмяЯчейки].ЦветФона = ЦветФона;
Иначе
ТаблицаВариантыЗаполнения = ПолучитьТаблицуВариантовЗаполнения(Форма, ИмяТекущейСтраницыПанели);
Если ТаблицаВариантыЗаполнения = Неопределено Тогда
Возврат;
КонецЕсли;
Для Каждого Строка Из ТаблицаВариантыЗаполнения Цикл
ИмяПоказателя = Строка.КодПоказателя;
ВариантЗаполнения = Строка.ВариантЗаполнения;
Комментарий = Строка.Комментарий;
КолвоСтрокВМногострочнойЧасти =
РегламентированнаяОтчетностьКлиентСервер.ПоказательВходитВМногострочнуюЧасть(Форма, ИмяПоказателя);
Если КолвоСтрокВМногострочнойЧасти > 0 Тогда
Многострочность = Истина;
БазоваяЧасть = ИмяПоказателя;
Иначе
Многострочность = Ложь;
КолвоСтрокВМногострочнойЧасти = 1;
КонецЕсли;
Для Инд = 1 по КолвоСтрокВМногострочнойЧасти Цикл
Если Многострочность Тогда
ИмяПоказателя = БазоваяЧасть + "_" + Формат(Инд, "ЧГ=0");
КонецЕсли;
ТекОбластьЯчеек = Форма.ПолеТабличногоДокументаФормаОтчета.Области[ИмяПоказателя];
Если (Не ПустаяСтрока(Комментарий)) ИЛИ (Не ПустаяСтрока(ТекОбластьЯчеек.Примечание.Текст)) Тогда
ТекОбластьЯчеек.Примечание.Текст = Комментарий;
КонецЕсли;
Ключ = "_" + ВариантЗаполнения;
Форма.мСтруктураЦветовРаскраски.Свойство(Ключ, ЦветФона);
Если ВариантЗаполнения = 4 Тогда
Форма.ПолеТабличногоДокументаФормаОтчета.Области[ИмяПоказателя].Защита = Истина;
Иначе
Форма.ПолеТабличногоДокументаФормаОтчета.Области[ИмяПоказателя].Защита = Ложь;
КонецЕсли;
Форма.ПолеТабличногоДокументаФормаОтчета.Области[ИмяПоказателя].ЦветФона = ЦветФона;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПолучитьТаблицуВариантовЗаполнения(Форма, ИмяСтраницыПанели, ПолучитьЭталонную = Ложь)
#Если НаКлиенте Тогда
Возврат РегламентированнаяОтчетностьКлиент.ПолучитьТаблицуВариантовЗаполненияНаКлиенте(
Форма, ИмяСтраницыПанели, ПолучитьЭталонную);
#Иначе
Возврат РегламентированнаяОтчетностьВызовСервера.ПолучитьТаблицуВариантовЗаполненияНаСервере(
Форма, ИмяСтраницыПанели, ПолучитьЭталонную);
#КонецЕсли
КонецФункции
#Область ПроверкаКонтрольныеСоотношенияИзШаблона
&НаКлиенте
Процедура ПроверитьКонтрольныеСоотношенияИзШаблона(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("ПроверитьКонтрольныеСоотношенияИзШаблонаЗавершение", ЭтотОбъект);
Если Модифицированность Тогда
СохранитьНаКлиенте(, ОписаниеОповещения);
Иначе
ВыполнитьОбработкуОповещения(ОписаниеОповещения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьКонтрольныеСоотношенияИзШаблонаЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если ТипЗнч(ОбработкаКС) = Тип("ОкноКлиентскогоПриложения") Тогда
Если ОбработкаКС.Окно <> Неопределено Тогда
ОбработкаКС.Закрыть();
КонецЕсли;
ОбработкаКС = Неопределено;
КонецЕсли;
РезультатВыполнения = ПроверитьКонтрольныеСоотношенияИзШаблонаВФоне();
Если РезультатВыполнения.ЗаданиеВыполнено Тогда
РегламентированнаяОтчетностьКлиент.ВывестиКонтрольныеСоотношенияПоШаблону(
ПолучитьИзВременногоХранилища(АдресХранилища), ОбработкаКС, ЭтотОбъект);
Иначе
ОповещениеОЗавершении = Новый ОписаниеОповещения(
"ПроверитьКонтрольныеСооотношенияИзШаблонаЗавершениеПослеПроверки", ЭтотОбъект, ДополнительныеПараметры);
ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект);
ПараметрыОжидания.ТекстСообщения = НСтр("ru = 'Выполняется проверка контрольных соотношений из шаблона Росстата'");
ДлительныеОперацииКлиент.ОжидатьЗавершение(РезультатВыполнения, ОповещениеОЗавершении, ПараметрыОжидания);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьКонтрольныеСооотношенияИзШаблонаЗавершениеПослеПроверки(РезультатЗагрузки, ДополнительныеПараметры) Экспорт
ЭтотОбъект.Доступность = Истина;
Если РезультатЗагрузки = Неопределено
ИЛИ РезультатЗагрузки.Статус <> "Выполнено" Тогда
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Не удалось выполнить проверку контрольных соотношений из шаблона Росстата...'"));
Возврат;
КонецЕсли;
РегламентированнаяОтчетностьКлиент.ВывестиКонтрольныеСоотношенияПоШаблону(
ПолучитьИзВременногоХранилища(АдресХранилища), ОбработкаКС, ЭтотОбъект);
КонецПроцедуры
&НаСервере
Функция ПроверитьКонтрольныеСоотношенияИзШаблонаВФоне()
МодульПроверки = ОбщегоНазначения.ОбщийМодуль("ИнтерпретаторКонтрольныхСоотношенийРосстата");
Если МодульПроверки = Неопределено Тогда
ОбщегоНазначения.СообщитьПользователю(
НСтр("ru='Механизм проверки контрольных соотношений недоступен, обратитесь к администратору'"));
Возврат Новый Структура("ЗаданиеВыполнено", Истина);
КонецЕсли;
АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, УникальныйИдентификатор);
ПараметрыПроверкиКонтрольныхСоотношений = Новый Структура;
ПараметрыПроверкиКонтрольныхСоотношений.Вставить("ШаблонРосстата", СтруктураРеквизитовФормы["ИмяМакетаШаблона"]);
ПараметрыПроверкиКонтрольныхСоотношений.Вставить("Атрибуты", СтруктураРеквизитовФормы["ИмяМакетаАтрибутовВыгрузки"]);
ПараметрыПроверкиКонтрольныхСоотношений.Вставить("СхемаВыгрузки", СтруктураРеквизитовФормы["ИмяМакетаСхемыВыгрузки"]);
ПараметрыПроверкиКонтрольныхСоотношений.Вставить("ИмяФормы", ИмяФормы);
ПараметрыПроверкиКонтрольныхСоотношений.Вставить("ПрошлыйПериод", Ложь);
ПараметрыПроверкиКонтрольныхСоотношений.Вставить("ТекстВыгрузки", "");
ПараметрыПроверкиКонтрольныхСоотношений.Вставить("Ссылка", СтруктураРеквизитовФормы.мСохраненныйДок);
ПараметрыПроверкиКонтрольныхСоотношений.Вставить("ДоступноФормированиеТекстаВыгрузкиБезКонтекстаФормы", Ложь);
ПараметрыПроверкиКонтрольныхСоотношений.Вставить("ТиповойСпособФормированияТекстаВыгрузки", Истина);
ПараметрыПроверкиКонтрольныхСоотношений.Вставить("АдресХранилища", АдресХранилища);
ПараметрыПроверкиКонтрольныхСоотношений.Вставить("ИдентификаторЗадания", Неопределено);
Возврат МодульПроверки.ПроверитьКонтрольныеСоотношенияИзШаблона(ЭтотОбъект, ПараметрыПроверкиКонтрольныхСоотношений);
КонецФункции
&НаКлиенте
Функция СформироватьПараметрыВыбораОтчетаПредыдущегоПериода() Экспорт
Парам = Новый Структура;
Парам.Вставить("ТекстВыгрузки", ВыгрузкаПредидущегоПериода);
Парам.Вставить("Источник", ОтчетПредидущегоПериода);
Парам.Вставить("Организация", СтруктураРеквизитовФормы.Организация);
Парам.Вставить("ИсточникОтчета", "РегламентированныйОтчетСтатистикаФормаП4");
Парам.Вставить("ВидОтправляемогоДокумента",
ПредопределенноеЗначение("Справочник.ВидыОтправляемыхДокументов.СтатистикаФормаП4"));
Парам.Вставить("КонецПериода");
Парам.Вставить("НачалоПериода");
Если СтруктураРеквизитовФормы.мПериодичность = ПредопределенноеЗначение("Перечисление.Периодичность.Месяц") Тогда
Если Месяц(СтруктураРеквизитовФормы.мДатаКонцаПериодаОтчета) <> 1 Тогда
Парам["КонецПериода"] = КонецМесяца(ДобавитьМесяц(СтруктураРеквизитовФормы.мДатаКонцаПериодаОтчета, -1));
Парам["НачалоПериода"] = НачалоМесяца(ДобавитьМесяц(СтруктураРеквизитовФормы.мДатаНачалаПериодаОтчета, -1));
КонецЕсли;
Иначе
Если Месяц(СтруктураРеквизитовФормы.мДатаКонцаПериодаОтчета) <> 3 Тогда
Парам["НачалоПериода"] = НачалоМесяца(СтруктураРеквизитовФормы.мДатаНачалаПериодаОтчета);
Парам["КонецПериода"] = КонецМесяца(ДобавитьМесяц(СтруктураРеквизитовФормы.мДатаКонцаПериодаОтчета, -3));
КонецЕсли;
КонецЕсли;
Возврат Парам;
КонецФункции
#КонецОбласти
&НаСервере
Процедура СформироватьСпискиВыбора()
МакетСоставаПоказателей = ОбъектОтчета(ИмяФормы).ПолучитьМакет(СтруктураРеквизитовФормы["ИмяМакетаСписков"]);
Массив = Новый Массив;
Массив.Добавить(Тип("Строка"));
Строка8 = Новый ОписаниеТипов(Массив, , Новый КвалификаторыСтроки(20, ДопустимаяДлина.Переменная));
Строка512 = Новый ОписаниеТипов(Массив, , Новый КвалификаторыСтроки(512, ДопустимаяДлина.Переменная));
КоллекцияСписковВыбора = Новый Соответствие;
Для Каждого Область Из МакетСоставаПоказателей.Области Цикл
Если Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда
ВерхОбласти = Область.Верх;
НизОбласти = Область.Низ;
ТаблСписка = Новый ТаблицаЗначений;
ТаблСписка.Колонки.Добавить(
"Код", Строка8, , МакетСоставаПоказателей.Область(ВерхОбласти, 1, ВерхОбласти, 1).ШиринаКолонки);
ТаблСписка.Колонки.Добавить(
"Название",Строка512,, МакетСоставаПоказателей.Область(ВерхОбласти, 2, ВерхОбласти, 2).ШиринаКолонки);
Для НомСтр = ВерхОбласти По НизОбласти Цикл
КодПоказателя = СокрП(МакетСоставаПоказателей.Область(НомСтр, 1).Текст);
Если КодПоказателя <> "###" Тогда
НовСтрока = ТаблСписка.Добавить();
НовСтрока.Код = КодПоказателя;
НовСтрока.Название = СокрП(МакетСоставаПоказателей.Область(НомСтр, 2).Текст);
КонецЕсли;
КонецЦикла;
КоллекцияСписковВыбора.Вставить(Область.Имя, ТаблСписка);
КонецЕсли;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("S_OKVED2", КоллекцияСписковВыбора["S_OKVED2"]);
Запрос.УстановитьПараметр("pril_okved_51", КоллекцияСписковВыбора["pril_okved_51"]);
Запрос.Текст = "ВЫБРАТЬ
| S_OKVED2.Код КАК Код,
| S_OKVED2.Название КАК Название
|ПОМЕСТИТЬ ВТ_S_OKVED2
|ИЗ
| &S_OKVED2 КАК S_OKVED2
|ИНДЕКСИРОВАТЬ ПО
| S_OKVED2.Код
|;
|
|ВЫБРАТЬ
| pril_okved_51.Код КАК Код,
| pril_okved_51.Название КАК Название
|ПОМЕСТИТЬ ВТ_pril_okved_51
|ИЗ
| &pril_okved_51 КАК pril_okved_51
|ИНДЕКСИРОВАТЬ ПО
| pril_okved_51.Код
|;
|
|ВЫБРАТЬ
| S_OKVED2.Код КАК Код,
| S_OKVED2.Название КАК Название
|ИЗ
| ВТ_S_OKVED2 КАК S_OKVED2
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_pril_okved_51 КАК pril_okved_51
| ПО pril_okved_51.Код = S_OKVED2.Код";
ТаблСписка = Новый ТаблицаЗначений;
ТаблСписка.Колонки.Добавить(
"Код", Строка8, , МакетСоставаПоказателей.Область(ВерхОбласти, 1, ВерхОбласти, 1).ШиринаКолонки);
ТаблСписка.Колонки.Добавить(
"Название", Строка512, , МакетСоставаПоказателей.Область(ВерхОбласти, 2, ВерхОбласти, 2).ШиринаКолонки);
НовСтр = ТаблСписка.Добавить();
НовСтр.Код = "";
НовСтр.Название = "Пустая строка";
РезультатВыборки = Запрос.Выполнить().Выбрать();
Пока РезультатВыборки.Следующий() Цикл
НовСтр = ТаблСписка.Добавить();
ЗаполнитьЗначенияСвойств(НовСтр, РезультатВыборки);
КонецЦикла;
РегламентированнаяОтчетность.ДобавитьСтрокуОписанияВвода(
СвойстваПоказателей, "OKVED2", 512, , "Выбор кода ОКВЭД", ТаблСписка);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуНастроек(Команда)
ОткрытьФормуВыбораСтраниц("ВыбратьДляНастройки");
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуВыбораСтраниц(ВариантВыбора)
мПараметры = Новый Структура;
мПараметры.Вставить("ОтключитьАвтоРасчет", Истина);
мПараметры.Вставить("ЗначенияИзСписка", Истина);
мПараметры.Вставить("Автосохранение", Ложь);
мПараметры.Вставить("СчетчикСтраниц", Ложь);
мПараметры.Вставить("ПараметрыОтображенияСумм", Ложь);
мПараметры.Вставить("ПроверкаСоотношений", Ложь);
мПараметры.Вставить("ИмеетсяРеквизитДеревоВыбранныхСтраниц", Ложь);
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ФлажокОтклАвтоРасчет", СтруктураРеквизитовФормы.ФлажокОтклАвтоРасчет);
ПараметрыФормы.Вставить("мПараметры", мПараметры);
ПараметрыФормы.Вставить("мАвтоВыборКодов", СтруктураРеквизитовФормы.мАвтоВыборКодов);
ФормаНастройкиОтчета = РегламентированнаяОтчетностьКлиент.ПолучитьОбщуюФормуПоИмени(
"НастройкиОтчета", ПараметрыФормы, ЭтотОбъект);
ФормаНастройкиОтчета.Элементы.Страницы.ПодчиненныеЭлементы.СвойстваРазделов.Видимость = Ложь;
ЗначениеАвторасчета = СтруктураРеквизитовФормы.ФлажокОтклАвтоРасчет;
ДополнительныеПараметры = Новый Структура("ЗначениеАвторасчета", ЗначениеАвторасчета);
ОписаниеОповещения = Новый ОписаниеОповещения(
"ОткрытьФормуВыбораСтраницЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ФормаНастройкиОтчета.ОписаниеОповещенияОЗакрытии = ОписаниеОповещения;
ФормаНастройкиОтчета.РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
ФормаНастройкиОтчета.Открыть();
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуВыбораСтраницЗавершение(РезультатВыбора, ДополнительныеПараметры) Экспорт
ЗначениеАвторасчета = ДополнительныеПараметры.ЗначениеАвторасчета;
Если ЗначениеАвторасчета <> СтруктураРеквизитовФормы.ФлажокОтклАвтоРасчет Тогда
Если СтруктураРеквизитовФормы.ФлажокОтклАвтоРасчет = Ложь Тогда
ТекстВопроса = "Будет произведен перерасчет всех рассчитываемых показателей. Продолжить?";
ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьФормуВыбораСтраницЗавершениеВопросЗавершение", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Нет);
Возврат;
КонецЕсли;
#Если ВебКлиент Тогда
ИзменитьТаблицуВариантовЗаполненияНаСервере();
#Иначе
РегламентированнаяОтчетностьКлиентСервер.ИзменитьТаблицуВариантовЗаполнения(
ЭтотОбъект, НЕ СтруктураРеквизитовФормы.ФлажокОтклАвтоРасчет);
#КонецЕсли
КонецЕсли;
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуВыбораСтраницЗавершениеВопросЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ <> КодВозвратаДиалога.Да Тогда
СтруктураРеквизитовФормы.ФлажокОтклАвтоРасчет = Истина;
Возврат;
КонецЕсли;
РасчетНаКлиенте("");
#Если ВебКлиент Тогда
ИзменитьТаблицуВариантовЗаполненияНаСервере();
#Иначе
РегламентированнаяОтчетностьКлиентСервер.ИзменитьТаблицуВариантовЗаполнения(
ЭтотОбъект, НЕ СтруктураРеквизитовФормы.ФлажокОтклАвтоРасчет);
#КонецЕсли
Модифицированность = Истина;
КонецПроцедуры
&НаСервере
Процедура ИзменитьТаблицуВариантовЗаполненияНаСервере()
РегламентированнаяОтчетностьКлиентСервер.ИзменитьТаблицуВариантовЗаполнения(
ЭтотОбъект, НЕ СтруктураРеквизитовФормы.ФлажокОтклАвтоРасчет);
КонецПроцедуры
&НаСервере
Функция ОбъектОтчета(ЭтаФормаИмя) Экспорт
Если мОбъектОтчета = Неопределено Тогда
мОбъектОтчета = РегламентированнаяОтчетностьВызовСервера.ОбъектОтчета(ЭтаФормаИмя);
КонецЕсли;
Возврат мОбъектОтчета;
КонецФункции
#Область ОбработчикиСобытийФормы
#Область ОбработчикиСобытийПроцессыОбработкиДокументов
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокументаОповещение(Контекст, ДополнительныеПараметры) Экспорт
ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст);
ВыполнитьОбработкуОповещения(ДополнительныеПараметры, Контекст);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьЗадачуПоОбработкеДокумента(Команда)
РегламентированнаяОтчетностьКлиент.ВыполнитьЗадачу(
ЭтотОбъект,
Команда,
?(ЗначениеЗаполнено(СтруктураРеквизитовФормы.мСохраненныйДок),
СтруктураРеквизитовФормы.мСохраненныйДок,
СтруктураРеквизитовФормы.ПустаяСсылкаНаРегламентированныйОтчет));
КонецПроцедуры
#КонецОбласти
#Область ПроцессыОбработкиДокументов
&НаКлиенте
Процедура Подключаемый_КомментарийНаправившегоОткрытие(Элемент, СтандартнаяОбработка)
РегламентированнаяОтчетностьКлиент.КомментарийНаправившегоОткрытие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомментарийСледующемуНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
РегламентированнаяОтчетностьКлиент.КомментарийСледующемуНачалоВыбора(
ЭтотОбъект, Элемент, ДанныеВыбора, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если РегламентированнаяОтчетностьКлиент.ЭтоСобытиеЗавершениеОтправки(ИмяСобытия) Тогда
ВывестиСтатусыИВыжныеСообщенияНаФормуНаСервере();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ПроцессыОбработкиДокументов
&НаКлиенте
Процедура Записать(ПараметрыЗаписи) Экспорт
СохранитьНаКлиенте();
КонецПроцедуры
&НаСервере
Процедура ВыполнитьЗадачуПоОбработкеДокументаНаСервере(Контекст)
РегламентированнаяОтчетность.ВыполнитьЗадачу(ЭтотОбъект, Контекст, СтруктураРеквизитовФормы.мСохраненныйДок);
КонецПроцедуры
&НаСервере
Процедура УправлениеДоступностьюРеквизитов(БлокируемыеЭлементы, ТолькоПросмотр) Экспорт
РегламентированнаяОтчетность.УправлениеДоступностьюРеквизитов(ЭтотОбъект, БлокируемыеЭлементы, ТолькоПросмотр);
КонецПроцедуры
#КонецОбласти
&НаСервере
Процедура ИнициализироватьВыводСтатусовИВажныхСообщений_85()
Если РегламентированнаяОтчетность.ДоступнаПодсистема85() Тогда
МодульЭДОСКонтролирующимиОрганами = ОбщегоНазначения.ОбщийМодуль("ЭлектронныйДокументооборотСКонтролирующимиОрганами");
МодульЭДОСКонтролирующимиОрганами.УстановитьРазмещениеНаименованияЭтапаБРО_85(ЭтотОбъект);
МодульЭДОСКонтролирующимиОрганами.ВывестиСтатусыИВыжныеСообщенияНаФорму_85(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ВывестиСтатусыИВыжныеСообщенияНаФормуНаСервере() Экспорт
Если РегламентированнаяОтчетность.ДоступнаПодсистема85() Тогда
МодульЭДОСКонтролирующимиОрганами = ОбщегоНазначения.ОбщийМодуль("ЭлектронныйДокументооборотСКонтролирующимиОрганами");
МодульЭДОСКонтролирующимиОрганами.ВывестиСтатусыИВыжныеСообщенияНаФорму_85(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДетальноеОписаниеСтатусаПослеВыбора(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если Результат = "ОбновитьОтправку" Тогда
ОбновитьОтправку(Неопределено);
ИначеЕсли Результат = "ГиперссылкаПротокол" Тогда
ГиперссылкаПротоколНажатие(Неопределено);
ИначеЕсли Результат = "ЭтапыОтправки" Тогда
ЭтапыОтправкиНажатие(Неопределено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВывестиСтатусыИВыжныеСообщенияНаФорму() Экспорт
ВывестиСтатусыИВыжныеСообщенияНаФормуНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбработкаНажатияКнопкиВВажномСообщении(Команда)
Если Команда.Имя = "ОтправитьНеотправленноеИзвещение" Тогда
ОтправитьНеотправленноеИзвещение(Неопределено);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбработкаНавигационнойСсылкиВВажномСообщении(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если НРег(НавигационнаяСсылкаФорматированнойСтроки) = "критическиеошибки" Тогда
КритическиеОшибкиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбработкаЗакрытияВажногоСообщения(Команда)
МодульКлиентСервер = ОбщегоНазначенияКлиент.ОбщийМодуль("ЭлектронныйДокументооборотСКонтролирующимиОрганамиКлиентСервер");
МодульКлиентСервер.ЗакрытьВажноеСообщение(ЭтотОбъект, Команда.Имя);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбработатьДействиеИнформационногоСообщения(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
МодульОбщегоНазначенияКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОбщегоНазначенияКлиент");
МодульОбщегоНазначенияКлиент.ОбработатьДействиеИнформационногоСообщения(ЭтотОбъект, ЭлементИлиКоманда, НавигационнаяСсылка, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти