Имя: Пароль:
1C
 
Не учитывается июльская индексация при расчете отпусков
,
0 Ивановна
 
01.07.24
10:32
ЗУП Зарплата и управление персоналом, редакция 3.1 (3.1.29.39).
Считают отпуска и увольнения, периоды входят с коэффициентом индексации 1.
С чем может быть связано?
Знаю, что есть обработка "Обновить данные для расчета среднего заработка", однако ж работало раньше и без ее тычка.
Заранее спасибо за подсказки
1 Гена
 
гуру
01.07.24
11:13
(0) Изменение плановых начислений от 01.07.2024 завели?
2 Ивановна
 
01.07.24
11:32
пробовала и от 30.06, не срабатывает.
Если сам месяц в "Изменении плановых начислений" поменять, поставить "Июнь", тогда сработает.
Причем в  январе, в документе "Изменении плановых начислений" стоит "Январь" и отпуска январские считаются с учетом индексации. А в июле, нет, июльская индексация не попадает.
Если в документе по расчету отпуска июльского нажать карандашик у среднего заработка, он видит только январский. Июльского не видит.
3 Гена
 
гуру
01.07.24
11:46
(2) дата дока отпуска, месяц начисления, дата начала?
Сотрудника в нём перевыбирали (освежали)?
4 SleepyHead
 
гуру
01.07.24
11:51
(0) Проверьте патчи или обновитесь. Видел среди ошибок подобное.
5 Ивановна
 
01.07.24
11:53
(4) Спасибо. Патчи перечитала, не увидела. Попробую обновиться на копии
6 Ивановна
 
01.07.24
13:23
Не помогло
7 Гена
 
гуру
01.07.24
15:36
Так и не ответили на (3). Ладно, сам глянул в демо 29.21
Нормально считает индексацию 01.07.2024
8 Ивановна
 
01.07.24
16:33
(7) Конечно, всё сделала.
Смотрите, что получается. Получается, что если в период для расчета отпуска попадает запись регистра коэффициент индексации заработка, то индексация учитывается.
Отпуск с 02.07.2024 по 05.07.2024, запись в регистре от 01.07.2024, индексация не учитывается. Запись в регистре появляется по документу "Изменение плановых начислений"
Если в "Изменении плановых начислений" поставить месяц "Июнь", запись в регистре будет от 01.06, она попадает в период для расчета.
9 Ивановна
 
01.07.24
16:33
(7) На предыдущем релизе у меня тоже нормально
10 Ивановна
 
01.07.24
16:37
Функция ДанныеИндексации(ИсходныеДанные, КоэффициентУчитываетПоследующиеИндексации = Ложь) Экспорт
    
    ДанныеИндексации = Новый ТаблицаЗначений;
    ДанныеИндексации.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
    ДанныеИндексации.Колонки.Добавить("Период", Новый ОписаниеТипов("Дата"));
    ДанныеИндексации.Колонки.Добавить("КоэффициентИндексации", Новый ОписаниеТипов("Число"));
    
    Если ИсходныеДанные.Количество() = 0 Тогда
        Возврат ДанныеИндексации;
    КонецЕсли;
    
    МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
    
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ИсходныеДанные.Сотрудник,
        |    ИсходныеДанные.НачалоПериодаРасчетаСреднего,
        |    ИсходныеДанные.ОкончаниеПериодаРасчетаСреднего,
        |    ИсходныеДанные.ДатаНачалаСобытия,
        |    ИсходныеДанные.ПорядокРасчета
        |ПОМЕСТИТЬ ВТИсходныеДанные
        |ИЗ
        |    &ИсходныеДанные КАК ИсходныеДанные
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    МИНИМУМ(ИсходныеДанные.НачалоПериодаРасчетаСреднего) КАК НачалоПервогоИнтервала,
        |    МАКСИМУМ(ИсходныеДанные.ОкончаниеПериодаРасчетаСреднего) КАК ОкончаниеПоследнегоИнтервала
        |ИЗ
        |    ВТИсходныеДанные КАК ИсходныеДанные";
    
    Запрос.УстановитьПараметр("ИсходныеДанные", ИсходныеДанные);
    
    РезультатЗапроса = Запрос.Выполнить();
    Если РезультатЗапроса.Пустой() Тогда
        Возврат ДанныеИндексации;
    КонецЕсли;

    Выборка = РезультатЗапроса.Выбрать();
    Выборка.Следующий();
    
    // Создаем ВТ с месяцами
    ЗарплатаКадрыОбщиеНаборыДанных.СоздатьВТПериоды(МенеджерВременныхТаблиц, Выборка.НачалоПервогоИнтервала, Выборка.ОкончаниеПоследнегоИнтервала);
    
    // Выбираем коэффициенты индексации заработка:
    // - для индексации выплат, учитываемых при расчете показателя среднего заработка,
    // для каждого месяца выбираем коэффициенты, всех индексаций, случившихся ДО него
    // - для расчета показателя КоэффициентИндексации - для каждого месяца
    // выборка коэффициентов всех индексаций, случившихся ПОСЛЕ него.
    
    Запрос.Текст =
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    ИсходныеДанные.Сотрудник КАК Сотрудник,
        |    ИсходныеДанные.НачалоПериодаРасчетаСреднего КАК НачалоПериодаРасчетаСреднего,
        |    КоэффициентИндексацииЗаработка.Период КАК Период,
        |    КоэффициентИндексацииЗаработка.Коэффициент КАК Коэффициент
        |ПОМЕСТИТЬ ВТИндексацияЗаработка
        |ИЗ
        |    ВТИсходныеДанные КАК ИсходныеДанные
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КоэффициентИндексацииЗаработка КАК КоэффициентИндексацииЗаработка
        |        ПО ИсходныеДанные.Сотрудник = КоэффициентИндексацииЗаработка.Сотрудник
        |            И (КоэффициентИндексацииЗаработка.Период МЕЖДУ ИсходныеДанные.НачалоПериодаРасчетаСреднего И ДОБАВИТЬКДАТЕ(НАЧАЛОПЕРИОДА(ИсходныеДанные.ДатаНачалаСобытия, МЕСЯЦ), СЕКУНДА, -1))
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    КоэффициентыПовышения.Сотрудник КАК Сотрудник,
        |    КоэффициентыПовышения.Период КАК Период,
        |    КоэффициентыПовышения.Коэффициент КАК Коэффициент
        |ПОМЕСТИТЬ ВТКоэффициентыИндексации
        |ИЗ
        |    ВТИндексацияЗаработка КАК ИндексацияЗаработка
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КоэффициентыПовышенияЗаработкаУчитываемыеПриИндексации КАК КоэффициентыПовышения
        |        ПО ИндексацияЗаработка.Сотрудник = КоэффициентыПовышения.Сотрудник
        |            И (КоэффициентыПовышения.Период МЕЖДУ ИндексацияЗаработка.НачалоПериодаРасчетаСреднего И ИндексацияЗаработка.Период)
        |
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |ВЫБРАТЬ
        |    ИндексацияЗаработка.Сотрудник,
        |    ИндексацияЗаработка.Период,
        |    ИндексацияЗаработка.Коэффициент
        |ИЗ
        |    ВТИндексацияЗаработка КАК ИндексацияЗаработка
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ИсходныеДанные.Сотрудник КАК Сотрудник,
        |    Месяцы.Период КАК Период,
        |    ЕСТЬNULL(КоэффициентИндексацииЗаработка.Коэффициент, 1) КАК КоэффициентИндексации
        |ИЗ
        |    ВТИсходныеДанные КАК ИсходныеДанные
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТПериоды КАК Месяцы
        |        ПО (Месяцы.Период МЕЖДУ ИсходныеДанные.НачалоПериодаРасчетаСреднего И ИсходныеДанные.ОкончаниеПериодаРасчетаСреднего)
        |        ЛЕВОЕ СОЕДИНЕНИЕ ВТКоэффициентыИндексации КАК КоэффициентИндексацииЗаработка
        |        ПО ИсходныеДанные.Сотрудник = КоэффициентИндексацииЗаработка.Сотрудник
        |            И (Месяцы.Период >= НАЧАЛОПЕРИОДА(КоэффициентИндексацииЗаработка.Период, МЕСЯЦ))
        |            И (КоэффициентИндексацииЗаработка.Период >= ИсходныеДанные.ДатаНачалаСобытия)
        |
        |УПОРЯДОЧИТЬ ПО
        |    Сотрудник,
        |    Период УБЫВ
        |ИТОГИ ПО
        |    Сотрудник,
        |    Период";
    
    Если Не КоэффициентУчитываетПоследующиеИндексации Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст, ">=", "<");
        Запрос.Текст = СтрЗаменить(Запрос.Текст, "Период УБЫВ", "Период ВОЗР");
    КонецЕсли;
    
    РезультатЗапроса = Запрос.Выполнить();
    
    // Обходя результаты запроса агрегируем коэффициенты.
    
    ВыборкаПоСотрудникам = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаПоСотрудникам.Следующий() Цикл
        ВыборкаПоМесяцам = ВыборкаПоСотрудникам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        Пока ВыборкаПоМесяцам.Следующий() Цикл
            Коэффициент = 1;
            Выборка = ВыборкаПоМесяцам.Выбрать();
            Пока Выборка.Следующий() Цикл
                Коэффициент = Коэффициент * Выборка.КоэффициентИндексации;
            КонецЦикла;
            Если Коэффициент < 1 Тогда
                Коэффициент = 1;
            КонецЕсли;
            СтрокаИндексации = ДанныеИндексации.Добавить();
            СтрокаИндексации.Сотрудник = ВыборкаПоСотрудникам.Сотрудник;
            СтрокаИндексации.Период = ВыборкаПоМесяцам.Период;
            СтрокаИндексации.КоэффициентИндексации = Коэффициент;
        КонецЦикла;
    КонецЦикла;
    
    Возврат ДанныеИндексации;
    
