&НаСервере
Перем КонтекстЭДОСервер Экспорт;
&НаКлиенте
Перем КонтекстЭДОКлиент Экспорт;
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
Основание = Параметры.Основание;
Если НЕ ЗначениеЗаполнено(Основание) Тогда
РезультатОткрытия = Новый Структура("Предупреждение", "Не выбран запрос!");
Возврат;
КонецЕсли;
СтруктураРеквизитовФормы = Новый Структура;
СтруктураРеквизитовФормы.Вставить("СписокПечатаемыхЛистов");
СтруктураРеквизитовФормы.Вставить("мПечатныеФормы");
СтруктураРеквизитовФормы.Вставить("мРежимПечати");
СтруктураРеквизитовФормы.СписокПечатаемыхЛистов = Новый СписокЗначений;
СтруктураРеквизитовФормы.мПечатныеФормы = Новый СписокЗначений;
СтруктураРеквизитовФормы.мРежимПечати = Истина;
КонтекстЭДОСервер = ДокументооборотСКО.ПолучитьОбработкуЭДО();
Если ТипЗнч(Основание) = Тип("ДокументСсылка.ЗапросНаИнформационноеОбслуживаниеСтрахователя") Тогда
Ответы = КонтекстЭДОСервер.ПолучитьОтветыНаЗапросИОС(Основание, Истина);
Если НЕ ЗначениеЗаполнено(Ответы) Тогда
РезультатОткрытия = Новый Структура("Предупреждение", "Не найдено приложение!");
Возврат;
КонецЕсли;
ИмяФайлаОтвета = Ответы[0].ИмяФайла;
ДанныеФайлаОтвета = Ответы[0].Данные;
Иначе
СодержимоеОтветы = КонтекстЭДОСервер.ПолучитьВложенияТранспортногоСообщения(Основание, Истина, Перечисления.ТипыСодержимогоТранспортногоКонтейнера.ОтветПриложениеНаЗапросПФР);
Если СодержимоеОтветы.Количество() = 0 Тогда
РезультатОткрытия = Новый Структура("Предупреждение", "Не найдено приложение!");
Возврат;
КонецЕсли;
СодержимоеОтвет = СодержимоеОтветы[0];
ИмяФайлаОтвета = СодержимоеОтвет.ИмяФайла;
ДанныеФайлаОтвета = СодержимоеОтвет.Данные;
Элементы.Печать.Видимость = Ложь;
Конецесли;
Если НЕ ЗначениеЗаполнено(ДанныеФайлаОтвета) Тогда
РезультатОткрытия = Новый Структура("Предупреждение", "Ответ пуст!");
Возврат;
КонецЕсли;
ФайлОтвета = ПолучитьИмяВременногоФайла();
ДанныеФайлаОтвета.Получить().Записать(ФайлОтвета);
ДеревоОтвета = КонтекстЭДОСервер.ЗагрузитьXMLВДеревоЗначений(ФайлОтвета);
УдалитьФайлы(ФайлОтвета);
Если ДеревоОтвета = Неопределено Тогда
РезультатОткрытия = Новый Структура("Предупреждение", "Неизвестный формат файла ответа!");
Возврат;
КонецЕсли;
РегистрационныйНомер = ПолучитьЗначениеИзДерева(ДеревоОтвета, "регистрационныйНомерПлательщика");
ИНН = ПолучитьЗначениеИзДерева(ДеревоОтвета, "ИНН");
КПП = ПолучитьЗначениеИзДерева(ДеревоОтвета, "KPP");
Адрес = ПолучитьЗначениеИзДерева(ДеревоОтвета, "адресПлательщика");
ПолноеНаименованиеОрганизации = ПолучитьЗначениеИзДерева(ДеревоОтвета, "наименованиеПлательщика");
УзелНаДату = ДеревоОтвета.Строки.Найти("наДату", "Имя", Истина);
Если ЗначениеЗаполнено(УзелНаДату) Тогда
ДатаНа = XMLЗначение(Тип("Дата"), УзелНаДату.Значение);
Если ЗначениеЗаполнено(ДатаНа) Тогда
ЭтаФорма.Заголовок = ЭтаФорма.Заголовок + " на " + Формат(ДатаНа, "ДФ=dd.MM.yyyy");
КонецЕсли;
КонецЕсли;
УзелСверка = ДеревоОтвета.Строки.Найти("сверка", "Имя");
Если УзелСверка = Неопределено Тогда
УзелСверка = ДеревоОтвета.Строки.Найти("справка", "Имя");
КонецЕсли;
Если УзелСверка <> Неопределено Тогда
УзлыРасчет = ДеревоОтвета.Строки.НайтиСтроки(Новый Структура("Имя", "расчет"), Истина);
Для Каждого УзелРасчет Из УзлыРасчет Цикл
НаименованиеЗначение = "";
КБКЗначение = "";
ВзносыЗначение = 0;
ПениЗначение = 0;
ШтрафыЗначение = 0;
ВзносыСтатусЗначение = "переплата";
ПениСтатусЗначение = "переплата";
ШтрафыСтатусЗначение = "переплата";
УзелНаименование = УзелРасчет.Строки.Найти("Наименование", "Имя");
Если УзелНаименование = Неопределено Тогда
УзелНаименование = УзелРасчет.Строки.Найти("наименование", "Имя");
КонецЕсли;
УзелКБК = УзелРасчет.Строки.Найти("КБК", "Имя");
УзелСостояние = УзелРасчет.Строки.Найти("состояние", "Имя");
Если УзелСостояние <> Неопределено Тогда
УзелВзносы = УзелСостояние.Строки.Найти("взносы", "Имя");
УзелПени = УзелСостояние.Строки.Найти("пени", "Имя");
УзелШтрафы = УзелСостояние.Строки.Найти("штрафы", "Имя");
Если УзелВзносы <> Неопределено Тогда
УзелВзносыСтатус = УзелВзносы.Строки.Найти("статус", "Имя");
КонецЕсли;
Если УзелПени <> Неопределено Тогда
УзелПениСтатус = УзелПени.Строки.Найти("статус", "Имя");
КонецЕсли;
Если УзелШтрафы <> Неопределено Тогда
УзелШтрафыСтатус = УзелШтрафы.Строки.Найти("статус", "Имя");
КонецЕсли;
Иначе
УзелВзносы = Неопределено;
УзелПени = Неопределено;
УзелШтрафы = Неопределено;
УзелВзносыСтатус = Неопределено;
УзелПениСтатус = Неопределено;
УзелШтрафыСтатус = Неопределено;
КонецЕсли;
Если УзелНаименование <> Неопределено И ЗначениеЗаполнено(УзелНаименование.Значение) Тогда
НаименованиеЗначение = XMLЗначение(Тип("Строка"), УзелНаименование.Значение);
КонецЕсли;
Если УзелКБК <> Неопределено И ЗначениеЗаполнено(УзелКБК.Значение) Тогда
КБКЗначение = XMLЗначение(Тип("Строка"), УзелКБК.Значение);
КонецЕсли;
Если УзелВзносы <> Неопределено И ЗначениеЗаполнено(УзелВзносы.Значение) Тогда
ВзносыЗначение = XMLЗначениеЧислоВПопытке(ПривестиКВидуXMLЧисло(УзелВзносы.Значение));
КонецЕсли;
Если УзелПени <> Неопределено И ЗначениеЗаполнено(УзелПени.Значение) Тогда
ПениЗначение = XMLЗначениеЧислоВПопытке(ПривестиКВидуXMLЧисло(УзелПени.Значение));
КонецЕсли;
Если УзелШтрафы <> Неопределено И ЗначениеЗаполнено(УзелШтрафы.Значение) Тогда
ШтрафыЗначение = XMLЗначениеЧислоВПопытке(ПривестиКВидуXMLЧисло(УзелШтрафы.Значение));
КонецЕсли;
Если УзелВзносыСтатус <> Неопределено Тогда
ВзносыСтатус = XMLЗначение(Тип("Строка"), УзелВзносыСтатус.Значение);
КонецЕсли;
Если УзелПениСтатус <> Неопределено Тогда
ПениСтатус = XMLЗначение(Тип("Строка"), УзелПениСтатус.Значение);
КонецЕсли;
Если УзелШтрафыСтатус <> Неопределено Тогда
ШтрафыСтатус = XMLЗначение(Тип("Строка"), УзелШтрафыСтатус.Значение);
КонецЕсли;
НовСтр = СправкаОСостоянииРасчетов.Добавить();
НовСтр.НаименованиеПлатежа = НаименованиеЗначение;
НовСтр.КБК = КБКЗначение;
Если ВзносыСтатус = "переплата" Тогда
НовСтр.ВзносыПереплата = ВзносыЗначение;
Иначе
НовСтр.ВзносыЗадолженность = ВзносыЗначение;
КонецЕсли;
Если ПениСтатус = "переплата" Тогда
НовСтр.ПениПереплата = ПениЗначение;
Иначе
НовСтр.ПениЗадолженность = ПениЗначение;
КонецЕсли;
Если ШтрафыСтатус = "переплата" Тогда
НовСтр.ШтрафыПереплата = ШтрафыЗначение;
Иначе
НовСтр.ШтрафыЗадолженность = ШтрафыЗначение;
КонецЕсли;
НовСтр.ЗадолженностьВсего = НовСтр.ВзносыЗадолженность + НовСтр.ПениЗадолженность + НовСтр.ШтрафыЗадолженность;
НовСтр.ПереплатаВсего = НовСтр.ВзносыПереплата + НовСтр.ПениПереплата + НовСтр.ШтрафыПереплата;
КонецЦикла;
Иначе
УзлыРасчет = ДеревоОтвета.Строки.НайтиСтроки(Новый Структура("Имя", "расчет"), Истина);
Для Каждого УзелРасчет Из УзлыРасчет Цикл
НаименованиеЗначение = "";
КБКЗначение = "";
ВзносыПереплата = 0;
ПениПереплата = 0;
ШтрафыПереплата = 0;
ВзносыЗадолженность = 0;
ПениЗадолженность = 0;
ШтрафыЗадолженность = 0;
УзелНаименование = УзелРасчет.Строки.Найти("Наименование", "Имя");
Если УзелНаименование = Неопределено Тогда
УзелНаименование = УзелРасчет.Строки.Найти("наименование", "Имя");
КонецЕсли;
УзелКБК = УзелРасчет.Строки.Найти("КБК", "Имя");
УзелСостояние = УзелРасчет.Строки.Найти("состояние", "Имя");
Если УзелСостояние <> Неопределено Тогда
УзелВзносы = УзелСостояние.Строки.Найти("взносы", "Имя");
УзелПени = УзелСостояние.Строки.Найти("пени", "Имя");
УзелШтрафы = УзелСостояние.Строки.Найти("штрафы", "Имя");
Если УзелВзносы <> Неопределено Тогда
УзелВзносыПереплата = УзелВзносы.Строки.Найти("переплата", "Имя");
УзелВзносыЗадолженность = УзелВзносы.Строки.Найти("задолженность", "Имя");
КонецЕсли;
Если УзелПени <> Неопределено Тогда
УзелПениПереплата = УзелПени.Строки.Найти("переплата", "Имя");
УзелПениЗадолженность = УзелПени.Строки.Найти("задолженность", "Имя");
КонецЕсли;
Если УзелШтрафы <> Неопределено Тогда
УзелШтрафыПереплата = УзелШтрафы.Строки.Найти("переплата", "Имя");
УзелШтрафыЗадолженность = УзелШтрафы.Строки.Найти("задолженность", "Имя");
КонецЕсли;
Иначе
УзелВзносы = Неопределено;
УзелПени = Неопределено;
УзелШтрафы = Неопределено;
УзелВзносыПереплата = Неопределено;
УзелПениПереплата = Неопределено;
УзелШтрафыПереплата = Неопределено;
УзелВзносыЗадолженность = Неопределено;
УзелПениЗадолженность = Неопределено;
УзелШтрафыЗадолженность = Неопределено;
КонецЕсли;
Если УзелНаименование <> Неопределено И ЗначениеЗаполнено(УзелНаименование.Значение) Тогда
НаименованиеЗначение = XMLЗначение(Тип("Строка"), УзелНаименование.Значение);
КонецЕсли;
Если УзелКБК <> Неопределено И ЗначениеЗаполнено(УзелКБК.Значение) Тогда
КБКЗначение = XMLЗначение(Тип("Строка"), УзелКБК.Значение);
КонецЕсли;
Если УзелВзносыПереплата <> Неопределено Тогда
ВзносыПереплата = XMLЗначениеЧислоВПопытке(ПривестиКВидуXMLЧисло(УзелВзносыПереплата.Значение));
КонецЕсли;
Если УзелПениПереплата <> Неопределено Тогда
ПениПереплата = XMLЗначениеЧислоВПопытке(ПривестиКВидуXMLЧисло(УзелПениПереплата.Значение));
КонецЕсли;
Если УзелШтрафыПереплата <> Неопределено Тогда
ШтрафыПереплата = XMLЗначениеЧислоВПопытке(ПривестиКВидуXMLЧисло(УзелШтрафыПереплата.Значение));
КонецЕсли;
Если УзелВзносыЗадолженность <> Неопределено Тогда
ВзносыЗадолженность = XMLЗначениеЧислоВПопытке(ПривестиКВидуXMLЧисло(УзелВзносыЗадолженность.Значение));
КонецЕсли;
Если УзелПениЗадолженность <> Неопределено Тогда
ПениЗадолженность = XMLЗначениеЧислоВПопытке(ПривестиКВидуXMLЧисло(УзелПениЗадолженность.Значение));
КонецЕсли;
Если УзелШтрафыЗадолженность <> Неопределено Тогда
ШтрафыЗадолженность = XMLЗначениеЧислоВПопытке(ПривестиКВидуXMLЧисло(УзелШтрафыЗадолженность.Значение));
КонецЕсли;
НовСтр = СправкаОСостоянииРасчетов.Добавить();
НовСтр.НаименованиеПлатежа = НаименованиеЗначение;
НовСтр.КБК = КБКЗначение;
НовСтр.ВзносыПереплата = ВзносыПереплата;
НовСтр.ПениПереплата = ПениПереплата;
НовСтр.ШтрафыПереплата = ШтрафыПереплата;
НовСтр.ВзносыЗадолженность = ВзносыЗадолженность;
НовСтр.ПениЗадолженность = ПениЗадолженность;
НовСтр.ШтрафыЗадолженность = ШтрафыЗадолженность;
НовСтр.ЗадолженностьВсего = НовСтр.ВзносыЗадолженность + НовСтр.ПениЗадолженность + НовСтр.ШтрафыЗадолженность;
НовСтр.ПереплатаВсего = НовСтр.ВзносыПереплата + НовСтр.ПениПереплата + НовСтр.ШтрафыПереплата;
КонецЦикла;
КонецЕсли;
СуммаЗадолженностьВсего = СправкаОСостоянииРасчетов.Итог("ЗадолженностьВсего");
СуммаПереплатаВсего = СправкаОСостоянииРасчетов.Итог("ПереплатаВсего");
СуммаВзносыЗадолженность = СправкаОСостоянииРасчетов.Итог("ВзносыЗадолженность");
СуммаВзносыПереплата = СправкаОСостоянииРасчетов.Итог("ВзносыПереплата");
СуммаПениЗадолженность = СправкаОСостоянииРасчетов.Итог("ПениЗадолженность");
СуммаПениПереплата = СправкаОСостоянииРасчетов.Итог("ПениПереплата");
СуммаШтрафыЗадолженность = СправкаОСостоянииРасчетов.Итог("ШтрафыЗадолженность");
СуммаШтрафыПереплата = СправкаОСостоянииРасчетов.Итог("ШтрафыПереплата");
ПронумероватьСтроки();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ОписаниеОповещения = Новый ОписаниеОповещения("ПриОткрытииЗавершение", ЭтотОбъект);
ДокументооборотСКОКлиент.ПолучитьКонтекстЭДО(ОписаниеОповещения);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура СправкаОСостоянииРасчетовПриИзменении(Элемент)
ПронумероватьСтроки();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура Печать(Команда)
Состояние(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1. Формируется печатная форма...'"), ЭтаФорма.Заголовок), , , БиблиотекаКартинок.Печать);
ТабличныйДокумент = ПечатьНаСервере("ПечататьБланк");
#Если ВебКлиент Тогда
ЭтоВебКлиент = Истина;
#Иначе
ЭтоВебКлиент = Ложь;
#КонецЕсли
ЦиклОбмена = Основание;
ПечатныеДокументы = Новый СписокЗначений;
ПечатныеДокументы.Вставить(0, ТабличныйДокумент, "Справка о состоянии расчетов");
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("ЦиклОбмена",ЦиклОбмена);
СтруктураПараметров.Вставить("ПечатныеДокументы", ПечатныеДокументы);
СтруктураПараметров.Вставить("ВидПечати", "ПечататьБланк");
СтруктураПараметров.Вставить("ЭтоВебКлиент", ЭтоВебКлиент);
ОткрытьФорму(ПутьКОбъекту + ".Форма.ПредварительныйПросмотрПечатныхФорм", СтруктураПараметров,,Новый УникальныйИдентификатор);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервереБезКонтекста
Функция ПолучитьЗначениеИзДерева(Дерево, НаименованиеУзла)
Узел = Дерево.Строки.Найти(НаименованиеУзла, "Имя", Истина);
Если Узел = Неопределено Тогда
Возврат Неопределено;
Иначе
Возврат Узел.Значение;
КонецЕсли;
КонецФункции
&НаСервереБезКонтекста
Функция ПривестиКВидуXMLЧисло(Знач СтрЧисло)
СтрЧисло = СтрЗаменить(СтрЧисло, " ", "");
СтрЧисло = СтрЗаменить(СтрЧисло, ",", ".");
СтрЧисло = СтрЗаменить(СтрЧисло, Символы.НПП, "");
Возврат СтрЧисло;
КонецФункции
&НаСервереБезКонтекста
Функция XMLЗначениеЧислоВПопытке(СтрЧисло)
Попытка
Возврат XMLЗначение(Тип("Число"), СтрЧисло);
Исключение
Возврат 0;
КонецПопытки;
КонецФункции
&НаСервере
Процедура ПронумероватьСтроки()
Для Каждого Стр Из СправкаОСостоянииРасчетов Цикл
Стр.Номер = СправкаОСостоянииРасчетов.Индекс(Стр) + 1;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытииЗавершение(Результат, ДополнительныеПараметры) Экспорт
КонтекстЭДОКлиент = Результат.КонтекстЭДО;
ПутьКОбъекту = КонтекстЭДОКлиент.ПутьКОбъекту;
ТекстПредупреждения = "";
Если ЗначениеЗаполнено(РезультатОткрытия) И РезультатОткрытия.Свойство("Предупреждение", ТекстПредупреждения) Тогда
ПоказатьПредупреждение(, ТекстПредупреждения);
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПечатьНаСервере(ВидПечати)
ТабДок = Новый ТабличныйДокумент;
МакетСправки = ПолучитьМакетОбработки("СправкаОСостоянииРасчетовИОС");
ТабДок.Очистить();
Шапка = МакетСправки.ПолучитьОбласть("Шапка");
Шапка.Параметры["РегистрационныйНомер"] = РегистрационныйНомер;
Шапка.Параметры["ИНН"] = ИНН;
Шапка.Параметры["КПП"] = КПП;
Шапка.Параметры["Адрес"] = Адрес;
Шапка.Параметры["ДатаДокумента"] = Формат(ДатаНа, "ДЛФ=DD");
Шапка.Параметры["ПолноеНаименованиеОрганизации"] = ПолноеНаименованиеОрганизации;
ТабДок.Вывести(Шапка);
ИменаКолонок = Новый Массив;
ИменаКолонок.Добавить("ВзносыЗадолженность");
ИменаКолонок.Добавить("ВзносыПереплата");
ИменаКолонок.Добавить("ПениЗадолженность");
ИменаКолонок.Добавить("ПениПереплата");
ИменаКолонок.Добавить("ШтрафыЗадолженность");
ИменаКолонок.Добавить("ШтрафыПереплата");
ВсегоЗадолженностьИтого = 0;
ВсегоПереплатаИтого = 0;
КоличествоСтрок = СправкаОСостоянииРасчетов.Количество();
Для Каждого СтрокаСправки Из СправкаОСостоянииРасчетов Цикл
СтрокаТаблицы = МакетСправки.ПолучитьОбласть("СтрокаТаблицы");
ВсегоЗадолженность = 0;
ВсегоПереплата = 0;
Для каждого ИмяКолонки Из ИменаКолонок Цикл
ЗначениеПараметра = СтрокаСправки[ИмяКолонки];
ЭтоЗадолженность = Прав(ИмяКолонки,13) = "Задолженность";
ЗнакПараметра = ?(ЭтоЗадолженность,1,-1);
Если ЭтоЗадолженность Тогда
ВсегоЗадолженность = ВсегоЗадолженность + ЗначениеПараметра;
Иначе
ВсегоПереплата = ВсегоПереплата + ЗнакПараметра * ЗначениеПараметра;
КонецЕсли;
СтрокаТаблицы.Параметры[ИмяКолонки] = ЗнакПараметра * ЗначениеПараметра;
КонецЦикла;
СтрокаТаблицы.Параметры["ВсегоЗадолженность"] = ВсегоЗадолженность;
СтрокаТаблицы.Параметры["ВсегоПереплата"] = ВсегоПереплата;
СтрокаТаблицы.Параметры["КБК"] = СтрокаСправки.КБК;
СтрокаТаблицы.Параметры["НаименованиеПлатежа"] = СтрокаСправки.НаименованиеПлатежа;
ВсегоЗадолженностьИтого = ВсегоЗадолженностьИтого + ВсегоЗадолженность;
ВсегоПереплатаИтого = ВсегоПереплатаИтого + ВсегоПереплата;
ТабДок.Вывести(СтрокаТаблицы);
КонецЦикла;
Подвал = МакетСправки.ПолучитьОбласть("Подвал");
Для каждого ИмяКолонки Из ИменаКолонок Цикл
ЗнакПараметра = ?(Прав(ИмяКолонки,13) = "Задолженность",1,-1);
Подвал.Параметры[ИмяКолонки + "Итого"] = ЗнакПараметра * СправкаОСостоянииРасчетов.Итог(ИмяКолонки);
КонецЦикла;
Подвал.Параметры["ВсегоЗадолженностьИтого"] = ВсегоЗадолженностьИтого;
Подвал.Параметры["ВсегоПереплатаИтого"] = ВсегоПереплатаИтого;
ТабДок.Вывести(Подвал);
ТабДок.АвтоМасштаб = Истина;
Возврат ТабДок;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьМакетОбработки(ИмяМакета)
ОбработкаЭДО = ДокументооборотСКО.ПолучитьОбработкуЭДО();
Возврат ОбработкаЭДО.ПолучитьМакет(ИмяМакета);
КонецФункции
#КонецОбласти