report zvadin02 line-count 100 message-id vn. *@---------------------------------------------------------------------- *@ Program id : ZVADIN02 *@ Program Desc : Nowsco Invoice Printing *@ 1st - Original program: RVADIN01 *@ *@ Transaction Code - none *@ Input files : ID - none *@ Output files : ID - none *@ *@ Tables Updated: Table - none *@ *@ *@ Author : T. Nguyen *@ Date : Jan 28 95 *@ Requested by: Nowsco Well Services *@---------------------------------------------------------------------- *@ Algorithm: ZVDOINV1 (using print processor) - T. Nguyen *@ I have modified this program so that a file is generated when *@ someone has tried to print an invoice. This file contains *@ information about the invoice. Whenever possible, the data *@ is written to file when the original program is writing the *@ the same data to the form to be printed. This insures that *@ the data written to the file is the same as that which is *@ printed on the invoice print out. Any data that is not on *@ the invoice print out is handled by a seperate routine by *@ accessing the appropriate table(s). *@---------------------------------------------------------------------- ** MODIFICATION DETAILS: ** Jan 28 95 TNguyen Major changes to original program ** Feb 01 95 TNguyen Write 'N/C' to item prices when item category ** is ZFOB, AGNN, ZFOC, TANN ** C11K900704 Mar PTAM Suppress B C surcharge line at item level ** Field no should be 31 instead of 01 at header ** ** C11K900736 Apr PTAM Suppress group item detail lines and ** fix price on group item header line ** ( Assume group items must be all or non on a ** same invoice ) ** C11K900784 Apr TNGUYEN print Date of Service to flat file, id 21 ** C11K900750 Apr PTAM For CR Memo, print Order No., Date of Service & ** Job type. ** C11K900934 May TNGUYEN print Invoice comments, Base in charge ** Jun TNGUYEN Get correct document title for G2, L2. ** LABK900750 Jul DVFINTEL Emergency fix to get order number on invoice ** printout ** LABK900923 Jul TNGUYEN Fix get header text problem. Added ** subroutine GET_DOC_HEADER_TEXT ** Aug PTAM - Draft invoice is replaced by Proforma inv ** - Find all delivery notes instead of 1 ** Jlai - To get path from table FILENAME ** LABK901070 Aug PTAM - if HM00 exists in cond type ** = print N/C for price ** = suppress SURCHG ** LABK901124 Sep RVAT - If there's an HM00 output HM00 for Header ** - Also output an HM00 at the item level ** - OUtput the SAP Document type F2, F8, etc ** - Output the ZREB Condition amount ** LABK901167 950928 TN - Fix the problem of empty TKOMVD table ( the ** the table is retured by SAP function) ** LABK901387 951204 TN - Get document type for reverse doc. Required ** for MS Access table ZTMPL. ** LABK901422 951219 GS - Add SD category as key to look up table ** ZTMPL ** 960103 GS - Added quick fix to avoid double printing of ** 01 000001 38 (tax) ** - see " gs - quick fix ** LABK901643 960301 JLai - To eliminate Too Small Condition ** ** LABK901707 960315 JLAI - To get specify template for F8 ** ** LABK901744 960328 GSOLTYS - write out freight to flat file for ** use in ceco invoice (cond. type HD00) ** - for company code 2600, bypass checking ** item total vs. invoice total. ** - all changes commented with "gs ** ** LABK901926 960530 GSOLTYS - Undo change to bypass checking item total ** vs. invoice total for comp. code 2600. ** Instead, whenever we print out '02' '32', ** this is the number we use for a running ** sum. This is based on the assumption ** that '32' is used ONLY for this purpose. ** - changes commented with "gs2 ** - Use product line from line item as ** part of compound key to retreive template ** from ztmpl (get_ms_access_template) ** As a precaution, if we can't find a ** product line, use previous logic and use ** a '1'. Changes outlined with "gs3. ** LABK901693 960531 GSOLTYS - Compensate for provincial surcharge in ** 'Do Not Mail' validation. Changes ** commented with "gs4 ** LABK901946 960606 Jlai - To pass old quantity from quotation ** to invoice ** GSoltys - compensate for new condition type ZRYT ** - when it exits, blank out the discount % ** at the item level ** - changes commented with "gs5 **LABK902148 960819 JLlai - To fix bug for order quantity from quote **LABK902227 960918 GSoltys - allow FOB additives on invoice ** - changes commented with "gs6 **labk902142 Gsoltys Utilize 'department' field of header-output as ** October 7th, 1996 drop zone indicator. Changes commented ** "gs7 ** **LABK902133 961011 JBallard - Added the table PA0001 to replace PREL ** (used to retrieve employee names). ** Commented with "jb1. ** ** Special Note: If SAP ever deletes PREL ** The tables PA0001, PA0002, PA000#, etc. ** can be used, depending on the infotype # ** **LABK902421 961204 jlai - To add material description to itemtab ** for further matching purpose ** gsoltys - Prevent double net value(29) output ** - commented with "gs8 **LABK902417 December 6th, 1996 GSoltys ** Get well information from sales order instead of from ** invoice. ** Changes commented with "gs9 **LABK902483 January 8th, 1997 GSoltys ** To implememt BJ special price condition - ZBJS ** Changes commented with "gs10 ** **LABK902772 January 13, 1997 JBallard ** Modified to flag a Performa (F8) or and Invoice (F2) ** if any of the following conditions are met: ** ** 1. Items that are in category TAS or ZAS and have a ** pricing condition of ZDSC. ** 2. Any item with a positive discount and with a ** pricing condition of ZDSC. ** ** The invoice is flagged with a DO NOT MAIL message ** that will be printed off in Access. ** Changes commented with "jb2. ** ** January 23, 1997 JBallard ** Same as above but invoice is also flagged if: ** 1. PB00 and PB01 occur on same item. ** 2. Double HM00 condition. ** 3. HM00 and ZDSC cond together. ** 4. ZBJS with ZDBP, PB00, PB01. ** Added subroutine PRINT_INVOICE_HEADER_ERROR - prints ** a DO NOT MAIL error message for flagged invoices. ** Changes commented with "jb2 ** ** March 26, 1997 JBallard ** Tax jurisdiction is now downloaded to the flat file ** so that Access can determine whether to print ** H.S.T for jurisdictions CHNS1, and CHNF1 (CH*). ** Done for companies in Newfoundland and Nova Scotia ** where P.S.T. and G.S.T. are combined into H.S.T. ** (Harmonized Sales Tax). ** Changes commented with jb3. ** ** April 4, 1997 Jballard ** Added condition for invoice validations that ** only look at invoices greater than 71041090. Done so ** that the validations dont kick in for old invoices. ** Changes commented with jb4 ** **LABK910355 Feb 18, 1998 LABK910355 ** Add validation to ensure that the Ship To/Tax area ** on the invoice is the same one as on the sales order. ** Changes commented with jb5 **---------------------------------------------------------------------- **LABK910778 March 13, 1998 ** Suppress printing of items that do not have a ** material number. ** Changes commented with jb6 **---------------------------------------------------------------------- **LABK912012 June 17, 1998 ** Additional chagned regarding Ship To/Tax area, ** See LABK910355. Changes marked with gh1 **---------------------------------------------------------------------- **LABK9* Sept 29, 1998 CFieulle ** Enable printing by SAPScript as well as print ** processor. SAPScript uses layout set ZV_NWS_INVOICE01. ** Two other abap's copied to use SAPscript: ** zvprint3 (from zvprint2) ** zvrefsi2 (from zvrefsi1) **---------------------------------------------------------------------- **LABK913512 Nov 23, 1998 CFieulle ** Sort items by material number so items of a ** particular material group (eg. PRODUCT) print ** together. **LABK913516 Make SAPScript copy the 'Do Not Use Copy' for now. **---------------------------------------------------------------------- **LABK913524 Nov 24, 1998 CFieulle ** Items of same description should be compressed into ** one line item. ** Use 'Invoice Form' field of document header text ** as flag for reprinting of an original document. ** User will enter the word original in this field. **---------------------------------------------------------------------- **LABK916213 Aug 23, 1999 CFieulle ** For situations where there are line items of condition ** type HM00 with no price (free) (item category TANN, ** ZFOC or ZTAP) which users want to be included in the * fixed price, because these items have no price, ** they have been separated into 'Additional Items'. ** Modify so that these items are included in the ** fixed price. **---------------------------------------------------------------------- ** LABK918227 Jan 27, 2000 CFieulle ** Add new condition type Nowsco special discount. ** Configured for Wascana only, and amount to be printed ** after BC surcharge and before tax. **---------------------------------------------------------------------- ** LABK918670 CFieulle 2000-03-09 Re user default printer message: ** specify message type 'ZZ', so that ** message VN001 doesn't come up ** when there is a printer error. **---------------------------------------------------------------------- ** Post 46B upgrade** ** LABK926189 CFieulle 2000-07-10 For 46B, jobtype descriptions are ** are now appended with the job type ** number. We don't want to show the ** number when printing. **---------------------------------------------------------------------- ** LABK926388 CFieulle 2000-07-26 Item text is brought in via ** 'RV_BILLING_PRINT_VIEW' from the ** delivery note. However, the users ** need to change the item descr from ** time to time, in which case, they ** would have to change the del note ** item text. BUT item text in del's ** can't be changed, so we're making ** sure that the item text we display ** on the invoice comes from the ** corresponding sales order line item. **---------------------------------------------------------------------- ** LABK926703 CFieulle 2000-08-25 Header text retrieval. Make sure ** that an invoice/order or quote ** number exists to plug into stxl id ** to prevent pulling up a header text ** when none exists for current document **---------------------------------------------------------------------- ** LABK928274 CFieulle 2000-09-26 Disable file extraction. **---------------------------------------------------------------------- ** LABK928636 CFieulle 2000-10-27 Header texts: afe and proposal no.: ** When a document is copied to another the text may be ** copied, but only up to a certain number of docs. So ** when searching for the text, if there's none, check ** back to the referenced docs to find the text. **---------------------------------------------------------------------- ** LABK928651 CFieulle 2000-10-31 Re LABK928636 above. Correct ** infinite loop. **---------------------------------------------------------------------- ** LABK928790 CFieulle 2000-11-14 Header texts: Re LABK928636 above ** Do the same for Customer Field Rep. **---------------------------------------------------------------------- ** LABK929091 Gary Horn January 5, 2001 ** Add logic to look for ZCO2 condition type ** - changes marked with gh3 **---------------------------------------------------------------------- ** LABK929819 CFieulle February 06, 2001 ** Logic to handle C02 surcharge: condition type ZBJS. **---------------------------------------------------------------------- ** LABK930236 CFieulle June 19, 2001 ** New Condition type Z100 created for 'no-charge' items. ** Items of category 'TANN', ZTAP', and 'ZFOC' are auto- ** matically defaulted to this cond. type and therefore ** should have no price. **---------------------------------------------------------------------- ** LABK931107 CFieulle Oct 30, 2001 ** Credit Memos: For HM00's, instead of printing each ** line item, change to print only main HM00 line just as ** for regular invoices. **---------------------------------------------------------------------- ** LABK931123 CFieulle Oct 31, 2001 ** Co 9040: do not exclude first 4 chars of job type desc. ** for invoices created from Oct 1, 2001 **---------------------------------------------------------------------- ** LABK931392 IJADALOW December 04, 2001. ** Replacing tables TVV1 and TVV1T, with tables T2502 and ** T25A2 respectively. T2502 contains all job types from ** the past as well as current ones. ** Requestd by Ophelia Tik. ** Look for "IJ1" for the changes made. ** LABK931491 IJADALOW December 14, 2001. ** Fix output of the Job Description. **---------------------------------------------------------------------- ** LABK934346 Field 'lines' in structure zinvoice01 was changed from ** 2 chars to 4. Condense so that it can be read correctly ** in the layoutset, else it affects the alignment of the ** form. **---------------------------------------------------------------------- ** LABK934226 IJADALOW January 3, 2003 ** & Print Parent item of FOB's. ** LABK934392 This FOB change is effective for Berlington Cementing ** Invoices Only *@---------------------------------------------------------------------- ** LABK934576 IJADALOW March 12, 2003 ** Print the Fuel Surcharge **---------------------------------------------------------------------- ** LABK934634 CFieulle March 20, 2003 ** Allow for extra line for fuel surcharge in the 'Total' ** box of the printout. **---------------------------------------------------------------------- tables: komk, "Communicationarea for conditions komp, "Communicationarea for conditions komvd, "Communicationarea for conditions vbco3, "Communicationarea for view vbdkr, "Headerview vbdpr, "Itemview sadr, "Addresses tvko, "Sales organisation tvstt, "Plant name * FILENAME, "Path adrs, "Communicationarea for Address konv. "gs include rvadtabl. * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - data: zryt_flag type i. "gs5 data: net_printed type i. "gs8 data: freight_value like konv-kwert. "gs *DATA: PATH(60) TYPE C. data: retcode like sy-subrc. "Returncode data: repeat(1) type c. data: xvbeln like vbrk-vbeln. data: xposnr like vbrl-posnr. data: begin of tvbdpr occurs 100. "Internal table for items include structure vbdpr. data: end of tvbdpr. data: begin of tkomv occurs 50. include structure komv. data: end of tkomv. data: begin of tkomvd occurs 50. include structure komvd. data: end of tkomvd. * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - data: pr_kappl(01) type c value 'V'. "Application for pricing * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * ******************************************************************** * Nowsco required additional data include zvprtda1. tables: vbrp, *vbrp, komv, vbak, *** IJ1 Replace Starts * vbfa, vbpa, tvv1t, vbrk, bkpf, vbfa, vbpa, T25A2, vbrk, bkpf, *** IJ1 Replace Ends prel, " Employee names AClimie pa0001, "Replaces PREL for empl. names - jb1 p0001. data: filenam(8), text80(80) type c, text240(240) type c, item_count(6) type n, item_field_id(2) type n, item_total_after_disc like komvd-kwert, book_total like komvd-kwert, del_notes(78) type c, len(2) type n, doc_type like vbrk-fkart, product_line_flag type i, "gs3 prod_line like vbrp-kvgr2. "gs3 data: job_type_no like vbak-kvgr1, "AClimie item_gross_value like komvd-stunr value '100', item_fixed_price like komvd-stunr value '016', hm00_cond like komvd-stunr value '420', hm00_cond_flag(1) type c value 'N', hm00_header_cond_flag(1) type c value 'N', hm00_exists(1) type c value ' ', net_value1 like komvd-stunr value '400', net_value2 like komvd-stunr value '500', tax_id(2) type n value '32', last_print_date like nast-datvr, last_print_time like nast-uhrvr, opr_zyrt like komvd-stunr value '430', "gs5 opr_zbjs like komvd-stunr value '398', "gs10 c02_cond_old like komvd-stunr value '398', "LABK929819 c02_cond_new like komvd-stunr value '425', "LABK929819 c02_new_cond_flag(1) type c, "LABK929819 opr_nocharge like komvd-stunr value '350', "LABK930236 zdsc_cnt_flag type i, "jb2 tas_zas_flag(1) type c, "jb2 bad_item_no1 like vbrp-posnr, "jb2 bad_item_no2 like vbrp-posnr, "jb2 bad_item_no3 like vbrp-posnr, "jb2 bad_item_no4 like vbrp-posnr, "jb2 bad_item_no5 like vbrp-posnr, "jb2 tas_zas_zdsc_error_flag(1) type c, "jb2 zdsc_pos_disc_flag(1) type c, "jb2 dual_cond_err_flag type c, "jb2 pb00_cnt_flag type i, "jb2 pb01_cnt_flag type i, "jb2 zdbp_cnt_flag type i, "jb2 hm00_cnt_flag type i, "jb2 dum_rc type i, "jb2 dum_post_amt(16) type c, "jb2 dum_pbook like bsid-dmbtr, "jb2 dum_cond_amt like bsid-dmbtr, "jb2 dum_cond_type(4) type c, "jb2 err_msg1(40) type c, "jb2 err_msg2 like err_msg1, "jb2 err_msg3 like err_msg1, "jb2 err_msg4 like err_msg1, "jb2 dbl_hm00_err_flag(1) type c, "jb2 pb00_pb01_err_flag(1) type c , "jb2 zdsc_hm00_err_flag(1) type c, "jb2 nofobtext_err_flag(1) type c, "LABK934392 shipto_diff_flag type c. "jb5 field-symbols:, . data: temp_name(40) type c. data: zatx_netwr_sum like vbrp-netwr, zatx_net_no_surchg like vbrp-netwr, zatx_surchg like vbrp-netwr, tkomvd_lines(3) type p, hdr_net_bef_tax_surchg like vbrp-netwr. data: begin of cancelled_docs occurs 50, " Store cancelling billing vbeln like vbfa-vbeln, " documents end of cancelled_docs. data: begin of quote occurs 1. include structure vbak. data: end of quote. data: begin of sales_ord occurs 1. include structure vbak. data: end of sales_ord. data: begin of del_note_tbl occurs 4, vbeln like vbfa-vbeln, end of del_note_tbl. data: begin of t_string, char(1) type c, rest(39) type c, end of t_string. *{LABK934226 DATA: BEGIN OF tvbap OCCURS 50. INCLUDE STRUCTURE vbdpr. DATA: END OF tvbap. DATA: fob_parent TYPE i VALUE 0, fob_posnr(6) TYPE n, fob_blend(45) TYPE c, "description g_cust_num LIKE vbpa-kunnr. *}LABK934226 * ******* data for reformat sales order output ****** "JL tables: vbap. data: begin of itemtab occurs 50, item_count(6) type n, material_no like vbdpr-matnr, arktx like vbdpr-arktx, "JL1204 qty_quoted like zinvoice01-quantity, "LABK934392 end of itemtab, quotation like vbdkr-vbeln, quote_flag type i value 0. *----- Start addition for SAPScript tables: zinvoice01, tsp03, usr01. data: xscreen(1) type c. "Output on printer or screen data: begin of item_data occurs 20, matnr like vbrp-matnr, mat_num like zinvoice01-mat_num, mat_desc like zinvoice01-mat_desc, quantity like zinvoice01-quantity, uom like zinvoice01-uom, category like zinvoice01-category, tt_af_sur like zinvoice01-tt_af_sur, book_val like zinvoice01-book_val, net_val like zinvoice01-net_val, disc_per like zinvoice01-disc_per, disc_amt like zinvoice01-disc_amt, cond_type like zinvoice01-cond_type, price_ad like zinvoice01-price_ad, 3pty_sur like zinvoice01-3pty_sur, prov_sur like zinvoice01-prov_sur, mat_reim like zinvoice01-mat_reim, fin_amt like zinvoice01-fin_amt, qty_quoted like zinvoice01-quantity, bj_cond like zinvoice01-bj_cond, count(6) type n, list_pr(15) type c, disc(6) type c, disc_pr(15) type c, price(15) type c, quanu(15) type c, quanq(15) type c, tax_flag(1) type c, uepos LIKE vbrp-uepos, "LABK934226 posnr LIKE vbrp-posnr, "LABK934226 end of item_data. *{ Start Insert LABK934392 data: item_tmp LIKE item_data OCCURS 20 WITH HEADER LINE, rec_index LIKE sy-tabix. *} LABK934392 data: begin of item_gr1 occurs 20. include structure item_data. data: end of item_gr1. data: begin of item_gr2 occurs 20. include structure item_data. data: end of item_gr2. data: begin of item_gr3 occurs 20. include structure item_data. data: end of item_gr3. data: begin of xitem_data occurs 20, matnr like vbrp-matnr, mat_num like zinvoice01-mat_num, mat_desc like zinvoice01-mat_desc, quantity type p decimals 3, uom like zinvoice01-uom, category like zinvoice01-category, tt_af_sur type p decimals 2, book_val type p decimals 2, net_val type p decimals 2, * disc_per(5) type c, disc_per(7) type c, "LABK930236 disc_amt type p decimals 2, cond_type like zinvoice01-cond_type, price_ad type p decimals 2, 3pty_sur type p decimals 2, prov_sur type p decimals 2, mat_reim type p decimals 2, fin_amt type p decimals 2, qty_quoted type p decimals 3, bj_cond like zinvoice01-bj_cond, * count(6) type n, list_pr(15) type c, disc(6) type c, disc_pr(15) type c, price(15) type c, quanu(15) type c, quanq(15) type c, tax_flag(1) type c, uepos LIKE vbrp-uepos, "LABK934226 posnr LIKE vbrp-posnr, "LABK934226 end of xitem_data. data: tax1 like komvd-kwert, tax2 like komvd-kwert, tax3 like komvd-kwert, tax4 like komvd-kwert, tax5 like komvd-kwert, itax1 like komvd-kwert, itax2 like komvd-kwert, itax3 like komvd-kwert, itax4 like komvd-kwert, itax5 like komvd-kwert, tax_jcd like vbpa-kunnr, "Tax jurisdiction sum1hm00 like zinvoice01-net_val, sum2hm00 like zinvoice01-net_val, sum1norm like zinvoice01-net_val, sum2norm like zinvoice01-net_val, line1(72) type c, line2(72) type c, line3(72) type c, line4(72) type c. * line5(72) type c. *DATA: PREVIEW(2) TYPE C. *----- End addition for SAPScript ******************************************************************** form entry using return_code us_screen. clear retcode. * CLEAR PREVIEW. perform processing using us_screen. */////////////////////////////////////////////////////////////////////// ** write print control data to file * CLEAR PRINT_TABLE. * REFRESH PRINT_TABLE. * PRINT_TABLE = ITCPO. * APPEND PRINT_TABLE. ** For Invoice form, get template from text field id 0011 * CLEAR TEMP_NAME. * ??? **ERFORM WRITE_CONTROL_DATA(ZVPRINT1) TABLES PRINT_TABLE USING ** 'jjjj' VBDKR-VBELN VBDKR-VBTYP 'xxxx'. "??? * The following commented out because the Invoice Form text line in * the document header text is no longer used to print USA invoices * so this field can be used to indicate reprint of an original invoice. * See 'Get_document_title'. * IF VBDKR-VBTYP = 'M' " Invoice Form from invoice save text * OR VBDKR-VBTYP = 'U'. " F2 = M, F8 = U * PERFORM GET_HEADER_TEXT(ZVPRINT3) USING * VBDKR-VBELN '0011' TEXTLINE. * IF TEXTLINE NE SPACE. * TEMP_NAME = TEXTLINE. * ENDIF. * ENDIF. * IF ( VBDKR-VBTYP = 'M' " Invoice Form from sales save text * OR VBDKR-VBTYP = 'U' ) AND TEMP_NAME = ' '. * PERFORM GET_HEADER_TEXT(ZVPRINT3) USING VBDKR-VBELN_VAUF * '0011' TEXTLINE. * IF TEXTLINE NE SPACE. * TEMP_NAME = TEXTLINE. * ENDIF. * ENDIF. ** Get microsoft access template name for this region ** Product line was hard coded to '1' because there is no product line ** information for invoices or proforma * * IF TEMP_NAME = ' '. ** "gs3 * PRODUCT_LINE_FLAG = 0. * SELECT * FROM VBRP WHERE VBELN EQ VBDKR-VBELN. * IF VBRP-KVGR2 NE ' '. * PRODUCT_LINE_FLAG = 1. * MOVE VBRP-KVGR2 TO PROD_LINE. * EXIT. * ENDIF. * ENDSELECT. * * IF PREVIEW = 'NO'. * IF PRODUCT_LINE_FLAG EQ 1. * PERFORM GET_MS_ACCESS_TEMPLATE(ZVPRINT3) USING * VBDKR-VKORG DOC_TYPE VBDKR-VBTYP PROD_LINE TEMP_NAME. * ELSE. * PERFORM GET_MS_ACCESS_TEMPLATE(ZVPRINT3) USING * VBDKR-VKORG DOC_TYPE VBDKR-VBTYP '1' TEMP_NAME. * ENDIF. * ENDIF. * * ENDIF. ** "gs3 * IF PREVIEW = 'NO'. * PERFORM WRITE_CONTROL_DATA(ZVPRINT3) TABLES PRINT_TABLE USING * VBDKR-VBELN SY-UNAME TEMP_NAME 'ZVADIN02'. * CLOSE DATASET DATAFILE. * PERFORM SAP_MOVER_FILE_SETUP(ZVPRINT3) USING DATAFILE. * ENDIF. *\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ case retcode. when 0. return_code = 0. when 3. return_code = 3. when others. return_code = 1. endcase. endform. *---------------------------------------------------------------------* * FORM PROCESSING * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* * --> PROC_SCREEN * *---------------------------------------------------------------------* form processing using proc_screen. perform get_data. if vbdkr-uvall ne space or vbdkr-uvals ne space or vbdkr-uvprs ne space. if proc_screen = space. retcode = 3. if vbdkr-uvall ne space or vbdkr-uvals ne space. syst-msgno = '201'. syst-msgid = 'VN'. syst-msgty = 'I'. perform protocol_update. endif. if vbdkr-uvprs ne space. syst-msgno = '200'. syst-msgid = 'VN'. syst-msgty = 'I'. perform protocol_update. endif. else. if vbdkr-uvall ne space or vbdkr-uvals ne space. message i201. endif. if vbdkr-uvprs ne space. message i200. endif. endif. endif. check retcode = 0. perform form_open using proc_screen vbdkr-land1. check retcode = 0. * Get header info perform write_header_info_to_file. perform item_print. check retcode = 0. perform end_print. check retcode = 0. perform massage_data. perform activate_elements. perform form_close. check retcode = 0. endform. *********************************************************************** * S U B R O U T I N E S * *********************************************************************** *---------------------------------------------------------------------* * FORM END_PRINT * *---------------------------------------------------------------------* * * *---------------------------------------------------------------------* form end_print. perform get_header_prices. perform header_price_print. endform. *---------------------------------------------------------------------* * FORM FORM_CLOSE * *---------------------------------------------------------------------* * End of printing the form * *---------------------------------------------------------------------* form form_close. call function 'CLOSE_FORM' exceptions others = 1. if sy-subrc ne 0. retcode = sy-subrc. perform protocol_update. endif. set country space. endform. *&---------------------------------------------------------------------* *& Form PRINT_INVOICE_HEADER_ERROR *&---------------------------------------------------------------------* * Created by: John Ballard Jan/97. * This subroutine prints an error message in the address * fields of the invoice in Access. The error message * depends on what lines are passed to it. They vary * depending on what condtions have been violated. * See FORM HEADER_PRICE_PRINT for existing error * messages. *----------------------------------------------------------------------* form print_invoice_header_error using line1 line2 line3 line4. *IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '52' LINE1. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '53' LINE2. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '54' LINE3. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '55' LINE4. *ENDIF. endform. " PRINT_INVOICE_HEADER_ERROR *---------------------------------------------------------------------* * FORM FORM_OPEN * *---------------------------------------------------------------------* * Start of printing the form * *---------------------------------------------------------------------* * --> US_SCREEN Output on screen * * ' ' = Printer * * 'X' = Screen * * --> US_COUNTRY County for telecommunication and SET COUNTRY * *---------------------------------------------------------------------* form form_open using us_screen us_country. * note: ZRVADOPF is a copy of RVADOPFO - I had to add one line of code * in this program to suppress the printing of the document .... (Lee) * include zrvadopf. if nast-ldest = 'DFLT'. " Use the user default printer. select single * from usr01 where bname = sy-uname. select single * from tsp03 where padest = usr01-spld. if sy-subrc = 0. nast-ldest = usr01-spld. else. * message e001 with 'Unable to find user default printer.'. message e001(zz) with "LABK918670 'Unable to find user default printer.'. "LABK918670 endif. endif. include rvadopfo. * IF ITCPO-TDPREVIEW <> 'X' AND * ITCPO-TDNOPRINT <> 'X'. * PREVIEW = 'NO'. * ENDIF. endform. *---------------------------------------------------------------------* * FORM GET_DATA * *---------------------------------------------------------------------* * General provision of data for the form * *---------------------------------------------------------------------* form get_data. call function 'RV_PRICE_PRINT_REFRESH' tables tkomv = tkomv. clear komk. clear komp. if nast-objky+10(6) ne space. vbco3-vbeln = nast-objky+16(10). else. vbco3-vbeln = nast-objky. endif. vbco3-mandt = sy-mandt. vbco3-spras = nast-spras. vbco3-kunde = nast-parnr. vbco3-parvw = nast-parvw. call function 'RV_BILLING_PRINT_VIEW' exporting comwa = vbco3 importing kopf = vbdkr tables pos = tvbdpr. perform sender. perform check_repeat. endform. *---------------------------------------------------------------------* * FORM GET_ITEM_PRICES * *---------------------------------------------------------------------* * In this routine the price data for the item is fetched from * * the database. * *---------------------------------------------------------------------* form get_item_prices. clear: komp, tkomv. if komk-knumv ne vbdkr-knumv. clear komk. komk-mandt = sy-mandt. komk-kalsm = vbdkr-kalsm. komk-kappl = pr_kappl. komk-waerk = vbdkr-waerk. komk-knumv = vbdkr-knumv. komk-vbtyp = vbdkr-vbtyp. endif. komp-kposn = vbdpr-posnr. call function 'RV_PRICE_PRINT_ITEM' exporting comm_head_i = komk comm_item_i = komp language = nast-spras importing comm_head_e = komk comm_item_i = komp tables tkomv = tkomv tkomvd = tkomvd. endform. *---------------------------------------------------------------------* * FORM GET_HEADER_PRICES * *---------------------------------------------------------------------* * In this routine the price data for the header is fetched from * * the database. * *---------------------------------------------------------------------* form get_header_prices. call function 'RV_PRICE_PRINT_HEAD' exporting comm_head_i = komk language = nast-spras importing comm_head_e = komk tables tkomv = tkomv tkomvd = tkomvd. endform. *---------------------------------------------------------------------* * FORM HEADER_PRICE_PRINT * *---------------------------------------------------------------------* * Printout of the header prices * *---------------------------------------------------------------------* form header_price_print. data: begin of header_tax occurs 5, koaid like komvd-koaid, kschl like komvd-kschl, kwert like komvd-kwert, end of header_tax. * Get header final amount/ net total to file *IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '01' '000001' '25' BOOK_TOTAL. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '01' '000001' '38' KOMK-FKWRT. *ENDIF. move book_total to zinvoice01-hprbk_tot. move komk-fkwrt to zinvoice01-hfinal_amt. * PERFORM WRITE_TO_FILEA(ZVPRINT1) USING '01' '000001' '32' KOMK-SUPOS. perform get_pricing_proc(zvprint3) tables tkomv tax_table using nows_disc_amt nows_disc_perc price_adj_amt 3party_surchg_amt prov_surchg_amt mat_reimb_amt "950923 RV 0 " 0 --> header prices zbjs_amt "gs10 nows_spec_disc_amt. "LABK918227 * * if there is HM00 in cond type => ignore header surcharge * added HM00 output IF THERE IS ANY hm00 ON THE INVOICE RV 950923 * IF HM00_COND_FLAG NE ' '. " rv 950923 if hm00_header_cond_flag ne 'N'. " rv 950923 clear: prov_surchg_amt. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '77' 'HM00'. * ENDIF. move 'HM00' to zinvoice01-hhead_cont. endif. hdr_net_bef_tax_surchg = vbrk-netwr. " get header net price "pt * HDR_NET_BEF_TAX_SURCHG = KOMK-SUPOS - PROV_SURCHG_AMT. "pt * - MAT_REIMB_AMT. "950923 RV * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '01' '000001' '32' * HDR_NET_BEF_TAX_SURCHG. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '01' '000001' * '24' NOWS_DISC_PERC. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '01' '000001' * '26' NOWS_DISC_AMT. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '01' '000001' * '27' PRICE_ADJ_AMT. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '01' '000001' * '28' 3PARTY_SURCHG_AMT. * ENDIF. move hdr_net_bef_tax_surchg to zinvoice01-htt_af_sur. move nows_disc_perc to zinvoice01-hdisc_per. move nows_disc_amt to zinvoice01-hdisc_amt. move price_adj_amt to zinvoice01-hprice_adj. move 3party_surchg_amt to zinvoice01-h3pty_sur. if nows_spec_disc_amt ne 0. "LABK918227 move nows_spec_disc_amt to zinvoice01-hsdisc_amt. "LABK918227 move 'Special Discount' to zinvoice01-hsdisc_des. "LABK918227 endif. "LABK918227 *{ start insert LABK934576 if fuel_surchg_amt ne 0. move fuel_surchg_amt to zinvoice01-hfuelsur_amt. move ' Fuel Surcharge' to zinvoice01-hfuelsur_des. endif. *} Start Insert LABK934576 * * only write header surcharge if there is no HM00 in cond type * after all the item_print processed, surcharge might have been reset * if HM00 exists. if prov_surchg_amt ne 0. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '01' '000001' * '30' PROV_SURCHG_AMT. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' * '31' 'BC Surcharge'. * ENDIF. move prov_surchg_amt to zinvoice01-htot_sur. move 'BC Surcharge' to zinvoice01-hsur_desc. endif. if mat_reimb_amt ne 0. "950923 RV * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '01' '000001' "950923 RV * '79' MAT_REIMB_AMT. "950923 RV * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' "950923 RV * '80' 'Mat. Reimbursement'. "950923 RV * ENDIF. move mat_reimb_amt to zinvoice01-hmat_reim. move 'Mat. Reimbursement' to zinvoice01-hreim_desc. endif. "950923 RV total_after_disc_amt = book_total + nows_disc_amt + price_adj_amt + 3party_surchg_amt + zbjs_amt. "gs10 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '01' '000001' * '29' TOTAL_AFTER_DISC_AMT. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '16' * DISC_PERC_TEXT. * ENDIF. move total_after_disc_amt to zinvoice01-hnet_val. move disc_perc_text to zinvoice01-hdisc_desc. clear header_tax. refresh header_tax. loop at tkomvd. komvd = tkomvd. if komvd-koaid = 'D'. move-corresponding komvd to header_tax. collect header_tax. endif. endloop. tax_id = 32. loop at header_tax. add 1 to tax_id. check header_tax-kwert ne 0. if tax_id ne 38. " gs - quick fix case tax_id. when 33. move header_tax-kwert to tax1. when 34. move header_tax-kwert to tax2. when 35. move header_tax-kwert to tax3. when 36. move header_tax-kwert to tax4. when 37. move header_tax-kwert to tax5. endcase. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '01' '000001' * TAX_ID HEADER_TAX-KWERT. * ENDIF. endif. " gs - quick fix endloop. ********************************************************** start of jb2 * Incorrect Discount Entered (positive value). if zdsc_pos_disc_flag = 'X'. err_msg1 = '*********** DO NOT MAIL ***********'. err_msg2 = 'A positive discount has been entered'. err_msg3 = 'for an item using the condition ZDSC.' . move 'Check SAP Item No: ' to textline. move bad_item_no1 to textline+20. err_msg4 = textline. perform print_invoice_header_error using err_msg1 err_msg2 err_msg3 err_msg4. * CF clear textline. move '***** DO NOT MAIL *****' to zinvoice01-bp_addr1. move 'A positive discount has been entered' to zinvoice01-bp_addr2. move 'for an item using the condition ZDSC.' to zinvoice01-bp_addr3. move 'Check SAP Item No: ' to textline. move bad_item_no1 to textline+20. move textline to zinvoice01-bp_addr4. * * PB00 and PB01 occur together on same item. elseif pb00_pb01_err_flag = 'X'. err_msg1 = '*********** DO NOT MAIL ***********'. err_msg2 = 'The conditions PB00 and PB01 are not'. err_msg3 = 'allowed together on the same item.'. move 'Check SAP Item No: ' to textline. move bad_item_no2 to textline+20. err_msg4 = textline. perform print_invoice_header_error using err_msg1 err_msg2 err_msg3 err_msg4. * CF clear textline. move '***** DO NOT MAIL *****' to zinvoice01-bp_addr1. move 'The conditions PB00 and PB01 are not' to zinvoice01-bp_addr2. move 'allowed together on the same item.' to zinvoice01-bp_addr3. move 'Check SAP Item No: ' to textline. move bad_item_no2 to textline+20. move textline to zinvoice01-bp_addr4. * * Double HM00 condition elseif dbl_hm00_err_flag = 'X'. err_msg1 = '*********** DO NOT MAIL ***********'. err_msg2 = 'There are multiple HM00 conditions'. err_msg3 = 'on this document.'. err_msg4 = 'Only one HM00 condition is allowed.'. perform print_invoice_header_error using err_msg1 err_msg2 err_msg3 err_msg4. * CF move '***** DO NOT MAIL *****' to zinvoice01-bp_addr1. move 'There are multiple HM00 conditions' to zinvoice01-bp_addr2. move 'on this document.' to zinvoice01-bp_addr3. move 'Only one HM00 condition is allowed.' to zinvoice01-bp_addr4. * * HM00 and ZDSC exist on the same item. elseif zdsc_hm00_err_flag = 'X'. err_msg1 = '*********** DO NOT MAIL ***********'. err_msg2 = 'Condition HM00 is not allowed with'. err_msg3 = 'condition ZDSC.' . move 'Check SAP Item No: ' to textline. move bad_item_no3 to textline+20. err_msg4 = textline. perform print_invoice_header_error using err_msg1 err_msg2 err_msg3 err_msg4. * CF clear textline. move '***** DO NOT MAIL *****' to zinvoice01-bp_addr1. move 'Condition HM00 is not allowed with' to zinvoice01-bp_addr2. move 'condition ZDSC.' to zinvoice01-bp_addr3. move 'Check SAP Item No: ' to textline. move bad_item_no3 to textline+20. move textline to zinvoice01-bp_addr4. * * ZBJS with either ZDBP, PB00, PB01 elseif dual_cond_err_flag = 'X'. err_msg1 = '*********** DO NOT MAIL ***********'. err_msg2 = 'Condition ZBJS is not allowed with'. err_msg3 = 'either PB00, PB01, or ZDBP.' . move 'Check SAP Item No: ' to textline. move bad_item_no4 to textline+20. err_msg4 = textline. perform print_invoice_header_error using err_msg1 err_msg2 err_msg3 err_msg4. * CF clear textline. move '***** DO NOT MAIL *****' to zinvoice01-bp_addr1. move 'Condition ZBJS is not allowed with' to zinvoice01-bp_addr2. move 'either PB00, PB01, or ZDBP.' to zinvoice01-bp_addr3. move 'Check SAP Item No: ' to textline. move bad_item_no4 to textline+20. move textline to zinvoice01-bp_addr4. * * Item in category TAS or ZAS with condition ZDSC. elseif tas_zas_zdsc_error_flag = 'X'. err_msg1 = '*********** DO NOT MAIL ***********'. err_msg2 = 'Condition type ZDSC is not allowed for'. err_msg3 = 'items in category TAS or ZAS' . move 'Check SAP Item No: ' to textline. move bad_item_no5 to textline+20. err_msg4 = textline. perform print_invoice_header_error using err_msg1 err_msg2 err_msg3 err_msg4. * CF clear textline. move '***** DO NOT MAIL *****' to zinvoice01-bp_addr1. move 'Condition type ZDSC is not allowed for' to zinvoice01-bp_addr2. move 'items in category TAS or ZAS.' to zinvoice01-bp_addr3. move 'Check SAP Item No: ' to textline. move bad_item_no5 to textline+20. move textline to zinvoice01-bp_addr4. * *********************************************************** end of jb2 * Item Total does not match Invoice Total. elseif hdr_net_bef_tax_surchg ne item_total_after_disc. "gs4 err_msg1 = '*********** DO NOT MAIL ***********'. err_msg2 = 'Invoice total is different from Item total'. move 'Invoice total: ' to textline. move hdr_net_bef_tax_surchg to textline+18. err_msg3 = textline. move ' Item total: ' to textline. move item_total_after_disc to textline+18. err_msg4 = textline. perform print_invoice_header_error using err_msg1 err_msg2 err_msg3 err_msg4. * CF clear textline. move '***** DO NOT MAIL *****' to zinvoice01-bp_addr1. move 'Invoice total is different from Item total' to zinvoice01-bp_addr2. move 'Invoice total: ' to textline. move hdr_net_bef_tax_surchg to textline+18. move textline to zinvoice01-bp_addr3. move ' Item total: ' to textline. move item_total_after_disc to textline+18. move textline to zinvoice01-bp_addr4. * * SHIP-TO on invoice does not match SHIP-TO (TAX AREA) on other docs jb5 elseif shipto_diff_flag = 'X'. err_msg1 = '*********** DO NOT MAIL ***********'. err_msg2 = 'SHIP-TO/TAX AREA partner is different'. err_msg3 = 'on preceding documents (SO / Delivery).'. err_msg4 = 'Related documents need to be changed.'. perform print_invoice_header_error using err_msg1 err_msg2 err_msg3 err_msg4. * CF move '***** DO NOT MAIL *****' to zinvoice01-bp_addr1. move 'SHIP-TO/TAX AREA partner is different' to zinvoice01-bp_addr2. move 'on preceding documents (SO / Delivery).' to zinvoice01-bp_addr3. move 'Related documents need to be changed.' to zinvoice01-bp_addr4. * *{ LABK934392 elseif nofobtext_err_flag = 'X'. move '***** DO NOT MAIL *****' to zinvoice01-bp_addr1. move 'FOB item text was not found' to zinvoice01-bp_addr2. move ' ' to zinvoice01-bp_addr3. move ' ' to zinvoice01-bp_addr4. *} LABK934392 else. * write bill to address perform write_bill_to_party_info(zvprint3) using vbdkr-vbeln '01' '000001' zinvoice01-bp_num zinvoice01-bp_name zinvoice01-bp_addr1 zinvoice01-bp_addr2 zinvoice01-bp_addr3 zinvoice01-bp_addr4 zinvoice01-bp_pcode zinvoice01-bp_city zinvoice01-bp_region zinvoice01-bp_country. * PREVIEW. endif. * Begin of gh3 --> * Get the CO2 Surcharge if there is any clear: zinvoice01-co2_surcharge, zinvoice01-co2_surcharge_x. loop at tkomv where kschl = 'ZCO2' and kinak = space. add tkomv-kwert to zinvoice01-co2_surcharge. endloop. if not zinvoice01-co2_surcharge is initial. zinvoice01-co2_surcharge_x = 'X'. endif. * <-- end of gh3 endform. *---------------------------------------------------------------------* * FORM ITEM_PRICE_PRINT * *---------------------------------------------------------------------* * Printout of the item prices * *---------------------------------------------------------------------* form item_price_print. clear: total_after_disc_amt, hm00_cond_flag. * T.N Sep 28, 1995 * TKOMV - Price Determination Communications condition record * TKOMVD - Price Determination Communications cond. record for printing * Once again, we are at SAP's mercy as it decides what it will return * in these tables. This time for item w/ zero amount and HM00 cond, it * decides to return NOTHING for TKOMVD (What a piece of %#!%^&). The * following piece code is designed to get around that problem. clear tkomvd_lines. loop at tkomvd. if tkomvd-kposn = vbdpr-posnr. tkomvd_lines = 1. " Table is not EMPTY exit. endif. endloop. if tkomvd_lines = 0. " Table is EMPTY clear tkomvd. refresh tkomvd. * We'll copy information from TKOMV to TKOMVD for this item loop at tkomv. check tkomv-kposn = vbdpr-posnr. move-corresponding tkomv to tkomvd. append tkomvd. endloop. endif. clear c02_new_cond_flag. "LABK929819 loop at tkomvd. *{ Start Insert LABK934576 IF tkomvd-stunr = fuel_surcharge. CONTINUE. ENDIF. *} End Insert LABK934576 clear item_data-cond_type. komvd = tkomvd. * Obtain various values if komvd-stunr = opr_zyrt. "gs10 * handles zryt condition type "gs5 total_after_disc_amt = komvd-kwert. "gs5 add komvd-kwert to book_total. "gs5 * IF PREVIEW = 'NO'. "cf * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT "gs5 * '25' KOMVD-KWERT. "gs5 * ENDIF. move komvd-kwert to item_data-book_val. zryt_flag = 1. "gs5 elseif komvd-stunr = item_gross_value or " Mutually exclusive komvd-stunr = item_fixed_price * Begin insert LABK929819 --> * Make sure the c02 line (with new stunr = 425) * is evaluated so we can get a net value just like * other regular lines. 398 is evaluated as a zbjs item. or komvd-stunr = c02_cond_new or komvd-stunr = c02_cond_old. item_data-cond_type = 'c02'. "LABK929500 if komvd-stunr = c02_cond_new or komvd-stunr = c02_cond_old. c02_new_cond_flag = 'X'. endif. if komvd-stunr <> c02_cond_old. * --> End insert LABK929819 total_after_disc_amt = komvd-kwert. add komvd-kwert to book_total. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FI LEA(ZVPRINT3) USING '02' ITEM_COUNT * '25' KOMVD-KWERT. * ENDIF. move komvd-kwert to item_data-book_val. endif. "LABK929819 * Start insert LABK930236 * 'No-charge' items cancel out gross value * elseif komvd-stunr = opr_nocharge. * add komvd-kwert to book_total. * add komvd-kwert to total_after_disc_amt. * add komvd-kwert to item_data-book_val. * End insert LABK930236 elseif komvd-stunr = hm00_cond. hm00_cond_flag = 'Y'. hm00_header_cond_flag = 'Y'. add komvd-kwert to book_total. total_after_disc_amt = komvd-kwert. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT * '25' KOMVD-KWERT. * ENDIF. move komvd-kwert to item_data-book_val. * Get HM00 condition type RV 950923 * * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '02' ITEM_COUNT * '16' 'HM00'. * ENDIF. move 'HM00' to item_data-cond_type. * Begin insert LABK929819 --> * If ZBJS condition comes before HM00 (older invoices before * the c02 config changes would have this. In which case, if they're * HM00, we want all items to be included in fixed price with no * separating out of the c02's into additional items. So for the * c02, don't process any other condition types. if not c02_new_cond_flag is initial. exit. endif. * --> End insert LABK929819 endif. endloop. endform. *---------------------------------------------------------------------* * FORM ITEM_PRINT * *---------------------------------------------------------------------* * Printout of the items * *---------------------------------------------------------------------* form item_print. data: material_no like vbdpr-matnr, temp_disc type f. clear itemtab. "JL9606 refresh itemtab. "JL9606 * Clear Header level flags. clear: zdsc_pos_disc_flag, "jb2 pb00_pb01_err_flag, "jb2 dbl_hm00_err_flag, "jb2 zdsc_hm00_err_flag, "jb2 dual_cond_err_flag, "jb2 tas_zas_zdsc_error_flag, "jb2 nofobtext_err_flag, "LABK934392 bad_item_no1, "jb2 bad_item_no2, "jb2 bad_item_no3, "jb2 bad_item_no4, "jb2 bad_item_no5. "jb2 item_total_after_disc = 0. *{LABK934226 * Get the Customer ID Number for this invoice SELECT SINGLE kunnr FROM vbpa INTO g_cust_num WHERE vbeln = vbdkr-vbeln AND posnr = '000000' AND parvw = 'AG'. TRANSLATE nast-dsnam TO UPPER CASE. IF vbdkr-vbtyp = 'M'. "for invoices only LOOP AT tvbdpr. CHECK tvbdpr-pstyv NE 'TAQ'. MOVE-CORRESPONDING tvbdpr TO tvbap. APPEND tvbap. ENDLOOP. fob_posnr = '999999'. fob_blend = ' '. ENDIF. *}LABK934226 loop at tvbdpr. clear: itax1,itax2, itax3, itax4, itax5, item_data. vbdpr = tvbdpr. * Make sure a material number exists. If not, do not download to file. check not vbdpr-matnr is initial. "jb6 select single * from vbrp where vbeln = vbdkr-vbeln and posnr = vbdpr-posnr. * Clear item level flags. clear: tas_zas_flag, "jb2 zdsc_cnt_flag, "jb2 pb00_cnt_flag, "jb2 pb01_cnt_flag, "jb2 zdbp_cnt_flag, "jb2 hm00_cnt_flag. "jb2 * set zryt flag to zero (assume it does not exist) "gs5 zryt_flag = 0. "gs5 * set net value printed flag to zero so that is only prints one "gs8 net_printed = 0. "gs8 * set zbjs flag to zero (assume it does not exist) "gs10 zbjs_flag = 0. "gs10 * Get the item text from sales order item. "LABK926388 select single * from vbap "LABK926388 where vbeln = vbdpr-vbeln_vauf "LABK926388 and posnr = vbdpr-posnr_vauf. "LABK926388 vbdpr-arktx = vbap-arktx. "LABK926388 * strip out leading zero's of material no write vbdpr-matnr to material_no no-zero. condense material_no. move vbdpr-arktx to itemtab-arktx. "JL1204 perform get_item_prices. if hm00_exists = ' '. " only loop through this once loop at tkomvd. " determine if HM00 cond type exists komvd = tkomvd. endloop. endif. if vbrp-pstyv ne 'TAQ'. "gs6 * suppress group item lines, higher-level item NE 0. item_count = item_count + 1. * Get Material no/ material description * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '02' ITEM_COUNT * '10' MATERIAL_NO. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '02' ITEM_COUNT * '13' VBDPR-ARKTX. * ENDIF. move material_no to item_data-mat_num. move vbdpr-matnr to item_data-matnr. move vbdpr-arktx to item_data-mat_desc. * Get Item Quantity (invoiced qty) * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '02' ITEM_COUNT * '11' VBDPR-FKIMG. * ENDIF. move vbdpr-fkimg to item_data-quantity. * Get Item Unit of Measure * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '02' ITEM_COUNT * '12' VBDPR-VRKME. * ENDIF. move vbdpr-vrkme to item_data-uom. * Get Item category * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '02' ITEM_COUNT '14' * VBRP-PSTYV. * ENDIF. move vbrp-pstyv to item_data-category. if vbrp-pstyv = 'ZATX'. clear: zatx_netwr_sum, zatx_surchg, zatx_net_no_surchg, komvd-kwert, nows_disc_perc, nows_disc_amt. select * from vbrp into *vbrp where vbeln = vbrp-vbeln and uepos = vbrp-aupos. add *vbrp-netwr to zatx_netwr_sum. add *vbrp-kzwi1 to komvd-kwert. * acc. surcharge of the detail line, can use this to acc other amts. perform get_pricing_proc(zvprint3) tables tkomv tax_table using nows_disc_amt nows_disc_perc price_adj_amt 3party_surchg_amt prov_surchg_amt mat_reimb_amt "950923 RV *vbrp-posnr zbjs_amt "gs10 nows_spec_disc_amt. "LABK918227 add prov_surchg_amt to zatx_surchg. add mat_reimb_amt to zatx_surchg. "950923 RV endselect. add komvd-kwert to book_total. total_after_tax = zatx_netwr_sum. zatx_net_no_surchg = zatx_netwr_sum - zatx_surchg. * ADD ZATX_NET_NO_SURCHG TO ITEM_TOTAL_AFTER_DISC. "gs2 add zatx_netwr_sum to item_total_after_disc. "gs2 nows_disc_amt = ( komvd-kwert - zatx_net_no_surchg ) * -1. temp_disc = ( 1 - ( zatx_net_no_surchg / komvd-kwert ) ) * 100. * Why * by 100? There seems to be a problem of converting between * float type and nows_disc_perc type (it would be 0.xx without * * by 100). I don't know why that is the case! nows_disc_perc = temp_disc * 100. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT * '32' ZATX_NETWR_SUM. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT * '25' KOMVD-KWERT. * ENDIF. move zatx_netwr_sum to item_data-tt_af_sur. move komvd-kwert to item_data-book_val. if hm00_exists ne 'Y'. " Only write if there is no HM00 cond type if net_printed = 0. "gs8 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT * '29' ZATX_NET_NO_SURCHG. * ENDIF. move zatx_net_no_surchg to item_data-net_val. net_printed = 1. "gs8 endif. "gs8 else. if net_printed = 0. "gs8 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '02' ITEM_COUNT * '29' ' '. * ENDIF. move ' ' to item_data-net_val. net_printed = 1. "gs8 endif. "gs8 endif. * if zryt condition type exist for this item, "gs5 * blank out the discount percentage "gs5 if zryt_flag eq 0 and zbjs_flag eq 0. "gs10 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT * '24' NOWS_DISC_PERC. * ENDIF. move nows_disc_perc to item_data-disc_per. else . "gs5 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT "gs5 * '24' ' '. "gs5 * ENDIF. move ' ' to item_data-disc_per. if zbjs_flag ne 0 and hm00_cond_flag ne 'Y'. "gs10 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '02' ITEM_COUNT "gs10 * '16' 'ZBJS'. "gs10 * ENDIF. move 'ZBJS' to item_data-bj_cond. endif. "gs10 endif. "gs5 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT * '26' NOWS_DISC_AMT. * ENDIF. move nows_disc_amt to item_data-disc_amt. if nows_disc_perc ne 0. disc_perc_text = 'Disc. %'. endif. else. * write Item Net Value 2 to file add vbdpr-netwr to item_total_after_disc. "gs2 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT * '32' VBDPR-NETWR. * ENDIF. move vbdpr-netwr to item_data-tt_af_sur. total_after_tax = vbdpr-netwr. endif. perform item_price_print. *{LABK934226 * Identify the FOB parent and the items belonging to the same FOB IF vbdkr-vbtyp = 'M' "Invoices Only AND g_cust_num = '0001116370' "Berlington Only AND job_type_no >= 100 "Cementing Jobs only AND job_type_no <= 199 AND nast-dsnam <> 'OLD'. "New Items Only fob_parent = 0. PERFORM determine_parent USING vbdpr-posnr vbdpr-uepos fob_parent. * if we have an fob parent, check to see if there is an fob * description to use in place of the regular material description IF fob_parent EQ 1. CLEAR textline. * PERFORM get_item_text USING vbdkr-vbeln vbdpr-posnr * Get item text from the Sales Order, NOT THE QUOTE PERFORM get_item_text USING vbdkr-vbeln_vauf vbdpr-posnr_vauf '0053' textline. IF NOT textline IS INITIAL. fob_blend = textline. ELSE. "LABK934392 fob_blend = 'X'. "LABK934392 nofobtext_err_flag = 'X'. "LABK934392 ENDIF. fob_posnr = vbdpr-posnr. ENDIF. IF vbdpr-uepos EQ fob_posnr. * This is an FOB detail line MOVE tvbdpr-uepos TO item_data-uepos. MOVE tvbdpr-posnr TO item_data-posnr. MOVE fob_blend TO item_data-mat_desc. ELSE. * This might be an FOB parent and/or FOB detail line tvbdpr-posnr = '000000'. IF vbdpr-posnr EQ fob_posnr. tvbdpr-arktx = fob_blend. tvbdpr-posnr = fob_posnr. ENDIF. * Make sure it is a detail line IF tvbdpr-posnr EQ fob_posnr. MOVE fob_posnr TO tvbdpr-uepos. MOVE fob_blend TO item_data-mat_desc. ENDIF. MOVE tvbdpr-uepos TO item_data-uepos. MOVE tvbdpr-posnr TO item_data-posnr. ENDIF. ENDIF. *}LABK934226 * Get item taxes perform get_pricing_proc(zvprint3) tables tkomv tax_table using nows_disc_amt nows_disc_perc price_adj_amt 3party_surchg_amt prov_surchg_amt mat_reimb_amt vbdpr-posnr zbjs_amt "gs10 nows_spec_disc_amt. "LABK918227 if hm00_cond_flag = 'Y'. clear: nows_disc_amt, nows_disc_perc, price_adj_amt, 3party_surchg_amt, prov_surchg_amt, mat_reimb_amt, zbjs_amt, "gs10 nows_spec_disc_amt. "LABK918227 endif. if nows_disc_perc ne 0. disc_perc_text = 'Disc. %'. endif. if vbrp-pstyv ne 'ZATX'. * * if zryt condition type exist for this item, "gs5 * blank out the discount percentage "gs5 if zryt_flag eq 0 and zbjs_flag eq 0. "gs10 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT * '24' NOWS_DISC_PERC. * ENDIF. move nows_disc_perc to item_data-disc_per. else. "gs5 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT "gs5 * '24' ' '. "gs5 * ENDIF. move ' ' to item_data-disc_per. if zbjs_flag ne 0 and hm00_cond_flag ne 'Y'. "gs10 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '02' ITEM_COUNT "gs10 * '16' 'ZBJS'. "gs10 * ENDIF. move 'ZBJS' to item_data-bj_cond. endif. "gs10 endif. "gs5 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT * '26' NOWS_DISC_AMT. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT * '27' PRICE_ADJ_AMT. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT * '28' 3PARTY_SURCHG_AMT. * ENDIF. move nows_disc_amt to item_data-disc_amt. move price_adj_amt to item_data-price_ad. move 3party_surchg_amt to item_data-3pty_sur. endif. if vbrp-pstyv = 'ZFOB' or vbrp-pstyv = 'AGNN' or vbrp-pstyv = 'ZFOC' or vbrp-pstyv = 'TANN'. if net_printed = 0. "gs8 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '02' ITEM_COUNT * '29' ' '. * ENDIF. move ' ' to item_data-net_val. net_printed = 1. "gs8 endif. "gs8 endif. if vbrp-pstyv ne 'ZATX'. if c02_new_cond_flag = ' '. "LABK929500 total_after_disc_amt = total_after_disc_amt + nows_disc_amt + price_adj_amt + 3party_surchg_amt + zbjs_amt. "gs10 else. "LABK929500 total_after_disc_amt = total_after_disc_amt + "LABK929500 nows_disc_amt + price_adj_amt + 3party_surchg_amt."LABK929500 endif. "LABK929500 if hm00_exists ne 'Y'. " Only write if there is no HM00 cond type if net_printed = 0. "gs8 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT * '29' TOTAL_AFTER_DISC_AMT. * ENDIF. move total_after_disc_amt to item_data-net_val. net_printed = 1. "gs8 endif. "gs8 else. if net_printed = 0. "gs8 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '02' ITEM_COUNT * '29' ' '. * ENDIF. move ' ' to item_data-net_val. net_printed = 1. "gs8 endif. "gs8 endif. * ADD TOTAL_AFTER_DISC_AMT TO ITEM_TOTAL_AFTER_DISC. "gs2 endif. * if vbrp-pstyv = 'ZTAP' or vbrp-pstyv = 'TANN' or "LABK930236 * vbrp-pstyv = 'ZFOC'. "LABK930236 * item_data-book_val = item_data-net_val = 0. "LABK930236 * endif. "LABK930236 ***************************************************************start jb2 * This section is used to determine if the invoice violates any * pricing conditions. GET_PRICING_INFO is used to fill the * PRICING_INFO table with the pricing condition values * (TYPE, VALUE, COUNTER). * This section should be used to add any other pricing condition * violations that need to be flagged with DO NOT MAIL (using the * subroutine PRINT_INVOICE_HEADER_ERROR . * NOTE: for each new condition that is added, 2 new flag variables * need to be created. One as a counter, one as an indicator to * flag with DO NOT MAIL. * A new BAD_ITEM_NO# variable needs to be created * where # is the next number in the sequence of violations. * e.g. as of Feb 3, 1997 the number of violation conditions * is up to 5. * New error messages for DO NOT MAIL need to be created in * the subroutine HEADER_PRICE_PRINT. perform get_pricing_info(zvprint3) using vbrp-vbeln vbrp-posnr dum_rc dum_post_amt dum_pbook dum_cond_amt dum_cond_type . loop at pricing_info. case pricing_info-condition_type. when 'PB00'. if pricing_info-condition_amount gt 0. add 1 to pb00_cnt_flag. endif. when 'PB01'. if pricing_info-condition_amount gt 0. add 1 to pb01_cnt_flag. endif. when 'ZDBP'. if pricing_info-condition_amount gt 0. add 1 to zdbp_cnt_flag. endif. when 'HM00'. if pricing_info-condition_amount gt 0. add pricing_info-condition_counter to hm00_cnt_flag. endif. when 'ZDSC'. if pricing_info-condition_amount lt 0. add 1 to zdsc_cnt_flag. elseif pricing_info-condition_amount gt 0. "Positive disc. zdsc_pos_disc_flag = 'X'. write vbdpr-posnr to bad_item_no1 no-zero. condense bad_item_no1 . endif. endcase. endloop. * Only perform checks if document is a Pro Forma or an Invoice jb2 if ( vbdkr-vbtyp = 'M' or vbdkr-vbtyp = 'U' ) * and the document # is greater than last one created April 4/97 jb4 and vbdkr-vbeln gt '0071041090'. * Check if item is in category TAS or ZAS jb2 if vbrp-pstyv = 'TAS' or vbrp-pstyv = 'ZAS'. tas_zas_flag = 'X'. write vbdpr-posnr to bad_item_no5 no-zero. condense bad_item_no5 . endif. * Check if PB00 and PB01 are together on same item. jb2 if pb00_cnt_flag gt 0 and pb01_cnt_flag gt 0. write vbdpr-posnr to bad_item_no2 no-zero. condense bad_item_no2 . pb00_pb01_err_flag = 'X'. endif. * Check if there is a double HM00 condition. jb2 if hm00_cnt_flag gt 1. dbl_hm00_err_flag = 'X'. endif. * Check for HM00 and ZDSC on the same item. jb2 if hm00_cnt_flag gt 0 and zdsc_cnt_flag gt 0. write vbdpr-posnr to bad_item_no3 no-zero. condense bad_item_no3 . zdsc_hm00_err_flag = 'X'. endif. * Check for ZDSC_CNT_FLAG and TAS_ZAS_FLAG. jb2 if zdsc_cnt_flag gt 0 and tas_zas_flag = 'X'. tas_zas_zdsc_error_flag = 'X'. endif. * Check if item is in category ZBJS along with PB00, PB01, ZDBP if zbjs_flag gt 0 and ( pb00_cnt_flag gt 0 or pb01_cnt_flag gt 0 or zdbp_cnt_flag gt 0 ). write vbdpr-posnr to bad_item_no4 no-zero. condense bad_item_no4 . dual_cond_err_flag = 'X'. endif. endif. **************************************************************** end jb2 if prov_surchg_amt ne 0. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT * '30' PROV_SURCHG_AMT. * ENDIF. move prov_surchg_amt to item_data-prov_sur. endif. if mat_reimb_amt ne 0. "950923 RV * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT "950923 RV * '40' MAT_REIMB_AMT. "950923 RV * ENDIF. move mat_reimb_amt to item_data-mat_reim. endif. "950923 RV tax_id = 32. loop at tax_table. add 1 to tax_id. add tax_table-tax_amount to total_after_tax. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT * TAX_ID TAX_TABLE-TAX_AMOUNT. * ENDIF. case tax_id. when 33. move tax_table-tax_amount to itax1. when 34. move tax_table-tax_amount to itax2. when 35. move tax_table-tax_amount to itax3. when 36. move tax_table-tax_amount to itax4. when 37. move tax_table-tax_amount to itax5. endcase. endloop. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILEA(ZVPRINT3) USING '02' ITEM_COUNT * '38' TOTAL_AFTER_TAX. * ENDIF. MOVE item_data-mat_desc to itemtab-arktx. "LABK934392 move total_after_tax to item_data-fin_amt. move item_count to itemtab-item_count. "JL9608 move material_no to itemtab-material_no. "JL9608 "JL1204 arktx added append itemtab. "JL9608 endif. * Used to put a '*' in front of items that have no T related tax if itax2 ne 0. move '*' to item_data-tax_flag. else. move ' ' to item_data-tax_flag. endif. * Save item data to internal table move item_count to item_data-count. if item_data-category ne 'ZON'. check item_data-mat_desc ne ' '. append item_data. endif. endloop. *{ Start Insert LABK934392 SORT item_data BY mat_num uepos descending posnr descending. *} End Insert LABK934392 if quote_flag = 1. "JL9605 if vbdkr-vbtyp <> 'O'. "Don't need quote info for Credit Memos *{Start insert LABK934392 IF vbdkr-vbtyp = 'M' "Invoices Only AND g_cust_num = '0001116370' "Berlington Only AND job_type_no >= 100 "Cementing Jobs only AND job_type_no <= 199 AND nast-dsnam <> 'OLD'. "New Items Only perform get_quantity_quoted tables itemtab item_data using quotation item_count. ELSE. *} End insert LABK934392 perform write_data_to_access tables itemtab item_data "JL using quotation item_count. "JL9605 * PREVIEW. ENDIF. endif. endif. "JL9605 *{ Start Insert LABK934392 ------------------------ * Collect the FOB items together with the parent data: l_fobparent LIKE item_gr1-posnr, fob_inhand. IF vbdkr-vbtyp = 'M' "Invoices Only AND g_cust_num = '0001116370' "Berlington Only AND job_type_no >= 100 "Cementing Jobs only AND job_type_no <= 199 AND nast-dsnam <> 'OLD'. "New Items Only REFRESH item_tmp. SORT item_data BY uepos posnr. * The list Unit Price for the FOB = total gross price/parent Qty used * The Disc Unit Price for the FOB = total net price / parent Qty used LOOP AT item_data. IF NOT item_data-uepos IS INITIAL. IF item_data-posnr = item_data-uepos. l_fobparent = item_data-uepos. IF fob_inhand = 'X'. APPEND item_tmp. CLEAR fob_inhand. ENDIF. item_tmp = item_data. fob_inhand = 'X'. ELSEIF l_fobparent = item_data-uepos. fob_inhand = 'X'. ADD: item_data-tt_af_sur TO item_tmp-tt_af_sur, item_data-net_val TO item_tmp-net_val, item_data-disc_amt TO item_tmp-disc_amt, item_data-price_ad TO item_tmp-price_ad, item_data-3pty_sur TO item_tmp-3pty_sur, item_data-prov_sur TO item_tmp-prov_sur, item_data-mat_reim TO item_tmp-mat_reim, item_data-fin_amt TO item_tmp-fin_amt. ENDIF. ELSE. APPEND item_data TO item_tmp. CLEAR fob_inhand. ENDIF. ENDLOOP. IF fob_inhand = 'X'. APPEND item_tmp. ENDIF. REFRESH item_data. item_data[] = item_tmp[]. SORT item_data BY matnr. ENDIF. *} End Insert LABK934392 ----------------------------- endform. * To prepare data for reformatting sales order * include zvrefsi2. "JL9605 *---------------------------------------------------------------------* * FORM SENDER * *---------------------------------------------------------------------* * This routine determines the address of the sender (Table VKO) * *---------------------------------------------------------------------* form sender. select single * from tvko where vkorg = vbdkr-vkorg. check sy-subrc = 0. select single * from sadr where adrnr = tvko-adrnr and natio = space. vbdkr-sland = sadr-land1. endform. ************************************************************************ * FORM WRITE_HEADER_INFO_TO_FILE ************************************************************************ * - This routine writes any header data to the file that could not be * written in the code already given. * ************************************************************************ form write_header_info_to_file. * DATA: LENGTH TYPE I, OUT_FNAME(12), TITLE(35). data: length type i, title(35). ***JL QUOTE_FLAG TYPE I VALUE 0. data: l_ref_vbeln like vbdkr-vbeln. "LABK928636 clear quote_flag. "JL item_count = 0. length = strlen( vbdkr-vbeln ) - 8. assign vbdkr-vbeln+length(8) to . * FILENAM = . ** to get path from FILENAME **check 'department' field for drop zone indicator "gs7 * IF PREVIEW = 'NO'. * * PERFORM GET_PATH_NAME(ZVPRINT3) USING "gs7 * PATH 'INVBCK' CHANGING RETCODE. "gs7 * IF RETCODE NE 0. * SUBMIT ZCALLERR WITH RET_CODE = RETCODE * WITH MAIN_PGM = SY-REPID. * EXIT. * ENDIF. * PERFORM OPEN_FILE(ZVPRINT3) USING FILENAM OUT_FNAME * PATH. * * ENDIF. "if preview = 'no' * Get document title * These titles can be found in layout set RVINVOICE01. case vbdkr-vbtyp. when 'M'. title = 'Invoice'. perform get_document_title using title doc_type. when 'N'. perform get_document_title using title doc_type. title = 'Reverse Document'. when 'O'. title = 'Credit Memo'. perform get_document_title using title doc_type. when 'P'. title = 'Debit Memo'. perform get_document_title using title doc_type. when 'S'. perform get_document_title using title doc_type. title = 'Reverse Credit Memo'. when 'U'. perform get_document_title using title doc_type. title = 'Pro Forma Invoice'. " No Draft/Copy prefix required when others. title = 'Invoice'. endcase. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '01' TITLE. * ENDIF. * concatenate title '(Do Not Use)' into title separated by ' '. move title to zinvoice01-title. * Get Sales Order clear: sales_ord, quote. refresh: sales_ord, quote. perform get_inv_related_docs(zvprint3) tables sales_ord quote using vbdkr-vbeln doc_type. read table sales_ord index 1. " Only use first sales ord for now move sales_ord-vbeln to vbdkr-vbeln_vauf. * Get Invoice number / Invoice date * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '06' VBDKR-VBELN. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '23' VBDKR-FKDAT. * ENDIF. move vbdkr-vbeln to zinvoice01-inv_num. move vbdkr-fkdat to zinvoice01-inv_date. * Get Reference no/date, Delivery no/date, Order no/date * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' * '18' SALES_ORD-BSTNK. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' * '19' SALES_ORD-BSTDK. * ENDIF. move sales_ord-bstnk to zinvoice01-po_num. move sales_ord-bstdk to zinvoice01-so_date. * Get all delivery notes perform get_del_notes tables del_note_tbl using vbdkr-vbeln_vauf del_notes. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '05' DEL_NOTES. * ENDIF. concatenate 'Delivery Note: ' del_notes(36) into zinvoice01-delnotes. move del_notes+36 to zinvoice01-delnotes2. * * WRite out SAp Document type, F8, F2, S1, etc RV 950923 * * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '78' DOC_TYPE. * ENDIF. move doc_type to zinvoice01-doc_type. * if doc_type cs 'L2' or doc_type cs 'G2'. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' * '22' SALES_ORD-VDATU. * ENDIF. move sales_ord-vdatu to zinvoice01-del_date. else. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' * '22' VBDKR-LFDAT. * ENDIF. move vbdkr-lfdat to zinvoice01-del_date. endif. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' * '04' VBDKR-VBELN_VAUF. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' * '09' VBDKR-AUDAT_VAUF. * ENDIF. move vbdkr-vbeln_vauf to zinvoice01-order_num. move vbdkr-audat_vauf to zinvoice01-order_date. * Get invoice currency code * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' * '15' VBDKR-WAERK. * ENDIF. move vbdkr-waerk to zinvoice01-curr_code. * Get invoiced address*******ship to party perform write_ship_to_party_info_2(zvprint3) using vbdkr-vbeln '01' '000001' zinvoice01-dir1 zinvoice01-dir2 zinvoice01-cust_num zinvoice01-cust_name zinvoice01-sp_addr1 zinvoice01-sp_addr2 zinvoice01-sp_pcode zinvoice01-sp_city zinvoice01-sp_country zinvoice01-sp_region zinvoice01-sp_addr3 zinvoice01-sp_addr4 zinvoice01-dir3 zinvoice01-acct_group zinvoice01-tax_exempt. * PREVIEW. * find well name and location stored in name1 and location fields of * ZB partner * perform get_well_data(zvprint3) using vbdkr-vbeln '01' '000001'. "gs9 * get location data using so number instead of invoice number "gs9 perform get_well_data(zvprint3) using "gs9 vbdkr-vbeln_vauf '01' '000001' zinvoice01-bp_county zinvoice01-well_name zinvoice01-formation zinvoice01-zb_street zinvoice01-zb_country zinvoice01-zb_pcode zinvoice01-zb_region. * PREVIEW. * Get Date of Service * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' * '21' SALES_ORD-VDATU. * ENDIF. move sales_ord-vdatu to zinvoice01-req_del_dt. * Get job type description job_type_no = sales_ord-kvgr1. *** IJ1 Replace Starts * select single * from tvv1t where spras = sy-langu and * kvgr1 = job_type_no. select single * from T25A2 where spras = sy-langu and kvgr1 = job_type_no. *** IJ1 Replace Ends * IF PREVIEW = 'NO'. ** PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '07' TVV1T-BEZEI. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '07' "LABK926189 * TVV1T-BEZEI+4(16). "LABK926189 * ENDIF. * MOVE TVV1T-BEZEI TO ZINVOICE01-JOB_TYPE. if vbdkr-vkorg = '9040' and "LABK931123 vbdkr-fkdat >= '20011001'. "LABK931123 *** IJ1 Replace Starts * move tvv1t-bezei to zinvoice01-job_type. "LABK931123 * else. "LABK931123 * move tvv1t-bezei+4(16) to zinvoice01-job_type. "LABK926189 move t25A2-bezek to zinvoice01-job_type. "LABK931123 else. "LABK931123 * move t25A2-bezek+4(16) to zinvoice01-job_type. "LABK926189 move t25A2-bezek to zinvoice01-job_type. "LABK931491 *** IJ1 Replace Ends endif. "LABK931123 * Write Tax Jurisdiction to file jb3. select single * from vbpa where parvw = 'WE' and posnr = '000000' and vbeln = vbdkr-vbeln. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '39' VBPA-KUNNR. * ENDIF. move vbpa-kunnr to tax_jcd. * When printing invoices, check to make sure the SHIP-TO/TAX AREA * is the same across all preceding documents. jb5 if ( vbdkr-vbtyp = 'M' or vbdkr-vbtyp = 'U' ). "gh1 perform check_for_diff_shipto. endif. * write salesman name to file clear p0001. select single * from vbpa where parvw = 'VE' and posnr = '000000' and vbeln = vbdkr-vbeln. * This select statement modified with PA0001. LABKK902133 - jb1 * The move-corresponding is probably not necessary, but is kept in * until it can be determined for sure that it is not req'd. * SELECT * FROM PREL WHERE INFTY = '0001' AND * PERNR = VBPA-PERNR. * MOVE PREL+3 TO P0001. select * from pa0001 where pernr = vbpa-pernr. move-corresponding pa0001 to p0001. endselect. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '08' P0001-ENAME. * ENDIF. move p0001-ename to zinvoice01-salesman. * Get quotation number clear quotation. "JL9606 read table quote index 1. " Only use first quote for now * if sy-subrc = 0 and quote-auart = 'AG'. " Quotation type "gh2 if sy-subrc = 0 and ( quote-auart = 'AG' or quote-auart = 'ZZQT' ). * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' * '02' QUOTE-VBELN. * ENDIF. move quote-vbeln to zinvoice01-quote_num. quote_flag = 1. quotation = quote-vbeln. "JL9606 endif. if quote_flag = 0. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '02' ' '. * ENDIF. move ' ' to zinvoice01-quote_num. endif. * Get proposal number * Check whether this doc's order was copied from another "LABK928636 * and if so, retrace until we get to the original order "LABK928636 * and get the text for this order. "LABK928636 clear: l_ref_vbeln, textline. "LABK928636 perform trace_ref_doc_text using '0004' changing "LABK928636 l_ref_vbeln. "LABK928636 if not l_ref_vbeln is initial. "LABK928636 perform get_header_text(zvprint3) using l_ref_vbeln "LABK928636 '0004' textline. "LABK928636 else. "LABK928636 perform get_doc_header_text using vbdkr-vbeln vbdkr-vbeln_vauf quote-vbeln '0004' textline. endif. "LABK928636 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '03' * TEXTLINE. * ENDIF. move textline to zinvoice01-prop_num. * Get SO ticket no perform get_doc_header_text using vbdkr-vbeln vbdkr-vbeln_vauf quote-vbeln '0015' textline. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '73' * TEXTLINE. * ENDIF. move textline to zinvoice01-so_ticket. * Get AFE no * Check whether this doc's order was copied from another "LABK928636 * and if so, retrace until we get to the original order "LABK928636 * and get the text for this order. "LABK928636 clear: l_ref_vbeln, textline. "LABK928636 perform trace_ref_doc_text using '0003' changing "LABK928636 l_ref_vbeln. "LABK928636 if not l_ref_vbeln is initial. "LABK928636 perform get_header_text(zvprint3) using l_ref_vbeln "LABK928636 '0003' textline. "LABK928636 else. "LABK928636 perform get_doc_header_text using vbdkr-vbeln vbdkr-vbeln_vauf quote-vbeln '0003' textline. endif. "LABK928636 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '70' TEXTLINE. * ENDIF. move textline to zinvoice01-afe_num. * Get sales customer contact perform get_doc_header_text using vbdkr-vbeln vbdkr-vbeln_vauf quote-vbeln '0001' textline. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '71' TEXTLINE. * ENDIF. move textline to zinvoice01-sales_cont. * Get field customer contact * Check whether this doc's order was copied from another "LABK928790 * and if so, retrace until we get to the original order "LABK928790 * and get the text for this order. "LABK928790 clear: l_ref_vbeln, textline. "LABK928790 perform trace_ref_doc_text using '0031' changing "LABK928790 l_ref_vbeln. "LABK928790 if not l_ref_vbeln is initial. "LABK928790 perform get_header_text(zvprint3) using l_ref_vbeln "LABK928790 '0031' textline. "LABK928790 else. "LABK928790 perform get_doc_header_text using vbdkr-vbeln vbdkr-vbeln_vauf quote-vbeln '0031' textline. endif. "LABK928790 * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '72' TEXTLINE. * ENDIF. move textline to zinvoice01-ops_cont. * Get invoice comment perform get_header_text(zvprint3) using vbdkr-vbeln '0033' text240. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '74' TEXT240. * ENDIF. perform get_header_text_2(zvprint3) using vbdkr-vbeln '0033' line1 line2 line3 line4. if vbdkr-vbtyp = 'U' and zinvoice01-delnotes <> ' '. "pro forma if zinvoice01-delnotes2 <> ' '. move: zinvoice01-delnotes to zinvoice01-comment1, zinvoice01-delnotes2 to zinvoice01-comment2, line1 to zinvoice01-comment3, line2 to zinvoice01-comment4. else. move: zinvoice01-delnotes to zinvoice01-comment1, line1 to zinvoice01-comment2, line2 to zinvoice01-comment3, line3 to zinvoice01-comment4. endif. else. move: line1 to zinvoice01-comment1, line2 to zinvoice01-comment2, line3 to zinvoice01-comment3, line4 to zinvoice01-comment4. endif. * Get Base in Charge perform get_doc_header_text using vbdkr-vbeln vbdkr-vbeln_vauf quote-vbeln '0032' text80. select single * from tvstt where spras = sy-langu and vstel = text80(4). if sy-subrc = 0. text80 = tvstt-vtext. endif. * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING '01' '000001' '75' TEXT80. * ENDIF. move text80 to zinvoice01-base_chrge. * Get Freight * if no freight condition exists, 0.00 written "gs clear freight_value. "gs select * from vbrk where "gs vbeln = vbdkr-vbeln. "gs select * from konv where "gs knumv = vbrk-knumv "doc. cond. number "gs and kschl = 'HD00'. "condition type "gs freight_value = freight_value + konv-kwert. "gs endselect. "gs exit. "gs endselect. "gs if freight_value eq 0. "write out line but with a blank "gs * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING "gs * '01' '000001' '94' ' '. "gs * ENDIF. move ' ' to zinvoice01-freight. else. "gs * IF PREVIEW = 'NO'. * PERFORM WRITE_TO_FILE(ZVPRINT3) USING "gs * '01' '000001' '94' FREIGHT_VALUE. "gs * ENDIF. move freight_value to zinvoice01-freight. endif. "gs * endform. *---------------------------------------------------------------------* * FORM GET_DOC_HEADER_TEXT * *---------------------------------------------------------------------* * Get the header text for this document * *---------------------------------------------------------------------* form get_doc_header_text using invoice_hdr sales_hdr quote_hdr txt_id txt. perform get_header_text(zvprint3) using invoice_hdr txt_id txt. if txt = space. if not sales_hdr is initial. "LABK926703 perform get_header_text(zvprint3) using sales_hdr txt_id txt. endif. "LABK926703 if txt = space. if not quote_hdr is initial. "LABK926703 perform get_header_text(zvprint3) using quote_hdr txt_id txt. endif. "LABK926703 endif. endif. endform. *---------------------------------------------------------------------* * FORM GET_DOCUMENT_TITLE * *---------------------------------------------------------------------* * Get the correct title for invoices, credit memos, debit memos * *---------------------------------------------------------------------* form get_document_title using doc_title document_type. tables: stxl, stxh. data: temp_str(15) type c. data: begin of stxl_id occurs 0, tdobject like stxl-tdobject, tdname like stxl-tdname, tdid like stxl-tdid, spras like stxl-tdspras, end of stxl_id. data: begin of lines occurs 0. include structure tline. data: end of lines. data: textname(18) type c. clear textname. select * from vbfa where vbelv = vbdkr-vbeln_vauf and vbtyp_n = 'N'. move vbfa-vbeln to cancelled_docs-vbeln. collect cancelled_docs. " Save it to an internal table. endselect. select single * from vbrk where vbeln = vbdkr-vbeln. document_type = vbrk-fkart. if vbrk-rfbsk = 'C'. " Accounting doc was created. select single * from bkpf where bukrs = vbrk-bukrs and belnr = vbrk-belnr and gjahr = vbrk-gjahr. * Compare acct doc created date/time against last print date/time if ( last_print_date > bkpf-cpudt ) or ( last_print_date = bkpf-cpudt and last_print_time > bkpf-cputm ). * Check for repeat of original print (indicated in the header text * of the document in the Invoice Comment), or else just a copy move: 'VBBK' to stxl_id-tdobject, vbdkr-vbeln to stxl_id-tdname, '0011' to stxl_id-tdid, sy-langu to stxl_id-spras. import tline to lines from database stxl(tx) id stxl_id. if sy-subrc = 0. loop at lines. move lines-tdline to textname. exit. endloop. translate textname to upper case. delete from database stxl(tx) id stxl_id. endif. if textname ns 'ORIGINAL'. temp_str = 'Copy'. endif. endif. endif. * Cancelled document? loop at cancelled_docs. select single * from vbrk where vbeln = cancelled_docs-vbeln. if sy-subrc = 0. if vbrk-sfakn = vbdkr-vbeln. move 'Cancelled' to temp_str. exit. endif. endif. endloop. concatenate temp_str doc_title into doc_title separated by ' '. endform. *---------------------------------------------------------------------* * FORM CHECK_REPEAT * *---------------------------------------------------------------------* * A text is printed, if it is a repeat print for the document. * *---------------------------------------------------------------------* form check_repeat. clear repeat. select * into *nast from nast where kappl = nast-kappl and objky = nast-objky and kschl = nast-kschl and spras = nast-spras and parnr = nast-parnr and parvw = nast-parvw and nacha between '1' and '4'. check *nast-vstat = '1'. move *nast-datvr to last_print_date. move *nast-uhrvr to last_print_time. repeat = 'X'. * EXIT. endselect. endform. *---------------------------------------------------------------------* * FORM GET_DEL_NOTES. * *---------------------------------------------------------------------* * Look for all delivery notes related to the billing document * *---------------------------------------------------------------------* form get_del_notes tables deliv_intab structure del_note_tbl using sales_order del_notes_str. data: len1 type i. clear: deliv_intab, del_notes_str. refresh: deliv_intab. select * from vbfa where vbelv = sales_order and vbtyp_n = 'J'. " just del notes move-corresponding vbfa to deliv_intab. collect deliv_intab. endselect. loop at deliv_intab. clear: sy-subrc. * only delivery notes related to the billing document select * from vbfa where vbelv = deliv_intab-vbeln and vbeln = vbdkr-vbeln and vbtyp_v = 'J'. exit. endselect. if sy-subrc = 0. t_string = deliv_intab-vbeln. len = strlen( t_string ). do len times. if t_string-char = '0' or t_string = ' '. shift t_string left. else. exit. endif. enddo. * ************************************************************ * To eliminate Raising Too Small Exception len1 = strlen( del_notes_str ). if len1 > 69. exit. endif. * ************************************************************** concatenate del_notes_str t_string into del_notes_str separated by ' '. endif. endloop. endform. *&---------------------------------------------------------------------* *& Form CHECK_FOR_DIFF_SHIPTO jb5 *&---------------------------------------------------------------------* * this routine checks to make sure the ship-to / tax area * is the same on both the invoice and sales order. *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* form check_for_diff_shipto. * Check Sales Order select single * from vbpa where parvw = 'WE' and posnr = '000000' and vbeln = vbdkr-vbeln_vauf. if sy-subrc = 0. if vbpa-kunnr ne vbdkr-kunwe. shipto_diff_flag = 'X'. else. * Check Delivery Note select single * from vbpa where parvw = 'WE' and posnr = '000000' and vbeln = vbdkr-vbeln_vl. if sy-subrc = 0. if vbpa-kunnr ne vbdkr-kunwe. shipto_diff_flag = 'X'. endif. endif. endif. endif. endform. " CHECK_FOR_DIFF_SHIPTO *&---------------------------------------------------------------------* *& Form MASSAGE_DATA *&---------------------------------------------------------------------* form massage_data. data: new_val(15) type c, additional(1) type c, regular(1) type c, lines type i. * Convert appropriate header data to upper case. translate zinvoice01-afe_num to upper case. translate zinvoice01-po_num to upper case. translate zinvoice01-so_ticket to upper case. translate zinvoice01-well_name to upper case. translate zinvoice01-bp_county to upper case. * Service description window formatting if zinvoice01-well_name cs 'Name'. move ' ' to zinvoice01-well_name. endif. if zinvoice01-bp_country cs 'Location'. move ' ' to zinvoice01-bp_country. endif. * Prepare total box data perform convert_no_to_str2(zvprint3) using zinvoice01-hfinal_amt 2 'Y' new_val. * move new_val to zinvoice01-totalline5. * move new_val to zinvoice01-totalline6. "LABK918227 move new_val to zinvoice01-totalline7. "LABK934576 * Taxes if tax2 ne 0 or tax5 ne 0. if tax_jcd(3) = 'CAQ'. * move ' Q.S.T.' to zinvoice01-descline3. * move ' Q.S.T.' to zinvoice01-descline4. "LABK918227 move ' Q.S.T.' to zinvoice01-descline5. "LABK934576 else. * move '* Provincial Tax' to zinvoice01-descline3. * move '* Provincial Tax' to zinvoice01-descline4. "LABK918227 move '* Provincial Tax' to zinvoice01-descline5. "LABK934576 endif. * move ' G.S.T.' to zinvoice01-descline4. * move ' G.S.T.' to zinvoice01-descline5. "LABK918227 move ' G.S.T.' to zinvoice01-descline6. "LABK934576 perform convert_no_to_str(zvprint3) using tax1 2 'Y' new_val. * move new_val to zinvoice01-totalline4. * move new_val to zinvoice01-totalline5. "LABK918227 move new_val to zinvoice01-totalline6. "LABK934576 if tax2 ne 0. perform convert_no_to_str(zvprint3) using tax2 2 'Y' new_val. * move new_val to zinvoice01-totalline3. * move new_val to zinvoice01-totalline4. "LABK918227 move new_val to zinvoice01-totalline5. "LABK934576 else. perform convert_no_to_str(zvprint3) using tax5 2 'Y' new_val. * move new_val to zinvoice01-totalline3. * move new_val to zinvoice01-totalline4. "LABK918227 move new_val to zinvoice01-totalline5. "LABK934576 endif. else. perform convert_no_to_str(zvprint3) using tax1 2 'Y' new_val. * move new_val to zinvoice01-totalline3. * move new_val to zinvoice01-totalline4. "LABK918227 move new_val to zinvoice01-totalline5. "LABK934576 if tax_jcd(2) = 'CH'. * move ' H.S.T.' to zinvoice01-descline3. * move ' H.S.T.' to zinvoice01-descline4. "LABK918227 move ' H.S.T.' to zinvoice01-descline5. "LABK934576 else. * move ' G.S.T.' to zinvoice01-descline3. * move ' G.S.T.' to zinvoice01-descline4. "LABK918227 move ' G.S.T.' to zinvoice01-descline5. "LABK934576 endif. * move ' ' to zinvoice01-descline4. * move ' ' to zinvoice01-totalline4. * move ' ' to zinvoice01-descline5. "LABK918227 * move ' ' to zinvoice01-totalline5. "LABK918227 move ' ' to zinvoice01-descline6. "LABK934576 move ' ' to zinvoice01-totalline6. "LABK934576 endif. * Surcharge if zinvoice01-hsur_desc ne ' '. perform convert_no_to_str(zvprint3) using zinvoice01-htot_sur 2 'Y' new_val. move new_val to zinvoice01-totalline1. move zinvoice01-hsur_desc to zinvoice01-descline1. endif. perform convert_no_to_str(zvprint3) using zinvoice01-htt_af_sur 2 'Y' new_val. * move new_val to zinvoice01-totalline2. * move new_val to zinvoice01-totalline3. "LABK918227 move new_val to zinvoice01-totalline4. "LABK934576 * Nowsco special discount "LABK918227 if nows_spec_disc_amt ne 0. "LABK918227 move zinvoice01-hsdisc_des to zinvoice01-descline2. "LABK918227 perform convert_no_to_str(zvprint3) using "LABK918227 zinvoice01-hsdisc_amt 2 'Y' new_val. "LABK918227 move new_val to zinvoice01-totalline2. "LABK918227 endif. "LABK918227 * Nowsco special discount "LABK934576 if fuel_surchg_amt ne 0. "LABK934576 move zinvoice01-hfuelsur_des to zinvoice01-descline3. "LABK934576 perform convert_no_to_str(zvprint3) using "LABK934576 zinvoice01-hfuelsur_amt 2 'Y' new_val. "LABK934576 move new_val to zinvoice01-totalline3. "LABK934576 endif. "LABK934576 * Get unique records loop at item_data. move-corresponding item_data to xitem_data. collect xitem_data. clear xitem_data. endloop. refresh item_data. loop at xitem_data. move-corresponding xitem_data to item_data. append item_data. clear item_data. endloop. * Prepare item data clear: additional, regular. loop at item_data. if item_data-quantity ne 0. * List Unit Price division if item_data-bj_cond = 'ZBJS' or item_data-cond_type = 'c02'. "LABK929500 item_data-book_val = item_data-net_val * 1000 / item_data-quantity. item_data-disc_amt = ' '. else. item_data-book_val = item_data-book_val * 1000 / item_data-quantity. * Discount Unit Price division item_data-disc_amt = item_data-net_val * 1000 / item_data-quantity. endif. endif. * List Unit Price if item_data-mat_num eq '300001' or item_data-mat_num eq '000000000000300001'. * If material is 300001, use net val / quantity instead of * book val / quantity if item_data-net_val ne 0. * List Unit Price division item_data-book_val = item_data-net_val * 1000 / item_data-quantity. endif. endif. if item_data-book_val ne 0. perform convert_no_to_str(zvprint3) using item_data-book_val 2 'Y' new_val. move new_val to item_data-list_pr. else. move 'N/C' to item_data-list_pr. endif. * Discount Percentage perform convert_no_to_str(zvprint3) using item_data-disc_per 2 'Y' new_val. write new_val+9(6) to item_data-disc. if item_data-disc eq '00.00' or item_data-cond_type = 'c02'. "LABK929500 move ' ' to item_data-disc. endif. * Discount Unit Price if zinvoice01-hdisc_desc ne ' '. if item_data-net_val ne 0. perform convert_no_to_str(zvprint3) using item_data-disc_amt 2 'Y' new_val. move new_val to item_data-disc_pr. else. move 'N/C' to item_data-disc_pr. endif. else. move ' ' to item_data-disc_pr. endif. * Price (net value) perform convert_no_to_str(zvprint3) using item_data-net_val 2 'Y' new_val. if new_val = ' '. move '0.00' to new_val. endif. move new_val to item_data-price. * Quantity Used perform convert_no_to_str(zvprint3) using item_data-quantity 3 'Y' new_val. if new_val = ' '. move '0.000' to new_val. endif. move new_val to item_data-quanu. condense item_data-quanu. * Quantity Quoted perform convert_no_to_str(zvprint3) using item_data-qty_quoted 3 'Y' new_val. move new_val to item_data-quanq. condense item_data-quanq. * Test to see if we have regular AND additional item, or just reg. * if item_data-qty_quoted ne 0 or item_data-quanq ne '0.000'. if item_data-qty_quoted ne 0 or item_data-quanq ne ' '. move 'X' to additional. else. move 'X' to regular. endif. modify item_data. endloop. * Set mixed flag if we have both additional AND regular items if additional eq 'X' and regular eq 'X'. move 'X' to zinvoice01-mixed. else. move ' ' to zinvoice01-mixed. endif. * For hm00 and mixed (fixed\additional) invoices, separate into * fixed and additional groups and total each groups price clear: item_gr1, item_gr2, sum1hm00, sum2hm00, sum1norm, sum2norm. refresh: item_gr1, item_gr2. *{Start Insert LABK934392 IF vbdkr-vbtyp = 'M' "Invoices Only AND g_cust_num = '0001116370' "Berlington Only AND job_type_no >= 100 "Cementing Jobs only AND job_type_no <= 199 AND nast-dsnam <> 'OLD'. "New Items Only refresh item_tmp. item_tmp[] = item_data[]. refresh item_data. clear item_data. LOOP at item_tmp. * For FOB's only, clear unit price before discount IF item_tmp-posnr = item_tmp-uepos AND NOT item_tmp-posnr IS INITIAL. IF item_tmp-disc_pr IS INITIAL OR item_tmp-disc_pr = 'N/C'. item_tmp-disc_amt = item_tmp-book_val. item_tmp-disc_pr = item_tmp-list_pr. ENDIF. CLEAR: item_tmp-list_pr, item_tmp-disc_per, item_tmp-disc. MODIFY item_tmp. * Combine the items with the same item number and item description * and discounted unit price READ table item_data with key matnr = item_tmp-matnr mat_desc = item_tmp-mat_desc disc_amt = item_tmp-disc_amt. IF sy-subrc = 0. rec_index = sy-tabix. ADD item_tmp-quantity to item_data-quantity. ADD item_tmp-qty_quoted to item_data-qty_quoted. ADD item_tmp-net_val to item_data-net_val. * Price (net value) perform convert_no_to_str(zvprint3) using item_data-net_val 2 'Y' new_val. if new_val = ' '. move '0.00' to new_val. endif. move new_val to item_data-price. * Quantity Quoted perform convert_no_to_str(zvprint3) using item_data-qty_quoted 3 'Y' new_val. move new_val to item_data-quanq. condense item_data-quanq. * Quantity Used perform convert_no_to_str(zvprint3) using item_data-quantity 3 'Y' new_val. if new_val = ' '. move '0.000' to new_val. endif. move new_val to item_data-quanu. condense item_data-quanu. MODIFY item_data INDEX rec_index. Else. APPEND item_tmp TO item_data. ENDIF. ELSE. APPEND item_tmp TO item_data. ENDIF. ENDLOOP. ENDIF. *}End Insert LABK934392 loop at item_data. * If we have a HM00, sort into two groups - fixed and additional * if zinvoice01-hhead_cont eq 'HM00'. if ( zinvoice01-hhead_cont eq 'HM00' and zinvoice01-mixed = ' ' ). if item_data-cond_type eq 'HM00'. move-corresponding item_data to item_gr1. "Fixed append item_gr1. add item_data-net_val to sum1hm00. else. * Want 'free of charge' items included in fixed price section if item_data-category = 'ZTAP' or "LABK916213 item_data-category = 'ZFOC' or "LABK916213 item_data-category = 'TANN'. "LABK916213 move-corresponding item_data to item_gr1. "LABK916213 append item_gr1. "LABK916213 add item_data-net_val to sum1hm00. "LABK916213 elseif item_data-quantity <> 0. "LABK916213 * If all from quotes, and additional item not included in fixed price * (i.e. not included in billing doc), if not used, don't print. * if item_data-quantity <> 0. move-corresponding item_data to item_gr2. "Additional append item_gr2. add item_data-net_val to sum2hm00. endif. endif. * elseif zinvoice01-mixed eq 'X'. elseif ( zinvoice01-hhead_cont <> 'HM00' and zinvoice01-mixed eq 'X' ). if item_data-qty_quoted ne 0 or item_data-quanq ne ' '. move-corresponding item_data to item_gr1. append item_gr1. add item_data-net_val to sum2norm. else. move-corresponding item_data to item_gr2. append item_gr2. add item_data-net_val to sum1norm. endif. ***NEW** elseif ( zinvoice01-hhead_cont = 'HM00' and zinvoice01-mixed = 'X' ). if ( item_data-cond_type eq 'HM00' ) and ( item_data-qty_quoted ne 0 or item_data-quanq ne ' ' ). move-corresponding item_data to item_gr1. "Fixed append item_gr1. add item_data-net_val to sum1hm00. elseif ( item_data-cond_type = 'HM00' ) and ( item_data-qty_quoted = 0 or item_data-quanq = ' ' ). move-corresponding item_data to item_gr2. "Addl with fx pr append item_gr2. add item_data-net_val to sum1hm00. else. move-corresponding item_data to item_gr3. "In addn to fx append item_gr3. "pr ie regular add item_data-net_val to sum2hm00. endif. ***END NEW** endif. endloop. sort item_gr1 by matnr ascending tax_flag descending. sort item_gr2 by matnr ascending tax_flag descending. sort item_gr3 by matnr ascending tax_flag descending. sort item_data by matnr ascending tax_flag descending. ** Frac Sand ** At lease one existing line containing frac sand must be ** first in all groups clear lines. describe table item_gr1 lines lines. if lines > 0. read table item_gr1 with key mat_desc(9) = 'Frac Sand'. if sy-subrc = 0. perform move_frac_first tables item_gr1. endif. endif. clear lines. describe table item_gr2 lines lines. if lines > 0. read table item_gr2 with key mat_desc(9) = 'Frac Sand'. if sy-subrc = 0. perform move_frac_first tables item_gr2. endif. endif. clear lines. describe table item_gr3 lines lines. if lines > 0. read table item_gr3 with key mat_desc(9) = 'Frac Sand'. if sy-subrc = 0. perform move_frac_first tables item_gr3. endif. endif. clear lines. describe table item_data lines lines. if lines > 0. read table item_data with key mat_desc(9) = 'Frac Sand'. if sy-subrc = 0. perform move_frac_first tables item_data. endif. endif. clear lines. ** end frac sand * No qty quoted for Debit Memos * if ( vbdkr-vbtyp = 'O' ) or ( vbdkr-vbtyp = 'P' ). if vbdkr-vbtyp = 'P'. item_gr1-quanq = ' '. modify item_gr1 transporting quanq where quanq ne ' '. item_gr2-quanq = ' '. modify item_gr2 transporting quanq where quanq ne ' '. item_gr3-quanq = ' '. modify item_gr3 transporting quanq where quanq ne ' '. item_data-quanq = ' '. modify item_data transporting quanq where quanq ne ' '. endif. * Convert sums into strings perform convert_no_to_str(zvprint3) using sum1hm00 2 'Y' new_val. move new_val to zinvoice01-sum1hm00. perform convert_no_to_str(zvprint3) using sum2hm00 2 'Y' new_val. move new_val to zinvoice01-sum2hm00. perform convert_no_to_str(zvprint3) using sum1norm 2 'Y' new_val. move new_val to zinvoice01-sum1norm. perform convert_no_to_str(zvprint3) using sum2norm 2 'Y' new_val. move new_val to zinvoice01-sum2norm. endform. " MASSAGE_DATA *&---------------------------------------------------------------------* *& Form MOVE_FRAC_FIRST *&---------------------------------------------------------------------* form move_frac_first tables ftab structure item_data. data: begin of frac_line occurs 0. include structure item_gr1. data: end of frac_line. data: unused type i, used_indx type i, old_count type i, new_count type i, tot_lines type i. clear: unused, used_indx, old_count, new_count, tot_lines. describe table ftab lines tot_lines. loop at ftab where quanu = '0.000'. "Unused add 1 to unused. endloop. read table ftab with key mat_desc(9) = 'Frac Sand' quanu = '0.000'. if sy-subrc = 0. if unused <> 0. old_count = 1. while old_count <= unused. read table ftab index old_count. if ftab-mat_desc(9) = 'Frac Sand'. add 1 to new_count. move ftab to frac_line. delete ftab index old_count. insert frac_line into ftab index new_count. exit. endif. add 1 to old_count. endwhile. endif. clear: old_count, new_count. endif. used_indx = unused + 1. loop at ftab where mat_desc(9) = 'Frac Sand' and quanu <> '0.000'. exit. endloop. if sy-subrc = 0. old_count = used_indx. "first line of used new_count = used_indx. while old_count <= tot_lines. read table ftab index old_count. if ftab-mat_desc(9) = 'Frac Sand'. move ftab to frac_line. delete ftab index old_count. insert frac_line into ftab index new_count. * add 1 to new_count. exit. endif. add 1 to old_count. endwhile. clear: old_count, new_count, tot_lines. endif. endform. "MOVE_FRAC_FIRST *&---------------------------------------------------------------------* *& Form ACTIVATE_ELEMENTS *&---------------------------------------------------------------------* form activate_elements. data: item type i, gr2 type i, gr3 type i. item = 0. clear zinvoice01-lines. * Start delete LABK931107 * if vbdkr-vbtyp = 'O'. "Credit Memos * loop at item_data. * add 1 to zinvoice01-lines. * endloop. * else. "all other document types * End delete LABK931107 * This section gets the number of lines in the 'main' portion * of the printout and adds the number of lines reserved for the * 'total' portion of the printout. if ( zinvoice01-hhead_cont eq 'HM00' and zinvoice01-mixed eq ' ' ). add 2 to zinvoice01-lines. loop at item_gr1. add 1 to zinvoice01-lines. endloop. add 1 to zinvoice01-lines. loop at item_gr2. add 1 to gr2. add 1 to zinvoice01-lines. endloop. if gr2 gt 0. add 1 to zinvoice01-lines. endif. elseif ( zinvoice01-hhead_cont <> 'HM00' and zinvoice01-mixed eq 'X' ). loop at item_gr1. add 1 to zinvoice01-lines. endloop. loop at item_gr2. add 1 to zinvoice01-lines. endloop. add 1 to zinvoice01-lines. elseif ( zinvoice01-hhead_cont = 'HM00' and zinvoice01-mixed eq 'X' ). add 1 to zinvoice01-lines. loop at item_gr1. add 1 to zinvoice01-lines. endloop. loop at item_gr2. * AT FIRST. * ADD 2 TO ZINVOICE01-LINES. * ENDAT. add 1 to zinvoice01-lines. endloop. add 1 to zinvoice01-lines. loop at item_gr3. add 1 to gr3. at first. add 1 to zinvoice01-lines. endat. add 1 to zinvoice01-lines. endloop. if gr3 gt 0. add 1 to zinvoice01-lines. endif. else. loop at item_data. add 1 to zinvoice01-lines. endloop. endif. clear: gr2, gr3. * Start delete LABK931107 * endif. "vbdkr-vbtyp = 'O' * End delete LABK931107 * Footer for co. code 9040 higher than for others so lines in main * window must be less if vbdkr-vkorg = '9040'. if zinvoice01-lines >= 30. "total lines in main window zinvoice01-lines = ( zinvoice01-lines mod 30 ). endif. else. if zinvoice01-lines >= 33. "total lines in main window zinvoice01-lines = ( zinvoice01-lines mod 33 ). endif. endif. * {Start replace LABK934634 * case vbdkr-vbtyp. * when 'O' or 'P'. "credit or debit memo * if zinvoice01-lines <> 0. "exactly 32 lines * add 9 to zinvoice01-lines. "total box + 'credit' * endif. * when 'M'. "invoice * if zinvoice01-lines <> 0. "exactly 32 lines * if vbdkr-vkorg = '9040'. * add 11 to zinvoice01-lines. "2 for tot box + pmt instr * else. * add 9 to zinvoice01-lines. "total box * endif. * endif. * when others. * if zinvoice01-lines <> 0. "exactly 32 lines * add 14 to zinvoice01-lines. "total box + Nowsco Rep * endif. * endcase. * 9 lines were reserved for the total portion of the printout. * A new line for fuel surcharge has been added so we need to adjust. * Add 1. case vbdkr-vbtyp. when 'O' or 'P'. "credit or debit memo if zinvoice01-lines <> 0. "exactly 32 lines add 10 to zinvoice01-lines. "total box + 'credit' endif. when 'M'. "invoice if zinvoice01-lines <> 0. "exactly 32 lines if vbdkr-vkorg = '9040'. add 12 to zinvoice01-lines. "2 for tot box + pmt instr else. add 10 to zinvoice01-lines. "total box endif. endif. when others. if zinvoice01-lines <> 0. "exactly 32 lines add 15 to zinvoice01-lines. "total box + Nowsco Rep endif. endcase. * End replace LABK934634} if vbdkr-vkorg = '9040'. if ( zinvoice01-lines >= 30 ). zinvoice01-lines = 0. zinvoice01-underline = ' '. endif. else. if ( zinvoice01-lines >= 33 ). zinvoice01-lines = 0. zinvoice01-underline = ' '. endif. endif. * {Start insert LABK934346 condense zinvoice01-lines no-gaps. * End insert LABK934346} * Activate header elements * Start delete LABK931107 * if vbdkr-vbtyp = 'O'. "Credit Memo * item = 0. * loop at item_data. * move-corresponding item_data to zinvoice01. * if item eq 0. * perform write_form using 'LINE1' 'MAIN'. * else. * perform write_form using 'LINEN' 'MAIN'. * endif. * add 1 to item. * endloop. * else. * End delete LABK931107 * If we have an hm00 if ( zinvoice01-hhead_cont eq 'HM00' and zinvoice01-mixed eq ' ' ). * Show header line perform write_form using 'LINE1HM00' 'MAIN'. * Loop through items included in fixed price loop at item_gr1. move-corresponding item_gr1 to zinvoice01. perform write_form using 'LINE2HM00' 'MAIN'. endloop. * Display fixed price perform write_form using 'LINE3HM00' 'MAIN'. * Loop through additional items gr2 = 0. loop at item_gr2. move-corresponding item_gr2 to zinvoice01. add 1 to gr2. at first. perform write_form using 'LINE4HM00' 'MAIN'. endat. * PERFORM WRITE_FORM USING 'LINE2HM00' 'MAIN'. perform write_form using 'LINE2HM00_ADD' 'MAIN'. endloop. * Display additional item total if gr2 gt 0. perform write_form using 'LINE5HM00' 'MAIN'. endif. * else, check to see if we have an invoice with fixed and additional * items (TPRSS) * elseif zinvoice01-mixed eq 'X'. elseif ( zinvoice01-hhead_cont <> 'HM00' and zinvoice01-mixed eq 'X' ). item = 0. loop at item_gr1. move-corresponding item_gr1 to zinvoice01. if item eq 0. perform write_form using 'LINE1' 'MAIN'. else. perform write_form using 'LINEN' 'MAIN'. endif. add 1 to item. endloop. loop at item_gr2. move-corresponding item_gr2 to zinvoice01. add 1 to gr2. at first. perform write_form using 'ADDHEAD' 'MAIN'. endat. perform write_form using 'LINEN' 'MAIN'. endloop. elseif ( zinvoice01-hhead_cont = 'HM00' and zinvoice01-mixed eq 'X' ). * Show header line perform write_form using 'LINE1HM00' 'MAIN'. * Loop through items included in fixed price from quote loop at item_gr1. move-corresponding item_gr1 to zinvoice01. * perform write_form using 'LINE6HM00' 'MAIN'. * Users no longer want qty quoted for fixed price items perform write_form using 'LINE2HM00' 'MAIN'. endloop. * Loop through additional items with fixed price loop at item_gr2. move-corresponding item_gr2 to zinvoice01. add 1 to gr2. ***Don't show 'Addtl Items' header or header line anymore * at first. * perform write_form using 'ADDHEAD' 'MAIN'. * Show header line anymore * perform write_form using 'LINE1HM00' 'MAIN'. * endat. perform write_form using 'LINE2HM00' 'MAIN'. endloop. * Display fixed price perform write_form using 'LINE3HM00' 'MAIN'. * Loop through additional items i.e. in addition to fixed price gr3 = 0. loop at item_gr3. move-corresponding item_gr3 to zinvoice01. add 1 to gr3. at first. perform write_form using 'LINE4HM00' 'MAIN'. endat. * perform write_form using 'LINE2HM00' 'MAIN'. perform write_form using 'LINE1' 'MAIN'. endloop. * Display additional item total if gr3 gt 0. perform write_form using 'LINE5HM00' 'MAIN'. endif. * Regular invoice else. item = 0. loop at item_data. move-corresponding item_data to zinvoice01. if item eq 0. perform write_form using 'LINE1' 'MAIN'. else. perform write_form using 'LINEN' 'MAIN'. endif. add 1 to item. endloop. endif. * Start delete LABK931107 * endif. "vbdkr-vbtyp = 'O' * End delete LABK931107 perform write_form using 'UNDERLINE' 'MAIN'. zinvoice01-underline = 'X'. perform write_form using 'TOTAL' 'MAIN'. endform. " ACTIVATE_ELEMENTS *&---------------------------------------------------------------------* *& Form PROTOCOL_UPDATE *&---------------------------------------------------------------------* * The messages are collected for the processing protocol. * *---------------------------------------------------------------------* form protocol_update. check xscreen = space. call function 'NAST_PROTOCOL_UPDATE' exporting msg_arbgb = syst-msgid msg_nr = syst-msgno msg_ty = syst-msgty msg_v1 = syst-msgv1 msg_v2 = syst-msgv2 msg_v3 = syst-msgv3 msg_v4 = syst-msgv4 exceptions others = 1. endform. " PROTOCOL_UPDATE *&---------------------------------------------------------------------* *& Form WRITE_FORM *&---------------------------------------------------------------------* form write_form using element window. call function 'WRITE_FORM' exporting element = element window = window exceptions element = 1 window = 6 others = 7. endform. " WRITE_FORM * >>Start Insert LABK928636 >> *&---------------------------------------------------------------------* *& Form TRACE_REF_DOC_TEXT *&---------------------------------------------------------------------* form trace_ref_doc_text using value(p_id) changing p_ref_vbeln. data: l_vbeln like vbdkr-vbeln, l_tdid like stxh-tdid. l_vbeln = vbdkr-vbeln. l_tdid = p_id. clear p_ref_vbeln. * Get the sales order that this was created from and get any * possible sales orders that this order was copied from. * Set sy-subrc. sy-subrc = 0. while sy-subrc = 0. select single * from stxh where tdobject = 'VBBK' and tdname = l_vbeln and tdid = l_tdid and tdspras = sy-langu. if sy-subrc = 0. if not stxh-tdref is initial and not stxh-tdrefname is initial. * There is a ref document p_ref_vbeln = stxh-tdrefname(10). * Check that the referenced doc is not the same as the one * we got before. Not 100% sure that the original record would * have no ref flag. if p_ref_vbeln = l_vbeln. exit. else. l_vbeln = stxh-tdrefname(10). endif. else. * No ref document exit. endif. endif. endwhile. endform. " TRACE_REF_DOC_TEXT * >>End Insert LABK928636 >> *{ Start insert LABK934226 *----------------------------------------------------------------------- * Determine Parent * Find if the item is a parent item, i.e. An exploding FOB *----------------------------------------------------------------------- FORM determine_parent USING p_posnr "child line number p_uepos "parent line number fob_parent. IF p_uepos = '000000'. * check all items for a parent equal to the current posnr LOOP AT tvbap. IF tvbap-uepos EQ p_posnr. fob_parent = 1. EXIT. ENDIF. ENDLOOP. ENDIF. ENDFORM. *---------------------------------------------------------------------* * FORM print_item_text * *---------------------------------------------------------------------* * ........ * *---------------------------------------------------------------------* FORM get_item_text USING p_vbeln p_posnr p_id p_line. DATA: lines LIKE tline OCCURS 1 WITH HEADER LINE, l_name(70) TYPE c. CONCATENATE p_vbeln p_posnr INTO l_name. CALL FUNCTION 'READ_TEXT' EXPORTING client = sy-mandt id = p_id language = 'E' name = l_name object = 'VBBP' TABLES lines = lines EXCEPTIONS id = 01 language = 02 name = 03 not_found = 04 object = 05 reference_check = 06. READ TABLE lines INDEX 1. MOVE lines-tdline TO p_line. REFRESH lines. ENDFORM. "get_item_text *----------------------------------------------------------------------- * Form GET_quoted_quantity * This is a modified copy of the form "WRITE_DATA_TO_ACCESS" in the * include program "ZVREFSI2" *----------------------------------------------------------------------- *FORM WRITE_DATA_TO_ACCESS TABLES SALES_ITEMTAB STRUCTURE ITEMTAB FORM get_quantity_quoted TABLES SALES_ITEMTAB STRUCTURE ITEMTAB ITEM_DATA STRUCTURE ITEM_DATA USING QUOTATION LAST_ITEM. DATA: BEGIN OF QUOTE_ITEMTAB OCCURS 50, ITEM_COUNT(6) TYPE N, MATNR LIKE VBAP-MATNR, " Material Number ARKTX LIKE VBAP-ARKTX, "short text KWMENG LIKE VBAP-KWMENG, "Quantity VRKME LIKE VBAP-VRKME, "Unit PSTYV LIKE VBAP-PSTYV, "Item category posnr like vbap-posnr, uepos like vbap-uepos, END OF QUOTE_ITEMTAB, MATCH_SW(1) TYPE C, ITEM_COUNT(6) TYPE N. DATA: wa_quote_item like line of quote_itemtab. DATA: quote_desc like quote_itemtab-arktx, * temp_desc like quote_itemtab-arktx, temp_posnr like vbap-posnr, temp_uepos like vbap-uepos. DATA: BEGIN OF tvbdpa OCCURS 0. "Internal table for items INCLUDE STRUCTURE vbdpa. DATA: END OF tvbdpa. ITEM_COUNT = LAST_ITEM. CLEAR: QUOTE_ITEMTAB, wa_quote_item. REFRESH QUOTE_ITEMTAB. SELECT SINGLE * FROM VBAK WHERE VBELN = QUOTATION. IF VBAK-AUART NE 'AG'. WRITE: / 'ZVREFSI2 error, no quotation...'. EXIT. "exit from the routine ENDIF. * Only populate quote with ernam = 'SAPPRT' or 'TPRSS'. "LABK926688 IF ( VBAK-ERNAM NE 'SAPPRT' and vbak-ernam(4) ne 'TPRS' ). "LABK930749 EXIT. ENDIF. fob_posnr = '999999'. fob_blend = ' '. REFRESH tvbap. SELECT * FROM vbap INTO corresponding fields of TABLE tvbap WHERE VBELN = QUOTATION AND pstyv NE 'TAQ' AND abgru = ' '. SELECT * FROM VBAP WHERE VBELN = QUOTATION AND PSTYV NE 'TAQ'. MOVE-CORRESPONDING VBAP TO wa_quote_item. PERFORM TRUNC_LEAD_ZERO USING wa_quote_item-MATNR. fob_parent = 0. PERFORM determine_parent USING vbap-posnr vbap-uepos fob_parent. * if we have an fob parent, check to see if there is an fob * description to use in place of the regular material description IF fob_parent EQ 1. CLEAR textline. * Get item text from THE QUOTE PERFORM get_item_text USING vbap-vbeln vbap-posnr '0053' textline. fob_blend = wa_quote_item-ARKTX. IF NOT textline IS INITIAL. fob_blend = textline. ENDIF. fob_posnr = vbap-posnr. ENDIF. temp_posnr = vbap-posnr. temp_uepos = vbap-uepos. IF vbap-uepos EQ fob_posnr. * This is an FOB detail line MOVE vbap-uepos TO wa_quote_item-uepos. MOVE vbap-posnr TO wa_quote_item-posnr. MOVE fob_blend TO wa_quote_item-arktx. ELSE. * This might be an FOB parent and/or FOB detail line temp_posnr = '000000'. IF vbap-posnr EQ fob_posnr. temp_posnr = fob_posnr. ENDIF. * Make sure it is a detail line IF temp_posnr EQ fob_posnr. MOVE fob_posnr TO temp_uepos. MOVE fob_blend TO wa_quote_item-arktx. ENDIF. MOVE temp_uepos TO wa_quote_item-uepos. MOVE temp_posnr TO wa_quote_item-posnr. ENDIF. read table quote_itemtab with key matnr = wa_quote_item-matnr arktx = wa_quote_item-arktx. if sy-subrc = 0. add wa_quote_item-kwmeng to quote_itemtab-kwmeng. modify quote_itemtab index sy-tabix. else. append wa_quote_item to quote_itemtab. endif. ENDSELECT. LOOP AT QUOTE_ITEMTAB. quote_desc = quote_itemtab-arktx. CONDENSE quote_desc NO-GAPS. TRANSLATE quote_desc TO UPPER CASE. CLEAR MATCH_SW. LOOP AT SALES_ITEMTAB. CONDENSE sales_itemtab-arktx NO-GAPS. TRANSLATE sales_itemtab-arktx TO UPPER CASE. IF SALES_ITEMTAB-MATERIAL_NO = QUOTE_ITEMTAB-MATNR AND SALES_ITEMTAB-ARKTX = quote_desc. LOOP AT ITEM_DATA WHERE COUNT EQ SALES_ITEMTAB-ITEM_COUNT. MATCH_SW = 'X'. MOVE QUOTE_ITEMTAB-KWMENG TO ITEM_DATA-QTY_QUOTED. MODIFY ITEM_DATA. EXIT. ENDLOOP. EXIT. ENDIF. ENDLOOP. IF MATCH_SW NE 'X'. ITEM_COUNT = ITEM_COUNT + 1. CLEAR ITEM_DATA. MOVE QUOTE_ITEMTAB-MATNR TO ITEM_DATA-MAT_NUM. MOVE QUOTE_ITEMTAB-ARKTX TO ITEM_DATA-MAT_DESC. MOVE QUOTE_ITEMTAB-KWMENG TO ITEM_DATA-QTY_QUOTED. MOVE QUOTE_ITEMTAB-VRKME TO ITEM_DATA-UOM. MOVE QUOTE_ITEMTAB-PSTYV TO ITEM_DATA-CATEGORY. MOVE QUOTE_ITEMTAB-uepos TO ITEM_DATA-uepos. MOVE QUOTE_ITEMTAB-posnr TO ITEM_DATA-posnr. APPEND ITEM_DATA. ENDIF. ENDLOOP. ENDFORM. "get_quantity_quoted *} End insert LABK934392