1С построитель отчета

Содержание

Построитель отчета

Печенкин Роман

Что такое построитель отчета?

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

Настройки построителя отчета включают:

Настройки построителя имеют средства визуализации, что позволяет программисту с минимальными трудозатратами предоставить пользователю интерфейс для их установки.

Перед выводом макет построителя отчета можно оформить с помощью макета оформления.

Вывод результата выполнения запроса построителя отчета осуществляется одной командой.

Где можно использовать построитель отчета?

С помощью построителя отчета можно проектировать основную массу отчетов (пример: «Остатки товаров”, «Продажи за период”…). При этом время на их разработку и программный код существенно сократятся, а качество оформления и функциональность — повысятся.

Кроме того, построитель отчета можно использовать в тех случаях, когда не нужен вывод результата, но требуется настройка пользователем элементов запроса, к примеру, группировок или фильтра (пример: выгрузка номенклатуры в xml-файл или обработка проведения документов по заданному фильтру).

Поскольку построитель отчета недоступен на сервере 1С:Предприятия и не используется в модуле внешнего соединения, то в этих случаях необходимо использовать построитель запроса, который аналогичен построителю отчета, но не имеет визуальных свойств и методов («Макет”, «ВыводитьЗаголовокОтчета”, «Вывести()”, «ОформитьМакет()”…).

Немного о понятиях

По сравнению с версией 7.7 в версии 8.0 произошла небольшая смена понятий, поэтому стоит немного остановиться на этом.

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

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

Главное отличие заключается в том, что доступное поле не имеет свойства «ПутьКДанным” (пример: «Номенклатура.Код”, «Количество”), так как это просто своеобразное описание поля, по которому будет произведена попытка найти соответствие среди полей выборки запроса в момент добавления его в список группировок, фильтра, сортировки или выбранных полей.

При этом нет возможности программно добавить одно из доступных полей в какой-либо из вышеперечисленных списков, так как, с одной стороны, у доступного поля нет методов а-ля «ДобавитьВОтбор()” или «ДобавитьВВыбранныеПоля()”, а, с другой стороны, при добавлении нового элемента в любой из вышеперечисленных списков требуется указать свойство «ПутьКДанным”, которое не всегда совпадает с именем поля (пример: поля «Номенклатура.Родитель” и «Номенклатура.Родитель.Родитель” имеют одинаковое имя «Родитель”).

Типовой вариант использования построителя отчета

В общем случае последовательность действий при работе с построителем отчета следующая:

  1. Создать новый объект «ПостроительОтчета”;
  2. Присвоить свойству «Текст” текст запроса;
  3. Если в тексте запроса не были заданы настройки построителя отчета, то выполнить метод «ЗаполнитьНастройки()”;
  4. Предоставить пользователю возможность изменения настроек построителя отчета;
  5. При необходимости можно отказаться от автогенерации макета построителем отчета и присвоить свойству «Макет” фиксированный макет;
  6. При необходимости можно присвоить свойству «МакетОформления” один из стандартных или свой макет, при этом, если автогенерируемый макет построителя отчета был заменен на фиксированный, то выполнить метод «ОформитьМакет()”;
  7. Вызвать метод «Выполнить()”;
  8. Вызвать метод «Вывести()”.

Пример:

Описание некоторых свойств построителя отчета

Свойство Описание
Текст Содержит текст запроса построителя отчета. Если текст запроса построителя отчета не содержит элементов настройки «{…}”, то можно с помощью метода «ЗаполнитьНастройки()” автоматически заполнить настройки на основе текста запроса.
ТекстЗаголовка Текст, который будет выводиться в заголовке отчета (пример: «Остатки товаров на 01.01.2004”, «Продажи за январь 2004 года”…).
ВыводитьЗаголовокОтчета
ВыводитьШапкуТаблицы
ВыводитьОбщиеИтоги
ВыводитьПодвалТаблицы
ВыводитьПодвалОтчета
Эти свойства определяют, будут ли выводиться, соответственно, заголовок отчета, шапка таблицы, общие итоги, подвал таблицы и подвал отчета.
ВыводитьДетальныеЗаписи Свойство отвечает за принудительный вывод или запрет вывода детальных записей.
АвтоДетальныеЗаписи Если свойство «АвтоДетальныеЗаписи” установить в Истина, то каждая детальная запись будет выводиться только в том случае, если она отличается от групповой.
ДоступныеПоля Содержит список полей, доступных для добавления в группировки, фильтр, выбранные поля и сортировку.
ИзмеренияСтроки
ИзмеренияКолонки
Содержат список группировок, соответственно, по строкам и по колонкам.
Отбор Содержит список фильтров, заданных построителю отчета.
ВыбранныеПоля содержит список выбранных показателей и реквизитов группировок.
Порядок содержит список полей сортировки.
Параметры Содержит список параметров построителя (объявленных в тексте запроса построителя с помощью символа «&”).
Результат Содержит результат выполнения запроса построителя отчета (объект типа РезультатЗапроса).

Обработка Расшифровки с помощью построителя отчета

Свойство «ЗаполнениеРасшифровки” содержит один из трех вариантов заполнения расшифровки при выводе:

1-ый вариант: не заполнять (не использовать расшифровку).

2-ой вариант: значения группировок (при расшифровке ячейки будет открываться значение группировки, выведенное в ней).

3-ий вариант: расшифровка (расшифровка будет заполняться структурой, содержащей значения всех группировок). В этом случае требуется обрабатывать событие табличного документа «Обработка расшифровки”, где нужно анализировать переданную структуру и выполнять те или иные действия.

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

Если используется третий вариант заполнения расшифровки, то можно использовать метод «НастроитьРасшифровку()”, предназначенный для того, чтобы выполнить и вывести отчет с учетом расшифровки, выполненной пользователем.

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

Пример:

