SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Ракурс на VBAP и VBKD



 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
Anton_bs
Участник
Участник


Age: 44
Joined: 22 Sep 2009
Posts: 30

PostPosted: Wed Aug 31, 2011 10:41 am    Post subject: Ракурс на VBAP и VBKD Reply with quote

Добрый день, коллеги.
Возник такой вопрос, как можно в ракурсе соединить VBAP и VBKD?
Понятно, что по полям vbeln и posnr. Но в VBKD есть записи (например для вида документа запрос), где для одного документа posnr пустое и есть номера позиций, а есть записи, где только значение posnr пустое.

Что можно придумать?

Update: Прошу прощения, что сразу не написал саму задачу. Надо создать ракурс из VBAK, VBAP и VBKD. VBAK и VBAP думаю понятно зачем, а из VBKD нужен курс.
Back to top
View user's profile Send private message
FeBO-Sh
Участник
Участник


Age: 38
Joined: 25 Aug 2011
Posts: 7

PostPosted: Wed Aug 31, 2011 12:33 pm    Post subject: Ракурс на VBAP и VBKD Reply with quote

А разве так не получается?
VBAK-VBELN = VBAP-VBELN
VBAP-POSNR = VBKD-POSNR
VBKD-VBELN = VBAK-VBELN
Поторопился с ответом.


Last edited by FeBO-Sh on Wed Aug 31, 2011 12:39 pm; edited 1 time in total
Back to top
View user's profile Send private message
bimit
Специалист
Специалист



Joined: 11 Jul 2011
Posts: 56

PostPosted: Wed Aug 31, 2011 12:35 pm    Post subject: Re: Ракурс на VBAP и VBKD Reply with quote

Anton_bs wrote:
Добрый день, коллеги.
Возник такой вопрос, как можно в ракурсе соединить VBAP и VBKD?
Понятно, что по полям vbeln и posnr. Но в VBKD есть записи (например для вида документа запрос), где для одного документа posnr пустое и есть номера позиций, а есть записи, где только значение posnr пустое.

Что можно придумать?

Update: Прошу прощения, что сразу не написал саму задачу. Надо создать ракурс из VBAK, VBAP и VBKD. VBAK и VBAP думаю понятно зачем, а из VBKD нужен курс.


Они соединяются через таблицу VBUP , вот например такой ракус посмотри U_16203
Back to top
View user's profile Send private message
John Doe
Модератор
Модератор


Age: 45
Joined: 05 Nov 2007
Posts: 725
Location: КраснАдар

PostPosted: Wed Aug 31, 2011 2:04 pm    Post subject: Reply with quote

Это типа шутка такая? Коммерческие данные привязываются как к позициям, так и к заголовкам документов. Если пусто - значит заголовок.
Или я что-то не то ем и курю?

Добавил: не совсем понимаю, зачем в один массив все это схлопывать, но по ощущениям через SE11 не сделать ибо лефт-аутер-джойн, либо в каком то событии докидывать записи с пустым POSNR. Проще программно

Code:
DATA: BEGIN OF itab OCCURS 0,
        vbeln LIKE vbak-vbeln,
        posnr LIKE vbap-posnr,
        kursk LIKE vbkd-kursk,
      END OF itab.

PARAMETERS: p_vbeln LIKE vbak-vbeln.

START-OF-SELECTION.
  SELECT vbak~vbeln vbap~posnr vbkd~kursk
    INTO TABLE itab
    FROM vbkd LEFT OUTER JOIN vbap ON vbkd~vbeln = vbap~vbeln AND
                                 vbkd~posnr = vbap~posnr
              INNER JOIN vbak ON vbkd~vbeln = vbak~vbeln
  WHERE vbkd~vbeln = p_vbeln.

END-OF-SELECTION.
  LOOP AT itab.
    WRITE: / itab-vbeln, itab-posnr, itab-kursk.
  ENDLOOP.

_________________
FunCoding.ru
KicksCollector.ru
Back to top
View user's profile Send private message Blog
Удав
Гуру
Гуру


Age: 48
Joined: 25 Jan 2008
Posts: 580
Location: Москва

PostPosted: Wed Aug 31, 2011 5:11 pm    Post subject: Re: Ракурс на VBAP и VBKD Reply with quote

Anton_bs wrote:
Прошу прощения, что сразу не написал саму задачу. Надо создать ракурс из VBAK, VBAP и VBKD. VBAK и VBAP думаю понятно зачем, а из VBKD нужен курс.

Одним запросом это можно сделать через 2 поля курса в результирующей таблице:
Code:
SELECT k~... p~... dk~kurrf as kurrf_k dp~kurrf as kurrf_p
INTO ...
FROM vbap as p
INNER JOIN vbak as k ON k~vbeln = p~vbeln
INNER JOIN vbkd as dk ON dk~vbeln = p~vbeln
                     AND dk~posnr = '000000'
LEFT OUTER JOIN vbkd as dp ON dp~vbeln = p~vbeln
                          AND dp~posnr = p~posnr
WHERE ...

Но с точки зрения оптимального быстродействия лучше выбирать данные из VBKD отдельным запросом и соединять их в цикле по внутренней таблице с данными VBAK+VBAP.
Code:

Выборка данных
...
SORT gt_vbkd BY vbeln posnr.
LOOP AT gt_vbap.
...
  CLEAR gt_vbkd. "Заголовочная запись
  READ TABLE gt_vbkd WITH KEY vbeln = gt_vbap-vbeln
                                                 posnr = gt_vbap-posnr
    BINARY SEARCH.
  IF sy-subrc <> 0.
    READ TABLE gt_vbkd WITH KEY vbeln = gt_vbap-vbeln
                                          posnr = '000000'
      BINARY SEARCH.
  ENDIF.
  gt_vbap-kurrf = gt_vbkd-kurrf.
...
ENDLOOP.

_________________
С уважением,
Удав.
Back to top
View user's profile Send private message
Anton_bs
Участник
Участник


Age: 44
Joined: 22 Sep 2009
Posts: 30

PostPosted: Fri Sep 02, 2011 9:16 am    Post subject: Re: Ракурс на VBAP и VBKD Reply with quote

bimit wrote:
Anton_bs wrote:
Добрый день, коллеги.
Возник такой вопрос, как можно в ракурсе соединить VBAP и VBKD?
Понятно, что по полям vbeln и posnr. Но в VBKD есть записи (например для вида документа запрос), где для одного документа posnr пустое и есть номера позиций, а есть записи, где только значение posnr пустое.

Что можно придумать?

Update: Прошу прощения, что сразу не написал саму задачу. Надо создать ракурс из VBAK, VBAP и VBKD. VBAK и VBAP думаю понятно зачем, а из VBKD нужен курс.


Они соединяются через таблицу VBUP , вот например такой ракус посмотри U_16203


Выборка не будет содержать документ 10003250 из моего примера.
Back to top
View user's profile Send private message
Anton_bs
Участник
Участник


Age: 44
Joined: 22 Sep 2009
Posts: 30

PostPosted: Fri Sep 02, 2011 9:22 am    Post subject: Reply with quote

John Doe wrote:
Это типа шутка такая? Коммерческие данные привязываются как к позициям, так и к заголовкам документов. Если пусто - значит заголовок.
Или я что-то не то ем и курю?

Добавил: не совсем понимаю, зачем в один массив все это схлопывать, но по ощущениям через SE11 не сделать ибо лефт-аутер-джойн, либо в каком то событии докидывать записи с пустым POSNR. Проще программно

Code:
DATA: BEGIN OF itab OCCURS 0,
        vbeln LIKE vbak-vbeln,
        posnr LIKE vbap-posnr,
        kursk LIKE vbkd-kursk,
      END OF itab.

PARAMETERS: p_vbeln LIKE vbak-vbeln.

START-OF-SELECTION.
  SELECT vbak~vbeln vbap~posnr vbkd~kursk
    INTO TABLE itab
    FROM vbkd LEFT OUTER JOIN vbap ON vbkd~vbeln = vbap~vbeln AND
                                 vbkd~posnr = vbap~posnr
              INNER JOIN vbak ON vbkd~vbeln = vbak~vbeln
  WHERE vbkd~vbeln = p_vbeln.

END-OF-SELECTION.
  LOOP AT itab.
    WRITE: / itab-vbeln, itab-posnr, itab-kursk.
  ENDLOOP.


Ну, если и шутка, то не моя.
Back to top
View user's profile Send private message
Anton_bs
Участник
Участник


Age: 44
Joined: 22 Sep 2009
Posts: 30

PostPosted: Fri Sep 02, 2011 9:33 am    Post subject: Re: Ракурс на VBAP и VBKD Reply with quote

Удав wrote:
Anton_bs wrote:
Прошу прощения, что сразу не написал саму задачу. Надо создать ракурс из VBAK, VBAP и VBKD. VBAK и VBAP думаю понятно зачем, а из VBKD нужен курс.

Одним запросом это можно сделать через 2 поля курса в результирующей таблице:
Code:
SELECT k~... p~... dk~kurrf as kurrf_k dp~kurrf as kurrf_p
INTO ...
FROM vbap as p
INNER JOIN vbak as k ON k~vbeln = p~vbeln
INNER JOIN vbkd as dk ON dk~vbeln = p~vbeln
                     AND dk~posnr = '000000'
LEFT OUTER JOIN vbkd as dp ON dp~vbeln = p~vbeln
                          AND dp~posnr = p~posnr
WHERE ...

Но с точки зрения оптимального быстродействия лучше выбирать данные из VBKD отдельным запросом и соединять их в цикле по внутренней таблице с данными VBAK+VBAP.
Code:

Выборка данных
...
SORT gt_vbkd BY vbeln posnr.
LOOP AT gt_vbap.
...
  CLEAR gt_vbkd. "Заголовочная запись
  READ TABLE gt_vbkd WITH KEY vbeln = gt_vbap-vbeln
                                                 posnr = gt_vbap-posnr
    BINARY SEARCH.
  IF sy-subrc <> 0.
    READ TABLE gt_vbkd WITH KEY vbeln = gt_vbap-vbeln
                                          posnr = '000000'
      BINARY SEARCH.
  ENDIF.
  gt_vbap-kurrf = gt_vbkd-kurrf.
...
ENDLOOP.


Так и прийдется наверно делать. Нужно написать экстрактор для инфо-источника, думал обойтись ракурсом... Значит, буду писать на ФМ.
Спасибо за помощь.

З.Ы. Спасибо всем

З.З.Ы. Поле kurrf у нас не заполнено, зато есть kursk.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.