gifts2017

Подготовка сведений для ПФР 2011 с расчетом уплаченных НЕ через коэффициент

Опубликовал Denis Lookin (lookindenis) в раздел Программирование - Практика программирования

Создан для исправления любого предыдущего отчета  с последующим созданием отчетов в свете новых требований ПФР.

Использует файл сохраненный настроек отчета за прошлый период (например - "_1_ИСХОДНАЯ_12010.pf")

Сделан для себя (НЕ ДЛЯ УПРОЩЕНКИ).

Старался минимизировать свои изменения, они помечены "// новое начало" и "// новое конец"

Для  исправления предыдущего отчета или создания нового, но с учетом доплаты или переплаты в прошлом отчете, поставить флажок  "в прошлом периоде"

Для создания нового без исправлений, с расчетом не коэффициентом, и с условием, что прошлый период был рассчитан не коэфф. и не требуется доплата/удержание за него, оба флажка: "в этом периоде" и  "в прошлом периоде" НЕ ставить.

 

По сути изменения:

Добавил процедурку:

 

// Новое начало           СосчитатьВыплатыЧерезНачисленияСоЗдвигомНаМесяц()
//******************************************************************************
// СосчитатьВыплатыЧерезНачисленияСоЗдвигомНаМесяц() 
//Описание:
//процедура заполняет суммы уплаченных взносов пересчитав начисленные
//по сотрудникам  за тот-же  период со сдвигом на месяц назад
//
Процедура  СосчитатьВыплатыЧерезНачисленияСоЗдвигомНаМесяц() 
ТабПоУплатамПредПериод = СоздатьОбъект("ТаблицаЗначений");
ТабПоУплатамПредПериод.НоваяКолонка("Объект");
ТабПоУплатамПредПериод.НоваяКолонка("Период"); 
ТабПоУплатамПредПериод.НоваяКолонка("УплачСтрах"); 
ТабПоУплатамПредПериод.НоваяКолонка("УплачНакоп");
ТабПоУплатамТекПериод = СоздатьОбъект("ТаблицаЗначений");
ТабПоУплатамПредПериод.Выгрузить(ТабПоУплатамТекПериод);
 
    // вычислим период, за который начисленные СтрахВзносы входили в уплату по текущему периоду
ТекущийОтченыйПериод= ПолучитьДатуНачала(); 
НачОтсчТекПериодаРасчета= НачМесяца(ТекущийОтченыйПериод - 1); 
КонОтсчТекПериодаРасчета= КонМесяца((Мин(глПолучитьДатуОкончанияОтчетногоПериодаСЗВ(ТекущийОтченыйПериод),ДатаОтчета))-32); 
 
// вычислим период, за который начисленные СтрахВзносы входили в уплату по предыдущему периоду
// что-бы узнать остатки с прошлого периода. Если Сотр был уволен в середине предыдущего периода
ДатаСоЗдвигом= ПолучитьОтчетныйПериодПоДате(НачОтсчТекПериодаРасчета);
ВременОтчетныйПериод= ОтчетныйПериод;
ОтчетныйПериод= ДатаСоЗдвигом; 
 
ПредыдущийОтченыйПериод= ПолучитьДатуНачала();
ОтчетныйПериод = ВременОтчетныйПериод;
ТекущийОтченыйПериод= ПолучитьДатуНачала();  // возможно лишнее обращение и можно удалить
НачОтсчПредПериодаРасчета= НачМесяца(ПредыдущийОтченыйПериод - 1); 
КонОтсчПредПериодаРасчета= КонМесяца((Мин(глПолучитьДатуОкончанияОтчетногоПериодаСЗВ(ПредыдущийОтченыйПериод),ДатаОтчета))-32); 
 