Процедура РезультатТаблицаОбработкаРасшифровки
(Элемент, Расшифровка, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Построитель.НастроитьРасшифровку(Построитель, Расшифровка);
Построитель.Выполнить();
Построитель.Вывести();
КонецПроцедуры

Оформление отчета

Свойство «Макет” содержит макет, который используется при выводе результата в табличный документ. Если Неопределенно, то макет генерируется автоматически.

Свойства «МакетЗаголовкаОтчета”, «МакетШапкиТаблицы”, «МакетДетальныхЗаписей”, «МакетОбщихИтогов”, «МакетПодвалаТаблицы” и «МакетПодвалаОтчета” содержат имя области в макете построителя отчета или отдельные макеты, используемые при выводе, соответственно, заголовка отчета, шапки таблицы, детальных записей, общих итогов, подвала таблицы и подвала отчета в табличный документ. Если имена областей соответствуют именам в макете построителя отчета, то свойства заполнять не требуется.

Свойство «МакетОформления” содержит макет, используемый для оформления макета построителя отчета. Оформление ячеек в макете оформления будет применено к ячейкам макета построителя отчета.

Для получения одного из стандартного вариантов оформления можно использовать метод глобального контекста «ПолучитьМакетОформления()”.

В случае, если свойству «Макет” построителя отчета был присвоен фиксированный макет, для его оформления требуется выполнить метод «ОформитьМакет()”.

Свойство «РазмещениеИзмеренийВСтроках определяет один из трех вариантов вывода группировок по строкам.
1-ый вариант: вместе (в одной колонке).
Пример:


2-ой вариант: отдельно (в разных колонках).
Пример:


3-ий вариант: отдельно и только в итогах.
Пример:

Свойство «РазмещениеИзмеренийВКолонках” определяет один из трех вариантов вывода группировок по колонкам.
1-ый вариант: вместе (в одной строке).
Пример:


2-ой вариант: отдельно (в разных строках).
Пример:

3-ий вариант: отдельно и только в итогах.
Пример:


Свойство «РазмещениеИтоговВСтроках” определяет один из четырех способов вывода итогов в строках.
1-ый вариант: в заголовке (только выше последующих группировок и детальных записей).


2-ой вариант: в заголовке и подвале (выше и ниже последующих группировок и детальных записей).


3-ий вариант: в подвале (ниже последующих группировок и детальных записей, выше них выводится только описание группировки).

4-ый вариант: только в подвале (только ниже последующих группировок и детальных записей).

Свойство «РазмещениеИтоговВКолонках” определяет один из четырех способов вывода итогов в колонках.

1-ый вариант: в заголовке (только левее последующих группировок и детальных записей).

2-ой вариант: в заголовке и подвале (левее и правее последующих группировок и детальных записей).

3-ий вариант: в подвале (правее последующих группировок и детальных записей, левее них выводится только описание группировки).

4-ый вариант: только в подвале (только правее последующих группировок и детальных записей).

Свойство «РазмещениеРеквизитовИзмеренийВСтроках” определяет один из трех вариантов вывода реквизитов группировок по строкам.

1-ый вариант: вместе (в одной дополнительной колонке).
Пример:

2-ой вариант: вместе с измерениями (в колонках с группировками).
Пример:

3-ий вариант: отдельно (в разных дополнительных колонках).
Пример:

Свойство «РазмещениеРеквизитовИзмеренийВКолонках” определяет один из трех вариантов вывода реквизитов группировок по колонкам.

1-ый вариант: вместе (в одной дополнительной строке).
Пример:

2-ой вариант: вместе с измерениями (в строках с группировками).
Пример:

3-ий вариант: отдельно (в разных дополнительных строках).
Пример:

Вывод построителя отчета

Метод «Выполнить()” выполняет запрос построителя отчета и заполняет свойство «Результат”.
С помощью метода «ПолучитьЗапрос()” можно получить запрос построителя отчета, который выполняется при вызове метода «Выполнить()”.

Метод «Вывести()” выводит результат в табличный документ или диаграмму. Если не указать объект, в который требуется выполнить вывод, то будет создан новый табличный документ.

Пример вывода в новый табличный документ:
Построитель.Вывести();

Пример вывода в существующий табличный документ:
Построитель.Вывести(ЭлементыФормы.РезультатТаблица);

Пример вывода в диаграмму:
Построитель.Вывести(ЭлементыФормы.РезультатДиаграмма, » Количество»);

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

Сохранение и восстановление настроек построителя

Метод «ПолучитьНастройки()” позволяет получить текущие настройки построителя отчета с возможностью указания, какие именно (пример: только фильтр, фильтр и сортировку…).

Метод «УстановитьНастройки()” позволяет загрузить настройки построителя отчета с возможностью указания, какие именно (пример: только фильтр, фильтр и сортировку…).

Группировки и поля построителя отчета

Измерение построителя отчета – это группировка по строкам или колонкам.

Основными реквизитами группировки являются

  • «Имя” (идентификатор реквизита) (пример: «Номенклатура”, «Контрагент”…),
  • «Представление” (представление при выводе) (пример: «Документ продажи”, «Единица измерения”…),
  • «ПутьКДанным” (путь к полю выборки запроса) (пример: «Номенклатура”, «ДокументПродажи.Организация”…)

и, если группировка строится по справочнику, то еще

  • «ТипИзмерения” (один из вариантов фильтра по значениям поля: иерархия (элементы и группы), только иерархия (только группы) или элементы (только элементы)).

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

  • «Макет” – имя области в макете построителя отчета или отдельный макет, используемый при выводе группировки.
  • «МакетИерархии” – имя области в макете построителя отчета или отдельный макет, используемый при выводе иерархии группировки.
  • «МакетПодвала” – имя области в макете построителя или отдельный макет, используемый при выводе подвала группировки.
  • «МакетПодвалаИерархии” – имя области в макете построителя или отдельный макет, используемый при выводе подвала иерархии группировки.
  • «МакетыПодваловУровней” – массив макетов подвалов для различных уровней группировок.
  • «МакетыУровней” – массив макетов для различных уровней группировок.

Поле построителя отчета – это одно из выбранных полей. Основными реквизитами поля являются

Со списком группировок или полей можно выполнять ряд действий.

  • «Вставить()» – добавить группировку/поле в указанную позицию.
  • «Добавить()» – добавить группировку/поле в конец списка.
  • «Индекс()» – получить индекс группировки/поля в списке.
  • «Количество()» – получить количество группировок/полей в списке.
  • «Найти()» – найти группировку/поле в списке по имени.
  • «Очистить()» – очистить список группировок/полей.
  • «Получить()» – получить группировку/поле по индексу.
  • «Сдвинуть()» – сдвинуть группировку/поле на указанное количество позиций.
  • «Удалить()» – удалить группировку/поле из списка.

Язык построителя

Построитель отчета имеет свой язык. Это обычный язык запросов, дополненный конструкциями «{…}”. С помощью этих конструкций можно отказаться от метода «ЗаполнитьНастройки()” и настроить построитель отчета в тексте запроса.
Таким образом можно настроить элементы «ВЫБРАТЬ”, «ГДЕ”, «УПОРЯДОЧИТЬ ПО”, «ИТОГИ ПО”, а также сделать еще несколько интересных вещей. В этом случае основной текст запроса построителя будет являться настройками по умолчанию, в то время как конструкции {…} будут описывать доступные настройки.

Если поле выборки позволяет получить что-то через точку, то можно указать «.*” после поля, тогда пользователь сможет выбирать реквизиты поля. Например, «Номенклатура.*” позволяет сделать сортировку по «Номенклатура.Код” или отбор по «Номенклатура.Услуга”. А вот «Количество.*” смысла не имеет, так как поле «Количество” реквизитов не имеет, а, значит, достаточно указать просто «Количество”.

Поля, указанные в конструкции «ВЫБРАТЬ”, ограничивают список полей, доступных пользователю.
Поля, указанные в конструкции «ГДЕ”, ограничивают список полей, которые можно использовать в фильтре.
Поля, указанные в конструкции «УПОРЯДОЧИТЬ ПО”, ограничивают список полей для сортировки.
Поля, указанные в конструкции «ИТОГИ ПО”, ограничивают список полей для группировки итогов.

А теперь интересные вещи.

Во-первых, в основном тексте запроса можно в параметрах источников также использовать конструкции {…}. К примеру, если вместо
|ИЗ
| РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&ДатаОкончания)
указать
|ИЗ
| РегистрНакопления.ОстаткиТоваровКомпании.Остатки({&ДатаОкончания})
то в этом случае можно будет задать фильтр по полю «ДатаОкончания”.

