Application Development 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: 

tax code

Former Member
0 Kudos

in the purchase order we have two line items. 10 and 20, for that line items i need different tax code .

i have a program for this, this program i need to add the code.

example: for line item 10 tax code is v1.

for line item 20 tax code is v2.

when i excute the report i want one pop-up to display the two line items in the tax code.

thanks

3 REPLIES 3

Former Member

Please check the replies in your other thread. Request you to close this thread and avoid opening duplicate threads on the same topic.

Regards

Eswar

0 Kudos

thanks alot eswar.

i will send the code which i have in that i have to do the modifications,

please can you help in that where to add the code and changes are there.

there is one main program and submit program...

  • Type-pool enthält Feldkatalogstruktur

type-pools: slis,

KKBLO.

*-- Tabellen -

-


*

tables:

*-- Beginn Pr 00007 --*

eskn, "Kontierungsdaten zum Erfassungsbl.

*-- Ende Pr 00007 --*

essr_rel, "View über ekko, ekpo, essr, eskn

essr,*essr, "Erfassungsblatt

ekko, "Bestellkopf

ekpo, "Bestellposition

t024e, "Einkaufsorganisation

t024, "Einkäufergruppe

  • imkpf, "Kopffelder Abnahmebeleg

lfa1, "Lieferantenstamm

eket, "Einteilungen

t001, "Texte Buchungskreis

  • t16sc, "Listumfang Dienstleistung

  • t160o, "Bezeichnung Listumfang

  • t160b, "Defaultwerte Listumfang

  • t16sa, "Routinen zum Listumfang

  • tstct, "Transaktionstexte

  • t16fg, "Freigabegruppe

  • t16fh, "Texte Freigabegruppe

  • t16fc, "Freigabecodes

t001w, "Texte Werk

t023t, "Texte Warengruppe

t16ft, "Texte Freigabestrategie

  • rm06. ein-/ausgabefelder einkaufsbelege

t16fm. "Texte Freigabekennzeichen

include .

"$$

"$$

"$$

"$$

"$$

"$$

********************************************************************

*******************INTERNE TABELLEN********************************

********************************************************************

data: x_keyinfo type slis_keyinfo_alv.

  • Interne Tabelle für Feldkatalog

"$$

"$$

data: xfield type slis_t_fieldcat_alv.

"$$

********Headertabelle*******************************************

data : begin of xdata occurs 0.

include structure essr_rel.

data: name1 like lfa1-name1,

lpein like eket-lpein,

lpein_ext like rm06e-lpein,

eindt_ext like rm06e-eeind,

ekotx like t024e-ekotx,

eknam like t024-eknam,

wnam like t001w-name1,

wgbez like t023t-wgbez,

frgxt like t16ft-frgxt,

frget like t16fm-frget,

butxt like t001-butxt,

abn_icon(4),

erf_icon(4),

sperr_icon(4).

data: no_price_auth type c,

no_accept_auth type c.

data: end of xdata.

data: wa like xdata.

data: wb like xdata.

***********Itemtabelle*******************************************

data : begin of datax occurs 0.

include structure essr_rel.

data: name1 like lfa1-name1,

lpein like eket-lpein,

lpein_ext like rm06e-lpein,

eindt_ext like rm06e-eeind,

ekotx like t024e-ekotx,

eknam like t024-eknam,

wnam like t001w-name1,

wgbez like t023t-wgbez,

frgxt like t16ft-frgxt,

frget like t16fm-frget,

butxt like t001-butxt,

abn_icon(4),

erf_icon(4),

sperr_icon(4).

*-- Anfang PR 00007 --*

data : wc_sel type c. "Selektionskennzeichen

"$$

*-- Ende PR 00007 --*

*-- Anfang PR 3335 TKE EV4K901153

data: cross type c.

*-- Ende PR 3335 TKE EV4K901153

data: end of datax.

*******************Interne Tabellen für Textelemente*******************

data: begin of xlfa1 occurs 10. "Lieferanten

include structure lfa1.

data: end of xlfa1.

data: xt024e like t024e occurs 0 with header line. "Einkaufsorganisation

data: xt024 like t024 occurs 0 with header line. "Einkäufergruppe

data: xt001w like t001w occurs 0 with header line. "Werke

data: xt023t like t023t occurs 0 with header line. "Warengruppe

data: xt16ft like t16ft occurs 0 with header line. "Freigabestrategie

data: xt16fm like t16fm occurs 0 with header line. "Freigabekennzeichen

data: xt001 like t001 occurs 0 with header line. "Buchungskreis

*Interne Tabelle für das Lieferdatum

data: begin of xeket occurs 20. "Lieferdatum

include structure eket.

data: eindt_ext like rm06e-eeind,

lpein_ext like rm06e-lpein.

data: end of xeket.

*-- FelderBerechtigungspruefung----

-


*

data: auth_doc type c, "Flag Berechtigung Beleg

auth_price type c, "Flag Preisanzeigeberecht

auth_change type c, "Flag Aend.anzeigeberecht

auth_accept type c, "Flag Abnahmeberechtigung

akt_anz like tact-actvt value '03', "Akt.typ Anzeigen

akt_price like tact-actvt value '09', "Akt.typ Preisanzeige

akt_change like tact-actvt value '08', "Akt.typ Anz. Aenderung

akt_accept like tact-actvt value '75'. "Akt.typ Abnehmen

***********************************************************************

data: kzabn1 type c, lock1 type c,

kzabn2 type c, lock2 type c.

**Begin of PR 7670

data ok_code like sy-ucomm. "TKK7670

data g_mwskz type ekpo-MWSKZ. "TKK7670

data wc_dialog_flag type c. "TKK7670

**End PR 7670

*****************Variantenvariablen***********************************

*data: g_variant like disvariant,

  • g_variant_h like disvariant,

  • gx_variant like disvariant,

  • gx_variant_h like disvariant,

  • g_exit(1) type c.

                              • Selektionsbildschirm *********************************

selection-screen begin of block ekko "Bestelldaten

with frame title text-s02.

*-- Beginn Pr 00007 --

*-- Im Selektionsbild werden die Felder EKorg, Wartungsplan und Fracht-*

*-- kostnummer ausgeblendet. Die Felder für die Selektion einer Kon- --*

*-- tierung ( Sachkonto, Kostenstelle, Auftrag ) werden zusätzlich --*

*-- eingeblendet. --*

select-options: s_ebeln for essr_rel-ebeln

matchcode object mekk,

s_bedat for essr_rel-bedat,

s_bsart for ekko-bsart,

s_lifnr for essr_rel-lifnr

matchcode object kred,

  • s_ekorg FOR essr_rel-ekorg, "PR 00007

s_ekgrp for essr_rel-ekgrp.

select-options: s_werks for essr_rel-werks,

s_matkl for essr_rel-matkl.

selection-screen end of block ekko.

selection-screen begin of block essr "Erfassungsblatt

with frame title text-s04.

select-options: s_lblni for essr_rel-lblni

matchcode object essr,

s_lblne for essr_rel-lblne,

s_erdat for essr_rel-erdat,

s_spec for essr-spec_no

matchcode object spec,

s_banfn for essr-banfn

matchcode object mban,

s_lzvon for essr_rel-lzvon,

s_lzbis for essr_rel-lzbis.

  • s_warpl FOR essr-warpl, "PR 00007

  • s_fknum FOR essr-fknum. "PR 00007

*-- Beginn PR 00007 --* "Kontierungsdaten

selection-screen begin of block kont with frame title text-s05.

select-options: s_sakto for eskn-sakto, "Sachkonto

s_kostl for eskn-kostl, "Kostenstelle

s_aufnr for eskn-aufnr. "Innenauftrag

selection-screen end of block kont.

*-- Ende PR 00007 --*

selection-screen begin of block sperrkz

with frame.

selection-screen begin of line.

parameters: p_lock_n radiobutton group radi default 'X'.

selection-screen comment 4(25) text-s51.

selection-screen position 32.

parameters: p_kzab_n radiobutton group rad2 default 'X'.

selection-screen comment 35(25) text-s61.

selection-screen end of line.

selection-screen begin of line.

parameters: p_lock_j radiobutton group radi.

selection-screen comment 4(25) text-s52.

selection-screen position 32.

parameters: p_kzab_j radiobutton group rad2.

selection-screen comment 35(25) text-s62.

selection-screen end of line.

selection-screen begin of line.

parameters: p_lock_a radiobutton group radi.

selection-screen comment 4(25) text-s53.

selection-screen position 32.

parameters: p_kzab_a radiobutton group rad2.

selection-screen comment 35(25) text-s63.

selection-screen end of line.

selection-screen end of block sperrkz.

selection-screen end of block essr.

***********************Variante************************************

*selection-screen begin of block sel2

  • with frame title text-s03.

*parameter: p_vari like disvariant-variant.

*parameter: p_vari_h like disvariant-variant.

*selection-screen end of block sel2.

*at selection-screen on value-request for p_vari.

  • perform f4_for_variant using gx_variant p_vari.

*----


*

x_keyinfo-header01 = 'EBELN'.

x_keyinfo-item01 = 'EBELN'.

x_keyinfo-header02 = 'EBELP'.

x_keyinfo-item02 = 'EBELP'.

clear wa.

clear wb.

********************Hauptprogramm************************************

*..View lesen in Headertabelle

*..Moegliche Werte kzabn

if p_kzab_n eq 'X'.

kzabn1 = kzabn2 = space.

elseif p_kzab_j eq 'X'.

kzabn1 = kzabn2 = 'X'.

else.

kzabn1 = space.

kzabn2 = 'X'.

endif.

*..Moegliche Werte f_lock

if p_lock_n eq 'X'.

lock1 = lock2 = space.

elseif p_lock_j eq 'X'.

lock1 = lock2 = 'X'.

else.

lock1 = space.

lock2 = 'X'.

endif.

*-- Beginn PR 00007 --*

*-- oben ausgeblendeten Felder EkOrg, Frachtkostennummer und Wart- --*

*-- tungsplan werden nicht mehr selektiert. Nach der Selektion ü- --*

*-- ber die Leistungszeilen werden noch die Kontierungen in der --*

*-- ESLK geprüft. Es muß eine der angegebenen Kontierungen in ei- --*

*-- ner der Kontierungszeilen der ESLK mindestens einmal vorhanden --*

*-- sein. -

-


*

select * from essr_rel

where kzabn in (kzabn1, kzabn2)

and f_lock in (lock1, lock2)

and pstyp eq '9'

and bsart in s_bsart

and lifnr in s_lifnr

  • AND ekorg IN s_ekorg "PR 00007

and ekgrp in s_ekgrp

and bedat in s_bedat

and ebeln in s_ebeln

and werks in s_werks

and matkl in s_matkl

and lblni in s_lblni

and lblne in s_lblne

and lzvon in s_lzvon

and lzbis in s_lzbis

and erdat in s_erdat

and spec_no in s_spec

and banfn_sh in s_banfn

  • AND warpl IN s_warpl "PR 00007

  • AND fknum IN s_fknum "PR 00007

and loekz eq space

and loekz_p eq space

and loekz_h eq space.

*-- Nachlesen der Kontierungstabelle mit den angegebenen Kontierungen

*-- --> Wenn die angegebenen Kontierung im Erfassungblatt mindesten

*-- einmal vorhanden --> Daten übernehmen

