7.7 Предприятие (517) Не правильно заполняется стаж работы в инд. св. в ПФР.
29.07.2010
11:21
#1
Почему то процентов на 10-15 сотрудникам ставит начало периода стажа с 01.06.2010 по 30.06.2010, хотя в истории значений всего одна запись. Например: 15.04.2010 -> "Трудовые отношения установлены". У кого стаж с 01.01.2010 или ранее, берёт нормально. У кого, например, с 10.04.2010 по 20.05.2010 - вообше не включает в список, хотя начисления есть. Если исправить дату приёма с 01.01.2010 - берёт правильно, но потом дату приходится править вручную. У меня около 250 человек. Такая каша получилась с записями о стаже! Ужас!
Что делать? Вручную править не реально.
26.09.2010
12:22
#2
Поставила 518 релиз. Сдвигов ни каких. Формирую для интереса отчетность за 2010 год, опять 2-м сотрудникам поставило стаж с 01.12.2010 по 31.12.2010, хотя они приняты в августе 2010 ???? Представляю, что будет к концу года. Зарплата только за август начислена. Причём тут декабрь месяц? В чём проблема?
26.09.2010
16:19
#3
"Функция в глобальном модуле. Исправление в нескольких местах. Вот что ей надо было!:
Функция глСобратьДанныеДляСЗВ2010(ТаблицаСтажиСотрудников, ОбобщенныйСотрудник, ТаблицаСотрудниковСКатегориямиЗЛ, ДатаНачала, ДатаОкончания, Форма ="""", Режим = """") Экспорт
// Структура таблицы ТаблицаСотрудниковСКатегориямиЗЛ
// Сотрудник
// ТаблицаПериодов - таблица значений
// далее в запросах будем использовать список сотрудников
Если ТипЗначения(ОбобщенныйСотрудник)=11 Тогда //здесь был передан элемент справочника - добавим его в только что созданный список
Сотрудники=СоздатьОбъект("СписокЗначений");
Сотрудники.ДобавитьЗначение(ОбобщенныйСотрудник);
Иначе //а здесь был передан список элементов - будем использовать непосредственно его
Сотрудники=ОбобщенныйСотрудник;
КонецЕсли;
ВсегоСотров = Сотрудники.РазмерСписка();
// Структура таблицы ТаблицаСтажиСотрудников
// Сотрудник
// ТаблицаСтажаСотрудника - таблица значений
ТаблицаСтажиСотрудников = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСтажиСотрудников.НоваяКолонка("Сотрудник","Справочник.Сотрудники");
ТаблицаСтажиСотрудников.НоваяКолонка("ТаблицаСтажаСотрудника", "ТаблицаЗначений");
// Структура ТаблицаСтажаСотрудника
// КатегорияЗЛ
// ТаблицаСоСтажем - таблица значений
// ИсчисленоСтраховая
// ИсчисленоНакопительная
ТаблицаСтажаСотрудника = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСтажаСотрудника.НоваяКолонка("КатегорияЗЛ","Перечисление.КатегорииЗастрахованныхЛицПФР");
ТаблицаСтажаСотрудника.НоваяКолонка("ТаблицаСоСтажем", "ТаблицаЗначений");
ТаблицаСтажаСотрудника.НоваяКолонка("ИсчисленоСтраховая","Число",15,2,,,,);
ТаблицаСтажаСотрудника.НоваяКолонка("ИсчисленоНакопительная","Число",15,2,,,,);
// Структура ТаблицаСоСтажем
// это собственно таблица с записями о стаже
ТаблицаСоСтажем = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.НоваяКолонка("ТипЗаписи","Строка",14,,,,,); // Основная или дополнительная
ТаблицаСоСтажем.НоваяКолонка("НомерЗаписи","Число",2,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("Начало","Дата",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("Окончание","Дата",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ТерриториальныеУсловия","Перечисление.ТерриториальныеУсловия",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("УсловияТруда","Перечисление.СЗВОсобыеУсловияТруда2002",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ИТСОснование","Перечисление.СЗВОснованияИТС2002",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ИТСДопСведения1","Число",5,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("ИТСДопСведения2","Число",2,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("ИТСДопСведения3","Перечисление.СЗВПараметр3ИТС2010",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ВыслугаЛетОснование","Перечисление.СЗВОснованияВыслугиЛет2002",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ВыслугаЛетДопСведения1","Число",5,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("ВыслугаЛетДопСведения2","Число",4,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("ВыслугаЛетДопСведения3","Число",8,2,,,,);
ТаблицаСоСтажем.НоваяКолонка("КодПозицииСписка","Строка",20,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ПараметрТерриториальныхУсловий","Число",5,2,,,,);
глСтатусСтрока(Форма,"Обрабатываются данные стажа");
// данные о стаже из справочника
ЗапросПоСтажу=СоздатьОбъект("Запрос");
ТекстЗапроса="//{{ЗАПРОС(ЗапросПоСтажу)
|Сотр = Справочник.СЗВСтаж2010.Владелец.ТекущийЭлемент;
|КатегорияЗЛ = Справочник.СЗВСтаж2010.КатегорияЗЛ;
|Запись = Справочник.СЗВСтаж2010.ТекущийЭлемент;
|ОтчетныйПериод = Справочник.СЗВСтаж2010.ОтчетныйПериод;
|ОсновнаяЗапись = Справочник.СЗВСтаж2010.ОсновнаяЗапись;
|Начало = Справочник.СЗВСтаж2010.Начало;
|Окончание = Справочник.СЗВСтаж2010.Окончание;
|УсловияТруда = Справочник.СЗВСтаж2010.УсловияТруда;
|КодПозицииСписка = Справочник.СЗВСтаж2010.КодПозицииСписка;
|ИТСОснование = Справочник.СЗВСтаж2010.ИТСОснование;
|ИТСДопСведения1 = Справочник.СЗВСтаж2010.ИТСДопСведения1;
|ИТСДопСведения2 = Справочник.СЗВСтаж2010.ИТСДопСведения2;
|ИТСДопСведения3 = Справочник.СЗВСтаж2010.ИТСДопСведения3;
|ВыслугаЛетОснование = Справочник.СЗВСтаж2010.ВыслугаЛетОснование;
|ВыслугаЛетДопСведения1 = Справочник.СЗВСтаж2010.ВыслугаЛетДопСведения1;
|ВыслугаЛетДопСведения2 = Справочник.СЗВСтаж2010.ВыслугаЛетДопСведения2;
|ВыслугаЛетДопСведения3 = Справочник.СЗВСтаж2010.ВыслугаЛетДопСведения3;
|ТерриториальныеУсловия = Справочник.СЗВСтаж2010.ТерриториальныеУсловия;
|ПараметрТерриториальныхУсловий = Справочник.СЗВСтаж2010.ПараметрТерриториальныхУсловий;
|Группировка Сотр без упорядочивания без групп;
|Группировка КатегорияЗЛ;
|Группировка Запись упорядочить по Запись.Код;
|Условие(Сотр в Сотрудники);
|Условие(ОтчетныйПериод = ДатаНачала);
|"//}}ЗАПРОС
;
Если Режим <> "СохранениеДанных" Тогда
ПопытокВыполненияЗапроса = 10;
Для Сч = 1 По ПопытокВыполненияЗапроса Цикл
Если ЗапросПоСтажу.Выполнить(ТекстЗапроса)=1 Тогда
Прервать
КонецЕсли;
КонецЦикла;
Если Сч = ПопытокВыполненияЗапроса + 1 Тогда
Сообщить("Не удалось обработать данные о стаже работников!");
Возврат 0;
КонецЕсли;
КонецЕсли;
// получим таблицу значений в которй будут сотрудники, имевшие в периоде отчета
// отпуск без сохранения ЗП, больничные или отпуска, исключаемые из льготного стажа
ТаблицаСотрудниковСОсобымиПериодами=СоздатьОбъект("ТаблицаЗначений");
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("Сотрудник");
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьБЛ", "Число", 1, 0);
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьОтпускЗаСвойСчет", "Число", 1, 0);
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьОтпуск", "Число", 1, 0);
//глЗаполнитьТаблицуСотрудниковСОсобымиПериодами(ТаблицаСотрудниковСОсобымиПериодами, Сотрудники, ДатаНачала, ДатаОкончания,
// СписокВРБольничныеЛисты,СписокВРОтпускаБезСохранения,СписокВРОтпускаИсключаемыеИзСтажа);
//таблица для сбора периодов состояния физлица в разрезе месяцев
ТаблицаПериодов=СоздатьОбъект("ТаблицаЗначений");
ТаблицаПериодов.НоваяКолонка("Месяц"); //число
ТаблицаПериодов.НоваяКолонка("КатегорияЗЛ");
ТаблицаПериодов.НоваяКолонка("НачалоПериода");
ТаблицаПериодов.НоваяКолонка("ОкончаниеПериода");
ТаблицаПериодов.НоваяКолонка("СостояниеФизлица");
ТаблицаПериодов.НоваяКолонка("Документ");
ТаблицаПериодов.НоваяКолонка("ЕстьЕНВД");
//таблица для сбора периодов стажа сотрудника, внутри периода состояния физлица
ТаблицаПериодовСтажа=СоздатьОбъект("ТаблицаЗначений");
ТаблицаПериодовСтажа.НоваяКолонка("НачалоПериода");
ТаблицаПериодовСтажа.НоваяКолонка("ОкончаниеПериода");
ТаблицаПериодовСтажа.НоваяКолонка("Должность");
ТаблицаПериодовСтажа.НоваяКолонка("Подразделение");
//списки значений в котоых будем хранить наборы по стажу
НаборДляСтажа = СоздатьОбъект("СписокЗначений");
СтарыйНаборДляСтажа = СоздатьОбъект("СписокЗначений");
ПервыйМесяц = ДатаМесяц(ДатаНачала);
ПоследнийМесяц = ДатаМесяц(ДатаОкончания);
Год = ДатаГод(ДатаНачала);
ПромТаблицаСоСтажем = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.Выгрузить(ПромТаблицаСоСтажем);
Для СчСотров = 1 По ВсегоСотров Цикл
Сотрудник = Сотрудники.ПолучитьЗначение(СчСотров);
КодСотра=Сотрудник.Код;
ИмяСотра=Сотрудник.Наименование;
Если ПустоеЗначение(""""+КодСотра+ИмяСотра)=1 Тогда
Продолжить
КонецЕсли;
СтажВСправочнике=0;
Если Режим <> "СохранениеДанных" Тогда
ЗапросПоСтажу.вНачалоВыборки();
Если ЗапросПоСтажу.Получить(Сотрудник,,)=1 Тогда
СтажВСправочнике=1;
КонецЕсли;
КонецЕсли;
НовыйПроцент = Окр(СчСотров/ВсегоСотров*100);
Если СчСотров < ВсегоСотров Тогда
глСтатусСтрока(Форма,"Обрабатываются данные стажа"+?(ВсегоСотров=1,""""," ("+НовыйПроцент+"%)")+": "+ИмяСотра);
КонецЕсли;
ВремТаблицаСтажаСотрудника = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСтажаСотрудника.Выгрузить(ВремТаблицаСтажаСотрудника);
НомерСтрокиСтажа = 0;
// стаж
Если СтажВСправочнике = 1 Тогда
Пока ЗапросПоСтажу.Группировка("КатегорияЗЛ")=1 Цикл
КатегорияЗЛ = ЗапросПоСтажу.КатегорияЗЛ;
НомерСтрокиСтажа = 0;
ВремТаблицаСоСтажем = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.Выгрузить(ВремТаблицаСоСтажем);
Пока ЗапросПоСтажу.Группировка("Запись")=1 Цикл
Если ЗапросПоСтажу.ОсновнаяЗапись = 1 Тогда
ВремТаблицаСоСтажем.НоваяСтрока();
НомерСтрокиТаблицы = ВремТаблицаСоСтажем.КоличествоСтрок();
НомерСтрокиСтажа = НомерСтрокиСтажа + 1;
ВремТаблицаСоСтажем.ТипЗаписи = "Основная";
ВремТаблицаСоСтажем.НомерЗаписи = НомерСтрокиСтажа;
ИначеЕсли НомерСтрокиСтажа > 0 Тогда
ВремТаблицаСоСтажем.НоваяСтрока();
НомерСтрокиТаблицы = ВремТаблицаСоСтажем.КоличествоСтрок();
ВремТаблицаСоСтажем.ТипЗаписи = "Дополнительная";
ВремТаблицаСоСтажем.НомерЗаписи = 0;
Иначе
Продолжить
КонецЕсли;
ВремТаблицаСоСтажем.Начало = ЗапросПоСтажу.Начало;
ВремТаблицаСоСтажем.Окончание = ЗапросПоСтажу.Окончание;
ВремТаблицаСоСтажем.УсловияТруда = ЗапросПоСтажу.УсловияТруда;
ВремТаблицаСоСтажем.КодПозицииСписка = ЗапросПоСтажу.КодПозицииСписка;
ВремТаблицаСоСтажем.ИТСОснование = ЗапросПоСтажу.ИТСОснование;
ВремТаблицаСоСтажем.ИТСДопСведения1 = ЗапросПоСтажу.ИТСДопСведения1;
ВремТаблицаСоСтажем.ИТСДопСведения2 = ЗапросПоСтажу.ИТСДопСведения2;
ВремТаблицаСоСтажем.ИТСДопСведения3 = ЗапросПоСтажу.ИТСДопСведения3;
ВремТаблицаСоСтажем.ВыслугаЛетОснование = ЗапросПоСтажу.ВыслугаЛетОснование;
ВремТаблицаСоСтажем.ВыслугаЛетДопСведения1 = ЗапросПоСтажу.ВыслугаЛетДопСведения1;
ВремТаблицаСоСтажем.ВыслугаЛетДопСведения2 = ЗапросПоСтажу.ВыслугаЛетДопСведения2;
ВремТаблицаСоСтажем.ВыслугаЛетДопСведения3 = ЗапросПоСтажу.ВыслугаЛетДопСведения3;
ВремТаблицаСоСтажем.ТерриториальныеУсловия = ЗапросПоСтажу.ТерриториальныеУсловия;
ВремТаблицаСоСтажем.ПараметрТерриториальныхУсловий = ЗапросПоСтажу.ПараметрТерриториальныхУсловий;
КонецЦикла;
Если ВремТаблицаСоСтажем.КоличествоСтрок() > 0 Тогда
// для этой категории ЗЛ есть стаж
ВремТаблицаСтажаСотрудника.НоваяСтрока();
ВремТаблицаСтажаСотрудника.КатегорияЗЛ = КатегорияЗЛ;
ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажем;
КонецЕсли;
КонецЦикла;
Если ВремТаблицаСтажаСотрудника.КоличествоСтрок() > 0 Тогда
ТаблицаСтажиСотрудников.НоваяСтрока();
ТаблицаСтажиСотрудников.Сотрудник = Сотрудник;
ТаблицаСтажиСотрудников.ТаблицаСтажаСотрудника = ВремТаблицаСтажаСотрудника;
КонецЕсли;
Иначе //записи справочника не найдены - "эмулируем" стаж по-умолчанию
КатЗЛ=ТаблицаСотрудниковСКатегориямиЗЛ.ПолучитьЗначение(1,"ТаблицаПериодов");
КатегорияЗЛ = КатЗЛ.ПолучитьЗначение(1,"КатегорияЗЛ");
ДатаНачалаСтажа = Дата(0);
ДатаОкончанияСтажа = Дата(0);
ХарактерРаботы = СоздатьОбъект("Периодический");
ХарактерРаботы.ИспользоватьОбъект("ХарактерРаботы", Сотрудник);
ХарактерРаботы.ВыбратьЗначения(,ДатаОкончания);
Пока ХарактерРаботы.ПолучитьЗначение() = 1 Цикл
Если (ХарактерРаботы.Значение = Перечисление.ХарактерРаботы.ДоговорГражданскоПравовогоХарактераВзносы)
ИЛИ (ХарактерРаботы.Значение = Перечисление.ХарактерРаботы.ТрудовойДоговор)
ИЛИ (ХарактерРаботы.Значение = Перечисление.ХарактерРаботы.ДоговорГражданскоПравовогоХарактера) Тогда
ДатаНачалаСтажа = ХарактерРаботы.ДатаЗнач;
КонецЕсли;
Если ХарактерРаботы.Значение = Перечисление.ХарактерРаботы.ТрудовыеОтношенияПрекращены Тогда
ДатаОкончанияСтажа = ХарактерРаботы.ДатаЗнач;
КонецЕсли;
КонецЦикла;
Если ДатаНачалаСтажа = Дата(0) Тогда
Продолжить;
Иначе
ДатаНачалаСтажа = Макс(ДатаНачалаСтажа,ДатаНачала);
КонецЕсли;
Если ДатаОкончанияСтажа = Дата(0) Тогда
ДатаОкончанияСтажа = ДатаОкончания;
Иначе
ДатаОкончанияСтажа = Мин(ДатаОкончанияСтажа,ДатаОкончания);
КонецЕсли;
Если ДатаНачалаСтажа >= ДатаОкончанияСтажа Тогда
ДатаОкончанияСтажа = ДатаОкончания;
КонецЕсли;
ВремТаблицаСоСтажем = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.Выгрузить(ВремТаблицаСоСтажем);
ВремТаблицаСоСтажем.НоваяСтрока();
НомерСтрокиТаблицы = ВремТаблицаСоСтажем.КоличествоСтрок();
НомерСтрокиСтажа = НомерСтрокиСтажа + 1;
ВремТаблицаСоСтажем.ТипЗаписи = "Основная";
ВремТаблицаСоСтажем.НомерЗаписи = НомерСтрокиСтажа;
ВремТаблицаСоСтажем.Начало = ДатаНачалаСтажа;
ВремТаблицаСоСтажем.Окончание = ДатаОкончанияСтажа;
ВремТаблицаСоСтажем.ТерриториальныеУсловия = Константа.ТерриториальныеУсловия;
Если ВремТаблицаСоСтажем.КоличествоСтрок() > 0 Тогда
// для этой категории ЗЛ есть стаж
ВремТаблицаСтажаСотрудника.НоваяСтрока();
ВремТаблицаСтажаСотрудника.КатегорияЗЛ = КатегорияЗЛ;
ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажем;
КонецЕсли;
ТаблицаСтажиСотрудников.НоваяСтрока();
ТаблицаСтажиСотрудников.Сотрудник = Сотрудник;
ТаблицаСтажиСотрудников.ТаблицаСтажаСотрудника = ВремТаблицаСтажаСотрудника;
КонецЕсли; //рассмотрели оба варианта - когда в справочнике есть стаж и когда его в справочнике не было
КонецЦикла; // обхода сотров и физлиц
ТаблицаСтажиСотрудников.Сортировать("1");
глСтатусСтрока(Форма,"""");
Возврат 1;
КонецФункции // глСобратьДанныеДляСЗВ2010()
"
Функция глСобратьДанныеДляСЗВ2010(ТаблицаСтажиСотрудников, ОбобщенныйСотрудник, ТаблицаСотрудниковСКатегориямиЗЛ, ДатаНачала, ДатаОкончания, Форма ="""", Режим = """") Экспорт
// Структура таблицы ТаблицаСотрудниковСКатегориямиЗЛ
// Сотрудник
// ТаблицаПериодов - таблица значений
// далее в запросах будем использовать список сотрудников
Если ТипЗначения(ОбобщенныйСотрудник)=11 Тогда //здесь был передан элемент справочника - добавим его в только что созданный список
Сотрудники=СоздатьОбъект("СписокЗначений");
Сотрудники.ДобавитьЗначение(ОбобщенныйСотрудник);
Иначе //а здесь был передан список элементов - будем использовать непосредственно его
Сотрудники=ОбобщенныйСотрудник;
КонецЕсли;
ВсегоСотров = Сотрудники.РазмерСписка();
// Структура таблицы ТаблицаСтажиСотрудников
// Сотрудник
// ТаблицаСтажаСотрудника - таблица значений
ТаблицаСтажиСотрудников = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСтажиСотрудников.НоваяКолонка("Сотрудник","Справочник.Сотрудники");
ТаблицаСтажиСотрудников.НоваяКолонка("ТаблицаСтажаСотрудника", "ТаблицаЗначений");
// Структура ТаблицаСтажаСотрудника
// КатегорияЗЛ
// ТаблицаСоСтажем - таблица значений
// ИсчисленоСтраховая
// ИсчисленоНакопительная
ТаблицаСтажаСотрудника = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСтажаСотрудника.НоваяКолонка("КатегорияЗЛ","Перечисление.КатегорииЗастрахованныхЛицПФР");
ТаблицаСтажаСотрудника.НоваяКолонка("ТаблицаСоСтажем", "ТаблицаЗначений");
ТаблицаСтажаСотрудника.НоваяКолонка("ИсчисленоСтраховая","Число",15,2,,,,);
ТаблицаСтажаСотрудника.НоваяКолонка("ИсчисленоНакопительная","Число",15,2,,,,);
// Структура ТаблицаСоСтажем
// это собственно таблица с записями о стаже
ТаблицаСоСтажем = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.НоваяКолонка("ТипЗаписи","Строка",14,,,,,); // Основная или дополнительная
ТаблицаСоСтажем.НоваяКолонка("НомерЗаписи","Число",2,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("Начало","Дата",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("Окончание","Дата",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ТерриториальныеУсловия","Перечисление.ТерриториальныеУсловия",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("УсловияТруда","Перечисление.СЗВОсобыеУсловияТруда2002",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ИТСОснование","Перечисление.СЗВОснованияИТС2002",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ИТСДопСведения1","Число",5,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("ИТСДопСведения2","Число",2,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("ИТСДопСведения3","Перечисление.СЗВПараметр3ИТС2010",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ВыслугаЛетОснование","Перечисление.СЗВОснованияВыслугиЛет2002",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ВыслугаЛетДопСведения1","Число",5,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("ВыслугаЛетДопСведения2","Число",4,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("ВыслугаЛетДопСведения3","Число",8,2,,,,);
ТаблицаСоСтажем.НоваяКолонка("КодПозицииСписка","Строка",20,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ПараметрТерриториальныхУсловий","Число",5,2,,,,);
глСтатусСтрока(Форма,"Обрабатываются данные стажа");
// данные о стаже из справочника
ЗапросПоСтажу=СоздатьОбъект("Запрос");
ТекстЗапроса="//{{ЗАПРОС(ЗапросПоСтажу)
|Сотр = Справочник.СЗВСтаж2010.Владелец.ТекущийЭлемент;
|КатегорияЗЛ = Справочник.СЗВСтаж2010.КатегорияЗЛ;
|Запись = Справочник.СЗВСтаж2010.ТекущийЭлемент;
|ОтчетныйПериод = Справочник.СЗВСтаж2010.ОтчетныйПериод;
|ОсновнаяЗапись = Справочник.СЗВСтаж2010.ОсновнаяЗапись;
|Начало = Справочник.СЗВСтаж2010.Начало;
|Окончание = Справочник.СЗВСтаж2010.Окончание;
|УсловияТруда = Справочник.СЗВСтаж2010.УсловияТруда;
|КодПозицииСписка = Справочник.СЗВСтаж2010.КодПозицииСписка;
|ИТСОснование = Справочник.СЗВСтаж2010.ИТСОснование;
|ИТСДопСведения1 = Справочник.СЗВСтаж2010.ИТСДопСведения1;
|ИТСДопСведения2 = Справочник.СЗВСтаж2010.ИТСДопСведения2;
|ИТСДопСведения3 = Справочник.СЗВСтаж2010.ИТСДопСведения3;
|ВыслугаЛетОснование = Справочник.СЗВСтаж2010.ВыслугаЛетОснование;
|ВыслугаЛетДопСведения1 = Справочник.СЗВСтаж2010.ВыслугаЛетДопСведения1;
|ВыслугаЛетДопСведения2 = Справочник.СЗВСтаж2010.ВыслугаЛетДопСведения2;
|ВыслугаЛетДопСведения3 = Справочник.СЗВСтаж2010.ВыслугаЛетДопСведения3;
|ТерриториальныеУсловия = Справочник.СЗВСтаж2010.ТерриториальныеУсловия;
|ПараметрТерриториальныхУсловий = Справочник.СЗВСтаж2010.ПараметрТерриториальныхУсловий;
|Группировка Сотр без упорядочивания без групп;
|Группировка КатегорияЗЛ;
|Группировка Запись упорядочить по Запись.Код;
|Условие(Сотр в Сотрудники);
|Условие(ОтчетныйПериод = ДатаНачала);
|"//}}ЗАПРОС
;
Если Режим <> "СохранениеДанных" Тогда
ПопытокВыполненияЗапроса = 10;
Для Сч = 1 По ПопытокВыполненияЗапроса Цикл
Если ЗапросПоСтажу.Выполнить(ТекстЗапроса)=1 Тогда
Прервать
КонецЕсли;
КонецЦикла;
Если Сч = ПопытокВыполненияЗапроса + 1 Тогда
Сообщить("Не удалось обработать данные о стаже работников!");
Возврат 0;
КонецЕсли;
КонецЕсли;
// получим таблицу значений в которй будут сотрудники, имевшие в периоде отчета
// отпуск без сохранения ЗП, больничные или отпуска, исключаемые из льготного стажа
ТаблицаСотрудниковСОсобымиПериодами=СоздатьОбъект("ТаблицаЗначений");
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("Сотрудник");
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьБЛ", "Число", 1, 0);
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьОтпускЗаСвойСчет", "Число", 1, 0);
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьОтпуск", "Число", 1, 0);
//глЗаполнитьТаблицуСотрудниковСОсобымиПериодами(ТаблицаСотрудниковСОсобымиПериодами, Сотрудники, ДатаНачала, ДатаОкончания,
// СписокВРБольничныеЛисты,СписокВРОтпускаБезСохранения,СписокВРОтпускаИсключаемыеИзСтажа);
//таблица для сбора периодов состояния физлица в разрезе месяцев
ТаблицаПериодов=СоздатьОбъект("ТаблицаЗначений");
ТаблицаПериодов.НоваяКолонка("Месяц"); //число
ТаблицаПериодов.НоваяКолонка("КатегорияЗЛ");
ТаблицаПериодов.НоваяКолонка("НачалоПериода");
ТаблицаПериодов.НоваяКолонка("ОкончаниеПериода");
ТаблицаПериодов.НоваяКолонка("СостояниеФизлица");
ТаблицаПериодов.НоваяКолонка("Документ");
ТаблицаПериодов.НоваяКолонка("ЕстьЕНВД");
//таблица для сбора периодов стажа сотрудника, внутри периода состояния физлица
ТаблицаПериодовСтажа=СоздатьОбъект("ТаблицаЗначений");
ТаблицаПериодовСтажа.НоваяКолонка("НачалоПериода");
ТаблицаПериодовСтажа.НоваяКолонка("ОкончаниеПериода");
ТаблицаПериодовСтажа.НоваяКолонка("Должность");
ТаблицаПериодовСтажа.НоваяКолонка("Подразделение");
//списки значений в котоых будем хранить наборы по стажу
НаборДляСтажа = СоздатьОбъект("СписокЗначений");
СтарыйНаборДляСтажа = СоздатьОбъект("СписокЗначений");
ПервыйМесяц = ДатаМесяц(ДатаНачала);
ПоследнийМесяц = ДатаМесяц(ДатаОкончания);
Год = ДатаГод(ДатаНачала);
ПромТаблицаСоСтажем = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.Выгрузить(ПромТаблицаСоСтажем);
Для СчСотров = 1 По ВсегоСотров Цикл
Сотрудник = Сотрудники.ПолучитьЗначение(СчСотров);
КодСотра=Сотрудник.Код;
ИмяСотра=Сотрудник.Наименование;
Если ПустоеЗначение(""""+КодСотра+ИмяСотра)=1 Тогда
Продолжить
КонецЕсли;
СтажВСправочнике=0;
Если Режим <> "СохранениеДанных" Тогда
ЗапросПоСтажу.вНачалоВыборки();
Если ЗапросПоСтажу.Получить(Сотрудник,,)=1 Тогда
СтажВСправочнике=1;
КонецЕсли;
КонецЕсли;
НовыйПроцент = Окр(СчСотров/ВсегоСотров*100);
Если СчСотров < ВсегоСотров Тогда
глСтатусСтрока(Форма,"Обрабатываются данные стажа"+?(ВсегоСотров=1,""""," ("+НовыйПроцент+"%)")+": "+ИмяСотра);
КонецЕсли;
ВремТаблицаСтажаСотрудника = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСтажаСотрудника.Выгрузить(ВремТаблицаСтажаСотрудника);
НомерСтрокиСтажа = 0;
// стаж
Если СтажВСправочнике = 1 Тогда
Пока ЗапросПоСтажу.Группировка("КатегорияЗЛ")=1 Цикл
КатегорияЗЛ = ЗапросПоСтажу.КатегорияЗЛ;
НомерСтрокиСтажа = 0;
ВремТаблицаСоСтажем = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.Выгрузить(ВремТаблицаСоСтажем);
Пока ЗапросПоСтажу.Группировка("Запись")=1 Цикл
Если ЗапросПоСтажу.ОсновнаяЗапись = 1 Тогда
ВремТаблицаСоСтажем.НоваяСтрока();
НомерСтрокиТаблицы = ВремТаблицаСоСтажем.КоличествоСтрок();
НомерСтрокиСтажа = НомерСтрокиСтажа + 1;
ВремТаблицаСоСтажем.ТипЗаписи = "Основная";
ВремТаблицаСоСтажем.НомерЗаписи = НомерСтрокиСтажа;
ИначеЕсли НомерСтрокиСтажа > 0 Тогда
ВремТаблицаСоСтажем.НоваяСтрока();
НомерСтрокиТаблицы = ВремТаблицаСоСтажем.КоличествоСтрок();
ВремТаблицаСоСтажем.ТипЗаписи = "Дополнительная";
ВремТаблицаСоСтажем.НомерЗаписи = 0;
Иначе
Продолжить
КонецЕсли;
ВремТаблицаСоСтажем.Начало = ЗапросПоСтажу.Начало;
ВремТаблицаСоСтажем.Окончание = ЗапросПоСтажу.Окончание;
ВремТаблицаСоСтажем.УсловияТруда = ЗапросПоСтажу.УсловияТруда;
ВремТаблицаСоСтажем.КодПозицииСписка = ЗапросПоСтажу.КодПозицииСписка;
ВремТаблицаСоСтажем.ИТСОснование = ЗапросПоСтажу.ИТСОснование;
ВремТаблицаСоСтажем.ИТСДопСведения1 = ЗапросПоСтажу.ИТСДопСведения1;
ВремТаблицаСоСтажем.ИТСДопСведения2 = ЗапросПоСтажу.ИТСДопСведения2;
ВремТаблицаСоСтажем.ИТСДопСведения3 = ЗапросПоСтажу.ИТСДопСведения3;
ВремТаблицаСоСтажем.ВыслугаЛетОснование = ЗапросПоСтажу.ВыслугаЛетОснование;
ВремТаблицаСоСтажем.ВыслугаЛетДопСведения1 = ЗапросПоСтажу.ВыслугаЛетДопСведения1;
ВремТаблицаСоСтажем.ВыслугаЛетДопСведения2 = ЗапросПоСтажу.ВыслугаЛетДопСведения2;
ВремТаблицаСоСтажем.ВыслугаЛетДопСведения3 = ЗапросПоСтажу.ВыслугаЛетДопСведения3;
ВремТаблицаСоСтажем.ТерриториальныеУсловия = ЗапросПоСтажу.ТерриториальныеУсловия;
ВремТаблицаСоСтажем.ПараметрТерриториальныхУсловий = ЗапросПоСтажу.ПараметрТерриториальныхУсловий;
КонецЦикла;
Если ВремТаблицаСоСтажем.КоличествоСтрок() > 0 Тогда
// для этой категории ЗЛ есть стаж
ВремТаблицаСтажаСотрудника.НоваяСтрока();
ВремТаблицаСтажаСотрудника.КатегорияЗЛ = КатегорияЗЛ;
ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажем;
КонецЕсли;
КонецЦикла;
Если ВремТаблицаСтажаСотрудника.КоличествоСтрок() > 0 Тогда
ТаблицаСтажиСотрудников.НоваяСтрока();
ТаблицаСтажиСотрудников.Сотрудник = Сотрудник;
ТаблицаСтажиСотрудников.ТаблицаСтажаСотрудника = ВремТаблицаСтажаСотрудника;
КонецЕсли;
Иначе //записи справочника не найдены - "эмулируем" стаж по-умолчанию
КатЗЛ=ТаблицаСотрудниковСКатегориямиЗЛ.ПолучитьЗначение(1,"ТаблицаПериодов");
КатегорияЗЛ = КатЗЛ.ПолучитьЗначение(1,"КатегорияЗЛ");
ДатаНачалаСтажа = Дата(0);
ДатаОкончанияСтажа = Дата(0);
ХарактерРаботы = СоздатьОбъект("Периодический");
ХарактерРаботы.ИспользоватьОбъект("ХарактерРаботы", Сотрудник);
ХарактерРаботы.ВыбратьЗначения(,ДатаОкончания);
Пока ХарактерРаботы.ПолучитьЗначение() = 1 Цикл
Если (ХарактерРаботы.Значение = Перечисление.ХарактерРаботы.ДоговорГражданскоПравовогоХарактераВзносы)
ИЛИ (ХарактерРаботы.Значение = Перечисление.ХарактерРаботы.ТрудовойДоговор)
ИЛИ (ХарактерРаботы.Значение = Перечисление.ХарактерРаботы.ДоговорГражданскоПравовогоХарактера) Тогда
ДатаНачалаСтажа = ХарактерРаботы.ДатаЗнач;
КонецЕсли;
Если ХарактерРаботы.Значение = Перечисление.ХарактерРаботы.ТрудовыеОтношенияПрекращены Тогда
ДатаОкончанияСтажа = ХарактерРаботы.ДатаЗнач;
КонецЕсли;
КонецЦикла;
Если ДатаНачалаСтажа = Дата(0) Тогда
Продолжить;
Иначе
ДатаНачалаСтажа = Макс(ДатаНачалаСтажа,ДатаНачала);
КонецЕсли;
Если ДатаОкончанияСтажа = Дата(0) Тогда
ДатаОкончанияСтажа = ДатаОкончания;
Иначе
ДатаОкончанияСтажа = Мин(ДатаОкончанияСтажа,ДатаОкончания);
КонецЕсли;
Если ДатаНачалаСтажа >= ДатаОкончанияСтажа Тогда
ДатаОкончанияСтажа = ДатаОкончания;
КонецЕсли;
ВремТаблицаСоСтажем = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.Выгрузить(ВремТаблицаСоСтажем);
ВремТаблицаСоСтажем.НоваяСтрока();
НомерСтрокиТаблицы = ВремТаблицаСоСтажем.КоличествоСтрок();
НомерСтрокиСтажа = НомерСтрокиСтажа + 1;
ВремТаблицаСоСтажем.ТипЗаписи = "Основная";
ВремТаблицаСоСтажем.НомерЗаписи = НомерСтрокиСтажа;
ВремТаблицаСоСтажем.Начало = ДатаНачалаСтажа;
ВремТаблицаСоСтажем.Окончание = ДатаОкончанияСтажа;
ВремТаблицаСоСтажем.ТерриториальныеУсловия = Константа.ТерриториальныеУсловия;
Если ВремТаблицаСоСтажем.КоличествоСтрок() > 0 Тогда
// для этой категории ЗЛ есть стаж
ВремТаблицаСтажаСотрудника.НоваяСтрока();
ВремТаблицаСтажаСотрудника.КатегорияЗЛ = КатегорияЗЛ;
ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажем;
КонецЕсли;
ТаблицаСтажиСотрудников.НоваяСтрока();
ТаблицаСтажиСотрудников.Сотрудник = Сотрудник;
ТаблицаСтажиСотрудников.ТаблицаСтажаСотрудника = ВремТаблицаСтажаСотрудника;
КонецЕсли; //рассмотрели оба варианта - когда в справочнике есть стаж и когда его в справочнике не было
КонецЦикла; // обхода сотров и физлиц
ТаблицаСтажиСотрудников.Сортировать("1");
глСтатусСтрока(Форма,"""");
Возврат 1;
КонецФункции // глСобратьДанныеДляСЗВ2010()
"
17.01.2011
20:52
#4
Добрый день!
Аналогичная ситуация в релизе 7.70.521 бухучет (7.70.027). При подготовке данных перс учета за 2010г по некоторым сотрудникам указан стаж с 01-12-10, хотя сотрудник оформлен с сентября.
Подскажите, что нужно исправить чтобы отчет формировался нормально. как можно самостоятельно внести изменения в модуль?
Аналогичная ситуация в релизе 7.70.521 бухучет (7.70.027). При подготовке данных перс учета за 2010г по некоторым сотрудникам указан стаж с 01-12-10, хотя сотрудник оформлен с сентября.
Подскажите, что нужно исправить чтобы отчет формировался нормально. как можно самостоятельно внести изменения в модуль?
18.01.2011
17:49
#5
Комплексная конфигурация 7 релиз 503 аналогичная проблемма в индивидуальных сведениях стаж неверный у людей уволенных во втором полугодии (автоматом ставит 31.12.2010). Есть решение для комплексной?
18.01.2011
21:59
#6
Похоже ваша ситуация:
[infostart.ru/public/80216/ »»]
Только это ответ для Бух 7.70.521, но во всех конфах: Предприниматель, УСН, Бух, Комплексная в глобальном модуле одна и та же процедура глСобратьДанныеДляСЗВ2010 там надо сделать то, что сказанно в ссылке (ошибка 1С :о(( )
[infostart.ru/public/80216/ »»]
Только это ответ для Бух 7.70.521, но во всех конфах: Предприниматель, УСН, Бух, Комплексная в глобальном модуле одна и та же процедура глСобратьДанныеДляСЗВ2010 там надо сделать то, что сказанно в ссылке (ошибка 1С :о(( )
28.01.2011
14:39
#7
А как можно внести изменения в модуль, подскажите, плз, никогда этого не делал. я так понял что вопрос только в 1 функции после модуля сбора информации о стаже.
03.02.2011
13:40
#8
Друзья, ну подскажите, пожалуйста, как мне внести изменения в это самый злосчастный модуль. Нигде не могу найти на это ответ. Я никогда не работал с отладчиком.
ЗиК, 306, СЗВ 6-2 у сотрудника с больничным формирует льготный стажПерс.учет 2010, ввод сведений о стаже по сотруднику-инвалиду (Бухгалтерия 7.7, релиз 521)
Читают тему
(гостей: 1)