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

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

В процессе работы с конфигурацией 1С:Зарплата и управление персоналом 3.1 (ЗУП) пользователи и разработчики часто сталкиваются с необходимостью кастомизации печатных форм. Один из наиболее частых запросов — вывод показателей начислений и удержаний (например, тарифных ставок, отработанных часов или процентов надбавок) прямо в расчетном листке, который формируется из документа Начисление зарплаты и взносов.

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

Почему стандартные настройки отчета игнорируются при печати из документа

Для начала проанализируем поведение системы. Когда мы переходим в раздел Зарплата — Отчеты по зарплате — Расчетный листок (или Анализ начислений и удержаний), программа открывает полноценный отчет. В нем мы можем нажать кнопку «Настройки», включить флаг «Выводить показатели начислений (удержаний)», и отчет послушно выведет все необходимые формулы и тарифные ставки. Эти настройки сохраняются в пользовательском профиле информационной базы.

Совсем иная картина наблюдается, когда бухгалтер открывает документ Начисление зарплаты и взносов и нажимает на кнопку печатных форм «Расчетный листок». В этот момент система не открывает форму отчета для интерактивного взаимодействия. Вместо этого происходит программная генерация табличного документа на сервере.

Проанализируем цепочку вызовов в программном коде. При нажатии на кнопку печати управление передается в общий модуль УчетНачисленнойЗарплаты, а именно в функцию РасчетныйЛистокПоДаннымДокумента. Внутри этой функции происходит следующее:

  1. Программно создается экземпляр отчета АнализНачисленийИУдержаний с помощью вызова метода менеджера.
  2. Система инициализирует компоновщик настроек отчета.
  3. Вместо пользовательских настроек программа принудительно загружает предопределенный вариант настроек с именем РасчетныйЛисток, заложенный разработчиками фирмы 1С на уровне схемы компоновки данных (СКД).
  4. Устанавливаются жесткие отборы по организации, периоду и списку сотрудников из текущего документа начисления.
  5. Выполняется компоновка макета и вывод данных в результирующий табличный документ.

Поскольку загружается именно жестко заданный вариант настроек из макета ОсновнаяСхемаКомпоновкиДанных, любые изменения, сделанные пользователем в режиме 1С:Предприятие, просто отбрасываются. Чтобы решить эту задачу, нам придется внести изменения на уровне конфигурации.

Шаг 1. Изменение схемы компоновки данных (СКД) в Конфигураторе

Рассмотрим, как правильно настроить параметры вывода показателей начислений непосредственно в схеме компоновки. Для этого нам понадобятся права разработчика и доступ к конфигуратору базы данных.

Выполним следующие шаги по настройке схемы:

  1. Откроем информационную базу в режиме Конфигуратор.
  2. В дереве метаданных найдем отчет АнализНачисленийИУдержаний.
  3. Откроем основную схему компоновки данных (двойным кликом по свойству ОсновнаяСхемаКомпоновкиДанных).
  4. В открывшемся конструкторе СКД обратим внимание на вкладки. Нам часто хочется сразу перейти на вкладку «Параметры» и изменить значение параметра ВыводитьПоказателиНачисленийИУдержаний там. Внимание: это распространенная ошибка! Изменение значения на вкладке «Параметры» задает лишь глобальное значение по умолчанию для всей схемы, которое может переопределяться в конкретных вариантах отчетов.
  5. Перейдем на самую правую вкладку конструктора — «Настройки».
  6. В левом верхнем окне «Варианты настроек» выберем конкретный вариант с именем РасчетныйЛисток. Именно этот вариант программно вызывается из документа начисления.
  7. В нижней части окна перейдем на вкладку «Параметры» (которая находится внутри вкладки «Настройки» и относится к выбранному варианту).
  8. Найдем в списке параметр ВыводитьПоказателиНачисленийИУдержаний (или аналогичный параметр, отвечающий за показатели).
  9. Установим для него флаг использования и зададим значение Истина (флаг включен).
  10. Сохраним конфигурацию базы данных.

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

Шаг 2. Разгадка кэширования макетов СКД и очистка регистра сведений

В современных конфигурациях на платформе 1С:Предприятие 8.3, построенных на базе Библиотеки Стандартных Подсистем (БСП), реализован сложный механизм оптимизации производительности при работе с отчетами. Компиляция схемы компоновки данных и генерация макета компоновки — ресурсоемкие операции. Чтобы не выполнять их при каждом формировании отчета, система кэширует готовые макеты.

