Интересный вопрос по СКД — передача таблицы значения в качестве параметра?
Передаю в качестве параметра таблицу значения, все хорошо в таком коде:
ВЫБРАТЬ
Остатки.Склад,
ИЗ
РегистрНакопления.Остатки.Остатки КАК Остатки
ГДЕ
ОстаткиОстатки.Склад В(&Склад)
но все плохо в таком:
ВЫБРАТЬ
Остатки.Склад
ПОМЕСТИТЬ Таб
ИЗ
&Склад КАК Остатки
;
ВЫБРАТЬ
Таб.Склад
ИЗ
Таб КАК Таб
т.е. в СКД можно в качестве параметра передать таблицу только для использования в качестве фильтра в "ГДЕ"?
Или её все же можно как то использовать и в качестве источника запроса?
1с скд таблица значений как параметр
Используется предопределенная процедура
ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
Внутри этой процедуры в примере формируют таблицу значений, и далее командами вызывается отчет на СКД, куда в качестве источника данных передается сформированная ранее таблица значений (см пример формирования простой ТЗ в статье).
В процедуре ПриКомпоновкеРезультата отключаем стандартную обработку.
СтандартнаяОбработка = Ложь;
Затем формируем таблицу значений произвольным образом. Имена колонок таблицы значений должны совпадать с будущими полями набора данных в СКД.
В статье сделана ТЗ из трех строк.
Далее по шагам создаем вывод отчета.
— Из схемы получаем настройки по умолчанию.
— В соответствующую переменную отправляем данные о расшифровке.
— Формируем макет с помощью компоновщика макета.
— Передаём в макет компоновки схему, настройки и данные расшифровки.
— Выполняем компоновку с помощью процессора компоновки. Для этого выполняем метод процессора компоновки данных Инициализировать(). В качестве параметров передаём макет компоновки данных, внешние наборы данных (тип: Структура, ключ структуры должен совпадать с именем объекта в схеме компоновки данных , значение — сформированная таблица значений), данные расшифровки.
— Очищаем поле табличного документа.
— Выводим результат в табличный документ.
В итоге в функцию «ПриКомпоновкеРезульатата» добавляется следующий код:
В обработке создается макет отчета СКД. Название по умолчанию «ОсновнаяСхемаКомпоновкиДанных»
В том макете создаем набор данных. Для этого добавляем новый набор данных типа Объект.
В поле Имя объекта, содержащего данных помещаем то название, которое мы указали в качестве ключа при создании структуры ВнешийНаборДанны х («ПримерТаблицыЗначений)».
Затем добавляем поля. Имена должны точно совпадать с именами колонок в таблице значений. Далее можем указать допустимые значения, форматы и т.д.
Заметки
Таблица значений формируется с нужными значениями
Чтобы создать отчет на СКД на основании таблицы значений:
1) В макете СКД прописывается название источника, поля источника, как они указаны в таблице значений.
2) В предопределенной процедуре
прописывается вызов отчета на СКД, в тч прописывается ссылка на источник внешних данных — таблицу значений.
См варианты: от начала до конца выводить отчет на СКД программно, либо использовать процедуру «ПриКомпоновкеРезультата»
1. Есть команды, которыми формирование отчета на СКД вызывается от начала до конца. Я такое тестировал. Вот пример
2. Есть процедура ПриКомпоновкеРезультата, которая зачем?
Это для ОТЧЕТОВ! Поскольку я формировал отчеты внутри обработки, мне отчеты нужны как лог работы обработки, мне функция «ПриКомпоновкеРезультата» не нужна.
Событие ПриКомпоновкеРезультата вызывается при выполнении метода объекта отчета СкомпоноватьРезультат.
https://master1c8.ru/platforma-1s-predpriyatie-8/skd/7764/ — снимок из СинтаксПомощника. Видно, что это метод для «ОтчетОбъект.ИмяОтчета». Т.е. это для отчетов.
В самих отчетах используется, к примеру, чтобы включить или отключить фоновое построение отчета. https://курсы-по-1с.рф
Про пользовательские настройки СКД
Метод ПолучитьНастройки()
Платформа 1С v8.3
1. ANARCHY1987 26.07.16 14:13
Добрый день.
Есть отчет СКД
В событии «ПриКомпоновкеРезультата» я хочу получить актуальные настройки компановщика.
Использую для этого функцию ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();
Далее смотрю через отладку отборы и вижу что там ничего нет.
При этом если смотрю через отладчик ЭтотОбъект.КомпоновщикНастроек.Настройки — там нужный мне отбор присутствует и стоит флаг использовать = Истина.
Если смотреть отборы в пользовательских настройках и фиксированных настройках — там ничего нет.
Насколько я понимаю метод ПолучитьНастройки() должен возвращать результирующие настройки на основании этих 3х настроек.
Так почему он может неправильно работать?
herfis 435 26.07.16 14:24
Ну так все правильно. Применяются пользовательские настройки, в которых нет отбора.
3. ANARCHY1987 26.07.16 14:29
А как сделать так чтобы пользовательские настройки не применялись тогда?
Мне нужно чтобы если в пользовательских настройках ничего нет, то срабатывали обычные настройки.
Иначе тогда я вообще не пойму смысла в обычных настройках если они затираются.
4. herfis 435 26.07.16 14:48
(3) ANARCHY1987, До появления УФ пользовательских настроек не было. Были только обычные настройки. С появлением УФ появились пользовательские настройки. Если какой-то блок вынесен в пользовательские настройки (отборы, допустим), то если пользователь что-то изменил (отключил отбор, например) — то хана. Пользовательские настройки сохраняются автоматически.
Вернуться к дефолтным пользовательским настройкам можно через «Установить стандартные настройки». Смысл в обычных настройках есть, хотя он и изменился. Если установлена настройка, не перекрываемая пользовательскими настройками, она будет действовать. Еще удобно создавать отдельные именованные элементы настроек (особый отбор, например) и выносить их в пользовательские настройки персонально. Таким образом можно довольно просто сделать непростые настройки для пользователя, причем чисто параметрически.
Если хочешь, чтобы пользовательские настройки не применялись, то не получай настройки через ПолучитьНастройки() компоновщика. Получай дефолтные настройки из схемы. Например, из НастройкиПоУмолчанию или из настроек конкретного варианта в схеме.
Внешние наборы данных (или внешние источники данных). Результат выводится в форму отчета, а не в табличный документ? А табличный документ не внутри формы отчета разве?
«Перехватить событие кнопки «Сформировать» не получилось»
1. demon_infernal 39 19.10.15 06:55
// Перехватить событие кнопки «Сформировать» не получилось
Событие «ПриКомпоновкеРезультата» модуля объекта отчета
В остальном ничего нового, всё есть в Хрусталёвой.
Хрусталева. «Разработка сложных отчетов»
2. Tishu 3 21.10.15 10:47
Пользуйтесь шаблоном универсального отчета , в нем есть возможность использовать внешние наборы данных в СКД и многое другое. Универсальный шаблон имеет некоторые ограничения, влияющие на представление настроек пользователя (простая или расширенная). Поэтому можно создать сложный запрос, а результат передать в объект СКД. Универсальный шаблон преступно мало используется, а пользователи к нему привыкают быстро.
Непонятное про СКД: запросы в СКД иногда работают не так, как в консоли отчетов; какие-то шаблоны для отчетов на СКД
1. «Очень часто бывают ситуации, когда необходимо сделать отчет СКД на сложном запросе, который использует в себе вложенные запросы и объединения (?соединения) внутренние и полные и т.д. — в результате в консоли этот запрос формируется верно, а в скд половина полей пустые! Связано это с особенностью СКД в объединении (? соединении) внутренних данных, а так же не стоит забывать что в СКД наборы данных связываются как левое соединение.
Решения возможны следующие:
— Изменить запрос в СКД
— Сформировать запрос обычным способом и подставить эти данные в СКД как внешние».
Видимо, речь о соединениях? Потому что «объединение» — это слияние строк, тогда как перечень полей один и тот же. Вот детально https://helpme1s.ru/obedinenie-v-zaprosax-v-1s-8-v-primerax
Я не сталкивался, чтобы в консоли отчетом результат был, а в СКД — пустое. Хорошо бы увидеть пример.
Внутренние соединения не использовал, использовал до сих пор в основном левые соединения. Какие у СКД особенности внутренних соединений?
«Внешний источник данных, грузим из ТЗ
Для вывода отчета я использую шаблон All4CF.ru_Template_SKD_v4.1, в нем уже реализованы почти все необходимые функции и работает в Обычных и УП формах. В модуле объекта уже есть функция.»
РСА: Этот шаблон для 1С 8.2. Это не что-то универсальное, а просто ПРИМЕР, как данные из внешнего набора (?) вывести в отчет на СКД?
СКД. Для чего делают несколько запросов-источников, и уже потом средствами СКД объединяют результат?
Какое преимущество имеет использование нескольких наборов данных в СКД? Понятно, что иногда бывает нужно соединить несколько источников данных — например запрос с данными внешнего источника. Но для чего делают несколько источников — запросов и потом объединяют их средствами СКД, что это дает в сравнении с обычным соединением в запросе?
(0) классический пример http://catalog.mista.ru/public/77568/ «Срез последних на каждую дату в СКД и в запросе»,Публикация № 77568, Приемы и методы разработки — СКД»
РСА: Надо вчитываться и разбираться.
Как запомнить алгоритм программного вывода СКД. Ссылки на публикации, где функции формируют СКД программно
вот функция, куда вставляется запрос, и она программно выводит результат в отчет на СКД
Пример использования внешнего источника данных в СКД
При открытии новых филиалов компании, для расчета нагрузки на сервер 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)
Синтаксис:
Инициализировать(<Макет>, <ВнешниеНаборыДанных>, <ДанныеРасшифровки>, <ВозможностьИспользованияВнешнихФункций>)
Параметры:
<Макет> (обязательный)
Тип: МакетКомпоновкиДанных.
Макет, для которого будет выполняться компоновка.
<ВнешниеНаборыДанных> (необязательный)
Тип: Структура.
Ключ структуры соответствует имени внешнего набора данных. Значение структуры — внешнему набору данных.
<ДанныеРасшифровки> (необязательный)
Тип: ДанныеРасшифровкиКомпоновкиДанных.
Объект, в котором нужно заполнить данные расшифровки. Если не указан, то расшифровка заполняться не будет.
<ВозможностьИспользованияВнешнихФункций> (необязательный)
Тип: Булево.
Указывает возможность использования функции общих модулей конфигурации в выражениях компоновки данных.
Значение по умолчанию: Ложь.
Описание:
Инициализировать объект.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Интересный вопрос по СКД — передача таблицы значения в качестве параметра?
Передаю в качестве параметра таблицу значения, все хорошо в таком коде:
ВЫБРАТЬ
Остатки.Склад,
ИЗ
РегистрНакопления.Остатки.Остатки КАК Остатки
ГДЕ
ОстаткиОстатки.Склад В(&Склад)
но все плохо в таком:
ВЫБРАТЬ
Остатки.Склад
ПОМЕСТИТЬ Таб
ИЗ
&Склад КАК Остатки
;
ВЫБРАТЬ
Таб.Склад
ИЗ
Таб КАК Таб
т.е. в СКД можно в качестве параметра передать таблицу только для использования в качестве фильтра в "ГДЕ"?
Или её все же можно как то использовать и в качестве источника запроса?
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)
Синтаксис:
Инициализировать(<Макет>, <ВнешниеНаборыДанных>, <ДанныеРасшифровки>, <ВозможностьИспользованияВнешнихФункций>)
Параметры:
<Макет> (обязательный)
Тип: МакетКомпоновкиДанных.
Макет, для которого будет выполняться компоновка.
<ВнешниеНаборыДанных> (необязательный)
Тип: Структура.
Ключ структуры соответствует имени внешнего набора данных. Значение структуры — внешнему набору данных.
<ДанныеРасшифровки> (необязательный)
Тип: ДанныеРасшифровкиКомпоновкиДанных.
Объект, в котором нужно заполнить данные расшифровки. Если не указан, то расшифровка заполняться не будет.
<ВозможностьИспользованияВнешнихФункций> (необязательный)
Тип: Булево.
Указывает возможность использования функции общих модулей конфигурации в выражениях компоновки данных.
Значение по умолчанию: Ложь.
Описание:
Инициализировать объект.
Доступность:
Сервер, толстый клиент, внешнее соединение.
Пример использования внешнего источника данных в СКД
При открытии новых филиалов компании, для расчета нагрузки на сервер 1С:Предприятия и других задач пожет понадобиться посмотреть динамику работы пользователей в информационной базе в виде диаграммы.
Динамику нужно показать за выбранный пользователем период. В качестве отображаемых данных будет количество действий на данными пользователями в разрезе часов. Информация для подобного отчета может быть получена из журнала регистрации.
Рассмотрим поэтапное создание подобного отчета и с помощью внешнего набора данных построим его на системе компоновки данных.
Читаем журнал регистрации
И так, отчет будем строить на СКД. Данные же мы будем получать не с помощью запроса из базы данных, а из журнала регистрации. О способе хранения журнала регистрации платформой писал в предыдущей статье.
В соответствии с заданным периодом в отчете нам нужно получить все действия пользователя над данными информационной базы. Полученную таблицу сгруппировать по пользователю и вывести в виде диаграммы (см. скриншот выше).
Для получения информации из журнала регистрации будем использовать метод глобального контекста «ВыгрузитьЖурналРегистрации()». В событии «ПриКомпоновкеРезультата» созданного отчета добавим следующий программный код:
Первый параметр метода «ВыгрузитьЖурналРегистрации» устанавливает таблицу значений, в которую будет выгружен результат выборки из журнала регистрации. Второй параметр устанавливаем фильтр на выбираемые записи. Филтр представляет собой структуру, ключи в котором — это поля, по которым устанавливается отбор. Мы используем поля «ДатаНачала» и «ДатаОкончания» для установки периода анализа журнала регистрации, а также поле «Событие», в который передаем массив строк (наименований событий). Добавленные в массив события соответствуют действиям на данными в базе.
Подробнее о использовании метода «ВыгрузитьЖурналРегистрации» Вы можете прочитать в синтаксис-помощнике.
Передаем таблицу значений в СКД
Для того, чтобы СКД смогла работать с полученной таблице значений нужно проделать следующий действия:
1) Создать набор данных в схеме компоновки и задать его поля.2) В программный код модуля «ПриКомпоновкеРезультата» прописать передачу таблицы значений в СКД.
3) Настраиваем ресурсы и структуру отчета (подробнее смотри в файле отчета, ссылка на который дана в конце статьи).
На этом настройки отчета завершены и мы можем запустить его в режиме предприятия.
Внешний источник данных в СКД позвляет использовать в отчетах данные практически из любых источников, влючая те, данные которых мы не сможем получить запросами.
Использование СКД для таких источников позволяет создавать отчеты с гибкиой системой настроек, а также дает возможность пользователю изменять вывод отчета, его структуру. Все возможности системы компоновки данных будут задействованы для таких источников в полной мере.
Скачать отчет из примера Вы можете по следующей ссылке .
1с скд таблица значений как параметр
Открываем модуль объекта и создаем предопределенную процедуру ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
Внутри этой процедуры будем собирать данные и формировать отчет.
В процедуре ПриКомпоновкеРезультата отключаем стандартную обработку. СтандартнаяОбработка = Ложь;
Затем формируем таблицу значений произвольным образом. Имена колонок таблицы значений должны совпадать с будущими полями набора данных в СКД.:
Для примера добавим три строки данных. Далее по шагам создаем вывод отчета.
- Из схемы получаем настройки по умолчанию.
- В соответствующую переменную отправляем данные о расшифровке.
- Формируем макет с помощью компоновщика макета.
- Передаём в макет компоновки схему, настройки и данные расшифровки.
- Выполняем компоновку с помощью процессора компоновки. Для этого выполняем метод процессора компоновки данных Инициализировать(). В качестве параметров передаём макет компоновки данных, внешние наборы данных (тип: Структура, ключ структуры должен совпадать с именем объекта в схеме компоновки данных , значение — сформированная таблица значений), данные расшифровки.
- Очищаем поле табличного документа.
- Выводим результат в табличный документ.
Создаем набор данных. Для этого добавляем новый набор данных типа Объект. В поле Имя объекта, содержащего данных помещаем то название, которое мы указали в качестве ключа при создании структуры ВнешийНаборДанных. Затем добавляем поля. Имена должны точно совпадать с именами колонок в таблице значений. Далее можем указать допустимые значения, форматы и т.д.
Добавляем ресурсы, если это необходимо. По ним будут считаться итоги. В нашем случае это поля Количество и Сумма.
В закладке Настройки с помощью конструктора настроек формируем вариант отчета по умолчанию
Сохраняем наш отчет. Запускаем его в клиенте и формируем. Пример выполнения отчета СКД с использованием данных из таблицы значений приведен на картинке.
Вот и все. Достаточно просто, не правда ли?