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

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 связывать не со справочником номенклатуры, а поместить результат основного запроса во временную таблицу и связать с ним...

Конец

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

Вступайте в нашу телеграмм-группу Инфостарт

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

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С:Предприятие 8 Платные (руб)

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

16500 руб.

02.09.2020    250529    1390    421    

1143

Инструментарий разработчика СКД Программист 1С 8.3 Бесплатно (free)

В этой статье представлен СКДБилдер — общий модуль-обёртка над объектной моделью СКД, который сокращает код в 3-4 раза и делает его читаемым.

29.01.2026    5791    305    shapa_pro    25    

67

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Статья написана по результатам проведенного внутреннего обучающего вебинара для разработчиков ГК «СофтБаланс». Если осилить 25 000 знаков - задача для вас непосильная, где-то на бескрайних просторах интернета видео есть (или будет). Но здесь информация точнее. Разберем, чем запрос для СКД принципиально отличается от обычного запроса и как модифицируется в зависимости от настроек. Изучим «базовый рецепт» написания запроса для СКД, сформируем чек-лист. Полезно будет всем – от стажеров до тех. лидов. Всем, кто не снимает галку «автозаполнение» и пишет запросы для отчетов в консоли запросов – читать (вдумчиво) обязательно.

29.10.2025    17288    ovetgana    112    

107

СКД Программист 1С:Предприятие 8 Бесплатно (free)

Описан способ заполнения списка доступных значений для полей наборов данных и параметров в схеме компоновки данных для любых конфигураций (с использованием БСП или без).

01.07.2025    10063    krasnoshchekovpavel    5    

68

СКД Программист Стажер 1С:Предприятие 8 Россия Бесплатно (free)

Несколько способов управления формами выбора параметров и отборов СКД.

10.04.2025    9329    Neti    0    

41

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

27.02.2025    16001    ovetgana    50    

93

СКД Программист 1С:Предприятие 8 Бесплатно (free)

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

24.12.2024    13642    Akcium    17    

46

СКД Механизмы типовых конфигураций Запросы Программист 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    10229    AlexeyPROSTO_1C    1    

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

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

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

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

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

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

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

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

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

4. На закладке параметров СКД для нового параметра "СписокНоменклатуры" установить флажок доступности списка значений и ограничить доступность параметра пользователю.
BelikovSA; +1 Ответить
6. BelikovSA 42 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
ИЗ
	Справочник.Спецификации.ВыходныеИзделия КАК СпецификацииВыходныеИзделия
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Спецификации.ИсходныеКомплектующие КАК СпецификацииИсходныеКомплектующие
		ПО СпецификацииВыходныеИзделия.Ссылка = СпецификацииИсходныеКомплектующие.Ссылка

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

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

Т.о. можно немного запутать СКД (а вместе с ней и разработчика, который будет сопровождать отчет), но при этом избавиться от внутреннего соединения в связях наборов данных и не нагрузить базу данных избыточными выборками данных (соединение со справочником номенклатуры во втором наборе можно убрать).
user2111907; aviks__; ye_s; Glebis; Julia7150; embarcadero; JohnyDeath; purgin; testnv0; toypaul; BelikovSA; +11 Ответить
8. BelikovSA 42 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 Сейчас в теме
Еще один способ "обмануть" СКД
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
	ВнешниеНаборыДанных = ВнешниеНаборыДанных(НастройкиОтчета);
	
	КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
	МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);

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

	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
	
	ПроцессорВывода.Вывести(ПроцессорКомпоновки);
	
КонецПроцедуры
Показать
aaakhm; Allesly; janit; +3 Ответить
14. aaakhm 07.01.26 13:41 Сейчас в теме
(12) Прекрасно работающее решение, даже лучше предложенного выше.
13. vad7 5 18.10.24 12:39 Сейчас в теме
(1)
(12)
Для Каждого СвязьНаборовДанных Из МакетКомпоновки.СвязиНаборовДанных Цикл
СвязьНаборовДанных.ТипСвязи = ТипСвязиНаборовДанныхКомпоновкиДанных.Внешняя;
КонецЦикла;


Они там и так внешние
Для отправки сообщения требуется регистрация/авторизация