1С 8.2 УП : СКД Внешний источник данных, грузим из ТЗ и далее получаем остатки на каждую дату

Очень часто бывают ситуации, когда необходимо сделать отчет СКД на сложном запросе, который использует в себе вложенные запросы, внутренние и полные объединения и т.д. – в результате в консоли этот запрос формируется верно, а в СКД половина полей пустые. Связано это с особенностью СКД в объединении внутренних данных, также не стоит забывать что в СКД наборы данных связываются через левое соединение…

Решения возможны следующие:

  • Изменить запрос в СКД
  • Сформировать запрос обычным способом и подставить эти данные в СКД как внешние

Рассмотрим последний вариант.

Внешний источник данных, грузим из ТЗ

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

В модуле объекта уже есть функция:

Функция ПолучитьТаблицуВнешнегоНабораДанных()        
        Возврат Новый ТаблицаЗначений;
КонецФункции

установим в ней наш запрос, получается примерно так:

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

Ниже в коде происходит установка внешних данных из нашей ТЗ с именем ТаблицаВнешнегоНабораДанных

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

В самой компоновке добавляем набор Объект с именем ТаблицаВнешнегоНабораДанных и перечисляем поля, которые будут использоваться в отчете.

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии