1С 8.3 Объединение в запросе
Данные > Примеры кода 1С > 1С 8.3 Запросы
Объединение в запросах 1С 8.3 - это выполнение двух разных запросов и объединение их результатов в один общий.
Требования к объединяемым таблицам это одинаковое количество полей. Если соответствующие друг другу поля в разных таблицах имеют один и тот же тип, то итоговое поле будет тоже иметь этот тип, если же тип разный, то итоговое поле будет иметь составной тип данных. Упорядочивать (группировать, подводить итоги) таблиц имеет смысл только после их объединения в конечный результат.
- ОБЪЕДИНИТЬ - конструкция объединяет два результата и группирует повторяющие строки (дубликаты строк из разных запросов будут удалены).
- ОБЪЕДИНИТЬ ВСЕ (работает быстрее чем ОБЪЕДИНИТЬ) - также объединяет два результата, но строки в результате автоматически не группирует (дубликаты строк из разных запросов удалены не будут). Используется для ускорения выполнения запроса, когда заведомо невозможно получения одинаковых строк.
Оглавление:
Объединение двух таблиц в одну в 1С 8.3:
&НаСервере
Процедура ОбъединениеДвухТаблицВОдну()
// Объединение "Контрагенты" и "Классификатор Сроков Полезного Использования"
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Контрагенты
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.КлассификаторСроковПИ");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Процедура ОбъединениеДвухТаблицВОдну()
// Объединение "Контрагенты" и "Классификатор Сроков Полезного Использования"
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Контрагенты
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.КлассификаторСроковПИ");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Объединение более двух таблиц в одну в 1С 8.3:
&НаСервере
Процедура ОбъединениеБолееДвухТаблицВОдну()
// Объединение трех таблиц Контрагенты, Материалы и Страны
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Контрагенты
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Материалы
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Страны");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Процедура ОбъединениеБолееДвухТаблицВОдну()
// Объединение трех таблиц Контрагенты, Материалы и Страны
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Контрагенты
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Материалы
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Страны");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Сохранение дубликатов в результате объединения таблиц в 1С 8.3:
&НаСервере
Процедура СохранениеДубликатовВРезультатеОбъединенияТаблиц()
// Объединение таблицы "Классификатор Сроков Полезного Использования" саму с собой так,
// чтобы дубликаты, которые получились сами по себе - остались в выборке (задвоились)
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.КлассификаторСроковПИ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.КлассификаторСроковПИ");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Процедура СохранениеДубликатовВРезультатеОбъединенияТаблиц()
// Объединение таблицы "Классификатор Сроков Полезного Использования" саму с собой так,
// чтобы дубликаты, которые получились сами по себе - остались в выборке (задвоились)
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.КлассификаторСроковПИ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.КлассификаторСроковПИ");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Объединение таблиц с разным количеством полей в 1С 8.3:
&НаСервере
Процедура ОбъединениеТаблицСРазнымКоличествомПолей()
// Создание дополнительных (недостающих) полей и заполнение их значениями
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование,
| Вес
|ИЗ
| Справочник.Материалы
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| Наименование,
| 0
|ИЗ
| Справочник.Контрагенты");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Процедура ОбъединениеТаблицСРазнымКоличествомПолей()
// Создание дополнительных (недостающих) полей и заполнение их значениями
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование,
| Вес
|ИЗ
| Справочник.Материалы
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| Наименование,
| 0
|ИЗ
| Справочник.Контрагенты");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Упорядочивание при объединении таблиц в 1С 8.3:
&НаСервере
Процедура УпорядочиваниеПриОбъединенииТаблиц()
// Упорядочивание таблиц Материалы и КлассификаторСроковПИ по наименованию (алфавиту)
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Материалы
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.КлассификаторСроковПИ
|
|УПОРЯДОЧИТЬ ПО
| Наименование УБЫВ");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
Процедура УпорядочиваниеПриОбъединенииТаблиц()
// Упорядочивание таблиц Материалы и КлассификаторСроковПИ по наименованию (алфавиту)
Запрос = Новый Запрос("ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.Материалы
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| Наименование
|ИЗ
| Справочник.КлассификаторСроковПИ
|
|УПОРЯДОЧИТЬ ПО
| Наименование УБЫВ");
РезультатЗапроса = Запрос.Выполнить(); Записи = РезультатЗапроса.Выбрать();
Пока Записи.Следующий() Цикл
// Обход результата запроса по каждой записи в полученной выборке
КонецЦикла;
КонецПроцедуры
💡 Шаблоны (готовые модели) кода 1С 8.3 с тегом #Запросы:
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник