Имя: Пароль:
1C
 
Ошибка в УПП при расчете отпуска
0 Черников
 
31.03.25
09:11
УПП. в новом релизе 244.1
есть ошибка в расчете суммы отпускных и командировочных в документах начисление отпуска и оплата по среднему. Расчет среднего умноженное на число дней отпуска не совпадает с итоговой суммой. 1С признала эту ошибку. Может кто нашел возможность обхода?
1 Kobol
 
31.03.25
09:44
Предположительно: Модуль "ПроведениеРасчетовПереопределяемый", функция "ПолучитьСтруктуруНеобходимыхДанных" - в условии "ИначеЕсли СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработкуДляОтпускаПоКалендарнымДням" забыли РК и СН.

В релизах по ориентировочной дате сегодня новая версия должна выйти, можете её дожидаться, вдруг исправят.
2 Кочеврыжка
 
02.04.25
12:37
Есть варианты как это поправить?
если откатиться, то на какую версию?где все более менее считалось нормально?
3 Kobol
 
02.04.25
15:13
Модуль "НачислениеОтпускаРаботникамОрганизацийПереопределяемый"
Функция "РасчетСреднегоЗаработка"
В конце функции из выборки берется значения "ОтработаноДнейРК", которое равно 0, его надо заменить на "ОтработаноДней" (в других модулях так сделано в типовой конфигурации).
Там же для СН и расчета по часам исправить.
И проверку на заполненные значения добавить перед расчетом результата, запрос возвращает NULL для "СреднийЗаработокСН".

(1) Это тоже исправить, добавить еще 4 значения из перечисления, иначе выдаст ошибку, если указаны только дополнительные дни отпуска без основных.
4 vis
 
04.04.25
06:44
Новую версию выпустили.
Бух. проверяла и сказала что ошибка не ушла...
5 lex1972
 
04.04.25
10:37
Как временное решение:
В модуле объекта документа "НачислениеОтпускаРаботникамОрганизаций"
в процедуре "Рассчитать" временно вернул старый расчет:
    ИначеЕсли РассчитываемыеТаблицы.РасчетСреднего Тогда
        НаборОсновныеНачисления.Записать(Истина, Ложь, Истина, Ложь);
        НаборДополнительныеНачисления.Записать(Истина, Ложь, Истина, Ложь);
        Если НаборОсновныеНачисления.Количество() > 0 Тогда
            Если ДатаВыплатыДохода < ПроведениеРасчетов.ДатаЗакона176ФЗ() Тогда
                ПроведениеРасчетовПереопределяемый.СформироватьИЗаписатьДанныеРасчетаСреднего("ОсновныеНачисленияРаботниковОрганизаций", Ссылка, НаборРасчетСреднего);
            Иначе
                //yae
                //ПроведениеРасчетовПереопределяемый.СформироватьИЗаписатьДанныеРасчетаСреднего2025("ОсновныеНачисленияРаботниковОрганизаций", Ссылка, НаборРасчетСреднего);
                ПроведениеРасчетовПереопределяемый.СформироватьИЗаписатьДанныеРасчетаСреднего("ОсновныеНачисленияРаботниковОрганизаций", Ссылка, НаборРасчетСреднего);
            КонецЕсли;
        КонецЕсли;
        Если НаборДополнительныеНачисления.Количество() > 0 Тогда
            Если ДатаВыплатыДохода < ПроведениеРасчетов.ДатаЗакона176ФЗ() Тогда
                ПроведениеРасчетовПереопределяемый.СформироватьИЗаписатьДанныеРасчетаСреднего("ДополнительныеНачисленияРаботниковОрганизаций", Ссылка, НаборРасчетСреднего);
            Иначе
                ПроведениеРасчетовПереопределяемый.СформироватьИЗаписатьДанныеРасчетаСреднего2025("ДополнительныеНачисленияРаботниковОрганизаций", Ссылка, НаборРасчетСреднего);
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
6 lex1972
 
