СКД - одна из проблем связи Наборов данных

03.03.20

Разработка - СКД

Официальная информация: 1. В схеме компоновки данных нет указания типа связи. Все связи считаются ЛЕВЫМИ внешними соединениями. 2. Если для вложенного набора данных указано условие фильтра, тогда связь вложенного набора данных с родительским набором данных считается ВНУТРЕННЕЙ. Или как получить все результаты основного набора при отборе в зависимом.

Доброго времени суток.

Вступление

Собственно все началось с простого задания - есть номенклатура (список номенклатуры), собираемая по спецификации. Надо вывести сколько комплектующих надо для сборки, сколько есть на складах, чтобы принять решение о закупках, сборке, передачах. (Складов много)

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

Суть проблемы простая - пока в отчете нет отборов (список номенклатуры задается параметром) то схема из нескольких Наборов данных работает хорошо и правильно. Но стоит задать отбор по складу - можно получить пустой отчет... Итак по-порядку. (Конфигурация УПП, так что тексты запросов соответствующие)

1. Подготовка и демонстрация

НаборДанных1 (основная выборка) с полями Комплектующая, Продукция и КоличествоНа1 (среднее взял, потому что бардак в спецификации) - запрос: 

 
Запрос по спецификации

 

НаборДанных2 (остатки, зависимый) - запрос:

 
Запрос остатков

Здесь немного поясню: я разделил Склад на поле "выборки" и поле "отбора", т.е. в отборах будет поле СкладОтбора, но его нельзя выбирать в Выбранные поля, хотя СкладКомплектующей тоже можно отбирать. Причина - в хотелке, но об этом ниже.

Связи наборов данных: Источник - НаборДанных1 (основной), Приемник - НаборДанных2 (зависимый), Выражения - Комплектующая. 

 
Картинка связи

Ресурсы пока простые: Сумма(КоличествоНа1) и Сумма(ОстатокКомлектующей).

Структура простенькая группировки: Комплектующая - Продукция - Детальные записи. Выбраны все поля.

 
Картинка структуры

Выполняю. Получаю ожидаемый результат - все есть, все хорошо:

 
Картинка результата

Дальше была идея Склады в колонки, но тогда получается очень широко и почти не заполнено. Ну если одна комплектующая только на одном складе, то по всем остальным пусто. В общем не очень красиво выходит.

Проблема:

Но вот я задаю отбор "Склад отбора Равно Цех готовой продукции" и результат - только одна комплектующая:

 
Картинка "неправильного" с отбором по складу

Тогда я еще не знал про "замену Левого на Внутреннее, если есть отбор"...

2. Попытка выкрутиться

В статье "СКД - наборы данных и связи между ними..." есть пункт "Некоторые особенности соединения наборов данных" с подпунктом "Отбор по полю подчиненного набора", где сказано "если необходимо получить все данные из основного набора, нужно наложить отбор на уровне группировки отчета".

Но вот беда: в отборе по группировке, среди доступных полей, нет поля "СкладОтбора":

 
Картинка - нет поля СкладОтбора

 

Хорошо, попробую использовать СкладКомплектующей. Добавил отборы в каждую группировку, но выключенные и стал включать по очереди. Первым включаю у группировки Комплектующая. Результат такой же, как с отбором по отчету целиком. Отключаю.

Включаю следующий - отбор у группировки Продукции. Уже лучше - все Комплектующие появились, а вот продукции нет. Да и остатки комплектующих странные - по группировке остатки показаны, а из чего получились, откуда взялись?

 
 Результат отбора по группировке

 Отключаю у Продукции. Включаю последний отбор - у детальных записей. Почти идеальный результат, по крайней мере продукция появилась. Но с Остатками по-прежнему: по складам 46, а у группировок - 107 с хвостом. По остальным и того хуже.

 
 Результат отбора по группировке детальных записей

Итог: либо я не так понял, либо не то делаю. Но и это не работает. Да и пользователям пояснять в какой ветке нужно поставить отбор - тяжело (прибабахи толстого клиента, где проще дать возможность редактировать настройку, чем вытащить что-то из глубины структуры на форму)

3. Хотелки и их исполнение.

Кому интересно решение проблемы - этот пункт можно пропустить.

Хотелка 1 - а почему не добавить показ остатков по Продукции?

Хотелка 2 - как бы сделать отчет более смотребильным, а то складов много и увидеть остатки сразу в строке - значит надо склады в колонки, а тогда отчет получается "разряженным".

Хотелка 3 - если уж добавил остатки продукции, то отбор по складу должен работать и на это.