При этом, в первом случае обязательно требуется установить параметр построителя отчета «ДатаОкончания”, во втором же случае этого не требуется, кроме того, если отбор по полю «ДатаОкончания” не будет задан, то этот параметр таблицы «РегистрНакопления.ОстаткиТоваровКомпании.Остатки” вообще не будет учитываться.

Во-вторых, источники в тексте запроса можно помечать как необязательные, помещая их в конструкцию «{…}”. К примеру, если составить такой текст запроса

|ВЫБРАТЬ
| ОстаткиТоваровКомпанииОстатки.Номенклатура КАК Номенклатура,
| ОстаткиТоваровКомпанииОстатки.КоличествоОстаток КАК Количество,
| ПартииТоваровКомпанииОстатки.КоличествоОстаток КАК КоличествоПоПартиям
|
|{ВЫБРАТЬ
| ОстаткиТоваровКомпанииОстатки.Номенклатура КАК Номенклатура,
| ОстаткиТоваровКомпанииОстатки.КоличествоОстаток КАК Количество,
| ПартииТоваровКомпанииОстатки.КоличествоОстаток КАК КоличествоПоПартиям}
|
|ИЗ
| РегистрНакопления.ОстаткиТоваровКомпании.Остатки КАК ОстаткиТоваровКомпанииОстатки
| {ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки
| ПО ОстаткиТоваровКомпанииОстатки.Номенклатура = ПартииТоваровКомпанииОстатки.Номенклатура}
|
|ИТОГИ СУММА(Количество), СУММА(КоличествоПоПартиям) ПО
| ОБЩИЕ,
| Номенклатура

то левое соединение по регистру партий будет выполняться только в том случае, если в списке выбранных полей будет присутствовать поле «КоличествоПоПартиям”.

В-третьих, в параметрах источников можно указать, что в случае задания фильтров по возможности применять их не к результату выполнения запроса с помощью элемента «ГДЕ”, а к самому источнику. Таким образом, вместо
| РегистрНакопления.ОстаткиТоваровКомпании.Остатки()

имеет смысл писать

Ну и, в-четвертых, самое вкусное, на мой взгляд. В случае указания в источнике параметра «Периодичность” (для таблиц, позволяющих получать обороты) его также можно задать как «{…}”, и, в результате небольшой манипуляции с текстом запроса построителя мы можем использовать группировки по периодам.

Пример: |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ПартииТоваровКомпанииОбороты.Номенклатура, | СУММА(ПартииТоваровКомпанииОбороты.СтоимостьПриход) КАК СтоимостьПриход, | СУММА(ПартииТоваровКомпанииОбороты.СтоимостьРасход) КАК СтоимостьРасход | |ИЗ | РегистрНакопления.ПартииТоваровКомпании.Обороты(, , {&Периодичность}, | {Номенклатура.*}) КАК ПартииТоваровКомпанииОбороты | |СГРУППИРОВАТЬ ПО | ПартииТоваровКомпанииОбороты.Номенклатура | |ИТОГИ СУММА(СтоимостьПриход), СУММА(СтоимостьРасход) ПО | ОБЩИЕ, | Номенклатура | |{ВЫБРАТЬ | ПартииТоваровКомпанииОбороты.Номенклатура.*, | Регистратор.*, | НачалоПериода(Период, День) КАК ПериодДень, | НачалоПериода(Период, Неделя) КАК ПериодНеделя, | НачалоПериода(Период, Декада) КАК ПериодДекада, | НачалоПериода(Период, Месяц) КАК ПериодМесяц, | НачалоПериода(Период, Квартал) КАК ПериодКвартал, | НачалоПериода(Период, Полугодие) КАК ПериодПолугодие, | НачалоПериода(Период, Год) КАК ПериодГод, | СУММА(ПартииТоваровКомпанииОбороты.СтоимостьПриход) КАК СтоимостьПриход, | СУММА(ПартииТоваровКомпанииОбороты.СтоимостьРасход) КАК СтоимостьРасход} | |{УПОРЯДОЧИТЬ ПО | ПартииТоваровКомпанииОбороты.Номенклатура.*, | Регистратор.*, | СтоимостьПриход, | СтоимостьРасход} | |{ГДЕ | ПартииТоваровКомпанииОбороты.Номенклатура.*, | Регистратор.*, | СУММА(ПартииТоваровКомпанииОбороты.СтоимостьПриход) КАК СтоимостьПриход, | СУММА(ПартииТоваровКомпанииОбороты.СтоимостьРасход) КАК СтоимостьРасход} | |{ИТОГИ ПО | Номенклатура.*, | Регистратор.*, | НачалоПериода(Период, День) КАК ПериодДень, | НачалоПериода(Период, Неделя) КАК ПериодНеделя, | НачалоПериода(Период, Декада) КАК ПериодДекада, | НачалоПериода(Период, Месяц) КАК ПериодМесяц, | НачалоПериода(Период, Квартал) КАК ПериодКвартал, | НачалоПериода(Период, Полугодие) КАК ПериодПолугодие, | НачалоПериода(Период, Год) КАК ПериодГод}

Есть один нюанс, для того, чтобы группировка по периодам работала, необходимо добавить фильтр по параметру «Периодичность”. Чтобы не делать это вручную, для удобства можно перед выполнением построителя отчета программно его добавлять, а после выполнения удалять, чтобы он не смущал, так как с точки зрения здравого смысла понять такой фильтр невозможно. Делается это примерно так

Если ПостроительОтчета.ДоступныеПоля.Найти(«Периодичность») <> Неопределено Тогда Периодичность = Неопределено; Если ПостроительОтчета.ИзмеренияСтроки.Найти(«ПериодГод») <> Неопределено ИЛИ ПостроительОтчета.ИзмеренияКолонки.Найти(«ПериодГод») <> Неопределено Тогда Периодичность = 9; КонецЕсли; Если ПостроительОтчета.ИзмеренияСтроки.Найти(«ПериодПолугодие») <> Неопределено ИЛИ ПостроительОтчета.ИзмеренияКолонки.Найти(«ПериодПолугодие») <> Неопределено Тогда Периодичность = 8; КонецЕсли; Если ПостроительОтчета.ИзмеренияСтроки.Найти(«ПериодКвартал») <> Неопределено ИЛИ ПостроительОтчета.ИзмеренияКолонки.Найти(«ПериодКвартал») <> Неопределено Тогда Периодичность = 7; КонецЕсли; Если ПостроительОтчета.ИзмеренияСтроки.Найти(«ПериодМесяц») <> Неопределено ИЛИ ПостроительОтчета.ИзмеренияКолонки.Найти(«ПериодМесяц») <> Неопределено Тогда Периодичность = 6; КонецЕсли; Если ПостроительОтчета.ИзмеренияСтроки.Найти(«ПериодДекада») <> Неопределено ИЛИ ПостроительОтчета.ИзмеренияКолонки.Найти(«ПериодДекада») <> Неопределено Тогда Периодичность = 5; КонецЕсли; Если ПостроительОтчета.ИзмеренияСтроки.Найти(«ПериодНеделя») <> Неопределено ИЛИ ПостроительОтчета.ИзмеренияКолонки.Найти(«ПериодНеделя») <> Неопределено Тогда Периодичность = 4; КонецЕсли; Если ПостроительОтчета.ИзмеренияСтроки.Найти(«ПериодДень») <> Неопределено ИЛИ ПостроительОтчета.ИзмеренияКолонки.Найти(«ПериодДень») <> Неопределено Тогда Периодичность = 3; КонецЕсли; Если ПостроительОтчета.ИзмеренияСтроки.Найти(«Регистратор») <> Неопределено ИЛИ ПостроительОтчета.ИзмеренияКолонки.Найти(«Регистратор») <> Неопределено ИЛИ ПостроительОтчета.ВыбранныеПоля.Найти(«Регистратор») <> Неопределено Тогда Периодичность = 2; КонецЕсли; Если Периодичность <> Неопределено Тогда ПолеОтбораПоПериодичности = ПостроительОтчета.Отбор.Добавить(«Периодичность»); ПолеОтбораПоПериодичности.Значение = Периодичность; ПолеОтбораПоПериодичности.Использование = Истина; КонецЕсли; КонецЕсли; Построитель.Выполнить(); Если ПолеОтбораПоПериодичности <> Неопределено Тогда ПостроительОтчета.Отбор.Удалить(ПостроительОтчета.Отбор.Индекс(ПолеОтбораПоПериодичности)); КонецЕсли;

Пользовательская настройка построителя

Для того, чтобы дать пользователю возможность изменить список группировок, фильтр, выбранные поля или сортировку, достаточно создать реквизит отчета «Построитель” и разместить на форме отчета табличное поле и указать ему в качестве источника данных «Построитель.ИзмеренияСтроки”, «Построитель.ИзмеренияКолонки”, «Построитель.Отбор”, «Построитель.ВыбранныеПоля” или «Построитель.Порядок”.

Кроме того, можно также в качестве источника данных указать «Построитель.ДоступныеПоля” и, таким образом, во-первых видеть список доступных полей, а, во-вторых с помощью контекстного меню добавлять поля в группировки, отбор, выбранные поля или фильтр.

