|
Выборка первой и единственной строки из нескольких ТЧ документа | ☑ | ||
---|---|---|---|---|
0
vdeemer
20.10.15
✎
16:22
|
Доброго времени суток, уважаемые!
УПП.ЗаказПокупателя, необходимо выбрать первую строку из ТЧ Товары либо ТЧ Услуги, приоритет у товаров. Т.е. если в товарах есть строка, то из услуг выбирать уже ничего не надо. Сделал запрос с выборкой первой строки из ТЧ Товары, потом выборкой из ТЧ Услуги и НЕвыборкой из тех документов, которые есть в первой выборке, объединил все. ВЫБРАТЬ ЗаказПокупателя.ДатаОтгрузки, ЗаказПокупателя.Ссылка, НАЧАЛОПЕРИОДА(ЗаказПокупателя.ДатаОтгрузки, МЕСЯЦ) КАК МесяцОтгрузки ПОМЕСТИТЬ Заказы ИЗ Документ.ЗаказПокупателя КАК ЗаказПокупателя ГДЕ ЗаказПокупателя.Проведен = ИСТИНА И НЕ ЗаказПокупателя.ДатаОтгрузки ЕСТЬ NULL ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаказПокупателяТовары.Количество, ЗаказПокупателяТовары.Номенклатура, ПРЕДСТАВЛЕНИЕ(ЗаказПокупателяТовары.Номенклатура), Заказы.ДатаОтгрузки, Заказы.Ссылка, ПРЕДСТАВЛЕНИЕ(Заказы.Ссылка), Заказы.МесяцОтгрузки ПОМЕСТИТЬ ЗаказыТовары ИЗ Заказы КАК Заказы ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары ПО Заказы.Ссылка = ЗаказПокупателяТовары.Ссылка ГДЕ ЗаказПокупателяТовары.НомерСтроки = 1 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаказПокупателяУслуги.Количество, ЗаказПокупателяУслуги.Номенклатура, ПРЕДСТАВЛЕНИЕ(ЗаказПокупателяУслуги.Номенклатура), Заказы.ДатаОтгрузки, Заказы.Ссылка, ПРЕДСТАВЛЕНИЕ(Заказы.Ссылка), Заказы.МесяцОтгрузки ПОМЕСТИТЬ ЗаказыУслуги ИЗ Заказы КАК Заказы ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателяУслуги ПО Заказы.Ссылка = ЗаказПокупателяУслуги.Ссылка ГДЕ ЗаказПокупателяУслуги.НомерСтроки = 1 И НЕ Заказы.Ссылка В (ВЫБРАТЬ ЗаказыТовары.Ссылка ИЗ ЗаказыТовары) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаказыТовары.Количество, ЗаказыТовары.Номенклатура, ПРЕДСТАВЛЕНИЕ(ЗаказыТовары.Номенклатура), ЗаказыТовары.ДатаОтгрузки, ЗаказыТовары.Ссылка, ПРЕДСТАВЛЕНИЕ(ЗаказыТовары.Ссылка), ЗаказыТовары.МесяцОтгрузки ИЗ ЗаказыТовары КАК ЗаказыТовары ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ЗаказыУслуги.Количество, ЗаказыУслуги.Номенклатура, ПРЕДСТАВЛЕНИЕ(ЗаказыУслуги.Номенклатура), ЗаказыУслуги.ДатаОтгрузки, ЗаказыУслуги.Ссылка, ПРЕДСТАВЛЕНИЕ(ЗаказыУслуги.Ссылка), ЗаказыУслуги.МесяцОтгрузки ИЗ ЗаказыУслуги КАК ЗаказыУслуги Нельзя ли сделать короче? |
|||
1
Cyberhawk
20.10.15
✎
16:31
|
ВЫБРАТЬ
ВЫБОР КОГДА ЕСТЬNULL(ЗаказПокупателяТовары.Номенклатура, 0) = 0 ТОГДА ЗаказПокупателяУслуги.Номенклатура ИНАЧЕ ЗаказПокупателяТовары.Номенклатура КОНЕЦ КАК ТоварУслуга ИЗ Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары ПОЛНОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателяУслуги ПО ЗаказПокупателяТовары.Ссылка = ЗаказПокупателяУслуги.Ссылка ГДЕ (ЗаказПокупателяТовары.НомерСтроки < 2 ИЛИ ЗаказПокупателяУслуги.НомерСтроки < 2) |
|||
2
vdeemer
20.10.15
✎
16:48
|
"Чем выше ум, тем тень длиннее ляжет, отброшенная им на дольний мир" (с)
Спасибо! |
|||
3
katc
20.10.15
✎
16:49
|
КОГДА ЕСТЬNULL(ЗаказПокупателяТовары.Номенклатура, 0) = 0
ТОГДА ЗаказПокупателяУслуги.Номенклатура шедеврально, учитывая что ЗаказПокупателяТовары основная таблица |
|||
4
mikecool
20.10.15
✎
16:49
|
(1) + добавить сортировку по доп полю + первые 1 видимо еще
|
|||
5
katc
20.10.15
✎
16:51
|
(3) сорри, там полное соединение.
но ЕСТЬNULL(ЗаказПокупателяТовары.Номенклатура, 0) = 0 просто как Если Истина = Не Ложь Тогда ... КонецЕсли |
|||
6
Cyberhawk
20.10.15
✎
16:52
|
(5) ты не понял... это на случай, когда в заказе покупателя вообще нет товаров, но есть услуги
|
|||
7
DexterMorgan
20.10.15
✎
16:53
|
(1) ЕСТЬNULL(ЗаказПокупателяТовары.Номенклатура, 0) = 0
открой для себя "IS NULL": "ВЫБОР КОГДА ЗаказПокупателяТовары.Номенклатура ЕСТЬ NULL" |
|||
8
rozer76
20.10.15
✎
16:54
|
(1) просто но элегантно
|
|||
9
DexterMorgan
20.10.15
✎
16:56
|
(1) или лучше даже так:
ЕСТЬNULL(ЗаказПокупателяТовары.Номенклатура, ЗаказПокупателяУслуги.Номенклатура) КАК ТоварУслуга |
|||
10
Cyberhawk
20.10.15
✎
16:56
|
(4) не надо - иначе выведется только один заказ, а надо-то по всем; про сортировку не понял - у нас одна таблица на выходе...
(7) Я так пробовал в начале, но не взлетело, поэтому и заменил. Потом уже понял, что не взлетело не из-за этого, но исправлять не стал :) |
|||
11
Cyberhawk
20.10.15
✎
16:57
|
По замечаниям DexterMorgan сокращенный вариант:
ВЫБРАТЬ ЕСТЬNULL(ЗаказПокупателяТовары.Номенклатура, ЗаказПокупателяУслуги.Номенклатура) КАК ТоварУслуга ИЗ Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары ПОЛНОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Услуги КАК ЗаказПокупателяУслуги ПО ЗаказПокупателяТовары.Ссылка = ЗаказПокупателяУслуги.Ссылка ГДЕ (ЗаказПокупателяТовары.НомерСтроки < 2 ИЛИ ЗаказПокупателяУслуги.НомерСтроки < 2) |
|||
12
DexterMorgan
20.10.15
✎
16:59
|
(11) =)
|
|||
13
Лефмихалыч
20.10.15
✎
16:59
|
ВЫБРАТЬ Ссылка, НомерСтроки, "Товары"
ИЗ Документ.ЗаказПокупателя.Товары ГДЕ НомерСтроки = 1 // остальные отборы по ссылке ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Ссылка, НомерСтроки, "Услуги" ИЗ Документ.ЗаказПокупателя.Услуги как У ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Товары как Т ПО У.Ссылка = Т.Ссылка И Т.НомерСтроки = 1 ГДЕ НомерСтроки = 1 и Т.Ссылка есть NULL // остальные отборы по ссылке |
|||
14
Лефмихалыч
20.10.15
✎
17:00
|
сначала выгрести всё из товаров, потом пристегнуть из услуг, но только по тем документам, у которых товары пустые
|
|||
15
vdeemer
20.10.15
✎
17:14
|
Очень наглядно, спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |