ALV another usage - Modified Report ZRSD0018

    技术2022-05-11  64

    *&---------------------------------------------------------------------* *& Company ASAT Company Limited                                        * *&                                                                     * *& Report: ZRFI0018                                                    * *&                                                                     * *& Autor : Danny Yip                                                   * *&                                                                     * *& Date : 05.07.2004                                                  * *&                                                                     * *&---------------------------------------------------------------------* *& Description:                                                        * *&                                                                     * *&   This report is to list the billed sales orders grouped by         * *& different dimensions (e.g. package, customer, device).              * *&                                                                     * *&---------------------------------------------------------------------* *& Change History:                                                     * *&                                                                     * *& Ref Date       By        Description                               * *& 000 05.07.2004 DANN_YIP Initial Implementation                    * *&                           Transport Request : DEVK901784            * *&                                                                     * *& 001 30.07.2004 DANN_YIP Should show reversed & reversing bill.doc * *&                           with negative values reversing bill.doc   * *&                           Transport Request : DEVK901992            * *&                                                                     * *& 002 02.08.2004 DANN_YIP Should show reversed & reversing bill.doc * *&                           with negative values reversing bill.doc   * *&                           Transport Request : DEVK901996            * *&                                                                     * *& 003 02.09.2004 DANN_YIP 1. Include Nationality and Region         * *&                           2. Add Assembly Lead-Count & Test Lead-   * *&                              Count columns                          * *&                           3. Negative Assm & Test LC for reversing * *&                              billing doc                            * *&                           Transport Request : DEVK902195            * *&                                                                     * *& 004 13.06.2005 DANN_YIP 1. Cater item# changed in billing doc     * *&                           2. Breakdown sales conditions             * *&                           Transport Request : DEVK906587            * *&                                                                     * *& 005 16.06.2005 DANN_YIP 1. Add criteria 'bill.doc.type'           * *&                           2. Add markdown column                    * *&                           Transport Request : DEVK906788            * *&                                                                     * *& 006 28.07.2005 DANN_YIP 1. Add sales org. field                   * *&                           Transport Request : DEVK908485            * *&                                                                     * *& 007 15.08.2005 DANN_YIP 1. Add new cond.types                     * *&                           2. Fix unit price calculation             * *&                           3. Add unclassified column for monitoring * *&                              new cond.types in future               * *&                           Transport Request : DEVK909959            * *&                                                                     * *& 008 17.08.2005 DANN_YIP 1. Fix MKDN cond.type                     * *&                           2. Change unit price to 3 d.p.            * *&                           Transport Request : DEVK910173            * *&                                                                     * *& 009 25.08.2005 DANN_YIP 1. Get sold-to                            * *&                           2. Add cancelled billing doc indicator    * *&                           Transport Request : DEVK910776            * *&                                                                     * *& 010 03.09.2005 DANN_YIP 1. Add pro-forma invoice                  * *&                           Transport Request : DEVK911627            * *&                                               DEVK911631            * *&                                                                     * *& 011 06.09.2005 DANN_YIP Fix markdown sign for credit memo         * *&                           Transport Request : DEVK911807            * *&                                                                     * *& 012 20.09.2005 DANN_YIP 1. Add assembly qty                       * *&                           2. Change unit price to 5 d.p.            * *&                           Transport Request : DEVK912276            * *&                                                                     * *& 013 27.09.2005 DANN_YIP 1. Add 2 more columns for multiple test   * *&                              unit price                             * *&                           Transport Request : DEVK912550            * *&                                                                     * *& 014 07.10.2005 CATH_WONG 1. Correct error for checking GT_LINE     * *&                           TR: DEVK913069                            * *& 015 07.10.2005 CATH_WONG 1. change condition type DPBG & DPUT from * *&                           test added to Assy Adder                  * *&                           TR: DEVK913090                            * *& 016 21.11.2005 CATH_WONG 1. add PROB & LTRM to test adder and SAW * *&                           to assy other                             * *&                           TR: DEVK914274                            * *& 017 04.07.2006 JASO_DING Add 11 colume ASSL ASSX ENGG EXTW GSAW HOTA *&                           HOTT MINA MINB MINT QATD                  * *&                           TR: DEVK919479                            * *& 018 02.01.2007 Wats_yuan Task# 961: *&                      1)the extra wire unit price with title “EXTW”,* *&                      2)the market gold price with title “MKTG”,     * *&                      3)the gold base price with title “GOLD”        * *&                      4)the number of extra wires (D in Fig.2) with * *&                        title “Number of Extra Wires”                * *&                                                  "DEVK921611        * *ά 12/30/2006 Leo Lee   Add a column with header ‘Pkg Group (CO)’ to *                       DEVK921639 show the device package group * * ====================================================================== * Last Modified By:    Wei_Zhu * Last Modified Date: 2007-02-01 * Modifed Description: 1)For each record retrieved in the report, *                        add the marketing information per the relevant *                        device *                       2)Display the result from item 1 under a new *                         column titled ‘Marketing Segment’ *                        Task#1016   request#DEVK921978 *&---------------------------------------------------------------------* report zrfi0018.   type-pools: slis.                            "ALV Type Pool   tables: mara,                                "Material Master         kna1,                                "Customer Master *{ Modification 003 *    Add nationality and region         adrc,                                "Address table *} Modification 003         vbap,                                "Sales Order Line         vbrk,                                "Billing Doc Header         vbrp,                                "Billing Doc Item        rmclm,                               "Classification         tkchw.                                              "DEVK921598     *----------------------------------------------------------------------* * Global Data Declaration                                             * *----------------------------------------------------------------------*   * Global variables for ALV use data: g_repid like sy-repid,                 "Report Name       g_save(1) type c,                      "Save Variants       gx_variant like disvariant,            "Layout Variant       g_variant like disvariant,             "Layout Variant       gt_fieldcat type lvc_t_fcat,           "Table Field Catalog       gt_fieldcata type slis_t_fieldcat_alv, "ALV Field Catalog       gt_top_of_page type slis_t_listheader. "ALV Top-of-page   * Line item table to be put on ALV output data: begin of gt_line occurs 0, *{ Modification 005 *    Add bill.doc.type         fkart like vbrk-fkart,             "Bill.Doc.Type *} Modification 005 *{ Modification 006 *    Add sales org.         vkorg like vbrk-vkorg,             "Sales Org. *} Modification 006         fkdat like vbrk-fkdat,             "Bill.Date         knumv like vbrk-knumv,             "Condition Doc#         rfbsk like vbrk-rfbsk,             "BD Posting Status *{ Modification 002 *    To identify which line is of negative value (cancel / credit memo)         vbtyp like vbrk-vbtyp,             "BD Doc Category *} Modification 002 *{ Modification 009 *    To add cancelled doc indicator         fksto like vbrk-fksto,             "Cancelled doc *} Modification 009         vbeln like vbrp-vbeln,             "BD Doc#         posnr like vbrp-posnr,             "BD Item#         matnr like vbrp-matnr,             "Material#         aubel like vbrp-aubel,             "SO Doc#         aupos like vbrp-aupos,             "SO Item#         fkimg like vbrp-fkimg,             "Bill.Qty         vrkme like vbrp-vrkme,             "Bill.Qty.UOM         pstyv like vbrp-pstyv,             "Item Category         vgbel like vbrp-vgbel,             "Delivery Doc#         vgpos like vbrp-vgpos,             "Delivery Doc Item#         vgtyp like vbrp-vgtyp,             "Reference Doc.Type         kunnr like vbpa-kunnr,             "Customer#         kdmat like vbap-kdmat,             "Customer PO#         kwmeng like vbap-kwmeng,            "SO.Qty         zmeng like vbap-zmeng,             "Target Qty         aurkm like vbap-vrkme,             "SO.Qty.UOM *{ Modification 009 *    To cater for sales org 3100 model         vbpap like vbpa-posnr,             "Partner item# *} Modification 009        zzatoat like vbap-zzatoat,        zzattoa like vbap-zzattoa,        parnt(30),                                           "DEVK921598       end   of gt_line.   * Customer name table data: begin of gt_kna1 occurs 0,         kunnr like kna1-kunnr,              "Customer#         name1 like kna1-name1,              "Customer Name *{ Modification 003 *    Add nationality and region         adrnr like kna1-adrnr,              "Address#         bran1 like kna1-bran1,                              "Region 1         bran2 like kna1-bran2,                              "Region 2         bran3 like kna1-bran3,                              "Region 3         regiogroup like adrc-regiogroup,    "Nationality *} Modification 003       end   of gt_kna1.   * Material description table data: begin of gt_makt occurs 0,         matnr like makt-matnr,              "Material#         spras like makt-spras,              "Language         maktx like makt-maktx,              "Material Description * DEVK921978 BEGIN         extwg like mara-extwg, *   DEVK921978 END       end   of gt_makt.   * Material classification table data: begin of gt_matclass occurs 0,         matnr like mchb-matnr,              "Material         class like klah-class,              "Package         atnam like cabn-atnam,              "Characteristics Name         ausp1 like ausp-atwrt,              "Characteristics Text Value         atflv like ausp-atflv,              "Characteristics Num Value       end   of gt_matclass.   * Characteristics-ALV_fieldname relationship table data: begin of gt_char occurs 0,         atnam like cabn-atnam,              "Characteristics Name         itype like lvc_s_fcat-inttype,      "ALV Field Type         field like lvc_s_fcat-fieldname,    "ALV Field Name       end   of gt_char.   * Billing condition table data: begin of gt_konv occurs 0,         knumv like konv-knumv,              "Condition Doc#         kposn like konv-kposn,              "Condition Item#         stunr like konv-stunr,              "Condition Step#         zaehk like konv-zaehk,              "Condition Counter         kschl like konv-kschl,              "Condition Type *{ Modification 004 *    Add condition rate & base         kbetr like konv-kbetr,              "Condition Rate         kawrt like konv-kawrt,              "Condition Base *} Modification 004 *{ Modification 007 *    Fix unit price calculation         kpein like konv-kpein,              "Condition Price Unit *} Modification 007         kwert like konv-kwert,              "Condition Amount       end   of gt_konv.   * Sales Order header table data: begin of gt_vbak occurs 0,         aubel like vbak-vbeln,              "SO Doc#         bstnk like vbak-bstnk,              "Customer PO Number       end   of gt_vbak.   * Sales Order status table data: begin of gt_vbup occurs 0,         aubel like vbup-vbeln,              "SO Doc#         aupos like vbup-posnr,              "SO Item#         gbsta like vbup-gbsta,              "Overal Status       end   of gt_vbup.   * Sales Order item related invoice table data: begin of gt_vbfa occurs 0,         aubel   like vbfa-vbelv,            "SO Doc#         aupos   like vbfa-posnv,            "SO Item#         vbeln   like vbfa-vbeln,            "Follow-up Doc#         posnn   like vbfa-posnn,            "Follow-up Item#         vbtyp_n like vbfa-vbtyp_n,          "Invoice Type         rfmng   like vbfa-rfmng,            "Billed Quantity         meins   like vbfa-meins,            "Billed Quantity UOM       end   of gt_vbfa.   *{ Modification 010 *    Get pro-forma invoice * Delivery item related pro-forma invoice table data: begin of gt_pfiv occurs 0,         vgbel like vbrp-vgbel,              "Delivery Doc#         vgpos like vbrp-vgpos,              "Delivery Item#         vbeln like vbrp-vbeln,              "Pro-forma Inv#       end   of gt_pfiv. *} Modification 010     * Hierarchy table              "DEVK921598 data: begin of gt_tkchw occurs 0,         nodid like tkchw-nodid,              "Node ID         parnt like tkchw-parnt,              "Parent Node ID         wert1 like tkchw-wert1,              "Description       end of gt_tkchw.     * ALV output data table field-symbols: <gt_out> type standard table. "ALV Data Table     *----------------------------------------------------------------------* * Constants                                                           * *----------------------------------------------------------------------* constants: c_matcltype like klah-klart     value '001', "Package ClType *{ Modification 009 *    Sales Org 3100 model            c_asat      like kna1-kunnr     value '0000010000', "CustASAT *} Modification 009 *{ Modification 003 *    To give negative values on lead-count            c_lead      like cabn-atnam     value 'LEAD', "Char:LeadCount *} Modification 003            c_soitmobj like thead-tdobject value 'VBBK', "Txt ObjCode            c_id_mawb   like thead-tdid     value 'Z002', "MAWB Text ID            c_id_hawb   like thead-tdid     value 'Z003', "HAWB Text ID            c_id_flight like thead-tdid     value 'Z004'. "Flight Text ID     *----------------------------------------------------------------------* * Selection Screen                                                    * *----------------------------------------------------------------------* selection-screen begin of block a with frame title text-s10. * Selection Criteria *{ Modification 005 select-options: so_fkart for vbrk-fkart. *} Modification 005 select-options: so_kunnr for kna1-kunnr. *{ Modification 006 *    Add sales org. *PARAMETERS:     P_BUKRS LIKE VBAK-BUKRS_VF OBLIGATORY. select-options: so_vkorg for vbrk-vkorg. *} Modification 006 select-options: so_fkdat for vbrk-fkdat no-extension,                 so_aubel for vbrp-aubel,                 so_vbeln for vbrp-vbeln,                 so_matnr for mara-matnr,                 so_kdmat for vbap-kdmat, *{ Modification 003 *    Add nationality and region *                SO_CLASS FOR RMCLM-CLASS.                 so_class for rmclm-class,                 so_natio for adrc-regiogroup,                 so_regio for kna1-bran1. *} Modification 003 selection-screen end of block a. * Variant selection-screen begin of block b with frame title text-s20. parameters: p_vari like disvariant-variant. selection-screen end of block b.   * Process on value request at selection-screen on value-request for p_vari.  perform f4_for_variant.   * PAI at selection-screen on p_vari.  perform validate_variant.     *----------------------------------------------------------------------* * Initialization                                                      * *----------------------------------------------------------------------* initialization.   * Set report program name  g_repid = sy-repid. * Set Options: Save variants user-specific or general  g_save = 'A'. * Initialize variant  perform variant_init. * Get default values  perform get_default.     *----------------------------------------------------------------------* * Start of Selection                                                  * *----------------------------------------------------------------------* start-of-selection.   * Select records from DB  perform select_records.   *----------------------------------------------------------------------* * End of Selection                                                    * *----------------------------------------------------------------------* end-of-selection.   * Construct field catalog for ALV display and ALV data table  perform build_fieldcat. * Generate ALV data table  perform generate_out_table. * Fill ALV data table  perform fill_out_table. **016  perform sum_gtout. * Set top-of-page content  perform set_top_of_page. * Display report  perform alv_output.     *----------------------------------------------------------------------* * Subroutines                                                         * *----------------------------------------------------------------------*     *&---------------------------------------------------------------------* *&      Form F4_FOR_VARIANT *&---------------------------------------------------------------------* *       Value request for variant *----------------------------------------------------------------------* form f4_for_variant.    data: l_exit(1) type c.               "Exit Code    call function 'REUSE_ALV_VARIANT_F4'     exporting       is_variant = g_variant       i_save     = g_save     importing       e_exit     = l_exit       es_variant = gx_variant     exceptions       not_found = 2.  if sy-subrc = 2.     message id sy-msgid type 'S' number sy-msgno             with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.  else.     if l_exit = space.       p_vari = gx_variant-variant.     endif.  endif.   endform.                    " F4_FOR_VARIANT   *&---------------------------------------------------------------------* *&      Form VALIDATE_VARIANT *&---------------------------------------------------------------------* *       Validate the existence of input variant *----------------------------------------------------------------------* form validate_variant.    if not p_vari is initial.     move g_variant to gx_variant.     move p_vari to gx_variant-variant.     call function 'REUSE_ALV_VARIANT_EXISTENCE'       exporting         i_save     = g_save       changing         cs_variant = gx_variant.     g_variant = gx_variant.  else.     perform variant_init.  endif.   endform.                    " VALIDATE_VARIANT   *&---------------------------------------------------------------------* *&      Form VARIANT_INIT *&---------------------------------------------------------------------* *       Variant Initialization *----------------------------------------------------------------------* form variant_init.    clear g_variant.  g_variant-report = g_repid.   endform.                    " VARIANT_INIT   *&---------------------------------------------------------------------* *&      Form GET_DEFAULT *&---------------------------------------------------------------------* *       Assign default values on selection screen *----------------------------------------------------------------------* form get_default.   * Get default variant  gx_variant = g_variant.  call function 'REUSE_ALV_VARIANT_DEFAULT_GET'     exporting       i_save     = g_save     changing       cs_variant = gx_variant     exceptions       not_found = 2.  if sy-subrc = 0.     p_vari = gx_variant-variant.  endif.   endform.                    " GET_DEFAULT   *&---------------------------------------------------------------------* *&      Form SET_TOP_OF_PAGE *&---------------------------------------------------------------------* *       Set Top-of-page Content *----------------------------------------------------------------------* form set_top_of_page .    data: ls_line type slis_listheader,         l_lines type i,         l_text1(30) type c,         l_text2(30) type c.   * Macro: _APPEND_SELECT_OPTIONS *          &1 - Selection Criteria Text *          &2 - Select-Option Variable  define _append_select_options.     ls_line-key = &1.     read table &2 index 1.     if &2-high is initial.       write &2-low to l_text1.       ls_line-info = l_text1.     else.       write: &2-low to l_text1,              &2-high to l_text2.       concatenate l_text1 '-' l_text2 into ls_line-info                   separated by space.     endif.     describe table &2 lines l_lines.     if l_lines > 1.       concatenate ls_line-info ', ...' into ls_line-info.     endif.     append ls_line to gt_top_of_page.  end-of-definition.   * Header  clear ls_line.  ls_line-typ = 'H'.  ls_line-info = sy-title.  append ls_line to gt_top_of_page.   * Selection Criteria List  clear ls_line.  ls_line-typ = 'S'.   * Customer Number  if not ( so_kunnr is initial ).     _append_select_options text-101 so_kunnr.  endif. *{ Modification 006 *    Add sales org. ** Company Code * LS_LINE-KEY = TEXT-102. * LS_LINE-INFO = P_BUKRS. * APPEND LS_LINE TO GT_TOP_OF_PAGE. * Sales Org.  if not ( so_vkorg is initial ).     _append_select_options text-102 so_vkorg.  endif. *} Modification 006 * Billing Date Range  if not ( so_fkdat is initial ).     _append_select_options text-103 so_fkdat.  endif. * Sales Order  if not ( so_aubel is initial ).     _append_select_options text-104 so_aubel.  endif. * Billing Document  if not ( so_vbeln is initial ).     _append_select_options text-105 so_vbeln.  endif. * Material Number  if not ( so_matnr is initial ).     _append_select_options text-106 so_matnr.  endif. * Material Number  if not ( so_kdmat is initial ).     _append_select_options text-107 so_kdmat.  endif. * Package  if not ( so_class is initial ).     _append_select_options text-108 so_class.  endif.   endform.                    " SET_TOP_OF_PAGE   *&---------------------------------------------------------------------* *&      Form SELECT_RECORDS *&---------------------------------------------------------------------* *       Select records from DB *----------------------------------------------------------------------* form select_records.    data: l_subrc like sy-subrc.   * Get billing documents under sales criteria *{ Modification 006 *    Add sales org. *{ Modification 005 *    Add billing doc. type to selection **{ Modification 001 & 002 **    To identify which line is of negative value (return / cancelling) **    and to retrieve cancelling and cancelled billing docs also ** SELECT A~FKDAT A~KNUMV A~RFBSK B~VBELN B~POSNR B~MATNR B~AUBEL **         B~AUPOS B~FKIMG B~VRKME B~PSTYV B~VGBEL B~VGTYP C~KUNNR **         D~KDMAT D~KWMENG D~ZMENG D~VRKME AS AURKM **    INTO CORRESPONDING FIELDS OF TABLE GT_LINE **    FROM VBRK AS A **      INNER JOIN VBRP AS B ON A~VBELN = B~VBELN **      INNER JOIN VBPA AS C ON B~AUBEL = C~VBELN **      INNER JOIN VBAP AS D ON B~AUBEL = D~VBELN AND B~AUPOS = D~POSNR **    WHERE A~BUKRS = P_BUKRS    "Company Code **      AND A~FKDAT IN SO_FKDAT "Billing Date **      AND B~VBELN IN SO_VBELN "Billing Doc# **      AND B~AUBEL IN SO_AUBEL "Sales Order# **      AND B~MATNR IN SO_MATNR "Material# **      AND C~PARVW = 'RE'       "Party Type = Bill-to **      AND C~KUNNR IN SO_KUNNR "Customer# **      AND D~KDMAT IN SO_KDMAT "Customer Material# **    ORDER BY B~VBELN B~POSNR. * SELECT A~FKDAT A~KNUMV A~RFBSK A~VBTYP B~VBELN B~POSNR B~MATNR *         B~AUBEL B~AUPOS B~FKIMG B~VRKME B~PSTYV B~VGBEL B~VGTYP *         C~KUNNR D~KDMAT D~KWMENG D~ZMENG D~VRKME AS AURKM *    INTO CORRESPONDING FIELDS OF TABLE GT_LINE *    FROM VBRK AS A *      INNER JOIN VBRP AS B ON A~VBELN = B~VBELN *      INNER JOIN VBPA AS C ON B~AUBEL = C~VBELN *      INNER JOIN VBAP AS D ON B~AUBEL = D~VBELN AND B~AUPOS = D~POSNR *    WHERE A~BUKRS = P_BUKRS    "Company Code *      AND A~BUKRS = P_BUKRS    "Company Code *      AND A~FKDAT IN SO_FKDAT "Billing Date *      AND B~VBELN IN SO_VBELN "Billing Doc# *      AND B~AUBEL IN SO_AUBEL "Sales Order# *      AND B~MATNR IN SO_MATNR "Material# *      AND C~PARVW = 'RE'       "Party Type = Bill-to *      AND C~KUNNR IN SO_KUNNR "Customer# *      AND D~KDMAT IN SO_KDMAT "Customer Material# *    ORDER BY B~VBELN B~POSNR. **} Modification 001 & 002 * SELECT A~FKART A~FKDAT A~KNUMV A~RFBSK A~VBTYP B~VBELN B~POSNR *         B~MATNR B~AUBEL B~AUPOS B~FKIMG B~VRKME B~PSTYV B~VGBEL *         B~VGTYP C~KUNNR D~KDMAT D~KWMENG D~ZMENG D~VRKME AS AURKM *    INTO CORRESPONDING FIELDS OF TABLE GT_LINE *    FROM VBRK AS A *      INNER JOIN VBRP AS B ON A~VBELN = B~VBELN *      INNER JOIN VBPA AS C ON B~AUBEL = C~VBELN *      INNER JOIN VBAP AS D ON B~AUBEL = D~VBELN AND B~AUPOS = D~POSNR *    WHERE A~FKART IN SO_FKART "Bill.Doc.Type *      AND A~BUKRS = P_BUKRS    "Company Code *      AND A~FKDAT IN SO_FKDAT "Billing Date *      AND B~VBELN IN SO_VBELN "Billing Doc# *      AND B~AUBEL IN SO_AUBEL "Sales Order# *      AND B~MATNR IN SO_MATNR "Material# *      AND C~PARVW = 'RE'       "Party Type = Bill-to *      AND C~KUNNR IN SO_KUNNR "Customer# *      AND D~KDMAT IN SO_KDMAT "Customer Material# *    ORDER BY B~VBELN B~POSNR. **} Modification 005   *{ Modification 010 *    Get pro-forma invoice *{ Modification 009 *    Get sold-to and cater for sales org 3100 model  select a~fkart a~vkorg a~fkdat a~knumv a~rfbsk a~vbtyp a~fksto b~vbeln         b~posnr b~matnr b~aubel b~aupos b~fkimg b~vrkme b~pstyv b~vgbel         b~vgpos b~vgtyp c~kunnr d~kdmat d~kwmeng d~zmeng         d~vrkme as aurkm c~posnr as vbpap d~zzatoat d~zzattoa    into corresponding fields of table gt_line    from vbrk as a      inner join vbrp as b on b~vbeln = a~vbeln      inner join vbpa as c on c~vbeln = b~aubel      inner join vbap as d on d~vbeln = b~aubel and d~posnr = b~aupos    where a~fkart in so_fkart "Bill.Doc.Type      and a~vkorg in so_vkorg "Sales Org.      and a~fkdat in so_fkdat "Billing Date      and a~kunag eq c_asat    "Customer# = 10000      and b~vbeln in so_vbeln "Billing Doc#      and b~aubel in so_aubel "Sales Order#      and b~matnr in so_matnr "Material#      and c~parvw eq 'RE'      "Party Type = Bill-to      and d~kdmat in so_kdmat. "Customer Material# *} Modification 006    sort gt_line by vbeln posnr vbpap descending.  delete adjacent duplicates from gt_line comparing vbeln posnr.  delete gt_line where not kunnr in so_kunnr.    select a~fkart a~vkorg a~fkdat a~knumv a~rfbsk a~vbtyp a~fksto b~vbeln         b~posnr b~matnr b~aubel b~aupos b~fkimg b~vrkme b~pstyv b~vgbel         b~vgpos b~vgtyp a~kunag as kunnr c~kdmat c~kwmeng c~zmeng         c~vrkme as aurkm    appending corresponding fields of table gt_line    from vbrk as a      inner join vbrp as b on b~vbeln = a~vbeln      inner join vbap as c on c~vbeln = b~aubel and c~posnr = b~aupos    where a~fkart in so_fkart "Bill.Doc.Type      and a~vkorg in so_vkorg "Sales Org.      and a~fkdat in so_fkdat "Billing Date      and a~kunag in so_kunnr "Customer#      and a~kunag ne c_asat    "Not historical DG      and b~vbeln in so_vbeln "Billing Doc#      and b~aubel in so_aubel "Sales Order#      and b~matnr in so_matnr "Material#      and c~kdmat in so_kdmat. "Customer Material#    sort gt_line by vbeln posnr. *} Modification 009 *} Modification 010   * No record found **start 014 * CHECK SY-SUBRC = 0.  if not gt_line[] is initial. **end 014     delete adjacent duplicates from gt_line comparing vbeln posnr. * Check material class     if not ( so_class[] is initial ). "If package(s) is input       sort gt_line by matnr.       loop at gt_line. * Get material's package for every new material in the line item list         on change of gt_line-matnr.           perform check_package using    gt_line-matnr                                 changing l_subrc.         endon. * Delete all line items with material whose package not in input list         if l_subrc ne 0.           delete gt_line.         endif.       endloop.     endif.   *{ Modification 003 *    Add nationality and region * Get customer information     select a~kunnr a~name1 a~adrnr a~bran1 a~bran2 a~bran3 b~regiogroup       into corresponding fields of table gt_kna1       from kna1 as a         inner join adrc as b on a~adrnr = b~addrnumber       for all entries in gt_line       where a~kunnr = gt_line-kunnr         and b~date_from <= sy-datum         and b~date_to   >= sy-datum         and b~nation = space.       sort gt_kna1 by kunnr.   * Check nationality & region     if not ( so_natio[] is initial and so_regio[] is initial ).       sort gt_line by kunnr.       loop at gt_line. * Get customer's address for every new customer in the line item list         on change of gt_line-kunnr.           l_subrc = 0.         read table gt_kna1 with key kunnr = gt_line-kunnr binary search.           if sy-subrc = 0.             if not ( so_natio[] is initial ). * Check whether the nationality is in the input list               if not ( gt_kna1-regiogroup in so_natio ).                 l_subrc = 1.               endif.             endif.             if not ( so_regio[] is initial ). * Check whether the region is in the input list               if not ( gt_kna1-bran1 in so_regio[] or                        gt_kna1-bran2 in so_regio[] or                        gt_kna1-bran3 in so_regio[] ).                 l_subrc = 1.               endif.             endif.           endif.         endon. * Delete all line items with customers not in list         if l_subrc ne 0.           delete gt_line.         endif.       endloop.     endif. *} Modification 003   * Get material description * DEVK921978 BEGIN   *    SELECT MATNR SPRAS MAKTX INTO CORRESPONDING FIELDS OF TABLE GT_MAKT *      FROM MAKT *      FOR ALL ENTRIES IN GT_LINE *      WHERE MATNR = GT_LINE-MATNR.       select makt~matnr makt~spras makt~maktx mara~extwg       into corresponding fields of table gt_makt       from makt       inner join mara       on makt~matnr = mara~matnr       for all entries in gt_line       where makt~matnr = gt_line-matnr. * DEVK921978 END   * Get material classification     loop at gt_makt.       perform get_classification using gt_makt-matnr.     endloop.   *{ Modification 003 *    Move upwards ** Get customer information * SELECT KUNNR NAME1 INTO CORRESPONDING FIELDS OF TABLE GT_KNA1 *    FROM KNA1 *    FOR ALL ENTRIES IN GT_LINE *    WHERE KNA1~KUNNR = GT_LINE-KUNNR. *} Modification 003   * Get sales breakdown from billing documents *{ Modification 004 *    To ignore statistical lines and use bill.doc.item# * SELECT KNUMV KPOSN STUNR ZAEHK KSCHL KWERT *    INTO CORRESPONDING FIELDS OF TABLE GT_KONV *    FROM KONV *    FOR ALL ENTRIES IN GT_LINE *   WHERE KNUMV = GT_LINE-KNUMV *      AND KPOSN = GT_LINE-AUPOS.     select knumv kposn stunr zaehk kschl kbetr kawrt kpein kwert       into corresponding fields of table gt_konv       from konv       for all entries in gt_line       where knumv = gt_line-knumv         and kposn = gt_line-posnr *start of 018 "DEVK921611 *        AND KSTAT = SPACE.          and ( kstat = space               or kschl = 'MKTG' ). *end of 018 "DEVK921611 *} Modification 004   * Get sales order header status     select vbeln as aubel bstnk       into corresponding fields of table gt_vbak       from vbak       for all entries in gt_line       where vbeln = gt_line-aubel.   * Get sales order line status     select vbeln as aubel posnr as aupos gbsta       into corresponding fields of table gt_vbup       from vbup       for all entries in gt_line       where vbeln = gt_line-aubel         and posnr = gt_line-aupos.   * Get sales order related invoice quantity information     select vbelv as aubel            posnv as aupos            vbtyp_n vbeln posnn rfmng meins       into corresponding fields of table gt_vbfa       from vbfa       for all entries in gt_line       where vbelv = gt_line-aubel         and posnv = gt_line-aupos         and vbtyp_n in ('M', 'N', 'O', 'P', 'S') "Invoice doc type         and vbtyp_v = 'C'.                        "Sales order type   *{ Modification 010 *    Get pro-forma invoice     select a~vbelv as vgbel a~posnv as vgpos a~vbeln       into corresponding fields of table gt_pfiv       from vbfa as a         inner join vbrk as b on b~vbeln = a~vbeln       for all entries in gt_line       where a~vbelv = gt_line-vgbel         and a~posnv = gt_line-vgpos        and a~vbtyp_n = 'U'                       "Pro-forma inv doc type         and a~vbtyp_v = 'J'                       "Delivery doc type         and b~rfbsk ne 'E'. *} Modification 010 **start 014  endif. **end 014 endform.                    " SELECT_RECORDS   *&---------------------------------------------------------------------* *&      Form CHECK_PACKAGE *&---------------------------------------------------------------------* *       Check whether the package is within selected list *----------------------------------------------------------------------* *      -->P_MATNR Material# *      <--P_SUBRC Return Code (0-Pass, Otherwise-Failed) *----------------------------------------------------------------------* form check_package using    p_matnr like mara-matnr                     changing p_subrc like sy-subrc.    data: lt_class like sclass occurs 0 with header line,         lt_clobjdat like clobjdat occurs 0 with header line,         l_objek like ausp-objek.    p_subrc = 1.  l_objek = p_matnr.  call function 'CLAF_CLASSIFICATION_OF_OBJECTS'     exporting       classtext    = ''            "No class text       classtype    = c_matcltype   "Material Classification       features     = ''            "No characteristic values       object       = l_objek       "Material#     tables       t_class      = lt_class       t_objectdata = lt_clobjdat     exceptions       others       = 4.  if sy-subrc = 0.     loop at lt_class where class in so_class.       p_subrc = 0.       exit.     endloop.  endif.   endform.                    " CHECK_PACKAGE   *&---------------------------------------------------------------------* *&      Form GET_CLASSIFICATION *&---------------------------------------------------------------------* *       Get the features in the material classification by material# *----------------------------------------------------------------------* *      -->P_MATNR Material# *----------------------------------------------------------------------* form get_classification using    p_matnr like mara-matnr.    data: lt_class like sclass occurs 0 with header line,         lt_clobjdat like clobjdat occurs 0 with header line,         l_objek like ausp-objek.    l_objek = p_matnr. * Get the features of characteristics of the material  call function 'CLAF_CLASSIFICATION_OF_OBJECTS'     exporting       classtext       = ''          "No class text       classtype       = c_matcltype "Material classification       object          = l_objek     "Material#       initial_charact = ''          "No initial characteristic     tables       t_class         = lt_class       t_objectdata    = lt_clobjdat     exceptions       others          = 4.  if sy-subrc = 0.     read table lt_class index 1.     move lt_class-class to gt_matclass-class.     move p_matnr to gt_matclass-matnr.     loop at lt_clobjdat.       move-corresponding lt_clobjdat to gt_matclass.       append gt_matclass.     endloop.     if sy-subrc = 0.       append gt_matclass.     endif.  endif.   endform.                    " GET_CLASSIFICATION   *&---------------------------------------------------------------------* *&      Form BUILD_FIELDCAT *&---------------------------------------------------------------------* *       Build ALV Field Catalog *----------------------------------------------------------------------* form build_fieldcat.    data: ls_fieldcat type lvc_s_fcat,        "ALV Data Field Catalog         ls_fieldcata type slis_fieldcat_alv. "ALV Display Field Catalog   * Macro: _APPEND_FIELDCAT *          &1 - Field Name *          &2 - Reference Table *          &3 - Reference Table Field (when Field Name is different) *          &4 - Short Field Label *          &5 - Medium Field Label *          &6 - Long Field Label *          &7 - Text Field Name *          &8 - Reference Field with Quantity Unit *          &9 - Hotspot  define _append_fieldcat.     clear: ls_fieldcat, ls_fieldcata.     ls_fieldcat-fieldname       = &1.     ls_fieldcat-ref_table       = &2.     ls_fieldcat-ref_field      = &3.     ls_fieldcata-fieldname      = &1.     ls_fieldcata-ref_tabname    = &2.     ls_fieldcata-ref_fieldname = &3.     ls_fieldcata-seltext_s      = &4.     ls_fieldcata-seltext_m      = &5.     ls_fieldcata-seltext_l      = &6.     ls_fieldcata-reptext_ddic   = &6.     ls_fieldcata-text_fieldname = &7.     ls_fieldcata-qfieldname     = &8.     ls_fieldcata-hotspot        = &9.     append ls_fieldcat to gt_fieldcat.     append ls_fieldcata to gt_fieldcata.  end-of-definition.   * DEVK921978 Begin  _append_fieldcat 'EXTWG' 'MARA' '' 'Marketing Segment'                    'Marketing Segment' 'Marketing Segment' '' '' ''. * DEVK921978 End    _append_fieldcat 'KUNNR' 'VBPA' '' '' '' '' 'NAME1' '' 'X'. "Bill-to  _append_fieldcat 'NAME1' 'KNA1' '' '' '' '' '' '' ''.       "Cust.Name *{ Modification 003 *    Add nationality and region  _append_fieldcat 'REGIOGROUP' 'ADRC' '' 'Nation.' 'Nationality'                    'Nationality' '' '' ''.  _append_fieldcat 'BRAN1' 'KNA1' '' 'Region1' 'Region1' 'Region1'                    '' '' ''.  _append_fieldcat 'BRAN2' 'KNA1' '' 'Region2' 'Region2' 'Region2'                    '' '' ''.  _append_fieldcat 'BRAN3' 'KNA1' '' 'Region3' 'Region3' 'Region3'                    '' '' ''. *} Modification 003  _append_fieldcat 'BSTNK' 'VBAK' '' '' '' '' '' '' ''.       "Cust.PO#  _append_fieldcat 'AUBEL' 'VBAP' 'VBELN' '' '' '' '' '' 'X'. "SO Doc#  _append_fieldcat 'AUPOS' 'VBAP' 'POSNR' '' '' '' '' '' ''. "SO Item  _append_fieldcat 'GBSTA' 'VBUP' '' '' '' '' '' '' ''.       "Status *{ Modification 005 *    Add bill doc.type  _append_fieldcat 'FKART' 'VBRK' '' '' '' '' '' '' ''.       "Bill Type *} Modification 005 *{ Modification 006 *    Add sales org.  _append_fieldcat 'VKORG' 'VBRK' '' '' '' '' '' '' ''.       "Sales Org *} Modification 006 *{ Modification 010 *    Add pro-forma invoice#  _append_fieldcat 'VBEL2' 'VBRP' 'VBELN' 'Pro-forma#' 'Pro-forma Inv#'                    'Pro-forma Invoice#' '' '' 'X'.            "Proforma# *} Modification 010  _append_fieldcat 'VBELN' 'VBRP' '' '' '' '' '' '' 'X'.      "Bill Doc#  _append_fieldcat 'POSNR' 'VBRP' '' '' '' '' '' '' ''.       "BD Item  _append_fieldcat 'FKDAT' 'VBRK' '' '' '' '' '' '' ''.       "Bill Date  _append_fieldcat 'RFBSK' 'VBRK' '' '' '' '' '' '' ''.       "BD Postg *{ Modification 009 *    Add cancelled doc indicator  _append_fieldcat 'FKSTO' 'VBRK' '' '' '' '' '' '' ''.       "Cancelled *} Modification 009  _append_fieldcat 'PSTYV' 'VBRP' '' '' '' '' '' '' ''.       "Item Cat.  _append_fieldcat 'MAWBT' 'AUSP' 'ATWRT' 'MAWB' 'MAWB' 'MAWB' '' '' ''.  _append_fieldcat 'HAWBT' 'AUSP' 'ATWRT' 'HAWB' 'HAWB' 'HAWB' '' '' ''.  _append_fieldcat 'FLIGH' 'AUSP' 'ATWRT' 'Flight' 'Flight'                    'Carrier/Flight' '' '' ''.  _append_fieldcat 'VGBEL' 'LIKP' 'VBELN' '' '' '' '' '' 'X'. "Del.Doc  _append_fieldcat 'MATNR' 'VBAP' '' '' '' '' 'MAKTX' '' 'X'. "Device  _append_fieldcat 'MAKTX' 'MAKT' '' '' '' '' '' '' ''.       "Dev.Desc  _append_fieldcat 'KDMAT' 'VBAP' '' '' '' '' '' '' ''.       "Cust.Mat#  _append_fieldcat 'CLASS' 'KLAH' '' 'Pack.' 'Package'                    'Package' '' '' ''.    perform append_all_charact.               "Append All Characteristics    _append_fieldcat 'FKIMG' 'VBRP' '' '' '' '' '' 'VRKME' ''. "Bill Qty  _append_fieldcat 'VRKME' 'VBRP' '' '' '' '' '' '' ''.    "Bill Qty UOM *{ Modification 003 *    Add assembly lead-count and test lead-count  _append_fieldcat 'ASMLC' 'VBRP' 'FKIMG' 'Assm.LC' 'Assm.LeadCount'                    'Assembly LeadCount' '' 'VRKME' ''.  _append_fieldcat 'TSTLC' 'VBRP' 'FKIMG' 'Test LC' 'Test LeadCount'                    'Test LeadCount' '' 'VRKME' ''.   *} Modification 003 *{ Modification 004 *    Sales breakdown * _APPEND_FIELDCAT 'S_BEFO' 'KONV' 'KWERT' 'Before MD' *                   'Price Before MD' 'Price Before Markdown' '' '' ''. * _APPEND_FIELDCAT 'S_MKDN' 'KONV' 'KWERT' 'MKDN' 'Markdown' *                   'Markdown' '' '' ''. *{ Modification 008 *    Change unit price to 3 d.p. * _APPEND_FIELDCAT 'S_ASUP' 'KONV' 'KWERT' 'ASP' 'Assm.Unit Price' *                   'Assembly Unit Price' '' '' ''.  _append_fieldcat 'S_AQTY' 'VBRP' 'FKIMG' 'Assm.Qty' 'Assmembly Qty'                    'Assembly Quantity' '' '' ''. * Extended the length of unit price data type  _append_fieldcat 'S_ASUP' 'VBAP' 'KLMENG' 'ASP' 'Assm.Unit Price'                    'Assembly Unit Price' '' '' ''.   *** begin, larry, change to 5 digits after decimal point  data idx type i.    read table gt_fieldcat with key fieldname = 'S_ASUP' into ls_fieldcat.  if sy-subrc = 0.     idx = sy-tabix.     ls_fieldcat-ref_table = ''.     ls_fieldcat-ref_field = ''.     ls_fieldcat-inttype = 'P'.     ls_fieldcat-decimals = 5.     modify gt_fieldcat index idx from ls_fieldcat.  endif.    read table gt_fieldcata with key fieldname = 'S_ASUP' into  ls_fieldcata.  if sy-subrc = 0.     idx = sy-tabix.     ls_fieldcata-decimals_out = 5.     ls_fieldcata-ref_tabname = ''.     ls_fieldcata-ref_fieldname = ''.     modify gt_fieldcata index idx from ls_fieldcata .  endif. *** end, larry   *{ Modification 017   _append_fieldcat 'S_ASSX' 'VBAP' 'KLMENG' 'AOP' 'Assm.Other Unit Price'                   'Assembly Other Unit Price' '' '' ''.    read table gt_fieldcat with key fieldname = 'S_ASSX' into ls_fieldcat.  if sy-subrc = 0.     idx = sy-tabix.     ls_fieldcat-ref_table = ''.     ls_fieldcat-ref_field = ''.     ls_fieldcat-inttype = 'P'.     ls_fieldcat-decimals = 5.     modify gt_fieldcat index idx from ls_fieldcat.  endif.    read table gt_fieldcata with key fieldname = 'S_ASSX' into  ls_fieldcata.  if sy-subrc = 0.     idx = sy-tabix.     ls_fieldcata-decimals_out = 5.     ls_fieldcata-ref_tabname = ''.     ls_fieldcata-ref_fieldname = ''.     modify gt_fieldcata index idx from ls_fieldcata .  endif.      _append_fieldcat 'S_GSAW' 'VBAP' 'KLMENG' 'GSP'  'GaAs Sawing Unit Price' 'GaAs Sawing Unit Price' '' '' ''.    read table gt_fieldcat with key fieldname = 'S_GSAW' into ls_fieldcat.  if sy-subrc = 0.     idx = sy-tabix.     ls_fieldcat-ref_table = ''.     ls_fieldcat-ref_field = ''.     ls_fieldcat-inttype = 'P'.     ls_fieldcat-decimals = 5.     modify gt_fieldcat index idx from ls_fieldcat.  endif.    read table gt_fieldcata with key fieldname = 'S_GSAW' into  ls_fieldcata.  if sy-subrc = 0.     idx = sy-tabix.     ls_fieldcata-decimals_out = 5.     ls_fieldcata-ref_tabname = ''.     ls_fieldcata-ref_fieldname = ''.     modify gt_fieldcata index idx from ls_fieldcata .  endif.    _append_fieldcat 'S_QATD' 'VBAP' 'KLMENG' 'QTP'  'QA Test Unit Price' 'QA Test by Device Unit Price' '' '' ''.    read table gt_fieldcat with key fieldname = 'S_QATD' into ls_fieldcat.  if sy-subrc = 0.     idx = sy-tabix.     ls_fieldcat-ref_table = ''.     ls_fieldcat-ref_field = ''.     ls_fieldcat-inttype = 'P'.     ls_fieldcat-decimals = 5.     modify gt_fieldcat index idx from ls_fieldcat.  endif.    read table gt_fieldcata with key fieldname = 'S_QATD' into  ls_fieldcata.  if sy-subrc = 0.     idx = sy-tabix.     ls_fieldcata-decimals_out = 5.     ls_fieldcata-ref_tabname = ''.     ls_fieldcata-ref_fieldname = ''.     modify gt_fieldcata index idx from ls_fieldcata .  endif.   * _APPEND_FIELDCAT 'S_HAAM' 'KONV' 'KBETR' 'Pre.Asm' 'Fast Premium-Asm' *                   'Fast Premium-Assembly' '' '' ''. * _APPEND_FIELDCAT 'S_HTAM' 'KONV' 'KBETR' 'Pre.Tst' 'Fast *                   Premium-Test' *                   'Fast Premium-Test' '' '' ''.  _append_fieldcat 'S_QAAM' 'KONV' 'KBETR' 'QA.Tst' 'QA Test Amt'                    'QA Test Charge' '' '' ''.    _append_fieldcat 'S_EXTW' 'KONV' 'KBETR' 'Extra Wire'  'Extra Wires Amt' 'Extra Wires Amount' '' '' ''.    read table gt_fieldcat with key fieldname = 'S_EXTW' into ls_fieldcat.  if sy-subrc = 0.     idx = sy-tabix.     ls_fieldcat-ref_table = ''.     ls_fieldcat-ref_field = ''.     ls_fieldcat-inttype = 'P'.     ls_fieldcat-decimals = 4.     modify gt_fieldcat index idx from ls_fieldcat.  endif.    read table gt_fieldcata with key fieldname = 'S_EXTW' into  ls_fieldcata.  if sy-subrc = 0.     idx = sy-tabix.     ls_fieldcata-decimals_out = 4.     ls_fieldcata-ref_tabname = ''.     ls_fieldcata-ref_fieldname = ''.     modify gt_fieldcata index idx from ls_fieldcata .  endif.    _append_fieldcat 'S_ASSL' 'KONV' 'KBETR' 'Othr.Lot' 'Assm.Other Lot'                    'Assembly Others(Lot)' '' '' ''.  _append_fieldcat 'S_ENGG' 'KONV' 'KBETR' 'Eng.Chrg' 'Eng.Lot Chrg'                    'Engineering Lot Chrg' '' '' ''.  _append_fieldcat 'S_MINA' 'KONV' 'KBETR' 'Min.Assy'                    'Min Lot Charge-Assy'                    'Min Lot Charge-Assembly' '' '' ''.  _append_fieldcat 'S_MINB' 'KONV' 'KBETR' 'Min.BckGr'                    'Min Lot Charge-BckGr'                    'Min Lot Charge-Backgrind' '' '' ''.  _append_fieldcat 'S_MINT' 'KONV' 'KBETR' 'Min.Tst'                    'Min Lot Charge-Test'                    'Min Lot Charge-Test' '' '' ''.   *} Modification 017   *} Modification 008  _append_fieldcat 'S_ASSM' 'KONV' 'KWERT' 'AS' 'Assm.Sales'                    'Assembly Sales' '' '' ''.  _append_fieldcat 'S_DISA' 'KONV' 'KWERT' 'Assm.Disc' 'Assm.Discount'                    'Assembly Discount' '' '' ''.  _append_fieldcat 'S_ASOT' 'KONV' 'KWERT' 'Assm.Other' 'Assm.Others'                    'Assembly Others' '' '' ''.  _append_fieldcat 'S_ASAD' 'KONV' 'KWERT' 'Assm.Adder' 'Assm.Adders'                    'Assembly Adders' '' '' ''.  _append_fieldcat 'S_GOLD' 'KONV' 'KWERT' 'Gold' 'Gold Adder'                    'Gold Adder' '' '' ''.  _append_fieldcat 'S_WAFE' 'KONV' 'KWERT' 'Wafer' 'Wafer'                    'Wafer' '' '' ''.  _append_fieldcat 'S_BACK' 'KONV' 'KWERT' 'Backgrind' 'Backgrind'                    'Backgrind' '' '' ''.  _append_fieldcat 'S_HOTA' 'KONV' 'KWERT' 'FRP' 'Assm.FRP'                    'Assembly FRP' '' '' ''.  _append_fieldcat 'S_HOTT' 'KONV' 'KWERT' 'FRPT' 'Test FRP'                    'Test FRP' '' '' ''.  _append_fieldcat 'S_TQTY' 'VBRP' 'FKIMG' 'Test Qty' 'Test Qty'                    'Test Quantity' '' '' ''. * Extended the length of unit price data type  _append_fieldcat 'S_TUP1' 'VBAP' 'KLMENG' 'TUP1' '1st Test Unit Price'                   '1st Test Unit Price' '' '' ''.   *** begin, larry, change to 5 digits after decimal point  read table gt_fieldcat with key fieldname = 'S_TUP1' into ls_fieldcat.  if sy-subrc = 0.     idx = sy-tabix.     ls_fieldcat-ref_table = ''.     ls_fieldcat-ref_field = ''.     ls_fieldcat-inttype = 'P'.     ls_fieldcat-decimals = 5.     modify gt_fieldcat index idx from ls_fieldcat.  endif.    read table gt_fieldcata with key fieldname = 'S_TUP1' into  ls_fieldcata.  if sy-subrc = 0.     idx = sy-tabix.     ls_fieldcata-decimals_out = 5.     ls_fieldcata-ref_tabname = ''.     ls_fieldcata-ref_fieldname = ''.     modify gt_fieldcata index idx from ls_fieldcata .  endif.   *** end, larry      _append_fieldcat 'S_TUP2' 'VBAP' 'KLMENG' 'TUP2' '2nd Test Unit Price'                   '2nd Test Unit Price' '' '' ''.   *** begin, larry, change to 5 digits after decimal point * data idx type i.  read table gt_fieldcat with key fieldname = 'S_TUP2' into ls_fieldcat.  if sy-subrc = 0.     idx = sy-tabix.     ls_fieldcat-ref_table = ''.     ls_fieldcat-ref_field = ''.     ls_fieldcat-inttype = 'P'.     ls_fieldcat-decimals = 5.     modify gt_fieldcat index idx from ls_fieldcat.  endif.    read table gt_fieldcata with key fieldname = 'S_TUP2' into  ls_fieldcata.  if sy-subrc = 0.     idx = sy-tabix.     ls_fieldcata-decimals_out = 5.     ls_fieldcata-ref_tabname = ''.     ls_fieldcata-ref_fieldname = ''.     modify gt_fieldcata index idx from ls_fieldcata .  endif.   *** end, larry    _append_fieldcat 'S_TUP3' 'VBAP' 'KLMENG' 'TUP3' '2nd Test Unit Price'                   '3rd Test Unit Price' '' '' ''.   *** begin, larry, change to 5 digits after decimal point * data idx type i.    read table gt_fieldcat with key fieldname = 'S_TUP3' into ls_fieldcat.  if sy-subrc = 0.     idx = sy-tabix.     ls_fieldcat-ref_table = ''.     ls_fieldcat-ref_field = ''.     ls_fieldcat-inttype = 'P'.     ls_fieldcat-decimals = 5.     modify gt_fieldcat index idx from ls_fieldcat.  endif.      read table gt_fieldcata with key fieldname = 'S_TUP3' into  ls_fieldcata.  if sy-subrc = 0.     idx = sy-tabix.     ls_fieldcata-decimals_out = 5.     ls_fieldcata-ref_tabname = ''.     ls_fieldcata-ref_fieldname = ''.     modify gt_fieldcata index idx from ls_fieldcata .  endif.   *** end, larry      _append_fieldcat 'S_TSTA' 'KONV' 'KWERT' 'Test Sales' 'Test Sales'                    'Test Sales' '' '' ''.  _append_fieldcat 'S_DIST' 'KONV' 'KWERT' 'Test Disc' 'Test Discount'                    'Test Discount' '' '' ''.  _append_fieldcat 'S_TTOT' 'KONV' 'KWERT' 'Test Other' 'Test Others'                    'Test Others' '' '' ''.  _append_fieldcat 'S_TTAD' 'KONV' 'KWERT' 'Test Adder' 'Test Adders'                    'Test Adders' '' '' ''. **016  _append_fieldcat 'S_TOT' 'KONV' 'KWERT' 'Test Total' 'Test Total'                    'Test Total' '' '' ''. **016  _append_fieldcat 'S_PACK' 'KONV' 'KWERT' 'Pack' 'Packing'                    'Packing' '' '' ''.  _append_fieldcat 'S_TOOL' 'KONV' 'KWERT' 'Tool' 'Tooling'                    'Tooling' '' '' ''. *} Modification 004 *{ Modification 007 *    Add unclassified column  _append_fieldcat 'S_UNCL' 'KONV' 'KWERT' 'Unclass' 'Unclassified'                    'Unclassified' '' '' ''. *} Modification 007  _append_fieldcat 'S_GRSS' 'KONV' 'KWERT' 'Gross' 'Gross Sales'                    'Gross Sales' '' '' ''. *{ Modification 005 *    Sales breakdown  _append_fieldcat 'S_MKDN' 'KONV' 'KWERT' 'MKDN' 'Markdown'                    'Markdown' '' '' ''.  _append_fieldcat 'S_ICAM' 'KONV' 'KWERT' 'Inter-Co.' 'Inter-Co. Amt.'                    'Inter-Company Amount' '' '' ''. *} Modification 005  _append_fieldcat 'KWMENG' 'VBAP' '' '' '' '' '' 'AURKM' ''. "SO Qty  _append_fieldcat 'AURKM' 'VBAP' 'VRKME' '' '' '' '' '' ''. "SO Qty UOM  _append_fieldcat 'RFMNG' 'VBFA' '' 'Unbill.Qty' 'Unbilled Qty'                    'Unbilled Quantity' '' 'MEINS' ''.     "SO Unbill.Qty  _append_fieldcat 'MEINS' 'VBFA' '' '' '' '' '' '' ''. "SO Unb.Qty UOM  _append_fieldcat 'ZZATOAT' 'VBAP' '' 'A to A+T' 'A to A+T' 'A to A+T'  '' '' 'X'.  _append_fieldcat 'ZZATTOA' 'VBAP' '' 'A+T to A ' 'A+T to A' 'A+T to A'  '' '' 'X'.    _append_fieldcat 'PARNT' '' '' 'Pakg Group (CO)' 'Pakg Group (CO)'                    'Pakg Group (CO)' '' '' ''. *start of 018 "DEVK921611  ls_fieldcata-datatype = 'CURR'.  ls_fieldcata-outputlen = 13.  _append_fieldcat 'P_EXTW' '' '' 'EXTW' 'EXTW'                     'EXTW' '' '' ''.  _append_fieldcat 'P_MKTG' 'KONV' 'KBETR' 'MKTG' 'MKTG'                     'MKTG' '' '' ''.  _append_fieldcat 'P_GOLD' 'KONV' 'KBETR' 'GOLD' 'GOLD'                     'GOLD' '' '' ''.  _append_fieldcat 'V_EXTW' 'KONV' 'KAWRT' 'NO.Wires' 'NO. Ex.Wires'                     'Number of Extra Wires' '' '' ''.   *end of 018 "DEVK921611   endform.                    " BUILD_FIELDCAT   *&---------------------------------------------------------------------* *&      Form APPEND_ALL_CHARACT *&---------------------------------------------------------------------* *       Append all retrieved characteristics to columns *----------------------------------------------------------------------* form append_all_charact.    data: ls_fieldcat type lvc_s_fcat,        "ALV Data Field Catalog         ls_fieldcata type slis_fieldcat_alv. "ALV Display Field Catalog    data: lt_cabn like cabn          occurs 0 with header line,         lt_cabnt like cabnt         occurs 0 with header line,         lr_atinn like clsel_r_atinn occurs 0 with header line.    data: l_idx(3) type n.    sort gt_matclass by atnam.    clear l_idx.  loop at gt_matclass. * Get characteristics attributes for every new characteristics     on change of gt_matclass-atnam.       call function 'CLSE_SELECT_CABN_VIA_NAME'         exporting           characteristic = gt_matclass-atnam         tables           t_cabn         = lt_cabn         exceptions           others         = 2.       check sy-subrc = 0.       read table lt_cabn index 1.       clear: ls_fieldcat, ls_fieldcata, gt_char. * Construct ALV display attributes       add 1 to l_idx.       concatenate 'MATCL' l_idx into ls_fieldcat-fieldname.       if lt_cabn-atfor = 'NUM'.         ls_fieldcat-inttype    = 'P'.         ls_fieldcat-edit_mask = lt_cabn-atsch.         ls_fieldcat-decimals   = lt_cabn-anzdz.         ls_fieldcat-quantity   = lt_cabn-msehi.         ls_fieldcat-decmlfield = ls_fieldcat-fieldname.       else.         ls_fieldcat-inttype    = 'C'.         ls_fieldcat-intlen     = 30.       endif.       clear lr_atinn.       refresh: lr_atinn, lt_cabnt.       lr_atinn-option = 'EQ'.       lr_atinn-sign   = 'I'.       lr_atinn-low    = lt_cabn-atinn.       append lr_atinn.       call function 'CLSE_SELECT_CABNT'         exporting           language = sy-langu         tables           in_cabn = lr_atinn           t_cabnt = lt_cabnt         exceptions           others   = 2.       if sy-subrc = 0.         read table lt_cabnt index 1.         ls_fieldcat-seltext = lt_cabnt-atbez.       else.         ls_fieldcat-seltext = gt_matclass-atnam.       endif.         append ls_fieldcat to gt_fieldcat.       ls_fieldcata-fieldname = ls_fieldcat-fieldname.       ls_fieldcata-seltext_l = ls_fieldcat-seltext.       append ls_fieldcata to gt_fieldcata. * Maintain characteristics-ALV_fieldname relationship table       gt_char-atnam = gt_matclass-atnam.       gt_char-itype = ls_fieldcat-inttype.       gt_char-field = ls_fieldcat-fieldname.      append gt_char.     endon.    endloop.   endform.                    " APPEND_ALL_CHARACT   *&---------------------------------------------------------------------* *&      Form GENERATE_OUT_TABLE *&---------------------------------------------------------------------* *       Generate ALV data table *----------------------------------------------------------------------* form generate_out_table.    data: lx_table type ref to data.   * Generate ALV data table  call method cl_alv_table_create=>create_dynamic_table     exporting       it_fieldcatalog = gt_fieldcat     importing       ep_table        = lx_table.  assign lx_table->* to <gt_out>.   endform.                    " GENERATE_OUT_TABLE     *&--------------------------------------------------------------------* *&      Form FILL_OUT_TABLE *&--------------------------------------------------------------------* *       Fill data into ALV data table *---------------------------------------------------------------------* form fill_out_table.    field-symbols: <ls_out>.  field-symbols: <l_f1>, <l_f2>, <l_f3>, <l_f4>, <l_ft>.    data: l_tabix     like sy-tabix,         l_rfmng     like vbfa-rfmng,         l_aflag(1) type c,         l_tflag(1) type c,         l_tcount(1) type n,         l_field(10) type c.    sort gt_kna1 by kunnr.  sort gt_makt by matnr spras.  sort gt_konv by knumv kposn stunr zaehk.  sort gt_matclass by matnr.  sort gt_char by atnam.  sort gt_vbak by aubel.  sort gt_vbup by aubel aupos.  sort gt_vbfa by aubel aupos.  sort gt_pfiv by vgbel vgpos.    assign local copy of initial line of <gt_out> to <ls_out>.    select nodid parnt wert1  into corresponding fields of table gt_tkchw     from tkchw     where applc    = 'KE'           "Application class for DD objects       and id1      = 'RKEG_WWCLS'   "Hierarchy key: Component 1       and id2      = 'ZCO'.     "Hierarchy key: Component 2 "DEVK921639    loop at gt_line. * Add begin of "DEVK921598     perform get_package_group. * Add end of "DEVK921598       clear <ls_out>.     clear: l_aflag, l_tflag, l_tcount. * If ordered quantity is zero, use target quantity     if gt_line-kwmeng is initial.       gt_line-kwmeng = gt_line-zmeng.     endif. *{ Modification 010 *    Get pro-forma invoice#     if gt_line-vgtyp = 'J'. * If reference document type is delivery, get pro-forma invoice       read table gt_pfiv with key vgbel = gt_line-vgbel                                   vgpos = gt_line-vgpos                          binary search.       if sy-subrc = 0.         assign component 'VBEL2' of structure <ls_out> to <l_f1>.         <l_f1> = gt_pfiv-vbeln.       endif.     else. * If reference document type is not delivery, empty delivery doc#       clear gt_line-vgbel.     endif. *} Modification 010 * Get core information from retrieved line items     move-corresponding gt_line to <ls_out>. * Get customer name     read table gt_kna1 with key kunnr = gt_line-kunnr binary search.     if sy-subrc = 0.       move-corresponding gt_kna1 to <ls_out>.     endif. * Get material description     read table gt_makt with key matnr = gt_line-matnr                                 spras = sy-langu      binary search.     if sy-subrc = 0.       move-corresponding gt_makt to <ls_out>.     else.       read table gt_makt with key matnr = gt_line-matnr binary search.       if sy-subrc = 0.         move-corresponding gt_makt to <ls_out>.       endif.     endif. * Get material classification     read table gt_matclass with key matnr = gt_line-matnr binary search.     if sy-subrc = 0. * Get package information       move-corresponding gt_matclass to <ls_out>.       l_tabix = sy-tabix.       loop at gt_matclass from l_tabix.         if gt_matclass-matnr ne gt_line-matnr. exit. endif.         read table gt_char with key atnam = gt_matclass-atnam                            binary search.         check sy-subrc = 0.         assign component gt_char-field of structure <ls_out> to <l_f1>.         if gt_char-itype = 'C'.           <l_f1> = gt_matclass-ausp1.         else.           <l_f1> = gt_matclass-atflv.         endif.       endloop.     endif. * Get sales breakdown *{ Modification 004 *    To use bill.doc.item# *    READ TABLE GT_KONV WITH KEY KNUMV = GT_LINE-KNUMV *                                KPOSN = GT_LINE-AUPOS *                       BINARY SEARCH TRANSPORTING NO FIELDS.     read table gt_konv with key knumv = gt_line-knumv                                 kposn = gt_line-posnr                        binary search transporting no fields. *} Modification 004     if sy-subrc = 0.       l_tabix = sy-tabix.       assign component 'S_GRSS' of structure <ls_out> to <l_ft>.       loop at gt_konv from l_tabix. *{ Modification 004 *    To use bill.doc.item# *        IF ( GT_KONV-KNUMV NE GT_LINE-KNUMV OR *             GT_KONV-KPOSN NE GT_LINE-AUPOS ).         if ( gt_konv-knumv ne gt_line-knumv or              gt_konv-kposn ne gt_line-posnr ). *} Modification 004           exit.         endif.         case gt_konv-kschl. *{ Modification 004 *    Sales breakdown *          WHEN 'MKDN'. *            ASSIGN COMPONENT 'S_MKDN' OF STRUCTURE <LS_OUT> TO <L_F1>. *          WHEN OTHERS. *            ASSIGN COMPONENT 'S_BEFO' OF STRUCTURE <LS_OUT> TO <L_F1>. *        ENDCASE. *        ADD GT_KONV-KWERT TO <L_F1>. *      ENDLOOP. *      ASSIGN COMPONENT 'S_BEFO' OF STRUCTURE <LS_OUT> TO <L_F1>. *      ASSIGN COMPONENT 'S_MKDN' OF STRUCTURE <LS_OUT> TO <L_F2>. *      ASSIGN COMPONENT 'S_GRSS' OF STRUCTURE <LS_OUT> TO <L_FT>. *      <L_FT> = <L_F1> + <L_F2>.             when 'ASSM'.             assign component 'S_AQTY' of structure <ls_out> to <l_f1>.             <l_f1> = gt_konv-kawrt / 10.             assign component 'S_ASUP' of structure <ls_out> to <l_f1>. *{ Modification 007 *    Fix unit price calculation             if gt_konv-kpein = 0.               <l_f1> = gt_konv-kbetr.             else.               <l_f1> = gt_konv-kbetr / gt_konv-kpein.             endif. *} Modification 007             assign component 'S_ASSM' of structure <ls_out> to <l_f1>.             if gt_konv-kwert ne 0 .               add gt_konv-kwert to <l_f1>.             endif.             l_aflag = 'X'.             when 'DISA'.             assign component 'S_DISA' of structure <ls_out> to <l_f1>.             if gt_konv-kwert ne 0 .               add gt_konv-kwert to <l_f1>.             endif. *{ Modification 007 *    Add cond.types *          WHEN 'ENGG' OR 'MINA' OR 'TSTR'. **start 016 *           WHEN 'ENGG' OR 'MINA' OR 'TSTR' OR 'ASSX'.           when 'ENGG' or 'MINA' or 'TSTR' or 'ASSX' or 'SAW' or 'ASSL'. *} Modification 007 **end 016 *{ Modification 017             if gt_konv-kschl = 'ENGG' or gt_konv-kschl = 'MINA' or                gt_konv-kschl = 'TSTR' or gt_konv-kschl = 'ASSX' or                gt_konv-kschl = 'SAW'.                 assign component 'S_ASOT' of structure <ls_out> to <l_f1>.               if gt_konv-kwert ne 0 .                 add gt_konv-kwert to <l_f1>.               endif.               if gt_konv-kschl = 'ENGG'.               assign component 'S_ENGG' of structure <ls_out> to <l_f3>.                 if gt_konv-kbetr ne 0.                   add gt_konv-kbetr to <l_f3>.                 endif.               elseif gt_konv-kschl = 'MINA'.               assign component 'S_MINA' of structure <ls_out> to <l_f3>.                 if gt_konv-kbetr ne 0.                   add gt_konv-kbetr to <l_f3>.                 endif.               elseif gt_konv-kschl = 'ASSX'.               assign component 'S_ASSX' of structure <ls_out> to <l_f4>.                 if gt_konv-kpein = 0.                   <l_f4> = gt_konv-kbetr.                 else.                   <l_f4> = gt_konv-kbetr / gt_konv-kpein.                 endif.               endif.             else.               assign component 'S_ASSL' of structure <ls_out> to <l_f3>.               if gt_konv-kbetr ne 0.                 add gt_konv-kbetr to <l_f3>.               endif.             endif.   *} Modification 017           when '2OPT' or 'COAT' or 'DBBG' or 'DBUT' or 'DCST' or                'EXTW' or 'MINB' or 'RWRK' or 'TSTM' or 'RWUP' or **start 015                'TSTO' or 'DPBG' or 'DPUT'. **end 015 *{ Modification 017             if gt_konv-kschl = 'EXTW'.              assign component 'S_EXTW' of structure <ls_out> to <l_f1>.               if gt_konv-kpein = 0.                 <l_f1> = gt_konv-kbetr * gt_konv-kawrt / 10.               else.             <l_f1> = gt_konv-kbetr / gt_konv-kpein * gt_konv-kawrt / 10.               endif. *start of 018 "DEVK921611               data wa type p decimals 4.               assign component 'P_EXTW' of structure <ls_out> to <l_f1>.               if gt_konv-kpein = 0.                 wa = gt_konv-kbetr.               else.                 wa = gt_konv-kbetr / gt_konv-kpein.               endif.                 <l_f1> = wa.                 assign component 'V_EXTW' of structure <ls_out> to <l_f1>.               <l_f1> = gt_konv-kawrt / 10. *end of 018 "DEVK921611             endif.               assign component 'S_ASAD' of structure <ls_out> to <l_f1>.             if gt_konv-kwert ne 0 .               add gt_konv-kwert to <l_f1>.             endif.               if gt_konv-kschl = 'MINB'.               assign component 'S_MINB' of structure <ls_out> to <l_f3>.               if gt_konv-kbetr ne 0 .                 add gt_konv-kbetr to <l_f3>.               endif.             endif.   *} Modification 017           when 'GOLD'.             assign component 'S_GOLD' of structure <ls_out> to <l_f1>.             if gt_konv-kwert ne 0 .               add gt_konv-kwert to <l_f1>.             endif. *start of 018 "DEVK921611             assign component 'P_GOLD' of structure <ls_out> to <l_f1>.             if gt_konv-kpein = 0.               <l_f1> = gt_konv-kbetr.             else.               <l_f1> = gt_konv-kbetr / gt_konv-kpein.             endif. *end of 018 "DEVK921611           when 'GSAW'. *{ Modification 017             assign component 'S_GSAW' of structure <ls_out> to <l_f1>.             if gt_konv-kpein = 0.               <l_f1> = gt_konv-kbetr.             else.               <l_f1> = gt_konv-kbetr / gt_konv-kpein.             endif. *} Modification 017            assign component 'S_WAFE' of structure <ls_out> to <l_f1>.             if gt_konv-kwert ne 0 .               add gt_konv-kwert to <l_f1>.             endif. *{ Modification 007 *    Add cond.types *          WHEN 'BACK'.           when 'BACK' or 'BG03' or 'BG04' or 'BG05' or 'BG06' or                'BG08' or 'BG12' . *} Modification 007             assign component 'S_BACK' of structure <ls_out> to <l_f1>.             if gt_konv-kwert ne 0 .               add gt_konv-kwert to <l_f1>.             endif.           when 'HOTA'.             assign component 'S_HOTA' of structure <ls_out> to <l_f1>.             if gt_konv-kwert ne 0 .               add gt_konv-kwert to <l_f1>.             endif.             when 'TSTA'.             assign component 'S_TQTY' of structure <ls_out> to <l_f1>.             add 1 to l_tcount.             <l_f1> = gt_konv-kawrt / 10.             concatenate 'S_TUP' l_tcount into l_field.             assign component l_field of structure <ls_out> to <l_f1>. *{ Modification 007 *    Fix unit price calculation             if gt_konv-kpein = 0.               <l_f1> = gt_konv-kbetr.             else.               <l_f1> = gt_konv-kbetr / gt_konv-kpein.             endif. *} Modification 007 *          L_TOTAL = L_TOAL + ( GT_KONV-KBETR / GT_KONV-KPEIN ).    "016             assign component 'S_TSTA' of structure <ls_out> to <l_f1>.             if gt_konv-kwert ne 0 .               add gt_konv-kwert to <l_f1>.             endif.             l_tflag = 'X'.           when 'DIST'.             assign component 'S_DIST' of structure <ls_out> to <l_f1>.             if gt_konv-kwert ne 0 .               add gt_konv-kwert to <l_f1>.             endif. *{ Modification 007 *    Add cond.types *          WHEN 'TSTP' OR 'TSTT' OR 'MINT'.           when 'TSTP' or 'TSTT' or 'MINT' or 'TSTX' or 'BURN' or 'QATD'                or 'QATP' or 'SCAN' or 'TRBB' or 'TRBU' or 'TSTI'                or 'HOTT'.               if gt_konv-kschl = 'BURN' or gt_konv-kschl = 'QATD' or                 gt_konv-kschl = 'QATP' or gt_konv-kschl = 'SCAN' or                 gt_konv-kschl = 'TRBB' or gt_konv-kschl = 'TRBU' or                 gt_konv-kschl = 'TSTI'. *{ Modification 017               if gt_konv-kschl = 'QATD'.                 assign component 'S_QATD' of structure <ls_out> to <l_f1>.                 if gt_konv-kpein = 0.                   <l_f1> = gt_konv-kbetr.                 else.                   <l_f1> = gt_konv-kbetr / gt_konv-kpein.                 endif.                 assign component 'S_QAAM' of structure <ls_out> to <l_f1>.                 if gt_konv-kwert ne 0 .                   add gt_konv-kwert to <l_f1>.                 endif.               endif. *} Modification 017               assign component 'S_TTAD' of structure <ls_out> to <l_f1>.               if gt_konv-kwert ne 0 .                 add gt_konv-kwert to <l_f1>.               endif.               else. *            IF GT_KONV-KSCHL = 'TSTP' OR GT_KONV-KSCHL = 'TSTT' OR *               GT_KONV-KSCHL = 'MINT' OR GT_KONV-KSCHL = 'TSTX' OR **              GT_KONV-KSCHL = 'QATD' OR GT_KONV-KSCHL = 'QATP' *               GT_KONV-KSCHL = 'HOTT'.                 if gt_konv-kschl = 'TSTP' or gt_konv-kschl = 'TSTT'. *{ Modification 007               assign component 'S_TQTY' of structure <ls_out> to <l_f1>.                 if <l_f1> = 0.                   <l_f1> = gt_konv-kawrt / 10.                 endif.               elseif gt_konv-kschl = 'MINT'.               assign component 'S_MINT' of structure <ls_out> to <l_f3>.                 if gt_konv-kbetr ne 0 .                   add gt_konv-kbetr to <l_f3>.                 endif.               elseif gt_konv-kschl = 'HOTT'.               assign component 'S_HOTT' of structure <ls_out> to <l_f1>.                 if gt_konv-kwert ne 0 .                   add gt_konv-kwert to <l_f1>.                 endif.               endif.                 assign component 'S_TTOT' of structure <ls_out> to <l_f1>.               if gt_konv-kwert ne 0 .                 add gt_konv-kwert to <l_f1>.               endif.               l_tflag = 'X'.             endif. *} Modification 017 **start 0016 *          WHEN 'WFRU' OR 'WFRW'.           when 'WFRU' or 'WFRW' or 'PROB' or 'LTRM'. **end 0016             assign component 'S_TTAD' of structure <ls_out> to <l_f1>.             if gt_konv-kwert ne 0 .               add gt_konv-kwert to <l_f1>.             endif.             when 'TUBE' or 'TUBU' or 'TRAY' or 'TRYU' or 'CANI'.             assign component 'S_PACK' of structure <ls_out> to <l_f1>.             if gt_konv-kwert ne 0 .               add gt_konv-kwert to <l_f1>.             endif.           when 'DSGN' or 'TOOL'.             assign component 'S_TOOL' of structure <ls_out> to <l_f1>.             if gt_konv-kwert ne 0 .               add gt_konv-kwert to <l_f1>.             endif. *{ Modification 008 *    Fix 'MKDN' column *          WHEN 'MSDN'.           when 'MKDN'. *} Modification 008             assign component 'S_MKDN' of structure <ls_out> to <l_f1>.             if gt_konv-kwert ne 0 .               add gt_konv-kwert to <l_f1>.             endif.           when 'PI02'.             assign component 'S_ICAM' of structure <ls_out> to <l_f1>.             if gt_konv-kwert ne 0 .               add gt_konv-kwert to <l_f1>.             endif.           when others. *{ Modification 007 *    Add unclassified column *            GT_KONV-KWERT = 0.             assign component 'S_UNCL' of structure <ls_out> to <l_f1>.             if gt_konv-kwert ne 0 .               add gt_konv-kwert to <l_f1>.             endif. *} Modification 007 *start of 018 "DEVK921611             if gt_konv-kschl = 'MKTG'.               assign component 'P_MKTG' of structure <ls_out> to <l_f1>.               if gt_konv-kpein = 0.                 <l_f1> = gt_konv-kbetr.               else.                 <l_f1> = gt_konv-kbetr / gt_konv-kpein.               endif.             endif. *end of 018 "DEVK921611         endcase.         if gt_konv-kwert ne 0 .           if gt_konv-kschl ne 'MKDN' and gt_konv-kschl ne 'PI02'.             add gt_konv-kwert to <l_ft>.           endif.         endif. *{ Modification 017 *        IF GT_KONV-KBETR NE 0 AND ( GT_KONV-KSCHL = 'ASSL' **         GT_KONV-KSCHL = 'HOTA' OR GT_KONV-KSCHL = 'HOTT' *           OR GT_KONV-KSCHL = 'ENGG' OR GT_KONV-KSCHL = 'MINA' *           OR GT_KONV-KSCHL = 'MINB' OR GT_KONV-KSCHL = 'MINT' ). *          ADD GT_KONV-KBETR TO <L_F3>. *        ENDIF. *{ Modification 017       endloop. *} Modification 004     endif.   *{ Modification 001 *    To give negative values on billed amount & qty     if gt_line-vbtyp = 'N' or gt_line-vbtyp = 'O'.       assign component 'FKIMG' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1. *{ Modification 004 *    Sales breakdown       assign component 'S_AQTY' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.       assign component 'S_ASSM' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.       assign component 'S_DISA' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.       assign component 'S_ASOT' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.       assign component 'S_ASAD' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.       assign component 'S_GOLD' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.       assign component 'S_WAFE' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.       assign component 'S_BACK' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.       assign component 'S_HOTA' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.       assign component 'S_HOTT' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.       assign component 'S_TQTY' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.       assign component 'S_TSTA' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.       assign component 'S_DIST' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.       assign component 'S_TTOT' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.       assign component 'S_TTAD' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.       assign component 'S_PACK' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.       assign component 'S_TOOL' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1. *} Modification 004 *{ Modification 007 *    Add unclassified column       assign component 'S_UNCL' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1. *} Modification 007       assign component 'S_GRSS' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.       assign component 'S_MKDN' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1. *{ Modification 011 *   Fix bug for markdown sign       assign component 'S_ICAM' of structure <ls_out> to <l_f1>. *} Modification 011       <l_f1> = <l_f1> * -1. *{ Modification 017       assign component 'S_QAAM' of structure <ls_out> to <l_f1>.       <l_f1> = <l_f1> * -1.      assign component 'S_ASSL' of structure <ls_out> to <l_f3>.       <l_f3> = <l_f3> * -1.       assign component 'S_ENGG' of structure <ls_out> to <l_f3>.       <l_f3> = <l_f3> * -1.       assign component 'S_MINA' of structure <ls_out> to <l_f3>.       <l_f3> = <l_f3> * -1.       assign component 'S_MINB' of structure <ls_out> to <l_f3>.       <l_f3> = <l_f3> * -1.       assign component 'S_MINT' of structure <ls_out> to <l_f3>.       <l_f3> = <l_f3> * -1. *} Modification 017     endif. *} Modification 001   *{ Modification 003 *    Get lead count information (negative when reversing & credit-memo)     read table gt_char with key atnam = c_lead binary search.     if sy-subrc = 0.       assign component gt_char-field of structure <ls_out> to <l_f1>. *{ Modification 004 *    Change to checking condition type *      ASSIGN COMPONENT 'FKIMG' OF STRUCTURE <LS_OUT> TO <L_F2>. *      IF GT_LINE-PSTYV CS 'A'. "Item category related to Assembly       if l_aflag = 'X'. "Assembly Price exists         assign component 'S_AQTY' of structure <ls_out> to <l_f2>.         assign component 'ASMLC' of structure <ls_out> to <l_ft>.         <l_ft> = <l_f1> * <l_f2>.       endif. *      IF GT_LINE-PSTYV CS 'T'. "Item category related to Testing       if l_tflag = 'X'. "Test Price exists         assign component 'S_TQTY' of structure <ls_out> to <l_f2>.         assign component 'TSTLC' of structure <ls_out> to <l_ft>.         <l_ft> = <l_f1> * <l_f2>.       endif. *} Modification 004     endif. *} Modification 003   * Get sales order customer PO number     read table gt_vbak with key aubel = gt_line-aubel binary search.     if sy-subrc = 0.       move-corresponding gt_vbak to <ls_out>.     endif. * Get sales order item status     read table gt_vbup with key aubel = gt_line-aubel                                 aupos = gt_line-aupos                        binary search.     if sy-subrc = 0.       move-corresponding gt_vbup to <ls_out>.     endif. * Get sales order item unbilled quantity     read table gt_vbfa with key aubel = gt_line-aubel                                 aupos = gt_line-aupos                        binary search.     if sy-subrc = 0.       l_tabix = sy-tabix.       assign component 'MEINS' of structure <ls_out> to <l_f1>.       <l_f1> = gt_vbfa-meins.      assign component 'RFMNG' of structure <ls_out> to <l_f1>.       clear l_rfmng.       loop at gt_vbfa from l_tabix.         if ( gt_vbfa-aubel ne gt_line-aubel or              gt_vbfa-aupos ne gt_line-aupos ).           exit.         endif.         case gt_vbfa-vbtyp_n.           when 'M' or 'O'.             add gt_vbfa-rfmng to l_rfmng.           when 'N' or 'P' or 'S'.             subtract gt_vbfa-rfmng from l_rfmng.         endcase.       endloop.       <l_f1> = gt_line-kwmeng - abs( l_rfmng ).     endif. * Get MAWB text     assign component 'MAWBT' of structure <ls_out> to <l_f1>.     perform get_header_text using    c_id_mawb gt_line-vbeln                             changing <l_f1>. * Get HAWB text     assign component 'HAWBT' of structure <ls_out> to <l_f1>.     perform get_header_text using    c_id_hawb gt_line-vbeln                             changing <l_f1>. * Get Flight/Carrier text     assign component 'FLIGH' of structure <ls_out> to <l_f1>.     perform get_header_text using    c_id_flight gt_line-vbeln                             changing <l_f1>.     append <ls_out> to <gt_out>.  endloop.   endform.                    " FILL_OUT_TABLE   *&---------------------------------------------------------------------* *&      Form GET_HEADER_TEXT *&---------------------------------------------------------------------* *       Get Header Text *----------------------------------------------------------------------* *      -->P_TDID       Text ID *      -->P_VBELN      Billing Doc# *      <--P_TEXT       Return text *----------------------------------------------------------------------* form get_header_text using    p_tdid like thead-tdid                                p_vbeln like vbrk-vbeln                       changing p_text type c.    data: l_tdname like thead-tdname,         l_tdline like tline-tdline.    data: lt_tline like tline occurs 0 with header line.    l_tdname = p_vbeln.    call function 'READ_TEXT'     exporting       id       = p_tdid       language = sy-langu       name     = l_tdname       object   = c_soitmobj     tables       lines    = lt_tline     exceptions       others   = 8.  if sy-subrc = 0.     loop at lt_tline to 4.              "Maximum included 4 lines       if l_tdline is initial.         l_tdline = lt_tline-tdline.       else.         concatenate l_tdline lt_tline-tdline into l_tdline           separated by '/'.       endif.     endloop.     p_text = l_tdline.  endif.   endform.                    " GET_HEADER_TEXT   *&---------------------------------------------------------------------* *&      Form ALV_OUTPUT *&---------------------------------------------------------------------* *       Generate ALV report *----------------------------------------------------------------------* form alv_output.    data: ls_layout type slis_layout_alv,         lt_sort   type slis_t_sortinfo_alv,         ls_sort   type slis_sortinfo_alv.    ls_layout-colwidth_optimize = 'X'.   * Sorting Options  ls_sort-spos = 1.  ls_sort-fieldname = 'KUNNR'.  ls_sort-up = 'X'.            " Ascending  ls_sort-subtot = 'X'.        " Calc subtotals  append ls_sort to lt_sort.   * Display ALV  call function 'REUSE_ALV_GRID_DISPLAY'     exporting       it_fieldcat             = gt_fieldcata[] "Field Catalog       is_layout               = ls_layout       "Layout       i_save                  = g_save          "'A'       is_variant              = g_variant       "Variant       it_sort                 = lt_sort[]       "Sorting       i_callback_program      = g_repid         "Callback this program       i_callback_user_command = 'USER_COMMAND' "User-command handling       i_callback_top_of_page = 'TOP_OF_PAGE'   "Top-of-page display     tables       t_outtab                = <gt_out>     exceptions       program_error           = 1       others                  = 2.   endform.                    " ALV_OUTPUT   *&---------------------------------------------------------------------* *&      Form USER_COMMAND *&---------------------------------------------------------------------* *       ALV User-command Callback Subroutine *----------------------------------------------------------------------* form user_command using p_ucomm     like sy-ucomm                         ps_selfield type slis_selfield.    data: l_kunnr like kna1-kunnr, "Customer#         l_vbeln like vbrk-vbeln, "Billing Doc#         l_aubel like vbak-vbeln, "Sales Order#         l_vgbel like likp-vbeln, "Delivery Doc#         l_matnr like mara-matnr. "Material#    if p_ucomm = '&IC1'        "SAP standard code for double-clicking      and not ( ps_selfield-value is initial ).       case ps_selfield-fieldname. * Customer# is selected       when 'KUNNR'.         l_kunnr = ps_selfield-value.         set parameter id 'KUN' field l_kunnr.         call transaction 'XD03' and skip first screen. * Billing Doc# is selected       when 'VBELN'.         l_vbeln = ps_selfield-value.         set parameter id 'VF' field l_vbeln.         call transaction 'VF03' and skip first screen. * SO Doc# is selected       when 'AUBEL'.         l_aubel = ps_selfield-value.         set parameter id 'AUN' field l_aubel.         call transaction 'VA03' and skip first screen. * Delivery Doc# is selected       when 'VGBEL'.         l_vgbel = ps_selfield-value.         set parameter id 'VL' field l_vgbel.         call transaction 'VL03' and skip first screen. * Material# is selected       when 'MATNR'.         l_matnr = ps_selfield-value.         set parameter id 'MAT' field l_matnr.         set parameter id 'MXX' field 'K'.         "Basic View         set parameter id 'KAR' field c_matcltype. "Material Class         call transaction 'MM03' and skip first screen.     endcase.    endif.   endform.                    " USER_COMMAND     *&---------------------------------------------------------------------* *&      Form TOP_OF_PAGE *&---------------------------------------------------------------------* *       ALV Top-of-page Callback Subroutine *----------------------------------------------------------------------* form top_of_page.    call function 'REUSE_ALV_COMMENTARY_WRITE'     exporting       it_list_commentary = gt_top_of_page.   endform.                    " TOP_OF_PAGE *&---------------------------------------------------------------------* *&      Form SUM_GTOUT *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* * --> p1        text * <-- p2        text *----------------------------------------------------------------------* form sum_gtout .  field-symbols: <ls_out>.  field-symbols: <l_f1>, <l_f2>, <l_f3>, <l_f4>, <l_ft>.   * ASSIGN LOCAL COPY OF INITIAL LINE OF <GT_OUT> TO <LS_OUT>.  loop at <gt_out> assigning <ls_out>. *    <LS_OUT>-S_TOT = <LS_OUT>-S_TSTA + <LS_OUT>-S_DIST + *                     <LS_OUT>-S_TTOT + <LS_OUT>-S_TTAD. *     <LS_OUT>-S_TOT = <LS_OUT>-S_TSTA.     assign component 'S_TOT' of structure <ls_out> to <l_ft>.     assign component 'S_TSTA' of structure <ls_out> to <l_f1>.     assign component 'S_DIST' of structure <ls_out> to <l_f2>.     assign component 'S_TTOT' of structure <ls_out> to <l_f3>.     assign component 'S_TTAD' of structure <ls_out> to <l_f4>.     <l_ft> = <l_f1> + <l_f2> + <l_f3> + <l_f4>.     modify <gt_out> from <ls_out>.  endloop. endform.                    " SUM_GTOUT *&---------------------------------------------------------------------* *&      Form GET_PACKAGE_GROUP *&---------------------------------------------------------------------* *       text *----------------------------------------------------------------------* * --> p1        text * <-- p2        text *----------------------------------------------------------------------* form get_package_group .  data: l_clint like kssk-objek.  data: l_package_name like klah-class.  data: l_parnt like tkchw-parnt.    select single clint  into   l_clint  from   kssk  where objek = gt_line-matnr and          mafid = 'O'     and          klart = '001'.    select single class  into   l_package_name  from   klah  where clint = l_clint.   * Get Hierarchy data  read table gt_tkchw with key wert1 = l_package_name.  if sy-subrc = 0.     l_parnt = gt_tkchw-parnt.     read table gt_tkchw with key nodid = l_parnt.     if sy-subrc = 0. *      READ TABLE GT_TKCHNT WITH KEY KEYID = GT_TKCHW-WERT1. *       IF SY-SUBRC = 0.       gt_line-parnt = gt_tkchw-wert1. *       ENDIF.       endif.  endif.       endform.                    " GET_PACKAGE_GROUP  

     


    最新回复(0)