‎2008 Jan 31 11:18 AM
Can some one give me the FM through which I can get the Condition Record(KNUMH) and Condition Value based on the Condition Type(KSCHL)??
Please help.Its urgent.
‎2008 Jan 31 11:25 AM
Hi
Please check the program below:
REPORT zvadin01 LINE-COUNT 100 MESSAGE-ID vn.
**********************************************************************
Definition of tables
**********************************************************************
TABLES: komk , "Communication Header for Pricing
komp , "Pricing Communication Item
komvd , "Price Determination Communication-
"Cond.Record for Printing
vbco3 , "Sales Doc.Access Methods: Key Fields:
"Document Printing
vbdkr , "Document Header View for Billing
vbrk , "Billing Document: Header Data
vbdpr , "Document Item View for Billing
sadr , "Address Management: Company Data
tvko , "Organizational Unit: Sales Organizations
t001 , "Company Codes
t001g , "Company Code-Dependent Standard Texts
t012 , "House Banks
t012k , "House Bank Accounts
knbk , "Customer Master (Bank Details)
bnka , "Bank master record
kna1 , "General Data in Customer Master
knb1 , "Customer Master (Company Code)
usr21 , "Assign user name address key
adrp , "Persons (Business Address Services)
komv , "Pricing Communications-Condition Record
vbdka , "Document Header View for Inquiry,Quotation,Order
vbdpa , "Document Item View for Inquiries,Quotation,Order
zcngts . "GTS data to SAP for Paul Wurth China
**********************************************************************
*Additional definitions of tables for general issues
**********************************************************************
INCLUDE rvadtabl.
**********************************************************************
*Definition of internal tables
**********************************************************************
DATA: BEGIN OF tvbdpr OCCURS 100. "Internal table for items
INCLUDE STRUCTURE vbdpr.
DATA: END OF tvbdpr.
DATA: BEGIN OF tkomv OCCURS 50. "Pricing Communications-
INCLUDE STRUCTURE komv. "Condition Record
DATA: END OF tkomv.
DATA: BEGIN OF tkomvd OCCURS 50. "Price Determination
INCLUDE STRUCTURE komvd. "Communication-Cond.Record for
DATA: END OF tkomvd. "Printing
DATA: BEGIN OF hkomvd OCCURS 50.
INCLUDE STRUCTURE komvd.
DATA: END OF hkomvd.
DATA: BEGIN OF tvbdpa OCCURS 0. "Internal table for SO items
INCLUDE STRUCTURE vbdpa.
DATA: END OF tvbdpa.
DATA: BEGIN OF text OCCURS 10.
INCLUDE STRUCTURE tline.
DATA: END OF text.
DATA: da_mess LIKE vbfs OCCURS 0 WITH HEADER LINE.
TYPES: BEGIN OF gs_finaltb,
docno(20) TYPE c, "Invoice Number
quant(4) TYPE c, "Line Item Quantity
kunrg(10) TYPE c, "Customer Number
cunam(100) TYPE c, "Customer name
cureg(20) TYPE c, "Customer Registration Number
cuadd(80) TYPE c, "Customer Address
cubnk(180) TYPE c, "Customer Bank, Account Number
remrk(160) TYPE c, "PO number and SO number
isuby(40) TYPE c, "Creater of invoice
chkby(40) TYPE c, "Invoice checker (Leave blank)
rcvby(40) TYPE c, "Invoice Receiver (Leave blank)
ltnam(80) TYPE c, "List trade name constant as ######
bdate(8) TYPE c, "Bill Date (Leave Blank)
bukrs(4) TYPE c, "Company Code
hobnk(80) TYPE c, "House bank Company
coadd(80) TYPE c, "Company Address
mdesc(60) TYPE c, "Material Description
munit(16) TYPE c, "Unit of Measure
mtype(35) TYPE c, "Material Type
mqnty(17) TYPE c, "Material Quantity
ntamt(20) TYPE c, "Net Amount
txrat(15) TYPE c, "Tax Rate
txamt(20) TYPE c, "Tax Amount
gtxit(4) TYPE c, "Goods Tax Items (Leave blank)
ndsam(20) TYPE c, "Net discount amount (Leave blank)
txamd(20) TYPE c, "Tax amount discount (Leave blank)
dsrat(7) TYPE c, "Discount Rate (Leave blank)
price(20) TYPE c, "Unit Price
prway(1) TYPE c, "Pricing way constant aa 1
gtdat(8) TYPE c, "GTS Date for Invoice (Leave blank)
gtcod(20) TYPE c, "GTS Invoice Code (Leave blank)
gtinv(20) TYPE c, "GTS Invoice Reference Number (Leave blank)
gtbas(20) TYPE c, "GTS Calculated base amount (Leave blank)
gttax(20) TYPE c, "GTS Calculated tax amount (Leave blank)
gtnet(20) TYPE c, "GTS Calculated net amount (Leave blank)
invty(1) TYPE c, "Invoice type
END OF gs_finaltb.
DATA: i_finaltb TYPE STANDARD TABLE OF gs_finaltb,
wa_finaltb TYPE gs_finaltb.
DATA: BEGIN OF adrc1.
INCLUDE STRUCTURE adrc.
DATA: END OF adrc1.
DATA: BEGIN OF adrc2.
INCLUDE STRUCTURE adrc.
DATA: END OF adrc2.
DATA: BEGIN OF adrc3.
INCLUDE STRUCTURE adrc.
DATA: END OF adrc3.
DATA: BEGIN OF adrc4.
INCLUDE STRUCTURE adrc.
DATA: END OF adrc4.
DATA: BEGIN OF tfpltdr OCCURS 5.
INCLUDE STRUCTURE fpltdr.
DATA: END OF tfpltdr.
**********************************************************************
*Definition of internal variables
**********************************************************************
DATA: retcode LIKE sy-subrc. "Returncode
DATA: nast_anzal LIKE nast-anzal. "Number of outputs (Orig. + Cop.)
DATA: xscreen(1) TYPE c. "Output on printer or screen
DATA: pr_kappl(01) TYPE c VALUE 'V'. "Application for pricing
DATA: print_mwskz. "Mehrwertsteuer-Kz drucken
DATA: cust_banka LIKE adrc-addrnumber, "Customer bank address no.
hous_banka LIKE adrc-addrnumber, "House Bank Address number
amount LIKE komv-kwert, "Amount
w_cunit(10), "Chinese unit
w_case(1) TYPE c, "Case value for cancel inv
w_refdoc(16) TYPE c, "Reference Document number
w_xblnr LIKE vbrk-vbeln, "Reference Document number
itqty(13) TYPE c. "Order Quantity
*data for access to central address maintenance
INCLUDE sdzavdat.
**********************************************************************
FORMS START*********************************************************
**********************************************************************
**********************************************************************
*
Standard Routine ENTRY
*
**********************************************************************
FORM entry USING return_code us_screen.
CLEAR retcode.
xscreen = us_screen.
PERFORM processing USING us_screen.
CASE retcode.
WHEN 0.
return_code = 0.
WHEN 3.
return_code = 3.
WHEN OTHERS.
return_code = 1.
ENDCASE.
ENDFORM. "ENTRY
**********************************************************************
Customer Entry-Routines*********************************************
**********************************************************************
**********************************************************************
*
*Customized Routine PROCESSING
*
**********************************************************************
FORM processing USING proc_screen.
PERFORM get_data.
PERFORM get_data_predoc_sales.
CHECK retcode = 0.
PERFORM f_get_add_data.
PERFORM f_map_header.
PERFORM item_print.
PERFORM f_post_file.
ENDFORM. "PROCESSING
**********************************************************************
SAP STANDARD-SUBROUTINES
**********************************************************************
*----
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.
CLEAR nast_anzal. "Clear aux. variable for number of outputs
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.
Data Provision for Billing Document Print
CALL FUNCTION 'RV_BILLING_PRINT_VIEW'
EXPORTING
comwa = vbco3
IMPORTING
kopf = vbdkr
TABLES
pos = tvbdpr
EXCEPTIONS
terms_of_payment_not_in_t052 = 1
error_message = 5
OTHERS = 4.
IF NOT sy-subrc IS INITIAL.
IF sy-subrc = 1.
syst-msgty = 'I'.
PERFORM protocol_update.
ENDIF.
ENDIF.
Get Sender Address
PERFORM sender.
Price Print Header
PERFORM get_header_prices.
Get Reference document
PERFORM get_ref_doc_data.
ENDFORM. "GET_DATA
*----
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-fkart = vbdkr-fkart.
komk-kappl = pr_kappl.
IF vbdkr-kappl NE space.
komk-kappl = vbdkr-kappl.
ENDIF.
komk-waerk = vbdkr-waerk.
komk-knumv = vbdkr-knumv.
komk-vbtyp = vbdkr-vbtyp.
komk-bukrs = vbdkr-bukrs.
komk-vkorg = vbdkr-vkorg.
komk-vtweg = vbdkr-vtweg.
komk-spart = vbdkr-spart.
komk-hwaer = vbdkr-waers.
komk-prsdt = vbdkr-erdat.
komk-kurst = vbdkr-kurst.
komk-kurrf = vbdkr-kurrf.
komk-kurrf_dat = vbdkr-kurrf_dat.
ENDIF.
komp-kposn = vbdpr-posnr.
komp-kursk = vbdpr-kursk.
komp-kursk_dat = vbdpr-kursk_dat.
IF vbdkr-vbtyp CA 'HKNOT6'.
IF vbdpr-shkzg CA ' A'.
komp-shkzg = 'X'.
ENDIF.
ELSE.
IF vbdpr-shkzg CA 'BX'.
komp-shkzg = 'X'.
ENDIF.
ENDIF.
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_e = komp
TABLES
tkomv = tkomv
tkomvd = tkomvd.
ENDFORM. "GET_ITEM_PRICES
*----
FORM GET_HEADER_PRICES
*----
In this routine the price data for the header is fetched from
the database.
*----
FORM get_header_prices.
IF komk-knumv NE vbdkr-knumv.
CLEAR komk.
komk-mandt = sy-mandt.
komk-kalsm = vbdkr-kalsm.
komk-fkart = vbdkr-fkart.
komk-kappl = pr_kappl.
IF vbdkr-kappl NE space.
komk-kappl = vbdkr-kappl.
ENDIF.
komk-waerk = vbdkr-waerk.
komk-knumv = vbdkr-knumv.
komk-vbtyp = vbdkr-vbtyp.
komk-knuma = vbdkr-knuma.
komk-bukrs = vbdkr-bukrs.
komk-vkorg = vbdkr-vkorg.
komk-vtweg = vbdkr-vtweg.
komk-spart = vbdkr-spart.
komk-hwaer = vbdkr-waers.
komk-prsdt = vbdkr-erdat.
komk-kurst = vbdkr-kurst.
komk-kurrf = vbdkr-kurrf.
komk-kurrf_dat = vbdkr-kurrf_dat.
ENDIF.
CALL FUNCTION 'RV_PRICE_PRINT_HEAD'
EXPORTING
comm_head_i = komk
language = nast-spras
IMPORTING
comm_head_e = komk
comm_mwskz = print_mwskz
TABLES
tkomv = tkomv
tkomvd = hkomvd.
ENDFORM. "GET_HEADER_PRICES
*&----
*& Form get_ref_doc_data
*&----
ref doc data for cancellation invoice
*----
FORM get_ref_doc_data .
IF vbdkr-fkart = 'YCSC'.
CLEAR: vbrk, w_refdoc, w_xblnr.
cancelled invoice number
w_refdoc = vbdkr-xblnr.
CONDENSE w_refdoc.
w_xblnr = w_refdoc.
IF NOT w_xblnr IS INITIAL.
SELECT SINGLE *
FROM vbrk
WHERE vbeln = w_xblnr.
ENDIF.
create case
IF vbrk-fkdat IS INITIAL.
w_case = '0'.
ELSE.
IF vbrk-fkdat4(2) = vbdkr-fkdat4(2).
w_case = '1'.
ELSE.
w_case = '2'.
data selection for GTS ztable
SELECT SINGLE *
FROM zcngts
WHERE vbeln = vbrk-vbeln.
ENDIF.
ENDIF.
ELSE.
w_case = '0'.
ENDIF.
ENDFORM. " get_ref_doc_data
*----
FORM ITEM_PRINT
*----
Printout of the items
*----
FORM item_print.
LOOP AT tvbdpr.
Clear final work area
CLEAR wa_finaltb.
vbdpr = tvbdpr.
Get Item Prices
PERFORM get_item_prices.
Map Item
PERFORM f_map_item.
Append line item information
APPEND wa_finaltb TO i_finaltb.
ENDLOOP.
ENDFORM. "ITEM_PRINT
*----
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 SENDER
*----
This routine determines the address of the sender (Table VKO)
*----
FORM sender.
SELECT SINGLE * FROM tvko WHERE vkorg = vbdkr-vkorg.
IF sy-subrc NE 0.
syst-msgid = 'VN'.
syst-msgno = '203'.
syst-msgty = 'E'.
syst-msgv1 = 'TVKO'.
syst-msgv2 = syst-subrc.
PERFORM protocol_update.
EXIT.
ENDIF.
CLEAR gv_fb_addr_get_selection.
gv_fb_addr_get_selection-addrnumber = tvko-adrnr.
CALL FUNCTION 'ADDR_GET'
EXPORTING
address_selection = gv_fb_addr_get_selection
address_group = 'CA01'
IMPORTING
sadr = sadr
EXCEPTIONS
OTHERS = 01. "SADR40A
IF sy-subrc NE 0.
CLEAR sadr.
ENDIF.
vbdkr-sland = sadr-land1.
IF sy-subrc NE 0.
syst-msgid = 'VN'.
syst-msgno = '203'.
syst-msgty = 'E'.
syst-msgv1 = 'SADR'.
syst-msgv2 = syst-subrc.
PERFORM protocol_update.
ENDIF.
Internal accounting: Address of the accounting area read
IF vbdkr-vbtyp CA '56'.
CLEAR t001g.
SELECT SINGLE * FROM t001g WHERE bukrs = vbdkr-bukrs
AND programm EQ sy-repid
AND txtid EQ 'SD'.
ENDIF.
ENDFORM. "SENDER
*&----
*& Form GET_DATA_PREDOC_SALES
*&----
Get Preceding Sales Order Item
*----
FORM get_data_predoc_sales .
DATA: vbelv LIKE vbfa-vbelv.
DATA: vbco3p TYPE vbco3.
SELECT SINGLE vbelv FROM vbfa INTO vbelv
WHERE vbeln = vbdkr-vbeln
AND vbtyp_v = 'C'.
vbco3p-mandt = sy-mandt.
vbco3p-spras = 'EN'.
vbco3p-vbeln = vbelv.
CALL FUNCTION 'RV_DOCUMENT_PRINT_VIEW'
EXPORTING
comwa = vbco3p
IMPORTING
kopf = vbdka
TABLES
pos = tvbdpa
mess = da_mess
EXCEPTIONS
fehler_bei_datenbeschaffung = 1.
ENDFORM. " GET_DATA_PREDOC_SALES
*&----
*& Form f_get_add_data
*&----
Get Additional Data
*----
FORM f_get_add_data .
Customer address number and VAT registration number
SELECT SINGLE kunnr
adrnr
stceg
FROM kna1 INTO CORRESPONDING FIELDS OF kna1
WHERE kunnr = vbdkr-kunrg.
Customer address in chinese
SELECT SINGLE *
FROM adrc
INTO adrc1
WHERE addrnumber = kna1-adrnr
AND nation = 'C'.
Customer Bank using customer number
SELECT SINGLE *
FROM knbk
WHERE kunnr = vbdkr-kunag AND
banks = 'CN'.
Customer Bank GTS Name using address data
IF NOT knbk-bankl IS INITIAL.
address number
SELECT SINGLE adrnr
FROM bnka
INTO cust_banka
WHERE banks = 'CN' AND
bankl = knbk-bankl.
IF sy-subrc = 0.
customer bank address
CLEAR adrc3.
SELECT SINGLE *
FROM adrc
INTO adrc3
WHERE addrnumber = cust_banka
AND nation = 'C'.
ENDIF.
ENDIF.
Creater Name person number
SELECT SINGLE *
FROM usr21
WHERE bname = vbdkr-ernam.
creater Data
SELECT SINGLE *
FROM adrp
WHERE persnumber = usr21-persnumber.
House Bank Id from Customer
SELECT SINGLE hbkid
FROM knb1
INTO knb1-hbkid
WHERE kunnr = vbdkr-kunag
AND bukrs = vbdkr-bukrs.
House Bank name according to customer record
IF NOT knb1-hbkid IS INITIAL.
SELECT SINGLE *
FROM t012
WHERE bukrs = vbdkr-bukrs
AND hbkid = knb1-hbkid.
house bank address number
SELECT SINGLE adrnr
FROM bnka
INTO hous_banka
WHERE banks = t012-banks
AND bankl = t012-bankl.
IF sy-subrc = 0.
house bank address
CLEAR adrc4.
SELECT SINGLE *
FROM adrc
INTO adrc4
WHERE addrnumber = hous_banka
AND nation = 'C'.
ENDIF.
House Bank Account number
SELECT SINGLE *
FROM t012k
WHERE bukrs = vbdkr-bukrs
AND hbkid = knb1-hbkid.
ENDIF.
Company code Address number
SELECT SINGLE bukrs
adrnr
FROM t001 INTO CORRESPONDING FIELDS OF t001
WHERE bukrs = vbdkr-bukrs.
Company Code Address
SELECT SINGLE *
FROM adrc
INTO adrc2
WHERE addrnumber = t001-adrnr
AND nation = 'C'.
ENDFORM. " f_get_add_data
*&----
*& Form f_map_header
*&----
Map Header Data to Final internal table
*----
FORM f_map_header .
Clear final work area
CLEAR wa_finaltb.
First Row
Document Number
IF w_case = '1'.
wa_finaltb-docno = vbrk-vbeln.
ELSE.
wa_finaltb-docno = vbdkr-vbeln.
ENDIF.
Line Item Quantity
CLEAR wa_finaltb-quant.
Customer number
wa_finaltb-kunrg = vbdkr-kunrg.
Customer Name
CONCATENATE adrc1-name1 adrc1-name2 adrc1-name3 adrc1-name4
INTO wa_finaltb-cunam SEPARATED BY space.
Customer Register Number
wa_finaltb-cureg = kna1-stceg.
Customer address
CONCATENATE adrc1-street adrc1-str_suppl1 adrc1-str_suppl2
adrc1-location adrc1-city2 adrc1-tel_number
INTO wa_finaltb-cuadd SEPARATED BY space.
Customer Bank and Account
CONCATENATE adrc3-name2 knbk-koinh INTO wa_finaltb-cubnk
SEPARATED BY space.
Remark
IF w_case = '2'.
CONCATENATE '########' zcngts-gtsic '##' zcngts-gtsin
INTO wa_finaltb-remrk SEPARATED BY space.
ELSE.
CLEAR wa_finaltb-remrk.
CONCATENATE vbdka-vbeln wa_finaltb-remrk INTO wa_finaltb-remrk.
SHIFT wa_finaltb-remrk RIGHT BY 4 PLACES.
CONCATENATE vbdka-bstkd wa_finaltb-remrk INTO wa_finaltb-remrk.
ENDIF.
Issued by
CONDENSE: adrp-name_first, adrp-name_last.
CONCATENATE adrp-name_first adrp-name_last INTO
wa_finaltb-isuby SEPARATED BY space.
Check by
CLEAR wa_finaltb-chkby.
PERFORM read_text USING 'Y001' vbdkr-tdname 'VBBK'.
IF NOT text[] IS INITIAL.
READ TABLE text INDEX 1.
IF sy-subrc = 0 AND NOT text-tdline IS INITIAL.
CONDENSE text-tdline.
wa_finaltb-chkby = text-tdline.
ENDIF.
ENDIF.
Receive by
CLEAR wa_finaltb-rcvby.
List Trade Name
wa_finaltb-ltnam = '######'.
Bill date
wa_finaltb-bdate = vbdkr-fkdat.
Company Code
wa_finaltb-bukrs = vbdkr-bukrs.
House Bank name
CONCATENATE adrc4-name2 t012k-bankn INTO wa_finaltb-hobnk
SEPARATED BY space.
Company Address
CONCATENATE adrc2-name1 adrc2-name2 adrc2-name3 adrc2-name4
adrc2-street adrc2-str_suppl1 adrc2-str_suppl2
adrc2-location adrc2-city2 adrc2-post_code1 adrc2-city1
adrc2-tel_number INTO wa_finaltb-coadd SEPARATED BY
space.
Invoice type
CASE w_case.
WHEN '0' OR '2'.
wa_finaltb-invty = '0'.
WHEN '1'.
wa_finaltb-invty = '1'.
ENDCASE.
Append first row
APPEND wa_finaltb TO i_finaltb.
ENDFORM. " f_map_header
*&----
*& Form f_map_item
*&----
Map Item Data to Final internal table
*----
FORM f_map_item.
CLEAR amount.
Name of Goods and Taxable service
wa_finaltb-mdesc = vbdpr-arktx.
Unit
w_cunit = vbdpr-vrkme.
CONDENSE w_cunit NO-GAPS.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
input = w_cunit
language = '1'
IMPORTING
output = w_cunit
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CONDENSE w_cunit NO-GAPS.
wa_finaltb-munit = w_cunit.
Spec and Type
wa_finaltb-mtype = vbdpr-idnkd.
Qty
Get item billing plan from SO and change quantity
PERFORM get_bill_percnt.
vbdpr-fkimg = vbdpr-fkimg * tfpltdr-fproz.
vbdpr-fkimg = vbdpr-fkimg / 10000.
itqty = vbdpr-fkimg.
CONDENSE itqty NO-GAPS.
wa_finaltb-mqnty = itqty.
Net Amount
READ TABLE tkomv WITH KEY kschl = 'YIPR' kposn = vbdpr-posnr.
IF sy-subrc = 0.
wa_finaltb-ntamt = tkomv-kwert.
amount = tkomv-kbetr.
ENDIF.
Tax
READ TABLE tkomv WITH KEY kschl = 'MWST' kposn = vbdpr-posnr.
IF sy-subrc = 0.
Tax Rate
wa_finaltb-txrat = tkomv-kbetr / '10.00'.
CONDENSE wa_finaltb-txrat NO-GAPS.
CONCATENATE wa_finaltb-txrat '%' INTO wa_finaltb-txrat.
Tax amount
wa_finaltb-txamt = tkomv-kwert.
ENDIF.
Goods Tax Items
CLEAR wa_finaltb-gtxit.
Net discount amount
CLEAR wa_finaltb-ndsam.
Tax Amount of Discount
CLEAR wa_finaltb-txamd.
Discount Rate
CLEAR wa_finaltb-dsrat.
Unit Price
wa_finaltb-price = amount.
Pricing way
wa_finaltb-prway = '1'.
Format Amounts
CONDENSE wa_finaltb-ntamt NO-GAPS.
PERFORM f_format_amount USING wa_finaltb-ntamt.
CONDENSE wa_finaltb-txamt NO-GAPS.
PERFORM f_format_amount USING wa_finaltb-txamt.
CONDENSE wa_finaltb-price NO-GAPS.
PERFORM f_format_amount USING wa_finaltb-price.
Place Signs
IF w_case = '2'.
CONCATENATE '-' wa_finaltb-mqnty INTO wa_finaltb-mqnty.
CONDENSE wa_finaltb-mqnty NO-GAPS.
CONCATENATE '-' wa_finaltb-ntamt INTO wa_finaltb-ntamt.
CONDENSE wa_finaltb-ntamt NO-GAPS.
CONCATENATE '-' wa_finaltb-txamt INTO wa_finaltb-txamt.
CONDENSE wa_finaltb-txamt NO-GAPS.
ENDIF.
ENDFORM. " f_map_item
*&----
*& Form f_post_file
*&----
Post File to Application server
*----
FORM f_post_file .
DATA: outfile1(80) TYPE c VALUE
'.\pwcn_gts_invoice',
outfile2(80) TYPE c.
CONCATENATE '.\gts_invoice_'
vbdkr-vbeln INTO outfile2.
OPEN DATASET outfile1 FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc <> 0.
MESSAGE 'File cannot be created' TYPE 'I'.
ELSE.
LOOP AT i_finaltb INTO wa_finaltb.
TRANSFER wa_finaltb TO outfile1.
IF sy-subrc <> 0.
MESSAGE 'A record cannot be transferred to File' TYPE 'I'.
ENDIF.
ENDLOOP.
CLOSE DATASET outfile1.
IF sy-subrc <> 0.
MESSAGE 'File cannot be closed' TYPE 'I'.
ENDIF.
ENDIF.
OPEN DATASET outfile2 FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc <> 0.
MESSAGE 'File cannot be created for history' TYPE 'I'.
ELSE.
LOOP AT i_finaltb INTO wa_finaltb.
TRANSFER wa_finaltb TO outfile2.
IF sy-subrc <> 0.
MESSAGE 'A record cannot be transferred to File' TYPE 'I'.
ENDIF.
ENDLOOP.
CLOSE DATASET outfile2.
IF sy-subrc <> 0.
MESSAGE 'File cannot be closed' TYPE 'I'.
ENDIF.
ENDIF.
ENDFORM. " f_post_file
*&----
*& Form f_format_amount
*&----
convert amount
*----
FORM f_format_amount USING p_amt.
DATA: length TYPE i.
DATA: offset TYPE i.
length = STRLEN( p_amt ).
offset = 3.
length = length - 3.
DO.
length = length - 3.
offset = offset + 3.
IF length < 1.
EXIT.
ENDIF.
CONCATENATE p_amt(length) ',' p_amt+length(offset)
INTO p_amt.
offset = offset + 1.
ENDDO.
ENDFORM. " f_format_amount
*&----
*& Form get_bill_percnt
*&----
Get Billed Percent
*----
FORM get_bill_percnt .
CLEAR tfpltdr.
REFRESH tfpltdr.
READ TABLE tvbdpa WITH KEY posnr = vbdpr-posnr.
IF sy-subrc = 0 AND NOT tvbdpa-fplnr IS INITIAL.
vbdpa = tvbdpa.
CALL FUNCTION 'BILLING_SCHED_PRINTVIEW_READ'
EXPORTING
i_fplnr = vbdpa-fplnr
i_language = 'E'
i_vbeln = vbdka-vbeln
TABLES
zfpltdr = tfpltdr.
IF sy-subrc = 0.
READ TABLE tfpltdr WITH KEY fkdat = vbdkr-fkdat.
IF sy-subrc <> 0.
tfpltdr-fproz = 100.
ENDIF.
ELSE.
tfpltdr-fproz = 100.
ENDIF.
ELSE.
tfpltdr-fproz = 100.
ENDIF.
ENDFORM. " get_bill_percnt
*&----
*& Form read_text
*&----
Read text
*----
FORM read_text USING &01 &02 &03 .
CONSTANTS lang TYPE thead-tdspras VALUE 'E'.
REFRESH text.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = &01
language = lang
name = &02
object = &03
TABLES
lines = text
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc <> 0.
FREE text.
ENDIF.
ENDFORM. " read_text
Regards
Vijai
Edited by: Vijai Dixit on Jul 1, 2008 7:53 AM
‎2008 Jan 31 11:25 AM
Hi
Please check the program below:
REPORT zvadin01 LINE-COUNT 100 MESSAGE-ID vn.
**********************************************************************
Definition of tables
**********************************************************************
TABLES: komk , "Communication Header for Pricing
komp , "Pricing Communication Item
komvd , "Price Determination Communication-
"Cond.Record for Printing
vbco3 , "Sales Doc.Access Methods: Key Fields:
"Document Printing
vbdkr , "Document Header View for Billing
vbrk , "Billing Document: Header Data
vbdpr , "Document Item View for Billing
sadr , "Address Management: Company Data
tvko , "Organizational Unit: Sales Organizations
t001 , "Company Codes
t001g , "Company Code-Dependent Standard Texts
t012 , "House Banks
t012k , "House Bank Accounts
knbk , "Customer Master (Bank Details)
bnka , "Bank master record
kna1 , "General Data in Customer Master
knb1 , "Customer Master (Company Code)
usr21 , "Assign user name address key
adrp , "Persons (Business Address Services)
komv , "Pricing Communications-Condition Record
vbdka , "Document Header View for Inquiry,Quotation,Order
vbdpa , "Document Item View for Inquiries,Quotation,Order
zcngts . "GTS data to SAP for Paul Wurth China
**********************************************************************
*Additional definitions of tables for general issues
**********************************************************************
INCLUDE rvadtabl.
**********************************************************************
*Definition of internal tables
**********************************************************************
DATA: BEGIN OF tvbdpr OCCURS 100. "Internal table for items
INCLUDE STRUCTURE vbdpr.
DATA: END OF tvbdpr.
DATA: BEGIN OF tkomv OCCURS 50. "Pricing Communications-
INCLUDE STRUCTURE komv. "Condition Record
DATA: END OF tkomv.
DATA: BEGIN OF tkomvd OCCURS 50. "Price Determination
INCLUDE STRUCTURE komvd. "Communication-Cond.Record for
DATA: END OF tkomvd. "Printing
DATA: BEGIN OF hkomvd OCCURS 50.
INCLUDE STRUCTURE komvd.
DATA: END OF hkomvd.
DATA: BEGIN OF tvbdpa OCCURS 0. "Internal table for SO items
INCLUDE STRUCTURE vbdpa.
DATA: END OF tvbdpa.
DATA: BEGIN OF text OCCURS 10.
INCLUDE STRUCTURE tline.
DATA: END OF text.
DATA: da_mess LIKE vbfs OCCURS 0 WITH HEADER LINE.
TYPES: BEGIN OF gs_finaltb,
docno(20) TYPE c, "Invoice Number
quant(4) TYPE c, "Line Item Quantity
kunrg(10) TYPE c, "Customer Number
cunam(100) TYPE c, "Customer name
cureg(20) TYPE c, "Customer Registration Number
cuadd(80) TYPE c, "Customer Address
cubnk(180) TYPE c, "Customer Bank, Account Number
remrk(160) TYPE c, "PO number and SO number
isuby(40) TYPE c, "Creater of invoice
chkby(40) TYPE c, "Invoice checker (Leave blank)
rcvby(40) TYPE c, "Invoice Receiver (Leave blank)
ltnam(80) TYPE c, "List trade name constant as ######
bdate(8) TYPE c, "Bill Date (Leave Blank)
bukrs(4) TYPE c, "Company Code
hobnk(80) TYPE c, "House bank Company
coadd(80) TYPE c, "Company Address
mdesc(60) TYPE c, "Material Description
munit(16) TYPE c, "Unit of Measure
mtype(35) TYPE c, "Material Type
mqnty(17) TYPE c, "Material Quantity
ntamt(20) TYPE c, "Net Amount
txrat(15) TYPE c, "Tax Rate
txamt(20) TYPE c, "Tax Amount
gtxit(4) TYPE c, "Goods Tax Items (Leave blank)
ndsam(20) TYPE c, "Net discount amount (Leave blank)
txamd(20) TYPE c, "Tax amount discount (Leave blank)
dsrat(7) TYPE c, "Discount Rate (Leave blank)
price(20) TYPE c, "Unit Price
prway(1) TYPE c, "Pricing way constant aa 1
gtdat(8) TYPE c, "GTS Date for Invoice (Leave blank)
gtcod(20) TYPE c, "GTS Invoice Code (Leave blank)
gtinv(20) TYPE c, "GTS Invoice Reference Number (Leave blank)
gtbas(20) TYPE c, "GTS Calculated base amount (Leave blank)
gttax(20) TYPE c, "GTS Calculated tax amount (Leave blank)
gtnet(20) TYPE c, "GTS Calculated net amount (Leave blank)
invty(1) TYPE c, "Invoice type
END OF gs_finaltb.
DATA: i_finaltb TYPE STANDARD TABLE OF gs_finaltb,
wa_finaltb TYPE gs_finaltb.
DATA: BEGIN OF adrc1.
INCLUDE STRUCTURE adrc.
DATA: END OF adrc1.
DATA: BEGIN OF adrc2.
INCLUDE STRUCTURE adrc.
DATA: END OF adrc2.
DATA: BEGIN OF adrc3.
INCLUDE STRUCTURE adrc.
DATA: END OF adrc3.
DATA: BEGIN OF adrc4.
INCLUDE STRUCTURE adrc.
DATA: END OF adrc4.
DATA: BEGIN OF tfpltdr OCCURS 5.
INCLUDE STRUCTURE fpltdr.
DATA: END OF tfpltdr.
**********************************************************************
*Definition of internal variables
**********************************************************************
DATA: retcode LIKE sy-subrc. "Returncode
DATA: nast_anzal LIKE nast-anzal. "Number of outputs (Orig. + Cop.)
DATA: xscreen(1) TYPE c. "Output on printer or screen
DATA: pr_kappl(01) TYPE c VALUE 'V'. "Application for pricing
DATA: print_mwskz. "Mehrwertsteuer-Kz drucken
DATA: cust_banka LIKE adrc-addrnumber, "Customer bank address no.
hous_banka LIKE adrc-addrnumber, "House Bank Address number
amount LIKE komv-kwert, "Amount
w_cunit(10), "Chinese unit
w_case(1) TYPE c, "Case value for cancel inv
w_refdoc(16) TYPE c, "Reference Document number
w_xblnr LIKE vbrk-vbeln, "Reference Document number
itqty(13) TYPE c. "Order Quantity
*data for access to central address maintenance
INCLUDE sdzavdat.
**********************************************************************
FORMS START*********************************************************
**********************************************************************
**********************************************************************
*
Standard Routine ENTRY
*
**********************************************************************
FORM entry USING return_code us_screen.
CLEAR retcode.
xscreen = us_screen.
PERFORM processing USING us_screen.
CASE retcode.
WHEN 0.
return_code = 0.
WHEN 3.
return_code = 3.
WHEN OTHERS.
return_code = 1.
ENDCASE.
ENDFORM. "ENTRY
**********************************************************************
Customer Entry-Routines*********************************************
**********************************************************************
**********************************************************************
*
*Customized Routine PROCESSING
*
**********************************************************************
FORM processing USING proc_screen.
PERFORM get_data.
PERFORM get_data_predoc_sales.
CHECK retcode = 0.
PERFORM f_get_add_data.
PERFORM f_map_header.
PERFORM item_print.
PERFORM f_post_file.
ENDFORM. "PROCESSING
**********************************************************************
SAP STANDARD-SUBROUTINES
**********************************************************************
*----
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.
CLEAR nast_anzal. "Clear aux. variable for number of outputs
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.
Data Provision for Billing Document Print
CALL FUNCTION 'RV_BILLING_PRINT_VIEW'
EXPORTING
comwa = vbco3
IMPORTING
kopf = vbdkr
TABLES
pos = tvbdpr
EXCEPTIONS
terms_of_payment_not_in_t052 = 1
error_message = 5
OTHERS = 4.
IF NOT sy-subrc IS INITIAL.
IF sy-subrc = 1.
syst-msgty = 'I'.
PERFORM protocol_update.
ENDIF.
ENDIF.
Get Sender Address
PERFORM sender.
Price Print Header
PERFORM get_header_prices.
Get Reference document
PERFORM get_ref_doc_data.
ENDFORM. "GET_DATA
*----
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-fkart = vbdkr-fkart.
komk-kappl = pr_kappl.
IF vbdkr-kappl NE space.
komk-kappl = vbdkr-kappl.
ENDIF.
komk-waerk = vbdkr-waerk.
komk-knumv = vbdkr-knumv.
komk-vbtyp = vbdkr-vbtyp.
komk-bukrs = vbdkr-bukrs.
komk-vkorg = vbdkr-vkorg.
komk-vtweg = vbdkr-vtweg.
komk-spart = vbdkr-spart.
komk-hwaer = vbdkr-waers.
komk-prsdt = vbdkr-erdat.
komk-kurst = vbdkr-kurst.
komk-kurrf = vbdkr-kurrf.
komk-kurrf_dat = vbdkr-kurrf_dat.
ENDIF.
komp-kposn = vbdpr-posnr.
komp-kursk = vbdpr-kursk.
komp-kursk_dat = vbdpr-kursk_dat.
IF vbdkr-vbtyp CA 'HKNOT6'.
IF vbdpr-shkzg CA ' A'.
komp-shkzg = 'X'.
ENDIF.
ELSE.
IF vbdpr-shkzg CA 'BX'.
komp-shkzg = 'X'.
ENDIF.
ENDIF.
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_e = komp
TABLES
tkomv = tkomv
tkomvd = tkomvd.
ENDFORM. "GET_ITEM_PRICES
*----
FORM GET_HEADER_PRICES
*----
In this routine the price data for the header is fetched from
the database.
*----
FORM get_header_prices.
IF komk-knumv NE vbdkr-knumv.
CLEAR komk.
komk-mandt = sy-mandt.
komk-kalsm = vbdkr-kalsm.
komk-fkart = vbdkr-fkart.
komk-kappl = pr_kappl.
IF vbdkr-kappl NE space.
komk-kappl = vbdkr-kappl.
ENDIF.
komk-waerk = vbdkr-waerk.
komk-knumv = vbdkr-knumv.
komk-vbtyp = vbdkr-vbtyp.
komk-knuma = vbdkr-knuma.
komk-bukrs = vbdkr-bukrs.
komk-vkorg = vbdkr-vkorg.
komk-vtweg = vbdkr-vtweg.
komk-spart = vbdkr-spart.
komk-hwaer = vbdkr-waers.
komk-prsdt = vbdkr-erdat.
komk-kurst = vbdkr-kurst.
komk-kurrf = vbdkr-kurrf.
komk-kurrf_dat = vbdkr-kurrf_dat.
ENDIF.
CALL FUNCTION 'RV_PRICE_PRINT_HEAD'
EXPORTING
comm_head_i = komk
language = nast-spras
IMPORTING
comm_head_e = komk
comm_mwskz = print_mwskz
TABLES
tkomv = tkomv
tkomvd = hkomvd.
ENDFORM. "GET_HEADER_PRICES
*&----
*& Form get_ref_doc_data
*&----
ref doc data for cancellation invoice
*----
FORM get_ref_doc_data .
IF vbdkr-fkart = 'YCSC'.
CLEAR: vbrk, w_refdoc, w_xblnr.
cancelled invoice number
w_refdoc = vbdkr-xblnr.
CONDENSE w_refdoc.
w_xblnr = w_refdoc.
IF NOT w_xblnr IS INITIAL.
SELECT SINGLE *
FROM vbrk
WHERE vbeln = w_xblnr.
ENDIF.
create case
IF vbrk-fkdat IS INITIAL.
w_case = '0'.
ELSE.
IF vbrk-fkdat4(2) = vbdkr-fkdat4(2).
w_case = '1'.
ELSE.
w_case = '2'.
data selection for GTS ztable
SELECT SINGLE *
FROM zcngts
WHERE vbeln = vbrk-vbeln.
ENDIF.
ENDIF.
ELSE.
w_case = '0'.
ENDIF.
ENDFORM. " get_ref_doc_data
*----
FORM ITEM_PRINT
*----
Printout of the items
*----
FORM item_print.
LOOP AT tvbdpr.
Clear final work area
CLEAR wa_finaltb.
vbdpr = tvbdpr.
Get Item Prices
PERFORM get_item_prices.
Map Item
PERFORM f_map_item.
Append line item information
APPEND wa_finaltb TO i_finaltb.
ENDLOOP.
ENDFORM. "ITEM_PRINT
*----
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 SENDER
*----
This routine determines the address of the sender (Table VKO)
*----
FORM sender.
SELECT SINGLE * FROM tvko WHERE vkorg = vbdkr-vkorg.
IF sy-subrc NE 0.
syst-msgid = 'VN'.
syst-msgno = '203'.
syst-msgty = 'E'.
syst-msgv1 = 'TVKO'.
syst-msgv2 = syst-subrc.
PERFORM protocol_update.
EXIT.
ENDIF.
CLEAR gv_fb_addr_get_selection.
gv_fb_addr_get_selection-addrnumber = tvko-adrnr.
CALL FUNCTION 'ADDR_GET'
EXPORTING
address_selection = gv_fb_addr_get_selection
address_group = 'CA01'
IMPORTING
sadr = sadr
EXCEPTIONS
OTHERS = 01. "SADR40A
IF sy-subrc NE 0.
CLEAR sadr.
ENDIF.
vbdkr-sland = sadr-land1.
IF sy-subrc NE 0.
syst-msgid = 'VN'.
syst-msgno = '203'.
syst-msgty = 'E'.
syst-msgv1 = 'SADR'.
syst-msgv2 = syst-subrc.
PERFORM protocol_update.
ENDIF.
Internal accounting: Address of the accounting area read
IF vbdkr-vbtyp CA '56'.
CLEAR t001g.
SELECT SINGLE * FROM t001g WHERE bukrs = vbdkr-bukrs
AND programm EQ sy-repid
AND txtid EQ 'SD'.
ENDIF.
ENDFORM. "SENDER
*&----
*& Form GET_DATA_PREDOC_SALES
*&----
Get Preceding Sales Order Item
*----
FORM get_data_predoc_sales .
DATA: vbelv LIKE vbfa-vbelv.
DATA: vbco3p TYPE vbco3.
SELECT SINGLE vbelv FROM vbfa INTO vbelv
WHERE vbeln = vbdkr-vbeln
AND vbtyp_v = 'C'.
vbco3p-mandt = sy-mandt.
vbco3p-spras = 'EN'.
vbco3p-vbeln = vbelv.
CALL FUNCTION 'RV_DOCUMENT_PRINT_VIEW'
EXPORTING
comwa = vbco3p
IMPORTING
kopf = vbdka
TABLES
pos = tvbdpa
mess = da_mess
EXCEPTIONS
fehler_bei_datenbeschaffung = 1.
ENDFORM. " GET_DATA_PREDOC_SALES
*&----
*& Form f_get_add_data
*&----
Get Additional Data
*----
FORM f_get_add_data .
Customer address number and VAT registration number
SELECT SINGLE kunnr
adrnr
stceg
FROM kna1 INTO CORRESPONDING FIELDS OF kna1
WHERE kunnr = vbdkr-kunrg.
Customer address in chinese
SELECT SINGLE *
FROM adrc
INTO adrc1
WHERE addrnumber = kna1-adrnr
AND nation = 'C'.
Customer Bank using customer number
SELECT SINGLE *
FROM knbk
WHERE kunnr = vbdkr-kunag AND
banks = 'CN'.
Customer Bank GTS Name using address data
IF NOT knbk-bankl IS INITIAL.
address number
SELECT SINGLE adrnr
FROM bnka
INTO cust_banka
WHERE banks = 'CN' AND
bankl = knbk-bankl.
IF sy-subrc = 0.
customer bank address
CLEAR adrc3.
SELECT SINGLE *
FROM adrc
INTO adrc3
WHERE addrnumber = cust_banka
AND nation = 'C'.
ENDIF.
ENDIF.
Creater Name person number
SELECT SINGLE *
FROM usr21
WHERE bname = vbdkr-ernam.
creater Data
SELECT SINGLE *
FROM adrp
WHERE persnumber = usr21-persnumber.
House Bank Id from Customer
SELECT SINGLE hbkid
FROM knb1
INTO knb1-hbkid
WHERE kunnr = vbdkr-kunag
AND bukrs = vbdkr-bukrs.
House Bank name according to customer record
IF NOT knb1-hbkid IS INITIAL.
SELECT SINGLE *
FROM t012
WHERE bukrs = vbdkr-bukrs
AND hbkid = knb1-hbkid.
house bank address number
SELECT SINGLE adrnr
FROM bnka
INTO hous_banka
WHERE banks = t012-banks
AND bankl = t012-bankl.
IF sy-subrc = 0.
house bank address
CLEAR adrc4.
SELECT SINGLE *
FROM adrc
INTO adrc4
WHERE addrnumber = hous_banka
AND nation = 'C'.
ENDIF.
House Bank Account number
SELECT SINGLE *
FROM t012k
WHERE bukrs = vbdkr-bukrs
AND hbkid = knb1-hbkid.
ENDIF.
Company code Address number
SELECT SINGLE bukrs
adrnr
FROM t001 INTO CORRESPONDING FIELDS OF t001
WHERE bukrs = vbdkr-bukrs.
Company Code Address
SELECT SINGLE *
FROM adrc
INTO adrc2
WHERE addrnumber = t001-adrnr
AND nation = 'C'.
ENDFORM. " f_get_add_data
*&----
*& Form f_map_header
*&----
Map Header Data to Final internal table
*----
FORM f_map_header .
Clear final work area
CLEAR wa_finaltb.
First Row
Document Number
IF w_case = '1'.
wa_finaltb-docno = vbrk-vbeln.
ELSE.
wa_finaltb-docno = vbdkr-vbeln.
ENDIF.
Line Item Quantity
CLEAR wa_finaltb-quant.
Customer number
wa_finaltb-kunrg = vbdkr-kunrg.
Customer Name
CONCATENATE adrc1-name1 adrc1-name2 adrc1-name3 adrc1-name4
INTO wa_finaltb-cunam SEPARATED BY space.
Customer Register Number
wa_finaltb-cureg = kna1-stceg.
Customer address
CONCATENATE adrc1-street adrc1-str_suppl1 adrc1-str_suppl2
adrc1-location adrc1-city2 adrc1-tel_number
INTO wa_finaltb-cuadd SEPARATED BY space.
Customer Bank and Account
CONCATENATE adrc3-name2 knbk-koinh INTO wa_finaltb-cubnk
SEPARATED BY space.
Remark
IF w_case = '2'.
CONCATENATE '########' zcngts-gtsic '##' zcngts-gtsin
INTO wa_finaltb-remrk SEPARATED BY space.
ELSE.
CLEAR wa_finaltb-remrk.
CONCATENATE vbdka-vbeln wa_finaltb-remrk INTO wa_finaltb-remrk.
SHIFT wa_finaltb-remrk RIGHT BY 4 PLACES.
CONCATENATE vbdka-bstkd wa_finaltb-remrk INTO wa_finaltb-remrk.
ENDIF.
Issued by
CONDENSE: adrp-name_first, adrp-name_last.
CONCATENATE adrp-name_first adrp-name_last INTO
wa_finaltb-isuby SEPARATED BY space.
Check by
CLEAR wa_finaltb-chkby.
PERFORM read_text USING 'Y001' vbdkr-tdname 'VBBK'.
IF NOT text[] IS INITIAL.
READ TABLE text INDEX 1.
IF sy-subrc = 0 AND NOT text-tdline IS INITIAL.
CONDENSE text-tdline.
wa_finaltb-chkby = text-tdline.
ENDIF.
ENDIF.
Receive by
CLEAR wa_finaltb-rcvby.
List Trade Name
wa_finaltb-ltnam = '######'.
Bill date
wa_finaltb-bdate = vbdkr-fkdat.
Company Code
wa_finaltb-bukrs = vbdkr-bukrs.
House Bank name
CONCATENATE adrc4-name2 t012k-bankn INTO wa_finaltb-hobnk
SEPARATED BY space.
Company Address
CONCATENATE adrc2-name1 adrc2-name2 adrc2-name3 adrc2-name4
adrc2-street adrc2-str_suppl1 adrc2-str_suppl2
adrc2-location adrc2-city2 adrc2-post_code1 adrc2-city1
adrc2-tel_number INTO wa_finaltb-coadd SEPARATED BY
space.
Invoice type
CASE w_case.
WHEN '0' OR '2'.
wa_finaltb-invty = '0'.
WHEN '1'.
wa_finaltb-invty = '1'.
ENDCASE.
Append first row
APPEND wa_finaltb TO i_finaltb.
ENDFORM. " f_map_header
*&----
*& Form f_map_item
*&----
Map Item Data to Final internal table
*----
FORM f_map_item.
CLEAR amount.
Name of Goods and Taxable service
wa_finaltb-mdesc = vbdpr-arktx.
Unit
w_cunit = vbdpr-vrkme.
CONDENSE w_cunit NO-GAPS.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
EXPORTING
input = w_cunit
language = '1'
IMPORTING
output = w_cunit
EXCEPTIONS
unit_not_found = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CONDENSE w_cunit NO-GAPS.
wa_finaltb-munit = w_cunit.
Spec and Type
wa_finaltb-mtype = vbdpr-idnkd.
Qty
Get item billing plan from SO and change quantity
PERFORM get_bill_percnt.
vbdpr-fkimg = vbdpr-fkimg * tfpltdr-fproz.
vbdpr-fkimg = vbdpr-fkimg / 10000.
itqty = vbdpr-fkimg.
CONDENSE itqty NO-GAPS.
wa_finaltb-mqnty = itqty.
Net Amount
READ TABLE tkomv WITH KEY kschl = 'YIPR' kposn = vbdpr-posnr.
IF sy-subrc = 0.
wa_finaltb-ntamt = tkomv-kwert.
amount = tkomv-kbetr.
ENDIF.
Tax
READ TABLE tkomv WITH KEY kschl = 'MWST' kposn = vbdpr-posnr.
IF sy-subrc = 0.
Tax Rate
wa_finaltb-txrat = tkomv-kbetr / '10.00'.
CONDENSE wa_finaltb-txrat NO-GAPS.
CONCATENATE wa_finaltb-txrat '%' INTO wa_finaltb-txrat.
Tax amount
wa_finaltb-txamt = tkomv-kwert.
ENDIF.
Goods Tax Items
CLEAR wa_finaltb-gtxit.
Net discount amount
CLEAR wa_finaltb-ndsam.
Tax Amount of Discount
CLEAR wa_finaltb-txamd.
Discount Rate
CLEAR wa_finaltb-dsrat.
Unit Price
wa_finaltb-price = amount.
Pricing way
wa_finaltb-prway = '1'.
Format Amounts
CONDENSE wa_finaltb-ntamt NO-GAPS.
PERFORM f_format_amount USING wa_finaltb-ntamt.
CONDENSE wa_finaltb-txamt NO-GAPS.
PERFORM f_format_amount USING wa_finaltb-txamt.
CONDENSE wa_finaltb-price NO-GAPS.
PERFORM f_format_amount USING wa_finaltb-price.
Place Signs
IF w_case = '2'.
CONCATENATE '-' wa_finaltb-mqnty INTO wa_finaltb-mqnty.
CONDENSE wa_finaltb-mqnty NO-GAPS.
CONCATENATE '-' wa_finaltb-ntamt INTO wa_finaltb-ntamt.
CONDENSE wa_finaltb-ntamt NO-GAPS.
CONCATENATE '-' wa_finaltb-txamt INTO wa_finaltb-txamt.
CONDENSE wa_finaltb-txamt NO-GAPS.
ENDIF.
ENDFORM. " f_map_item
*&----
*& Form f_post_file
*&----
Post File to Application server
*----
FORM f_post_file .
DATA: outfile1(80) TYPE c VALUE
'.\pwcn_gts_invoice',
outfile2(80) TYPE c.
CONCATENATE '.\gts_invoice_'
vbdkr-vbeln INTO outfile2.
OPEN DATASET outfile1 FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc <> 0.
MESSAGE 'File cannot be created' TYPE 'I'.
ELSE.
LOOP AT i_finaltb INTO wa_finaltb.
TRANSFER wa_finaltb TO outfile1.
IF sy-subrc <> 0.
MESSAGE 'A record cannot be transferred to File' TYPE 'I'.
ENDIF.
ENDLOOP.
CLOSE DATASET outfile1.
IF sy-subrc <> 0.
MESSAGE 'File cannot be closed' TYPE 'I'.
ENDIF.
ENDIF.
OPEN DATASET outfile2 FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc <> 0.
MESSAGE 'File cannot be created for history' TYPE 'I'.
ELSE.
LOOP AT i_finaltb INTO wa_finaltb.
TRANSFER wa_finaltb TO outfile2.
IF sy-subrc <> 0.
MESSAGE 'A record cannot be transferred to File' TYPE 'I'.
ENDIF.
ENDLOOP.
CLOSE DATASET outfile2.
IF sy-subrc <> 0.
MESSAGE 'File cannot be closed' TYPE 'I'.
ENDIF.
ENDIF.
ENDFORM. " f_post_file
*&----
*& Form f_format_amount
*&----
convert amount
*----
FORM f_format_amount USING p_amt.
DATA: length TYPE i.
DATA: offset TYPE i.
length = STRLEN( p_amt ).
offset = 3.
length = length - 3.
DO.
length = length - 3.
offset = offset + 3.
IF length < 1.
EXIT.
ENDIF.
CONCATENATE p_amt(length) ',' p_amt+length(offset)
INTO p_amt.
offset = offset + 1.
ENDDO.
ENDFORM. " f_format_amount
*&----
*& Form get_bill_percnt
*&----
Get Billed Percent
*----
FORM get_bill_percnt .
CLEAR tfpltdr.
REFRESH tfpltdr.
READ TABLE tvbdpa WITH KEY posnr = vbdpr-posnr.
IF sy-subrc = 0 AND NOT tvbdpa-fplnr IS INITIAL.
vbdpa = tvbdpa.
CALL FUNCTION 'BILLING_SCHED_PRINTVIEW_READ'
EXPORTING
i_fplnr = vbdpa-fplnr
i_language = 'E'
i_vbeln = vbdka-vbeln
TABLES
zfpltdr = tfpltdr.
IF sy-subrc = 0.
READ TABLE tfpltdr WITH KEY fkdat = vbdkr-fkdat.
IF sy-subrc <> 0.
tfpltdr-fproz = 100.
ENDIF.
ELSE.
tfpltdr-fproz = 100.
ENDIF.
ELSE.
tfpltdr-fproz = 100.
ENDIF.
ENDFORM. " get_bill_percnt
*&----
*& Form read_text
*&----
Read text
*----
FORM read_text USING &01 &02 &03 .
CONSTANTS lang TYPE thead-tdspras VALUE 'E'.
REFRESH text.
CALL FUNCTION 'READ_TEXT'
EXPORTING
id = &01
language = lang
name = &02
object = &03
TABLES
lines = text
EXCEPTIONS
id = 1
language = 2
name = 3
not_found = 4
object = 5
reference_check = 6
wrong_access_to_archive = 7
OTHERS = 8.
IF sy-subrc <> 0.
FREE text.
ENDIF.
ENDFORM. " read_text
Regards
Vijai
Edited by: Vijai Dixit on Jul 1, 2008 7:53 AM