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

Связи наборов данных в СКД и принципы их использования

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

Схема компоновки данных, реализованная в 1С, поддерживает три типа источника данных (Рис.1)

Источники данных

Наиболее очевидным и часто используемым разработчиками источником данных является «Запрос».

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

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

Третий источник данных «Объединение». Фактически, этот источник можно рассматривать как один из видов связи. Он объединяет (сводит в одну несколько таблиц), не сопоставляя, однако совпадение тех или иных полей. То есть, если в двух объединяемых таблицах 3 и 4 строки соответственно, то в результирующем источнике данных, будет 7 строк.

Постановка задачи

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

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

Таким образом, мы должны:

Процесс выполнения

Пройдем все перечисленные шаги:

Здесь важно обратить внимание на «Имя объекта, содержащего данные», именно это имя нам придется указать в коде модуля отчета.

Саму процедуру получения данных из внешнего файла мы описывать не будем, обратим внимание на ту часть кода, которая обязательно должна присутствовать в компоновке для того, чтобы мы могли получить данные для «Набора данных 2» (Рис.5).

Важно! При создании «Объекта» в коде процедуры при компоновке, значение параметра СтандартнаяОбработка должно быть Ложь.

Переходим на закладку «Связи наборов данных».

Связываем наборы

Заходим на соответствующую закладку схемы (Рис.6).

Мы видим табличную часть, которая очень похожа на табличную часть, которая есть в конструкторе запросов, за некоторым исключением. Для набора источника и набора приемника связи нельзя установить галочку «Все», зато добавлены несколько дополнительных колонок.

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

Прежде, чем создать связь, давайте определимся с назначением колонок:

Если бы мы в качестве условия связи указали наименование какой-либо номенклатуры, или её вид воспроизводства или еще что-то, мы могли бы получить более точную выборку для нашей задачи. Результат наших действий можно увидеть на рис.8

Для двух нижних строк отчета в файле с ценами не нашлось соответствия.

Источник

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

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

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

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

Ставим цель

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

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

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

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

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

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

Ставим цель

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Готово

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

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

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

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

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

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

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

Источник

Профессия — 1С

рубрики: СКД | Дата: 24 февраля, 2017

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

На первый взгляд бывает непонятно зачем нужно делать несколько наборов данных и потом соединять их, если можно просто сделать соединение таблиц внутри одного набора данных. Для этого есть как минимум одна причина — в случае использования внешнего набора данных. Как известно, когда мы пишем запрос для набора данных СКД, мы не можем передать в него например таблицу значений в качестве временной таблицы. Хотя для обычного запроса это делается достаточно просто. В случае же использования СКД мы вынуждены передавать в нее таблицу значений в качестве внешнего источника данных. Отсюда и вытекает необходимость делать соединение наборов данных. Сразу отмечу, что наборы данных могут соединятся только при помощи ЛЕВОГО СОЕДИНЕНИЯ. Поэтому в отличие от Соединения таблиц в конструкторе запросов здесь вы не увидите флажков, которые отвечают за тип соединения таблиц.

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

Соответственно для товаров у нас будет набор данных, полученный при помощи запроса, а для цен будет набор данных полученный из внешнего источника.
1с скд соединение наборов данных с параметрами
1с скд соединение наборов данных с параметрами
А теперь перейдем на закладку Связи наборов данных и выполним настройку как показано на рисунке.
1с скд соединение наборов данных с параметрами
На закладке Настройки для начала сделаем элементарный вывод детальных записей
1с скд соединение наборов данных с параметрами
Пусть у нас в справочнике Товары содержатся следующие записи

Товар
Ручка
Карандаш

А из внешних данных мы получили следующие цены поставщиков

ТоварПоставщикЦена
ЛампаООО «Леспром»700
ЛампаПАО «Канцтовары»560
РучкаПАО «Канцтовары»145
КарандашООО «Леспром»15
КарандашПАО «Канцтовары»31

Запускаем отчет на выполнение и видим следующую картину

ТоварПоставщикЦена
РучкаПАО «Канцтовары»145
КарандашООО «Леспром»15
КарандашПАО «Канцтовары»31

То есть видим, что наборы данных были связаны между собой по всем правилам ЛЕВОГО СОЕДИНЕНИЯ

На закладке Связи наборов данных есть возможность указать некоторые дополнительные параметры в соответствующих полях. Но используются они достаточно редко. Подробнее можно почитать в технической документации и на дисках ИТС.

Источник

Разбираемся с параметрами редактирования СКД

Вступление

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

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

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

Самые простые параметры редактирования

Наиболее простыми для использования являются следующие параметры: Формат редактирования, Быстрый выбор, Выбор групп и элементов. С ними все понятно, поэтому их пропустим.

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

Связи параметров выбора

Настраиваются через специальное окно Редактирование связей параметров выбора.
Рассмотрим на примере как заполнять поля этой формы.

Пример 1

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

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

Теперь, если у параметра Контрагент стоит флаг Использование и контрагент выбран, то при выборе договора, будет накладываться отбор по владельцу.
Если же Контрагент не выбран или флаг у контрагента не установлен, то при выборе договора будут отображаться все договоры.

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

Параметры выбора

Настраиваются через специальное окно Редактирование параметров выбора.
Рассмотрим на примере как заполнять поля этой формы.

Пример 2

Поля Контрагент и Договор из первого примера.
Мы хотим, чтобы пользователь мог выбрать только договор с видом С покупателем или Прочее и не помеченный на удаление.
Добавляем два параметра:
1. Параметр выбора = Отбор.ПометкаУдаления; Значение = ЛОЖЬ
2. Параметр выбора = Отбор.ВидДоговора; Значение = список из двух элементов : С покупателем, Прочее
Эти два параметра будут устанавливаться всегда независимо от выбранности/невыбранности параметра Контрагент.

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

Зачем нужно слово Отбор?

Почему в поле Параметр выбора необходимо использовать приставку Отбор? Какие еще параметры можно указывать и на что это влияет?

Это один из ключевых вопросов данной статьи, который и стал поводом к ее написанию.

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

Чтобы получше разобраться поэкспериментируем

Пример 3

Добавим по два параметра в Параметры выбора и в Связи параметров выбора.

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

Поставим точку останова в форме выбора при создании на сервере

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

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

Связь по типу

В настройке данного параметра сбивает с толку наличие поля Элемент связи с типом число.
Чтобы понять как его настраивать разберем два примера.

Пример 4

Создадим в СКД параметр Счет.
И еще три параметра Субконто1, Субконто2, Субконто3.
Мы хотим, чтобы если выбран Счет, то во параметре СубконтоN автоматически устанавливался отбор со значениями соответствующего субконто.
В этом случае для параметра Субконто1 настраиваем Связь по типу:
Поле = Счет (ПараметрыДанных.Счет), Элемент связи = 1 (номер субконто)
Для остальных двух параметров аналогично, только Элемент связи будет 2 и 3.

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

Теперь при выбранном параметре Счет, в полях СубконтоN будут доступны только значения, соответствующие типу субконто

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

Пример 5

Создадим в СКД параметры Вид субконто и Субконто.
Мы хотим, чтобы при выборе вида, были доступны только значения соответствующие виду субконто.
В этом случае для параметра Субконто1 настраиваем Связь по типу:
Поле = ВидСубконто (ПараметрыДанных.ВидСубконто), Элемент связи = 0 (не имеет значение в данном случае)

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

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

Заключение

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

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

Думаю, что данное описание поможет разобраться в этом механизме и начать его применять.

Источник

Добавить комментарий

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