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

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

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

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

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

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

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

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

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

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

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

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

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

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

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