Sap Technology‎ > ‎ABAP DEVELOPMENT‎ > ‎

Pending sale order details

posted Mar 30, 2011, 7:34 PM by Sap Team
 Author     Anya
 Module      Sale
 Tech          ALV

report zsd_pending_order no standard page heading line-size 255.
 

*Pending sale order details :  Details of open sale orders  

* output list: Open delivery details with open quantities

tables : vbak, vbap, likp, lips, kna1, vbuk, vbpa, vepvg, vbfa, vbup.

data : pend_qty like  vbap-kwmeng,
       dlv_qty like  vbap-kwmeng,
       ord_qty like vbap-kwmeng.

data: begin of itab_vbak occurs 0,
      vbeln like vbak-vbeln,           "sales order no
      audat like vbak-audat,           " created date
      auart like vbak-auart,           " Sales Document Type
      vkorg like vbak-vkorg,           "Sales Organization
      vtweg like vbak-vtweg,           " distribution channel
      spart like vbak-spart,           " Division
      vkgrp like vbak-vkgrp,           " Sales group
      vkbur like vbak-vkbur,           " Sales office
      kunnr like vbak-kunnr,           " sold to party
      kunag like vbak-kunnr,           " ship to party
      cust like vbak-kunnr,            " sold to party
      ship like kna1-name1,            " ship to party
      city like kna1-ort01,            " ship to party location
      deliv like likp-vbeln,           " delivery
      matnr like vbap-matnr,
      arktx like vbap-arktx,           " mat description
      kwmeng like vbap-kwmeng,
      kbmeng like vbap-kbmeng,
      fkrel like vbap-matnr,
      vstel like vbap-vstel,
      route like vbap-route,
      chln_no like likp-xabln,
      grn_no like likp-bolnr,
      truck_no like likp-traid,
      dlv_dt like vbfa-erdat,           "dlvy date
      ord_qty like vbap-kwmeng,
      dlvd_qty like vbap-kwmeng,
      pend_qty like vbap-kwmeng,
      kzwi5 like vbap-kzwi5,
      posnr like vbap-posnr,
      VSART LIKE LIKP-VSART,
      SDABW LIKE LIKP-SDABW,
end of itab_vbak.

data  posnr like vbap-posnr.

*FOR ALV DISPLAY
type-pools: slis.
constants: formname_top_of_page type slis_formname value 'TOP_OF_PAGE'.

*Data Decelararion for alv display
data: i_fieldtab type slis_t_fieldcat_alv,
      i_heading  type slis_t_listheader,
      i_layout   type slis_layout_alv,
      i_sort     type slis_t_sortinfo_alv,
      i_print    type slis_print_alv,
      i_events   type slis_t_event,
      i_repname  like sy-repid,
      f2code   like sy-ucomm value  '&ETA',
      i_save(1) type c,
      i_exit(1) type c,
      i_variant like disvariant,
      h_text(50).

start-of-selection.
  selection-screen skip 1.
  selection-screen begin of block v1 with frame title text-001.
  selection-screen skip 1.
  select-options:
                 ord_no for vepvg-vbeln,
                 audat for vbak-audat obligatory,
                 matnr for vbap-matnr,
                 spart for vbap-spart obligatory,
                 vstel for vepvg-vstel obligatory,
                 sale_org for vbak-vkorg obligatory,
                 sale_off for vbak-vkbur.

  selection-screen skip 1.

* check box for ALV display
  parameters p_alv as checkbox.
  selection-screen end of block v1.
  selection-screen skip 1.

  data:   ftab(72) occurs 5 with header line.

  refresh ftab.
  ftab = 'VBELN'. append ftab.

  refresh itab_vbak.

initialization.
  i_repname = sy-repid.

start-of-selection.

  select vbeln audat vkorg vtweg spart vkbur kunnr from vbak
       into
       (itab_vbak-vbeln, itab_vbak-audat,
        vbak-vkorg, vbak-vtweg, vbak-spart,
        itab_vbak-vkbur, itab_vbak-kunnr)
       where vbeln in ord_no
       and audat in audat
       and vbtyp = 'C'
       and vkorg in sale_org
       and spart in spart
       and vkbur in sale_off.

*   authorization object
    authority-check object 'V_VBAK_VKO'
           id 'VKORG' field vbak-vkorg
           id 'VTWEG' field vbak-vtweg
           id 'SPART' field vbak-spart
           id 'ACTVT' field '03'.
    if sy-subrc <> 0.
      message e208(00) with 'No relevant authorizations found'.
    endif.

    if sy-subrc = 0.
      select posnr kwmeng kbmeng matnr arktx  "added for mat description
               fkrel vstel route kzwi5 spart
               from vbap into corresponding fields of itab_vbak
               where vbeln = itab_vbak-vbeln .

        check ( itab_vbak-fkrel = 'A' or
        "Delivery-related billing document
                itab_vbak-fkrel = 'D' )   "Relevant for pro forma
          and itab_vbak-vstel in vstel
          and itab_vbak-matnr in matnr
          and itab_vbak-spart in spart.

        select single * from vbup where vbeln = itab_vbak-vbeln
                                    and posnr = itab_vbak-posnr.
        check vbup-gbsta ne 'C'.
        dlv_qty = 0.

        select single kunnr from vbpa into itab_vbak-kunnr
               where vbeln = itab_vbak-vbeln
               and parvw = 'WE'.
        select single name1 ort01 from kna1 into
               (itab_vbak-cust, itab_vbak-city)
                where kunnr = itab_vbak-kunnr.

*       in case of partially processed sale order get delivery details
        clear : dlv_qty, itab_vbak-dlv_dt, itab_vbak-dlvd_qty,
        itab_vbak-chln_no,
                itab_vbak-grn_no, itab_vbak-truck_no.

        if vbup-gbsta eq 'B'. "partially processed
          dlv_qty = 0.

*         get details from delivery
          select vbfa~vbeln vbfa~rfmng vbfa~vbtyp_n vbfa~erdat
             into (vbfa-vbeln, vbfa-rfmng, vbfa-vbtyp_n, vbfa-erdat)
             from vbfa
             where vbelv = itab_vbak-vbeln
               and posnv = itab_vbak-posnr.

            check vbfa-vbtyp_n = 'J'.
            clear : dlv_qty, itab_vbak-dlv_dt, itab_vbak-dlvd_qty,
            itab_vbak-chln_no,
                    itab_vbak-grn_no, itab_vbak-truck_no.

         SELECT SINGLE ERDAT XABLN BOLNR TRAID VSART SDABW
               INTO (ITAB_VBAK-DLV_DT, ITAB_VBAK-CHLN_NO,
               ITAB_VBAK-GRN_NO,
               ITAB_VBAK-TRUCK_NO, ITAB_VBAK-VSART, ITAB_VBAK-SDABW)
               from likp
               where vbeln = vbfa-vbeln.
            if sy-subrc = 0.
              dlv_qty = dlv_qty + vbfa-rfmng.
              itab_vbak-dlv_dt = vbfa-erdat.
              itab_vbak-dlvd_qty = dlv_qty.
              itab_vbak-deliv = vbfa-vbeln.
            endif.
            append itab_vbak.
          endselect.

        elseif vbup-gbsta eq 'A'.
*         for unprocessed sale order
*         ship to party details
          itab_vbak-kunag = itab_vbak-kunnr.
          itab_vbak-ship = itab_vbak-cust.
          append itab_vbak.
        endif.
      endselect.
    endif.

    clear itab_vbak.
  endselect.

  loop at itab_vbak.

*   clear with change in document / item no
    on change of itab_vbak-vbeln or itab_vbak-posnr.
      clear: dlv_qty,ord_qty,pend_qty.
    endon.

    at new posnr.
*     In case full qty not delivered
      if itab_vbak-kwmeng > itab_vbak-dlvd_qty.
        select single vbpa~kunnr into vbpa-kunnr
           from vbpa
           where vbeln = itab_vbak-vbeln
            and  posnr = itab_vbak-posnr
            and  parvw = 'WE'.

        if sy-subrc eq 0.
          itab_vbak-kunag = vbpa-kunnr.

          select single name1 ort01 from kna1 into
                (itab_vbak-ship, itab_vbak-city)
                 where kunnr = itab_vbak-kunag.

          if sy-subrc ne 0.
            select single vbpa~kunnr into vbpa-kunnr
               from vbpa
               where vbeln = itab_vbak-vbeln
               and parvw = 'WE'.
            itab_vbak-kunag = vbpa-kunnr.

            if sy-subrc ne 0 and p_alv ne 'X'.
              write :/ 'vbpadetls' , itab_vbak-vbeln, itab_vbak-posnr,
              itab_vbak-vbeln.
            endif.
          endif.
        endif.
      endif.

      itab_vbak-ord_qty = itab_vbak-kwmeng.

*     Delivered Qty & Pending qty
      dlv_qty = dlv_qty + itab_vbak-dlvd_qty.
      itab_vbak-pend_qty = itab_vbak-kwmeng - dlv_qty.
      modify itab_vbak transporting kunag ship city dlvd_qty ord_qty
      pend_qty .
    endat.

  endloop.

end-of-selection.
  sort itab_vbak by vbeln posnr audat kunnr matnr.

  if p_alv ne 'X'.
    loop at itab_vbak.

      select single kna1~name1 kna1~ort01
             into
             (kna1-name1, kna1-ort01)
             from kna1
             where kunnr = itab_vbak-kunnr.

      pend_qty = itab_vbak-ord_qty - itab_vbak-dlvd_qty.
      format color col_normal.
      write : /01(10) itab_vbak-vbeln,
              12(10)  itab_vbak-audat,
              24(8)  itab_vbak-kunag no-zero,
              34(6)  itab_vbak-posnr no-zero,
              42(10) itab_vbak-matnr no-zero,
              54(15) itab_vbak-arktx,
              72(25) itab_vbak-ship,
              100(15) itab_vbak-city,
              118(8)  itab_vbak-ord_qty,
              128(10) itab_vbak-route,
              140(10) itab_vbak-dlv_dt,
              152(10) itab_vbak-dlvd_qty,
              164(10)  itab_vbak-chln_no,
              176(10)  itab_vbak-grn_no,
              188(10)  itab_vbak-truck_no,
              200(10) itab_vbak-pend_qty,
              218(15) itab_vbak-kzwi5 left-justified.

     format reset.

      at end of audat.
        sum.
        pend_qty = itab_vbak-ord_qty - itab_vbak-dlvd_qty.
        format color col_background.
        write: /118(8) itab_vbak-ord_qty,
               152(10) itab_vbak-dlvd_qty,
               200(10) pend_qty,
               218 itab_vbak-kzwi5 left-justified.
        format reset.
      endat.

      at last.
        sum.
        pend_qty = itab_vbak-ord_qty - itab_vbak-dlvd_qty.
        format color col_total.
        write : /5 'Grand Total : '.
        write: /118(8) itab_vbak-ord_qty,
              152(10) itab_vbak-dlvd_qty,
              200(10) pend_qty,
              218 itab_vbak-kzwi5 left-justified.
        format reset.
      endat.
    endloop.
  else.
*   for ALV Display
    i_repname = sy-repid.
    perform fieldcat using i_fieldtab[].
    perform eventtab using i_events[].
    perform comment using i_heading[].
    perform call_alv.
    perform build_layout using i_layout.

  endif.

top-of-page.
  if p_alv ne 'X'.
    format color col_heading.
    write: /01 'Ord No',
            12 'Ord Date',
            24 'Sold to Party',
            34 'Item No',
            42 'Mat No',
            54 'Mat Descp',
            72 'Ship to Party',
            100 'City',
            118 'Qty',
            128 'Route',
            140 'Dlv Date',
            152 'Dlv Qty',
            164 'Challan No',
            176 'GRN No',
            188 'Truck No',
            200 'Pend Qty',
            218 'Total Value'.
    format reset.
  endif.
*&---------------------------------------------------------------------*
*&      Form  fieldcat
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_I_FIELDTAB[]  text
*----------------------------------------------------------------------*
form fieldcat using p_fieldtab type slis_t_fieldcat_alv.

  data: l_fieldcat type slis_fieldcat_alv.
  clear l_fieldcat.

  l_fieldcat-tabname    = 'ITAB_VBAK'.
  l_fieldcat-fix_column = 'X'.
  l_fieldcat-no_out     = ' '.

  l_fieldcat-fieldname  = 'VKBUR'.
  l_fieldcat-outputlen  = 6.
  l_fieldcat-seltext_l  = 'Sales Office'.
  l_fieldcat-no_zero = 'X'.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'VSTEL'.
  l_fieldcat-outputlen  = 5.
  l_fieldcat-seltext_l  = 'Shipping Point'.
  l_fieldcat-no_zero = ' '.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'VBELN'.
  l_fieldcat-outputlen  = 10.
  l_fieldcat-seltext_l  = 'Order No.'.
  l_fieldcat-no_zero = 'X'.
  l_fieldcat-hotspot = 'X'.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'AUDAT'.
  l_fieldcat-outputlen  = 10.
  l_fieldcat-seltext_l  = 'Doc Date'.
  l_fieldcat-hotspot = ''.
  l_fieldcat-no_zero = ' '.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'POSNR'.
  l_fieldcat-outputlen  = 5.
  l_fieldcat-seltext_l  = 'Item'.
  l_fieldcat-no_zero = 'X'.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'MATNR'.
  l_fieldcat-outputlen  = 10.
  l_fieldcat-seltext_l  = 'Material No'.
  l_fieldcat-no_zero = 'X'.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'ARKTX'.
  l_fieldcat-outputlen  = 15.
  l_fieldcat-seltext_l  = 'Mat. Description'.
  l_fieldcat-no_zero = 'X'.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'KUNNR'.
  l_fieldcat-outputlen  = 8.
  l_fieldcat-seltext_l  = 'Sold to Party'.
  l_fieldcat-no_zero = 'X'.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'CUST'.
  l_fieldcat-outputlen  = 15.
  l_fieldcat-seltext_l  = 'Sold to Party Descp.'.
  l_fieldcat-no_zero = 'X'.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'KUNAG'.
  l_fieldcat-outputlen  = 8.
  l_fieldcat-seltext_l  = 'Ship to Party'.
  l_fieldcat-no_zero = 'X'.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'SHIP'.
  l_fieldcat-outputlen  = 15.
  l_fieldcat-seltext_l  = 'Ship to Party Descp'.
  l_fieldcat-no_zero = 'X'.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'CITY'.
  l_fieldcat-outputlen  = 13.
  l_fieldcat-seltext_l  = 'City'.
  l_fieldcat-no_zero = ' '.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'DELIV'.
  l_fieldcat-outputlen  = 10.
  l_fieldcat-seltext_l  = 'Delivery No.'.
  l_fieldcat-no_zero = 'X'.
  l_fieldcat-hotspot = 'X'.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'ORD_QTY'.
  l_fieldcat-outputlen  = 10.
  l_fieldcat-seltext_l  = 'Qty'.
  l_fieldcat-no_zero = ' '.
  l_fieldcat-hotspot = ' '.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'ROUTE'.
  l_fieldcat-outputlen  = 10.
  l_fieldcat-seltext_l  = 'Route'.
  l_fieldcat-no_zero = 'X'.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'DLV_DT'.
  l_fieldcat-outputlen  = 10.
  l_fieldcat-seltext_l  = 'Delivered date'.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'DLVD_QTY'.
  l_fieldcat-outputlen  = 10.
  l_fieldcat-seltext_l  = 'Delivered Qty'.
  l_fieldcat-no_zero = ' '.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'CHLN_NO'.
  l_fieldcat-outputlen  = 15.
  l_fieldcat-seltext_l  = 'Challan No'.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'GRN_NO'.
  l_fieldcat-outputlen  = 15.
  l_fieldcat-seltext_l  = 'GR Number'.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'TRUCK_NO'.
  l_fieldcat-outputlen  = 10.
  l_fieldcat-seltext_l  = 'Truck No'.
  append l_fieldcat to p_fieldtab.

 L_FIELDCAT-FIELDNAME  = 'VSART'.
  L_FIELDCAT-OUTPUTLEN  = 10.
  L_FIELDCAT-SELTEXT_L  = 'Ship.Typ '.
  L_FIELDCAT-NO_ZERO = ' '.
  APPEND L_FIELDCAT TO P_FIELDTAB.

  L_FIELDCAT-FIELDNAME  = 'SDABW'.
  L_FIELDCAT-OUTPUTLEN  = 10.
  L_FIELDCAT-SELTEXT_L  = 'Sp.Proc Ind '.
  L_FIELDCAT-NO_ZERO = ' '.
  APPEND L_FIELDCAT TO P_FIELDTAB.

  l_fieldcat-fieldname  = 'PEND_QTY'.
  l_fieldcat-outputlen  = 10.
  l_fieldcat-seltext_l  = 'Pending Qty'.
  l_fieldcat-no_zero = ' '.
  append l_fieldcat to p_fieldtab.

  l_fieldcat-fieldname  = 'KZWI5'.
  l_fieldcat-outputlen  = 13.
  l_fieldcat-seltext_l  = 'Value'.
  append l_fieldcat to p_fieldtab.

  clear l_fieldcat.

endform.                    " FIELDCAT
*&---------------------------------------------------------------------*
*&      Form  EVENTTAB
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_I_EVENTS[]  text
*----------------------------------------------------------------------*
form eventtab using p_events type slis_t_event.

  data: ls_event type slis_alv_event.
  call function 'REUSE_ALV_EVENTS_GET'
    exporting
      i_list_type = 0
    importing
      et_events   = p_events.

  read table p_events with key name = slis_ev_top_of_page
                           into ls_event.
  if sy-subrc = 0.
    move formname_top_of_page to ls_event-form.
    append ls_event to p_events.
  endif.

endform.                    " EVENTTAB

*&--------------------------------------------------------------------*
*&      Form  BUILD_LAYOUT
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->P_LAYOUT   text
*---------------------------------------------------------------------*
form build_layout using p_layout type slis_layout_alv.

  p_layout-f2code       = f2code.
  p_layout-zebra        = 'X'.
  p_layout-detail_popup = 'X'.

endform.                    " BUILD_LAYOUT

*&---------------------------------------------------------------------*
*&      Form  COMMENT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_I_HEADING[]  text
*----------------------------------------------------------------------*
form comment  using    p_i_heading type slis_t_listheader.

  data: hline type slis_listheader,
        text(60) type c,
        sep(20) type c.
  clear: hline, text.
  hline-typ  = 'H'.
  write : 'Pending Sale Order Details' to hline-info.
  append hline to i_heading.

endform.                    " COMMENT

*&--------------------------------------------------------------------*
*&      Form  TOP_OF_PAGE
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
form top_of_page.
  call function 'REUSE_ALV_COMMENTARY_WRITE'
    exporting
      it_list_commentary = i_heading
      i_logo             = 'ALV_REPORT'.

endform.                    " TOP_OF_PAGE
*&---------------------------------------------------------------------*
*&      Form  call_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form call_alv .

  call function 'REUSE_ALV_GRID_DISPLAY'
    exporting
      i_interface_check        = ' '
      i_buffer_active          = ' '
      i_callback_program       = i_repname
      i_callback_pf_status_set = ' '
      i_callback_user_command  = 'FRM_ALV_USER_COMMAND'
      i_structure_name         = 'ITAB_VBAK'
      i_background_id          = ' '
      is_layout                = i_layout
      it_fieldcat              = i_fieldtab
      it_sort                  = i_sort[]
      i_default                = 'X'
      i_save                   = 'A'
      is_variant               = i_variant
      it_events                = i_events[]
      is_print                 = i_print
    tables
      t_outtab                 = itab_vbak.
  if sy-subrc <> 0.
    write: 'SY-SUBRC: ', sy-subrc, 'REUSE_ALV_LIST_DISPLAY'.
  endif.

endform.                    " call_alv

*&--------------------------------------------------------------------*
*&      Form  frm_alv_user_command
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
*      -->UCOMM      text
*      -->SELFIELD   text
*---------------------------------------------------------------------*

form frm_alv_user_command using ucomm like sy-ucomm
              selfield type slis_selfield.
  case ucomm.
    when '&IC1'.
      if selfield-tabname = 'ITAB_VBAK'.
        if selfield-fieldname = 'VBELN'.
          read table itab_vbak index selfield-tabindex.
          if sy-subrc = 0.
            set parameter id 'AUN' field itab_vbak-vbeln.
            call transaction 'VA03' and skip first screen.
          endif.
        elseif selfield-fieldname = 'DELIV'.
          read table itab_vbak index selfield-tabindex.
          if sy-subrc = 0.
            set parameter id 'VL' field itab_vbak-deliv.
            call transaction 'VL03N' and skip first screen.
          endif.
        endif.

      endif.
  endcase.

endform.                    "frm_alv_user_command

Comments