if s_sakto[] is initial and "Wenn keine expli-

s_kostl[] is initial and "ziete Kontierungs-

s_aufnr[] is initial. "Selektion

move-corresponding essr_rel to xdata. "Daten immer überneh-

append xdata. "men

else.

select * from eskn up to 1 rows "Sonst Selektion über

where packno = essr_rel-lblni and "die Kontierungsdaten

sakto in s_sakto and

kostl in s_kostl and

aufnr in s_aufnr.

move-corresponding essr_rel to xdata. "Wenn Satz vorhanden

append xdata. "Daten aus View über-

endselect. "nehmen

endif.

endselect.

*-- Ende Pr 00007 --*

sort xdata by ebeln ebelp lblni.

perform authority_list.

*******************Übertrag von Headertabelle auf Itemtabelle***********

perform read_vendor. "Lieferantenname in Headertabelle

clear datax.

loop at xdata into wa .

perform icon. "Kennzeichen -> Icons

perform read_data.

append wa to datax.

if wa-ebeln = wb-ebeln and wa-ebelp = wb-ebelp.

delete xdata.

endif.

wb = wa.

clear wa.

endloop. " at xdata

perform read_delivery_date. "Lieferdatum in Headertabelle

perform fields. "Feldtabelle für das Listtool

***********************************************************************

************Listtool für hierachisch sequentielle Tabelle***************

************************************************************************

*-- Anfang PR 00007 --*

*-- Aufruf des modifizierten Funktionsbausteins zur Anzeige der Liste -*

*-- Anfang PR 3335 TKE EV4K901153

"$$

*call function 'ZRM_REUSE_ALV_HIERSEQ_LIST_DIS'

call function 'ZRM_REUSE_ALV_HISEQ_LIST_DI_47'

*-- Ende PR 3335 TKE EV4K901153

*CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISP'

exporting

  • I_INTERFACE_CHECK = ' '

i_callback_program = 'ZRM_RMSRVF11' "Eigenes Programm

"$$

"$$

"$$

"$$

  • I_CALLBACK_PROGRAM = 'RMSRVF11'

  • I_CALLBACK_PF_STATUS_SET = ' '

i_callback_user_command = 'USER_COMMAND'

  • IS_LAYOUT =

it_fieldcat = xfield

  • IT_EXCLUDING =

  • IT_SPECIAL_GROUPS =

  • IT_SORT =

  • IT_FILTER =

  • IS_SEL_HIDE =

  • I_SCREEN_START_COLUMN = 0

  • I_SCREEN_START_LINE = 0

  • I_SCREEN_END_COLUMN = 0

  • I_SCREEN_END_LINE = 0

  • I_DEFAULT = 'X'

i_save = 'A'

  • IS_VARIANT = ' '

  • IT_EVENTS =

  • IT_EVENT_EXIT =

i_tabname_header = 'XDATA'

i_tabname_item = 'DATAX'

  • I_STRUCTURE_NAME_HEADER =

  • I_STRUCTURE_NAME_ITEM =

is_keyinfo = x_keyinfo

  • IS_PRINT =

  • IS_REPREP_ID =

  • IMPORTING

  • E_EXIT_CAUSED_BY_CALLER =

  • ES_EXIT_CAUSED_BY_USER =

tables

t_outtab_header = xdata

t_outtab_item = datax

  • EXCEPTIONS

  • PROGRAM_ERROR = 1

  • OTHERS = 2

.

*-- Ende PR 00007 --

*-- Anfang PR 3335 TKE EV4K901153

*if sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

*endif.

*-- Ende PR 3335 TKE EV4K901153

***********************************************************************

**********************************************************************

*&----


*

*& Form FIELDS

*&----


*

  • Feldkatalog mit Feldbeschreibungen der Ausgabefelder aufbauen *

*----


*

  • <-> XFIELD Globaler Feldkatalog mit Feldbeschr. für Listausgabe

*----


*

form fields.

data: afield type slis_fieldcat_alv.

refresh xfield.

************************************************************************

********************Headerliste erste Zeile*****************************

  • Bestellung

clear afield.

afield-fieldname = 'EBELN'.

afield-key = 'X'.

afield-tabname = 'XDATA'.

afield-reptext_ddic = text-001.

afield-seltext_s = text-001.

afield-ref_tabname = 'EKKO'.

afield-hotspot = 'X'.

afield-col_pos = '1'.

afield-row_pos = '1'.

append afield to xfield.

*Einkaufsorganisation

clear afield.

afield-fieldname = 'EKORG'.

afield-tabname = 'XDATA'.

afield-ref_tabname = 'EKKO'.

afield-col_pos = '2'.

afield-row_pos = '1'.

afield-reptext_ddic = text-003.

append afield to xfield.

  • Einkäufergruppe

clear afield.

afield-fieldname = 'EKGRP'.

afield-tabname = 'XDATA'.

afield-ref_tabname = 'EKKO'.

afield-row_pos = '1'.

afield-col_pos = '3'.

afield-outputlen = 6.

afield-reptext_ddic = text-006.

append afield to xfield.

  • Lieferant

clear afield.

afield-fieldname = 'LIFNR'.

afield-tabname = 'XDATA'.

afield-ref_tabname = 'EKKO'.

afield-row_pos = '1'.

afield-col_pos = '4'.

afield-outputlen = 9.

  • afield-reptext_ddic = text-007.

append afield to xfield.

  • Lieferantenname

clear afield.

afield-fieldname = 'NAME1'.

afield-tabname = 'XDATA'.

afield-ref_tabname = 'LFA1'.

afield-row_pos = '1'.

afield-col_pos = '5'.

afield-outputlen = 40.

  • afield-reptext_ddic = text-008.

append afield to xfield.

  • Währung

clear afield.

afield-fieldname = 'WAERS_H'.

afield-just = 'C'.

afield-tabname = 'XDATA'.

afield-ref_tabname = 'EKKO'.

afield-row_pos = '1'.

afield-col_pos = '6'.

afield-outputlen = 20.

afield-reptext_ddic = text-005.

append afield to xfield.

  • Bestelldatum

clear afield.

afield-fieldname = 'BEDAT'.

afield-tabname = 'XDATA'.

afield-ref_tabname = 'EKKO'.

afield-row_pos = '1'.

afield-col_pos = '7'.

afield-reptext_ddic = text-009.

append afield to xfield.

************************************************************************

**********************Headerliste zweite Zeile**************************

  • Position

clear afield.

afield-fieldname = 'EBELP'.

afield-tabname = 'XDATA'.

afield-ref_tabname = 'EKPO'.

afield-outputlen = 10.

afield-key = 'X'.

afield-col_pos = '1'.

afield-row_pos = '2'.

afield-reptext_ddic = text-002.

append afield to xfield.

  • Werk

clear afield.

afield-fieldname = 'WERKS'.

afield-tabname = 'XDATA'.

afield-ref_tabname = 'EKPO'.

  • afield-reptext_ddic = text-004.

afield-outputlen = 5.

afield-col_pos = '2'.

afield-row_pos = '2'.

append afield to xfield.

  • Enderfassungskennzeichen

clear afield.

afield-fieldname = 'ELIKZ'.

afield-tabname = 'XDATA'.

afield-ref_tabname = 'EKPO'.

afield-row_pos = '2'.

afield-outputlen = 6.

afield-col_pos = '3'.

afield-reptext_ddic = text-010.

append afield to xfield.

  • Warengruppe

clear afield.

afield-fieldname = 'MATKL'.

afield-tabname = 'XDATA'.

afield-ref_tabname = 'EKPO'.

afield-row_pos = '2'.

afield-col_pos = '4'.

  • afield-reptext_ddic = text-011.

append afield to xfield.

  • Kurztext1

clear afield.

afield-fieldname = 'TXZ01_P'.

afield-ref_tabname = 'EKPO'.

afield-outputlen = 40.

afield-tabname = 'XDATA'.

afield-row_pos = '2'.

  • afield-hotspot = 'X'.

afield-col_pos = '5'.

afield-reptext_ddic = text-012.

append afield to xfield.

  • Nettowert Bestellposition

  • clear afield.

afield-fieldname = 'NETWR_P'.

afield-tabname = 'XDATA'.

afield-ref_tabname = 'ESSR_REL'.

afield-row_pos = '2'.

afield-col_pos = '6'.

afield-outputlen = 20.

afield-cfieldname = 'WAERS_H'. "356903

afield-ctabname = 'XDATA'. "356903

afield-reptext_ddic = text-013.

append afield to xfield.

  • Lieferdatum

clear afield.

afield-fieldname = 'EINDT_EXT'.

afield-tabname = 'XDATA'.

afield-ref_tabname = 'EKET'.

afield-row_pos = '2'.

afield-col_pos = '7'.

afield-reptext_ddic = text-014.

append afield to xfield.

************************************************************************

**********************Itemtabelle***************************************

*-- Anfang PR 00007 --*

*-- Zusätzlich das Selektionskennzeichen in die Liststruktur einbauen -*

clear afield.

afield-fieldname = 'CROSS'. "Feldname (Hier im Moment nur Dummy)

afield-ref_tabname = 'REING'. "Tabelle (Hier im Moment nur Dummy)

afield-tabname = 'DATAX'. "Name der internen Tabelle

afield-col_pos = '1'. "Erste Spalte

afield-hotspot = ' '. "Kein Hotspot

afield-checkbox = 'X'. "Als Checkbox

afield-input = 'X'. "Eingabebereit

afield-key = 'X'. "Schlüssel

afield-reptext_ddic = text-027. "Überschrift

append afield to xfield.

*-- Ende PR 00007 --*

*Erfassungsblatt

clear afield.

afield-fieldname = 'LBLNI'.

afield-ref_tabname = 'ESSR'.

afield-tabname = 'DATAX'.

*-- Anfang PR 00007 --*

afield-col_pos = '2'. "Feld eins nach rechts schieben

  • AFIELD-COL_POS = '1'.

*-- Ende PR 00007 --*

afield-hotspot = 'X'.

afield-key = 'X'.

afield-reptext_ddic = text-015.

append afield to xfield.

*Abnahmekennzeichen

clear afield.

afield-fieldname = 'ABN_ICON'.

afield-icon = 'X'.

afield-ref_tabname = 'ESSR'.

afield-tabname = 'DATAX'.

afield-outputlen = 5.

*-- Anfang PR 00007 --*

afield-col_pos = '3'. "Feld eins nach rechts schieben

  • AFIELD-COL_POS = '2'.

*-- Ende PR 00007 --*

afield-reptext_ddic = text-016.

append afield to xfield.

*Enderfassungskenzeichen

clear afield.

afield-fieldname = 'ERF_ICON'.

afield-icon = 'X'.

afield-ref_tabname = 'ESSR'.

afield-tabname = 'DATAX'.

*-- Anfang PR 00007 --*

afield-col_pos = '4'. "Feld eins nach rechts schieben

  • AFIELD-COL_POS = '3'.

*-- Ende PR 00007 --*

afield-outputlen = 6.

afield-reptext_ddic = text-017.

append afield to xfield.

*Sperrkennzeichen

clear afield.

afield-fieldname = 'SPERR_ICON'.

afield-icon = 'X'.

afield-ref_tabname = 'ESSR'.

afield-tabname = 'DATAX'.

*-- Anfang PR 00007 --*

afield-col_pos = '5'. "Feld eins nach rechts schieben

  • AFIELD-COL_POS = '4'.

*-- Ende PR 00007 --*

afield-outputlen = 9.

afield-reptext_ddic = text-018.

append afield to xfield.

  • Kurztext2

clear afield.

afield-fieldname = 'TXZ01'.

afield-tabname = 'DATAX'.

afield-ref_tabname = 'ESSR'.

*-- Anfang PR 00007 --*

afield-col_pos = '6'. "Feld eins nach rechts schieben

  • AFIELD-COL_POS = '5'.

*-- Ende PR 00007 --*

afield-reptext_ddic = text-019.

append afield to xfield.

*Nettowert Erfassungsblatt

clear afield.

afield-fieldname = 'NETWR'.

afield-ref_tabname = 'ESSR'.

afield-tabname = 'DATAX'.

*-- Anfang PR 00007 --*

afield-col_pos = '7'. "Feld eins nach rechts schieben

  • AFIELD-COL_POS = '6'.

*-- Ende PR 00007 --*

afield-outputlen = 20.

afield-reptext_ddic = text-020.

afield-seltext_s = text-020.

afield-seltext_m = text-020.

afield-seltext_l = text-020.

afield-cfieldname = 'WAERS_H'. "356903

afield-ctabname = 'DATAX'. "356903

append afield to xfield.

*Erfassungsdatum

clear afield.

afield-fieldname = 'ERDAT'.

afield-ref_tabname = 'ESSR'.

afield-tabname = 'DATAX'.

*-- Anfang PR 00007 --*

afield-col_pos = '9'. "Feld eins nach rechts schieben

  • AFIELD-COL_POS = '8'.

*-- Ende PR 00007 --*

afield-seltext_s = text-021.

afield-reptext_ddic = text-021.

append afield to xfield.

***********************************************************************

***********ausgeblendete Felder Headertabelle*************************

************************************************************************

*Einkaufsbelegart

clear afield.

afield-fieldname = 'BSART'.

afield-ref_tabname = 'EKKO'.

afield-no_out = 'X'.

afield-tabname = 'XDATA'.

append afield to xfield.

*Sachbearbeiter

clear afield.

afield-fieldname = 'ERNAM_H'.

afield-no_out = 'X'.

afield-ref_tabname = 'EKKO'.

afield-reptext_ddic = text-022.

afield-seltext_s = text-023.

afield-tabname = 'XDATA'.

append afield to xfield.

*Einkaufsorganisation

clear afield.

afield-fieldname = 'EKOTX'.

afield-no_out = 'X'.

afield-ref_tabname = 'T024E'.

  • afield-reptext_ddic = text-022.

  • afield-seltext_s = text-023.

afield-tabname = 'XDATA'.

append afield to xfield.

*Einkäufergruppe

clear afield.

afield-fieldname = 'EKNAM'.

afield-no_out = 'X'.

afield-ref_tabname = 'T024'.

  • afield-reptext_ddic = text-022.

  • afield-seltext_s = text-023.

afield-tabname = 'XDATA'.

append afield to xfield.

*Menge

clear afield.

afield-fieldname = 'MENGE'.

afield-ref_tabname = 'EKPO'.

afield-no_out = 'X'.

afield-tabname = 'XDATA'.

append afield to xfield.

*Bestellmengeneinheit

clear afield.

afield-fieldname = 'MEINS'.

afield-ref_tabname = 'EKPO'.

afield-no_out = 'X'.

afield-tabname = 'XDATA'.

append afield to xfield.

*Bruttowert in Bestellwährung

clear afield.

afield-fieldname = 'BRTWR'.

afield-ref_tabname = 'EKPO'.

afield-no_out = 'X'.

afield-tabname = 'XDATA'.

afield-cfieldname = 'WAERS_H'.

afield-ctabname = 'XDATA'.

append afield to xfield.

*Endrechnungskenzeichen

clear afield.

afield-fieldname = 'EREKZ'.

afield-ref_tabname = 'EKPO'.

afield-no_out = 'X'.

afield-tabname = 'XDATA'.

append afield to xfield.

*Positionstyp im Einkaufsbeleg

clear afield.

afield-fieldname = 'PSTYP'.

afield-ref_tabname = 'EKPO'.

afield-no_out = 'X'.

afield-tabname = 'XDATA'.

append afield to xfield.

*Kontierungstyp

clear afield.

afield-fieldname = 'KNTTP'.

afield-ref_tabname = 'EKPO'.

afield-no_out = 'X'.

afield-tabname = 'XDATA'.

append afield to xfield.

*automatische Wareneingangsrechnung

clear afield.

afield-fieldname = 'XERSY'.

afield-ref_tabname = 'EKPO'.

afield-no_out = 'X'.

afield-tabname = 'XDATA'.

append afield to xfield.

*Nummer des übergeordneten Vertrages

clear afield.

afield-fieldname = 'KONNR'.

afield-ref_tabname = 'EKPO'.

afield-no_out = 'X'.

afield-tabname = 'XDATA'.

append afield to xfield.

*Positionsnummer des übergordneten Vertrages

clear afield.

afield-fieldname = 'KTPNR'.

afield-ref_tabname = 'EKPO'.

afield-no_out = 'X'.

afield-tabname = 'XDATA'.

append afield to xfield.

*Buchungskreis

clear afield.

afield-fieldname = 'BUKRS'.

afield-ref_tabname = 'EKKO'.

afield-no_out = 'X'.

afield-tabname = 'XDATA'.

append afield to xfield.

*Texte zum Buchungskreis

clear afield.

afield-fieldname = 'BUTXT'.

afield-ref_tabname = 'T001'.

afield-no_out = 'X'.

afield-tabname = 'XDATA'.

append afield to xfield.

*Texte zum Werk

clear afield.

afield-fieldname = 'WNAM'.

afield-ref_tabname = ''.

afield-reptext_ddic = text-026.

  • afield-seltext_s = text-023.

afield-no_out = 'X'.

afield-tabname = 'XDATA'.

append afield to xfield.

*Texte zur Warengruppe

clear afield.

afield-fieldname = 'WGBEZ'.

afield-ref_tabname = 'T023T'.

afield-no_out = 'X'.

afield-tabname = 'XDATA'.

append afield to xfield.

***********************************************************************

***********ausgeblendete Felder Itemtabelle*************************

************************************************************************

*Externe Erfassungsblattnr.

clear afield.

afield-fieldname = 'LBLNE'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

append afield to xfield.

*Sachbearbeiter der das Objekt hinzugefügt hat

clear afield.

afield-fieldname = 'ERNAM'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

append afield to xfield.

*Datum der letzte Änderung

clear afield.

afield-fieldname = 'AEDAT'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

append afield to xfield.

*Sachbearbeiter der das Objekt geändert hat

clear afield.

afield-fieldname = 'AENAM'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

append afield to xfield.

*Sachbearbeiter intern

clear afield.

afield-fieldname = 'SBNAMAG'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

append afield to xfield.

*Sachbearbeiter extern

clear afield.

afield-fieldname = 'SBNAMAN'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

append afield to xfield.

*Leistungsort

clear afield.

afield-fieldname = 'DLORT'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

append afield to xfield.

*Preisbezugsdatum des Erfassungsblattes

clear afield.

afield-fieldname = 'LBLDT'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

append afield to xfield.

*Zeitraum von

clear afield.

afield-fieldname = 'LZVON'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

append afield to xfield.

*Zeitraum bis

clear afield.

afield-fieldname = 'LZBIS'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

append afield to xfield.

*Wert der Leistungen

clear afield.

afield-fieldname = 'LWERT'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

afield-cfieldname = 'WAERS_H'. "356903

afield-ctabname = 'DATAX'. "356903

append afield to xfield.

*Anteil aus ungeplanten Leistungen

clear afield.

afield-fieldname = 'UWERT'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

afield-cfieldname = 'WAERS_H'. "356903

afield-ctabname = 'DATAX'. "356903

append afield to xfield.

*Löschkenzeichen im Erfassungsblatt

clear afield.

afield-fieldname = 'LOEKZ'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

append afield to xfield.

*Note für Qualität der Leistung

clear afield.

afield-fieldname = 'PWWE'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

append afield to xfield.

*Note für Termintreue der Leistung

clear afield.

afield-fieldname = 'PWFR'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

append afield to xfield.

*Bestellanforderungsnummer

clear afield.

afield-fieldname = 'BANFN_SH'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-reptext_ddic = text-024.

afield-seltext_s = text-025.

afield-tabname = 'DATAX'.

append afield to xfield.

*Wartungsplan

clear afield.

afield-fieldname = 'WARPL'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

append afield to xfield.

*Frachtkostennummer

clear afield.

afield-fieldname = 'FKNUM'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

append afield to xfield.

*Muster-LV-Nummer

clear afield.

afield-fieldname = 'SPEC_NO'.

afield-ref_tabname = 'ESSR'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

append afield to xfield.

*Ferigabestrategie

clear afield.

afield-fieldname = 'FRGXT'.

afield-ref_tabname = 'T16FT'.

afield-no_out = 'X'.

afield-tabname = 'DATAX'.

append afield to xfield.

endform. " FIELDS

*&----


*

*& Form read_vendor

*&----


*

  • text

*----


*

form read_vendor.

*----


*

  • *

*----


*

  • Interne Tabellen mit Textelementen anlegen

*----


*

*Lieferant

refresh xlfa1.

describe table xdata lines sy-tfill.

if sy-tfill > 0.

select * from lfa1 into table xlfa1

for all entries in xdata

where lifnr eq xdata-lifnr

order by primary key.

endif.

*Einkaufsorganisation

refresh xt024e.

describe table xdata lines sy-tfill.

if sy-tfill > 0.

select * from t024e into table xt024e

for all entries in xdata

where ekorg eq xdata-ekorg

order by primary key.

endif.

*Einkäufergruppe

refresh xt024.

describe table xdata lines sy-tfill.

if sy-tfill > 0.

select * from t024 into table xt024

for all entries in xdata

where ekgrp eq xdata-ekgrp

order by primary key.

endif.

*Werk

refresh xt001w.

describe table xdata lines sy-tfill.

if sy-tfill > 0.

select * from t001w into table xt001w

for all entries in xdata

where werks eq xdata-werks

order by primary key.

endif.

*Warengruppe

refresh xt023t.

describe table xdata lines sy-tfill.

if sy-tfill > 0.

select * from t023t into table xt023t

for all entries in xdata

where matkl eq xdata-matkl

and spras eq sy-langu

order by primary key.

endif.

*Freigabestrategie

refresh xt16ft.

describe table xdata lines sy-tfill.

if sy-tfill > 0.

select * from t16ft into table xt16ft

for all entries in xdata

where frgsx eq xdata-frgsx

and spras eq sy-langu

order by primary key.

endif.

*Freigabekennzeichen

  • refresh xt16fm.

  • describe table xdata lines sy-tfill.

  • if sy-tfill > 0.

  • select * from t16fm into table xt16fm

  • for all entries in xdata

  • where frgkl eq xdata-frgkl

  • and spras eq sy-langu

  • order by primary key.

  • endif.

*Buchungskreis

refresh xt001.

describe table xdata lines sy-tfill.

if sy-tfill > 0.

select * from t001 into table xt001

for all entries in xdata