04.04.25
10:39
ПроведениеРасчетовПереопределяемый.СформироватьИЗаписатьДанныеРасчетаСреднего2025("ОсновныеНачисленияРаботниковОрганизаций", Ссылка, НаборРасчетСреднего);
Вот это заремил и поставить ПроведениеРасчетовПереопределяемый.СформироватьИЗаписатьДанныеРасчетаСреднего("ОсновныеНачисленияРаботниковОрганизаций", Ссылка, НаборРасчетСреднего);
7 lex1972
 
04.04.25
10:40
Отпускные копейки по новому расчеты получаются. :)
8 Гена
 
гуру
04.04.25
10:43
(7) Более точно: ошибочный новый расчёт отпускных случайно не даёт кратное уменьшение СДЗ: в два, три и т.д. раза?
9 Гена
 
гуру
04.04.25
10:55
(7) Не тормозите. УПП открыт же? Гляньте на сумму отпуска и сравните с правильной.
Или скиньте мне пустую базу - сам гляну.
10 Kobol
 
04.04.25
11:02
(8) Надо в документе смотреть таблицу расчета по среднему, что за один месяц не установились отработанные дни на каждое начисление.
Раньше колонки "Начисление" в документе не было и строки группировались, а теперь основной заработок разделяется на несколько строк (почасовая, премия, доплата, РК и т.д.) и в каждую устанавливается 29,3 дней.
Может это связано с нашими доработками, в типовой не проверял.
11 Гена
 
гуру
04.04.25
11:07
(10) Гут. Но тогда отпускные суммы должны быть строго КРАТНО меньше правильной суммы. Но lex1972 молчит как партизан.
12 lex1972
 
04.04.25
11:25
(9) CF база пойдет?
13 Гена
 
гуру
04.04.25
11:31
(12) Можно попробовать. У меня старый УПП 200 - может прокатит )
14 lex1972
 
04.04.25
11:35
Сейчас закачаю и на почту отправлю ссылку на скачивание.
15 lex1972
 
04.04.25
11:40
Отправил. Благодарю.
16 lex1972
 
04.04.25
12:11
(8) Вот пример одному сотруднику среднедневная по старому алгоритму получалась 1442,33 а по новому считает 337,14. Кратность 4,38
17 Гена
 
гуру
04.04.25
12:20
(16) Похоже на дни. Как бы увидеть последнюю закладку "Расчет среднего заработка" - скорее всего повторяются дни 29.3 (или пропорции) не только для основных видов расчёта, но и для дополнительных (вроде надбавки).
18 Гена
 
гуру
04.04.25
12:30
т.е. давайте скрин или несколько, чтобы видны были все записи расчёта среднего любого ОДНОГО месяца.
19 lex1972
 
04.04.25
12:39
На почту всю табличку отправил.
20 Гена
 
гуру
04.04.25
12:55
(19) Да и так видно.
ч.т.д.
Знаменатель кратно ошибочно вырос, отсюда кратно же уменьшился средний.

Проверьте: прямо вручную обнулите по всем месяцам колонку "Дней расчётного периода", оставив в каждом месяце только ОДНУ сумму 29.3 или её пропорцию, которая правее оплаты по окладу. По принципу один месяц - одни знаменатель.

После того, как убедитесь проверкой - идите в код и уберите там повтор ОтработаноПоПятидневке для дополнительных видов расчёта. Сделайте как при бабушке - для каждого месяца один знаменатель (время).
21 lex1972
 
04.04.25
13:07
Спасибо Геннадий пойду ковырять код. :)
22 Гена
 
гуру
04.04.25
13:11
(21) Чего там ковырять? Чай не ЗУП, где кубло ВТ, половина из которых сами себя удаляют после запроса.
Минут 10 работы в 2.5, причём не торопясь и за чашечкой кофе.
P.S. Ваш сf не прокатил ) Не судьба мне увидеть новый релиз УПП...
23 lex1972
 
04.04.25
13:41
(22) Платформа старая.
24 vis
 
04.04.25
13:53
(21) Ну как, получилось?
25 Kobol
 
04.04.25
14:07
(20) один месяц - один знаменатель
Но не РК или СН - если в них оставить, может некорректно рассчитать средний заработок.
26 lex1972
 
04.04.25
14:16
(24) Пока некогда было, других дел полно. До понедельника время есть.
27 lex1972
 
04.04.25
14:16
(25) У нас РН и СК нет.
28 lex1972
 
04.04.25
14:39
В типовой нашел прикольный коммент :)
        
СледующийВидНачисления = Ложь;//юля
29 lex1972
 
04.04.25
14:44
Пока сделал так в модуле объекта документа начисления отпуска
        ВременнаяТЗ = НаборРасчетСреднего.Выгрузить();
        Если ДатаВыплатыДохода < ПроведениеРасчетов.ДатаЗакона176ФЗ() Тогда
            ВременнаяТЗ.Свернуть("СпособРасчета,БазовыйПериодКонец,БазовыйПериодНачало,ВидРасчета,КоэффициентИндексации,НормаПоПятидневке,ОтработаноДней,ОтработаноПоПятидневке,ОтработаноЧасов,Результат,ЧислоМесяцев");
        Иначе
            ВременнаяТЗ.Свернуть("СпособРасчета,Начисление,БазовыйПериодКонец,БазовыйПериодНачало,ВидРасчета,КоэффициентИндексации,НормаПоПятидневке,ОтработаноДней,ОтработаноПоПятидневке,ОтработаноЧасов,Результат,ЧислоМесяцев");
        КонецЕсли;
        
        //yae    
        ВРОклад = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОкладПоДням;
        Для Каждого тСтрока ИЗ ВременнаяТЗ Цикл
            ВидНачисления = тСтрока.Начисление;        
            Если ТипЗнч(ВидНачисления) = Тип("ПланВидовРасчетаСсылка.ОсновныеНачисленияОрганизаций")
                И ВидНачисления = ВРОклад Тогда
                Продолжить;        
            Иначе    
                тСтрока.ОтработаноДней = 0;    
            КонецЕсли;
        КонецЦикла;
30 lex1972
 
04.04.25
14:44
Геннадий, сейчас плеваться будет. Меня пока устроит. Буду ждать обновы.
31 Гена
 
гуру
04.04.25
15:06
Обед святое дело...
(29) Фактически Вы просто обнулили РАНЕЕ излишне собранные дни для допначислений. Тогда придётся также нулить и в остальных доках среднего: увольнение, командировка и т.п.

Согласитесь, что это не айс. Надо изначально нулить, где-то в первоначальной таблице набора расчёта среднего. Не в доках среднего, а в общем модуле тру-ля-ля_2025
32 lex1972
 
04.04.25
15:46
(31) Полностью согласен. Я посмотрел туда для меня сложновато это, то есть время у меня много займет. Пока с отпускными только вопрос заострили. Я нашел запрос даже скопировал его в запросник собрался параметры скопировать. И вырубился у нас свет. :) Я решил что  видимо это знак что туда не лезть, мне пока пойдет такой способ. Будет время и желание залезу туда.
33 Гена
 
гуру
04.04.25
16:06
(32) К знакам надо прислушиваться. Где-то встречал статистику, что на рейсы, потерпевшие катастрофу в среднем процентов на 5 сдают больше билетов на отказ от поездки, нежели на обычные рейсы.

Может и не надо заранее нулить дни в общем модуле, может они ещё где-то задействованы.

Оставляйте костыль.
34 v36i82bp
 
04.04.25
16:34
(32) попробуйте в Общем модуле "ПроведениеРасчетовПереопределяемый" в функции "ПолучитьДанныеДляРасчета2025" в тексте запроса в переменной "ДанныеОСреднемЗаработкеТекст" (83 строка функции) заменить агрегатные функции СУММА() на МАКСИМУМ() для полей ОтработаноДней, ОтработаноДнейПособий, ОтработаноДнейПособий2010, ОтработаноЧасов.
35 Гена
 
гуру
04.04.25
17:31
(34) Крайне плохо. Гляньте скрин автора. Там для неполноотработанных месяцев знаменатель для оклада 27.35, а для общемесячного КТУ 29.3
Ваша функция максимума ОШИБОЧНО впендюрит во все месяцы в знаменатель 29.3 вместо пропорции отработанных календарных дней. При наличии разовых начислений.
36 Гена
 
