11-22-2006 6:44 AM
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
11-22-2006 6:46 AM
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
11-22-2006 6:52 AM
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.
09-18-2007 5:30 PM
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