Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут!

Как программно сформировать отчет в 1С СКД (8.3 и 8.2)

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

Когда может потребоваться программный вывод отчета в 1С на СКД:

  • программная установка параметров СКД;
  • использование внешних данных в отчете;
  • специфика табличного документа при выводе на печать;
  • прочие не стандартные ситуации.

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

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

ВЫБРАТЬ
ХозрасчетныйОстаткиИОбороты.Счет,
ХозрасчетныйОстаткиИОбороты.Субконто1,
ХозрасчетныйОстаткиИОбороты.Субконто2,
ХозрасчетныйОстаткиИОбороты.Субконто3,
ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток,
ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток,
ХозрасчетныйОстаткиИОбороты.СуммаОборот
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Регистратор, , Счет = &Счет, , ) КАК ХозрасчетныйОстаткиИОбороты

Вот как выглядит отчет в стандартном виде:

сформированный отчет в 1С на СКД

Теперь сформируем его программно. Для этого нам нужно добавить Основную Форму:

создание формы отчета по умолчанию

Добавим команду и кнопку на форме:

создание команды на управляемой форме

Получите 267 видеоуроков по 1С бесплатно:

В действиях команды пропишем следующий код (читать код на сайте достаточно трудно, поэтому рекомендуем скачать уже готовый пример отчета и посмотреть код в нем):

&НаСервере

Процедура СформироватьОтчетНаСервере(ТаблДок)

ОбъектОтчет = РеквизитФормыВЗначение(«Отчет»);

ОСКД = ОбъектОтчет.ПолучитьМакет(«ОсновнаяСхемаКомпоновкиДанных»);

НастройкиОСКД = ОСКД.НастройкиПоУмолчанию;

//НастройкиОСКД = КомпоновщикНастроек.ПолучитьНастройкиОСКД();

ПараметрыДанныхОСКД = НастройкиОСКД.ПараметрыДанных.Элементы;

ЭлементНачалоПериода = ПараметрыДанныхОСКД.Найти(«НачалоПериода»);

ЭлементНачалоПериода.Использование = Истина;

ЭлементНачалоПериода.Значение = НачалоМесяца(ТекущаяДата());

ЭлементКонецПериода = ПараметрыДанныхОСКД.Найти(«КонецПериода»);

ЭлементКонецПериода.Использование = Истина;

ЭлементКонецПериода.Значение = КонецМесяца(ТекущаяДата());

ЭлементСчет = ПараметрыДанныхОСКД.Найти(«Счет»);

ЭлементСчет.Использование = Истина;

ЭлементСчет.Значение = ПланыСчетов.Хозрасчетный.ТоварыНаСкладах;

//КомпоновщикНастроекДанных = Новый КомпоновщикНастроекКомпоновкиДанных;

//КомпоновщикНастроекДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ОСКД));

//КомпоновщикНастроекДанных.ЗагрузитьНастройкиОСКД(ОСКД.НастройкиОСКДПоУмолчанию);

//КомпоновщикНастроекДанных.ЗагрузитьПользовательскиеНастройкиОСКД(Отчет.КомпоновщикНастроек.ПользовательскиеНастройкиОСКД);

КомпоновщикМакетаОСКД = Новый КомпоновщикМакетаКомпоновкиДанных;

//Макет = КомпоновщикМакетаОСКД.Выполнить(ОСКД, КомпоновщикНастроекДанных.ПолучитьНастройкиОСКД());

Макет = КомпоновщикМакетаОСКД.Выполнить(ОСКД, НастройкиОСКД);

ПроцессорКомпоновкиОСКД = Новый ПроцессорКомпоновкиДанных;

ПроцессорКомпоновкиОСКД.Инициализировать(Макет);

ТаблДок.Очистить();

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

ПроцессорВыводаОСКД.УстановитьДокумент(ТаблДок);

ПроцессорВыводаОСКД.Вывести(ПроцессорКомпоновкиОСКД);

КонецПроцедуры

&НаКлиенте

Процедура СформироватьОтчет(Команда)

СформироватьОтчетНаСервере(Результат);

// Чтобы не писалось «Отчет не сформирован…»

Элементы.Результат.ОтображениеСостояния.Видимость = Ложь;

Элементы.Результат.ОтображениеСостояния.ДополнительныйРежимОтображения = ДополнительныйРежимОтображения.НеИспользовать;

КонецПроцедуры

Данный пример программно задает параметры запроса в СКД. Это задается следующим блоком:

программный код 1С

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

В итоге получаем отчет с собственной кнопкой на форме:

кнопка для формирования отчета

Если вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео:

P.S. Наша компания предоставляет услуги по настройке, доработке и комплексному внедрению 1С. Закажите бесплатный расчет стоимости вашей задачи на странице Услуги 1С или по телефону +7 (499) 350 29 00.

Остались вопросы?

СПРОСИТЕ в комментариях!

Комментариев: 3 на “Как программно сформировать отчет в 1С СКД (8.3 и 8.2)
  1. Супер! Большое спасибо!

    Ответить

  2. А если при комментировании выделенных строк и раскомментировании не выделенных строк появляется ошибка
    «Переменная не определена (КомпоновщикНастроек)»

    Ответить

  3. Вот это вот закомментированное с ошибками. НастройкиОСКДПоУмолчанию — оченвидно, «НастройкиПоУмолчанию».
    «КомпоновщикНастроек» -тоже не определен

    Ответить

Добавить комментарий:

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


*