В процессе вести учет заработной платы на производственных или строительных предприятиях часто возникает специфическая задача: необходимо в текущем расчетном периоде начислить сотруднику премию за произвольный прошлый период. Например, в январе сотруднику Иванову начисляется премия за период с 15 ноября по 10 декабря по результатам сдачи конкретного объекта. При этом расчетная база премии должна собираться строго за фактически отработанное время или начисленные суммы именно в этом произвольном интервале дат.
В этом материале мы детально проанализируем, как ведет себя штатный механизм 1С:ЗУП 3.1 при попытке задать произвольный базовый период, выясним причины ограничений типовой конфигурации и рассмотрим практические способы решения этой задачи.
Рассмотрим, как устроена работа показателя РасчетнаяБаза в типовой конфигурации 1С:Зарплата и Управление Персоналом (редакция 3.1). Обычно для расчета премии создается начисление со следующими параметрами:
Премия).РасчетнаяБаза * ПроцентПремии / 100.В документе Премия предусмотрена возможность переключить переключатель периода работы в положение Задается вручную и ввести произвольные даты начала и окончания (например, с 15.11.2017 по 10.12.2017).
Однако при выполнении расчета вы обнаружите важную особенность типового механизма: 1С:ЗУП 3.1 собирает расчетную базу только за полные календарные месяцы, пересекающие указанный период.
Это означает, что если указать базовый период с 15 ноября по 10 декабря, программа не станет пропорционально делить начисления ноября и декабря по дням. Вместо этого в РасчетнаяБаза попадут полностью начисления за весь ноябрь и весь декабрь. Автоматического выделения базы за 15 дней ноября и 10 дней декабря штатный парсер формул 1С не производит.
Разберем методическую причину, по которой разработчики фирмы «1С» не реализовали автоматическое пропорциональное деление расчетной базы за произвольные интервалы дней:
Поскольку штатный механизм с формулой РасчетнаяБаза не решает задачу с неполными месяцами, разберем проверенные практические способы реализации такого начисления.
Если вам требуется решить задачу без изменения конфигурации и написания кода, наилучшим решением будет вынос расчета базы во внешний отчет или Excel с последующим вводом результата в программу.
Рассмотрим пошагово порядок настройки:
СуммаПремииЗаОбъект.СуммаПремииЗаОбъект.Данные для расчета зарплаты.Для автоматизации расчета базы внутри программы создается внешняя обработка табличных частей, которая подключается к документу Премия через справочник Дополнительные отчеты и обработки.
Алгоритм работы обработки выглядит следующим образом:
Премия, выбирает сотрудников, указывает произвольный период (например, с 15.11.2017 по 10.12.2017) и нажимает кнопку заполнения из внешней обработки.Начисления за указанный интервал дат.Проанализируем пример запроса на языке 1С для сбора базы начислений за произвольный период дат:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Начисления.Сотрудник КАК Сотрудник,
| СУММА(Начисления.Результат) КАК БазаЗаПериод
|ИЗ
| РегистрРасчета.Начисления КАК Начисления
|ГДЕ
| Начисления.ПериодДействияНачало <= &ДатаОкончания
| И Начисления.ПериодДействияКонец >= &ДатаНачала
| И Начисления.Сотрудник В(&МассивСотрудников)
| И Начисления.ВидРасчета В(&БазовыеВидыРасчета)
|СГРУППИРОВАТЬ ПО
| Начисления.Сотрудник";
Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(Объект.ДатаНачалаПериода));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(Объект.ДатаОкончанияПериода));
Запрос.УстановитьПараметр("МассивСотрудников", СотрудникиСписок);
Запрос.УстановитьПараметр("БазовыеВидыРасчета", СписокБазовыхНачислений);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Если требуется рассчитать базу пропорционально отработанным дням, в запрос добавляется соединение с графиком работы сотрудника и фактической таблицей рабочего времени (регистр расчета ГрафикНачислений).
Если необходимо, чтобы расчет производился полностью автоматически при нажатии кнопки Заполнить или Пересчитать непосредственно в форме документа, создается расширение конфигурации.
В расширении переопределяется модуль расчета или добавляются пользовательские функции, которые подменяют значение показателя РасчетнаяБаза для выбранных видов расчета, если период действия премии задан как произвольный диапазон дат.
При использовании премии за произвольный прошлый период важно правильно настроить отображение в отчетности и учет для будущих расчетов среднего заработка (отпускных, командировок):
Премия заполнены реквизиты ПериодОсвобожденияНачало / ПериодОсвобожденияКонец или сформировано понятное наименование вида расчета.Штатный механизм показателя РасчетнаяБаза в 1С:ЗУП 3.1 предназначен для работы с полными календарными месяцами. Если на вашем предприятии премия рассчитывается за произвольные интервалы дат (неполные месяцы), наиболее эффективным техническим решением является разработка внешней обработки заполнения документа Премия либо использование документа Данные для расчета зарплаты.