1с скд связи наборов данных параметр

Обновлено: 07.07.2024

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

· Если есть возможность получить все данные в одном запросе, то это – более приоритетный вариант, чем соединение наборов данных в СКД:

- Запросы выполняются на сервере СУБД, а не на сервере 1С: Предприятие 8;

- У современных СУБД есть оптимизатор запросов, что способствует большей производительности при формировании отчета.

· Если нет возможности получить данные в одном запросе, то нужно использовать соединение наборов данных в СКД:

- Соединение разнородных наборов: Набор данных Запрос – Набор данных Объект, Набор данных Запрос – Набор данных Объединение, Набор данных Объект – Набор данных Объединение.

· Если текст запроса в одном наборе получается слишком длинным, сложным для отладки, то возможно лучше разбить этот запрос на несколько отдельных наборов данных. Иногда, когда это не критично, лучше пожертвовать производительностью для отладки и дальнейшего сопровождения системы.

1. Тип соединение наборов данных в СКД

Соединение наборов данных всегда левое внешнее. Что это значит? Предположим, у нас есть два набора данных: А и Б. Нам нужно соединить эти наборы по определенному условию и в результате получить 3 поля из набора А, и 1 поле из набора Б.

Пример соединения наборов данных

Пример соединения наборов данных

В результате внешнего левого соединения мы получим все строки из набора А. Из набора Б в результат попадут только те строки, которые соответствуют условию связей этих наборов. Таким образом из левого набора (Набор А) попадут все строки, а из правого (Набор Б) – только некоторые строки.

2. Чем соединение отличается от объединения набора данных?

Между объединением наборов данных и соединением есть большая разница. При объединении наборов данных в итоговую таблицу попадают все записи первого набора и все записи из второго набора данных в СКД. Это можно отобразить на схеме.

Объединение наборов данных

Объединение наборов данных

В отличии от Запросов, в объединении наборов данных количество полей может не совпадать. Например, в Наборе А всего 3 поля, а в Наборе Б – 4 поля. Такое объединение корректно отработает.

3. Настройка соединения наборов данных

Настройка связей наборов данных в СКД настраивается на вкладке «Связи наборов данных».

Связи наборов данных

Связи наборов данных

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

Потребность в передаче параметра данных может возникнуть при выводе отчета по продажам за каждый день с конечным остатком на день продажи или отчета о продажах за каждый день с установленной ценой на этот день.

При использовании параметров в связях наборов данных фактически получается, что второй (правый) набор данных формируется в цикле. Для оптимизации в такой ситуации можно установить галочку «Список параметров». В этом случае данные из второго (правого) набор будут получаться порциями по 1000 строк. Благодаря этому можно оптимизировать вывод отчета.

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

Войдите как ученик, чтобы получить доступ к материалам школы

Система компоновки данных 1С 8.3 для начинающих: делаем связь наборов данных

Автор уроков и преподаватель школы: Владимир Милькин

Ставим цель

  • Написать отчёт, который выводит клиентов и их любимые продукты. У каждого клиента есть любимый цвет, а у каждого продукта свой цвет - вот на основании этих цветов и нужно определять "любимость" продукта. К примеру, если у Андрея любимый цвет красный, то одним из его любимых продуктов будут помидоры (они красного цвета).
  • Применить в отчёте два набора данных. Первый набор - это данные из таблицы справочника "Клиенты". Второй - данные из таблицы справочника "Еда".
  • Осуществить связь этих двух наборов, чтобы в отчёте остались только любимые продукты для каждого из клиентов.

Создаем новый отчет

Открываем базу "Гастроном" в конфигураторе и через главное меню создаём новый отчет:

Вид документа - "Внешний отчет":

В форме нового отчёта указываем имя "Урок6" и нажимаем кнопку "Открыть схему компоновки данных":


Оставляем имя схемы по умолчанию:

Добавляем первый набор данных

В открывшейся схеме переходим на закладку "Наборы данных" и через зелёный плюсик выбираем "Добавить набор данных - запрос":


Добавился первый набор данных. Напишем запрос.

Вызываем конструктор запроса:


Указываем таблицу "Клиенты" и поля, которые требуется получить из запроса:

Получился такой текст запроса:


Добавляем второй набор данных

Выделяем мышкой пункт "Наборы данных".


. и добавляем ещё один набор данных - запрос:


Выделяем его (НаборДанных2) и снова вызываем конструктор запроса:


Указываем таблицу справочника "Еда" и поля, которые требуется получить из запроса:

Получился такой текст запроса:


