Fehlende Einkaufspreise anlegen
Beim Verarbeiten von Lieferantenrechnungen werden - auf Nachfrage - neuer Einkaufspreise angelegt. Beim Erstellen von Folgebelegen (Bestellungen -> Wareneingang -> Rechnungen) kann es sein, dass in Lieferantenrechnungen geänderte Einkaufspreise nicht neu angelegt wurden.
Die nachstehende Formel durchsucht alle Lieferantenrechnungen und legt neue Einkaufspreise an, wenn diese Preise a) von bestehenden Einkaufspreisen abweichen und b) neuer sind als die vorhandenen Einkaufspreise.
Nach Ablauf der Formel müssen allenfalls vom Einkaufspreis abweichende Einstandswerte neu berechnet werden (siehe entsprechender Menüpunkt).
Die Formel wird auf einen markierten Datensatz der Tabelle “Land” angewendet:
//28.12.2014 hs/net
//Neue EPs werden im aktuell geladenene Mandanten und zwar aufgrund von
//Lieferantenrechnungen, deren Artikel in den Bestellbelegzeilen EPs haben, die als EPs aber fehlen.
//ACHTUNG: nach Ablauf dieser Formel allenfalls die Einstandswerte neu berechnen.
//Diese Formel auf ein einziges markiertes Land anwenden!!!
C_LONGINT(l_1;l_2;l_3)
l_1:=0 //anzahl neuer ek-preise
l_2:=0 //anzahl neuer, aber nicht gesicherter ek-preise (fehler beim sichern)
l_3:=0 //anzahl bereits existierender ek-preise (nur zur info und zu testzwecken)
//weil ein artikel im verlauf der zeit mehrere einkaufspreise gehabt haben kann (teuerung)
//loopen wir durch die lieferantenrechnungen mit aufsteigenden belegdatümmern
ARRAY TEXT(at_Transfer_Values;0) //wichtig: wird in “EinkPreis_Einstandsw_Input_Set” gecheckt
ARRAY LONGINT(al_Bestellbeleg_ID;0)
ARRAY DATE(ad_Belegdatum;0)
ARRAY LONGINT(al_Waehrung_ID;0)
QUERY([s2_Bestellbeleg];[s2_Bestellbeleg]m_Betrieb=<>l_Mandant_Betrieb_ID;*)
QUERY([s2_Bestellbeleg]; & ;[s2_Bestellbeleg]s_Belegtyp=<>c20_BestellBTyp_Rechnung)
SELECTION TO ARRAY([s2_Bestellbeleg]i_ID;al_Bestellbeleg_ID;[s2_Bestellbeleg]s_Belegdatum;ad_Belegdatum;[s2_Bestellbeleg]r_Waehrung;al_Waehrung_ID)
UNLOAD RECORD([s2_Bestellbeleg])
REDUCE SELECTION([s2_Bestellbeleg];0)
SORT ARRAY(ad_Belegdatum;al_Bestellbeleg_ID;al_Waehrung_ID;>) //—ascending
C_LONGINT(l_Counter;l_Loop)
C_LONGINT(l_Konto_ID;l_KST_ID;l_KTR_ID;l_MWSt_ID_1)
C_TEXT(t_Einheit)
For (l_Counter;1;Size of array(al_Bestellbeleg_ID))
QUERY([r2_Bestellbelegzeile];[r2_Bestellbelegzeile]m_Bestellbeleg=al_Bestellbeleg_ID{l_Counter};*)
QUERY([r2_Bestellbelegzeile]; & ;[r2_Bestellbelegzeile]r_Artikel>0;*)
QUERY([r2_Bestellbelegzeile]; & ;[r2_Bestellbelegzeile]s_Ansatz>0) //—sonst macht’s keinen sinn
For (l_Loop;1;Records in selection([r2_Bestellbelegzeile]))
GOTO SELECTED RECORD([r2_Bestellbelegzeile];l_Loop)
RELATE ONE([r2_Bestellbelegzeile]r_Artikel)
If ([s0_Artikel]r_Standard_Aufwandkonto>0)
l_Konto_ID:=[s0_Artikel]r_Standard_Aufwandkonto
l_KST_ID:=[s0_Artikel]r_Standard_Aufwand_KST
l_KTR_ID:=[s0_Artikel]r_Standard_Aufwand_KTR
Else
l_Konto_ID:=[r2_Bestellbelegzeile]r_Aufwandkonto
l_KST_ID:=[r2_Bestellbelegzeile]r_Kostenstelle
l_KTR_ID:=[r2_Bestellbelegzeile]r_Kostentraeger
End if
If ([s0_Artikel]r_Standard_Vorsteuer>0)
l_MWSt_ID_1:=[s0_Artikel]r_Standard_Vorsteuer
Else
l_MWSt_ID_1:=[r2_Bestellbelegzeile]r_Mehrwertsteuer_Code
End if
If ([r2_Bestellbelegzeile]c_Einheit#“”) //bei der “einheit” vermutlich umgekehrt!!!
t_Einheit:=[r2_Bestellbelegzeile]c_Einheit
Else
t_Einheit:=[s0_Artikel]c_Recheneinheit__Einkauf
End if
UNLOAD RECORD([s0_Artikel])
Case of
: (l_Konto_ID<1)
: (l_MWSt_ID_1=0)
: (t_Einheit=“”)
Else
//see also “Einkaufspreis_Exists” and “EinkPreis_Is_Unique”
//QUERY([s2_Einkaufspreis];[s2_Einkaufspreis]i_ID#$l_Einkaufspreis_ID;*)
QUERY([s2_Einkaufspreis];[s2_Einkaufspreis]m_Artikel=[r2_Bestellbelegzeile]r_Artikel;*)
//QUERY([s2_Einkaufspreis]; & ;[s2_Einkaufspreis]m_Einkaufsartikelgruppe=$l_EinkArtikelGruppe_ID;*)
QUERY([s2_Einkaufspreis]; & ;[s2_Einkaufspreis]m_Auftragsdossier=0;*)
QUERY([s2_Einkaufspreis]; & ;[s2_Einkaufspreis]m_Adresse=0;*)
QUERY([s2_Einkaufspreis]; & ;[s2_Einkaufspreis]m_Lieferantengruppe=0;*)
QUERY([s2_Einkaufspreis]; & ;[s2_Einkaufspreis]r_Waehrung=al_Waehrung_ID{l_Counter};*)
QUERY([s2_Einkaufspreis]; & ;[s2_Einkaufspreis]c_Recheneinheit=t_Einheit;*)
QUERY([s2_Einkaufspreis]; & ;[s2_Einkaufspreis]s_Nettopreis=[r2_Bestellbelegzeile]s_Ansatz__in__FW;*)
QUERY([s2_Einkaufspreis]; & ;[s2_Einkaufspreis]s_Menge__pro__Ansatz=1;*)
QUERY([s2_Einkaufspreis]; & ;[s2_Einkaufspreis]r_MwSt_Satz=l_MWSt_ID_1;*)
QUERY([s2_Einkaufspreis]; & ;[s2_Einkaufspreis]s_Gueltig__ab__Datum<=ad_Belegdatum{l_Counter})
//QUERY([s2_Einkaufspreis]; & ;[s2_Einkaufspreis]s_Gueltig__ab__Menge<=[r2_Bestellbelegzeile]s_Menge) //nicht gut!!!
If (Records in selection([s2_Einkaufspreis])<1) //—einkaufspreis existiert noch nicht
CREATE RECORD([s2_Einkaufspreis]) //TRSEinkaufspreis
[s2_Einkaufspreis]i_ID:=IDGet (->[s2_Einkaufspreis])
[s2_Einkaufspreis]m_Artikel:=[r2_Bestellbelegzeile]r_Artikel
[s2_Einkaufspreis]m_Betrieb:=<>l_Mandant_Betrieb_ID
[s2_Einkaufspreis]r_Aufwandkonto:=l_Konto_ID
[s2_Einkaufspreis]r_Aufwand_KST:=l_KST_ID
[s2_Einkaufspreis]r_Aufwand_KTR:=l_KTR_ID
[s2_Einkaufspreis]s_Aufwandkonto__aenderbar:=<>b_EK_Kto_Aenderbar
[s2_Einkaufspreis]s_KST__aenderbar:=<>b_EK_KST_Aenderbar
[s2_Einkaufspreis]s_KTR__aenderbar:=<>b_EK_KTR_Aenderbar
[s2_Einkaufspreis]r_MwSt_Satz:=l_MWSt_ID_1
[s2_Einkaufspreis]s_MwSt__aenderbar:=<>b_EK_MwSt_Aenderbar
[s2_Einkaufspreis]r_Waehrung:=al_Waehrung_ID{l_Counter}
[s2_Einkaufspreis]c_Recheneinheit:=t_Einheit
[s2_Einkaufspreis]s_Nettopreis:=Round([r2_Bestellbelegzeile]s_Ansatz__in__FW;2)
EinkPreis_Brutto_Set //[s2_Einkaufspreis]s_Bruttopreis:=0
[s2_Einkaufspreis]s_Gueltig__ab__Datum:=ad_Belegdatum{l_Counter}
[s2_Einkaufspreis]s_Gueltig__ab__Menge:=0
[s2_Einkaufspreis]s_Ist__alte__Referenz:=False
[s2_Einkaufspreis]s_Ist__Referenzpreis:=False
[s2_Einkaufspreis]s_Kurzbemerkung:=“”
[s2_Einkaufspreis]s_Menge__pro__Ansatz:=1
[s2_Einkaufspreis]s_Mindest_Bestellmenge:=0
EinkPreis_Basispreis_Set
[s2_Einkaufspreis]s_Ist__Basispreis:=(r_Basis_Netto=0)
EinkPreis_BasisProzent_Set //[s2_Einkaufspreis]s_Prozentdifferenz__zur__Basis:=0
[s2_Einkaufspreis]s_Runden__auf__Menge:=0
[s2_Einkaufspreis]s_Kurzbemerkung:=“Mit Formel aus Lieferantenrechnung vom “+String(ad_Belegdatum{l_Counter})+” erzeugt.“
[s2_Einkaufspreis]s_Einstandswert:=0 //—see TRSEinkaufspreis
RecordModification_Save (“n”;“f”;->[s2_Einkaufspreis]z1_Erstellt_am;->[s2_Einkaufspreis]z2_Erstellt_um;->[s2_Einkaufspreis]z3_Erstellt_mit;->[s2_Einkaufspreis]z4_Erstellt_von)
//If (Not(EinkPreis_Is_Unique ))
// //$t_Error:=“Ein Einkaufspreis mit diesen Kriterien ist bereits vorhanden…”
//Else
Error:=0
SAVE RECORD([s2_Einkaufspreis])
If (Error=0)
l_1:=l_1+1
Else
l_2:=l_2+1 //fehler
//$t_Error:=errTextEinkaufspreis (Error)
End if
//End if
Else //ek-preis existiert bereits
l_3:=l_3+1
End if
End case
End for //zeilen-loop
End for //bestellbeleg-loop
UNLOAD RECORD([r2_Bestellbelegzeile])
REDUCE SELECTION([r2_Bestellbelegzeile];0)
ARRAY LONGINT(al_Bestellbeleg_ID;0)
ARRAY DATE(ad_Belegdatum;0)
ARRAY LONGINT(al_Waehrung_ID;0)
ALERT(“Neu angelegte Einkaufspreise: “+String(l_1)+<>CR+“Nicht angelegte Einkaufspreise (Fehler): “+String(l_2)+<>CR+“Bereits vorhandene Einkaufspreise: “+String(l_3))
//—–ende der formel