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