Текущее время: Вт, апр 23 2024, 17:58

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Выборка данных из таблицы  Тема решена
СообщениеДобавлено: Пн, ноя 16 2020, 18:47 
Специалист
Специалист

Зарегистрирован:
Чт, май 16 2013, 13:37
Сообщения: 214
Откуда: Челябинск
Пол: Мужской
Коллеги, подскажите пожалуйста, как в данный код добавить выборку с условиями, куда внедрить код с условиями, что если таблица с полем пустая, то необходимо все равно идти дальше с выборкой, если есть записи, то выводить, у меня сейчас получается, что отчет только по данному признаку смотрит остальные вообще не выбираются.
Я добавил в отчет новые поля для выборки
Таблица TPRIT поля которые мне нужны были BEZEI, LPRIO
Code:
*       Selection start from Inquiry
*       Выборка начинается с Запроса
*----------------------------------------------------------------------*
FORM select_from_inquiry.
  DATA:
    ls_out LIKE LINE OF gt_out.
  FIELD-SYMBOLS:
    <ls_out> LIKE LINE OF gt_out.
* Select inquiry data:
  SELECT t1~vbeln  AS inq_vbeln
         t1~posnr  AS inq_posnr
         t2~vkorg  AS inq_vkorg
         t2~vtweg  AS inq_vtweg
         t2~spart  AS inq_spart
         t2~vkgrp  AS inq_vkgrp
         t2~vkbur  AS inq_vkbur
         t2~kunnr  AS inq_kunnr
         t3~name1  AS inq_name1
         t1~matnr  AS inq_matnr
         t1~arktx  AS inq_arktx
         t1~kwmeng AS inq_kwmeng
         t1~vrkme  AS inq_vrkme
         t1~netpr  AS inq_netpr
         t1~waerk  AS inq_waerk
         t4~kursk  AS inq_kursk
         t2~audat  AS inq_audat
         t2~zuonr  AS inq_zuonr
         t2~bstnk  AS inq_bstnk
         t2~objnr  AS inq_objnr_nod
         t1~abgru  AS inq_abgru
         t4~zterm  AS inq_zterm
         t1~LPRIO  AS inq_LPRIO " Приоритет поставки
         t0~BEZEI  AS inq_BEZEI " Имя приоритета поставки
    FROM vbap AS t1
    JOIN vbak AS t2
       ON t2~vbeln = t1~vbeln
    JOIN kna1 AS t3
       ON t3~kunnr = t2~kunnr
    JOIN vbkd AS t4
       ON t4~vbeln = t1~vbeln
    INNER JOIN TPRIT AS t0 " Имя приоритета поставки
       ON t0~BEZEI = t0~BEZEI " Имя приоритета поставки
      AND t0~LPRIO = t1~LPRIO " Приоритет поставки
        INTO CORRESPONDING FIELDS OF TABLE gt_out
    WHERE t2~auart IN gt_auart
      AND t1~vbeln IN s_inq_no
      AND t1~matnr IN s_inq_mt
      AND t2~kunnr IN s_inq_kn
      AND t2~bstnk IN s_inq_bs
      AND t2~audat IN s_inq_au
      AND t2~vkorg IN s_vkorg
      AND t2~vtweg IN s_vtweg
      AND t2~spart IN s_spart
      AND t2~vkgrp IN s_vkgrp
      AND t2~vkbur IN s_vkbur
      " AND t1~LPRIO IN s_inq_lp " Приоритет поставки
      AND t0~BEZEI IN s_inq_be " Имя приоритета поставки
      AND t0~spras = sy-langu.  " Имя приоритета поставки
  CHECK NOT gt_out IS INITIAL.

  TYPES:
    BEGIN OF lty_sales,
      vbelv       TYPE vbfa-vbelv,
      posnv       TYPE vbfa-posnv,
      so_vbeln    TYPE vbfa-vbeln,
      so_posnr    TYPE vbfa-posnn,
      so_kunnr    TYPE vbak-kunnr,
      so_name1    TYPE kna1-name1,
      so_matnr    TYPE vbap-matnr,
      so_arktx    TYPE vbap-arktx,
      so_kwmeng   TYPE vbap-kwmeng,
      so_vrkme    TYPE vbap-vrkme,
      so_netpr    TYPE vbap-netpr,
      so_waerk    TYPE vbap-waerk,
      so_kursk    TYPE vbkd-kursk,
      so_audat    TYPE vbak-audat,
      so_bstnk    TYPE vbak-bstnk,
      so_prod_grp TYPE vbak-zzprod_grp_code,
      so_bstkd    TYPE bstkd,
      so_LPRIO    TYPE vbap-LPRIO, " Приоритет поставки
      so_BEZEI    TYPE TPRIT-BEZEI, " Имя приоритета поставки
    END   OF lty_sales.
  DATA:
    lt_sales TYPE SORTED TABLE OF lty_sales
      WITH NON-UNIQUE KEY vbelv posnv.
  FIELD-SYMBOLS:
    <ls_sales> LIKE LINE OF lt_sales.