where bukrs eq xdata-bukrs

order by primary key.

endif.

endform. "read_vendor

***********************************************************************

  • Daten einfügen in xdata

***********************************************************************

form read_data.

read table xlfa1

with key lifnr = wa-lifnr

binary search.

if sy-subrc = 0.

wa-name1 = xlfa1-name1.

endif.

read table xt024e

with key ekorg = wa-ekorg

binary search.

if sy-subrc = 0.

wa-ekotx = xt024e-ekotx.

endif.

read table xt024

with key ekgrp = wa-ekgrp

binary search.

if sy-subrc = 0.

wa-eknam = xt024-eknam.

endif.

read table xt001w

with key werks = wa-werks

binary search.

if sy-subrc = 0.

wa-wnam = xt001w-name1.

endif.

read table xt023t

with key matkl = wa-matkl

binary search.

if sy-subrc = 0.

wa-wgbez = xt023t-wgbez.

endif.

read table xt16ft

with key frgsx = wa-frgsx

frggr = wa-frggr

binary search.

if sy-subrc = 0.

wa-frgxt = xt16ft-frgxt.

endif.

read table xt001

with key bukrs = wa-bukrs

binary search.

if sy-subrc = 0.

wa-butxt = xt001-butxt.

endif.

  • wa-name1 = xlfa1-name1.

  • wa-ekotx = xt024e-ekotx.

  • wa-eknam = xt024-eknam.

  • wa-wnam = xt001w-name1.

  • wa-wgbez = xt023t-wgbez.

  • wa-frgxt = xt16ft-frgxt.

  • wa-frget = xt16fm-frget.

modify table xdata from wa.

endform. "read_data

*&----


*

*& Form read_delivery_date

*&----


*

  • text

*----


*

form read_delivery_date.

*----


*

  • FORM READ_DELIVERY_DATE *

*----


*

  • Lieferdatum lesen *

*----


*

refresh xeket.

*..Lieferdatum lesen

describe table xdata lines sy-tfill.

if sy-tfill > 0.

select * from eket into table xeket

for all entries in xdata

where ebeln eq xdata-ebeln

and ebelp eq xdata-ebelp

order by primary key.

endif.

*..Lieferdatum zur Ausgabe aufbereiten

loop at xeket.

call function 'PERIOD_AND_DATE_CONVERT_OUTPUT'

EXPORTING

internal_date = xeket-eindt

internal_period = xeket-lpein

IMPORTING

external_date = xeket-eindt_ext

external_period = xeket-lpein_ext

EXCEPTIONS

date_invalid = 01

periode_invalid = 02.

if sy-subrc eq 0.

modify xeket.

endif.

endloop.

*..Lieferdatum an xdata uebergeben

loop at xdata.

if xeket-ebeln ne xdata-ebeln or

xeket-ebelp ne xdata-ebelp.

read table xeket

with key ebeln = xdata-ebeln

ebelp = xdata-ebelp

binary search.

endif.

xdata-lpein = xeket-lpein.

xdata-lpein_ext = xeket-lpein_ext.

xdata-eindt_ext = xeket-eindt_ext.

modify xdata.

endloop.

endform. "read_delivery_date

************************************************************************

****************Icons in interne Tabelle******************************

************************************************************************

form icon.

case wa-kzabn.

when 'X'.

wa-abn_icon = '@08@'.

when ' '.

wa-abn_icon = '@0A@'.

when others.

wa-abn_icon = '@09@'.

endcase.

if wa-final eq 'X'.

wa-erf_icon = '@B6@'.

endif.

  • case wa-final.

  • when 'X'.

  • wa-erf_icon = '@17@'.

  • when others.

  • wa-erf_icon = ''.

  • endcase.

case wa-f_lock.

when 'X'.

wa-sperr_icon = '@06@'.

when others.

wa-sperr_icon = ''.

endcase.

endform. "icon

************************************************************************

***********F4 Hilfe für Anzeigenvariante******************************

************************************************************************

*form f4_for_variant using rs_variant like disvariant

  • r_vari like disvariant-variant.

  • data: ls_variant like disvariant.

  • ls_variant = rs_variant.

  • call function 'REUSE_ALV_VARIANT_F4'

  • exporting

  • is_variant = ls_variant

  • I_TABNAME_HEADER =

  • I_TABNAME_ITEM =

  • IT_DEFAULT_FIELDCAT =

  • i_save = 'A'

  • importing

  • e_exit = g_exit

  • es_variant = rs_variant

  • exceptions

  • not_found = 1

  • program_error = 2

  • others = 3.

  • if sy-subrc ne 0.

  • message id sy-msgid type 'S' number sy-msgno

  • with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

  • else.

  • if g_exit = space.

  • r_vari = rs_variant-variant.

  • endif.

  • endif.

*endform. " F4_FOR_VARIANT

form authority_list.

*----


*

  • FORM AUTHORITY_LIST *

*----


*

  • Berechtigungspruefung Listdaten *

*----


*

loop at xdata.

perform authority_po_header.

perform authority_po_item.

if auth_doc eq space.

delete xdata.

elseif auth_price eq space.

xdata-no_price_auth = 'X'.

modify xdata.

endif.

endloop.

endform. "authority_list

*&----


*

*& Form authority_release

*&----


*

  • text

*----


*

form authority_release.

*----


*

  • FORM AUTHORITY_RELEASE *

*----


*

  • Berechtigungspruefung Freigabe *

*----


*

loop at xdata.

perform authority_po_header.

perform authority_po_item.

if auth_price eq space.

xdata-no_price_auth = 'X'.

endif.

if auth_accept eq space.

xdata-no_accept_auth = 'X'.

endif.

if auth_price eq space or

auth_accept eq space.

modify xdata.

endif.

endloop.

endform. "authority_release

*&----


*

*& Form authority_po_header

*&----


*

  • text

*----


*

form authority_po_header.

*----


*

  • FORM AUTHORITY_PO_HEADER *

*----


*

  • Pruefen Anzeigeberechtigungen Bestellkopf *

*----


*

data: xobjekt(10) type c value 'M_BEST_'. "Bestellung

auth_doc = 'X'.

auth_price = 'X'.

auth_change = 'X'.

auth_accept = 'X'.

*..Einkaufsorganisation

xobjekt+7(3) = 'EKO'.

authority-check object xobjekt "Beleg anzeigen

id 'ACTVT' field akt_price

id 'EKORG' field xdata-ekorg.

if sy-subrc ne 0.

clear: auth_doc.

endif.

authority-check object xobjekt "Preis anzeigen

id 'ACTVT' field akt_price

id 'EKORG' field xdata-ekorg.

if sy-subrc ne 0.

clear auth_price.

endif.

authority-check object xobjekt "Aenderungen anzeigen

id 'ACTVT' field akt_change

id 'EKORG' field xdata-ekorg.

if sy-subrc ne 0.

clear auth_change.

endif.

authority-check object xobjekt "Abnehmen

id 'ACTVT' field akt_accept

id 'EKORG' field xdata-ekorg.

if sy-subrc ne 0.

clear auth_accept.

endif.

*..Einkäufergruppe

xobjekt+7(3) = 'EKG'.

if auth_doc eq 'X'.

authority-check object xobjekt "Beleg anzeigen

id 'ACTVT' field akt_price

id 'EKGRP' field xdata-ekgrp.

if sy-subrc ne 0.

clear: auth_doc.

endif.

endif.

if auth_price eq 'X'.

authority-check object xobjekt "Preis anzeigen

id 'ACTVT' field akt_price

id 'EKGRP' field xdata-ekgrp.

if sy-subrc ne 0.

clear auth_price.

endif.

endif.

if auth_change eq 'X'.

authority-check object xobjekt "Aenderungen anzeigen

id 'ACTVT' field akt_change

id 'EKGRP' field xdata-ekgrp.

if sy-subrc ne 0.

clear auth_change.

endif.

endif.

if auth_accept eq 'X'.

authority-check object xobjekt "Abnehmen

id 'ACTVT' field akt_accept

id 'EKGRP' field xdata-ekgrp.

if sy-subrc ne 0.

clear auth_accept.

endif.

endif.

*..Belegart

xobjekt+7(3) = 'BSA'.

if auth_doc eq 'X'.

authority-check object xobjekt "Beleg anzeigen

id 'ACTVT' field akt_price

id 'BSART' field xdata-bsart.

if sy-subrc ne 0.

clear: auth_doc.

endif.

endif.

if auth_price eq 'X'. "Preis anzeigen

authority-check object xobjekt

id 'ACTVT' field akt_price

id 'BSART' field xdata-bsart.

if sy-subrc ne 0.

clear auth_price.

endif.

endif.

if auth_change eq 'X'.

authority-check object xobjekt "Aenderungen anzeigen

id 'ACTVT' field akt_change

id 'BSART' field xdata-bsart.

if sy-subrc ne 0.

clear auth_change.

endif.

endif.

if auth_accept eq 'X'.

authority-check object xobjekt "Abnehmen

id 'ACTVT' field akt_accept

id 'BSART' field xdata-bsart.

if sy-subrc ne 0.

clear auth_accept.

endif.

endif.

endform. "authority_po_header

*&----


*

*& Form authority_po_item

*&----


*

  • text

*----


*

form authority_po_item.

*----


*

  • FORM AUTHORITY_PO_ITEM *

*----


*

  • Pruefen Anzeigeberechtigungen Bestellposition *

*----


*

data: xobjekt(10) type c value 'M_BEST_'. "Bestellung

*..Werk

xobjekt+7(3) = 'WRK'.

if auth_doc eq 'X'.

authority-check object xobjekt "Beleg anzeigen

id 'ACTVT' field akt_anz

id 'WERKS' field xdata-werks.

if sy-subrc ne 0.

clear: auth_doc.

endif.

endif.

if auth_accept eq 'X'.

authority-check object xobjekt "Abnehmen

id 'ACTVT' field akt_accept

id 'WERKS' field xdata-werks.

if sy-subrc ne 0.

clear auth_accept.

endif.

endif.

endform. "authority_po_item

**********************************************************************

                          • user command ************

**********************************************************************

form user_command using r_ucomm like sy-ucomm

rs_selfield type slis_selfield.

*-- Beginn PR 00007 --

*-- Datendefinitionen -

-


*

include zrm_rmsrvf11_d01.

"$$

"$$

*-- Variablen-Definition -

-


*

data: wc_kz_sel type c, "Kz ob in der Leistungserfas-

"sungsblattliste mindesten ein

"Satz selektiert wurde

wc_kz_abbr type c, "Kz das die Bearbeitung im

"Popup abgebrochen wurde

wc_belnr_alt type essr-ebeln, "Speicher Belegnummer um fest-

"zustellen ob Erfassungblätter

"von mehr als einer Bestellung

"selektiert wurden

wc_memid(14) type c. "Memory-Id für Datenübertragung

"an Ausgabereport

data: wt_vao_dat type standard table of ws_vao_tab, "Tabelle VAO-

"Daten

wt_esll type standard table of ws_esll, "Tabelle für

wk_esll type ws_esll. "Leistungsdaten

*-- Vorbesetzungen für MWSt-Pfelge-Dynpro -

-


*

select single * from zrmstrech where tabkey = 'RMD'. "Steuerdaten aus

"ZRMSTRECH lesen

if sy-subrc <> 0. "Wenn nicht da

