Имя: Пароль:
1C
1С v8
Левое соединение выбрать первые 1_________ не срабатывает в запросе
0 altaykniga
 
07.02.20
15:59
Доброй пятницы, уважаемые специалисты. Оба запроса по отдельности срабатывают как надо. Во вложенном запросе не выбирается последняя дата движения (выбрать первые 1... упорядочить по Период УБЫВ).
Прошу подсказать, что не так написал в запросе. Спасибо заранее за помощь!

ТекстЗапроса:

ВЫБРАТЬ
    запр1.Номенклатура,
    запр1.СубАрендатор,
    запр1.Контрагент,
    запр1.Количество,
    запр2.Период КАК ДатаУстановки
ИЗ
    (ВЫБРАТЬ
        ТоварыУКонтрагентовОстатки.Номенклатура КАК Номенклатура,
        ТоварыУКонтрагентовОстатки.СубАрендатор КАК СубАрендатор,
        ТоварыУКонтрагентовОстатки.Контрагент КАК Контрагент,
        ТоварыУКонтрагентовОстатки.КоличествоОстаток КАК Количество
    ИЗ
        РегистрНакопления.ТоварыУКонтрагентов.Остатки(
                КОНЕЦПЕРИОДА(&ДатаСреза, ДЕНЬ),
                Контрагент = &Контрагент
                    И СубАрендатор = &СубАрендатор) КАК ТоварыУКонтрагентовОстатки) КАК запр1
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 1
            ТоварыУКонтрагентов.Период КАК Период,
            ТоварыУКонтрагентов.Контрагент КАК Контрагент,
            ТоварыУКонтрагентов.СубАрендатор КАК СубАрендатор,
            ТоварыУКонтрагентов.Номенклатура КАК Номенклатура
        ИЗ
            РегистрНакопления.ТоварыУКонтрагентов КАК ТоварыУКонтрагентов
        ГДЕ
            ТоварыУКонтрагентов.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
        
        УПОРЯДОЧИТЬ ПО
            ТоварыУКонтрагентов.Период УБЫВ) КАК запр2
        ПО запр1.Номенклатура = запр2.Номенклатура
            И запр1.СубАрендатор = запр2.СубАрендатор
            И запр1.Контрагент = запр2.Контрагент
1 pechkin
 
07.02.20
16:01
коррелированное соединение делаетя не так
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыУКонтрагентов
ПО ... И Период = (и вот тут уже нужно выбрать ПЕРЫЕ 1 по периоду)
2 Фрэнки
 
07.02.20
16:05
(ВЫБРАТЬ ПЕРВЫЕ 1
            ТоварыУКонтрагентов.Период КАК Период,
            ТоварыУКонтрагентов.Контрагент КАК Контрагент,
            ТоварыУКонтрагентов.СубАрендатор КАК СубАрендатор,
            ТоварыУКонтрагентов.Номенклатура КАК Номенклатура
        ИЗ
            РегистрНакопления.ТоварыУКонтрагентов КАК ТоварыУКонтрагентов
        ГДЕ
            ТоварыУКонтрагентов.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)

---
кто-нибудь видит здесь нужное упорядочивание?
3 altaykniga
 
07.02.20
16:06
(2)

ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 1
            ТоварыУКонтрагентов.Период КАК Период,
            ТоварыУКонтрагентов.Контрагент КАК Контрагент,
            ТоварыУКонтрагентов.СубАрендатор КАК СубАрендатор,
            ТоварыУКонтрагентов.Номенклатура КАК Номенклатура
        ИЗ
            РегистрНакопления.ТоварыУКонтрагентов КАК ТоварыУКонтрагентов
        ГДЕ
            ТоварыУКонтрагентов.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
        
        УПОРЯДОЧИТЬ ПО
            ТоварыУКонтрагентов.Период УБЫВ) КАК запр2
4 Deon
 
07.02.20
16:09
(3) Тут явно не хватает тех же отборов, что и в 1м запросе. Ну и, наверняка, тебе нужна не одна строка а дата по каждой номенклатуре. Потому, дату заворачиваем в максимум()
5 altaykniga
 
07.02.20
16:14
(4) точно, спасибо! Отборы во 2-м запросе забыл сделать
6 Deon
 
07.02.20
16:17
(5) Ну и дату среза стоит пихать не датой, а границей, а то остаток не включает 23:59:59
7 altaykniga
 
07.02.20
16:29
(4) не получается дату завернуть в максимум(). Сможете подсказать, как это будет выглядеть в моем запросе?
8 altaykniga
 
07.02.20
16:32
(4) текст запроса получился такой: (ну выводит только дату по одной номенклатуре)

ВЫБРАТЬ
    запр1.Номенклатура,
    запр1.СубАрендатор,
    запр1.Контрагент,
    запр1.Количество,
    запр2.Период КАК ДатаУстановки
