03-28-2007 3:53 PM
03-28-2007 3:55 PM
REPORT zsdcidoc NO STANDARD PAGE HEADING LINE-SIZE 160.
*----
OBJECT NAME: ZSDCIDOC
OBJECT TYPE: Executable Program
*----
DESCRIPTION: Create Sales Documents on variances in
Consignment/InPlant physical inventory.
*----
PROGRAM CHANGE LOG:
NAME DATE DESCRIPTION OF CHANGE
*----
VOOTKURA 11/19/99 Initial release
VOOTKURA 11/28/99 Don't create BDC session on errors
VOOTKURA 01/10/2000 On Sales Ord, ReqDelDate=CountDate
VOOTKURA 01/14/2000 Make ReqDelDate=PlannedCountDate
*
*----
DB TABLES
************************************************************************
Mod. By Date Description Transport *
NEMANIR 23/08/2006 Modified for Unicode Compliance DEVK914940 *
in lines 492, 527-529, 646
VIGNESWARAN S 01/03/2007 Corrected BDC Recording To
Create Sale Order *
************************************************************************
TABLES: mkpf, "Material Document Header
t9ip, "In-plants - user table
iseg, "Physical Inventory Document Items
ikpf. "Header: Physical Inventory Document
Internal tables
DATA: BEGIN OF tiseg OCCURS 0,
iblnr LIKE iseg-iblnr,
gjahr LIKE iseg-gjahr,
zeili LIKE iseg-zeili,
matnr LIKE iseg-matnr,
werks LIKE iseg-werks,
charg LIKE iseg-charg,
sobkz LIKE iseg-sobkz,
kunnr LIKE iseg-kunnr,
zldat LIKE iseg-zldat,
budat LIKE iseg-budat,
xzael LIKE iseg-xzael,
xdiff LIKE iseg-xdiff,
xnzae LIKE iseg-xnzae,
xloek LIKE iseg-xloek,
xamei LIKE iseg-xamei,
buchm LIKE iseg-buchm,
xnull LIKE iseg-xnull,
menge LIKE iseg-menge,
meins LIKE iseg-meins,
erfmg LIKE iseg-erfmg,
erfme LIKE iseg-erfme,
crdr_ind(1),
ord_type(4),
ord_rsn(3),
qty_p TYPE p DECIMALS 3, "03/02/00
qty(13),
qty_c(13),
uom_conv(3),
END OF tiseg.
DATA: tiseg2 LIKE tiseg OCCURS 0 WITH HEADER LINE.
DATA: tiseg3 LIKE tiseg OCCURS 0 WITH HEADER LINE.
Internal table BDC_TAB has BDCDATA
DATA: bdc_tab LIKE bdcdata OCCURS 5 WITH HEADER LINE.
Internal table MESSTAB - Message table for use in Call transaction
DATA: BEGIN OF messtab OCCURS 5.
INCLUDE STRUCTURE bdcmsgcoll.
DATA: END OF messtab.
TXMSG has info on call trans output
DATA: BEGIN OF txmsg OCCURS 0,
tx(4),
success,
type LIKE vbak-auart,
reason(4),
zldat(10),
matnr LIKE iseg-matnr,
comments(100),
END OF txmsg.
DATA DEFINITIONS - Structures
DATA: outrec LIKE tiseg.
DATA DEFINITIONS - Constants
DATA: ord_reason_zke(3) VALUE 'O05',
ord_reason_zkr(3) VALUE 'O05',
ord_reason_zmor(3) VALUE 'O08',
ord_reason_zmre(3) VALUE 'O08'.
DATA DEFINITIONS - Counters
DATA: tx_va01_ok(3) TYPE n VALUE 0,
tx_va01_err(3) TYPE n VALUE 0,
tx_va01_sub(3) TYPE n VALUE 0,
tx_mi02_ok(3) TYPE n VALUE 0,
tx_mi02_err(3) TYPE n VALUE 0,
tx_mi02_sub(3) TYPE n VALUE 0,
n(5) TYPE n VALUE 0.
DATA DEFINITIONS - Miscellaneous
DATA: stock_ind LIKE iseg-sobkz,
inplant_customer LIKE t9ip-kunnr,
qty_p TYPE p DECIMALS 3,
qty_c(13),
qty_c(13) type p decimals 3,
qty_c type p decimals 3,
vmsgno(3) TYPE n,
count_date(10), "Date of the document
bdc_open_flag,
call_mode,
msg LIKE message,
prt_cnt TYPE i,
session_name(12),
tx_rc,
loop_cnt TYPE i,
ikpf_gidat(10).
Parameter Definitions
SELECTION-SCREEN SKIP 2.
SELECTION-SCREEN BEGIN OF BLOCK pgm.
SELECTION-SCREEN SKIP 1.
PARAMETERS: p_doc# LIKE zpinv-iblnr OBLIGATORY,
p_year LIKE iseg-gjahr OBLIGATORY.
SELECTION-SCREEN SKIP.
PARAMETERS: p_org LIKE vbak-vkorg DEFAULT '1000',
p_chnl LIKE vbak-vtweg DEFAULT '01',
p_div LIKE vbak-spart DEFAULT '00'.
SELECTION-SCREEN END OF BLOCK pgm.
SELECTION-SCREEN SKIP 2.
*parameters: testmode as checkbox default space.
*----
INITIALIZATION
*----
INITIALIZATION.
p_year = sy-datum(4).
*----
START-OF-SELECTION
*----
START-OF-SELECTION.
Initialize
PERFORM init.
Get data from the Phy Inv Document (PID)
The PID entered should be for Consignment or In-plant
PERFORM get_data_frm_phy_inv_doc.
Build transactions for order processing
PERFORM build_order_trans.
Submit orders
PERFORM submit_order_transactions.
If orders went through, set delete indicator on the PID's
IF tx_va01_err IS INITIAL.
PERFORM set_pid_delete.
ENDIF.
Wrapup
PERFORM wrapup.
************************************************************************
END-OF-SELECTION
************************************************************************
END-OF-SELECTION.
----
FORM INIT *
----
........ *
----
FORM init.
CLEAR: stock_ind,
inplant_customer.
call_mode = 'N'. "No display
if testmode = 'X'.
call_mode = 'A'. "Display mode
endif.
ENDFORM. "INIT
----
FORM GET_DATA_FRM_PHY_INV_DOC *
----
........ *
----
FORM get_data_frm_phy_inv_doc.
VALIDATE PID AT THE HEADER LEVEL
PERFORM validate_pid.
GET DATA AT ITEM LEVEL
SELECT * FROM iseg
INTO CORRESPONDING FIELDS OF TABLE tiseg
WHERE iblnr = p_doc# AND gjahr = p_year AND
xnzae <> 'X' AND "NOT RECOUNT
xloek <> 'X' AND "NOT DELETED
xzael = 'X' AND "COUNTED
zldat <> '00000000'. "COUNT POSTED "redundant?
IF sy-subrc <> 0.
FORMAT INTENSIFIED OFF.
WRITE: / 'NO QUALIFIED ENTRIES WERE FOUND FOR THE PHY INV DOCUMENT',
p_doc#.
STOP.
Is it Consignment?
ELSE.
LOOP AT tiseg FROM 1 TO 1.
ENDLOOP.
IF tiseg-sobkz <> 'W'.
In-Plant?
SELECT SINGLE * FROM t9ip
WHERE werks = tiseg-werks.
IF sy-subrc = 0.
MOVE t9ip-kunnr TO inplant_customer.
Neither
ELSE.
CLEAR inplant_customer.
MESSAGE ID 'ZS' TYPE 'I' NUMBER '909' WITH p_doc#.
STOP.
ENDIF.
ENDIF.
ENDIF.
FORMAT COLOR 6 OFF.
ENDFORM. "GET_DATA_FRM_PHY_INV_DOC
----
FORM VALIDATE_PID *
----
........ *
----
FORM validate_pid.
CLEAR inplant_customer.
VALIDATE
FORMAT COLOR 6 ON.
FORMAT INTENSIFIED OFF.
CLEAR ikpf_gidat.
SELECT SINGLE * FROM ikpf
WHERE iblnr = p_doc# AND gjahr = p_year.
IF sy-subrc <> 0.
WRITE: / 'NO ENTRY FOUND FOR THE PHY INV DOCUMENT', p_doc#.
STOP.
ELSE.
IF ikpf-zstat <> 'X'.
WRITE: / 'THE PHY INV DOCUMENT', p_doc#,
'INDICATES THAT ALL ITEMS HAVE NOT BEEN COUNTED'.
STOP.
ENDIF.
IF ikpf-lstat = 'X'.
WRITE: / 'THE PHY INV DOCUMENT', p_doc#,
'INDICATES THAT ALL ITEMS HAVE ALREADY BEEN DELETED'.
STOP.
ENDIF.
Save Planned Count date "01/14/2000
CONCATENATE ikpf-gidat4(2) '/' ikpf-gidat6(2) '/'
ikpf-gidat(4) INTO ikpf_gidat.
ENDIF.
ENDFORM. "VALIDATE_PID
----
FORM BUILD_ORDER_TRANS *
----
........ *
----
FORM build_order_trans.
Get Sales details in to internal table TISEG
SORT tiseg BY iblnr zeili.
LOOP AT tiseg.
IF tiseg-buchm <> tiseg-menge.
BOOKED QTY - COUNTED
tiseg-qty = tiseg-buchm - tiseg-menge.
tiseg-qty_p = tiseg-qty. "03/02/00
MODIFY tiseg.
ENDIF.
ENDLOOP.
Now, prepare data for BDC
LOOP AT tiseg.
If inplant_customer is filled in, take that for customer number
IF NOT inplant_customer IS INITIAL.
tiseg-kunnr = inplant_customer.
ENDIF.
Convert UOM from internal to external presentation
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
input = tiseg-meins
language = sy-langu
IMPORTING
output = tiseg-uom_conv
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
Identify Order Type (Booked-counted<0,CR-ZKE-ZMRE else DR-ZKR-ZMOR)
IF tiseg-qty_p < 0.
tiseg-crdr_ind = 'C'.
tiseg-qty = ABS( tiseg-qty ).
Consignment
IF inplant_customer IS INITIAL.
tiseg-ord_type = 'ZKR '.
tiseg-ord_rsn = ord_reason_zkr.
InPlant
ELSE.
tiseg-ord_type = 'ZMRE'.
tiseg-ord_rsn = ord_reason_zmre.
ENDIF.
ELSEIF tiseg-qty_p > 0.
tiseg-crdr_ind = 'D'.
Consignment
IF inplant_customer IS INITIAL.
tiseg-ord_type = 'ZKE '.
tiseg-ord_rsn = ord_reason_zke.
InPlant
ELSE.
tiseg-ord_type = 'ZMOR'.
tiseg-ord_rsn = ord_reason_zmor.
ENDIF.
ELSE.
tiseg-crdr_ind = 'X'. "No orders on these
CLEAR: tiseg-ord_rsn, tiseg-ord_type.
ENDIF.
Get qty in char format
qty_p = tiseg-qty.
MOVE qty_p TO: qty_c, tiseg-qty_c.
Update tiseg with the new fields.
MODIFY tiseg.
ENDLOOP.
tiseg2[] = tiseg[].
LOOP AT tiseg WHERE crdr_ind = 'X'.
DELETE tiseg.
ENDLOOP.
tiseg3[] = tiseg[].
ENDFORM. "BUILD_ORDER_TRANS
----
FORM SUBMIT_ORDER_TRANSACTIONS *
----
........ *
----
FORM submit_order_transactions.
SORT tiseg BY crdr_ind matnr.
n = 1.
LOOP AT tiseg.
Change in CR/DR order type, save and call Trans
ON CHANGE OF tiseg-crdr_ind.
IF n > 1.
PERFORM fill_bdc_save.
PERFORM call_trans USING 'VA01'.
n = 1.
ENDIF.
ENDON.
outrec = tiseg.
IF n = 1.
PERFORM fill_bdc1. "Screen 1 & hdr of screen 2
ENDIF.
PERFORM fill_bdc2. "Materials on screen 2
n = n + 1.
Last record, save and call Trans
AT LAST.
PERFORM fill_bdc_save.
PERFORM call_trans USING 'VA01'.
ENDAT.
ENDLOOP.
ENDFORM. "SUBMIT_ORDER_TRANSACTIONS
----
FORM FILL_BDC1 *
----
........ *
----
FORM fill_bdc1.
Create Sales Order - Initial Screen
PERFORM dynpro USING: 'X' 'SAPMV45A' '0101' ,
' ' 'VBAK-AUART' outrec-ord_type,
' ' 'VBAK-VKORG' p_org , "Sales org
' ' 'VBAK-VTWEG' p_chnl , "Distr Channel
' ' 'VBAK-SPART' p_div , "Div
' ' 'BDC_OKCODE' '/00' . "Enter
CONCATENATE outrec-zldat4(2) '/' outrec-zldat6(2) '/'
outrec-zldat(4) INTO count_date.
Create Phy Inv Credit/Debit: Overview
PERFORM dynpro USING:
'X' 'SAPMV45A' '0400' , ""Changed on 22.01.07
'X' 'SAPMV45A' '4001' ,
' ' 'KUAGV-KUNNR' outrec-kunnr ,
' ' 'VBAK-BSTDK' count_date . " Changed on 22.01.07
' ' 'VBKD-BSTDK' count_date .
IF outrec-ord_type <> 'ZKR '.
PERFORM dynpro USING:
' ' 'RV45A-KETDAT' ikpf_gidat . "Planned deliv date 01/14/00
ENDIF.
*****Start Added on 26/02/2007
***Pick Sales TAB in VA01 for updating Ordering Reason
PERFORM dynpro USING : ' ' 'BDC_OKCODE' '=T\01',
'X' 'SAPMV45A' '4001',
' ' 'VBAK-AUGRU' outrec-ord_rsn. " 'C25'.
***Come back to Item Overview Tab in VA01 for inserting Plant
PERFORM dynpro USING : 'X' 'SAPMV45A' '4001',
' ' 'BDC_OKCODE' '=T\02'.
End of Add on 26/02/2007
PERFORM dynpro USING : 'X' 'SAPMV45A' '4001',
' ' 'RV45A-DWERK' outrec-werks , "Deliv Plant
' ' 'BDC_OKCODE' '/00' , "Hdr-Bus Data
'X' 'SAPMV45A' '4001' .
ENDFORM. "FILL_BDC1
----
FORM FILL_BDC2 *
----
FORM fill_bdc2.
IF n = 4. "4 double entries per page
n = 2. "On the next page start from 2nd line
PERFORM ldynpro USING:
' ' 'BDC_OKCODE' '/20' 0, "Create item
'X' 'SAPMV45A' '0400' 0. "Changed on 22.01.07
'X' 'SAPMV45A' '4001' 0.
ENDIF.
PERFORM ldynpro USING:
' ' 'VBAP-MATNR' outrec-matnr n, "Material
' ' 'RV45A-KWMENG' outrec-qty_c n, "Quantity
' ' 'VBAP-VRKME' outrec-uom_conv n, "UoM
' ' 'RV45A-ETDAT' ikpf_gidat n, "Del Date 1
' ' 'VBAP-CHARG' outrec-charg n. "Batch#
PERFORM ldynpro USING:
' ' 'BDC_OKCODE' '/00' 0, "Enter
'X' 'SAPMV45A' '0400' 0. ""Changed on 22.01.07
'X' 'SAPMV45A' '4001' 0.
ENDFORM. "FILL_BDC2
----
FORM FILL_BDC3 *
----
FORM fill_bdc_save.
PERFORM dynpro USING:
' ' 'BDC_OKCODE' '/11' . "Save
ENDFORM. "FILL_BDC_SAVE
----
FORM DYNPRO
----
--> DYNBEGIN *
--> NAME *
--> VALUE *
----
*------Begin of SAP Unicode changes - <23/08/2006>
FORM dynpro USING dynbegin TYPE c " Unicode change
name TYPE bdc_prog
value TYPE clike.
*------End of SAP Unicode chnages - <23/08/2006>
CLEAR bdc_tab.
IF dynbegin = 'X'.
MOVE: name TO bdc_tab-program,
value TO bdc_tab-dynpro,
'X' TO bdc_tab-dynbegin.
ELSE.
MOVE: name TO bdc_tab-fnam,
value TO bdc_tab-fval.
ENDIF.
IF NOT value IS INITIAL.
APPEND bdc_tab.
ENDIF.
ENDFORM. "DYNPRO
----
FORM LDYNPRO *
----
--> DYNBEGIN *
--> NAME *
--> VALUE *
--> N *
----
*------Begin of SAP unicode changes - <23/08/2006>
FORM ldynpro USING dynbegin TYPE c "Unicode change
name TYPE bdc_prog
value TYPE clike
n TYPE n.
*------End of SAp Unicode changes - <23/08/2006>
CLEAR bdc_tab.
IF dynbegin = 'X'.
MOVE: name TO bdc_tab-program,
value TO bdc_tab-dynpro,
'X' TO bdc_tab-dynbegin.
ELSE.
IF n <> 0.
CONCATENATE name '(' n ')' INTO bdc_tab-fnam.
ELSE.
MOVE name TO bdc_tab-fnam.
ENDIF.
MOVE value TO bdc_tab-fval.
ENDIF.
IF NOT value IS INITIAL.
APPEND bdc_tab.
ENDIF.
ENDFORM. "LDYNPRO
----
FORM BDC_INSERT *
----
........ *
----
--> TCODE *
----
FORM bdc_insert USING tcode.
DATA: l_tcode TYPE sy-tcode. "Added on 26/02/2007
IF bdc_open_flag = ' '.
CONCATENATE 'ZS' p_doc# INTO session_name.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = session_name
user = sy-uname
keep = 'X'.
ENDIF.
l_tcode = tcode. "Added on 26/02/2007
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = l_tcode
TABLES
dynprotab = bdc_tab.
bdc_open_flag = 'X'.
ENDFORM. "bdc_insert using tcode
----
FORM SET_PID_DELETE *
----
........ *
----
FORM set_pid_delete.
Set Delete Ind on the items covered by the prev trans
REFRESH tiseg. CLEAR tiseg.
tiseg[] = tiseg2[].
SORT tiseg BY iblnr zeili.
loop_cnt = 1.
LOOP AT tiseg.
IF loop_cnt = 1.
PERFORM dynpro USING:
'X' 'SAPMM07I' '0701' ,
' ' 'RM07I-IBLNR' p_doc# ,
' ' 'RM07I-GJAHR' p_year , "Sales org
' ' 'BDC_OKCODE' '/00' . "Enter
ENDIF.
IF tiseg-zeili <> 001.
PERFORM dynpro USING:
'X' 'SAPMM07I' '0721' ,
' ' 'BDC_CURSOR' 'ISEG-BSTAR(01)',
' ' 'BDC_OKCODE' '/20' ,
'X' 'SAPMM07I' '1701' ,
' ' 'BDC_CURSOR' 'RM07I-ZEILE',
' ' 'RM07I-ZEILE' tiseg-zeili ,
' ' 'BDC_OKCODE' '/00' .
ENDIF.
PERFORM dynpro USING:
'X' 'SAPMM07I' '0721' ,
' ' 'BDC_CURSOR' 'ISEG-BSTAR(01)' ,
' ' 'BDC_OKCODE' '=DP'. "'/14' "Set Del ind
IF loop_cnt = sy-tfill.
PERFORM dynpro USING:
'X' 'SAPMM07I' '0721' ,
' ' 'BDC_OKCODE' '/11' . "Save
ENDIF.
ADD 1 TO loop_cnt.
ENDLOOP.
PERFORM call_trans USING 'MI02'.
ENDFORM. "SET_PID_DELETE
----
FORM CALL_TRANS *
----
........ *
----
--> TX *
----
*-------Begin of SAP Unicode changes - <23/08/2006>
FORM call_trans USING tx TYPE char4. " Unicode change
*-------End of SAP Unicode changes - <23/08/2006>
CASE tx.
WHEN 'VA01'.
ADD 1 TO tx_va01_sub.
WHEN 'MI02'.
ADD 1 TO tx_mi02_sub.
ENDCASE.
CALL TRANSACTION tx USING bdc_tab
MODE call_mode
UPDATE 'S'
MESSAGES INTO messtab .
tx_rc = sy-subrc. "Save RC
Errors, write to BDC session only on MI02 "12/28/99
IF sy-subrc <> 0.
perform bdc_insert using tx. "12/28/99
IF tx = 'VA01'.
ADD 1 TO tx_va01_err.
ELSEIF tx = 'MI02'.
ADD 1 TO tx_mi02_err.
PERFORM bdc_insert USING tx. "12/28/99
ENDIF.
ELSE.
CLEAR tx_rc.
IF tx = 'VA01'.
ADD 1 TO tx_va01_ok.
ELSEIF tx = 'MI02'.
ADD 1 TO tx_mi02_ok.
ENDIF.
ENDIF.
Get messages for OK/Err tx's both
LOOP AT messtab.
CLEAR txmsg.
txmsg-tx = tx.
IF NOT tx_rc IS INITIAL.
txmsg-success = 'X'.
ENDIF.
PERFORM get_message.
IF sy-tabix = sy-tfill.
CONCATENATE '==>' msg INTO txmsg-comments. "Last rec.
ELSE.
txmsg-comments = msg.
ENDIF.
CASE tx.
WHEN 'VA01'.
txmsg-type = outrec-ord_type.
txmsg-reason = outrec-ord_rsn.
txmsg-matnr = outrec-matnr.
txmsg-zldat = count_date.
ENDCASE.
APPEND txmsg.
ENDLOOP.
CLEAR txmsg.
Clear BDC table and Message table for next transaction
REFRESH: bdc_tab, messtab.
CLEAR: bdc_tab, messtab.
ENDFORM. "CALL_TRANS
----
FORM GET_MESSAGE *
----
........ *
----
FORM get_message.
vmsgno = messtab-msgnr.
CALL FUNCTION 'WRITE_MESSAGE'
EXPORTING
msgid = messtab-msgid
msgno = vmsgno
msgty = messtab-msgtyp
msgv1 = messtab-msgv1
msgv2 = messtab-msgv2
msgv3 = messtab-msgv3
msgv4 = messtab-msgv4
msgv5 = messtab-fldname
IMPORTING
messg = msg
EXCEPTIONS
OTHERS = 1.
ENDFORM. "get_message
----
FORM WRAPUP *
----
........ *
----
FORM wrapup.
IF bdc_open_flag = 'X'.
CALL FUNCTION 'BDC_CLOSE_GROUP'.
ENDIF.
PERFORM write_stats.
ENDFORM. "WRAPUP
*----
FORM CLOSE_BDC *
*----
*FORM close_bdc.
*
CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
not_open = 1
queue_error = 2
OTHERS = 3.
*
*ENDFORM. "CLOSE_BDC
----
FORM WRITE_STATS *
----
FORM write_stats.
REFRESH tiseg. CLEAR tiseg.
tiseg[] = tiseg3[].
FORMAT COLOR 7 ON.
WRITE: /3 'PHYSICAL INV DOCUMENT:', p_doc#,
45 'YEAR: ', p_year, ' '.
WRITE: /3 'ORDER TXs SUBd:', tx_va01_sub,
30 'Errored:', tx_va01_err.
WRITE: /3 'PID TXs SUBd: ', tx_mi02_sub,
30 'Errored:', tx_mi02_err.
FORMAT COLOR 7 OFF.
SKIP.
FORMAT COLOR 4 ON .
FORMAT INTENSIFIED ON.
WRITE: /4 'MATERIAL NUMBER', 23 ' QUANTITY', 37 'UOM',
42 'PLANT', 71 ' '.
WRITE: /4 '***************', 23 ' *******', 37 '**',
42 '*****', 71 ' '.
FORMAT INTENSIFIED OFF.
SORT tiseg BY ord_type matnr.
LOOP AT tiseg.
ON CHANGE OF tiseg-ord_type.
FORMAT INTENSIFIED OFF.
WRITE: /6 'ORDER TYPE:', tiseg-ord_type,
26 'COUNT DATE:', count_date,
52 'CUSTOMER:', tiseg-kunnr.
FORMAT INTENSIFIED ON.
ENDON.
WRITE: /4 tiseg-matnr, 23 tiseg-qty_c, 37 tiseg-uom_conv,
42 tiseg-werks, 71 ' '.
ENDLOOP.
SKIP 2.
FORMAT COLOR 4 OFF.
FORMAT INTENSIFIED ON.
IF tx_va01_err > 0.
FORMAT COLOR 6 ON.
WRITE: /2 'Correct ERR in Sales Orders (VA01 Tx) and',
'reexecute the program'.
ENDIF.
IF tx_mi02_err > 0.
FORMAT COLOR 6 ON.
WRITE: /2 'ERR found in executing PID change (MI02 Tx)'.
IF bdc_open_flag = 'X'.
WRITE: /2 'Correct ERR and submit the BDC session created'.
ENDIF.
ENDIF.
IF tx_va01_err = 0 AND tx_mi02_err = 0.
FORMAT COLOR 5 ON INTENSIFIED OFF.
WRITE: /3 'ALL TRANSACTIONS WERE SUCCESSFUL '.
ENDIF.
FORMAT COLOR 3 ON INTENSIFIED ON.
ULINE.
WRITE: /20 'MESSAGES RECEIVED DURING TRANSACTION PROCESSING', 170 ' '.
WRITE: /2 'TX ', 8 'ERR?', 15 'ORDER TYPE', 27 'REASON',
36 'COUNT DATE', 49 'MATERIAL NUMBER',
69 'MESSAGES RECEIVED FROM TRANSACTION ', 170 ' '.
WRITE: /2 '***', 8 '**', 15 '********', 27 '*****',
36 '*********', 49 '**************',
69 '********************************** ', 170 ' '.
FORMAT INTENSIFIED OFF.
LOOP AT txmsg.
IF txmsg-success = ' '.
FORMAT COLOR 3 ON.
ELSE.
FORMAT COLOR 6 ON.
ENDIF.
ON CHANGE OF txmsg-type.
ULINE.
ENDON.
IF txmsg-tx = 'VA01'.
WRITE: /2 txmsg-tx, 8 txmsg-success, 15 txmsg-type,
27 txmsg-reason, 36 txmsg-zldat.
ENDIF.
IF txmsg-tx = 'MI02'.
uline.
format color 7 on intensified on.
WRITE: /2 txmsg-tx, 8 'CHANGE PID:', p_doc#, 'YEAR:', p_year.
ENDIF.
IF txmsg-tx = 'VA01'.
WRITE: 49 txmsg-matnr.
ENDIF.
IF txmsg-comments(3) = '==>'.
FORMAT INTENSIFIED ON.
WRITE 69 txmsg-comments.
FORMAT INTENSIFIED OFF.
ELSE.
WRITE 69 txmsg-comments.
ENDIF.
ENDLOOP.
ULINE.
ENDFORM. "WRITE_STATS
Ashok...
03-28-2007 4:00 PM
here is the sample code...
DATA: bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE.
DATA : w_auart(4) TYPE c,
w_vkorg(4) TYPE c,
w_vtweg(2) TYPE c,
w_spart(2) TYPE c,
w_kunnr(10) TYPE c,
w_kunrg(10) TYPE c,
w_bstkd(35) TYPE c,
w_bstdk(10) TYPE c,
w_kwmeng(18) TYPE c,
w_zterm(4) TYPE c,
w_inco1(3) TYPE c,
w_inco2(28) TYPE c,
w_augru(3) TYPE c.
DATA : var1 TYPE string,
var2 TYPE c VALUE '(',
var3 TYPE c VALUE ')',
num(2) TYPE c,
flag(1) TYPE c.
DATA : BEGIN OF it_order, " Internal table Structure
auart(4) TYPE c, " Sales Order Type
vkorg(4) TYPE c, " Sales Organization
vtweg(2) TYPE c, " Distribution Channel
spart(2) TYPE c, " Division
kunnr(10) TYPE c, " Sold-to-Party
kunrg(10) TYPE c, " Ship-to-Party
bstkd(35) TYPE c, " Purchase Order No
bstdk(10) TYPE c, " Purchase Order Date
zterm(4) TYPE c, " Payment Terms
inco1(3) TYPE c, " Inco Terms1
inco2(20) TYPE c, " Inco Terms2
augru(3) TYPE c, " Order Reason
mabnr(18) TYPE c, " Material No
kwmeng(18) TYPE c, " Quantity
END OF it_order,
itab LIKE STANDARD TABLE OF it_order WITH HEADER LINE.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETER filename LIKE rlgrap-filename.
PARAMETER session LIKE apqi-groupid.
SELECTION-SCREEN END OF BLOCK b1.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.
************************************************************************
Get the file path
************************************************************************
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
def_filename = filename
def_path = ' '
mask = ',.,..'
mode = 'O'
title = 'Select File'
IMPORTING
filename = filename
EXCEPTIONS
selection_cancel = 1.
CHECK sy-subrc = 0.
START-OF-SELECTION.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
codepage = ' '
filename = filename
filetype = 'ASC'
headlen = ' '
line_exit = ' '
trunclen = ' '
user_form = ' '
user_prog = ' '
dat_d_format = ' '
IMPORTING
FILELENGTH =
TABLES
data_tab = itab
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_type = 4
no_batch = 5
unknown_error = 6
invalid_table_width = 7
gui_refuse_filetransfer = 8
customer_error = 9
OTHERS = 10.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
PERFORM open_group.
LOOP AT itab.
CLEAR : w_auart,w_vkorg,w_vtweg,w_spart,w_kunnr,w_kunrg,
w_bstkd,w_bstdk,w_zterm,w_inco1,w_inco2,w_augru.
w_auart = itab-auart.
w_vkorg = itab-vkorg.
w_vtweg = itab-vtweg.
w_spart = itab-spart.
w_kunnr = itab-kunnr.
w_kunrg = itab-kunrg.
w_bstkd = itab-bstkd.
w_bstdk = itab-bstdk.
w_zterm = itab-zterm.
w_inco1 = itab-inco1.
w_inco2 = itab-inco2.
w_augru = itab-augru.
ON CHANGE OF itab-kunnr OR itab-kunrg OR itab-bstkd .
flag = 0.
num = 1.
PERFORM bdc_dynpro USING 'SAPMV45A' '0101'.
PERFORM bdc_field USING 'BDC_CURSOR'
'VBAK-AUART'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'VBAK-AUART' " Order Type
itab-auart.
PERFORM bdc_field USING 'VBAK-VKORG' " Sales Organization
itab-vkorg.
PERFORM bdc_field USING 'VBAK-VTWEG' " Distribution Channel
itab-vtweg.
PERFORM bdc_field USING 'VBAK-SPART' " Division
itab-spart.
PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
PERFORM bdc_field USING 'VBKD-BSTKD' " PO Number
itab-bstkd.
PERFORM bdc_field USING 'VBKD-BSTDK' " PO Date
itab-bstdk.
PERFORM bdc_field USING 'KUAGV-KUNNR' " Sold to Party
itab-kunnr.
PERFORM bdc_field USING 'KUWEV-KUNNR' " Ship to Party
itab-kunrg.
PERFORM bdc_field USING 'VBKD-ZTERM' " Payment Terms
itab-zterm.
PERFORM bdc_field USING 'VBKD-INCO1' " Inco Terms1
itab-inco1.
PERFORM bdc_field USING 'VBKD-INCO2' " Inco Terms2
itab-inco2.
PERFORM bdc_field USING 'VBAK-AUGRU' " Order Reason
itab-augru.
ENDON.
IF flag = 0.
LOOP AT itab WHERE bstkd = itab-bstkd AND kunnr = itab-kunnr .
var1 = 'RV45A-MABNR'.
CONCATENATE var1 var2 num var3 INTO var1.
PERFORM bdc_field USING var1
itab-mabnr.
var1 = 'RV45A-KWMENG'.
CONCATENATE var1 var2 num var3 INTO var1.
PERFORM bdc_field USING var1
itab-kwmeng.
PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
PERFORM bdc_field USING 'BDC_OKCODE'
'/00'.
num = 2.
ENDLOOP.
ELSE.
CONTINUE.
ENDIF.
flag = 1.
PERFORM bdc_dynpro USING 'SAPMV45A' '4001'.
PERFORM bdc_field USING 'BDC_OKCODE'
'=SICH'.
PERFORM bdc_transaction USING 'VA01'.
ENDLOOP.
PERFORM close_group.
WRITE : / 'Session',session, 'was Created'.
FORM open_group.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
client = sy-mandt
group = session
user = sy-uname
keep = 'X'.
ENDFORM.
FORM close_group.
CALL FUNCTION 'BDC_CLOSE_GROUP'.
ENDFORM.
FORM bdc_transaction USING tcode.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
tcode = tcode
TABLES
dynprotab = bdcdata.
ENDFORM.
FORM bdc_dynpro USING program dynpro.
CLEAR bdcdata.
bdcdata-program = program.
bdcdata-dynpro = dynpro.
bdcdata-dynbegin = 'X'.
APPEND bdcdata.
ENDFORM.
FORM bdc_field USING fnam fval.
IF fval <> ' '.
CLEAR bdcdata.
bdcdata-fnam = fnam.
bdcdata-fval = fval.
APPEND bdcdata.
ENDIF.
ENDFORM.
~~Guduri
03-28-2007 4:30 PM
Asha,
Please remember that BDCs are version-dependent. Any provided solutions MIGHT not work in your system - as BDCs work at the screen level - and each version of R/3 has differing VA01 screens.
I would suggest using BAPI_SALESORDER_CREATEFROMDAT2.
It is the best solution.