cancel
Showing results for 
Search instead for 
Did you mean: 

Table control in sales order

Former Member
0 Kudos

Hi,

I am using BDC to ceate salesorder.I am able to create sales order for one item. But when I try it for multiple items, it is still creating a new sales order for each item. I am trying to loop the items but still it is creating a new sales order.I am also attaching my code. Can somebody look into it and tell me what should be done to loop the items.

DATA: BEGIN OF ITAB OCCURS 0,

KUNNR1 LIKE KUAGV-KUNNR,

KUNNR2 LIKE KUWEV-KUNNR,

KETDAT LIKE RV45A-KETDAT,

DWERK LIKE RV45A-DWERK,

ZTERM LIKE VBKD-ZTERM,

INCO1 LIKE VBKD-INCO1,

INCO2 LIKE VBKD-INCO2,

AUDAT LIKE RV45A-KETDAT,

VKBUR LIKE VBAK-VKBUR,

BZIRK LIKE VBKD-BZIRK,

IHREZ LIKE VBKD-IHREZ,

MABNR LIKE RV45A-MABNR,

KWMENG LIKE RV45A-KWMENG,

END OF ITAB.

include bdcrecx1.

PARAMETERS: PATH(128) DEFAULT 'C:\sales.txt'.

start-of-selection.

CALL FUNCTION 'WS_UPLOAD'

EXPORTING

FILENAME = path

FILETYPE = 'DAT'

TABLES

DATA_TAB = ITAB

.

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.

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'

'ZOR'.

perform bdc_field using 'VBAK-VKORG'

'1000'.

perform bdc_field using 'VBAK-VTWEG'

'10'.

perform bdc_field using 'VBAK-SPART'

'10'.

perform bdc_dynpro using 'SAPMV45A' '4001'.

perform bdc_field using 'BDC_OKCODE'

'KKAU'.

perform bdc_field using 'KUAGV-KUNNR'

itab-kunnr1.

perform bdc_field using 'KUWEV-KUNNR'

itab-kunnr2.

perform bdc_field using 'RV45A-KETDAT'

itab-ketdat.

perform bdc_field using 'RV45A-KPRGBZ'

'D'.

perform bdc_field using 'VBKD-PRSDT'

'11/17/2005'.

perform bdc_field using 'VBKD-ZTERM'

itab-zterm.

perform bdc_field using 'VBKD-INCO1'

ITAB-INCO1.

perform bdc_field using 'VBKD-INCO2'

ITAB-INCO2.

perform bdc_dynpro using 'SAPMV45A' '4002'.

perform bdc_field using 'BDC_OKCODE'

'=T\05'.

perform bdc_field using 'BDC_CURSOR'

'VBKD-BZIRK'.

perform bdc_field using 'VBAK-AUDAT'

ITAB-AUDAT.

perform bdc_field using 'VBAK-VKBUR'

ITAB-VKBUR.

perform bdc_field using 'VBAK-WAERK'

'USD'.

perform bdc_field using 'VBKD-PRSDT'

'11/17/2005'.

perform bdc_field using 'VBKD-BZIRK'

ITAB-BZIRK.

perform bdc_dynpro using 'SAPMV45A' '4002'.

perform bdc_field using 'BDC_OKCODE'

'=T\08'.

perform bdc_field using 'BDC_CURSOR'

'VBKD-ZLSCH'.

perform bdc_field using 'VBKD-KTGRD'

'01'.

perform bdc_field using 'VBKD-ZLSCH'

'C'.

perform bdc_field using 'VBAK-ZUONR'

'Open Sales order'.

perform bdc_dynpro using 'SAPMV45A' '4002'.

perform bdc_field using 'BDC_OKCODE'

'=T\10'.

perform bdc_field using 'BDC_CURSOR'

'GVS_TC_DATA-REC-PARTNER(05)'.

perform bdc_field using 'GV_FILTER'

'PARALL'.

perform bdc_field using 'GVS_TC_DATA-REC-PARTNER(05)'

'3838'.

perform bdc_dynpro using 'SAPMV45A' '4002'.

perform bdc_field using 'BDC_OKCODE'

'=T\13'.

perform bdc_field using 'BDC_CURSOR'

'VBKD-BSARK'.

perform bdc_field using 'VBKD-BSARK'

'CU01'.

perform bdc_field using 'VBKD-IHREZ'

ITAB-IHREZ.

perform bdc_dynpro using 'SAPMV45A' '4002'.

perform bdc_field using 'BDC_OKCODE'

'/EBACK'.

perform bdc_field using 'BDC_CURSOR'

'VBAK-ZZLEAT'.

perform bdc_field using 'VBAK-ZZWARR'

'12346C'.

perform bdc_field using 'VBAK-ZZFABW'

'F14689'.

perform bdc_field using 'VBAK-ZZWARX'

'12012005'.

perform bdc_field using 'VBAK-ZZLEAT'

'CGUYFIU'.

perform bdc_dynpro using 'SAPMV45A' '4001'.

perform bdc_field using 'BDC_OKCODE'

'=PKO1'.

perform bdc_field using 'KUAGV-KUNNR'

itab-kunnr1.

perform bdc_field using 'KUWEV-KUNNR'

itab-kunnr2.

perform bdc_field using 'RV45A-KETDAT'

itab-ketdat.

perform bdc_field using 'RV45A-KPRGBZ'

'D'.

perform bdc_field using 'VBKD-PRSDT'

'11/17/2005'.

perform bdc_field using 'VBKD-ZTERM'

itab-zterm.

perform bdc_field using 'VBKD-INCO1'

ITAB-INCO1.

perform bdc_field using 'VBKD-INCO2'

ITAB-INCO2.

perform bdc_field using 'BDC_CURSOR'

'RV45A-CCODE(01)'.

perform bdc_field using 'RV45A-MABNR(01)'

ITAB-MABNR.

perform bdc_field using 'RV45A-KWMENG(01)'

'1'.

perform bdc_field using 'VBAP-WERKS(01)'

itab-dwerk.

perform bdc_dynpro using 'SAPMV45A' '4001'.

perform bdc_field using 'BDC_OKCODE'

'=PKO1'.

perform bdc_field using 'KUAGV-KUNNR'

itab-kunnr1.

perform bdc_field using 'KUWEV-KUNNR'

itab-kunnr2.

perform bdc_field using 'RV45A-KETDAT'

itab-ketdat.

perform bdc_field using 'RV45A-KPRGBZ'

'D'.

perform bdc_field using 'VBKD-PRSDT'

'11/17/2005'.

perform bdc_field using 'VBKD-ZTERM'

itab-zterm.

perform bdc_field using 'VBKD-INCO1'

ITAB-INCO1.

perform bdc_field using 'VBKD-INCO2'

ITAB-INCO2.

perform bdc_field using 'BDC_CURSOR'

'VBAP-POSNR(01)'.

perform bdc_field using 'RV45A-VBAP_SELKZ(01)'

'X'.

perform bdc_dynpro using 'SAPMV45A' '5003'.

perform bdc_field using 'BDC_OKCODE'

'/EBACK'.

Loop.

perform bdc_dynpro using 'SAPMV45A' '4001'.

perform bdc_field using 'BDC_OKCODE'

'=PKO1'.

perform bdc_field using 'KUAGV-KUNNR'

itab-kunnr1.

perform bdc_field using 'KUWEV-KUNNR'

itab-kunnr2.

perform bdc_field using 'RV45A-KETDAT'

itab-ketdat.

perform bdc_field using 'RV45A-KPRGBZ'

'D'.

perform bdc_field using 'VBKD-PRSDT'

'11/17/2005'.

perform bdc_field using 'VBKD-ZTERM'

itab-zterm.

perform bdc_field using 'VBKD-INCO1'

ITAB-INCO1.

perform bdc_field using 'VBKD-INCO2'

ITAB-INCO2.

perform bdc_field using 'BDC_CURSOR'

'RV45A-CCODE(02)'.

perform bdc_field using 'BDC_CURSOR'

'VBAP-WERKS(02)'.

perform bdc_field using 'RV45A-MABNR(02)'

ITAB-MABNR.

perform bdc_field using 'RV45A-KWMENG(02)'

'1'.

perform bdc_field using 'VBAP-WERKS(02)'

itab-dwerk.

perform bdc_dynpro using 'SAPMV45A' '4001'.

perform bdc_field using 'BDC_OKCODE'

'=PKO1'.

perform bdc_field using 'KUAGV-KUNNR'

itab-kunnr1.

perform bdc_field using 'KUWEV-KUNNR'

itab-kunnr2.

perform bdc_field using 'RV45A-KETDAT'

itab-ketdat.

perform bdc_field using 'RV45A-KPRGBZ'

'D'.

perform bdc_field using 'VBKD-PRSDT'

'11/17/2005'.

perform bdc_field using 'VBKD-ZTERM'

itab-zterm.

perform bdc_field using 'VBKD-INCO1'

ITAB-INCO1.

perform bdc_field using 'VBKD-INCO2'

ITAB-INCO2.

perform bdc_field using 'BDC_CURSOR'

'VBAP-POSNR(01)'.

perform bdc_field using 'RV45A-VBAP_SELKZ(01)'

'X'.

perform bdc_dynpro using 'SAPMV45A' '5003'.

perform bdc_field using 'BDC_OKCODE'

'/EBACK'.

endloop.

perform bdc_dynpro using 'SAPMV45A' '4001'.

perform bdc_field using 'BDC_OKCODE'

'=SICH'.

perform bdc_field using 'KUAGV-KUNNR'

itab-kunnr1.

perform bdc_field using 'KUWEV-KUNNR'

itab-kunnr2.

perform bdc_field using 'RV45A-KETDAT'

ITAB-KETDAT.

perform bdc_field using 'RV45A-KPRGBZ'

'D'.

perform bdc_field using 'VBKD-PRSDT'

'11/17/2005'.

perform bdc_field using 'VBKD-ZTERM'

ITAB-ZTERM.

perform bdc_field using 'VBKD-INCO1'

ITAB-INCO1.

perform bdc_field using 'VBKD-INCO2'

ITAB-INCO2.

  • perform bdc_field using 'BDC_CURSOR'

  • 'RV45A-MABNR(02)'.

perform bdc_transaction using 'VA01'.

endloop.

Perform close_group.

Accepted Solutions (0)

Answers (7)

Answers (7)

Former Member
0 Kudos

try to put outside of the loop this statments

perform bdc_dynpro using 'SAPMV45A' '0101'.

and the other of the fields in this dympro.

bye

enzo

Former Member
0 Kudos

Hi Raj,

We would be having options in while creating Items for the sales order.

In the Tool bar for Items we would be having Next item and the cursor goes directly to the next item. Hence you don't have to hard Code for items saying 01,02 ....

In this way you can optimize the code and create as many items as you can.

Hope this would help you.

Thanks & Regards,

Rama.

Former Member
0 Kudos

Hi Raj,

You may follow this simple logic.

Pass the header fields first.

Then loop once at the internal table to pass all the items of the sales order to append to the BDC table and clear the BDC table everytime. call the va01 transaction.

This may help you.

Former Member
0 Kudos

Hi ,

I think complete code as not come below is the main code where the logic for bDc is written hope it will help you.

sort it_sales by vbeln.

If not it_sales[] is initial.

loop at it_sales.

clear : flag_item,

W_shptext,

w_custext.

W_shptext = it_sales-shptext.

w_custext = it_sales-custext.

*--- At new sales document number(old document number from file)

*--- populate the header data & first item details.

at new vbeln.

