При ведении кадрового учета и расчета заработной платы в 1С:ЗУП часто возникает необходимость дифференцировать различные виды начислений в зависимости от специфики работы сотрудника или занимаемой им позиции в штатном расписании. Одна из таких распространенных задач – начисление разной вахтовой надбавки для разных категорий сотрудников или должностей. Рассмотрим, как эффективно реализовать этот функционал, если в текущей системе вахтовая надбавка начисляется одинаково для всех сотрудников.
Предположим, что в нашей системе существует начисление "Вахтовая надбавка", которое использует формулу ВремяВДнях * ВахтоваяСтавка. Показатель ВахтоваяСтавка на данный момент является общим для всей организации, и надбавка начисляется только при условии, что для сотрудника введен вид учета времени "Вахта". Нам же требуется, чтобы, например, сварщики в Воркуте получали 120 рублей в день, а бурильщики в другом регионе – другую сумму.
Прежде чем перейти к решению, нам важно проанализировать, как устроена текущая система и какие ограничения существуют:
Показатель ВахтоваяСтавка: В большинстве типовых конфигураций 1С:ЗУП показатели могут быть настроены на уровне организации, подразделения или сотрудника. Если ВахтоваяСтавка настроена как общий показатель для организации, то изменить ее индивидуально для каждого сотрудника или позиции штатного расписания не получится без изменения принципа ее использования.
Формула начисления: Начисление "Вахтовая надбавка" использует простую формулу ВремяВДнях * ВахтоваяСтавка. Это означает, что для изменения суммы надбавки нам нужно варьировать значение ВахтоваяСтавка.
Условие выполнения: Надбавка выполняется только при наличии вида учета времени "Вахта". Это важное условие, которое необходимо сохранить, чтобы надбавка начислялась только тем, кто фактически работал вахтовым методом.
Ограничения штатного расписания: В 1С:ЗУП для позиций штатного расписания можно задавать различные плановые начисления. Однако, как показал опыт, не все виды начислений могут быть непосредственно привязаны к позиции ШР, особенно если они имеют специфические условия выполнения, такие как привязка к виду учета времени "Вахта". Система может расценивать такое начисление как специфическое и не предназначенное для прямого указания в штатном расписании.
Исходя из этих ограничений, нам потребуется подход, который позволит гибко назначать разные ставки, сохраняя при этом общую логику начисления.
Наиболее гибкое и надежное решение для нашей задачи – это изменение принципа использования показателя ВахтоваяСтавка (или создание его аналога) на уровень сотрудника и автоматизированное заполнение его значений. Рассмотрим этот подход по шагам.
Если существующий показатель ВахтоваяСтавка жестко привязан к организации и его тип использования нельзя изменить, мы создадим новый показатель, который будет иметь индивидуальное значение для каждого сотрудника. Если же текущий показатель можно перенастроить, воспользуемся им.
Навигация: Перейдите в раздел Настройка – Показатели расчета зарплаты.
Создание/Настройка показателя: Найдите или создайте новый показатель, например, СтавкаВахтовойНадбавкиПоПозиции.
Тип использования: Убедитесь, что для этого показателя установлено свойство "Используется на" как "Для сотрудника". Это ключевой момент, который позволит нам назначать разные значения этого показателя каждому сотруднику, а следовательно, и для каждой позиции штатного расписания через сотрудника.
Для того чтобы система знала, какая ставка вахтовой надбавки соответствует конкретной позиции штатного расписания, мы добавим специальный дополнительный реквизит.
Навигация: Откройте раздел Администрирование – Общие настройки – Дополнительные реквизиты и сведения.
Объект: В списке объектов найдите и выберите "Позиция штатного расписания".
Создание реквизита: Создайте новый дополнительный реквизит.
Тип значения: Установите "Число".
Наименование: Например, "Ставка вахтовой надбавки (день)".
Идентификатор (для кода): Установите осмысленный идентификатор, например, СтавкаВахтовойНадбавкиПоПозиции. Этот идентификатор будет использоваться нами в программном коде.
Заполнение значений: После создания реквизита, он станет доступен в карточке каждой позиции штатного расписания. Заполните этот реквизит для каждой позиции, где требуется индивидуальная вахтовая надбавка (например, для позиции "Сварщик Воркута" укажите 120, для "Бурильщик" – 150 и т.д.).
Теперь, когда у нас есть индивидуальный показатель и место для хранения ставки, мы должны убедиться, что начисление использует именно новый показатель.
Навигация: Откройте Настройка – Начисления.
Выбор начисления: Найдите и откройте начисление "Вахтовая надбавка".
Изменение формулы: Измените формулу начисления так, чтобы она использовала наш новый, индивидуальный показатель. Если вы создали показатель СтавкаВахтовойНадбавкиПоПозиции, формула будет выглядеть так:
ВремяВДнях * СтавкаВахтовойНадбавкиПоПозиции
Условие выполнения: Убедитесь, что условие выполнения начисления "Только если введен вид учета времени "Вахта"" осталось без изменений. Это гарантирует, что надбавка будет начисляться только при фактическом вахтовом методе работы, а не просто при наличии планового значения показателя.
Самый ответственный шаг – это автоматизация заполнения значения нашего индивидуального показателя для каждого сотрудника. Это можно реализовать с помощью внешней обработки или расширения конфигурации.
Мы разработаем обработку, которая будет периодически (или по событию) обновлять значения показателя СтавкаВахтовойНадбавкиПоПозиции для сотрудников в документе Данные для расчета зарплаты на основании данных из дополнительного реквизита позиции штатного расписания.
Логика работы обработки:
Определение сотрудников: Обработка должна идентифицировать сотрудников, для которых требуется установка или обновление ставки. Это могут быть все сотрудники, работающие на вахте, или только те, у кого произошли кадровые изменения (прием, перевод на другую позицию, изменение ставки в штатном расписании).
Чтение ставки: Для каждого такого сотрудника мы будем получать его текущую позицию штатного расписания и считывать из нее значение нашего дополнительного реквизита "Ставка вахтовой надбавки (день)".
Заполнение документа Данные для расчета зарплаты: На основе полученных данных мы будем формировать строки в табличной части документа Данные для расчета зарплаты. Для каждого сотрудника будет указан показатель СтавкаВахтовойНадбавкиПоПозиции и соответствующее значение из дополнительного реквизита позиции ШР.
Примерный программный код (фрагмент обработки):
// Инициализация
ДатаАктуальности = ТекущаяДата(); // Дата, на которую актуальны данные
ПоказательСтавкаВахтовойНадбавки = ПланыВидовХарактеристик.ПоказателиРасчетаЗарплаты.НайтиПоНаименованию("СтавкаВахтовойНадбавкиПоПозиции");
Если ПоказательСтавкаВахтовойНадбавки = Неопределено Тогда
Сообщить("Показатель 'СтавкаВахтовойНадбавкиПоПозиции' не найден. Проверьте настройки.", СтатусСообщения.Важное);
Возврат;
КонецЕсли;
// Создаем запрос для получения сотрудников и их позиций ШР
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СотрудникиОрганизацийСрезПоследних.Сотрудник КАК Сотрудник,
| СотрудникиОрганизацийСрезПоследних.Должность КАК Должность,
| СотрудникиОрганизацийСрезПоследних.ПозицияШтатногоРасписания КАК ПозицияШтатногоРасписания
|ИЗ
| РегистрСведений.СотрудникиОрганизаций.СрезПоследних(&ДатаАктуальности, ) КАК СотрудникиОрганизацийСрезПоследних
|ГДЕ
| НЕ СотрудникиОрганизацийСрезПоследних.ПозицияШтатногоРасписания ЕСТЬ NULL";
Запрос.УстановитьПараметр("ДатаАктуальности", ДатаАктуальности);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
// Создаем документ "Данные для расчета зарплаты"
ДокДанныеДляРасчетаЗарплаты = Документы.ДанныеДляРасчетаЗарплаты.СоздатьДокумент();
ДокДанныеДляРасчетаЗарплаты.Дата = ДатаАктуальности;
ДокДанныеДляРасчетаЗарплаты.ПредставлениеДокумента = "Установка вахтовых ставок по позициям ШР";
ДокДанныеДляРасчетаЗарплаты.Организация = ПолучитьЗначениеПараметра("ОсновнаяОрганизация"); // Задайте свою организацию
// ДокДанныеДляРасчетаЗарплаты.Комментарий = "Автоматическое заполнение вахтовых ставок";
Для Каждого СтрокаТЧ Из РезультатЗапроса Цикл
Если СтрокаТЧ.ПозицияШтатногоРасписания.Пустая() Тогда
Продолжить;
КонецЕсли;
// Получаем значение дополнительного реквизита "СтавкаВахтовойНадбавкиПоПозиции"
// из объекта "Позиция штатного расписания"
ЗначенияДопРеквизитов = ДополнительныеРеквизитыИСведения.ПолучитьЗначенияДополнительныхРеквизитов(
СтрокаТЧ.ПозицияШтатногоРасписания,
"СтавкаВахтовойНадбавкиПоПозиции" // Идентификатор нашего доп. реквизита
);
Ставка = 0;
Если ЗначенияДопРеквизитов.Свойство("СтавкаВахтовойНадбавкиПоПозиции") Тогда
Ставка = ЗначенияДопРеквизитов.СтавкаВахтовойНадбавкиПоПозиции;
КонецЕсли;
Если Ставка > 0 Тогда
НоваяСтрока = ДокДанныеДляРасчетаЗарплаты.Показатели.Добавить();
НоваяСтрока.Сотрудник = СтрокаТЧ.Сотрудник;
НоваяСтрока.Показатель = ПоказательСтавкаВахтовойНадбавки;
НоваяСтрока.Значение = Ставка;
НоваяСтрока.ПериодДействия = ДатаАктуальности; // Или иной период действия, если требуется
КонецЕсли;
КонецЦикла;
Если ДокДанныеДляРасчетаЗарплаты.Показатели.Количество() > 0 Тогда
Попытка
ДокДанныеДляРасчетаЗарплаты.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Документ 'Данные для расчета зарплаты' успешно сформирован и проведен.", СтатусСообщения.Информация);
Исключение
Сообщить("Ошибка при записи/проведении документа: " + ОписаниеОшибки(), СтатусСообщения.Ошибка);
КонецПопытки;
Иначе
Сообщить("Нет данных для заполнения документа 'Данные для расчета зарплаты'.", СтатусСообщения.Информация);
КонецЕсли;
Автоматизация выполнения: Эту обработку можно выполнять вручную перед каждым расчетом зарплаты. Однако для повышения удобства и минимизации ручных операций мы рекомендуем настроить ее запуск по регламентному заданию. Это позволит автоматически обновлять ставки, например, в начале каждого месяца или при наступлении определенных кадровых событий, если реализовать триггерный механизм.
Рассмотрим и другие идеи, которые могут прийти в голову, но которые, как правило, имеют свои недостатки в данном сценарии.
Несколько видов начислений:
Идея: Создать несколько отдельных начислений, например, "Вахтовая надбавка (сварщик)" с фиксированной ставкой 120 руб., "Вахтовая надбавка (бурильщик)" с фиксированной ставкой 150 руб., и так далее. Затем назначать эти конкретные начисления соответствующим позициям штатного расписания или сотрудникам.
Ограничения:
Громоздкость: При большом количестве разных ставок и должностей это приведет к огромному количеству видов начислений, что усложнит администрирование и поддержку системы.
Условие выполнения: Если каждое из этих начислений будет иметь условие "Только если введен вид учета времени "Вахта"", то прямое назначение в позицию штатного расписания может быть по-прежнему затруднено или некорректно. Скорее всего, их все равно придется назначать как плановые начисления сотруднику, что требует дополнительного контроля.
Масштабирование: При изменении ставки для какой-либо категории придется менять само начисление или создавать новое, а также переназначать его сотрудникам, что менее гибко, чем изменение значения одного показателя.
Ручное назначение ставки в кадровых документах:
Идея: При приеме на работу или кадровом переводе вручную указывать индивидуальное значение ставки для каждого сотрудника в его плановых начислениях.
Ограничения:
Трудоемкость: Этот метод чрезвычайно трудоемок и подвержен человеческим ошибкам, особенно в организациях с большим штатом и высокой текучестью кадров.
Неактуальность: При изменении ставки по должности придется вручную находить всех сотрудников на этой должности и корректировать их плановые начисления, что очень сложно контролировать.
Для эффективного и масштабируемого решения задачи по начислению разной вахтовой надбавки для различных позиций штатного расписания в 1С:ЗУП, мы рекомендуем следующий подход:
Переход на индивидуальный показатель: Измените тип использования показателя ВахтоваяСтавка на "Для сотрудника" или создайте новый аналогичный показатель с таким типом.
Использование дополнительного реквизита: Храните требуемую ставку вахтовой надбавки в дополнительном числовом реквизите объекта "Позиция штатного расписания".
Автоматизация заполнения: Разработайте внешнюю обработку (или расширение), которая будет автоматически считывать значения из дополнительного реквизита позиций штатного расписания и заполнять документ Данные для расчета зарплаты значениями индивидуального показателя для сотрудников. Рассмотрите возможность настройки регламентного задания для автоматического выполнения этой обработки.
Сохранение условий начисления: Убедитесь, что в начислении "Вахтовая надбавка" сохранено условие выполнения "Только если введен вид учета времени "Вахта"".
Этот подход обеспечивает гибкость в управлении ставками, минимизирует ручной труд, снижает риск ошибок и позволяет легко адаптироваться к изменениям в условиях оплаты труда, при этом сохраняя логику начисления, привязанную к фактическому режиму работы.