message a003(zrbes). "Abbruch

endif.

wc_kz_sel = ' '. "Selektions-Kz

"reseten

*-- Ende PR 00007 --

clear xdata-ebeln.

if r_ucomm = '&IC1'.

if rs_selfield-tabindex ne 0.

read table xdata index rs_selfield-tabindex.

read table datax index rs_selfield-tabindex.

case rs_selfield-sel_tab_field.

when 'XDATA-EBELN'.

  • SET PARAMETER ID 'BES' FIELD XDATA-EBELN.

  • CALL TRANSACTION 'ME23' AND SKIP FIRST SCREEN.

call function 'ME_DISPLAY_PURCHASE_DOCUMENT'

exporting

i_ebeln = xdata-ebeln

i_enjoy = 'X'

exceptions

*-- Anfang PR 3335 TKE EV4K901153

not_found = 0

no_authority = 0

invalid_call = 0

others = 0.

  • not_found = 1

  • no_authority = 2

  • invalid_call = 3

  • others = 4.

*-- Ende PR 3335 TKE EV4K901153

when 'DATAX-LBLNI'.

set parameter id 'BES' field datax-ebeln.

set parameter id 'LBL' field datax-lblni.

  • CALL TRANSACTION 'ML82' AND SKIP FIRST SCREEN.

call transaction 'ML81N'.

endcase.

endif.

*-- Beginn PR 00007 --

*-- Start des Funktionsbaustein zur Ermittlung der MWSt für VAO- --*

*-- Leistungen sowie zum Sammeln der Leistungsdaten für die se- --*

*-- lektierten Erfassungsblätter -

-


*

elseif r_ucomm = 'RECH'.

*-- Feststellen ob mindestens ein Satz selektiert wurde -

-


*

*-- Anfang PR 3335 TKE EV4K901153

  • loop at datax where wc_sel = 'X'. "Alle Sätze mit Sel-Kz

loop at datax where cross = 'X'. "Alle Sätze mit Sel-Kz

*-- Ende PR 3335 TKE EV4K901153

wc_kz_sel = 'X'. "Wenn vorhanden --> Kz

"setzen

if wc_belnr_alt <> datax-ebeln and "Prüfen das nur Erfassungs-

not ( wc_belnr_alt is initial ). "blätter einer Bestellung

message e001(zrbes). "selektiert werden

else.

wc_belnr_alt = datax-ebeln.

endif.

endloop.

if wc_kz_sel <> 'X'. "Wenn nicht mindesten ein

message e000(zrbes). "Satz selektiert --> Feh-

endif. "lermeldung

"$$

"$$

"$$

call function 'Z_RM_LESEN_LSTGDATEN'

exporting

i_leistung = zrmstrech-srvpos "AVO-Leistung

importing

e_kz_abbr = wc_kz_abbr "Popup wurde abgebrochen

tables

t_essr = datax "Datentabelle aus

"Erfassungsblattliste

t_esll = wt_esll "Tabelle mit Leistungen

"für Erfassungsblätter

t_vao_dat = wt_vao_dat "Tabelle mit MWSt-Daten

changing

e_waers = zrmstrech-waers "Waehrung

e_kz_rund = zrmstrech-kz_rund."Rundungskennzeichen

*-- Exportieren der Tabellen und Steuerdaten ins Memory --

if wc_kz_abbr <> 'X'. "Wenn kein Abbruch im Popup

  • begin of PR 7670

Perform collect_MWST_KZ changing wc_dialog_flag. "TKK7670

if wc_dialog_flag <> 'X'. "TKK7670

  • End of PR 7670

wc_memid(12) = sy-uname. "Eindeutige Memory-Id

wc_memid+12(1) = sy-modno. "basteln

wc_memid+13(1) = '1'.

export datax to memory id wc_memid.

wc_memid+13(1) = '2'.

export wt_esll to memory id wc_memid.

wc_memid+13(1) = '3'.

export wt_vao_dat to memory id wc_memid.

wc_memid+13(1) = '4'.

export zrmstrech-waers to memory id wc_memid.

wc_memid+13(1) = '5'.

export zrmstrech-kz_rund to memory id wc_memid.

*begin of 7670

wc_memid+13(1) = '6'. "TKK7670

export g_mwskz to memory id wc_memid. "TKK7670

*end of 7670.

*-- Starten des Anzeige-Reports für die Pseudorechnungsausgabe --

submit zrm_rmsrvf11_r01 via selection-screen and return.

endif.

*-- Ende PR 00007 --

endif. " TKK7670

endif.

  • endif.

clear xdata-ebeln.

endform. " SELSAVE

*&----


*

*& Form collect_MWST_KZ

*&----


*

  • text

*----


*

  • --> p1 text

  • <-- p2 text

*----


*

FORM collect_MWST_KZ changing p_dialog_flag type c.

clear: g_mwskz, p_dialog_flag.

  • check for XERSY.

read table xdata WITH KEY ebeln = datax-ebeln

ebelp = datax-ebelp.

if xdata-xersy is initial.

call screen 8000 STARTING AT 5 5 ENDING AT 75 18.

else.

select single mwskz

into g_mwskz

from ekpo

where ebeln = datax-ebeln

and ebelp = datax-ebelp.

ENDIF.

if g_mwskz is initial.

p_dialog_flag = 'X'.

endif.

ENDFORM. " collect_MWST_KZ

*&----


*

*& Module USER_COMMAND_8000 INPUT

*&----


*

  • text

*----


*

MODULE USER_COMMAND_8000 INPUT.

data save_ok type sy-ucomm.

save_ok = ok_code.

clear ok_code.

case save_ok.

when 'ENTR'.

IF G_MWSKZ IS INITIAL.

message i002(zrbes).

exit.

else.

LEAVE TO SCREEN 0.

ENDIF.

WHEN 'ABBR'.

leave to SCREEN 0.

*leave program.

ENDCASE.

ENDMODULE. " USER_COMMAND_8000 INPUT

*&----

-


*

*& Module STATUS_8000 OUTPUT

*&----

-


*

  • text

*----

-


MODULE STATUS_8000 OUTPUT.

SET PF-STATUS 'BUTTON'.

SET TITLEBAR 'VAT'.

ENDMODULE. " STATUS_8000 OUTPUT

report zrm_rmsrvf11_r01 no standard page heading

line-size 130.

*----


*

  • Tabellendefinitionen *

*----


*

tables: mseg, "Materialbelegspositionen

bseg, "Buchhaltungsbelegpositionen

bkpf, "Buchhaltungsbelegkopf

mkpf, "Materialbelegskopf

ekko, "Einkaufskopf

t001, "Buchungskreis

t000. "Mandantendaten

*-- Datendefinitionen -

-


*

include zrm_rmsrvf11_d01.

*----


*

  • Konstantendefinitionen *

*----


*

constants: cc_psrech(1) value 'P',

cc_verlauf(1) value 'V'.

*----


*

  • Typ-Deklarationen *

*----


*

*-- Datentyp für Ausgabe-Tabelle ( hier für Gruppenstufenausgabe mit-*

*-- Leistungsnummer, ErfBlattnummer, Leistungszeile ) -

-


*

types: begin of ws_esll_ausg,

ebeln type eslh-ebeln,

ebelp type eslh-ebelp,

srvpos type esll-srvpos,

meins type esll-meins,

lblni type essr-lblni,

hiertxt(40) type c,

extrow type esll-extrow,

introw type esll-introw,

frmval1 type esll-frmval1,

frmval2 type esll-frmval2,

frmval3 type esll-frmval3,

frmval4 type esll-frmval4,

menge type esll-menge,

netwr type esll-netwr,

tbtwr type esll-tbtwr,

mwskz type esll-mwskz,

bukrs type ekko-bukrs,

waers type ekko-waers,

package type esll-package,

end of ws_esll_ausg,

*-- Datentyp für Ausgabe-Tabelle ( hier für Gruppenstufenausgabe mit-*

*-- Bestellnummer, ErfBlattnummer ) -

-


*

begin of ws_esll_aus1,

ebeln type eslh-ebeln,

ebelp type eslh-ebelp,

bukrs type ekko-bukrs,

lblni type essr-lblni,

srvpos type esll-srvpos,

extrow type esll-extrow,

introw type esll-introw,

frmval1 type esll-frmval1,

frmval2 type esll-frmval2,

frmval3 type esll-frmval3,

frmval4 type esll-frmval4,

menge type esll-menge,

meins type esll-meins,

netwr type esll-netwr,

tbtwr type esll-tbtwr,

mwskz type esll-mwskz,

waers type ekko-waers,

package type esll-package,

end of ws_esll_aus1,

*-- Datentyp für Mehrwertsteuerdatentabelle -

-


*

begin of ws_mwst_tab, "ITAB mit je einer Zeile pro

mwst_kz type esll-mwskz, "für VAO angegebenenen MWSt-Satz

mwst_satz(11) type c, "mit MWSKZ, MWS-Satz und Betrag.

menge type esll-menge,

wert type esll-netwr,

kz_vao type c,

end of ws_mwst_tab,

*-- Tabelle mit Ausgabedaten für Vertragsentwicklung -

-


*

begin of ws_were_tab, "Diese ITAB enthält pro

beltyp type t163c-bewtk, "WE-/RE-Beleg eines Erfas-

kz_sh(1) type c, "sungsblatts eines Satz mit

kz_were(2) type c, "den Beträgen, Belegnummer,

belnr type eslh-ebeln, "MWST-Daten,

datum type bkpf-budat, "Kennzeichen ob Betrag be-

waers type bkpf-waers, "rechnungsrelevant ist und

netwr type bseg-dmbtr, "wenn ja mit Soll oder Haben

mwstwr type bseg-mwsts,

brtwr type bseg-dmbtr,

end of ws_were_tab.

*----


*

  • Variablendefinitionen *

*----


*

data: wc_memid(14) type c, "Memory-Id

wc_waers type tcurc-waers, "Waehrungs-Kz

wc_rund type c, "und Rundungs-Kz

"werden aus Memory gel.

*-- ITAB mit VAO-Daten ( Daten aus Popup der Erfassungsblatt-Liste ) *

*-- ( Wird aus dem Memory gelesen ) -

-


*

wt_vao_tab type standard table of ws_vao_tab,

wk_vao_tab type ws_vao_tab,

*-- Datentabelle mit Leistungszeilendaten ( Wird aus Memory gelesen )-*

wt_esll type standard table of ws_esll,

wk_esll type ws_esll,

*-- Datentabelle für Buchungskreisdaten ( Hauswährungfeld für spä- --*

*-- tere Währungsumrechnungen ) -

-


*

wt_t001 type standard table of t001,

*-- Datentabelle mit Bestellentwicklungstypen -

-


*

wt_t163c type standard table of t163c,

*-- Ausgabetabelle 1 ( Sortiert nach BstNr Leistung Erf.Blatt ) -

-


*

wt_esll_ausg type standard table of ws_esll_ausg,

wk_esll_ausg type ws_esll_ausg,

*-- Augabetabelle 2 ( Sortiert nach BstNr Erfassungsblatt ) -

-


*

wt_esll_aus1 type standard table of ws_esll_aus1,

wk_esll_aus1 type ws_esll_aus1,

*-- Tabelle mit MWST-Daten pro MWST-Satz ( Ausgabe am Ende der Pseudo-*

*-- rechnung ) -

