При настройке сложных видов начислений в программах 1С часто возникает необходимость использовать показатели отработанного времени или тарифные ставки не за текущий расчётный месяц, а за произвольный период — например, за прошлый месяц или за квартал. Разберёмся, с какими техническими ограничениями можно столкнуться при решении этой задачи в 1С:ЗУП 3.1 и какие обходные пути существуют без вмешательства в исходный код конфигурации.
Проанализируем работу стандартного механизма расчёта начислений. В 1С:ЗУП 3.1 встроенные показатели времени, такие как ВремяВДнях, ВремяВЧасах, НормаДней, НормаЧасов, а также показатели пересчёта тарифной ставки СтоимостьЧаса и СтоимостьДня, строго привязаны к текущему периоду регистрации документа (месяцу начисления).
Вычислитель формул 1С не поддерживает передачи параметров или смещения периодов. В программе нельзя написать условие вида ВремяВДнях(ПрошлыйМесяц) или СтоимостьЧаса(Квартал). Механизм РасчетнаяБаза позволяет собирать только денежные результаты начислений за прошлые периоды, но не считывает напрямик отработанные дни или часы.
Тем не менее, решить задачу расчёта сумм за произвольные периоды можно с помощью штатных настроек и внешних инструментов.
Рассмотрим наиболее гибкий и удобный вариант, не требующий изменения конфигурации. Он заключается в переносе расчёта показателей за произвольный период во вспомогательные пользовательские показатели.
ОтработаноДнейЗаПрошлыйПериод или СтоимостьЧасаПрошлогоМесяца).Показатель * ОтработаноДнейЗаПрошлыйПериод / НормаДнейПрошлогоПериода
Заполнение значений в документе ввода данных можно автоматизировать. Для этого используется стандартный механизм внешних обработок (подключаемых через раздел администрирования как дополнительные обработки заполнения документов) либо выгрузка и загрузка данных из табличных файлов Excel.
Посмотрим на ещё один метод, позволяющий получить долю отработанного времени за предыдущий период (например, за квартал) средствами настроек вида расчёта.
ВремяВДнях / НормаДней
РасчетнаяБаза.Обратите внимание: данный метод накапливает данные постепенно начиная с момента запуска служебного начисления, поэтому для прошлых периодов до его внедрения потребуются доначисления или перерасчёты.
Если в формуле требуется задействовать показатель СтоимостьЧаса, а у сотрудника менялся оклад или норма времени, штатный показатель рассчитывается строго на текущую дату расчёта.
Если для целей расчёта допустимо использовать одинаковую стоимость часа в течение всего года, в настройках программы пересчёт тарифной ставки сотрудника можно перевести на алгоритм исходя из среднемесячного количества часов в году. В таком случае показатель СтоимостьЧаса будет оставаться неизменным весь календарный год.
Если же требуется учесть именно фактическую стоимость часа за конкретный прошлый месяц при изменяемой ставке, значение необходимо фиксировать в отдельном пользовательском показателе через документ Данные для расчета зарплаты или использовать расширение конфигурации для переопределения расчёта через модули менеджеров МенеджерРасчетаЗарплаты и МенеджерДанныхУчетаВремениСотрудников.