что такое внешнее соединение 1с

Что такое внешнее соединение 1с

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

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

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

Соединения в запросах

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

Для того, чтобы осознать необходимость соединений давайте решим следующую задачу.

У нас в базе есть справочник Клиенты:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

И справочник Ассоциации:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Наша задача вывести любимые ассоциации клиентов, основываясь на цвете.

Для Андрея вообще нет подходящей ассоциации, так его любимый цвет красный, а ассоциаций красного цвета в базе нет.

Будем решать задачу постепенно.

Сначала запросим всех клиентов и их любимые цвета :

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Затем запросим все ассоциации и их цвета :

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Теперь нам каким-то образом следует совместить первую и вторую таблицу. Чтобы это сделать запросим информацию сразу из двух таблиц. Для этого перечислим обе таблицы в секции ИЗ через запятую. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. А в секции ВЫБРАТЬ укажем поля из обеих таблиц:

Если мы попробуем выполнить этот запрос, то получим ошибку:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Причина ошибки в том, что поле Наименование присутствует сразу в обеих таблицах (Клиенты и Ассоциации) и система просто не знает поле из какой именно таблицы имеется в виду.

Чтобы устранять подобные неоднозначности при выборке из более чем одной таблицы принято указывать полные названия полей. Полное название поля включает в себя полное имя таблицы (например, Справочник.Клиенты) и имя самого поля (например, Наименование).

Таким образом полное название поля Наименование из таблицы Клиенты будет Справочник.Клиенты.Наименование.

А полное названия поля Наименование из таблицы Ассоциации будет Справочник.Ассоциации.Наименование.

Перекрёстное соединение

Перепишем предыдущий запрос с полными именами полей:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

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

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Внутреннее соединение

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

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Чтобы получить эти записи добавим к предыдущему запросу секцию ГДЕ:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Есть ещё один вариант написания того же самого внутреннего соединения :

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Сравните этот и предыдущий запрос. Они совершенно одинаковы с точки зрения платформы, просто имеют разный синтаксис. И этот и предыдущий запросы содержат внутреннее соединение таблицы Клиенты с таблицей Ассоциации по полям ЛюбимыйЦвет и Цвет соответственно.

Левое внешнее соединение

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

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

Перепишем запрос так, чтобы в результат попадали в том числе те записи из первой таблицы, для которых не нашлось ни одной пары из второй таблицы (в данном случае Андрей):

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Такое соединение называется левым внешним соединением (слово внешнее можно опускать для простоты).

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Правое внешнее соединение

Но давайте снова вернёмся к внутреннему соединению:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

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

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

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Такое соединение называется правым внешним соединением (слово внешнее можно опускать для простоты).

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Полное соединение

А что если нам нужно, чтобы в результат запроса попадали помимо внутреннего соединения Андрей и Снег одновременно?

Для этого потребуется совместить результаты левого и правого соединений. Такой вид соединения уже придуман и называется полным соединением:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Результат полного соединения представляет из себя: все записи из внутреннего соединения ПЛЮС все записи из первой таблицы, не попавшие во внутреннее соединение (для которых не нашлось пары) ПЛЮС все записи из второй таблицы, не попавшие во внутреннее соединение (для которых не нашлось пары).

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Псевдонимы таблиц

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

А чтобы результат запроса был ещё нагляднее добавим псевдонимы полей, которые мы уже рассматривали на одном из прошлых уроков:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Обработка NULL

Присмотритесь к результатам последнего запроса (как впрочем и многих предыдущих на этом уроке).

Чему равны значения полей Ассоциация и ЕёЦвет для первой строчки? А что вы скажете насчет полей Клиент и ЕгоЦвет для последней строки?

Они равны NULL, которое как мы уже знаем означает отсутствие какого либо значения:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

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

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

В данном случае для полей Клиент и Ассоциация в случае обнаружения NULL мы будем подставлять пустую строку «».

А вот поля ЕгоЦвет и ЕёЦвет являются ссылками на элементы справочника Цвета, поэтому в них можно подставлять только значения являющиеся ссылками указанных типов. Каждый ссылочный тип (например, Справочник или Документ) имеет предопределенный элемент ПустаяСсылка. Чтобы указать его значение в запросе воспользуемся функцией ЗНАЧЕНИЕ.

Для определения того, что в поле попало NULL будем использовать уже знакомую нам по прошлым урокам функцию ЕСТЬNULL:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

С виду (из консоли запросов) результат не изменился. Мы по-прежнему видим пустые поля. Но это только потому, что строковые представления у NULL и у пустых полей всех типов совпадают и равны пустой строке.

На самом же деле эти пустые поля уже не есть NULL (отсутствие значения), теперь в них появились значения (пустые), с которыми уже можно работать (совершать операции).

Соединение более двух таблиц

Можно последовательно соединять сколько угодно таблиц.

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

Для этого последовательно соединим по цвету таблицу Клиенты с таблицей Ассоциации, а затем (получившийся результат) с таблицей Еда:

Источник

Внешнее соединение

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

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Отличия от Automation-сервера

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Преимущества

Пример

В качестве примера можно привести обращение к информационной базе 1С:Предприятия 8 через внешнее соединение из программы на языке MS Visual Basic.

Информационная база находится в каталоге c:\InfoBases\Trade. В программе 1С:Предприятие 8 создается объект типа СправочникМенеджер.Товары и создается новая группа элементов с названием ***** Экспорт из Excel ******. Во вновь созданную группу каталога записываются данные из таблицы MS Excel:

Dim cntr As Object
Dim trade As Object
Dim Элемент As Object

Set cntr = CreateObject («V82.COMConnector») ‘Создать менеджер COM-соединений
Set trade = cntr.Connect («File=»»c:\InfoBases\Trade»»; Usr=»»Director»»;») ‘Получить внешнее соединение
Set СправочникТоваров = trade.Справочники.Товары
Set ГруппаТоваров = СправочникТоваров.СоздатьГруппу ()

ГруппаТоваров.Наименование = «***** Экспорт из Excel ******»
ГруппаТоваров.Записать

N = 100 ‘Количество строк в документе
For Count = 1 To N

Set Элемент = СправочникТоваров.СоздатьЭлемент ()
Элемент.Наименование = Application.Cells (Count, 2).Value
Элемент.Розн_Цена = Application.Cells (Count, 3).Value
Элемент.Мел_Опт_Цена = Application.Cells (Count, 4).Value
Элемент.Опт_Цена = Application.Cells (Count, 5).Value
Элемент.Родитель = ГруппаТоваров.Ссылка

Контекст исполнения

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

Процедуры, функции и глобальные переменные, определенные в модуле внешнего соединения с ключевым словом Экспорт становятся, как и в случае модуля приложения, частью глобального контекста.

Пул соединений

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

Варианты использования

С помощью внешнего соединения можно, например, организовать веб-доступ к базе данных 1С:Предприятия 8:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Также внешнее соединение позволяет организовать обмен XML-документами системы 1С:Предприятие 8 с внешним приложением:

Источник

Соединения в запросах 1С 8.3

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Перекрестное соединение таблиц

В качестве источника в запросах можно указать несколько разных таблиц. Если не указать никакие условия для связи таблиц, то будет получено декартово произведение (все возможные комбинации строк) или как еще называют перекрестное соединение.

Например, в базе есть 2 таблицы: ЛеваяТаблица и ПраваяТаблица. Состав таблиц следующий:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

В результате выполнения следующего запроса:

Будет получен такой результат:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Каждая запись из левой таблицы была связана с каждой записью из правой таблицы.

Виды соединений в запросе

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

Язык запросов 1С поддерживает следующие виды соединений:

В запросах позволяется не указывать слова внутреннее и внешнее.

Внутреннее соединение

В результате внутреннего соединения таблиц в выборку попадут только те записи, которые удовлетворяют условию соединения:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

В результат запроса не попала четвертая запись из левой таблицы, потому что для нее не нашлось записи в правой таблице, которая бы удовлетворяла условию ЛеваяТаблица.Код = ПраваяТаблица.Код.

Левое соединение

В результате левого соединения таблиц в выборку попадут все записи из левой таблицы, и только те записи из правой таблицы, которые удовлетворяют условию соединения:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

В четвертой строке в полях ПравоеНаименование и ПравыйКод будет NULL.

Правое соединение

Это то же самое, что и левое соединение, только таблицы меняются местами. В результате правого соединения таблиц в выборку попадут все записи из правой таблицы, и только те записи из левой таблицы, которые удовлетворяют условию соединения. Очень редко используется на практике:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

В четвертой строке в полях ЛевоеНаименование и ЛевыйКод будет NULL.

Полное соединение

В результате полного соединения таблиц в выборку попадут все записи из левой таблицы и все записи из правой таблицы. Где условие соединения будет выполнено — записи будут объединены. Где не будет выполнено будет NULL.

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

В четвертой строке в полях ЛевоеНаименование и ЛевыйКод будет NULL. В пятой строке в полях ПравоеНаименование и ПравыйКод будет NULL.

Два левых соединения в запросе

Допустим, что есть еще одна таблица со следующим содержимым:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