* Select Sales order data:
  SELECT t1~vbelv
         t1~posnv
         t1~vbeln  AS so_vbeln
         t1~posnn  AS so_posnr
         t2~kunnr  AS so_kunnr
         t4~name1  AS so_name1
         t3~matnr  AS so_matnr
         t3~arktx  AS so_arktx
         t3~kwmeng AS so_kwmeng
         t3~vrkme  AS so_vrkme
         t3~netpr  AS so_netpr
         t3~waerk  AS so_waerk
         t5~kursk  AS so_kursk
         t2~audat  AS so_audat
         t2~bstnk  AS so_bstnk
         t2~zzprod_grp_code AS so_prod_grp
         t5~bstkd  AS so_bstkd
         t3~LPRIO  AS so_LPRIO " Приоритет поставки
         t0~BEZEI  AS so_BEZEI " Имя приоритета поставки
    FROM vbfa AS t1
    JOIN vbak AS t2
       ON t2~vbeln = t1~vbeln
    JOIN vbap AS t3
       ON t3~vbeln = t1~vbeln
      AND t3~posnr = t1~posnn
    JOIN kna1 AS t4
       ON t4~kunnr = t2~kunnr
    JOIN vbkd AS t5
       ON t5~vbeln = t2~vbeln
    JOIN TPRIT AS t0 " Имя приоритета поставки
       ON t0~BEZEI = t0~BEZEI " Имя приоритета поставки
    INTO TABLE lt_sales
    FOR ALL ENTRIES IN gt_out
    WHERE t1~vbelv = gt_out-inq_vbeln
      AND t1~posnv = gt_out-inq_posnr
      AND t3~LPRIO = gt_out-inq_LPRIO " Приоритет поставки
      AND t1~vbtyp_n EQ gc_c
      AND t1~rfmng > 0.

  TYPES:
    BEGIN OF lty_delivery,
      vbelv         TYPE vbfa-vbelv,
      posnv         TYPE vbfa-posnv,
      dlv_vbeln     TYPE vbfa-vbeln,
      dlv_posnr     TYPE vbfa-posnn,
      dlv_lgort     TYPE lips-lgort,
      dlv_matnr     TYPE lips-matnr,
      dlv_arktx     TYPE lips-arktx,
      dlv_lfimg     TYPE lips-lfimg,
      dlv_vrkme     TYPE lips-vrkme,
      dlv_kodat     TYPE likp-kodat,
      dlv_wadat_ist TYPE likp-wadat_ist,
    END   OF lty_delivery.

_________________
Свобода здесь и сейчас.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выборка данных из таблицы
СообщениеДобавлено: Вт, ноя 17 2020, 07:42 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, мар 29 2007, 11:51
Сообщения: 330
Откуда: Yugorsk.RU
Пол: Мужской
LEFT JOIN ?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выборка данных из таблицы
СообщениеДобавлено: Вт, ноя 17 2020, 09:00 
Специалист
Специалист

Зарегистрирован:
Чт, май 16 2013, 13:37
Сообщения: 214
Откуда: Челябинск
Пол: Мужской
Поставить LEFT JOIN вы имеете в виду? или в чем вопрос?

_________________
Свобода здесь и сейчас.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выборка данных из таблицы
СообщениеДобавлено: Вт, ноя 17 2020, 09:22 
Специалист
Специалист

Зарегистрирован:
Чт, май 16 2013, 13:37
Сообщения: 214
Откуда: Челябинск
Пол: Мужской
если ставлю LEFT JOIN то ошибка возникает в селекте
The elements in the "SELECT LIST" list must be separated using commas.

