При расчете заработной платы в конфигурации «1С:Управление производственным предприятием 1.3» (архитектура расчета которой аналогична «1С:Зарплата и управление персоналом 2.5») часто возникает ситуация, когда созданное пользователем начисление (например, надбавка или доплата пропорционально отработанному времени) рассчитывается в полном объеме, игнорируя периоды отпусков, больничных или других отклонений. В результате сотруднику начисляется и отпуск, и доплата за одни и те же календарные дни.
В этой статье мы подробно разберем, почему возникает эта проблема, как работает внутренний механизм платформы «1С:Предприятие 8» по расчету времени, и как правильно настроить программу, чтобы расчет производился корректно.
---
Выясним причину такого поведения системы. Как отмечает автор в одном из сообщений: «на вкладке прочее ничего нет, никакие начисления не настроены». Это и есть ключевой фактор.
В платформе «1С:Предприятие 8» расчет фактически отработанного времени для любого начисления базируется на механизме вытеснения по периоду действия. Если для нашей доплаты не настроены приоритеты (вытеснения), система считает, что у данного начисления нет «конкурентов» за время в расчетном периоде. В результате:
---
ПолучитьДанныеДляРасчетаПроанализируем программную сторону вопроса. В УПП 1.3 сбор данных для расчета выполняется в общем модуле специализированной функцией ПолучитьДанныеДляРасчета. Типичный вызов этой функции выглядит следующим образом:
ИсходныеДанные = ПолучитьДанныеДляРасчета(
ИмяРегистра,
ВыборкаКатегорий.КатегорияРасчета,
НеобходимыеДанные,
Регистратор,
ГоловнаяОрганизация,
ПериодРегистрации, ,
Физлица,
КомментироватьРасчет
);
Разберем по шагам алгоритм, по которому эта функция вычисляет показатели отработанного времени (ОтработаноВремениВДнях, ОтработаноВремениВЧасах и др.):
НеобходимыеДанные.ФактическийПериодДействия для каждой записи регистра расчета. Расчет выполняется по следующей формуле:
ФактическийПериодДействия = ПериодДействия - Периоды Действия Вытесняющих Записей
Если на вкладке «Прочее» в списке вытесняющих начислений пусто, то вычитаемая часть равна нулю. Следовательно, фактический период действия доплаты полностью совпадает с периодом ее действия (весь месяц).ГрафикиРаботыПоВидамВремени (или аналогичным таблицам в зависимости от настроек).
ПериодДействия записи (как правило, норма за полный месяц).ФактическогоПериодаДействия записи на график работы сотрудника.---
Рассмотрим подробнее, какие действия необходимо выполнить в информационной базе, чтобы исправить поведение системы без изменения программного кода.
Откроем список основных начислений организаций. Для этого перейдем по меню: Расчет зарплаты по организациям → Настройка расчета зарплаты → Основные начисления организаций.
Найдем в списке наше начисление (доплату) и откроем его форму. Нам необходимо убедиться в двух моментах:
ОтработаноВремени).Перейдем на вкладку «Прочее». В левой части формы расположена табличная часть «Вытесняющие начисления». Именно она управляет тем, какие виды расчета должны «забирать» время у нашей доплаты.
Выполним следующие действия:
Важно помнить: простое изменение настроек вида расчета в справочнике не приводит к автоматическому перерасчету уже проведенных документов в базе данных. Платформа должна физически перезаписать движения в регистрах расчета.
Выполним перерасчет за проблемный период:
НачислениеЗарплатыСотрудникамОрганизаций за тот месяц, в котором у сотрудника пересекались отпуск и доплата.---
Если вы являетесь разработчиком и хотите убедиться, что механизм отрабатывает корректно на уровне базы данных, мы можем проанализировать движения регистра расчета ОсновныеНачисленияРаботниковОрганизаций.
Для этого можно использовать консоль запросов и выполнить простой запрос к фактическому периоду действия записи:
ВЫБРАТЬ
Регистр.Сотрудник,
Регистр.ВидРасчета,
Регистр.ПериодДействияНачало,
Регистр.ПериодДействияКонец,
Регистр.Регистратор,
ДанныеВремени.ДнейОтработано
ИЗ
РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Регистр
// Соединяем с таблицей фактического периода действия для получения реальных дней
...
После правильной настройки вкладки «Прочее» платформа начнет автоматически создавать записи в служебной таблице фактического периода действия с учетом накладывающихся интервалов вытесняющих расчетов. Функция ПолучитьДанныеДляРасчета при очередном обращении к регистру отработает по заложенному алгоритму и вернет корректные показатели времени для расчета формулы.