Как вывести в СКД две независимые таблицы, объединенные одним полем

06.06.19

Разработка - Работа с интерфейсом

Надо вывести в отчет на СКД 2 таблицы, которые содержат различные данные, объединяемые одним полем. Количество строк в каждой таблице может быть произвольным. Если выводить с помощью обычного соединения таблиц, то мы получим перемножение строк. Чтобы его избежать обычно используются циклы. Но в данной статье мы разберемся как это сделать только средствами СКД.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Как вывести в СКД две независимые таблицы, объединенных одним полем: пример отчета из статьи
.erf 5,63Kb
1 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

 

Разбираться будем на упрощенном примере. Исходные таблицы и нужный результат на рисунке

Для начала создадим в СКД 3 таблицы:

1) Контрагенты+Номер. В этой таблице будет дополнительная колонка "Номер", по которой будет в дальнейшем объединение всех таблиц. В моем примере я создам эту таблицу вручную, в реальной жизни можно использовать создание нумерации запросом, с нужной глубиной.

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

3) Контрагенты+Адреса

 

Текст запроса

 

 

ВЫБРАТЬ
    "Контрагент 1" КАК Контрагент,
    1 КАК Номер
ПОМЕСТИТЬ КонтрагентыНомера

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Контрагент 1",
    2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Контрагент 1",
    3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Контрагент 1",
    4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Контрагент 1",
    5

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Контрагент 2",
    1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Контрагент 2",
    2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Контрагент 2",
    3

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Контрагент 2",
    4

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Контрагент 2",
    5
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    "Контрагент 1" КАК Контрагент,
    1 КАК Номер,
    "Договор 1" КАК Договор
ПОМЕСТИТЬ КонтрагентыДоговоры

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Контрагент 1",
    2,
    "Договор 2"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Контрагент 2",
    1,
    "Договор 1"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    "Контрагент 1" КАК Контрагент,
    1 КАК Номер,
    "Адрес 1" КАК Адрес
ПОМЕСТИТЬ КонтрагентыАдреса

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Контрагент 1",
    2,
    "Адрес 2"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Контрагент 1",
    3,
    "Адрес 3"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    КонтрагентыНомера.Контрагент КАК Контрагент,
    КонтрагентыДоговоры.Договор КАК Договор,
    КонтрагентыАдреса.Адрес КАК Адрес
ИЗ
    КонтрагентыНомера КАК КонтрагентыНомера
        ЛЕВОЕ СОЕДИНЕНИЕ КонтрагентыДоговоры КАК КонтрагентыДоговоры
        ПО КонтрагентыНомера.Контрагент = КонтрагентыДоговоры.Контрагент
            И КонтрагентыНомера.Номер = КонтрагентыДоговоры.Номер
        ЛЕВОЕ СОЕДИНЕНИЕ КонтрагентыАдреса КАК КонтрагентыАдреса
        ПО КонтрагентыНомера.Контрагент = КонтрагентыАдреса.Контрагент
            И КонтрагентыНомера.Номер = КонтрагентыАдреса.Номер
ГДЕ
    (НЕ КонтрагентыДоговоры.Договор ЕСТЬ NULL
            ИЛИ НЕ КонтрагентыАдреса.Адрес ЕСТЬ NULL)

 

 

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

 

И получаем результат

 

Вложил пример отчета с описанной выше схемой СКД.

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

Система компоновки данных СКД

См. также

Работа с интерфейсом Анализ учета Мониторинг 1С:Предприятие 8 1С 8.3 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Библиотека стандартных подсистем 1С:ERP Управление предприятием 2 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 Платные (руб)

Создайте свой функциональный интерфейс в любой конфигурации 1С с помощью расширения Infostart Dashboard. Настраивайте панели виджетов с метриками, индикаторами и показателями на начальном экране. Узнайте возможность внедрения подсистемы у себя в конфигурации с помощью бесплатной обработки "Анализ внедрения подсистемы 1С Infostart Dashboard"!

28800 руб.

27.03.2025    56405    31    25    

45

Разработка Инструментарий разработчика Работа с интерфейсом Адаптация типовых решений Нейросети 1C:Бухгалтерия 1C:ERP 1С:ЗУП 1С:КА 1С:УНФ 1С:УТ 1С:Розница 1С:ДО 1С:ERP Управление предприятием 2 Платные (руб)

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

36000 руб.

28.08.2025    2703    1    2    

4

Работа с интерфейсом Системный администратор Программист 1С:Предприятие 8 1C:Бухгалтерия Платные (руб)

Расширение «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

6000 руб.

14.01.2016    58242    20    25    

46

Работа с интерфейсом Программист 1С:Предприятие 8 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами (виджетами) в 1С.

5160 руб.

29.06.2020    22865    32    6    

51

Работа с интерфейсом Программист 1С:Предприятие 8 1C:Бухгалтерия Россия Платные (руб)

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

5040 руб.

06.10.2020    12852    8    8    

14

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

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    43395    mrXoxot    44    

138

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

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

27.05.2024    24834    smielka    38    

111
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. qwinter 684 06.06.19 11:54 Сейчас в теме
Использование функции Массив() было бы логичней для такого случая. И наглядней.
3. swimdog 786 06.06.19 12:36 Сейчас в теме
(1) Так полей может быть много, это у меня в примере по 1 полю. Все через массив выводить?
5. qwinter 684 06.06.19 12:43 Сейчас в теме
(3) а какая разница сколько полей?) Добавить в ресурс и написать Массив(Различные Договор) даже для 30 полей быстрее написания такого запроса)))
8. swimdog 786 06.06.19 12:54 Сейчас в теме
(5) Можете прислать пример этого отчета на СКД на моих данных из статьи? Например, в личку скинуть. Я не очень понимаю, как это должно выглядеть в схеме.
9. qwinter 684 06.06.19 13:00 Сейчас в теме
11. swimdog 786 06.06.19 15:29 Сейчас в теме
(9) Вариант хороший, но есть одна тонкость. Поля в разных колонках могут не совпасть, если есть пустые значения. Например, есть
договор 1, 100 руб.
договор 2, 0 руб.
договор 3, 150 руб.

Если выводить через массив или ТЗ, то СКД выведет примерно так:
Договоры | Суммы
договор 1 | 100 руб.
договор 2 | 150 руб.
договор 3 |

Поэтому я и написал, что когда полей много, то с выводом приходится заморачиваться. Либо я чего-то не знаю))
12. qwinter 684 06.06.19 16:28 Сейчас в теме
(11) Это все решаемые частности)) К тому же прямо противоречат названию темы, все таки это связанные поля))

Прилепил скд с двумя полями.
Прикрепленные файлы:
ТестСвязи УФ.erf
13. swimdog 786 06.06.19 16:43 Сейчас в теме
(12) Это не противоречит теме. В рамках каждой таблицы это связанные данные. Но между двумя таблицами связь по 1-2 полям.
10. qwinter 684 06.06.19 14:52 Сейчас в теме
(8) И чуть более замороченный вариант для управляемых форм с вычисляемыми полями.
Прикрепленные файлы:
ТестСвязи УФ.erf
2. pic-0 26 06.06.19 12:31 Сейчас в теме
Поучительно, спасибо.
4. dhurricane 06.06.19 12:41 Сейчас в теме
Прошу прощения, но на мой взгляд заголовок и описание статьи не соответствуют ее содержанию. По сути вся соль решения заключается в правильной подготовке данных запросом, СКД здесь никоим образом не участвует, а используется лишь для вывода данных. Тот же прием применим как для обычной консоли запросов, таки и для формирования печатной формы - меняется лишь способ вывода результата запроса.

Кажется, что стоило больше заострить внимание на нумерации данных в запросе и привести более "жизненный" пример, а не нумеровать записи "вручную".
6. swimdog 786 06.06.19 12:45 Сейчас в теме
(4) Нумерация хорошо описана в других статьях. В том числе в приведенной по ссылке. Смысл разжевывать то, что уже разжевано?
А пример позволяет, не углубляясь в детали, понять суть.
Да, СКД имеет опосредованное отношение, если смотреть со стороны запроса. А если смотреть со стороны задачи (нужно сделать отчет на СКД), то отношение к СКД будет прямое. Заголовок сделан так, чтобы люди, которым надо нарисовать такой отчет, смогли найти эту статью.
7. dhurricane 06.06.19 12:52 Сейчас в теме
(6) Что ж, идея, лежащая в основе статьи, теперь мне понятно лучше, спасибо. Не считаю в таком случае, что она "тянет" на целую статью, но тут Вы в праве со мной не согласиться.
Для отправки сообщения требуется регистрация/авторизация