SAP ABAP Open sales order report with delivered and Balance quantity

 If you not to make a report, to show the open sales order along with delivered and balance quantity, you can try with with the help of this program.



REPORT ZSD_OPEN_ORDERS.

*& Report  ZSD_OPEN_ORDERS
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
tables vbakvbap.

types begin of tp_so_items,
          sel,
"header details
          vbeln type vbeln_va,
          erdat type erdat,
          auart type auart,
          kunnr type kunnr,
"line items details
          posnr type posnr_va,
          matnr type matnr,
          arktx type arktx,
          kwmeng type kwmeng,
          vrkme type vrkme,
          werks type werks_ext,
"vbup delivery status
          lfsta type lfsta,
"delivered qty
          kwmeng_dlv type kwmeng,   " delivered quantity
          kwmeng_bal type kwmeng,   "balance quantity
          name1 type kna1-name1,
        end of tp_so_items,

        begin of tp_lips,
          vbeln type vbeln_vl,
          wadat_ist type wadat_ist,

          posnr type posnr_vl,
          matnr type matnr,
          lfimg type lfimg,
          meins type meins,
          vgbel type vgbel,
          vgpos type vgpos,
        end of tp_lips,

        begin of tp_kna1,
          kunnr type kna1-kunnr,
          name1 type kna1-name1,
        end of tp_kna1.

data gs_so_items  type tp_so_items,
       gt_so_items  type standard table of tp_so_items,
       gt_so_items1 type standard table of tp_so_items,
       gs_lips type tp_lips,
       gt_lips type standard table of tp_lips,
       gs_kna1 type tp_kna1,
       gt_kna1 type standard table of tp_kna1.

"ALV fieldcatalog
DATA:  GT_FCAT    TYPE LVC_T_FCAT,               "slis_t_fieldcat_alv,
       GS_FCAT    LIKE LINE OF GT_FCAT,
       GS_LAYOUT  TYPE LVC_S_LAYO,               "slis_layout_alv,
       GS_VARIANT TYPE DISVARIANT,               "For Save Variant
       GS_GRID    TYPE LVC_S_GLAY,
       gv_cnt type i.


selection-screen begin of block b1 with frame title text-001.
select-options s_kunnr for vbak-kunnr,
                 s_matnr for vbap-matnr,
                 S_auart for vbak-auart,
                 s_vbeln for vbak-vbeln,
                 s_erdat for vbak-ERDAT.
selection-screen end of block b1.



start-of-selection.
  perform get_data.
  perform build_data.
  perform display_data.

end-of-selection.
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM GET_DATA.

 select a~vbeln a~erdat a~auart a~kunnr
        b~posnr b~matnr b~arktx b~kwmeng b~vrkme b~werks
        c~lfsta
from vbak as a inner join vbap as on a~vbeln b~vbeln
               inner join vbup as on b~vbeln c~vbeln
                                   and b~POSNR c~POSNR
into corresponding fields of table gt_so_items
where a~vbeln in s_vbeln
  and a~kunnr in s_kunnr
  and a~ERDAT in s_erdat
  and a~auart in S_AUART
  and b~matnr in s_matnr
  and c~LFSTA 'A' or c~LFSTA 'B' ).  "A complete open orde, B partial delivery items

  if gt_so_items[] is not initial.
"for customer name
  sort gt_so_items by kunnr.

 select kunnr name1 from kna1 into corresponding fields of table gt_kna1
 for all entries in gt_so_items where kunnr gt_so_items-kunnr.

  endif.


"for partial delivered
 gt_so_items1[] gt_so_items[].
 delete gt_so_items1 where LFSTA ne 'B'.

 sort gt_so_items by vbeln POSNR.
 sort gt_so_items1 by vbeln POSNR.


   if gt_so_items1[] is not initial.
"select delivery details for all partial lines
  select  a~vbeln a~wadat_ist
          b~posnr b~matnr b~lfimg b~meins b~vgbel b~vgpos
  from likp as a inner join lips as on a~vbeln b~vbeln
  into table gt_lips
  for all entries in gt_so_items1 where b~vgbel gt_so_items1-vbeln
                                    and b~vgpos gt_so_items1-posnr.

  delete gt_lips where wadat_ist is initial.
  sort gt_lips by vgbel vgpos.

   endif.


ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  BUILD_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form build_data.

  loop at gt_so_items into gs_so_items.

