Разбираю блок ЗУП из УПП 1.3.47.2.
В документе "Начисление отпуска организаций" на вкладке "Расчет среднего заработка" у некоторых работников неверно расчитывается количество календарных дней - не исключаются дни отпуска за свой счет.
Начал разбираться - расчет календарных дней идет по регистрам расчета НачислениеЗарплатыРаботникамОрганизаций и РасчетСреднегоЗаработка, с отбором вид расчета = .ПВР.СреднийЗаработок.ПоЗаработку и ПВР.СреднийЗаработок.ПоЗаработкуДляОтпуска, с дополнительными фильтрами, чтобы ВидРасчета.ЗачетНормыВремени = ИСТИНА и ВидРасчета.ЗачетКалендарныхДней = ИСТИНА.
Это типовой механизм, сверял с последним обновлением.
Наткнулся на то, что иногда в табеле был указан отпуск за свой счет и в РС.СостояниеСотрудниковОрганизаций у этого сотрудника была запись (регистратор - документ ОтпускаОрганизаций).
Создал документы Невыходы на основании этих Отпусков, и частично ситуация исправилась - по конкретными сотрудникам в конкретных месяцах теперь расчет календарных дней происходит правильно - дни отпуска за свой счет стали вычитаться из календарных дней того месяца.
Но остались несколько сотрудников, у которых в регистре расчета НачислениеЗарплатыРаботникамОрганизаций я не нахожу различий и зацепок, сравнивая записи за периоды с правильным расчетом и ошибочным.
Разобрал этот запрос "на части", вывел поля, по которым есть какие-либо соединения или фильтры, сравнения, расчеты - ничего подозрительного не нахожу.
У разных документов по сотруднику еще и разные графики работы - где "пятидневка", а где с фамилией сотрудника - это тоже почему может быть?
Что делать? Как победить?
Я так понимаю, что есть кадровые документы (табель, отпуска организаций), которые изменяют состояние сотрудников.
А есть и расчетные документы (невыходы в организацию, начисление отпска работникам организаций и т.д.).
И в моем случае сломалась цепочка.
Как её починить?
Что нашел: у регистра расчета есть виртуальная таблица ДанныеГрафика, которая участвует в этом запросе. В раегистре указан график - РС.ГрафикиРаботыПоПериодамВремени.
В правильно начисленных периодах количество дней из реквизита этого графика не попадают, равны null (и прочие реквизиты из соединения с этой таблицей), а в неверно рассчитываемых периодах - по количеству дней, взятых без содержания. От того и плюсуются.
Пример выборки по этой виртуальной таблице с отбором по сотруднику:
март 2016 (правильно)
- рабочих дней 28 Начисление зарплаты - 28
- без содержания 2 Табель учета рабочего времени - NULL
- выходной 1
итого 31
Апрель 2016 (неправильно)
- Рабочих дней 28 нчисление зарплаты - 28
- без содержания табель учета рабочего времени - 2
итого 30. А должно быть 28.
Как вариант - оформлять невыходы отдельными документами, а не табелем только.
После обновления релиза на 1.3.45.2 в документе "Табель учета рабочего времени" появились записи в реквизит ГрафикРаботыСотрудник (в процедуре ДвиженияПоРегиструРасчета, строка движение.ГрафикРаботыСотрудника = ВыборкаПериодыПропуска.Сотрудник).
Прежде в виртуальной таблице НачисленияРаботникамОрганизаций.ДанныеГрафика такие дни невыхода отображались как NULL, потому что реквизит ГрафикРаботыСотрудник был пустой ссылкой, и не было соединения с регистром сведений ГрафикРаботыПоВидамВремени, который является графиком для РР.НачисленияРаботникамОрганизаций.
В итоге в поле ПроизводственныйКалендарьблаблабла этой виртуальной таблицы было NULL и при сумме с другими строками за этот период получалось необходимое количество календарных дней для расчета средней.
Теперь поле ГрафикРаботыСотрудник всегда заполнено (вспомним обновление 1.3.45.2) и происходит соединение с указанным регистром сведений для графика расчета.
И сумма дней по периоду теперь составляет календарное количество - 28 дней начислено, плюс 2 дня отпуск, которые раньше были NULL, итого 30 дней.
Что неправильно, если не оформлять документ "Невыходы...".
------------------------------------
Два варианта решения: заставить оформлять эти документы или исключать из выборки строки с видом расчета "Дни неоплачиваемые согласно табелю".
Vladal @ 19.08.16, 17:41 ,
Идеально - исправление поставщиком конфигурации.
Vladal @ 29.08.16, 17:29
,
так там все проще
нужно убрать в Основных начислениях организации, выбрав Отпуск за свой счет, в закладке время убрать галочку "Засчитывать в календарные дни", и тогда в расчет отпуска подтягивает календарные дни за минусом дней за свой счет
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua