Программное выполнение Отчета (СКД) средствами БСП:ВариантыОтчетов

1. Pokemonus 08.07.24 08:20 Сейчас в теме
Конфигурация 1С:ЗУП КОРП 3.1
Много доработок всяких, не моих, повлиять на исходный код не могу.

Исходная информация:
Отчет для формирования "расчетного листка" (взят копированием) из стандартного АнализНачисленийИУдержаний, помещен в расширение. Печатная форма своя.

Интерактивно все работает. Отчет выводит нужную печатную форму.
Рассылка отчетов для этого отчета тоже отрабатывает как надо и формирует нужную печатную форму.

Что надо:
Получить печатную форму "расчетного листка" чисто программным кодом.

Как делаю:
function ФормированиеОтчета2(Сотрудник, Организация, ПериодДата) экспорт
var ЭлементФизическоеЛицо, ЭлементОрганизация;

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

  Подключение = ВариантыОтчетов.ПодключитьОтчетИЗагрузитьНастройки(ПараметрыПодключения);
  КомпоновщикНастроекКД = Подключение.Объект.КомпоновщикНастроек;

  ТекНастройки = Подключение.НастройкиКД;

  // 1) настройка отборов
  
  // * физ.лицо
  // * организация
  ПолеФизическоеЛицо = Новый ПолеКомпоновкиДанных("ФизическоеЛицо");
  ФлагФизическоеЛицо = Ложь;
  ПолеОрганизация = Новый ПолеКомпоновкиДанных("Организация");
  ФлагОрганизация = Ложь;
  ПолеГруппа = Новый ПолеКомпоновкиДанных("Группа");
  ФлагГруппа = Ложь;
  
  // настроки отбора
  for each Элем in ТекНастройки.Отбор.Элементы do
    // * физ.лицо
    if Элем.ЛевоеЗначение = ПолеФизическоеЛицо then
      Элем.ПравоеЗначение = Сотрудник;
      Элем.Использование = Истина;
      ФлагФизическоеЛицо = Истина;
    endif;
    // * организация
    if Элем.ЛевоеЗначение = ПолеОрганизация then
      Элем.ПравоеЗначение = Организация;
      Элем.Использование = Истина;
      ФлагОрганизация = Истина;
    endif;
    
    // * группа
    if Элем.ЛевоеЗначение = ПолеГруппа then
      Элем.Использование = Истина;
      ФлагГруппа = Истина;
    endif;
    
    if ФлагФизическоеЛицо И ФлагОрганизация И ФлагГруппа then
      Прервать;
    endif;
    
  enddo;

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

  ТекНастройки = Неопределено;
  Об = Неопределено;
  
  ПараметрыФормирования = ВариантыОтчетов.ПараметрыФормированияОтчета();
  ПараметрыФормирования.Подключение = Подключение;
  
  Результат = ВариантыОтчетов.СформироватьОтчет(ПараметрыФормирования, Ложь, Истина);
  
  if Результат.Пустой then
    Сообщить("Отчет пустой  :(");
  endif;
  
  
  Возврат Результат.ТабличныйДокумент;

endfunction // ФормированиеОтчета2()

Показать


Отчет не формируется - пустой.
Шагал отладчиком как это делает "рассылка отчетов". И пытался эту логику использовать. Уже много раз переделывал свой код - не работает и все. К моменту когда в "ВариантыОтчетов.СформироватьОтчет()" доходит до строки:
ОтчетОбъект.СкомпоноватьРезультат(Результат.ТабличныйДокумент, Результат.Расшифровка);


смотрю свойства объекта (сравнивал с выполнением "рассылки"), все вроде одинаково...

Помогите, господа программеры, уже не первый день бьюсь, может уже глаз замылился чего-то не вижу.
Найденные решения
3. Pokemonus 10.07.24 05:13 Сейчас в теме
(1) Все правильно в коде!
сам лопухнулся, глаз уже замылился - отбор устанавливал по "Физическому лицу", а значение отбора передавал типа Справочник.Сотрудники
Конечно, поэтому отчет и формировался пустой... ыыы
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Pokemonus 10.07.24 05:13 Сейчас в теме
(1) Все правильно в коде!
сам лопухнулся, глаз уже замылился - отбор устанавливал по "Физическому лицу", а значение отбора передавал типа Справочник.Сотрудники
Конечно, поэтому отчет и формировался пустой... ыыы
2. Pokemonus 08.07.24 08:26 Сейчас в теме
Я родом из далекого Delphi, поэтому операторы на "аглицком" автозаменой уже полтора десятка лет живут :)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот