При работе в программе 1С:Зарплата и управление персоналом 3.1 пользователи часто сталкиваются с ситуацией, когда использование предопределенных показателей в формулах дает неожиданный результат. Одной из таких проблем является расчет показателя КоличествоДнейОтпуска в документе Разовое начисление. Вместо ожидаемых нескольких дней, которые сотрудник фактически отгулял, программа подставляет в расчет количество календарных дней всего месяца (например, 31 день для октября).
Давайте вместе разберемся, почему так происходит, как работает этот механизм изнутри и какие способы существуют для решения данной задачи.
Для начала проанализируем, что представляет собой показатель КоличествоДнейОтпуска. Многие начинающие разработчики и расчетчики воспринимают его как некую функцию, которая должна «сходить» в базу данных, найти там документы Отпуск по конкретному сотруднику за указанный период и вернуть сумму дней. Однако в архитектуре 1С:ЗУП 3.1 этот показатель работает иначе.
Показатель КоличествоДнейОтпуска является контекстным. Это означает, что его значение определяется непосредственно из текущего документа, в котором происходит расчет. Когда вы создаете Разовое начисление и указываете в нем период (например, с 1 по 31 октября), система берет этот временной интервал и вычисляет количество календарных дней внутри него, исключая праздничные дни согласно производственному календарю.
Посмотрим на алгоритм расчета, который использует программа:
Результат = ДатаОкончанияПериода - ДатаНачалаПериода + 1 - КоличествоПраздничныхДней
В октябре, как известно, государственных праздников в РФ нет. Поэтому, если в документе Разовое начисление выбран период «Октябрь», система видит интервал с 01.10 по 31.10 и честно возвращает 31 день. Она «не знает», что вы хотите доначислить что-то именно за те 3 дня, когда сотрудник был в отпуске, если эти даты не ограничены в самом документе разового начисления.
Разберем интересную особенность, связанную с праздничными днями. Если мы проведем аналогичный расчет за ноябрь, то при указании полного месяца (с 1 по 30 ноября) показатель КоличествоДнейОтпуска вернет 29 дней. Это происходит потому, что 4 ноября — государственный праздник. Согласно законодательству, праздничные дни не включаются в число календарных дней отпуска и не оплачиваются. Система автоматически вычитает этот день из периода, подтверждая свою «отпускную» логику, но по-прежнему ограничиваясь рамками дат в документе.
Рассмотрим подробнее настройки самого начисления. Чтобы показатель КоличествоДнейОтпуска корректно отрабатывал именно как «отпускной» (т. е. вычитал праздники), программа анализирует вкладку Учет времени в настройках начисления.
Выясним важные нюансы:
КоличествоДнейОтпуска может привести к ошибкам или игнорированию праздничных дней в зависимости от версии релиза.Самый простой и очевидный способ заставить систему увидеть нужные 3 дня — это указать их непосредственно в документе Разовое начисление. Если сотрудник был в отпуске с 10 по 12 октября, вам необходимо в поле «Период» указать именно эти даты.
Проанализируем ситуацию: в этом случае формула КоличествоДнейОтпуска рассчитает интервал между 10 и 12 числом и выдаст искомый результат — 3. Это решение подходит, если начисление разовое и вам не нужно автоматизировать процесс для большого количества сотрудников.
Если вам неудобно менять даты периода (например, потому что начисление должно относиться к месяцу в целом), мы рекомендуем создать собственный показатель. Это даст вам полный контроль над вводимыми данными.
Разберем по шагам, как это сделать:
ДниДляДоплаты.КоличествоДнейОтпуска на ваш новый показатель ДниДляДоплаты.Теперь при создании документа Разовое начисление в табличной части появится колонка, куда вы сможете вручную вписать 3 дня, 5 дней или любую другую цифру, не меняя даты основного периода документа.
Если ваша задача — чтобы программа сама «видела» факт отпуска и делала доплату, разовое начисление может быть не лучшим инструментом. Рассмотрим более автоматизированный подход.
Выясним, как настроить автоматическую доплату:
ВремяВКалендарныхДнях.При такой настройке, как только вы проведете документ Отпуск, программа при расчете зарплаты за месяц увидит количество дней этого отпуска и автоматически рассчитает доплату в документе Начисление зарплаты и взносов.
Проанализируем ситуацию с точки зрения законодательства и учета. Использование показателя КоличествоДнейОтпуска в документах, отличных от стандартного отпуска, может повлиять на расчет среднего заработка в будущем.
Обратите внимание:
Если вы создаете разовое начисление с этим показателем, система может классифицировать эту сумму как «Оплату отпуска». В регистре Данные о времени для расчета среднего (общий) могут появиться записи, которые задублируют время или неверно распределят суммы. Это приведет к тому, что при расчете следующего отпуска средний заработок будет завышен или занижен.
Если ваша цель — просто выплатить премию, привязанную к дням отпуска, лучше использовать пользовательский показатель (Вариант №2), чтобы не вносить путаницу в предопределенные механизмы 1С.
Мы выяснили, что причина ошибки кроется в непонимании контекстной работы показателя. КоличествоДнейОтпуска — это удобный инструмент, но он жестко привязан к датам того документа, где он используется.
Для исправления ситуации мы рекомендуем:
Выбор метода зависит от того, насколько часто вам требуется выполнять подобные расчеты и насколько важна автоматизация процесса в вашей организации.