Для хранения кэшированных макетов используется специальный служебный регистр сведений — МакетыКомпоновкиДанных.

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

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

  1. Запустим программу в режиме 1С:Предприятие под пользователем с полными (административными) правами.
  2. Откроем главное меню (в правом верхнем углу окна программы) и выберем пункт «Функции для технического специалиста» (в старых релизах этот пункт назывался «Все функции»). Если этот пункт недоступен, его необходимо включить в настройках параметров системы (Сервис — Параметры — Отображать команду "Функции для технического специалиста").
  3. В открывшемся окне найдем раздел Регистры сведений и выберем регистр сведений «Макеты компоновки данных».
  4. В списке записей регистра найдем строку, которая относится к отчету АнализНачисленийИУдержаний (в колонке «Ключ макета» или «Имя объекта» будет указано имя отчета и вариант настройки РасчетныйЛисток).
  5. Выделим эту строку и удалим ее из регистра (нажав клавишу Del или выбрав команду «Удалить» в меню «Еще»).

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

Альтернативный и безопасный метод: Использование расширений конфигурации

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

Рассмотрим, как реализовать эту задачу через расширение:

  1. Откроем Конфигуратор и перейдем в меню Конфигурация — Расширения конфигурации.
  2. Создадим новое расширение (например, с именем ДоработкаРасчетногоЛистка), оставив назначение «Адаптация».
  3. В дереве метаданных основной конфигурации найдем отчет АнализНачисленийИУдержаний, кликнем по нему правой кнопкой мыши и выберем команду «Добавить в расширение».
  4. Перейдем в дерево метаданных нашего расширения, откроем заимствованный отчет и перейдем в его схему компоновки данных.
  5. Проделаем аналогичные настройки: на вкладке «Настройки» для варианта РасчетныйЛисток установим параметр ВыводитьПоказателиНачисленийИУдержаний в значение Истина.
  6. После сохранения расширения и обновления конфигурации базы данных обязательно выполним процедуру очистки регистра сведений МакетыКомпоновкиДанных, как было описано выше.

Использование расширения гарантирует, что при обновлении типовой конфигурации ваши персональные настройки вывода показателей расчетного листка останутся в целости и сохранности.

Программное управление параметрами через общий модуль

Для разработчиков, которые хотят полностью контролировать процесс вывода без изменения схем компоновки данных (или хотят реализовать сложную логику, зависящую от условий), существует вариант программного вмешательства.

Посмотрим на пример кода, который вызывается при компоновке макета. В модуле менеджера отчета АнализНачисленийИУдержаний присутствует процедура, инициализирующая параметры перед выводом. Мы можем перехватить этот момент с помощью подписки на событие или через механизм &После в расширении общего модуля ЗарплатаКадрыОтчеты.

Пример изменения параметров компоновки «на лету» перед формированием табличного документа:


// Пример программной установки параметра в расширении общего модуля
&После("УчетНачисленнойЗарплаты.РасчетныйЛистокПоДаннымДокумента")
Процедура ИнициализироватьНастройкиРасчетногоЛистка(ПараметрыПечати, НастройкиОтчета)
    
    // Получаем доступ к параметрам данных компоновщика настроек
    ПараметрыДанных = НастройкиОтчета.ПараметрыДанных;
    
    // Находим нужный нам параметр по имени
    ПараметрПоказатели = ПараметрыДанных.Элементы.Найти("ВыводитьПоказателиНачисленийИУдержаний");
    
    Если ПараметрПоказатели <> Неопределено Тогда
        ПараметрПоказатели.Значение = Истина;
        ПараметрПоказатели.Использование = Истина;
    КонецЕсли;
    
КонецПроцедуры

Такой подход требует навыков программирования на встроенном языке 1С, но он предоставляет максимальную гибкость: вы можете выводить показатели только для определенных подразделений, конкретных видов начислений или ограничивать видимость показателей в зависимости от прав текущего пользователя.

Резюмируя все вышесказанное: для изменения настроек расчетного листка из документа начисления необходимо не только правильно изменить параметры внутри структуры варианта СКД в конфигураторе (или расширении), но и не забыть очистить служебный регистр кэша макетов. Понимание этих механизмов позволит вам легко настраивать любые типовые печатные формы, основанные на системе компоновки данных.

← На главную