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