При расчете заработной платы часто возникает ситуация, когда исходные данные (коэффициенты, баллы, объемы выработки или разовые премии) поступают в расчетный отдел из разных подразделений в виде общей сводной таблицы. В таком реестре один и тот же сотрудник может встречаться несколько раз с разными или одинаковыми показателями. При попытке перенести такой список в документ Данные для расчета зарплаты программа выдает ошибку проверки заполнения и не позволяет провести документ с повторяющимися строками.
Разберем причины такого поведения системы и рассмотрим все возможные варианты решения данной проблемы — от штатных настроек программы до вариантов автоматизации.
Выясним техническую причину ограничения. При проведении документа Данные для расчета зарплаты данные записываются в системные регистры сведений (например, ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников или ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников). Измерениями этих регистров выступают период и сотрудник. Если в документе ввести одного сотрудника дважды без детализации по датам, система не сможет определить, какое именно значение показателя является итоговым, и возникнет конфликт дублирования записей.
Поэтому в коде конфигурации в процедуре ОбработкаПроверкиЗаполнения заложен строгий контроль уникальности связки сотрудника и даты действия.
Это основной штатный способ, позволяющий зафиксировать несколько значений по одному сотруднику за расчетный месяц без доработки конфигурации. Проанализируем порядок действий:
Начисление зарплаты и взносов программа автоматически сложит все зарегистрированные значения накапливаемого показателя за месяц.Если требуется зарегистрировать несколько строк по одному сотруднику строго в рамках одного документа, рассмотрим вариант настройки шаблона по дням:
Если показатели не требуют детализации по дням, а бухгалтеру необходимо получить общую сумму по каждому показателю, оптимальным решением является предварительная группировка строк:
Пример программного сворачивания таблицы значений перед заполнением табличной части документа:
// Пример программного сворачивания данных перед помещением в ТЧ документа
ТаблицаДанных.Свернуть("Сотрудник", "Показатель1, Показатель2, Показатель3");
Для Каждого Стр Из ТаблицаДанных Цикл
НоваяСтрока = Объект.ФиксированныеПоказатели.Добавить();
НоваяСтрока.Сотрудник = Стр.Сотрудник;
НоваяСтрока.Показатель1 = Стр.Показатель1;
НоваяСтрока.Показатель2 = Стр.Показатель2;
НоваяСтрока.Показатель3 = Стр.Показатель3;
КонецЦикла;
Если требуется оставить возможность ручного ввода повторяющихся строк прямо в интерфейсе документа, разработаем расширение конфигурации без снятия базы с поддержки:
ПередЗаписью или событие формы ПередЗаписьюНаСервере.Свернуть() для табличной части документа по ключевым полям сотрудника с суммированием числовых колонок перед сохранением и проверкой заполнения.Таким образом, пользователь сможет быстро вставить или набрать список с повторяющимися сотрудниками, а при нажатии кнопки проведения документ автоматически объединит дубли в единую строку.