КонецФункции
11 Ивановна
 
01.07.24
16:38
общий модуль учетсреднегозаработка
12 Ивановна
 
01.07.24
16:41
Датаначаласобытия это начало отпуска

///////
Но ведь это неправильно.
13 Гена
 
гуру
01.07.24
16:46
14 Ивановна
 
01.07.24
16:52
(13) Дак релиз другой же, у вас же 29.21?
15 Гена
 
гуру
01.07.24
16:53
(14) Глянул 29.78 - эта функция не изменилась.
16 Гена
 
гуру
01.07.24
16:59
Гляньте даты в отладчике. Должно быть так:
1. Если дата отпуска с 01.07, то индексации нет, т.к. внутри отпуска. Индексация учитывается на вкладке Начисления, а не на вкладке среднего - строго по Постановлению 922.
2. Если дата отпуска с 02.07, то индексация есть, т.к. она ДО отпуска.
17 Ивановна
 
01.07.24
16:59
Сейчас демку разверну, в ней попытаюс
18 Гена
 
гуру
01.07.24
17:16
(17) Чудес не бывает. Враг уже лазил в код. Выявить и расстрелять.
Но сначала напоить чайком, это непременно.
19 Ивановна
 
01.07.24
17:02
>Индексация учитывается на вкладке Начисления, а не на
вкладке среднего - строго по Постановлению 922.

Вы сейчас про вкладке какие говорите, в каком объекте?
20 Гена
 
гуру
01.07.24
17:14
(19) Вот смотрите. Если отпуск с 01.07, то индексации среднего нет:
https://i.ibb.co/s15TQV7/2024-07-01-17-07-47.png

Зато сам результат увеличивается на 1.2, т.к. индексация лежит внутри отпуска!
https://i.ibb.co/C6BkM3f/2024-07-01-17-09-23.png
21 Гена
 
гуру
01.07.24
17:32
Постановление Правительства РФ от 24 декабря 2007 г. N 922 "Об особенностях порядка исчисления средней заработной платы"
16. При повышении в организации (филиале, структурном подразделении) тарифных ставок, окладов (должностных окладов), денежного вознаграждения средний заработок работников повышается в следующем порядке:
...
если повышение произошло после расчетного периода [1 июля] до наступления случая, с которым связано сохранение среднего заработка [2 июля], - повышается средний заработок, исчисленный за расчетный период [есть индексация на вкладке среднего];

если повышение произошло в период сохранения среднего заработка [1 июля], - часть [ранее рассчитанного] среднего заработка повышается с даты повышения тарифной ставки, оклада (должностного оклада), денежного вознаграждения до окончания указанного периода. [повышается не на вкладке среднего, а сам резульат отпускных]
22 Ивановна
 
01.07.24
17:48
(21) Спасибо, думаю.
В демке у меня тоже не попадает в надпись

https://ibb.co/zxzGqZp
https://ibb.co/BqTGcfM
https://ibb.co/M2nch8c
23 Ивановна
 
01.07.24
17:50
Но на вкладке "Начислено" отпускные проиндексированы. Спасибо, этого я не видела.
24 Гена
 
гуру
01.07.24
17:57
(23) Не за что.