gifts2017

ЗиК 7.7 заполнение данных по донорским дням в карточке "Сведения о стаже"

Опубликовал Зарема Максудова (Zarema) в раздел Программирование - Практика программирования

Сначала оговорюсь, что наша конфигурация неоднократно изменялась и от стандартной очень отличается, поэтому буду приводить куски кода без указания номеров строк. Документы по донорским дням вводятся в систему через документ «Оплата по среднему» вид расчета указывается «Дни доноров» (собственно добавленный нами вид расчета). Так как донорские дни не облагаются страховыми взносами, то и в стаж эти дни попадать не должны. Соответственно при сдачи отчетности в ПФР нужно заполнять карточку «Сведения о стаже». Это конечно можно было сделать вручную, когда документов не больше десятка, но когда их более 250, то бухгалтерам проблематично внести все отклонения в систему. Поэтому автоматизируем процесс :)  

1. Перечисление- СЗВПараметр3ИТС2010 добавить значение «ДОНОРСКИЕ»

      2. Добавить в процедуру глЗаполнитьТаблицуСотрудниковСОсобымиПериодами передаваемый параметр СписокВРДонорскиеДни

Процедура глЗаполнитьТаблицуСотрудниковСОсобымиПериодами(ТаблицаСотрудниковСОсобымиПериодами, СписокСотрудников, ДатаНачала, ДатаОкончания,СписокВРБольничныеЛисты,СписокВРОтпускаБезСохранения,

СписокВРОтпускаИсключаемыеИзСтажа,СписокВРДонорскиеДни)  

 

      3. Добавить запрос а процедуру глЗаполнитьТаблицуСотрудниковСОсобымиПериодами

Запрос=СоздатьОбъект("Запрос"); 

      ТекстЗапроса = "//{{ЗАПРОС(ТаблицаПериодовДействияОтпуск)

      |с ДатаЗапросаС по ДатаЗапросаПо;

      |Сотрудник = ЖурналРасчетов.Зарплата.Объект;

      |ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч;

      |Группировка Сотрудник без групп;

      |Условие(Сотрудник в СписокСотрудников);

      |Условие(ВидРасч в СписокВРОтпускаИсключаемыеИзСтажа);

      |"//}}ЗАПРОС

      ;

            Если Запрос.Выполнить(ТекстЗапроса) =1 Тогда

                  Пока Запрос.Группировка("Сотрудник")=1 Цикл

                             ТаблицаСотрудниковСОсобымиПериодами.НоваяСтрока();

                             ТаблицаСотрудниковСОсобымиПериодами.Сотрудник = Запрос.Сотрудник;

                             ТаблицаСотрудниковСОсобымиПериодами.ЕстьОтпуск = 1;

                  КонецЦикла;

      КонецЕсли;

     Запрос=СоздатьОбъект("Запрос");   //Zarema ДонорскиеДни начало изм. 

      ТекстЗапроса = "//{{ЗАПРОС(ТаблицаПериодовДействияДонорскиеДни)

      |с ДатаЗапросаС по ДатаЗапросаПо;

      |Сотрудник = ЖурналРасчетов.Зарплата.Объект;

      |ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч;

      |Группировка Сотрудник без групп;

      |Условие(Сотрудник в СписокСотрудников);

      |Условие(ВидРасч в СписокВРДонорскиеДни);

      |"//}}ЗАПРОС

      ;

     

      Если Запрос.Выполнить(ТекстЗапроса) =1 Тогда

                  Пока Запрос.Группировка("Сотрудник")=1 Цикл

                             ТаблицаСотрудниковСОсобымиПериодами.НоваяСтрока();

                             ТаблицаСотрудниковСОсобымиПериодами.Сотрудник = Запрос.Сотрудник;

                             ТаблицаСотрудниковСОсобымиПериодами.ЕстьДонорские = 1;

                  КонецЦикла;

      КонецЕсли;                                                         // Zarema  ДонорскиеДни конец изм.

 

  1. В процедуру глСобратьДанныеДляСЗВ2010 добавить список значений

// заполним списоки в.р. которые используем в дальнейшем для выделения периода стажа

      СписокВРБольничныеЛисты = СоздатьОбъект("СписокЗначений"); 

      СписокВРОтпускаБезСохранения = СоздатьОбъект("СписокЗначений");

      СписокВРОтпускаИсключаемыеИзСтажа = СоздатьОбъект("СписокЗначений");

      СписокВРДонорскиеДни = СоздатьОбъект("СписокЗначений"); //Zarema ДонорскиеДни

      Для Сч = 1 По ГруппаРасчетов.УчитыватьДни.Количество() Цикл // эти в.р. определяют отработанное время

                  ВР = ГруппаРасчетов.УчитыватьДни.ПолучитьРасчет(Сч);

                  Если ВР.ВходитВГруппу(ГруппаРасчетов.БольничныеЛисты) = 1 Тогда

                             Если (ВР <> ВидРасчета.ОтпускПоБеременностиПоТекущемуМесяцу)

                             и (ВР <> ВидРасчета.ОтпускПоБеременности)

                             и (ВР <> ВидРасчета.ОтпускПоБеременностис2004)

                             и (ВР <> ВидРасчета.ОтпускПоБеременностис2005)

                             и (ВР <> ВидРасчета.ОтпускПоБеременностис2007)

                             и (ВР <> ВидРасчета.ОтпускПоБеременностис2010) Тогда

                                         // больничные листы, кроме отпуска по беременности и родам

                                         СписокВРБольничныеЛисты.ДобавитьЗначение(ВР);

                             КонецЕсли;

                  ИначеЕсли (ВР = ВидРасчета.ОтпускЗаСвойСчетКраткосрочный)или (ВР = ВидРасчета.ОтпускЗаСвойСчетДолгосрочный)  Тогда

                             //отпуска без сохранения заработной платы  

                             СписокВРОтпускаБезСохранения.ДобавитьЗначение(ВР);

                             СписокВРОтпускаИсключаемыеИзСтажа.ДобавитьЗначение(ВР);

                  ИначеЕсли (ВР = ВидРасчета.ОтпускУчебный)  Тогда

                      СписокВРОтпускаИсключаемыеИзСтажа.ДобавитьЗначение(ВР);

                  ИначеЕсли (ВР = ВидРасчета.ДниДоноров) Тогда         //Zarema ДонорскиеДни

                             СписокВРДонорскиеДни.ДобавитьЗначение(ВР);

                  КонецЕсли;

      КонецЦикла; 

// получим таблицу значений в которй будут сотрудники, имевшие в периоде отчета

      // отпуск без сохранения ЗП, больничные или отпуска, исключаемые из льготного стажа

      ТаблицаСотрудниковСОсобымиПериодами=СоздатьОбъект("ТаблицаЗначений");

      ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("Сотрудник");

      ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьБЛ", "Число", 1, 0);

      ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьОтпускЗаСвойСчет", "Число", 1, 0);

      ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьОтпуск", "Число", 1, 0);

      ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьДонорские","Число",1,0); //Zarema ДонорскиеДни

глЗаполнитьТаблицуСотрудниковСОсобымиПериодами(ТаблицаСотрудниковСОсобымиПериодами, Сотрудники, ДатаНачала, ДатаОкончания,

                                                           СписокВРБольничныеЛисты,СписокВРОтпускаБезСохранения,СписокВРОтпускаИсключаемыеИзСтажа,

СписокВРДонорскиеДни);   // Zarema ДонорскиеДни

     

    Обнуляем все в той же процедуре значение ЕстьДонорские и получаем значения из таблицы 

ЕстьОтпуск = 0;

ЕстьБЛ = 0;

ЕстьОтпускЗаСвойСчет = 0;

ЕстьДонорские=0;     // Zarema ДонорскиеДни

НомСтрокиТОС = "";

                        ТаблицаСотрудниковСОсобымиПериодами.НайтиЗначение(Сотрудник,НомСтрокиТОС,"Сотрудник");

                             Если НомСтрокиТОС>0 Тогда

                                         ЕстьБЛ = ТаблицаСотрудниковСОсобымиПериодами.ПолучитьЗначение(НомСтрокиТОС,"ЕстьБЛ");

                                         ЕстьОтпускЗаСвойСчет = ТаблицаСотрудниковСОсобымиПериодами.ПолучитьЗначение(НомСтрокиТОС,"ЕстьОтпускЗаСвойСчет");

                                         ЕстьОтпуск = ТаблицаСотрудниковСОсобымиПериодами.ПолучитьЗначение(НомСтрокиТОС,"ЕстьОтпуск");

                                         ЕстьДонорские = ТаблицаСотрудниковСОсобымиПериодами.ПолучитьЗначение(НомСтрокиТОС,"ЕстьДонорские");  // Zarema ДонорскиеДни

                             КонецЕсли;

    Добавляем новое условие если есть донорские дни все в той же процедуре

 Если ЕстьБЛ = 1 Тогда

ТаблицаБЛ="";

       Если глЗаполнитьТаблицуПериодовДействияВР(Сотрудник,ТаблицаБЛ,Начало, Окончание, СписокВРБольничныеЛисты)=1 Тогда

//Создадим набор для стажа, которым будем замещать периоды

        НаборДляСтажа.УдалитьВсе();

        НаборДляСтажа.ДобавитьЗначение("");

        НаборДляСтажа.ДобавитьЗначение("");

        НаборДляСтажа.ДобавитьЗначение(Перечисление.СЗВПараметр3ИТС2010.ВРНЕТРУД);

        НаборДляСтажа.ДобавитьЗначение("");

        НаборДляСтажа.ДобавитьЗначение("");

        //впишем периоды отпусков за свой счет 

        ТаблицаБЛ.ВыбратьСтроки();

                  Пока ТаблицаБЛ.ПолучитьСтроку()=1 Цикл

                        НачалоПериода=ТаблицаБЛ.НачалоПериода;

                        ОкончаниеПериода=ТаблицаБЛ.ОкончаниеПериода;

                        //"впишем" во временную таблицу период

                        глВписатьОсновнуюЗаписьОСтаже2010("Вписать",ВремТаблицаСоСтажем,НомерЗаписи,НачалоПериода,ОкончаниеПериода, НаборДляСтажа);

                КонецЦикла;

           КонецЕсли;

       КонецЕсли;                                        

   // Zarema ДонорскиеДни          началоизм.

   Если  ЕстьДонорские = 1 Тогда

   ТаблицаДонор="";

   Если глЗаполнитьТаблицуПериодовДействияВР(Сотрудник,ТаблицаДонор,Начало, Окончание, СписокВРДонорскиеДни)=1 Тогда

 //Создадим набор для стажа, которым будем замещать периоды

 НаборДляСтажа.УдалитьВсе();

 НаборДляСтажа.ДобавитьЗначение("");

 НаборДляСтажа.ДобавитьЗначение("");

 НаборДляСтажа.ДобавитьЗначение(Перечисление.СЗВПараметр3ИТС2010.ДОНОРСКИЕ);

 НаборДляСтажа.ДобавитьЗначение("");

 НаборДляСтажа.ДобавитьЗначение("");

 ТаблицаДонор.ВыбратьСтроки();

 Пока ТаблицаДонор.ПолучитьСтроку()=1 Цикл

     НачалоПериода=ТаблицаДонор.НачалоПериода;

    ОкончаниеПериода=ТаблицаДонор.ОкончаниеПериода;

глВписатьОсновнуюЗаписьОСтаже2010("Вписать",ВремТаблицаСоСтажем,НомерЗаписи,НачалоПериода,ОкончаниеПериода, НаборДляСтажа);

       КонецЦикла;

    КонецЕсли;

  КонецЕсли;                          

                      // Zarema ДонорскиеДни      конецизм.             

 

                     

 

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Иванов Петр (Storm123) 25.07.10 00:18
*СЗВПараметр3ИТС2010 добавить значение «ДОНОРСКИЕ»*

А пенсионный такой параметр примет? Может пустое значение там лучше оставлять?
2. Зарема Максудова (Zarema) 25.07.10 18:38
Кстати, тоже возникал такой вопрос. Но пенсионный нам на это ничего не ответил. В принципе не так и сложно вставить пустое значение.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа