Skip to Content
2
Former Member
Jul 03, 2007 at 07:23 PM

The input file format

76 Views

Hi Experts,

I have a tricky situation here. We have a program to load the master recipe(tcode C201) into SAP from a file. This was written long time back. Now I have to formulate the input file to make this program work. But honestly I am unable to do this. Can somebody please let me know what is the format of the input file.

I appreciate your help.

Regards.

SK

Here's the program..............

REPORT zvtest1 MESSAGE-ID fb.

DATA: rec_type, "record type 0 = header,

" 1=material allocation

" 2 = operation detail

sv_rec_type,

fcode(4),

first_time_in_op(1),

op_line(2) TYPE n,

scr_line(2) TYPE n,

workspace(200).

DATA: BEGIN OF hdr_rec,

plnnr(8), "planner group

profidnetz(7), "profile id

werks(4), "Plant

ktext(40), " recipe text

verwe(3), " usage

statu(3), " status

losvn(13), " qty from

losbs(13), " qty to

plnme(3), " header uom

END OF hdr_rec.

DATA: BEGIN OF oper_rec,

vornr(4), " activity #

phflg(1), "phase flag

pvznr(4), " superior oper#

phseq(2), " control recipe dest

arbpl(8), " resource

ltxa1(40), " oper short desc

vgw01(11), "duration

vge01(3), "duration units

bmsch(13), "base

steus(4), "control key

END OF oper_rec.

DATA: BEGIN OF mtl_rec,

plnal(2), " recipe #

matnr(18), " bulk material

werks(4), " Plant

verid(4), "production verion#

stlal(2), "Alt BOM

stlan(1), "BOM usage

END OF mtl_rec.

DATA: fld_vornr(15),

fld_phflg(15),

fld_pvznr(15),

fld_phseq(15),

fld_arbpl(15),

fld_ltxa1(15),

fld_flg_sel(17),

fld_prev_flg(17),

fld_steus(17).

DATA: first-rec TYPE c VALUE 'Y',

first-header TYPE c VALUE 'Y'.

PARAMETERS file(70) DEFAULT 'm:\sapc\spf3'.

DATA: wa LIKE workspace OCCURS 0 WITH HEADER LINE,

bdc_tab LIKE bdcdata OCCURS 0 WITH HEADER LINE.

AT SELECTION-SCREEN.

OPEN DATASET file FOR INPUT IN TEXT MODE.

IF sy-subrc <> 0.

MESSAGE e002(fb) WITH file.

  • File & could not be opened

ENDIF.

START-OF-SELECTION.

DO.

READ DATASET file INTO wa.

IF sy-subrc <> 0.

EXIT.

ENDIF.

APPEND wa.

ENDDO.

CALL FUNCTION 'BDC_OPEN_GROUP'

EXPORTING

client = sy-mandt

group = 'RECIPE'

keep = 'X'

user = sy-uname.

LOOP AT wa.

IF first-rec = 'N'.

CASE rec_type.

WHEN '0'.

op_line = 0.

IF first-header = 'N'.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

tcode = 'C201'

TABLES

dynprotab = bdc_tab

EXCEPTIONS

internal_error = 1

not_open = 2

queue_error = 3

tcode_invalid = 4

OTHERS = 5.

REFRESH bdc_tab.

ENDIF.

first-header = 'N'.

*

PERFORM generate_hdr_data. " fill bdc_table

WHEN '1'.

PERFORM generate_mtl_alloc_data. " fill bdc_table

WHEN '2'.

op_line = op_line + 1.

PERFORM generate_detail_data.

IF oper_rec-phflg = 'X'.

PERFORM generate_std_data.

ENDIF.

ENDCASE.

ENDIF.

first-rec = 'N'.

sv_rec_type = rec_type.

rec_type = wa(1).

CASE rec_type.

WHEN '0'.

IF first-header <> 'Y'. "last record for group

PERFORM save_recipe.

ENDIF.

MOVE wa+1 TO hdr_rec.

first_time_in_op = 'Y'.

WHEN '1'.

MOVE wa+1 TO mtl_rec.

WHEN '2'.

MOVE wa+1 TO oper_rec.

ENDCASE.

ENDLOOP.

  • save last record group

CASE rec_type.

WHEN '0'.

PERFORM generate_hdr_data. " fill bdc_table

WHEN '1'.

PERFORM generate_mtl_alloc_data. " fill bdc_table

WHEN '2'.

op_line = op_line + 1.

PERFORM generate_detail_data.

IF oper_rec-phflg = 'X'.

PERFORM generate_std_data.

ENDIF.

ENDCASE.

PERFORM save_recipe.

  • submit the job to the system, it's completed.

CALL FUNCTION 'BDC_INSERT'

EXPORTING

tcode = 'C201'

TABLES

dynprotab = bdc_tab

EXCEPTIONS

internal_error = 1

not_open = 2

queue_error = 3

tcode_invalid = 4

OTHERS = 5.

  • End the batch transaction...

CALL FUNCTION 'BDC_CLOSE_GROUP'.

WRITE: /'Session created'.

END-OF-SELECTION.

&----


*& Form GENERATE_HDR_DATA

&----


  • Input the header data into the appropriate screen fields.

----


FORM generate_hdr_data.

PERFORM dynpro USING:

'X' 'SAPLCPDI' '4000', " Initial Screen

' ' 'RC271-PLNNR' hdr_rec-plnnr, " recipe group

' ' 'RC271-PROFIDNETZ' hdr_rec-profidnetz, " Document type

' ' 'RC271-WERKS' hdr_rec-werks, " Plant

' ' 'RC271-STTAG' '08111998',

' ' 'BDC_OKCODE' ' ', " set up recipe

'X' 'SAPLCPDA' '4210', "Header general view

' ' 'PLKOD-KTEXT' hdr_rec-ktext, "recipe short desc

' ' 'PLKOD-VERWE' hdr_rec-verwe, "usage

' ' 'PLKOD-STATU' hdr_rec-statu, "recipe status

' ' 'PLKOD-LOSVN' hdr_rec-losvn, "charge from

' ' 'PLKOD-LOSBS' hdr_rec-losbs, "charge to

' ' 'PLKOD-PLNME' hdr_rec-plnme. "header UOM

  • ' ' 'BDC_OKCODE' '/16 '. "go to operations

ENDFORM. " GL_HDR_DATA

&----


*& Form GENERATE_MTL_ALLOC

&----


  • Input the material allocation.

----


FORM generate_mtl_alloc_data.

PERFORM dynpro USING:

' ' 'BDC_OKCODE' '/16',

'X' 'SAPLCZDI' '4230', " Material alloc screen

' ' 'MAPL-PLNAL(1)' mtl_rec-plnal, " recipe #

' ' 'MAPL-MATNR(1)' mtl_rec-matnr, " Bulk material

' ' 'MAPL-WERKS(1)' mtl_rec-werks, " Plant

' ' 'BDC_OKCODE' '/2 ', " go to prod version

'X' 'SAPLCMFV' '0200', "Prod version screen

' ' 'MKAL-VERID' mtl_rec-verid, "recipe short desc

' ' 'MKAL-STLAL' mtl_rec-stlal, "Alt BOM

' ' 'MKAL-STLAN' mtl_rec-stlan, "BOM usage

' ' 'BDC_OKCODE' ' ', "go back

'X' 'SAPLCZDI' '4230', "back to alloc screen

' ' 'BDC_OKCODE' '/8 ', "go back to hdr

'X' 'SAPLCPDA' '4210'.

  • ' ' 'BDC_OKCODE' '/8 '. "go to oper screen

ENDFORM. " generate_mtl_alloc_data

&----


*& Form generate_detail_data.

&----


  • Input the detail data into the appropriate screen fields. *

----


FORM generate_detail_data.

IF op_line > 10.

scr_line = ( op_line MOD 9 ).

CASE scr_line.

WHEN 0.

scr_line = 9.

WHEN 1.

scr_line = 10.

WHEN 2.

PERFORM dynpro USING:

' ' 'BDC_OKCODE' '/23 '.

ENDCASE.

ELSE.

scr_line = op_line.

ENDIF.

CONCATENATE 'PLPOD-VORNR(' scr_line ')' INTO fld_vornr.

CONCATENATE 'PLPOD-PHFLG(' scr_line ')' INTO fld_phflg.

CONCATENATE 'PLPOD-PVZNR(' scr_line ')' INTO fld_pvznr.

CONCATENATE 'PLPOD-PHSEQ(' scr_line ')' INTO fld_phseq.

CONCATENATE 'PLPOD-ARBPL(' scr_line ')' INTO fld_arbpl.

CONCATENATE 'PLPOD-LTXA1(' scr_line ')' INTO fld_ltxa1.

CONCATENATE 'PLPOD-STEUS(' scr_line ')' INTO fld_steus.

  • first time in this screen for a product, we have to set send a

  • function code to indicate which screen we want to go to. We may

  • either be coming from the header screen or the material allocation

  • screen.

IF first_time_in_op = 'Y'.

  • if sv_rec_type = '0'. " no material allocation record

  • fcode = '/8'. " header was last screen

  • else.

  • fcode = '/16'. " material allocation was last screen

  • endif.

PERFORM dynpro USING:

' ' 'BDC_OKCODE' '/8'.

first_time_in_op = 'N'.

ENDIF.

PERFORM dynpro USING:

'X' 'SAPLCPDI' '4400', "Operations overview

' ' fld_vornr oper_rec-vornr, "activity

' ' fld_phflg oper_rec-phflg, "phase flag

' ' fld_pvznr oper_rec-pvznr, "superior op#

' ' fld_phseq oper_rec-phseq, "control recipe dest

' ' fld_arbpl oper_rec-arbpl, "resource

' ' fld_steus oper_rec-steus, "control key

' ' fld_ltxa1 oper_rec-ltxa1, "operation description

' ' 'BDC_OKCODE' ' '.

ENDFORM. " GL_G001_DATA

&----


*& Form save_recipe.

&----


  • Input the save command. *

----


FORM save_recipe.

PERFORM dynpro USING:

' ' 'BDC_OKCODE' '/11 '.

ENDFORM. " GL_G001_DATA

&----


*& Form GENERATE_STD_DATA

&----


  • Input the header data into the appropriate screen fields.

----


FORM generate_std_data.

CONCATENATE 'RC27X-FLG_SEL(' scr_line ')' INTO fld_flg_sel.

PERFORM dynpro USING:

' ' fld_flg_sel 'X', "mark selected activity

' ' 'BDC_OKCODE' 'ARBD'," go to std values screen

'X' 'SAPLCPDO' '4410', "STD values screen

  • ' ' 'bdc_okcode' ' ',

' ' 'bdc_okcode' '/00',

'X' 'SAPLCPDO' '4410',

' ' 'PLPOD-VGW01' oper_rec-vgw01, "duration

' ' 'PLPOD-VGE01' oper_rec-vge01. "duration units

IF oper_rec-bmsch = ' /'.

PERFORM dynpro USING:

'X' 'SAPLCPDO' '4410',

' ' 'BDC_OKCODE' '/3 '.

ELSE.

PERFORM dynpro USING:

'X' 'SAPLCPDO' '4410',

' ' 'PLPOD-BMSCH' oper_rec-bmsch, "base

' ' 'bdc_okcode' '/3 '. "go back to select screen

ENDIF.

PERFORM dynpro USING:

'X' 'SAPLCPDI' '4400', "Operations screen

' ' fld_flg_sel ' '. "mark selected activity

ENDFORM. " generate_std_data

&----


&----


*& Form DYNPRO

&----


FORM dynpro USING dynbegin name value.

  • Clean bdc-tab for all processing...

CLEAR bdc_tab.

IF dynbegin = 'X'. " Initialize the first screen.

MOVE: name TO bdc_tab-program,

value TO bdc_tab-dynpro ,

'X' TO bdc_tab-dynbegin.

ELSE. " Perform input into the screen

MOVE: name TO bdc_tab-fnam,

value TO bdc_tab-fval.

ENDIF.

  • Append bdc_tab for all processing...

APPEND bdc_tab.

ENDFORM. " DYNPRO