// Сообщить("ТекущийОтченыйПериод");
// Сообщить(ТекущийОтченыйПериод);
// Сообщить("НачОтсчТекПериодаРасчета");
// Сообщить(НачОтсчТекПериодаРасчета);
// Сообщить("КонОтсчТекПериодаРасчета");
// Сообщить(КонОтсчТекПериодаРасчета);
// Сообщить("ПредыдущийОтченыйПериод");
// Сообщить(ПредыдущийОтченыйПериод);
// Сообщить("НачОтсчПредПериодаРасчета");
// Сообщить(НачОтсчПредПериодаРасчета);
// Сообщить("КонОтсчПредПериодаРасчета");
// Сообщить(КонОтсчПредПериодаРасчета);
 
 
 
ТабПоУплатам = СоздатьОбъект("ТаблицаЗначений");
 
ЗапросПоВзносам=СоздатьОбъект("Запрос");
 
ТекстЗапроса="//{{ЗАПРОС(ЗапросПоВзносам)
|С НачОтсчПредПериодаРасчета по КонОтсчТекПериодаРасчета;
|Объект = ЖурналРасчетов.СтраховыеВзносы.Объект;
|ВР = ЖурналРасчетов.СтраховыеВзносы.ВидРасч;
|Результат = ЖурналРасчетов.СтраховыеВзносы.Результат;
|Регистрация = ЖурналРасчетов.СтраховыеВзносы.ДатаОкончания;
|Группировка Объект Без Групп Без Упорядочивания; 
|Группировка ВР Без Групп Без Упорядочивания; 
|Группировка Результат Без Групп;
|Без Итогов;
|Группировка Регистрация;
|Условие((Результат <> 0) И ((ВР = ВидРасчета.ПФРСтраховаяЧастьс2010) ИЛИ (ВР = ВидРасчета.ПФРНакопительнаяЧастьс2010)));
|"//}}ЗАПРОС
;
 
Если ЗапросПоВзносам.Выполнить(ТекстЗапроса)=0 Тогда 
Сообщить("Не удалось обработать журнал взносов");
КонецЕсли; 
ЗапросПоВзносам.Выгрузить(ТабПоУплатам);
ТабПоУплатам.Сортировать("Объект,Регистрация");
ТабПоУплатам.НоваяКолонка("ПериодОплаты"); 
 
ТабПоУплатам.ВыбратьСтроки();
Пока ТабПоУплатам.ПолучитьСтроку()=1 Цикл
Если ТабПоУплатам.Регистрация>=НачОтсчТекПериодаРасчета Тогда 
ТабПоУплатамТекПериод.НоваяСтрока();
ТабПоУплатамТекПериод.Период = ТекущийОтченыйПериод;
ТабПоУплатамТекПериод.Объект = ТабПоУплатам.Объект;   // удалить
ТабПоУплатам.ПериодОплаты = ТекущийОтченыйПериод;
Если ТабПоУплатам.ВР = ВидРасчета.ПФРСтраховаяЧастьс2010  Тогда
ТабПоУплатамТекПериод.УплачСтрах = ТабПоУплатам.Результат;
ТабПоУплатамТекПериод.УплачНакоп = 0;
ТабПоУплатам.ПериодОплаты = ТекущийОтченыйПериод;  // удалить
Иначе
ТабПоУплатамТекПериод.УплачНакоп = ТабПоУплатам.Результат;
ТабПоУплатамТекПериод.УплачСтрах = 0; 
КонецЕсли;
Иначе 
ТабПоУплатамПредПериод.НоваяСтрока();
ТабПоУплатамПредПериод.Период = ПредыдущийОтченыйПериод;  
ТабПоУплатамПредПериод.Объект = ТабПоУплатам.Объект;  
ТабПоУплатам.ПериодОплаты  = ПредыдущийОтченыйПериод;  // удалить
Если ТабПоУплатам.ВР = ВидРасчета.ПФРСтраховаяЧастьс2010  Тогда
ТабПоУплатамПредПериод.УплачСтрах = ТабПоУплатам.Результат;
ТабПоУплатамПредПериод.УплачНакоп = 0; 
Иначе
ТабПоУплатамПредПериод.УплачНакоп = ТабПоУплатам.Результат;
ТабПоУплатамПредПериод.УплачСтрах = 0; 
КонецЕсли;
КонецЕсли;
КонецЦикла; 
 
ТабПоУплатамТекПериод.Свернуть("Объект,Период","УплачСтрах,УплачНакоп");
ТабПоУплатамТекПериод.Сортировать("Объект,Период");
//ТабПоУплатамТекПериод.ВыбратьСтроку(,"ТабПоУплатамТекПериод_3_ВнутриПроцедуры");
 
ТабПоУплатамПредПериод.Свернуть("Объект,Период","УплачСтрах,УплачНакоп");
ТабПоУплатамПредПериод.Сортировать("Объект,Период");
//ТабПоУплатамПредПериод.ВыбратьСтроку(,"ТабПоУплатамПредПериод_3_ВнутриПроцедуры");
 
 
// ------------------------------------------------------------------------------------------
    // получим из файла настроек    
 
ОтчетныйПериодВременный= ОтчетныйПериод ;       
ОтчетныйПериод = ПредыдущийОтченыйПериод;
ДатаПериода = ОтчетныйПериод; 
 
ИмяФайла    = ПолучитьИмяФайлаНастроек();       
УплатыПредПериод= СоздатьОбъект("ТаблицаЗначений");
 
Если ФС.СуществуетФайл(ИмяФайла) =1 Тогда
ФайлНастр = СоздатьОбъект("Текст");
ФайлНастр.Открыть(ИмяФайла);
Иначе Возврат;
КонецЕсли;  
// список документов в 3-й строке
СтрокаСписокДокументов  = СтрЗаменить(ФайлНастр.ПолучитьСтроку(3), констКод1, констКод10);
УплатыПредПериод= ЗначениеИзСтрокиВнутр(СтрокаСписокДокументов); 
//УплатыПредПериод.ВыбратьСтроку(,"СписокДокументов УплатыПредПериод");
// очистим и восстановим переменные
    ОтчетныйПериод   = ОтчетныйПериодВременный;
ДатаПериода = ОтчетныйПериод; 
ИмяФайлаНастроек   = ПолучитьИмяФайлаНастроек();
ТаблицаПачки= "";
СтрокаСписокДокументов  = ""; 
ТабПоУплатам = "";
КонецПроцедуры      // СосчитатьВыплатыЧерезНачисленияСоЗдвигомНаМесяц()   
// новое конец      // СосчитатьВыплатыЧерезНачисленияСоЗдвигомНаМесяц()
 
 
ну и в процедуре  ЗаполнитьСуммыВзносов()  добавил:
 
ТабИсчисленоВзносов.ВыбратьСтроки();
Пока ТабИсчисленоВзносов.ПолучитьСтроку()=1 Цикл
 
КоэффициентСтраховая = 0;
КоэффициентНакопительная = 0;
 
ДатаПериода = ТабИсчисленоВзносов.ОтчетныйПериод;
НомСтроки = "";
Если ТабУплатыВзносов.НайтиЗначение(ДатаПериода,НомСтроки,"ОтчетныйПериод")=1 Тогда
КоэффициентСтраховая = ТабУплатыВзносов.ПолучитьЗначение(НомСтроки,"КоэффициентСтраховая");
КоэффициентНакопительная = ТабУплатыВзносов.ПолучитьЗначение(НомСтроки,"КоэффициентНакопительная");
КонецЕсли;
 
ТабИсчисленоВзносов.Ключ = ПолучитьКлючСотрудника(ТабИсчисленоВзносов.Сотрудник,ТабИсчисленоВзносов.КатегорияЗЛ);     
   // новое начало