Первая решается просто: еще один набор данных. Вот спрашивается, ну почему в запросах можно сделать один запрос во временную таблицу и соединить его несколько раз, а вот тут увы - надо новый набор данных. Ну и чтобы данные не пересекались - колонки переименованы. Так родился НаборДанных3.

 
 Запрос НабораДанных3

Тут интересный эффект наблюдал, если поле Склад будет иметь одинаковое наименование в обоих подчиненных наборах, то в результате в остатках у продукции будет не правильный склад, потому что значение будет от первого набора. Поэтому - они разные. Одинаковыми могут быть только действительно одинаковые по смыслу поля, например те которые участвуют в связи. Так Номенклатура для НабораДанных2 называется Комплектующая, а в НабореДанных3 - Продукция. Ну а чтобы поле отбора было единым для обоих наборов: появился СкладОтбора - это решило хотелку 3.

Ну и добавляем еще одну связь.

 
 Картинка Связей

Ну и в ресурсах определяем ОстатокПродукции.

Теперь вторая хотелка. Если выводить данные по складам списком - получим умножение строк остатков, например 5 складов по Комплектующей и 3 по Продукции итого 15 строк. Хорошо хоть итоги по группировкам правильные. Да и как "сложить" 2 одинаковых склада по комплектующей и по продукции? Поля называются по разному и как сделать по ним группировку - не придумал.

Тут на помощь пришла вторая статья Агрегатные функции СКД, о которых мало кто знает. Сначала использовал функцию ТаблицаЗначений. Но при простом повторении формирования отчета строки складов прыгают. Тогда добавил Упорядочить в итоге получилось так: 

 
 Выражение в ресурсах

Для ОстаткаКомплектующих: Упорядочить(ТаблицаЗначений(Различные СкладКомплектующей Как Склад, ОстатокКомплектующей Как Остаток), "Склад Автоупорядочивание")

Для ОстаткаПродукции: Упорядочить(ТаблицаЗначений(Различные СкладПродукции Как Склад, ОстатокПродукции Как Остаток), "Склад Автоупорядочивание")

 
 Они же на картинке

 

Дальше немного "причесал" структуру: выключил детальные записи, сгруппировал поля, отключил "Общие Итоги по вертикали".

 
 Вот такая структура

В результате получил - строки группировки "пухнут" в зависимости от количества складов, но видно где, чего и сколько, просто посмотрев по строке. Поставил в ресурсах "Расчитывать по..." (как на картинке выше) и по крайне мере для Комплектующей убрались остатки по складам из колонки остатков продукции. Вот такой результат получил:

 
 Кусок результата

Теперь влючаю отбор по складу и вижу результат, опять исчезли строки (что в прочем уже ожидаемо):

 
 Картинка проблемы
4. Поиск решения

Сразу скажу: на мой взгляд не очень хорошее, но другого не нашел. Вопросы такого плана есть, а ответов увы не много. Потому думал сам и пришел к выводу - если связь вместо ЛЕВОЙ становится ВНУТРЕННЕЙ, значит необходимо сделать так, чтобы для каждой записи основного набора существовала запись зависимого, не взирая на отбор.

И тут у меня возникла сложность - я не очень хорошо понимаю в какой момент накладывается отбор при формировании. Потому решил пойти простым путем - эксперимента. Первое что попробовал - изменить запрос остатков: к справочнику номенклатуры Левым соединением добавил Остатки. На тот момент это выглядело так (не использовать, почему - ниже):

 
 Запрос остатков связанный с номенклатурой

 ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Склад КАК СкладКомплектующей,
    СпрНоменклатура.Ссылка КАК Комплектующая,
    ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстатокКомплектующей
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки({(&КонецПериода)}, ) КАК ТоварыНаСкладахОстатки
        ПО СпрНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
{ГДЕ
    ТоварыНаСкладахОстатки.Склад.* КАК СкладОтбора}

Дальше экспериментировал с настройками. Работало долго. На каком-то этапе вообще получил от сервера отлуп по памяти... Бросил.

Пробовал создать набор типа Объединение, где один набор - остатки, другой - опять же номенклатура. Но там надо было создавать сложные условия с ИЛИ, чтобы запись Номенклатуры выбиралась в любом случае... Не пошло.

День бодался. На следующий день пошел по второму кугу. Только все создавал с нуля.

5. Решение

И начал снова с Левого соединения в запросе. Получился такой запрос (правильный):

 
 Запрос остатков связанный с номенклатурой

 ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Склад КАК СкладКомплектующей,
    СпрНоменклатура.Ссылка КАК Комплектующая,
    ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстатокКомплектующей
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки({(&КонецПериода)}, {(Склад).* КАК СкладОтбора, (Номенклатура).* КАК Комплектующая}) КАК ТоварыНаСкладахОстатки
        ПО СпрНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура

Сформировал, посмотрел нормальный результат. Включил отбор и увидел это:

 
 Правильный результат

 

Стал сравнивать с предыдущими тестами и понял: {ГДЕ ТоварыНаСкладахОстатки.Склад.* КАК СкладОтбора} отрабатывала после соединения, а потому отсекало номенклатуру. А когда я перенес его в условия таблицы остатков, то и отбор сработал только на регистр остатков не затронув номенклатуру. Потому первый запрос - не правильный и не работает, а второй заработал (так я считаю).

Но самым удивительным для меня оказался такой результат (отбор по другому складу и еще одна продукция):

 
 Удивительный результат

 

Чем удивило? А тем, что Левое соединение я делал только в одном наборе данных - во втором (по комплектующим), а в третьем - как было, так и осталось. Почему же группировка по Продукции не пропала? Почему остатки выдает правильные с учетом отбора? Вывод получился такой - а третий набор, несмотря на то что к нему был применен отбор, все-равно имеет ЛЕВОЕ соединение. Возможно свою лепту вносит тот факт, что для второго и третьего набора один и тот же отбор. Возможно третий слепили со вторым, а потом только с первым.

Правильный вывод или нет - я не знаю.

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

Конец

Прошу специалистов не смеяться над стилем изложения, я курсов не проходил. Общаюсь в большинстве своем с пользователями, которым надо объяснить понятно что, почему и как. Да и статья это первая, не потому что писать нечего, а потому, что большая часть уже написана Вами и надо только найти :).

СКД Набор Связи

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 8000 руб.

02.09.2020    122353    673    389    

716

Генератор схемы компоновки данных (СКД), написание кода схемы программно

Инструментарий разработчика СКД Платформа 1С v8.3 Конфигурации 1cv8 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

По выбранной схеме компоновки данных генерирует программный код, который генерирует СКД, аналогичную исходной схеме. Есть дополнительные инструменты для просмотра дерева схемы, сравнение исходной схемы и полученной по коду, а также сравнение изменений в сгенерированном коде для исходной схемы и для измененной.

3 стартмани

05.02.2024    4053    25    obmailok    17    

63

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2006    2    Yashazz    0    

29

СКД на JavaScript в 1С

СКД WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Долгое время поддерживаю web-портал, в котором появилась необходимость создавать отчеты. Просмотрев различные фреймворки на js, я решил сделать свое решение, которое позволяло бы быстро разрабатывать и добавлять новые отчеты на web-портал.

2 стартмани

11.12.2023    8170    20    John_d    25    

123

Использование менеджера временных таблиц в СКД

СКД Платформа 1С v8.3 Система компоновки данных Конфигурации 1cv8 Бесплатно (free)

Рассмотрим еще не получивший широкого распространения способ работы с внешними данным в СКД. В процессе обсуждения работы с СКД выяснилось, что многие не знакомы со способом помещения туда временной таблицы, полученной предварительно. Статья будет полезна разработчикам, знакомым с программным созданием СКД.

05.12.2023    4663    PROSTO-1C    13    

61

Модель СКД

Инструментарий разработчика СКД Платформа 1С v8.3 Система компоновки данных Абонемент ($m)

DSL для работы с СКД.

1 стартмани

15.11.2023    5815    15    kalyaka    5    

86

Пользовательские настройки отчетов 1С. Часть 1. Простые и расширенные настройки

СКД Инструкции пользователю Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Россия Бесплатно (free)

Простые приемы работы с отчетами на СКД. Что нужно знать пользователю про настройку отчетов, чтобы использовать их на полную катушку.

18.09.2023    6735    accounting_cons    5    

29

Разрыв страницы в СКД. Легко!

СКД Платформа 1С v8.3 Система компоновки данных Бесплатно (free)

Когда отчет надо разделить по страницам, это всегда проблема для разработчика. Поскольку в СКД нет стандартных вариантов, как это сделать. Нашел (на свой взгляд) самое простое и оптимальное решение.

01.09.2023    4533    KVIKS    15    

80
Отзывы
4. dhurricane 04.03.20 07:37 Сейчас в теме
Еще один способ, как обойти преобразование левого соединения во внутреннее - это добиться появления поля "СкладОтбора" в первом наборе данных.

Попробуйте доработать запрос первого набора данных следующим образом:
ВЫБРАТЬ
	Склады.Ссылка КАК СкладСсылка
ПОМЕСТИТЬ ВтСклады
ИЗ
	Справочник.Склады КАК Склады
{ГДЕ
	Склады.Ссылка.* КАК СкладОтбора}
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	СпецификацииВыходныеИзделия.Номенклатура КАК Продукция,
	СпецификацииИсходныеКомплектующие.Номенклатура КАК Комплектующая,
	СРЕДНЕЕ(СпецификацииИсходныеКомплектующие.Количество / СпецификацииВыходныеИзделия.Количество) КАК КоличествоНа1
ИЗ
	Справочник.Спецификации.ВыходныеИзделия КАК СпецификацииВыходныеИзделия
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Спецификации.ИсходныеКомплектующие КАК СпецификацииИсходныеКомплектующие
		ПО СпецификацииВыходныеИзделия.Ссылка = СпецификацииИсходныеКомплектующие.Ссылка

СГРУППИРОВАТЬ ПО
	СпецификацииВыходныеИзделия.Номенклатура,
	СпецификацииИсходныеКомплектующие.Номенклатура
Показать

Здесь я добавил первым запрос к справочнику складов. Т.к. используется секция {ГДЕ}, при установке отбора по полю "СкладОтбор", этот отбор попадет в условия нашей новой временной таблицы. Но при этом само поле "СкладСсылка" в отчете никоим образом не участвует, поэтому оптимизатор СКД просто "выкинет" эту часть запроса (получение временной таблицы).

Т.о. можно немного запутать СКД (а вместе с ней и разработчика, который будет сопровождать отчет), но при этом избавиться от внутреннего соединения в связях наборов данных и не нагрузить базу данных избыточными выборками данных (соединение со справочником номенклатуры во втором наборе можно убрать).
aviks__; ye_s; Glebis; Julia7150; embarcadero; JohnyDeath; purgin; testnv0; toypaul; BelikovSA; +10 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Valerich 1633 04.03.20 04:36 Сейчас в теме
Вместо двух наборов сделать один и в нем явно сделать левое соединение
3. dhurricane 04.03.20 07:18 Сейчас в теме
(1) Тогда "поплывут" количественные показатели. В частности в общем итоге "КоличествоНа1" задвоится, затроится и т.д. Трудности с наборами данных перерастут в трудности с выражениями ресурсов.
5. BelikovSA 41 04.03.20 10:02 Сейчас в теме
(1)
Одна комплектующая для нескольких продукций - итог несколько строк в результате. При левом соединении несколько строк остатков. В результате нельзя использовать данную колонку в Ресурсах (по крайней мере в виде простой суммы), если знаете как - напишите пожалуйста.
2. dhurricane 04.03.20 07:12 Сейчас в теме
Я бы предложил следующее.

1. Отказаться от параметра "Номенклатура", использовать вместо него обычный отбор по номенклатуре на уровне отчета, вынесенный в пользовательские настройки. Возможно я что-то не учитываю в Вашей задаче, но отбор ведь значительно гибче: пользователь сможет указывать не только отбор по иерархии, но и любой другой.

2. Добавить отбор данных второго запроса по списку номенклатуры, при том не только для таблицы остатков, но и для основной таблицы. Ведь в действительности нам не нужно получать запросом весь справочник номенклатуры:
ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Склад КАК СкладКомплектующей,
    СпрНоменклатура.Ссылка КАК Комплектующая,
    ТоварыНаСкладахОстатки.КоличествоОстаток КАК ОстатокКомплектующей
ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки({(&КонецПериода)}, Номенклатура В (&СписокНоменклатуры) {(Склад).* КАК СкладОтбора}) КАК ТоварыНаСкладахОстатки
        ПО СпрНоменклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
ГДЕ
    СпрНоменклатура.Ссылка В (&СписокНоменклатуры)
Показать

3. На закладке связей первого и второго наборов данных указать в качестве параметра связи "СписокНоменклатуры", установить флажок "Список параметров". Таким образом СКД будет выполнять запрос второго набора данных с отбором по номенклатуре исключительно из первого набора данных. А что попадает в первый - уже решение пользователя.

4. На закладке параметров СКД для нового параметра "СписокНоменклатуры" установить флажок доступности списка значений и ограничить доступность параметра пользователю.
BelikovSA; +1 Ответить
6. BelikovSA 41 04.03.20 10:12 Сейчас в теме
(2)
Я упростил задачу для написания статьи. Исходно список номенклатуры (продукции ) идет из табличной части Заказа, да и разбор на комплектующие идет глубже одного уровня.
Если для отчета - с п.1 и 2 - согласен полностью.
По п.3 - честно говоря плохо его понимаю. В моем понимании получится, что второй набор данных станет выполнятся "в цикле". Возможно не так понял - посмотрю. Спасибо.
7. dhurricane 04.03.20 10:18 Сейчас в теме
(6) Да, наверняка он будет выполнятся в цикле. Но это не так страшно. Флажок "Список параметров" на закладке связей отвечает как раз за то, чтобы получать данные порциями. Порции, на сколько я помню, должны быть достаточно большими (до 1000 значений в параметре), так что итераций будет немного. И это наверняка дешевле, нежели получить запросом весь справочник номенклатуры целиком.
BelikovSA; +1 Ответить
4. dhurricane 04.03.20 07:37 Сейчас в теме
Еще один способ, как обойти преобразование левого соединения во внутреннее - это добиться появления поля "СкладОтбора" в первом наборе данных.

Попробуйте доработать запрос первого набора данных следующим образом:
ВЫБРАТЬ
	Склады.Ссылка КАК СкладСсылка
ПОМЕСТИТЬ ВтСклады
ИЗ
	Справочник.Склады КАК Склады
{ГДЕ
	Склады.Ссылка.* КАК СкладОтбора}
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	СпецификацииВыходныеИзделия.Номенклатура КАК Продукция,
	СпецификацииИсходныеКомплектующие.Номенклатура КАК Комплектующая,
	СРЕДНЕЕ(СпецификацииИсходныеКомплектующие.Количество / СпецификацииВыходныеИзделия.Количество) КАК КоличествоНа1
ИЗ
	Справочник.Спецификации.ВыходныеИзделия КАК СпецификацииВыходныеИзделия
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Спецификации.ИсходныеКомплектующие КАК СпецификацииИсходныеКомплектующие
		ПО СпецификацииВыходныеИзделия.Ссылка = СпецификацииИсходныеКомплектующие.Ссылка

СГРУППИРОВАТЬ ПО
	СпецификацииВыходныеИзделия.Номенклатура,
	СпецификацииИсходныеКомплектующие.Номенклатура
Показать

Здесь я добавил первым запрос к справочнику складов. Т.к. используется секция {ГДЕ}, при установке отбора по полю "СкладОтбор", этот отбор попадет в условия нашей новой временной таблицы. Но при этом само поле "СкладСсылка" в отчете никоим образом не участвует, поэтому оптимизатор СКД просто "выкинет" эту часть запроса (получение временной таблицы).

Т.о. можно немного запутать СКД (а вместе с ней и разработчика, который будет сопровождать отчет), но при этом избавиться от внутреннего соединения в связях наборов данных и не нагрузить базу данных избыточными выборками данных (соединение со справочником номенклатуры во втором наборе можно убрать).
aviks__; ye_s; Glebis; Julia7150; embarcadero; JohnyDeath; purgin; testnv0; toypaul; BelikovSA; +10 Ответить
8. BelikovSA 41 04.03.20 10:51 Сейчас в теме
(4)
Блеск :)
Работает!!! Красивое решение :).
Спасибо большое, а то меня именно "нагрузка избыточными данными" и напрягала. Как я уже писал в какой-то момент вообще получал вылет по памяти. А тут такая красота - складов ограниченное количество в отличии от номенклатуры.
9. dhurricane 04.03.20 13:35 Сейчас в теме
(8)
складов ограниченное количество в отличии от номенклатуры.
В приведенном примере запроса к складам не будет вообще, т.к. поле "СкладСсылка" не используется в настройках компоновки. Оптимизатор запросов СКД просто-напросто "выбросит" этот кусок запроса, останется только запрос к спецификациям.
10. Julia7150 06.05.21 07:06 Сейчас в теме
(4) Изящное решение, а главное рабочее) Спасибо, очень помогли!
11. user604163_sasha_nikolaev 15.12.21 23:24 Сейчас в теме
Я в данной ситуации просто использую отчет на базе Универсального отчета. Там проще и понятнее, и все можно прописать в одном запросе, без использования соединения наборов данных, сложных настроек структур отображения и прочих "танцев с бубном". Отчет на СКД хорош для быстрого построения простых отчетов.
12. solarx 05.04.22 11:37 Сейчас в теме
Еще один способ "обмануть" СКД
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
	ВнешниеНаборыДанных = ВнешниеНаборыДанных(НастройкиОтчета);
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);

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

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