Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Левое соединение выбрать первые 1_________ не срабатывает в запросе

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

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

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

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

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

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

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

    ИЗ
        РегистрНакопления.ТоварыУКонтрагентов.Остатки(
                КОНЕЦПЕРИОДА(&ДатаСреза, ДЕНЬ),
                Контрагент = &Контрагент
                    И СубАрендатор = &СубАрендатор) КАК ТоварыУКонтрагентовОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ (
            МАКСИМУМ(ТоварыУКонтрагентов.Период) КАК Период,
            ТоварыУКонтрагентов.Контрагент КАК Контрагент,
            ТоварыУКонтрагентов.СубАрендатор КАК СубАрендатор,
            ТоварыУКонтрагентов.Номенклатура КАК Номенклатура
        ИЗ
            РегистрНакопления.ТоварыУКонтрагентов КАК ТоварыУКонтрагентов
        ГДЕ
            ТоварыУКонтрагентов.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
            И ТоварыУКонтрагентов.Контрагент = &Контрагент
            И ТоварыУКонтрагентов.СубАрендатор = &СубАрендатор
        
        СГРУППИРОВАТЬ ПО
            ТоварыУКонтрагентов.Контрагент,
            ТоварыУКонтрагентов.СубАрендатор,
            ТоварыУКонтрагентов.Номенклатура
        ) КАК запр2
        ПО ТоварыУКонтрагентовОстатки.Номенклатура = запр2.Номенклатура
            И ТоварыУКонтрагентовОстатки.СубАрендатор = запр2.СубАрендатор
            И ТоварыУКонтрагентовОстатки.Контрагент = запр2.Контрагент

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.