При автоматизации кадровых и расчетных процессов часто возникает задача программного расчета зарплаты, налогов и взносов для конкретного сотрудника. Особенно актуально это для сотрудников, принятых на работу не с начала месяца. Стандартные механизмы расчета в 1С:ЗУП 3.1 могут казаться сложными для вызова из кода, но на самом деле платформа предоставляет удобные инструменты для разработки под эти цели — для этого подойдёт проверка корректности расчетов в ЗУП 3. Рассмотрим, как правильно инициировать расчет НДФЛ и страховых взносов для сотрудника, используя встроенные функции конфигурации.
Проанализируем ситуацию: нам необходимо для нового сотрудника, который был принят на работу в середине месяца, выполнить расчет НДФЛ и страховых взносов за этот первый, неполный месяц работы. Основная сложность заключается в том, чтобы корректно передать все необходимые параметры в расчетные механизмы и получить точные суммы налогов и взносов.
Для решения этой задачи воспользуемся экспортной процедурой РассчитатьЗарплатуРаботниковОрганизации из общего модуля ЗарплатаКадры. Эта процедура является универсальным инструментом для расчета различных начислений и удержаний. Ее преимущество в том, что она инкапсулирует сложную логику, включая учет даты приема, отработанного времени и других факторов.
Рассмотрим по шагам, как подготовить данные и вызвать эту процедуру.
Определяем ключевые параметры. Нам понадобятся:
Организация: Ссылка на организацию, в которой числится сотрудник.Сотрудник: Ссылка на элемент справочника "Сотрудники".МесяцНачисления: Дата, соответствующая месяцу, за который производится расчет (например, '2016-01-01' для января 2016 года).Формируем массив сотрудников. Процедура расчета принимает на вход массив сотрудников, даже если мы рассчитываем зарплату только для одного. Поэтому создадим массив и добавим в него нашего сотрудника.
Создаем структуру параметров. Основные настройки расчета передаются через структуру. В нашем случае нужно указать, что именно мы хотим рассчитать. Для этого в свойство Рассчитывать структуры мы поместим массив, содержащий строки "НДФЛ" и "СтраховыеВзносы".
Теперь посмотрим на готовый код, который реализует эти шаги.
Процедура РассчитатьНДФЛВзносыНовогоСотрудника()
// 1. Указываем исходные данные
Организация = Справочники.Организации.НайтиПоКоду("000000001"); // Замените на свой способ поиска
Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию("Иванов Иван Иванович"); // Замените на своего сотрудника
МесяцНачисления = Дата(2016, 1, 1);
// 2. Создаем массив сотрудников для расчета
МассивРаботников = Новый Массив;
МассивРаботников.Добавить(Сотрудник);
// 3. Создаем и заполняем структуру дополнительных свойств для передачи в процедуру расчета
ДополнительныеСвойства = Новый Структура;
ЧтоРассчитывать = Новый Массив;
ЧтоРассчитывать.Добавить("НДФЛ");
ЧтоРассчитывать.Добавить("СтраховыеВзносы");
ДополнительныеСвойства.Вставить("Рассчитывать", ЧтоРассчитывать);
// 4. Вызываем процедуру расчета из общего модуля
ЗарплатаКадры.РассчитатьЗарплатуРаботниковОрганизации(
Организация,
МесяцНачисления,
МассивРаботников,
ДополнительныеСвойства
);
Сообщить("Расчет НДФЛ и страховых взносов для сотрудника " + Сотрудник + " выполнен.");
КонецПроцедуры
Что именно происходит "под капотом", когда мы вызываем ЗарплатаКадры.РассчитатьЗарплатуРаботниковОрганизации? Давайте разберем логику.
Эта процедура является оберткой для более сложных внутренних механизмов. Она автоматически выполняет следующие действия:
НДФЛРасчетыСБюджетом, ИсчисленныеСтраховыеВзносы и другие), откуда они потом попадут в отчетность и расчетные листки.После выполнения приведенного выше кода вы не увидите на экране какого-либо документа. Расчет происходит в фоновом режиме, а результаты сохраняются напрямую в регистрах. Чтобы проверить корректность расчета, вы можете сформировать стандартные отчеты, например:
Таким образом, использование общего модуля ЗарплатаКадры является наиболее правильным и надежным способом программного выполнения расчетов в ЗУП 3.1. Это позволяет избежать дублирования типового кода, гарантирует использование актуальных алгоритмов расчета, заложенных в конфигурацию, и обеспечивает корректную запись результатов в информационную базу.