Основы разработки прикладных решений для 1С:Предприятие 8.1

Отчеты

Разбить на страницы
Показывать лекцию целиком

Цель лекции: освоить технологию разработки отчетов.

8.1. Создание отчета

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

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

Создадим новый объект .

(рис 8.1) Начало создания отчета

Нажмем на кнопку ), внешне напоминающее окно Конструктора запросов, но с дополнительными вкладками. Основная задача, которая сейчас стоит перед нами - создать с помощью Конструктора запрос, который будет получать нужные нам данные.

(рис 8.2) Создание запроса

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

Мы отобрали следующие поля виртуальной таблицы:

  • ЦентрОтветственности;
  • Номенклатура;
  • КоличествоОстаток.
  • Напомним, нам нужны условия, которые позволят отобрать остатки:

  • На определенную дату;
  • По заданному материально ответственному лицу.
  • Для того, чтобы задать параметры виртуальной таблицы, выделим ее в области .

    (рис 8.3) Окно настройки параметров виртуальной таблицы

    В поле Период введем следующий текст: Дата. Дата - это имя параметра, который будет устанавливать пользователь перед выполнением запроса.

    В поле ) введем следующий текст:

    ЦентрОтветственности = Ответственный

    (рис 8.4) Ввод произвольного выражения для поля Условие

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

    Вот как, в итоге, выглядит окно настройки параметров виртуальной таблицы, рис 8.5.

    (рис 8.5) Окно настройки параметров виртуальной таблицы

    Нажмем кнопку ОК, если все введено верно - система не выдаст никаких предупреждающих сообщений и можно будет переходить к дальнейшей работе над запросом.

    Обратите внимание на вычисляемые функции (f(x) ПРЕДСТАВЛЕНИЕ…), которые автоматически добавляются в раздел Поля при добавлении туда полей, соответствующих измерениям регистра. Эти функции предназначены для получения строкового представления данных, они будут использоваться для вывода строковых представлений в отчет.

    Перейдем на вкладку .

    (рис 8.6) Конструктор выходной формы, вкладка Итоги

    На этой вкладке укажем в качестве группировочного поля ЦентрОтветственности. Это улучшает наглядность отчета, не приводя в каждой строке выводимых данных ФИО сотрудника и наименование подразделения, а выводя их лишь один раз.

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

    (рис 8.7) Конструктор выходной формы, вкладка Отчет

    Переместимся на вкладку . Параметру Дата установим тип Дата, параметру Ответственный - СправочникСсылка.Сотрудники. Это позволит нам выбирать дату из календаря, а сотрудника, по которому строится отчет, из справочника.

    (рис 8.8) Конструктор выходной формы, вкладка Выходная форма

    Работа с Конструктором завершена, нажмем на кнопку .

    (рис 8.9) Результаты работы Конструктора выходной формы

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

    Запрос формируется по нажатию на кнопку Сформировать.

    Конструктор, помимо визуальных элементов, генерирует программный код. Его можно найти в модуле выходной формы, рис 8.10.

    (рис 8.10) Процедуры, сгенерированные Конструктором выходной формы

    А именно, здесь мы видим две процедуры. Одна из них - ДействияФормыОстаткиМатериаловСформировать() - это обработчик события нажатия на кнопку. Вторая - ОстаткиМатериалов() отвечает за формирование отчета. Рассмотрим эти процедуры подробнее. Для начала - обработчик события.

    Процедура ДействияФормыОстаткиМатериаловСформировать(Кнопка)
    	ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
    	ОстаткиМатериалов(ТабДок, Дата, Ответственный);
    КонецПроцедуры

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

    Далее, мы вызываем процедуру ОстаткиМатериалов(), передавая ей в качестве параметров ссылку на поле табличного документа, а так же - два параметра, которые мы будем использовать при формировании отчета - это Дата и Ответственный. Эти параметры нужно предварительно задать в окне формы.

    Прежде чем рассматривать процедуру ОстаткиМатериалов(), сделаем в ней одно исправление. Оно будет касаться приведения даты, переданной в параметре Дата к концу дня. Дело в том, что если этого не сделать, то в отчет, скажем, за 6 мая, не попадут данные, сформированные документами за этот день.

    Приведение даты к концу дня можно выполнить с помощью функции КонецДня(). Эта функция возвращает дату и время конца дня для переданной даты.

    Найдите такую строку в процедуре ОстаткиМатериалов():

    Запрос.УстановитьПараметр("Дата", Дата);

    Отредактируйте ее, чтобы она стала выглядеть так:

    Запрос.УстановитьПараметр("Дата", КонецДня(Дата));

    Теперь, прежде чем приступить к разбору этой процедуры, давайте проверим, как работает созданный отчет в режиме 1С:Предприятие. Его можно найти в меню ).

    (рис 8.11) Отчет Остатки материалов

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

    (рис 8.12) Отчет Остатки материалов

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

    Процедура ОстаткиМатериалов(ТабДок, Дата, Ответственный) Экспорт
    	Макет = ОтчетОбъект.ПолучитьМакет("ОстаткиМатериалов");
    	Запрос = Новый Запрос;
    	Запрос.Текст = 
    	"ВЫБРАТЬ
    	|	ОстаткиМатериаловОстатки.ЦентрОтветственности КАК ЦентрОтветственности,
    	|	ПРЕДСТАВЛЕНИЕ(ОстаткиМатериаловОстатки.ЦентрОтветственности),
    	|	ОстаткиМатериаловОстатки.Номенклатура,
    	|	ПРЕДСТАВЛЕНИЕ(ОстаткиМатериаловОстатки.Номенклатура),
    	|	ОстаткиМатериаловОстатки.КоличествоОстаток
    	|ИЗ
    	|	РегистрНакопления.ОстаткиМатериалов.Остатки(Дата, ЦентрОтветственности = Ответственный) 
                                    КАК ОстаткиМатериаловОстатки
    	|ИТОГИ ПО
    	|	ЦентрОтветственности";
    
    	Запрос.УстановитьПараметр("Дата", КонецДня(Дата));
    	Запрос.УстановитьПараметр("Ответственный", Ответственный);
    
    	Результат = Запрос.Выполнить();
    
    	ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    	ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    	ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    	ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    	ОбластьЦентрОтветственности = Макет.ПолучитьОбласть("ЦентрОтветственности");
    	ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    
    	ТабДок.Очистить();
    	ТабДок.Вывести(ОбластьЗаголовок);
    	ТабДок.Вывести(ОбластьШапкаТаблицы);
    	ТабДок.НачатьАвтогруппировкуСтрок();
    
    	ВыборкаЦентрОтветственности = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    	Пока ВыборкаЦентрОтветственности.Следующий() Цикл
    		ОбластьЦентрОтветственности.Параметры.Заполнить(ВыборкаЦентрОтветственности);
    		ТабДок.Вывести(ОбластьЦентрОтветственности, ВыборкаЦентрОтветственности.Уровень());
    
    		ВыборкаДетали = ВыборкаЦентрОтветственности.Выбрать();
    
    		Пока ВыборкаДетали.Следующий() Цикл
    			ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
    			ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
    		КонецЦикла;
    	КонецЦикла;
    
    	ТабДок.ЗакончитьАвтогруппировкуСтрок();
    	ТабДок.Вывести(ОбластьПодвалТаблицы);
    	ТабДок.Вывести(ОбластьПодвал);
    
    КонецПроцедуры

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

    Обратите внимание на блок ИЗ в теле текста запроса:

    |ИЗ
    |	РегистрНакопления.ОстаткиМатериалов.Остатки(Дата, ЦентрОтветственности = Ответственный) КАК ОстаткиМатериаловОстатки

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

    Запрос.УстановитьПараметр("Дата", КонецДня(Дата));
    Запрос.УстановитьПараметр("Ответственный", Ответственный);

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

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

    Обратите внимание на следующие команды, одна из которых предшествует командам вывода данных в табличное поле, а другая находится после завершения вывода, но перед окончательным отображением таблицы:

    ТабДок.НачатьАвтогруппировкуСтрок();
    //Команды вывода данных в табличный документ
    ТабДок.ЗакончитьАвтогруппировкуСтрок();

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

    Уровень записи - это число, которое представляет собой уровень этой записи в иерархии и группировках.

    ВыборкаЦентрОтветственности = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

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

    Пока ВыборкаЦентрОтветственности.Следующий() Цикл

    Эта команда открывает цикл обхода выборки. Метод Следующий() возвращает Истина, если в выборке еще есть данные, первый его вызов позиционируется на первый элемент выборки. После того, как этот метод возвратит Ложь - это будет означать, что предыдущий вызов метода отработал для последней строки выборки. Первая строка выборки (за счет использования выше команды Выбрать(ОбходРезультатЗапроса.ПоГруппировкам) ) получает первую группировку - она представляет собой данные об ответственном сотруднике, по которому будут сгруппированы строки с информацией о номенклатуре.

    ОбластьЦентрОтветственности.Параметры.Заполнить(ВыборкаЦентрОтветственности);
    ТабДок.Вывести(ОбластьЦентрОтветственности, ВыборкаЦентрОтветственности.Уровень());

    С помощью этих команд заполняются параметры области ОбластьЦентрОтветственности, область выводится в табличный документ с использованием информации об уровне записи. В данном случае мы имеем дело с выводом группировки верхнего уровня, метод Уровень() возвращает 0.

    ВыборкаДетали = ВыборкаЦентрОтветственности.Выбрать();

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

    Пока ВыборкаДетали.Следующий() Цикл
    		ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
    		ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
    КонецЦикла;

    Этим внутренним циклом, который действует аналогично внешнему, мы заполняем те части отчета, которые имеют отношение к детальной выборке. Метод Уровень() в данном случае возвращает 1.

    8.2. Выводы

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

    Страницы:

    Цель лекции: освоить технологию разработки отчетов.

    8.1. Создание отчета

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

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

    Создадим новый объект .

    (рис 8.1) Начало создания отчета

    Нажмем на кнопку ), внешне напоминающее окно Конструктора запросов, но с дополнительными вкладками. Основная задача, которая сейчас стоит перед нами - создать с помощью Конструктора запрос, который будет получать нужные нам данные.

    (рис 8.2) Создание запроса

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

    Мы отобрали следующие поля виртуальной таблицы:

  • ЦентрОтветственности;
  • Номенклатура;
  • КоличествоОстаток.
  • Напомним, нам нужны условия, которые позволят отобрать остатки:

  • На определенную дату;
  • По заданному материально ответственному лицу.
  • Для того, чтобы задать параметры виртуальной таблицы, выделим ее в области .

    (рис 8.3) Окно настройки параметров виртуальной таблицы

    В поле Период введем следующий текст: Дата. Дата - это имя параметра, который будет устанавливать пользователь перед выполнением запроса.

    В поле ) введем следующий текст:

    ЦентрОтветственности = Ответственный

    (рис 8.4) Ввод произвольного выражения для поля Условие

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

    Вот как, в итоге, выглядит окно настройки параметров виртуальной таблицы, рис 8.5.

    (рис 8.5) Окно настройки параметров виртуальной таблицы

    Нажмем кнопку ОК, если все введено верно - система не выдаст никаких предупреждающих сообщений и можно будет переходить к дальнейшей работе над запросом.

    Обратите внимание на вычисляемые функции (f(x) ПРЕДСТАВЛЕНИЕ…), которые автоматически добавляются в раздел Поля при добавлении туда полей, соответствующих измерениям регистра. Эти функции предназначены для получения строкового представления данных, они будут использоваться для вывода строковых представлений в отчет.

    Перейдем на вкладку .

    (рис 8.6) Конструктор выходной формы, вкладка Итоги

    На этой вкладке укажем в качестве группировочного поля ЦентрОтветственности. Это улучшает наглядность отчета, не приводя в каждой строке выводимых данных ФИО сотрудника и наименование подразделения, а выводя их лишь один раз.

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

    (рис 8.7) Конструктор выходной формы, вкладка Отчет

    Переместимся на вкладку . Параметру Дата установим тип Дата, параметру Ответственный - СправочникСсылка.Сотрудники. Это позволит нам выбирать дату из календаря, а сотрудника, по которому строится отчет, из справочника.

    (рис 8.8) Конструктор выходной формы, вкладка Выходная форма

    Работа с Конструктором завершена, нажмем на кнопку .

    (рис 8.9) Результаты работы Конструктора выходной формы

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

    Запрос формируется по нажатию на кнопку Сформировать.

    Конструктор, помимо визуальных элементов, генерирует программный код. Его можно найти в модуле выходной формы, рис 8.10.

    (рис 8.10) Процедуры, сгенерированные Конструктором выходной формы

    А именно, здесь мы видим две процедуры. Одна из них - ДействияФормыОстаткиМатериаловСформировать() - это обработчик события нажатия на кнопку. Вторая - ОстаткиМатериалов() отвечает за формирование отчета. Рассмотрим эти процедуры подробнее. Для начала - обработчик события.

    Процедура ДействияФормыОстаткиМатериаловСформировать(Кнопка)
    	ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
    	ОстаткиМатериалов(ТабДок, Дата, Ответственный);
    КонецПроцедуры

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

    Далее, мы вызываем процедуру ОстаткиМатериалов(), передавая ей в качестве параметров ссылку на поле табличного документа, а так же - два параметра, которые мы будем использовать при формировании отчета - это Дата и Ответственный. Эти параметры нужно предварительно задать в окне формы.

    Прежде чем рассматривать процедуру ОстаткиМатериалов(), сделаем в ней одно исправление. Оно будет касаться приведения даты, переданной в параметре Дата к концу дня. Дело в том, что если этого не сделать, то в отчет, скажем, за 6 мая, не попадут данные, сформированные документами за этот день.

    Приведение даты к концу дня можно выполнить с помощью функции КонецДня(). Эта функция возвращает дату и время конца дня для переданной даты.

    Найдите такую строку в процедуре ОстаткиМатериалов():

    Запрос.УстановитьПараметр("Дата", Дата);

    Отредактируйте ее, чтобы она стала выглядеть так:

    Запрос.УстановитьПараметр("Дата", КонецДня(Дата));

    Теперь, прежде чем приступить к разбору этой процедуры, давайте проверим, как работает созданный отчет в режиме 1С:Предприятие. Его можно найти в меню ).

    (рис 8.11) Отчет Остатки материалов

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

    (рис 8.12) Отчет Остатки материалов

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

    Процедура ОстаткиМатериалов(ТабДок, Дата, Ответственный) Экспорт
    	Макет = ОтчетОбъект.ПолучитьМакет("ОстаткиМатериалов");
    	Запрос = Новый Запрос;
    	Запрос.Текст = 
    	"ВЫБРАТЬ
    	|	ОстаткиМатериаловОстатки.ЦентрОтветственности КАК ЦентрОтветственности,
    	|	ПРЕДСТАВЛЕНИЕ(ОстаткиМатериаловОстатки.ЦентрОтветственности),
    	|	ОстаткиМатериаловОстатки.Номенклатура,
    	|	ПРЕДСТАВЛЕНИЕ(ОстаткиМатериаловОстатки.Номенклатура),
    	|	ОстаткиМатериаловОстатки.КоличествоОстаток
    	|ИЗ
    	|	РегистрНакопления.ОстаткиМатериалов.Остатки(Дата, ЦентрОтветственности = Ответственный) 
                                    КАК ОстаткиМатериаловОстатки
    	|ИТОГИ ПО
    	|	ЦентрОтветственности";
    
    	Запрос.УстановитьПараметр("Дата", КонецДня(Дата));
    	Запрос.УстановитьПараметр("Ответственный", Ответственный);
    
    	Результат = Запрос.Выполнить();
    
    	ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    	ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
    	ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
    	ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
    	ОбластьЦентрОтветственности = Макет.ПолучитьОбласть("ЦентрОтветственности");
    	ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
    
    	ТабДок.Очистить();
    	ТабДок.Вывести(ОбластьЗаголовок);
    	ТабДок.Вывести(ОбластьШапкаТаблицы);
    	ТабДок.НачатьАвтогруппировкуСтрок();
    
    	ВыборкаЦентрОтветственности = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    	Пока ВыборкаЦентрОтветственности.Следующий() Цикл
    		ОбластьЦентрОтветственности.Параметры.Заполнить(ВыборкаЦентрОтветственности);
    		ТабДок.Вывести(ОбластьЦентрОтветственности, ВыборкаЦентрОтветственности.Уровень());
    
    		ВыборкаДетали = ВыборкаЦентрОтветственности.Выбрать();
    
    		Пока ВыборкаДетали.Следующий() Цикл
    			ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
    			ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
    		КонецЦикла;
    	КонецЦикла;
    
    	ТабДок.ЗакончитьАвтогруппировкуСтрок();
    	ТабДок.Вывести(ОбластьПодвалТаблицы);
    	ТабДок.Вывести(ОбластьПодвал);
    
    КонецПроцедуры

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

    Обратите внимание на блок ИЗ в теле текста запроса:

    |ИЗ
    |	РегистрНакопления.ОстаткиМатериалов.Остатки(Дата, ЦентрОтветственности = Ответственный) КАК ОстаткиМатериаловОстатки

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

    Запрос.УстановитьПараметр("Дата", КонецДня(Дата));
    Запрос.УстановитьПараметр("Ответственный", Ответственный);

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

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

    Обратите внимание на следующие команды, одна из которых предшествует командам вывода данных в табличное поле, а другая находится после завершения вывода, но перед окончательным отображением таблицы:

    ТабДок.НачатьАвтогруппировкуСтрок();
    //Команды вывода данных в табличный документ
    ТабДок.ЗакончитьАвтогруппировкуСтрок();

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

    Уровень записи - это число, которое представляет собой уровень этой записи в иерархии и группировках.

    ВыборкаЦентрОтветственности = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

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

    Пока ВыборкаЦентрОтветственности.Следующий() Цикл

    Эта команда открывает цикл обхода выборки. Метод Следующий() возвращает Истина, если в выборке еще есть данные, первый его вызов позиционируется на первый элемент выборки. После того, как этот метод возвратит Ложь - это будет означать, что предыдущий вызов метода отработал для последней строки выборки. Первая строка выборки (за счет использования выше команды Выбрать(ОбходРезультатЗапроса.ПоГруппировкам) ) получает первую группировку - она представляет собой данные об ответственном сотруднике, по которому будут сгруппированы строки с информацией о номенклатуре.

    ОбластьЦентрОтветственности.Параметры.Заполнить(ВыборкаЦентрОтветственности);
    ТабДок.Вывести(ОбластьЦентрОтветственности, ВыборкаЦентрОтветственности.Уровень());

    С помощью этих команд заполняются параметры области ОбластьЦентрОтветственности, область выводится в табличный документ с использованием информации об уровне записи. В данном случае мы имеем дело с выводом группировки верхнего уровня, метод Уровень() возвращает 0.

    ВыборкаДетали = ВыборкаЦентрОтветственности.Выбрать();

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

    Пока ВыборкаДетали.Следующий() Цикл
    		ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
    		ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень());
    КонецЦикла;

    Этим внутренним циклом, который действует аналогично внешнему, мы заполняем те части отчета, которые имеют отношение к детальной выборке. Метод Уровень() в данном случае возвращает 1.

    8.2. Выводы

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

    Вернуться к учебному плану