Как в ЗАПРОСЕ или СКД взять первую ВТ_таблицу в результат, если другие несколько пустые?

1. One_Assembler 24.06.22 12:29 Сейчас в теме
Понимаю, что кодом пакетно ВСЁ просто....но как в одном запросе или СКД сделать?
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Fatenm 24.06.22 14:08 Сейчас в теме
разверните вопрос до более понятного, пожалуйста)))
3. One_Assembler 24.06.22 14:14 Сейчас в теме
(2)Есть первый запрос..............далее манипуляции, которые в исключениях приводят к пустым результатам запросов. Если так , то надо просто взять первый запрос в результат. Кажется я просто повторился, как в теме.
4. Fatenm 24.06.22 14:21 Сейчас в теме
(3)выгрузите результат первого запроса в таблицу значений, сохраните ее отдельно, делайте свои манипуляции с результатом запроса, а при условии пустых таблиц по результату манипуляций используйте сохраненную ТЗ. Но это запросы в коде, с СКД такое не прокатит
5. Fatenm 24.06.22 14:23 Сейчас в теме
(3)вы не повторились) непонятно было, таблицы чего? запроса, МВТ, ряда запросов, первый запрос может быть в пакете и прочая
9. ignorant 27.06.22 12:08 Сейчас в теме
(3)ДВА запроса и ДВА результата не предлагать?
10. One_Assembler 27.06.22 15:48 Сейчас в теме
(9) Я не знаю. Но по идее к одному результату то нужно прийти
11. ignorant 27.06.22 19:14 Сейчас в теме
(10)
по идее к одному результату нужно прийти

Результат = Запрос1.Выполнить();
Если Рез1.Пустой () Тогда
  Результат = Запрос2.Выполнить();
КонецЕсли;
6. yaroslav.artem 24.06.22 22:00 Сейчас в теме
Создать Результирующий пакет и выбрать в него данные с первой таблицы.
7. unknown181538 153 25.06.22 00:34 Сейчас в теме +0.04 $m
(0) может что-то хитрое придумать...
Например, доп таблицу ВТ_2Сгруппированная, где будет только одна записть из ВТ_2

Типа

....
;
ВЫБРАТЬ
Максимум(ВТ_2.Поле1) КАК Поле1
ПОМЕСТИТЬ ВТ_Проверочная
ИЗ ВТ_2 КАК ВТ2
;
ВЫБРАТЬ
ВТ_таблица1.РезЗнач
Из ВТ_таблица1 КАК ВТ_таблица1
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Проверочная КАК ВТ_Проверочная
ПО ИСТИНА
ГДЕ ВТ_Проверочная.Поле1 ЕСТЬ Null
ОБЪЕДИНИТЬ ВСЕ
ВТ_2.РезЗнач
ИЗ ВТ_2 КАК ВТ_2
ПО ИСТИНА
ГДЕ НЕ ВТ_Проверочная.Поле1 ЕСТЬ Null

Ну это гипотеза, я никогда не делал такого.
По идее, если ВТ_Проверочная пустая, то в первом запросе объединения условие должно Истина быть, во втором - Ложь
8. SlavaKron 27.06.22 10:15 Сейчас в теме +0.04 $m
Для каждой временной таблицы задать номер, определяющий ее приоритет. Далее выяснить номер актуальной ВТ, сгруппировав по номеру таблицы и выбрав первую строку. Отфильтровать все результаты в соответствии с номером актуальной таблицы.
ВЫБРАТЬ
	1 КАК НомерТаблицы
	// ...
ПОМЕСТИТЬ ВТ1
;

ВЫБРАТЬ
	2 КАК НомерТаблицы
	// ...
ПОМЕСТИТЬ ВТ2
;

ВЫБРАТЬ
	3 КАК НомерТаблицы
	// ...
ПОМЕСТИТЬ ВТ3
;

ВЫБРАТЬ	* ПОМЕСТИТЬ ВсеРезультаты ИЗ ВТ1

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ * ИЗ ВТ2

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ	* ИЗ ВТ3
;

ВЫБРАТЬ ПЕРВЫЕ 1
	ВсеРезультаты.НомерТаблицы КАК НомерТаблицы
ПОМЕСТИТЬ НомерАктуальнойТаблицы
ИЗ
	ВсеРезультаты КАК ВсеРезультаты

СГРУППИРОВАТЬ ПО
	ВсеРезультаты.НомерТаблицы

УПОРЯДОЧИТЬ ПО
	НомерТаблицы
;

ВЫБРАТЬ
	ВсеРезультаты.*
ИЗ
	НомерАктуальнойТаблицы КАК НомерАктуальнойТаблицы
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВсеРезультаты КАК ВсеРезультаты
		ПО НомерАктуальнойТаблицы.НомерТаблицы = ВсеРезультаты.НомерТаблицы
Показать
SP2000; unknown181538; +2 Ответить
12. Onwardv 64 28.06.22 16:09 Сейчас в теме +0.04 $m
Можно посчитать количество записей в главной таблице, а потом в объединении сделать внутренне соединение по условию на это количество:
Если количествоЗаписей = 0, тогда Истина, а Иначе Ложь. И объединение добавит или все записи из ВТ_ПервыйЗапрос или ни одной.

...
ОБЪЕДИНИТЬ

ВЫБРАТЬ
	ВТ_ПервыйЗапрос.Значение,
	ВТ_ПервыйЗапрос.ИмяТаблица
ИЗ
	ВТ_ПервыйЗапрос КАК ВТ_ПервыйЗапрос
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_КоличествоЗаписейВторогоЗапроса КАК ВТ_КоличествоЗаписейВторогоЗапроса
		ПО (ВЫБОР
				КОГДА ВТ_КоличествоЗаписейВторогоЗапроса.КоличествоЗаписейВторогоЗапроса = 0
					ТОГДА ИСТИНА
				ИНАЧЕ ЛОЖЬ
			КОНЕЦ)
Показать


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

ВЫБРАТЬ
	"ПервыйЗапрос" КАК ИмяТаблица,
	1 КАК Значение
ПОМЕСТИТЬ ВТ_ПервыйЗапрос

ОБЪЕДИНИТЬ

ВЫБРАТЬ
	"ПервыйЗапрос",
	2
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ ПЕРВЫЕ 0
	"ВторойЗапрос" КАК ИмяТаблица,
	ВТ_ПервыйЗапрос.Значение * 10 КАК Значение
ПОМЕСТИТЬ ВТ_ВторойЗапрос
ИЗ
	ВТ_ПервыйЗапрос КАК ВТ_ПервыйЗапрос
;


////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КОЛИЧЕСТВО(ВТ_ВторойЗапрос.Значение) КАК КоличествоЗаписейВторогоЗапроса
ПОМЕСТИТЬ ВТ_КоличествоЗаписейВторогоЗапроса
ИЗ
	ВТ_ВторойЗапрос КАК ВТ_ВторойЗапрос
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_ВторойЗапрос.Значение КАК Значение,
	ВТ_ВторойЗапрос.ИмяТаблица как ИмяТаблица
ИЗ
	ВТ_ВторойЗапрос КАК ВТ_ВторойЗапрос

ОБЪЕДИНИТЬ

ВЫБРАТЬ
	ВТ_ПервыйЗапрос.Значение,
	ВТ_ПервыйЗапрос.ИмяТаблица
ИЗ
	ВТ_ПервыйЗапрос КАК ВТ_ПервыйЗапрос
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_КоличествоЗаписейВторогоЗапроса КАК ВТ_КоличествоЗаписейВторогоЗапроса
		ПО (ВЫБОР
				КОГДА ВТ_КоличествоЗаписейВторогоЗапроса.КоличествоЗаписейВторогоЗапроса = 0
					ТОГДА ИСТИНА
				ИНАЧЕ ЛОЖЬ
			КОНЕЦ)
Показать


Приведенный выше код выводит данные только из первой временной таблицы.

Для того, чтобы вывелись данные только из второго запроса (ВТ_ВторойЗапрос), надо закомментировать "Первые 0 " из ВТ_ВторойЗапрос.
См. приложенный скрин.
Прикрепленные файлы:
13. KVIKS 400 28.06.22 17:50 Сейчас в теме +0.04 $m
Надо в запросах указать поле с номером запроса типа 1 как Номер и тд.
в конце взять и все запросы объединить в один большой через объединение и положить в ВТ, затем сделать запрос к этой ВТ и выбрать Максимум(Номер). таким образом получим последний запрос в котором есть данные. И последним этапом соединить внутренним соединением ВТ и Максимум.
"ВЫБРАТЬ
|	РеализацияТоваровУслуг.Ссылка КАК Документ,
|	1 КАК Номер
|ПОМЕСТИТЬ Реализации
|ИЗ
|	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|	ПриобретениеТоваровУслуг.Ссылка КАК Документ,
|	2 КАК Номер
|ПОМЕСТИТЬ Покупки
|ИЗ
|	Документ.ПриобретениеТоваровУслуг КАК ПриобретениеТоваровУслуг
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|	Реализации.Документ КАК Документ,
|	Реализации.Номер КАК Номер
|ПОМЕСТИТЬ ВТ
|ИЗ
|	Реализации КАК Реализации
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|	Покупки.Документ,
|	Покупки.Номер
|ИЗ
|	Покупки КАК Покупки
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|	МАКСИМУМ(ВТ.Номер) КАК Номер
|ПОМЕСТИТЬ ВТ_Максимум
|ИЗ
|	ВТ КАК ВТ
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|	ВТ.Документ КАК Документ,
|	ВТ.Номер КАК Номер
|ИЗ
|	ВТ КАК ВТ
|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Максимум КАК ВТ_Максимум
|		ПО ВТ.Номер = ВТ_Максимум.Номер"
Показать


Таким образом будут выбираться строки от последней к первой ТЗ, типа если в 4-й тз пусто то проверяется 3-я и тд
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот