Как в 1С:ЗУП 3.1 начислить премию за произвольный период и собрать расчетную базу за произвольные даты?

Бухгалтер 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

В процессе вести учет заработной платы на производственных или строительных предприятиях часто возникает специфическая задача: необходимо в текущем расчетном периоде начислить сотруднику премию за произвольный прошлый период. Например, в январе сотруднику Иванову начисляется премия за период с 15 ноября по 10 декабря по результатам сдачи конкретного объекта. При этом расчетная база премии должна собираться строго за фактически отработанное время или начисленные суммы именно в этом произвольном интервале дат.

В этом материале мы детально проанализируем, как ведет себя штатный механизм 1С:ЗУП 3.1 при попытке задать произвольный базовый период, выясним причины ограничений типовой конфигурации и рассмотрим практические способы решения этой задачи.

Анализ штатного поведения показателя «РасчетнаяБаза»

Рассмотрим, как устроена работа показателя РасчетнаяБаза в типовой конфигурации 1С:Зарплата и Управление Персоналом (редакция 3.1). Обычно для расчета премии создается начисление со следующими параметрами:

  1. Назначение начисления: Премия.
  2. Начисление выполняется: По отдельному документу (документ Премия).
  3. Формула расчета: РасчетнаяБаза * ПроцентПремии / 100.
  4. На вкладке Расчет базы указываются входящие виды расчета (Оклад, Сдельный заработок, Надбавки и т.д.) и задается базовый период.

В документе Премия предусмотрена возможность переключить переключатель периода работы в положение Задается вручную и ввести произвольные даты начала и окончания (например, с 15.11.2017 по 10.12.2017).

Однако при выполнении расчета вы обнаружите важную особенность типового механизма: 1С:ЗУП 3.1 собирает расчетную базу только за полные календарные месяцы, пересекающие указанный период.

Это означает, что если указать базовый период с 15 ноября по 10 декабря, программа не станет пропорционально делить начисления ноября и декабря по дням. Вместо этого в РасчетнаяБаза попадут полностью начисления за весь ноябрь и весь декабрь. Автоматического выделения базы за 15 дней ноября и 10 дней декабря штатный парсер формул 1С не производит.

Почему в типовой конфигурации установлено такое ограничение?

Разберем методическую причину, по которой разработчики фирмы «1С» не реализовали автоматическое пропорциональное деление расчетной базы за произвольные интервалы дней:

  1. Учетный период — календарный месяц: В российской системе учета базовым единичным периодом расчета заработной платы и налогов является календарный месяц. Все регистры расчета хранят результаты с привязкой к месяцу начисления и периоду действия в рамках месяца.
  2. Сложность учета отклонений: Если внутри месяца у сотрудника были больничные, отпуска или разовые начисления (например, фиксированная надбавка), математически корректно «отцепить» кусочек базы с 1 по 14 число без искажения общего расчета среднего заработка технически затруднительно.
  3. Требования Постановления № 922: Учет премий в среднем заработке регламентируется строгими правилами. Премии за неполные периоды требуют особого порядка учета при последующих расчетах отпускных и командировок.

Варианты решения задачи на практике

Поскольку штатный механизм с формулой РасчетнаяБаза не решает задачу с неполными месяцами, разберем проверенные практические способы реализации такого начисления.

Способ 1. Ввод готовых сумм через «Данные для расчета зарплаты» (Без доработки конфигурации)

Если вам требуется решить задачу без изменения конфигурации и написания кода, наилучшим решением будет вынос расчета базы во внешний отчет или Excel с последующим вводом результата в программу.

Рассмотрим пошагово порядок настройки:

  1. Перейдем в раздел Настройка — Показатели расчета зарплаты и создадим новый показатель:
    • Имя: СуммаПремииЗаОбъект.
    • Назначение: Для сотрудника.
    • Тип показателя: Денежный.
    • Используется: Вводится разово документом ввода данных для расчета зарплаты.
  2. В настройках начисления «Премия за объект» укажем формулу, состоящую только из этого показателя: СуммаПремииЗаОбъект.
  3. В разделе Настройка — Шаблоны документов ввода данных для расчета зарплаты создадим шаблон для ввода этого показателя.
  4. Расчет суммы премии (база за период 15.11–10.12, умноженная на процент) экономисты или бухгалтеры выполняют на основе данных об отработанных днях на объекте, а итоговые суммы вносят через документ Данные для расчета зарплаты.

Способ 2. Разработка внешней обработки заполнения документа «Премия»

Для автоматизации расчета базы внутри программы создается внешняя обработка табличных частей, которая подключается к документу Премия через справочник Дополнительные отчеты и обработки.

Алгоритм работы обработки выглядит следующим образом:

  1. Пользователь открывает документ Премия, выбирает сотрудников, указывает произвольный период (например, с 15.11.2017 по 10.12.2017) и нажимает кнопку заполнения из внешней обработки.
  2. Обработка делает запрос к регистру расчета Начисления за указанный интервал дат.
  3. Для каждого сотрудника рассчитывается точная сумма начислений, входящих в базу, с учетом фактически отработанных дней внутри этого интервала.
  4. Полученная сумма умножается на процент и подставляется в документ в качестве итогового результата или показателя.

Проанализируем пример запроса на языке 1С для сбора базы начислений за произвольный период дат:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Начисления.Сотрудник КАК Сотрудник,
    |	СУММА(Начисления.Результат) КАК БазаЗаПериод
    |ИЗ
    |	РегистрРасчета.Начисления КАК Начисления
    |ГДЕ
    |	Начисления.ПериодДействияНачало <= &ДатаОкончания
    |	И Начисления.ПериодДействияКонец >= &ДатаНачала
    |	И Начисления.Сотрудник В(&МассивСотрудников)
    |	И Начисления.ВидРасчета В(&БазовыеВидыРасчета)
    |СГРУППИРОВАТЬ ПО
    |	Начисления.Сотрудник";

Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(Объект.ДатаНачалаПериода));
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(Объект.ДатаОкончанияПериода));
Запрос.УстановитьПараметр("МассивСотрудников", СотрудникиСписок);
Запрос.УстановитьПараметр("БазовыеВидыРасчета", СписокБазовыхНачислений);

РезультатЗапроса = Запрос.Выполнить().Выгрузить();

Если требуется рассчитать базу пропорционально отработанным дням, в запрос добавляется соединение с графиком работы сотрудника и фактической таблицей рабочего времени (регистр расчета ГрафикНачислений).

Способ 3. Использование расширения конфигурации

Если необходимо, чтобы расчет производился полностью автоматически при нажатии кнопки Заполнить или Пересчитать непосредственно в форме документа, создается расширение конфигурации.

В расширении переопределяется модуль расчета или добавляются пользовательские функции, которые подменяют значение показателя РасчетнаяБаза для выбранных видов расчета, если период действия премии задан как произвольный диапазон дат.

Отражение в расчетном листке и учет в среднем заработке

При использовании премии за произвольный прошлый период важно правильно настроить отображение в отчетности и учет для будущих расчетов среднего заработка (отпускных, командировок):

Подведем итоги

Штатный механизм показателя РасчетнаяБаза в 1С:ЗУП 3.1 предназначен для работы с полными календарными месяцами. Если на вашем предприятии премия рассчитывается за произвольные интервалы дат (неполные месяцы), наиболее эффективным техническим решением является разработка внешней обработки заполнения документа Премия либо использование документа Данные для расчета зарплаты.

← На главную