Обратите внимание, что у нас сейчас в отчёте присутствуют два набора данных: НаборДанных1 и НаборДанных2. У каждого свой текст запроса и свои данные.

Делаем имена более наглядными

Для наглядности, давайте переименуем НаборДанных1 в Клиенты, а НаборДанных2 в Еда.

Сделайте это двойным щелчком по каждому из наборов:


Данные каждого из наборов мы сможем использовать в нашем отчёте. К этим данным мы будем обращаться через поля.

В данный момент у набора "Клиенты" следующие поля: "Наименование" и "ЛюбимыйЦвет", а у набора "Еда": "Наименование" и "Цвет".

Видим, что имена пересекаются и мы легко запутаемся. Поэтому давайте изменим имена полей на более говорящие.

Выделяем набор "Клиенты" и меняем имена полей так:


Затем выделяем набор "Еда" и меняем имена полей так:


Вызываем конструктор настроек

Наконец, переходим на закладку "Настройки" и нажимаем волшебную палочку, чтобы вызвать конструктор настроек:


Тип отчета - "Список. ":

Выбираем поля для отчета из обоих наборов:

Видите почему так важно было изменить имена полей? На этапе настроек компоновки данных мы не видим из каких наборов эти поля. Видим только их имена.

Проверяем отчёт

Сохраняем отчет и формируем в режиме пользователя:


Ага. Хорошо, но не совсем. Произошло так называемое перекрёстное соединение двух наборов (вам это должно быть хорошо знакомо по соединениям в запросах, которые мы изучали в прошлых модулях). Каждой записи из таблицы "Клиенты" сопоставлена запись из таблицы "Еда".

Но нам нужно из всех этих записей оставить только те у которых поле "ЛюбимыйЦветКлиента" равно полю "ЦветЕды":


Осуществляем связь двух наборов данных

Для этого осуществим связь двух наборов данных (Клиенты и Еда) по полям ЛюбимыйЦветКлиента и ЦветЕды.

Переходим на закладку "Связи наборов данных" и нажимаем на кнопку-плюсик, чтобы добавить новую связь:


Настраиваем параметры как на рисунке ниже:


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

Выражение источник. Указываем здесь выражение или просто поле из набора данных источника (мы здесь указали поле ЛюбимыйЦветКлиента из набора Клиенты).

Выражение приемник. Указываем здесь выражение или просто поле из набора данных приёмника (мы здесь указали поле ЦветЕды из набора Еда).

Таким образом данная связь оставит из прошлого списка только те строки, у которых поле ЛюбимыйЦветКлиента равно полю ЦветЕды.

Сохраним отчёт и запустим в режиме пользователя:


Сделаю пояснение про поле "Условие связи", об которое так часто бьют свои копья начинающие программисты.

Условие связи - это вспомогательное поле. Туда можно писать выражения с участием полей только из набора данных, указанного в источнике связи.

В этом случае для всех строк из источника связи перед осуществлением связи будет проверяться это выражение (условие связи). И если это выражение равно ИСТИНА, то будет предприниматься попытка установить связи этой строки со строками из приемника связи. Если же выражение равно ЛОЖЬ, то таких попыток предприниматься не будет.

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

Очень просто. Напишем в условии связи выражение ИмяКлиента = "Андрей":


Сохраним отчёт и сформируем в режиме пользователя:


Эталонная обработка, после выполнения всех шагов этого урока

Войдите на сайт как ученик

Для учеников

Прибегайте к изучению эталонного варианта только после самостоятельного выполнения всех шагов.

На вопросы учеников — отвечаю по почте, но прежде загляните в ЧАВО (ссылка) .

Войдите как ученик, чтобы получить доступ к материалам школы

Система компоновки данных 1С 8.3 для начинающих: объединяем наборы данных

Автор уроков и преподаватель школы: Владимир Милькин

На прошлом уроке мы познакомились с соединением наборов данных. Сегодня же мы научимся объединять различные наборы данных в один набор.

Ставим цель

  • Создать новый отчёт, в котором будут выводиться закупки (дата, поставщик) и продажи (дата, клиент) одновременно.
  • Для этого сделаем два отдельных набора данных с выборкой из таблиц документов "ПоступлениеЕды" и "ПродажаЕды", а затем объединим их в один набор.

Создаем новый отчет

Открываем базу "Гастроном" в конфигураторе и через главное меню "Файл->Новый. " создаём отчёт:

Вид документа - "Внешний отчет":

В форме нового отчёта указываем имя "Урок7" и нажимаем кнопку "Открыть схему компоновки данных":


Соглашаемся с именем макета по умолчанию:

Создаем первый набор данных

Создаём новый набор данных - запрос (через зелёный плюсик), выделяем его и вызываем конструктор запроса:


Делаем выборку из таблицы документов "ПоступлениеЕды" следующих полей:

Вот он, текст нашего запроса к таблице по закупкам:


Создаем второй набор данных

Выделяем мышкой пункт "Наборы данных".


. и добавляем ещё один набор данных - запрос:


Выделяем его и вызываем конструктор запроса:


Делаем выборку из таблицы документов "ПродажаЕды" следующих полей:

Текст запроса будет таким:


Сделаем имена более читабельными. Для этого двойным щелчком переименуем "НаборДанных1" в "Покупки" и поле "Дата" в "ДатаПокупки":


Второй же набор "НаборДанных2" переименуем в "Продажи", а поле "Дата" переименуем в "ДатаПродажи":


Мы получили два набора данных. В первом - информация по покупкам (дата покупки и поставщик), во втором- информация по продажам (дата продажи и клиент). Давайте попробуем теперь вывести всё это в отчет.

Проверяем результат

Переходим на закладку "Настройки" и нажимаем волшебную палочку для вызова конструктора:


Тип отчета - "Список. ":

Выбираем поля для отчёта из обоих наборов:

Сохраняем отчёт и формируем в режиме пользователя:


Получилось не совсем то, что ожидали. Получилось перекрёстное соединение одного набора данных с другим. А нам нужно именно объединение. Исправим.

Создаем объединение наборов данных

Для этого переходим на закладку "Наборы данных".

Снова выделяем мышкой пункт "Наборы данных".


. и добавляем туда набор данных - объединение:

Видим, что этот набор добавился и у него совершенно другая картинка (не таблица, как у двух других, а два объединяющихся круга):


Затем перетаскиваем мышкой наборы "Покупки" и "Продажи" в "НаборДанных1":


Вот это и значит, что теперь "Покупки" и "Продажи" будут не соединяться, а именно объединяться в отчёте.

Сохраним отчёт и сформируем в режиме пользователя:


Отлично. То, что надо.

А давайте зададимся целью объединить столбцы "Поставщик" и "Клиент" в один? И пусть этот новый столбец будет называться "Контрагент".

Для этого заходим на закладку "Наборы данных" и меняем имя поля "Поставщик" в наборе "Покупки" на имя "Контрагент":


Затем в наборе "Продажи" меняем имя поля "Клиент" на имя "Контрагент":


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


Должно получится вот так:


Готово

Сохраняем отчёт и проверяем в режиме пользователя:


Замечательно всё получилось.

Эталонная обработка, после выполнения всех шагов этого урока

Войдите на сайт как ученик

Для учеников

Прибегайте к изучению эталонного варианта только после самостоятельного выполнения всех шагов.

На вопросы учеников — отвечаю по почте, но прежде загляните в ЧАВО (ссылка) .

Войдите как ученик, чтобы получить доступ к материалам школы

Система компоновки данных 1С 8.3 для начинающих: первый отчёт на СКД

Автор уроков и преподаватель школы: Владимир Милькин

Если вы не читали введение к этому модулю - пожалуйста, прочтите его: ссылка.

Готовим рабочее место

Для выполнения уроков вам понадобится 1С 8.3 (не ниже 8.3.13.1644) .

Если у вас уже есть установленная 1С версии 8.3 - используйте её. Если нет - скачайте и установите учебную версию, которую фирма 1С выпускает специально для образовательных целей: ссылка на инструкцию по скачиванию и установке 1С.

На вашем рабочем столе должен появиться вот такой ярлык:

Для всех уроков из этого цикла мы будем использовать подготовленную мной базу данных "Гастроном". Она полностью совпадает с базой, которую мы использовали в четвёртом и пятом модулях школы при изучении запросов. Поэтому я рассчитываю, что вы знакомы с её справочниками и документами.

Если вы её удалили - скачайте заново по следующей ссылке, распакуйте и подключите в список баз.

Наконец, рабочее место настроено и сейчас мы вместе создадим наш первый отчёт при помощи системы компоновки данных. Он будет очень простым, чтобы продемонстрировать общие возможности системы компоновки данных (сокращенно СКД).

Ставим цель

Цель этого урока - создать отчёт, который в режиме пользователя выводит список клиентов со следующими полями:

  • Имя
  • Пол
  • Любимый цвет клиента.

Отчёт должен быть внешним. Это значит, что он будет создан и настроен в конфигураторе, а затем сохранен в виде отдельного (внешнего) файла на компьютере.

Чтобы сформировать такой отчет в 1С пользователю нужно будет запустить базу в режиме пользователя, открыть этот файл и нажать кнопку "Сформировать".

Создаём отчёт

Запускаем конфигуратор для базы "Гастроном":

Из главного меню выбираем пункт "Файл"->"Новый. ":

Выбираем "Внешний отчет":

Создаём схему компоновки данных внутри отчёта

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

Запустился конструктор создания схемы. Соглашаемся с именем по умолчанию "ОсновнаяСхемаКомпоновкиДанных" и жмём кнопку "Готово":

Открылось основное рабочее окно, с множеством закладок и полей, в котором мы и будем настраивать нашу схему компоновки данных.

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

Сейчас мы находимся на закладке "Наборы данных". На ней и останемся.

Пишем запрос через конструктор

Система компоновки данных (сокращенно СКД) требует от нас данные, которые она будет выводить пользователю.

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

Нажимаем на зелёный плюсик и в раскрывшемся списке выбираем пункт "Добавить набор данных - запрос":

Добавился набор данных с именем "НаборДанных1", но мы видим, что поле "Запрос" в нижней части окна пока пустое:

Наша задача написать в это поле текст запроса. Вы ещё не забыли как это делается?

В этом запросе мы выбрали три поля ("Наименование", "Пол" и "ЛюбимыйЦвет") из таблицы "Справочник.Клиенты".

Но не торопитесь писать этот текст в поле "Запрос" вручную.

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

Чтобы вызвать этот конструктор нажмём кнопку "Конструктор запроса. " в верхней правой части поля "Запрос":

В открывшемся окне перетащим таблицу "Клиенты" из первого столбца во второй, чтобы указать, что именно из этой таблицы мы будем запрашивать данные:

Получилось вот так:

Далее раскроем таблицу "Клиенты" во втором столбце по знаку "Плюс", чтобы увидеть все её поля и перетащим поле "Наименование" из второго столбца в третий, чтобы указать, что из этой таблицы нам нужно запрашивать поле "Наименование":

Получилось вот так:

Поступим точно так же с полями "Пол" и "ЛюбимыйЦвет". Результат будет таким:

Нажмём кнопку "ОК", чтобы выйти из конструктора запроса и увидим, что текст запроса автоматически добавился в поле "Запрос".

Более того на основании текста запроса 1С сама вытащила имена полей (область выше запроса), которые будут использоваться схемой компоновки данных:

Теперь, когда мы составили запрос, СКД знает каким образом получать данные для отчёта.

Настраиваем представление данных

Осталось как-то визуализировать эти данные для пользователя в виде печатной формы. И вот тут СКД может творить чудеса!

Чтобы сотворить такое чудо перейдём на вкладку "Настройки" и нажмём кнопку конструктора настроек (волшебная палочка):

В открывшемся окне укажем тип отчёта "Список" и нажмём "Далее":

В следующем окне выберем (путём перетаскивания) поля, которые нужно будет отобразить в списке (перетащим все из доступных нам: "ЛюбимыйЦвет", "Наименование" и "Пол"):

Получим вот такой результат и нажмём кнопку "ОК":

Конструктор настроек закрылся и появился пункт "Детальные записи":

Отчёт готов, давайте же его проверим. Для этого вначале сохраним отчет в виде внешнего файла.

Сохраняем отчёт в виде файла

Откроем пункт главного меню "Файл"->"Сохранить":

Я сохраню его на рабочий стол под именем "Урок1":

Проверяем отчёт в режиме пользователя

Наконец, закроем конфигуратор и зайдём в нашу базу в режиме пользователя:

Имя пользователя "Администратор", пароля нет:

Через меню выберем пункт "Файл"->"Открыть. ":

И укажем файл отчёта (я сохранял его на рабочий стол под именем "Урок1.erf":

Открылась форма отчёта, нажмём кнопку "Сформировать":

Готово! Вот она наша печатная форма со списком клиентов, их любимым цветом и полом:

Печатную форму можно легко распечатать. Для этого достаточно выбрать в меню пункт "Файл"->"Печать. ":

Вот так просто, без программирования нам удалось создать полноценный отчёт, который пользователи смогут открывать в своих базах, формировать и распечатывать.

То ли ещё будет, наберитесь терпения

Эталонная обработка, после выполнения всех шагов этого урока

Войдите на сайт как ученик

Для учеников

Прибегайте к изучению эталонного варианта только после самостоятельного выполнения всех шагов.

На вопросы учеников — отвечаю по почте, но прежде загляните в ЧАВО (ссылка) .

Читайте также: