‎2007 Jun 03 4:35 PM
hi experts,
can anybody pls tell me the all sample program codes (MODULE , BDC, REPORTS, SCRIPTS, SMARTFORMS, AND CROSS APPS) programs
‎2007 Jun 03 4:46 PM
Report Sample program:
REPORT ZMM_KITCHEN_COST no standard page heading
line-size 255
message-id zwave .
type-pools
type-pools : slis.
Tables
tables : mara,
makt,
mbew,
konp,
pgmi,
marc,
RMCP3,
sscrfields,
mvke.
Internal Table for MARC and MARA
data : begin of i_join occurs 0,
matnr like mara-matnr, " Material #
meins like mara-meins, " Unit of Measure
werks like marc-werks, " Plant
zzdept like marc-zzdept," Department
end of i_join.
Internal table for PGMI
data : begin of i_pgmi occurs 0,
werks like pgmi-werks, " Plant,
nrmit like pgmi-nrmit, " Material #
wemit like pgmi-wemit, " Plant
end of i_pgmi.
Internal Table for MBEW
data i_mbew like mbew occurs 0 with header line.
Internal Table for Output
data : begin of i_output occurs 0 ,
matnr like mara-matnr, " Material #
maktx like makt-maktx, " Material Desc
VPRSV like mbew-VPRSV, " Price Control Indicator
VERPR like mbew-VERPR, " Moving Avg Price
meins like mara-meins, " Base Unit of Measure
STPRS like mbew-STPRS, " Standard Price
LPLPR like mbew-LPLPR, " Current Planned Price
ZPLPR like mbew-ZPLPR, " Future Planned Price
VPLPR like mbew-VPLPR, " Previous Planned Price
kbetr like konp-kbetr, " Sales Price
KMEIN like konp-KMEIN, " Sales Unit
margin(5) type p decimals 2,
vmsta like mvke-vmsta, " Material Status.
end of i_output.
Internal Table for A004
data : i_a004 like a004 occurs 0 with header line.
Variables
data : wa_lines type i,
wa_maktx type makt-maktx,
v_flag type c.
ALV Function Module Variables
DATA: g_repid like sy-repid,
gs_layout type slis_layout_alv,
g_exit_caused_by_caller,
gs_exit_caused_by_user type slis_exit_by_user.
DATA: gt_fieldcat type slis_t_fieldcat_alv,
gs_print type slis_print_alv,
gt_events type slis_t_event,
gt_list_top_of_page type slis_t_listheader,
g_status_set type slis_formname value 'PF_STATUS_SET',
g_user_command type slis_formname value 'USER_COMMAND',
g_top_of_page type slis_formname value 'TOP_OF_PAGE',
g_top_of_list type slis_formname value 'TOP_OF_LIST',
g_end_of_list type slis_formname value 'END_OF_LIST',
g_variant LIKE disvariant,
g_save(1) TYPE c,
g_tabname_header TYPE slis_tabname,
g_tabname_item TYPE slis_tabname,
g_exit(1) TYPE c,
gx_variant LIKE disvariant.
data : gr_layout_bck type slis_layout_alv.
Selection-screen
selection-screen : begin of block blk with frame title text-001.
parameters : p_werks like marc-werks default '1000' obligatory.
select-options : s_dept for marc-zzdept obligatory,
s_matnr for mara-matnr,
s_mtart for mara-mtart,
s_vprsv for mbew-VPRSV,
s_PRGRP for RMCP3-PRGRP MATCHCODE OBJECT MAT2 ,
s_vmsta for mvke-vmsta.
selection-screen: end of block blk.
*SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
*PARAMETERS: p_vari LIKE disvariant-variant.
*SELECTION-SCREEN END OF BLOCK b3.
*
----
At slection screen events *
----
*-- Process on value request
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_vari.
PERFORM f4_for_variant.
*
----
Initialization *
----
Initialization.
g_repid = sy-repid.
sscrfields-functxt_01 = 'Clear Selection'.
selection-screen function key 1.
AT SELECTION-SCREEN.
case sscrfields-ucomm.
when 'Clear Selection' or 'FC01'.
clear: s_matnr,
p_werks.
refresh: s_matnr,
s_dept,
s_mtart,
s_vprsv,
s_PRGRP,
s_vmsta.
endcase.
----
Start-of-selection.
----
start-of-selection.
Clear the all data.
perform clear_data.
Get the data from PGMI Table
perform get_pgmi.
Get the data from MARC and MARA Table
perform get_mara_marc.
Get the data from MBEW Table
perform get_mbew.
Move the data into OUTPUT Table
perform move_output_internal.
*end-of-selection.
end-of-selection.
if not i_output[] is initial.
ALV Function Module
perform print_alv.
endif.
&----
*& Form get_pgmi
&----
Select the data from PGMI Table
----
FORM get_pgmi.
clear v_flag.
If Product group has a value at Selection-screen.
if not s_prgrp is initial.
select werks nrmit wemit from pgmi into table i_pgmi
where prgrp in s_prgrp
and werks = p_werks
and wemit = p_werks.
v_flag = 'X'.
endif.
ENDFORM. " get_pgmi
&----
*& Form get_mara_marc
&----
Select the data from MARA and MARC
----
FORM get_mara_marc.
if v_flag = 'X'.
select amatnr ameins bwerks bzzdept into table i_join
from mara as a inner join marc as b on amatnr = bmatnr
for all entries in i_pgmi
where a~matnr in s_matnr
and b~werks = p_werks
and b~zzdept in s_dept
and a~mtart in s_mtart
and a~matnr = i_pgmi-nrmit
and b~werks = i_pgmi-werks.
else.
Get the data from MARA and MARC Table
select amatnr ameins bwerks bzzdept into table i_join
from mara as a inner join marc as b on amatnr = bmatnr
where a~matnr in s_matnr
and b~werks = p_werks
and b~zzdept in s_dept
and a~mtart in s_mtart.
endif.
clear wa_lines.
describe table i_join lines wa_lines.
if wa_lines is initial.
message i000(zwave) with 'List contains no data'.
stop.
endif.
sort i_join by matnr werks zzdept.
ENDFORM. " get_mara_marc
&----
*& Form get_mbew
&----
Select the data from MBEW Table
----
FORM get_mbew.
Get the data from MBEW.
select * from mbew into table i_mbew
for all entries in i_join
where matnr = i_join-matnr.
clear wa_lines.
describe table i_mbew lines wa_lines.
if wa_lines is initial.
message i000(zwave) with 'List contains no data'.
stop.
endif.
sort i_mbew by matnr bwkey.
ENDFORM. " get_mbew
&----
*& Form move_output_internal
&----
Final Results
----
FORM move_output_internal.
loop at i_join.
clear wa_maktx.
Compare the data with MVKE Table
select single vmsta from mvke into mvke-vmsta
where matnr = i_join-matnr
and vkorg = '0001'
and vtweg = '01'
and vmsta in s_vmsta.
if sy-subrc ne 0.
continue.
else.
i_output-vmsta = mvke-vmsta.
endif.
read table i_mbew with key matnr = i_join-matnr
bwkey = i_join-werks
binary search.
if sy-subrc eq 0.
Price Control Indicator
i_output-VPRSV = i_mbew-VPRSV.
Moving Average Price
i_output-VERPR = i_mbew-VERPR / i_mbew-peinh.
Standard Price
i_output-STPRS = i_mbew-STPRS / i_mbew-peinh.
Current Planned Price
i_output-LPLPR = i_mbew-LPLPR / i_mbew-peinh.
Future Planned Price
i_output-ZPLPR = i_mbew-ZPLPR / i_mbew-peinh.
Previous Planned Price
i_output-VPLPR = i_mbew-VPLPR / i_mbew-peinh.
Base Unit of Measure - Added by Seshu 01/09/2007
i_output-meins = i_join-meins.
else.
continue.
endif.
Get the sales Price.
perform get_sales_data.
if i_mbew-VPRSV = 'V'.
Get the Percentage of Margin
if i_output-kbetr ne '0.00'.
i_output-margin = ( ( i_output-kbetr - i_mbew-VERPR )
/ i_output-kbetr ) * 100 .
endif.
else.
Get the Percentage of Margin
if i_output-kbetr ne '0.00'.
i_output-margin = ( ( i_output-kbetr - i_output-stprs )
/ i_output-kbetr ) * 100 .
endif.
endif.
Get the material Description from MAKT Table
select single maktx from makt into wa_maktx
where matnr = i_join-matnr
and spras = 'E'.
if sy-subrc eq 0.
i_output-matnr = i_join-matnr.
i_output-maktx = wa_maktx.
endif.
append i_output.
clear : i_output,
i_join,
i_mbew.
endloop.
ENDFORM. " move_output_internal
&----
*& Form get_sales_data
&----
Get the Sales Price for each material
----
FORM get_sales_data.
Get the data from A004 table to get KNUMH
Added new field Sales Unit - Seshu 01/09/2006
refresh : i_a004.
clear : i_a004.
data : lv_kbetr like konp-kbetr," Condition value
lv_KPEIN like konp-kpein , "per
lv_KMEIN like konp-KMEIN. " Sales Unit
select * from a004 into table i_a004
where matnr = i_join-matnr
and vkorg = '0001'
and vtweg = '01'.
if sy-subrc eq 0.
sort i_a004 by DATAB descending.
Get the Latetest Date
read table i_a004 with key matnr = i_join-matnr
vkorg = '0001'
vtweg = '01'
binary search.
Get the Sales Value
select single kbetr KPEIN KMEIN from konp
into (lv_kbetr,lv_KPEIN, lv_KMEIN)
where knumh = i_a004-knumh
and kappl = i_a004-kappl
and kschl = i_a004-kschl.
if sy-subrc eq 0.
i_output-kbetr = lv_kbetr / lv_KPEIN.
i_output-KMEIN = lv_KMEIN.
endif.
endif.
clear : lv_kbetr,
lv_kpein,
lv_KMEIN.
ENDFORM. " get_sales_data
&----
*& Form print_alv
&----
ALV Function Module
----
FORM print_alv.
Fill the Fiedlcat
PERFORM fieldcat_init using gt_fieldcat[].
gr_layout_bck-edit_mode = 'D'.
gr_layout_bck-colwidth_optimize = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER =
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = g_repid
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = g_user_command
I_CALLBACK_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_END_OF_LIST = ' '
I_STRUCTURE_NAME =
I_BACKGROUND_ID = ' '
I_GRID_TITLE =
I_GRID_SETTINGS =
IS_LAYOUT = gr_layout_bck
IT_FIELDCAT = gt_fieldcat[]
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = g_save
IS_VARIANT =
IT_EVENTS =
IT_EVENT_EXIT =
IS_PRINT =
IS_REPREP_ID =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
IT_ALV_GRAPHICS =
IT_ADD_FIELDCAT =
IT_HYPERLINK =
I_HTML_HEIGHT_TOP =
I_HTML_HEIGHT_END =
IT_EXCEPT_QINFO =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = i_output
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2
.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " print_alv
&----
*& Form fieldcat_init
&----
Fieldcat
----
FORM fieldcat_init USING e01_lt_fieldcat type slis_t_fieldcat_alv.
DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
Material #
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MATNR'.
LS_FIELDCAT-ref_fieldname = 'MATNR'.
LS_FIELDCAT-ref_tabname = 'MARA'.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Material'.
ls_fieldcat-seltext_M = 'Material'.
ls_fieldcat-seltext_S = 'Material'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
Material Description
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MAKTX'.
LS_FIELDCAT-OUTPUTLEN = 35.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Description'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
Price Indicator
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'VPRSV'.
LS_FIELDCAT-OUTPUTLEN = 7.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Price Control Indicator'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
Moving Avg Price
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'VERPR'.
LS_FIELDCAT-OUTPUTLEN = 11.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Moving Avg Price'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
Base Unit of Measure
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MEINS'.
LS_FIELDCAT-OUTPUTLEN = 7.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Base Unit'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
Standard Price
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'STPRS'.
LS_FIELDCAT-OUTPUTLEN = 11.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Standard Price'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
Current Planned Price
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'LPLPR'.
LS_FIELDCAT-OUTPUTLEN = 11.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Current Planned Price'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
Future Planned Price
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'ZPLPR'.
LS_FIELDCAT-OUTPUTLEN = 11.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Future Planned Price'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
Previous Planned Price
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'VPLPR'.
LS_FIELDCAT-OUTPUTLEN = 11.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Previous Planned Price'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
Sales Price
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'KBETR'.
LS_FIELDCAT-OUTPUTLEN = 13.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Sales Price'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
Sales Unit
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'KMEIN'.
LS_FIELDCAT-OUTPUTLEN = 7.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Sales Unit'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
% of Gross Margin
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'MARGIN'.
LS_FIELDCAT-OUTPUTLEN = 13.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = '% of Gross Margin'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
Material Status
CLEAR LS_FIELDCAT.
LS_FIELDCAT-FIELDNAME = 'VMSTA'.
LS_FIELDCAT-OUTPUTLEN = 13.
LS_FIELDCAT-TABNAME = 'I_OUTPUT'.
ls_fieldcat-seltext_L = 'Material Status'.
APPEND LS_FIELDCAT TO E01_LT_FIELDCAT.
ENDFORM. " fieldcat_init
**&----
*
**& Form f4_for_variant
**&----
*
text
**----
*
*FORM f4_for_variant.
*
CALL FUNCTION 'REUSE_ALV_VARIANT_F4'
EXPORTING
is_variant = g_variant
i_save = g_save
i_tabname_header = g_tabname_header
i_tabname_item = g_tabname_item
it_default_fieldcat =
IMPORTING
e_exit = g_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 g_exit = space.
p_vari = gx_variant-variant.
ENDIF.
ENDIF.
*
*
*ENDFORM. " f4_for_variant
&----
*& Form clear_data
&----
Clear the Internal table
----
FORM clear_data.
clear : i_output,
i_join,
i_mbew,
i_a004,
i_pgmi.
refresh : i_output,
i_join,
i_mbew,
i_a004,
i_pgmi.
ENDFORM. " clear_data
----
FORM USER_COMMAND *
----
FORM user_command USING r_ucomm LIKE sy-ucomm
rs_selfield TYPE slis_selfield. "#EC CALLED
CASE R_UCOMM.
WHEN '&IC1'.
read table i_output index rs_selfield-tabindex.
SET PARAMETER ID 'MAT' FIELD i_output-matnr.
SET PARAMETER ID 'WRK' FIELD p_werks.
if not i_output-matnr is initial.
call transaction 'MD04' and skip first screen.
endif.
ENDCASE.
ENDFORM.
BDC Sample Program :
************************************************************************
Report : ZMPPC010
Type : Data upload
Author : Chetan Shah
Date : 05/05/2005
Transport : DV3K919472
Transaction: ??
Description: This ABAP/4 Program creates new Routings (CA21) for SMI
plants. It accepts tab-delimited spreadsheet input and
creates BDC sessions.
*
************************************************************************
Modification Log
Date Programmer Request # Description
************************************************************************
05/05/2005 Chetan Shah DV3K919472 Initial coding
************************************************************************
REPORT zmppc010 NO STANDARD PAGE HEADING LINE-SIZE 120 LINE-COUNT 55
MESSAGE-ID zz.
pool of form routines
INCLUDE ZMPPN001.
Define BDC Table Structure
DATA: BEGIN OF itab_bdc_tab OCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA: END OF itab_bdc_tab.
Input record layout of Leagcy File
DATA: BEGIN OF itab_xcel OCCURS 0,
matnr(18) TYPE c,
werks(4) TYPE c,
datuv(10) TYPE c,
verwe(3) TYPE c,
statu(3) TYPE c,
slwbez(3) TYPE c,
vornr(4) TYPE n,
arbpl(8) TYPE c,
steus(4) TYPE c,
ltxa1(40) TYPE c,
bmsch LIKE PLPOD-BMSCH,
meinh(3) TYPE c,
lar01(6) TYPE c,
vgw01 LIKE PLPOD-VGW01,
vge01(3) TYPE c,
lar02(6) TYPE c,
vgw02 LIKE PLPOD-VGW02,
vge02(3) TYPE c,
lar03(6) TYPE c,
vgw03 LIKE PLPOD-VGW03,
vge03(3) TYPE c,
lar04(6) TYPE c,
vgw04 LIKE PLPOD-VGW04,
vge04(3) TYPE c,
lar05(6) TYPE c,
vgw05 LIKE PLPOD-VGW05,
vge05(3) TYPE c,
lar06(6) TYPE c,
vgw06 LIKE PLPOD-VGW06,
vge06(3) TYPE c,
anzma LIKE PLPOD-ANZMA,
zlmax LIKE PLPOD-ZLMAX,
zeilm(3) TYPE c,
zwnor LIKE PLPOD-ZWNOR,
zeiwn(3) TYPE c,
ztnor LIKE PLPOD-ZTNOR,
zeitn(3) TYPE c,
sortl(10) TYPE c,
lifnr(10) TYPE c,
plifz LIKE PLPOD-PLIFZ,
preis LIKE PLPOD-PREIS,
peinh LIKE PLPOD-PEINH,
sakto(10) TYPE c,
waers(5) TYPE c,
infnr(10) TYPE c,
ekorg(4) TYPE c,
ekgrp(3) TYPE c,
matkl(9) TYPE c,
ebeln(10) TYPE c,
ebelp(5) TYPE c,
qpart(8) TYPE c,
ckselkz(1) TYPE c,
rsanz LIKE PLPOD-RSANZ,
END OF itab_xcel.
DATA: v_ssnnr(4) TYPE n,
v_lines_in_xcel LIKE sy-tabix,
v_ssnname LIKE apqi-groupid,
v_trans_in_ssn TYPE i,
wa_xcel LIKE itab_xcel,
l_tabix like sy-tabix,
v_tcode LIKE sy-tcode VALUE 'CA21'.
Parameters
SELECTION-SCREEN: SKIP 3.
SELECTION-SCREEN: BEGIN OF BLOCK 1 WITH FRAME.
*
PARAMETERS: p_name LIKE rlgrap-filename
DEFAULT 'C:\My Documents\InputFile.txt'
OBLIGATORY,
bdc session name prefix
p_bdcpfx(6) DEFAULT 'ZRTCRT'
OBLIGATORY,
number for transction per BDC session
p_trnssn TYPE i
DEFAULT 2000 OBLIGATORY,
retain the BDC session after successfull execution
p_keep LIKE apqi-qerase
DEFAULT 'X',
user who will be executing BDC session
p_uname LIKE apqi-userid
DEFAULT sy-uname
OBLIGATORY.
*
SELECTION-SCREEN: END OF BLOCK 1.
*
********************************************************
********************************************************
*
possible entry list (F4 dropdown) for input file name
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_name.
*-SELECT FILE FROM USERS LOCAL PC
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = ' '
def_path = 'C:\Temp\'
mask = ',.,..'
mode = 'O'
title = 'Select File '(007)
IMPORTING
filename = p_name
RC =
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
*
********************************************************
********************************************************
*
begin the show
*
START-OF-SELECTION.
read data from input file
PERFORM transfer_xcel_to_itab.
*
*
LOOP AT itab_xcel.
load data in work area, used inside 'at new' block
wa_xcel = itab_xcel.
l_tabix = sy-tabix.
each unique part-plant combn marks begining of new routing defn
AT NEW werks.
if num-of-trnas-in-session = 0, create new BDC session
IF v_trans_in_ssn IS INITIAL.
PERFORM BDC_SESSION_OPEN.
ENDIF.
begin new bdc script for rtg create trans
fill in bdc-data for rtg header screens
PERFORM BDC_BUILD_SCRIPT_FOR_HDR.
ENDAT.
fill in bdc-data for each opertion in the routing
PERFORM BDC_BUILD_SCRIPT_FOR_OPS.
end of all recs corresponding to the unique part-plant combn, marks
the end of routing defn.
AT END OF werks.
fill in the bdc-data to save the routing defn
PERFORM BDC_BUILD_SCRIPT_FOR_TEND.
insert the bdc script as a BDC transaction
PERFORM BDC_SUBMIT_TRANSACTION.
keep track of how many BDC transactions were inserted in the BDC
session
ADD 1 TO v_trans_in_ssn.
if the user-specified num of trans in BDC session is reached OR
if end of input file is reached, close the BDC session
IF v_trans_in_ssn = p_trnssn or
l_tabix = v_lines_in_xcel.
PERFORM BDC_SESSION_CLOSE.
CLEAR v_trans_in_ssn.
ENDIF.
ENDAT.
ENDLOOP.
Top-of-page.
CALL FUNCTION 'Z_HEADER'
EXPORTING
FLEX_TEXT1 =
FLEX_TEXT2 =
FLEX_TEXT3 =
.
----
FORM TRANSFER_XCEL_TO_ITAB *
----
Transfer Xcel Spreadsheet to SAP Internal Table *
----
FORM transfer_xcel_to_itab.
*
Read the tab-delimited file into itab
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
filename = p_name
filetype = 'DAT'
IMPORTING
filelength = flength
TABLES
data_tab = itab_xcel
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_table_width = 4
invalid_type = 5
no_batch = 6
unknown_error = 7
OTHERS = 8.
*
if sy-subrc = 0.
sort the data
SORT itab_xcel BY matnr werks.
CLEAR v_lines_in_xcel.
if no data in the file - error out
DESCRIBE TABLE itab_xcel LINES v_lines_in_xcel.
IF v_lines_in_xcel IS INITIAL.
WRITE: / 'No data in input file'.
STOP.
ENDIF.
else.
if file upload failed - error out
WRITE: / 'Error reading input file'.
STOP.
endif.
ENDFORM.
----
FORM BDC_SESSION_OPEN *
----
Open BDC Session *
----
FORM BDC_SESSION_OPEN.
create bdc session name = prefix-from-selectn-screen + nnnn
ADD 1 TO v_ssnnr.
CONCATENATE p_bdcpfx v_ssnnr INTO v_ssnname.
open new bdc session
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = v_ssnname
keep = p_keep
user = p_uname
EXCEPTIONS
client_invalid = 1
destination_invalid = 2
group_invalid = 3
group_is_locked = 4
holddate_invalid = 5
internal_error = 6
queue_error = 7
running = 8
system_lock_error = 9
user_invalid = 10
OTHERS = 11.
ENDFORM.
----
FORM BDC_BUILD_SCRIPT_FOR_HDR *
----
Build BDC *
----
FORM bdc_build_script_for_hdr.
DATA: l_sttag LIKE rc271-sttag,
l_matnr LIKE rc27m-matnr,
l_mapl LIKE mapl.
clear bdc-data itab - begin of new bdc transaction
CLEAR itab_bdc_tab.
REFRESH itab_bdc_tab.
*
read material cross reference tables to determine sap part#
PERFORM read_matnr_cross_ref USING wa_xcel-matnr
wa_xcel-werks
CHANGING l_matnr.
*
read any existing rtg group counters from MAPL table
clear l_mapl.
select * into l_mapl
from mapl up to 1 rows
where matnr = l_matnr and
werks = wa_xcel-werks and
plnty = 'R' and
loekz = space.
endselect.
*
bdc script for routing header screens
PERFORM BDC_BUILD_SCRIPT_RECORD
*
initial screen
USING: 'X' 'SAPLCPDI' '1010',
' ' 'BDC_OKCODE' '/00',
' ' 'RC27M-MATNR' l_matnr,
' ' 'RC27M-WERKS' wa_xcel-werks,
' ' 'RC271-VBELN' space,
' ' 'RC271-POSNR' space,
' ' 'RC271-PSPNR' space,
' ' 'RC271-PLNNR' space,
' ' 'RC271-AENNR' space,
' ' 'RC271-STTAG' wa_xcel-datuv,
' ' 'RC271-REVLV' space,
' ' 'RC271-PROFIDNETZ' space.
overview screen (lists all existing group counters)
the following screen will be included in bdc only if there was atleast
one good group counter defined already for this part-plant combn
if not l_mapl is initial.
PERFORM BDC_BUILD_SCRIPT_RECORD
USING: 'X' 'SAPLCPDI' '5200',
' ' 'BDC_OKCODE' '=ANLG'.
endif.
header details screen
PERFORM BDC_BUILD_SCRIPT_RECORD
USING: 'X' 'SAPLCPDA' '1200',
' ' 'BDC_OKCODE' '/00',
' ' 'PLKOD-VERWE' wa_xcel-VERWE,
' ' 'PLKOD-STATU' wa_xcel-STATU,
' ' 'PLKOD-SLWBEZ' wa_xcel-SLWBEZ,
header details screen, goto operations overview screen
'X' 'SAPLCPDA' '1200',
' ' 'BDC_OKCODE' '=VOUE'.
*
ENDFORM.
----
FORM BDC_BUILD_SCRIPT_FOR_OPS *
----
Build BDC *
----
FORM BDC_BUILD_SCRIPT_FOR_OPS.
bdc script for routing operations
PERFORM BDC_BUILD_SCRIPT_RECORD
operaions overview screen, insert new line for the operaion
USING: 'X' 'SAPLCPDI' '5400',
' ' 'BDC_CURSOR' 'PLPOD-VORNR(01)',
' ' 'BDC_OKCODE' '=EINF',
operation overview screen, goto operation detail screen
'X' 'SAPLCPDI' '5400',
' ' 'BDC_CURSOR' 'PLPOD-VORNR(01)',
' ' 'BDC_OKCODE' '=PICK',
' ' 'PLPOD-VORNR(01)' wa_xcel-VORNR,
' ' 'PLPOD-ARBPL(01)' wa_xcel-ARBPL,
operation detail screen,
'X' 'SAPLCPDO' '1200',
' ' 'BDC_OKCODE' '/00',
' ' 'PLPOD-STEUS' wa_xcel-STEUS,
' ' 'PLPOD-LTXA1' wa_xcel-LTXA1,
' ' 'PLPOD-BMSCH' wa_xcel-BMSCH,
' ' 'PLPOD-MEINH' wa_xcel-MEINH,
' ' 'PLPOD-VGW01' wa_xcel-VGW01,
' ' 'PLPOD-VGE01' wa_xcel-VGE01,
' ' 'PLPOD-VGW02' wa_xcel-VGW02,
' ' 'PLPOD-VGE02' wa_xcel-VGE02,
' ' 'PLPOD-VGW03' wa_xcel-VGW03,
' ' 'PLPOD-VGE03' wa_xcel-VGE03,
' ' 'PLPOD-VGW04' wa_xcel-VGW04,
' ' 'PLPOD-VGE04' wa_xcel-VGE04,
' ' 'PLPOD-VGW05' wa_xcel-VGW05,
' ' 'PLPOD-VGE05' wa_xcel-VGE05.
*
if no fields in the inputfile for activity#6 (on the screen)
are given then do not include it in the bdc script as they
MIGHT NOT be available on the operation detail screen at all
if not wa_xcel-VGW06 is initial or
not wa_xcel-VGE06 is initial or
not wa_xcel-LAR06 is initial.
PERFORM BDC_BUILD_SCRIPT_RECORD
USING: ' ' 'PLPOD-VGW06' wa_xcel-VGW06,
' ' 'PLPOD-VGE06' wa_xcel-VGE06.
endif.
*
continue with operation detail screen,
PERFORM BDC_BUILD_SCRIPT_RECORD
*
USING: ' ' 'PLPOD-ZLMAX' wa_xcel-ZLMAX,
' ' 'PLPOD-ZEILM' wa_xcel-ZEILM,
' ' 'PLPOD-ZWNOR' wa_xcel-ZWNOR,
' ' 'PLPOD-ZEIWN' wa_xcel-ZEIWN,
' ' 'PLPOD-ZTNOR' wa_xcel-ZTNOR,
' ' 'PLPOD-ZEITN' wa_xcel-ZEITN,
' ' 'PLPOD-RSANZ' wa_xcel-RSANZ,
' ' 'PLPOD-ANZMA' wa_xcel-ANZMA,
' ' 'PLPOD-CKSELKZ' wa_xcel-CKSELKZ,
' ' 'PLPOD-INFNR' wa_xcel-INFNR,
' ' 'PLPOD-EKORG' wa_xcel-EKORG,
' ' 'PLPOD-EBELN' wa_xcel-EBELN,
' ' 'PLPOD-EBELP' wa_xcel-EBELP,
' ' 'PLPOD-SORTL' wa_xcel-SORTL,
' ' 'PLPOD-MATKL' wa_xcel-MATKL,
' ' 'PLPOD-EKGRP' wa_xcel-EKGRP,
' ' 'PLPOD-LIFNR' wa_xcel-LIFNR,
' ' 'PLPOD-PLIFZ' wa_xcel-PLIFZ,
' ' 'PLPOD-PEINH' wa_xcel-PEINH,
' ' 'PLPOD-SAKTO' wa_xcel-SAKTO,
' ' 'PLPOD-PREIS' wa_xcel-PREIS,
' ' 'PLPOD-WAERS' wa_xcel-WAERS,
' ' 'PLPOD-QPART' wa_xcel-QPART,
operation detail screen, go to the op overview scrn to add another op
'X' 'SAPLCPDO' '1200',
' ' 'BDC_OKCODE' '=BACK'.
ENDFORM.
----
FORM BDC_BUILD_SCRIPT_FOR_TEND *
----
Build BDC *
----
FORM BDC_BUILD_SCRIPT_FOR_TEND.
operatin detail screen, save the routing defn
PERFORM BDC_BUILD_SCRIPT_RECORD
*
USING: 'X' 'SAPLCPDI' '5400',
' ' 'BDC_OKCODE' '=BU'.
ENDFORM.
----
FORM BDC_SUBMIT_TRANSACTION *
----
Submit BDC Session *
----
FORM BDC_SUBMIT_TRANSACTION.
Load BDC script as a trqansction in BDC session
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = v_tcode
TABLES
dynprotab = itab_bdc_tab
EXCEPTIONS
internal_error = 01
not_open = 02
queue_error = 03
tcode_invalid = 04.
ENDFORM.
----
FORM BDC_BUILD_SCRIPT_RECORD *
----
FORM BDC_BUILD_SCRIPT_RECORD USING dynbegin name value.
CLEAR itab_bdc_tab.
IF dynbegin = 'X'.
MOVE: name TO itab_bdc_tab-program,
value TO itab_bdc_tab-dynpro,
'X' TO itab_bdc_tab-dynbegin.
ELSE.
MOVE: name TO itab_bdc_tab-fnam,
value TO itab_bdc_tab-fval.
SHIFT itab_bdc_tab-fval LEFT DELETING LEADING SPACE.
ENDIF.
APPEND itab_bdc_tab.
ENDFORM.
----
FORM BDC_SESSION_CLOSE *
----
Close BDC Session *
----
FORM BDC_SESSION_CLOSE.
close the session
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
not_open = 1
queue_error = 2
OTHERS = 3.
SKIP 2.
IF sy-subrc NE 0.
WRITE: / 'Error Closing BDC Session ' , 'RETURN CODE: ', sy-subrc.
ELSE.
WRITE : / 'Session created:', v_ssnname,
50 '# of transactions:', v_trans_in_ssn.
ENDIF.
ENDFORM.
************************************************************************
Report : ZMPPN001
Type : Include
Author : Chetan Shah
Date : 05/05/2005
Transport : DV3K919472
Transaction: ??
Description: Common miscelleneous form routines used in more then
one program
*
************************************************************************
Modification Log
Date Programmer Request # Description
************************************************************************
05/05/2005 Chetan Shah DV3K919472 Initial coding
************************************************************************
----
INCLUDE ZMPPN001 *
----
&----
*& Form read_matnr_cross_ref
&----
FORM read_matnr_cross_ref USING pi_matnr "SMI legacy part#
pi_werks "SMI plant
CHANGING pe_matnr. "SAP part#
DATA: l_tablename(20) TYPE c.
pi_matnr = SMI legacy part#
pi_werks = SMI plant
pe_matnr = SAP part#
based in given plant#, decide which cross-reference
table is to be used
CASE pi_werks.
WHEN '0101'.
l_tablename = 'ZMSMI_SIMP_RAW'.
WHEN '0103'.
l_tablename = 'ZMSMI_FERR_RAW'.
WHEN OTHERS.
this is basically snapper plant (0102) and all its related
warehouse-plants. Plant 0110 which is a warehouse-plant for
snapper can have production parts.
l_tablename = 'ZMSMI_SNAP_RAW'.
ENDCASE.
read the cross-reference
CLEAR pe_matnr.
SELECT SINGLE cmatnr INTO pe_matnr
FROM (l_tablename)
WHERE matnr = pi_matnr.
if the cross-reference table had SAP-part# as blank OR
if the cross-reference read failed,
return back the SMI part#
IF pe_matnr IS INITIAL OR
sy-subrc NE 0.
pe_matnr = pi_matnr.
ENDIF.
ENDFORM. " read_matnr_cross_ref
ALE Sample program :
look at BD10 Transaction to send materials
Reward Points if it is helpful
Thanks
Seshu