This program reads in external file E021 containing shipping and invoice data from internal vendors and creates one DESADV and one INVOIC IDoc per invoice.
REPORT ZS7BM000006 message-id ZS7. *______________________________________________________________________ */ Program Name: Creation of DESADV & INVOIC IDocs from file E021 */ Description : This program reads in external file E021 containing * shipping and invoice data from internal vendors and * creates one DESADV and one INVOIC IDoc per invoice. */ Transaction : n/a - run from job Z_ccc_S7B_Annnnn, where * 'ccc' = 3-digit client and 'nnnnn' = zero-filled * sequence number matching the scheduled job for E020. *______________________________________________________________________ tables: lfa1, lfm1, ekpo, eine, e1edk01, e1edk02, e1edk07, e1edk08, e1edk06, e1edk03, e1edka1, e1edka2, e1edp07, e1edp09, e1edp19, e1edp01, e1edp02, e1edp26, e1edp04, e1eds01, e1eds02, zst7f_ty_vendors. parameters: p_path like PATH-PATHEXTERN default '/ftp/atac/in/'. data: INFILE LIKE PATH-PATHEXTERN, back_path(7) type c value 'backup/', offset like sy-fdpos, p07_ctr like sy-index, invoice_total type p decimals 3, d_seg_num like sy-index, i_seg_num like sy-index. data: OUTFILE LIKE PATH-PATHEXTERN, today(8) type c. data: begin of uty_vendors occurs 10, lifnr like lfa1-lifnr, waers like lfm1-waers, name_abbr like zst7f_ty_vendors-name_abbr, ship_days like zst7f_ty_vendors-ship_days, end of uty_vendors. data: iZSS7B21 like ZSS7B21. data: desadvdata like edi_dd occurs 5 with header line. data: invoicdata like edi_dd occurs 5 with header line. data: dedidc like edi_dc occurs 1 with header line. data: iedidc like edi_dc occurs 1 with header line. data: begin of ie021 occurs 10, lifnr like lfa1-lifnr, ship_days like zst7f_ty_vendors-ship_days, invoice_no like e1edk08-vbeln, stat like e1edk01-action, po_number(10) type n, po_lineno(5) type n, slip_number like e1edp09-vbeln, shipto_id like e1edka1-partn, vendor_id like e1edka1-partn, endcust_name like e1edka1-name1, cust_partno like e1edp09-kdmat, "char 35 vendor_partno like e1edp09-matnr, "char 35 invoice_qty like e1edp09-lfimg, qty_uom like e1edp01-menee, unit_price like e1edp01-vprei, price_uom like e1edp01-pmene, price_qty like e1edp01-peinh, line_amount like e1edp26-betrg, currency like e1edk01-curcy, etd like e1edk06-datum, "ship date eta like e1edk06-datum, "delivery date ship_id like e1edk08-traid, ship_method like e1edk08-traty, create_date like e1edk03-datum, plant like ekpo-werks, end of ie021. data: save_po like ie021-po_number, save_line like ie021-po_lineno, save_stat like ie021-stat, save_invoice like ie021-invoice_no. constants: hun_thou type p decimals 5 value '100000', thou type p decimals 3 value '1000'. *&---------------------------------------------------------------------* *& DEFINITION: append_idoc_rec *&---------------------------------------------------------------------* * add a data record to the IDoc internal table *----------------------------------------------------------------------* define append_idoc_rec. &1-tabnam = &1-segnam. &2_seg_num = &2_seg_num + 1. &1-segnum = &2_seg_num. shift &1-segnum left deleting leading space. append &1. clear &1. end-of-definition. " append_idoc_rec *------------------------------------------------------------------ * MAIN PROCESSING LOOP *------------------------------------------------------------------ START-OF-SELECTION. today = sy-datum. * find all internal vendors select a~lifnr b~waers c~name_abbr c~ship_days into corresponding fields of table uty_vendors from lfa1 as a inner join lfm1 as b on a~lifnr = b~lifnr inner join zst7f_ty_vendors as c on a~lifnr = c~lifnr where a~ktokk = 'ZZTY' and b~ekorg = '7100' and c~ship_code = ' '. perform init_desadv. perform init_invoic. concatenate 'SAP' sy-sysid(3) into: iedidc-sndpor, dedidc-sndpor. loop at uty_vendors. clear ie021. refresh ie021. if not uty_vendors-name_abbr is initial. * datafiles are received with naming convention: * E020_<customer name abbreviation>_UTY concatenate p_path 'E021_' uty_vendors-name_abbr '_UTY' into infile. if not sy-subrc is initial. "pathname too long * Filename too long: & message i016 with infile. continue. endif. condense infile. OPEN DATASET INFILE FOR INPUT IN TEXT MODE. if not sy-subrc is initial. *'Cannot open dataset & on &' message i013 with infile sy-datum. continue. else. concatenate p_path back_path 'E021_' uty_vendors-name_abbr '_UTY' today into outfile. if not sy-subrc is initial. "pathname too long * Filename too long: & message i016 with outfile. continue. endif. condense outfile. OPEN DATASET OUTFILE FOR OUTPUT IN TEXT MODE. * if the datestamped file cannot be created, do not process the * input file, because the input file is deleted after processing, * and there would be no record of the data. if not sy-subrc is initial. *'ERROR opening file & for output' close dataset infile. message i033 with outfile. continue. "process next vendor's file endif. do. read dataset infile into izss7b21. case sy-subrc. when 0. transfer izss7b21 to outfile. if izss7b21-datacode = 'T'. "trailer rec perform process_one_vendor using infile. exit. "process next vendor's file endif. check: izss7b21-datacode = 'A'. "data rec case izss7b21-status. when ' '. "new ie021-stat = '000'. when 'M'. "modification ie021-stat = '002'. when 'D'. "deletion ie021-stat = '003'. endcase. move-corresponding uty_vendors to ie021. move-corresponding izss7b21 to ie021. perform convert_po_no using izss7b21-pono_poline changing ie021-po_number ie021-po_lineno. perform convert_dates using ie021-lifnr izss7b21-etd izss7b21-eta izss7b21-ship_method izss7b21-create_date changing ie021-eta ie021-ship_days. perform quantity_conversion using izss7b21-qty_uom izss7b21-invoice_qty izss7b21-unit_price changing ie021-qty_uom ie021-invoice_qty izss7b21-line_amount. perform money_conversion using izss7b21-currency izss7b21-unit_price izss7b21-price_uom izss7b21-line_amount changing ie021-currency ie021-price_uom ie021-price_qty ie021-unit_price ie021-line_amount. perform SAP_vendor_partno changing ie021-cust_partno. append ie021. when 4. "EOF perform process_one_vendor using infile. exit. "process next vendor's file when others. *ERROR reading dataset & - & message i015 with infile sy-datum. exit. endcase. enddo. close dataset: infile, outfile. delete dataset infile. endif. endif. endloop. "UTY_VENDORS *&---------------------------------------------------------------------* *& Form process_one_vendor *&---------------------------------------------------------------------* * Pre-processed records from one vendor file are now in the * internal table ie021 - ready to create IDocs *----------------------------------------------------------------------* FORM process_one_vendor using value(infile). sort ie021 by invoice_no stat po_number po_lineno. loop at ie021. if ( ie021-invoice_no <> save_invoice or ie021-stat <> save_stat ). if sy-tabix > 1. perform post_idocs using ie021-stat. endif. perform idoc_header_segs using ie021-stat. endif. if ( ie021-stat <> save_stat or ie021-po_number <> save_po or ie021-po_lineno <> save_line or ie021-invoice_no <> save_invoice ). if ( sy-tabix > 1 and ie021-stat = '000' ). perform idoc_poheader_segs. endif. endif. perform idoc_item_segs using ie021-stat. save_po = ie021-po_number. save_line = ie021-po_lineno. save_invoice = ie021-invoice_no. save_stat = ie021-stat. endloop. perform post_idocs using ie021-stat. * File successfully processed: & message s035 with infile. ENDFORM. " process_one_vendor *&---------------------------------------------------------------------* *& Form convert_po_no *&---------------------------------------------------------------------* * Break the PO number & line field into separate fields *----------------------------------------------------------------------* FORM convert_po_no using value(infield) changing po_number like ie021-po_number po_line like ie021-po_lineno. data: cpos like sy-fdpos, lpos like sy-fdpos, cline(6) type c. * if the infield contains a hyphen, assume that the preceding characters * represent the po number, if they are numeric. The po line number is * assumed to be all numeric characters after the hyphen. if infield ca '-'. if infield(sy-fdpos) co ' 0123456789'. "numeric po_number = infield(sy-fdpos). cpos = sy-fdpos + 1. endif. else. "no hyphen - PTY if infield(2) = '71'. "SAP number range cpos = 10. else. "SyteLine number cpos = 6. endif. if infield(cpos) co ' 0123456789'. "numeric po_number = infield(cpos). endif. endif. if not po_number is initial. while infield+cpos(1) co '0123456789'. cline+lpos(1) = infield+cpos(1). lpos = lpos + 1. cpos = cpos + 1. endwhile. shift cline left deleting leading '0'. if not cline is initial. po_line = cline. endif. endif. * Put out a warning in the job log, but create the IDoc to save the data if ( po_number is initial or po_line is initial ). * PO number - line item conversion failed: & message i034 with infield. endif. ENDFORM. " convert_po_no *&---------------------------------------------------------------------* *& Form convert_dates *&---------------------------------------------------------------------* * Convert ship date to delivery date, if necessary *----------------------------------------------------------------------* FORM convert_dates using value(vendor_no) value(i_ship_date) value(i_delivery_date) value(i_ship_code) value(i_create_date) changing o_delivery_date ship_days. data: ship_date type d. * if delivery date not sent, calculate it from ship date plus * ship days. * Note that this logic could leave delivery date blank, * if ship date is not numeric. if ( i_delivery_date is initial or i_delivery_date co ' 0' ). "no delivery date sent if ( i_ship_date co ' 0123456789' and i_ship_date cn ' 0' ). "ship date sent * move the ship date into a date field to add days ship_date = i_ship_date. elseif ( i_create_date co ' 0123456789' and i_create_date cn ' 0' ). ship_date = i_create_date. endif. if not i_ship_code is initial. select single ship_days from zst7f_ty_vendors into ship_days where lifnr = vendor_no and ship_code = i_ship_code. endif. if not ship_date is initial. if ship_days > 0. ship_date = ship_date + ship_days. o_delivery_date = ship_date. shift o_delivery_date left deleting leading ' '. endif. endif. else. "delivery date sent o_delivery_date = i_delivery_date. endif. ENDFORM. " convert_dates *&---------------------------------------------------------------------* *& Form quantity_conversion *&---------------------------------------------------------------------* * The quantities in the input file are implied 3-decimal, * so need to be converted into a "real" number. * Also, the unit of measure may be 'KP' indicating that the qty * is given in thousands. *----------------------------------------------------------------------* FORM quantity_conversion USING value(i_UOM) value(i_invoice_qty) value(i_unit_price) CHANGING o_uom like iE021-qty_UOM o_invoice_qty like IE021-INVOICE_QTY c_LINE_AMOUNT like izss7b21-line_amount. data: f_invoice_qty type f. data: n_invoice_qty like lips-kcmeng. data: f_unit_price type f. data: f_line_amt type f. data: n_line_amt0 type p decimals 0. if ( i_invoice_qty co ' 0123456789' and i_invoice_qty cn ' 0' ). f_invoice_qty = i_invoice_qty. * if no extended price is sent, calculate it if c_line_amount is initial. * the qty is implied 3-dec, the price is still implied * 5-dec, and line amount should be implied 3-dec. f_unit_price = i_unit_price. f_line_amt = ( f_invoice_qty * f_unit_price ) / 100000. n_line_amt0 = f_line_amt. c_line_amount = n_line_amt0. shift c_line_amount left deleting leading space. endif. * if the invoice qty is per 1000, the implied 3-dec times 1000 equals * the unconverted value. Otherwise, divide by 1000 to get the PCE qty if i_uom = 'KP'. n_invoice_qty = f_invoice_qty. else. n_invoice_qty = f_invoice_qty / thou. endif. endif. o_uom = 'PCE'. if not n_invoice_qty is initial. o_invoice_qty = n_invoice_qty. shift o_invoice_qty left deleting leading space. else. clear o_invoice_qty. endif. ENDFORM. " quantity_conversion *&---------------------------------------------------------------------* *& Form money_conversion *&---------------------------------------------------------------------* * Add the implied decimals and store price-per qty, if * price per 1,000 is sent. *----------------------------------------------------------------------* FORM money_conversion USING value(I_CURR) value(i_UNIT_PRICE) value(i_UOM) value(i_LINE_AMOUNT) CHANGING o_CURRENCY like ie021-currency o_PRICE_UOM like ie021-price_uom o_PRICE_QTY like ie021-price_qty o_UNIT_PRICE like ie021-unit_price o_LINE_AMOUNT like ie021-line_amount. data: n_unit_price type p decimals 5, n_line_amount type p decimals 3. * not all of the vendors send the currency code, so use the vendor * master default case i_curr(2). when 'US'. o_currency = 'USD'. when 'JP'. o_currency = 'JPY'. when others. o_currency = uty_vendors-waers. endcase. * unit price is implied 5-dec if ( i_unit_price cn ' 0' and i_unit_price co ' 0123456789' ). n_unit_price = i_unit_price. n_unit_price = n_unit_price / hun_thou. endif. * line price is implied 3-dec if ( i_line_amount co ' 0123456789' and i_line_amount cn ' 0' ). n_line_amount = i_line_amount. n_line_amount = n_line_amount / thou. endif. * 'KP' = price per thousand if i_uom = 'KP'. o_price_qty = '1000'. else. o_price_qty = '1'. endif. o_price_uom = 'PCE'. if not n_unit_price is initial. o_unit_price = n_unit_price. shift o_unit_price left deleting leading space. else. clear o_unit_price. endif. if not n_line_amount is initial. o_line_amount = n_line_amount. shift o_line_amount left deleting leading space. else. clear o_line_amount. endif. ENDFORM. " money_conversion *&---------------------------------------------------------------------* *& Form SAP_vendor_partno *&---------------------------------------------------------------------* * replace UTY part number sent by vendor with SAP material no. * from PO line item. *----------------------------------------------------------------------* FORM SAP_vendor_partno changing cust_partno like ie021-cust_partno. tables: makt. data: partno_sent like makt-maktx. partno_sent = cust_partno. clear: makt, cust_partno. select single matnr from ekpo into cust_partno where ebeln = ie021-po_number and ebelp = ie021-po_lineno. if sy-subrc is initial. *compare material description to part number sent by vendor select single maktx from makt into makt-maktx where matnr = cust_partno. if partno_sent <> makt-maktx. * 'Part No. Mismatch: PO & - &, Part sent &, SAP mat.no. &' message i031 with ie021-po_number ie021-po_lineno partno_sent makt-maktx. endif. else. "PO line not found *try to find SAP material number using 20-char catalog no. sent select single matnr from makt into cust_partno where maktx = partno_sent. if not sy-subrc is initial. * 'SAP material no. not found for & - PO & - &' message i032 with partno_sent ie021-po_number ie021-po_lineno. endif. endif. *if not found, IDoc will go to workflow for missing material no. ENDFORM. " SAP_vendor_partno *&---------------------------------------------------------------------* *& Form idoc_header_segs *&---------------------------------------------------------------------* * create internal table entries for header segments. * DESADV: * E1EDK07 * E1EDKA1 * E1EDK03 * E1EDK08 * E1EDKA2 * E1EDK06 * INVOIC: * E1EDK01 * E1EDKA1(s) * E1EDK02 * E1EDK03(s) *----------------------------------------------------------------------* FORM idoc_header_segs using value(desadv_ok). * INVOIC clear i_seg_num. invoicdata-segnam = 'E1EDK01'. e1edk01-action = ie021-stat. if ie021-currency(2) = 'US'. e1edk01-curcy = 'USD'. else. e1edk01-curcy = 'JPY'. endif. invoicdata-sdata = e1edk01. append_idoc_rec invoicdata i. clear e1edka1. invoicdata-segnam = 'E1EDKA1'. e1edka1-parvw = 'RE'. e1edka1-partn = ie021-shipto_id. invoicdata-sdata = e1edka1. append_idoc_rec invoicdata i. clear e1edka1. invoicdata-segnam = 'E1EDKA1'. e1edka1-parvw = 'LF'. e1edka1-partn = ie021-lifnr. e1edka1-lifnr = ie021-shipto_id. invoicdata-sdata = e1edka1. append_idoc_rec invoicdata i. if not ie021-endcust_name is initial. clear e1edka1. invoicdata-segnam = 'E1EDKA1'. e1edka1-parvw = 'WE'. e1edka1-name1 = ie021-endcust_name. invoicdata-sdata = e1edka1. append_idoc_rec invoicdata i. endif. clear e1edk02. invoicdata-segnam = 'E1EDK02'. e1edk02-qualf = '009'. e1edk02-belnr = ie021-invoice_no. invoicdata-sdata = e1edk02. append_idoc_rec invoicdata i. clear e1edk03. invoicdata-segnam = 'E1EDK03'. e1edk03-iddat = '012'. e1edk03-datum = ie021-create_date. invoicdata-sdata = e1edk03. append_idoc_rec invoicdata i. invoicdata-segnam = 'E1EDK03'. e1edk03-iddat = '024'. invoicdata-sdata = e1edk03. append_idoc_rec invoicdata i. check desadv_ok = '000'. * DESADV clear d_seg_num. desadvdata-segnam = 'E1EDK07'. e1edk07-action = ie021-stat. e1edk07-bolnr = ie021-invoice_no. desadvdata-sdata = e1edk07. append_idoc_rec desadvdata d. clear e1edka1. desadvdata-segnam = 'E1EDKA1'. desadvdata-sdata = e1edka1. append_idoc_rec desadvdata d. clear e1edk03. desadvdata-segnam = 'E1EDK03'. desadvdata-sdata = e1edk03. append_idoc_rec desadvdata d. clear e1edk08. desadvdata-segnam = 'E1EDK08'. e1edk08-vbeln = ie021-invoice_no. e1edk08-traid = ie021-ship_id. e1edk08-traty = ie021-ship_method. desadvdata-sdata = e1edk08. append_idoc_rec desadvdata d. clear e1edka2. desadvdata-segnam = 'E1EDKA2'. desadvdata-sdata = e1edka2. append_idoc_rec desadvdata d. clear e1edk06. desadvdata-segnam = 'E1EDK06'. e1edk06-iddat = '025'. "document date e1edk06-datum = ie021-create_date. desadvdata-sdata = e1edk06. append_idoc_rec desadvdata d. if not ie021-eta is initial. clear e1edk06. desadvdata-segnam = 'E1EDK06'. e1edk06-iddat = '001'. "delivery date e1edk06-datum = ie021-eta. desadvdata-sdata = e1edk06. append_idoc_rec desadvdata d. endif. if not ie021-etd is initial. clear e1edk06. desadvdata-segnam = 'E1EDK06'. e1edk06-iddat = '010'. "ship date e1edk06-datum = ie021-etd. desadvdata-sdata = e1edk06. append_idoc_rec desadvdata d. endif. ENDFORM. " idoc_header_segs *&---------------------------------------------------------------------* *& Form idoc_poheader_segs *&---------------------------------------------------------------------* * create internal table entries for DESADV PO/item segments * E1EDP07 *----------------------------------------------------------------------* FORM idoc_poheader_segs. *DESADV clear e1edp07. desadvdata-segnam = 'E1EDP07'. e1edp07-bstnk = ie021-po_number. e1edp07-posex = ie021-po_lineno. desadvdata-sdata = e1edp07. append_idoc_rec desadvdata d. p07_ctr = p07_ctr + 1. ENDFORM. " idoc_poheader_segs *&---------------------------------------------------------------------* *& Form idoc_item_segs *&---------------------------------------------------------------------* * create internal table entries for PO item segments: * DESADV: E1EDP09 * INVOIC: E1EDP01 Qtys * E1EDP02 ref nos. (PO number / line) * E1EDP19 part numbers * E1EDP26 amounts * E1EDP04 taxes *----------------------------------------------------------------------* FORM idoc_item_segs using value(desadv_ok). data: n_line_amt type p decimals 3. *INVOIC clear e1edp01. invoicdata-segnam = 'E1EDP01'. e1edp01-menee = ie021-qty_uom. e1edp01-menge = ie021-invoice_qty. e1edp01-vprei = ie021-unit_price. e1edp01-pmene = ie021-price_uom. e1edp01-peinh = ie021-price_qty. e1edp01-netwr = ie021-line_amount. invoicdata-sdata = e1edp01. append_idoc_rec invoicdata i. clear e1edp02. invoicdata-segnam = 'E1EDP02'. e1edp02-qualf = '001'. e1edp02-belnr = ie021-po_number. e1edp02-zeile = ie021-po_lineno. invoicdata-sdata = e1edp02. append_idoc_rec invoicdata i. clear e1edp19. invoicdata-segnam = 'E1EDP19'. e1edp19-qualf = '001'. e1edp19-idtnr = ie021-cust_partno. invoicdata-sdata = e1edp19. append_idoc_rec invoicdata i. clear e1edp19. invoicdata-segnam = 'E1EDP19'. e1edp19-qualf = '002'. e1edp19-idtnr = ie021-vendor_partno. invoicdata-sdata = e1edp19. append_idoc_rec invoicdata i. clear e1edp26. invoicdata-segnam = 'E1EDP26'. e1edp26-qualf = '003'. e1edp26-betrg = ie021-line_amount. invoicdata-sdata = e1edp26. append_idoc_rec invoicdata i. * dummy tax seg clear e1edp04. invoicdata-segnam = 'E1EDP04'. e1edp04-msatz = '0.00'. invoicdata-sdata = e1edp04. append_idoc_rec invoicdata i. n_line_amt = ie021-line_amount. invoice_total = invoice_total + n_line_amt. check desadv_ok = '000'. *DESADV clear e1edp09. desadvdata-segnam = 'E1EDP09'. e1edp09-vbeln = ie021-slip_number. e1edp09-matnr = ie021-vendor_partno. e1edp09-vrkme = ie021-qty_uom. e1edp09-lfimg = ie021-invoice_qty. desadvdata-sdata = e1edp09. append_idoc_rec desadvdata d. ENDFORM. " idoc_item_segs *********************************************************************** *& Form post_idocs *&---------------------------------------------------------------------* * create database IDocs from the idocdata tables and clear tables. *----------------------------------------------------------------------* FORM post_idocs using value(desadv_ok). *INVOIC clear e1eds01. invoicdata-segnam = 'E1EDS01'. e1eds01-sumid = '010'. e1eds01-summe = invoice_total. e1eds01-waerq = ie021-currency. shift e1eds01-summe left deleting leading space. invoicdata-sdata = e1eds01. append_idoc_rec invoicdata i. CALL FUNCTION 'INBOUND_IDOC_PROCESS' TABLES IDOC_CONTROL = iedidc IDOC_DATA = invoicdata. commit work. *DESADV if desadv_ok = '000'. clear e1eds02. desadvdata-segnam = 'E1EDS02'. e1eds02-sumid = '001'. e1eds02-summe = p07_ctr. shift e1eds02-summe left deleting leading space. desadvdata-sdata = e1eds02. append_idoc_rec desadvdata d. CALL FUNCTION 'INBOUND_IDOC_PROCESS' TABLES IDOC_CONTROL = dedidc IDOC_DATA = desadvdata. commit work. endif. refresh: desadvdata, invoicdata. clear: desadvdata, invoicdata, p07_ctr, invoice_total, save_stat, save_po, save_line, save_invoice. ENDFORM. " post_idocs *&---------------------------------------------------------------------* *& Form init_desadv *&---------------------------------------------------------------------* * add a DESDAV control record and initialize fields *----------------------------------------------------------------------* FORM init_desadv. clear dedidc. refresh dedidc. * initialize control record: move: '2' to dedidc-direct, 'DESADV01' to dedidc-doctyp, 'DESADV' to dedidc-mestyp, 'F' to dedidc-std, 'E021' to dedidc-stdmes, 'LS' to dedidc-sndprt, 'TY_VENDORS' to dedidc-sndprn, sy-datlo to dedidc-credat, sy-timlo to dedidc-cretim. append dedidc. ENDFORM. " init_desadv *&---------------------------------------------------------------------* *& Form init_invoic *&---------------------------------------------------------------------* * add a INVOIC control record and initialize fields *----------------------------------------------------------------------* FORM init_invoic. clear iedidc. refresh iedidc. * initialize control record: move: '2' to iedidc-direct, 'INVOIC01' to iedidc-doctyp, 'INVOIC' to iedidc-mestyp, 'MM' to iedidc-mescod, 'F' to iedidc-std, 'E021' to iedidc-stdmes, 'LS' to iedidc-sndprt, 'TY_VENDORS' to iedidc-sndprn, sy-datlo to iedidc-credat, sy-timlo to iedidc-cretim. append iedidc. ENDFORM. " init_invoic
Related Items:
|