Одна из самых важных областей бизнес-софта – это отчетность. От того, насколько легко настроить под меняющиеся потребности бизнеса (и законодательства) существующий отчет или сделать новый, может зависеть (причем не в переносном смысле!) судьба бизнеса, будь то отчет для налоговой инспекции или диаграмма зависимости спроса на товары от сезона и других факторов. Мощная и гибкая система отчетности, позволяющая легко извлечь из системы нужные данные, представить их в доступном для понимания виде, позволяющая конечному пользователю перенастроить стандартный отчет так, чтобы увидеть данные в новом свете – это идеал, к которому должна стремиться каждая бизнес-система.
В платформе «1С:Предприятие» за построение отчётов отвечает механизм под названием «Система компоновки данных» (сокращенно СКД). В этой статье мы постараемся дать краткое описание идеи и архитектуры механизма СКД и его возможностей.

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

Немного истории

В самой первой версии платформы «1С:Предприятие 8», версии 8.0, отчеты делались так:

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

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

Постановка задачи

Задача перед командой разработки стояла такая – сделать систему создания отчетов, основанную не на алгоритмическом (т.е. через написание кода), а на декларативном подходе к созданию отчетов. И мы считаем, что задачу успешно решили. По нашему опыту, около 80% требуемой отчетности может быть реализована с помощью СКД без единой строчки кода (за исключением написания формул вычисляемых полей), по большей части — через визуальные настройки.
Разработка первой версии СКД заняла около 5 человеко-лет.

Два языка

В создании отчетов задействованы два языка. Один – язык запросов, используемый для выборки данных. Второй – язык выражений компоновки данных, предназначен для записи выражений, используемых в различных частях системы, например, в настройках компоновки данных, для описания выражений пользовательских полей.

Язык запросов

Язык запросов основан на SQL и легко осваивается знающими SQL. Пример запроса:

Легко видеть аналоги стандартных для SQL-запроса секций — SELECT, FROM, GROUP BY, ORDER BY.
При этом язык запросов содержит значительное количество расширений, ориентированных на отражение специфики финансово-экономических задач и на максимальное сокращение усилий по разработке прикладных решений:

  • Обращение к полям через точку. Если поля какой-либо таблицы имеют ссылочный тип (хранят ссылки на объекты другой таблицы), разработчик может в тексте запроса ссылаться на них через «.», при этом количество уровней вложенности таких ссылок система не ограничивает (например, ЗаказКлиента.Соглашение.Организация.Телефон).
  • Многомерное и многоуровневое формирование итогов. Итоги и подитоги формируются с учетом группировки и иерархии, обход уровней может выполняться в произвольном порядке с подведением подитогов, обеспечивается корректное построение итогов по временным измерениям.
  • Поддержка виртуальных таблиц. Виртуальные таблицы, предоставляемые системой, позволяют получить практически готовые данные для большинства прикладных задач без необходимости составления сложных запросов. Так, виртуальная таблица может предоставить данные по остаткам товаров в разрезе периодов на какой-то момент времени. При этом виртуальные таблицы максимально используют хранимую информацию, например, ранее рассчитанные итоги и т.д.
  • Временные таблицы. Язык запросов позволяет использовать в запросах временные таблицы. С их помощью можно повысить производительность запросов, в некоторых случаях снизить количество блокировок и сделать текст запроса более легким для восприятия.
  • Пакетные запросы. Для более удобной работы с временными таблицами в языке запросов поддерживается работа с пакетными запросами — таким образом, создание временной таблицы и ее использование помещаются в один запрос. Пакетный запрос представляет собой последовательность запросов, разделенных точкой с запятой («;»). Запросы в пакете исполняются один за другим. Результатом выполнения пакетного запроса, в зависимости от используемого метода, будет являться либо результат, возвращаемый последним запросом пакета, либо массив результатов всех запросов пакета в той последовательности, в которой следуют запросы в пакете.
  • Получение представлений ссылочных полей. Каждая объектная таблица (в которой хранится справочник или документ) имеет виртуальное поле — «Представление». Это поле содержит текстовое представление объекта и облегчает работу создателя отчетов. Так, для документа это поле содержит всю ключевую информацию — название типа документа, его номер и дату (например, «Продажа 000000003 от 06.07.2017 17:49:14»), избавляя разработчика от написания вычисляемого поля.
  • и др.

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

  • ВЫБРАТЬ. В этом предложении описываются поля, которые пользователь сможет выбирать для вывода. После данного ключевого слова через запятую перечисляются псевдонимы полей из основного списка выборки запроса, которые будут доступными для настройки. Пример: {ВЫБРАТЬ Номенклатура, Склад}
  • ГДЕ. Описываются поля, на которые пользователь сможет накладывать отбор. В данном предложении используются поля таблиц. Использование псевдонимов полей списка выборки недопустимо. Каждая часть объединения может содержать собственный элемент ГДЕ. Примеры: {ГДЕ Номенклатура.*, Склад }, {ГДЕ Документ.Дата >= &ДатаНачала, Документ.Дата <= &ДатаКонца}
  • и др.

Пример использования расширений:

Язык выражений компоновки данных

Язык выражений компоновки данных предназначен для записи выражений, используемых, в частности, для описания выражений пользовательских полей. СКД позволяет определять в отчете пользовательские поля, используя либо собственные выражения, либо наборы вариантов с условиями их выбора (аналог CASE в SQL). Пользовательские поля являются аналогом вычисляемых полей. Они могут задаваться как в конфигураторе, так и в режиме «1С:Предприятие», но в выражениях пользовательских полей нельзя использовать функции общих модулей. Поэтому пользовательские поля предназначены скорее для пользователя, чем для разработчика.
Пример:

Процесс создания отчета на СКД

При создании отчета нам нужно создать макет, определяющий, как данные будут отображаться в отчете. Можно создать макет, базирующийся на схеме компоновки данных. Схема компоновки данных описывает суть данных, которые предоставляются отчету (откуда получать данные и как можно управлять их компоновкой). Схема компоновки данных представляет собой базу, на основе которой могут быть сформированы всевозможные отчеты. Схема компоновки данных может содержать:

  • текст запроса с инструкциями системы компоновки данных;
  • описание нескольких наборов данных;
  • подробное описание доступных полей;
  • описание связей между несколькими наборами данных;
  • описание параметров получения данных;
  • описание макетов полей и группировок;
  • и др.


Например, можно в качестве набора данных добавить в схему компоновки данных запрос, и вызвать конструктор запроса, позволяющий в графическом виде составить запрос произвольной сложности:
Итогом запуска конструктора запросов будет текст запроса (на языке запросов «1С:Предприятия»). Этот текст можно при необходимости скорректировать вручную:
Наборов данных в схеме компоновки данных может быть несколько, наборы данных могут быть связаны в макете произвольным образом, могут быть добавлены вычисляемые поля, заданы параметры отчета и т.п. Стоит упомянуть интересную особенность работы механизма запросов в 1С:Предприятии. Запросы в конечном итоге транслируются в диалект SQL, специфичный для СУБД, с которой непосредственно работает приложение. Мы вообще стараемся задействовать возможности серверов СУБД по максимуму (нас ограничивает то, что мы используем только те возможности, которые есть одновременно во всех поддерживаемых платформой «1С:Предприятие» СУБД – MS SQL, Oracle, IBM DB2, PostgreSQL). Таким образом, на уровне запроса в вычисляемых полях мы можем использовать только те функции, которые транслируются в SQL.
А вот на уровне схемы компоновки данных мы уже можем добавлять пользовательские поля и использовать в них функции на встроенном языке разработки 1С (в том числе и написанные нами), что сильно расширяет возможности отчетов. Технически это выглядит так – всё, что можно транслировать в SQL, транслируется в SQL, запрос выполняется на уровне СУБД, результаты запроса помещаются в память сервера приложений 1С и СКД вычисляет для каждой записи значения вычисляемых полей, чьи формулы написаны на языке 1С.
Добавление пользовательских полей
В отчет можно добавить произвольное количество таблиц и диаграмм:
Дизайнер отчетов
Отчет во время выполнения
С помощью СКД пользователь может добавлять в отчет сложные отборы (которые будут добавлены к запросу в нужных местах), условное оформление (позволяющее по-разному форматировать – шрифтом, цветом и т.д. – выводимые поля в зависимости от их значений) и многое другое.
Коротко описать процесс построения и формирования отчета можно так:

  • Разработчик в design time с помощью дизайнера (или в runtime с помощью кода) определяет схему компоновки данных:
    • Текст запроса/запросов
    • Описание вычисляемых полей
    • Связи между запросами (если их несколько)
    • Параметры отчета
    • Настройки по умолчанию
    • И т.д.
  • Вышеописанные настройки сохраняются в макете
  • Пользователь открывает отчет
    • Возможно, делает дополнительные настройки (например, меняет значения параметров)
    • Нажимает кнопку «Сформировать»
  • Настройки пользователя применяются к схеме компоновки данных, определенной разработчиком.
  • Формируется промежуточный макет компоновки данных, содержащий в себе инструкции, откуда получать данные. В частности, корректируются запросы, заданные в макете. Так, из запроса удаляются поля, которые не используются в отчете (это делается с целью минимизировать объем получаемых данных). В запрос добавляются все поля, участвующие в формулах вычисляемых полей.
  • В дело включается процессор компоновки данных. Процессор компоновки выполняет запросы, осуществляет связь наборов данных, рассчитывает значения вычисляемых полей и ресурсов, выполняет группировку. Словом, делает все расчеты, которые не были выполнены на уровне СУБД.
  • Процессор вывода данных запускает запрос на исполнение и выводит полученные данные в табличный документ, диаграмму и т.п.

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

Пользовательские настройки

Весь инструментарий СКД доступен как разработчику, так и конечному пользователю. Но практика показала, что конечного пользователя часто пугает обилие возможностей инструмента. Тем более что в большинстве случаев вся мощь настроек конечному пользователю и не нужна – ему достаточно иметь быстрый доступ к настройке одного-двух параметров отчета (например, периода и контрагента). Начиная с определенной версии платформы у разработчика отчета появилась возможность отметить, какие настройки отчета доступны пользователю. Делается это с помощью флажка «Включать в пользовательские настройки». Также у настроек отчета появился флаг «Режим отображения», принимающий одно из трех значений:

  • Быстрый доступ. Настройка будет выведена непосредственно в верхнюю часть окна отчета.
  • Обычный. Настройка будет доступна через кнопку «Настройки».
  • Недоступный. Настройка будет недоступна конечному пользователю.

Режим отображения настройки в design time
Отображение настройки в режиме «Быстрый доступ» во время выполнения (под кнопкой «Сформировать»)

Планы развития

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

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

Подробнее смотрите в онлайн-курсе: «Бухгалтерский и налоговый учет в 1С:Бухгалтерия 8 ред. 3 от А до Я»

Где найти Универсальный отчет в 1С 8.3

Например, в программе 1С 8.3 Бухгалтерия 3.0 он находится в меню Отчеты — разделе Стандартные отчеты — ссылка Универсальный отчет.

Также он доступен и в пункте меню Администрирование — Печатные формы, отчеты и обработки.

Рассмотрим, какую информацию мы можем получить с помощью Универсального отчета в 1С 8.3.

Инструкция по настройке и использованию Универсального отчета 1С

Кроме выбора периода в нем есть еще некоторые настройки, в которых мы сейчас разберемся.

Для начала выбираем Вид объекта, по которому мы хотим сформировать отчет. Далее уже можно будет детализировать и выполнить дополнительную настройку.

Универсальный отчет по виду документов

