Как скорректировать таблицу в отчете 1С с помощью СКД для вывода итогов по вычисляемому полю?

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

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

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

Шаг 1: Создание вычисляемого поля для расчета отработанных часов

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

  1. Перейдите в режим редактирования схемы компоновки данных (СКД). Обычно это можно сделать из конфигуратора, открыв отчет, или непосредственно в режиме предприятия, если предусмотрена возможность изменения вариантов отчета.
  2. На вкладке «Вычисляемые поля» создайте новое поле. Мы можем назвать его, например, ОтработаноЧасов.
  3. В поле «Выражение» для этого нового вычисляемого поля мы прописываем формулу для расчета. Если у нас есть поля ВремяНачала и ВремяОкончания, и они имеют тип «Дата и время», то формула для расчета отработанных часов в секундах, а затем в часах, может выглядеть так: РазностьДат(ВремяНачала, ВремяОкончания, ВидГранулярностиДаты.Секунда) / 3600

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

  4. После ввода выражения, убедитесь, что оно корректно и сохраните изменения. Это поле теперь доступно для использования в отчете.

Шаг 2: Добавление вычисляемого поля в ресурсы отчета

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

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

    Важно: Выражение ресурса должно ссылаться на вычисляемое поле, а не на исходные поля. Это позволит нам суммировать уже рассчитанные значения.

  5. Параметр «Рассчитывать по» определяет, по каким группировкам будет производиться расчет ресурса. Если оставить его пустым, расчет будет производиться по всем группировкам отчета. Чтобы получить итоги по сотруднику за период, мы должны убедиться, что в группировках отчета присутствует сотрудник и период. Если нам нужны итоги только для определенных уровней группировки, мы указываем их здесь. Например, если мы хотим суммировать часы только по сотрудникам, не детализируя по дням, мы можем указать здесь поле Сотрудник (если оно есть в наборе данных).
  6. Мы также можем задать «Тип агрегатной функции» в свойствах ресурса (например, Сумма, Количество, Среднее, Максимум, Минимум и другие). Обычно, если в выражении указана агрегатная функция (как Сумма(...)), то тип агрегатной функции не требует дополнительной настройки, но это может быть полезно для более сложных сценариев.

Шаг 3: Использование ресурсов и настройка отображения итогов в отчете

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

  1. Перейдите на вкладку «Настройки» в выбранном варианте отчета (обычно это вкладка «Настройки» или «Настройки отчета» в конструкторе СКД).
  2. На закладке «Поля» или «Выбранные поля» найдите наш созданный ресурс ОтработаноЧасов и добавьте его в список полей, которые будут отображаться в отчете. Это сделает колонку видимой.
  3. Для того чтобы выводились итоги по группировкам (например, итоги по сотруднику за весь период), нам необходимо настроить структуру отчета.
    • В структуре отчета (например, если у нас есть группировка по Сотруднику), выберите эту группировку.
    • Перейдите в свойства элемента группировки (обычно двойной клик или кнопка «Свойства»).
    • На вкладке «Другие настройки» (или аналогичной, в зависимости от версии 1С) мы можем указать:
      • «Расположение общих итогов»: определяет, где будут выводиться общие итоги по этой группировке (Начало, Конец или Нет).
      • «Расположение итогов»: аналогично, для итогов по подгруппам.

      Мы выбираем Конец или Начало в зависимости от предпочтений, чтобы итоги по сотруднику отображались в отчете.

  4. Для вывода общего итога по всему отчету (сумма часов всех сотрудников за весь период) достаточно добавить в структуру отчета группировку «Общие итоги» (если она еще не добавлена) и настроить для нее отображение ресурсов. СКД автоматически просуммирует значения нашего ресурса по всему набору данных.
  5. После всех настроек мы можем сформировать отчет и проверить результат. Мы должны увидеть новую колонку с отработанными часами и итоги по ней в соответствии с нашими группировками.

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

На этапе настройки мы можем столкнуться с ошибкой типа «поле ИТОГ не найдено» (как это произошло у одного из участников форума). Рассмотрим основные причины этой ошибки и способы ее устранения.

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

Полезные советы и дополнения

Чтобы процесс настройки был максимально эффективным и безболезненным, рекомендуем следовать некоторым общим принципам:

  1. Постепенная настройка: Мы можем начать с вывода только исходных данных, затем добавить вычисляемое поле, убедиться, что оно корректно рассчитывается, и только после этого приступать к добавлению его в ресурсы и настройке итогов. Это позволяет локализовать возможные ошибки.
  2. Использование выражений в запросе: В некоторых случаях, если расчет достаточно прост, мы можем выполнить его непосредственно в тексте запроса набора данных. Например:
    
    ВЫБРАТЬ
        Таблица.ВремяНачала,
        Таблица.ВремяОкончания,
        (РАЗНОСТЬДАТ(Таблица.ВремяНачала, Таблица.ВремяОкончания, СЕКУНДА) / 3600) КАК ОтработаноЧасов
    ИЗ
        ИсточникДанных КАК Таблица
    

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

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

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

← На главную