-


*

wt_mwst_tab type standard table of ws_mwst_tab,

wk_mwst_tab type ws_mwst_tab,

*-- ITAB mit allen WE und RE-Belegen zu einem Erfassungsblatt -

-


*

wt_were_tab type standard table of ws_were_tab,

wk_were_tab type ws_were_tab,

wc_list_kz type c, "Listtyp (Pseudorechnung oder

"Vertragsverlauf )

wc_grp_kz type c, "Kennzeichen für Gruppenwechsel

wc_hwaers type t001-waers, "enthält die aktuelle HW

wp_sum_pos type esll-netwr, "Summe pro Position

wp_sum_srv type esll-netwr, "Summe pro Leistung

wp_sum_lst type esll-netwr, "Summe eines Erfassungsblatts

wp_sum_vao type esll-netwr, "Summe der VAO-Leistungen

wp_sum_nrm type esll-netwr, "Summe der übrigen Leistungen

wp_sum_net type esll-netwr, "Gesamtsumme Nettowert

wp_sum_brt type esll-netwr, "Gesamtsumme Bruttowert

wp_sum_str type esll-netwr, "Gesamtsumme Mehrwertsteuer

wc_mwst_kz like bset-MWSKZ, "TKK7670

*

cc_blank(60) type c value ' '.

*----


*

  • INITIALIZATION *

*----


*

initialization.

*-- Steuerdaten für Rechnungserstellung lesen -

-


*

select single * from zrmstrech where tabkey = 'RMD'.

if sy-subrc <> 0.

message a003(zrbes).

endif.

*-- Buchungskreisdaten in interne Tabelle schreiben -

-


*

select * from t001 into table wt_t001.

*-- Bestellentwicklungstypen in interne Tabelle schreiben -

-


*

select * from t163c into table wt_t163c.

*-- Beschaffung der Daten für den Report aus dem Memory -

-


*

wc_memid(12) = sy-uname. "Eindeutige Memory-Id basteln

wc_memid+12(1) = sy-modno.

wc_memid+13(1) = '2'.

import wt_esll to wt_esll from memory id wc_memid.

free memory id wc_memid.

wc_memid+13(1) = '3'.

import wt_vao_dat to wt_vao_tab from memory id wc_memid.

free memory id wc_memid.

wc_memid+13(1) = '4'.

import zrmstrech-waers to wc_waers from memory id wc_memid.

free memory id wc_memid.

wc_memid+13(1) = '5'.

import zrmstrech-kz_rund to wc_rund from memory id wc_memid.

free memory id wc_memid.

  • Begin of 7670

wc_memid+13(1) = '6'.

*import g_mwskz to zrmstrech-mwst_kz from memory id wc_memid.

import g_mwskz to wc_mwst_kz from memory id wc_memid."TKK7670

free memory id wc_memid. "TKK7670

  • End 7670

*-- Aufbau von zwei Tabellen die nur zur Ausgabe der Pseudorechnung --*

*-- und der Vertragsentwicklung dienen. In einer Tabelle ist dies --*

*-- nicht möglich, das jeweils unterschiedliche Gruppenstufen verwen--*

*-- det werden und der Aufbau der Tabellen zur korrekten Abarbeitung--*

*-- der Gruppenstufen unterschiedlich sein muß --*

loop at wt_esll into wk_esll where package <> 'X'.

move-corresponding wk_esll to wk_esll_ausg.

append wk_esll_ausg to wt_esll_ausg.

move-corresponding wk_esll to wk_esll_aus1.

append wk_esll_aus1 to wt_esll_aus1.

endloop.

sort wt_esll_ausg by ebeln srvpos meins lblni extrow.

sort wt_esll_aus1 by ebeln lblni srvpos extrow meins.

*----


*

  • START-OF-SELECTION *

*----


*

start-of-selection.

perform ausgabe_rechnung. "Ausgabe der Pseudorechnung

new-page.

perform umsetzen_waehrung "Umrechnung der Datentabel-

tables wt_esll_ausg "len und der Summenfelder in

wt_esll_aus1 "Hauswaehrung für die Ver-

wt_t001 "tragsentwicklung

changing wc_hwaers

wp_sum_str

wp_sum_net

wp_sum_brt.

perform ausgabe_verlauf. "Ausgabe der Vertragsentw.

*----


*

  • TOP-OF-PAGE *

*----


*

top-of-page.

if wc_list_kz = cc_psrech. "Kopf für Rechnungsausgabe

perform kopf_rechnung using wk_esll_ausg-ebeln

wc_waers.

elseif wc_list_kz = cc_verlauf. "Kopf für Vertragsentwicklung

perform kopf_verlauf.

endif.

*----


*

  • UNTERPROGRAMME *

*----


*

*&----


*

*& Form FUELLEN_MWST_TAB

*&----


*

  • Füllen einer internen Tabelle die für alle vorhandenen Mehr-

  • wertsteuersätze einen Satz mit der Prozentzahl des Mehrwert-

  • Steuersatzen und dem Betrag enthält

*

  • Fall 1. Aktuelle Leistung ist spezielle VAO-Leistung

  • Mehrwertsteuersatz wird aus der in VAO-ITAB gelesen.

  • ( Diese enthält pro Leistungszeile u.A. die MWST-Sätze )

  • Diese werden bei Start der Pseudorechnung aus der Er-

  • fassungsblattliste heraus in einem Popup eingegeben.

  • Fall 2. Aktuelle Leistung ist keine VAO-Leistung

  • Als Mehrwertsteuersatz wird der in der Steuertabelle

  • ZRMSTRECH angegebene Satz verwendet.

*

*----


*

  • -->p_mwst_tab Zu füllende Mehrwertsteuertabelle

  • -->p_vao_tab Tabelle mit Daten der der VAO

  • <--p_wk_esll_ausg Aktuelle Leistungszeile

  • <--p_mwstkz Mehrwertsteuer-Kz für Nicht-VAO-Leistungen

*----


*

form fuellen_mwst_tab tables p_mwst_tab structure wk_mwst_tab

p_vao_tab structure wk_vao_tab

using p_wk_esll_ausg structure wk_esll_ausg

p_mwstkz type bset-mwskz.

*-- Variablen-Definitionen -

-


*

data: p_wk_mwst_tab type ws_mwst_tab, "Kopfzeile für MWST-Tabelle

p_wp_mwst_satz type konp-kbetr, "Mehrwertsteuersatz in %

p_wk_vao_tab type ws_vao_tab. "Kopfzeile für VAO-Tabelle

*-- Leistungszeile enthält eine VAO-Leistung -

-


*

if p_wk_esll_ausg-srvpos = zrmstrech-srvpos.

*-- Zugehörigen Satz zur Leistungszeile aus der VaO-TAbelle lesen

read table p_vao_tab with key lblni = p_wk_esll_ausg-lblni

extrow = p_wk_esll_ausg-extrow

introw = p_wk_esll_ausg-introw

into p_wk_vao_tab.

if not ( p_wk_vao_tab-mwsts is initial ). "Prozentsatz ermitteln

perform lesen_mwskz using p_wk_esll_ausg-bukrs

p_wk_vao_tab-mwsts

changing p_wp_mwst_satz.

else.

clear p_wp_mwst_satz.

endif.

p_wk_mwst_tab-mwst_kz = p_wk_vao_tab-mwsts. "Key

p_wk_mwst_tab-mwst_satz = p_wp_mwst_satz. "MWST-Satz

p_wk_mwst_tab-wert = p_wk_esll_ausg-tbtwr * "Gesamtkosten

p_wk_esll_ausg-menge.

p_wk_mwst_tab-menge = p_wk_esll_ausg-menge. "Gesamtmenge

  • p_wk_mwst_tab-kz_vao = 'X'.

p_wk_mwst_tab-kz_vao = ' '.

collect p_wk_mwst_tab into p_mwst_tab.

*-- Leistungszeile enthält keine VAO-Leistung -

-


*

else.

*Begin of PR 7670 "TKK7670

*if not ( zrmstrech-mwst_kz is initial ). "Prozentsatz "TKK7670

*ermitteln

if not wc_mwst_kz is initial. "TKK7670

*End of PR 7670 "TKK7670

perform lesen_mwskz using p_wk_esll_ausg-bukrs

  • zrmstrech-mwst_kz "TKK7670

wc_mwst_kz "TKK7670

changing p_wp_mwst_satz.

else.

clear p_wp_mwst_satz.

endif.

*Begin of PR 7670 "TKK7670

  • p_wk_mwst_tab-mwst_kz = zrmstrech-mwst_kz. "Key*

p_wk_mwst_tab-mwst_kz = wc_mwst_kz. "Key "TKK7670

*END of PR 7670 "TKK7670

p_wk_mwst_tab-mwst_satz = p_wp_mwst_satz. "MWST-Satz

p_wk_mwst_tab-wert = p_wk_esll_ausg-tbtwr * "Gesamtkosten

p_wk_esll_ausg-menge.

p_wk_mwst_tab-menge = p_wk_esll_ausg-menge. "Gesamtmenge

p_wk_mwst_tab-kz_vao = ' '.

collect p_wk_mwst_tab into p_mwst_tab.

endif.

endform. " lesen_mwst_satz

*&----


*

*& Form LESEN_WE_BELEG

*&----


*

  • Lesen der WE-RE-Belege zu einem Leistungserfassungsblatt

  • in eine interne Tabelle

*----


*

  • -->p_wt_were_tab ITAB die die Daten zu den selektierten WE/RE

  • Belegen enthält.

  • -->p_ebeln Zu Erfassungsblatt zugehörige Bestellung und

  • -->p_ebelp Bestellposition

  • -->p_lblni Aktuelles Leistungserfassungsblatt

  • -->p_bukrs Buchungskreis des Erfassungsblatts ( Aus Be-

  • stellung )

*----


*

form lesen_we_beleg tables p_wt_were_tab structure wk_were_tab

p_wt_t163c structure t163c

using p_ebeln

p_ebelp

p_lblni

p_bukrs.

*-- Variablen-Definitionen -

-


*

data: wt_ekbe type standard table of ekbe, "ITAB für WE-Daten

wk_ekbe type ekbe,

wt_accdoc type standard table of acc_doc, "ITAB für RE-Daten

wk_accdoc type acc_doc,

wc_awtyp type acchd-awtyp,

wk_t163c type t163c,

wc_dialog type boole value ' ',

wc_koart type bseg-koart,

wc_mwart type bseg-mwart,

wc_shkzg type bseg-shkzg,

wc_betrag type bseg-dmbtr,

wc_zw_gjahr type acchd-aworg. "Zwischenfeld für

"akt. Geschäftsjahr

"( wg. FB-Format )

*-- Initialisierungen -

-


*

select single * from t000 where mandt = sy-mandt. "Daten des akt. Man-

"dant (LOGSYS) lesen

refresh: p_wt_were_tab.

*-- WE-Beleg nachlesen -

-


*

call function 'ME_READ_HISTORY'

exporting

ebeln = p_ebeln "Bestellnummer

ebelp = p_ebelp "Bestellposition

webre = 'X'

tables

xekbe = wt_ekbe. "ITAB mit WE-Belegen

*-- Tabelle mit Materialbelegen abarbeiten -

-


*

loop at wt_ekbe into wk_ekbe "Loop über Mat-Belege

where lfbnr = p_lblni and "zum akt. Erf.-Blatt

( bewtp = 'Q' or "Rechnung

bewtp = 'E' or "Wareneintrag

bewtp = 'N' or "Nachbelastung

bewtp = 'K' ). "Kontenpflege

*-- Bei den MAt-Belegen nur den WE-Beleg speichern --

  • if wk_ekbe-bewtp = 'E'.

  • select single mblnr waers dmbtr "Nachlesen von Waeh-

  • into (p_wt_were_tab-belnr, "rung,Belegnummer und

  • p_wt_were_tab-waers, "Nettobetrag aus MSEG

  • p_wt_were_tab-netwr)

  • from mseg where mblnr = wk_ekbe-belnr and

  • mjahr = wk_ekbe-gjahr and

  • zeile = wk_ekbe-buzei.

*

  • select single budat "Nachlesen der Beleg-

  • into p_wt_were_tab-datum "datums aus der MKPF

  • from mkpf where mblnr = wk_ekbe-belnr

  • and mjahr = wk_ekbe-gjahr.

*

  • p_wt_were_tab-kz_were = 'WE'.

  • p_wt_were_tab-kz_sh = ' '. "Keine Relevanz für

  • "spätere Summenbe-

  • "rechnung in Vetrags-

  • "entwicklung

  • read table p_wt_t163c "Kurzbezeichnung des

  • with key bewtp = wk_ekbe-bewtp "Bestellentwicklungs-

  • spras = sy-langu. "typs nachlesen

*

  • p_wt_were_tab-beltyp = p_wt_t163c-bewtk. "Daten in Beleg-ITAB

  • collect p_wt_were_tab. "schreiben

  • endif.

*-- Nachlesen und Verarbeiten der zugehörigen Fibu-Belege -

-


*

*-- AWTYP für den Beleg ermitteln --

if wk_ekbe-bewtp = 'E'.

wc_awtyp = 'MKPF'.

else.

wc_awtyp = 'RMRP'.

endif.

*-- Zugehörige FiBu-Belege lesen ---

wc_zw_gjahr = wk_ekbe-gjahr. "Umformatierung

refresh wt_accdoc.

call function 'AC_DOCUMENT_RECORD'

exporting

i_awtyp = wc_awtyp "Dokumenttyp

i_awref = wk_ekbe-belnr "WE-Beleg

i_aworg = wc_zw_gjahr "Geschäftsjahr

i_awsys = t000-logsys "logisches System

x_dialog = wc_dialog "keine Dialoganzeige

tables

t_documents = wt_accdoc "Tabelle mit Fibu-

exceptions "Belegen

no_reference = 1

no_document = 2

others = 3.

if sy-subrc <> 0.

endif.

*-- Fibu-Belegverarbeitung abhängig von der Art des Materialbelegs --

loop at wt_accdoc into wk_accdoc where awtyp = 'BKPF'.

clear p_wt_were_tab. "Initialisierung

*-- Lesen der Kopfdaten des Fibu-Belegs ( unabh. von Mat-Belegart ) -

select single budat waers belnr "Zusätzlich Belegdatum

into (p_wt_were_tab-datum, "Währung aus BKPF holen

p_wt_were_tab-waers,

p_wt_were_tab-belnr )

from bkpf where bukrs = wk_accdoc-bukrs and

gjahr = wk_ekbe-gjahr and

belnr = wk_accdoc-docnr.

case wk_ekbe-bewtp.

*-- Wareneingangsbeleg --

when 'E'.

select belnr dmbtr shkzg

into (p_wt_were_tab-belnr,

p_wt_were_tab-netwr,

p_wt_were_tab-kz_sh)

from bseg where bukrs = wk_accdoc-bukrs and

gjahr = wk_ekbe-gjahr and

belnr = wk_accdoc-docnr and

gvtyp = 'X'.

exit.

endselect.

p_wt_were_tab-mwstwr = 0.

p_wt_were_tab-brtwr = 0.

p_wt_were_tab-kz_were = 'WE'.

*-- Rechnungseingangsbeleg oder Nachbelastungsbeleg --

when 'Q' or 'N'.

select belnr dmbtr shkzg koart mwart

into (p_wt_were_tab-belnr, wc_betrag,

wc_shkzg, wc_koart, wc_mwart )

from bseg where bukrs = wk_accdoc-bukrs and

gjahr = wk_ekbe-gjahr and

belnr = wk_accdoc-docnr and

( koart = 'K' or

mwart = 'V' ).

if wc_mwart = 'V'.

p_wt_were_tab-mwstwr = p_wt_were_tab-mwstwr + wc_betrag.

elseif wc_koart = 'K'.

p_wt_were_tab-brtwr = p_wt_were_tab-brtwr + wc_betrag.

p_wt_were_tab-kz_sh = wc_shkzg.

endif.

endselect.

p_wt_were_tab-netwr = p_wt_were_tab-brtwr -

p_wt_were_tab-mwstwr.

p_wt_were_tab-kz_were = 'RE'.

*-- Beleg durch MR11 ( Kontenpflege ) --

when 'K'.

select belnr dmbtr shkzg

into (p_wt_were_tab-belnr,

p_wt_were_tab-netwr,

p_wt_were_tab-kz_sh )

from bseg where bukrs = wk_accdoc-bukrs and

gjahr = wk_ekbe-gjahr and

belnr = wk_accdoc-docnr and

gvtyp = 'X'.

exit.

endselect.

p_wt_were_tab-mwstwr = 0.

p_wt_were_tab-brtwr = 0.

p_wt_were_tab-kz_were = 'RE'.

endcase.

*-- WE-Beleg-unabhängige Verarbeitung --

read table p_wt_t163c "Kurzbezeichnung des

with key bewtp = wk_ekbe-bewtp "Bestellentwicklungs-

spras = sy-langu. "typs nachlesen

p_wt_were_tab-beltyp = p_wt_t163c-bewtk. "Daten in Beleg-ITAB

collect p_wt_were_tab. "schreiben

endloop. "Nächster Fibu-Beleg

endloop. "Nächster WE-Beleg

endform. "LESEN_WE_BELEG

*&----


*

*& Form ausgabe_rechnung

*&----


*

  • Ausgabe der Rechnungsdaten

*----


*

form ausgabe_rechnung.

*----


*

  • Ausgabe der Rechnungsdaten *

*----


*

wc_list_kz = cc_psrech. "Liste = Pseudorechnung

loop at wt_esll_ausg into wk_esll_ausg.

*-- Einzelzeilen -

-


*

format color col_normal intensified off.

*-- Bildung von Zwischen- und Endsummen --

wp_sum_pos = wk_esll_ausg-menge * "Gesamtsumme einer Po-

wk_esll_ausg-tbtwr. "sition ermitteln

wp_sum_srv = wp_sum_srv + wp_sum_pos. "Gesamtsumme pro Leistung

if wk_esll_ausg-srvpos = zrmstrech-srvpos. "Wenn VAO-Leistung

wp_sum_vao = wp_sum_vao + "Summe zu VAO-Summe add.

wp_sum_pos.

else. "Wenn keine VAO-Leistung

wp_sum_nrm = wp_sum_nrm + "Summe zum norm. Leistung

wp_sum_pos.

endif. "addieren

*-- Ausgabe des Erfassungsblatts der jeweiligen Leistung --

if wc_grp_kz is initial. "Bei erster Zeile

write: / wk_esll_ausg-srvpos+10(8), "Zusätzlich Ausgabe der

10 wk_esll_ausg-lblni(10). "Leistungsnummer

wc_grp_kz = 'X'. "KZ erste Zeile reseten

else. "Bei allen weiteren Zei-

write: /10 wk_esll_ausg-lblni(10). "len keine Ausgabe der

endif. "Leistungsnummer

write: 22 wk_esll_ausg-hiertxt+32(8), "Hierarchiestufe

31 wk_esll_ausg-extrow+5(5), "Leistungsnummer

37(10) wk_esll_ausg-frmval1, "Multiplikator

48(10) wk_esll_ausg-frmval2, "Länge

59(10) wk_esll_ausg-frmval3, "Breite

70(10) wk_esll_ausg-frmval4, "Tiefe

80(11) wk_esll_ausg-menge, "Menge

92 wk_esll_ausg-meins, "Einheit

97 wk_esll_ausg-tbtwr "Einzelwert

currency wk_esll_ausg-waers,

115 wp_sum_pos "Gesamtwert

currency wk_esll_ausg-waers.

*-- Fuellen der MWSt-Tabelle für die spätere --

*-- Ausgabe der Summen pro Mehrwertsteuersatz --

perform fuellen_mwst_tab tables wt_mwst_tab

wt_vao_tab

using wk_esll_ausg

  • zrmstrech-mwst_kz.

wc_mwst_kz.

format reset.

*-- Ende Leistung -

-


*

at end of srvpos. "Aufsummierung der

sum. "Kosten und Mengen

format color col_normal intensified on. "und Ausgabe

write: / text-006,

73 wk_esll_ausg-menge

unit wk_esll_ausg-meins,

  • 97 wk_esll_ausg-tbtwr

  • currency wk_esll_ausg-waers,

115 wp_sum_srv

currency wk_esll_ausg-waers.

uline.

format reset.

wp_sum_srv = 0. "Summenzähler pro

clear wc_grp_kz. "Leistung und Kz

endat. "Gruppenwechsel wieder

"zurücksetzen

*-- Ende einer neuen Bestellung -

-


*

at end of ebeln.

wp_sum_net = wp_sum_vao + wp_sum_nrm. "Gesamtsumme Netto

format color col_total intensified off.

write:/ text-007, "Summen netto 'Normal'

115 wp_sum_nrm

currency wk_esll_ausg-waers,

/ text-008,

115 wp_sum_vao "Summe netto VAO

currency wk_esll_ausg-waers.

uline.

format color col_total intensified on.

write:/ text-009,

115 wp_sum_net "Summe netto gesamt

currency wk_esll_ausg-waers.

clear: wp_sum_vao, wp_sum_nrm. "Summen zurücksetzen

*-- MwSt-Tabelle mit den verschieden Summen pro Satz ausgeben --

sort wt_mwst_tab by mwst_satz. "Sortierung nach MWST-

"Satz

loop at wt_mwst_tab into wk_mwst_tab.

*-- Berechnung der Mehrwertsteuer aus der Summe des Betrags für

*-- den jeweiligen Mehrwertsteuersatz

wk_mwst_tab-wert = wk_mwst_tab-wert / 100

  • wk_mwst_tab-mwst_satz.

write: / text-010, "MwSt-Satz

6(11) wk_mwst_tab-mwst_satz,

17 text-012, "Betrag

115 wk_mwst_tab-wert

currency wk_esll_ausg-waers.

wp_sum_str = wp_sum_str + "Gesamt-MwSt-Betrag auf-

wk_mwst_tab-wert. "summieren

endloop.

wp_sum_brt = wp_sum_net + wp_sum_str. "Gesamt-Brutto berechnen

write:/ text-011, "und ausgeben

115 wp_sum_brt

currency wk_esll_ausg-waers.

uline.

format reset.

endat.

endloop.

endform. " ausgabe_rechnung

*&----


*

*& Form ausgabe_verlauf

*&----


*

  • Ausgabe der Vertragsverlauf

*----


*

form ausgabe_verlauf.

*----


*

  • Ausgabe der Vertragsentwicklung *

*----


*

wc_list_kz = cc_verlauf. "Liste = Vertragsablauf

loop at wt_esll_aus1 into wk_esll_aus1.

*-- Beginn eines neuen Leistungserfassungsblatt -

-


*

at new lblni.

*-- Lesen der WE- und RE-Belege zu einem Erfassungsblatt

perform lesen_we_beleg tables wt_were_tab

wt_t163c

using wk_esll_aus1-ebeln

wk_esll_aus1-ebelp

wk_esll_aus1-lblni

wk_esll_aus1-bukrs.

endat.

*-- Ende eines Erfassungsblatts -

-


*

at end of lblni.

format color col_normal intensified on.

write: / text-018, 12 wk_esll_aus1-lblni, "Ausgabe Blattnummer

cc_blank, cc_blank(24).

format reset.

*-- Ausgabe der einzelnen Belegdaten --

format color col_normal intensified off.

loop at wt_were_tab into wk_were_tab.

*-- Bei den Nicht-WE-Belegen ( Rechnung / Kontenpflege ) diejenigen mit*

*-- Soll-Kennzeichen negativ setzen ( Für korrekte Ausgabe und Summen- *

*-- bildung -

-


*

if wk_were_tab-kz_sh = 'S' and

wk_were_tab-beltyp <> 'WE'.

wk_were_tab-netwr = wk_were_tab-netwr * ( -1 ).

wk_were_tab-brtwr = wk_were_tab-brtwr * ( -1 ).

wk_were_tab-mwstwr = wk_were_tab-mwstwr * ( -1 ).

endif.

*-- Bei den WE-Belegen diejenigen mit Haben-Kennzeichen negativ --*

*-- setzen ( Für korrekte Ausgabe und Summenbildung ) -

-


*

if wk_were_tab-kz_sh = 'H' and

wk_were_tab-beltyp = 'WE'.

wk_were_tab-netwr = wk_were_tab-netwr * ( -1 ).

wk_were_tab-brtwr = wk_were_tab-brtwr * ( -1 ).

wk_were_tab-mwstwr = wk_were_tab-mwstwr * ( -1 ).

endif.

write: / wk_were_tab-beltyp, "Kz WE oder RE

8 wk_were_tab-belnr, "Belegnummer

22 wk_were_tab-datum, "Belegdatum

44 wk_were_tab-waers, "Waehrung

53 wk_were_tab-netwr "Nettowert

currency wk_were_tab-waers.

if wk_were_tab-kz_were = 'RE'. "Bei WE-Beleg keine

write: 73 wk_were_tab-mwstwr "Steuer und Gesamtsumme

currency wk_were_tab-waers. "ausgeben (Felder

"sind zwar immer leer

"es sollen aber kein

write: 92 wk_were_tab-brtwr "0,0 angedruckt werden)

currency wk_were_tab-waers.

else.

write: cc_blank(38). "Dann Filler ausgeben

"wegen Listfarbe

endif.

*-- Differenz aus Gesamtsumme Rechnung und den Summen der einzelnen

*-- Belege berechnen. ( Nur die RE-Belege berücksichtigen ).

if not wk_were_tab-kz_sh is initial and

wk_were_tab-beltyp <> 'WE'.

wp_sum_net = wp_sum_net - wk_were_tab-netwr.

wp_sum_brt = wp_sum_brt - wk_were_tab-brtwr.

wp_sum_str = wp_sum_str - wk_were_tab-mwstwr.

endif.

endloop.

clear wk_were_tab. "Tabelle nach Ausgabe

refresh wt_were_tab. "wieder löschen

skip 1.

format reset.

endat.

*-- Beginn einer neuen Bestellung -

-


*

at end of ebeln.

uline (107).

format color col_total intensified on.

write: / text-017, "Ausgabe der Gesamtsumme

54 wp_sum_net currency wk_were_tab-waers,

74 wp_sum_str currency wk_were_tab-waers,

93 wp_sum_brt currency wk_were_tab-waers.

uline (107).

format reset.

endat.

endloop.

endform. " ausgabe_verlauf

*&----


*

*& Form kopf_rechnung

*&----


*

  • Ausgabe des Kopfs für die Rechnung

*----


*

  • -->P_EBELN Bestellung

  • -->P_WAERS Waehrung in der die Rechnung ausgegeben wird

*----


*

form kopf_rechnung using p_ebeln

p_waers.

*-- Variablen-Definition -

-


*

data wc_lifnr type ekko-lifnr.

select single lifnr into wc_lifnr from ekko "Lieferant der Bestellung

where ebeln = p_ebeln. "nachlesen

format color col_heading intensified on.

uline.

write: / text-001, cc_blank, cc_blank(54).

format color col_heading intensified off.

write: / text-002,

18 wc_lifnr, cc_blank, cc_blank(41),

/ text-003,

18 p_ebeln,

106 text-004,

120 sy-datum,

130 cc_blank(1).

uline.

write: / text-005,

/105 p_waers,

121 p_waers,

126 cc_blank(5).

uline.

format reset.

endform. " kopf_rechnung

*&----


*

*& Form kopf_verlauf

*&----


*

  • Kopf für die Ausgabe des Vertragsverlaufs

*----


*

form kopf_verlauf.

format color col_heading intensified off.

write: / text-014, sy-pagno.

uline (107).

write: / text-015.

uline (107).

write: / text-016,

44 zrmstrech-waers, "Vorgabewaehrung ( gleich

"der Hauswaehrung )

54 wp_sum_net currency zrmstrech-waers, "Summe Netto aus

"Rechnung

74 wp_sum_str currency zrmstrech-waers, "Summe Steuer aus

"Rechnung

93 wp_sum_brt currency zrmstrech-waers. "Summe Brutto aus

"Rechnung

skip 1.

format reset.

endform. " kopf_verlauf

*&----


*

*& Form lesen_mwskz

*&----


*

  • text

*----


*

  • -->P_P_BUKRS text

  • -->P_ZRMSTRECH_MWST_KZ text

  • <--P_WP_MWST_KZ text

*----


*

form lesen_mwskz using p_bukrs

p_mwst_kz

changing p_mwst_wert.

call function 'Z_RM_LESEN_MWSKZ' "für MWST-Kz aus Leis-

exporting "tungszeile

i_bukrs = p_bukrs

i_mwskz = p_mwst_kz

importing

e_percentage = p_mwst_wert

exceptions

reading_mwskz = 1

reading_pricing_data = 2

reading_condition_types = 3

determine_txjcd = 4

reading_tax_accounts = 5

error_alv_call = 6

reading_ttxd = 7

txdat_necessary = 8

others = 9.

if sy-subrc <> 0.

endif.

endform. " lesen_mwskz

*&----


*

*& Form umsetzen_waehrung

*&----


*

  • Die Tabelle für die Rechnungsausgabe wird in der gewünschten

  • Währung geliefert. Die Ausgabe des Vertragsverlaufs soll jedoch

  • immer in Hauswaehrung erfolgen. In diesem Unterprogamm werden

  • Waehrungsfelder der Datentabellen auf die Hauswährung umgerech-

  • net. Weiter werden die Gesamtsummen aus der Rechnung, die auch

  • nochmal im Kopf des Vertragsverlauf stehen, auch in Hauswaehrung

  • umgerechnet.

*----


*

  • -->P_WT_ESLL_AUS1 Datentabelle für Vertragsverlauf

  • -->P_WT_ESLL_AUSG Datentabelle für Rechnungsausgabe ( wird bei

  • Vertragsverlauf als Hilfstabelle benötigt )

  • -->P_WT_T001 Buchungskreistabelle ( für HW des Bukrs )

  • <->P_HWAERS Aktuelle HW der bearbeiteten Bestellung

  • <->P_SUM_STR Summe der Steuer die in HW umgerechnet wird

  • <->P_SUM_NET Nettosumme die in HW umgerechnet wird

  • <->P_SUM_BRT Bruttosumme der Steuer die in HW umgerechnet

  • wird

*----


*

form umsetzen_waehrung tables p_wt_esll_ausg structure wk_esll_ausg

p_wt_esll_aus1 structure wk_esll_aus1

p_wt_t001 structure t001

changing p_hwaers

p_sum_str

p_sum_net

p_sum_brt.

*-- Variablendefinition -

-


*

data: wk_t001 type t001.

*-- Ersten Satz lesen um Bestell-Nummer zu ermitteln ( Da in allen --*

*-- Sätzen die selbe Bestellung steht ist dies ausreichend ) --*

read table p_wt_esll_ausg index 1.

read table p_wt_t001 into wk_t001 "Hauswähung zum Bukrs

with key bukrs = p_wt_esll_ausg-bukrs. "aus ITAB lesen

p_hwaers = wk_t001-waers.

*-- Alle Währungsfelder der ersten Datentabelle umsetzen -

-


*

loop at p_wt_esll_ausg.

if p_wt_esll_ausg-waers <> wk_t001-waers.

perform umsetzen_waers using p_wt_esll_ausg-waers

wk_t001-waers

changing p_wt_esll_ausg-netwr.

perform umsetzen_waers using p_wt_esll_ausg-waers

wk_t001-waers

changing p_wt_esll_ausg-tbtwr.

modify p_wt_esll_ausg.

endif.

endloop.

*-- Alle Währungsfelder der zweiten Datentabelle umsetzen -

-


*

loop at p_wt_esll_aus1.

if p_wt_esll_aus1-waers <> wk_t001-waers.

perform umsetzen_waers using p_wt_esll_aus1-waers

wk_t001-waers

changing p_wt_esll_aus1-netwr.

perform umsetzen_waers using p_wt_esll_aus1-waers

wk_t001-waers

changing p_wt_esll_aus1-tbtwr.

modify p_wt_esll_aus1.

endif.

endloop.

*-- Die drei Summenfelder umsetzen -

-


*

perform umsetzen_waers using p_wt_esll_aus1-waers

wk_t001-waers

changing p_sum_str.

perform umsetzen_waers using p_wt_esll_aus1-waers

wk_t001-waers

changing p_sum_net.

perform umsetzen_waers using p_wt_esll_aus1-waers

wk_t001-waers

changing p_sum_brt.

endform. " umsetzen_waehrung

*&----


*

*& Form umsetzen_waers

*&----


*

  • Waehrungsumrechnung für ein Währungsfeld

*----


*

  • -->P_P_WT_ESLL_AUSG_WAERS Quell-Waehrung

  • -->P_WK_T001_WAERS Ziel-Waehrung

  • <--P_P_WT_ESLL_AUSG_NETWR Umzurechnender Wert

*----


*

form umsetzen_waers using p_waers_von

p_waers_nach

changing p_betrag.

call function 'CONVERT_TO_LOCAL_CURRENCY'

exporting

date = sy-datum

foreign_amount = p_betrag

foreign_currency = p_waers_von

local_currency = p_waers_nach

importing

local_amount = p_betrag

exceptions

no_rate_found = 1

overflow = 2

no_factors_found = 3

no_spread_found = 4

derived_2_times = 5

others = 6.

if sy-subrc <> 0.

endif.

Former Member
0 Kudos

I am using G3 as the Tax Code and it isn't working correctly. The GST calculates but the PST does not. usind transaction fb60

can you help

thanks

Shahid