clear it_bdcdata.

refresh it_bdcdata.

read table it_sales index sy-tabix.

perform append_bdcdata using : 'X' 'SAPMV45A' '0101',

' ' 'VBAK-AUART' it_sales-auart,

' ' 'VBAK-VKORG' it_sales-vkorg,

' ' 'VBAK-VTWEG' it_sales-vtweg,

' ' 'VBAK-SPART' it_sales-spart,

' ' 'BDC_OKCODE' '/00',

'X' 'SAPMV45A' '4001',

' ' 'KUAGV-KUNNR' it_sales-kunnr.

if not it_sales-ship is initial.

perform append_bdcdata using ' ' 'KUWEV-KUNNR' it_sales-ship.

endif.

perform append_bdcdata using : ' ' 'VBKD-BSTKD' it_sales-bstnk,

' ' 'VBKD-BSTDK' it_sales-bstdk,

' ' 'VBAK-AUGRU' it_sales-augru,

' ' 'BDC_OKCODE' '=KZKU',

  • new logic.

  • 'X' 'SAPMSSY0' '0120',

  • ' ' 'BDC_CURSOR' '04/06',

  • ' ' 'BDC_OKCODE' '=CHOO',

  • end of logic

'X' 'SAPMV45A' '4002'.

*--- Depending upon the sales document type (AUART) passing the RBJP-T

*--- Stock Return Deadline (ZZRETDAT) if Auart is 'ZRLB' or 'ZRKB' the

*--- passing the Stock Return Deadline Date.

if it_sales-auart = 'ZRLB' or

it_sales-auart = 'ZRKB'.

perform append_bdcdata using : ' ' 'VBAK-ZZRETDAT' it_sales-zzretdat.

endif.

perform append_bdcdata using : ' ' 'VBAK-ZZSHIPTO' it_sales-zzshipto,

' ' 'BDC_OKCODE' '=T\07',

'X' 'SAPMV45A' '4002',

' ' 'GVS_TC_DATA-REC-PARVW(06)' 'AF',

' ' 'GVS_TC_DATA-REC-PARTNER(06)'

it_sales-emp,

' ' 'BDC_OKCODE' '/EBACK'.

*---First Items details

perform append_bdcdata using :

'X' 'SAPMV45A' '4001',

' ' 'RV45A-ETDAT(01)' it_sales-fdate,

' ' 'RV45A-KWMENG(01)' it_sales-kwmeng,

' ' 'RV45A-MABNR(01)' it_sales-matnr,

' ' 'BDC_OKCODE' '/00',

'X' 'SAPMV45A' '4001',

' ' 'RV45A-VBAP_SELKZ(01)' 'X',

' ' 'BDC_OKCODE' '=PDE2',

'X' 'SAPMV45A' '4003',

' ' 'VBAP-LGORT' it_sales-lgort,

' ' 'VBAP-VSTEL' it_sales-vstel,

' ' 'VBAP-ROUTE' it_sales-route.

*--- If Order combination flag is 'X' then check box is made click else

*--- not click

If it_sales-flag = 'X'.

perform append_bdcdata using :

' ' 'VBKD-KZAZU' 'X'.

else.

perform append_bdcdata using :

' ' 'VBKD-KZAZU' ' '.

endif.

perform append_bdcdata using :

' ' 'BDC_OKCODE' '/EBACK',

'X' 'SAPMV45A' '4001'.

flag_item = 'X'.

endat.

*---- From 2 items.

if flag_item = ' '.

perform append_bdcdata using :

' ' 'BDC_OKCODE' 'POAN',

'X' 'SAPMV45A' '4001',

' ' 'RV45A-ETDAT(02)' it_sales-fdate,

' ' 'RV45A-KWMENG(02)' it_sales-kwmeng,

' ' 'RV45A-MABNR(02)' it_sales-matnr,

' ' 'BDC_OKCODE' '/00',

'X' 'SAPMV45A' '4001',

' ' 'RV45A-VBAP_SELKZ(02)' 'X',

' ' 'BDC_OKCODE' '=PDE2',

'X' 'SAPMV45A' '4003',

' ' 'VBAP-LGORT' it_sales-lgort,

' ' 'VBAP-VSTEL' it_sales-vstel,

' ' 'VBAP-ROUTE' it_sales-route.

If it_sales-flag = 'X'.

perform append_bdcdata using :

' ' 'VBKD-KZAZU' 'X'.

else.

perform append_bdcdata using :

' ' 'VBKD-KZAZU' ' '.

endif.

perform append_bdcdata using :

' ' 'BDC_OKCODE' '/EBACK',

'X' 'SAPMV45A' '4001',

' ' 'BDC_OKCODE' '/00',

'X' 'SAPMV45A' '4001'.

endif. "if flag = ' '.

*--- At end of the sales document saving the records

at end of vbeln.

  • read table it_sales index sy-tabix.

perform append_bdcdata using :

' ' 'BDC_OKCODE' '=SICH'.

*--- calling transaction 'VA01'

perform call_transaction.

endat.

endloop. "loop at it_sales.

endif. "If not it_sales[] is initial.

ENDFORM. " populate_bdcdata

&----


*& Form append_bdcdata

&----


  • Populating the BDC table for using in Call Transaction

----


Form append_bdcdata using dynbegin fld1 fld2.

*---Identifying as new screen

IF DYNBEGIN = 'X' .

MOVE: DYNBEGIN TO IT_BDCDATA-DYNBEGIN,

FLD1 TO IT_BDCDATA-PROGRAM,

FLD2 TO IT_BDCDATA-DYNPRO.

ELSE.

*---Identifying a field name and field value

MOVE: FLD1 TO IT_BDCDATA-FNAM,

FLD2 TO IT_BDCDATA-FVAL.

ENDIF.

APPEND IT_BDCDATA.

CLEAR IT_BDCDATA.

