8.х Соединение в запросе

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем AlenkaInt, 21 фев 2015.

  1. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Здравствуйте. Есть такой запрос.
    Код:
    ВЫБРАТЬ
        ОстаткиТоваровОстаткиИОбороты.Период,
        ОстаткиТоваровОстаткиИОбороты.КоличествоКонечныйОстаток,
        ОстаткиТоваровОстаткиИОбороты.Номенклатура
    ПОМЕСТИТЬ ОстаткиТоваров
    ИЗ
        РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты(&НачПериода, &КонПериода, День, , ) КАК ОстаткиТоваровОстаткиИОбороты
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        ОстаткиТоваров.Период,
        ОстаткиТоваров.Номенклатура
    ПОМЕСТИТЬ Нулевые
    ИЗ
        ОстаткиТоваров КАК ОстаткиТоваров
    ГДЕ
        ОстаткиТоваров.КоличествоКонечныйОстаток = 0
    ;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
        Нулевые.Период,
        Нулевые.Номенклатура,
        ОстаткиТоваров.Период КАК Период1
    ИЗ
        ОстаткиТоваров КАК ОстаткиТоваров
            Внутреннее СОЕДИНЕНИЕ Нулевые КАК Нулевые
            ПО ОстаткиТоваров.Номенклатура = Нулевые.Номенклатура
    Что то вообще не понятно как он работает.
    Я ставлю разные соединения (левое, полное, внутреннее), он выдает одни и те же значения.
    Вот результат ВТ Нулевые:
    Период Номенклатура
    15.01.2010 0:00:00 Стол дубовый
    17.01.2010 0:00:00 Стол дубовый
    Это результат ВТ ОстаткиТоваров
    Период КоличествоКонечныйОстаток Номенклатура
    01.01.2010 0:00:00 25 Стол дубовый
    10.01.2010 0:00:00 5 Стол дубовый
    15.01.2010 0:00:00 0 Стол дубовый
    17.01.2010 0:00:00 0 Стол дубовый
    26.01.2010 0:00:00 5 Стол дубовый
    31.01.2010 0:00:00 5 Стол дубовый
    Но почему в итоге получается
    Период Номенклатура Период1
    15.01.2010 0:00:00 Стол дубовый 01.01.2010 0:00:00
    17.01.2010 0:00:00 Стол дубовый 01.01.2010 0:00:00
    15.01.2010 0:00:00 Стол дубовый 10.01.2010 0:00:00
    17.01.2010 0:00:00 Стол дубовый 10.01.2010 0:00:00
    15.01.2010 0:00:00 Стол дубовый 15.01.2010 0:00:00
    17.01.2010 0:00:00 Стол дубовый 15.01.2010 0:00:00
    15.01.2010 0:00:00 Стол дубовый 17.01.2010 0:00:00
    17.01.2010 0:00:00 Стол дубовый 17.01.2010 0:00:00
    15.01.2010 0:00:00 Стол дубовый 26.01.2010 0:00:00
    17.01.2010 0:00:00 Стол дубовый 26.01.2010 0:00:00
    15.01.2010 0:00:00 Стол дубовый 31.01.2010 0:00:00
    17.01.2010 0:00:00 Стол дубовый 31.01.2010 0:00:00
    Ведь при внутреннем соединении - "количество результирующих записей будет меньше или равно количеству записей самой "короткой таблицы", участвующей в соединении"...
    И почему при любом варианте соединения получаются одинаковый результат?
    Спасибо!
  2. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    А что за ВТ "Нулевые"? В чём её смысл? Это из чего выборка из регистра?
    Какая у вас конфигурация? И что должен получить запрос?
  3. Flash-Dance
    Offline

    Flash-Dance Профессионал в 1С

    Регистрация:
    20 май 2012
    Сообщения:
    365
    Симпатии:
    42
    Баллы:
    54
    Потому, что каждый Стол Дубовый из ВТ Нулевые сопоставляется со Столом Дубовым из ВТ Остатки товаров, т.е. 2 x 6 = 12.
    Если хотите, чтобы получилось 2 записи, то в запросе с соединением надо удалить поле
    ОстаткиТоваров.Период КАК Период1 и СГРУППИРОВАТЬ ПО Нулевые.Период
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Самое первое что надо учитывать что
    ОстаткиТоваровОстаткиИОбороты.Период и ОстаткиТоваров.Период, скорее всего уВас совпадать не будут. Т.к в первом случае у Вас детализация день и там скорее всего будет к началу или концу дня приведена(я уже на память не помню), а во втором случае просто момент времени.
    Я в таких случаях всегда делаю типа

    НачалоПериода(ОстаткиТоваровОстаткиИОбороты.Период,День)
    НачалоПериода(ОстаткиТоваров.Период,День)

    Что бы все к нкачалу суток приводилось, а не до секунды сравнивалдоось

    и вообще мне не совсем понятно что вы вообще пытаетесь получить
  5. TopicStarter Overlay
    AlenkaInt
    Offline

    AlenkaInt Опытный в 1С

    Регистрация:
    26 фев 2012
    Сообщения:
    1.008
    Симпатии:
    4
    Баллы:
    29
    Всем спасибо. Я разбираю более сложный запрос. Это его кусок. Я помню точно по курсам, что при внутреннем соединении строк ну никак не может быть больше...
  6. Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Сколько строк будет у внутреннегосоединения этих таблиц по полю Номенклатура?

    Вложения:

  7. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Ну в такой постановке 4 записи, каждая по 2 раза соединиться.
    просто вторую таблицу то свернуть надо.
  8. Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    Это я к тому, что все-таки количество строк при внутреннем соединении может быть больше...
  9. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    А мне вот не очень понятно "Где Остаток = 0". А разве нулевые остатки в регистрах хранятся?
  10. Дмитрий@
    Offline

    Дмитрий@ Новичок в 1С

    Регистрация:
    9 ноя 2014
    Сообщения:
    30
    Симпатии:
    1
    Баллы:
    4
    Может этот запрос заменить соединением справочника номенклатуры и виртуальной таблицы остатки, и выбрать номенклатуру где остатки равны нулю.
    Потому что правильность этого кусочка у меня под сомнением.
  11. Дмитрий@
    Offline

    Дмитрий@ Новичок в 1С

    Регистрация:
    9 ноя 2014
    Сообщения:
    30
    Симпатии:
    1
    Баллы:
    4
    И еще хочу добавить.
    Если я не ошибаюсь смысл этого запроса в том, чтобы получить в данном периоде номенклатуры по которым были купли продажи, и которые закончились в данном периоде. Также он вытаскивает день когда эта номенклатура закончилась. Вроде так.
    --- Объединение сообщений, 24 фев 2015 ---
    Единственно что меня смущает в последней таблице "ОстаткиТоваров.Период КАК Период1", это поле надо группировать и выбирать наименьшую дату.

Поделиться этой страницей