1С 77 УСН ред 177 Отчет"Начисленные налоги с ФОТ" - "отдыхает"
19.01.2011
20:01
#1
Очень жаль что прог-ты фирмы 1С не исправили Отчет"Начисленные налоги с ФОТ" в 1с 77 УСН-177ред. В конф-ге старая таблица без колонок "ФФос","ТФОМс" и тд. Оборотка по сч. 69 не совсем хорошая
20.01.2011
19:41
#4
"Там есть ошибки и простые и сложные. Как наиболее актуальные два момента (это простые, про сложные потом когда нибудь напишу) (релиз 7.70.177):
Ошибка 1.
Глобальный модуль, строка 12009 (подзадача выборки периодов стажа сотрудников для подготовки сведений в ПФР):
ТаблицаПериодов.ВыбратьСтроки();
...
Пока ТаблицаПериодов.ПолучитьСтроку()=1 Цикл
....
ТаблицаПериодовСтажа.УдалитьСтроки();
....
КонецЦикла;
КоличествоСтрок=ТаблицаПериодовСтажа.КоличествоСтрок();
Для Номер = 1 по КоличествоСтрок Цикл
...
Что мы тут видим? Есть некое множество ТаблицаПериодов по которому идет перебор. При этом зачем то внутри этого перебора имеется сброс строк таблицы ТаблицаПериодовСтажа и ниже как результат всех этих операций идет обработка полученного результата в ТаблицаПериодовСтажа.
И тут две ситуации: если за отчетный период у сотрудника многократно менялось значение реквизита "СостояниеФизлица", то в результате мы получим потерю всех сведений за исключением последнего диапазона этих значений.
Вторая ситуация: вся эта конструкция находится внутри еще более обобщенной выборки, а именно - внутри перебора сотрудников. Так вот фокус в том, что если в выборке попался какой то сотр, у которого количество строк в ТаблицаПериодов равно нулю, то он унаследует ТаблицаПериодовСтажа от предыдущего сотрудника, так как нигде кроме как внутри перебора по ТаблицаПериодов она не сбрасывается.
В общем, тут, совершенно точно, ошибка, исправляется очень просто.
Строку ТаблицаПериодовСтажа.УдалитьСтроки(); (12020) надо убрать совсем и написать ее чуть выше, чтобы было так:
ТаблицаПериодовСтажа.УдалитьСтроки();
ТаблицаПериодов.ВыбратьСтроки();
ЕстьЛьготныйСтаж=0; //в переменной будет 1 - если после сбора стажа по сотруднику найдем льготный стаж
Пока ТаблицаПериодов.ПолучитьСтроку()=1 Цикл
...
Ошибка 2.
При автоформировании пачек для предоставления отчета в ПФР проверяется каждый сотрудник на предмет необходимости заявления сведений по нему. Делают это так:
Если (глСотрудникЧислитсяРаботающим(Сотрудник, ДатаНачала) = 1)
ИЛИ (глСотрудникЧислитсяРаботающим(Сотрудник, ДатаОкончания) = 1) Тогда
...
КонецЕсли;
То есть, если сотр работал на начало отчетного периода (например, на 01.07.2010 г.) или работает на конец отчетного периода (на 31.12.2010 г.), то в пачку его система поместит. А вот, например, если сотрудник устроился на работу в этом периоде и уволился в нем же, то он в пачку не попадет. Чтобы исправить ошибку, нужно сделать примерно так:
Отчет.ПодготовкаСведенийДляПФР2010
строка 6159, сделать чтобы было написано так:
История=СоздатьОбъект("Периодический");
Если ЗапросКСправочникам.Выполнить(ТекстЗапроса)=1 Тогда
Пока ЗапросКСправочникам.Группировка() = 1 Цикл
Если ПустоеЗначение(СтрЗаменить(ЗапросКСправочникам.СтрахНомер,"-","""")) = 1 Тогда
Продолжить
КонецЕсли;
Сотрудник = ЗапросКСправочникам.Сотрудник;
Работал=0;
История.ИспользоватьОбъект("ХарактерРаботы",Сотрудник);
История.ВыбратьЗначения(ДатаНачала,ДатаОкончания);
Пока История.ПолучитьЗначение()=1 Цикл
Если (История.Значение=Перечисление.ХарактерРаботы.ТрудовойДоговор) ИЛИ
(История.Значение=Перечисление.ХарактерРаботы.ДоговорГражданскоПравовогоХарактера) ИЛИ
(История.Значение=Перечисление.ХарактерРаботы.ДоговорГражданскоПравовогоХарактераВзносы) Тогда
Работал=1;
Прервать;
КонецЕсли;
КонецЦикла;
Если (глСотрудникЧислитсяРаботающим(Сотрудник, ДатаНачала) = 1)
ИЛИ (глСотрудникЧислитсяРаботающим(Сотрудник, ДатаОкончания) = 1)
ИЛИ (Работал=1) Тогда
Если СписокСотрудников.НайтиЗначение(Сотрудник) = 0 Тогда
СписокСотрудников.ДобавитьЗначение(Сотрудник);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;"
Ошибка 1.
Глобальный модуль, строка 12009 (подзадача выборки периодов стажа сотрудников для подготовки сведений в ПФР):
ТаблицаПериодов.ВыбратьСтроки();
...
Пока ТаблицаПериодов.ПолучитьСтроку()=1 Цикл
....
ТаблицаПериодовСтажа.УдалитьСтроки();
....
КонецЦикла;
КоличествоСтрок=ТаблицаПериодовСтажа.КоличествоСтрок();
Для Номер = 1 по КоличествоСтрок Цикл
...
Что мы тут видим? Есть некое множество ТаблицаПериодов по которому идет перебор. При этом зачем то внутри этого перебора имеется сброс строк таблицы ТаблицаПериодовСтажа и ниже как результат всех этих операций идет обработка полученного результата в ТаблицаПериодовСтажа.
И тут две ситуации: если за отчетный период у сотрудника многократно менялось значение реквизита "СостояниеФизлица", то в результате мы получим потерю всех сведений за исключением последнего диапазона этих значений.
Вторая ситуация: вся эта конструкция находится внутри еще более обобщенной выборки, а именно - внутри перебора сотрудников. Так вот фокус в том, что если в выборке попался какой то сотр, у которого количество строк в ТаблицаПериодов равно нулю, то он унаследует ТаблицаПериодовСтажа от предыдущего сотрудника, так как нигде кроме как внутри перебора по ТаблицаПериодов она не сбрасывается.
В общем, тут, совершенно точно, ошибка, исправляется очень просто.
Строку ТаблицаПериодовСтажа.УдалитьСтроки(); (12020) надо убрать совсем и написать ее чуть выше, чтобы было так:
ТаблицаПериодовСтажа.УдалитьСтроки();
ТаблицаПериодов.ВыбратьСтроки();
ЕстьЛьготныйСтаж=0; //в переменной будет 1 - если после сбора стажа по сотруднику найдем льготный стаж
Пока ТаблицаПериодов.ПолучитьСтроку()=1 Цикл
...
Ошибка 2.
При автоформировании пачек для предоставления отчета в ПФР проверяется каждый сотрудник на предмет необходимости заявления сведений по нему. Делают это так:
Если (глСотрудникЧислитсяРаботающим(Сотрудник, ДатаНачала) = 1)
ИЛИ (глСотрудникЧислитсяРаботающим(Сотрудник, ДатаОкончания) = 1) Тогда
...
КонецЕсли;
То есть, если сотр работал на начало отчетного периода (например, на 01.07.2010 г.) или работает на конец отчетного периода (на 31.12.2010 г.), то в пачку его система поместит. А вот, например, если сотрудник устроился на работу в этом периоде и уволился в нем же, то он в пачку не попадет. Чтобы исправить ошибку, нужно сделать примерно так:
Отчет.ПодготовкаСведенийДляПФР2010
строка 6159, сделать чтобы было написано так:
История=СоздатьОбъект("Периодический");
Если ЗапросКСправочникам.Выполнить(ТекстЗапроса)=1 Тогда
Пока ЗапросКСправочникам.Группировка() = 1 Цикл
Если ПустоеЗначение(СтрЗаменить(ЗапросКСправочникам.СтрахНомер,"-","""")) = 1 Тогда
Продолжить
КонецЕсли;
Сотрудник = ЗапросКСправочникам.Сотрудник;
Работал=0;
История.ИспользоватьОбъект("ХарактерРаботы",Сотрудник);
История.ВыбратьЗначения(ДатаНачала,ДатаОкончания);
Пока История.ПолучитьЗначение()=1 Цикл
Если (История.Значение=Перечисление.ХарактерРаботы.ТрудовойДоговор) ИЛИ
(История.Значение=Перечисление.ХарактерРаботы.ДоговорГражданскоПравовогоХарактера) ИЛИ
(История.Значение=Перечисление.ХарактерРаботы.ДоговорГражданскоПравовогоХарактераВзносы) Тогда
Работал=1;
Прервать;
КонецЕсли;
КонецЦикла;
Если (глСотрудникЧислитсяРаботающим(Сотрудник, ДатаНачала) = 1)
ИЛИ (глСотрудникЧислитсяРаботающим(Сотрудник, ДатаОкончания) = 1)
ИЛИ (Работал=1) Тогда
Если СписокСотрудников.НайтиЗначение(Сотрудник) = 0 Тогда
СписокСотрудников.ДобавитьЗначение(Сотрудник);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;"
Читают тему
(гостей: 1)