"customer name
   clear gs_kna1.
   read table gt_kna1 into gs_kna1 with key kunnr gs_so_items-kunnr.
   if sy-subrc 0.
      gs_so_items-name1 gs_kna1-name1.
   endif.

  if gs_so_items-lfsta 'a'.

  else.

    clear gs_lips.
    read table gt_lips into gs_lips with key vgbel gs_so_items-vbeln
                                             vgpos gs_so_items-posnr binary search.

    if sy-subrc 0.
    clear gs_lips.
    loop at gt_lips into gs_lips from sy-tabix.

     if gs_lips-vgbel ne gs_so_items-vbeln or
        gs_lips-vgpos ne gs_so_items-posnr.
        exit.
     endif.

    gs_so_items-kwmeng_dlv gs_so_items-kwmeng_dlv + gs_lips-lfimg.



    clear gs_lips.
    endloop.

    endif.

  endif.

  gs_so_items-kwmeng_bal gs_so_items-kwmeng gs_so_items-kwmeng_dlv.

  modify gt_so_items from gs_so_items transporting kwmeng_dlv kwmeng_bal name1.

  clear gs_so_items.
  endloop.

endform.
*&---------------------------------------------------------------------*
*&      Form  DISPLAY_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM DISPLAY_DATA.

  CLEAR GV_CNTGT_FCAT[]GS_FCAT.

  GS_LAYOUT-CWIDTH_OPT 'X'.
  GS_LAYOUT-BOX_FNAME  'SEL'.
  GS_VARIANT-REPORT    SY-REPID.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'VBELN'.
  GS_FCAT-HOTSPOT   'X'.
  GS_FCAT-EMPHASIZE 'C5'.
  GS_FCAT-no_zero   'X'.
  GS_FCAT-COLTEXT 'Sales order Number'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'ERDAT'.
  GS_FCAT-COLTEXT 'Sales order date'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'AUART'.
  GS_FCAT-COLTEXT 'Doc. type'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'WERKS'.
  GS_FCAT-COLTEXT 'Site'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'KUNNR'.
  GS_FCAT-COLTEXT 'Customer ID'.
  GS_FCAT-no_zero   'X'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'NAME1'.
  GS_FCAT-COLTEXT 'Customer name'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'POSNR'.
  GS_FCAT-COLTEXT 'Item No.'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'LFSTA'.
  GS_FCAT-COLTEXT   'Delivery status'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'MATNR'.
  GS_FCAT-COLTEXT   'Article Number'.
  GS_FCAT-no_zero   'X'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'ARKTX'.
  GS_FCAT-COLTEXT   'Article description'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'VRKME'.
  GS_FCAT-COLTEXT   'Order unit'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'KWMENG'.
  GS_FCAT-COLTEXT   'Order quantity'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'KWMENG_DLV'.
  GS_FCAT-COLTEXT   'Delivered quantity'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  GV_CNT GV_CNT + 1.
  GS_FCAT-COL_POS   =  GV_CNT .
  GS_FCAT-FIELDNAME 'KWMENG_BAL'.
  GS_FCAT-COLTEXT   'Balance quantity'.
  APPEND GS_FCAT TO GT_FCAT.
  CLEAR GS_FCAT.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
    EXPORTING
      I_CALLBACK_PROGRAM       SY-REPID
      I_CALLBACK_USER_COMMAND  'USER_COMMAND'
*      I_CALLBACK_PF_STATUS_SET = 'PF_STATUS'
*      I_CALLBACK_TOP_OF_PAGE   = 'TOP-OF-PAGE'
*  I_CALLBACK_HTML_TOP_OF_PAGE = 'HTML_TOP_OF_PAGE'
      IS_LAYOUT_LVC            GS_LAYOUT
      IT_FIELDCAT_LVC          gt_fcat[]
*     I_GRID_SETTINGS          = gs_grid
*     IT_EVENTS                = lt_evts[]
*      IT_EVENTS          = I_EVENTS
      I_DEFAULT                'X'
      I_SAVE                   'A'
      IS_VARIANT               GS_VARIANT
* IMPORTING
*     E_EXIT_CAUSED_BY_CALLER  =
*     ES_EXIT_CAUSED_BY_USER   =
    TABLES
      T_OUTTAB                 gt_so_items[]
    EXCEPTIONS
      PROGRAM_ERROR            1
      OTHERS                   2.

  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

ENDFORM.                    " DISPLAY_DATA

FORM USER_COMMAND  USING R_UCOMM LIKE SY-UCOMM
                         RS_SELFIELD TYPE SLIS_SELFIELD.


  CASE R_UCOMM.

   when '&IC1'.
     clear gs_so_items.
     read TABLE gt_so_items into gs_so_items INDEX rs_selfield-tabindex.
     if gs_so_items-vbeln is NOT INITIAL.
        set PARAMETER ID 'AUN' FIELD gs_so_items-vbeln.
        call TRANSACTION 'VA03' AND SKIP FIRST SCREEN.

     endif.

   ENDCASE.

    rs_selfield-refresh    'X'.
    rs_selfield-row_stable 'X'.
    rs_selfield-col_stable 'X'.

 CLEAR SY-UCOMM.

endform.
 




Post a Comment

0 Comments

Total Pageviews