_________________
Свобода здесь и сейчас.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выборка данных из таблицы
СообщениеДобавлено: Вт, ноя 17 2020, 12:16 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Пт, сен 07 2007, 07:53
Сообщения: 1392
Таблицу, в которой может не быть записей, нужно присоединять через OUTER JOIN.
Если в примере в такой таблицей является TPRIT, то ее следует присоединять через LEFT OUTER JOIN.

PS. Вот это условие что значит?
ON t0~BEZEI = t0~BEZEI " Имя приоритета поставки


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выборка данных из таблицы
СообщениеДобавлено: Вт, ноя 17 2020, 13:37 
Специалист
Специалист

Зарегистрирован:
Чт, май 16 2013, 13:37
Сообщения: 214
Откуда: Челябинск
Пол: Мужской
Ну это название приоритета, оно тоже находится в данной таблице.
Я поставил
Code:
    LEFT OUTER JOIN TPRIT AS t0 " Имя приоритета поставки
       "ON t0~BEZEI = t0~BEZEI " Имя приоритета поставки
       ON t0~LPRIO = t1~LPRIO " Приоритет поставки


Но программа ругается все равно, пишет, что The elements in the "SELECT LIST" list must be separated using commas.
Что нужно сделать?

_________________
Свобода здесь и сейчас.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выборка данных из таблицы
СообщениеДобавлено: Вт, ноя 17 2020, 13:46 
Специалист
Специалист

Зарегистрирован:
Чт, май 16 2013, 13:37
Сообщения: 214
Откуда: Челябинск
Пол: Мужской
Просит разделить Элементы в списке «SELECT LIST» запятыми, хотя раньше их не было.

_________________
Свобода здесь и сейчас.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Выборка данных из таблицы
СообщениеДобавлено: Ср, ноя 18 2020, 03:02 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
riki11 написал:
Ну это название приоритета, оно тоже находится в данной таблице.
Я поставил
Code:
    LEFT OUTER JOIN TPRIT AS t0 " Имя приоритета поставки
       "ON t0~BEZEI = t0~BEZEI " Имя приоритета поставки
       ON t0~LPRIO = t1~LPRIO " Приоритет поставки


Но программа ругается все равно, пишет, что The elements in the "SELECT LIST" list must be separated using commas.
Что нужно сделать?

Это САПа намекает, что в старом синтаксисе нельзя использовать дополнительные условия во WHERE для таблиц с LEFT JOIN:
Code:
      AND t0~BEZEI IN s_inq_be " Имя приоритета поставки
      AND t0~spras = sy-langu.  " Имя приоритета поставки

Зато в новом синтаксисе можно, поэтому нужно оформить запрос в соответствии с ним - имена полей через запятую, а имена переменных с префиксом @, INTO перенести в конец.

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выборка данных из таблицы
СообщениеДобавлено: Ср, ноя 18 2020, 06:53 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Пт, сен 07 2007, 07:53
Сообщения: 1392
riki11 написал:
Я поставил
Code:
    LEFT OUTER JOIN TPRIT AS t0 " Имя приоритета поставки
       "ON t0~BEZEI = t0~BEZEI " Имя приоритета поставки
       ON t0~LPRIO = t1~LPRIO " Приоритет поставки


В этом месте нужно прописать связь двух таблиц. Какой смысл в прописывании условия по полю t0~BEZEI на "самого себя", оно всегда равно truе. Возможно, там где-то должно стоять t?
Просто, если поле BEZEI действительно часть соединений таблиц, то в таком виде вы получите декартово соединение по этому полю (все со всеми).


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Выборка данных из таблицы
СообщениеДобавлено: Ср, ноя 18 2020, 07:25 
Специалист
Специалист

Зарегистрирован:
Чт, май 16 2013, 13:37
Сообщения: 214
Откуда: Челябинск
Пол: Мужской
Да, вы совершенно верно все сказали, спасибо большое за помощь всем. В итоге убрал это поле BEZEI и все заработало как надо.

Code:
    LEFT JOIN TPRIT AS t0 " Имя приоритета поставки
       ON t0~LPRIO = t1~LPRIO " Приоритет поставки
      AND t0~spras = sy-langu  " Имя приоритета поставки

_________________
Свобода здесь и сейчас.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB