‎2007 Dec 05 4:40 PM
Hello friends,
Could any give me program for Sales order and purchase order for both call transaction and Session method with error handling.
‎2007 Dec 05 4:45 PM
Hi,
Check the thread below
For BDC:
http://myweb.dal.ca/hchinni/sap/bdc_home.htm
https://www.sdn.sap.com/irj/sdn/wiki?path=/display/home/bdc&;
http://www.sap-img.com/abap/learning-bdc-programming.htm
http://www.sapdevelopment.co.uk/bdc/bdchome.htm
http://www.sap-img.com/abap/difference-between-batch-input-and-call-transaction-in-bdc.htm
http://help.sap.com/saphelp_47x200/helpdata/en/69/c250684ba111d189750000e8322d00/frameset.htm
http://www.sapbrain.com/TUTORIALS/TECHNICAL/BDC_tutorial.html
Check these link:
http://www.sap-img.com/abap/difference-between-batch-input-and-call-transaction-in-bdc.htm
http://www.sap-img.com/abap/question-about-bdc-program.htm
http://www.itcserver.com/blog/2006/06/30/batch-input-vs-call-transaction/
http://www.planetsap.com/bdc_main_page.htm
Cheers
VJ
‎2007 Dec 05 4:50 PM
Hi Sunil,
Please check Naveen's code from the following thread :
https://forums.sdn.sap.com/click.jspa?searchID=7192985&messageID=1629601
Thanks,
Reward If Helpful.
‎2007 Dec 05 4:54 PM
Hi,
Please find the code below,
************************************************************************
PROGRAM NAME: ZSDRBD55 AUTHOR: Sridhar Pulicherla(SP34316)
CREATE DATE : 03/26/07
TRANSACTION :
*
DESCRIPTION : Program to change the orders from the excel file,
adding another line to the exsisting order
(Copy of the old program from 4.7)
EXTERNAL
REFERENCES : None
*
MODIFICATIONS:
DATE PGMR MODIFICATION
mm/dd/yy xxxxxxxxxxxx (brief desc.; include Remedy Ticket #)
************************************************************************
REPORT zsdrbd55 NO STANDARD PAGE HEADING MESSAGE-ID zs .
DATA : l_vbeln LIKE vbak-vbeln,
l_matnr LIKE mara-matnr,
l_werks LIKE t001w-werks,
l_pstyv LIKE vbap-pstyv,
l_vbeln1 LIKE vbak-vbeln,
l_flag(1) TYPE c,
l_matnr1 LIKE mara-matnr.
DATA: group LIKE apqi-groupid VALUE 'ZSDRBD55'.
DATA: l_finame TYPE rlgrap-filename.
DATA: t_tab TYPE alsmex_tabline OCCURS 0 WITH HEADER LINE.
DATA: BEGIN OF t_vbak OCCURS 0,
vbeln TYPE vbak-vbeln,
matnr TYPE vbap-matnr,
werks TYPE vbap-werks,
menge TYPE vbap-zmeng,
pstyv type vbap-pstyv,
END OF t_vbak,
begin of t_vbap occurs 0,
vbeln type vbap-vbeln,
posnr type vbap-posnr,
end of t_vbap.
DATA: BEGIN OF t_error OCCURS 0,
value TYPE char50,
message TYPE char72,
END OF t_error.
data: l type c,
v_pstyv(20) type C,
v_matnr(20) type C,
v_menge(20) type C,
v_werks(20) type C.
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_finame TYPE rlgrap-filename OBLIGATORY.
SELECTION-SCREEN: END OF BLOCK b1.
DATA: BEGIN OF bdc_tab OCCURS 0.
INCLUDE STRUCTURE bdcdata.
DATA: END OF bdc_tab.
DATA : BEGIN OF t_error_log OCCURS 0,
data(200) TYPE c,
END OF t_error_log.
*CONSTANTS : c_tan(3) TYPE c VALUE 'TAN',
c_tann(4) TYPE c VALUE 'TANN',
c_10 LIKE vbap-posnr VALUE '10'.
INITIALIZATION.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_finame.
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
PROGRAM_NAME = SYST-REPID
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME = ' '
STATIC = ' '
MASK = ' '
CHANGING
file_name = p_finame
EXCEPTIONS
mask_too_long = 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.
AT SELECTION-SCREEN.
*Declaration of local variables
DATA: l_path TYPE rlgrap-filename,
l_name TYPE string.
DATA: t_dir TYPE rlgrap-filename OCCURS 0.
*Split the filename and the file path
CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH'
EXPORTING
full_name = p_finame
IMPORTING
stripped_name = l_name
file_path = l_path
EXCEPTIONS
x_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.
CALL FUNCTION 'KCD_FRONT_END_DIRECTORY_READ'
EXPORTING
i_path = l_path
IMPORTING
E_PURE_PATH =
TABLES
e_directory = t_dir
EXCEPTIONS
download = 1
upload = 2
execute = 3
directory_not_exist = 4
directory = 5
OTHERS = 6
.
IF sy-subrc <> 0.
MESSAGE e999 WITH text-004.
ENDIF.
CALL FUNCTION 'STRING_REVERSE'
EXPORTING
string = p_finame
lang = 'E'
IMPORTING
rstring = l_finame
EXCEPTIONS
too_small = 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.
CONDENSE l_finame.
TRANSLATE l_finame TO UPPER CASE.
IF l_finame(3) NE 'SLX'.
MESSAGE e999 WITH text-003.
ENDIF.
START-OF-SELECTION.
PERFORM sub_download_data.
PERFORM open_bdc_group.
&----
*& Form sub_download_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM sub_download_data .
CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
EXPORTING
filename = p_finame
i_begin_col = 1
i_begin_row = 1
i_end_col = 255
i_end_row = 65535
TABLES
intern = t_tab
EXCEPTIONS
inconsistent_parameters = 1
upload_ole = 2
OTHERS = 3.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*Populate the internal tables into the order table to be
*populated with
CLEAR : t_vbak,
t_error_log,
l_flag.
REFRESH : t_vbak,
t_error_log.
LOOP AT t_tab.
*Populate the individual column numbers.
CASE t_tab-col.
WHEN '0001'.
*Check the order number doesnot exceed 10 characters
IF NOT STRLEN( t_tab-value ) GT 10.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = t_tab-value
IMPORTING
output = l_vbeln1.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
SELECT SINGLE vbeln
INTO l_vbeln
FROM vbak
WHERE vbeln EQ l_vbeln1.
IF sy-subrc EQ 0.
MOVE t_tab-value TO t_vbak-vbeln.
ELSE.
CONCATENATE text-015
space
t_tab-value
text-006
INTO t_error_log-data.
l_flag = 'X'.
CONTINUE.
ENDIF.
ELSE.
CONCATENATE text-015
space
t_tab-value
text-005
INTO t_error_log-data.
l_flag = 'X'.
CONTINUE.
ENDIF.
Check for Material No. - should not exceed 18 char's
WHEN '0002'.
IF NOT STRLEN( t_tab-value ) GT 18.
move t_tab-value to l_matnr1.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = t_tab-value
IMPORTING
output = t_tab-value.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
SELECT SINGLE matnr
INTO l_matnr
FROM mara
WHERE matnr EQ t_tab-value.
IF sy-subrc EQ 0.
MOVE t_tab-value TO t_vbak-matnr.
ELSE.
CONCATENATE text-015
space
t_vbak-vbeln
space
text-007
l_matnr1
INTO t_error_log-data.
l_flag = 'X'.
CONTINUE.
ENDIF.
ELSE.
CONCATENATE text-015
space
t_vbak-vbeln
space
text-008
t_tab-value
INTO t_error_log-data.
l_flag = 'X'.
CONTINUE.
ENDIF.
Check for Plant - Should not exceed 4 char's
WHEN '0003'.
IF NOT STRLEN( t_tab-value ) GT 4.
SELECT SINGLE werks
INTO l_werks
FROM t001w
WHERE werks EQ t_tab-value.
IF sy-subrc EQ 0.
MOVE t_tab-value TO t_vbak-werks.
ELSE.
CONCATENATE text-015
space
t_vbak-vbeln
space
text-009
t_tab-value
INTO t_error_log-data.
l_flag = 'X'.
CONTINUE.
ENDIF.
ELSE.
CONCATENATE text-015
space
t_vbak-vbeln
space
text-010
t_tab-value
INTO t_error_log-data.
l_flag = 'X'.
CONTINUE.
ENDIF.
WHEN '0004'.
IF NOT t_tab-value IS INITIAL.
MOVE t_tab-value TO t_vbak-menge.
ELSE.
CONCATENATE text-015
space
t_vbak-vbeln
space
t_tab-value
text-010
INTO t_error_log-data.
l_flag = 'X'.
CONTINUE.
ENDIF.
WHEN '0005'.
IF NOT t_tab-value IS INITIAL.
MOVE t_tab-value TO t_vbak-pstyv.
ELSE.
CONCATENATE text-015
space
t_vbak-vbeln
space
t_tab-value
text-010
INTO t_error_log-data.
l_flag = 'X'.
CONTINUE.
ENDIF.
WHEN OTHERS.
move sy-tabix to t_error_log-rec_no.
CONCATENATE text-015
space
t_vbak-vbeln
space
t_tab-value
text-014
INTO t_error_log-data.
ENDCASE.
AT END OF row.
IF NOT l_flag EQ 'X'.
APPEND: t_vbak.
CLEAR: t_vbak,
l_flag.
else.
APPEND: t_error_log.
CLEAR: t_vbak,
t_error_log.
ENDIF.
ENDAT.
ENDLOOP.
ENDFORM. " sub_download_data
&----
*& Form open_bdc_group
&----
text
----
--> p1 text
<-- p2 text
----
FORM open_bdc_group .
IF t_vbak[] IS NOT INITIAL.
Open batch input Group
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = group
keep = 'X'
user = sy-uname.
USER = 'BACKGROUND'.
LOOP AT t_vbak.
IF NOT t_vbak-vbeln IS INITIAL.
unpack t_vbak-vbeln to l_vbeln1.
select vbeln posnr from vbap
into table t_vbap
where vbeln EQ l_vbeln1.
describe table t_vbap lines l.
l = l + 1.
PERFORM generate_bdc_data.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = 'VA02'
TABLES
dynprotab = bdc_tab.
ENDIF.
ENDLOOP.
CALL FUNCTION 'BDC_CLOSE_GROUP'.
SUBMIT rsbdcsub USING SELECTION-SET 'ZSDRBD55' AND RETURN.
DELETE ADJACENT DUPLICATES FROM t_error_log.
PERFORM disp_error_log.
ELSE.
WRITE : text-100.
ENDIF.
ENDFORM. " open_bdc_group
&----
*& Form generate_bdc_data
&----
text
----
--> p1 text
<-- p2 text
----
FORM generate_bdc_data .
REFRESH bdc_tab.
PERFORM dynpro USING:
'X' 'SAPMV45A' '0102', "Initial screen
' ' 'BDC_CURSOR' 'VBAK-VBELN',
' ' 'BDC_OKCODE' '/00',
' ' 'VBAK-VBELN' t_vbak-vbeln.
PERFORM dynpro USING:
'X' 'SAPMV45A' '4001', "Sales Ord Change screen
'X' 'BDC_OKCODE' '=POAN',
' ' 'BDC_CURSOR' 'RV45A-MABNR(01)',
'X' 'SAPMV45A' '4001',
' ' 'BDC_OKCODE' '=SICH'.
concatenate 'RV45A-MABNR(0' l ')' into v_matnr.
condense v_matnr.
concatenate 'RV45A-KWMENG(0' l ')' into v_menge.
condense v_menge.
concatenate 'VBAP-PSTYV(0' l ')' into v_pstyv.
condense v_pstyv.
concatenate 'VBAP-WERKS(0' l ')' into v_werks.
condense v_werks.
PERFORM dynpro USING:
' ' 'BDC_CURSOR' v_werks, "2nd line itm material
' ' 'RV45A-MABNR(03)' t_vbak-matnr,
' ' v_matnr t_vbak-matnr,
' ' 'BDC_CURSOR' 'RV45A-KWMENG(02)', "2nd line itm qty
' ' 'RV45A-KWMENG(03)' t_vbak-menge,
' ' v_MENGE t_vbak-menge,
' ' 'BDC_CURSOR' 'VBAP-PSTYV(02)', "2nd line Itm catg "TANN"
' ' 'VBAP-PSTYV(03)' t_vbak-pstyv,
' ' v_pstyv t_vbak-pstyv,
' ' 'BDC_CURSOR' 'VBAP-WERKS(02)', "2nd line plant
' ' 'VBAP-WERKS(03)' t_vbak-werks,
' ' v_werks t_vbak-werks.
' ' 'BDC_OKCODE' '=SICH'.
' ' 'BDC_OKCODE' '/00'.
ENDFORM. " generate_bdc_data
&----
*& Form dynpro
&----
text
----
-->P_ENDFORM text
----
FORM dynpro USING dynbegin name value.
CLEAR bdc_tab.
IF dynbegin = 'X'.
MOVE: name TO bdc_tab-program,
value TO bdc_tab-dynpro,
'X' TO bdc_tab-dynbegin.
APPEND bdc_tab.
ELSE.
MOVE: name TO bdc_tab-fnam,
value TO bdc_tab-fval.
IF bdc_tab-fnam EQ 'RV45A-KWMENG(02)'.
CONDENSE bdc_tab-fval.
ENDIF.
APPEND bdc_tab.
ENDIF.
ENDFORM. " DYNPRO
&----
*& Form disp_error_log
&----
text
----
--> p1 text
<-- p2 text
----
FORM disp_error_log .
IF NOT t_error_log[] IS INITIAL.
LOOP AT t_error_log.
AT FIRST.
WRITE:/ text-012.
SKIP.
ENDAT.
WRITE:/ t_error_log-data.
ENDLOOP.
ELSE.
WRITE:/ text-013.
ENDIF.
ENDFORM. " disp_error_log
Thanks
Amjad.