Например, при выборе вида объекта Документ, будет предложено выбрать наименование документа и указать какую информацию мы хотим получить. Выберем для примера документ Начисление зарплаты.

Далее в поле укажем, что мы хотим получить информацию о начисленном НДФЛ.

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

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

При большом объеме информации данные отчета можно сгруппировать или установить отбор, например по подразделению (вкладка Отборы, кнопка Добавить отбор).

Отчет готов и выглядит более компактно.

При установке отбора, мы можем установить настройку Показывать – В шапке отчета.

После нажатия кнопки Закрыть и сформировать в шапке настройки отчета у нас появится поле отбора по Подразделению.

Универсальный отчет по справочникам

Сформируем отчет для отражения информации Справочников.

Предположим, нам нужно получить информацию об адресах всех работающих сотрудников и даты их рождения.

Выберем Вид объекта — Справочник и установим значение Сотрудники.

Далее выбираем, какие значения нам нужны для отчета Основные данные или Дополнительные реквизиты. В нашем примере, выбираем Основные данные.

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

При определении структуры отчета на вкладке Состав группировки задаем поля нашего отчета с помощью кнопки Добавить.

У нас должна получиться вот такая строка с данными.

Также мы можем установить Отбор, с помощью кнопки Добавить отбор, например сотрудников, которые не находятся в архиве, соответственно, это работающие сотрудники.

Нажав кнопку Закрыть и сформировать, получаем вот такой отчет.

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

Для задания параметров оформления отчета в настройке есть вкладка Оформление, где можно изменить шрифт отчета, размер, цвет, ширину линий и другие параметры.

При этом на вкладке Оформляемые поля необходимо их указать.

Наш отчет стал выглядеть вот так.

Универсальный отчет по регистрам накопления

Множество вариантов Универсального отчета в 1С 8.3 можно сформировать и по регистрам накопления.

Для этого, указав нужный регистр, можно произвести настройку отчета — кнопка Настройки. С помощью кнопки Добавить задаем нужные поля.

Для примера сформируем отчет по предоставленным вычетам НДФЛ, с указанием месяца налогового периода, кода вычета и выделением документов, которыми был предоставлен вычет (поле Регистратор).

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

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

Реквизит Сумма выделен на вкладке Поля и сортировка.

Нажимаем Закрыть и сформировать и получаем отчет немного другого вида, где данные по месяцам мы можем свернуть в группы.

Если мы захотим изменить группировку, объединив данные по физическому лицу, то верхняя строка структуры должна быть закреплена – Физическое лицо. И далее мы также указываем необходимые поля для детализации. В нашем примере – Месяц налогового периода, Регистратор, Код вычета.

В результате получается вот такой отчет, где как видно данные сгруппированы по Физическому лицу. С помощью кнопок +- мы можем сворачивать и разворачивать наши данные. При этом итоги по сумме строк отображаются по строке группировки – по Физическому лицу.

Универсальный отчет по регистрам сведений

Примером отчета, сформированного по регистрам сведений могут быть данные о лицевых счетах сотрудников.

Настройка отчета выполняется аналогично описанному выше.

Используя кнопку Настройки, при необходимости мы можем добавить необходимые поля на вкладках Поля и сортировки, Структура для вывода информации в отчет — Сотрудник, Зарплатный проект и Номер лицевого счета.

Универсальный отчет по регистрам бухгалтерии

Универсальный отчет в 1С по регистрам бухгалтерии по составу отражаемой информации напоминает карточку счета.

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

Предположим, мы хотим сформировать отчет по счету 62.01 «Расчеты с покупателями и заказчиками», отражающий движение в разрезе документов.

Для этого на вкладке Отборы установим отбор Счет Дт — Равно 62.01.

В отчете при отборе необходимо выбирать конечный субсчет счета, иначе отчет сформируется пустым.

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

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

На вкладке Структура мы задаем желаемые поля нашего отчета. В данном варианте отчета, значение показателя будет зависеть от выбранного счета. Указав в качестве группируемых полей Суконто1 Дт, Субконто2 Дт, мы получим отчет в разрезе субконто, какие они – зависит от счета.

Так, у счета 62.01 Субконто 1 – Контрагент, Субконто 2 – Договор. Нажав кнопку Закрыть и сформировать, получаем отчет по контрагентам, с указанием договоров и сумм по этим договорам в порядке возрастания.

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

Группируемые поля будут выглядеть следующим образом.

В результате мы получаем отчет.

Добавив элементы группировки, можем задавать более сложную структуру отчета, которая с другой стороны, облегчит нам анализ данных. Например, добавив группировку — в разрезе организаций.

В результате наш отчет сформирован в разрезе организаций (в нашем примере она одна).

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

В обновленной версии программы 1С 8.3 появилась возможность сформировать отчет по Планам видов расчетов, выбрав показатели — Начисления или Удержания.

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

Например, сформируем отчет по начислениям, с отбором данных по коду НДФЛ.

Нажав кнопку Настройка, отметим необходимые поля и для удобства отображения данных, установим сортировку их по коду (перенеся показатель для сортировки в правое окно, с помощью голубой стрелки вправо).

На вкладке Структура мы ничего не задаем, поэтому там должна остаться группировка Детальные записи (но не пустая строка).

Сформировав отчет, получаем вот такие данные. Из него видим, по каким кодам у нас проходили начисления в программе.

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

Также отчет можно сохранить в различных форматах (Excel, PDF и др.).

Такой отчет доступен практически во всех конфигурациях 1С.

См. также:

  • Дополнительные реквизиты и дополнительные сведения в 1С
  • Как выгрузить документ, отчет из 1С 8.3 в Excel
  • Выгрузка в 1С из xml: как выгрузить данные из 1С 8.3 и загрузить в 1С 8.3
  • Групповое перепроведение документов в 1С 8.3 Бухгалтерия 3.0
  • Групповая обработка справочников и документов в 1С 8.3
  • Как удалить помеченные на удаление документы в 1С 8.3
  • Сбилась нумерация документов в 1С 8.3: как исправить

Если Вы являетесь подписчиком системы «БухЭксперт8: Рубрикатор 1С Бухгалтерия», тогда читайте дополнительный материал по теме:

  • Помощник бухгалтера – Универсальный отчет
  • Выгрузка и загрузка настроек Универсального отчета
  • Отчет по покупкам в разрезе поставщиков и товаров
  • Отчет по продажам в разрезе покупателей и товаров

Если Вы еще не подписаны:

Активировать демо-доступ бесплатно →

или

Оформить подписку на Рубрикатор →

После оформления подписки вам станут доступны все материалы по 1С Бухгалтерия, записи поддерживающих эфиров и вы сможете задавать любые вопросы по 1С.

Помогла статья?

Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно

Урок 4. Объединение запросов 1с при помощи конструктора

Таблицы и поля; Условия; Связи; Объединения / Псевдонимы; Группировка; Виртуальные таблицы.

Задача: выбрать запросом все проведенные документы Поступление товаров и услуг и Возврат товаров поставщику за указанный период.

Новые вкладки: Объединения/Псевдонимы.

Теоретическая часть урока №4

Конструктор запросов 1с позволяет создавать объединения запросов. При их помощи можно последовательно выводить в результат данные, полученные из нескольких запросов, не используя при этом связи. Единственной условие для объединения — одинаковый набор полей в каждом отдельном запросе.

В конструкторе перейдем на вкладку Объединения/Псевдонимы. Она предназначена для создания объединений запросов и для задания псевдонимов для полей запроса. Псевдонимы полей нужны, если вас не устраивают стандартные имена полей базы данных. Если поле запроса состоит только из поля таблицы базы данных, то псевдоним для него не обязателен. Если же при создании поля вы использовали функции языка запросов, то псевдоним для такого поля обязателен. Для таких полей конструктор запросов создает стандартные псевдонимы Поле1…ПолеN, эти псевдонимы можно заменить на те, которые удобны для вас.

Рассмотрим разделы вкладки Объединения /Псевдонимы:

  • Запросы (красная рамка). В данном разделе расположена таблица, в которой показаны все объединенные запросы, при помощи меню расположенного над данным разделом можно добавлять новые, копировать существующие и удалять выделенные, а также менять их местами. При добавлении или копировании запроса, конструктор переходит на вкладку Таблицы и поля, где можно задать таблицы базы данных и нужные поля для нового запроса. Переключаться между запросами можно при помощи вкладок, которые будут появляться с правой стороны конструктора, по мере добавления новых запросов 1с;

  • В таблице Запросы две колонки:
    • Имя. Задается автоматически в формате Запрос 1 … Запрос N;
    • Без дубликатов. Устанавливается в случае, если необходимо исключить повторяющиеся строки при объединении с предыдущим запросом. Стоит отметить, что данный флаг будет действовать только на объединение запроса в котором он установлен с предыдущим запросом.

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

Практическая часть урока №4

Разберем решение задачи, приведенной в начале урока. Напомню условия:

Задача: выбрать запросом все проведенные документы Поступление товаров и услуг и Возврат товаров поставщику за указанный период.

  1. Создадим новый запрос;
  2. Запустим конструктор запросов;
  3. Выберем таблицу ПоступлениеТоваровУслуг из ветки Документы;
  4. Из таблицы ПоступлениеТоваровУслуг выберем поле Ссылка;
  5. Перейдем на вкладку Условия;
  6. В разделе Поля, раскроем ветку ПоступлениеТоваровУслуг при помощи кнопки «+»;
  7. Найдем реквизит Дата и перетащим его в раздел условия, выберем оператор сравнения Между и укажем параметры начала и окончания периода, например НачалоПериода и ОкончаниеПериода;
  8. Перейдем на вкладку Объединения / Псевдонимы.
  9. Добавим новый запрос, флаг Без дубликатов поднимать не нужно, так как мы используем разные типы документов;
  10. Конструктор запросов 1с автоматически перейдет на вкладку Таблицы и поля. В правой части окна будет видно, что активен второй запрос объединения;
  11. Повторим пункты 1 — 7, для таблицы ВозвратТоваровПоставщику;
  12. Снова перейдем на вкладку Объединения / Псевдонимы. В таблице псевдонимов видно, что поля Ссылка обоих таблиц стоят в одной строке, а значит ссылки на оба документа будут находится в результате запроса в одной колонке;
  13. Сменим имя колонки с Ссылка на Документ (зададим псевдоним поля). Для этого дважды щелкнем левой кнопкой мыши по имени поля. После чего можно задать свое имя, впишем туда Документ;
  14. Запрос готов, нажимаем кнопку «ОК» в нижней части окна конструктора.

В итоге у нас получится запрос со следующим текстом:

Запрос = Новый Запрос; Запрос.УстановитьПараметр(«НачалоПерида», НачалоПерида); Запрос.УстановитьПараметр(«ОкончаниеПериода», ОкончаниеПериода); Запрос.Текст = «ВЫБРАТЬ | ПоступлениеТоваровУслуг.Ссылка КАК Документ |ИЗ | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг |ГДЕ | ПоступлениеТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &ОкончаниеПериода | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | ВозвратТоваровПоставщику.Ссылка |ИЗ | Документ.ВозвратТоваровПоставщику КАК ВозвратТоваровПоставщику |ГДЕ | ВозвратТоваровПоставщику.Дата МЕЖДУ &НачалоПериода И &ОкончаниеПериода»;

Если у вас в запросе используются параметры, не забывайте передавать их туда при помощи метода УстановитьПараметр(<ИмяПараметра> , <ЗначениеПараметра>).

Также прочтите статьи о языке запросов 1с 8:

  • Язык запросов 1с — структура оператора Выбрать
  • Программная работа с запросами 1с 8

<< Пред. страница | След.Страница >>

Add a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *