Форма 3 в 1С

Содержание

Печать (Ctrl+P)

1С:Предприяятие 8.3

Событие ПриКомпоновкеРезультата вызывается при выполнении метода объекта отчета СкомпоноватьРезультат. Обработчик события находится в модуле объекта.

ПриКомпоновкеРезультата(<ДокументРезультат>, <ДанныеРасшифровки>, <СтандартнаяОбработка>)

Параметры:

  • <ДокументРезультат> – Документ, в который выводится результат.
  • <ДанныеРасшифровки> – Переменная, в которую необходимо поместить данные расшифровки. Если данный параметр имеет значение Null, то данные расшифровки создавать не нужно.
  • <СтандартнаяОбработка>Тип: Булево. В данный параметр передается признак выполнения стандартной (системной) обработки события. Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная обработка события производиться не будет.Значение по умолчанию: Истина.

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

Обработчик события ПриКомпоновкеРезультата чаще всего используется для установки значения параметров при оформлении компоновки данных или для передачи внешних наборов данных при инициализации процессора компоновки.

Пример №1. Установка значения параметров при компоновке результата

Следующий фрагмент кода показывает как установить значение параметра основание , которое является документом основания друговог параметра – регистратор

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Настройки = КомпоновщикНастроек.ПолучитьНастройки(); ПараметрыДанных = Настройки.ПараметрыДанных; Регистратор = ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(«Регистратор»)).Значение; Основание = Регистратор.Основание; ПараметрыДанных.УстановитьЗначениеПараметра(«Основание», Основание); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки, , , Ложь); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,, ДанныеРасшифровки, Истина); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); КонецПроцедуры

Отметим, что если параметр Основание не найден, будет вызвано исключение в методе УстановитьЗначениеПараметра.

Пример №2 Передача Внешних Наборов Данных при компоновке результата

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

Процедура ПриКомпоновкеРезультата( ТабличныйДокумент, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки, ДанныеРасшифровки); Тз = ПолучитьМоюТаблицуЗначений() ; // это пользователькая функция в молуле обекта ВнешниеНаборы = Новый Структура(«ТЗ», ТЗ); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборы, ДанныеРасшифровки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент( ТабличныйДокумент ); ПроцессорВывода.Вывести(ПроцессорКомпоновки); КонецПроцедуры

Пример №3 Изменение запрос набора данных

СтандартнаяОбработка = Ложь; СхемаКомпоновкиДанных.НаборыДанных.НаборыДанных1.Запрос = ТекстЗапроса(); НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); КонецПроцедуры

Пример № 4 Изменение в табличном документе до его вывода

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

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ВнестиМоиИзменения(НастройкиОтчета, ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); КонецПроцедуры Процедура ВнестиМоиИзменения(КомпоновщикНастроек, ДокументРезультат) Настройки = КомпоновщикНастроек.ПолучитьНастройки(); ПараметрыДанных = Настройки.ПараметрыДанных; ПериодОтчета = ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(«ПериодОтчета»)).Значение; Если ПериодОтчета< ТекущаяДата() Тогда ТекстПредупреждения = «Данные отчета не актуальные»; ТаблицаПредупреждение = Новый ТабличныйДокумент; ОбластьПредупреждение = ТаблицаПредупреждение.Область(1,1,1,1); ОбластьПредупреждение.Текст = ТекстПредупреждения; ОбластьПредупреждение.ЦветТекста = ЦветаСтиля.ЦветОтрицательногоЧисла; ДокументРезультат.ВставитьОбласть(ОбластьПредупреждение, ДокументРезультат.Область(1,1,1,1), ТипСмещенияТабличногоДокумента.ПоВертикали); КонецЕсли; КонецПроцедуры

Пример №5 Вывода результата компоновки в дерево значений.

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений

пример фрагмента кода в модуле объекта отчета:

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; НастройкиКомпоновкиДанных = КомпоновщикНастроек.ПолучитьНастройки(); МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновкиДанных,,,Тип(«ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений»)); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ТаблицаСверокВзаиморасчетов = ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); 0

  • АКТУАЛЬНЫЕ РЕЛИЗЫ 1С
  • ПРИМЕРЫ КОДА НА ПЛАТФОРМЕ 1С
Табличный документ, текстовый документ в 1С 8.x
  • Как вывести результат запроса в табличный документ?
  • Как вывести данные в табличный документ с возможностью сворачивания и разворачивания данных по группировкам?
  • Как при выводе данных в табличный документ свернуть все выводимые группировки?
  • Как при выводе данных в табличный документ произвольно определить состав свернутых и развернутых группировок?
  • Как выгрузить результат запроса с показом иерархии?
  • Где и как можно увидеть макет, автоматически генерируемый построителем отчета?
  • Как из построителя отчета передать данные в сводную таблицу?
  • Отчет формируется построителем отчета. Как убрать одну из колонок, поместив ее данные в расшифровку другой?
  • Как сохранить настройки построителя отчета до следующего открытия формы отчета?
  • Как организовать показ примечаний в формируемом табличном документе?
  • Как обеспечить фиксацию верхней части табличного документа, генерируемого построителем отчета, по срезу шапки таблицы?
  • Табличный документ формируется построителем отчета. Как при печати табличного документа обеспечить вывод шапки таблицы на каждой странице?
  • Табличный документ формируется по макету, автоматически генерируемому построителем отчета. Как задать ориентацию страницы при печати?
  • Табличный документ формируется построителем отчета. Как для всех выводимых числовых показателей установить вывод без дробной части?
  • Как для построителя отчета совместить назначение своего макета и применение одного из стандартных макетов оформления?
  • Как при получении данных из запроса обойти только итоговые записи?
  • Как при получении данных из запроса обойти только иерархические итоговые записи?
  • Как вывести картинку в табличный документ?
  • Как вывести картинку в табличный документ без изменения макета?
  • Как работать со сводной таблицей?
  • Как программно разместить данные в сводной таблице и оформить ее?
  • Как создать печатную форму посредством текстового шаблона?
Как вывести результат запроса в табличный документ?

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

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

// Перед выводом данных в табличный документ используется метод: ТабДок.НачатьАвтогруппировкуСтрок(); // Выести область с указанием уровня. ТабДок.Вывести(ОбластьОбщийИтог, ВыборкаОбщийИтог.Уровень()); // В конце работы с табличным документом необходимо выполнить // следующий метод: ТабДок.ЗакончитьАвтогруппировкуСтрок();

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

УровеньГруппировки = 1; //содержит индекс, с нуля ТабДок.ЗакончитьАвтогруппировкуСтрок(); ТабДок.ПоказатьУровеньГруппировокСтрок(УровеньГруппировки);

Как при выводе данных в табличный документ произвольно определить состав свернутых и развернутых группировок?

ТабДок.Вывести(ОбластьНоменклатура, ВыборкаПоНоменклатуре.Уровень(), , Ложь);

Как выгрузить результат запроса с показом иерархии?

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

Где и как можно увидеть макет, автоматически генерируемый построителем отчета?

ПостроительОтчета.Макет.Показать()

Как из построителя отчета передать данные в сводную таблицу?

ЭлементыФормы.ДокументРезультат.ВстроенныеТаблицы.СводнаяТаблица.ИсточникДанных = ПостроительОтчетаОтчет; ЭлементыФормы.ДокументРезультат.ВстроенныеТаблицы.СводнаяТаблица.ОтображатьПоля = Истина;

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

Процедура АлфавитныйПереченьКандидатовСРасшифровкой() ПостроительОтчета = Новый ПостроительОтчета; ПостроительОтчета.Текст =»ВЫБРАТЬ | РегистрацияСобеседованияКандидата.ФизЛицо КАК Кандидат, | РегистрацияСобеседованияКандидата.РезультатСобеседования КАК Результат, | РегистрацияСобеседованияКандидата.Ссылка |ИЗ | Документ.РегистрацияСобеседованияКандидата КАК РегистрацияСобеседованияКандидата |УПОРЯДОЧИТЬ ПО | РегистрацияСобеседованияКандидата.ФизЛицо.Наименование»; ПостроительОтчета.Выполнить(); Макет = ПостроительОтчета.Макет; // Очистить области, связанные с ссылкой. ТекущаяОбласть = Неопределено; Пока Истина Цикл ТекущаяОбласть = Макет.НайтиТекст(«Ссылка», ТекущаяОбласть, Макет.Область()); Если ТекущаяОбласть = Неопределено Тогда Прервать; Иначе ТекущаяОбласть.Очистить(Истина, Истина, Истина); КонецЕсли; КонецЦикла; // Заполнить параметр расшифровки для областей, где параметр = «Результат». ТекущаяОбласть = Неопределено; Пока Истина Цикл ТекущаяОбласть = Макет.НайтиТекст(«Результат», ТекущаяОбласть, Макет.Область()); Если ТекущаяОбласть = Неопределено Тогда Прервать; Иначе Если ТекущаяОбласть.Параметр = «Результат» Тогда ТекущаяОбласть.ПараметрРасшифровки = «Ссылка»; КонецЕсли; КонецЕсли; КонецЦикла; ПостроительОтчета.Макет = Макет; ПостроительОтчета.Вывести(); КонецПроцедуры

Как сохранить настройки построителя отчета до следующего открытия формы отчета?

СохранитьЗначение(«НастройкаПостроителяДляОтчетаПродажи» + Метаданные().Имя, ПостроительОтчета.ПолучитьНастройки()); // До установки настроек они ранее должны были быть заполнены // по тексту запроса. ПостроительОтчета.ЗаполнитьНастройки(); // Установить настройки построителя отчета. Настройка = ВосстановитьЗначение(«НастройкаПостроителяДляОтчетаПродажи» + Метаданные().Имя); Если Настройка <> Неопределено Тогда ПостроительОтчета.УстановитьНастройки(Настройка); КонецЕсли;

Как организовать показ примечаний в формируемом табличном документе?

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

Как обеспечить, чтобы при вводе на печать не печатались первая колонка и первая строка табличного документа «ДокументРезультат»?

ДокументРезультат.ОбластьПечати = ДокументРезультат.Область(2, 2, ДокументРезультат.ВысотаТаблицы, ДокументРезультат.ШиринаТаблицы );

Как обеспечить фиксацию верхней части табличного документа, генерируемого построителем отчета, по срезу шапки таблицы?

ДокументРезультат.ФиксацияСверху = ПостроительОтчета.Макет.Области.ШапкаТаблицы.Низ;

Табличный документ формируется построителем отчета. Как при печати табличного документа обеспечить вывод шапки таблицы на каждой странице?

ОбластьШапки = ПостроительОтчета.Макет.Области.ШапкаТаблицы; ДокументРезультат.ПовторятьПриПечатиСтроки = ДокументРезультат.Область(ОбластьШапки.Верх, , ОбластьШапки.Низ);

Как при выводе на печать «длинного» документа указать в колонтитулах страниц номер документа, дату и номер страницы?

ТабДокумент.ВерхнийКолонтитул.Выводить = Истина; ТабДокумент.ВерхнийКолонтитул.НачальнаяСтраница = 2; ТабДокумент.ВерхнийКолонтитул.ТекстСлева = Метаданные().Представление() + » № » + Номер; ТабДокумент.ВерхнийКолонтитул.ТекстСправа = «»;

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

ПостроительОтчета.Вывести(ДокументРезультат); ДокументРезультат.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;

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

// Получить макет построителя отчета. Макет = ПостроительОтчета.Макет; // Сформатировать все области, где встречается слово «Стоимость». ТекущаяОбласть = Неопределено; Пока Истина Цикл ТекущаяОбласть = Макет.НайтиТекст(«Стоимость», ТекущаяОбласть, Макет.Область()); Если ТекущаяОбласть = Неопределено Тогда Прервать; Иначе Если ТекущаяОбласть.Параметр <> «» Тогда ТекущаяОбласть.Формат = «ЧДЦ=0»; КонецЕсли; КонецЕсли; КонецЦикла; // Сформатировать все области, где встречается слово «Количество». ТекущаяОбласть = Неопределено; Пока Истина Цикл ТекущаяОбласть = Макет.НайтиТекст(«Количество», ТекущаяОбласть, Макет.Область()); Если ТекущаяОбласть = Неопределено Тогда Прервать; Иначе Если ТекущаяОбласть.Параметр <> «» Тогда ТекущаяОбласть.Формат = «ЧДЦ=0»; КонецЕсли; КонецЕсли; КонецЦикла; // Назначить построителю измененный макет. ПостроительОтчета.Макет = Макет; // Вывести результат работы построителя отчета в табличный документ.

Как для построителя отчета совместить назначение своего макета и применение одного из стандартных макетов оформления?

ПостроительОтчета.МакетОформления = ПолучитьМакетОформления(СтандартноеОформление.Апельсин); ПостроительОтчета.Макет = ПолучитьМакет(«МакетЭтогоОтчета»); ПостроительОтчета.ОформитьМакет();

Как при получении данных из запроса обойти только итоговые записи?

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

Как при получении данных из запроса обойти только иерархические итоговые записи?

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

Как вывести картинку в табличный документ?

ТабДок = Новый ТабличныйДокумент; Макет = ОбработкаОбъект.ПолучитьМакет(«Макет»); ОбластьКартинки = Макет.ПолучитьОбласть(«ОбластьСКартинкой»); Картинка = Новый Картинка(ПутьККартинке); // Элемент управления «Логотип» входит в коллекцию картинок области. ОбластьКартинки.Рисунки.Логотип.Картинка = Картинка; ТабДок.Вывести(ОбластьКартинки); ТабДок.Показать();

Как вывести картинку в табличный документ без изменения макета?

Область = Макет.ПолучитьОбласть(«Шапка»); Рисунок = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка); Рисунок.Верх = 5; Рисунок.Высота = 10; Рисунок.Ширина = 10; Рисунок.Лево = 5; Рисунок.Картинка = Новый Картинка(ПутьККартинке); Рисунок.РазмерКартинки = РазмерКартинки.РеальныйРазмер; ТабДок.Вывести(Область);

Как работать со сводной таблицей?

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

Как программно разместить данные в сводной таблице и оформить ее?

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

Как создать печатную форму посредством текстового шаблона?

// Создать текстовый документ, в который будет выполняться вывод. ТекстДок = Новый ТекстовыйДокумент; // Получить макет. Макет = ПолучитьМакет(«ЗаявкаНаПропуск»); // Заголовок. Область = Макет.ПолучитьОбласть(«Заголовок»); Область.Параметры.Дата = Дата; Область.Параметры.ВремяНач = НачалоСобытия; Область.Параметры.ВремяОконч = ОкончаниеСобытия; ТекстДок.Вывести(Область); // Состав. Область = Макет.ПолучитьОбласть(«Состав»); Для Каждого ТекСтрокаСторонниеЛица Из СторонниеЛица Цикл Область.Параметры.ФИО = Строка(ТекСтрокаСторонниеЛица.Лицо); ТекстДок.Вывести(Область); КонецЦикла; // Подвал. Область = Макет.ПолучитьОбласть(«Подвал»); Область.Параметры.Ответственный = Ответственный.Наименование; ТекстДок.Вывести(Область); // Открыть сформированный документ. ТекстДок.Показать(«Заявка на пропуска для События №» + Номер);

Курс предназначен для бухгалтеров, которые занимаются сборкой, проверкой и формированием налоговой отчетности в электронном формате для сдачи в налоговые органы Республики Казахстан. Так же в рамках этого курса рассматриваются принципы заполнения основных форм финансовой отчетности. Для того чтобы информация по курсу была понятна и быстро усваивалась, желательно чтобы слушатели на момент проведения курса свободно умели работать в конфигурации «Бухгалтерия для Казахстана» и имели представление как работать с документами, справочниками и отчетами, входящими в состав этой конфигурации.

Целью обучения является: изучение пользователями порядка формирования и проверки форм регламентированной отчетности, входящих в состав типового решения «1С:Бухгалтерия 8 для Казахстана».

Краткое содержание курса:

В курсе рассматриваются принципы заполнения следующих форм налоговой и финансовой отчетности:

  • Декларации по индивидуальному подоходному и социальному налогам, форм 200.00 и 210.00;
  • Декларация по налогу на добавленную стоимость, форма 300.00;

  • Упрощенная декларация для субъектов малого бизнеса, форма 910.00;
  • Расчет текущих платежей по транспортному налогу, форма 701.00;
  • Расчет текущих платежей по земельному и имущественному налогу, форма 701.01;
  • Декларация по земельному, имущественному и транспортному налогу, форма 700.00;
  • Бухгалтерский баланс. Форма 1 (НСФО 2);
  • Отчет о доходах и расходах. Форма 2 (НСФО 2);
  • Отчет о движении денег (прямой метод). Форма 3 (НСФО 2);
  • Отчет об изменениях в собственном капитале. Форма 4 (НСФО 2).

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

Продолжительность курса: 24 академических часа


Параметры управляемой формы — это значения, которые можно передать в форму при ее открытии

Различают следующие виды параметров:

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

Пользовательские поля, в свою очередь, делятся на:

  • ключевые параметры — параметры, которые существуют все время жизни формы (используются для определения уникальности формы);
  • обычные параметры — параметры, которые существуют только в момент создания формы

Настройка параметров формы выполняется в конструкторе управляемой формы на закладке «Параметры».

Давайте на примере рассмотрим работу с параметрами. Допустим, стоит задача: при открытии формы нового элемента справочника «Физические лица» передавать ФИО сотрудника и подставлять их в наименование. Для этого в конструкторе формы добавим новый параметр ФамилияИмяОтчество:

Пропишем в модуле формы обработчик ПриСозданииНаСервере(), в котором будем копировать значение из этого параметра в наименование объекта:

Осталось лишь научиться передавать параметры в форму. Делается это через второй параметр функции ОткрытьФорму() или ПолучитьФорму():

ПараметрыФормы = Новый Структура(«ФамилияИмяОтчество», «Иванов Иван Иванович»); ОткрытьФорму(«Справочник.ФизическиеЛица.ФормаОбъекта», ПараметрыФормы);

Запустим этот код на выполнение и проверим результат:

Дано: конфигурация на платформе 1С 8.3. В «Дополнительные отчеты и обработки» загружен отчет или обработка.

Задача: открыть данный отчет/обработку программно в коде, например, по кнопке.

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

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

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

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

Итак, в БСП есть модуль работы со справочником «Дополнительные отчеты и обработки» (ДополнительныеОтчетыИОбработки), в частности есть процедура открытия отчета и функция подключения внешнего отчета:

  1. Процедура ВыполнитьОткрытиеФормыОбработки

ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьОткрытиеФормыОбработки(ВыполняемаяКоманда, Форма, ОбъектыНазначения)

  1. Функция ПодключитьВнешнююОбработку

ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(Ссылка)

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

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

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

Итак, сам пример (полный код):

// имя внешней обработки — ВнешняяОбработкаПример (в допобработках) // имя внешнего отчета — ВнешнийОтчетСКДПример (в допобработках) // во внешнем отчете/обработке, даже если это СКД, должна быть создана форма // (для СКД — это стандартная форма отчета по умолчанию) // Открытие внешней обработки без параметров &НаКлиенте Процедура ОткрытьВнешнююОбработку(Команда) ОткрытьВнешнийОтчетОбработкуПоИмениСДопПараметрами («ВнешняяОбработкаПример», Неопределено, Ложь); КонецПроцедуры // Открытие внешней обработки с передачей параметров &НаКлиенте Процедура ОткрытьВнешнююОбработкуСПараметром(Команда) ПараметрыОбработки = Новый Структура; ПараметрыОбработки.Вставить(НазваниеПараметра, ЗначениеПараметра); ОткрытьВнешнийОтчетОбработкуПоИмениСДопПараметрами («ВнешняяОбработкаПример», ПараметрыОбработки, Ложь); КонецПроцедуры // Открытие внешнего отчета СКД без параметров &НаКлиенте Процедура ОткрытьВнешнийОтчетСКД(Команда) ОткрытьВнешнийОтчетОбработкуПоИмениСДопПараметрами («ВнешнийОтчетСКДПример», Неопределено, Истина); КонецПроцедуры // Открытие внешнего отчета СКД с передачей параметров &НаКлиенте Процедура ОткрытьВнешнийОтчетСКДсПараметром(Команда) ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных; ПользовательскиеНастройки.ДополнительныеСвойства.Вставить(НазваниеПараметра, ЗначениеПараметра); // добавляем другие нужные параметры по желанию //ПользовательскиеНастройки.ДополнительныеСвойства.Вставить(НазваниеПараметра2, ЗначениеПараметра2); //ПользовательскиеНастройки.ДополнительныеСвойства.Вставить(«Период», Новый СтандартныйПериод(ДатаНачала,ДатаОкончания)); ПараметрыОтчета = Новый Структура; ПараметрыОтчета.Вставить(«СформироватьПриОткрытии», Истина); ПараметрыОтчета.Вставить(«КлючВарианта», «ФормированиеПоПараметрам»); ПараметрыОтчета.Вставить(«ПользовательскиеНастройки», ПользовательскиеНастройки); ОткрытьВнешнийОтчетОбработкуПоИмениСДопПараметрами («ВнешнийОтчетСКДПример», ПараметрыОтчета, Истина); КонецПроцедуры // процедура, открывающая отчет/обработку по имени, заданному в допобработках &НаКлиенте Процедура ОткрытьВнешнийОтчетОбработкуПоИмениСДопПараметрами(ИмяОтчетаОбработки, ПараметрыОткрытия, ЭтоОтчет, РодительскаяФорма =Неопределено) ВнешнийОтчетОбработкаДляОткрытияСсылка = ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере (ИмяОтчетаОбработки); // ВЫЗОВ ИЗ БСП ФУНКЦИИ ПОДКЛЮЧЕНИЯ ВНЕШНЕЙ ОБРАБОТКИ ИмяОбработкиСлужебное =ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВнешнийОтчетОбработкаДляОткрытияСсылка); Если ЭтоОтчет Тогда ОткрытьФорму(«ВнешнийОтчет.» + ИмяОбработкиСлужебное + «.Форма», ПараметрыОткрытия, РодительскаяФорма); Иначе ОткрытьФорму(«ВнешняяОбработка.» + ИмяОбработкиСлужебное + «.Форма», ПараметрыОткрытия, РодительскаяФорма); КонецЕсли; КонецПроцедуры &НаСервере Функция ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере(ИмяОтчетаОбработки) Возврат Справочники.ДополнительныеОтчетыИОбработки.НайтиПоНаименованию(ИмяОтчетаОбработки).Ссылка; КонецФункции

Процедуры:

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

ИмяОбработкиСлужебное = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВнешнийОтчетОбработкаДляОткрытияСсылка);

Пример формы с кнопками, вызывающими эти процедуры:

Скачать пример данной формы можно в файлах к статье.

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

Примечание: создавать форму, как оказалось, не обязательно. См. вариант вызова СКД без создания формы

Чтобы сработал код передачи параметров в СКД (ОткрытьВнешнийОтчетСКДсПараметром), нужно в модуле объекта СКД добавить код, принимающий эти параметры:

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

Скачать пример данного СКД отчета можно в файлах к статье.

Также пробовала передавать параметры в СКД вот так:

&НаКлиенте Процедура ОткрытьВнешнийОтчетСКДсПараметром(Команда) // установка параметров отбора Отбор = Новый Структура; Отбор.Вставить(НазваниеПараметра, ЗначениеПараметра); ПараметрыОтчета = Новый Структура; ПараметрыОтчета.Вставить(«Отбор», Отбор); ПараметрыОтчета.Вставить(«СформироватьПриОткрытии», Истина); ОткрытьВнешнийОтчетОбработкуПоИмениСДопПараметрами («ВнешнийОтчетСКДПример», ПараметрыОтчета, Истина); КонецПроцедуры

Однако возникала ошибка: Невозможно применить фиксированные настройки. Пересекаются элементы отбора.

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

Обработки тестировались на демо-базе БСП версии 2.4.5.

В архиве:

  • _TestОткрытиеВнешнихОтчетовОбработок.epf — обработка, содержащая форму с примерами кнопок вызова других отчетов и обработок. Можно открывать просто через Файл-Открыть.
  • ВнешняяОбработкаПример.epf — пример внешней обработки, принимающей параметр. Нужно загрузить в»Дополнительные отчеты и обработки» (задать имя ВнешняяОбработкаПример)
  • ВнешнийОтчетСКДПример.erf — пример внешнего отчета на СКД, принимающего параметры. Нужно загрузить в «Дополнительные отчеты и обработки» (задать имя ВнешнийОтчетСКДПример)

См. также Как в СКД по щелчку на какой-либо ячейке в отчете получить значение другой ячейки (там применяется метод, описанный в статье для вызова внешней обработки в качестве расшифровки ячейки СКД)