17.05.2022 Дмитрий Колесников 79620
Как соединить две таблицы в 1С

Содержание:

1.      Внутреннее соединение таблиц

2.      Внешнее соединение таблиц    

3.      Левое соединение в 1С 

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

5.      Полное соединение в 1С

6.      Перекрёстное соединение (декартово произведение )

 

Для извлечения и обработки данных в «1С:Предприятии» используют запросы, которые пишутся на собственном SQL-подобном языке запросов. Зачастую в запросе нужно собрать данные из нескольких таблиц, соединив данные из них в результирующей таблице. При этом обычно требуется связать данные таблиц по некоторому общему полю.


Таблицы, являющиеся источниками данных для последующего соединения, перечисляются в запросе после ключевого слова ИЗ.


Обычно таблицы, из которых извлекаются данные в запросе с соединением, связываются между собой по некому условию (условию связи). Соединение таблиц в запросах обычно производится по полю, имеющему ссылочный тип, для каждой записи в исходных таблицах производится проверка условия (на равенство, неравенство) значений полей, выступающих условием связи. Это условие задаётся в запросе после ключевого слова ПО в предложении ИЗ, например: ПО Должности.ФизЛицо = ФизЛица.Ссылка.


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


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

 

1.     Внутреннее соединение таблиц

 

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


Продемонстрируем сказанное на пример. Пусть у нас имеются две таблицы: ФизЛица и Должности:


Запрос: Справочник.ФизЛица (Записей в результате: 8)


   

Рисунок 1. Исходная таблица 1 ФизЛица


Запрос: Справочник.Должности (Записей в результате: 8)


Рисунок 2. Исходная таблица 2 Должности

    

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

 

ВЫБРАТЬ

     ФизЛица.Код КАК Код,

     ФизЛица.Наименование КАК Имя,

     ГОД(ФизЛица.ДатаРождения) КАК ГодРождения,

     Должности.Наименование КАК Должность,

     Должности.Отдел КАК Отдел

ИЗ

     Справочник.ФизЛица КАК ФизЛица

          ВНУТРЕННЕЕ СОЕДИНЕНИЕСправочник.Должности КАК Должности

          ПО Должности.ФизЛицо = ФизЛица.Ссылка

УПОРЯДОЧИТЬ ПО

     Код

   

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


Запрос: Справочник.ФизЛица (Записей в результате: 6)


Рисунок 3. Демонстрация внутреннего соединения

 

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

 

2.     Внешнее соединение таблиц


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


Рассмотрим варианты внешних соединений – левого и правого соединения.  

 

3.     Левое соединение в 1С


Метод левого соединения в 1С Предприятие – это способ соединения, при котором помимо записей из обеих таблиц-источников, удовлетворяющих объявленному условию работы соединения, в полученную после выполнения запроса таблицу попадают записи из левой относительно ключевого слова СОЕДИНЕНИЕ таблицы значений (безотносительно наличия соответствий в правой таблице-источнике).


При этом в результирующей таблице «недостающим» значениям будет присвоено NULL. Из правой таблицы-источника в результирующей таблице будут исключительно те записи, для которых соблюдается объявленное условие, прочие же записи будут игнорированы.


Ключевое слово ВНЕШНЕЕ в тексте запроса использовать не обязательно.

            Приведём текст запроса:

 

ВЫБРАТЬ

     ФизЛица.Код КАК Код,

     ФизЛица.Наименование КАК Имя,

     ГОД(ФизЛица.ДатаРождения) КАК ГодРождения,

     Должности.Наименование КАК Должность,

     Должности.Отдел КАК Отдел

ИЗ

     Справочник.ФизЛица КАК ФизЛица

          ЛЕВОЕ СОЕДИНЕНИЕСправочник.Должности КАК Должности

          ПО Должности.ФизЛицо = ФизЛица.Ссылка

УПОРЯДОЧИТЬ ПО

     Код

 

Результат выполнения запроса будет иметь следующий вид:


Запрос: Справочник.ФизЛица (Записей в результате: 8)

Рисунок 4. . Демонстрация левого соединения

 

Из таблицы видно, что из левой таблицы-источника ФизЛица были взяты все записи, даже те, для которых не нашлось соответствия в правой таблице Должности.  

           

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


Этот способ соединения, если сравнить его с левым, даёт зеркально противоположный результат. Иначе говоря, из правой таблицы-источника будут взяты все записи, тогда как из левой – лишь те, что соответствуют записям правой таблицы-источника, то есть те, для которых удовлетворяется объявленное условие связи.


При этом в результирующей таблице «недостающим» (для которых не найдены связи по условию) значениям будет присвоено NULL.. Указание ключевого слова ВНЕШНЕЕ в тексте запроса не имеет принципиального значения.


Фактически, правое соединение преобразуется к левому, если поменять таблицы одну относительно другой местами и соединить их левым – противоположным – соединением. Такое преобразование осуществляет платформа «1С:Предприятия» при выполнении запроса.


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


            Запрос с использованием правого соединения:

 

ВЫБРАТЬ

     ФизЛица.Код КАК Код,

     ФизЛица.Наименование КАК Имя,

     ГОД(ФизЛица.ДатаРождения) КАК ГодРождения,

     Должности.Наименование КАК Должность,

     Должности.Отдел КАК Отдел

ИЗ

     Справочник.ФизЛица КАК ФизЛица

          ПРАВОЕ СОЕДИНЕНИЕСправочник.Должности КАК Должности

          ПО Должности.ФизЛицо = ФизЛица.Ссылка

УПОРЯДОЧИТЬ ПО

     Код

 

Результат запроса:


Запрос: Справочник.ФизЛица (Записей в результате: 8)


Рисунок 5. Демонстрация правого соединения

 

Как видим, теперь все записи взяты из правой таблицы Должности, и в таблице оказались даже те записи о должностях, для которых не нашлось физлиц.  

 

5.     Полное соединение в 1С


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


При этом в результирующей таблице «недостающим» (для которых не найдены связи по условию) значениям будет присвоено NULL.

            Запрос:

 

ВЫБРАТЬ

     ФизЛица.Код КАК Код,

     ФизЛица.Наименование КАК Имя,

     ГОД(ФизЛица.ДатаРождения) КАК ГодРождения,

     Должности.Наименование КАК Должность,

     Должности.Отдел КАК Отдел

ИЗ

     Справочник.ФизЛица КАК ФизЛица

          ПОЛНОЕ СОЕДИНЕНИЕСправочник.Должности КАК Должности

          ПО Должности.ФизЛицо = ФизЛица.Ссылка

УПОРЯДОЧИТЬ ПО

     Код


    Запрос: Справочник.ФизЛица (Записей в результате: 10)


Рисунок 6. Демонстрация полного соединения

 

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

 

6.     Перекрёстное соединение (декартово произведение )

 

Перекрёстное соединение позволяет соединить каждую строку одной таблице с каждой строкой другой таблице. Такой запрос приведёт к созданию таблицы размером x*y, где x и y – соответственно, число строк в соединяемых таблицах.


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


            Приведём запрос перекрёстного соединения:

 

ВЫБРАТЬ

     ФизЛица.Код КАК Код,

     ФизЛица.Наименование КАК Имя,

     ГОД(ФизЛица.ДатаРождения) КАК ГодРождения,

     Должности.Наименование КАК Должность,

     Должности.Отдел КАК Отдел

ИЗ

     Справочник.ФизЛица КАК ФизЛица

          ПОЛНОЕ СОЕДИНЕНИЕСправочник.Должности КАК Должности

          ПО ИСТИНА

УПОРЯДОЧИТЬ ПО

     Код

 

Заметим, что запрос можно написать иначе:

 

ВЫБРАТЬ

            ФизЛица.Код КАК Код,

            ФизЛица.Наименование КАК Имя,

            ГОД(ФизЛица.ДатаРождения) КАК ГодРождения,

            Должности.Наименование КАК Должность,

            Должности.Отдел КАК Отдел

ИЗ

            Справочник.ФизЛица КАК ФизЛица,

            Справочник.Должности КАК Должности

 

    Запрос: Справочник.ФизЛица (Записей в результате: 64)


Рисунок 7. Заголовок таблицы декартова произведения

 

В результате выполнения запроса получается таблица с 64 строками (8*8).

   

Специалист компании «Кодерлайн»

Дмитрий Колесников

Наши проекты

Доработка конфигурации Заказчика «1С:Управление строительной организацией»
ЗАО «Стройтрансгаз»

Отрасль:
Проектирование

Внедренное типовое решение:
1С:Управление строительной организацией

Взаиморасчеты с поставщиками;
- Оформление заказов поставщикам;
- Склад и логистика;
- Транспорт;
- Планирование расхода ГС...

Внедрение ПП "1С:Корпоративный инструментальный пакет 8" в ООО «Торговый Дом Факел»
ООО «Торговый Дом Факел»

Отрасль:
Производство

Внедренное типовое решение:
1С:Предприятие 8. ERP Управление предприятием 2

Различная отраслевая специфика:
- Переработка давальческого сырья
- Учет спецодежды и спецоснастки
Управление отношениями с кли...

Автоматизация торговых операций на базе "1С:Управление торговлей" в ОАО "Авиазапчасть"
ОАО «Авиазапчасть»

Отрасль:
Авиационно-космическая промышленность

Внедренное типовое решение:
1С:Управление торговлей

- Оптовая торговля;
- Оформление заказов покупателей;
- Планирование продаж. ...

ООО "ЛИКАРД" (Лукойл)
ООО "ЛИКАРД" (Лукойл)

Отрасль:
Нефтесервис

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

Делопроизводство
• Учет и контроль исполнения поручений
Учет и хранение документов
• Учет рабочего времени
Закупки (снабжение) и...

ООО «Фипар»
ООО «Фипар»

Отрасль:

Внедренное типовое решение:
1С:Предприятие 8. ERP Управление предприятием 2

Специалисты «Кодерлайн» внедрили «1С:ERP. Управление предприятием 2» и автоматизировали блоки: продажи, закупки, производство, складская и т...

Внедрение ПП "1С:Бухгалтерия 8 ПРОФ" в ООО Фирма «Бисер»
ООО фирма «Бисер»

Отрасль:
Производство

Внедренное типовое решение:
1С:Бухгалтерия 8 ПРОФ

Финансы, управленческий учет, мониторинг показателей:
- Налоговый учет...

Автоматизация кадрового учета на базе ПП "1С:Зарплата и управление персоналом" в ТД НМК
ООО «Торговый дом Нальчикский молочный комбинат»

Отрасль:
Торговля

Внедренное типовое решение:
1С:Зарплата и управление персоналом

- Кадровый учет;
- Расчет зарплаты;
- Регламентированная отчетность;
- Анализ кадрового состава;
- Учет рабочего времени; ...

ПАО «АрселорМиттал Кривой Рог»
ПАО «АрселорМиттал Кривой Рог»

Отрасль:
Металлургическая промышленность

Внедренное типовое решение:
1С:Управление производственным предприятием для Украины

- Кадровый учет
- Расчет зарплаты
- Регламентированная отчетность
- Учет рабочего времени ...

Автоматизация документооборота в компании ООО "Ликард"
ООО «Ликард» (ОАО ЛУКОЙЛ)

Отрасль:
Нефтесервис

Внедренное типовое решение:
1С:Документооборот КОРП

- Отказ от бумажного документооборота, от громоздких систем на базе офисного пакета;
- Создан единообразный интерфейс как в офисе, так и...

МИР ХОББИ
МИР ХОББИ

Отрасль:
Торговля. Интернет магазин

Внедренное типовое решение:
1С:ERP Управление предприятием 2.0

Оформление заказов поставщикам
Взаиморасчеты с покупателями
Оформление заказов покупателей
Логистика адресного склада
Управление...

Компания IBS
Компания IBS

Отрасль:
Системный интегратор

Внедренное типовое решение:
1С:Управление производственным предприятием

- Интеграция систем – АСУП и «1С:Управление производственным предприятием»...

Фирма 1С
Фирма 1С

Отрасль:

Внедренное типовое решение:
1С:Документооборот

- Подготовка функциональной модели прикладного решения «1С:Документооборот» для сервиса «1С:Облачная карта решений»; - Возможность интеграц...

Наши соц. сети

Telegram-канал «Koderline 1С» Группа в Вконтакте «Кодерлайн КОРП» Rutube

Остались вопросы - обратитесь к нам!

Впишите свои Имя и Телефон, чтобы мы ответили на все интересующие Вас вопросы.
ФИО*
E-mail*
Телефон*
Сообщение