1с скд таблица значений как источник данных
Открываем модуль объекта и создаем предопределенную процедуру ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
Внутри этой процедуры будем собирать данные и формировать отчет.
В процедуре ПриКомпоновкеРезультата отключаем стандартную обработку. СтандартнаяОбработка = Ложь;
Затем формируем таблицу значений произвольным образом. Имена колонок таблицы значений должны совпадать с будущими полями набора данных в СКД.:
Для примера добавим три строки данных. Далее по шагам создаем вывод отчета.
- Из схемы получаем настройки по умолчанию.
- В соответствующую переменную отправляем данные о расшифровке.
- Формируем макет с помощью компоновщика макета.
- Передаём в макет компоновки схему, настройки и данные расшифровки.
- Выполняем компоновку с помощью процессора компоновки. Для этого выполняем метод процессора компоновки данных Инициализировать(). В качестве параметров передаём макет компоновки данных, внешние наборы данных (тип: Структура, ключ структуры должен совпадать с именем объекта в схеме компоновки данных , значение — сформированная таблица значений), данные расшифровки.
- Очищаем поле табличного документа.
- Выводим результат в табличный документ.
Создаем набор данных. Для этого добавляем новый набор данных типа Объект. В поле Имя объекта, содержащего данных помещаем то название, которое мы указали в качестве ключа при создании структуры ВнешийНаборДанных. Затем добавляем поля. Имена должны точно совпадать с именами колонок в таблице значений. Далее можем указать допустимые значения, форматы и т.д.
Добавляем ресурсы, если это необходимо. По ним будут считаться итоги. В нашем случае это поля Количество и Сумма.
В закладке Настройки с помощью конструктора настроек формируем вариант отчета по умолчанию
Сохраняем наш отчет. Запускаем его в клиенте и формируем. Пример выполнения отчета СКД с использованием данных из таблицы значений приведен на картинке.
Вот и все. Достаточно просто, не правда ли?
СКД Внешний источник данных, грузим из ТЗ и далее получаем остатки на каждый документ
Очень часто бывают ситуации, когда необходимо сделать отчет СКД на сложном запросе, который используюет в себе вложенные запросы и объединения внутренние и полные и т.д. — в результате в консоли этот запрос формируется верно, а в скд половина полей пустые! Связано это с особенностью СКД в объединении внутренних данных, а так же не стоит забывать что в СКД наборы данных связываются как левое соединение.
Решения возможны следующие:
- Изменить запрос в СКД
- Сформировать запрос обычным способом и подставить эти данные в СКД как внешние
Рассмотрим последний вариант:
Внешний источник данных, грузим из ТЗ
Для вывода отчета я использую шаблон All4CF.ru_Template_SKD_v4.1 в нем уже реализованы почти все необходимые функции и работает в Обычных и УП формах.
В модуле объекта уже есть функция
установим в ней наш запрос, получается примерно так:
Ниже в коде происходит установка внешних данных из нашей ТЗ с именем ТаблицаВнешнегоНабораДанных
В самой компоновке добавляем набор Объект с именем ТаблицаВнешнегоНабораДанных и перечисляем поля, которые будут использоваться в отчете:
Как я уже говорил выше, далее нам необходимо получить остатки взаиморасчетов на дату документа:
Получение остатков на документ в СКД
Набор данных Запрос — назвали его Остатки:
Теперь установим связи Запроса и Объекта
Остатки нужно получать на дату документа и по контрагенту
Далее, если нужно, задайте вычисляемые поля, ресурсы, параметры и Настройте Список вывода.
Пример использования внешнего источника данных в СКД
При открытии новых филиалов компании, для расчета нагрузки на сервер 1С:Предприятия и других задач пожет понадобиться посмотреть динамику работы пользователей в информационной базе в виде диаграммы.
Динамику нужно показать за выбранный пользователем период. В качестве отображаемых данных будет количество действий на данными пользователями в разрезе часов. Информация для подобного отчета может быть получена из журнала регистрации.
Рассмотрим поэтапное создание подобного отчета и с помощью внешнего набора данных построим его на системе компоновки данных.
Читаем журнал регистрации
И так, отчет будем строить на СКД. Данные же мы будем получать не с помощью запроса из базы данных, а из журнала регистрации. О способе хранения журнала регистрации платформой писал в предыдущей статье.
В соответствии с заданным периодом в отчете нам нужно получить все действия пользователя над данными информационной базы. Полученную таблицу сгруппировать по пользователю и вывести в виде диаграммы (см. скриншот выше).
Для получения информации из журнала регистрации будем использовать метод глобального контекста «ВыгрузитьЖурналРегистрации()». В событии «ПриКомпоновкеРезультата» созданного отчета добавим следующий программный код:
Первый параметр метода «ВыгрузитьЖурналРегистрации» устанавливает таблицу значений, в которую будет выгружен результат выборки из журнала регистрации. Второй параметр устанавливаем фильтр на выбираемые записи. Филтр представляет собой структуру, ключи в котором — это поля, по которым устанавливается отбор. Мы используем поля «ДатаНачала» и «ДатаОкончания» для установки периода анализа журнала регистрации, а также поле «Событие», в который передаем массив строк (наименований событий). Добавленные в массив события соответствуют действиям на данными в базе.
Подробнее о использовании метода «ВыгрузитьЖурналРегистрации» Вы можете прочитать в синтаксис-помощнике.
Передаем таблицу значений в СКД
Для того, чтобы СКД смогла работать с полученной таблице значений нужно проделать следующий действия:
1) Создать набор данных в схеме компоновки и задать его поля.2) В программный код модуля «ПриКомпоновкеРезультата» прописать передачу таблицы значений в СКД.
3) Настраиваем ресурсы и структуру отчета (подробнее смотри в файле отчета, ссылка на который дана в конце статьи).
На этом настройки отчета завершены и мы можем запустить его в режиме предприятия.
Внешний источник данных в СКД позвляет использовать в отчетах данные практически из любых источников, влючая те, данные которых мы не сможем получить запросами.
Использование СКД для таких источников позволяет создавать отчеты с гибкиой системой настроек, а также дает возможность пользователю изменять вывод отчета, его структуру. Все возможности системы компоновки данных будут задействованы для таких источников в полной мере.
Скачать отчет из примера Вы можете по следующей ссылке .
1с скд таблица значений как источник данных
Для использования в отчёте на СКД произвольной таблицы значений необходимо настроить соответствующим образом схему компоновки данных и прописать программный вывод отчёта.
1. Настройка схемы компоновки данных.
1.1. Создаём основную схему компоновки данных.
1.2. На закладке «Наборы данных» добавляем набор данных — объект.
1.3. Добавляем необходимые поля набора данных (достаточно указать Поле) и указываем Имя объекта, содержащего данные.
1.4. Если в СКД есть другие наборы данных (например, Запрос), то создаём связи наборов данных на закладке «Связи наборов данных».
1.5. Настраиваем вывод отчёта нужным образом.
2. Программный вывод отчёта.
2.1. В модуле объекта отчёта создаём процедуру-обработчик ПриКомпоновкеРезультата.
2.2. В процедуре ПриКомпоновкеРезультата отключаем стандартную обработку.
2.3. Формируем таблицу значений произвольным образом. Имена колонок таблицы значений должны совпадать с полями набора данных в СКД (п.1.3).
2.4. Получаем схему компоновки данных из макета.
2.5. Из схемы получаем настройки по умолчанию.
2.6. Помещаем данные о расшифровке в соответствующую переменную.
2.7. Формируем макет с помощью компоновщика макета.
2.8. Передаём в макет компоновки схему, настройки и данные расшифровки.
2.9. Выполняем компоновку с помощью процессора компоновки. Для этого выполняем метод процессора компоновки данных Инициализировать(). В качестве параметров передаём макет компоновки данных, внешние наборы данных (тип: Структура, ключ структуры должен совпадать с именем объекта в схеме компоновки данных (п.1.3), значение — сформированная таблица значений), данные расшифровки.
2.10. Очищаем поле табличного документа.
2.11. Выводим результат в табличный документ.
Помимо таблиц значений в качестве внешних наборов данных могут использоваться результаты запросов, табличные части.
Пример сформированного отчёта:
Справочная информация из синтакс-помощника:
ПроцессорКомпоновкиДанных (DataCompositionProcessor)
Инициализировать (Initialize)
Синтаксис:
Инициализировать(<Макет>, <ВнешниеНаборыДанных>, <ДанныеРасшифровки>, <ВозможностьИспользованияВнешнихФункций>)
Параметры:
<Макет> (обязательный)
Тип: МакетКомпоновкиДанных.
Макет, для которого будет выполняться компоновка.
<ВнешниеНаборыДанных> (необязательный)
Тип: Структура.
Ключ структуры соответствует имени внешнего набора данных. Значение структуры — внешнему набору данных.
<ДанныеРасшифровки> (необязательный)
Тип: ДанныеРасшифровкиКомпоновкиДанных.
Объект, в котором нужно заполнить данные расшифровки. Если не указан, то расшифровка заполняться не будет.
<ВозможностьИспользованияВнешнихФункций> (необязательный)
Тип: Булево.
Указывает возможность использования функции общих модулей конфигурации в выражениях компоновки данных.
Значение по умолчанию: Ложь.
Описание:
Инициализировать объект.
Доступность:
Сервер, толстый клиент, внешнее соединение.