17.05.2022 Дмитрий Колесников 98786
Как соединить две таблицы в 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С:ERP Управление предприятием 2.1».

- Сделано ТЗ по автоматизации учета МСФО: - Разработана карта бюджета доходо...

ООО «ПЛЮСПЭЙ»
ООО «ПЛЮСПЭЙ»

Отрасль:
Организацией расчетов посредством электронных средств платежа

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

- Разработка подсистемы оперативного учета транзакций...

Группа компаний АО «Киномакс»
Группа компаний АО «Киномакс»

Отрасль:
Культура, шоу-бизнес

Внедренное типовое решение:
БИТ.Финанс

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

ПЭК
ПЭК

Отрасль:
Грузоперевозки

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

- Внедрение функционала управления НСИ;
- Рефакторинг;
- Оптимизация общег...

Автоматизации учета затрат и расчета себестоимости с использованием конфигурации «Koderline: Управление проектами строительства скважин»
ООО «Буровая сервисная компания «ГРАНД»

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

Внедренное типовое решение:
«Koderline: Управление проектами строительства скважин»

Учет и планирование:
- собственную разработку компании «Кодерлайн» – конф...

ЗАО «Инвестгеосервис»
ЗАО «Инвестгеосервис»

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

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

Объемно-календарное планирование производства Автоматизация бизнес-проце...

Внедрение 1С:Управление торговлей в оптово-розничной компании «Ална-Байк»
ИП Титов Виктор Сергеевич «Ална-Байк»

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

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

- Управление складами;
- Управление заказами поставщиков;
- Управление зак...

Внедрение системы финансового учета БИТ:Финанс
ООО «Алькор и Ко» (Л’Этуаль)

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

Внедренное типовое решение:
БИТ.Финанс

- Финансовый учет;
- Поддержка проекта внедрения МСФО;
- Регламентные рабо...

Госкорпорация «Ростех»
Госкорпорация «Ростех»

Отрасль:
Производство, ТЭК >> Машиностроение, приборостроение

Внедренное типовое решение:
1С:Управление холдингом 1.3.

Специалисты «Кодерлайн» помогли разработать и внедрить автоматизированную...

АО «Вертолетная сервисная компания»
АО «Вертолетная сервисная компания»

Отрасль:
МТО эксплуатации вертолетной техники

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

- Консультации по сложным вопросам налогового и бухгалтерского учета;
- Ра...

Внедрение ПП "1С:CRM ПРОФ" в ООО «Торговый Дом Факел»
ООО «Торговый Дом Факел»

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

Внедренное типовое решение:
1С:CRM ПРОФ

- Управление отношениями с клиентами (CRM) ...

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

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

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

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

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

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

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

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