Справочные материалы по 1С
Табличный документ, текстовый документ в 1С 8.x
Как вывести результат запроса в табличный документ?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОстаткиТоваровКомпанииОстатки.СкладКомпании КАК СкладКомпанииСсылка,
| ОстаткиТоваровКомпанииОстатки.Номенклатура КАК НоменклатураСсылка,
| СУММА(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток) КАК Остаток,
| ОстаткиТоваровКомпанииОстатки.Номенклатура.Представление КАК Номенклатура,
| ОстаткиТоваровКомпанииОстатки.СкладКомпании.Представление КАК Склад
|ИЗ
| РегистрНакопления.ОстаткиТоваровКомпании.Остатки(&Момент) КАК ОстаткиТоваровКомпанииОстатки
|СГРУППИРОВАТЬ ПО
| ОстаткиТоваровКомпанииОстатки.СкладКомпанииСсылка,
| ОстаткиТоваровКомпанииОстатки.НоменклатураСсылка
|ИТОГИ СУММА(Остаток) ПО
| Общие,
| Склад";
Запрос.УстановитьПараметр("Момент", Неопределено);
Результат = Запрос.Выполнить();
// Получить поле табличного документа, в которое будем выводить результат.
ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
// Очистить данные в табличном документе
// (возможно данные уже выводились ранее).
ТабДок.Очистить();
Макет = ПолучитьМакет("Макет");
// Получить именованные области из макета.
ОбластьОбщийИтог = Макет.ПолучитьОбласть("ОбщийИтог");
ОбластьСклад = Макет.ПолучитьОбласть("Склад");
ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура");
// Получить выборку по первой итоговой группировке (первый уровень).
ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
// Запись общего итога всегда одна, поэтому можно обойтись без организации цикла.
ВыборкаОбщийИтог.Следующий();
// Произвести запись данных из полей выборки в именованные
// области с совпадающими именами.
ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
// Включить область с заполненными параметрами в табличный документ.
ТабДок.Вывести(ОбластьОбщийИтог);
// "От" записи первого уровня получить подчиненную выборку
// записей второго уровня (по итоговой группировке "Склад").
ВыборкаПоСкладу = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаПоСкладу.Следующий() Цикл
ОбластьСклад.Параметры.Заполнить(ВыборкаПоСкладу);
ТабДок.Вывести(ОбластьСклад);
// Получить подчиненную выборку, содержащую детальные записи.
ВыборкаПоНоменклатуре = ВыборкаПоСкладу.Выбрать();
Пока ВыборкаПоНоменклатуре.Следующий() Цикл
ОбластьНоменклатура.Параметры.Заполнить(ВыборкаПоНоменклатуре);
ТабДок.Вывести(ОбластьНоменклатура);
КонецЦикла;
КонецЦикла;
Как вывести данные в табличный документ с возможностью сворачивания и разворачивания данных по группировкам?
// Перед выводом данных в табличный документ используется метод:
ТабДок.НачатьАвтогруппировкуСтрок();
// Выести область с указанием уровня.
ТабДок.Вывести(ОбластьОбщийИтог, ВыборкаОбщийИтог.Уровень());
// В конце работы с табличным документом необходимо выполнить
// следующий метод:
ТабДок.ЗакончитьАвтогруппировкуСтрок();
Как при выводе данных в табличный документ свернуть все выводимые группировки?
УровеньГруппировки = 1; //содержит индекс, с нуля
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.ПоказатьУровеньГруппировокСтрок(УровеньГруппировки);
Как при выводе данных в табличный документ произвольно определить состав свернутых и развернутых группировок?
ТабДок.Вывести(ОбластьНоменклатура, ВыборкаПоНоменклатуре.Уровень(), , Ложь);
Как выгрузить результат запроса с показом иерархии?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПродажиКомпанииОбороты.Номенклатура КАК Номенклатура,
| ПродажиКомпанииОбороты.КоличествоОборот КАК КоличествоОборот
|ИЗ
| РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода, &КонПериода, , ) КАК ПродажиКомпанииОбороты
|ИТОГИ СУММА(КоличествоОборот) ПО
| Номенклатура ИЕРАРХИЯ";
Запрос.УстановитьПараметр("НачПериода", НачПериода);
Запрос.УстановитьПараметр("КонПериода", КонПериода);
Результат = Запрос.Выполнить();
// Осуществить выгрузку с сохранением иерархии.
ЭлементыФормы.ТП.Значение = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
ЭлементыФормы.ТП.СоздатьКолонки();
Где и как можно увидеть макет, автоматически генерируемый построителем отчета?
ПостроительОтчета.Макет.Показать()
Как из построителя отчета передать данные в сводную таблицу?
ЭлементыФормы.ДокументРезультат.ВстроенныеТаблицы.СводнаяТаблица.ИсточникДанных = ПостроительОтчетаОтчет;
ЭлементыФормы.ДокументРезультат.ВстроенныеТаблицы.СводнаяТаблица.ОтображатьПоля = Истина;
Отчет формируется построителем отчета. Как убрать одну из колонок, поместив ее данные в расшифровку другой?
Процедура АлфавитныйПереченьКандидатовСРасшифровкой()
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.Текст ="ВЫБРАТЬ
| РегистрацияСобеседованияКандидата.ФизЛицо КАК Кандидат,
| РегистрацияСобеседованияКандидата.РезультатСобеседования КАК Результат,
| РегистрацияСобеседованияКандидата.Ссылка
|ИЗ
| Документ.РегистрацияСобеседованияКандидата КАК РегистрацияСобеседованияКандидата
|УПОРЯДОЧИТЬ ПО
| РегистрацияСобеседованияКандидата.ФизЛицо.Наименование";
ПостроительОтчета.Выполнить();
Макет = ПостроительОтчета.Макет;
// Очистить области, связанные с ссылкой.
ТекущаяОбласть = Неопределено;
Пока Истина Цикл ТекущаяОбласть = Макет.НайтиТекст("Ссылка", ТекущаяОбласть, Макет.Область());
Если ТекущаяОбласть = Неопределено Тогда
Прервать;
Иначе
ТекущаяОбласть.Очистить(Истина, Истина, Истина);
КонецЕсли;
КонецЦикла;
// Заполнить параметр расшифровки для областей, где параметр = "Результат".
ТекущаяОбласть = Неопределено;
Пока Истина Цикл ТекущаяОбласть = Макет.НайтиТекст("Результат", ТекущаяОбласть, Макет.Область());
Если ТекущаяОбласть = Неопределено Тогда
Прервать;
Иначе
Если ТекущаяОбласть.Параметр = "Результат" Тогда
ТекущаяОбласть.ПараметрРасшифровки = "Ссылка";
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПостроительОтчета.Макет = Макет;
ПостроительОтчета.Вывести();
КонецПроцедуры
Как сохранить настройки построителя отчета до следующего открытия формы отчета?
СохранитьЗначение("НастройкаПостроителяДляОтчетаПродажи" + Метаданные().Имя, ПостроительОтчета.ПолучитьНастройки());
// До установки настроек они ранее должны были быть заполнены
// по тексту запроса.
ПостроительОтчета.ЗаполнитьНастройки();
// Установить настройки построителя отчета.
Настройка = ВосстановитьЗначение("НастройкаПостроителяДляОтчетаПродажи" + Метаданные().Имя);
Если Настройка <> Неопределено Тогда
ПостроительОтчета.УстановитьНастройки(Настройка);
КонецЕсли;
Как организовать показ примечаний в формируемом табличном документе?
Процедура Отчет(ДатаНач, ДатаКон) Экспорт
Запрос = Новый Запрос;
// Сбор данных.
Запрос.Текст = "ВЫБРАТЬ
| Событие.Ответственный КАК Ответственный,
| Событие.Дата,
| Событие.ВидСобытия,
| Событие.Контрагент,
| Событие.СодержаниеСобытия,
| Событие.ОписаниеСобытия
|ИЗ
| Документ.Событие КАК Событие
|ГДЕ
| Событие.Дата МЕЖДУ &ДатаНач И &ДатаКон И (Событие.Проведен) И Событие.СостояниеСобытия = &Завершено
|УПОРЯДОЧИТЬ ПО
| Ответственный";
Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
Запрос.УстановитьПараметр("Завершено", Перечисления.СостоянияСобытий.Завершено);
Результат = Запрос.Выполнить();
// Сформировать табличный документ.
Макет = ПолучитьМакет("Отчет");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
ТабДок = Новый ТабличныйДокумент;
ОбластьЗаголовок.Параметры.ДатаНач = ДатаНач;
ОбластьЗаголовок.Параметры.ДатаКон = ДатаКон;
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
ВыборкаДетали = Результат.Выбрать();
Пока ВыборкаДетали.Следующий() Цикл
ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали);
ОбластьДетальныхЗаписей.Область("Описание").Примечание.Текст = ВыборкаДетали.СодержаниеСобытия;
ТабДок.Вывести(ОбластьДетальныхЗаписей);
КонецЦикла;
ТабДок.Показать();
КонецПроцедуры
Как обеспечить, чтобы при вводе на печать не печатались первая колонка и первая строка табличного документа "ДокументРезультат"?
ДокументРезультат.ОбластьПечати = ДокументРезультат.Область(2, 2, ДокументРезультат.ВысотаТаблицы, ДокументРезультат.ШиринаТаблицы );
Как обеспечить фиксацию верхней части табличного документа, генерируемого построителем отчета, по срезу шапки таблицы?
ДокументРезультат.ФиксацияСверху = ПостроительОтчета.Макет.Области.ШапкаТаблицы.Низ;
Табличный документ формируется построителем отчета. Как при печати табличного документа обеспечить вывод шапки таблицы на каждой странице?
ОбластьШапки = ПостроительОтчета.Макет.Области.ШапкаТаблицы;
ДокументРезультат.ПовторятьПриПечатиСтроки = ДокументРезультат.Область(ОбластьШапки.Верх, , ОбластьШапки.Низ);
Как при выводе на печать "длинного" документа указать в колонтитулах страниц номер документа, дату и номер страницы?
ТабДокумент.ВерхнийКолонтитул.Выводить = Истина;
ТабДокумент.ВерхнийКолонтитул.НачальнаяСтраница = 2;
ТабДокумент.ВерхнийКолонтитул.ТекстСлева = Метаданные().Представление() + " № " + Номер;
ТабДокумент.ВерхнийКолонтитул.ТекстСправа = "[&НомерСтраницы]";
Табличный документ формируется по макету, автоматически генерируемому построителем отчета. Как задать ориентацию страницы при печати?
ПостроительОтчета.Вывести(ДокументРезультат);
ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
Табличный документ формируется построителем отчета. Как для всех выводимых числовых показателей установить вывод без дробной части?
// Получить макет построителя отчета.
Макет = ПостроительОтчета.Макет;
// Сформатировать все области, где встречается слово "Стоимость".
ТекущаяОбласть = Неопределено;
Пока Истина Цикл
ТекущаяОбласть = Макет.НайтиТекст("Стоимость", ТекущаяОбласть, Макет.Область());
Если ТекущаяОбласть = Неопределено Тогда
Прервать;
Иначе
Если ТекущаяОбласть.Параметр <> "" Тогда
ТекущаяОбласть.Формат = "ЧДЦ=0";
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Сформатировать все области, где встречается слово "Количество".
ТекущаяОбласть = Неопределено;
Пока Истина Цикл
ТекущаяОбласть = Макет.НайтиТекст("Количество", ТекущаяОбласть, Макет.Область());
Если ТекущаяОбласть = Неопределено Тогда
Прервать;
Иначе
Если ТекущаяОбласть.Параметр <> "" Тогда
ТекущаяОбласть.Формат = "ЧДЦ=0";
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Назначить построителю измененный макет.
ПостроительОтчета.Макет = Макет;
// Вывести результат работы построителя отчета в табличный документ.
Как для построителя отчета совместить назначение своего макета и применение одного из стандартных макетов оформления?
ПостроительОтчета.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Апельсин);
ПостроительОтчета.Макет = ПолучитьМакет("МакетЭтогоОтчета");
ПостроительОтчета.ОформитьМакет();
Как при получении данных из запроса обойти только итоговые записи?
ТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
ТабДок.Очистить();
Макет = ПолучитьМакет("Отчет");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПродажиКомпанииОбороты.Номенклатура КАК Номенклатура,
| ПродажиКомпанииОбороты.Номенклатура.Представление,
| ПродажиКомпанииОбороты.КоличествоОборот КАК КоличествоОборот,
| ПродажиКомпанииОбороты.СуммаПродажиОборот КАК СуммаПродажиОборот
|ИЗ
| РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода,&КонПериода) КАК ПродажиКомпанииОбороты
|ИТОГИ СУММА(КоличествоОборот), СУММА(СуммаПродажиОборот) ПО
| ОБЩИЕ,
| Номенклатура Иерархия";
Запрос.УстановитьПараметр("&НачПериода", НачПериода);
Запрос.УстановитьПараметр("&КонПериода", КонецДня(КонПериода));
Результат = Запрос.Выполнить();
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
ОбластьОбщийИтог = Макет.ПолучитьОбласть("ОбщиеИтоги");
ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура");
ОбластьДетальныхЗаписей = Макет.ПолучитьОбласть("Детали");
ТабДок.Вывести(ОбластьЗаголовок);
ТабДок.Вывести(ОбластьШапкаТаблицы);
// Обход по определенным в запросе итоговым группировкам.
ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
// Запись общих итогов одна, поэтому нет необходимости в цикле.
ВыборкаОбщийИтог.Следующий();
ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
ТабДок.Вывести(ОбластьОбщийИтог);
// Получить подчиненную выборку по итоговой группировке "номенклатура".
ВыборкаНоменклатура = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаНоменклатура.Следующий() Цикл
ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура);
ТабДок.Вывести(ОбластьНоменклатура);
// Несмотря на то, что можем получить еще одну подчиненную
// выборку (по детальным записям) мы это не делаем, т.е. фактически
// при обходе пропускаем детальные записи.
КонецЦикла;
ТабДок.Вывести(ОбластьПодвалТаблицы);
ТабДок.Вывести(ОбластьПодвал);
Как при получении данных из запроса обойти только иерархические итоговые записи?
ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ВыборкаОбщийИтог.Следующий();
ОбластьОбщийИтог.Параметры.Заполнить(ВыборкаОбщийИтог);
ТабДок.Вывести(ОбластьОбщийИтог);
ВыборкаНоменклатура = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
Пока ВыборкаНоменклатура.Следующий() Цикл
ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура);
ТабДок.Вывести(ОбластьНоменклатура);
КонецЦикла;
Как вывести картинку в табличный документ?
ТабДок = Новый ТабличныйДокумент;
Макет = ОбработкаОбъект.ПолучитьМакет("Макет");
ОбластьКартинки = Макет.ПолучитьОбласть("ОбластьСКартинкой");
Картинка = Новый Картинка(ПутьККартинке);
// Элемент управления "Логотип" входит в коллекцию картинок области.
ОбластьКартинки.Рисунки.Логотип.Картинка = Картинка;
ТабДок.Вывести(ОбластьКартинки);
ТабДок.Показать();
Как вывести картинку в табличный документ без изменения макета?
Область = Макет.ПолучитьОбласть("Шапка");
Рисунок = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Верх = 5;
Рисунок.Высота = 10;
Рисунок.Ширина = 10;
Рисунок.Лево = 5;
Рисунок.Картинка = Новый Картинка(ПутьККартинке);
Рисунок.РазмерКартинки = РазмерКартинки.РеальныйРазмер;
ТабДок.Вывести(Область);
Как работать со сводной таблицей?
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПродажиКомпанииОбороты.ДоговорВзаиморасчетовПокупателя.Владелец КАК ДоговорВзаиморасчетовПокупателяВладелец,
| ПродажиКомпанииОбороты.Номенклатура КАК Номенклатура,
| ПродажиКомпанииОбороты.ПодразделениеКомпании КАК ПодразделениеКомпании,
| СУММА(ПродажиКомпанииОбороты.КоличествоОборот) КАК КоличествоОборот,
| СУММА(ПродажиКомпанииОбороты.СуммаПродажиОборот) КАК СуммаПродажиОборот
|ИЗ
| РегистрНакопления.ПродажиКомпании.Обороты(&НачПериода,&КонПериода) КАК ПродажиКомпанииОбороты
|СГРУППИРОВАТЬ ПО
| ПродажиКомпанииОбороты.ДоговорВзаиморасчетовПокупателя.Владелец,
| ПродажиКомпанииОбороты.Номенклатура,
| ПродажиКомпанииОбороты.ПодразделениеКомпании
|ИТОГИ СУММА(КоличествоОборот), СУММА(СуммаПродажиОборот) ПО
| ДоговорВзаиморасчетовПокупателяВладелец,
| Номенклатура,
| ПодразделениеКомпании";
// На состав полей, которые могут быть размещены в измерениях,
// данных сводной таблицы влияет раздел "Итоги".
Запрос.УстановитьПараметр("НачПериода", НачПериода);
Запрос.УстановитьПараметр("КонПериода", КонПериода);
Результат = Запрос.Выполнить();
Сводная = ЭлементыФормы.ПолеДокумента.ВстроенныеТаблицы.СводнаяТаблица1;
Сводная.ИсточникДанных = Результат;
Как программно разместить данные в сводной таблице и оформить ее?
Построитель = Новый ПостроительОтчета();
Построитель.Текст = "ВЫБРАТЬ
| ТоварыНаСкладахОстаткиИОбороты.Склад КАК Склад,
| ТоварыНаСкладахОстаткиИОбороты.Склад.Представление,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление,
| СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход) КАК КоличествоПриход,
| СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот) КАК КоличествоОборот,
| СУММА(ТоварыНаСкладахОстаткиИОбороты.КоличествоРасход) КАК КоличествоРасход
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты КАК ТоварыНаСкладахОстаткиИОбороты
|СГРУППИРОВАТЬ ПО
| ТоварыНаСкладахОстаткиИОбороты.Склад,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура,
| ТоварыНаСкладахОстаткиИОбороты.Склад.Представление,
| ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Представление
|ИТОГИ СУММА(КоличествоПриход), СУММА(КоличествоОборот), СУММА(КоличествоРасход) ПО
| ОБЩИЕ,
| Номенклатура ИЕРАРХИЯ,
| Склад ИЕРАРХИЯ ";
Построитель.ЗаполнитьНастройки();
Таблица = ЭлементыФормы.ПолеТабличногоДокумента1.ВстроенныеТаблицы.СводнаяТаблица1;
Таблица.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Лед);
Таблица.ИсточникДанных = Построитель;
Таблица.Строки.Добавить("Номенклатура");
Таблица.Колонки.Добавить("Склад");
Таблица.Данные.Добавить("КоличествоПриход");
Таблица.ОтображатьЛинии = ТипОтображенияЛинийСводнойТаблицы.Всегда;
Как создать печатную форму посредством текстового шаблона?
// Создать текстовый документ, в который будет выполняться вывод.
ТекстДок = Новый ТекстовыйДокумент;
// Получить макет.
Макет = ПолучитьМакет("ЗаявкаНаПропуск");
// Заголовок.
Область = Макет.ПолучитьОбласть("Заголовок");
Область.Параметры.Дата = Дата;
Область.Параметры.ВремяНач = НачалоСобытия;
Область.Параметры.ВремяОконч = ОкончаниеСобытия;
ТекстДок.Вывести(Область);
// Состав.
Область = Макет.ПолучитьОбласть("Состав");
Для Каждого ТекСтрокаСторонниеЛица Из СторонниеЛица Цикл
Область.Параметры.ФИО = Строка(ТекСтрокаСторонниеЛица.Лицо);
ТекстДок.Вывести(Область);
КонецЦикла;
// Подвал.
Область = Макет.ПолучитьОбласть("Подвал");
Область.Параметры.Ответственный = Ответственный.Наименование;
ТекстДок.Вывести(Область);
// Открыть сформированный документ.
ТекстДок.Показать("Заявка на пропуска для События №" + Номер);