НомСтрок1 = 0; 
НомСтрок2 = 0;
НомСтрок3 = 0;
НовУплачСтрах = 0;  
НовУплачНакоп = 0; 
Если  (КоэфДА=0) И (ДатаПериода=ТекущийОтченыйПериод) Тогда   // это  начислен/удерж тек периода и по новому
   ТабПоУплатамТекПериод.НайтиЗначение(ТабИсчисленоВзносов.Сотрудник,НомСтрок1,"Объект");
Если  (НомСтрок1=0) Тогда// не найдена, значт не было начислений и они будут состоять только из остатков с пр периода  
   ТабИсчисленоВзносов.УплаченоСтраховая = 0;
ТабИсчисленоВзносов.УплаченоНакопительная = 0;
Иначе    // нашли, плюсуем
ТабПоУплатамТекПериод.ПолучитьСтрокуПоНомеру(НомСтрок1);
ТабИсчисленоВзносов.УплаченоСтраховая = ТабПоУплатамТекПериод.УплачСтрах;   
ТабИсчисленоВзносов.УплаченоНакопительная = ТабПоУплатамТекПериод.УплачНакоп;  
КонецЕсли;
ИначеЕсли (КоэфДА=0) И (ДатаПериода<>ТекущийОтченыйПериод)  Тогда  //это  начислен\удерж прошл периода и по новому
Если  (КоэфДА1=0) Тогда// прошлый период был посчитан по новому
ТабИсчисленоВзносов.УплаченоСтраховая = 0;  
ТабИсчисленоВзносов.УплаченоНакопительная = 0;
ИначеЕсли  (КоэфДА1=1)  Тогда  // прошлый период был посчитан по старому 
   ТабПоУплатамПредПериод.НайтиЗначение(ТабИсчисленоВзносов.Сотрудник,НомСтрок2,"Объект");
   УплатыПредПериод.НайтиЗначение(ТабИсчисленоВзносов.Сотрудник,НомСтрок3,"Сотрудник");
Если  (НомСтрок2=0) и (НомСтрок3<>0)  Тогда// значт были начисления, но не должны были быть ????????????
// нашли, считываем начисления прошлого периода старым способом, полученные из файла
УплатыПредПериод.ПолучитьСтрокуПоНомеру(НомСтрок3);
ТабИсчисленоВзносов.УплаченоСтраховая = УплатыПредПериод.УплаченоСтраховая;  
ТабИсчисленоВзносов.УплаченоНакопительная = УплатыПредПериод.УплаченоНакопительная;
Сообщить(Строка(ТабИсчисленоВзносов.Сотрудник) + "   были начисления, но не должны были быть ?????  НЕДОУПЛАТА");
// реальная недоуплата должна быть разницей (Правильно - ЧерезКоэф)
ТабИсчисленоВзносов.УплаченоСтраховая = 0 - ТабИсчисленоВзносов.УплаченоСтраховая;  
ТабИсчисленоВзносов.УплаченоНакопительная = 0 - ТабИсчисленоВзносов.УплаченоНакопительная; 
ИначеЕсли  (НомСтрок2<>0) и (НомСтрок3=0)  Тогда// значт не было начислений, но должны были быть ???????????? 
//  сколько должны были начислить, еслиб считали не коэффициентом 
ТабПоУплатамПредПериод.ПолучитьСтрокуПоНомеру(НомСтрок2);
ТабИсчисленоВзносов.УплаченоСтраховая = ТабПоУплатамПредПериод.УплачСтрах;  
ТабИсчисленоВзносов.УплаченоНакопительная = ТабПоУплатамПредПериод.УплачНакоп;
Сообщить(Строка(ТабИсчисленоВзносов.Сотрудник) + "   не было начислений, но должны были быть  ПЕРЕПЛАТА  ???????");
ИначеЕсли  (НомСтрок2=0) и (НомСтрок3=0)  Тогда// значт не было начислений, и не должно было быть
ТабИсчисленоВзносов.УплаченоСтраховая = 0;  
ТабИсчисленоВзносов.УплаченоНакопительная = 0;
Иначе 
// нашли, считываем начисления прошлого периода старым способом, полученные из файла
УплатыПредПериод.ПолучитьСтрокуПоНомеру(НомСтрок3);
ТабИсчисленоВзносов.УплаченоСтраховая = УплатыПредПериод.УплаченоСтраховая;  
ТабИсчисленоВзносов.УплаченоНакопительная = УплатыПредПериод.УплаченоНакопительная;
//  сколько должны были начислить, еслиб считали не коэффициентом 
ТабПоУплатамПредПериод.ПолучитьСтрокуПоНомеру(НомСтрок2);
НовУплачСтрах = ТабПоУплатамПредПериод.УплачСтрах;  
НовУплачНакоп = ТабПоУплатамПредПериод.УплачНакоп;   // 2222222222222222222222222
// реальная недоуплата должна быть разницей (Правильно - ЧерезКоэф)
ТабИсчисленоВзносов.УплаченоСтраховая = НовУплачСтрах - ТабИсчисленоВзносов.УплаченоСтраховая;  
ТабИсчисленоВзносов.УплаченоНакопительная = НовУплачНакоп - ТабИсчисленоВзносов.УплаченоНакопительная;
КонецЕсли; 
КонецЕсли;  
ИначеЕсли (КоэфДА=1) и (КоэфДА1=1) Тогда  // всё считаем по  старому
// новое конец
ТабИсчисленоВзносов.УплаченоСтраховая = ОКР(ТабИсчисленоВзносов.ИсчисленоСтраховая * КоэффициентСтраховая,2);
ТабИсчисленоВзносов.УплаченоНакопительная = ОКР(ТабИсчисленоВзносов.ИсчисленоНакопительная * КоэффициентНакопительная,2);
// новое начало    
КонецЕсли;
// новое конец
Если ДатаПериода<>ТекущийОтченыйПериод Тогда
ТабИсчисленоВзносов.ИсчисленоСтраховая = 0;
ТабИсчисленоВзносов.ИсчисленоНакопительная = 0;    
КонецЕсли;
 
