|

Как разработать обработку за выбранный период выгрузки данных по налогам в формате XML в 1С: ЗУП 3.1 КОРП


Содержание:

1. Разработка выгрузки данных по налогам в XML для 1С: ЗУП 3.1 КОРП

2. Внешний вид обработки

Разработка выгрузки данных по налогам в XML для 1С: ЗУП 3.1 КОРП

Необходимо разработать обработку за выбранный период (по месяцам) выгрузки данных по налогам в формате xml для дальнейшей передачи в другие системы. В конфигурации ЗУП 3.1 по кнопке «заполнить» в форме обработки надо разработать процедуру заполнения табличных частей 1С НДФЛ и ПрочиеНалоги. 

Данных по налогу НДФЛ необходимо получить из регистра накопления в 1С: ЗУП РасчетыНалогоплательщиковСБюджетомПоНДФЛ с отбором по Организация по Подразделение по Период и только вид движения регистра как приход.

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

Потом заполненные данные по кнопке «Выгрузить» необходимо выгрузить в xml файл в 1С.

В первой закладке заполняются налоги по НДФЛ. Во второй закладке ПрочиеНалоги.

Внешний вид обработки

Внешний вид обработки выглядит так:

Выгрузка налогов

Процедуры и функции модуля формы обработки:

&НаКлиенте

Процедура ВыборПериодаПриИзменении(Элемент)

    ДатаДоИзменения = Объект.ПериодДокументов1;

    ЗарплатаКадрыКлиент.ВводМесяцаПриИзменении(ЭтаФорма, “Объект.ПериодДокументов1”,

    “ВыборПериодаСтрокой”, Модифицированность);

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

&НаКлиенте

Процедура ВыборПериодаНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)

    ДополнительныеПараметры = Новый Структура(“ДатаДоИзменения”, Объект.ПериодДокументов1);

    Оповещение = Новый ОписаниеОповещения(“НачалоПериодаРасчетаСтрокойНачалоВыбораЗавершение”,

    ЭтотОбъект, ДополнительныеПараметры);

    ЗарплатаКадрыКлиент.ВводМесяцаНачалоВыбора(ЭтаФорма, ЭтаФорма, “Объект.ПериодДокументов1”,

    “ВыборПериодаСтрокой”, , Оповещение);

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

&НаКлиенте

Процедура ВыборПериодаРегулирование(Элемент, Направление, СтандартнаяОбработка)

    ДатаДоИзменения = Объект.ПериодДокументов1;

    ЗарплатаКадрыКлиент.ВводМесяцаРегулирование(ЭтаФорма, “Объект.ПериодДокументов1”,

    “ВыборПериодаСтрокой”, Направление, Модифицированность);

    Объект.ПериодДокументов2 = КонецМесяца(Объект.ПериодДокументов1);

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

 
&НаКлиенте
Процедура ПриОткрытии(Отказ)
    
    Объект.Дата1 = НачалоМесяца(ТекущаяДата());
    Объект.Дата2 = КонецМесяца(Объект.Дата1);
    Объект.ПериодДокументов1 = Объект.Дата1;
    Объект.ПериодДокументов2 = Объект.Дата2;
    
    ДобавитьСтрокуПараметровНалогов("НДФЛ");
    ДобавитьСтрокуПараметровНалогов("ФСС");
    ДобавитьСтрокуПараметровНалогов("ФССНС");
    ДобавитьСтрокуПараметровНалогов("ФФОМС");
    ДобавитьСтрокуПараметровНалогов("ПФР");
    
    ВыборПериодаСтрокой = ЗарплатаКадрыКлиентСервер.ПолучитьПредставлениеМесяца(Объект.ПериодДокументов1);
    
    УстановитьВидимость();
    
КонецПроцедуры  
 
Процедура ДобавитьСтрокуПараметровНалогов(Имя)
    
    ПараметрыОтбора =  Новый Структура;
    
    ПараметрыОтбора.Вставить("Налог", Имя);
    
    СтрокаПараметров = Объект.ПараметрыНалогов.НайтиСтроки(ПараметрыОтбора);
    
    Если СтрокаПараметров.Количество() = 0 Тогда
        
        НоваяСтрока = Объект.ПараметрыНалогов.Добавить();
        
        НоваяСтрока.Налог = Имя;
        
        Если Имя = "НДФЛ" Тогда
            НоваяСтрока.ТекстПлатежа = "НДФЛ {Период} КПП {КПП}";
            НоваяСтрока.КБК = "18210102010011000110" ;
        ИначеЕсли  Имя = "ФСС" Тогда
            НоваяСтрока.ТекстПлатежа = "Страховые взносы ФСС {Период} Рег № {КодФСС}";
            НоваяСтрока.КБК = "18210202090071010160" ;
        ИначеЕсли  Имя = "ФССНС" Тогда
            НоваяСтрока.ТекстПлатежа = "Страховые взносы ФСС НС {Период} Рег № {КодФСС}";
            НоваяСтрока.КБК = "39310202050071000160" ;
        ИначеЕсли  Имя = "ФФОМС" Тогда
            НоваяСтрока.ТекстПлатежа = "Страховые взносы ФФОМС {Период} Рег № {КодПФР}";
            НоваяСтрока.КБК = "18210202101081013160" ;
        ИначеЕсли  Имя = "ПФР" Тогда    
            НоваяСтрока.ТекстПлатежа = "Страховые взносы ПФР {Период} Рег № {КодПФР}";
            НоваяСтрока.КБК = "18210202010061010160" ;
        КонецЕсли; 
        
    КонецЕсли;
    
КонецПроцедуры
 
&НаКлиенте
Процедура ПодразделенияОрганизацииНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    ЗначениеОтбора = Новый Структура("ГоловнаяОрганизация", Объект.Организация);
    
    ПараметрыВыбора = Новый Структура("Отбор", ЗначениеОтбора);
    ПараметрыВыбора.Вставить("РежимВыбора", Истина);
    ПараметрыВыбора.Вставить("МножественныйВыбор", Истина);
    
    #Если ТолстыйКлиент Тогда
        ФормаВыбора = ОткрытьФормуМодально("Справочник.ПодразделенияОрганизаций.ФормаСписка", ПараметрыВыбора, Элемент);
    #Иначе 
        ФормаВыбора = ОткрытьФорму("Справочник.ПодразделенияОрганизаций.ФормаВыбора", ПараметрыВыбора, Элемент);       
    #КонецЕсли
    
КонецПроцедуры
 
&НаКлиенте
Процедура ПодразделенияОрганизацииОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Объект.ПодразделенияОрганизации.ЗагрузитьЗначения(ВыбранноеЗначение);
КонецПроцедуры
 
&НаСервере
Процедура ЗаполнитьНаСервере()
    
    Если Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаНДФЛ Тогда
        ЗаполнитьНДФЛ();
    Иначе
        ЗаполнитьНалоги();
    КонецЕсли;
    
КонецПроцедуры
 
&НаКлиенте
Процедура Заполнить(Команда)
    ЗаполнитьНаСервере();
КонецПроцедуры
 
&НаСервере
Процедура ЗаполнитьНДФЛ() Экспорт
    
    Запрос = Новый Запрос; 
    
    Запрос.УстановитьПараметр("Дата1", НачалоДня(Объект.Дата1));
    Запрос.УстановитьПараметр("Дата2", КонецДня(Объект.Дата2));
    Запрос.УстановитьПараметр("Организация", Объект.Организация);
    Запрос.УстановитьПараметр("ОрганизацияПустая", Объект.Организация.Пустая());
    Запрос.УстановитьПараметр("ПустоеПодразделение", Справочники.ПодразделенияОрганизаций.ПустаяСсылка());
    Запрос.УстановитьПараметр("ПодразделенияОрганизации", Объект.ПодразделенияОрганизации);
    Запрос.УстановитьПараметр("ПодразделениеВыбран", ЗначениеЗаполнено(Объект.ПодразделенияОрганизации));
 
    ТекстЗапроса = 
    "ВЫБРАТЬ
    |    Данные.Организация КАК Организация,
    |    Данные.Подразделение КАК ПодразделениеОрганизации,
    |    СУММА(Данные.Сумма) КАК Сумма
    |ПОМЕСТИТЬ втДанные
    |ИЗ
    |    РегистрНакопления.РасчетыНалогоплательщиковСБюджетомПоНДФЛ КАК Данные
    |ГДЕ
    |    ВЫБОР
    |            КОГДА &ОрганизацияПустая
    |                ТОГДА ИСТИНА
    |            ИНАЧЕ Данные.Организация = &Организация
    |        КОНЕЦ
    |    И Данные.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
    |    И Данные.Период МЕЖДУ &Дата1 И &Дата2
    |    И  Данные.Подразделение  <>&ПустоеПодразделение
    |    И ВЫБОР
    |            КОГДА &ПодразделениеВыбран
    |                ТОГДА Данные.Подразделение В (&ПодразделенияОрганизации)
    |            ИНАЧЕ ИСТИНА
    |        КОНЕЦ
    |
    |СГРУППИРОВАТЬ ПО
    |    Данные.Организация,
    |    Данные.Подразделение
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    Данные.Организация,
    |    ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка),
    |    СУММА(Данные.Сумма)
    |ИЗ
    |    РегистрНакопления.РасчетыНалогоплательщиковСБюджетомПоНДФЛ КАК Данные
    |ГДЕ
    |    ВЫБОР
    |            КОГДА &ОрганизацияПустая
    |                ТОГДА ИСТИНА
    |            ИНАЧЕ Данные.Организация = &Организация
    |        КОНЕЦ
    |    И Данные.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
    |    И Данные.Период МЕЖДУ &Дата1 И &Дата2
    |    И ВЫБОР
    |            КОГДА &ПодразделениеВыбран
    |                ТОГДА Данные.Подразделение В (&ПодразделенияОрганизации)
    |            ИНАЧЕ ИСТИНА
    |        КОНЕЦ
    |
    |СГРУППИРОВАТЬ ПО
    |    Данные.Организация
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |    втДанные.Организация КАК Организация,
    |    втДанные.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
    |    втДанные.Сумма КАК Сумма
    |ИЗ
    |    втДанные КАК втДанные
    |
    |УПОРЯДОЧИТЬ ПО
    |    Организация,
    |    ПодразделениеОрганизации
    |АВТОУПОРЯДОЧИВАНИЕ";
    
    Запрос.Текст = ТекстЗапроса;
 
    РезультатЗапроса = Запрос.Выполнить();  
    
    Объект.НДФЛ.Загрузить(РезультатЗапроса.Выгрузить());
    
КонецПроцедуры
 
&НаСервере
Процедура ЗаполнитьНалоги() Экспорт
    
    Запрос = Новый Запрос;
    
    Запрос.УстановитьПараметр("Дата1", НачалоДня(Объект.Дата1));
    Запрос.УстановитьПараметр("Дата2", КонецДня(Объект.Дата2));
    Запрос.УстановитьПараметр("Организация", Объект.Организация);
    Запрос.УстановитьПараметр("ОрганизацияПустая", Объект.Организация.Пустая());
    
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    Данные.Организация,
    |    СУММА(Данные.ФСС) КАК ФСС,
    |    СУММА(Данные.ФССНесчастныеСлучаи) КАК ФССНС,
    |    СУММА(Данные.ФФОМС) КАК ФФОМС,
    |    СУММА(Данные.ПФРДоПредельнойВеличины) КАК ПФР
    |ИЗ
    |    РегистрНакопления.СтраховыеВзносыПоФизическимЛицам КАК Данные
    |ГДЕ
    |    ВЫБОР
    |            КОГДА &ОрганизацияПустая
    |                ТОГДА ИСТИНА
    |            ИНАЧЕ Данные.Организация = &Организация
    |        КОНЕЦ
    |    И Данные.Период МЕЖДУ &Дата1 И &Дата2
    |
    |СГРУППИРОВАТЬ ПО
    |    Данные.Организация
    |
    |УПОРЯДОЧИТЬ ПО
    |    Данные.Организация.Наименование";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Объект.ПрочиеНалоги.Загрузить(РезультатЗапроса.Выгрузить());
    
КонецПроцедуры
 
&НаКлиенте
Процедура ВыборПериода(Команда)
    
    ВыбранныйПериод = Новый СтандартныйПериод;
    
    // Устанавливаем начальные данные
    ВыбранныйПериод.ДатаНачала    = Объект.Дата1;
    ВыбранныйПериод.ДатаОкончания = Объект.Дата2;
    
    Диалог = Новый ДиалогРедактированияСтандартногоПериода();
    Диалог.Период = ВыбранныйПериод;
    // Не модальный вызов диалога выбора периода
    Диалог.Показать(Новый ОписаниеОповещения("ВыборПериодаЗавершение", ЭтаФорма, Новый Структура("Диалог", Диалог)));
    
КонецПроцедуры
 
&НаКлиенте
Процедура ВыборПериодаЗавершение(Период, ДополнительныеПараметры) Экспорт
    
    Диалог = ДополнительныеПараметры.Диалог;
    
    Если ЗначениеЗаполнено(Период) Тогда 
        ВыбранныйПериод = Диалог.Период;
        Объект.Дата1 = ВыбранныйПериод.ДатаНачала;
        Объект.Дата2 = ВыбранныйПериод.ДатаОкончания;
        Объект.ПериодДокументов1 = Объект.Дата1;
        Объект.ПериодДокументов2 = Объект.Дата2;
        ВыборПериодаСтрокой = ЗарплатаКадрыКлиентСервер.ПолучитьПредставлениеМесяца(Объект.ПериодДокументов1);
    КонецЕсли;
    
