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

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

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

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

Часть 1. Как правильно сосчитать сотрудников в подразделении с помощью СКД

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

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

Количество(Различные Сотрудник)

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

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

Часть 2. Способы динамического изменения заголовков колонок

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

Способ 1. Использование «Выражения представления» в наборе данных

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

Строка(ВидРасчета) + " В/К"

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

Способ 2. Настройка условного оформления

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

  1. Перейдем на вкладку «Настройки», выберем вкладку «Условное оформление».
  2. Добавим новый элемент оформления. В поле «Оформление» найдем параметр «Текст» и укажем наше статическое значение, например, Вид расчета В/К.
  3. Вкладку «Условие» оставляем пустой (если оформление должно применяться всегда) или задаем отбор.
  4. В списке «Оформляемые поля» выберем наше поле ВидРасчета.
  5. В свойствах элемента условного оформления укажем область применения — «В заголовке поля».

Также в параметре «Текст» условного оформления можно использовать шаблоны с квадратными скобками для динамической подстановки данных: [ВидРасчета] В/К. В этом случае система автоматически подставит значение поля внутрь текстового шаблона.

Способ 3. Программная замена заголовков в модуле отчета

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

Рассмотрим пример кода, реализующий эту логику:


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

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

Способ 4. Создание индивидуального макета оформления

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

Часть 3. Почему внешние отчеты «залипают» при отладке и как с этим бороться

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

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

Проанализируем основные способы борьбы с кэшированием внешних отчетов при отладке:

  1. Обновление отчета в дополнительных отчетах и обработках. Если ваш внешний отчет уже зарегистрирован в базе данных через справочник Дополнительные отчеты и обработки, то простое открытие файла через «Файл — Открыть» работать не будет. Вам необходимо зайти в карточку этого дополнительного отчета, нажать кнопку «Загрузить из файла», выбрать вашу обновленную версию и нажать «Записать и закрыть». Только после этого изменения вступят в силу для всех пользователей.
  2. Сброс настроек к стандартным. Если вы отлаживаете отчет напрямую, без регистрации в дополнительных обработках, но изменения все равно не применяются, в режиме Предприятия откройте ваш отчет и нажмите на кнопку Еще — Установить стандартные настройки. Этот шаг принудительно заставит систему очистить пользовательский кэш вариантов отчета и считать актуальную схему компоновки данных из физического файла на диске.
  3. Изменение имени объекта в Конфигураторе. Чтобы система гарантированно восприняла отчет как новый и не пыталась применить к нему старые кэшированные настройки, перед очередным запуском измените имя отчета в свойствах метаданных в конфигураторе (например, переименуйте АнализЗарплаты в АнализЗарплаты_Отладка1). Для БСП это будет абсолютно новый уникальный отчет, и его схема загрузится с нуля.

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

← На главную