🔥 Горящие вакансии
Все статьи

Программное создание отчета на СКД с расшифровкой (обычные формы)

Эту и другие технические статьи написали наши программисты 1С и получили за них премии. Если вы тоже работаете с 1С и любите делиться опытом, приходите разработчиком в Neti

Допустим, в конфигурации 1С имеется отчет на СКД и нам нужно его формировать из другой формы, не связанной с ним.

Программное создание отчета на СКД с расшифровкой (обычные формы)

Казалось бы, все просто – можно взять из отчета схему, исполнить ее программно и вывести на форму того же отчета.

Например, так:

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

Как можно заметить, в процедуре ПроцессорВывода.УстановитьДокумент(ФормаОтчета.ЭлементыФормы.Результат) используется форма отчета, которая должна быть создана в конфигураторе в явном виде и на ней должно присутствовать поле табличного документа с именем «Результат».

Здесь я не буду заострять внимание на установке параметров, отборов, условного оформления и прочего, так как данный код работоспособен и без этого. Но хочу обратить внимание на то, что же возвращает схема компоновки. В большинстве случаев при решении подобной задачи нам нужно будет вывести некоторые ссылочные данные. Мы исходим из того, что сам НашОтчет выводит их корректно – как представление ссылки, которые можно открыть двойным кликом мыши.

Однако, нажав кнопку, вызывающую процедуру ПоказатьОтчет(), мы увидим лишь представления ссылочных данных, без возможности расшифровки. Хотя сам отчет нормально расшифровывает выводимые данные. Значит, нам придется самостоятельно передать эту расшифровку на вызываемую форму отчета.

Создадим на форме реквизит, в который будем передавать расшифровку, создаваемую СКД. Тип реквизита зададим как «Произвольный», так как тип ДанныеРасшифровкиКомпоновкиДанных отсутствует в списке доступных.

Программное создание отчета на СКД с расшифровкой (обычные формы)

И при открытии формы передадим в нее сформированную СКД расшифровку.

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

Таким образом мы получим отчет, в котором расшифровка работает так же, как если бы мы его запускали непосредственно из формы отчета.

 

Оставить коментарий

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

Раз в квартал — дайджест достойный внимания

Вести с полей 1С, кейсы работы с заказчиками и вакансии на удалёнке

Image

Отправить резюме

    Я согласен на обработку персональных данных в соответствии
    со ст. 9 ФЗ № 152-ФЗ «О персональных данных»

    Отправить резюме

      Я согласен на обработку персональных данных в соответствии
      со ст. 9 ФЗ № 152-ФЗ «О персональных данных»

      Pекомендовать друга

        Отправьте контактные данные вашего друга и предупредите его, что мы с ним свяжемся. Когда друг успешно отработает 3 месяца, вы получите 20 000 ₽.


        Выбрать вакансию
        • Ведущий аналитик 1С
        • Программист 1С
        • Консультант-аналитик 1С
        • Проекты для команды специалистов 1С
        • Проекты для специалистов 1С
        • Стажёр-программист 1С
        • Bitrix-разработчик
        Я согласен на обработку персональных данных в соответствии
        со ст. 9 ФЗ № 152-ФЗ «О персональных данных»

        Pекомендовать друга

          Отправьте контактные данные вашего друга и предупредите его, что мы с ним свяжемся. Когда друг успешно отработает 3 месяца, вы получите 20 000 ₽.


          Выбрать вакансию
          • Ведущий аналитик 1С
          • Программист 1С
          • Консультант-аналитик 1С
          • Проекты для команды специалистов 1С
          • Проекты для специалистов 1С
          • Стажёр-программист 1С
          • Bitrix-разработчик
          Я согласен на обработку персональных данных в соответствии
          со ст. 9 ФЗ № 152-ФЗ «О персональных данных»

          Спасибо!

          Мы получили ваше резюме. Менеджер свяжется с вами в течение трех дней

          Горящие вакансии