Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

CALL TRANSACTION

Former Member
0 Likes
2,430

Dear all,

      I am fresher in abap. I am developing a report for sales price variation report(SD-Module).In this report I have used call transaction method 'VA03' , after getting va03 screen, I have one requirement. The requirement is

         IF VBAP–ABGRU (Reason for Rejection field) IS NOT INITIAL. Then block the entire material item record, it will not show .

   Please find the bellow program and attachment.

SELECT a~vbeln a~kunnr a~erdat a~knumv a~waerk b~posnr b~werks b~matnr b~arktx b~kwmeng b~vrkme b~mvgr1 b~netwr INTO CORRESPONDING FIELDS OF TABLE it_vbak FROM vbak AS a

                    INNER JOIN vbap AS b ON a~vbeln = b~vbeln

                    INNER JOIN mara AS c ON b~matnr = c~matnr

                WHERE a~vkorg IN s_vkorg AND a~vtweg IN s_vtweg AND

                      a~spart IN s_spart AND a~erdat IN s_erdat AND

                      a~kunnr IN s_kunnr AND c~matnr IN s_matnr AND c~mtart IN s_mtart AND

                        a~auart NOT IN  ('RE','ZES','ZDS') AND kwmeng <> 0." AND a~vtweg NE 40." AND a~vbeln = '0000046091'.

  SELECT kunnr name1 INTO TABLE it_kna1 FROM kna1 FOR ALL ENTRIES IN it_vbak WHERE kunnr = it_vbak-kunnr.

  SELECT vbeln posnr bstkd bstdk ihrez kursk INTO TABLE it_vbkd FROM vbkd FOR ALL ENTRIES IN it_vbak WHERE vbeln = it_vbak-vbeln." AND posnr = it_vbak-posnr.

  SELECT knumv kposn kschl kbetr kwert INTO TABLE it_konv FROM konv FOR ALL ENTRIES IN it_vbak WHERE knumv = it_vbak-knumv AND kposn = it_vbak-posnr.

  DELETE it_konv WHERE kschl NE 'PR00'.

  SELECT * INTO TABLE it_tvm1 FROM tvm1t WHERE spras = 'EN'.

  LOOP AT it_vbak.

    CLEAR:wa_vbkd,ort01,wa_vbak1,
