В данной статье мы кратко пробежимся по всем вкладкам конструктора схемы компоновки данных.
На данной вкладке можно создать неограниченное количество наборов данных. Набор данных – это источник получения данных.
Различают несколько видов наборов данных:
Запрос – это обычный 1с-запрос только язык запросов немного расширен. Для удобства можно использовать конструктор запроса.
Объект – внешний набор данных, например таблица значений.
Объединение – объединение нескольких наборов данных типов запрос и объект.
В данной статье мы кратко пробежимся по всем вкладкам конструктора схемы компоновки данных. Наборы данных На данной вкладке можно создать неограниченное количество наборов данных. Набор данных – это источник получения данных. Различают несколько видов наборов данных: Запрос; Объект; Объединение. Запрос – это обычный 1с-запрос только язык запросов немного расширен. Для удобства можно использовать конструктор запроса. Объект – внешний набор данных, например таблица значений. Объединение – объединение нескольких наборов данных типов запрос и объект. Связи наборов данных На данной вкладке описываются связи наборов данных. Тут можно указать какие наборы данных связывать и по каким полям и с какими параметрами. Самое главное, что нужно запомнить: в схеме компоновки данных, при связывании наборов всегда используется Левое соединение! Вычисляемые поля На данной вкладке можно создавать дополнительные поля, не описанные на вкладке Наборы данных. В качестве выражений для расчета можно использовать язык выражений компоновки данных, поля из основных наборов данных, а также функции не глобальных общих модулей. Ресурсы Ресурсы – это итоговые данные по группировкам. На вкладке можно назначить ресурсом поля из наборов данных, а также из вычисляемых полей. Также для ресурсов указывается выражение, по которому они рассчитываются, и возможно указание группировки по которой будет рассчитываться выражение для ресурсов. На основании значений ресурсов также рассчитываются общие итоги отчета. Параметры Параметры данных, как правило, используются в наборе данных запрос. Все параметры, описанные в запросе, появляются на вкладке Параметры. На данной вкладке можно указать заголовок, доступные типы, доступные значение и некоторые другие вещи. Подробнее о параметрах чуть позже. Макеты По умолчанию макет сформированного отчета генерируется автоматически системой компоновки данных. Но в системе также имеется возможность разработчику самому оформлять отдельные области отчета(полей, группировок, ресурсов…). Все макеты отдельных областей, созданные на данной вкладке, привязаны только к текущему отчету. Вложенные схемы Вложенные схемы используются в случаях когда данные одного отчета необходимо использовать в другом. Другими словами мы “встраиваем” одну схему компоновки данных в другую, указывая связь по общему полю. Пример использования вложенных схем можно посмотреть в этой статье. Настройки На данной вкладке разработчик создает стандартные настройки формирования отчета. В верхней части окна задается иерархическая структура. Структура формирования отчета может состоять из следующих элементов: Группировка; Таблица; Диаграмма; Вложенная схема В нижнем части окна задаются настройки для всего отчета и для каждого элемента структуры отчета. Кратко в вкладках настроек: Выбранные поля – список полей выводимых в отчет; Отбор – всевозможные отборы записей отчета; Порядок – сортировка записей в отчете; Параметры данных – значение параметров отчета; Пользовательские поля – дополнительные поля отчета, создаваемые пользователем; Условное оформление – задается условное оформление записей отчета; Другие настройки – всевозможные дополнительные настройки такие как: заголовок отчета, макет оформления, расположение полей и тд....Сегодня мы рассмотрим решение интересной задачи – вывод картинок в отчет .
Для чего это может быть полезно?
Вот несколько примеров :
В видео мы также разбираем программное формирование отчета на СКД. Такой способ формирования отчетов используется в типовых конфигурациях – это еще одна причина посмотреть его внимательно:)
С помощью предопределенных макетов можно переопределять стандартное оформление отчета.
В этом уроке помимо постановки задачи рассмотрим:
Чтобы решить задачу вывода изображений в отчет на СКД, необходимо его сформировать программно.
Именно при программном формировании отчета возможно обратиться к бинарным данным.
В ходе этого урока выполним:
В этом уроке выполняем финальные действия: полученные ранее бинарные данные выводим в отчет.
Для этого рисунок добавляется в табличный документ, после чего он выводится в отчет.
Разработанный алгоритм вывода изображений является универсальным – при любом изменении структуры отчета алгоритм продолжает работать.
Собственно, это мы и докажем в данном уроке.
Кроме этого, рассмотрим особенность фонового формирования отчета на СКД (построение отчета с помощью регламентных заданий).
Часто в шапке или подвале отчета нужно вывести статичную картинку.
Казалось бы, простая задача, но в случае с СКД нужно знать, как ее решить:
В этом видео наглядно показано решение задачи.
Приятного просмотра! :)
Последние несколько дней мы публикуем материалы по СКД.
Ok, давайте рассмотрим, что будет ждать специалиста, который пишет отчеты «на коленке» (например, с помощью ручного вывода в табличный документ).
Отчеты практически во всех типовых конфигурациях базируется на СКД.
Для специалиста без знаний СКД доработка типовых отчетов становится лотереей – почему и как в отчете выводится та или иная цифра, как добавить новые источники, где в коде править расчетные цифры…
СКД – стандарт отчетов в типовых конфигурациях, и 1С не пишет комментарии в расчете на тех, кто стандарты еще так и не изучил:)
Без СКД разработка отчетов выполняется во многом вручную.
Это, конечно, круто – выйти как рембо с отверткой в зубах и типа сделать всех:)
В результате – большие трудозатраты на разработку отчета и его отладку . И любого руководителя/ заказчика это будет как минимум настораживать: “странно, а он точно в этом разбирается??”
А если речь заходит о последующей доработке отчета, это часто становится головной болью (особенно, если это чужой отчет)…
СКД позволяет получать качественные отчеты без программирования. Костяк делается за несколько минут , дальше – бантики.
А пользователи могут донастраивать такие отчеты без привлечения программиста , формировать несколько вариантов представления – диаграммы, графики, списки, таблицы.
Добиться такой универсальности в отчетах, построенных программно, невозможно в разумные сроки .
Поэтому – звонок, трамвай, поехали… Это такой профессиональный рост для 1С-ника…
А если какие-то данные нужно получить из другой системы – из другой базы 1С или вообще не из 1С?
С помощью СКД можно создать отчет, который работает и с данными текущей ИБ и получает данные из другого источника – программирования для этого не потребуется .
Без СКД внешние данные будут получаться программно и не самым тривиальным способом.
Если Вы хотите профессионально освоить СКД и ежедневно применять в своей работе , записывайтесь на курс:
Поддержка – 2 месяца . Объем курса – 34 учебных часа .
Не откладывайте свое обучение!
Данная статья будет полезна тем программистам, которые уже разрабатывали отчеты на системе компоновки данных , но не пользовались встроенным механизмом задания макетов.
При разработке отчетов иногда необходимо использовать не стандартный заголовок, или нужно добавить подписи. В статье рассмотрено два варианта:
Предположим, у нас уже есть отчет на компоновке данных, который выглядит следующим образом.
Нам необходимо добавить заголовок и подпись, чтобы отчет выглядел так:
Вариант 1 . Можно воспользоваться механизмом разработки макетов непосредственно в СКД .
Сначала нам нужно добавить группировки и задать им имена в дереве группировок. Добавим одну группировку перед основной группировкой отчёта, и установим ей имя «Шапка ». Вторую группировку добавим в конец, и зададим ей имя «Подвал ».
Далее, на вкладке макеты необходимо добавить два макета группировки и задать для них области. Если области достаточно сложные (например, часть ячеек объединены в одну), то их можно сделать в обычном макете и перенести сюда с помощью механизма «копировать, вставить». Здесь же, можно передать параметры.
На вкладке настройки для группировок «Шапка» и «Подвал» нужно отключить «основной» макет оформления, выбрав значение «без оформления». Если этого не сделать, то ячейки наших группировок будут в рамочке.
Так же для наших группировок необходимо отключить выбранные поля.
Примечание . Подобный вариант отчета, возможно разработать использую только СКД . Такой отчет будет работать как на обычном приложении, так и на управляемом.
Вариант 2. C использованием результата СКД и обычных макетов (рассмотрен вариант для обычного приложения)
Добавим в отчет обычный макет.
Зададим в нём области «Шапка и Подвал».
В модуле формы добавим код для кнопки «Сформировать», в котором сначала выведем область «Шапка», потом результат компоновки данных, затем область «Подвал».
Примечание . Для того чтобы отчет работал в управляемых приложениях необходимо модифицировать процедуру для кнопки «сформировать».
Создадим внешний отчет, который будет выводить отчетную информацию об остатках номенклатуры и её обороте. Требуемая информация запрашивается запросом с помощью набор данных типа "Запрос", который содержит текст запроса:
ВЫБРАТЬ
_ДемоНоменклатура.Ссылка КАК Номенклатура
ПОМЕСТИТЬ АктуальнаяНоменклатура
ИЗ
Справочник._ДемоНоменклатура КАК _ДемоНоменклатура
ГДЕ
НЕ _ДемоНоменклатура.ПометкаУдаления
И НЕ _ДемоНоменклатура.ЭтоГруппа
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
АктуальнаяНоменклатура.Номенклатура,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.МестоХранения,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоНачальныйОстаток,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоКонечныйОстаток,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоПриход,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоРасход,
_ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.КоличествоОборот
ИЗ
АктуальнаяНоменклатура КАК АктуальнаяНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления._ДемоОстаткиТоваровВМестахХранения.ОстаткиИОбороты КАК _ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты
ПО АктуальнаяНоменклатура.Номенклатура = _ДемоОстаткиТоваровВМестахХраненияОстаткиИОбороты.Номенклатура
В итоге отчет содержит следующие поля (см. рисунок 1):
Так как информация берется из виртуальной таблицы "ОстаткиИОбороты", то СКД автоматически создает два параметра данных НачалоПериода и КонецПериода, которые необходимы для задания пределов периода выборки данных. Я предпочитаю с такими параметрами не работать напрямую, а задавать их значения через другой параметр, который будет доступен пользователю для редактирования (см. рисунок 2).
Отчет со своей задачей справляется, но шапка отчета довольно сухая. За время работы, я нашел несколько способов оформления шапки отчета:
Данные действия можно производить и в режиме 1С:Предприятия, открыв настройки отчета, НО, в состав настроек отчета должен быть включен пункт "Выбранные поля" (см. рисунок 8).
На этом легкая часть по настройке шапки отчета закончена. Из плюсов выше перечисленных действий: вся настройка выполняется стандартными средствами. Из минусов: отсутствие возможности задания многострочного заголовка поля.
Для этого в модуле отчета определим процедуру ПриКомпоновкеРезультата . В этой процедуре напишем код по заданию заголовка полей.
// 1. Получаем пользовательские настройки.
НастройкиКД = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();
// 2. Получаем значение параметра "Период" из которого определяем дату начала и окончания периода.
ПараметрПериод = Новый ПараметрКомпоновкиДанных("Период");
Период = НастройкиКД.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрПериод).Значение;
НачалоПериода = Период.ДатаНачала;
КонецПериода = Период.ДатаОкончания;
// 3. Подготовим информацию о переопределении заголовка полей. Для этого, создадим
// массив, который будет содержать информацию: ИмяПоля - значения свойства "Путь" в
// наборе данных (см. рисунок 1), Заголовок - текст заголовка.
СписокПолей = Новый Массив;
стрНачалоПериода = Формат(НачалоПериода, "ДФ=dd.MM.yyyy; ДП="Пустая дата"");
ПолеНачальныйОстаток = Новый Структура("ИмяПоля, Заголовок", "КоличествоНачальныйОстаток", "Остаток на " + Символы.ПС + стрНачалоПериода);
СписокПолей.Добавить(ПолеНачальныйОстаток);
стрКонецПериода = Формат(КонецПериода, "ДФ=dd.MM.yyyy; ДП="Пустая дата"");
ПолеКонечныйОстаток = Новый Структура("ИмяПоля, Заголовок", "КоличествоКонечныйОстаток", "Остаток на " + Символы.ПС + стрКонецПериода);
СписокПолей.Добавить(ПолеКонечныйОстаток);
// 4. Получим список полей, который находятся в группировке "Остатки" (см. рисунок 7) и
// зададим новый заголовок, обойдя элементы в цикле.
ВыбранныеПоля = НастройкиКД.Выбор.Элементы; // Первый уровень полей.
ВыбранныеПоляОстатки = ВыбранныеПоля.Элементы; // Поля группировки остатки.
Для каждого ВыбранноеПоле Из ВыбранныеПоляОстатки Цикл
Для Каждого ЭлементМассива Из СписокПолей Цикл
ПолеКомпоновки = Новый ПолеКомпоновкиДанных(ЭлементМассива.ИмяПоля);
Если ВыбранноеПоле.Поле = ПолеКомпоновки Тогда
ВыбранноеПоле.Заголовок = ЭлементМассива.Заголовок;
КонецЕсли;
КонецЦикла;
КонецЦикла;
// 5. Загрузим измененный пользовательские настройки обратно.
ЭтотОбъект.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКД);
Результат отчета (см. рисунок 10):
Способ потяжелее, чем все выше перечисленные, но мне нравится.
Рисунок 13. Макет СКД в качестве шапки отчета |
На сайте информационно-технологического сопровождения приведена статья Использование предопределенных макетов , которая подробно описывает приемы использования макетов в СКД.
Приступим. Отключаем стандартное формирование, для этого в модуле отчета для события ПриКомпоновкеРезультата
установим переменную СтандартнаяОбработка в значение Ложь и напишем собственную компоновку результата:
СтандартнаяОбработка = Ложь;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(
ЭтотОбъект.СхемаКомпоновкиДанных,
ЭтотОбъект.КомпоновщикНастроек.Настройки,
ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ДанныеРасшифровки, Истина);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Более подробно программная компоновка результата отчета описана в статье
Скомпонованный результат выводится в табличный документ - это переменная ДокументРезультат. Далее, после формирования результата и вывода его в табличный документ пишем код для замены одного текста ячейки на другой. Например, изменим в шапке отчета название группировки "Остатки" на "Остатки номенклатуры" (см. рисунок 14):
Ячейка = ДокументРезультат.НайтиТекст("Остатки");
Если Ячейка <> Неопределено Тогда
Ячейка.Текст = "Остатки номенклатуры";
КонецЕсли;
Так же для найденной ячейки можно задать форматирование, см. свойства ячейки табличного документа в синтакс-помощнике.
Данный способ я обнаружил для себя недавно, он прост и позволяет очень гибко работать с шапкой отчета, главное, что бы текст ячейки имел уникальный текст.
P.S. может быть у вас в арсенале имеется еще способ оформления заголовков полей?