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

06.06.19

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

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

Скачать исходный код

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

 

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

Для начала создадим в СКД 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С v8.3 Конфигурации 1cv8 Платные (руб)

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

2400 руб.

29.06.2020    17197    23    4    

37

Новогоднее оформление для 1С

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    11690    776    elcoan    47    

108

Конструктор HTML, CSS и javascript

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

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

2 стартмани

10.04.2023    10221    157    acces969    31    

120

Модель состояния для MVC

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    4214    kalyaka    4    

31

Условное оформление элементов форм в пользовательском режиме 1С (управление видимостью и доступностью элементов форм)

Работа с интерфейсом Платформа 1С v8.3 Платные (руб)

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

6000 руб.

18.01.2022    9111    1    2    

6

Программный интерфейс для доработки форм

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Реализовал простой способ программного создания новых элементов, команд и реквизитов на форме.

25.11.2021    10020    AtamanovYS    19    

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

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

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

Прилепил скд с двумя полями.
Прикрепленные файлы:
ТестСвязи УФ.erf
13. swimdog 767 06.06.19 16:43 Сейчас в теме
(12) Это не противоречит теме. В рамках каждой таблицы это связанные данные. Но между двумя таблицами связь по 1-2 полям.
10. qwinter 677 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 767 06.06.19 12:45 Сейчас в теме
(4) Нумерация хорошо описана в других статьях. В том числе в приведенной по ссылке. Смысл разжевывать то, что уже разжевано?
А пример позволяет, не углубляясь в детали, понять суть.
Да, СКД имеет опосредованное отношение, если смотреть со стороны запроса. А если смотреть со стороны задачи (нужно сделать отчет на СКД), то отношение к СКД будет прямое. Заголовок сделан так, чтобы люди, которым надо нарисовать такой отчет, смогли найти эту статью.
7. dhurricane 06.06.19 12:52 Сейчас в теме
(6) Что ж, идея, лежащая в основе статьи, теперь мне понятно лучше, спасибо. Не считаю в таком случае, что она "тянет" на целую статью, но тут Вы в праве со мной не согласиться.
Оставьте свое сообщение