Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Condition Type FM

Former Member
0 Likes
1,575

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.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
886

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

1 REPLY 1
Read only

Former Member
0 Likes
887

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