Заполнение табличного документа из запроса. Заполнение подвала и шапки таблицы.

Скачать выгрузку данной ИБ.

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

&НаКлиенте
Процедура Команда1(Команда)
  ПолучитьДанные();
КонецПроцедуры
&НаСервере
Процедура ПолучитьДанные()
КонецПроцедуры

Установим курсор внутри процедуры ПолучитьДанные. Запустим Конструктор запроса с обработкой результата (рис.1).

Я буду использовать справочник Курсы, т.к. это единственный справочник в котором есть что считать. Выберем данные, Наименование, ДатаНачала, Стоимость, Преподаватель.

Перейдем на закладку Итоги. Установим галку Общие итоги и перенесем туда поле стоимость из левой части. В итоге у нас будет считаться сумма всех курсов по реквизиту Стоимость.

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

На закладке Условие добавим условие. Во первых установим галку на столбце П, это означает что условие произвольное. Впишем условие «Курсы.ЭтоГруппа = ЛОЖЬ».

Добавим порядок или сортировку данных в результате.

Примерный результат после нажатия на OK.

 Вместо комментария «Вставить обработку выборки…» вставляем:

 СуммаПоВсемКурсам = ВыборкаОбщийИтог.Стоимость;

В результате в переменной СуммаПоВсемКурсам будет хранится стоимость всех курсов.

Теперь переходим к Циклу, он перебирает все элементы запроса. Описание читаем в комментариях кода.

В данном случае переименуем столбцы, заполним подвал и саму таблицу.

//переименуем заголовки столбцов
Элементы.ТабличнаяЧастьСтолбец1.Заголовок = "Наименование";
Элементы.ТабличнаяЧастьСтолбецДата.Заголовок = "Дата начала";
Элементы.ТабличнаяЧастьСтолбецЧисло.Заголовок = "Стоимость";
Элементы.ТабличнаяЧастьСтолбецБулево.Заголовок = "Есть препод.";
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
// Создадим новую строку и свяжим с переменной НоваяСтрока  
  НоваяСтрока = Объект.ТабличнаяЧасть.Добавить();
  // Заполним столбцы, заметьте столбцы объекта в моем случае отличаются от элементов формы
  НоваяСтрока.Столбец1 = ВыборкаДетальныеЗаписи.Наименование;
  НоваяСтрока.СтолбецДата = ВыборкаДетальныеЗаписи.ДатаНачала;
  НоваяСтрока.СтолбецЧисло = ВыборкаДетальныеЗаписи.Стоимость;
  // Т.к. Преподаватель это ссылка на справочник проверим его на пустоту и запишем соот-ий результат
  Если ВыборкаДетальныеЗаписи.Преподаватель = Справочники.Преподаватели.ПустаяСсылка() Тогда
    НоваяСтрока.СтолбецБулево = Ложь;
  Иначе
    НоваяСтрока.СтолбецБулево = Истина;
  КонецЕсли;
КонецЦикла;
// Включаем подвал, если в свойствах отключен
  Элементы.ТабличнаяЧасть.Подвал = Истина;
  // В столбец ТабличнаяЧастьСтолбец1 или Наименование вносим количество элементов запроса.
  Элементы.ТабличнаяЧастьСтолбец1.ТекстПодвала = ВыборкаДетальныеЗаписи.Количество();
  // В столбец ТабличнаяЧастьСтолбецЧисло или Стоимость вносим итог полученный ранее.
  Элементы.ТабличнаяЧастьСтолбецЧисло.ТекстПодвала = СуммаПоВсемКурсам;

 

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

А вот результат:


Полный код:

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
 НоваяСтрока = Объект.ТабличнаяЧасть.Добавить();
 НоваяСтрока.Столбец1 = ВыборкаДетальныеЗаписи.Наименование;
 НоваяСтрока.СтолбецДата = ВыборкаДетальныеЗаписи.ДатаНачала;
 НоваяСтрока.СтолбецЧисло = ВыборкаДетальныеЗаписи.Стоимость;
 Если ВыборкаДетальныеЗаписи.Преподаватель = Справочники.Преподаватели.ПустаяСсылка() Тогда
 НоваяСтрока.СтолбецБулево = Ложь;
 Иначе
 НоваяСтрока.СтолбецБулево = Истина;
 КонецЕсли;
КонецЦикла; 
 Элементы.ТабличнаяЧасть.Подвал = Истина;
 Элементы.ТабличнаяЧастьСтолбец1.ТекстПодвала = ВыборкаДетальныеЗаписи.Количество();
 Элементы.ТабличнаяЧастьСтолбецЧисло.ТекстПодвала = СуммаПоВсемКурсам;
 
КонецПроцедуры

Скачать выгрузку результата.



comments powered by Disqus

Популярное