ИЗ
    (ВЫБРАТЬ
        ТоварыУКонтрагентовОстатки.Номенклатура КАК Номенклатура,
        ТоварыУКонтрагентовОстатки.СубАрендатор КАК СубАрендатор,
        ТоварыУКонтрагентовОстатки.Контрагент КАК Контрагент,
        ТоварыУКонтрагентовОстатки.КоличествоОстаток КАК Количество
    ИЗ
        РегистрНакопления.ТоварыУКонтрагентов.Остатки(
                КОНЕЦПЕРИОДА(&ДатаСреза, ДЕНЬ),
                Контрагент = &Контрагент
                    И СубАрендатор = &СубАрендатор) КАК ТоварыУКонтрагентовОстатки) КАК запр1
        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ  ПЕРВЫЕ 1
            МАКСИМУМ(ТоварыУКонтрагентов.Период) КАК Период,
            ТоварыУКонтрагентов.Контрагент КАК Контрагент,
            ТоварыУКонтрагентов.СубАрендатор КАК СубАрендатор,
            ТоварыУКонтрагентов.Номенклатура КАК Номенклатура
        ИЗ
            РегистрНакопления.ТоварыУКонтрагентов КАК ТоварыУКонтрагентов
        ГДЕ
            ТоварыУКонтрагентов.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
            И ТоварыУКонтрагентов.Контрагент = &Контрагент
            И ТоварыУКонтрагентов.СубАрендатор = &СубАрендатор
        
        СГРУППИРОВАТЬ ПО
            ТоварыУКонтрагентов.Контрагент,
            ТоварыУКонтрагентов.СубАрендатор,
            ТоварыУКонтрагентов.Номенклатура
        
        УПОРЯДОЧИТЬ ПО
            МАКСИМУМ(ТоварыУКонтрагентов.Период) УБЫВ) КАК запр2
        ПО запр1.Номенклатура = запр2.Номенклатура
            И запр1.СубАрендатор = запр2.СубАрендатор
            И запр1.Контрагент = запр2.Контрагент
9 Ёпрст
 
гуру
07.02.20
16:35
(8) выбрать первые и упорядочивание выкинь из подзапроса к едрени фени
10 Ёпрст
 
гуру
07.02.20
16:36
там где подзапрос в левом соединении, это, для начала
11 altaykniga
 
07.02.20
16:41
(9) выбрать первые 1 нельзя выкинуть, т.к. при формировании запроса выдает ошибку, что нельзя использовать Левое соединение без конструкуции Выбрать Первые
12 Ёпрст
 
гуру
07.02.20
16:42
(11) чего ?
13 altaykniga
 
07.02.20
16:44
(9,10) "выбрать первые и упорядочивание выкинь из подзапроса к едрени фени...там где подзапрос в левом соединении, это, для начала"

не могу понять смысл данного текста
14 Ёпрст
 
гуру
07.02.20
16:45
(13)
на вот, развлекайся


Выбрать
        ТоварыУКонтрагентовОстатки.Номенклатура КАК Номенклатура,
        ТоварыУКонтрагентовОстатки.СубАрендатор КАК СубАрендатор,
        ТоварыУКонтрагентовОстатки.Контрагент КАК Контрагент,
        ТоварыУКонтрагентовОстатки.КоличествоОстаток КАК Количество,
        запр2.Период КАК ДатаУстановки

    ИЗ
        РегистрНакопления.ТоварыУКонтрагентов.Остатки(
                КОНЕЦПЕРИОДА(&ДатаСреза, ДЕНЬ),
                Контрагент = &Контрагент
                    И СубАрендатор = &СубАрендатор) КАК ТоварыУКонтрагентовОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ (
            МАКСИМУМ(ТоварыУКонтрагентов.Период) КАК Период,
            ТоварыУКонтрагентов.Контрагент КАК Контрагент,
            ТоварыУКонтрагентов.СубАрендатор КАК СубАрендатор,
            ТоварыУКонтрагентов.Номенклатура КАК Номенклатура
        ИЗ
            РегистрНакопления.ТоварыУКонтрагентов КАК ТоварыУКонтрагентов
        ГДЕ
            ТоварыУКонтрагентов.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
            И ТоварыУКонтрагентов.Контрагент = &Контрагент
            И ТоварыУКонтрагентов.СубАрендатор = &СубАрендатор
        
        СГРУППИРОВАТЬ ПО
            ТоварыУКонтрагентов.Контрагент,
            ТоварыУКонтрагентов.СубАрендатор,
            ТоварыУКонтрагентов.Номенклатура
        ) КАК запр2
        ПО ТоварыУКонтрагентовОстатки.Номенклатура = запр2.Номенклатура
            И ТоварыУКонтрагентовОстатки.СубАрендатор = запр2.СубАрендатор
            И ТоварыУКонтрагентовОстатки.Контрагент = запр2.Контрагент
15 pechkin
 
07.02.20
16:47
ВЫБРАТЬ
    ТоварыУКонтрагентовОстатки.Номенклатура КАК Номенклатура,
    ТоварыУКонтрагентовОстатки.СубАрендатор КАК СубАрендатор,
    ТоварыУКонтрагентовОстатки.Контрагент КАК Контрагент,
    ТоварыУКонтрагентовОстатки.КоличествоОстаток КАК Количество,
    ТоварыУКонтрагентов.Период КАК ДатаУстановки
ИЗ
    РегистрНакопления.ТоварыУКонтрагентов.Остатки
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыУКонтрагентов    
        ПО ТоварыУКонтрагентовОстатки.Номенклатура = ТоварыУКонтрагентов.Номенклатура
         И ТоварыУКонтрагентовОстатки.СубАрендатор = ТоварыУКонтрагентов.СубАрендатор
         И ТоварыУКонтрагентовОстатки.Контрагент = ТоварыУКонтрагентов.Контрагент
         И ТоварыУКонтрагентов.Период = (
             ВЫБРАТЬ ПЕРВЫЕ 1
                Таб.Период
            ИЗ
                РегистрНакопления.ТоварыУКонтрагентов КАК Таб
            ГДЕ    
                Таб.Номенклатура = ТоварыУКонтрагентов.Номенклатура
                 И Таб.СубАрендатор = ТоварыУКонтрагентов.СубАрендатор
                 И Таб.Контрагент = ТоварыУКонтрагентов.Контрагент
             УПОРЯДОЧИТЬ ПО
                 Таб.Период УБЫВ)
16 altaykniga
 
07.02.20
16:47
(14) перед МАКСИМУМ ожидается выражение ВЫБРАТЬ
17 altaykniga
 
07.02.20
16:49
(15) синтаксическая ошибка "ВЫБРАТЬ"  ?? ВЫБРАТЬ ПЕРВЫЕ 1
18 pechkin
 
07.02.20
16:50
вместо
Период = (
нужно
Период В (
19 altaykniga
 
07.02.20
16:52
(18) поле не найдено "ТоварыУКонтрагентовОстатки.Номенклатура" ПО ??? ТоварыУКонтрагентовОстатки.Номенклатура = ТоварыУКонтрагентов.Номенклатура
20 eTmy
 
07.02.20
16:57
(19) А вроде полоска длинная)
21 Ёпрст
 
гуру
07.02.20
22:43
(17)
Левое соединение(выбрать
22 altaykniga
 
10.02.20
08:34
спасибо всем за помощь, в итоге текст запроса получился таким:

ВЫБРАТЬ
    ТоварыУКонтрагентовОстатки.Номенклатура КАК Номенклатура,
    ТоварыУКонтрагентовОстатки.СубАрендатор КАК СубАрендатор,
    ТоварыУКонтрагентовОстатки.Контрагент КАК Контрагент,
    ТоварыУКонтрагентовОстатки.КоличествоОстаток КАК Количество,
    ТоварыУКонтрагентов.Период КАК ДатаУстановки
ИЗ
    РегистрНакопления.ТоварыУКонтрагентов.Остатки КАК ТоварыУКонтрагентовОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыУКонтрагентов КАК ТоварыУКонтрагентов
        ПО ТоварыУКонтрагентовОстатки.Номенклатура = ТоварыУКонтрагентов.Номенклатура
            И ТоварыУКонтрагентовОстатки.СубАрендатор = ТоварыУКонтрагентов.СубАрендатор
            И ТоварыУКонтрагентовОстатки.Контрагент = ТоварыУКонтрагентов.Контрагент
            И (ТоварыУКонтрагентов.Период В
                (ВЫБРАТЬ ПЕРВЫЕ 1
                    Таб.Период
                ИЗ
                    РегистрНакопления.ТоварыУКонтрагентов КАК Таб
                ГДЕ
                    Таб.Номенклатура = ТоварыУКонтрагентов.Номенклатура
                    И Таб.СубАрендатор = ТоварыУКонтрагентов.СубАрендатор
                    И Таб.Контрагент = ТоварыУКонтрагентов.Контрагент
                УПОРЯДОЧИТЬ ПО
                    Таб.Период УБЫВ))
ГДЕ
    ТоварыУКонтрагентовОстатки.Контрагент = &Контрагент
    И ТоварыУКонтрагентовОстатки.СубАрендатор = &СубАрендатор

тема закрыта
23 Сияющий в темноте
 
10.02.20
08:59
что только люди не сделают,чтобы временные таблицы не использовать.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn