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