КонецПроцедуры
 
&НаСервере
Процедура УстановитьВидимость()
    
    Если Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаНДФЛ Тогда
        Элементы.ПериодДокументов1.Видимость        = Ложь;
        Элементы.ПериодДокументов2.Видимость        = Ложь;
        Элементы.ВыборПериода.Видимость             = Истина;
        Объект.ПериодДокументов1 = НачалоМесяца(ТекущаяДата());
        Объект.ПериодДокументов2 = КонецМесяца(Объект.ПериодДокументов1);
        ВыборПериодаСтрокой = ЗарплатаКадрыКлиентСервер.ПолучитьПредставлениеМесяца(Объект.ПериодДокументов1);
    ИначеЕсли Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаНалоги Тогда
        Элементы.ПериодДокументов1.Видимость        = Истина;
        Элементы.ПериодДокументов2.Видимость        = Истина;
        Элементы.ВыборПериода.Видимость             = Ложь;
    КонецЕсли; 
    
КонецПроцедуры
 
&НаКлиенте
Процедура ГруппаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
    УстановитьВидимость();
КонецПроцедуры
 
&НаКлиенте
Процедура ИмяФайлаНДФЛНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    Диалог.Фильтр = НСтр("ru = 'Файла данных'; en = 'Data file'") + "(*.xml)|*.xml";;
    Диалог.МножественныйВыбор = Ложь;
    Диалог.Заголовок = "Выбор файла данных";
    Диалог.ПолноеИмяФайла = Объект.ИмяФайлаНДФЛ;
    
    Если Диалог.Выбрать() Тогда
        Объект.ИмяФайлаНДФЛ = Диалог.ПолноеИмяФайла;
    КонецЕсли;
    
КонецПроцедуры
 
&НаКлиенте
Процедура ИмяФайлаНалогиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
    Диалог.Фильтр = НСтр("ru = 'Файла данных'; en = 'Data file'") + "(*.xml)|*.xml";;
    Диалог.МножественныйВыбор = Ложь;
    Диалог.Заголовок = "Выбор файла данных";
    Диалог.ПолноеИмяФайла = Объект.ИмяФайлаНалоги;
    
    Если Диалог.Выбрать() Тогда
        Объект.ИмяФайлаНалоги = Диалог.ПолноеИмяФайла;
    КонецЕсли;
    
КонецПроцедуры
 
&НаКлиенте
Процедура Выгрузить(Команда)
    
    Перем Ошибки;
    
    Отказ = Ложь;
    
    Если Элементы.ГруппаСтраницы.ТекущаяСтраница = Элементы.СтраницаНДФЛ Тогда
        СтрокаОшибок = ВыгрузитьНДФЛ();
    Иначе
        СтрокаОшибок = ВыгрузитьНалоги();
    КонецЕсли;
    
    Если СтрокаОшибок = "" Тогда
        ПоказатьПредупреждение(, "Выгрузка завершена успешно!",, "ЗАВЕРШЕНИЕ!");
    Иначе
        ПоказатьПредупреждение(, "Выгрузка завершена с ошибками!",, "ВНИМАНИЕ!");
        ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "", СтрокаОшибок,"");
        ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ);
    КонецЕсли;
    
КонецПроцедуры
 
&НаКлиенте
Функция ВыгрузитьНДФЛ() Экспорт
    
    Результат = "";
    
    Если ПустаяСтрока(Объект.ИмяФайлаНДФЛ) Тогда
        
        Результат = "Не задано имя файла выгрузки!";
        
    Иначе
        
        СтруктураОтбора = Новый Структура;
        СтруктураОтбора.Вставить("Налог", "НДФЛ");
        СтрокиПараметровНалогов = Объект.ПараметрыНалогов.НайтиСтроки(СтруктураОтбора);
        
        ЗаписьXML = Новый ЗаписьXML;
        ЗаписьXML.ОткрытьФайл(Объект.ИмяФайлаНДФЛ);
        ЗаписьXML.ЗаписатьОбъявлениеXML();
        
        ЗаписьXML.ЗаписатьНачалоЭлемента("Коллекция");
        ЗаписьXML.ЗаписатьАтрибут("Начало", Формат(Объект.Дата1, "ДФ=dd.MM.yyyy"));
        ЗаписьXML.ЗаписатьАтрибут("Окончание", Формат(Объект.Дата2, "ДФ=dd.MM.yyyy"));
        ЗаписьXML.ЗаписатьАтрибут("АнализЗаявокС", Формат(Объект.ПериодДокументов1, "ДФ=dd.MM.yyyy"));
        ЗаписьXML.ЗаписатьАтрибут("АнализЗаявокПо", Формат(Объект.ПериодДокументов2, "ДФ=dd.MM.yyyy"));
        
        ТаблицаНалоговых = СформироватьТаблицуНалоговых();
        
        Для каждого СтрокаТаблицы из Объект.НДФЛ Цикл
            
            Если СтрокаТаблицы.Сумма = 0 Тогда
                Продолжить;
            КонецЕсли;
            
            ЗаписьXML.ЗаписатьНачалоЭлемента("СтрокаДанных");
            
            Если ЗначениеЗаполнено(СтрокаТаблицы.ПодразделениеОрганизации) Тогда
                РегистрацияВНалоговомОрганеПодразделение = ПолучитьРеквизит(СтрокаТаблицы.ПодразделениеОрганизации,"РегистрацияВНалоговомОргане");
                ЗаписьXML.ЗаписатьАтрибут("КодИФНС", ПолучитьРеквизит(РегистрацияВНалоговомОрганеПодразделение,"Код"));
            Иначе
                РегистрацияВНалоговомОрганеОрганизации = ПолучитьРеквизит(СтрокаТаблицы.Организация,"РегистрацияВНалоговомОргане");
                ЗаписьXML.ЗаписатьАтрибут("КодИФНС", ПолучитьРеквизит(РегистрацияВНалоговомОрганеОрганизации,"Код"));
            КонецЕсли; 
            
            ЗаписьXML.ЗаписатьАтрибут("Налог", "НДФЛ");
            ЗаписьXML.ЗаписатьАтрибут("ОрганизацияИНН", ПолучитьРеквизит(СтрокаТаблицы.Организация, "ИНН"));
            ЗаписьXML.ЗаписатьАтрибут("ОрганизацияНаименование", ПолучитьРеквизит(СтрокаТаблицы.Организация,"Наименование"));
            ЗаписьXML.ЗаписатьАтрибут("ПодразделениеКод", ПолучитьДопРеквизит(СтрокаТаблицы.ПодразделениеОрганизации,"Synchro"));
            ЗаписьXML.ЗаписатьАтрибут("ПодразделениеНаименование", ПолучитьРеквизит(СтрокаТаблицы.ПодразделениеОрганизации,"Наименование"));
            
            РегистрацияВНалоговомОрганеПодразделения = ПолучитьРеквизит(СтрокаТаблицы.ПодразделениеОрганизации,"РегистрацияВНалоговомОргане");
            
            Если ЗначениеЗаполнено(СтрокаТаблицы.ПодразделениеОрганизации) Тогда
                ЗаписьXML.ЗаписатьАтрибут("ПодразделениеОКАТО", ПолучитьРеквизит(РегистрацияВНалоговомОрганеПодразделения,"КодПоОКТМО"));
            Иначе
                ЗаписьXML.ЗаписатьАтрибут("ПодразделениеОКАТО", ПолучитьРеквизит(РегистрацияВНалоговомОрганеОрганизации,"КодПоОКТМО"));
            КонецЕсли; 
            
            ЗаписьXML.ЗаписатьАтрибут("НалоговаяИНН", ПолучитьНалоговуюПодразделения(ТаблицаНалоговых, СтрокаТаблицы.ПодразделениеОрганизации));
            ЗаписьXML.ЗаписатьАтрибут("Сумма", Формат(СтрокаТаблицы.Сумма, "ЧЦ=10; ЧДЦ=2; ЧРД=.; ЧГ="));
            
            Если СтрокиПараметровНалогов.Количество() = 0 Тогда
                ЗаписьXML.ЗаписатьАтрибут("КБК", "");
                ЗаписьXML.ЗаписатьАтрибут("ТекстПлатежа", "");
            Иначе
                СтрокаПараметровНалогов = СтрокиПараметровНалогов[0];
                ЗаписьXML.ЗаписатьАтрибут("КБК", СтрокаПараметровНалогов.КБК);
                ЗаписьXML.ЗаписатьАтрибут("ТекстПлатежа", СформироватьТекстПлатежа(СтрокаПараметровНалогов.ТекстПлатежа, СтрокаТаблицы.Организация, СтрокаТаблицы.ПодразделениеОрганизации, Объект.Дата1));
            КонецЕсли;
            
            ЗаписьXML.ЗаписатьКонецЭлемента();
            
        КонецЦикла;
        
        ЗаписьXML.ЗаписатьКонецЭлемента();
        
        ЗаписьXML.Закрыть();
        
    КонецЕсли;
    
    Возврат Результат;
    
КонецФункции
 
 
&НаКлиенте
Функция ВыгрузитьНалоги() Экспорт
    
    Результат = "";
    
    Если ПустаяСтрока(Объект.ИмяФайлаНалоги) Тогда
        
        Результат = "Не задано имя файла выгрузки!";
        
    Иначе
        
        СтруктураОтбора = Новый Структура;
        СтруктураОтбора.Вставить("Налог", "ФСС");
        СтрокиПараметровНалогов = Объект.ПараметрыНалогов.НайтиСтроки(СтруктураОтбора);
        СтрокаПараметровНалоговФСС   = СтрокиПараметровНалогов[0];
        
        СтруктураОтбора.Вставить("Налог", "ФССНС");
        СтрокиПараметровНалогов = Объект.ПараметрыНалогов.НайтиСтроки(СтруктураОтбора);
        СтрокаПараметровНалоговФССНС =  СтрокиПараметровНалогов[0];
        
        СтруктураОтбора.Вставить("Налог", "ФФОМС");
        СтрокиПараметровНалогов = Объект.ПараметрыНалогов.НайтиСтроки(СтруктураОтбора);
        СтрокаПараметровНалоговФФОМС = СтрокиПараметровНалогов[0];
        
        СтруктураОтбора.Вставить("Налог", "ПФР");
        СтрокиПараметровНалогов = Объект.ПараметрыНалогов.НайтиСтроки(СтруктураОтбора);
        СтрокаПараметровНалоговПФР = СтрокиПараметровНалогов[0];
        
        ЗаписьXML = Новый ЗаписьXML;
        ЗаписьXML.ОткрытьФайл(Объект.ИмяФайлаНалоги);
        ЗаписьXML.ЗаписатьОбъявлениеXML();
        
        ЗаписьXML.ЗаписатьНачалоЭлемента("Коллекция");
        ЗаписьXML.ЗаписатьАтрибут("Начало",         Формат(Объект.Дата1, "ДФ=dd.MM.yyyy"));
        ЗаписьXML.ЗаписатьАтрибут("Окончание",      Формат(Объект.Дата2, "ДФ=dd.MM.yyyy"));
        ЗаписьXML.ЗаписатьАтрибут("АнализЗаявокС",  Формат(Объект.ПериодДокументов1, "ДФ=dd.MM.yyyy"));
        ЗаписьXML.ЗаписатьАтрибут("АнализЗаявокПо", Формат(Объект.ПериодДокументов2, "ДФ=dd.MM.yyyy"));
        
        Для каждого СтрокаТаблицы из Объект.ПрочиеНалоги Цикл
            
            РегистрацияВНалоговомОрганеОрганизации = ПолучитьРеквизит(СтрокаТаблицы.Организация, "РегистрацияВНалоговомОргане");
            
            Если не СтрокаТаблицы.ФСС = 0 Тогда
                ДобавитьИнформациюОНалоге(СтрокаТаблицы.ФСС, "СтрокаДанных", СтрокаТаблицы.Организация, СтрокаПараметровНалоговФСС, ЗаписьXML);
                ЗаписьXML.ЗаписатьАтрибут("Налог", "ФСС");
                ЗаписьXML.ЗаписатьАтрибут("ПодразделениеОКАТО", ПолучитьРеквизит(РегистрацияВНалоговомОрганеОрганизации, "КодПоОКТМО"));
                ЗаписьXML.ЗаписатьКонецЭлемента();
            КонецЕсли;
            
            Если СтрокаТаблицы.ФССНС <> 0 Тогда
                
                ДобавитьИнформациюОНалоге(СтрокаТаблицы.ФССНС, "СтрокаДанных", СтрокаТаблицы.Организация, СтрокаПараметровНалоговФССНС, ЗаписьXML);
                
                ЗаписьXML.ЗаписатьАтрибут("Налог", "ФССНС");
                
                Если ПолучитьРеквизит(СтрокаТаблицы.Организация, "ИНН") = "1616015973" Тогда 
                    ЗаписьXML.ЗаписатьАтрибут("НалоговаяИНН", "1655003950");  
                    ЗаписьXML.ЗаписатьАтрибут("НалоговаяКПП", "165501001");   
                ИначеЕсли ПолучитьРеквизит(СтрокаТаблицы.Организация, "ИНН") = "3313029011" Тогда
                    ЗаписьXML.ЗаписатьАтрибут("НалоговаяИНН", "3328300610"); 
                    ЗаписьXML.ЗаписатьАтрибут("НалоговаяКПП", "332801001");
                ИначеЕсли ПолучитьРеквизит(СтрокаТаблицы.Организация, "ИНН") = "0245964902" Тогда 
                    ЗаписьXML.ЗаписатьАтрибут("НалоговаяИНН", "0275016083");
                    ЗаписьXML.ЗаписатьАтрибут("НалоговаяКПП", "027401001");
                Иначе
                    ЗаписьXML.ЗаписатьАтрибут("НалоговаяИНН", "1655003950");
                    ЗаписьXML.ЗаписатьАтрибут("НалоговаяКПП", "165501001");
                КонецЕсли; 
                
                ЗаписьXML.ЗаписатьАтрибут("ПодразделениеОКАТО", ПолучитьРеквизит(РегистрацияВНалоговомОрганеОрганизации, "КодПоОКТМО"));
                
                ЗаписьXML.ЗаписатьКонецЭлемента();
                
            КонецЕсли;
            
            Если СтрокаТаблицы.ФФОМС <> 0 Тогда
                ДобавитьИнформациюОНалоге(СтрокаТаблицы.ФФОМС, "СтрокаДанных", СтрокаТаблицы.Организация, СтрокаПараметровНалоговФФОМС, ЗаписьXML);
                ЗаписьXML.ЗаписатьАтрибут("Налог", "ФФОМС");
                ЗаписьXML.ЗаписатьАтрибут("ПодразделениеОКАТО", ПолучитьРеквизит(РегистрацияВНалоговомОрганеОрганизации,"КодПоОКТМО"));
                
                ЗаписьXML.ЗаписатьКонецЭлемента();
            КонецЕсли;
            
            Если СтрокаТаблицы.ПФР <> 0 Тогда
                ДобавитьИнформациюОНалоге(СтрокаТаблицы.ПФР, "СтрокаДанных", СтрокаТаблицы.Организация, СтрокаПараметровНалоговПФР, ЗаписьXML);
                ЗаписьXML.ЗаписатьАтрибут("Налог", "ПФР");
                ЗаписьXML.ЗаписатьАтрибут("ПодразделениеОКАТО", ПолучитьРеквизит(РегистрацияВНалоговомОрганеОрганизации,"КодПоОКТМО"));
                
                ЗаписьXML.ЗаписатьКонецЭлемента();
            КонецЕсли;
            
        КонецЦикла; 
        
        ЗаписьXML.ЗаписатьКонецЭлемента();
        
        ЗаписьXML.Закрыть();
        
    КонецЕсли;
    
    Возврат Результат;
    
КонецФункции
 
&НаКлиенте
Процедура ДобавитьИнформациюОНалоге(Сумма, Налог, Организация, СтрокаПараметровНалогов, ЗаписьXML)
    
    ЗаписьXML.ЗаписатьНачалоЭлемента(Налог);
    
    РегистрацияВНалоговомОрганеОрганизации = ПолучитьРеквизит(Организация,"РегистрацияВНалоговомОргане");
    
    КодИМНС = ПолучитьРеквизит(РегистрацияВНалоговомОрганеОрганизации, "Код");
    
    Если СтрокаПараметровНалогов.Налог = "ФССНС" Тогда
        ЗаписьXML.ЗаписатьАтрибут("КодИФНС", КодИМНС + "_2");
    Иначе
        ЗаписьXML.ЗаписатьАтрибут("КодИФНС", КодИМНС);
    КонецЕсли; 
    
    ЗаписьXML.ЗаписатьАтрибут("ОрганизацияИНН", ПолучитьРеквизит(Организация, "ИНН"));
    ЗаписьXML.ЗаписатьАтрибут("ОрганизацияНаименование", ПолучитьРеквизит(Организация,"Наименование"));
    ЗаписьXML.ЗаписатьАтрибут("Сумма", Формат(Сумма, "ЧЦ=10; ЧДЦ=2; ЧРД=.; ЧГ="));
    
    Если СтрокаПараметровНалогов = Неопределено Тогда
        ЗаписьXML.ЗаписатьАтрибут("КБК", "");
        ЗаписьXML.ЗаписатьАтрибут("ТекстПлатежа", "");
    Иначе
        ЗаписьXML.ЗаписатьАтрибут("КБК", СтрокаПараметровНалогов.КБК);
        ЗаписьXML.ЗаписатьАтрибут("ТекстПлатежа", СформироватьТекстПлатежа(СтрокаПараметровНалогов.ТекстПлатежа, 
        Организация, Неопределено, Объект.Дата1));
    КонецЕсли;
    
КонецПроцедуры
 
&НаСервереБезКонтекста
Функция СформироватьТаблицуНалоговых()
    
    Запрос = Новый Запрос;
    
    СвойствоНалоговая = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Налоговая ИНН");
 
    Запрос.УстановитьПараметр("Свойство", СвойствоНалоговая);
    
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    Данные.Значение КАК Значение,
    |    Данные.Ссылка КАК Объект
    |ИЗ
    |    Справочник.ПодразделенияОрганизаций.ДополнительныеРеквизиты КАК Данные
    |ГДЕ
    |    Данные.Свойство = &Свойство";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать();
    
    СтруктураНалоговые = Новый Соответствие;
    
    Пока Выборка.Следующий() Цикл
        СтруктураНалоговые.Вставить(Выборка.Объект, Выборка.Значение);
    КонецЦикла; 
    
    Возврат СтруктураНалоговые;
    
КонецФункции
 
&НаСервереБезКонтекста
Функция СформироватьТекстПлатежа(Знач ТекстПлатежа, Организация, ПодразделениеОрганизации = Неопределено, Период)
    
    Если ЗначениеЗаполнено(ПодразделениеОрганизации) Тогда
        РегистрацияВНалоговомОрганеПодразделения = ПолучитьРеквизит(ПодразделениеОрганизации, "РегистрацияВНалоговомОргане");
    КонецЕсли; 
    
    РегистрацияВНалоговомОрганеОрганизации = ПолучитьРеквизит(Организация,"РегистрацияВНалоговомОргане");
    
    Результат = ТекстПлатежа;
    Результат = СтрЗаменить(Результат, "{Период}", Формат(Период, "ДФ='ММММ гггг'"));
    Результат = СтрЗаменить(Результат, "{КПП}", ?(ЗначениеЗаполнено(ПодразделениеОрганизации), ПолучитьРеквизит(РегистрацияВНалоговомОрганеПодразделения,"КПП"),  ПолучитьРеквизит(РегистрацияВНалоговомОрганеОрганизации,"КПП")));
    Результат = СтрЗаменить(Результат, "{КодФСС}", ?(ПустаяСтрока(Организация.РегистрационныйНомерФСС), "0", Организация.РегистрационныйНомерФСС));
    Результат = СтрЗаменить(Результат, "{КодПФР}", ?(ПустаяСтрока(Организация.РегистрационныйНомерПФР), "0", Организация.РегистрационныйНомерПФР));
    
    Возврат Результат;
    
КонецФункции
 
&НаСервереБезКонтекста
Функция ПолучитьНалоговуюПодразделения(ТаблицаНалоговых, Подразделение)
    
    Перем Результат;
    
    Значение = ТаблицаНалоговых.Получить(Подразделение);
    
    Если Значение = Неопределено Тогда
        Результат = "";
    Иначе
        Результат = Значение;
    КонецЕсли;
    
    Возврат Результат;
    
КонецФункции
 
&НаСервереБезКонтекста
Функция ПолучитьРеквизит(Ссылка, Реквизит) Экспорт
    Возврат Ссылка[Реквизит];
КонецФункции
 
&НаСервереБезКонтекста
Функция ПолучитьДопРеквизит(Ссылка, Реквизит)
    
    ПараметрыОтбора = Новый Структура;
    
    Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию(Реквизит);
    ПараметрыОтбора.Вставить("Свойство",Свойство);
    НайденныеСтроки = Ссылка.ДополнительныеРеквизиты.НайтиСтроки(ПараметрыОтбора);    
    
    Если НайденныеСтроки.Количество() > 0 Тогда
        Возврат НайденныеСтроки[0].Значение;
    Иначе    
        Возврат "";
    КонецЕсли; 
    
КонецФункции // ПолучитьДопРеквизит()

Специалист компании ООО "Кодерлайн",
Айзатуллов Марс

Помогла ли вам статья? Оставьте свой комментарий:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Блог про 1С:Предприятие

Copyright © 2024 TopKoder

Мы занимаемся внедрением и обслуживанием программных продуктов 1С.