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

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

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

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

Причины некорректного вывода полей в кросс-таблице СКД

Проанализируем структуру типового отчета Расчетная ведомость. Отчет строится на основе кросс-таблицы, где:

  1. Строки: сгруппированы по иерархии (Организация, Подразделение, Сотрудник).
  2. Колонки: представляют собой динамическую группировку по видам расчета (начисления и удержания).

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

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

Способ 1. Настройка структуры отчета в схеме компоновки данных (СКД)

Рассмотрим правильную настройку схемы компоновки данных без необходимости вмешательства в программный код модуля отчета:

  1. Вынесение поля из динамической группировки колонок:

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

  2. Создание параллельной группировки колонок:

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

  3. Отключение расчета итогов по времени:

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

Способ 2. Программное управление составом полей и итогов

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

Посмотрим на пример добавления поля в конкретную группировку строк компоновщика:


// Получаем структуру настроек отчета
Таблица = КомпоновщикНастроек.Настройки.Структура[0];

// Обращаемся к группировке строк нужного уровня (например, уровень сотрудника)
ГруппировкаСотрудник = Таблица.Строки[0].Строки[0];

// Добавляем поле НормаДней в выбранные поля конкретной строки
ВыбранноеПоле = ГруппировкаСотрудник.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле = ГруппировкаСотрудник.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("НормаДней");
ВыбранноеПоле.Использование = Истина;

Если необходимо полностью отключить горизонтальные итоги по всей таблице отчета программным способом, используем параметры вывода компоновщика:


КомпоновщикНастроек.Настройки.ПараметрыВывода.УстановитьЗначениеПараметра(
    "HorizontalOverallPlacement", 
    ИспользованиеРасположенияЭлементовКомпоновкиДанных.Нет
);

Способ 3. Скрытие итогов через условное оформление

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

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

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

← На главную