Имя: Пароль:
1C
1С v8
Вложенный запрос
, ,
0 AntonyFO
 
01.10.13
04:20
Добрый  день есть запрос и в неё вложенный:

"ВЫБРАТЬ
    |    ПоступлениеТоваровУслуг.Ссылка,
    |    ВложенныйЗапрос.Номенклатура,
    |ИЗ
    |    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |            ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
    |            ПоступлениеТоваровУслугТовары.КоличествоМест КАК КоличествоМест,
    |            ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка
    |        ИЗ
    |            Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары) КАК ВложенныйЗапрос
    |        ПО ПоступлениеТоваровУслуг.Ссылка = ВложенныйЗапрос.Ссылка
    |ГДЕ
    |    ПоступлениеТоваровУслуг.Ссылка В(&СписокДокументов)";

Смысл в том чтобы порлучить все нужные поля прямым способом обхода результата
1 AntonyFO
 
01.10.13
04:23
В тексте запрос к документам "Поступление товаров и услуг" и их табличной части "Товары".
Мне надо чтобы выбиралась только первая строка табличной части "Товары" для каждого документа, подскажите как лучше?
2 AntonyFO
 
01.10.13
04:29
Пробовал ВЫБРАТЬ ПЕРВЫЕ 1 во вложенном не то
3 AntonyFO
 
01.10.13
04:32
Может не ясно спросил, схематически так...

Документ1    ТоварИзПервойСтрокиДокумента1
Документ2    ТоварИЗПервойСтрокиДокумента2
Документ3    ТоварИзПервойСтрокиДокумента3
4 kosts
 
01.10.13
06:12
У ТЧ есть предопределенный реквизит НомерСтроки, если что...
Ну и отбор нужно как можно ранее применять, а то вложенный запрос вернет миллион строк и повесит сервер на 10 минут...

В данном случае возможно можно обойтись одним запросом, благо 1С-ка сама таблицы соединяет.
5 AntonyFO
 
01.10.13
06:36
(4) Ясно, спасибо. Да, конечно можно СГРУППИРОВАТЬ ПО если
6 AntonyFO
 
01.10.13
06:42
А если так:
"ВЫБРАТЬ
    |    ПоступлениеТоваровУслуг.Ссылка,
    |    ВложенныйЗапрос.Номенклатура КАК Номенклатура
    |ИЗ
    |    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 1
    |            Остатки.Номенклатура КАК Номенклатура,
    |            Остатки.ДокументПоступления
    |        ИЗ
    |            РегистрНакопления.Остатки КАК Остатки) КАК ВложенныйЗапрос
    |        ПО ПоступлениеТоваровУслуг.Ссылка = ВложенныйЗапрос.ДокументПоступления
    |
    |ГДЕ
    |    ПоступлениеТоваровУслуг.Ссылка В(&СписокДокументов)";
7 AntonyFO
 
01.10.13
06:43
Мне надо выбрать только одну запись регистра накопления, с более поздним периодом?
8 AntonyFO
 
01.10.13
06:43
ВЫБРАТЬ ПЕРВЫЕ во вложенном лишнее, просто ВЫБРАТЬ
9 SeraFim
 
01.10.13
06:48
(1) >> Мне надо чтобы выбиралась только первая строка табличной части "Товары" для каждого документа, подскажите как лучше?

    "ВЫБРАТЬ
    |            ПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура,
    |            ПоступлениеТоваровУслугТовары.КоличествоМест КАК КоличествоМест,
    |            ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка
    |        ИЗ
    |            Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
    |ГДЕ
    |    ПоступлениеТоваровУслугТовары.Ссылка В(&СписокДокументов)
    |    И ПоступлениеТоваровУслугТовары.НомерСтроки = 1";
10 kosts
 
01.10.13
06:51
(7) >Мне надо выбрать только одну запись регистра накопления, с более поздним периодом?

Нам ли знать, что тебе нужно...
11 dextermorgan777
 
01.10.13
06:51
Может подтупливаю, но зачем вложенныЙ?
Что если так?


