Posted: Wed Aug 31, 2011 10:41 am Post subject: Ракурс на VBAP и VBKD
Добрый день, коллеги.
Возник такой вопрос, как можно в ракурсе соединить VBAP и VBKD?
Понятно, что по полям vbeln и posnr. Но в VBKD есть записи (например для вида документа запрос), где для одного документа posnr пустое и есть номера позиций, а есть записи, где только значение posnr пустое.
Что можно придумать?
Update: Прошу прощения, что сразу не написал саму задачу. Надо создать ракурс из VBAK, VBAP и VBKD. VBAK и VBAP думаю понятно зачем, а из VBKD нужен курс.
Posted: Wed Aug 31, 2011 12:35 pm Post subject: Re: Ракурс на VBAP и VBKD
Anton_bs wrote:
Добрый день, коллеги.
Возник такой вопрос, как можно в ракурсе соединить VBAP и VBKD?
Понятно, что по полям vbeln и posnr. Но в VBKD есть записи (например для вида документа запрос), где для одного документа posnr пустое и есть номера позиций, а есть записи, где только значение posnr пустое.
Что можно придумать?
Update: Прошу прощения, что сразу не написал саму задачу. Надо создать ракурс из VBAK, VBAP и VBKD. VBAK и VBAP думаю понятно зачем, а из VBKD нужен курс.
Они соединяются через таблицу VBUP , вот например такой ракус посмотри U_16203
Age: 46 Joined: 05 Nov 2007 Posts: 725 Location: КраснАдар
Posted: Wed Aug 31, 2011 2:04 pm Post subject:
Это типа шутка такая? Коммерческие данные привязываются как к позициям, так и к заголовкам документов. Если пусто - значит заголовок.
Или я что-то не то ем и курю?
Добавил: не совсем понимаю, зачем в один массив все это схлопывать, но по ощущениям через 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.
Age: 48 Joined: 25 Jan 2008 Posts: 580 Location: Москва
Posted: Wed Aug 31, 2011 5:11 pm Post subject: Re: Ракурс на VBAP и VBKD
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.
Posted: Fri Sep 02, 2011 9:16 am Post subject: Re: Ракурс на VBAP и VBKD
bimit wrote:
Anton_bs wrote:
Добрый день, коллеги.
Возник такой вопрос, как можно в ракурсе соединить VBAP и VBKD?
Понятно, что по полям vbeln и posnr. Но в VBKD есть записи (например для вида документа запрос), где для одного документа posnr пустое и есть номера позиций, а есть записи, где только значение posnr пустое.
Что можно придумать?
Update: Прошу прощения, что сразу не написал саму задачу. Надо создать ракурс из VBAK, VBAP и VBKD. VBAK и VBAP думаю понятно зачем, а из VBKD нужен курс.
Они соединяются через таблицу VBUP , вот например такой ракус посмотри U_16203
Выборка не будет содержать документ 10003250 из моего примера.
Это типа шутка такая? Коммерческие данные привязываются как к позициям, так и к заголовкам документов. Если пусто - значит заголовок.
Или я что-то не то ем и курю?
Добавил: не совсем понимаю, зачем в один массив все это схлопывать, но по ощущениям через 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.
Posted: Fri Sep 02, 2011 9:33 am Post subject: Re: Ракурс на VBAP и VBKD
Удав 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.
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.