В практике расчета заработной платы в бюджетных учреждениях (ЗКГУ) и коммерческих организациях (ЗУП) часто возникает ситуация, когда средний заработок сотрудника оказывается ниже установленного минимального размера оплаты труда (МРОТ). Согласно Постановлению №922 (пункт 18), среднемесячный заработок работника, полностью отработавшего норму времени, не может быть ниже МРОТ. Несмотря на наличие механизмов проверки в типовых конфигурациях, бухгалтерам часто требуется выделять такую доплату отдельной строкой для удобства проверок контролирующими органами (ГИТ, прокуратура). Рассмотрим подробно, как автоматизировать этот процесс с помощью внешней обработки заполнения.
Прежде чем переходить к коду, разберем, что именно мы будем рассчитывать. Если фактический средний дневной заработок сотрудника меньше, чем МРОТ, деленный на 29.3 (среднемесячное число календарных дней), то расчет отпуска должен быть скорректирован. Проверяющие органы настаивают на том, чтобы основное начисление Оплата отпуска оставалось неизменным (рассчитанным по фактическим данным), а разница до минимума оформлялась как Доплата до МРОТ. Это позволяет прозрачно продемонстрировать соблюдение трудового законодательства.
Для того чтобы в документе Отпуск появилась заветная кнопка или команда в меню «Заполнить», нам необходимо использовать механизм Библиотеки стандартных подсистем (БСП). Разберем структуру модуля объекта внешней обработки.
Сначала опишем функцию СведенияОВнешнейОбработке, чтобы система распознала нашу разработку как обработку заполнения объекта:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
ПараметрыРегистрации.Наименование = "Рассчитать доплату до МРОТ (Отпуск)";
ПараметрыРегистрации.Информация = "Добавляет строку доплаты до МРОТ в таблицу начислений документа Отпуск";
ПараметрыРегистрации.Версия = "1.0";
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Рассчитать доплату до МРОТ";
НоваяКоманда.Идентификатор = "РасчетМРОТ";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыЗаполнениеФормы();
НоваяКоманда.ПоказыватьОповещение = Истина;
Возврат ПараметрыРегистрации;
КонецФункции
Обратите внимание на использование типа команды ЗаполнениеФормы. Это позволяет обработке напрямую взаимодействовать с открытой формой документа и изменять данные «на лету» без предварительной записи объекта.
Теперь проанализируем, как «достучаться» до данных. Основная работа будет происходить в процедуре ВыполнитьКоманду. Нам нужно получить данные о среднем заработке, количестве дней отпуска и текущем значении МРОТ.
Рассмотрим алгоритм действий программного кода:
МРОТ / 29.3.СреднийЗаработок из документа.Начисления.Посмотрим на пример реализации серверной части обработки:
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения) Экспорт
// Получаем форму и объект документа из параметров БСП
ЭтаФорма = ПараметрыВыполнения.ЭтаФорма;
ОбъектДок = ЭтаФорма.Объект;
МРОТ_Значение = 19242; // Пример значения на 2024 год, лучше получать запросом из регистра
МинимальныйСредний = МРОТ_Значение / 29.3;
// В документе Отпуск средний заработок хранится в реквизите
ФактическийСредний = ОбъектДок.СреднийЗаработок;
Если ФактическийСредний < МинимальныйСредний Тогда
Разница = МинимальныйСредний - ФактическийСредний;
ДнейОтпуска = ОбъектДок.Начисления.Итог("ОплаченоДней"); // Или расчет по периоду
СуммаДоплаты = Разница * ДнейОтпуска;
// Добавляем строку в табличную часть "Начисления"
НоваяСтрока = ОбъектДок.Начисления.Добавить();
НоваяСтрока.Начисление = ПоискНачисленияДоплаты(); // Функция поиска вида расчета в справочнике
НоваяСтрока.ДатаНачала = ОбъектДок.ДатаНачала;
НоваяСтрока.ДатаОкончания = ОбъектДок.ДатаОкончания;
НоваяСтрока.Результат = СуммаДоплаты;
// Важно: уведомляем форму об изменениях
ЭтаФорма.Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
Выясним причину, по которой простого добавления строки может быть недостаточно. В 1С:ЗКГУ 3.1 таблица начислений тесно связана с расчетом НДФЛ и взносов. Чтобы ваша доплата корректно отразилась в отчетности, проанализируем следующие моменты:
Начисления новый элемент «Доплата до МРОТ (отпуск)». Настройте его так, чтобы он облагался НДФЛ (код дохода 2000 или 2012) и страховыми взносами.КоличествоСтавок. Если сотрудник работает на 0.5 ставки, минимальный порог МРОТ для него также уменьшается пропорционально.Рассмотрим подробнее, как сделать работу бухгалтера еще удобнее. Вместо жесткого прописывания МРОТ в коде, используйте запрос к регистру сведений МинимальнаяОплатаТрудаРФ. Это позволит обработке оставаться актуальной при каждом законодательном повышении минимума без вмешательства программиста.
Также полезно добавить в обработку проверку на уже существующую строку доплаты, чтобы при повторном нажатии кнопки «Рассчитать доплату» строки не дублировались, а обновлялись.
Резюмируем: Использование внешних обработок заполнения — это наиболее «чистый» способ кастомизации программы, не снимающий ее с поддержки. Мы создали инструмент, который получает доступ к коллекции Объект.Начисления, выполняет математическое сравнение фактических данных с нормативными и автоматизирует рутинный труд бухгалтера, минимизируя риск штрафных санкций со стороны ГИТ.