гуру
04.04.25
17:38
Лучше дайте под спойлером целиком код этой функции ПолучитьДанныеДляРасчета2025
Судя по названию это то, что нужно. Разберёмся.
37 lex1972
 
04.04.25
18:17
Код в текстовом файле.
https://disk.yandex.ru/d/nVJP1dCndlfRtg
38 lex1972
 
04.04.25
18:04
Похоже не так вставил. Как сполер вставить правильно?
39 v36i82bp
 
04.04.25
18:18
(35) Там в полях группировки есть поле "ДатаНачалаРасчетногоПериода" (каждый месяц) и "СпособРасчета", я у себя не нашел ситуации когда этого недостаточно.
40 lex1972
 
04.04.25
18:25
(39) Вообще, я по одному сотруднику посмотрел сумма получается при обоих способах одна и та же. Возможно в других местах может что и вылезет.
41 Гена
 
гуру
04.04.25
18:46
Ого... простынь )
42 Гена
 
гуру
04.04.25
18:55
Да, коллеги, вот наш кусок, вы правильно его нашли:
 |    СУММА(ВЫБОР
    |            КОГДА РасчетСреднегоЗаработка.Начисление.КодДоходаНДФЛ = ЗНАЧЕНИЕ(Справочник.ДоходыНДФЛ.РайонныеСеверныеНадбавки)
    |                ТОГДА 0

    |            КОГДА РасчетСреднегоЗаработка.ВидРасчета В (&ОсновнойЗаработок)
    |                    ИЛИ РасчетСреднегоЗаработка.ВидРасчета В (&ОсновнойЗаработокНеиндексируемый)
    |                ТОГДА ВЫБОР
    |                        КОГДА РасчетСреднегоЗаработка.СпособРасчета В (&ПоСреднемуЗаработкуФСС)
    |                            ТОГДА ВЫБОР
    |                                    КОГДА РасчетСреднегоЗаработка.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
    |                                        ТОГДА 0
    |                                    ИНАЧЕ РасчетСреднегоЗаработка.ОтработаноДней
    |                                КОНЕЦ
    |                        ИНАЧЕ РасчетСреднегоЗаработка.ОтработаноДней
    |                    КОНЕЦ
    |            ИНАЧЕ 0
    |        КОНЕЦ) КАК ОтработаноДней,

Жёлтым выделил мысль... У кого есть РК - проверьте отпуск, ту вкладку среднего по месяцам. А для РК случайно нет лишних дней, которые прут в знаменатель? Если нет, то сейчас этот кусок доработаем. А вот если и для РК бухнулись 29.3 или его пропорция - то гипотеза не верна.
43 Гена
 
гуру
04.04.25
19:25
А чего я жду? Пятница вечер )
Ладно, чудес не бывает, скорее всего РК и СН пустодневные в среднем (см. жёлтое).

Давайте подумаем. К кренделю, который кодит на фирме 1С зарплату в УПП пришёл босс и сказал:
- Надо РКСН теперь выделять в среднем.

Ну надо, так надо. Крендель и выделил. Стал проверять - втрое упали отпускные. Тогда он добавил:
  |            КОГДА РасчетСреднегоЗаработка.Начисление.КодДоходаНДФЛ = ЗНАЧЕНИЕ(Справочник.ДоходыНДФЛ.РайонныеСеверныеНадбавки)
    |                ТОГДА 0

и успокоился. Проверял-то на голом окладе, а в жизни есть надбавки и разовые выплаты.
Их надо добавить в "когда/тогда 0"

Предложенная замена суммы на максимум плоха тем, что внутри месяца может быть кадровый перевод и для двух строчек начисления по тому же окладу может быть 10.0 в одном куске месяца и 19.3 в другом. Заменив ошибочно сумму на максимум с удивлением обнаружим знаменатель месяца как 19.3 вместо 29.3 = 10.0 + 19.3
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший