Table of Contents:
REPORT zvsales_by_shipto LINE-SIZE 83 NO STANDARD PAGE HEADING. *@---------------------------------------------------------------------- *@ Program id : *@ *@ Program Desc : This Report lists Sales by ship-to customer. *@ *@ Transaction Code - zvsalesbyshipto *@ Input files : ID - none *@ Output files : ID - none *@ *@ Tables Updated: Table - none *@ *@ *@ Author : IJADALOW LABK934444 *@ Date : February 26, 2003 *@ Requested by: Joyce Homeniuk, Ophelia Tik *@---------------------------------------------------------------------- *@---------------------------------------------------------------------- *----------------------------------------------------------------------- * Includes *----------------------------------------------------------------------- INCLUDE zsmaster. *----------------------------------------------------------------------- * Tables *----------------------------------------------------------------------- TABLES: ce1anoc, adrc, vbpa, t001, "Co code t009b. "Fiscal year variant periods ** Structure TABLES: zsalesbyshipto. *----------------------------------------------------------------------- * Internal Tables *----------------------------------------------------------------------- DATA: i_output LIKE zsalesbyshipto OCCURS 0 WITH HEADER LINE. DATA: BEGIN OF itab OCCURS 0, kndnr LIKE ce1anoc-kndnr, "sold-to name1 LIKE kna1-name1, perio LIKE ce1anoc-perio, zmonth LIKE zsalesbyshipto-zmonth, kaufn LIKE ce1anoc-kaufn, kdpos LIKE ce1anoc-kdpos, kunnr LIKE vbpa-kunnr, "Ship-to adrnr LIKE vbpa-adrnr, "address no. city1 LIKE adrc-city1, artnr LIKE ce1anoc-artnr, "product arktx LIKE vbap-arktx, revenue LIKE zsalesbyshipto-revenue, erlpr LIKE ce1anoc-erlpr, erleq LIKE ce1anoc-erleq, rabat LIKE ce1anoc-rabat, kursf LIKE ce1anoc-kursf, drcos LIKE ce1anoc-drcos, totalpm LIKE zsalesbyshipto-totalpm, totalpmper LIKE zsalesbyshipto-totalpmper, absmg LIKE ce1anoc-absmg, belnr LIKE ce1anoc-belnr, vkorg LIKE ce1anoc-vkorg, END OF itab. *---------------------------------------------------------------------- * Data for alv display *---------------------------------------------------------------------- * Type pools *---------------------------------------------------------------------- TYPE-POOLS: slis. DATA: gs_layout TYPE slis_layout_alv. DATA: fcat TYPE slis_fieldcat_alv OCCURS 0 WITH HEADER LINE. DATA: gt_list_top_of_page TYPE slis_t_listheader. DATA: gt_events TYPE slis_t_event. DATA: alv_repid LIKE sy-repid. DATA: alv_ddic LIKE dd02l-tabname. CONSTANTS: gc_formname_top_of_page TYPE slis_formname VALUE 'TOP_OF_PAGE'. alv_ddic = 'ZSALESBYSHIPTO'. */-- Selection Criteria --------------------------------------------*\ SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE text-001. SELECT-OPTIONS: s_comp FOR ce1anoc-vkorg OBLIGATORY NO INTERVALS NO-EXTENSION, s_cust FOR vbpa-kunnr, "customer s_perio FOR ce1anoc-perio OBLIGATORY. "Period SELECTION-SCREEN END OF BLOCK blk1. SELECTION-SCREEN BEGIN OF BLOCK blk2 WITH FRAME TITLE text-002. SELECTION-SCREEN: SKIP. PARAMETERS: rb_cad RADIOBUTTON GROUP rad1 DEFAULT 'X'. PARAMETERS: rb_usd RADIOBUTTON GROUP rad1. SELECTION-SCREEN END OF BLOCK blk2. */-------------------------------------------------------------------\* START-OF-SELECTION. PERFORM get_data. END-OF-SELECTION. mac_set_status_bar 'Preparing output......'. * Layout PERFORM init_layout. * Fieldcatalog PERFORM get_fieldcat. PERFORM init_fieldcat. * Top of page comment REFRESH: gt_events, gt_list_top_of_page. PERFORM eventtab_build USING gt_events[]. PERFORM output_list. */-------------------------------------------------------------------\* FORM get_data. DATA: l_exrate LIKE itab-kursf, l_index like sy-tabix. SELECT * INTO CORRESPONDING FIELDS OF TABLE itab FROM ce1anoc WHERE perio IN s_perio AND vkorg IN s_comp AND kndnr IN s_cust. SORT itab BY kaufn kdpos artnr perio. LOOP AT itab. SELECT SINGLE name1 FROM kna1 INTO itab-name1 WHERE kunnr = itab-kndnr. * Get the ship-to customer and address num. SELECT SINGLE kunnr adrnr FROM vbpa INTO (itab-kunnr, itab-adrnr) WHERE vbeln = itab-kaufn AND parvw = 'WE'. SELECT SINGLE city1 FROM adrc INTO itab-city1 WHERE addrnumber = itab-adrnr. * when the sales order number is '54xxxxxx', get the corresponding * order number from vbap. IF itab-kaufn(4) = '0054'. SELECT SINGLE vgbel vgpos arktx FROM vbap INTO (itab-kaufn, itab-kdpos, itab-arktx) WHERE vbeln = itab-kaufn AND posnr = itab-kdpos. ELSE. SELECT SINGLE arktx FROM vbap INTO itab-arktx WHERE vbeln = itab-kaufn AND posnr = itab-kdpos. ENDIF. CLEAR l_exrate. IF itab-kursf >= '1.0'. PERFORM get_exchange_rate USING itab-perio l_exrate. ELSE. l_exrate = itab-kursf. ENDIF. IF rb_cad = 'X'. itab-revenue = ( itab-erlpr + itab-erleq + itab-rabat ) / l_exrate. itab-drcos = itab-drcos / l_exrate. ELSE. itab-revenue = ( itab-erlpr + itab-erleq + itab-rabat ). ENDIF. itab-totalpm = itab-revenue - itab-drcos. * Get Month name mac_get_month_str_for_period itab-vkorg itab-perio+4(3) itab-zmonth. CLEAR i_output. READ TABLE i_output WITH KEY kaufn = itab-kaufn kdpos = itab-kdpos artnr = itab-artnr perio = itab-perio. l_index = sy-tabix. IF itab-perio = i_output-perio AND itab-kaufn = i_output-kaufn AND itab-kdpos = i_output-kdpos AND itab-artnr = i_output-artnr. ADD: i_output-revenue TO itab-revenue, i_output-drcos TO itab-drcos, i_output-totalpm TO itab-totalpm, i_output-absmg TO itab-absmg. * Get the Total PM percentage IF itab-revenue <> 0. itab-totalpmper = itab-totalpm / itab-revenue * 100. ELSE. itab-totalpmper = 0. ENDIF. MOVE-CORRESPONDING itab TO i_output. MODIFY i_output INDEX l_index. ELSE. * Get the Total PM percentage IF itab-revenue <> 0. itab-totalpmper = itab-totalpm / itab-revenue * 100. ELSE. itab-totalpmper = 0. ENDIF. MOVE-CORRESPONDING itab TO i_output. APPEND i_output. ENDIF. MODIFY itab. ENDLOOP. SORT i_output BY kndnr kunnr perio kaufn. ENDFORM. *&---------------------------------------------------------------------* *& Form INIT_LAYOUT *&---------------------------------------------------------------------* FORM init_layout. gs_layout-colwidth_optimize = 'X'. ENDFORM. " INIT_LAYOUT *&---------------------------------------------------------------------* *& Form GET_FIELDCAT *&---------------------------------------------------------------------* FORM get_fieldcat. CLEAR fcat[]. CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE' EXPORTING i_structure_name = alv_ddic CHANGING ct_fieldcat = fcat[] EXCEPTIONS inconsistent_interface = 1 program_error = 2 OTHERS = 3. ENDFORM. " GET_FIELDCAT *&---------------------------------------------------------------------* *& Form INIT_FIELDCAT *&---------------------------------------------------------------------* FORM init_fieldcat. LOOP AT fcat. fcat-ddictxt = 'L'. MODIFY fcat. ENDLOOP. ENDFORM. " INIT_FIELDCAT *&---------------------------------------------------------------------* *& Form EVENTTAB_BUILD *&---------------------------------------------------------------------* FORM eventtab_build 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 gc_formname_top_of_page TO ls_event-form. APPEND ls_event TO p_events. ENDIF. ENDFORM. " EVENTTAB_BUILD *---------------------------------------------------------------------* * FORM TOP_OF_PAGE * *---------------------------------------------------------------------* FORM top_of_page. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = gt_list_top_of_page. ENDFORM. *&---------------------------------------------------------------------* *& Form OUTPUT_LIST *&---------------------------------------------------------------------* FORM output_list. * sort i_output by vkorg kunnr pernr. alv_repid = sy-repid. CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = alv_repid * i_callback_user_command = 'USER_COMMAND' it_fieldcat = fcat[] it_events = gt_events[] is_layout = gs_layout TABLES t_outtab = i_output. ENDFORM. " OUTPUT_LIST *&---------------------------------------------------------------------* *& Form GET_EXCHANGE_RATE *&---------------------------------------------------------------------* FORM get_exchange_rate USING pc_period CHANGING pc_rate. DATA: l_temp_year TYPE mac_t_year, l_temp_period TYPE mac_t_period, l_temp_end LIKE sy-datum, l_temp_strt LIKE sy-datum. CLEAR: l_temp_year, l_temp_period, l_temp_end. l_temp_year = pc_period(4). l_temp_period = pc_period+4(3). mac_get_dates_for_period '1000' l_temp_year l_temp_period l_temp_strt l_temp_end. CALL FUNCTION 'READ_EXCHANGE_RATE' EXPORTING date = l_temp_strt foreign_currency = 'CAD' local_currency = 'USD' type_of_rate = 'M' IMPORTING exchange_rate = pc_rate. IF sy-subrc <> 0. pc_rate = 1. ENDIF. ENDFORM. " GET_EXCHANGE_RATE