КонецЦикла;  

 

Это из крупных изменений =) остальное так... по мелочи =)

 

Исходник: http://infostart.ru/public/84659/

Удачи в борьбе с 1С.

 

ИСПРАВЛЕНИЯ:

Поправил немного, были пара-тройка уволенных невовремя) сотров потеряны правил в спешке, но  теперь НОВЫЙ отчет без ошибок!

 

Скачать файлы

Наименование Файл Версия Размер
ПодготовкаСведПФР_НЕ_коэффициентомРелиз3.ert 246
.ert 453,50Kb
13.08.13
246
.ert 453,50Kb Скачать

См. также

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

Комментарии

1. Юрий В (UV2) 21.06.11 20:50
Гыгы: особенно необходим всем и каждому этот кусок кода!

Если Лев(Строка(ТабИсчисленоВзносов.Сотрудник),8) = "Стреляев" Тогда

Стреляев = 1;

КонецЕсли;

lookindenis; +1 Ответить 1
2. Denis Lookin (lookindenis) 21.06.11 23:22
(1)
СПС =)
отладочную остановку не убрал =)))))
на работу приеду почищу и перезалью )
3. Denis Lookin (lookindenis) 28.06.11 19:45
чуток ИСПРАВЛЕНИЙ:
поправил немного, были пара-тройка уволенных невовремя) сотров потеряны
правил в спешке, но
терь при создании, НОВЫЙ отчет без ошибок!
4. Светлана Даниленко (LanaSN) 23.09.11 09:38
Спасибо, очень пригодилась, у меня ошибок не выскакивало, все пересчитали и отправили в ПФР!
5. Александр (slanrus) 11.10.11 10:29
Спасибо, очень пригодилась
6. Александр Лыткин (TrinitronOTV) 11.10.11 14:54
спасибо, нужная разработка
7. Denis Lookin (lookindenis) 11.10.11 19:06
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа