На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:

  • Перед тем, как задать вопрос, желательно почитать документацию и воспользоваться поиском.
  • Когда задаёте вопрос, то обязательно указывайте платформу (7.7, 8.0, 8.1, 8.2, etc), причем желательно в заголовке. Если речь идёт о типовой конфигурации, то указывайте её название и релиз. Текущие версии можно посмотреть здесь.
  • Ещё раз напоминаем о необходимости соблюдать не только правила, но и законы. Уважайте авторские права.

Высказать своё мнение о модераторах раздела можно здесь: evGenius
  
> Запрос СКД 8.3 (УТ 11.1)
    Задача:
    Нужно вывести таблицу заказанной и отгруженной номенклатуры с группировкой по документу РеализацияТоваровУслуг.
    Получаю данные запросом
    ExpandedWrap disabled
      ВЫБРАТЬ
          ЗаказКлиентаТовары.Номенклатура КАК НоменклатураЗаказ,
          ЗаказКлиентаТовары.Упаковка КАК УпаковкаЗаказ,
          ЗаказКлиентаТовары.Количество КАК КоличествоЗаказ,
          ЗаказКлиентаТовары.Сумма КАК СуммаЗаказ,
          ЗаказКлиентаТовары.Ссылка КАК СсылкаЗаказ
      ПОМЕСТИТЬ ВТ_Заказы
      ИЗ
          Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
      ГДЕ
          ЗаказКлиентаТовары.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон
          И ЗаказКлиентаТовары.Ссылка.Проведен
      {ГДЕ
          (ЗаказКлиентаТовары.Ссылка.Контрагент = &Контрагент)}
      ;
       
      ////////////////////////////////////////////////////////////////////////////////
      ВЫБРАТЬ
          РеализацияТоваровУслугТовары.Ссылка КАК СсылкаОтгружено,
          РеализацияТоваровУслугТовары.Номенклатура КАК НоменклатураОтгружено,
          РеализацияТоваровУслугТовары.Количество КАК КоличествоОтгружено,
          РеализацияТоваровУслугТовары.Сумма КАК СуммаОтгружено,
          РеализацияТоваровУслугТовары.Ссылка.ЗаказКлиента,
          РеализацияТоваровУслугТовары.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения
      ПОМЕСТИТЬ ВТ_Реализация
      ИЗ
          Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
      ГДЕ
          РеализацияТоваровУслугТовары.Ссылка.Проведен
          И РеализацияТоваровУслугТовары.Ссылка.ЗаказКлиента В
                  (ВЫБРАТЬ
                      ЗаказКлиентаТовары.СсылкаЗаказ КАК СсылкаЗаказ
                  ИЗ
                      ВТ_Заказы КАК ЗаказКлиентаТовары
                  )
      ;
       
      ////////////////////////////////////////////////////////////////////////////////
      ВЫБРАТЬ
          ВТ_Заказы.НоменклатураЗаказ,
          ВТ_Реализация.ЕдиницаИзмерения,
          ВТ_Заказы.КоличествоЗаказ,
          ВТ_Заказы.СуммаЗаказ,
          ВТ_Реализация.КоличествоОтгружено,
          ВТ_Реализация.СуммаОтгружено,
          ВТ_Реализация.КоличествоОтгружено - ВТ_Заказы.КоличествоЗаказ КАК КоличествоРазница,
          ВТ_Реализация.СуммаОтгружено - ВТ_Заказы.СуммаЗаказ КАК СуммаРазница,
          ВТ_Реализация.СсылкаОтгружено
      ИЗ
          ВТ_Заказы КАК ВТ_Заказы
              ПОЛНОЕ СОЕДИНЕНИЕ ВТ_Реализация КАК ВТ_Реализация
              ПО ВТ_Заказы.СсылкаЗаказ = ВТ_Реализация.ЗаказКлиента
                  И ВТ_Заказы.НоменклатураЗаказ = ВТ_Реализация.НоменклатураОтгружено


    Но тут есть одно большое НО. Если в заказе или в реализации присутствует номенклатура, которой нет в одном из документов, то эта номенклатура не выводится, т.к. соединение идет по документу и номенклатуре. Мне нужно выводить всю номенклатуру.
    Пример вывода отчета, чтобы было понятнее https://yadi.sk/i/IhB0MWZbgcoaz
      Вообще как бы полное соединение автоматом подразумевает наличие ЕСТЬNULL() во всех или почти во всех полях запроса. ;)
      Типа: ЕСТЬNULL(ВТ_Заказы.НоменклатураЗаказ,ВТ_Реализация.НоменклатураОтгружено)
        Цитата evGenius @
        полное соединение автоматом подразумевает наличие ЕСТЬNULL() во всех или почти во всех полях запроса.

        ну как бы да ))) но ЕстьNull не решает проблемы.
        Сообщение отредактировано: Rust -
          Цитата Rust @
          ну как бы да ))) но ЕстьNull не решает проблемы.

          Какой запрос получился?
            В серидину вставь
            ExpandedWrap disabled
              Выбрать различные
              Номенклатура
              поместить База  
              из
              ВТ_Заказы
              Объеденить
              Выбрать различные
              Номенклатура  
              из
              ВТ_Реализация


            Потом выборка
            База Левое соединение ВТ_Заказы по.... левое соединение ВТ_Реализация по ....
              Outlander, это лишнее. Полное соединение вполне справляется с задачей, для которой оно и было создано.
                Переделал запрос, вроде то что надо. Завтра покажу.
                  evGenius Согланен справляется но так как я предложил запрос быстрее отработает. Мы не зависим от плана выполнения запроса особенно если проиндексируем таблицу база.
                    Outlander, согласен, логика есть :yes:
                    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                    0 пользователей:


                    Рейтинг@Mail.ru
                    [ Script execution time: 0,0504 ]   [ 14 queries used ]   [ Generated: 5.07.25, 09:10 GMT ]