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

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

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

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

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

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

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

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

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

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

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

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

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

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

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

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

&НаСервере

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

&НаКлиенте

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

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

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

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

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

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

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

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

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

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

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

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

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

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

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

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

    Ответить

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

    Ответить

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

    Ответить

  4. Спасибо. Сделала как у вас. Но когда выводится табличный документ у таблицы цвет серый, а не черный. В свойствах написано черный. Помогите пож как исправить?

    Ответить

  5. Зачем эти подлые приколы с копирование текста из сайта?

    Ответить

  6. Расшифровки то не будет!

    Ответить

  7. Класс! долго и упроно боролся!
    Спасибо Благодарное совсем человеческое!

    Ответить

  8. не работает вас пример!

    Ответить

  9. Елена
    Спасибо, очень все понятно, все по полочкам разложено, спасибо за пример

    Ответить

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

Ваш адрес email не будет опубликован.