|
ЗУП3.1 Показатель ОтработаноДней считается неправильно - что посоветуете? | ☑ | ||
---|---|---|---|---|
0
Провинциальный 1сник
04.07.18
✎
18:39
|
Есть вид расчета "компенсация молока за вредность", там формула ЕжедневнаяОплатаМолока*ОтработаноДней. И почему-то у некоторых сотрудников, которые часть месяца не работали (отпуск), показатель ОтработаноДней - полное время по графику, а не фактические рабочие дни. В печатной форме табеля при этом всё нормально, оклад тоже считается исходя из реальных рабочих дней. Пробовал заменить ОтработаноДней в формуле на ВремяВДнях с указанием вида времени Явка - всё то же самое, выдает полное количество рабочих дней по графику. При этом у некоторых сотрудников всё считается нормально. Пытался определить, в чем разница - не смог. Всё одинаково, график один и тот же, но у одного считает рабочие дни по факту, а у другого - по графику.
Где копать, что может быть не так? |
|||
1
Alexandr_U1982
04.07.18
✎
18:50
|
Копать отладчиком. Модуль объекта обработки МенеджерРасчетаЗарплаты, Процедура ЗаполнитьЗначенияПоказателейНачисленийСлужебный().
Нужно смотреть содержимое таблиц в переменной МенеджерРасчетаЗарплаты. |
|||
2
Alexandr_U1982
04.07.18
✎
18:54
|
+(1) Пардон, Процедура РассчитатьЗначенияПоказателейНачислений().
|
|||
3
Alexandr_U1982
04.07.18
✎
18:57
|
У вас отпуск вытесняет компенсацию молока за вредность?
|
|||
4
Alexandr_U1982
04.07.18
✎
19:05
|
Судя по процедуре РассчитатьЗначенияПоказателейОтработаноВсего(), отработано дней собирается по таблице фактического периода действия регистра расчета "Начисления". Полное время в этой таблице может рассчитывается в случае, если нет вытесняющей записи.
Ну а более точно причину проблемы можно определить по содержимому таблиц. |
|||
5
Провинциальный 1сник
04.07.18
✎
19:18
|
(3) Нет конечно. Это компенсационная выплата, дополнительно за уже оплаченное время.
|
|||
6
Провинциальный 1сник
04.07.18
✎
19:20
|
(4) Смотрю уже. Этот неверный показатель (20 дней вместо 1 дня) появляется при выполнении процедуры РассчитатьЗначенияПоказателейОтработаноВсего(), а там идет обращение в запросе через менеджер временных таблиц к другим ранее созданным временным таблицам. Как их посмотреть, не ковыряя код?
|
|||
7
Провинциальный 1сник
04.07.18
✎
19:21
|
(5) Как вообще доплата может что-то вытеснять?
|
|||
8
Радим1987
04.07.18
✎
19:26
|
Необходимо вставить код вместо // МесяцНачисления = МесяцыРасчета[0];
Обработка.МенеджерРасчетаЗарплаты Процедура РассчитатьЗарплатуСлужебный() // Причина такого действия: // При увольнения сотрудника программа 1С пытается делать расчет зарплаты с последнего начисления // Допустим сотрудник увольняется в июне а последнее начисление было в апреле т.е май пропущен // в итоге для расчета ЗП у нас 2 месяца апрель и май // МесяцыРасчета это массив там 2 даты 01.05.2018 и 01.06.2018 // типовой отбирает только первый элемент т.е 01.05.2018 и отклонения (отсутствия, неявки ...) которые введены в июне // не будет действовать Если НЕ РасчетОдногоМесяца и ТипЗнч(ИсключаемыйРегистратор) = Тип("ДокументСсылка.Увольнение") Тогда МесяцНачисления = МесяцыРасчета[1]; Иначе МесяцНачисления = МесяцыРасчета[0]; КонецЕсли; Посмотри здесь |
|||
9
RomanYS
04.07.18
✎
19:28
|
Подпишусь
|
|||
10
Провинциальный 1сник
04.07.18
✎
19:29
|
Задал вытеснения - стало считаться правильно. Но блин это какой-то маразм. Теперь во все надбавках, зависящих от рабочего времени, придется вытеснения настраивать? Раньше ведь работало всё..
|
|||
11
Фрэнки
04.07.18
✎
19:58
|
(10) раньше? это где? В 2.5 без вытеснения аналогичные расчеты точно также работали криво
|
|||
12
Провинциальный 1сник
04.07.18
✎
20:04
|
(11) В 3.1 работаем с начала года, проблема вылезла только в июне. Предыдущие месяца рассчитались нормально. Такое ощущение, что что-то там наоптимизировали и поменялся способ вычисления отработанного времени для "начисления-доплаты", теперь он приравнен к "начислению-оплате".
|
|||
13
Фрэнки
04.07.18
✎
21:04
|
(12) ну этого тоже нельзя исключать. Ну не будешь же нарочно сидеть-сравнивать результаты и ломать голову - было или не было изменения в коде... там даже просто список изменений большой и выискивать вы нем долго. Я просто допускаю, что в данном конкретном моменте решились сделать одинаковый алгоритм с использованием вытеснения, чтоб он был хоть как-то наглядный и привычный
|
|||
14
Alexandr_U1982
04.07.18
✎
23:47
|
(10) Никакого маразма тут нет. В Формуле расчета начисления вы использовали предопределеный показатель, к которому жестко привязан алгоритм расчета значения по фактическому периоду действия. Соответственно, если вы хотите, чтобы из расчета выбрасывались какие-либо периоды, то нужно настроить вытеснения. Все логично, системе абсолютно по барабану как вы для себя классифицируете это начисление. Есть четко прописанный алгоритм - получите результат.
|
|||
15
Alexandr_U1982
04.07.18
✎
23:48
|
(7) В данном случае не доплата должна что-то вытеснять, а отпуск должен вытеснять доплату.
|
|||
16
Alexandr_U1982
04.07.18
✎
23:55
|
(6) Есть один прием для просмотра содержимого временных таблиц.
В платформе 8.3 во время отладки можно изменять значения пременных.Соответственно можно изменить и текст запроса. Находите в коде строчку «Запрос.Выполнить()» и ставите после нее точку останова. С помощью окна просмотра значений переменных смотрите какие временные таблицы содержатся в Запрос.МенеджерВременныхТаблиц. Затем меняете текст запроса на «ВЫБРАТЬ * ИЗ ИмяВременнойТаблицы» и выполняете команду «Запрос.Выполнить().Выгрузить()». В итоге получаете содержимое временной таблицы. |
|||
17
Провинциальный 1сник
05.07.18
✎
01:43
|
(14) Я предполагал, что механизм вытеснения относится лишь к начислениям, изменяющим рабочее время, чтобы при пересечении нескольких начислений на одном периоде подсистема знала, какое из них применится. Теперь буду знать, что вытеснение применяется в том числе и для определения периода действия начислений, напрямую на рабочее время не влияющих. Ок.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |