Как настроить печать расчетных листков напрямую из ведомости на выплату в 1С:ЗУП 3.1?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом Управленческий учет
← На главную

В типовой конфигурации 1С:Зарплата и управление персоналом 3.1 часто возникает производственная необходимость распечатать расчетные листки не по всему подразделению, а только для тех сотрудников, которые включены в конкретную ведомость (например, при выдаче зарплаты через кассу на удаленном объекте). Стандартный отчет «Расчетный листок» предлагает множество отборов, но прямой связи с документом выплаты в пользовательском режиме часто недостаточно для быстрого решения задачи. Рассмотрим, почему это происходит и как реализовать удобный механизм печати.

Анализ технической проблемы: почему не работает отбор по «Регистратору»

Разберем ситуацию, с которой сталкиваются многие пользователи: при попытке настроить стандартный отчет и добавить отбор по полю Регистратор (выбрав конкретную ведомость), отчет выводит только суммы к выплате, оставляя разделы начислений и удержаний пустыми. Выясним причину этого поведения системы.

Данные в расчетном листке собираются из нескольких регистров накопления. Основными являются ВзаиморасчетыССотрудниками, НачисленияУдержанияПоСотрудникам и БухгалтерскиеВзаиморасчетыССотрудниками. Когда мы устанавливаем жесткий фильтр по Регистратору, система ограничивает выборку только теми записями, которые создал именно этот документ. Документ Ведомость в кассу является регистратором только для факта выплаты. Все начисления (оклад, премии, надбавки) регистрируются документами НачислениеЗарплатыИВзносов, Премия или Отпуск. Таким образом, при фильтрации по ведомости отчет «не видит» начислений, так как у них другие регистраторы.

Программное решение задачи через формирование отчета

Для реализации корректной печати нам необходимо пойти другим путем: не фильтровать отчет по самому документу, а передать в отчет список физических лиц, указанных в табличной части ведомости. Проанализируем пример кода, который позволяет инициализировать типовой отчет АнализНачисленийИУдержаний (на базе которого строятся расчетные листки) и программно заполнить его параметры.

Рассмотрим пошагово алгоритм, который можно использовать в обработке или расширении:


// 1. Инициализируем табличный документ для вывода результата
ДокументРезультат = Новый ТабличныйДокумент;
ДокументРезультат.АвтоМасштаб = Истина;
ДокументРезультат.ОтображатьЗаголовки = Ложь;

// 2. Создаем экземпляр типового отчета
ОтчетАнализНачисленийИУдержаний = Отчеты.АнализНачисленийИУдержаний.Создать();
ОтчетАнализНачисленийИУдержаний.ИнициализироватьОтчет();

// 3. Выбираем вариант настроек "Расчетный листок"
НастройкиОтчета = ОтчетАнализНачисленийИУдержаний.СхемаКомпоновкиДанных.ВариантыНастроек.РасчетныйЛисток.Настройки;

// 4. Устанавливаем необходимые параметры данных
НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра("ДетализироватьВыплатыПоВедомостям", Ложь);

// 5. Формируем период отчета на основании месяца ведомости
СтандартныйПериод = Новый СтандартныйПериод;
СтандартныйПериод.ДатаНачала = НачалоМесяца(Объект.ПериодРегистрации);
СтандартныйПериод.ДатаОкончания = КонецМесяца(Объект.ПериодРегистрации);
НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра("Период", СтандартныйПериод);

// 6. Настраиваем отбор по организации и списку сотрудников
Отбор = НастройкиОтчета.Отбор;
Отбор.Элементы.Очистить();

// Добавляем организацию
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "Организация", ВидСравненияКомпоновкиДанных.Равно, Объект.Организация);

// Получаем массив физлиц из табличной части ведомости
СписокФизЛиц = Объект.Состав.ВыгрузитьКолонку("ФизическоеЛицо");
ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(Отбор, "ФизическоеЛицо", ВидСравненияКомпоновкиДанных.ВСписке, СписокФизЛиц);

// 7. Загружаем настройки и компонуем результат
ОтчетАнализНачисленийИУдержаний.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиОтчета);
ОтчетАнализНачисленийИУдержаний.СкомпоноватьРезультат(ДокументРезультат);

// 8. Показываем результат пользователю
ДокументРезультат.Показать("Расчетные листки по ведомости");

Реализация через расширение или внешнюю печатную форму

Наиболее корректным способом внедрения данного функционала является создание внешней печатной формы (ВПФ). Это позволит не снимать конфигурацию с поддержки и предоставит пользователю возможность нажимать кнопку «Печать» прямо в форме ведомости.

Посмотрим, какие дополнительные возможности мы можем реализовать в рамках ВПФ:

  1. Создание специальной «шапки» документа. Перед тем как вызвать метод СкомпоноватьРезультат, мы можем вывести в ТабличныйДокумент собственный макет. В этом макете укажем номер ведомости, дату, общую сумму к выплате и количество человек. Это закроет потребность кассира в сводной информации.
  2. Сортировка. Мы можем программно установить порядок вывода сотрудников в отчете таким образом, чтобы он полностью совпадал с порядком строк в документе ВедомостьВКассу. Это значительно упростит работу кассира при выдаче денег.
  3. Экономия бумаги. В настройках ТабличногоДокумента можно задать параметры печати нескольких страниц на одном листе, что актуально для больших производственных коллективов.

Рекомендации по использованию типовых общих модулей

Важно помнить, что при написании кода не следует копировать огромные куски функций из общих модулей 1С. Система ЗУП 3.1 построена на программном интерфейсе, который позволяет обращаться к функциям формирования отчетов извне. Используйте Отчеты.АнализНачисленийИУдержаний как объект, инициализируйте его и манипулируйте КомпоновщикомНастроек. Это гарантирует, что при обновлении релиза ваш функционал продолжит работать корректно.

Проанализируем еще один нюанс: параметр ВыводитьПоказателиНачислений. Если вашим сотрудникам важно видеть не только итоговые суммы, но и количество отработанных часов или тарифную ставку, обязательно установите этот параметр в значение Истина в программных настройках перед компоновкой.

Заключение

Мы выяснили, что прямая печать расчетных листков из ведомости возможна через небольшую доработку. Главный секрет успеха заключается в правильной передаче списка сотрудников (массива физических лиц) в компоновку данных типового отчета РасчетныйЛисток. Такой подход позволяет сохранить всю полноту данных (начисления, удержания, выплаты, остатки отпусков) и при этом жестко привязать состав отчета к конкретному платежному документу.

← На главную