ВЫБРАТЬ Первые 1
ПоступлениеТоваровУслугТовары.Ссылка,
ПоступлениеТоваровУслугТовары.Номенклатура
ИЗ
Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
ГДЕ
ПоступлениеТоваровУслугТовары.Ссылка В(&СписокДокументов)
12 MiniMuk
 
01.10.13
06:52
(1) Как определить что строка первая?
13 dextermorgan777
 
01.10.13
06:53
ПоступлениеТоваровУслугТовары.НомерСтроки
14 MiniMuk
 
01.10.13
06:55
(13) не подсказывая, пусть поймет как узнать что строка перавая потом этот признак будем сдувать в запрос
15 MiniMuk
 
01.10.13
06:55
вон (9) уж все написал
16 AntonyFO
 
01.10.13
07:08
Я понял про номер строки, спасибо. Я ещё хотел спросить. Есть запрос:
ВЫБРАТЬ
    |    ПоступлениеТоваровУслуг.Ссылка,
    |    ВложенныйЗапрос.Период
    |ИЗ
    |    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |            ВзаиморасчетыСКонтрагентами.Период КАК Период,
    |            ВзаиморасчетыСКонтрагентами.Регистратор КАК Регистратор
    |        ИЗ
    |            РегистрНакопления.ВзаиморасчетыСКонтрагентами КАК ВзаиморасчетыСКонтрагентами) КАК ВложенныйЗапрос
    |        ПО ПоступлениеТоваровУслуг.Ссылка = ВложенныйЗапрос.Регистратор
    |ГДЕ
    |    ПоступлениеТоваровУслуг.Ссылка В(&СписокДокументов)
17 AntonyFO
 
01.10.13
07:10
Запрос упрощённый сильно в сравнении с реальным. Мне надо выбрать только одну запись регистра накопления, с более поздним периодом. Так сработает МАКСИМУМ(ВложенныйЗапрос.Период) ?
18 kosts
 
01.10.13
07:20
(17) Есть виртуальные таблицы остатков и оборотов. Может это нужно? Или конкретно именно последние записи нужны?
19 AntonyFO
 
01.10.13
07:54
(18) не виртуальные или реальные таблицы не причём, я думаю. Конкретно именно последняя запись по периоду нужна
20 kosts
 
01.10.13
08:13
(19) Во внутреннем запросе сделай МАКС по периоду) во внешнем сделай внутреннее соединение по периоду и нужным полям.

(Внутренний ничего лишнего не должен возвращать, иначе не то что надо получишь).
Возможно вместо периода нужно "момент времени", а то получишь несколько последних записей вместо одной...
21 AntonyFO
 
01.10.13
09:09
(20)Ясно. Спасибо большое, попробую
22 AntonyFO
 
01.10.13
09:10
(20) время появится сегодня зарегистрируюсь в Dropbox
23 kosts
 
01.10.13
09:31
(20) +
Что-то в этом роде

ВЫБРАТЬ
    |    ПоступлениеТоваровУслуг.Ссылка,
    |    ВложенныйЗапрос.Период
    |ИЗ
    |    Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    |        ЛЕВОЕ СОЕДИНЕНИЕ
    |        (
    |        РегистрНакопления.ВзаиморасчетыСКонтрагентами КАК ВзаиморасчетыСКонтрагентами
    |        Внутреннее СОЕДИНЕНИЕ (ВЫБРАТЬ
    |            МАКС(ВзаиморасчетыСКонтрагентами.Период) КАК Период,
    |            ВзаиморасчетыСКонтрагентами.Контрагент КАК Контрагент
    |        ИЗ
    |            РегистрНакопления.ВзаиморасчетыСКонтрагентами КАК ВзаиморасчетыСКонтрагентами) КАК ВложенныйЗапрос
    |        ПО ВзаиморасчетыСКонтрагентами.Контрагент = ВложенныйЗапрос.Контрагент
    |        и ВзаиморасчетыСКонтрагентами.Контрагент = ВложенныйЗапрос.Контрагент
...
24 kosts
 
01.10.13
09:32
(23)+
В последней строке период

и ВзаиморасчетыСКонтрагентами.Период = ВложенныйЗапрос.Период
25 AntonyFO
 
01.10.13
14:36
Спасибо, я зарегистрировался в Dropbox)
26 Serginio1
 
01.10.13
14:42