И нужно связать и ее и правую таблицу с левой. Для этого можно использовать два левых соединения:

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

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

Левое соединение с условием

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

что такое внешнее соединение 1с. Смотреть фото что такое внешнее соединение 1с. Смотреть картинку что такое внешнее соединение 1с. Картинка про что такое внешнее соединение 1с. Фото что такое внешнее соединение 1с

Казалось бы при левом соединении в результат запроса должны были попасть все записи из левой таблицы, но в результате только одна запись. Так происходит, потому что в строках с кодами «000000001», «000000003» и «000000004» в колонке ПравыйКод был получен NULL. После чего было выполнено сравнение значений данной колонки со значением «000000002». Сравнение с NULL всегда возвращает Ложь, поэтому такие записи не попали в результат запроса. На уровне СУБД оптимизатор запроса сразу отлавливает такие моменты и просто преобразует соединение во внутреннее.

Чтобы получить правильный результат нужно условие перенести из предложения ГДЕ в условие соединения:

Источник

Правила создания общих модулей

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

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

1.2. При разработке общих модулей следует выбирать один из четырех контекстов выполнения кода:

2.1. Серверные общие модули предназначены для размещения серверных процедур и функций, не доступных для использования из клиентского кода. В них реализуется вся внутренняя серверная бизнес-логика приложения.
Для корректной работы конфигурации в режимах внешнего соединения, управляемого и обычного приложений, серверные процедуры и функции следует размещать в общих модулях с признаками:

2.2. Серверные общие модули для вызова с клиента содержат серверные процедуры и функции, доступные для использования из клиентского кода. Они составляют клиентский программный интерфейс сервера приложения.
Такие процедуры и функции размещаются в общих модулях с признаком:

2.3. Клиентские общие модули содержат клиентскую бизнес-логику (функциональность, определенную только для клиента) и имеют признаки:

Исключение составляют случаи, когда клиентские процедуры и функции должны быть доступны только в режиме управляемого приложения (только в режиме обычного приложения или только в режиме внешнего соединения). В таких случаях, допустима иная комбинация двух этих признаков.

2.4. Для того чтобы избежать дублирования кода, рекомендуется создавать клиент-серверные общие модули с теми процедурами и функциями, содержание которых одинаково на сервере и на клиенте. Такие процедуры и функции размещаются в общих модулях с признаками:

В то же время, как только возникает необходимость ветвить код в клиент-серверных общих модулях на серверный и клиентский, то не следует использовать для этого инструкции препроцессора. Вместо этого, функциональность, различную для клиента и для сервера, рекомендуется реализовывать по общим правилам в модулях соответствующего типа – см. пп. 2.1 и 2.3. Такое явное разделение клиентской и серверной бизнес-логики продиктовано соображениями повышения модульности прикладного решения, упрощения контроля со стороны разработчика над клиент-серверным взаимодействием и снижением риска ошибок из-за принципиальных отличий требований к разработке клиентского и серверного кода (необходимость минимизации кода, выполняемого на клиенте, разной доступностью объектов и типов платформы и др.). При этом нужно иметь в виду неизбежное увеличение числа общих модулей в конфигурации.

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

3.1. Имена общих модулей рекомендуется строить по общим правилам именования объектов метаданных. Название общего модуля должно совпадать с названием подсистемы или отдельного механизма, процедуры и функции которой он реализует. Рекомендуется избегать в названиях общих модулей таких общих слов как «Процедуры», «Функции», «Обработчики», «Модуль», «Функциональность» и т.п. и применять их только в исключительных случаях, когда они более полно раскрывают назначение модуля.

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

3.2. Дополнительно к общим модулям могут быть добавлены уточняющие постфиксы.

Источник

1c8.pl.ua

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

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

Существует четыре вида соединений таблиц, которые обрабатывает механизм запросов 1С:Прсдприятия: Внутреннее, Левое внешнее. Правое внешнее, Полное Внешнее (или. проще. Внутреннее, Левое, Правое, Полное).

Внутреннее соединение

[ВНУТРЕННЕЕ] СОЕДИНЕНИЕ означает, что из обеих исходных таблиц – источников данных в результат запроса необходимо включить только те комбинации записей, которые соответствуют указанному условию. Остальные записи в результат не попадают.Ключевое слова ВНУТРЕННЕЕ можно не указывать вообще, оно повышает наглядность и удобочитаемость текста запроса.

Самый простейший вид соединения — внутреннее. В этом случае запрос просто находит пары строк с совпадающим значением» ключа (в данном примере, как и во всех последующих, в качестве ключевого поля используется поле «Контрагент»).