ENDFORM. " append_bdcdata

&----


*& Form call_transaction

&----


  • text

----


FORM call_transaction.

*--- Data declaration for Local variables

Data : l_mess_lines type i, "variable for no of msg lines

l_msg_text(100) type c, "For capturing format message

l_newvbeln like vbak-vbeln, "For holding new sales Doc No

flag_text(1) type C value 'X'. "Flag for getting header text

*--- Internal Table to store header text & header structure

Data : it_tline like tline occurs 100 with header line,

it_tline1 like tline occurs 100 with header line,

t_thead like thead.

*--- Call transaction method

call transaction 'VA01'

using it_bdcdata

mode c_mode

UPDATE 'S'

messages into it_bdcmsg.

*--- If success then Populating the header text for Comment for

*--- Customer & Shipping Instruction

if sy-subrc eq 0 and

sy-msgty ne 'A' and

sy-msgty ne 'E' .

  • Incrementing the counter for success record

wk_success_rec = wk_success_rec + 1.

clear l_mess_lines.

describe table it_bdcmsg lines l_mess_lines.

read table it_bdcmsg index l_mess_lines.

*--- Formatting the Success message using Call Function 'FORMAT_MESSAGE'

  • perform format_message using l_msg_text.

clear l_newvbeln.

move it_bdcmsg-msgv2 to l_newvbeln.

*--- Padding with zeros for the new sales Ducument number created

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

INPUT = l_newvbeln

IMPORTING

OUTPUT = l_newvbeln.

*--- The below logic is added because we can't update the Header Text

  • through Batch Input so we need to first create new sales documnet

  • number then get that sales document no & by using function module

  • SAVE_TEXT update the Header Text.

*--- Populating the header text for Comment for Customer & Shipping

*--- Instruction

clear it_tline.

refresh it_tline.

*--- Populating the header text for Comment for customer

it_tline-tdformat = '*'.

it_tline-tdline = w_custext.

append it_tline.

clear it_tline.

*--- Populating the header text for Shipping Instruction

it_tline-tdformat = '*'.

it_tline-tdline = w_shptext.

append it_tline.

clear it_tline.

*----

loop at it_tline.

refresh it_tline1.

read table it_tline index sy-tabix.

it_tline1-tdformat = it_tline-tdformat.

it_tline1-tdline = it_tline-tdline.

append it_tline1.

clear it_tline1.

*--- for Comment for Customer ID

if flag_text = 'X'.

clear t_thead.

t_thead-tdobject = 'VBBK'.

t_thead-tdname = l_newvbeln.

t_thead-tdid = '0003'.

t_thead-tdspras = sy-langu.

endif. "if flag_text = 'X'.

*--- for Shipping Instruction ID

if flag_text = ' '.

clear t_thead.

t_thead-tdobject = 'VBBK'.

t_thead-tdname = l_newvbeln.

t_thead-tdid = '0012'.

t_thead-tdspras = sy-langu.

endif. "if flag_text = ' '.

*--- Save the text using Functional Module 'SAVE_TEXT'

perform save_text tables it_tline1

using t_thead.

clear flag_text.

endloop. "loop at it_tline.

else.

*--- If error then get the error message

clear l_mess_lines.

describe table it_bdcmsg lines l_mess_lines.

read table it_bdcmsg index l_mess_lines.

*--- Formatting the Error message using Call Function 'FORMAT_MESSAGE'

clear l_msg_text.

perform format_message using l_msg_text.

it_error-vbeln = it_sales-vbeln.

it_error-msg = l_msg_text.

append it_error.

clear it_error.

endif. "if sy-subrc eq 0 and

"sy-msgty ne 'A' and

clear it_bdcmsg.

refresh it_bdcmsg.

Former Member
0 Kudos

Hi

You should call the header data related screens only on change of the header data . So sort your data on aurat ,vkorg, vtweg, spart - And call the related screens only when one of these fields changes.

For e.g. say at new spart - call the header screens ,

also perform bdc_transaction using 'VA01' should be called at end of one of the header fields.

Apart from this give the line item numbers dynamically when you populate the item data.

Let me know if you need more info.

Regards

Kalpana

Former Member
0 Kudos

Hi,

Check the below code its excatly same code which u want.

REPORT Z90VR_UPLOAD_SALESORDERS

NO STANDARD PAGE HEADING

LINE-COUNT 65(2)

LINE-SIZE 160.

  • TABLES

Tables : knb1, "Customer Master (Company Code)

mara, "General Material Data

knvv, "Customer Master Sales Data

pa0003. "HR Master Record: Infotype 0003

************************************************************************

************************************************************************

  • INTERNAL TABLES

************************************************************************

  • Internal table to store flat file records

Data : Begin of it_file occurs 0,

record(600) type c,

end of it_file.

  • Internal table to store upload records

Data : begin of it_sales occurs 0,

vbeln like vbak-vbeln,

auart like vbak-auart,

vkorg like vbak-vkorg,

vtweg like vbak-vtweg,

spart like vbak-spart,

kunnr like kna1-kunnr,

kunnr_old like kna1-kunnr,

Ship like kna1-kunnr,

ship_old like kna1-kunnr,

bstnk like vbak-bstnk,

bstdk like vbak-bstdk,

matnr like mara-matnr,

kwmeng(20) type C,

fdate like vbak-audat,

vstel like vbap-vstel,

route like vbap-route,

Qty(20) type c,

lgort like vbap-lgort,

zzshipto like vbak-zzshipto,

custext(132) type c,

shptext(132) type c,

flag(1) type c,

zzretdat like vbak-zzretdat,

augru like vbak-augru,

emp(10) type c,

end of it_sales.

  • Internal table to hold BDC data

Data begin of it_bdcdata occurs 0.

include structure bdcdata.

data end of it_bdcdata.

  • Internal table to store error messages

Data : it_bdcmsg like bdcmsgcoll occurs 0 with header line.

  • Internal table to store error records.

Data : begin of it_error occurs 0,

vbeln like vbak-vbeln,

kunnr like kna1-kunnr,

ship like kna1-kunnr,

matnr like mara-matnr,

pernr like pa0003-pernr,

msg(75) type c,

end of it_error.

************************************************************************

  • DATA

************************************************************************

Data : wk_auart like vbak-auart, "Sales document type

wk_vkorg like vbak-vkorg, "Sales organization

wk_vtweg like vbak-vtweg, "Distribution channel

wk_spart like vbak-spart, "Division

wk_kunnr like kna1-kunnr, "Customer number(sold to party)

wk_kunnr_old like kna1-kunnr, "OldCustomer no.(sold to party)

wk_Ship like kna1-kunnr, "Customer number(ship to party)

wk_ship_old like kna1-kunnr, "OldCustomer no.(ship to party)

wk_bstnk like vbak-bstnk, "Customer purchase order number

wk_vbeln like vbak-vbeln, "Old sales Document Number

wk_bstdk like vbak-bstdk, "Customer purchase order date

wk_matnr like mara-matnr, "Material number

wk_kwmeng(17) type c, "Order quantity

wk_fdate like vbak-audat, "First Date

wk_vstel like vbap-vstel, "Shipping point/receiving point

wk_route like vbap-route, "Route

wk_Qty(17) type c, "Stock quantity

wk_lgort like vbap-lgort, "Storage location

wk_zzshipto like vbak-zzshipto, "RBJP-T: Ship-to-party code

wk_Custext(132) type c, "Comment for customer

wk_shptext(132) type c, "Comment for warehouse

wk_flag(1) type c, "Order ombnation flag

wk_zzretdat like vbak-zzretdat, "RBJP-T Stock Return Deadline

wk_augru like vbak-augru, "Order reason

wk_emp(10) type c. "sales Employee

*--- Variable to store customer comment text & Shipping Instruction text

Data : W_shptext(132) type c, "To store customer comment text

w_custext(132) type c, "To store Shipping Instruction text

wk_error_rec like sy-tabix, "To store no of error records

wk_Success_rec like sy-tabix. "To store of Success records

************************************************************************

  • Constants *

************************************************************************

Data : c_mode(1) type c value 'N'.

************************************************************************

  • SELECTION-SCREEN LAYOUT

************************************************************************

selection-screen : skip 2.

selection-screen begin of block blk1 with frame title text-001.

selection-screen : skip 1.

parameter : p_file like rlgrap-filename default 'C:\SalesBackorder.csv'

obligatory,

p_spt(1) type c default ',' obligatory.

selection-screen end of block blk1.

************************************************************************

  • At Selection Screen

************************************************************************

*--- Provide F4 help for the File Path

at selection-screen on value-request for p_file.

call function 'KD_GET_FILENAME_ON_F4'

EXPORTING

mask = ',.csv'

static = 'X'

CHANGING

file_name = p_file.

************************************************************************

  • Start of Selection

************************************************************************

START-OF-SELECTION.

*--- Clearing internal tables & Variables used

perform clear_tables.

*--- Upload the file into internal table.

perform upload_input_file.

*--- Split the records upladed from the file.

perform split_records.

*--- Check the record values are valid

perform check_records.

*--- Check for the valid customer data sales data

perform valid_customer_data.

*--- Populating the BDC Table

perform populate_bdcdata.

************************************************************************

  • End of Selection

************************************************************************

END-OF-SELECTION.

clear wk_error_rec.

Describe table it_error lines wk_error_rec.

*--- Display error report list

perform display_error_list.

************************************************************************

  • TOP-OF-PAGE *

************************************************************************

TOP-OF-PAGE.

*--- Printing Column headings

perform column_headings.

&----


*& Form upload_input_file

&----


  • Uploading the file into internal table

----


FORM upload_input_file.

CALL FUNCTION 'WS_UPLOAD'

EXPORTING

FILENAME = p_file

  • FILETYPE = 'ASC'

TABLES

DATA_TAB = it_file

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 i000(z1) with 'Error while Uploading the file'.

ENDIF.

ENDFORM. " upload_input_file

&----


*& Form split_records

&----


  • Spliting the upload records from file records at ',' or ';' into

  • respective filed values

----


FORM split_records.

data : wk_file(500) type c. " Variable to store record

If not it_file[] is initial.

loop at it_file from 2.

clear wk_file.

WK_file = it_file-record.

  • split the records at ','

split WK_file at p_spt into wk_auart

wk_vkorg

wk_vtweg

wk_spart

wk_kunnr

wk_kunnr_old

wk_Ship

wk_ship_old

wk_bstnk

wk_vbeln

wk_bstdk

wk_matnr

wk_kwmeng

wk_fdate

wk_vstel

wk_route

wk_Qty

wk_lgort

wk_zzshipto

wk_Custext

wk_shptext

wk_flag

wk_zzretdat

wk_augru

wk_emp.

  • move the records into internal table

move : wk_auart to it_sales-auart,

wk_vkorg to it_sales-vkorg,

wk_vtweg to it_sales-vtweg,

wk_spart to it_sales-spart,

wk_kunnr to it_sales-kunnr,

wk_kunnr_old to it_sales-kunnr_old,

wk_Ship to it_sales-ship,

wk_ship_old to it_sales-ship_old,

wk_bstnk to it_sales-bstnk,

wk_vbeln to it_sales-vbeln,

wk_bstdk to it_sales-bstdk,

wk_matnr to it_sales-matnr,

wk_kwmeng to it_sales-kwmeng,

wk_fdate to it_sales-fdate,

wk_vstel to it_sales-vstel,

wk_route to it_sales-route,

wk_Qty to it_sales-qty,

wk_lgort to it_sales-lgort,

wk_zzshipto to it_sales-zzshipto,

wk_Custext to it_sales-custext,

wk_shptext to it_sales-shptext,

wk_flag to it_sales-flag,

wk_zzretdat to it_sales-zzretdat,

wk_augru to it_sales-augru,

wk_emp to it_sales-emp.

append it_sales.

clear it_sales.

endloop. "loop at it_file from 2.

endif. "If not it_file[] is initial

ENDFORM. " split_records

&----


*& Form check_records

&----


  • Check the values exist in check table if not delete the records

  • and append into internal error table records

----


FORM check_records.

If not it_sales[] is initial.

*--Sorting the internal table on old sales document number uploaded

sort it_sales by vbeln.

loop at it_sales.

*--- Check the old sold to party exist & if exist then get the new sold

*--- to party Number

if not it_sales-kunnr_old is initial.

clear knb1-kunnr.

select single kunnr

from knb1

into knb1-kunnr

where altkn = it_sales-kunnr_old.

if sy-subrc = 0.

it_sales-kunnr = knb1-kunnr.

else.

it_error-vbeln = it_sales-vbeln.

it_error-kunnr = it_sales-kunnr_old.

it_error-msg = text-010.

append it_error.

clear it_error.

delete it_sales where vbeln = it_sales-vbeln.

clear it_sales.

continue.

endif. "if sy-subrc = 0.

endif. "if not it_sales-kunnr_old is initial.

*--- Check the old ship to party exist & if exist then get the new ship

*--- to party Number

if not it_sales-ship_old is initial.

clear knb1-kunnr.

select single kunnr

from knb1

into knb1-kunnr

where altkn = it_sales-ship_old.

if sy-subrc = 0.

it_sales-ship = knb1-kunnr.

else.

it_error-vbeln = it_sales-vbeln.

it_error-ship = it_sales-ship_old.

it_error-msg = text-011.

append it_error.

clear it_error.

delete it_sales where vbeln = it_sales-vbeln.

clear it_sales.

continue.

endif. "if sy-subrc = 0.

endif. "if not it_sales-ship_old is initial.

*--- Check the old matnr exist & if exist then get the new material

*--- number

if not it_sales-matnr is initial.

clear mara-matnr.

select single matnr

from mara

into mara-matnr

where bismt = it_sales-matnr.

if sy-subrc = 0.

it_sales-matnr = mara-matnr.

else.

it_error-vbeln = it_sales-vbeln.

it_error-matnr = it_sales-matnr.

it_error-msg = text-012.

append it_error.

clear it_error.

delete it_sales where vbeln = it_sales-vbeln.

clear it_sales.

continue.

endif. "if sy-subrc = 0.

endif. "if not it_sales-matnr is initial.

*---- Check the Sales Employee Number exist in master table PA0003

if not it_sales-emp is initial.

clear pa0003-pernr.

select single pernr

from pa0003

into pa0003-pernr

where pernr = it_sales-emp.

if sy-subrc ne 0.

it_error-vbeln = it_sales-vbeln.

it_error-pernr = it_sales-emp.

it_error-msg = text-013.

append it_error.

clear it_error.

delete it_sales where vbeln = it_sales-vbeln.

clear it_sales.

continue.

endif. "if sy-subrc = 0.

endif. "if not it_sales-emp is initial.

modify it_sales index sy-tabix.

clear it_sales.

endloop.

endif. "If not it_sales[] is initial.

ENDFORM. " check_records

&----


*& Form populate_bdcdata

&----


  • Populating BDCDATA Table & passing the data by calling

  • transaction 'VA01' to create Sales Orders

----


FORM populate_bdcdata.

Data : flag_item(1) type C. "Flag for populating Item details

*--- Sorting the internal table by old sales document number.

sort it_sales by vbeln.

If not it_sales[] is initial.

loop at it_sales.

clear : flag_item,

W_shptext,

w_custext.

W_shptext = it_sales-shptext.

w_custext = it_sales-custext.

*--- At new sales document number(old document number from file)

*--- populate the header data & first item details.

at new vbeln.

clear it_bdcdata.

refresh it_bdcdata.

read table it_sales index sy-tabix.

perform append_bdcdata using : 'X' 'SAPMV45A' '0101',

' ' 'VBAK-AUART' it_sales-auart,

' ' 'VBAK-VKORG' it_sales-vkorg,

' ' 'VBAK-VTWEG' it_sales-vtweg,

' ' 'VBAK-SPART' it_sales-spart,

' ' 'BDC_OKCODE' '/00',

'X' 'SAPMV45A' '4001',

' ' 'KUAGV-KUNNR' it_sales-kunnr.

if not it_sales-ship is initial.

perform append_bdcdata using ' ' 'KUWEV-KUNNR' it_sales-ship.

endif.

perform append_bdcdata using : ' ' 'VBKD-BSTKD' it_sales-bstnk,

' ' 'VBKD-BSTDK' it_sales-bstdk,

' ' 'VBAK-AUGRU' it_sales-augru,

' ' 'BDC_OKCODE' '=KZKU',

  • new logic.

  • 'X' 'SAPMSSY0' '0120',

  • ' ' 'BDC_CURSOR' '04/06',

  • ' ' 'BDC_OKCODE' '=CHOO',

  • end of logic

'X' 'SAPMV45A' '4002'.

*--- Depending upon the sales document type (AUART) passing the RBJP-T

*--- Stock Return Deadline (ZZRETDAT) if Auart is 'ZRLB' or 'ZRKB' the

*--- passing the Stock Return Deadline Date.

if it_sales-auart = 'ZRLB' or

it_sales-auart = 'ZRKB'.

perform append_bdcdata using : ' ' 'VBAK-ZZRETDAT' it_sales-zzretdat.

endif.

perform append_bdcdata using : ' ' 'VBAK-ZZSHIPTO' it_sales-zzshipto,

' ' 'BDC_OKCODE' '=T\07',

'X' 'SAPMV45A' '4002',

' ' 'GVS_TC_DATA-REC-PARVW(06)' 'AF',

' ' 'GVS_TC_DATA-REC-PARTNER(06)'

it_sales-emp,

' ' 'BDC_OKCODE' '/EBACK'.

*---First Items details

perform append_bdcdata using :

'X' 'SAPMV45A' '4001',

' ' 'RV45A-ETDAT(01)' it_sales-fdate,

' ' 'RV45A-KWMENG(01)' it_sales-kwmeng,

' ' 'RV45A-MABNR(01)' it_sales-matnr,

' ' 'BDC_OKCODE' '/00',

'X' 'SAPMV45A' '4001',

' ' 'RV45A-VBAP_SELKZ(01)' 'X',

' ' 'BDC_OKCODE' '=PDE2',

'X' 'SAPMV45A' '4003',

' ' 'VBAP-LGORT' it_sales-lgort,

' ' 'VBAP-VSTEL' it_sales-vstel,

' ' 'VBAP-ROUTE' it_sales-route.

*--- If Order combination flag is 'X' then check box is made click else

*--- not click

If it_sales-flag = 'X'.

perform append_bdcdata using :

' ' 'VBKD-KZAZU' 'X'.

else.

perform append_bdcdata using :

' ' 'VBKD-KZAZU' ' '.

endif.

perform append_bdcdata using :

' ' 'BDC_OKCODE' '/EBACK',

'X' 'SAPMV45A' '4001'.

flag_item = 'X'.

endat.

*---- From 2 items.

if flag_item = ' '.

perform append_bdcdata using :

' ' 'BDC_OKCODE' 'POAN',

'X' 'SAPMV45A' '4001',

' ' 'RV45A-ETDAT(02)' it_sales-fdate,

' ' 'RV45A-KWMENG(02)' it_sales-kwmeng,

' ' 'RV45A-MABNR(02)' it_sales-matnr,

' ' 'BDC_OKCODE' '/00',

'X' 'SAPMV45A' '4001',

' ' 'RV45A-VBAP_SELKZ(02)' 'X',

' ' 'BDC_OKCODE' '=PDE2',

'X' 'SAPMV45A' '4003',

' ' 'VBAP-LGORT' it_sales-lgort,

' ' 'VBAP-VSTEL' it_sales-vstel,

' ' 'VBAP-ROUTE' it_sales-route.

If it_sales-flag = 'X'.

perform append_bdcdata using :

' ' 'VBKD-KZAZU' 'X'.

else.

perform append_bdcdata using :

' ' 'VBKD-KZAZU' ' '.

endif.

perform append_bdcdata using :

' ' 'BDC_OKCODE' '/EBACK',

'X' 'SAPMV45A' '4001',

' ' 'BDC_OKCODE' '/00',

'X' 'SAPMV45A' '4001'.

endif. "if flag = ' '.

*--- At end of the sales document saving the records

at end of vbeln.

  • read table it_sales index sy-tabix.

perform append_bdcdata using :

' ' 'BDC_OKCODE' '=SICH'.

*--- calling transaction 'VA01'

perform call_transaction.

endat.

endloop. "loop at it_sales.

endif. "If not it_sales[] is initial.

ENDFORM. " populate_bdcdata

&----


*& Form append_bdcdata

&----


  • Populating the BDC table for using in Call Transaction

----


Form append_bdcdata using dynbegin fld1 fld2.

*---Identifying as new screen

IF DYNBEGIN = 'X' .

MOVE: DYNBEGIN TO IT_BDCDATA-DYNBEGIN,

FLD1 TO IT_BDCDATA-PROGRAM,

FLD2 TO IT_BDCDATA-DYNPRO.

ELSE.

*---Identifying a field name and field value

MOVE: FLD1 TO IT_BDCDATA-FNAM,

FLD2 TO IT_BDCDATA-FVAL.

ENDIF.

APPEND IT_BDCDATA.

CLEAR IT_BDCDATA.

ENDFORM. " append_bdcdata

&----


*& Form call_transaction

&----


  • text

----


FORM call_transaction.

*--- Data declaration for Local variables

Data : l_mess_lines type i, "variable for no of msg lines

l_msg_text(100) type c, "For capturing format message

l_newvbeln like vbak-vbeln, "For holding new sales Doc No

flag_text(1) type C value 'X'. "Flag for getting header text

*--- Internal Table to store header text & header structure

Data : it_tline like tline occurs 100 with header line,

it_tline1 like tline occurs 100 with header line,

t_thead like thead.

*--- Call transaction method

call transaction 'VA01'

using it_bdcdata

mode c_mode

UPDATE 'S'

messages into it_bdcmsg.

*--- If success then Populating the header text for Comment for

*--- Customer & Shipping Instruction

if sy-subrc eq 0 and

sy-msgty ne 'A' and

sy-msgty ne 'E' .

  • Incrementing the counter for success record

wk_success_rec = wk_success_rec + 1.

clear l_mess_lines.

describe table it_bdcmsg lines l_mess_lines.

read table it_bdcmsg index l_mess_lines.

*--- Formatting the Success message using Call Function 'FORMAT_MESSAGE'

  • perform format_message using l_msg_text.

clear l_newvbeln.

move it_bdcmsg-msgv2 to l_newvbeln.

*--- Padding with zeros for the new sales Ducument number created

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

EXPORTING

INPUT = l_newvbeln

IMPORTING

OUTPUT = l_newvbeln.

*--- The below logic is added because we can't update the Header Text

  • through Batch Input so we need to first create new sales documnet

  • number then get that sales document no & by using function module

  • SAVE_TEXT update the Header Text.

*--- Populating the header text for Comment for Customer & Shipping

*--- Instruction

clear it_tline.

refresh it_tline.

*--- Populating the header text for Comment for customer

it_tline-tdformat = '*'.

it_tline-tdline = w_custext.

append it_tline.

clear it_tline.

*--- Populating the header text for Shipping Instruction

it_tline-tdformat = '*'.

it_tline-tdline = w_shptext.

append it_tline.

clear it_tline.

*----

loop at it_tline.

refresh it_tline1.

read table it_tline index sy-tabix.

it_tline1-tdformat = it_tline-tdformat.

it_tline1-tdline = it_tline-tdline.

append it_tline1.

clear it_tline1.

*--- for Comment for Customer ID

if flag_text = 'X'.

clear t_thead.

t_thead-tdobject = 'VBBK'.

t_thead-tdname = l_newvbeln.

t_thead-tdid = '0003'.

t_thead-tdspras = sy-langu.

endif. "if flag_text = 'X'.

*--- for Shipping Instruction ID

if flag_text = ' '.

clear t_thead.

t_thead-tdobject = 'VBBK'.

t_thead-tdname = l_newvbeln.

t_thead-tdid = '0012'.

t_thead-tdspras = sy-langu.

endif. "if flag_text = ' '.

*--- Save the text using Functional Module 'SAVE_TEXT'

perform save_text tables it_tline1

using t_thead.

clear flag_text.

endloop. "loop at it_tline.

else.

*--- If error then get the error message

clear l_mess_lines.

describe table it_bdcmsg lines l_mess_lines.

read table it_bdcmsg index l_mess_lines.

*--- Formatting the Error message using Call Function 'FORMAT_MESSAGE'

clear l_msg_text.

perform format_message using l_msg_text.

it_error-vbeln = it_sales-vbeln.

it_error-msg = l_msg_text.

append it_error.

clear it_error.

endif. "if sy-subrc eq 0 and

"sy-msgty ne 'A' and

clear it_bdcmsg.

refresh it_bdcmsg.

ENDFORM. " call_transaction

&----


*& Form FORMAT_MESSAGE

&----


  • Formating the system message

----


FORM FORMAT_MESSAGE USING P_DL_MSG_TEXT.

CALL FUNCTION 'FORMAT_MESSAGE'

EXPORTING

ID = SY-MSGID

LANG = SY-LANGU

NO = SY-MSGNO

V1 = SY-MSGV1

V2 = SY-MSGV2

V3 = SY-MSGV3

V4 = SY-MSGV4

IMPORTING

MSG = P_DL_MSG_TEXT

EXCEPTIONS

NOT_FOUND = 1

OTHERS = 2.

CONDENSE P_DL_MSG_TEXT.

ENDFORM. " FORMAT_MESSAGE

&----


*& Form save_text

&----


  • text

----


FORM save_text tables it_tline structure tline

using t_thead.

CALL FUNCTION 'SAVE_TEXT'

EXPORTING

  • CLIENT = SY-MANDT

HEADER = t_thead

SAVEMODE_DIRECT = 'X'

TABLES

LINES = it_tline

EXCEPTIONS

ID = 1

LANGUAGE = 2

NAME = 3

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

ENDFORM. " save_text

&----


*& Form display_error_list

&----


  • writing error list

----


FORM display_error_list.

If not it_error[] is initial.

sort it_error by vbeln.

loop at it_error.

write: /00 it_error-vbeln,

12 it_error-kunnr,

35 it_error-ship,

58 it_error-matnr,

88 it_error-msg.

if not it_error-pernr is initial.

write : 78 it_error-pernr.

endif.

endloop.

endif.

ENDFORM. " display_error_list

&----


*& Form column_headings

&----


  • writing Column Headings for errror records

----


FORM column_headings.

write : /00 text-002,

45 wk_success_rec.

write : /00 text-003,

45 wk_error_rec.

uline.

format color col_heading intensified.

write: /00 text-004,

12 text-005,

35 text-006,

58 text-007,

78 text-008,

88 text-009,

160 space.

format color col_heading intensified off.

uline.

ENDFORM. " column_headings

&----


*& Form valid_customer_data

&----


  • Check the combination of Customer number ,sales organisation,

  • Distribution channel & Division exist in Customer Master Sales

  • Data(KNVV) if not delete the old document number from internal

  • table

----


FORM valid_customer_data.

data : l_customer_text(50) type c.

if not it_sales[] is initial.

loop at it_sales.

*--- Check the combination of Customer number ,sales organisation,

*--- Distribution channel & Division exist in Customer Master Sales

*--- Data(KNVV)

clear : KNVV,

l_customer_text.

select single *

from knvv

  • into knvv

where Kunnr = It_sales-kunnr

and vkorg = it_sales-vkorg

and vtweg = it_sales-vtweg

and spart = it_sales-spart.

if sy-subrc ne 0.

it_error-vbeln = it_sales-vbeln.

concatenate text-014

it_sales-vkorg

it_sales-vtweg

it_sales-spart

text-015 into

l_customer_text separated by space.

it_error-msg = l_customer_text.

append it_error.

clear it_error.

delete it_sales where vbeln = it_sales-vbeln.

clear it_sales.

continue.

endif.

endloop.

endif. "if not it_sales[] is initial.

ENDFORM. " valid_customer_data

&----


*& Form clear_tables

&----


  • Clearing Internal table & variables

----


FORM clear_tables.

clear : it_file,

it_sales,

it_bdcdata,

it_bdcmsg,

it_error,

wk_success_rec,

wk_error_rec.

refresh : it_file,

it_sales,

it_bdcdata,

it_bdcmsg,

it_error.

ENDFORM. " clear_tables

former_member181962
Active Contributor
0 Kudos

HI Raj,

YOu have to clear the BDC internal table for each loop.

Regards,

Ravi

Former Member
0 Kudos

Hi Ravi,

I tried to clear the Internal table but still it is not looping the items.

Raj.