wa_konv,kbetr,wa_vbkd1,wa_tvm1,name1,kunnr,consig,ort0.

    READ TABLE it_tvm1 INTO wa_tvm1 WITH KEY mvgr1 = it_vbak-mvgr1.

    it_vbak-bezei = wa_tvm1-bezei.

    MODIFY it_vbak TRANSPORTING bezei.

    READ TABLE it_konv INTO wa_konv WITH KEY knumv = it_vbak-knumv kposn = it_vbak-posnr.

    it_vbak-kbetr = wa_konv-kbetr."it_vbak-netwr / it_vbak-kwmeng.

    MODIFY it_vbak TRANSPORTING kbetr.

    it_vbak-netwr = wa_konv-kwert.

    MODIFY it_vbak TRANSPORTING netwr.

    READ TABLE it_kna1 INTO wa_kna1 WITH KEY kunnr = it_vbak-kunnr.

    it_vbak-name1 = wa_kna1-name1.

    MODIFY it_vbak TRANSPORTING name1.

    READ TABLE it_vbkd INTO wa_vbkd WITH KEY vbeln = it_vbak-vbeln." posnr = it_vbak-posnr.

    it_vbak-bstkd = wa_vbkd-bstkd.

    it_vbak-bstdk = wa_vbkd-bstdk.

    MODIFY it_vbak TRANSPORTING bstkd.

    MODIFY it_vbak TRANSPORTING bstdk.

    it_vbak-kwert1 = it_vbak-kbetr * wa_vbkd-kursk.

    MODIFY it_vbak TRANSPORTING kwert1.

    it_vbak-kwert2 = it_vbak-netwr * wa_vbkd-kursk.

    MODIFY it_vbak TRANSPORTING kwert2.

    SELECT SINGLE name1 INTO name1 FROM knvk WHERE parnr = wa_vbkd-ihrez.

    it_vbak-region = name1.

    MODIFY it_vbak TRANSPORTING region.

    SELECT a~vbeln a~erdat a~knumv a~waerk b~posnr b~werks b~kwmeng b~vrkme b~netwr b~mvgr1 INTO wa_vbak1  UP TO 1 ROWS FROM vbak AS a

                    INNER JOIN vbap AS b ON a~vbeln = b~vbeln

              WHERE a~kunnr = it_vbak-kunnr AND b~matnr = it_vbak-matnr AND a~vtweg IN s_vtweg AND

                    b~kwmeng <> 0 AND a~vbeln < it_vbak-vbeln AND a~auart NOT IN ('RE','ZES','ZDS') ORDER BY a~vbeln DESCENDING."AND a~vtweg NE 40

    ENDSELECT.

    SELECT SINGLE kbetr kwert INTO (kbetr,kwert) FROM konv WHERE knumv = wa_vbak1-knumv AND kposn = wa_vbak1-posnr AND kschl = 'PR00'.

    CLEAR wa_tvm1.

    READ TABLE it_tvm1 INTO wa_tvm1 WITH KEY mvgr1 = wa_vbak1-mvgr1.

    it_vbak-vbeln1 = wa_vbak1-vbeln.

    it_vbak-erdat1 = wa_vbak1-erdat.

    it_vbak-werks1 = wa_vbak1-werks.

    it_vbak-waerk1 = wa_vbak1-waerk.

    it_vbak-kwmeng1 = wa_vbak1-kwmeng.

    it_vbak-vrkme1 = wa_vbak1-vrkme.

    it_vbak-netwr1 = kwert."wa_vbak1-netwr.

    it_vbak-kbetr1 = kbetr."wa_vbak1-netwr / wa_vbak1-kwmeng.

    it_vbak-bezei1 = wa_tvm1-bezei.

    MODIFY it_vbak TRANSPORTING:vbeln1,
erdat1,waerk1,werks1,kwmeng1,vrkme1,netwr1,kbetr1.

    SELECT SINGLE kna1~kunnr kna1~name1 kna1~ort01 INTO (kunnr,consig,ort01)

                        FROM kna1 INNER JOIN vbpa ON kna1~kunnr = vbpa~kunnr

                                  INNER JOIN vbak ON vbak~vbeln = vbpa~vbeln

                        WHERE vbpa~parvw = 'WE' AND vbak~vbeln = it_vbak-vbeln1.

    it_vbak-kunnr1 = kunnr.

    it_vbak-consig = consig.

    it_vbak-ort01  = ort01.

    MODIFY it_vbak TRANSPORTING kunnr1.

    MODIFY it_vbak TRANSPORTING consig.

    MODIFY it_vbak TRANSPORTING ort01.

    SELECT SINGLE bstkd bstdk ihrez kursk INTO wa_vbkd1 FROM vbkd WHERE vbeln = wa_vbak1-vbeln." AND posnr = wa_vbak1-posnr.

    it_vbak-bstkd1 = wa_vbkd1-bstkd.

    it_vbak-bstdk1 = wa_vbkd1-bstdk.

    MODIFY it_vbak TRANSPORTING bstkd1.

    MODIFY it_vbak TRANSPORTING bstdk1.

    it_vbak-kwert3 = it_vbak-kbetr1 * wa_vbkd1-kursk.

    it_vbak-kwert4 = it_vbak-netwr1 * wa_vbkd1-kursk.

    MODIFY it_vbak TRANSPORTING kwert3.

    MODIFY it_vbak TRANSPORTING kwert4.

    CLEAR name1.

    SELECT SINGLE name1 INTO name1 FROM knvk WHERE parnr = wa_vbkd1-ihrez.

    it_vbak-region1 = name1.

    MODIFY it_vbak TRANSPORTING region1.

    IF it_vbak-kbetr1 IS NOT INITIAL.

      it_vbak-varia = it_vbak-kbetr - it_vbak-kbetr1.

      MODIFY it_vbak TRANSPORTING varia.

    ENDIF.

    IF it_vbak-kbetr1 IS NOT INITIAL.

      IF it_vbak-varia IS NOT INITIAL.

        calc = ( it_vbak-varia * 100 ) / it_vbak-kbetr1.

        varia = calc.

        variation = varia.

*      CONCATENATE varia '%' INTO variation SEPARATED BY space.

        it_vbak-variation = variation.

        MODIFY it_vbak TRANSPORTING variation.

        it_vbak-kwert5 = it_vbak-varia * it_vbak-kwmeng.

        MODIFY it_vbak TRANSPORTING kwert5.

      ENDIF.

    ENDIF.

    PERFORM colorgrid.

  ENDLOOP.

  SORT it_vbak BY kunnr matnr.

FORM user_command USING r_ucomm LIKE sy-ucomm

                  rs_selfield TYPE slis_selfield.

* Check function code

  CASE r_ucomm.

    WHEN '&IC1'.

*   Check field clicked on within ALVgrid report

      IF rs_selfield-fieldname = 'VBELN'.

*     Read data table, using index of row user clicked on

        READ TABLE it_vbak INTO wa_vbak INDEX rs_selfield-tabindex.

*     Set parameter ID for transaction screen field

        SET PARAMETER ID 'AUN' FIELD wa_vbak-vbeln.

*     Sxecute transaction VF03, and skip initial data entry screen

        CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

      ELSEIF rs_selfield-fieldname = 'VBELN1'.

*         Read data table, using index of row user clicked on

        READ TABLE it_vbak INTO wa_vbak INDEX rs_selfield-tabindex.

*     Set parameter ID for transaction screen field

        SET PARAMETER ID 'AUN' FIELD wa_vbak-vbeln1.

*     Sxecute transaction VF03, and skip initial data entry screen

        CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

      ENDIF.

  ENDCASE.

ENDFORM.                    "user_command

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
2,191

Hi Dodda,

In your select statement I dont see any filtering being done based on reasonf for rejection.

SELECT a~vbeln a~erdat a~knumv a~waerk b~posnr b~werks b~kwmeng b~vrkme b~netwr b~mvgr1 INTO wa_vbak1  UP TO 1 ROWS FROM vbak AS a

                    INNER JOIN vbap AS b ON a~vbeln = b~vbeln

              WHERE a~kunnr = it_vbak-kunnr AND b~matnr = it_vbak-matnr AND a~vtweg IN s_vtweg AND

                    b~kwmeng <> 0 AND a~vbeln < it_vbak-vbeln

            AND b~abgru is initial

           AND a~auart NOT IN ('RE','ZES','ZDS') ORDER BY a~vbeln DESCENDING."AND a~vtweg NE 40

    ENDSELECT.

In the above select statement, you either need to add the condition AND b~abgru is initial, (as shown in bold above)  or you need to provide a check in the selected item records if vbap-abgru is initial after selecting from database. .

9 REPLIES 9
Read only

Former Member
0 Likes
2,191

Dear Srikanth,

Wht is your Exact requirment ???

Can you be elaboarte the question.

From report u want to connect to the VA03 transaction and you want block the material of va03 ???

Read only

0 Likes
2,191

Dear madhukumar,

     From report I have connected to the va03 screen , but in va03 screen we have lot of material items ,in this some material items are rejected. These rejected items are shouldn't show.

please find the attached image.

srikanth.

Read only

0 Likes
2,191

So you want to change behavior of standard transaction VA03, no ?

(You could try implict EHS in form XVBAP_LESEN include FV45PFAP_XVBAP_LESEN, but at your own risk of course, check that transaction is VA03, and check you are called by a customer program with a trick like setting a memory id)

Regards,

Raymond

Read only

hemanth_kumar21
Contributor
0 Likes
2,191

Hi srikanthreddy dodda,

         IF VBAP–ABGRU (Reason for Rejection field) IS NOT INITIAL. Then block the entire material item record, it will not show .

In this case, while fetching the data itself you put condition like VBAP–ABGRU NEspace.
At the final you will have a sales order numbers whose Reason for reject Not equal to space.


SELECT a~vbeln a~kunnr a~erdat a~knumv a~waerk b~posnr b~werks b~matnr b~arktx b~kwmeng b~vrkme b~mvgr1 b~netwr INTO CORRESPONDING FIELDS OF TABLE it_vbak FROM vbak AS a

                    INNER JOIN vbap AS b ON a~vbeln = b~vbeln

                    INNER JOIN mara AS c ON b~matnr = c~matnr

                WHERE a~vkorg IN s_vkorg AND a~vtweg IN s_vtweg AND

                      a~spart IN s_spart AND a~erdat IN s_erdat AND

                      a~kunnr IN s_kunnr AND c~matnr IN s_matnr AND c~mtart IN s_mtart AND

                        a~auart NOT IN  ('RE','ZES','ZDS') AND kwmeng <> 0." AND a~vtweg NE 40." AND a~vbeln = '0000046091'
AND b~ABGRU NE space.

SELECT a~vbeln a~erdat a~knumv a~waerk b~posnr b~werks b~kwmeng b~vrkme b~netwr b~mvgr1 INTO wa_vbak1  UP TO 1 ROWS FROM vbak AS a

                    INNER JOIN vbap AS b ON a~vbeln = b~vbeln

              WHERE a~kunnr = it_vbak-kunnr AND b~matnr = it_vbak-matnr AND a~vtweg IN s_vtweg AND

                    b~kwmeng <> 0 AND a~vbeln < it_vbak-vbeln AND a~auart NOT IN ('RE','ZES','ZDS') ORDER BY a~vbeln DESCENDING."AND a~vtweg NE 40

b~ABGRU NE space.

    ENDSELECT.

Thanks & Regards,

Hemanth Kumar M.

Read only

Former Member
0 Likes
2,192

Hi Dodda,

In your select statement I dont see any filtering being done based on reasonf for rejection.

SELECT a~vbeln a~erdat a~knumv a~waerk b~posnr b~werks b~kwmeng b~vrkme b~netwr b~mvgr1 INTO wa_vbak1  UP TO 1 ROWS FROM vbak AS a

                    INNER JOIN vbap AS b ON a~vbeln = b~vbeln

              WHERE a~kunnr = it_vbak-kunnr AND b~matnr = it_vbak-matnr AND a~vtweg IN s_vtweg AND

                    b~kwmeng <> 0 AND a~vbeln < it_vbak-vbeln

            AND b~abgru is initial

           AND a~auart NOT IN ('RE','ZES','ZDS') ORDER BY a~vbeln DESCENDING."AND a~vtweg NE 40

    ENDSELECT.

In the above select statement, you either need to add the condition AND b~abgru is initial, (as shown in bold above)  or you need to provide a check in the selected item records if vbap-abgru is initial after selecting from database. .

Read only

0 Likes
2,191

Dear susmitha,

    Thank you for reply.

   but got the bellow error message.

MSG: The operator IS can only be used in "f IS NULL" or "f IS NOT NULL". - 

Regards,

srikanth.

Read only

0 Likes
2,191

Hi

Please use the below codes (please go through my previous reply):

Read only

0 Likes
2,191

Ok then change the condition as b~abgru is null

Read only

0 Likes
2,191

I think the right condition should be b~abgru = space: open SQL statements don't create null values.