Тип общего модуляПример наименованияВызов сервераСерверВнешнее соединениеКлиент
(обычное приложение)
Клиент
(управляемое приложение)
1.СерверныйОбщегоНазначения (или ОбщегоНазначенияСервер)
Контрагенты
КонтрагентПолное наименование
ИвановИванов И.И.
ПетровПетров П.П.
СидоровСидоров С.С.
Продажи
КонтрагентСумма
Иванов5000
Петров7500
Сидоров15000

Результирующая таблица:

Продажи контрагентам
КонтрагентПолное наименованиеСумма
ИвановИванов И.И.5000
ПетровПетров П.П.7500
СидоровСидоров С.С.15000

Левое (Правое) соединение

ЛЕВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Но, в отличие от внутреннего соединения, в результат запроса надо включить также еще и записи из первого (указанного слева от слова СОЕДИНЕНИЕ) источника, для которых не найдено соответствующих условию записей из второго источника. Таким образом, в результат запроса будут включены все записи из первого источника; они будут соединены с записями из второго источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из второго источника, будут содержать NULL в полях, формируемых на основании записей из этого источника.

ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить также еще и записи из второго (указанного справа от слова СОЕДИНЕНИЕ) источника, для которых не найдено соответствующих условию записей из первого источника.Таким образом, в результат запроса будут включены все записи из второго источника; они будут соединены с записями из первого источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из первого источника, будут содержать NULL в полях, формируемых на основании записей из этого источника.

Ситуация осложняется, когда источники совпадают не полностью. ‘Го есть, в одной таблице есть запись с некоторым значением ключа, а в другой такой записи нет. На схеме показана ситуация, когда запись есть в таблице контрагентов, но нет в таблице продаж. Это означает, что некий контрагент ничего у нас не покупал, хотя в справочнике контрагентов он у нас имеется (например, попросил человек выписать ему счёт на оплату, а покупать передумал; вполне жизненная ситуация). В этом случае в выборке на месте отсутствующей записи появится значение Null.

Контрагенты
КонтрагентПолное наименование
ИвановИванов И.И.
ПетровПетров П.П.
СидоровСидоров С.С.
СемёновСемёнов С.С.
Продажи
КонтрагентСумма
Иванов5000
Петров7500
Сидоров15000

Результирующая таблица:

Продажи контрагентам
КонтрагентПолное наименованиеСумма
ИвановИванов И.И.5000
ПетровПетров П.П.7500
СидоровСидоров С.С.15000
СемёновСемёнов С.С.Null

Полное соединение

ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в результат запроса надо включить комбинации записей из обеих исходных таблиц, которые соответствуют указанному условию. Кроме того, в результат запроса надо включить также еще и записи из второго (указанного справа от слова СОЕДИНЕНИЕ) источника, для которых не найдено соответствующих условию записей из первого источника.Таким образом, в результат запроса будут включены все записи из второго источника; они будут соединены с записями из первого источника при выполнении указанного условия. Строки результата запроса, для которых не найдено соответствующих условию записей из первого источника, будут содержать NULL в полях, формируемых на основании записей из этого источника.

Полное внешнее соединение, это, как ясно уже из названия, дальнейшее развитие Левого (или Правого) соединений. При организации полного соединения важно учитывать такое обстоятельство: при соединении данного вида в запрос попадают все записи из обеих таблиц. Иначе говоря, значение ключевого ноля нам нужно будет получать и из левой, и из правой таблиц. Обратите внимание: обязательно из обеих таблиц! Один из вариантов решения такой: создать для этого дополнительное поле, в котором делать проверку на Null. Если ключ в одной из таблиц равен Null, тогда нужно брать его значение из другой таблицы.

Поскольку полное соединение несколько сложнее других видов соединений, немного изменим наш пример. Теперь нам нужно получить не просто развёрнутый список продаж, а список всех действующих контрагентов.

Закупки
КонтрагентСумма
Иванов4000
Андреев3500
Продажи
КонтрагентСумма
Иванов5000
Петров7500
Сидоров15000

Таблица после полного соединения, со всеми полями исходных таблиц:

Действующие контрагенты
КонтрагентЗакупкиСуммаЗакупкиКонтрагентПродажиСуммаПродажи
Иванов4000Иванов5000
NullNullПетров7500
NullNullСидоров15000
Андреев3500NullNull

Окончательный вид таблицы, в которой контрагенты сведены в одно поле:

Действующие контрагенты
КонтрагентСуммаЗакупкиСуммаПродажи
Иванов40005000
Петров7500
Сидоров15000
Андреев3500

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

Источник

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

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