Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

bdc for vao1

Former Member
0 Kudos

Please send sample code for va01 bdc

Thanks,

Asha

3 REPLIES 3

Former Member
0 Kudos

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...

Former Member
0 Kudos

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

Former Member
0 Kudos

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.