<?xml version="1.0" encoding="UTF-8"?>
<Export generator="Cache" version="25" zv="Cache for Windows (x86-64) 2011.1.2 (Build 701U)" ts="2011-12-06 08:26:47">
<Class name="DBAgrofreshEK.AF.BestellungsKopfAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61391,37064.943349</TimeCreated>

<Query name="ListeBestByMandant">
<Description>
Query GetAdrAuftraege(MandantOid As %String) As %SQLQuery</Description>
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,LagerOid:%String="",AbAnnahmedat:%Date=0</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT  %ID, Adresse->Adresse As Adresse, Adresse As Kreditor, Adresse->Adresse->Adressnummer As Adressnummer,
	        Adresse->Adresse->Name As Name, Adresse->Adresse->Plz As Plz, Adresse->Adresse->Ort As Ort, 
	        CodeVerarbeitung, Verbucht, Bestellstatus
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid  
			AND (NVL(:LagerOid,'')='' OR Lagerort=:LagerOid)
			AND (NVL(:AbAnnahmedat,TO_DATE(0))=TO_DATE(0) OR NVL(Annahmedatum,TO_DATE(0)) >= :AbAnnahmedat)
            ORDER BY Bestellstatus, NVL(Abrechnungsdatum,TO_DATE(0)) DESC, NVL(AbrechnungsNr,0) DESC, NVL(Annahmedatum,TO_DATE(0)) DESC, NVL(AnnahmeNr,0) DESC, Bestelldatum DESC, BestellungsNr DESC]]></SqlQuery>
</Query>

<Query name="ListeBestBaumLaufend">
<Description>
Query GetAdrAuftraegeLaufend(MandantOid As %String) As %SQLQuery</Description>
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,WarenEingang:%Boolean,LagerOid:%String=""</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT DISTINCT BY (Adresse->Adresse) Adresse->Adresse As Adresse, Adresse As Kreditor, Adresse->Adresse->Adressnummer As Adressnummer,
	        Adresse->Adresse->Name As Name, Adresse->Adresse->Plz As Plz, Adresse->Adresse->Ort As Ort, 
	        CodeVerarbeitung, Verbucht, Bestellstatus
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid  AND (NVL(:LagerOid,'')='' OR Lagerort=:LagerOid)
			AND NVL(Verbucht,0) = 0
			AND NVL(WarenEingang,0) = :WarenEingang]]></SqlQuery>
</Query>

<Query name="ListeBestBaumAll">
<Description>
Query GetAdrAuftraege(MandantOid As %String) As %SQLQuery</Description>
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,WarenEingang:%Boolean,LagerOid:%String="",BisDatumArchiv:%Date=0</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT DISTINCT BY (Adresse->Adresse) Adresse->Adresse As Adresse, Adresse As Kreditor, Adresse->Adresse->Adressnummer As Adressnummer,
	        Adresse->Adresse->Name As Name, Adresse->Adresse->Plz As Plz, Adresse->Adresse->Ort As Ort, 
	        CodeVerarbeitung, Verbucht, Bestellstatus
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid  
			AND (NVL(:LagerOid,'')='' OR Lagerort=:LagerOid)
			AND ((NVL(:BisDatumArchiv,TO_DATE(0))=TO_DATE(0)) OR (NVL(Verbucht,0) = 0) OR (Abrechnungsdatum >= {d :BisDatumArchiv}))
			AND NVL(WarenEingang,0) = :WarenEingang]]></SqlQuery>
</Query>

<Query name="ListeBestBaumOffenBE">
<Description>
Query GetAdrAuftraegeLaufend(MandantOid As %String) As %SQLQuery</Description>
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,WarenEingang:%Boolean,LagerOid:%String="",MitMutierten:%Boolean=1</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT DISTINCT BY (Adresse->Adresse) Adresse->Adresse As Adresse, Adresse As Kreditor, Adresse->Adresse->Adressnummer As Adressnummer,
	        Adresse->Adresse->Name As Name, Adresse->Adresse->Plz As Plz, Adresse->Adresse->Ort As Ort, 
	        CodeVerarbeitung, Verbucht, Bestellstatus
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid  AND (NVL(:LagerOid,'')='' OR Lagerort=:LagerOid) AND (NVL(Bestellstatus,0) < 2 OR (Bestellstatus = 2 AND (:MitMutierten<>0 AND BearbeitungsstatusBE = DBAgrofresh.Konst_BearbeitungsstatusMutiert())))
			AND NVL(Verbucht,0) = 0
			AND NVL(WarenEingang,0) = :WarenEingang]]></SqlQuery>
</Query>

<Query name="ListeBestBaumOffenAN">
<Description>
Query GetAdrAuftraegeLaufend(MandantOid As %String) As %SQLQuery</Description>
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,WarenEingang:%Boolean,LagerOid:%String="",MitMutierten:%Boolean=1</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT DISTINCT BY (Adresse->Adresse) Adresse->Adresse As Adresse, Adresse As Kreditor, Adresse->Adresse->Adressnummer As Adressnummer,
	        Adresse->Adresse->Name As Name, Adresse->Adresse->Plz As Plz, Adresse->Adresse->Ort As Ort, 
	        CodeVerarbeitung, Verbucht, Bestellstatus
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid  AND (NVL(:LagerOid,'')='' OR Lagerort=:LagerOid) AND (NVL(Bestellstatus,0) < 3 OR (Bestellstatus = 3 AND (:MitMutierten<>0 AND BearbeitungsstatusAS = DBAgrofresh.Konst_BearbeitungsstatusMutiert())))
			AND NVL(Verbucht,0) = 0
			AND NVL(WarenEingang,0) = :WarenEingang]]></SqlQuery>
</Query>

<Query name="ListeBestBaumMutAS">
<Description>
Query ListeBestByMandantMutAS(MandantOid As %String) As %SQLQuery</Description>
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,WarenEingang:%Boolean,LagerOid:%String=""</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT DISTINCT BY (Adresse->Adresse) Adresse->Adresse As Adresse, Adresse As Kreditor, Adresse->Adresse->Adressnummer As Adressnummer,
	        Adresse->Adresse->Name As Name, Adresse->Adresse->Plz As Plz, Adresse->Adresse->Ort As Ort, 
	        CodeVerarbeitung, Verbucht, Bestellstatus
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid  AND (NVL(:LagerOid,'')='' OR Lagerort=:LagerOid) AND 
			Bestellstatus = DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() AND BearbeitungsstatusAS = DBAgrofresh.Konst_BearbeitungsstatusMutiert()
			AND NVL(Verbucht,0) = 0
			AND NVL(WarenEingang,0) = :WarenEingang]]></SqlQuery>
</Query>

<Query name="ListeBestBaumMutAR">
<Description>
Query GetAdrAuftraegeLaufend(MandantOid As %String) As %SQLQuery</Description>
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,WarenEingang:%Boolean,LagerOid:%String=""</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT DISTINCT BY (Adresse->Adresse) Adresse->Adresse As Adresse, Adresse As Kreditor, Adresse->Adresse->Adressnummer As Adressnummer,
	        Adresse->Adresse->Name As Name, Adresse->Adresse->Plz As Plz, Adresse->Adresse->Ort As Ort, 
	        CodeVerarbeitung, Verbucht, Bestellstatus
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid  AND (NVL(:LagerOid,'')='' OR Lagerort=:LagerOid) AND 
			Bestellstatus = DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() AND BearbeitungsstatusAR = DBAgrofresh.Konst_BearbeitungsstatusMutiert()
			AND NVL(Verbucht,0) = 0
			AND NVL(WarenEingang,0) = :WarenEingang]]></SqlQuery>
</Query>

<Query name="ListeBestBaumTAS">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,WarenEingang:%Boolean,LagerOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT DISTINCT BY (Adresse->Adresse) Adresse->Adresse As Adresse, Adresse As Kreditor, Adresse->Adresse->Adressnummer As Adressnummer,
	        Adresse->Adresse->Name As Name, Adresse->Adresse->Plz As Plz, Adresse->Adresse->Ort As Ort, 
	        CodeVerarbeitung, Verbucht, Bestellstatus
	 		FROM DBAgrofreshEK.BestellungsKopf Kopf
			WHERE Mandant = :MandantOid  AND (NVL(:LagerOid,'')='' OR Lagerort=:LagerOid) AND 
			((NVL(Bestellstatus,0) < 3) OR ((NVL(BearbeitungsstatusAS,0) = DBAgrofreshEK.Konst_BearbeitungsstatusTeillieferung()) 
				AND (NVL((SELECT COUNT(%ID) FROM DBAgrofreshEK.Bestellungspos 
		 		WHERE Bestellungskopf = Kopf.ID AND NVL(TeillieferNr,0) = 0),0) > 0))) 
			AND	NVL(Bestellstatus,0) < DBAgrofreshEK.Konst_BestellungsStatusAbrechnung()
			AND NVL(Verbucht,0) = 0
			AND NVL(WarenEingang,0) = :WarenEingang]]></SqlQuery>
</Query>

<Query name="ListeBestByKrediLaufend">
<Description>
Query GetAuftraegeLaufend(MandantOid As %String, KreditorOid As %String) As %SQLQuery</Description>
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,KreditorOid:%String,WarenEingang:%Boolean,LagerOid:%String=""</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Adresse->Adresse As Adresse, Adresse->Adresse->Adressnummer As Adressnummer,
	        CodeVerarbeitung, Abrechnungsdatum, Annahmedatum, Bestelldatum,
	        Bestellstatus, StatusAutoVerarbeitung, AbrechnungsNr, AnnahmeNr, BestellungsNr,
	        Verbucht
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid AND Adresse = :KreditorOid
			AND NVL(Verbucht,0) = 0  AND (NVL(:LagerOid,'')='' OR Lagerort=:LagerOid)
			AND NVL(WarenEingang,0) = :WarenEingang
			ORDER BY Verbucht, Bestellstatus, NVL(Abrechnungsdatum,TO_DATE(0)) DESC, NVL(AbrechnungsNr,0) DESC, NVL(Annahmedatum,TO_DATE(0)) DESC, NVL(AnnahmeNr,0) DESC, Bestelldatum DESC, BestellungsNr DESC]]></SqlQuery>
</Query>

<Query name="ListeBestByKrediOffenAN">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,KreditorOid:%String,WarenEingang:%Boolean,LagerOid:%String="",MitMutierten:%Boolean=1</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Adresse->Adresse As Adresse, Adresse->Adresse->Adressnummer As Adressnummer,
	        CodeVerarbeitung, Abrechnungsdatum, Annahmedatum, Bestelldatum,
	        Bestellstatus, StatusAutoVerarbeitung, AbrechnungsNr, AnnahmeNr, BestellungsNr,
	        Verbucht
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid AND Adresse = :KreditorOid
			AND NVL(Verbucht,0) = 0 AND (NVL(Bestellstatus,0) < 3 OR (Bestellstatus = 3 AND (:MitMutierten<>0 AND BearbeitungsstatusAS = DBAgrofresh.Konst_BearbeitungsstatusMutiert()))) AND (:LagerOid='' OR Lagerort=:LagerOid)
			AND NVL(WarenEingang,0) = :WarenEingang
			ORDER BY Bestellstatus, NVL(Abrechnungsdatum,TO_DATE(0)) DESC, NVL(AbrechnungsNr,0) DESC, NVL(Annahmedatum,TO_DATE(0)) DESC, NVL(AnnahmeNr,0) DESC, Bestelldatum DESC, BestellungsNr DESC]]></SqlQuery>
</Query>

<Query name="ListeBestByKrediOffenBE">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,KreditorOid:%String,WarenEingang:%Boolean,LagerOid:%String="",MitMutierten:%Boolean=1</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Adresse->Adresse As Adresse, Adresse->Adresse->Adressnummer As Adressnummer,
	        CodeVerarbeitung, Abrechnungsdatum, Annahmedatum, Bestelldatum,
	        Bestellstatus, StatusAutoVerarbeitung, AbrechnungsNr, AnnahmeNr, BestellungsNr,
	        Verbucht
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid AND Adresse = :KreditorOid
			AND NVL(Verbucht,0) = 0 AND (NVL(Bestellstatus,0) < 2 OR (Bestellstatus = 2 AND (:MitMutierten<>0 AND BearbeitungsstatusBE = DBAgrofresh.Konst_BearbeitungsstatusMutiert()))) AND (:LagerOid='' OR Lagerort=:LagerOid)
			AND NVL(WarenEingang,0) = :WarenEingang
			ORDER BY Bestellstatus, NVL(Abrechnungsdatum,TO_DATE(0)) DESC, NVL(AbrechnungsNr,0) DESC, NVL(Annahmedatum,TO_DATE(0)) DESC, NVL(AnnahmeNr,0) DESC, Bestelldatum DESC, BestellungsNr DESC]]></SqlQuery>
</Query>

<Query name="ListeBestByKrediMutAS">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,KreditorOid:%String,WarenEingang:%Boolean,LagerOid:%String="",MitMutierten:%Boolean=1</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Adresse->Adresse As Adresse, Adresse->Adresse->Adressnummer As Adressnummer,
	        CodeVerarbeitung, Abrechnungsdatum, Annahmedatum, Bestelldatum,
	        Bestellstatus, StatusAutoVerarbeitung, AbrechnungsNr, AnnahmeNr, BestellungsNr,
	        Verbucht
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid AND Adresse = :KreditorOid
			AND NVL(Verbucht,0) = 0 AND (:LagerOid='' OR Lagerort=:LagerOid) AND 
			Bestellstatus = DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() AND BearbeitungsstatusAS = DBAgrofresh.Konst_BearbeitungsstatusMutiert()
			AND NVL(WarenEingang,0) = :WarenEingang
			ORDER BY Bestellstatus, NVL(Abrechnungsdatum,TO_DATE(0)) DESC, NVL(AbrechnungsNr,0) DESC, NVL(Annahmedatum,TO_DATE(0)) DESC, NVL(AnnahmeNr,0) DESC, Bestelldatum DESC, BestellungsNr DESC]]></SqlQuery>
</Query>

<Query name="ListeBestByKrediMutAR">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,KreditorOid:%String,WarenEingang:%Boolean,LagerOid:%String="",MitMutierten:%Boolean=1</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Adresse->Adresse As Adresse, Adresse->Adresse->Adressnummer As Adressnummer,
	        CodeVerarbeitung, Abrechnungsdatum, Annahmedatum, Bestelldatum,
	        Bestellstatus, StatusAutoVerarbeitung, AbrechnungsNr, AnnahmeNr, BestellungsNr,
	        Verbucht
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid AND Adresse = :KreditorOid
			AND NVL(Verbucht,0) = 0 AND (:LagerOid='' OR Lagerort=:LagerOid) AND 
			Bestellstatus = DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() AND BearbeitungsstatusAR = DBAgrofresh.Konst_BearbeitungsstatusMutiert()
			AND NVL(WarenEingang,0) = :WarenEingang
			ORDER BY Bestellstatus, NVL(Abrechnungsdatum,TO_DATE(0)) DESC, NVL(AbrechnungsNr,0) DESC, NVL(Annahmedatum,TO_DATE(0)) DESC, NVL(AnnahmeNr,0) DESC, Bestelldatum DESC, BestellungsNr DESC]]></SqlQuery>
</Query>

<Query name="ListeBestByKrediTAS">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,KreditorOid:%String,WarenEingang:%Boolean,LagerOid:%String="",MitMutierten:%Boolean=1</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Adresse->Adresse As Adresse, Adresse->Adresse->Adressnummer As Adressnummer,
	        CodeVerarbeitung, Abrechnungsdatum, Annahmedatum, Bestelldatum,
	        Bestellstatus, StatusAutoVerarbeitung, AbrechnungsNr, AnnahmeNr, BestellungsNr,
	        Verbucht
	 		FROM DBAgrofreshEK.BestellungsKopf Kopf
			WHERE Mandant = :MandantOid AND Adresse = :KreditorOid
			AND NVL(Verbucht,0) = 0 AND (:LagerOid='' OR Lagerort=:LagerOid) AND 
			((NVL(Bestellstatus,0) < 3) OR ((NVL(BearbeitungsstatusAS,0) = DBAgrofreshEK.Konst_BearbeitungsstatusTeillieferung()) 
				AND (NVL((SELECT COUNT(%ID) FROM DBAgrofreshEK.Bestellungspos 
		 		WHERE Bestellungskopf = Kopf.ID AND NVL(TeillieferNr,0) = 0),0) > 0))) 
			AND	NVL(Bestellstatus,0) < DBAgrofreshEK.Konst_BestellungsStatusAbrechnung()
			AND NVL(WarenEingang,0) = :WarenEingang
			ORDER BY Bestellstatus, NVL(Abrechnungsdatum,TO_DATE(0)) DESC, NVL(AbrechnungsNr,0) DESC, NVL(Annahmedatum,TO_DATE(0)) DESC, NVL(AnnahmeNr,0) DESC, Bestelldatum DESC, BestellungsNr DESC]]></SqlQuery>
</Query>

<Query name="ListeBestByMandLaufendSpez">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT DISTINCT %ID, Adresse As Adresse,BestellungsNr, Bestelldatum,
	        CodeVerarbeitung, Verbucht, Bestellstatus
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid AND Bestelldatum >= current_date
			AND NVL(Verbucht,0) = 0 ORDER BY BestellungsNr DESC]]></SqlQuery>
</Query>

<Query name="ListeBestByKredi">
<Description>
Query GetAuftraege(MandantOid As %String, KreditorOid As %String) As %SQLQuery</Description>
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,KreditorOid:%String,WarenEingang:%Boolean,LagerOid:%String="",BisDatumArchiv:%Date=0</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Adresse->Adresse As Adresse, Adresse->Adresse->Adressnummer As Adressnummer,
	        CodeVerarbeitung, Abrechnungsdatum, Annahmedatum, Bestelldatum,
	        Bestellstatus, StatusAutoVerarbeitung, AbrechnungsNr, AnnahmeNr, BestellungsNr,
	        Verbucht
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid AND Adresse = :KreditorOid  AND (:LagerOid='' OR Lagerort=:LagerOid)
			AND NVL(WarenEingang,0) = :WarenEingang
			AND ((NVL(:BisDatumArchiv,TO_DATE(0))=TO_DATE(0)) OR (NVL(Verbucht,0) = 0) OR (Abrechnungsdatum >= :BisDatumArchiv))
			ORDER BY Bestellstatus, NVL(Abrechnungsdatum,TO_DATE(0)) DESC, NVL(AbrechnungsNr,0) DESC, NVL(Annahmedatum,TO_DATE(0)) DESC, NVL(AnnahmeNr,0) DESC, Bestelldatum DESC, BestellungsNr DESC]]></SqlQuery>
</Query>

<Query name="ListeMwstCodesFormDruck">
<Type>%SQLQuery</Type>
<FormalSpec>BestellungOid:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT Mwst, 
			MwstCode, 
			MwstBez,
			MwstBezFakt,
			MwstBezUrprod,
			MwstSatz, 
			CASE 
				WHEN CodeMwst = DBCore.Konst_MWSTSTEUERUNGINKL() THEN  
					{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM((MwstBetragInkl + GebindeInkl)-((MwstBetragInkl + GebindeInkl)/(1+(MwstSatz/100))))), SQL_DOUBLE)} 
				
				WHEN CodeMwst = DBCore.Konst_MWSTSTEUERUNGURPROD() THEN  
					{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM((MwstBetragInkl + GebindeInkl)*MwstSatz/100)), SQL_DOUBLE)}
			
				ELSE
					{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM((MwstBetragExkl + Gebinde)*MwstSatz/100)), SQL_DOUBLE)}
			END AS MwstBetrag, 
			CASE 
				WHEN CodeMwst = DBCore.Konst_MWSTSTEUERUNGINKL()  THEN  
					{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM(MwstBetragInkl/(1+(MwstSatz/100)))), SQL_DOUBLE)} 
				
				WHEN CodeMwst = DBCore.Konst_MWSTSTEUERUNGURPROD() THEN  
					{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM((MwstBetragInkl)*(1-(MwstSatz/100)))), SQL_DOUBLE)}

				ELSE
					{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM(MwstBetragExkl)), SQL_DOUBLE)}
			END AS MwstBetragExkl,
			{fn CONVERT(DBUtils.NumberUtils_Round(SUM((MwstBetragExklFW + GebindeFW)*MwstSatzExport/100),2), SQL_DOUBLE)} AS MwstBetragFW,
			{fn CONVERT(DBUtils.NumberUtils_Round(SUM(MwstBetragExklFW), 2), SQL_DOUBLE)} AS MwstBetragExklFW, 
			{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM(Gebinde)), SQL_DOUBLE)} AS Gebinde,
			{fn CONVERT(DBUtils.NumberUtils_Round(SUM(GebindeFW),2), SQL_DOUBLE)} AS GebindeFW
	FROM (
	SELECT Mwst, 
			Mwst->MwstCode AS MwstCode, 
			DBFibu_SD.Mwst_GetBezeichnungClass(Mwst, :MandantOid, :Lang, Bestellungskopf->Annahmedatum) AS MwstBez,
			DBFibu_SD.Mwst_GetBezeichnungFaktClass(Mwst, :MandantOid, :Lang, Bestellungskopf->Annahmedatum) AS MwstBezFakt,
			DBFibu_SD.Mwst_GetBezeichnungUrprodClass(Mwst, :MandantOid, :Lang, Bestellungskopf->Annahmedatum) AS MwstBezUrprod,
			MwstSatz, 
			MwstSatzExport,
			Nettobetrag2ExklMwstEW AS MwstBetragExkl,
			Nettobetrag2InklMwstEW AS MwstBetragInkl,
			Nettobetrag2ExklMwstFW AS MwstBetragExklFW, 
			0 AS Gebinde,
			0 AS GebindeFW,
			0 AS GebindeInkl,
			0 AS GebindeInklFW, 
			Mwst->SteuerungInklExkl AS CodeMwst
	FROM DBAgrofreshEK.Bestellungspos
	WHERE Bestellungskopf = :BestellungOid AND 
			Mwst IS NOT NULL 
			
	UNION ALL SELECT    
			Abzug1Mwst As Mwst,
			Abzug1Mwst->MwstCode AS MwstCode,
			DBFibu_SD.Mwst_GetBezeichnungClass(Abzug1Mwst, :MandantOid, :Lang, Annahmedatum) AS MwstBez,
			DBFibu_SD.Mwst_GetBezeichnungFaktClass(Abzug1Mwst, :MandantOid, :Lang, Annahmedatum) AS MwstBezFakt,
			DBFibu_SD.Mwst_GetBezeichnungUrprodClass(Abzug1Mwst, :MandantOid, :Lang, Annahmedatum) AS MwstBezUrprod,
			Abzug1MwstSatz AS MwstSatz,
			Abzug1MwstSatzExport AS MwstSatzExport,
				
			(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(NVL(DBAgrofreshEK.BestellungsKopf_GetBetrAbzugEWExklMwstClass(ID), 0)), Abzug1Prozent, Abzug1Typ), SQL_DOUBLE)}) AS MwstBetragExkl,
			(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(NVL(DBAgrofreshEK.BestellungsKopf_GetBetrAbzugEWInklMwstClass(ID), 0)), Abzug1Prozent, Abzug1Typ), SQL_DOUBLE)}) AS MwstBetragInkl,
			(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1BetragFW(SUM(NVL(DBAgrofreshEK.BestellungsKopf_GetBetrAbzugExklMwstFWClass(ID), 0)), Abzug1Prozent, Abzug1Typ), SQL_DOUBLE)}) AS MwstBetragExklFW,
			
			0 AS Gebinde,
			0 AS GebindeFW, 
			0 AS GebindeInkl,
			0 AS GebindeInklFW, 
			CodeMwst AS CodeMwst
			FROM DBAgrofreshEK.BestellungsKopf
			WHERE ID =:BestellungOid AND not NVL(Abzug1Typ,0) = 0
			
	UNION ALL SELECT    
			Abzug2Mwst As Mwst,
			Abzug2Mwst->MwstCode AS MwstCode,
			DBFibu_SD.Mwst_GetBezeichnungClass(Abzug2Mwst, :MandantOid, :Lang, Annahmedatum) AS MwstBez,
			DBFibu_SD.Mwst_GetBezeichnungFaktClass(Abzug2Mwst, :MandantOid, :Lang, Annahmedatum) AS MwstBezFakt,
			DBFibu_SD.Mwst_GetBezeichnungUrprodClass(Abzug2Mwst, :MandantOid, :Lang, Annahmedatum) AS MwstBezUrprod,
			Abzug2MwstSatz AS MwstSatz,
			Abzug2MwstSatzExport AS MwstSatzExport,
				
			(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(NVL(DBAgrofreshEK.BestellungsKopf_GetBetrAbzugEWExklMwstClass(ID), 0)), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), SQL_DOUBLE)}) AS MwstBetragExkl,
			(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(NVL(DBAgrofreshEK.BestellungsKopf_GetBetrAbzugEWInklMwstClass(ID), 0)), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), SQL_DOUBLE)}) AS MwstBetragInkl,
			(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW(SUM(NVL(DBAgrofreshEK.BestellungsKopf_GetBetrAbzugExklMwstFWClass(ID), 0)), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), SQL_DOUBLE)}) AS MwstBetragExklFW,
			
			0 AS Gebinde,
			0 AS GebindeFW, 
			0 AS GebindeInkl,
			0 AS GebindeInklFW, 
			CodeMwst AS CodeMwst
			FROM DBAgrofreshEK.BestellungsKopf
			WHERE ID =:BestellungOid AND not NVL(Abzug2Typ,0) = 0
			
	UNION ALL SELECT    
			Abzug3Mwst As Mwst,
			Abzug3Mwst->MwstCode AS MwstCode,
			DBFibu_SD.Mwst_GetBezeichnungClass(Abzug3Mwst, :MandantOid, :Lang, Annahmedatum) AS MwstBez,
			DBFibu_SD.Mwst_GetBezeichnungFaktClass(Abzug3Mwst, :MandantOid, :Lang, Annahmedatum) AS MwstBezFakt,
			DBFibu_SD.Mwst_GetBezeichnungUrprodClass(Abzug3Mwst, :MandantOid, :Lang, Annahmedatum) AS MwstBezUrprod,
			Abzug3MwstSatz AS MwstSatz,
			Abzug3MwstSatzExport AS MwstSatzExport,
				
			(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(NVL(DBAgrofreshEK.BestellungsKopf_GetBetrAbzugEWExklMwstClass(ID), 0)), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), SQL_DOUBLE)}) AS MwstBetragExkl,
			(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(NVL(DBAgrofreshEK.BestellungsKopf_GetBetrAbzugEWInklMwstClass(ID), 0)), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), SQL_DOUBLE)}) AS MwstBetragInkl,
			(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW(SUM(NVL(DBAgrofreshEK.BestellungsKopf_GetBetrAbzugExklMwstFWClass(ID), 0)), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), SQL_DOUBLE)}) AS MwstBetragExklFW,
			
			0 AS Gebinde,
			0 AS GebindeFW, 
			0 AS GebindeInkl,
			0 AS GebindeInklFW, 
			CodeMwst AS CodeMwst
			FROM DBAgrofreshEK.BestellungsKopf
			WHERE ID =:BestellungOid AND not NVL(Abzug3Typ,0) = 0

	UNION ALL SELECT Mwst AS Mwst, 
			Mwst->MwstCode AS MwstCode, 
			DBFibu_SD.Mwst_GetBezeichnungClass(Mwst, :MandantOid, :Lang, Datum) AS MwstBez,
			DBFibu_SD.Mwst_GetBezeichnungFaktClass(Mwst, :MandantOid, :Lang, Datum) AS MwstBezFakt,
			DBFibu_SD.Mwst_GetBezeichnungUrprodClass(Mwst, :MandantOid, :Lang, Datum) AS MwstBezUrprod,
			MwstSatz AS MwstSatz, 
			{fn CONVERT(DBFibu_SD.Mwst_GetMwstSatzExportClass(Mwst, Datum), SQL_DOUBLE)} AS MwstSatzExport,
			
			0 AS MwstBetragExkl,
			0 AS MwstBetragInkl,
			0 AS MwstBetragExklFW,
			
			{fn CONVERT(DBAgrofreshEK.GebDetail_GebindeSaldoBetragExklMwstClass(ID), SQL_DOUBLE)} AS Gebinde,
			{fn CONVERT(DBAgrofreshEK.GebDetail_GebindeSaldoBetExklMwstFWClass(ID), SQL_DOUBLE)} AS GebindeFW,
			{fn CONVERT(DBAgrofreshEK.GebDetail_GebindeSaldoBetragInklMwstClass(ID), SQL_DOUBLE)} AS GebindeInkl,
			{fn CONVERT(DBAgrofreshEK.GebDetail_GebindeSaldoBetInklMwstFWClass(ID), SQL_DOUBLE)} AS GebindeInklFW,
			Mwst->SteuerungInklExkl AS CodeMwst
	FROM DBAgrofreshEK.GebDetail
	WHERE Bestellung =:BestellungOid AND
			DBAgrofreshEK.GebDetail_GebindeSaldoBetragExklMwstClass(ID)<>0 AND 
			Mwst IS NOT NULL)
	GROUP BY Mwst ORDER BY MwstCode]]></SqlQuery>
</Query>

<Query name="ListeMwstFormDruckOhneAbzuege">
<Type>%SQLQuery</Type>
<FormalSpec>BestellungOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT Mwst, 
			MwstCode, 
			MwstBez,
			MwstBezFakt,
			MwstBezUrprod,
			MwstSatz, 
			SUM(MwstBetrag) AS MwstBetrag, 
			SUM(MwstBetragExkl) AS MwstBetragExkl,
			SUM(MwstBetragFW) AS MwstBetragFW, 
			SUM(MwstBetragExklFW) AS MwstBetragExklFW, 
			SUM(Gebinde) AS Gebinde,
			SUM(GebindeFW) AS GebindeFW,
			SUM(MwstGeb) AS GebindeMwst,
			SUM(MwstGebFW) AS GebindeMwstFW,
			SteuerungInklExkl
	FROM (
	SELECT Mwst, 
			Mwst->MwstCode AS MwstCode, 
			DBFibu_SD.Mwst_GetBezeichnungClass(Mwst, Bestellungskopf->Mandant, :Lang, Bestellungskopf->Annahmedatum) AS MwstBez,
			DBFibu_SD.Mwst_GetBezeichnungFaktClass(Mwst, Bestellungskopf->Mandant, :Lang, Bestellungskopf->Annahmedatum) AS MwstBezFakt,
			DBFibu_SD.Mwst_GetBezeichnungUrprodClass(Mwst, Bestellungskopf->Mandant, :Lang, Bestellungskopf->Annahmedatum) AS MwstBezUrprod,
			MwstSatz, 
			Nettobetrag2MwstbetragEW AS MwstBetrag, 
			Nettobetrag2ExklMwstEW AS MwstBetragExkl,
			Nettobetrag2MwstbetragFW AS MwstBetragFW, 
			Nettobetrag2ExklMwstFW AS MwstBetragExklFW, 
			0 AS Gebinde,
			0 AS GebindeFW,
			0 AS MwstGeb,
			0 AS MwstGebFW,
			Mwst->SteuerungInklExkl AS SteuerungInklExkl
	FROM DBAgrofreshEK.Bestellungspos
	WHERE Bestellungskopf = :BestellungOid AND
			Mwst IS NOT NULL 

	UNION ALL SELECT GebKontr->Gebinde->MwstEK AS Mwst, 
			DBAgrofreshEK.Bestellungskopf_GetMwstCodeForUrprodAbzug(GebKontr->Gebinde->MwstEK,Bestellung->CodeMwst) AS MwstCode, 
			DBFibu_SD.Mwst_GetBezeichnungClass(GebKontr->Gebinde->MwstEK, Bestellung->Mandant, :Lang, Datum) AS MwstBez,
			DBFibu_SD.Mwst_GetBezeichnungFaktClass(GebKontr->Gebinde->MwstEK, Bestellung->Mandant, :Lang, Datum) AS MwstBezFakt,
			DBFibu_SD.Mwst_GetBezeichnungUrprodClass(GebKontr->Gebinde->MwstEK, Bestellung->Mandant, :Lang, Datum) AS MwstBezUrprod,
			{fn CONVERT(DBFibu_SD.Mwst_GetMwstSatzFakturierungClass(GebKontr->Gebinde->MwstEK, Datum), SQL_DOUBLE)} AS MwstSatz, 
			GebindeSaldoBetragMwst AS MwstBetrag,
			0 AS MwstBetragExkl,
			GebindeSaldoBetragMwstFW AS MwstBetragFW,
			0 AS MwstBetragExklFW,
			GebindeSaldoBetragExklMwst AS Gebinde,
			GebindeSaldoBetragExklMwstFW  AS GebindeFW,
			GebindeSaldoBetragMwst AS MwstGeb,
			GebindeSaldoBetragMwstFW AS MwstGebFW,
			GebKontr->Gebinde->MwstEK->SteuerungInklExkl AS SteuerungInklExkl
	FROM DBAgrofreshEK.GebDetail
	WHERE Bestellung = :BestellungOid AND
			GebindeSaldoBetragExklMwst<>0)
	GROUP BY Mwst ORDER BY MwstCode]]></SqlQuery>
</Query>

<Query name="ListeMwstByCodes">
<Type>%SQLQuery</Type>
<FormalSpec>BestellungOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT Mwst, 
			Count(MwstCode) AS Counter, 
			MwstCode, 
			MwstBez,
			MwstSatz, 
			SUM(MwstBetrag) AS MwstBetrag, 
			SUM(MwstBetragExkl) AS MwstBetragExkl,
			SUM(MwstBetragFW) AS MwstBetragFW, 
			SUM(MwstBetragExklFW) AS MwstBetragExklFW, 
			SUM(Gebinde) AS Gebinde,
			SUM(GebindeFW) AS GebindeFW,
			SUM(MwstGeb) AS GebindeMwst,
			SUM(MwstGebFW) AS GebindeMwstFW,
			SteuerungInklExkl
	FROM (
	SELECT Mwst, 
			Mwst->MwstCode AS MwstCode, 
			DBFibu_SD.Mwst_GetBezeichnungClass(Mwst->ID, Bestellungskopf->Mandant, :Lang, Bestellungskopf->Annahmedatum) AS MwstBez,
			MwstSatz, 
			Nettobetrag2MwstbetragEW AS MwstBetrag, 
			Nettobetrag2ExklMwstEW AS MwstBetragExkl,
			Nettobetrag2MwstbetragFW AS MwstBetragFW, 
			Nettobetrag2ExklMwstFW AS MwstBetragExklFW, 
			0 AS Gebinde,
			0 AS GebindeFW,
			0 AS MwstGeb,
			0 AS MwstGebFW,
			Mwst->SteuerungInklExkl AS SteuerungInklExkl
	FROM DBAgrofreshEK.Bestellungspos
	WHERE Bestellungskopf = :BestellungOid AND
			Mwst IS NOT NULL 

	UNION ALL SELECT Mwst AS Mwst,
			Bestellung->CodeMwst AS MwstCode, 
			DBFibu_SD.Mwst_GetBezeichnungClass(GebKontr->Gebinde->MwstEK, Bestellung->Mandant, :Lang, Datum) AS MwstBez,
			{fn CONVERT(DBFibu_SD.Mwst_GetMwstSatzFakturierungClass(GebKontr->Gebinde->MwstEK, Datum), SQL_DOUBLE)} AS MwstSatz, 
			GebindeSaldoBetragMwst AS MwstBetrag,
			0 AS MwstBetragExkl,
			GebindeSaldoBetragMwstFW AS MwstBetragFW,
			0 AS MwstBetragExklFW,
			GebindeSaldoBetragExklMwst AS Gebinde,
			GebindeSaldoBetragExklMwstFW  AS GebindeFW,
			GebindeSaldoBetragMwst AS MwstGeb,
			GebindeSaldoBetragMwstFW AS MwstGebFW,
			GebKontr->Gebinde->MwstEK->SteuerungInklExkl AS SteuerungInklExkl
	FROM DBAgrofreshEK.GebDetail
	WHERE Bestellung = :BestellungOid AND
			GebindeSaldoBetragExklMwst<>0)
	GROUP BY Mwst ORDER BY MwstCode]]></SqlQuery>
</Query>

<Query name="ListeBestellung">
<Type>%SQLQuery</Type>
<FormalSpec>BestellungsOid:%String,firstVorname:%Boolean,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT
		ID,
		Adresse 		AS "LAdresse.Adresse", 
		Anrede 			AS "LAdresse.Anrede", 
		Name 			AS "LAdresse.Name", 
		Adresszeile1	AS "LAdresse.Adresszeile1", 
		Adresszeile2 	AS "LAdresse.Adresszeile2", 
		Adresszeile3 	AS "LAdresse.Adresszeile3", 
		Plz				AS "LAdresse.Plz", 
		PlzZusatz 		AS "LAdresse.PlzZusatz", 
		Ort 			AS "LAdresse.Ort", 
		Adresse->MWSTNr AS "LAdresse.MWSTNr", 
		Adresse->Adresse->Telefon1 	As "LAdresse.Telefon",
		Adresse->Adresse->Mobil 	As "LAdresse.Natel",
		Adresse->Adresse->Fax 		As "LAdresse.Fax",
		AuftragValidiert, 
		BestellNrAbnehmer,
		BestellungsNr, 
		Bestelldatum, 
		Bestellstatus, 
		Bestellart, 
		Besteller, 
		BetragEWExklMwst, 
		BetragEWInklMwst, 
		BetragFWExklMwst, 
		BetragFWInklMwst,
		BetragMwstFW, 
		BetragMwst, 
		CodeMwst, 
		CodeVerarbeitung, 
		Fusstext, 
		Fusstext1, 
		Fusstext2, 
		Fusstext3, 
		Fusstext4, 
		GebindeSaldo, 
		GewichtBrutto, 
		GewichtNetto, 
		GewichtTara, 
		Kurs, 
		Kurseinheit, 
		Lieferart->PositionsNr AS "Lieferart.Nr", 
		DBAgrofreshEK_SD.Hilfstexte_GetTextClass(Lieferart, :MandantOid, :Lang) AS "Lieferart.Text", 
		Annahmedatum, 
		AnnahmeNr, 
		Annahmezeit, 
		RabattProzent, 
		AbrechnungsNr, 
		Abrechnungsdatum, 
		Referenz, 
		RetourenErfasst, 
		Sachbearbeiter->Benutzer->Benutzername AS SachbearbeiterBenutzername, 
		Sachbearbeiter->Name AS SachbearbeiterName, 
		Sachbearbeiter->Nummer AS SachbearbeiterNr, 
		Sachbearbeiter->Vorname AS SachbearbeiterVorname, 
		Skonto, 
		BearbeitungsstatusOA, 
		StatusAutoVerarbeitung, 
		BearbeitungsstatusBE, 
		BearbeitungsstatusAS, 
		BearbeitungsstatusAR, 
		BearbeitungsstatusBZ, 
		TotalMitGebinde, 
		Waehrung, 
		Warenaufwand, 
		Zahladresse->Adresse->Adressnummer 		AS "RAdresse.Adressnummer", 
		Zahladresse->Adresse->Anrede 			AS "RAdresse.Anrede",
		DBAdressen.Adresse_GetName(Zahladresse->Adresse->Adresscode, Zahladresse->Adresse->Name, Zahladresse->Adresse->VornameZusatz1, :firstVorname) 
												AS "RAdresse.Name", 
		DBAdressen.Adresse_GetZusatz1(Zahladresse->Adresse->Adresscode, Zahladresse->Adresse->VornameZusatz1) 
												AS "RAdresse.Adresszeile1", 
		Zahladresse->Adresse->Zusatz2	 		AS "RAdresse.Adresszeile2", 
		Zahladresse->Adresse->Strasse  || ' ' || Zahladresse->Adresse->Hausnummer AS "RAdresse.Adresszeile3", 
		Zahladresse->Adresse->Plz 				AS "RAdresse.Plz", 
		Zahladresse->Adresse->PlzInklZusatz		AS "RAdresse.PlzZusatz", 
		Zahladresse->Adresse->Ort 				AS "RAdresse.Ort", 
		Zahladresse->Adresse->Telefon1 			As "RAdresse.Telefon",
		Zahladresse->Adresse->Mobil 			As "RAdresse.Natel",
		Zahladresse->Adresse->Fax 				As "RAdresse.Fax",
		Zahladresse->MWSTNr						AS "RAdresse.MWSTNr", 
		
		Abnehmner->Adresse->Adresscode			AS "AbnehmerAdresse.Adresscode",
		Abnehmner->Adresse->Adressnummer 		AS "AbnehmerAdresse.Adressnummer", 
		Abnehmner->Adresse->Anrede 				AS "AbnehmerAdresse.Anrede",
		DBAdressen.Adresse_GetName(Abnehmner->Adresse->Adresscode, Abnehmner->Adresse->Name, Abnehmner->Adresse->VornameZusatz1, :firstVorname) 
												AS "AbnehmerAdresse.Name", 
		DBAdressen.Adresse_GetZusatz1(Abnehmner->Adresse->Adresscode, Abnehmner->Adresse->VornameZusatz1) 
												AS "AbnehmerAdresse.Adresszeile1", 
		Abnehmner->Adresse->Zusatz2	 			AS "AbnehmerAdresse.Adresszeile2", 
		Abnehmner->Adresse->Strasse  || ' ' || Abnehmner->Adresse->Hausnummer AS "AbnehmerAdresse.Adresszeile3", 
		Abnehmner->Adresse->Plz 				AS "AbnehmerAdresse.Plz", 
		Abnehmner->Adresse->PlzInklZusatz		AS "AbnehmerAdresse.PlzZusatz", 
		Abnehmner->Adresse->Ort 				AS "AbnehmerAdresse.Ort", 
		Abnehmner->Adresse->Adresscode			AS "AbnehmerAdresse.Adresscode",
		CASE
			WHEN 	Zahladresse->Adresse->Anrede LIKE Anrede AND
					DBAdressen.Adresse_GetName(Zahladresse->Adresse->Adresscode, Zahladresse->Adresse->Name, Zahladresse->Adresse->VornameZusatz1, :firstVorname) LIKE Name AND
					NVL(DBAdressen.Adresse_GetZusatz1(Zahladresse->Adresse->Adresscode, Zahladresse->Adresse->VornameZusatz1),'') LIKE Adresszeile1 AND
					Zahladresse->Adresse->Zusatz2 LIKE Adresszeile2 AND
					((Zahladresse->Adresse->Strasse LIKE Adresszeile3) OR (Zahladresse->Adresse->Strasse ||' '|| NVL(Zahladresse->Adresse->Hausnummer,'') LIKE NVL(Adresszeile3,''))) AND
					Zahladresse->Adresse->Plz LIKE Plz AND
					Zahladresse->Adresse->Ort LIKE Ort 
				THEN
					CONVERT(BIT,1)
			ELSE
					CONVERT(BIT,0)
		END AS AdressenEqual,
					
		Zahlungskondition ,
		
		Lagerort->PositionsNr AS "Lagerort.Nr", 
		Lagerort->Telefon AS "Lagerort.Telefon", 
		Lagerort->Fax AS "Lagerort.Fax", 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Lagerort, Mandant, :Lang) AS "Lagerort.Text"

	
	FROM DBAgrofreshEK.Bestellungskopf
			WHERE %ID=:BestellungsOid]]></SqlQuery>
</Query>

<Query name="ListeSearchResultByOid">
<Type>%SQLQuery</Type>
<FormalSpec>Oid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Adresse->Adresse->ID As AdressOid, Adresse->Adresse->Adressnummer As Adressnummer,
	        Abrechnungsdatum, Annahmedatum, Bestelldatum,
	        Bestellstatus, StatusAutoVerarbeitung, AbrechnungsNr, AnnahmeNr, BestellungsNr, 
	        GebindeSaldo, TotalMitGebinde, Verbucht, AuftragValidiert, RetourenErfasst,
	        BearbeitungsstatusAR, BearbeitungsstatusAS, BearbeitungsstatusBE,
	        BearbeitungsstatusBZ, BearbeitungsstatusOA 
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE %ID = :Oid
			ORDER BY Bestellstatus, Abrechnungsdatum DESC, BestellungsNr DESC]]></SqlQuery>
</Query>

<Query name="ListeSearchResultByAdrNrS">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,AdressNr:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Adresse->Adresse->ID As AdressOid, Adresse->Adresse->Adressnummer As Adressnummer,
	        Abrechnungsdatum, Annahmedatum, Bestelldatum,
	        Bestellstatus, StatusAutoVerarbeitung, AbrechnungsNr, AnnahmeNr, BestellungsNr, 
	        GebindeSaldo, TotalMitGebinde, Verbucht, AuftragValidiert, RetourenErfasst,
	        BearbeitungsstatusAR, BearbeitungsstatusAS, BearbeitungsstatusBE,
	        BearbeitungsstatusBZ, BearbeitungsstatusOA 
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid AND Adresse->Adresse->Adressnummer LIKE :AdressNr
			AND NVL(Verbucht, 0) = 0
			ORDER BY Bestellstatus, Abrechnungsdatum DESC, BestellungsNr DESC]]></SqlQuery>
</Query>

<Query name="ListeSearchResultByKurznameS">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Kurzname:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Adresse->Adresse->ID As AdressOid, Adresse->Adresse->Adressnummer As Adressnummer,
	        Abrechnungsdatum, Annahmedatum, Bestelldatum,
	        Bestellstatus, StatusAutoVerarbeitung, AbrechnungsNr, AnnahmeNr, BestellungsNr, 
	        GebindeSaldo, TotalMitGebinde, Verbucht, AuftragValidiert, RetourenErfasst,
	        BearbeitungsstatusAR, BearbeitungsstatusAS, BearbeitungsstatusBE,
	        BearbeitungsstatusBZ, BearbeitungsstatusOA 
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid AND { fn LCASE(Adresse->Adresse->Kurzname)} LIKE { fn LCASE(:Kurzname_'%')}
			AND NVL(Verbucht,0) = 0
			ORDER BY Bestellstatus, Abrechnungsdatum DESC, BestellungsNr DESC]]></SqlQuery>
</Query>

<Query name="ListeSearchResultByKurznameL">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Kurzname:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Adresse->Adresse->ID As AdressOid, Adresse->Adresse->Adressnummer As Adressnummer,
	        Abrechnungsdatum, Annahmedatum, Bestelldatum,
	        Bestellstatus, StatusAutoVerarbeitung, AbrechnungsNr, AnnahmeNr, BestellungsNr, 
	        GebindeSaldo, TotalMitGebinde, Verbucht, AuftragValidiert, RetourenErfasst,
	        BearbeitungsstatusAR, BearbeitungsstatusAS, BearbeitungsstatusBE,
	        BearbeitungsstatusBZ, BearbeitungsstatusOA 
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid AND { fn LCASE(Adresse->Adresse->Kurzname)} LIKE { fn LCASE(:Kurzname_'%')}
			ORDER BY Bestellstatus, Abrechnungsdatum DESC, BestellungsNr DESC]]></SqlQuery>
</Query>

<Query name="ListeSearchResultByAdrNrL">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,AdressNr:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Adresse->Adresse->ID As AdressOid, Adresse->Adresse->Adressnummer As Adressnummer,
	        Abrechnungsdatum, Annahmedatum, Bestelldatum,
	        Bestellstatus, StatusAutoVerarbeitung, AbrechnungsNr, AnnahmeNr, BestellungsNr, 
	        GebindeSaldo, TotalMitGebinde, Verbucht, AuftragValidiert, RetourenErfasst,
	        BearbeitungsstatusAR, BearbeitungsstatusAS, BearbeitungsstatusBE,
	        BearbeitungsstatusBZ, BearbeitungsstatusOA 
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid AND Adresse->Adresse->Adressnummer LIKE :AdressNr
			ORDER BY Bestellstatus, Abrechnungsdatum DESC, BestellungsNr DESC]]></SqlQuery>
</Query>

<Query name="ListeSammelrechnung">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,vonArDatum:%Date,bisArDatum:%Date,vonBestellungsstatus:%Integer,bisBestellungsstatus:%Integer,zahladrDebiOid:%String,mitMutierten:%Boolean,nurFreigebene:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID 
	FROM DBAgrofreshEK.BestellungsKopf 
	WHERE Mandant=:MandantOid AND 
			Bestellstatus >= :vonBestellungsstatus AND
			Bestellstatus <= :bisBestellungsstatus AND
			((Annahmedatum is NULL AND Bestelldatum between {d :vonArDatum} AND {d :bisArDatum}) OR
			(Annahmedatum is NOT NULL AND Annahmedatum between {d :vonArDatum} AND {d :bisArDatum})) AND
			((:mitMutierten = 1) or ((Bestellstatus = 3) AND (DBAgrofreshEK.BestellungsKopf_IsStatusGedruckt(BearbeitungsstatusAS) = 1))
								 or ((Bestellstatus = 2) AND (DBAgrofreshEK.BestellungsKopf_IsStatusGedruckt(BearbeitungsstatusBE) = 1))
								 or ((Bestellstatus = 1) AND (DBAgrofreshEK.BestellungsKopf_IsStatusGedruckt(BearbeitungsstatusOA) = 1)))
			AND
			((:nurFreigebene = 0) or (NVL(StatusAutoVerarbeitung,0) = 3)) AND
			ZahlAdresse=:zahladrDebiOid AND
			NVL(StatusAutoVerarbeitung,0) <> DBAgrofreshEK.Konst_StatusAutoLaufBestGesperrt()]]></SqlQuery>
</Query>

<Query name="ListeSammelrechnungBestAdr">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,vonArDatum:%Date,bisArDatum:%Date,vonBestellungsstatus:%Integer,bisBestellungsstatus:%Integer,zahladrDebiOid:%String,bestadrDebiOid:%String,mitMutierten:%Boolean,nurFreigebene:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID 
	FROM DBAgrofreshEK.BestellungsKopf 
	WHERE Mandant=:MandantOid AND 
			Bestellstatus >= :vonBestellungsstatus AND
			Bestellstatus <= :bisBestellungsstatus AND
			((Annahmedatum is NULL AND Bestelldatum between {d :vonArDatum} AND {d :bisArDatum}) OR
			(Annahmedatum is NOT NULL AND Annahmedatum between {d :vonArDatum} AND {d :bisArDatum})) AND
			((:mitMutierten = 1) or ((Bestellstatus = 3) AND (DBAgrofreshEK.BestellungsKopf_IsStatusGedruckt(BearbeitungsstatusAS) = 1))
								 or ((Bestellstatus = 2) AND (DBAgrofreshEK.BestellungsKopf_IsStatusGedruckt(BearbeitungsstatusBE) = 1))
								 or ((Bestellstatus = 1) AND (DBAgrofreshEK.BestellungsKopf_IsStatusGedruckt(BearbeitungsstatusOA) = 1)))
			AND
			((:nurFreigebene = 0) or (NVL(StatusAutoVerarbeitung,0) = 3)) AND
			Zahladresse=:zahladrDebiOid AND Adresse=:bestadrDebiOid AND
			NVL(StatusAutoVerarbeitung,0) <> DBAgrofreshEK.Konst_StatusAutoLaufBestGesperrt()]]></SqlQuery>
</Query>

<Query name="ListeSammelrechnungAnmehmerAdr">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,vonArDatum:%Date,bisArDatum:%Date,vonBestellungsstatus:%Integer,bisBestellungsstatus:%Integer,zahladrDebiOid:%String,abnehmeradrDebiOid:%String,mitMutierten:%Boolean,nurFreigebene:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID 
	FROM DBAgrofreshEK.BestellungsKopf 
	WHERE Mandant=:MandantOid AND 
			Bestellstatus >= :vonBestellungsstatus AND
			Bestellstatus <= :bisBestellungsstatus AND
			((Annahmedatum is NULL AND Bestelldatum between {d :vonArDatum} AND {d :bisArDatum}) OR
			(Annahmedatum is NOT NULL AND Annahmedatum between {d :vonArDatum} AND {d :bisArDatum})) AND
			((:mitMutierten = 1) or ((Bestellstatus = 3) AND (DBAgrofreshEK.BestellungsKopf_IsStatusGedruckt(BearbeitungsstatusAS) = 1))
								 or ((Bestellstatus = 2) AND (DBAgrofreshEK.BestellungsKopf_IsStatusGedruckt(BearbeitungsstatusBE) = 1))
								 or ((Bestellstatus = 1) AND (DBAgrofreshEK.BestellungsKopf_IsStatusGedruckt(BearbeitungsstatusOA) = 1)))
			AND
			((:nurFreigebene = 0) or (NVL(StatusAutoVerarbeitung,0) = 3)) AND
			Adresse=:zahladrDebiOid AND Abnehmner=:abnehmeradrDebiOid AND
			NVL(StatusAutoVerarbeitung,0) <> DBAgrofreshEK.Konst_StatusAutoLaufBestGesperrt()]]></SqlQuery>
</Query>

<Query name="ListeSammelrechnungWiederholung">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,ArNr:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT ID 
	FROM DBAgrofreshEK.BestellungsKopf 
	WHERE Mandant=:MandantOid AND AbrechnungsNr = :ArNr</SqlQuery>
</Query>

<Query name="ListeMwstByCodesForRecalc">
<Type>%SQLQuery</Type>
<FormalSpec>BestOid:%String,MandantOid:%String,AbzugBisArtikelGr:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT Mwst, 
			MwstCode, 
			MwstSatz, 
			SUM(MwstBetrag) AS MwstBetrag, 
			CASE 
				WHEN SteuerungInklExkl = 3 THEN  
					{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM(MwstBetragExkl*MwstSatz/100)), SQL_DOUBLE)}
				WHEN SteuerungInklExkl = 2 THEN
					{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM(MwstBetragInkl*(MwstSatz/100))), SQL_DOUBLE)}
			ELSE
				{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM(MwstBetragInkl-(MwstBetragInkl/(1+(MwstSatz/100))))), SQL_DOUBLE)} 
			END AS MwstBetragCalc, 
			
			{fn CONVERT(DBUtils.NumberUtils_Round(SUM(MwstBetragExklFW*MwstSatz/100), 2), SQL_DOUBLE)} AS MwstBetragFWCalc
	FROM (
	SELECT Mwst, 
			Mwst->MwstCode AS MwstCode, 
			MwstSatz, 
			Nettobetrag2MwstbetragEW AS MwstBetrag, 
			Nettobetrag2ExklMwstEW AS MwstBetragExkl,
			Nettobetrag2MwstbetragFW AS MwstBetragFW, 
			Nettobetrag2ExklMwstFW AS MwstBetragExklFW, 
			Nettobetrag2InklMwstEW AS MwstBetragInkl,
			BestellungsKopf->CodeMwst AS CodeMwst,
			Mwst->SteuerungInklExkl AS SteuerungInklExkl
	FROM DBAgrofreshEK.Bestellungspos
	WHERE BestellungsKopf=:BestOid AND
			Mwst IS NOT NULL 
			
	UNION ALL SELECT    
      (SELECT Mwst FROM DBAgrofreshEK.Bestellungspos WHERE BestellungsKopf=:BestOid AND BestellungsKopf->Mandant=:MandantOid AND Mwst IS NOT NULL  AND (Artikel->Artikelgruppe->ArtikelgruppenNr <= :AbzugBisArtikelGr OR :AbzugBisArtikelGr = 0)) As Mwst,
			(SELECT Mwst->MwstCode  FROM DBAgrofreshEK.Bestellungspos WHERE BestellungsKopf=:BestOid AND BestellungsKopf->Mandant=:MandantOid AND Mwst IS NOT NULL AND (Artikel->Artikelgruppe->ArtikelgruppenNr <= :AbzugBisArtikelGr OR :AbzugBisArtikelGr = 0)) AS MwstCode, 
			(SELECT MwstSatz  FROM DBAgrofreshEK.Bestellungspos WHERE BestellungsKopf=:BestOid AND BestellungsKopf->Mandant=:MandantOid AND Mwst IS NOT NULL AND (Artikel->Artikelgruppe->ArtikelgruppenNr <= :AbzugBisArtikelGr OR :AbzugBisArtikelGr = 0)) AS MwstSatz,
			
			DBAgrofreshEK.BestellungsKopf_CalcAbzugBetrag(:MandantOid, SUM(BetragEWInklMwstAbzug - BetragEWExklMwstAbzug), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ,  Abzug2Typ,  Abzug3Typ) AS MwstBetrag,
			
			DBAgrofreshEK.BestellungsKopf_CalcAbzugBetrag(:MandantOid, SUM(BetragEWExklMwstAbzug), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ,  Abzug2Typ,  Abzug3Typ) AS MwstBetragExkl,
			
			DBAgrofreshEK.BestellungsKopf_CalcAbzugBetragFW(SUM(BetragFWInklMwstAbzug - BetragFWExklMwstAbzug), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ,  Abzug2Typ,  Abzug3Typ) AS MwstBetragFW,
			
			DBAgrofreshEK.BestellungsKopf_CalcAbzugBetragFW(SUM(BetragFWExklMwstAbzug), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ,  Abzug2Typ,  Abzug3Typ) AS MwstBetragExklFW,
			
			DBAgrofreshEK.BestellungsKopf_CalcAbzugBetrag(:MandantOid, SUM(BetragEWInklMwstAbzug), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ,  Abzug2Typ,  Abzug3Typ) AS MwstBetragInkl,
			
			CodeMwst AS CodeMwst,
			(SELECT Mwst->SteuerungInklExkl  FROM DBAgrofreshEK.Bestellungspos WHERE BestellungsKopf=:BestOid AND BestellungsKopf->Mandant=:MandantOid AND Mwst IS NOT NULL AND (Artikel->Artikelgruppe->ArtikelgruppenNr <= :AbzugBisArtikelGr OR :AbzugBisArtikelGr = 0)) AS SteuerungInklExkl 
			
			FROM DBAgrofreshEK.BestellungsKopf
			WHERE ID=:BestOid
	)
			
	GROUP BY Mwst ORDER BY MwstCode]]></SqlQuery>
</Query>

<Query name="ListeMwstCodesSammelrechnungJ">
<Type>%SQLQuery</Type>
<FormalSpec>ArNr:%Integer,MandantOid:%String,MandJahrOid:%String,Lang:%String,AbzugBisArtikelGr:%Integer,mitGebinde:%Boolean=1</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	
	SELECT Mwst, 
			MwstCode, 
			MwstBez,
			MwstBezFakt,
			MwstBezUrprod,
			MwstSatz, 
			CASE 
				WHEN CodeMwst = DBCore.Konst_MWSTSTEUERUNGINKL() THEN  
					{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM((MwstBetragInkl + GebindeInkl)-((MwstBetragInkl + GebindeInkl)/(1+(MwstSatz/100))))), SQL_DOUBLE)} 
				WHEN CodeMwst = DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
					{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM((MwstBetragInkl + GebindeInkl)*(MwstSatz/100))), SQL_DOUBLE)}
				ELSE
					{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM((MwstBetragExkl + Gebinde)*MwstSatz/100)), SQL_DOUBLE)}
			END AS MwstBetrag, 
			
			CASE 
				WHEN CodeMwst = DBCore.Konst_MWSTSTEUERUNGINKL()  THEN  
					{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM(MwstBetragInkl/(1+(MwstSatz/100)))), SQL_DOUBLE)} 
				WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() AND MwstCode=52  THEN  
					{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM(MwstBetragInkl)), SQL_DOUBLE)} 
				WHEN CodeMwst = DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
					{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM(MwstBetragInkl-(MwstBetragInkl*(MwstSatz/100)))), SQL_DOUBLE)}
				ELSE
					{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM(MwstBetragExkl)), SQL_DOUBLE)}
			END AS MwstBetragExkl,
			{fn CONVERT(DBUtils.NumberUtils_Round(SUM(MwstBetragExklFW*MwstSatz/100), 2), SQL_DOUBLE)} AS MwstBetragFW, 
			{fn CONVERT(DBUtils.NumberUtils_Round(SUM(MwstBetragExklFW), 2), SQL_DOUBLE)} AS MwstBetragExklFW, 
			{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,SUM(Gebinde)), SQL_DOUBLE)} AS Gebinde,
			{fn CONVERT(DBUtils.NumberUtils_Round(SUM(GebindeFW), 2), SQL_DOUBLE)} AS GebindeFW
	FROM (
	SELECT Mwst, 
			Mwst->MwstCode AS MwstCode, 
			DBFibu_SD.Mwst_GetBezeichnungClass(Mwst, BestellungsKopf->Mandant, :Lang, BestellungsKopf->Annahmedatum) AS MwstBez,
			DBFibu_SD.Mwst_GetBezeichnungFaktClass(Mwst, BestellungsKopf->Mandant, :Lang, BestellungsKopf->Annahmedatum) AS MwstBezFakt,
			DBFibu_SD.Mwst_GetBezeichnungUrprodClass(Mwst, Bestellungskopf->Mandant, :Lang, BestellungsKopf->Annahmedatum) AS MwstBezUrprod,
			MwstSatz, 
			Nettobetrag2MwstbetragEW AS MwstBetrag, 
			Nettobetrag2ExklMwstEW AS MwstBetragExkl,
			Nettobetrag2MwstbetragFW AS MwstBetragFW, 
			Nettobetrag2ExklMwstFW AS MwstBetragExklFW, 
			0 AS Gebinde,
			0 AS GebindeInkl,
			0 AS GebindeFW,
			0 AS GebindeInklFW,
			Nettobetrag2InklMwstEW AS MwstBetragInkl,
			BestellungsKopf->CodeMwst AS CodeMwst
	FROM DBAgrofreshEK.Bestellungspos
	WHERE BestellungsKopf->AbrechnungsNr=:ArNr AND 
			BestellungsKopf->Mandant=:MandantOid AND
			Mwst IS NOT NULL 

	UNION ALL SELECT    
		Abzug1Mwst As Mwst,
		Abzug1Mwst->MwstCode As MwstCode,
		DBFibu_SD.Mwst_GetBezeichnungClass(Abzug1Mwst, Mandant, :Lang, Annahmedatum) As MwstBez,
		DBFibu_SD.Mwst_GetBezeichnungFaktClass(Abzug1Mwst, Mandant, :Lang, Annahmedatum) As MwstBezFakt,
		DBFibu_SD.Mwst_GetBezeichnungUrprodClass(Abzug1Mwst, Mandant, :Lang, Annahmedatum) AS MwstBezUrprod,
		Abzug1MwstSatz  As MwstSatz,
      	
      	CASE
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, (SUM(BetragEWInklMwstAbzug) * -1), Abzug1Prozent, Abzug1Typ), Abzug1MwstSatz))
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, (SUM(BetragEWInklMwstAbzug) * -1), Abzug1Prozent, Abzug1Typ), Abzug1MwstSatz))
			ELSE
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, (SUM(BetragEWExklMwstAbzug) * -1), Abzug1Prozent, Abzug1Typ), Abzug1MwstSatz))
		END AS MwstBetrag,
		CASE
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug1Typ) - DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug1Typ), Abzug1MwstSatz), SQL_DOUBLE)})
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug1Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug1Typ), Abzug1MwstSatz), SQL_DOUBLE)})
			ELSE
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent, Abzug1Typ), SQL_DOUBLE)})
		END AS MwstBetragExkl,
		CASE
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() OR (CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() AND DBFibu.Konto_GetMwstCodeClass(:MandJahrOid,Abzug1FibuKonto)=52) THEN
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug1BetragFW((SUM(BetragFWInklMwstAbzug) * -1), Abzug1Prozent, Abzug1Typ), Abzug1MwstSatz))
        	WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug1BetragFW((SUM(BetragFWInklMwstAbzug) * -1), Abzug1Prozent, Abzug1Typ), Abzug1MwstSatz))
			ELSE
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug1BetragFW((SUM(BetragFWExklMwstAbzug) * -1), Abzug1Prozent, Abzug1Typ), Abzug1MwstSatz))
		END AS MwstBetragFW,
		CASE
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug1Typ) - DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug1Typ), Abzug1MwstSatz), SQL_DOUBLE)})
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug1Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug1Typ), Abzug1MwstSatz), SQL_DOUBLE)})
			ELSE
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1BetragFW(SUM(BetragForAbzugFWExklMwst), Abzug1Prozent, Abzug1Typ), SQL_DOUBLE)} )
		END AS MwstBetragExklFW,
			0 AS Gebinde,
			0 AS GebindeInkl,
			0 AS GebindeFW,
			0 AS GebindeInklFW,
		CASE
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug1Typ), SQL_DOUBLE)} )
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug1Typ), SQL_DOUBLE)} )
			ELSE
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent, Abzug1Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent, Abzug1Typ), Abzug1MwstSatz), SQL_DOUBLE)})
		END AS MwstBetragInkl, 
		CodeMwst AS CodeMwst
		FROM DBAgrofreshEK.BestellungsKopf
		WHERE AbrechnungsNr=:ArNr AND Mandant=:MandantOid
		GROUP BY AbrechnungsNr
			
	UNION ALL SELECT    
		Abzug2Mwst As Mwst,
		Abzug2Mwst->MwstCode As MwstCode,
		DBFibu_SD.Mwst_GetBezeichnungClass(Abzug2Mwst, Mandant, :Lang, Annahmedatum) As MwstBez,
		DBFibu_SD.Mwst_GetBezeichnungFaktClass(Abzug2Mwst, Mandant, :Lang, Annahmedatum) As MwstBezFakt,
		DBFibu_SD.Mwst_GetBezeichnungUrprodClass(Abzug2Mwst, Mandant, :Lang, Annahmedatum) AS MwstBezUrprod,
		Abzug2MwstSatz As MwstSatz,
      	
      	CASE
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, (SUM(BetragEWInklMwstAbzug) * -1), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), Abzug2MwstSatz))
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, (SUM(BetragEWInklMwstAbzug) * -1), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), Abzug2MwstSatz))
			ELSE
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, (SUM(BetragEWExklMwstAbzug) * -1), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), Abzug2MwstSatz))
		END AS MwstBetrag,
		CASE
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ) - DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), Abzug2MwstSatz), SQL_DOUBLE)})
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug2Prozent,Abzug1Typ, Abzug2Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), Abzug2MwstSatz), SQL_DOUBLE)})
			ELSE
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent, Abzug2Prozent,Abzug1Typ, Abzug2Typ), SQL_DOUBLE)})
		END AS MwstBetragExkl,
		CASE
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW((SUM(BetragFWInklMwstAbzug) * -1), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), Abzug2MwstSatz))
        	WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW((SUM(BetragFWInklMwstAbzug) * -1), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), Abzug2MwstSatz))
			ELSE
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW((SUM(BetragFWExklMwstAbzug) * -1), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), Abzug2MwstSatz))
		END AS MwstBetragFW,
		CASE
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL()  THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ) - DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), Abzug2MwstSatz), SQL_DOUBLE)})
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), Abzug2MwstSatz), SQL_DOUBLE)})
			ELSE
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW(SUM(BetragForAbzugFWExklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), SQL_DOUBLE)} )
		END AS MwstBetragExklFW,
			0 AS Gebinde,
			0 AS GebindeInkl,
			0 AS GebindeFW,
			0 AS GebindeInklFW,
		CASE
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent,  Abzug2Prozent, Abzug1Typ, Abzug2Typ), SQL_DOUBLE)} )
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent,  Abzug2Prozent, Abzug1Typ, Abzug2Typ), SQL_DOUBLE)} )
			ELSE
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent,  Abzug2Prozent, Abzug1Typ, Abzug2Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), Abzug2MwstSatz), SQL_DOUBLE)})
		END AS MwstBetragInkl, 
		CodeMwst AS CodeMwst
		FROM DBAgrofreshEK.BestellungsKopf
		WHERE AbrechnungsNr=:ArNr AND Mandant=:MandantOid
		GROUP BY AbrechnungsNr
			
	UNION ALL SELECT    
		Abzug3Mwst As Mwst,
		Abzug3Mwst->MwstCode As MwstCode,
		DBFibu_SD.Mwst_GetBezeichnungClass(Abzug3Mwst, Mandant, :Lang, Annahmedatum) As MwstBez,
		DBFibu_SD.Mwst_GetBezeichnungFaktClass(Abzug3Mwst, Mandant, :Lang, Annahmedatum) As MwstBezFakt,
		DBFibu_SD.Mwst_GetBezeichnungUrprodClass(Abzug3Mwst, Mandant, :Lang, Annahmedatum) AS MwstBezUrprod,
		Abzug3MwstSatz As MwstSatz,
      	
      	CASE
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() OR (CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD()) THEN
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, (SUM(BetragEWInklMwstAbzug) * -1), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), Abzug3MwstSatz))
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, (SUM(BetragEWInklMwstAbzug) * -1), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), Abzug3MwstSatz))
			ELSE
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, (SUM(BetragEWExklMwstAbzug) * -1), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), Abzug3MwstSatz))
		END AS MwstBetrag,
		CASE
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ) - DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), Abzug3MwstSatz), SQL_DOUBLE)})
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), Abzug3MwstSatz), SQL_DOUBLE)})
			ELSE
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), SQL_DOUBLE)})
		END AS MwstBetragExkl,
		CASE
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW((SUM(BetragFWInklMwstAbzug) * -1), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), Abzug3MwstSatz))
        	WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW((SUM(BetragFWInklMwstAbzug) * -1), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), Abzug3MwstSatz))
			ELSE
				(-1)*(DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW((SUM(BetragFWExklMwstAbzug) * -1), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), Abzug3MwstSatz))
		END AS MwstBetragFW,
		CASE
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ) - DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), Abzug3MwstSatz), SQL_DOUBLE)})
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), Abzug3MwstSatz), SQL_DOUBLE)})
			ELSE
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW(SUM(BetragForAbzugFWExklMwst), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), SQL_DOUBLE)} )
		END AS MwstBetragExklFW,
			0 AS Gebinde,
			0 AS GebindeInkl,
			0 AS GebindeFW,
			0 AS GebindeInklFW,
		CASE
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), SQL_DOUBLE)} )
			WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), SQL_DOUBLE)} )
			ELSE
				(-1)*({fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent,  Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), Abzug3MwstSatz), SQL_DOUBLE)})
		END AS MwstBetragInkl, 
		CodeMwst AS CodeMwst
		FROM DBAgrofreshEK.BestellungsKopf
		WHERE AbrechnungsNr=:ArNr AND Mandant=:MandantOid
		GROUP BY AbrechnungsNr

	UNION ALL SELECT GebKontr->Gebinde->MwstEK AS Mwst,
			DBAgrofreshEK.Bestellungskopf_GetMwstCodeForUrprodAbzug(GebKontr->Gebinde->MwstEK,Bestellung->CodeMwst) AS MwstCode, 
			DBFibu_SD.Mwst_GetBezeichnungClass(GebKontr->Gebinde->MwstEK->ID, Bestellung->Mandant, :Lang, Datum) AS MwstBez,
			DBFibu_SD.Mwst_GetBezeichnungFaktClass(GebKontr->Gebinde->MwstEK->ID, Bestellung->Mandant, :Lang, Datum) AS MwstBezFakt,
			DBFibu_SD.Mwst_GetBezeichnungUrprodClass(GebKontr->Gebinde->MwstEK->ID, Bestellung->Mandant, :Lang, Datum) AS MwstBezUrprod,
			{fn CONVERT(DBFibu_SD.Mwst_GetMwstSatzFakturierungClass(GebKontr->Gebinde->MwstEK, Datum), SQL_DOUBLE)} AS MwstSatz, 
			GebindeSaldoBetragMwst AS MwstBetrag,
			0 AS MwstBetragExkl,
			GebindeSaldoBetragMwstFW AS MwstBetragFW,
			0 AS MwstBetragExklFW,
			GebindeSaldoBetragExklMwst AS Gebinde,
			GebindeSaldoBetragInklMwst AS GebindeInkl,
			GebindeSaldoBetragExklMwstFW AS GebindeFW,
			GebindeSaldoBetragInklMwstFW AS GebindeInklFW,
			0 AS MwstBetragInkl,
			GebKontr->Gebinde->MwstEK->SteuerungInklExkl AS SteuerungInklExkl
	FROM DBAgrofreshEK.GebDetail
	WHERE Bestellung->AbrechnungsNr=:ArNr AND 
			Bestellung->Mandant=:MandantOid AND
			GebindeSaldoBetragExklMwst<>0 AND 
			:mitGebinde = 1)
	WHERE MwstBetragExkl<>0 OR MwstBetrag<>0 OR Gebinde<>0
	GROUP BY Mwst ORDER BY MwstCode]]></SqlQuery>
</Query>

<Query name="ListeBestellungenSeriendruck">
<Type>%SQLQuery</Type>
<FormalSpec>vonNummer:%Integer,bisNummer:%Integer,vonDatum:%Date,bisDatum:%Date,sachbearbeiterNr:%Integer,auftragsstatus:%Integer,statusAutoVerarbeitung:%Integer,mutierte:%Integer,MandantOid:%String,lagerortOid:%Integer,abrechnungstyp:%String,stufengleich:%Integer,auftragsstatusRG:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID,
		Adresse->Adresse as Adresse,
		DBAgrofreshEK.BestellungsKopf_IsStatusGedruckt(BearbeitungsstatusOA) as OAGedruckt, 
		DBAgrofreshEK.BestellungsKopf_IsStatusGedruckt(BearbeitungsstatusBE) as BEGedruckt, 
		DBAgrofreshEK.BestellungsKopf_IsStatusGedruckt(BearbeitungsstatusAS) as ASGedruckt, 
		DBAgrofreshEK.BestellungsKopf_IsStatusGedruckt(BearbeitungsstatusAR) as ARGedruckt
	FROM DBAgrofreshEK.BestellungsKopf
	WHERE Mandant = :MandantOid AND
		((Annahmedatum is NULL AND Bestelldatum between {d :vonDatum} AND {d :bisDatum}) OR
		(Annahmedatum is NOT NULL AND Annahmedatum between {d :vonDatum} AND {d :bisDatum}))
		AND BestellungsNr BETWEEN :vonNummer AND :bisNummer
		AND ((:stufengleich = 1 AND NVL(Bestellstatus,0) < :auftragsstatusRG) OR (NVL(Bestellstatus,0) < :auftragsstatus) OR (:mutierte = 1 AND NVL(Bestellstatus,0) = :auftragsstatus))
		AND (:sachbearbeiterNr = 0 OR Sachbearbeiter->Nummer = :sachbearbeiterNr)
		AND (:statusAutoVerarbeitung = 0 OR StatusAutoVerarbeitung = :statusAutoVerarbeitung)
		AND NVL(Verbucht,0) = 0 
		AND (:lagerortOid = 0 OR Lagerort = :lagerortOid)
		AND ((:abrechnungstyp = "") OR (Abrechnungstyp = :abrechnungstyp))
		ORDER BY BestellungsNr DESC]]></SqlQuery>
</Query>

<Query name="ListeAbzuegeSR">
<Type>%SQLQuery</Type>
<FormalSpec>RgNr:%Integer,MandantOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT  Abzug1Typ, Abzug2Typ, Abzug3Typ,
	Abzug1Prozent, Abzug2Prozent, Abzug3Prozent,
	Abzug1Text AS Abzug1Text ,  
	Abzug2Text AS Abzug2Text, 
	Abzug3Text AS Abzug3Text ,
	
	CASE
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug1Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug1Typ), Abzug1MwstSatz), SQL_DOUBLE)}
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug1Typ) - DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug1Typ), Abzug1MwstSatz), SQL_DOUBLE)}
		ELSE
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent, Abzug1Typ), SQL_DOUBLE)} 
	END AS BetragAbzug1EWExkl,
	CASE
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug1Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug1BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug1Typ), Abzug1MwstSatz), SQL_DOUBLE)}
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug1Typ) - DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug1BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug1Typ), Abzug1MwstSatz), SQL_DOUBLE)}
		ELSE
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1BetragFW(SUM(BetragForAbzugFWExklMwst), Abzug1Prozent, Abzug1Typ), SQL_DOUBLE)} 
	END AS BetragAbzug1FWExkl,
	CASE
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug1Typ), SQL_DOUBLE)} 
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug1Typ), SQL_DOUBLE)} 
		ELSE
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent, Abzug1Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug1Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent, Abzug1Typ), Abzug1MwstSatz), SQL_DOUBLE)}
	END AS BetragAbzug1EWInkl,
	CASE
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug1Typ), SQL_DOUBLE)} 
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug1Typ), SQL_DOUBLE)} 
		ELSE
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug1BetragFW( SUM(BetragForAbzugFWExklMwst), Abzug1Prozent, Abzug1Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug1BetragFW(SUM(BetragForAbzugFWExklMwst), Abzug1Prozent, Abzug1Typ), Abzug1MwstSatz), SQL_DOUBLE)}
	END AS BetragAbzug1FWInkl,
	
	CASE
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), Abzug2MwstSatz), SQL_DOUBLE)}
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ) - DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), Abzug2MwstSatz), SQL_DOUBLE)}
		ELSE
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), SQL_DOUBLE)} 
	END AS BetragAbzug2EWExkl,
	CASE
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), Abzug2MwstSatz), SQL_DOUBLE)}
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ) - DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), Abzug2MwstSatz), SQL_DOUBLE)}
		ELSE
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW(SUM(BetragForAbzugFWExklMwst), Abzug1Prozent, Abzug2Prozent,Abzug1Typ, Abzug2Typ), SQL_DOUBLE)} 
	END AS BetragAbzug2FWExkl,
	CASE
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), SQL_DOUBLE)} 
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), SQL_DOUBLE)} 
		ELSE
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug2Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), Abzug2MwstSatz), SQL_DOUBLE)}
	END AS BetragAbzug2EWInkl,
	CASE
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), SQL_DOUBLE)} 
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), SQL_DOUBLE)} 
		ELSE
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW(SUM(BetragForAbzugFWExklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug2BetragFW(SUM(BetragForAbzugFWExklMwst), Abzug1Prozent, Abzug2Prozent, Abzug1Typ, Abzug2Typ), Abzug2MwstSatz), SQL_DOUBLE)}
	END AS BetragAbzug2FWInkl,
	
	CASE
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), Abzug3MwstSatz), SQL_DOUBLE)}
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ) - DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), Abzug3MwstSatz), SQL_DOUBLE)}
		ELSE
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), SQL_DOUBLE)} 
	END AS BetragAbzug3EWExkl,
	CASE
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW( SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), Abzug3MwstSatz), SQL_DOUBLE)}
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ) - DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromInkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), Abzug3MwstSatz), SQL_DOUBLE)}
		ELSE
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW(SUM(BetragForAbzugFWExklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), SQL_DOUBLE)} 
	END AS BetragAbzug3FWExkl,
	CASE
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), SQL_DOUBLE)} 
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), SQL_DOUBLE)} 
		ELSE
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug3Betrag(:MandantOid, SUM(BetragForAbzugEWExklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), Abzug3MwstSatz), SQL_DOUBLE)}
	END AS BetragAbzug3EWInkl,
	CASE
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGURPROD() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), SQL_DOUBLE)} 
		WHEN CodeMwst=DBCore.Konst_MWSTSTEUERUNGINKL() THEN
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW(SUM(BetragForAbzugFWInklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), SQL_DOUBLE)} 
		ELSE
			{fn CONVERT(DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW(SUM(BetragForAbzugFWExklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ) + DBAgrofreshEK.BestellungsKopf_CalcAbzugMwstBetragFromExkl(:MandantOid, DBAgrofreshEK.BestellungsKopf_CalcAbzug3BetragFW(SUM(BetragForAbzugFWExklMwst), Abzug1Prozent, Abzug2Prozent, Abzug3Prozent, Abzug1Typ, Abzug2Typ, Abzug3Typ), Abzug3MwstSatz), SQL_DOUBLE)}
	END AS BetragAbzug3FWInkl,
	
	SUM(BetragForAbzugEWExklMwst) as BetragForAbzugEWExklMwst,
	SUM(BetragForAbzugEWInklMwst) as BetragForAbzugEWInklMwst,
	SUM(BetragForAbzugFWExklMwst) as BetragForAbzugFWExklMwst,
	
	SUM(BetragEWExklMwst) as BetragOhneAbzugEWExklMwst,
	SUM(BetragEWInklMwst) as BetragOhneAbzugEWInklMwst,
	SUM(BetragFWExklMwst) as BetragOhneAbzugFWExklMwst
	
	FROM DBAgrofreshEK.Bestellungskopf
	WHERE AbrechnungsNr=:RgNr AND 
			Mandant=:MandantOid
	GROUP BY AbrechnungsNr</SqlQuery>
</Query>

<Query name="ListeBestByBestellNrAbnehmer">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,BestellNr:%Integer,Lieferdatum:%Date</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT ID, AnnahmeNr, BestellNrAbnehmer from DBAgrofreshEK.BestellungsKopf 
	where  BestellNrAbnehmer = :BestellNr and  Annahmedatum = {d :Lieferdatum}
    AND Mandant = :MandantOid</SqlQuery>
</Query>

<Query name="ListeBestByMandDatumAdrLaufend">
<Description>
ListeBestByMandDatumAdrLaufend(MandantOid As %String, vonDatum As %Date, bisDatum AS %Date, vonAdrNr AS %Integer, bisAdrNr AS %Integer, bisStatus AS %Integer) As %SQLQuery</Description>
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,vonDatum:%Date,bisDatum:%Date,vonAdrNr:%Integer,bisAdrNr:%Integer,bisStatus:%Integer=0</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT  %ID
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid  AND
			Adresse->Adresse->Adressnummer between :vonAdrNr AND :bisAdrNr AND
			Bestelldatum BETWEEN {d :vonDatum} AND {d :bisDatum} AND
			(NVL(Bestellstatus,0) <= :bisStatus OR :bisStatus = 0) AND
			NVL(Verbucht,0) = 0]]></SqlQuery>
</Query>

<Query name="ListeAbrechnungenPerDatum">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,bisDatum:%Date</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT  %ID, Adresse as KrediOid
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid  AND
			Abrechnungsdatum = {d :bisDatum} AND
			NVL(Bestellstatus,0) = 5 AND
			NVL(Verbucht,0) = 0
			GROUP BY AbrechnungsNr
			ORDER BY Adresse</SqlQuery>
</Query>

<Query name="VbAbrechnungsnummernJahr">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,MandJahrOid:%String,vonNr:%Integer,bisNr:%Integer,vonDatum:%Date,bisDatum:%Date,NurBarzahlungen:%Integer,BarzahlungskondOid:%String,journalNr:%Integer,AbteilungOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[    SELECT AbrechnungsNr, 
       Zahlungskondition->Code As ZahlungskonditionCode,
       Zahladresse->FibuKonto As ZahladresseFibuKonto,
       Zahladresse->Adresse->Kundenkategorie->EKFibuKonto As ZahladresseKundenkatFibuKontoEK,
       Zahladresse->Adresse->Kundenkategorie->EKFibuKonto->KontoNr As ZahladresseKundenkatFibuKontoEKKontoNr,
       Zahladresse->Adresse->Kundenkategorie As ZahladresseKundenkat,
       Zahladresse->Adresse->Kundenkategorie->Code As ZahladresseKundenkatCode,
       Zahladresse,
       Adresse->FibuKonto As LieferadresseFibuKonto,
       Adresse->Adresse->Kundenkategorie->EKFibuKonto As LieferadresseKundenkatFibuKontoEK,
       Adresse->Adresse->Kundenkategorie->EKFibuKonto->KontoNr As LieferadresseKundenkatFibuKontoEKKontoNr,
       Adresse->Adresse->Kundenkategorie As LieferadresseKundenkat,
       Adresse->Adresse->Kundenkategorie->Code As LieferadresseKundenkatCode,
       Adresse As Lieferadresse,
       Abrechnungsdatum,
       Waehrung,
       Kurseinheit,
       Kurs,
       Zahlungskondition,
       Abzug1Typ,
       Abzug1Prozent,
       Abzug1Text,
       Abzug1FibuKonto,
       DBFibu.Konto_GetSollClass(:MandJahrOid,Abzug1FibuKonto) As Abzug1FibuKontoSoll,
       Abzug1FibuKonto->KontoNr As Abzug1FibuKontoNr,
       Abzug1Mwst As Abzug1MwstOid,
       Abzug1MwstSatz As Abzug1MwstSatz,
       Abzug1Mwst->MwstCode As Abzug1MwstCode,
       Abzug2Typ,
       Abzug2Prozent,
       Abzug2Text,
       Abzug2FibuKonto,
       DBFibu.Konto_GetSollClass(:MandJahrOid,Abzug2FibuKonto) As Abzug2FibuKontoSoll,
       Abzug2FibuKonto->KontoNr As Abzug2FibuKontoNr,
       Abzug2Mwst As Abzug2MwstOid,
       Abzug2MwstSatz As Abzug2MwstSatz,
       Abzug2Mwst->MwstCode As Abzug2MwstCode,
       Abzug3Typ,
       Abzug3Prozent,
       Abzug3Text,
       Abzug3FibuKonto,
       DBFibu.Konto_GetSollClass(:MandJahrOid,Abzug3FibuKonto) As Abzug3FibuKontoSoll,
       Abzug3FibuKonto->KontoNr As Abzug3FibuKontoNr,
       Abzug3Mwst As Abzug3MwstOid,
       Abzug3MwstSatz As Abzug3MwstSatz,
       Abzug3Mwst->MwstCode As Abzug3MwstCode,
       SUM(DBAgrofreshEK.BestellungsKopf_GetBetragEWInklMwstByBestClass(ID)) AS BetragEWInklMwst,
       SUM(DBAgrofreshEK.BestellungsKopf_GetBetragMwstByBestClass(ID)) AS BetragMwst,
       SUM(DBAgrofreshEK.BestellungsKopf_GetBetragEWExklMwstByBestClass(ID)) AS BetragEWExklMwst,
       SUM(DBAgrofreshEK.BestellungsKopf_GetBetragInklMwstFWClass(ID)) AS BetragFWInklMwst,
       SUM(DBAgrofreshEK.BestellungsKopf_GetBetragMwstFWByBestClass(ID)) AS BetragMwstFW,
       SUM(DBAgrofreshEK.BestellungsKopf_GetBetragExklMwstFWClass(ID)) AS BetragFWExklMwst,
       SUM(NVL(DBAgrofreshEK.BestellungsKopf_GetGebindeSaldoByBestClass(ID),0) + NVL(DBAgrofreshEK.BestellungsKopf_GetGebindeMwstByBestClass(ID),0) + NVL(DBAgrofreshEK.BestellungsKopf_GetBetragEWInklMwstByBestClass(ID),0) - NVL(Skonto,0)) AS TotalMitGebinde,
       SUM(NVL(DBAgrofreshEK.BestellungsKopf_GetGebindeSaldoFWByBestClass(ID),0) + NVL(DBAgrofreshEK.BestellungsKopf_GetGebindeMwstFWByBestClass(ID),0) + NVL(DBAgrofreshEK.BestellungsKopf_GetBetragInklMwstFWClass(ID),0) - NVL(SkontoFW,0)) AS TotalMitGebindeFW,
       SUM(DBAgrofreshEK.BestellungsKopf_GetGebindeSaldoByBestClass(ID)) AS g,
       SUM(DBAgrofreshEK.BestellungsKopf_GetGebindeMwstByBestClass(ID)) AS GebindeMwstBetrag,
       SUM(DBAgrofreshEK.BestellungsKopf_GetGebindeSaldoFWByBestClass(ID)) AS GebindeSaldoFW,
       SUM(DBAgrofreshEK.BestellungsKopf_GetGebindeMwstFWByBestClass(ID)) AS GebindeMwstBetragFW,
       SUM(Skonto) AS Skonto,
       SUM(SkontoFW) AS SkontoFW
    FROM DBAgrofreshEK.BestellungsKopf 
    WHERE (:journalNr=0 AND (Abrechnungsnr>=:vonNr AND Abrechnungsnr<=:bisNr AND 
    	Abrechnungsdatum >= {d :vonDatum} AND 
    	Abrechnungsdatum <= {d :bisDatum} AND 
      	Mandant=:MandantOid AND (:NurBarzahlungen=0 OR Zahlungskondition=:BarzahlungskondOid) AND
	    (Abteilung=:AbteilungOid OR :AbteilungOid="") AND 
       	NVL(Verbucht,0)=0 AND Bestellstatus>=4)) OR (:journalNr<>0 AND VerbuchungsjournalNr=:journalNr) 
    GROUP BY Abrechnungsnr 
    ORDER BY Abrechnungsnr]]></SqlQuery>
</Query>

<Query name="VbBestellungen">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,RgNr:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT ID
	FROM DBAgrofreshEK.BestellungsKopf 
	WHERE Abrechnungsnr=:RgNr AND 
			Mandant=:MandantOid</SqlQuery>
</Query>

<Query name="VbAbrechnung">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,RgNr:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT Abrechnungsnr, 
			SUM(TotalMitGebinde) AS TotalMitGebinde,
			SUM(TotalMitGebindeFW) AS TotalMitGebindeFW,
			SUM(Skonto) AS Skonto,
			SUM(SkontoFW) AS SkontoFW
	FROM DBAgrofreshEK.BestellungsKopf
	WHERE Abrechnungsnr=:RgNr AND 
			Mandant=:MandantOid
	GROUP BY Abrechnungsnr</SqlQuery>
</Query>

<Query name="ListeVerbuchungsjnr">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT VerbuchungsjournalNr, MAX(Abrechnungsdatum) As Datum 
	FROM DBAgrofreshEK.BestellungsKopf 
	WHERE Mandant=:MandantOid AND 
			VerbuchungsjournalNr IS NOT NULL
	GROUP BY VerbuchungsjournalNr
	ORDER BY VerbuchungsjournalNr</SqlQuery>
</Query>

<Query name="GetIdByBestellNr">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,BestellNr:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT ID
	FROM DBAgrofreshEK.BEstellungskopf 
	WHERE 	BestellNrAbnehmer = :BestellNr AND 
			Mandant=:MandantOid</SqlQuery>
</Query>

<Query name="ListeBestellungVonBis">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,BestellungVon:%Integer,BestellungBis:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT ID
    FROM DBAgrofreshEK.BestellungsKopf
    WHERE Mandant = :MandantOid  AND
    	BestellungsNr between :BestellungVon AND :BestellungBis
    Order by BestellungsNr</SqlQuery>
</Query>

<Query name="ListeBestellungVorGebRec">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,VonKunde:%Integer,BisKunde:%Integer,VonDatum:%Date,BisDatum:%Date,Verrechnete:%Boolean,Verbuchte:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID
    FROM DBAgrofreshEK.BestellungsKopf
    WHERE Mandant = :MandantOid  AND
    	Adresse->Adresse->Adressnummer between :VonKunde AND :BisKunde AND
    	Annahmedatum between {d :VonDatum} AND {d :BisDatum} AND
    	(NVL(BearbeitungsstatusAR,0) = 0 OR :Verrechnete = 1) AND 
    	(NVL(Verbucht, 0) = 0 OR :Verbuchte = 1)]]></SqlQuery>
</Query>

<Query name="ListeAnKontrollliste">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,VonKunde:%Integer,BisKunde:%Integer,BisDatum:%Date,stufenKleinere:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID, AnnahmeNr, Annahmedatum, BearbeitungsstatusAS, StatusAutoVerarbeitung,
		Adresse 		AS "Adresse.Adresse", 
		Adresse->Adresse->Adressnummer AS "Adresse.AdresseNr", 
		Anrede 			AS "Adresse.Anrede", 
		Name 			AS "Adresse.Name", 
		Adresszeile1	AS "Adresse.Adresszeile1", 
		Adresszeile2 	AS "Adresse.Adresszeile2", 
		Adresszeile3 	AS "Adresse.Adresszeile3", 
		Plz				AS "Adresse.Plz", 
		PlzZusatz 		AS "Adresse.PlzZusatz", 
		Ort 			AS "Adresse.Ort", 
		Abnehmner->Adresse->Adressnummer 		AS "AbnehmerAdresse.Adressnummer", 
		Abnehmner->Adresse->Anrede 				AS "AbnehmerAdresse.Anrede",
		DBAdressen.Adresse_GetName(Abnehmner->Adresse->Adresscode, Abnehmner->Adresse->Name, Abnehmner->Adresse->VornameZusatz1, 1) 
												AS "AbnehmerAdresse.Name", 
		DBAdressen.Adresse_GetZusatz1(Abnehmner->Adresse->Adresscode, Abnehmner->Adresse->VornameZusatz1) 
												AS "AbnehmerAdresse.Adresszeile1", 
		Abnehmner->Adresse->Zusatz2	 			AS "AbnehmerAdresse.Adresszeile2", 
		Abnehmner->Adresse->Strasse	 || ' ' || Abnehmner->Adresse->Hausnummer AS "AbnehmerAdresse.Adresszeile3", 
		Abnehmner->Adresse->Plz 				AS "AbnehmerAdresse.Plz", 
		Abnehmner->Adresse->PlzInklZusatz		AS "AbnehmerAdresse.PlzZusatz", 
		Abnehmner->Adresse->Ort 				AS "AbnehmerAdresse.Ort", 
		{fn CONVERT(DBAgrofreshEK.BestellungsKopf_GetGebindeSaldoByBestClass(ID), SQL_DOUBLE)} AS Gebinde,
		{fn CONVERT(DBAgrofreshEK.BestellungsKopf_GetBetragEWExklMwstByBestClass(ID), SQL_DOUBLE)} AS BetragExkl,
		{fn CONVERT(DBAgrofreshEK.BestellungsKopf_GetBetragEWInklMwstByBestClass(ID), SQL_DOUBLE)} AS BetragInkl
    FROM DBAgrofreshEK.BestellungsKopf
    WHERE Mandant = :MandantOid  AND
    	Adresse->Adresse->Adressnummer between :VonKunde AND :BisKunde AND
    	Annahmedatum <={d :BisDatum} AND
    	(NVL(Bestellstatus,0) = DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR 
    	(:stufenKleinere = 1 AND (NVL(Bestellstatus,0) <= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein()))) AND
    	NVL(Verbucht, 0) = 0
    ORDER BY Adresse->Adresse->Adressnummer, Abnehmner->Adresse->Adressnummer, AnnahmeNr]]></SqlQuery>
</Query>

<Query name="ListeBestByBeastatusMutiert">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,AuftragVon:%Integer,AuftragBis:%Integer,AR:%Boolean,AS:%Boolean,BE:%Boolean,OA:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT  %ID
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Mandant = :MandantOid  AND
			BestellungsNr between :AuftragVon AND :AuftragBis AND
			((:AR = 1 AND BearbeitungsstatusAR = DBAgrofresh.Konst_BearbeitungsstatusMutiert()) OR
			(:AR = 1 AND BearbeitungsstatusBZ = DBAgrofresh.Konst_BearbeitungsstatusMutiert()) OR
			(:AS = 1 AND BearbeitungsstatusAS = DBAgrofresh.Konst_BearbeitungsstatusMutiert()) OR
			(:BE = 1 AND BearbeitungsstatusBE = DBAgrofresh.Konst_BearbeitungsstatusMutiert()) OR
			(:OA = 1 AND BearbeitungsstatusOA = DBAgrofresh.Konst_BearbeitungsstatusMutiert()))
			Order by BestellungsNr</SqlQuery>
</Query>

<Query name="ListeSelektionSAR">
<Type>%SQLQuery</Type>
<FormalSpec>KrediOid:%String,VonDatum:%Date,BisDatum:%Date</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID, Bestellstatus, StatusAutoVerarbeitung, AnnahmeNr, Annahmedatum, Bestelldatum, BestellungsNr, BetragEWInklMwst, GebindeSaldo
	 	FROM DBAgrofreshEK.BestellungsKopf
		WHERE 
    	Adresse= :KrediOid AND 
    	Bestelldatum between {d :VonDatum} AND {d :BisDatum} AND
    	NVL(Bestellstatus,0) < DBAgrofreshEK.Konst_BestellungsStatusAbrechnung()]]></SqlQuery>
</Query>

<Query name="ListeBestellungenSeriendruckSR">
<Type>%SQLQuery</Type>
<FormalSpec>vonNummer:%Integer,bisNummer:%Integer,vonDatum:%Date,bisDatum:%Date,sachbearbeiterNr:%Integer,MandantOid:%String,mutierte:%Integer,lagerortOid:%Integer,abrechnungstyp:%String,nurAN:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID,
		Adresse->Adresse as Adresse, 
		DBAgrofreshEK.BestellungsKopf_IsStatusGedruckt(BearbeitungsstatusAS) as ASGedruckt, 
		DBAgrofreshEK.BestellungsKopf_IsStatusGedruckt(BearbeitungsstatusAR) as ARGedruckt
		FROM DBAgrofreshEK.BestellungsKopf
		WHERE Mandant = :MandantOid AND
		((Annahmedatum is NULL AND Bestelldatum between {d :vonDatum} AND {d :bisDatum}) OR
		(Annahmedatum is NOT NULL AND Annahmedatum between {d :vonDatum} AND {d :bisDatum}))
		AND BestellungsNr BETWEEN :vonNummer AND :bisNummer
		AND ((:nurAN = 1 And NVL(Bestellstatus,0) = DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein()) or (:nurAN = 0))
		AND (:sachbearbeiterNr = 0 OR Sachbearbeiter->Nummer = :sachbearbeiterNr)
		AND NVL(StatusAutoVerarbeitung,0) <> DBAgrofresh.Konst_StatusAutoLaufAuftragGesperrtG()
		AND NVL(Verbucht,0) = 0 
		AND ((:lagerortOid = 0) OR (Lagerort = :lagerortOid))
		AND ((:abrechnungstyp = "") OR (Abrechnungstyp = :abrechnungstyp))
	ORDER BY BestellungsNr DESC]]></SqlQuery>
</Query>

<Query name="ListeBestByLieferantDatum">
<Type>%SQLQuery</Type>
<FormalSpec>AdressOid:%String,VonDatum:%Date,BisDatum:%Date</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT  %ID
	 		FROM DBAgrofreshEK.BestellungsKopf
			WHERE Adresse->Adresse = :AdressOid  AND
			Annahmedatum between {d :VonDatum} AND {d :BisDatum}
			Order by BestellungsNr]]></SqlQuery>
</Query>

<Query name="ListeLieferantenStatJeAuftrag">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,VonKunde:%Integer,BisKunde:%Integer,VonDatum:%Date,BisDatum:%Date,Archivierte:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID, AnnahmeNr, Annahmedatum, AbrechnungsNr, BearbeitungsstatusAS, StatusAutoVerarbeitung,
		Adresse 		AS "Adresse.Adresse", 
		Adresse->Adresse->Adressnummer AS "Adresse.AdresseNr", 
		Anrede 			AS "Adresse.Anrede", 
		Name 			AS "Adresse.Name", 
		Adresszeile1	AS "Adresse.Adresszeile1", 
		Adresszeile2 	AS "Adresse.Adresszeile2", 
		Adresszeile3 	AS "Adresse.Adresszeile3", 
		Plz				AS "Adresse.Plz", 
		PlzZusatz 		AS "Adresse.PlzZusatz", 
		Ort 			AS "Adresse.Ort", 
		Abnehmner->Adresse->Adressnummer 		AS "AbnehmerAdresse.Adressnummer", 
		Abnehmner->Adresse->Anrede 				AS "AbnehmerAdresse.Anrede",
		DBAdressen.Adresse_GetName(Abnehmner->Adresse->Adresscode, Abnehmner->Adresse->Name, Abnehmner->Adresse->VornameZusatz1, 1) 
												AS "AbnehmerAdresse.Name", 
		DBAdressen.Adresse_GetZusatz1(Abnehmner->Adresse->Adresscode, Abnehmner->Adresse->VornameZusatz1) 
												AS "AbnehmerAdresse.Adresszeile1", 
		Abnehmner->Adresse->Zusatz2	 			AS "AbnehmerAdresse.Adresszeile2", 
		Abnehmner->Adresse->Strasse	 || ' ' || Abnehmner->Adresse->Hausnummer AS "AbnehmerAdresse.Adresszeile3", 
		Abnehmner->Adresse->Plz 				AS "AbnehmerAdresse.Plz", 
		Abnehmner->Adresse->PlzInklZusatz		AS "AbnehmerAdresse.PlzZusatz", 
		Abnehmner->Adresse->Ort 				AS "AbnehmerAdresse.Ort", 
		{fn CONVERT(DBAgrofreshEK.BestellungsKopf_GetGebindeSaldoByBestClass(ID), SQL_DOUBLE)} AS Gebinde,
		TotalOhneGebMitAbzugExkl AS BetragExkl,
		TotalOhneGebMitAbzugInkl AS BetragInkl,
		TotalMitGebMitAbzug AS TotalMitGebinde
    FROM DBAgrofreshEK.BestellungsKopf
    WHERE Mandant = :MandantOid  AND
    	Adresse->Adresse->Adressnummer between :VonKunde AND :BisKunde AND
    	Annahmedatum between {d :VonDatum} AND {d :BisDatum} AND 
    	NVL(Bestellstatus,0) >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() AND
    	(NVL(Verbucht, 0) = 0 OR :Archivierte = 1)
    ORDER BY Adresse->Adresse->Adressnummer, Abnehmner->Adresse->Adressnummer, AbrechnungsNr, AnnahmeNr]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.BestellungsposAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61396,38398.27353</TimeCreated>

<Query name="ListeByBestellung">
<Type>%SQLQuery</Type>
<FormalSpec>BestellungOid:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, 
		AnzahlGebinde, 
		AbzugID,
		AnzahlGedruckteGebinde, 
		AnzahlHauptGebinde, 
		AnzahlJeGebinde, 
		Artikel, 
		Artikelcode,
		Artikel->ArtikelNr AS ArtikelNr,
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) AS Artikeltext,
		Artikel->DezFormatMenge As FormatMenge, 
		Artikel->DezFormatPreis As FormatPreis,
		BestellNr, 
		PositionsNr, 
		BestellteGebinde,
		BestellteMenge, 
		BetragExklMwst, 
		BetragExklMwstFW, 
		BetragInklMwstFW, 
		BetragInklMwst, 
		DetailText, 
		Gebinde, 
		GewichtBrutto, 
		GewichtNetto,
		DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde->ID, :MandantOid, :Lang) As GebindeBezeichnung, 
		GewichtTara, 
		Herkunft, 
		Lagerstatus, 
		Lieferdatum, 
		Menge,  
		Mengeneinheit AS MengeneinheitId,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, :MandantOid, :Lang) AS Mengeneinheit, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Produktionsart, :MandantOid, :Lang) AS "Produktionsart.Text", 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Herkunft, :MandantOid, :Lang) AS "Herkunft.Text", 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Qualitaet, :MandantOid, :Lang) AS "Qualitaet.Text", 
		Mwst,
		MwstBetrag, 
		MwstBetragFW, 
		MwstSatz, 
		MwstSatzExport,
		Preis, 
		Haendlingskosten,
		PreisFW, 
		RabattBetrag,	
		RabattProzent, 
		ParzellenNr,
		BestellungsKopf,
		ZusatztextID,
		GrammJeEinheit,
		GrammJeLaufmeter,
		Qualitaet,
		Produktionsart,
		Lagerort,
		Lieferant,
		Warenaufwand, 
		Abzugstyp AS AbzugstypId,
		VerlustProzent,
		BedarfMenge,
		BedarfAnzGebinde,
		SpezPreis,
		TeillieferNr,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Abzugstyp->ID, :MandantOid, :Lang) As "Abzugstyp.Text",
		Parzelle,
		Charge->ID As ChargeId,
		Charge->Mischposten As Mischposten,
		Charge->PositionsNr As ChargenNr
	    FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf = :BestellungOid ORDER BY Bestellungspos.PositionsNr, AbzugID]]></SqlQuery>
</Query>

<Query name="ListeIdsByBestellung">
<Type>%SQLQuery</Type>
<FormalSpec>BestellungOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT ID
	FROM DBAgrofreshEK.Bestellungspos
	WHERE Bestellungskopf = :BestellungOid
	ORDER BY Bestellungspos.PositionsNr</SqlQuery>
</Query>

<Query name="ListeIdsByTeilBestellung">
<Type>%SQLQuery</Type>
<FormalSpec>BestellungOid:%String,Teillieferung:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT ID
	FROM DBAgrofreshEK.Bestellungspos
	WHERE Bestellungskopf = :BestellungOid AND NVL(TeillieferNr,0) = :Teillieferung
	ORDER BY Bestellungspos.PositionsNr</SqlQuery>
</Query>

<Query name="ListeByBestellungDruck">
<Type>%SQLQuery</Type>
<FormalSpec>Bestellung:%String,MandantOid:%String,Lang:%String,OhneAbzuege:%Boolean,PrintZeroPositions:%Boolean=1</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, 
		PositionsNr, 
		AbzugID,
		Abzugstyp->PositionsNr As "Abzugstyp.Nr",
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Abzugstyp->ID, :MandantOid, :Lang) As "Abzugstyp.Text",
		Artikelcode, 
		SUM(AnzahlGebinde) AS AnzahlGebinde, 
		SUM(AnzahlGedruckteGebinde) AS AnzahlGedruckteGebinde, 
		SUM(AnzahlHauptGebinde) AS AnzahlHauptGebinde, 
		AnzahlJeGebinde, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) AS "Artikel.Artikeltext",
		DBAgrofresh.Artikel_GetLLFormatClass(Artikel->DezStellenMenge) As "Artikel.FormatMenge", 
		DBAgrofresh.Artikel_GetLLFormatClass(Artikel->DezStellenPreis) As "Artikel.FormatPreis",
		Artikel->Herkunftsart As "Artikel.Herkunftsart",
		Artikel->Artikelgruppe->ArtikelgruppenNr As "Artikel.Artikelgruppe.ArtikelgruppenNr",
		Produktionsart->PositionsNr As "Produktionsart.Nr",
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Produktionsart, :MandantOid, :Lang) As "Produktionsart.Text",
		Artikelcode, 
		BestellNr, 
		PositionsNr, 
		SUM(BestellteMenge) AS BestellteMenge, 
		SUM(BetragExklMwst) AS BetragExklMwst, 
		SUM(BetragExklMwstFW) AS BetragExklMwstFW, 
		SUM(BetragInklMwstFW) AS BetragInklMwstFW, 
		SUM(BetragInklMwst) AS BetragInklMwst, 
		Charge->Mischposten As Mischposten,
		Charge->PositionsNr AS "ChargenNr",
		DetailText, 
		Gebinde, 
		SUM(GewichtBrutto) AS GewichtBrutto, 
		SUM(GewichtNetto) AS GewichtNetto,
		DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde->ID, :MandantOid, :Lang) As GebindeBezeichnung, 
		SUM(GewichtTara) AS GewichtTara, 
		Herkunft->PositionsNr As "Herkunft.Nr",
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Herkunft, :MandantOid, :Lang) As "Herkunft.Text",
		Herkunft->IsoKennzeichen As "Herkunft.IsoKennzeichen",
		Lagerstatus, 
		Lieferant->Adressnummer As "Lieferant.AdressNr", 
		Lieferant->Name As "Lieferant.Name",
		Lieferant->PLZ As "Lieferant.PLZ",
		Lieferant->Ort As "Lieferant.Ort",
		Lieferdatum, 
		SUM(Menge) AS Menge,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, :MandantOid, :Lang) AS Mengeneinheit, 
		Mwst, 
		SUM(MwstBetrag) AS MwstBetrag, 
		SUM(MwstBetragFW) AS MwstBetragFW, 
		MwstSatz, 
		ParzellenNr, 
		Preis, 
		PreisFW, 
		SUM(RabattBetrag) AS RabattBetrag,
		SUM(RabattBetragFW) AS RabattBetragFW,	
		SUM(RabattProzent) AS RabattProzent, 
		Bestellungskopf,
		Qualitaet->PositionsNr As "Qualitaet.Nr",
		Preis, 
		Haendlingskosten,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Qualitaet, :MandantOid, :Lang) As "Qualitaet.Text"
	    FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf = :Bestellung
	    AND (:OhneAbzuege = 0 OR AbzugID IS NULL OR AbzugID = 0) AND
	    ((Artikelcode <> DBAgrofresh.Konst_ArtCodeMengePreis() OR Menge <> 0 OR AnzahlGebinde <> 0) OR :PrintZeroPositions = 1)
	    Group by Bestellungspos.PositionsNr, ZusatztextID, AbzugID
	    
	    ORDER BY Bestellungspos.PositionsNr]]></SqlQuery>
</Query>

<Query name="ListeByTeilannahmeDruck">
<Type>%SQLQuery</Type>
<FormalSpec>Bestellung:%String,TeilannahmeNr:%Integer,MandantOid:%String,Lang:%String,OhneAbzuege:%Boolean,PrintZeroPositions:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, 
		PositionsNr, 
		AbzugID,
		Abzugstyp->PositionsNr As "Abzugstyp.Nr",
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Abzugstyp->ID, :MandantOid, :Lang) As "Abzugstyp.Text",
		Artikelcode, 
		SUM(AnzahlGebinde) AS AnzahlGebinde, 
		SUM(AnzahlGedruckteGebinde) AS AnzahlGedruckteGebinde, 
		SUM(AnzahlHauptGebinde) AS AnzahlHauptGebinde, 
		AnzahlJeGebinde, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) AS "Artikel.Artikeltext",
		DBAgrofresh.Artikel_GetLLFormatClass(Artikel->DezStellenMenge) As "Artikel.FormatMenge", 
		DBAgrofresh.Artikel_GetLLFormatClass(Artikel->DezStellenPreis) As "Artikel.FormatPreis",
		Artikel->Herkunftsart As "Artikel.Herkunftsart",
		Artikel->Artikelgruppe->ArtikelgruppenNr As "Artikel.Artikelgruppe.ArtikelgruppenNr",
		Produktionsart->PositionsNr As "Produktionsart.Nr",
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Produktionsart, :MandantOid, :Lang) As "Produktionsart.Text",
		Artikelcode, 
		BestellNr, 
		PositionsNr, 
		SUM(BestellteMenge) AS BestellteMenge, 
		SUM(BetragExklMwst) AS BetragExklMwst, 
		SUM(BetragExklMwstFW) AS BetragExklMwstFW, 
		SUM(BetragInklMwstFW) AS BetragInklMwstFW, 
		SUM(BetragInklMwst) AS BetragInklMwst, 
		Charge->Mischposten As Mischposten,
		Charge->PositionsNr AS "ChargenNr",
		DetailText, 
		Gebinde, 
		SUM(GewichtBrutto) AS GewichtBrutto, 
		SUM(GewichtNetto) AS GewichtNetto,
		DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde->ID, :MandantOid, :Lang) As GebindeBezeichnung, 
		SUM(GewichtTara) AS GewichtTara, 
		Herkunft->PositionsNr As "Herkunft.Nr",
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Herkunft, :MandantOid, :Lang) As "Herkunft.Text",
		Herkunft->IsoKennzeichen As "Herkunft.IsoKennzeichen",
		Lagerstatus, 
		Lieferant->Adressnummer As "Lieferant.AdressNr", 
		Lieferant->Name As "Lieferant.Name",
		Lieferant->PLZ As "Lieferant.PLZ",
		Lieferant->Ort As "Lieferant.Ort",
		Lieferdatum, 
		SUM(Menge) AS Menge,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, :MandantOid, :Lang) AS Mengeneinheit, 
		Mwst, 
		SUM(MwstBetrag) AS MwstBetrag, 
		SUM(MwstBetragFW) AS MwstBetragFW, 
		MwstSatz, 
		ParzellenNr, 
		Preis, 
		PreisFW, 
		SUM(RabattBetrag) AS RabattBetrag,
		SUM(RabattBetragFW) AS RabattBetragFW,	
		SUM(RabattProzent) AS RabattProzent, 
		Bestellungskopf,
		Qualitaet->PositionsNr As "Qualitaet.Nr",
		Preis, 
		Haendlingskosten,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Qualitaet, :MandantOid, :Lang) As "Qualitaet.Text"
	    FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf = :Bestellung
	    AND TeillieferNr = :TeilannahmeNr
	    AND (:OhneAbzuege = 0 OR AbzugID IS NULL OR AbzugID = 0) AND
	    ((Artikelcode <> DBAgrofresh.Konst_ArtCodeMengePreis() OR Menge <> 0 OR AnzahlGebinde <> 0) OR :PrintZeroPositions = 1)
	    Group by Bestellungspos.PositionsNr, ZusatztextID, AbzugID
	    ORDER BY Bestellungspos.PositionsNr]]></SqlQuery>
</Query>

<Query name="ListeLagerNichtNachgefuehrt">
<Type>%SQLQuery</Type>
<FormalSpec>BestellungOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID AS ID FROM DBAgrofreshEK.Bestellungspos 
	WHERE Bestellungskopf = :BestellungOid AND Artikel->LagerAktiv=1 AND NVL(Lagerstatus,0)<>2
	ORDER BY Bestellungspos.PositionsNr]]></SqlQuery>
</Query>

<Query name="ListeLagerNichtNachgefuehrtTAS">
<Type>%SQLQuery</Type>
<FormalSpec>BestellungOid:%String,TeillieferNr:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID AS ID, 
	(SELECT h.Lagerstatus FROM DBAgrofreshEK.Bestellungspos h WHERE h.Bestellungskopf = :BestellungOid 
	    AND NVL(h.TeillieferNr,0) = 0 AND h.PositionsNr = p.PositionsNr AND NVL(ZusatztextID, 0) = 0) AS HauptLagerstatus
	FROM DBAgrofreshEK.Bestellungspos p
	WHERE Bestellungskopf = :BestellungOid AND NVL(TeillieferNr,0) = :TeillieferNr AND Artikel->LagerAktiv=1 AND NVL(Lagerstatus,0)<>2
	ORDER BY PositionsNr]]></SqlQuery>
</Query>

<Query name="ListeEtiketten">
<Type>%SQLQuery</Type>
<FormalSpec>Bestellung:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT %ID AS ID, AnzahlGebinde, AnzahlGedruckteGebinde FROM DBAgrofreshEK.Bestellungspos 
	WHERE Bestellungskopf = :Bestellung
	ORDER BY Bestellungspos.PositionsNr</SqlQuery>
</Query>

<Query name="ListeEtikettenNurNichtGedruckte">
<Type>%SQLQuery</Type>
<FormalSpec>Bestellung:%String,nurNichtGedruckte:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID AS ID, AnzahlGebinde, AnzahlGedruckteGebinde FROM DBAgrofreshEK.Bestellungspos 
	WHERE Bestellungskopf = :Bestellung AND NVL(AnzahlGebinde,0)>NVL(AnzahlGedruckteGebinde,0)
	ORDER BY Bestellungspos.PositionsNr]]></SqlQuery>
</Query>

<Query name="ListeEtikettenTAS">
<Type>%SQLQuery</Type>
<FormalSpec>Bestellung:%String,TeillieferungsNr:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT %ID AS ID, AnzahlGebinde, AnzahlGedruckteGebinde FROM DBAgrofreshEK.Bestellungspos 
	WHERE Bestellungskopf = :Bestellung AND NVL(TeillieferNr,0) = :TeillieferungsNr
	ORDER BY Bestellungspos.PositionsNr</SqlQuery>
</Query>

<Query name="ListeEtikettenTASNurNichtGedr">
<Type>%SQLQuery</Type>
<FormalSpec>Bestellung:%String,TeillieferungsNr:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID AS ID, AnzahlGebinde, AnzahlGedruckteGebinde FROM DBAgrofreshEK.Bestellungspos 
	WHERE Bestellungskopf = :Bestellung AND NVL(AnzahlGebinde,0)>NVL(AnzahlGedruckteGebinde,0) AND NVL(TeillieferNr,0) = :TeillieferungsNr
	ORDER BY Bestellungspos.PositionsNr]]></SqlQuery>
</Query>

<Query name="ListeByBestellungSSCC">
<Type>%SQLQuery</Type>
<FormalSpec>BestellungOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, 
		SSCCInfo_AnzahlGebinde AS AnzahlGebinde, 
		Bestellungspos->AnzahlHauptGebinde, 
		Bestellungspos->AnzahlJeGebinde, 
		Bestellungspos->Artikel, 
		Bestellungspos->Artikelcode,
		Bestellungspos->Artikel->ArtikelNr AS ArtikelNr,
		DBAgrofresh.Artikel_GetArtikeltextClass(Bestellungspos->Artikel->ID, Bestellungspos->Bestellungskopf->Mandant, 'de') AS Artikeltext,
		Bestellungspos->GewichtBrutto, 
		Bestellungspos->GewichtNetto,
		DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Bestellungspos->Gebinde->ID, Bestellungspos->Bestellungskopf->Mandant, 'de') As GebindeBezeichnung, 
		Bestellungspos->GewichtTara, 
		Bestellungspos->Herkunft, 
		Bestellungspos->Menge,  
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Bestellungspos->Mengeneinheit, Bestellungspos->Bestellungskopf->Mandant, 'de') AS Mengeneinheit, 
		SSCCInfo_SSCC as SSCC, SSCCInfo_SSCC as SSCCFormatiert,
		Bestellungspos->SpezPreis->Barcode As GTIN,
		Bestellungspos->Charge->PositionsNr As ChargenNr
	    FROM DBAgrofreshEK.Bestellungspos_SSCCInfo WHERE Bestellungspos->Bestellungskopf = :BestellungOid ORDER BY Bestellungspos->PositionsNr]]></SqlQuery>
</Query>

<Query name="ListeByBestellungsPosSSCC">
<Type>%SQLQuery</Type>
<FormalSpec>BestellungsPosOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT %ID, 
		SSCCInfo_SSCC as SSCC,
		SSCCInfo_AnzahlGebinde AS AnzahlGebinde
	    FROM DBAgrofreshEK.Bestellungspos_SSCCInfo WHERE Bestellungspos = :BestellungsPosOid</SqlQuery>
</Query>

<Query name="ListeKundeArtikelUmsatz">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelVon:%String,ArtikelBis:%String,ArtGrpVon:%Integer,ArtGrpBis:%Integer,AdresseVon:%Integer,AdresseBis:%Integer,DatumVon:%Date,DatumBis:%Date,DatumVJVon:%Date,DatumVJBis:%Date,OnlyLiefer:%Boolean,OnlyVerbucht:%Boolean,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 
		SUM(BetragExkl) AS BetragExkl, SUM(BetragInkl) AS BetragInkl, SUM(Menge) AS Menge, SUM(BetragVorjahrExkl) AS BetragVorjahrExkl, SUM(BetragVorjahrInkl) AS BetragVorjahrInkl, SUM(MengeVorjahr) AS MengeVorjahr,
		MengeneinheitArtikel, Mengeneinheit, "Artikel.ArtikelNr", "Artikel.Artikeltext", "Artikel.ArtikelGrpNr", "Artikel.ArtikelGrpText",
		"Adresse.Adressnummer", "Adresse.Name", "Adresse.Strasse", "Adresse.Plz", "Adresse.Ort", "Steuerungscode", "Datum", "Jahr", "Vorjahr"
	FROM (
	SELECT 
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Menge) As Menge,  
		0 As BetragVorjahrExkl,
		0 As BetragVorjahrInkl,
		0 As MengeVorjahr,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, Bestellungskopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		Bestellungskopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(Bestellungskopf->Adresse->Adresse->Adresscode, Bestellungskopf->Adresse->Adresse->Name, Bestellungskopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		Bestellungskopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		Bestellungskopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		Bestellungskopf->Adresse->Adresse->Ort 			AS "Adresse.Ort",
		CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END AS Datum,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Jahr,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)-1) AS Vorjahr
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND Bestellungskopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	    AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND Bestellungskopf->Mandant=:MandantOid 
	    GROUP BY Bestellungskopf->Adresse->Adresse->Adressnummer, Artikel->ArtikelNr
	 
	 UNION ALL
	    SELECT 
	    0 As BetragInkl,
	    0 As BetragExkl,
		0 As Menge,
		SUM(Nettobetrag2ExklMwstEW) As BetragVorjahrExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragVorjahrInkl,
		SUM(Menge) As MengeVorjahr,  
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, Bestellungskopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		Bestellungskopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(Bestellungskopf->Adresse->Adresse->Adresscode, Bestellungskopf->Adresse->Adresse->Name, Bestellungskopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		Bestellungskopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		Bestellungskopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		Bestellungskopf->Adresse->Adresse->Ort 			AS "Adresse.Ort",
		CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END AS Datum,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)+1) AS Jahr,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Vorjahr
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND Bestellungskopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	   	AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND Bestellungskopf->Mandant=:MandantOid 
	    GROUP BY Bestellungskopf->Adresse->Adresse->Adressnummer, Artikel->ArtikelNr
	)
	GROUP BY "Adresse.Adressnummer", "Artikel.ArtikelNr"
	ORDER BY "Adresse.Adressnummer", "Artikel.ArtikelNr"]]></SqlQuery>
</Query>

<Query name="ListeArtikelKundeUmsatz">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelVon:%String,ArtikelBis:%String,ArtGrpVon:%Integer,ArtGrpBis:%Integer,AdresseVon:%Integer,AdresseBis:%Integer,DatumVon:%Date,DatumBis:%Date,DatumVJVon:%Date,DatumVJBis:%Date,OnlyLiefer:%Boolean,OnlyVerbucht:%Boolean,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 
		SUM(BetragExkl) AS BetragExkl, SUM(BetragInkl) AS BetragInkl, SUM(Menge) AS Menge, SUM(BetragVorjahrExkl) AS BetragVorjahrExkl, SUM(BetragVorjahrInkl) AS BetragVorjahrInkl, SUM(MengeVorjahr) AS MengeVorjahr,
		MengeneinheitArtikel, Mengeneinheit, "Artikel.ArtikelNr", "Artikel.Artikeltext", "Artikel.ArtikelGrpNr", "Artikel.ArtikelGrpText",
		"Adresse.Adressnummer", "Adresse.Name", "Adresse.Strasse", "Adresse.Plz", "Adresse.Ort", "Steuerungscode", "Datum", "Jahr", "Vorjahr"
	FROM (
	SELECT 
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Menge) As Menge,  
		0 As BetragVorjahrExkl,
		0 As BetragVorjahrInkl,
		0 As MengeVorjahr,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, Bestellungskopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		Bestellungskopf->Adresse->Adresse->Adressnummer AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(Bestellungskopf->Adresse->Adresse->Adresscode, Bestellungskopf->Adresse->Adresse->Name, Bestellungskopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		Bestellungskopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		Bestellungskopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		Bestellungskopf->Adresse->Adresse->Ort 			AS "Adresse.Ort",
		CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END AS Datum,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Jahr,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)-1) AS Vorjahr
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND Bestellungskopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	    AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND Bestellungskopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr, Bestellungskopf->Adresse->Adresse->Adressnummer
	 
	 UNION ALL
	    SELECT 
	    0 As BetragInkl,
	    0 As BetragExkl,
		0 As Menge,
		SUM(Nettobetrag2ExklMwstEW) As BetragVorjahrExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragVorjahrInkl,
		SUM(Menge) As MengeVorjahr,  
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, Bestellungskopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		Bestellungskopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(Bestellungskopf->Adresse->Adresse->Adresscode, Bestellungskopf->Adresse->Adresse->Name, Bestellungskopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		Bestellungskopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		Bestellungskopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		Bestellungskopf->Adresse->Adresse->Ort 			AS "Adresse.Ort",
		CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END AS Datum,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)+1) AS Jahr,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Vorjahr
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND Bestellungskopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	   	AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND Bestellungskopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr, Bestellungskopf->Adresse->Adresse->Adressnummer
	)
	GROUP BY "Artikel.ArtikelNr", "Adresse.Adressnummer"
	ORDER BY "Artikel.ArtikelNr", "Adresse.Adressnummer"]]></SqlQuery>
</Query>

<Query name="ListeKundeUmsatz">
<Type>%SQLQuery</Type>
<FormalSpec>AdresseVon:%Integer,AdresseBis:%Integer,DatumVon:%Date,DatumBis:%Date,DatumVJVon:%Date,DatumVJBis:%Date,OnlyLiefer:%Boolean,OnlyVerbucht:%Boolean,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 
		SUM(BetragExkl) AS BetragExkl, SUM(BetragInkl) AS BetragInkl, SUM(Menge) AS Menge, SUM(BetragVorjahrExkl) AS BetragVorjahrExkl, SUM(BetragVorjahrInkl) AS BetragVorjahrInkl, SUM(MengeVorjahr) AS MengeVorjahr,
		"Adresse.Adressnummer", "Adresse.Name", "Adresse.Strasse", "Adresse.Plz", "Adresse.Ort", "Adresse.KundengruppeCode", "Adresse.KundengruppeText", "Steuerungscode"
	FROM (
	SELECT 
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Menge) As Menge,  
		0 As BetragVorjahrExkl,
		0 As BetragVorjahrInkl,
		0 As MengeVorjahr,
		
		Bestellungskopf->Adresse->Adresse->Kundengruppe->Code as "Adresse.KundengruppeCode",
		DBAdressen_SD.Kundengruppe_GetKundengruppentextClass(Bestellungskopf->Adresse->Adresse->Kundengruppe, :MandantOid, :Lang) as "Adresse.KundengruppeText",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Bestellungskopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(Bestellungskopf->Adresse->Adresse->Adresscode, Bestellungskopf->Adresse->Adresse->Name, Bestellungskopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		Bestellungskopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		Bestellungskopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		Bestellungskopf->Adresse->Adresse->Ort 			AS "Adresse.Ort"
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND Bestellungskopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND Bestellungskopf->Mandant=:MandantOid 
	    GROUP BY Bestellungskopf->Adresse->Adresse->Adressnummer
	 
	 UNION ALL
	    SELECT 
	    0 As BetragInkl,
	    0 As BetragExkl,
		0 As Menge,
		SUM(Nettobetrag2ExklMwstEW) As BetragVorjahrExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragVorjahrInkl,
		SUM(Menge) As MengeVorjahr,  
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Bestellungskopf->Adresse->Adresse->Kundengruppe->Code as "Adresse.KundengruppeCode",
		DBAdressen_SD.Kundengruppe_GetKundengruppentextClass(Bestellungskopf->Adresse->Adresse->Kundengruppe, :MandantOid, :Lang) as "Adresse.KundengruppeText",
		
		Bestellungskopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(Bestellungskopf->Adresse->Adresse->Adresscode, Bestellungskopf->Adresse->Adresse->Name, Bestellungskopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		Bestellungskopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		Bestellungskopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		Bestellungskopf->Adresse->Adresse->Ort 			AS "Adresse.Ort"
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND Bestellungskopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	   	AND ((Bestellungskopf->Annahmedatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND Bestellungskopf->Mandant=:MandantOid 
	    GROUP BY Bestellungskopf->Adresse->Adresse->Adressnummer
	)
	GROUP BY "Adresse.Adressnummer"
	ORDER BY "Adresse.Adressnummer"]]></SqlQuery>
</Query>

<Query name="ListeArtikelUmsatz">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelVon:%String,ArtikelBis:%String,ArtGrpVon:%Integer,ArtGrpBis:%Integer,DatumVon:%Date,DatumBis:%Date,DatumVJVon:%Date,DatumVJBis:%Date,OnlyLiefer:%Boolean,OnlyVerbucht:%Boolean,Herkunft:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 
		SUM(BetragExkl) AS BetragExkl, SUM(BetragInkl) AS BetragInkl, SUM(Menge) AS Menge, SUM(BetragVorjahrExkl) AS BetragVorjahrExkl, SUM(BetragVorjahrInkl) AS BetragVorjahrInkl, SUM(MengeVorjahr) AS MengeVorjahr,
		MengeneinheitArtikel, Mengeneinheit, "Artikel.ArtikelNr", "Steuerungscode", "Artikel.Artikeltext", "Artikel.ArtikelGrpNr", "Artikel.ArtikelGrpText"
	FROM (
	SELECT 
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Menge) As Menge,  
		0 As BetragVorjahrExkl,
		0 As BetragVorjahrInkl,
		0 As MengeVorjahr,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, Bestellungskopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText"
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND ((:Herkunft = "") OR (Herkunft = :Herkunft))
	    AND Bestellungskopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr
	 
	 UNION ALL
	    SELECT 
	    0 As BetragInkl,
	    0 As BetragExkl,
		0 As Menge,
		SUM(Nettobetrag2ExklMwstEW) As BetragVorjahrExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragVorjahrInkl,
		SUM(Menge) As MengeVorjahr,  
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, Bestellungskopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText"
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		 AND ((:Herkunft = "") OR (Herkunft = :Herkunft))
	    AND Bestellungskopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr
	)
	GROUP BY "Artikel.ArtikelNr"
	ORDER BY "Artikel.ArtikelGrpNr","Artikel.ArtikelNr"]]></SqlQuery>
</Query>

<Query name="ListeKundeArtUmsatzSelektion">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelVon:%String,ArtikelBis:%String,ProdArtVon:%Integer,ProdArtBis:%Integer,AufberArtVon:%Integer,AufberArtBis:%Integer,HerkunftVon:%Integer,HerkunftBis:%Integer,QualiVon:%Integer,QualiBis:%Integer,AdresseVon:%Integer,AdresseBis:%Integer,DatumVon:%Date,DatumBis:%Date,DatumVJVon:%Date,DatumVJBis:%Date,OnlyLiefer:%Boolean,OnlyVerbucht:%Boolean,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 
		SUM(BetragExkl) AS BetragExkl, SUM(BetragInkl) AS BetragInkl, SUM(Menge) AS Menge, SUM(BetragVorjahrExkl) AS BetragVorjahrExkl, SUM(BetragVorjahrInkl) AS BetragVorjahrInkl, SUM(MengeVorjahr) AS MengeVorjahr,
		MengeneinheitArtikel, Mengeneinheit, "Artikel.ArtikelNr", "Artikel.Artikeltext", "Artikel.ArtikelGrpNr", "Artikel.ArtikelGrpText",
		"Adresse.Adressnummer", "Adresse.Name", "Adresse.Strasse", "Steuerungscode", "Adresse.Plz", "Adresse.Ort"
	FROM (
	SELECT 
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Menge) As Menge,  
		0 As BetragVorjahrExkl,
		0 As BetragVorjahrInkl,
		0 As MengeVorjahr,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, Bestellungskopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		Bestellungskopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(Bestellungskopf->Adresse->Adresse->Adresscode, Bestellungskopf->Adresse->Adresse->Name, Bestellungskopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		Bestellungskopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		Bestellungskopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		Bestellungskopf->Adresse->Adresse->Ort 			AS "Adresse.Ort"
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND Bestellungskopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	    AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis)
	    AND ((Artikel->Produktionsart->PositionsNr BETWEEN :ProdArtVon AND :ProdArtBis) OR (:ProdArtBis = 0))
	   	AND ((Artikel->Herkunft->PositionsNr BETWEEN :HerkunftVon AND :HerkunftBis)OR (:HerkunftBis = 0))
	    AND ((Artikel->Qualitaetsklasse->PositionsNr BETWEEN :QualiVon AND :QualiBis)OR (:QualiBis = 0))
	    AND ((Artikel->Aufbereitungsart->PositionsNr BETWEEN :AufberArtVon AND :AufberArtBis)OR (:AufberArtBis = 0))
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND Bestellungskopf->Mandant=:MandantOid 
	    GROUP BY Bestellungskopf->Adresse->Adresse->Adressnummer, Artikel->ArtikelNr
	 
	 UNION ALL
	    SELECT 
	    0 As BetragInkl,
	    0 As BetragExkl,
		0 As Menge,
		SUM(Nettobetrag2ExklMwstEW) As BetragVorjahrExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragVorjahrInkl,
		SUM(Menge) As MengeVorjahr,  
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, Bestellungskopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		Bestellungskopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(Bestellungskopf->Adresse->Adresse->Adresscode, Bestellungskopf->Adresse->Adresse->Name, Bestellungskopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		Bestellungskopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		Bestellungskopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		Bestellungskopf->Adresse->Adresse->Ort 			AS "Adresse.Ort"
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND Bestellungskopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	   	AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis)
	    AND ((Artikel->Produktionsart->PositionsNr BETWEEN :ProdArtVon AND :ProdArtBis) OR (:ProdArtBis = 0))
	   	AND ((Artikel->Herkunft->PositionsNr BETWEEN :HerkunftVon AND :HerkunftBis)OR (:HerkunftBis = 0))
	    AND ((Artikel->Qualitaetsklasse->PositionsNr BETWEEN :QualiVon AND :QualiBis)OR (:QualiBis = 0))
	    AND ((Artikel->Aufbereitungsart->PositionsNr BETWEEN :AufberArtVon AND :AufberArtBis)OR (:AufberArtBis = 0))
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND Bestellungskopf->Mandant=:MandantOid 
	    GROUP BY Bestellungskopf->Adresse->Adresse->Adressnummer, Artikel->ArtikelNr
	)
	GROUP BY "Adresse.Adressnummer", "Artikel.ArtikelNr"
	ORDER BY "Adresse.Adressnummer", "Artikel.ArtikelNr"]]></SqlQuery>
</Query>

<Query name="ListeArtUmsatzSelektion">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelVon:%String,ArtikelBis:%String,ProdArtVon:%Integer,ProdArtBis:%Integer,AufberArtVon:%Integer,AufberArtBis:%Integer,HerkunftVon:%Integer,HerkunftBis:%Integer,QualiVon:%Integer,QualiBis:%Integer,DatumVon:%Date,DatumBis:%Date,DatumVJVon:%Date,DatumVJBis:%Date,OnlyLiefer:%Boolean,OnlyVerbucht:%Boolean,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 
		SUM(BetragExkl) AS BetragExkl, SUM(BetragInkl) AS BetragInkl, SUM(Menge) AS Menge, SUM(BetragVorjahrExkl) AS BetragVorjahrExkl, SUM(BetragVorjahrInkl) AS BetragVorjahrInkl, SUM(MengeVorjahr) AS MengeVorjahr,
		MengeneinheitArtikel, Mengeneinheit, "Artikel.ArtikelNr", "Artikel.Artikeltext", "Artikel.ArtikelGrpNr", "Artikel.ArtikelGrpText", "Steuerungscode"
	FROM (
	SELECT 
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Menge) As Menge,  
		0 As BetragVorjahrExkl,
		0 As BetragVorjahrInkl,
		0 As MengeVorjahr,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, Bestellungskopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText"
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis)
	    AND ((Artikel->Produktionsart->PositionsNr BETWEEN :ProdArtVon AND :ProdArtBis) OR (:ProdArtBis = 0))
	   	AND ((Artikel->Herkunft->PositionsNr BETWEEN :HerkunftVon AND :HerkunftBis)OR (:HerkunftBis = 0))
	    AND ((Artikel->Qualitaetsklasse->PositionsNr BETWEEN :QualiVon AND :QualiBis)OR (:QualiBis = 0))
	    AND ((Artikel->Aufbereitungsart->PositionsNr BETWEEN :AufberArtVon AND :AufberArtBis)OR (:AufberArtBis = 0))
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND Bestellungskopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr
	 
	 UNION ALL
	    SELECT 
	    0 As BetragInkl,
	    0 As BetragExkl,
		0 As Menge,
		SUM(Nettobetrag2ExklMwstEW) As BetragVorjahrExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragVorjahrInkl,
		SUM(Menge) As MengeVorjahr,  
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, Bestellungskopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText"		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis)
	    AND ((Artikel->Produktionsart->PositionsNr BETWEEN :ProdArtVon AND :ProdArtBis) OR (:ProdArtBis = 0))
	   	AND ((Artikel->Herkunft->PositionsNr BETWEEN :HerkunftVon AND :HerkunftBis)OR (:HerkunftBis = 0))
	    AND ((Artikel->Qualitaetsklasse->PositionsNr BETWEEN :QualiVon AND :QualiBis)OR (:QualiBis = 0))
	    AND ((Artikel->Aufbereitungsart->PositionsNr BETWEEN :AufberArtVon AND :AufberArtBis)OR (:AufberArtBis = 0))
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND Bestellungskopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr
	)
	GROUP BY "Artikel.ArtikelNr"
	ORDER BY "Artikel.ArtikelNr"]]></SqlQuery>
</Query>

<Query name="ListeArtKundeUmsatzSelektion">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelVon:%String,ArtikelBis:%String,ProdArtVon:%Integer,ProdArtBis:%Integer,AufberArtVon:%Integer,AufberArtBis:%Integer,HerkunftVon:%Integer,HerkunftBis:%Integer,QualiVon:%Integer,QualiBis:%Integer,AdresseVon:%Integer,AdresseBis:%Integer,DatumVon:%Date,DatumBis:%Date,DatumVJVon:%Date,DatumVJBis:%Date,OnlyLiefer:%Boolean,OnlyVerbucht:%Boolean,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 
		SUM(BetragExkl) AS BetragExkl, SUM(BetragInkl) AS BetragInkl, SUM(Menge) AS Menge, SUM(BetragVorjahrExkl) AS BetragVorjahrExkl, SUM(BetragVorjahrInkl) AS BetragVorjahrInkl, SUM(MengeVorjahr) AS MengeVorjahr,
		MengeneinheitArtikel, Mengeneinheit, "Artikel.ArtikelNr", "Artikel.Artikeltext", "Artikel.ArtikelGrpNr", "Artikel.ArtikelGrpText",
		"Adresse.Adressnummer", "Adresse.Name", "Adresse.Strasse", "Adresse.Plz", "Adresse.Ort", "Steuerungscode"
	FROM (
	SELECT 
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Menge) As Menge,  
		0 As BetragVorjahrExkl,
		0 As BetragVorjahrInkl,
		0 As MengeVorjahr,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, Bestellungskopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		Bestellungskopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(Bestellungskopf->Adresse->Adresse->Adresscode, Bestellungskopf->Adresse->Adresse->Name, Bestellungskopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		Bestellungskopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		Bestellungskopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		Bestellungskopf->Adresse->Adresse->Ort 			AS "Adresse.Ort"
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND Bestellungskopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	    AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis)
	    AND ((Artikel->Produktionsart->PositionsNr BETWEEN :ProdArtVon AND :ProdArtBis) OR (:ProdArtBis = 0))
	   	AND ((Artikel->Herkunft->PositionsNr BETWEEN :HerkunftVon AND :HerkunftBis)OR (:HerkunftBis = 0))
	    AND ((Artikel->Qualitaetsklasse->PositionsNr BETWEEN :QualiVon AND :QualiBis)OR (:QualiBis = 0))
	    AND ((Artikel->Aufbereitungsart->PositionsNr BETWEEN :AufberArtVon AND :AufberArtBis)OR (:AufberArtBis = 0))
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND Bestellungskopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr, Bestellungskopf->Adresse->Adresse->Adressnummer
	 
	 UNION ALL
	    SELECT 
	    0 As BetragInkl,
	    0 As BetragExkl,
		0 As Menge,
		SUM(Nettobetrag2ExklMwstEW) As BetragVorjahrExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragVorjahrInkl,
		SUM(Menge) As MengeVorjahr,  
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, Bestellungskopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		Bestellungskopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(Bestellungskopf->Adresse->Adresse->Adresscode, Bestellungskopf->Adresse->Adresse->Name, Bestellungskopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		Bestellungskopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		Bestellungskopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		Bestellungskopf->Adresse->Adresse->Ort 			AS "Adresse.Ort"
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND Bestellungskopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	   	AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis)
	    AND ((Artikel->Produktionsart->PositionsNr BETWEEN :ProdArtVon AND :ProdArtBis) OR (:ProdArtBis = 0))
	   	AND ((Artikel->Herkunft->PositionsNr BETWEEN :HerkunftVon AND :HerkunftBis)OR (:HerkunftBis = 0))
	    AND ((Artikel->Qualitaetsklasse->PositionsNr BETWEEN :QualiVon AND :QualiBis)OR (:QualiBis = 0))
	    AND ((Artikel->Aufbereitungsart->PositionsNr BETWEEN :AufberArtVon AND :AufberArtBis)OR (:AufberArtBis = 0))
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND Bestellungskopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr, Bestellungskopf->Adresse->Adresse->Adressnummer
	)
	GROUP BY "Artikel.ArtikelNr", "Adresse.Adressnummer"
	ORDER BY "Artikel.ArtikelNr", "Adresse.Adressnummer"]]></SqlQuery>
</Query>

<Query name="ListeBySammelrechDruck">
<Type>%SQLQuery</Type>
<FormalSpec>ArNr:%Integer,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, 
		AbzugID,
		Abzugstyp->PositionsNr As "Abzugstyp.Nr",
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Abzugstyp->ID, :MandantOid, :Lang) As "Abzugstyp.Text",
		Artikelcode, 
		AnzahlGebinde, 
		AnzahlGedruckteGebinde, 
		AnzahlHauptGebinde, 
		AnzahlJeGebinde, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) AS "Artikel.Artikeltext",
		DBAgrofresh.Artikel_GetLLFormatClass(Artikel->DezStellenMenge) As "Artikel.FormatMenge", 
		DBAgrofresh.Artikel_GetLLFormatClass(Artikel->DezStellenPreis) As "Artikel.FormatPreis",
		Artikel->Herkunftsart As "Artikel.Herkunftsart",
		Artikel->Artikelgruppe->ArtikelgruppenNr As "Artikel.Artikelgruppe.ArtikelgruppenNr",
		Produktionsart->PositionsNr As "Produktionsart.Nr",
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Produktionsart, :MandantOid, :Lang) As "Produktionsart.Text",
		Artikelcode, 
		BestellNr, 
		PositionsNr, 
		BestellteMenge, 
		BetragExklMwst, 
		BetragExklMwstFW, 
		BetragInklMwstFW, 
		BetragInklMwst, 
		DetailText, 
		Gebinde, 
		GewichtBrutto, 
		GewichtNetto,
		DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde->ID, :MandantOid, :Lang) As GebindeBezeichnung, 
		GewichtTara, 
		Herkunft->PositionsNr As "Herkunft.Nr",
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Herkunft, :MandantOid, :Lang) As "Herkunft.Text",
		Herkunft->IsoKennzeichen As "Herkunft.IsoKennzeichen",
		Lagerstatus, 
		Lieferant->Adressnummer As "Lieferant.AdressNr", 
		Lieferant->Name As "Lieferant.Name",
		Lieferant->PLZ As "Lieferant.PLZ",
		Lieferant->Ort As "Lieferant.Ort",
		Lieferdatum, 
		Menge,  
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, :MandantOid, :Lang) AS Mengeneinheit, 
		Mwst, 
		MwstBetrag, 
		MwstBetragFW, 
		MwstSatz, 
		ParzellenNr, 
		PositionsNr, 
		Preis, 
		Haendlingskosten,
		PreisFW, 
		RabattBetrag,
		RabattBetragFW,	
		RabattProzent,
		Charge->PositionsNr AS ChargenNr,	
		Qualitaet->PositionsNr As "Qualitaet.Nr",
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Qualitaet, :MandantOid, :Lang) As "Qualitaet.Text",
		
		Bestellungskopf,
		Bestellungskopf->BestellungsNr		AS "Bestellungskopf.BestellungsNr",
		Bestellungskopf->Adresse 			AS "Bestellungskopf.LAdresse.Adresse", 
		Bestellungskopf->Anrede 			AS "Bestellungskopf.LAdresse.Anrede", 
		Bestellungskopf->Name 				AS "Bestellungskopf.LAdresse.Name", 
		Bestellungskopf->Adresszeile1		AS "Bestellungskopf.LAdresse.Adresszeile1", 
		Bestellungskopf->Adresszeile2 		AS "Bestellungskopf.LAdresse.Adresszeile2", 
		Bestellungskopf->Adresszeile3 		AS "Bestellungskopf.LAdresse.Adresszeile3", 
		Bestellungskopf->Plz				AS "Bestellungskopf.LAdresse.Plz", 
		Bestellungskopf->PlzZusatz 			AS "Bestellungskopf.LAdresse.PlzZusatz", 
		Bestellungskopf->Ort 				AS "Bestellungskopf.LAdresse.Ort", 
		Bestellungskopf->AuftragValidiert  	AS "Bestellungskopf.AuftragValidiert",
		Bestellungskopf->BestellungsNr 		AS "Bestellungskopf.BestellungsNr",
		Bestellungskopf->Bestelldatum  		AS "Bestellungskopf.Bestelldatum",
		Bestellungskopf->Bestellstatus  	AS "Bestellungskopf.Bestellstatus",
		Bestellungskopf->Bestellart  		AS "Bestellungskopf.Bestellart",
		Bestellungskopf->Besteller  		AS "Bestellungskopf.Besteller",
		Bestellungskopf->BetragEWExklMwst  	AS "Bestellungskopf.BetragEWExklMwst", 
		Bestellungskopf->BetragEWInklMwst  	AS "Bestellungskopf.BetragEWInklMwst",
		Bestellungskopf->BetragFWExklMwst  	AS "Bestellungskopf.BetragFWExklMwst",
		Bestellungskopf->BetragFWInklMwst	AS "Bestellungskopf.BetragFWInklMwst",
		Bestellungskopf->BetragMwstFW  		AS "Bestellungskopf.BetragMwstFW",
		Bestellungskopf->BetragMwst  		AS "Bestellungskopf.BetragMwst",
		Bestellungskopf->CodeMwst  			AS "Bestellungskopf.CodeMwst",
		Bestellungskopf->Fusstext  			AS "Bestellungskopf.Fusstext",
		Bestellungskopf->Fusstext1  		AS "Bestellungskopf.Fusstext1",
		Bestellungskopf->Fusstext2  		AS "Bestellungskopf.Fusstext2",
		Bestellungskopf->Fusstext3  		AS "Bestellungskopf.Fusstext3",
		Bestellungskopf->Fusstext4  		AS "Bestellungskopf.Fusstext4",
		Bestellungskopf->GebindeSaldo  		AS "Bestellungskopf.GebindeSaldo",
		Bestellungskopf->GebindeSaldoFW  	AS "Bestellungskopf.GebindeSaldoFW",
		Bestellungskopf->GebindeMwstBetrag 	AS "Bestellungskopf.GebindeMwstBetrag",
		Bestellungskopf->GebindeMwstBetragFW AS "Bestellungskopf.GebindeMwstBetragFW",
		Bestellungskopf->GewichtBrutto  	AS "Bestellungskopf.GewichtBrutto",
		Bestellungskopf->GewichtNetto  		AS "Bestellungskopf.GewichtNetto",
		Bestellungskopf->GewichtTara 		AS "Bestellungskopf.GewichtTara",
		Bestellungskopf->Kurs  				AS "Bestellungskopf.Kurs",
		Bestellungskopf->Kurseinheit  		AS "Bestellungskopf.Kurseinheit",
		Bestellungskopf->Lieferart->PositionsNr AS "Bestellungskopf.Lieferart.Nr", 
		DBAgrofreshEK_SD.Hilfstexte_GetTextClass(Bestellungskopf->Lieferart, Bestellungskopf->Mandant, :Lang) AS "Bestellungskopf.Lieferart.Text", 
		Bestellungskopf->Annahmedatum  		AS "Bestellungskopf.Annahmedatum",
		Bestellungskopf->AnnahmeNr  		AS "Bestellungskopf.AnnahmeNr",
		Bestellungskopf->Annahmezeit  		AS "Bestellungskopf.Annahmezeit",
		Bestellungskopf->RabattProzent  	AS "Bestellungskopf.RabattProzent",
		Bestellungskopf->AbrechnungsNr		AS "Bestellungskopf.AbrechnungsNr",
		Bestellungskopf->Abrechnungsdatum 	AS "Bestellungskopf.Rechnungsdatum",
		Bestellungskopf->Referenz  			AS "Bestellungskopf.Referenz",
		Bestellungskopf->RetourenErfasst	AS "Bestellungskopf.RetourenErfasst",
		Bestellungskopf->Sachbearbeiter->BearbeiterBenutzername AS "Bestellungskopf.SachbearbeiterBenutzername",
		Bestellungskopf->Sachbearbeiter->Name	AS "Bestellungskopf.SachbearbeiterName",
		Bestellungskopf->Sachbearbeiter->Nummer	AS "Bestellungskopf.SachbearbeiterNr",
		Bestellungskopf->Sachbearbeiter->Vorname	AS "Bestellungskopf.SachbearbeiterVorname",
		Bestellungskopf->Skonto  				AS "Bestellungskopf.Skonto",
		Bestellungskopf->BearbeitungsstatusAR  	AS "Bestellungskopf.BearbeitungsstatusAR",
		Bestellungskopf->StatusAutoVerarbeitung AS "Bestellungskopf.StatusAutoVerarbeitung",
		Bestellungskopf->BearbeitungsstatusAS 	AS "Bestellungskopf.BearbeitungsstatusAS",
		Bestellungskopf->BearbeitungsstatusBE 	AS "Bestellungskopf.BearbeitungsstatusBE",
		Bestellungskopf->BearbeitungsstatusBZ 	AS "Bestellungskopf.BearbeitungsstatusBZ",
		Bestellungskopf->BearbeitungsstatusOA 	AS "Bestellungskopf.BearbeitungsstatusOA",
		Bestellungskopf->TotalMitGebinde 	AS "Bestellungskopf.TotalMitGebinde",
		Bestellungskopf->TotalMitGebindeFW 	AS "Bestellungskopf.TotalMitGebindeFW",
		Bestellungskopf->Waehrung 			AS "Bestellungskopf.Waehrung",
		Bestellungskopf->Zahladresse->Adresse->Adressnummer 	AS "Bestellungskopf.RAdresse.Adressnummer", 
		Bestellungskopf->Zahladresse->Adresse->Anrede 			AS "Bestellungskopf.RAdresse.Anrede",
		Bestellungskopf->Zahladresse->Adresse->Name				AS "Bestellungskopf.RAdresse.Name", 
		DBAdressen.Adresse_GetZusatz1(Bestellungskopf->Zahladresse->Adresse->Adresscode, Bestellungskopf->Zahladresse->Adresse->VornameZusatz1) 
																AS "Bestellungskopf.RAdresse.Adresszeile1", 
		Bestellungskopf->Zahladresse->Adresse->Zusatz2	 		AS "Bestellungskopf.RAdresse.Adresszeile2", 
		Bestellungskopf->Zahladresse->Adresse->Strasse || ' ' || Bestellungskopf->Zahladresse->Adresse->Hausnummer AS "Bestellungskopf.RAdresse.Adresszeile3", 
		Bestellungskopf->Zahladresse->Adresse->Plz 				AS "Bestellungskopf.RAdresse.Plz", 
		Bestellungskopf->Zahladresse->Adresse->PlzInklZusatz	AS "Bestellungskopf.RAdresse.PlzZusatz", 
		Bestellungskopf->Zahladresse->Adresse->Ort 				AS "Bestellungskopf.RAdresse.Ort", 
		Bestellungskopf->Zahladresse->Adresse->Adresscode		AS "Bestellungskopf.RAdresse.Adresscode",
		CASE
			WHEN 	Bestellungskopf->Zahladresse->Adresse->Anrede LIKE Bestellungskopf->Anrede AND
					NVL(DBAdressen.Adresse_GetZusatz1(Bestellungskopf->Zahladresse->Adresse->Adresscode, Bestellungskopf->Zahladresse->Adresse->VornameZusatz1),'') LIKE Bestellungskopf->Adresszeile1 AND
					Bestellungskopf->Zahladresse->Adresse->Zusatz2 LIKE Bestellungskopf->Adresszeile2 AND
					Bestellungskopf->Zahladresse->Adresse->Strasse LIKE Bestellungskopf->Adresszeile3 AND
					Bestellungskopf->Zahladresse->Adresse->Plz LIKE Bestellungskopf->Plz AND
					Bestellungskopf->Zahladresse->Adresse->Ort LIKE Bestellungskopf->Ort 
				THEN
					CONVERT(BIT,1)
			ELSE
					CONVERT(BIT,0)
		END AS "Bestellungskopf.AdressenEqual",
					
		Bestellungskopf->Zahlungskondition 		AS "Bestellungskopf.Zahlungskondition",
		Bestellungskopf->Verbucht 					AS "Bestellungskopf.Verbucht",
		DBAgrofreshEK.Bestellungspos_BestellungHasArtikel(Bestellungskopf) AS "Bestellungskopf.BestellungHasArtikel",
		0 AS GebindeAuslieferungMenge,
		0 AS GebindeAnlieferungMenge
		
	    FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf->AbrechnungsNr = :ArNr AND Bestellungskopf->Mandant=:MandantOid
	    
	    UNION SELECT %ID, 
		"" AS AbzugID,
		0 As "Abzugstyp.Nr",
		"" As "Abzugstyp.Text",
		1 AS Artikelcode, 
		0 AS AnzahlGebinde, 
		0 AS AnzahlGedruckteGebinde, 
		0 AS AnzahlHauptGebinde, 
		0 AS AnzahlJeGebinde, 
		"" AS "Artikel.ArtikelNr",
		"" AS "Artikel.Artikeltext",
		"" As "Artikel.FormatMenge", 
		"" As "Artikel.FormatPreis",
		0 AS "Artikel.Herkunftsart",
		0 AS "Artikel.Artikelgruppe.ArtikelgruppenNr",
		0 AS "Produktionsart.Nr",
		"" As "Produktionsart.Text",
		0 AS Artikelcode, 
		"" AS BestellNr, 
		0 AS PositionsNr, 
		0 AS BestellteMenge, 
		0 AS BetragExklMwst, 
		0 AS BetragExklMwstFW, 
		0 AS BetragInklMwstFW, 
		0 AS BetragInklMwst, 
		"" AS DetailText, 
		0 AS Gebinde, 
		0 AS GewichtBrutto, 
		0 AS GewichtNetto,
		DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) As GebindeBezeichnung, 
		0 AS GewichtTara, 
		0 AS "Herkunft.Nr",
		"" As "Herkunft.Text",
		"" As "Herkunft.IsoKennzeichen",
		0 AS Lagerstatus, 
		0 AS "Lieferant.AdressNr", 
		"" As "Lieferant.Name",
		"" As "Lieferant.PLZ",
		"" As "Lieferant.Ort",
		0 AS Lieferdatum, 
		0 AS Menge,  
		"" AS Mengeneinheit, 
		"" ASMwst, 
		0 AS MwstBetrag, 
		0 AS MwstBetragFW, 
		0 AS MwstSatz, 
		0 AS ParzellenNr, 
		GebKontr->Gebinde->GebindeNr AS PositionsNr, 
		0 AS Preis, 
		0 AS Haendlingskosten,
		0 AS PreisFW, 
		0 AS RabattBetrag,
		0 AS RabattBetragFW,	
		0 AS RabattProzent, 
		0 AS ChargenNr,	
		0 As "Qualitaet.Nr",
		"" As "Qualitaet.Text",
		
		Bestellung AS Bestellungskopf,
		Bestellung->BestellungsNr AS "Bestellungskopf.BestellungsNr",
		Bestellung->Adresse 			AS "Bestellungskopf.LAdresse.Adresse", 
		Bestellung->Anrede 			AS "Bestellungskopf.LAdresse.Anrede", 
		Bestellung->Name 				AS "Bestellungskopf.LAdresse.Name", 
		Bestellung->Adresszeile1		AS "Bestellungskopf.LAdresse.Adresszeile1", 
		Bestellung->Adresszeile2 		AS "Bestellungskopf.LAdresse.Adresszeile2", 
		Bestellung->Adresszeile3 		AS "Bestellungskopf.LAdresse.Adresszeile3", 
		Bestellung->Plz				AS "Bestellungskopf.LAdresse.Plz", 
		Bestellung->PlzZusatz 			AS "Bestellungskopf.LAdresse.PlzZusatz", 
		Bestellung->Ort 				AS "Bestellungskopf.LAdresse.Ort", 
		Bestellung->AuftragValidiert  	AS "Bestellungskopf.AuftragValidiert",
		Bestellung->BestellungsNr 		AS "Bestellungskopf.BestellungsNr",
		Bestellung->Bestelldatum  		AS "Bestellungskopf.Bestelldatum",
		Bestellung->Bestellstatus  	AS "Bestellungskopf.Bestellstatus",
		Bestellung->Bestellart  		AS "Bestellungskopf.Bestellart",
		Bestellung->Besteller  		AS "Bestellungskopf.Besteller",
		Bestellung->BetragEWExklMwst  AS "Bestellungskopf.BetragEWExklMwst", 
		Bestellung->BetragEWInklMwst  AS "Bestellungskopf.BetragEWInklMwst",
		Bestellung->BetragFWExklMwst  AS "Bestellungskopf.BetragFWExklMwst",
		Bestellung->BetragFWInklMwst  AS "Bestellungskopf.BetragFWInklMwst",
		Bestellung->BetragMwstFW  	AS "Bestellungskopf.BetragMwstFW",
		Bestellung->BetragMwst  		AS "Bestellungskopf.BetragMwst",
		Bestellung->CodeMwst  		AS "Bestellungskopf.CodeMwst",
		Bestellung->Fusstext  		AS "Bestellungskopf.Fusstext",
		Bestellung->Fusstext1  		AS "Bestellungskopf.Fusstext1",
		Bestellung->Fusstext2  		AS "Bestellungskopf.Fusstext2",
		Bestellung->Fusstext3  		AS "Bestellungskopf.Fusstext3",
		Bestellung->Fusstext4  		AS "Bestellungskopf.Fusstext4",
		Bestellung->GebindeSaldo  	AS "Bestellungskopf.GebindeSaldo",
		Bestellung->GebindeSaldoFW  	AS "Bestellungskopf.GebindeSaldoFW",
		Bestellung->GebindeMwstBetrag AS "Bestellungskopf.GebindeMwstBetrag",
		Bestellung->GebindeMwstBetragFW AS "Bestellungskopf.GebindeMwstBetragFW",
		Bestellung->GewichtBrutto  	AS "Bestellungskopf.GewichtBrutto",
		Bestellung->GewichtNetto  	AS "Bestellungskopf.GewichtNetto",
		Bestellung->GewichtTara 		AS "Bestellungskopf.GewichtTara",
		Bestellung->Kurs  			AS "Bestellungskopf.Kurs",
		Bestellung->Kurseinheit  		AS "Bestellungskopf.Kurseinheit",
		Bestellung->Lieferart->PositionsNr AS "Bestellungskopf.Lieferart.Nr", 
		DBAgrofreshEK_SD.Hilfstexte_GetTextClass(Bestellung->Lieferart, Bestellung->Mandant, :Lang) AS "Bestellungskopf.Lieferart.Text", 
		Bestellung->Annahmedatum  		AS "Bestellungskopf.Annahmedatum",
		Bestellung->AnnahmeNr  	AS "Bestellungskopf.AnnahmeNr",
		Bestellung->Annahmezeit  		AS "Bestellungskopf.Annahmezeit",
		Bestellung->RabattProzent  	AS "Bestellungskopf.RabattProzent",
		Bestellung->AbrechnungsNr  		AS "Bestellungskopf.AbrechnungsNr",
		Bestellung->Abrechnungsdatum 	AS "Bestellungskopf.Rechnungsdatum",
		Bestellung->Referenz  		AS "Bestellungskopf.Referenz",
		Bestellung->RetourenErfasst	AS "Bestellungskopf.RetourenErfasst",
		Bestellung->Sachbearbeiter->BearbeiterBenutzername AS "Bestellungskopf.SachbearbeiterBenutzername",
		Bestellung->Sachbearbeiter->Name	AS "Bestellungskopf.SachbearbeiterName",
		Bestellung->Sachbearbeiter->Nummer	AS "Bestellungskopf.SachbearbeiterNr",
		Bestellung->Sachbearbeiter->Vorname	AS "Bestellungskopf.SachbearbeiterVorname",
		Bestellung->Skonto  				AS "Bestellungskopf.Skonto",
		Bestellung->BearbeitungsstatusAR  AS "Bestellungskopf.BearbeitungsstatusAR",
		Bestellung->StatusAutoVerarbeitung AS "Bestellungskopf.StatusAutoVerarbeitung",
		Bestellung->BearbeitungsstatusAS 	AS "Bestellungskopf.BearbeitungsstatusAS",
		Bestellung->BearbeitungsstatusBE 	AS "Bestellungskopf.BearbeitungsstatusBE",
		Bestellung->BearbeitungsstatusBZ 	AS "Bestellungskopf.BearbeitungsstatusBZ",
		Bestellung->BearbeitungsstatusOA 	AS "Bestellungskopf.BearbeitungsstatusOA",
		Bestellung->TotalMitGebinde 	AS "Bestellungskopf.TotalMitGebinde",
		Bestellung->TotalMitGebindeFW 	AS "Bestellungskopf.TotalMitGebindeFW",
		Bestellung->Waehrung 			AS "Bestellungskopf.Waehrung",
		Bestellung->Zahladresse->Adresse->Adressnummer 	AS "Bestellungskopf.RAdresse.Adressnummer", 
		Bestellung->Zahladresse->Adresse->Anrede 			AS "Bestellungskopf.RAdresse.Anrede",
		Bestellung->Zahladresse->Adresse->Name			AS "Bestellungskopf.RAdresse.Name", 
		DBAdressen.Adresse_GetZusatz1(Bestellung->Zahladresse->Adresse->Adresscode, Bestellung->Zahladresse->Adresse->VornameZusatz1) 
															AS "Bestellungskopf.RAdresse.Adresszeile1", 
		Bestellung->Zahladresse->Adresse->Zusatz2	 		AS "Bestellungskopf.RAdresse.Adresszeile2", 
		Bestellung->Zahladresse->Adresse->Strasse || ' ' || Bestellung->Zahladresse->Adresse->Hausnummer AS "Bestellungskopf.RAdresse.Adresszeile3", 
		Bestellung->Zahladresse->Adresse->Plz 			AS "Bestellungskopf.RAdresse.Plz", 
		Bestellung->Zahladresse->Adresse->PlzInklZusatz	AS "Bestellungskopf.RAdresse.PlzZusatz", 
		Bestellung->Zahladresse->Adresse->Ort 			AS "Bestellungskopf.RAdresse.Ort", 
		Bestellung->Zahladresse->Adresse->Adresscode		AS "Bestellungskopf.RAdresse.Adresscode",
		CASE
			WHEN 	Bestellung->Zahladresse->Adresse->Anrede LIKE Bestellung->Anrede AND
					NVL(DBAdressen.Adresse_GetZusatz1(Bestellung->Zahladresse->Adresse->Adresscode, Bestellung->Zahladresse->Adresse->VornameZusatz1),'') LIKE Bestellung->Adresszeile1 AND
					Bestellung->Zahladresse->Adresse->Zusatz2 LIKE Bestellung->Adresszeile2 AND
					Bestellung->Zahladresse->Adresse->Strasse LIKE Bestellung->Adresszeile3 AND
					Bestellung->Zahladresse->Adresse->Plz LIKE Bestellung->Plz AND
					Bestellung->Zahladresse->Adresse->Ort LIKE Bestellung->Ort 
				THEN
					CONVERT(BIT,1)
			ELSE
					CONVERT(BIT,0)
		END AS "Bestellungskopf.AdressenEqual",
					
		Bestellung->Zahlungskondition 		AS "Bestellungskopf.Zahlungskondition",
		Bestellung->Verbucht 				AS "Bestellungskopf.Verbucht",
		DBAgrofreshEK.Bestellungspos_BestellungHasArtikel(Bestellung->ID) AS "Bestellungskopf.BestellungHasArtikel",
		NVL(AuslieferungMenge,0) AS GebindeAuslieferungMenge,
		NVL(AnlieferungMenge,0) AS GebindeAnlieferungMenge
		
	    FROM DBAgrofreshEK.GebDetail
		WHERE Bestellung->AbrechnungsNr = :ArNr AND (:nurVer <>1 OR GebindeSaldoBetragExklMwst<>0) 
 		AND DBAgrofreshEK.Bestellungspos_BestellungHasArtikel(Bestellung)= 0	    
 		
 		ORDER BY "Bestellungskopf.BestellungsNr", "PositionsNr", AbzugID]]></SqlQuery>
</Query>

<Query name="ListeBySammelrechKumuliertDruck">
<Type>%SQLQuery</Type>
<FormalSpec>ArNr:%Integer,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, 
		Abzugstyp->PositionsNr As "Abzugstyp.Nr",
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Abzugstyp->ID, :MandantOid, :Lang) As "Abzugstyp.Text",
		Artikelcode, 
		AnzahlGebinde, 
		AnzahlGedruckteGebinde, 
		AnzahlHauptGebinde, 
		AnzahlJeGebinde, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) AS "Artikel.Artikeltext",
		DBAgrofresh.Artikel_GetLLFormatClass(Artikel->DezStellenMenge) As "Artikel.FormatMenge", 
		DBAgrofresh.Artikel_GetLLFormatClass(Artikel->DezStellenPreis) As "Artikel.FormatPreis",
		Artikel->Herkunftsart As "Artikel.Herkunftsart",
		Artikel->Produktionsart->PositionsNr As "Artikel.Produktionsart.Nr",
		Artikel->Artikelgruppe->ArtikelgruppenNr As "Artikel.Artikelgruppe.ArtikelgruppenNr",
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Produktionsart, :MandantOid, :Lang) As "Artikel.Produktionsart.Text",
		Artikelcode, 
		BestellNr, 
		PositionsNr, 
		BestellteMenge, 
		BetragExklMwst, 
		BetragExklMwstFW, 
		BetragInklMwstFW, 
		BetragInklMwst, 
		DetailText, 
		Gebinde, 
		GewichtBrutto, 
		GewichtNetto,
		DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde->ID, :MandantOid, :Lang) As GebindeBezeichnung, 
		GewichtTara, 
		Herkunft->PositionsNr As "Herkunft.Nr",
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Herkunft, :MandantOid, :Lang) As "Herkunft.Text",
		Herkunft->IsoKennzeichen As "Herkunft.IsoKennzeichen",
		Lagerstatus, 
		Lieferant->Adressnummer As "Lieferant.AdressNr", 
		Lieferant->Name As "Lieferant.Name",
		Lieferant->PLZ As "Lieferant.PLZ",
		Lieferant->Ort As "Lieferant.Ort",
		Lieferdatum, 
		Menge,  
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, :MandantOid, :Lang) AS Mengeneinheit, 
		Mwst, 
		MwstBetrag, 
		MwstBetragFW, 
		MwstSatz, 
		ParzellenNr, 
		PositionsNr, 
		Preis, 
		Haendlingskosten,
		PreisFW, 
		RabattBetrag,
		RabattBetragFW,	
		RabattProzent, 
		Bestellungskopf,
		Qualitaet->PositionsNr As "Qualitaet.Nr",
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Qualitaet, :MandantOid, :Lang) As "Qualitaet.Text",
		0 AS GebindeAuslieferungMenge,
		0 AS GebindeAnlieferungMenge,
		
		Bestellungskopf->Adresse 			AS "Bestellungskopf.LAdresse.Adresse", 
		Bestellungskopf->Anrede 			AS "Bestellungskopf.LAdresse.Anrede", 
		Bestellungskopf->Name 				AS "Bestellungskopf.LAdresse.Name", 
		Bestellungskopf->Adresszeile1		AS "Bestellungskopf.LAdresse.Adresszeile1", 
		Bestellungskopf->Adresszeile2 		AS "Bestellungskopf.LAdresse.Adresszeile2", 
		Bestellungskopf->Adresszeile3 		AS "Bestellungskopf.LAdresse.Adresszeile3", 
		Bestellungskopf->Plz				AS "Bestellungskopf.LAdresse.Plz", 
		Bestellungskopf->PlzZusatz 			AS "Bestellungskopf.LAdresse.PlzZusatz", 
		Bestellungskopf->Ort 				AS "Bestellungskopf.LAdresse.Ort", 
		Bestellungskopf->AuftragValidiert  	AS "Bestellungskopf.AuftragValidiert",
		Bestellungskopf->BestellungsNr 		AS "Bestellungskopf.BestellungsNr",
		Bestellungskopf->Bestelldatum  		AS "Bestellungskopf.Bestelldatum",
		Bestellungskopf->Bestellstatus  	AS "Bestellungskopf.Bestellstatus",
		Bestellungskopf->Bestellart  		AS "Bestellungskopf.Bestellart",
		Bestellungskopf->Besteller  		AS "Bestellungskopf.Besteller",
		Bestellungskopf->BetragEWExklMwst  AS "Bestellungskopf.BetragEWExklMwst", 
		Bestellungskopf->BetragEWInklMwst  AS "Bestellungskopf.BetragEWInklMwst",
		Bestellungskopf->BetragFWExklMwst  AS "Bestellungskopf.BetragFWExklMwst",
		Bestellungskopf->BetragFWInklMwst  AS "Bestellungskopf.BetragFWInklMwst",
		Bestellungskopf->BetragMwstFW  	AS "Bestellungskopf.BetragMwstFW",
		Bestellungskopf->BetragMwst  		AS "Bestellungskopf.BetragMwst",
		Bestellungskopf->CodeMwst  		AS "Bestellungskopf.CodeMwst",
		Bestellungskopf->Fusstext  		AS "Bestellungskopf.Fusstext",
		Bestellungskopf->Fusstext1  		AS "Bestellungskopf.Fusstext1",
		Bestellungskopf->Fusstext2  		AS "Bestellungskopf.Fusstext2",
		Bestellungskopf->Fusstext3  		AS "Bestellungskopf.Fusstext3",
		Bestellungskopf->Fusstext4  		AS "Bestellungskopf.Fusstext4",
		Bestellungskopf->GebindeSaldo  	AS "Bestellungskopf.GebindeSaldo",
		Bestellungskopf->GebindeSaldoFW  	AS "Bestellungskopf.GebindeSaldoFW",
		Bestellungskopf->GebindeMwstBetrag AS "Bestellungskopf.GebindeMwstBetrag",
		Bestellungskopf->GebindeMwstBetragFW AS "Bestellungskopf.GebindeMwstBetragFW",
		Bestellungskopf->GewichtBrutto  	AS "Bestellungskopf.GewichtBrutto",
		Bestellungskopf->GewichtNetto  	AS "Bestellungskopf.GewichtNetto",
		Bestellungskopf->GewichtTara 		AS "Bestellungskopf.GewichtTara",
		Bestellungskopf->Kurs  			AS "Bestellungskopf.Kurs",
		Bestellungskopf->Kurseinheit  		AS "Bestellungskopf.Kurseinheit",
		Bestellungskopf->Lieferart->PositionsNr AS "Bestellungskopf.Lieferart.Nr", 
		DBAgrofreshEK_SD.Hilfstexte_GetTextClass(Bestellungskopf->Lieferart, Bestellungskopf->Mandant, :Lang) AS "Bestellungskopf.Lieferart.Text", 
		Bestellungskopf->Annahmedatum  		AS "Bestellungskopf.Annahmedatum",
		Bestellungskopf->AnnahmeNr  	AS "Bestellungskopf.AnnahmeNr",
		Bestellungskopf->Annahmezeit  		AS "Bestellungskopf.Annahmezeit",
		Bestellungskopf->RabattProzent  	AS "Bestellungskopf.RabattProzent",
		Bestellungskopf->AbrechnungsNr  		AS "Bestellungskopf.AbrechnungsNr",
		Bestellungskopf->Abrechnungsdatum 	AS "Bestellungskopf.Rechnungsdatum",
		Bestellungskopf->Referenz  		AS "Bestellungskopf.Referenz",
		Bestellungskopf->RetourenErfasst	AS "Bestellungskopf.RetourenErfasst",
		Bestellungskopf->Sachbearbeiter->BearbeiterBenutzername AS "Bestellungskopf.SachbearbeiterBenutzername",
		Bestellungskopf->Sachbearbeiter->Name		AS "Bestellungskopf.SachbearbeiterName",
		Bestellungskopf->Sachbearbeiter->Nummer		AS "Bestellungskopf.SachbearbeiterNr",
		Bestellungskopf->Sachbearbeiter->Vorname	AS "Bestellungskopf.SachbearbeiterVorname",
		Bestellungskopf->Skonto  				AS "Bestellungskopf.Skonto",
		Bestellungskopf->BearbeitungsstatusAR  AS "Bestellungskopf.BearbeitungsstatusAR",
		Bestellungskopf->StatusAutoVerarbeitung AS "Bestellungskopf.StatusAutoVerarbeitung",
		Bestellungskopf->BearbeitungsstatusAS 	AS "Bestellungskopf.BearbeitungsstatusAS",
		Bestellungskopf->BearbeitungsstatusBE 	AS "Bestellungskopf.BearbeitungsstatusBE",
		Bestellungskopf->BearbeitungsstatusBZ 	AS "Bestellungskopf.BearbeitungsstatusBZ",
		Bestellungskopf->BearbeitungsstatusOA 	AS "Bestellungskopf.BearbeitungsstatusOA",
		Bestellungskopf->TotalMitGebinde 	AS "Bestellungskopf.TotalMitGebinde",
		Bestellungskopf->TotalMitGebindeFW 	AS "Bestellungskopf.TotalMitGebindeFW",
		Bestellungskopf->Waehrung 			AS "Bestellungskopf.Waehrung",
		Bestellungskopf->Zahladresse->Adresse->Adressnummer 	AS "Bestellungskopf.RAdresse.Adressnummer", 
		Bestellungskopf->Zahladresse->Adresse->Anrede 			AS "Bestellungskopf.RAdresse.Anrede",
		Bestellungskopf->Zahladresse->Adresse->Name			AS "Bestellungskopf.RAdresse.Name", 
		DBAdressen.Adresse_GetZusatz1(Bestellungskopf->Zahladresse->Adresse->Adresscode, Bestellungskopf->Zahladresse->Adresse->VornameZusatz1) 
															AS "Bestellungskopf.RAdresse.Adresszeile1", 
		Bestellungskopf->Zahladresse->Adresse->Zusatz2	 		AS "Bestellungskopf.RAdresse.Adresszeile2", 
		Bestellungskopf->Zahladresse->Adresse->Strasse || ' ' || Bestellungskopf->Zahladresse->Adresse->Hausnummer AS "Bestellungskopf.RAdresse.Adresszeile3", 
		Bestellungskopf->Zahladresse->Adresse->Plz 			AS "Bestellungskopf.RAdresse.Plz", 
		Bestellungskopf->Zahladresse->Adresse->PlzInklZusatz	AS "Bestellungskopf.RAdresse.PlzZusatz", 
		Bestellungskopf->Zahladresse->Adresse->Ort 			AS "Bestellungskopf.RAdresse.Ort", 
		Bestellungskopf->Zahladresse->Adresse->Adresscode		AS "Bestellungskopf.RAdresse.Adresscode",
		CASE
			WHEN 	Bestellungskopf->Zahladresse->Adresse->Anrede LIKE Bestellungskopf->Anrede AND
					NVL(DBAdressen.Adresse_GetZusatz1(Bestellungskopf->Zahladresse->Adresse->Adresscode, Bestellungskopf->Zahladresse->Adresse->VornameZusatz1),'') LIKE Bestellungskopf->Adresszeile1 AND
					Bestellungskopf->Zahladresse->Adresse->Zusatz2 LIKE Bestellungskopf->Adresszeile2 AND
					Bestellungskopf->Zahladresse->Adresse->Strasse LIKE Bestellungskopf->Adresszeile3 AND
					Bestellungskopf->Zahladresse->Adresse->Plz LIKE Bestellungskopf->Plz AND
					Bestellungskopf->Zahladresse->Adresse->Ort LIKE Bestellungskopf->Ort 
				THEN
					CONVERT(BIT,1)
			ELSE
					CONVERT(BIT,0)
		END AS "Bestellungskopf.AdressenEqual",
					
		Bestellungskopf->Zahlungskondition 		AS "Bestellungskopf.Zahlungskondition",
		Bestellungskopf->Verbucht 					AS "Bestellungskopf.Verbucht",
		DBAgrofreshEK.Bestellungspos_BestellungHasDetails(Bestellungskopf) AS "Bestellungskopf.BestHasDetails"
		
	    FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf->AbrechnungsNr = :ArNr AND Bestellungskopf->Mandant=:MandantOid Group by Bestellungskopf->BestellungsNr
	    ORDER BY Bestellungskopf->BestellungsNr, Bestellungspos.PositionsNr, AbzugID]]></SqlQuery>
</Query>

<Query name="ListeArtikelStatSpez">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelVon:%String,ArtikelBis:%String,ArtGrpVon:%Integer,ArtGrpBis:%Integer,DatumVon:%Date,DatumBis:%Date,OnlyLiefer:%Boolean,OnlyVerbucht:%Boolean,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Menge) As Menge,  
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, Bestellungskopf->Mandant, :Lang) AS Mengeneinheit, 
		
		CASE WHEN Artikel->Mengeneinheit->PositionsNr <> 1 THEN SUM(Menge) * Artikel->Einzelgewicht ELSE 0 END AS CalcMenge,
		
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		DBAgrofresh_SD.StatGrp_GetBezeichnungClass(DBAgrofresh_SD.StatGrp_GetIdByNummer(:MandantOid, SUBSTRING(Artikel->ArtikelNr,0,7)), :MandantOid, :Lang) as "StatGrpText",
		SUBSTRING(Artikel->ArtikelNr,0,7) AS "StatGrpNummer"
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND Bestellungskopf->Mandant=:MandantOid 
	GROUP BY SUBSTRING(Artikel->ArtikelNr,0,7)
	ORDER BY Artikel->Artikelgruppe->ArtikelgruppenNr, Artikel->ArtikelNr]]></SqlQuery>
</Query>

<Query name="ListeForMwstCodeChange">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,vonBetellung:%Integer,bisBetellung:%Integer,alteMwstOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID
	From DBAgrofreshEK.Bestellungspos
	WHERE Bestellungskopf->BestellungsNr between :vonBetellung and :bisBetellung  And Mwst= :alteMwstOid AND Bestellungskopf->Mandant =:MandantOid]]></SqlQuery>
</Query>

<Query name="ListeByBestVonBis">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,vonBetellung:%Integer,bisBetellung:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID
	From DBAgrofreshEK.Bestellungspos
	WHERE Bestellungskopf->BestellungsNr between :vonBetellung and :bisBetellung AND Bestellungskopf->Mandant =:MandantOid]]></SqlQuery>
</Query>

<Query name="VbPositionenZuRg">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,RgNr:%Integer,lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID, 
	Artikelcode,
	Mwst,
	BestellungsKopf,
	PositionsNr,
	Preis,
	RabattBetrag,
	BestellungsKopf->IsStorno AS BestellungskopfStorno,	
	BestellungsKopf->AbrechnungsNr AS BestellungskopfAbrechnungsNr,							
	BestellungsKopf->BestellungsNr AS BestellungskopfBestellungsNr,
	BestellungsKopf->Bestelldatum AS BestellungskopfBestelldatum,
	BestellungsKopf->AnnahmeNr AS BestellungskopfAnnahmeNr,
	BestellungsKopf->Annahmedatum AS BestellungskopfAnnahmedatum,
	BestellungsKopf->Abrechnungsdatum AS BestellungskopfAbrechnungsdatum,
	BestellungsKopf->ZahlAdresse->Adresse AS BestellungskopfZahlAdresseAdresse,
	BestellungsKopf->ZahlAdresse->Adresse->Adressnummer AS BestellungskopfZahlAdresseAdresseAdressnummer,
	BestellungsKopf->ZahlAdresse->Adresse->Name AS BestellungskopfZahlAdresseAdresseName,
	BestellungsKopf->ZahlAdresse->Adresse->Plz AS BestellungskopfZahlAdresseAdressePlz,
	BestellungsKopf->ZahlAdresse->Adresse->Ort AS BestellungskopfZahlAdresseAdresseOrt,
	BestellungsKopf->Adresse->Adresse AS BestellungskopfLieferadresseAdresse,
	BestellungsKopf->Adresse->Adresse->Adressnummer AS BestellungskopfLieferadresseAdresseAdressnummer,
	BestellungsKopf->Name AS BestellungskopfLieferadresseAdresseName,
	BestellungsKopf->Plz AS BestellungskopfLieferadresseAdressePlz,
	BestellungsKopf->Ort AS BestellungskopfLieferadresseAdresseOrt,
	BestellungsKopf->Waehrung AS BestellungskopfWaehrung,
	BestellungsKopf->Waehrung->FWCode AS BestellungskopfWaehrungFWCode,
	BestellungsKopf->Waehrung->ISOSWIFTCode AS BestellungskopfWaehrungISOSWIFTCode,
	BestellungsKopf->Waehrung->Waehrung AS BestellungskopfWaehrungWaehrung,
	BestellungsKopf->ZahlAdresse->FibuKonto->KontoNr AS BestellungskopfZahlAdresseFibuKontoKontoNr,
	BestellungsKopf->Adresse->FibuKonto->KontoNr AS BestellungskopfLieferadresseFibuKontoKontoNr,
	BestellungsKopf->CodeMwst AS BestellungskopfCodeMwst,
	BestellungsKopf->GebindeSaldo AS BestellungskopfGebindeSaldo,
	BestellungsKopf->Skonto AS BestellungskopfSkonto,
	Artikel->ArtikelNr AS ArtikelArtikelNr,
	Artikel->FibuKontoEK AS ArtikelFibuKontoEK,
	Artikel->FibuKontoEK->KontoNr AS ArtikelFibuKontoEKKontoNr,
	Artikel->FibuKontoVK AS ArtikelFibuKontoVK,
	Artikel->FibuKontoVK->KontoNr AS ArtikelFibuKontoVKKontoNr,
	Artikel->MwstVK AS ArtikelMwstVK,
	Artikel->MwstEK AS ArtikelMwstEK,
	Artikel->MwstVK->MwstCode AS ArtikelMwstCodeVK,
	Artikel->MwstEK->MwstCode AS ArtikelMwstCodeEK,
	Artikel->Artikelgruppe->ArtikelgruppenNr As ArtikelArtikelgruppenNr,
	DetailText,
	Menge,
	Mengeneinheit->CodeEinheit AS MengeneinheitCodeEinheit,
	DBAgrofresh_SD.Mengencode_GetTextClass(Mengeneinheit, :MandantOid, :lang) AS MengeneinheitText,
	Nettobetrag2ExklMwstEW,
	Nettobetrag2ExklMwstFW,
	BestellungsKopf->Kurseinheit AS Kurseinheit,
	BestellungsKopf->Kurs AS Kurs,
	Nettobetrag2MwstbetragEW,
	Nettobetrag2MwstbetragFW,
	MwstSatz,
	Mwst->MwstCode AS MwstMwstCode,
	AbzugID
	FROM DBAgrofreshEK.Bestellungspos 
	WHERE BestellungsKopf->Abrechnungsnr=:RgNr AND 
		BestellungsKopf->Mandant=:MandantOid
	ORDER BY BestellungsKopf->BestellungsNr, PositionsNr, AbzugID]]></SqlQuery>
</Query>

<Query name="GetMutationsPos">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelOid:%String,ProdArtOid:%String,QualitaetOid:%String,VonDatum:%Date,BisDatum:%Date,filterHerkunft:%Boolean,HerkunftOid:%String,Kundenkat:%String,NEP:%Decimal</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID FROM DBAgrofreshEK.Bestellungspos 
	where Artikel = :ArtikelOid
	 AND ((Produktionsart = :ProdArtOid) OR (0 = :ProdArtOid AND Produktionsart IS NULL))
	 AND ((Qualitaet = :QualitaetOid) OR (0 = :QualitaetOid AND Qualitaet IS NULL))
	 AND (:filterHerkunft = 0 OR (:filterHerkunft = 1 AND ((Herkunft = :HerkunftOid) OR (0 = :HerkunftOid AND Herkunft IS NULL))))
	 AND Bestellungskopf->Annahmedatum between {d :VonDatum} AND {d :BisDatum}
	AND Bestellungskopf->Adresse->Adresse->Kundenkategorie = :Kundenkat]]></SqlQuery>
</Query>

<Query name="ListeAbnehmerArtLieferUmsatz">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelVon:%String,ArtikelBis:%String,ArtGrpVon:%Integer,ArtGrpBis:%Integer,AdresseVon:%Integer,AdresseBis:%Integer,AbnehmerVon:%Integer,AbnehmerBis:%Integer,DatumVon:%Date,DatumBis:%Date,MandantOid:%String,Lang:%String,FuerAdrOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT
		(SELECT NVL(SUM(Menge),0) FROM DBAgrofreshEK.Bestellungspos detpos 
		WHERE detPos.Bestellungskopf->Abnehmner = pos.Bestellungskopf->Abnehmner AND detPos.Artikel = pos.Artikel
		AND detpos.Bestellungskopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis}
		And Bestellungskopf->Adresse->Adresse = :FuerAdrOid) AS MengeFuerAdresse,
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Menge) As Menge,  
		0 As BetragVorjahrExkl,
		0 As BetragVorjahrInkl,
		0 As MengeVorjahr,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, Bestellungskopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, Bestellungskopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		Bestellungskopf->Adresse->Adresse->Adressnummer AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(Bestellungskopf->Adresse->Adresse->Adresscode, Bestellungskopf->Adresse->Adresse->Name, Bestellungskopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		Bestellungskopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		Bestellungskopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		Bestellungskopf->Adresse->Adresse->Ort 			AS "Adresse.Ort",
		
		Bestellungskopf->Abnehmner->Adresse->Adressnummer AS "Abnehmer.Adressnummer", 
		DBAdressen.Adresse_GetName(Bestellungskopf->Abnehmner->Adresse->Adresscode, Bestellungskopf->Abnehmner->Adresse->Name, Bestellungskopf->Abnehmner->Adresse->VornameZusatz1, 0) 
														AS "Abnehmer.Name", 
		Bestellungskopf->Abnehmner->Adresse->Strasse	AS "Abnehmer.Strasse", 
		Bestellungskopf->Abnehmner->Adresse->Plz 		AS "Abnehmer.Plz", 
		Bestellungskopf->Abnehmner->Adresse->Ort 		AS "Abnehmer.Ort"
		
	FROM DBAgrofreshEK.Bestellungspos pos
	    WHERE Bestellungskopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND Bestellungskopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	    AND  Bestellungskopf->Abnehmner->Adresse->Adressnummer >= :AbnehmerVon AND Bestellungskopf->Abnehmner->Adresse->Adressnummer <= :AbnehmerBis
	    AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND Bestellungskopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis}
	    AND Bestellungskopf->Mandant=:MandantOid 
	    GROUP BY Bestellungskopf->Abnehmner->Adresse->Adressnummer, Artikel->ArtikelNr, Bestellungskopf->Adresse->Adresse->Adressnummer
	    ORDER BY Bestellungskopf->Abnehmner->Adresse->Adressnummer, Artikel->ArtikelNr, Bestellungskopf->Adresse->Adresse->Adressnummer]]></SqlQuery>
</Query>

<Query name="ListeLieferantUmsatz">
<Type>%SQLQuery</Type>
<FormalSpec>AdresseVon:%Integer,AdresseBis:%Integer,DatumVon:%Date,DatumBis:%Date,MandantOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		
		Bestellungskopf->Adresse->Adresse->ID			 AS "Adresse.ID",
		Bestellungskopf->Adresse->Adresse->Adressnummer AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(Bestellungskopf->Adresse->Adresse->Adresscode, Bestellungskopf->Adresse->Adresse->Name, Bestellungskopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		Bestellungskopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		Bestellungskopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		Bestellungskopf->Adresse->Adresse->Ort 			AS "Adresse.Ort"
			
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND Bestellungskopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	    AND Bestellungskopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis}
	    AND Bestellungskopf->Mandant=:MandantOid 
	GROUP BY Bestellungskopf->Adresse->Adresse->Adressnummer
	ORDER BY Bestellungskopf->Adresse->Adresse->Adressnummer]]></SqlQuery>
</Query>

<Query name="ListeSearchAbzugsarten">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,vonArtikelNr:%String,bisArtikelNr:%String,vonDatum:%Date,bisDatum:%Date,vonAbzug:%Integer,bisAbzug:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID,Bestellungskopf->BestellungsNr AS BestellungsNr,
	 	Abzugstyp->PositionsNr AS AbzugNr, DBAgrofresh_SD.Abzugstyp_GetTextClass(Abzugstyp, :MandantOid, :Lang) AS Abzugstext,
		Artikel->ArtikelNr AS ArtikelNr, DetailText AS Artikeltext
	From DBAgrofreshEK.Bestellungspos 
	WHERE NVL(Abzugstyp->PositionsNr,0) between :vonAbzug and :bisAbzug AND Bestellungskopf->Mandant =:MandantOid
		AND Artikel->ArtikelNr between :vonArtikelNr and :bisArtikelNr
		AND Bestellungskopf->Annahmedatum between {d :vonDatum} and {d :bisDatum}
	ORDER BY Bestellungskopf->BestellungsNr, PositionsNr]]></SqlQuery>
</Query>

<Query name="ListeByANDatumVonBis">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,vonDatum:%Date,bisDatum:%Date</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT
	ID as PosID,
	PositionsNr AS PositionsNr,
	Bestellungskopf->BestellungsNr  as BestellungsNr,
	Bestellungskopf->AnnahmeNr  as AnnahmeNr,
	Bestellungskopf->Annahmedatum  as Annahmedatum,
	Bestellungskopf->Adresse->Adresse->Adressnummer as ProduzentNr,
	Bestellungskopf->Adresse->Adresse->Name as ProduzentName,
	Bestellungskopf->ZahlAdresse->Adresse->Adressnummer as AbnehmerNr,
	Bestellungskopf->ZahlAdresse->Adresse->Name as AbnehmerName,
	Artikel AS Artikel, 
	Artikel->ArtikelNr AS ArtikelNr,
	DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) AS Artikeltext,
	DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, :MandantOid, :Lang) AS Mengeneinheit, 
	DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) As Gebinde, 
	AnzahlGebinde AS AnzGebinde,
	AnzahlJeGebinde AS AnzahlJeGebinde,
	Menge AS MengeTotal,
	Preis AS Preis,
	Menge * Preis AS Betrag,
	DBAgrofresh_SD.Hilfstexte_GetTextClass(Abzugstyp->ID, :MandantOid, :Lang) As Abzugstyp,
	GrammJeEinheit AS GrammJeEinheit,
	DBAgrofresh_SD.Hilfstexte_GetTextClass(Qualitaet, :MandantOid, :Lang) AS Qualitaet, 
	Herkunft->PositionsNr As "HerkunftNr",
	DBAgrofresh_SD.Hilfstexte_GetTextClass(Herkunft, :MandantOid, :Lang) As "HerkunftText",
	Herkunft->IsoKennzeichen As "HerkunftIsoKennzeichen",
	DBAgrofresh_SD.Hilfstexte_GetTextClass(Produktionsart, :MandantOid, :Lang) As Produktionsart,
	Charge->PositionsNr AS ChargenNr,
	Charge->Jahr AS ChargenJahr
	
	From DBAgrofreshEK.Bestellungspos 
	WHERE Bestellungskopf->Annahmedatum between {d :vonDatum} and {d :bisDatum} 
	AND Bestellungskopf->Mandant =:MandantOid]]></SqlQuery>
</Query>

<Query name="ListeByBestOidGroupArt">
<Type>%SQLQuery</Type>
<FormalSpec>BestellungOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	
	SELECT 	Artikel->ID As ArtikelId, SUM(NVL(AnzahlGebinde,0)) As SumGebinde
	FROM DBAgrofreshEK.Bestellungspos
	WHERE Bestellungskopf = :BestellungOid
	GROUP BY Artikel]]></SqlQuery>
</Query>

<Query name="ListeOffeneBestByArtikelLager">
<Type>%SQLQuery</Type>
<FormalSpec>ArtGrpVon:%Integer,ArtGrpBis:%Integer,ArtikelVon:%String,ArtikelBis:%String,VonAdr:%Integer,BisAdr:%Integer,VonDatum:%Date,BisDatum:%Date,Lang:%String,Mandant:%String,LagerortOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT	Artikel->ArtikelNr as ArtikelNr,
  			DBAgrofresh.Artikel_GetArtikeltextClass(Artikel, :Mandant, :Lang) As Bezeichnung, 
  			Menge As Anzahl,
  			Bestellungskopf->Adresse->Adresse->Adressnummer as Adressnummer,
 			DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :Mandant, :Lang) As Einheit,
			NVL(Bestellungskopf->Adresse->Adresse->Name, "")			AS "Lieferant.Name", 
			NVL(DBAdressen.Adresse_GetZusatz1(Bestellungskopf->Adresse->Adresse->Adresscode, Bestellungskopf->Adresse->Adresse->VornameZusatz1), "")
																		AS "Lieferant.Adresszeile1", 
			NVL(Bestellungskopf->Adresse->Adresse->Plz, "") 			AS "Lieferant.Plz",  
			NVL(Bestellungskopf->Adresse->Adresse->Ort, "") 			AS "Lieferant.Ort"
	FROM DBAgrofreshEK.Bestellungspos
	WHERE Bestellungskopf->Mandant = :Mandant
  		AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR NVL(:ArtikelVon, '') = '')
		AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR NVL(:ArtGrpVon,0) = 0)
		AND (Bestellungskopf->Adresse->Adresse->Adressnummer BETWEEN :VonAdr AND :BisAdr)
		AND (Bestellungskopf->Annahmedatum BETWEEN {d :VonDatum} AND {d :BisDatum})
		AND (NVL(Bestellungskopf->Bestellstatus,0) < DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein())
		AND NVL(BestelllistenNr,0) = 0
		AND (NVL(:LagerortOid,'') = '' OR Lagerort = :LagerortOid)]]></SqlQuery>
</Query>

<Query name="ListeByBestellNrAbnehmer">
<Type>%SQLQuery</Type>
<FormalSpec>BestellNr:%String,ArtikelId:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, 
		Artikel AS ArtikelID, 
		Artikel->ArtikelNr AS ArtikelNr,
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) AS Artikeltext,
		BetragExklMwst, 
		BetragInklMwst, 
		Menge,  
		Preis,
		Bestellungskopf->BestellungsNr,
		Bestellungskopf->Adresse->Adresse,
		Bestellungskopf->BestellNrAbnehmer
	    FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf->BestellNrAbnehmer = :BestellNr 
	    AND Artikel = :ArtikelId
	    ORDER BY ArtikelNr]]></SqlQuery>
</Query>

<Query name="ListeOffeneAnnahmen">
<Type>%SQLQuery</Type>
<FormalSpec>vonDatum:%Date,bisDatum:%Date,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, 
		Artikel AS ArtikelID, 
		Artikel->ArtikelNr AS ArtikelNr,
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) AS Artikeltext,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, :MandantOid, :Lang) AS Mengeneinheit, 
		DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde->ID, :MandantOid, :Lang) As Gebinde, 
		BestellteGebinde,
		BestellteMenge, 
		AnzahlGebinde, 
		Menge,
		BestellungsKopf->Name AS BestellungskopfLieferadresseAdresseName,
		BestellungsKopf->Plz AS BestellungskopfLieferadresseAdressePlz,
		BestellungsKopf->Ort AS BestellungskopfLieferadresseAdresseOrt
	    FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf->Annahmedatum between {d :vonDatum} AND {d :bisDatum}
	    AND Bestellungskopf->Mandant = :MandantOid AND NVL(TeillieferNr, 0) = 0 AND NVL(ZusatztextID, 0) = 0
	    AND NVL(BearbeitungsstatusTAS, 0) <> DBAgrofreshEK.Konst_BearbeitungsstatusGedruckt()
	    ORDER BY BestellungsKopf->Name]]></SqlQuery>
</Query>

<Query name="ListeDoppelteAbzugId">
<Type>%SQLQuery</Type>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID, PositionsNr, Bestellungskopf FROM DBAgrofreshEK.Bestellungspos p
	WHERE NVL((SELECT COUNT(ID) FROM DBAgrofreshEK.Bestellungspos a where p.Bestellungskopf = a.Bestellungskopf AND
	p.PositionsNr = a.PositionsNr AND p.AbzugID = a.AbzugID AND NVL(ZusatztextID,0) = 0 AND NVL(TeillieferNr,0) = 0),0) > 1
        AND NVL(ZusatztextID,0) = 0 AND NVL(TeillieferNr,0) = 0
	ORDER BY p.Bestellungskopf, p.PositionsNr]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.ChargenAusgangAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61473,58198.296113</TimeCreated>

<Query name="ListeGesamt">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[SELECT 	ID, 
		Charge->PositionsNr As ChargenNr,
		Kunde, 
		AusgangsDatum, 
		ZeitAbgang,
		Artikel->ArtikelNr As ArtikelNr, 
		Herkunft, 
		AnzahlGebinde,
		Gebinde, 
		MengeJeGebinde,
		MengeAusgang, 
		MengeInKg, 
		Preis,
		Betrag
FROM DBAgrofreshEK.ChargenAusgang
WHERE Artikel = :ArtikelOid
ORDER BY AusgangsDatum]]></SqlQuery>
</Query>

<Query name="ListeGesamtNachDatum">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,ArtikelOid:%String,Von:%Date,Bis:%Date,filterAbteilung:%Boolean,AbteilungOid:%String,filterLagerort:%Boolean,LagerOid:%String,filterAbzug:%Boolean,AbzugOid:%String,filterQualitaet:%Boolean,QualitaetOid:%String,ErledigteAnzeigen:%Boolean=0</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[SELECT 	ID, 
		Charge,
		Charge->PositionsNr As ChargenNr,
		Kunde,
		Kunde->Adresse As Adresse, 
		AusgangsDatum, 
		ZeitAbgang,
		Artikel->ArtikelNr As ArtikelNr, 
		Artikel,
		Herkunft, 
		Lagerort, 
		Qualitaet, 
		Produktionsart,
		CASE  WHEN NVL((SELECT NVL(Auftragskopf->Auftragsstatus,0) FROM DBAgrofresh.Auftragspos WHERE Charge = ca.ID), 0)< DBAgrofresh.Konst_AuftragstatusLieferschein() THEN 0 ELSE AnzahlGebinde END AS AnzahlGebinde,
		AnzahlGebindeBestellt,
		CASE WHEN NVL((SELECT NVL(Auftragskopf->Auftragsstatus,0) FROM DBAgrofresh.Auftragspos WHERE Charge = ca.ID), 0)< DBAgrofresh.Konst_AuftragstatusLieferschein() THEN AnzahlGebindeBestellt ELSE NVL(AnzahlGebindeBestellt, 0) - NVL(AnzahlGebinde,0) END AS Restanz,
		Gebinde, 
		MengeJeGebinde,
		CASE WHEN NVL((SELECT NVL(Auftragskopf->Auftragsstatus,0) FROM DBAgrofresh.Auftragspos WHERE Charge = ca.ID), 0)< DBAgrofresh.Konst_AuftragstatusLieferschein() THEN 0 ELSE MengeAusgang END AS MengeAusgang,
		MengeBestellt,
		MengeInKg, 
		Preis,
		Betrag
FROM DBAgrofreshEK.ChargenAusgang ca
WHERE Mandant = :MandantOid AND Artikel = :ArtikelOid AND AusgangsDatum BETWEEN :Von AND :Bis
AND (:filterAbteilung = 0 OR (:filterAbteilung = 1 AND Abteilung = :AbteilungOid))
AND (:filterLagerort = 0 OR (:filterLagerort = 1 AND Lagerort = :LagerOid))
AND ((:filterAbzug = 0 OR (:filterAbzug = 1 AND Abzugstyp = :AbzugOid)) OR
(:filterAbzug = 1 AND NVL(:AbzugOid, '') = '' AND Abzugstyp is null))
AND ((:filterQualitaet = 0 OR (:filterQualitaet = 1 AND Qualitaet = :QualitaetOid)) OR
(:filterQualitaet = 1 AND NVL(:QualitaetOid, '') = '' AND Qualitaet is null))
AND (:ErledigteAnzeigen = 1 OR NVL((SELECT NVL(Auftragskopf->Auftragsstatus,0) FROM DBAgrofresh.Auftragspos WHERE Charge = ca.ID), 0) < DBAgrofresh.Konst_AuftragstatusLieferschein())
ORDER BY AusgangsDatum]]></SqlQuery>
</Query>

<Query name="ListeGesamtNachDatumGruppe">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,ProdGrpOid:%String,Von:%Date,Bis:%Date,filterAbteilung:%Boolean,AbteilungOid:%String,filterLagerort:%Boolean,LagerOid:%String,filterAbzug:%Boolean,AbzugOid:%String,filterQualitaet:%Boolean,QualitaetOid:%String,ErledigteAnzeigen:%Boolean=0</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[SELECT 	ID, 
		Charge,
		Charge->PositionsNr As ChargenNr,
		Kunde,
		Kunde->Adresse As Adresse, 
		AusgangsDatum, 
		ZeitAbgang,
		Artikel->ArtikelNr As ArtikelNr, 
		Artikel,
		Herkunft, 
		Lagerort, 
		Qualitaet, 
		Produktionsart,
		CASE  WHEN NVL((SELECT NVL(Auftragskopf->Auftragsstatus,0) FROM DBAgrofresh.Auftragspos WHERE Charge = ca.ID), 0)< DBAgrofresh.Konst_AuftragstatusLieferschein() THEN 0 ELSE AnzahlGebinde END AS AnzahlGebinde,
		AnzahlGebindeBestellt,
		CASE WHEN NVL((SELECT NVL(Auftragskopf->Auftragsstatus,0) FROM DBAgrofresh.Auftragspos WHERE Charge = ca.ID), 0)< DBAgrofresh.Konst_AuftragstatusLieferschein() THEN AnzahlGebindeBestellt ELSE NVL(AnzahlGebindeBestellt, 0) - NVL(AnzahlGebinde,0) END AS Restanz,
		Gebinde, 
		MengeJeGebinde,
		CASE WHEN NVL((SELECT NVL(Auftragskopf->Auftragsstatus,0) FROM DBAgrofresh.Auftragspos WHERE Charge = ca.ID), 0)< DBAgrofresh.Konst_AuftragstatusLieferschein() THEN 0 ELSE MengeAusgang END AS MengeAusgang,
		MengeBestellt,
		MengeInKg, 
		Preis,
		Betrag
FROM DBAgrofreshEK.ChargenAusgang ca
WHERE Mandant = :MandantOid AND Artikel->Produktgruppe = :ProdGrpOid AND AusgangsDatum BETWEEN :Von AND :Bis
AND (:filterAbteilung = 0 OR (:filterAbteilung = 1 AND Abteilung = :AbteilungOid))
AND (:filterLagerort = 0 OR (:filterLagerort = 1 AND Lagerort = :LagerOid))
AND ((:filterAbzug = 0 OR (:filterAbzug = 1 AND Abzugstyp = :AbzugOid)) OR
(:filterAbzug = 1 AND NVL(:AbzugOid, '') = '' AND Abzugstyp is null))
AND ((:filterQualitaet = 0 OR (:filterQualitaet = 1 AND Qualitaet = :QualitaetOid)) OR
(:filterQualitaet = 1 AND NVL(:QualitaetOid, '') = '' AND Qualitaet is null))
AND (:ErledigteAnzeigen = 1 OR NVL((SELECT NVL(Auftragskopf->Auftragsstatus,0) FROM DBAgrofresh.Auftragspos WHERE Charge = ca.ID), 0) < DBAgrofresh.Konst_AuftragstatusLieferschein())
ORDER BY AusgangsDatum]]></SqlQuery>
</Query>

<Query name="ListeNachEingangByDatumDesc">
<Type>%SQLQuery</Type>
<FormalSpec>ChargenEingang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>SELECT 	ID FROM DBAgrofreshEK.ChargenAusgang WHERE Charge = :ChargenEingang ORDER BY AusgangsDatum DESC, NVL(PositionsNr,0) DESC</SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.ChargenEingangAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61451,44782.163642</TimeCreated>

<Query name="ListeGesamt">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,ArtikelOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[SELECT 	ID, 
		PositionsNr AS ChargenNr,
		Status,
		datepart('year',Eingangsdatum) As ChargenNrYear, 
		Lieferant->Adresse->Adressnummer As ChargenNrLnr, 
		Lieferant->Adresse As Lieferant, 
		EingangsDatum, 
		ZeitEingang,
		Artikel->ArtikelNr As ArtikelNr, 
		Herkunft, 
		AnzahlGebinde,
		Gebinde, 
		MengeJeGebinde,
		MengeEingang, 
		MengeVerfuegbar,
		Preis,
		Betrag
	FROM DBAgrofreshEK.ChargenEingang
	WHERE Mandant = :MandantOid AND Artikel = :ArtikelOid
	ORDER BY ChargenNrYear DESC, ChargenNrLnr DESC]]></SqlQuery>
</Query>

<Query name="ListeGesamtLaufend">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,ArtikelOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID, PositionsNr AS ChargenNr,datepart('year',Eingangsdatum) As ChargenNrYear, 
			DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) AS Artikeltext,
			PositionsNr As ChargenNrLnr, Lieferant, EingangsDatum, Artikel->ArtikelNr As ArtikelNr, 
			Herkunft, Gebinde, MengeEingang, MengeVerfuegbar, AnzahlGebinde, AnzahlGebindeVerfuegbar
	 		FROM DBAgrofreshEK.ChargenEingang
			WHERE Mandant = :MandantOid AND Artikel = :ArtikelOid AND MengeVerfuegbar <> 0
			AND NVL(Provisorisch, 0) = 0
			ORDER BY Eingangsdatum DESC, ChargenNrLnr DESC]]></SqlQuery>
</Query>

<Query name="ListeGesamtVonBisDatum">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,VonDatum:%Date,BisDatum:%Date</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID, PositionsNr AS ChargenNr, PositionsNr As ChargenNrLnr, Lieferant, EingangsDatum, Artikel->ArtikelNr As ArtikelNr, Herkunft, Gebinde, MengeEingang, MengeVerfuegbar, AnzahlGebinde
	 		FROM DBAgrofreshEK.ChargenEingang
			WHERE Mandant = :MandantOid AND MengeVerfuegbar <> 0
			AND NVL(Provisorisch, 0) = 0
			AND EingangsDatum BETWEEN :VonDatum AND :BisDatum
			ORDER BY Eingangsdatum DESC, ChargenNrLnr DESC]]></SqlQuery>
</Query>

<Query name="ListeGesamtLaufendProduktgrp">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,ProduktgrpOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID, PositionsNr AS ChargenNr,datepart('year',Eingangsdatum) As ChargenNrYear, 
		   DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) AS Artikeltext,
		   PositionsNr As ChargenNrLnr, Lieferant, EingangsDatum, Artikel->ArtikelNr As ArtikelNr, 
		   Herkunft, Gebinde, MengeEingang, MengeVerfuegbar, AnzahlGebinde, AnzahlGebindeVerfuegbar
	 		FROM DBAgrofreshEK.ChargenEingang
			WHERE Mandant = :MandantOid AND MengeVerfuegbar <> 0 AND Artikel->Produktgruppe = :ProduktgrpOid
			ORDER BY Eingangsdatum DESC, ChargenNrLnr DESC]]></SqlQuery>
</Query>

<Query name="ListeDVKLaufend">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,ArtikelOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID, PositionsNr AS ChargenNr,datepart('year',Eingangsdatum) As ChargenNrYear, PositionsNr As ChargenNrLnr, 
	       DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) AS Artikeltext,
		   Lieferant, EingangsDatum, Artikel->ArtikelNr As ArtikelNr, Herkunft, Gebinde, DirektverkaufVerfuegbar AS MengeEingang, 
	       DirektverkaufVerfuegbar AS MengeVerfuegbar, AnzahlGebDirektverVerfuegbar AS AnzahlGebinde, AnzahlGebDirektverVerfuegbar AS AnzahlGebindeVerfuegbar
	 		FROM DBAgrofreshEK.ChargenEingang
			WHERE Mandant = :MandantOid AND Artikel = :ArtikelOid AND DirektverkaufVerfuegbar > 0
			ORDER BY Eingangsdatum DESC, ChargenNrLnr DESC]]></SqlQuery>
</Query>

<Query name="ListeDVKLaufendProduktgrp">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,ProduktgrpOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID, PositionsNr AS ChargenNr,datepart('year',Eingangsdatum) As ChargenNrYear, PositionsNr As ChargenNrLnr, 
		   DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) AS Artikeltext,
		   Lieferant, EingangsDatum, Artikel->ArtikelNr As ArtikelNr, Herkunft, Gebinde, DirektverkaufVerfuegbar AS MengeEingang, 
		   DirektverkaufVerfuegbar AS MengeVerfuegbar, AnzahlGebDirektverVerfuegbar AS AnzahlGebinde, AnzahlGebDirektverVerfuegbar AS AnzahlGebindeVerfuegbar
	 		FROM DBAgrofreshEK.ChargenEingang
			WHERE Mandant = :MandantOid AND DirektverkaufVerfuegbar > 0 AND Artikel->Produktgruppe = :ProduktgrpOid
			ORDER BY Eingangsdatum DESC, ChargenNrLnr DESC]]></SqlQuery>
</Query>

<Query name="ListeNachProduzentDatum">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelOid:%String,Per:%Date,ProduzentVon:%Integer,ProduzentBis:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	ID,
			ChargenNr,
			PositionsNr,
			Status,
			LieferantKunde,
			EingangsDatum As Datum,
			Artikel,
			MengeEingang As Menge,
			MengeVerfuegbar,
			Preis,
			Betrag,
			MengeAusgaenge,
			LagerEffektiv,
			LagerAufnahme,
			datepart('year',Eingangsdatum) As ChargenNrYear, 
			PositionsNr As ChargenNrLnr
	FROM
	(SELECT e.ID, 
			e.PositionsNr AS ChargenNr,
			0 As PositionsNr,
			e.Status,
			e.Lieferant As LieferantKunde, 
			e.EingangsDatum, 
			e.Artikel, 
			e.MengeEingang, 
			e.MengeVerfuegbar,
			e.Preis,
			e.Betrag,
			(SELECT SUM(MengeAusgang) from dbagrofreshek.chargenausgang where charge = e.ID) as MengeAusgaenge,
			e.LagerEffektiv,
			e.LagerAufnahme
	FROM 	DBAgrofreshEK.ChargenEingang As e 
	WHERE 	e.Artikel = :ArtikelOid
			AND EingangsDatum <= :Per
			AND (
					(LagerAufnahme is not NULL AND LagerAufnahme->LagerPer >= :Per)
					OR ((LagerAufnahme is NULL OR (Lageraufnahme is not NULL AND Lageraufnahme->LagerPer < :Per AND MengeVerfuegbar <> 0)))
				)
			AND e.Lieferant->Adresse->Adressnummer BETWEEN :ProduzentVon AND :ProduzentBis
	
	UNION ALL
	
	SELECT	ID, 	
			Charge->PositionsNr As ChargenNr, 
			PositionsNr, 
			Charge->Status, 
			Kunde, 
			AusgangsDatum, 
			Artikel, 
			MengeAusgang,
			0,
			0,
			0,
			"",
			0,
			NULL
	FROM DBAgrofreshEK.ChargenAusgang
	WHERE 	Artikel = :ArtikelOid
			AND 
			(Charge is not NULL
			AND (
					(Charge->LagerAufnahme is not NULL AND Charge->LagerAufnahme->LagerPer >= :Per)
					OR ((Charge->LagerAufnahme is NULL OR (Charge->Lageraufnahme is not NULL AND Charge->Lageraufnahme->LagerPer < :Per AND Charge->MengeVerfuegbar <> 0)))
				
				)
			)
			AND Charge->EingangsDatum <=:Per
			AND Charge->Lieferant->Adresse->Adressnummer BETWEEN :ProduzentVon AND :ProduzentBis)
ORDER BY ChargenNrYear DESC, ChargenNrLnr DESC, PositionsNr]]></SqlQuery>
</Query>

<Query name="ListeNachProduzentDatumAll">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Per:%Date,ProduzentVon:%Integer,ProduzentBis:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	ID,
			ChargenNr,
			PositionsNr,
			Status,
			LieferantKunde,
			EingangsDatum As Datum,
			Artikel,
			MengeEingang As Menge,
			MengeVerfuegbar,
			Preis,
			Betrag,
			MengeAusgaenge,
			LagerEffektiv,
			LagerAufnahme,
			datepart('year',Eingangsdatum) As ChargenNrYear, 
			PositionsNr As ChargenNrLnr
	FROM
	(SELECT e.ID, 
			e.PositionsNr AS ChargenNr,
			0 As PositionsNr,
			e.Status,
			e.Lieferant As LieferantKunde, 
			e.EingangsDatum, 
			e.Artikel, 
			e.MengeEingang, 
			e.MengeVerfuegbar,
			e.Preis,
			e.Betrag,
			(SELECT SUM(MengeAusgang) from dbagrofreshek.chargenausgang where charge = e.ID) as MengeAusgaenge,
			e.LagerEffektiv,
			e.LagerAufnahme
	FROM 	DBAgrofreshEK.ChargenEingang As e 
	WHERE 	e.Mandant = :MandantOid
			AND EingangsDatum <= :Per
			AND (
					(LagerAufnahme is not NULL AND LagerAufnahme->LagerPer >= :Per)
					OR ((LagerAufnahme is NULL OR (Lageraufnahme is not NULL AND Lageraufnahme->LagerPer < :Per AND MengeVerfuegbar <> 0)))
				)
			AND e.Lieferant->Adresse->Adressnummer BETWEEN :ProduzentVon AND :ProduzentBis
	
	UNION ALL
	
	SELECT	ID, 	
			Charge->PositionsNr As ChargenNr, 
			PositionsNr, 
			Charge->Status, 
			Kunde, 
			AusgangsDatum, 
			Artikel, 
			MengeAusgang,
			0,
			0,
			0,
			"",
			0,
			NULL
	FROM DBAgrofreshEK.ChargenAusgang
	WHERE 	Mandant = :MandantOid
			AND 
			(Charge is not NULL
			AND (
					(Charge->LagerAufnahme is not NULL AND Charge->LagerAufnahme->LagerPer >= :Per)
					OR ((Charge->LagerAufnahme is NULL OR (Charge->Lageraufnahme is not NULL AND Charge->Lageraufnahme->LagerPer < :Per AND Charge->MengeVerfuegbar <> 0)))
				
				)
			)
			AND Charge->EingangsDatum <=:Per
			AND Charge->Lieferant->Adresse->Adressnummer BETWEEN :ProduzentVon AND :ProduzentBis)
ORDER BY Artikel, ChargenNrYear DESC, ChargenNrLnr DESC, PositionsNr]]></SqlQuery>
</Query>

<Query name="ListeLageraufnahme">
<Type>%SQLQuery</Type>
<FormalSpec>LageraufnahmeOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID, PositionsNr AS ChargenNr,datepart('year',Eingangsdatum) As ChargenNrYear, PositionsNr As ChargenNrLnr, Lieferant, LagerAufnahme->Bemerkung As Bemerkung, MengeEingang, Eingangspreis->PreisAusbezahlt As PreisAusbezahlt
	 		FROM DBAgrofreshEK.ChargenEingang
			WHERE LagerAufnahme = :LageraufnahmeOid
			ORDER BY ChargenNrYear DESC, ChargenNrLnr DESC]]></SqlQuery>
</Query>

<Query name="ListeVerarbeitung">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,ArtikelOid:%String,Lang:%String,Archivierte:%Boolean,anzahl:%Integer,id:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT TOP :anzahl p.ID, p.PositionsNr AS ChargenNr, datepart('year',Eingangsdatum) As ChargenNrYear, 
			PositionsNr As ChargenNrLnr, 
			p.Lieferant->Adresse->Adressnummer, 
			p.Lieferant->Adresse->Name, 
			p.Lieferant->Adresse->Plz, 
			p.Lieferant->Adresse->Ort, 
			p.EingangsDatum, 
			p.Artikel->ID As ArtikelId,
			p.Artikel->ArtikelNr As ArtikelNr, 
			p.Artikel->Mengeneinheit As Mengeneinheit,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(p.Artikel->Mengeneinheit, :MandantOid, :Lang) As MengeneinheitText,
			p.Herkunft,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(p.Herkunft, :MandantOid, :Lang) As HerkunftText,
			p.Abzugstyp, 
			p.Abzugstyp->PositionsNr AS AbzugsNr, 
			DBAgrofresh_SD.Hilfstexte_GetTextClass(p.Abzugstyp, :MandantOid, :Lang) As AbzugText,
			p.Produktionsart, 
			p.Qualitaet, 
			p.AnzahlGebinde AS AnzahlGebinde, 
			p.AnzahlGebindeVerarbeitung AS AnzahlGebindeVerarbeitung, 
			p.MengeJeGebinde,
			p.Gebinde,
			p.Gebinde->GebindeNr AS GebindeNr,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(p.Gebinde, :MandantOid, :Lang) As GebindeText,
			p.MengeVerarbeitung AS MengeVerarbeitung, 
			p.MengeEingang AS MengeEingang,
			p.MengeVerarbeitungVerfuegbar AS MengeVerfuegbar,
			p.MengeVerarbeitungProv AS MengeVerarbeitungProv,
			p.Einzelgewicht,
			p.OriginalCharge,
			p.VerlustMengeGesamt AS Verlust,
			p.VerarbeitungAktiv,
			p.AnzGebKalibrierung,
			p.MengeKalibrierung,
	 		P.Lagerort,
	 		p.RetourenPos,
	 		p.Kalibrierung
	 		FROM DBAgrofreshEK.ChargenEingang p
			WHERE  p.Mandant = :MandantOid AND p.Artikel = :ArtikelOid AND 
			(((p.MengeVerarbeitung <> 0 OR NVL(p.VerarbeitungAktiv,0)=1) AND (not p.MengeVerarbeitungVerfuegbar = 0 OR :Archivierte=1)
			OR NVL((SELECT COUNT(ID) FROM DBAgrofreshEK.VerarbProv WHERE OriginalCharge = p.ID),0) > 0)
			OR NVL(Kalibrierung,0) = 1)
			ORDER BY ChargenNrLnr DESC]]></SqlQuery>
</Query>

<Query name="ListeVerarbeitungAktiv">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,ArtikelOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT  p.ID, p.PositionsNr AS ChargenNr, datepart('year',Eingangsdatum) As ChargenNrYear, 
			PositionsNr As ChargenNrLnr, 
			p.Lieferant->Adresse->Adressnummer, 
			p.Lieferant->Adresse->Name, 
			p.Lieferant->Adresse->Plz, 
			p.Lieferant->Adresse->Ort, 
			p.EingangsDatum, 
			p.Artikel->ID As ArtikelId,
			p.Artikel->ArtikelNr As ArtikelNr, 
			p.Artikel->Mengeneinheit As Mengeneinheit,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(p.Artikel->Mengeneinheit, :MandantOid, :Lang) As MengeneinheitText,
			p.Herkunft,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(p.Herkunft, :MandantOid, :Lang) As HerkunftText,
			p.Abzugstyp, 
			p.Abzugstyp->PositionsNr AS AbzugsNr, 
			DBAgrofresh_SD.Hilfstexte_GetTextClass(p.Abzugstyp, :MandantOid, :Lang) As AbzugText,
			p.Produktionsart, 
			p.Qualitaet, 
			p.AnzahlGebinde AS AnzahlGebinde, 
			p.AnzahlGebindeVerarbeitung AS AnzahlGebindeVerarbeitung, 
			p.MengeJeGebinde,
			p.Gebinde,
			p.Gebinde->GebindeNr AS GebindeNr,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(p.Gebinde, :MandantOid, :Lang) As GebindeText,
			p.MengeVerarbeitung AS MengeVerarbeitung, 
			p.MengeEingang AS MengeEingang,
			p.MengeVerarbeitungVerfuegbar AS MengeVerfuegbar,
			p.MengeVerarbeitungProv AS MengeVerarbeitungProv,
			p.Einzelgewicht,
			p.OriginalCharge,
			p.VerlustMengeGesamt AS Verlust,
			p.VerarbeitungAktiv,
			p.AnzGebKalibrierung,
			p.MengeKalibrierung,
	 		P.Lagerort,
	 		p.RetourenPos,
	 		p.Kalibrierung
	 		FROM DBAgrofreshEK.ChargenEingang p
			WHERE  p.Mandant = :MandantOid AND p.Artikel = :ArtikelOid AND 
			(NVL(p.VerarbeitungAktiv,0)=1 OR NVL(Kalibrierung,0) = 1)
			ORDER BY ChargenNrLnr DESC]]></SqlQuery>
</Query>

<Query name="ListeVerarbeitungNachGruppe">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,ProduktGrpOid:%String,Lang:%String,Archivierte:%Boolean,anzahl:%Integer,id:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT TOP :anzahl p.ID, p.PositionsNr AS ChargenNr, datepart('year',Eingangsdatum) As ChargenNrYear, 
			PositionsNr As ChargenNrLnr, 
			p.Lieferant->Adresse->Adressnummer, 
			p.Lieferant->Adresse->Name, 
			p.Lieferant->Adresse->Plz, 
			p.Lieferant->Adresse->Ort, 
			p.EingangsDatum, 
			p.Artikel->ID As ArtikelId,
			p.Artikel->ArtikelNr As ArtikelNr, 
			p.Artikel->Mengeneinheit As Mengeneinheit,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(p.Artikel->Mengeneinheit, :MandantOid, :Lang) As MengeneinheitText,
			p.Herkunft,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(p.Herkunft, :MandantOid, :Lang) As HerkunftText,
			p.Abzugstyp, 
			p.Abzugstyp->PositionsNr AS AbzugsNr, 
			DBAgrofresh_SD.Hilfstexte_GetTextClass(p.Abzugstyp, :MandantOid, :Lang) As AbzugText,
			p.Produktionsart, 
			p.Qualitaet, 
			p.AnzahlGebinde AS AnzahlGebinde, 
			p.AnzahlGebindeVerarbeitung AS AnzahlGebindeVerarbeitung, 
			p.MengeJeGebinde,
			p.Gebinde,
			p.Gebinde->GebindeNr AS GebindeNr,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(p.Gebinde, :MandantOid, :Lang) As GebindeText,
			p.MengeVerarbeitung AS MengeVerarbeitung, 
			p.MengeEingang AS MengeEingang,
			p.MengeVerarbeitungVerfuegbar AS MengeVerfuegbar,
			p.MengeVerarbeitungProv AS MengeVerarbeitungProv,
			p.Einzelgewicht,
			p.OriginalCharge,
			p.VerlustMengeGesamt AS Verlust,
			p.VerarbeitungAktiv,
			p.AnzGebKalibrierung,
			p.MengeKalibrierung,
	 		P.Lagerort,
	 		p.RetourenPos,
	 		p.Kalibrierung
	 		FROM DBAgrofreshEK.ChargenEingang p
			WHERE p.Mandant = :MandantOid AND p.Artikel->Produktgruppe = :ProduktGrpOid AND
			(((p.MengeVerarbeitung <> 0 OR NVL(p.VerarbeitungAktiv,0)=1) AND (not p.MengeVerarbeitungVerfuegbar = 0 OR :Archivierte=1)
			OR NVL((SELECT COUNT(ID) FROM DBAgrofreshEK.VerarbProv WHERE OriginalCharge = p.ID),0) > 0)
			OR NVL(Kalibrierung,0) = 1)
			ORDER BY ChargenNrLnr DESC]]></SqlQuery>
</Query>

<Query name="ListeVerarbeitungNachGrAktiv">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,ProduktGrpOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT  p.ID, p.PositionsNr AS ChargenNr, datepart('year',Eingangsdatum) As ChargenNrYear, 
			PositionsNr As ChargenNrLnr, 
			p.Lieferant->Adresse->Adressnummer, 
			p.Lieferant->Adresse->Name, 
			p.Lieferant->Adresse->Plz, 
			p.Lieferant->Adresse->Ort, 
			p.EingangsDatum, 
			p.Artikel->ID As ArtikelId,
			p.Artikel->ArtikelNr As ArtikelNr, 
			p.Artikel->Mengeneinheit As Mengeneinheit,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(p.Artikel->Mengeneinheit, :MandantOid, :Lang) As MengeneinheitText,
			p.Herkunft,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(p.Herkunft, :MandantOid, :Lang) As HerkunftText,
			p.Abzugstyp, 
			p.Abzugstyp->PositionsNr AS AbzugsNr, 
			DBAgrofresh_SD.Hilfstexte_GetTextClass(p.Abzugstyp, :MandantOid, :Lang) As AbzugText,
			p.Produktionsart, 
			p.Qualitaet, 
			p.AnzahlGebinde AS AnzahlGebinde, 
			p.AnzahlGebindeVerarbeitung AS AnzahlGebindeVerarbeitung, 
			p.MengeJeGebinde,
			p.Gebinde,
			p.Gebinde->GebindeNr AS GebindeNr,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(p.Gebinde, :MandantOid, :Lang) As GebindeText,
			p.MengeVerarbeitung AS MengeVerarbeitung, 
			p.MengeEingang AS MengeEingang,
			p.MengeVerarbeitungVerfuegbar AS MengeVerfuegbar,
			p.MengeVerarbeitungProv AS MengeVerarbeitungProv,
			p.Einzelgewicht,
			p.OriginalCharge,
			p.VerlustMengeGesamt AS Verlust,
			p.VerarbeitungAktiv,
			p.AnzGebKalibrierung,
			p.MengeKalibrierung,
	 		P.Lagerort,
	 		p.RetourenPos,
	 		p.Kalibrierung
	 		FROM DBAgrofreshEK.ChargenEingang p
			WHERE p.Mandant = :MandantOid AND p.Artikel->Produktgruppe = :ProduktGrpOid AND
			(NVL(p.VerarbeitungAktiv,0)=1 OR NVL(Kalibrierung,0) = 1)
			ORDER BY ChargenNrLnr DESC]]></SqlQuery>
</Query>

<Query name="ListeAufteilungArtikel">
<Type>%SQLQuery</Type>
<FormalSpec>ChargenEingangOid:%String,AuftragOid:%String=""</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID, PositionsNr AS ChargenNr,datepart('year',Eingangsdatum) As ChargenNrYear,
	 		Artikel,
	 		AnzahlGebinde,
	 		Gebinde,
	 		MengeJeGebinde,
	 		MengeEingang,
	 		MengeEingangKg,
	 		Qualitaet,
	 		Herkunft,
	 		Produktionsart,
	 		Einzelgewicht,
	 		Artikel->Mengeneinheit As Mengeneinheit,
	 		VerarbeitungsAuftrag As VerarbAuftrag,
	 		VerarbeitungsAuftrag->AuftragsNr As VerarbAuftragsNr,
	 		VerarbeitungsAuftrag->PrduktionsscheinGedruckt As Gedruckt,
	 		Abzugstyp,
	 		Lagerort,
	 		Provisorisch,
	 		RetourenPos,
	 		Mischposten,
	 		IsMischposten
	FROM DBAgrofreshEK.ChargenEingang
	WHERE OriginalCharge = :ChargenEingangOid AND NVL(AusVerarbeitung,0) = 1 AND
	(VerarbeitungsAuftrag = :AuftragOid OR NVL(:AuftragOid, '') = '')
	ORDER BY ChargenNrYear DESC, PositionsNr DESC]]></SqlQuery>
</Query>

<Query name="ListeAufteilungArtikelProv">
<Type>%SQLQuery</Type>
<FormalSpec>ChargenEingangOid:%String,AuftragOid:%String=""</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	ID,
			Artikel,
	 		AnzahlGebinde,
	 		Gebinde,
	 		MengeJeGebinde,
	 		MengeEingang,
	 		MengeEingangKg,
	 		Qualitaet,
	 		Herkunft,
	 		Produktionsart,
	 		Einzelgewicht,
	 		Artikel->Mengeneinheit As Mengeneinheit,
	 		VerarbAuftrag,
	 		VerarbAuftrag->AuftragsNr As VerarbAuftragsNr,
	 		VerarbAuftrag->PrduktionsscheinGedruckt As Gedruckt,
	 		Bemerkung,
	 		Abzugstyp,
	 		(SELECT Lagerort FROM DBAgrofreshEK.ChargenEingang WHERE ID = :ChargenEingangOid) AS Lagerort,
	 		0 AS RetourenPos
	FROM DBAgrofreshEK.VerarbProv
	WHERE VerarbAuftrag->Charge = :ChargenEingangOid AND 
	(VerarbAuftrag = :AuftragOid OR NVL(:AuftragOid, '') = '')
	ORDER BY VerarbAuftragsNr]]></SqlQuery>
</Query>

<Query name="ListeAuftProvNachVerarbAuftr">
<Type>%SQLQuery</Type>
<FormalSpec>ChargenEingangOid:%String,VerarbAuftragOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	ID,
			Artikel,
	 		AnzahlGebinde,
	 		Gebinde,
	 		MengeJeGebinde,
	 		MengeEingang,
	 		MengeEingangKg,
	 		Qualitaet,
	 		Herkunft,
	 		Produktionsart,
	 		Einzelgewicht,
	 		Artikel->Mengeneinheit As Mengeneinheit,
	 		VerarbAuftrag,
	 		VerarbAuftrag->AuftragsNr As VerarbAuftragsNr,
	 		VerarbAuftrag->PrduktionsscheinGedruckt As Gedruckt,
	 		Bemerkung,
	 		Abzugstyp,
	 		(SELECT Lagerort FROM DBAgrofreshEK.ChargenEingang WHERE ID = :ChargenEingangOid) AS Lagerort,
	 		0 AS RetourenPos
	FROM DBAgrofreshEK.VerarbProv
	WHERE
	VerarbAuftrag = :VerarbAuftragOid
	ORDER BY VerarbAuftrag->AuftragsNr]]></SqlQuery>
</Query>

<Query name="ListeGridAuswahl">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,ArtikelOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[SELECT 	ID, 
		PositionsNr AS ChargenNr,
		datepart('year',Eingangsdatum) As ChargenNrYear, 
		PositionsNr As ChargenNrLnr, 
		(Lieferant->Adresse->Adressnummer || ' - ' || Lieferant->Adresse->Name || ', ' || Lieferant->Adresse->Plz || ' ' || Lieferant->Adresse->Ort) As Lieferant
FROM DBAgrofreshEK.ChargenEingang
WHERE Mandant = :MandantOid AND Artikel = :ArtikelOid
ORDER BY ChargenNrYear DESC, ChargenNrLnr DESC]]></SqlQuery>
</Query>

<Query name="ListeGesamtNachDatumUebersicht">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,ArtikelOid:%String,Von:%Date,Bis:%Date,filterAbteilung:%Boolean,AbteilungOid:%String,filterLagerort:%Boolean,LagerOid:%String,BestellstatusBestellung:%Integer,SaldoNullAnzeigen:%Boolean,filterAbzug:%Boolean,AbzugOid:%String,filterQualitaet:%Boolean,QualitaetOid:%String,filterId:%Boolean,Id:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[SELECT 	ID, 
		PositionsNr AS ChargenNr,
		Status,
		Jahr,
		Lieferant, 
		Lieferant->Adresse->ID As Adresse,
		EingangsDatum, 
		Artikel->ArtikelNr As ArtikelNr, 
		Herkunft, 
		AnzahlGebinde,
		Gebinde, 
		MengeJeGebinde,
		MengeEingang AS MengeEinheit,
		Bestellt AS Bestellt,
		NVL((SELECT NVL(Bestellungskopf->BearbeitungsstatusAS,0) FROM DBAgrofreshEK.Bestellungspos WHERE Charge = ce.ID), 1) AS AN,
		CASE (NVL((SELECT NVL(Bestellungskopf->BearbeitungsstatusAS,0) FROM DBAgrofreshEK.Bestellungspos WHERE Charge = ce.ID), 1)) WHEN 0 THEN
		0 ELSE AnzahlGebinde END AS MengeEingang, 
		AnzahlGebindeVerfuegbar AS MengeVerfuegbarGeb,
		NVL((SELECT SUM(AnzahlGebinde) FROM DBAgrofreshEK.ChargenAusgang WHERE Charge = ce.ID AND NVL(isDirektverkauf,0) = 0),0) + (NVL(AnzahlGebDirektverkauf,0) - NVL(AnzahlGebDirektverVerfuegbar,0)) AS VerkaufteGeb,
		Qualitaet,
		Abzugstyp,
		Herkunft,
		Produktionsart,
		Lagerort,
		AnzahlGebindeVerarbeitung,
		AnzahlGebDirektverVerfuegbar AS Direktverkauf,
		Provisorisch,
		Kalibrierung
FROM DBAgrofreshEK.ChargenEingang ce
WHERE Mandant = :MandantOid AND Artikel = :ArtikelOid AND 
EingangsDatum BETWEEN :Von AND :Bis 
AND (:SaldoNullAnzeigen = 1 OR (:SaldoNullAnzeigen = 0 AND NVL(MengeVerfuegbar,0) <> 0) OR (NVL(VerarbeitungAktiv,0) = 1) OR (NVL(DirektverkaufVerfuegbar,0) > 0))
AND (:filterAbteilung = 0 OR (:filterAbteilung = 1 AND Abteilung = :AbteilungOid))
AND (:filterLagerort = 0 OR (:filterLagerort = 1 AND Lagerort = :LagerOid))
AND ((:filterAbzug = 0 OR (:filterAbzug = 1 AND Abzugstyp = :AbzugOid)) OR
(:filterAbzug = 1 AND NVL(:AbzugOid, '') = '' AND Abzugstyp is null))
AND ((:filterQualitaet = 0 OR (:filterQualitaet = 1 AND Qualitaet = :QualitaetOid)) OR
(:filterQualitaet = 1 AND NVL(:QualitaetOid, '') = '' AND Qualitaet is null))
AND (:filterId = 0 OR (:filterId = 1 AND ID = :Id)) 
AND (NVL(RetourenPos,0) = 0 OR (:filterId = 1)) 
/*AND ((NVL(Provisorisch,0) = 0) OR (:filterId = 1)) */

UNION ALL

SELECT	0 AS ID,
		0 AS ChargenNr,
		9 As Status,
		datepart('year',b.Lieferdatum) As Jahr, 
		b.Bestellungskopf->Adresse As Lieferant,
		b.Lieferant As Adresse,
		b.Lieferdatum As Eingangsdatum,
		b.Artikel->ArtikelNr As ArtikelNr, 
		b.Herkunft, 
		b.AnzahlGebinde,
		b.Gebinde, 
		b.AnzahlJeGebinde As MengeJeGebinde,
		b.Menge AS MengeEinheit,
		b.AnzahlGebinde As Bestellt, 
		0 AS AN,
		{fn CONVERT(0, SQL_INTEGER)} As MengeEingang,
		b.AnzahlGebinde As MengeVerfuegbarGeb,
		0  AS VerkaufteGeb,
		b.Qualitaet,
		b.Abzugstyp,
		b.Herkunft,
		b.Produktionsart,
		b.Lagerort,
		0 AS AnzahlGebindeVerarbeitung,
		0 As Direktverkauf,
		0 AS Provisorisch,
		0 AS Kalibrierung
		FROM DBAgrofreshEK.Bestellungspos b
		WHERE 
		b.Bestellungskopf->Mandant = :MandantOid 
		AND b.Charge is null
		AND b.Artikel = :ArtikelOid AND
		((b.Bestellungskopf->Bestellstatus <= :BestellstatusBestellung) OR (b.Bestellungskopf->Bestellstatus is null))
		AND b.Lieferdatum BETWEEN :Von AND :Bis
		AND (:filterAbteilung = 0 OR (:filterAbteilung = 1 AND b.Bestellungskopf->Abteilung = :AbteilungOid))
		AND (:filterLagerort = 0 OR (:filterLagerort = 1 AND b.Lagerort = :LagerOid))
		AND ((:filterAbzug = 0 OR (:filterAbzug = 1 AND b.Abzugstyp = :AbzugOid)) OR
		(:filterAbzug = 1 AND NVL(:AbzugOid, '') = '' AND b.Abzugstyp is null))
		AND ((:filterQualitaet = 0 OR (:filterQualitaet = 1 AND b.Qualitaet = :QualitaetOid)) OR
		(:filterQualitaet = 1 AND NVL(:QualitaetOid, '') = '' AND b.Qualitaet is null))
		AND (:filterId = 0)

ORDER BY EingangsDatum ASC, Jahr DESC, ChargenNr DESC]]></SqlQuery>
</Query>

<Query name="ListeGesamtNachDatumGruppe">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,ProduktGrpOid:%String,Von:%Date,Bis:%Date,filterAbteilung:%Boolean,AbteilungOid:%String,filterLagerort:%Boolean,LagerOid:%String,BestellstatusBestellung:%Integer,SaldoNullAnzeigen:%Boolean,filterAbzug:%Boolean,AbzugOid:%String,filterQualitaet:%Boolean,QualitaetOid:%String,filterId:%Boolean,Id:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[SELECT 	ID, 
		PositionsNr AS ChargenNr,
		Status,
		Jahr,
		Lieferant, 
		Lieferant->Adresse->ID As Adresse,
		EingangsDatum, 
		Artikel->ArtikelNr As ArtikelNr, 
		Herkunft, 
		AnzahlGebinde,
		Gebinde, 
		MengeJeGebinde,
		MengeEingang AS MengeEinheit,
		Bestellt AS Bestellt,
		NVL((SELECT NVL(Bestellungskopf->BearbeitungsstatusAS,0) FROM DBAgrofreshEK.Bestellungspos WHERE Charge = ce.ID), 1) AS AN,
		CASE (NVL((SELECT NVL(Bestellungskopf->BearbeitungsstatusAS,0) FROM DBAgrofreshEK.Bestellungspos WHERE Charge = ce.ID), 1)) WHEN 0 THEN
		0 ELSE AnzahlGebinde END AS MengeEingang, 
		AnzahlGebindeVerfuegbar AS MengeVerfuegbarGeb,
		NVL((SELECT SUM(AnzahlGebinde) FROM DBAgrofreshEK.ChargenAusgang WHERE Charge = ce.ID AND NVL(isDirektverkauf,0) = 0),0) + (NVL(AnzahlGebDirektverkauf,0) - NVL(AnzahlGebDirektverVerfuegbar,0)) AS VerkaufteGeb,
		Qualitaet,
		Abzugstyp,
		Herkunft,
		Produktionsart,
		Lagerort,
		AnzahlGebindeVerarbeitung,
		AnzahlGebDirektverVerfuegbar AS Direktverkauf,
		Provisorisch,
		Kalibrierung
FROM DBAgrofreshEK.ChargenEingang ce
WHERE Mandant = :MandantOid AND Artikel->Produktgruppe = :ProduktGrpOid 
AND EingangsDatum BETWEEN :Von AND :Bis
AND (:SaldoNullAnzeigen = 1 OR (:SaldoNullAnzeigen = 0 AND NVL(MengeVerfuegbar,0) <> 0) OR NVL(VerarbeitungAktiv,0) = 1 OR NVL(DirektverkaufVerfuegbar,0) > 0)
AND (:filterAbteilung = 0 OR (:filterAbteilung = 1 AND Abteilung = :AbteilungOid))
AND (:filterLagerort = 0 OR (:filterLagerort = 1 AND Lagerort = :LagerOid))
AND ((:filterAbzug = 0 OR (:filterAbzug = 1 AND Abzugstyp = :AbzugOid)) OR
(:filterAbzug = 1 AND NVL(:AbzugOid, '') = '' AND Abzugstyp is null))
AND ((:filterQualitaet = 0 OR (:filterQualitaet = 1 AND Qualitaet = :QualitaetOid)) OR
(:filterQualitaet = 1 AND NVL(:QualitaetOid, '') = '' AND Qualitaet is null))
AND (:filterId = 0 OR (:filterId = 1 AND ID = :Id))
AND (NVL(RetourenPos,0) = 0 OR (:filterId = 1))
/*AND ((NVL(Provisorisch,0) = 0) OR (:filterId = 1)) */



UNION ALL

SELECT	0 AS ID,
		0 AS ChargenNr,
		9 As Status,
		datepart('year',b.Lieferdatum) As Jahr, 
		b.Bestellungskopf->Adresse As Lieferant,
		b.Lieferant As Adresse,
		b.Lieferdatum As Eingangsdatum,
		b.Artikel->ArtikelNr As ArtikelNr, 
		b.Herkunft, 
		b.AnzahlGebinde,
		b.Gebinde, 
		b.AnzahlJeGebinde As MengeJeGebinde,
		b.Menge AS MengeEinheit,
		b.AnzahlGebinde As Bestellt, 
		0 AS AN,
		{fn CONVERT(0, SQL_INTEGER)} As MengeEingang,
		b.AnzahlGebinde As MengeVerfuegbarGeb,
		0  AS VerkaufteGeb,
		b.Qualitaet,
		b.Abzugstyp,
		b.Herkunft,
		b.Produktionsart,
		b.Lagerort,
		0 AS AnzahlGebindeVerarbeitung,
		0 As Direktverkauf,
		0 AS Provisorisch,
		0 AS Kalibrierung
		FROM DBAgrofreshEK.Bestellungspos b
		WHERE 
		(SELECT Mandant FROM DBAgrofreshEK.BestellungsKopf WHERE ID = b.Bestellungskopf) = :MandantOid 
		AND b.Charge is null
		AND b.Artikel->Produktgruppe = :ProduktGrpOid AND
		((b.Bestellungskopf->Bestellstatus <= :BestellstatusBestellung) OR (b.Bestellungskopf->Bestellstatus is null))
		AND b.Lieferdatum BETWEEN :Von AND :Bis
		AND (:filterAbteilung = 0 OR (:filterAbteilung = 1 AND b.Bestellungskopf->Abteilung = :AbteilungOid))
		AND (:filterLagerort = 0 OR (:filterLagerort = 1 AND b.Lagerort = :LagerOid))
		AND ((:filterAbzug = 0 OR (:filterAbzug = 1 AND b.Abzugstyp = :AbzugOid)) OR
		(:filterAbzug = 1 AND NVL(:AbzugOid, '') = '' AND b.Abzugstyp is null))
		AND ((:filterQualitaet = 0 OR (:filterQualitaet = 1 AND b.Qualitaet = :QualitaetOid)) OR
		(:filterQualitaet = 1 AND NVL(:QualitaetOid, '') = '' AND b.Qualitaet is null))
		AND (:filterId = 0)

	ORDER BY EingangsDatum ASC, Jahr DESC, ChargenNr DESC]]></SqlQuery>
</Query>

<Query name="ListeDVKAlleArtikel">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,ArtGrp:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT Artikel->ID as ID, Artikel->ArtikelNr AS ArtikelNr,Artikel->Kurztext As Kurztext, 
	Artikel->Mengeneinheit AS Mengeneinheit, 
	DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) As Artikeltext, 
	Artikel->ArtikelNr As ArtikelNr, Count(ID) AS CountChargen
	 		FROM DBAgrofreshEK.ChargenEingang
			WHERE Mandant = :MandantOid AND DirektverkaufVerfuegbar > 0 AND Artikel->Artikelgruppe = :ArtGrp
			GROUP BY Artikel ORDER BY Artikel->ArtikelNr]]></SqlQuery>
</Query>

<Query name="ListeDVKAlleArtikelGrp">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT Artikel->Artikelgruppe->ID as ID, Artikel->Artikelgruppe->ArtikelgruppenNr AS ArtikelgruppenNr,
	DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, :MandantOid, :Lang) As Bezeichnung
	 		FROM DBAgrofreshEK.ChargenEingang
			WHERE Mandant = :MandantOid AND DirektverkaufVerfuegbar > 0
			GROUP BY Artikel->Artikelgruppe ORDER BY Artikel->Artikelgruppe->ArtikelgruppenNr]]></SqlQuery>
</Query>

<Query name="ListeDruckNachLieferant">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,AdrVon:%String,AdrBis:%String,ArtVon:%String,ArtBis:%String,VonDatum:%Date,BisDatum:%Date</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT	PositionsNr,
			Lieferant->Adresse->Adressnummer As AdressNummer,
			Lieferant->Adresse->Name As AdressName,
			Lieferant->Adresse->Plz As AdressPLZ,
			Lieferant->Adresse->Ort As AdressOrt,
			MengeEingang,
			Artikel->ArtikelNr as ArtikelNr,
			DBAgrofresh.Artikel_GetArtikeltextClass(Artikel, :MandantOid, :Lang) As Bezeichnung,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :MandantOid, :Lang) As Einheit,
			Eingangsdatum,
			MengeJeGebinde As JeGebinde,
			AnzahlGebinde,
			Gebinde->GebindeNr as GebindeNr,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) As GebindeName
			FROM DBAgrofreshEK.Chargeneingang
			WHERE Mandant = :MandantOid AND (Lieferant->Adresse->Adressnummer >= :AdrVon AND Lieferant->Adresse->Adressnummer <= :AdrBis)
				AND (Artikel->ArtikelNr >= :ArtVon AND Artikel->ArtikelNr <= :ArtBis)
				AND (Eingangsdatum >= :VonDatum AND Eingangsdatum <= :BisDatum)
			ORDER BY Lieferant->Adresse->Adressnummer]]></SqlQuery>
</Query>

<Query name="ListeDruckNachArtikel">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,AdrVon:%String,AdrBis:%String,ArtVon:%String,ArtBis:%String,VonDatum:%Date,BisDatum:%Date</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT	PositionsNr,
			Lieferant->Adresse->Adressnummer As AdressNummer,
			Lieferant->Adresse->Name As AdressName,
			Lieferant->Adresse->Plz As AdressPLZ,
			Lieferant->Adresse->Ort As AdressOrt,
			MengeEingang,
			Artikel->ArtikelNr as ArtikelNr,
			DBAgrofresh.Artikel_GetArtikeltextClass(Artikel, :MandantOid, :Lang) as Bezeichnung,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :MandantOid, :Lang) As Einheit,
			Eingangsdatum,
			MengeJeGebinde as JeGebinde,
			AnzahlGebinde,
			Gebinde->GebindeNr as GebindeNr,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) as GebindeName
			FROM DBAgrofreshEK.Chargeneingang
			WHERE Mandant = :MandantOid AND (Lieferant->Adresse->Adressnummer >= :AdrVon AND Lieferant->Adresse->Adressnummer <= :AdrBis)
				AND (Artikel->ArtikelNr >= :ArtVon AND Artikel->ArtikelNr <= :ArtBis)
				AND (Eingangsdatum >= :VonDatum AND Eingangsdatum <= :BisDatum)
			ORDER BY Artikel->ArtikelNr]]></SqlQuery>
</Query>

<Query name="ListeDruckNachCharge">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,AdrVon:%String,AdrBis:%String,ArtVon:%String,ArtBis:%String,VonDatum:%Date,BisDatum:%Date</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT	PositionsNr,
			Lieferant->Adresse->Adressnummer As AdressNummer,
			Lieferant->Adresse->Name As AdressName,
			Lieferant->Adresse->Plz As AdressPLZ,
			Lieferant->Adresse->Ort As AdressOrt,
			MengeEingang,
			Artikel->ArtikelNr as ArtikelNr,
			DBAgrofresh.Artikel_GetArtikeltextClass(Artikel, :MandantOid, :Lang) As Bezeichnung,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :MandantOid, :Lang) As Einheit,
			Eingangsdatum,
			MengeJeGebinde As JeGebinde,
			AnzahlGebinde,
			Gebinde->GebindeNr as GebindeNr,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) As GebindeName
			FROM DBAgrofreshEK.Chargeneingang
			WHERE Mandant = :MandantOid AND (Lieferant->Adresse->Adressnummer >= :AdrVon AND Lieferant->Adresse->Adressnummer <= :AdrBis)
				AND (Artikel->ArtikelNr >= :ArtVon AND Artikel->ArtikelNr <= :ArtBis)
				AND (Eingangsdatum >= {d :VonDatum} AND Eingangsdatum <= {d :BisDatum})
			ORDER BY PositionsNr]]></SqlQuery>
</Query>

<Query name="ListeByArtikelNachDatum">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelOid:%String,vonDatum:%Date,bisDatum:%Date,MandOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[SELECT 	ID, 
		PositionsNr AS ChargenNr,
		Status,
		Belegnummer,
		Belegtext,
		Artikel->ArtikelNr as ArtikelNr,
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel, :MandOid, :Lang) AS ArtikelText,
		Lieferant->Adresse As Lieferant, 
		EingangsDatum, 
		ZeitEingang,
		Herkunft, 
		AnzahlGebinde,
		Gebinde, 
		Gebinde->GebindeNr as GebindeNr,
		DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandOid, :Lang) As GebindeName,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :MandOid, :Lang) As Einheit,
		MengeJeGebinde,
		MengeEingang, 
		Preis,
		Betrag
FROM DBAgrofreshEK.ChargenEingang
WHERE Artikel = :ArtikelOid AND EingangsDatum between {d :vonDatum} AND {d :bisDatum}
ORDER BY EingangsDatum DESC, ZeitEingang DESC]]></SqlQuery>
</Query>

<Query name="ListeByLieferantNachDatum">
<Type>%SQLQuery</Type>
<FormalSpec>AdrOid:%String,vonDatum:%Date,bisDatum:%Date,MandOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[SELECT 	ID, 
		PositionsNr AS ChargenNr,
		Status,
		Belegnummer,
		Belegtext,
		Artikel->ArtikelNr as ArtikelNr,
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel, :MandOid, :Lang) AS ArtikelText,
		Lieferant->Adresse As Lieferant, 
		EingangsDatum, 
		ZeitEingang,
		Herkunft, 
		AnzahlGebinde,
		Gebinde, 
		Gebinde->GebindeNr as GebindeNr,
		DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandOid, :Lang) As GebindeName,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :MandOid, :Lang) As Einheit,
		MengeJeGebinde,
		MengeEingang, 
		Preis,
		Betrag
FROM DBAgrofreshEK.ChargenEingang
WHERE Lieferant->Adresse = :AdrOid AND EingangsDatum between {d :vonDatum} AND {d :bisDatum}
ORDER BY EingangsDatum DESC, ZeitEingang DESC]]></SqlQuery>
</Query>

<Query name="ListeJournalNachDatum">
<Type>%SQLQuery</Type>
<FormalSpec>Anzahl:%Integer,vonDatum:%Date,bisDatum:%Date,MandOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[SELECT 	TOP :Anzahl
		ID, 
		PositionsNr AS ChargenNr,
		Status,
		Belegnummer,
		Belegtext,
		Artikel->ArtikelNr as ArtikelNr,
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel, :MandOid, :Lang) AS ArtikelText,
		Lieferant->Adresse As Lieferant, 
		EingangsDatum, 
		ZeitEingang,
		Herkunft, 
		AnzahlGebinde,
		Gebinde, 
		Gebinde->GebindeNr as GebindeNr,
		DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandOid, :Lang) As GebindeName,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :MandOid, :Lang) As Einheit,
		MengeJeGebinde,
		MengeEingang, 
		Preis,
		Betrag
FROM DBAgrofreshEK.ChargenEingang
WHERE EingangsDatum between {d :vonDatum} AND {d :bisDatum}
ORDER BY EingangsDatum DESC, ZeitEingang DESC]]></SqlQuery>
</Query>

<Query name="ListeForProtokolPrint">
<Type>%SQLQuery</Type>
<FormalSpec>JournalNr:%Integer,MandOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[SELECT	ID, 
		PositionsNr AS ChargenNr,
		Status,
		Belegnummer,
		Belegtext,
		Artikel->ArtikelNr as ArtikelNr,
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel, :MandOid, :Lang) AS ArtikelText,
		Lieferant->Adresse As Lieferant, 
		DBAdressen.Adresse_GetName(Lieferant->Adresse->Adresscode, Lieferant->Adresse->Name, Lieferant->Adresse->VornameZusatz1, 1) AS "Lieferant.Name", 
		Lieferant->Adresse->Plz AS "Lieferant.Plz", 
		Lieferant->Adresse->Ort AS "Lieferant.Ort", 
		EingangsDatum, 
		ZeitEingang,
		Herkunft, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Herkunft, :MandOid, :Lang) As HerkunftText,
		AnzahlGebinde,
		Gebinde, 
		Gebinde->GebindeNr as GebindeNr,
		DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandOid, :Lang) As GebindeName,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :MandOid, :Lang) As Einheit,
		MengeJeGebinde,
		MengeEingang, 
		Preis,
		Betrag
FROM DBAgrofreshEK.ChargenEingang
WHERE JournalNr = :JournalNr AND Mandant = :MandOid
ORDER BY Lieferant->Adresse->Adressnummer, Belegnummer, EingangsDatum DESC, ZeitEingang DESC]]></SqlQuery>
</Query>

<Query name="ListeForAuftragspos">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelOid:%String,filterAbzug:%Boolean,AbzugOid:%String,filterQualitaet:%Boolean,QualitaetOid:%String,filterGebinde:%Boolean,GebindeOid:%String,filterProduktionsart:%Boolean,ProduktionsartOid:%String,filterBio:%Boolean,Bio:%Integer,filterAnzJeGeb:%Boolean,anzJeGeb:%Decimal,Lang:%String,BisDatum:%Date,showGeschlossene:%Boolean=0</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	ID, 
			PositionsNr AS ChargenNr,
			Status,
			Jahr,
			Lieferant, 
			Lieferant->Adresse->ID As Adresse,
			EingangsDatum,
			Artikel->ArtikelNr As ArtikelNr, 
			Herkunft, 
			AnzahlGebinde,
			Gebinde, 
			MengeJeGebinde,
			MengeEingang AS MengeEinheit,
			MengeBestellt AS Bestellt,
			MengeEingang AS MengeEingang, 
			MengeVerfuegbar AS MengeVerfuegbar,
			AnzahlGebindeVerfuegbar AS AnzahlGebindeVerfuegbar,
			Preis,
			Betrag,
			Qualitaet,
			Abzugstyp,
			Herkunft,
			Produktionsart,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit  ,Artikel->Mandant, :Lang) As Einheit
	FROM DBAgrofreshEK.ChargenEingang ce
	WHERE Artikel = :ArtikelOid
	AND (:showGeschlossene = 1 OR MengeVerfuegbar <> 0)
	AND (:filterAbzug = 0 OR (:filterAbzug = 1 AND (Abzugstyp = :AbzugOid OR (NVL(:AbzugOid, '') = '' AND Abzugstyp is NULL))))
	AND (:filterQualitaet = 0 OR (:filterQualitaet = 1 AND Qualitaet = :QualitaetOid))
	AND (:filterProduktionsart = 0 OR (:filterProduktionsart = 1 AND Produktionsart = :ProduktionsartOid))
	AND (:filterBio = 0 OR (:filterBio = 1 AND NVL(Produktionsart->Bio,0) = :Bio))
	AND (:filterGebinde = 0 OR (:filterGebinde = 1 AND Gebinde = :GebindeOid))
	AND (:filterAnzJeGeb = 0 OR (:filterAnzJeGeb = 1 AND MengeJeGebinde = :anzJeGeb))
	AND (EingangsDatum <= {d :BisDatum})
	AND NVL(RetourenPos,0) = 0]]></SqlQuery>
</Query>

<Query name="ListeNachArtikelLager">
<Type>%SQLQuery</Type>
<FormalSpec>VonArtikelNr:%String,BisArtikelNr:%String,FilterLager:%Boolean,Lagerort:%String,Per:%Date,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT e.ID, 
			e.PositionsNr AS ChargenNr,
			e.Status,
			e.Lieferant->Adresse->Name || ', ' ||  e.Lieferant->Adresse->Plz || ' ' ||  e.Lieferant->Adresse->Ort As LieferantKunde, 
			e.EingangsDatum, 
			e.Artikel, 
			e.MengeEingang, 
			e.MengeVerfuegbar,
			e.AnzahlGebindeVerfuegbar,
			e.Preis,
			e.Betrag,
			(SELECT SUM(MengeAusgang) from DBAgrofreshek.chargenausgang where charge = e.ID) as MengeAusgaenge,
			e.LagerEffektiv,
			e.LagerAufnahme,
			e.MengeJeGebinde,
			e.Artikel->ArtikelNr AS ArtikelNr,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(e.Qualitaet, :MandantOid, :Lang) As QualitaetText,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(e.Gebinde, :MandantOid, :Lang) As GebindeText,
			DBAgrofresh.Artikel_GetArtikeltextClass(e.Artikel, :MandantOid, :Lang) AS ArtikelName,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(e.Abzugstyp, :MandantOid, :Lang) AS Abzug,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(e.Artikel->Mengeneinheit, :MandantOid, :Lang) As Einheit
			
	FROM 	DBAgrofreshEK.ChargenEingang As e 
	WHERE 	e.Artikel->ArtikelNr BETWEEN :VonArtikelNr AND :BisArtikelNr
			AND EingangsDatum <= :Per AND e.MengeVerfuegbar <> 0
			AND (
				(LagerAufnahme is not NULL AND LagerAufnahme->LagerPer >= :Per)
				OR ((LagerAufnahme is NULL OR (Lageraufnahme is not NULL AND Lageraufnahme->LagerPer < :Per AND MengeVerfuegbar <> 0)))
			)
			AND NVL(RetourenPos,0) = 0
			AND e.Mandant = :MandantOid
			AND (:FilterLager = 0 OR e.Lagerort = :Lagerort)
			AND (NVL((SELECT NVL(Bestellungskopf->BearbeitungsstatusAS,0) FROM DBAgrofreshEK.Bestellungspos WHERE Charge = e.ID), 1)) > 0
		Order by e.Artikel->ArtikelGruppe->ArtikelgruppenNr, ArtikelName]]></SqlQuery>
</Query>

<Query name="ListeNachArtikelLagerDirektVer">
<Type>%SQLQuery</Type>
<FormalSpec>VonArtikelNr:%String,BisArtikelNr:%String,FilterLager:%Boolean,Lagerort:%String,Per:%Date,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT e.ID, 
			e.PositionsNr AS ChargenNr,
			e.Status,
			e.Lieferant->Adresse->Name || ', ' ||  e.Lieferant->Adresse->Plz || ' ' ||  e.Lieferant->Adresse->Ort As LieferantKunde, 
			e.EingangsDatum, 
			e.Artikel, 
			e.MengeEingang, 
			e.DirektverkaufVerfuegbar AS MengeVerfuegbar,
			e.AnzahlGebDirektverVerfuegbar AS AnzahlGebindeVerfuegbar,
			e.Preis,
			e.Betrag,
			e.LagerEffektiv,
			e.LagerAufnahme,
			e.MengeJeGebinde,
			e.Artikel->ArtikelNr AS ArtikelNr,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(e.Qualitaet, :MandantOid, :Lang) As QualitaetText,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(e.Gebinde, :MandantOid, :Lang) As GebindeText,
			DBAgrofresh.Artikel_GetArtikeltextClass(e.Artikel, :MandantOid, :Lang) AS ArtikelName,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(e.Abzugstyp, :MandantOid, :Lang) AS Abzug,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :MandantOid, :Lang) As Einheit

	FROM 	DBAgrofreshEK.ChargenEingang As e 
	WHERE 	e.Artikel->ArtikelNr BETWEEN :VonArtikelNr AND :BisArtikelNr
			AND EingangsDatum <= :Per AND e.DirektverkaufVerfuegbar <> 0
			AND NVL(RetourenPos,0) = 0
			AND e.Mandant = :MandantOid
			AND (:FilterLager = 0 OR e.Lagerort = :Lagerort)
		Order by e.Artikel->ArtikelGruppe->ArtikelgruppenNr, ArtikelName]]></SqlQuery>
</Query>

<Query name="ListeChargenHistory">
<Type>%SQLQuery</Type>
<FormalSpec>filterArtikel:%Boolean,VonArtikelNr:%String,BisArtikelNr:%String,filterDatum:%Boolean,VonDatum:%Date,BisDatum:%Date,filterCharge:%Boolean,VonCharge:%Integer,BisCharge:%Integer,filterLager:%Boolean,LagerOid:%String,filterNurOffene:%Boolean,filterNurOffeneDirektverkauf:%Boolean,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	+ID AS ID,
			PositionsNr AS ChargenNr,
	 		OriginalCharge->PositionsNr AS OriginalChargenNr,
			Status,
			Jahr,
			Lieferant, 
			Lieferant->Adresse->ID As Adresse,
			Lieferant->Adresse->Name, 
			Lieferant->Adresse->Strasse,
			Lieferant->Adresse->Plz, 
			Lieferant->Adresse->Ort,
			EingangsDatum,
			Artikel->ArtikelNr As ArtikelNr, 
			DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) As Artikeltext, 
			AnzahlGebinde,
			Gebinde->GebindeNr AS GebindeNr,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) As GebindeText,
			MengeJeGebinde,
			MengeEingang AS MengeEinheit,
			MengeBestellt AS Bestellt,
			MengeEingang AS MengeEingang, 
			Case MengeJeGebinde WHEN 0 THEN MengeVerfuegbar + MengeVerarbeitungVerfuegbar ELSE CEILING(MengeVerfuegbar+MengeVerarbeitungVerfuegbar / MengeJeGebinde) END AS GebindeVerfuegbar,
			MengeVerfuegbar AS MengeVerfuegbar,
			VerlustMengeGesamt AS Verlust,
			DirektverkaufVerfuegbar  AS Direktverkauf,
			Preis,
			Betrag,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Qualitaet, :MandantOid, :Lang) As QualitaetText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Abzugstyp, :MandantOid, :Lang) As AbzugText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Herkunft, :MandantOid, :Lang) As HerkunftText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Produktionsart, :MandantOid, :Lang) As ProduktionsartText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit  ,Artikel->Mandant, :Lang) As Einheit
	FROM DBAgrofreshEK.ChargenEingang ce
	WHERE (:filterArtikel = 0 OR(:filterArtikel = 1 AND Artikel->ArtikelNr BETWEEN :VonArtikelNr AND :BisArtikelNr))
	AND (:filterDatum = 0 OR(:filterDatum = 1 AND EingangsDatum BETWEEN {d :VonDatum} AND {d :BisDatum}))
	AND (:filterCharge = 0 OR(:filterCharge = 1 AND PositionsNr BETWEEN {d :VonCharge} AND {d :BisCharge}))
	AND (:filterLager = 0 OR (:filterLager = 1 AND Lagerort = :LagerOid))
	AND (:filterNurOffene = 0 OR (:filterNurOffene = 1 AND MengeVerfuegbar > 0))
	AND (:filterNurOffeneDirektverkauf = 0 OR (:filterNurOffeneDirektverkauf = 1 AND DirektverkaufVerfuegbar > 0))
	AND Mandant = :MandantOid
	ORDER BY Artikel->ArtikelNr]]></SqlQuery>
</Query>

<Query name="ListeChargenHistoryPos">
<Type>%SQLQuery</Type>
<FormalSpec>filterArtikel:%Boolean,VonArtikelNr:%String,BisArtikelNr:%String,filterDatum:%Boolean,VonDatum:%Date,BisDatum:%Date,filterCharge:%Boolean,VonCharge:%Integer,BisCharge:%Integer,JahrCharge:%Integer,filterLager:%Boolean,LagerOid:%String,filterNurOffene:%Boolean,filterNurOffeneDirektverkauf:%Boolean,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	/* Ursprungscharge */
	SELECT 	ID AS ID,
			Artikel->ArtikelNr As ArtikelNr, 
			DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) As Artikeltext, 
			AnzahlGebinde,
			Gebinde->GebindeNr AS GebindeNr,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) As GebindeText,
			MengeJeGebinde,
			MengeEingangKg AS Menge,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :MandantOid, :Lang) As MengeneinheitText,
			Abzugstyp,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Abzugstyp, :MandantOid, :Lang) As AbzugText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Qualitaet, :MandantOid, :Lang) As QualitaetText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Produktionsart, :MandantOid, :Lang) As ProdartText,
			+OriginalCharge AS OriginalCharge,
			PositionsNr AS Text,
			Aufgeteilt,
			EingangsDatum AS Datum,
			0 AS Typ
	FROM DBAgrofreshEK.ChargenEingang WHERE ID in 
		(SELECT OriginalCharge FROM DBAgrofreshEK.ChargenEingang ce
			WHERE (:filterArtikel = 0 OR(:filterArtikel = 1 AND Artikel->ArtikelNr BETWEEN :VonArtikelNr AND :BisArtikelNr))
			AND (:filterDatum = 0 OR(:filterDatum = 1 AND EingangsDatum BETWEEN {d :VonDatum} AND {d :BisDatum}))
			AND (:filterCharge = 0 OR(:filterCharge = 1 AND PositionsNr BETWEEN {d :VonCharge} AND {d :BisCharge} AND ((:Jahr = 0) OR (Jahr = :JahrCharge))))
			AND (:filterLager = 0 OR (:filterLager = 1 AND Lagerort = :LagerOid))
			AND (:filterNurOffene = 0 OR (:filterNurOffene = 1 AND MengeVerfuegbar > 0))
			AND (:filterNurOffeneDirektverkauf = 0 OR (:filterNurOffeneDirektverkauf = 1 AND DirektverkaufVerfuegbar > 0))
			AND Mandant = :MandantOid)
		
		UNION ALL
		
	/* Verarbeitungen */
	SELECT 	ID AS ID,
			Artikel->ArtikelNr As ArtikelNr, 
			DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) As Artikeltext, 
			AnzahlGebinde,
			Gebinde->GebindeNr AS GebindeNr,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) As GebindeText,
			MengeJeGebinde,
			MengeEingangKg AS Menge,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :MandantOid, :Lang) As MengeneinheitText,
			Abzugstyp,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Abzugstyp, :MandantOid, :Lang) As AbzugText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Qualitaet, :MandantOid, :Lang) As QualitaetText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Produktionsart, :MandantOid, :Lang) As ProdartText,
			+OriginalCharge AS OriginalCharge,
			PositionsNr AS Text,
			NVL(Aufgeteilt,0),
			EingangsDatum AS Datum,
			1 AS Typ
	FROM DBAgrofreshEK.ChargenEingang WHERE OriginalCharge in 
		(SELECT ID FROM DBAgrofreshEK.ChargenEingang ce
			WHERE (:filterArtikel = 0 OR(:filterArtikel = 1 AND Artikel->ArtikelNr BETWEEN :VonArtikelNr AND :BisArtikelNr))
			AND (:filterDatum = 0 OR(:filterDatum = 1 AND EingangsDatum BETWEEN {d :VonDatum} AND {d :BisDatum}))
			AND (:filterCharge = 0 OR(:filterCharge = 1 AND PositionsNr BETWEEN {d :VonCharge} AND {d :BisCharge} AND ((:Jahr = 0) OR (Jahr = :JahrCharge))))
			AND (:filterLager = 0 OR (:filterLager = 1 AND Lagerort = :LagerOid))
			AND (:filterNurOffene = 0 OR (:filterNurOffene = 1 AND MengeVerfuegbar > 0))
			AND (:filterNurOffeneDirektverkauf = 0 OR (:filterNurOffeneDirektverkauf = 1 AND DirektverkaufVerfuegbar > 0))
			AND Mandant = :MandantOid)
		
		UNION ALL
		
	/* Verkäufe */
	SELECT 	'' AS ID,
			Charge->Artikel->ArtikelNr As ArtikelNr, 
			DBAgrofresh.Artikel_GetArtikeltextClass(Charge->Artikel, :MandantOid, :Lang) As Artikeltext, 
			Charge->AnzahlGebinde,
			Charge->Gebinde->GebindeNr AS GebindeNr,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Charge->Gebinde, :MandantOid, :Lang) As GebindeText,
			Charge->MengeJeGebinde,
			Charge->MengeAusgang AS Menge,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :MandantOid, :Lang) As MengeneinheitText,
			Charge->Abzugstyp,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Charge->Abzugstyp, :MandantOid, :Lang) As AbzugText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Qualitaet, :MandantOid, :Lang) As QualitaetText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Produktionsart, :MandantOid, :Lang) As ProdartText,
			+Charge->Charge AS OriginalCharge,
			Auftragskopf->AuftragsNr AS Text,
			0 AS Aufgeteilt,
			Lieferdatum AS Datum,
			2 AS Typ
	FROM DBAgrofresh.Auftragspos WHERE Charge->Charge in 
		(SELECT ID FROM DBAgrofreshEK.ChargenEingang ce
			WHERE (:filterArtikel = 0 OR(:filterArtikel = 1 AND Artikel->ArtikelNr BETWEEN :VonArtikelNr AND :BisArtikelNr))
			AND (:filterDatum = 0 OR(:filterDatum = 1 AND EingangsDatum BETWEEN {d :VonDatum} AND {d :BisDatum}))
			AND (:filterCharge = 0 OR(:filterCharge = 1 AND PositionsNr BETWEEN {d :VonCharge} AND {d :BisCharge} AND ((:Jahr = 0) OR (Jahr = :JahrCharge))))
			AND (:filterLager = 0 OR (:filterLager = 1 AND Lagerort = :LagerOid))
			AND (:filterNurOffene = 0 OR (:filterNurOffene = 1 AND MengeVerfuegbar > 0))
			AND (:filterNurOffeneDirektverkauf = 0 OR (:filterNurOffeneDirektverkauf = 1 AND DirektverkaufVerfuegbar > 0))
			AND Mandant = :MandantOid)
		
		UNION ALL
		
	/* Prov Verarbeitungen */
	SELECT 	'' AS ID,
			Artikel->ArtikelNr As ArtikelNr, 
			DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) As Artikeltext, 
			AnzahlGebinde,
			Gebinde->GebindeNr AS GebindeNr,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) As GebindeText,
			MengeJeGebinde,
			MengeEingangKg AS Menge,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :MandantOid, :Lang) As MengeneinheitText,
			Abzugstyp,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Abzugstyp, :MandantOid, :Lang) As AbzugText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Qualitaet, :MandantOid, :Lang) As QualitaetText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Produktionsart, :MandantOid, :Lang) As ProdartText,
			+VerarbAuftrag->Charge AS OriginalCharge,
			VerarbAuftrag->AuftragsNr AS Text,
			0 AS Aufgeteilt,
			VerarbAuftrag->Lieferdatum AS Datum,
			3 AS Typ
	FROM DBAgrofreshEK.VerarbProv WHERE VerarbAuftrag->Charge in 
		(SELECT ID FROM DBAgrofreshEK.ChargenEingang ce
			WHERE (:filterArtikel = 0 OR(:filterArtikel = 1 AND Artikel->ArtikelNr BETWEEN :VonArtikelNr AND :BisArtikelNr))
			AND (:filterDatum = 0 OR(:filterDatum = 1 AND EingangsDatum BETWEEN {d :VonDatum} AND {d :BisDatum}))
			AND (:filterCharge = 0 OR(:filterCharge = 1 AND PositionsNr BETWEEN {d :VonCharge} AND {d :BisCharge} AND ((:Jahr = 0) OR (Jahr = :JahrCharge))))
			AND (:filterLager = 0 OR (:filterLager = 1 AND Lagerort = :LagerOid))
			AND (:filterNurOffene = 0 OR (:filterNurOffene = 1 AND MengeVerfuegbar > 0))
			AND (:filterNurOffeneDirektverkauf = 0 OR (:filterNurOffeneDirektverkauf = 1 AND DirektverkaufVerfuegbar > 0))
			AND Mandant = :MandantOid)
		
		UNION ALL
			
	/* Mischposten hinzugefügt zu */
	SELECT 	ID AS ID,
			Artikel->ArtikelNr As ArtikelNr, 
			DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) As Artikeltext, 
			AnzahlGebinde,
			Gebinde->GebindeNr AS GebindeNr,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) As GebindeText,
			MengeJeGebinde,
			MengeEingangKg AS Menge,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :MandantOid, :Lang) As MengeneinheitText,
			Abzugstyp,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Abzugstyp, :MandantOid, :Lang) As AbzugText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Qualitaet, :MandantOid, :Lang) As QualitaetText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Produktionsart, :MandantOid, :Lang) As ProdartText,
			+OriginalCharge AS OriginalCharge,
			PositionsNr AS Text,
			Aufgeteilt,
			EingangsDatum AS Datum,
			4 AS Typ
	FROM DBAgrofreshEK.ChargenEingang WHERE ID in 
		(SELECT Mischposten FROM DBAgrofreshEK.ChargenEingang ce
			WHERE (:filterArtikel = 0 OR(:filterArtikel = 1 AND Artikel->ArtikelNr BETWEEN :VonArtikelNr AND :BisArtikelNr))
			AND (:filterDatum = 0 OR(:filterDatum = 1 AND EingangsDatum BETWEEN {d :VonDatum} AND {d :BisDatum}))
			AND (:filterCharge = 0 OR(:filterCharge = 1 AND PositionsNr BETWEEN {d :VonCharge} AND {d :BisCharge} AND ((:Jahr = 0) OR (Jahr = :JahrCharge))))
			AND (:filterLager = 0 OR (:filterLager = 1 AND Lagerort = :LagerOid))
			AND (:filterNurOffene = 0 OR (:filterNurOffene = 1 AND MengeVerfuegbar > 0))
			AND (:filterNurOffeneDirektverkauf = 0 OR (:filterNurOffeneDirektverkauf = 1 AND DirektverkaufVerfuegbar > 0))
			AND Mandant = :MandantOid)
		
		UNION ALL
	/* Mischposten (entstanden Aus)*/
	SELECT 	ID AS ID,
			Artikel->ArtikelNr As ArtikelNr, 
			DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang) As Artikeltext, 
			AnzahlGebinde,
			Gebinde->GebindeNr AS GebindeNr,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) As GebindeText,
			MengeJeGebinde,
			MengeEingangKg AS Menge,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :MandantOid, :Lang) As MengeneinheitText,
			Abzugstyp,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Abzugstyp, :MandantOid, :Lang) As AbzugText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Qualitaet, :MandantOid, :Lang) As QualitaetText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Produktionsart, :MandantOid, :Lang) As ProdartText,
			+Mischposten AS OriginalCharge,
			PositionsNr AS Text,
			NVL(Aufgeteilt,0),
			EingangsDatum AS Datum,
			0 AS Typ
	FROM DBAgrofreshEK.ChargenEingang WHERE Mischposten in 
		(SELECT ID FROM DBAgrofreshEK.ChargenEingang ce
			WHERE (:filterArtikel = 0 OR(:filterArtikel = 1 AND Artikel->ArtikelNr BETWEEN :VonArtikelNr AND :BisArtikelNr))
			AND (:filterDatum = 0 OR(:filterDatum = 1 AND EingangsDatum BETWEEN {d :VonDatum} AND {d :BisDatum}))
			AND (:filterCharge = 0 OR(:filterCharge = 1 AND PositionsNr BETWEEN {d :VonCharge} AND {d :BisCharge} AND ((:Jahr = 0) OR (Jahr = :JahrCharge))))
			AND (:filterLager = 0 OR (:filterLager = 1 AND Lagerort = :LagerOid))
			AND (:filterNurOffene = 0 OR (:filterNurOffene = 1 AND MengeVerfuegbar > 0))
			AND (:filterNurOffeneDirektverkauf = 0 OR (:filterNurOffeneDirektverkauf = 1 AND DirektverkaufVerfuegbar > 0))
			AND Mandant = :MandantOid)]]></SqlQuery>
</Query>

<Query name="ListeAktiveVerarbeitungen">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID FROM DBAgrofreshEK.ChargenEingang WHERE 
	NVL(VerarbeitungAktiv,0) = 1 OR MengeVerarbeitungVerfuegbar <> 0]]></SqlQuery>
</Query>

<Query name="ListeOffeneVerarbeitungen">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT ID,PositionsNr,
	Artikel, Artikel->ArtikelNr AS ArtikelNr, DBAgrofresh.Artikel_GetArtikeltextClass(Artikel, Artikel->Mandant, :Lang) AS ArtikelName,
	DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) As Mengeneinheit,
	MengeVerarbeitung, MengeVerarbeitungVerfuegbar,
	(SELECT SUM(VerlustMenge) FROM DBAgrofreshEK.VerarbAuftrag WHERE Charge = ce.ID) AS Verlust
	FROM DBAgrofreshEK.ChargenEingang ce WHERE 
	NVL(VerarbeitungAktiv,0) = 1 OR MengeVerarbeitungVerfuegbar <> 0
	ORDER BY DBAgrofresh.Artikel_GetArtikeltextClass(Artikel, Artikel->Mandant, :Lang)]]></SqlQuery>
</Query>

<Query name="ListeVerlustpositionen">
<Type>%SQLQuery</Type>
<FormalSpec>VonArtikelNr:%String,BisArtikelNr:%String,VonDatum:%Date,BisDatum:%Date,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT e.ID, 
			e.PositionsNr AS ChargenNr,
			e.Status,
			e.Lieferant->Adresse->Name || ', ' ||  e.Lieferant->Adresse->Plz || ' ' ||  e.Lieferant->Adresse->Ort As LieferantKunde, 
			e.EingangsDatum, 
			e.Artikel, 
			e.MengeEingang, 
			e.VerlustMengeGesamt AS Verlust,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, e.Artikel->Mandant, :Lang) As Mengeneinheit,
			e.Artikel->ArtikelNr AS ArtikelNr,
			DBAgrofresh.Artikel_GetArtikeltextClass(e.Artikel, e.Artikel->Mandant, :Lang) AS ArtikelName
	FROM 	DBAgrofreshEK.ChargenEingang As e 
	WHERE 	e.Artikel->ArtikelNr BETWEEN :VonArtikelNr AND :BisArtikelNr
			AND EingangsDatum Between :VonDatum AND :BisDatum
			AND NVL(RetourenPos,0) = 0
		Order by e.Artikel->ArtikelGruppe->ArtikelgruppenNr, ArtikelName, EingangsDatum]]></SqlQuery>
</Query>

<Query name="ListeNachArtikelLagerPerDatum">
<Type>%SQLQuery</Type>
<FormalSpec>VonArtikelNr:%String,BisArtikelNr:%String,FilterLager:%Boolean,Lagerort:%String,Per:%Date,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT e.ID, 
			e.PositionsNr AS ChargenNr,
			e.Status,
			e.Lieferant->Adresse->Name || ', ' ||  e.Lieferant->Adresse->Plz || ' ' ||  e.Lieferant->Adresse->Ort As LieferantKunde, 
			e.EingangsDatum, 
			e.Artikel, 
			e.MengeEingang, 
			DBAgrofreshEK.ChargenEingang_GetMengeVerfuegbarPerDatumClass(e.ID, {d :Per}) AS MengeVerfuegbar,
			DBAgrofreshEK.ChargenEingang_GetAnzGebVerfPerDatumClass(e.ID, {d :Per}) AS AnzahlGebindeVerfuegbar,
			e.Preis,
			e.Betrag,
			(SELECT SUM(MengeAusgang) from DBAgrofreshek.chargenausgang where charge = e.ID AND Ausgangsdatum <= {d :Per}) as MengeAusgaenge,
			e.LagerEffektiv,
			e.LagerAufnahme,
			e.MengeJeGebinde,
			e.Artikel->ArtikelNr AS ArtikelNr,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(e.Qualitaet, :MandantOid, :Lang) As QualitaetText,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(e.Gebinde, :MandantOid, :Lang) As GebindeText,
			DBAgrofresh.Artikel_GetArtikeltextClass(e.Artikel, :MandantOid, :Lang) AS ArtikelName,
			DBAgrofresh.Artikel_GetArtikeltextClass(e.Abzugstyp, :MandantOid, :Lang) AS Abzug,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(e.Artikel->Mengeneinheit, :MandantOid, :Lang) As Einheit
			
	FROM 	DBAgrofreshEK.ChargenEingang As e 
	WHERE 	e.Artikel->ArtikelNr BETWEEN :VonArtikelNr AND :BisArtikelNr
			AND EingangsDatum <= :Per AND e.MengeVerfuegbar <> 0
			AND (
				(LagerAufnahme is not NULL AND LagerAufnahme->LagerPer >= :Per)
				OR ((LagerAufnahme is NULL OR (Lageraufnahme is not NULL AND Lageraufnahme->LagerPer < :Per AND MengeVerfuegbar <> 0)))
			)
			AND NVL(RetourenPos,0) = 0
			AND e.Mandant = :MandantOid
			AND (:FilterLager = 0 OR e.Lagerort = :Lagerort)
			AND (NVL((SELECT NVL(Bestellungskopf->BearbeitungsstatusAS,0) FROM DBAgrofreshEK.Bestellungspos WHERE Charge = e.ID), 1)) > 0
		Order by e.Artikel->ArtikelGruppe->ArtikelgruppenNr, ArtikelName]]></SqlQuery>
</Query>

<Query name="ListeMischpostenVorschlag">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelOid:%String,AbzugOid:%String,QualitaetOid:%String,GebindeOid:%String,ProdArtOid:%String,HerkunftOid:%String,LagerOid:%String,anzJeGeb:%Decimal,showGeschlossene:%Boolean=0</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT 	%ID, 
			PositionsNr AS ChargenNr
	FROM DBAgrofreshEK.ChargenEingang ce
	WHERE Artikel = :ArtikelOid
	AND (Abzugstyp = :AbzugOid OR (NVL(:AbzugOid, '') = '' AND Abzugstyp is NULL))
	AND (Qualitaet = :QualitaetOid OR (NVL(:QualitaetOid, '') = '' AND Qualitaet is NULL))
	AND (Gebinde = :GebindeOid OR (NVL(:GebindeOid, '') = '' AND Gebinde is NULL))
	AND (Produktionsart = :ProdArtOid OR (NVL(:ProdArtOid, '') = '' AND Produktionsart is NULL))
	AND (Lagerort = :LagerOid OR (NVL(:LagerOid, '') = '' AND Lagerort is NULL))
	AND (Herkunft = :HerkunftOid OR (NVL(:HerkunftOid, '') = '' AND Herkunft is NULL))
	AND MengeJeGebinde = :anzJeGeb
	AND NVL(RetourenPos,0) = 0 AND NVL(IsMischposten,0) = 1
	Order by PositionsNr DESC</SqlQuery>
</Query>

<Query name="ListeMischposten">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT 	%ID, 
			PositionsNr AS ChargenNr
	FROM DBAgrofreshEK.ChargenEingang ce
	WHERE Mandant = :MandantOid AND NVL(RetourenPos,0) = 0 AND NVL(IsMischposten,0) = 1
	Order by PositionsNr DESC</SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.GebDetailAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61333,66378.708617</TimeCreated>

<Query name="ListeByBestellung">
<Type>%SQLQuery</Type>
<FormalSpec>Bestellung:%String,MandantOid:%String,Lang:%String,FibuMandOid:%String,AdressId:%String,WithPrposed:%Boolean=0,Datum:%Date=0</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, 
		GebKontr->Gebinde->GebindeNr AS GebindeNr, 
		DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) AS Bezeichnung, 
		GebKontr->Gebinde GebindeOid,
		Verrechnet, 
		AnlieferungMenge, 
		AuslieferungMenge, 
		GebindePreis, 
		NVL(GebindeMiete,0) As GebindeMiete, 
		NVL(GebindeAdminKosten,0) As GebindeAdminKosten, 
		({fn CONVERT(DBAgrofreshEK.GebDetail_GebindePreisTotalClass(ID), SQL_DOUBLE)}) AS GebindePreisTotal, 
		GebindePreisFW, 
		{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragExklMwstClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragExklMwst,
		{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragInklMwstClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragInklMwst,
		{fn CONVERT(DBUtils.NumberUtils_RoundWithEinst(1,DBAgrofreshEK.GebDetail_GebindeSaldoBetExklMwstFWClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragExklMwstFW,
		{fn CONVERT(DBUtils.NumberUtils_RoundWithEinst(1,DBAgrofreshEK.GebDetail_GebindeSaldoBetInklMwstFWClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragInklMwstFW,
		{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragMwstClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragMwst,
		GebindeSaldoMenge, 
		Datum, 
		GebindeSaldoVortrag, 
		AdminKostenJeLadung
	    FROM DBAgrofreshEK.GebDetail WHERE Bestellung = :Bestellung
	
	UNION SELECT "" AS ID, 
		GebindeNr, 
		DBAgrofresh_SD.Gebinde_GetBezeichnungClass(%ID, :MandantOid, :Lang) AS Bezeichnung, 
		%ID AS GebindeOid,
		0 AS Verrechnet, 
		0 AS AnlieferungMenge, 
		0 AS AuslieferungMenge, 
		0 As GebindePreis, 
		0 As GebindeMiete, 
		0 As GebindeAdminKosten, 
		0 AS GebindePreisTotal, 
		0 AS GebindePreisFW, 
		0 AS GebindeSaldoBetragExklMwst, 
		0 AS GebindeSaldoBetragInklMwst, 
		0 AS GebindeSaldoBetragExklMwstFW, 
		0 AS GebindeSaldoBetragInklMwstFW, 
		0 AS GebindeSaldoBetragMwst,
		DBAgrofreshEK.GebKontr_GebindeSaldoVorByGebAdrAuftr(%ID, :AdressId, :Bestellung) AS GebindeSaldoMenge, 
		CURRENT_DATE AS Datum, 
		DBAgrofreshEK.GebKontr_GebindeSaldoVorByGebAdrAuftr(%ID, :AdressId, :Bestellung) AS GebindeSaldoVortrag, 
		0 AS AdminKostenJeLadung
	FROM DBAgrofresh_SD.Gebinde 
	Where :WithPrposed =1 AND DBAgrofreshEK.GebPreis_HasToBeProposed(:FibuMandOid, :AdressId, %ID)= 1 AND %ID NOT IN 
	(SELECT GebKontr->Gebinde FROM DBAgrofreshEK.GebDetail WHERE Bestellung = :Bestellung)
			
	 ORDER BY GebindeNr]]></SqlQuery>
</Query>

<Query name="ListeByLieferant">
<Type>%SQLQuery</Type>
<FormalSpec>Lieferant:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, GebKontr->Gebinde->GebindeNr GebindeNr,  DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) AS Bezeichnung,
		Verrechnet, AnlieferungMenge, AnlieferungBetrag, AuslieferungMenge, AuslieferungBetrag, GebindePreisTotal, GebindePreisFW, GebindeSaldoBetragExklMwst, GebindeSaldoBetragExklMwstFW, GebindeSaldoMenge, Datum,
	    Bestellung->AbrechnungsNr AS AbrechnungsNr, Bestellung->AnnahmeNr AS AnnahmeNr, Bestellung->BestellungsNr AS BestellungsNr 
	    FROM DBAgrofreshEK.GebDetail WHERE GebKontr->Lieferant = :Lieferant ORDER BY GebKontr->Gebinde->GebindeNr]]></SqlQuery>
</Query>

<Query name="ListeLieferantByDatumOrderGeb">
<Type>%SQLQuery</Type>
<FormalSpec>Lieferant:%String,VonDatum:%Date,BisDatum:%Date,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, GebKontr->Gebinde->GebindeNr GebindeNr,  DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) AS Bezeichnung,
		Verrechnet, AnlieferungMenge,AuslieferungMenge, Datum, GebindePreis,
	    Bestellung->AbrechnungsNr AS AbrechnungsNr, Bestellung->AnnahmeNr AS AnnahmeNr, Bestellung->BestellungsNr AS BestellungsNr 
	    FROM DBAgrofreshEK.GebDetail WHERE GebKontr->Lieferant = :Lieferant AND Datum <= :BisDatum AND Datum >= :VonDatum ORDER BY GebKontr->Gebinde->GebindeNr, Datum desc, Bestellung->AnnahmeNr desc]]></SqlQuery>
</Query>

<Query name="ListeLieferantByDatumOrderDatum">
<Type>%SQLQuery</Type>
<FormalSpec>Lieferant:%String,VonDatum:%Date,BisDatum:%Date,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, GebKontr->Gebinde->GebindeNr GebindeNr,  DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) AS Bezeichnung,
		Verrechnet, AnlieferungMenge,AuslieferungMenge, Datum, GebindePreis,
	    Bestellung->AbrechnungsNr AS AbrechnungsNr, Bestellung->AnnahmeNr AS AnnahmeNr, Bestellung->BestellungsNr AS BestellungsNr 
	    FROM DBAgrofreshEK.GebDetail WHERE GebKontr->Lieferant = :Lieferant AND Datum <= :BisDatum AND Datum >= :VonDatum ORDER BY  Datum desc, Bestellung->AnnahmeNr desc, GebKontr->Gebinde->GebindeNr]]></SqlQuery>
</Query>

<Query name="ListeLieferantByDateGebOrdGeb">
<Type>%SQLQuery</Type>
<FormalSpec>Lieferant:%String,VonDatum:%Date,BisDatum:%Date,Gebinde:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, GebKontr->Gebinde->GebindeNr GebindeNr,  DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) AS Bezeichnung,
		Verrechnet, AnlieferungMenge,AuslieferungMenge, Datum, GebindePreis,
	    Bestellung->AbrechnungsNr AS AbrechnungsNr, Bestellung->AnnahmeNr AS AnnahmeNr, Bestellung->BestellungsNr AS BestellungsNr 
	    FROM DBAgrofreshEK.GebDetail WHERE GebKontr->Lieferant = :Lieferant AND GebKontr->Gebinde = :Gebinde  AND Datum <= :BisDatum AND Datum >= :VonDatum ORDER BY GebKontr->Gebinde->GebindeNr, Datum desc, Bestellung->AnnahmeNr desc]]></SqlQuery>
</Query>

<Query name="ListeLieferantByDateGebOrdDatum">
<Type>%SQLQuery</Type>
<FormalSpec>Lieferant:%String,VonDatum:%Date,BisDatum:%Date,Gebinde:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, GebKontr->Gebinde->GebindeNr GebindeNr, DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) AS Bezeichnung,
		Verrechnet, AnlieferungMenge,AuslieferungMenge, Datum, GebindePreis,
	    Bestellung->AbrechnungsNr AS AbrechnungsNr, Bestellung->AnnahmeNr AS AnnahmeNr, Bestellung->BestellungsNr AS BestellungsNr 
	    FROM DBAgrofreshEK.GebDetail WHERE GebKontr->Lieferant = :Lieferant AND GebKontr->Gebinde = :Gebinde  AND Datum <= :BisDatum AND Datum >= :VonDatum ORDER BY Datum desc, Bestellung->AnnahmeNr desc, GebKontr->Gebinde->GebindeNr]]></SqlQuery>
</Query>

<Query name="ListeByBestellungDruck">
<Type>%SQLQuery</Type>
<FormalSpec>Bestellung:%String,MandantOid:%String,Lang:%String,nurVer:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, GebKontr->Gebinde->GebindeNr GebindeNr, DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) AS Bezeichnung, GebindeSaldoBetragMwst,
		Verrechnet, AuslieferungMenge, AuslieferungBetrag, AnlieferungMenge, AnlieferungBetrag, GebindePreisTotal, GebindePreisFW, GebindeSaldoBetragExklMwst, GebindeSaldoBetragInklMwst, GebindeSaldoBetragInklMwstFW, GebindeSaldoBetragExklMwstFW,GebindeSaldoBetragMwstFW, GebindeSaldoMenge, Datum, GebKontr->Gebinde GebindeOid, GebindeSaldoVortrag
	    FROM DBAgrofreshEK.GebDetail WHERE Bestellung = :Bestellung AND (:nurVer <>1 OR GebindeSaldoBetragExklMwst<>0)  ORDER BY GebKontr->Gebinde->GebindeNr]]></SqlQuery>
</Query>

<Query name="ListeByBestellungDruckIfcoGroup">
<Type>%SQLQuery</Type>
<FormalSpec>Bestellung:%String,MandantOid:%String,Lang:%String,nurVer:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, GebKontr->Gebinde GebindeOid,GebKontr->Gebinde->GebindeNr GebindeNr,
			'Ifco' AS Bezeichnung,
			Verrechnet,
			SUM(AuslieferungMenge) AS AuslieferungMenge, 
			SUM(AnlieferungMenge) AS AnlieferungMenge, 
			SUM(GebindeSaldoMenge) AS GebindeSaldoMenge,
			SUM(AuslieferungBetrag) AS AuslieferungBetrag, 
			SUM(AnlieferungBetrag) AS AnlieferungBetrag,
			SUM({fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragExklMwstClass(ID)), SQL_DOUBLE)}) AS GebindeSaldoBetragExklMwst,
			SUM({fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragInklMwstClass(ID)), SQL_DOUBLE)}) AS GebindeSaldoBetragInklMwst,
			SUM({fn CONVERT(DBUtils.NumberUtils_Round(DBAgrofreshEK.GebDetail_GebindeSaldoBetExklMwstFWClass(ID), 2), SQL_DOUBLE)}) AS GebindeSaldoBetragExklMwstFW,
			SUM({fn CONVERT(DBUtils.NumberUtils_Round(DBAgrofreshEK.GebDetail_GebindeSaldoBetInklMwstFWClass(ID), 2), SQL_DOUBLE)}) AS GebindeSaldoBetragInklMwstFW,
			SUM({fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragMwstClass(ID)), SQL_DOUBLE)}) AS GebindeSaldoBetragMwst,
			SUM({fn CONVERT(DBUtils.NumberUtils_Round(DBAgrofreshEK.GebDetail_GebindeSaldoBetMwstFWClass(ID), 2), SQL_DOUBLE)}) AS GebindeSaldoBetragMwstFW,
			DBAgrofreshEK.GebKontr_GebindeAnfangsbestandPer(GebKontr, TO_DATE(MIN(Datum)))AS GebindeSaldoVortrag,
			({fn CONVERT(DBAgrofreshEK.GebDetail_GebindePreisTotalClass(ID), SQL_DOUBLE)}) AS GebindePreisTotal,
			GebindePreisFW, Datum
		FROM DBAgrofreshEK.GebDetail 
	    WHERE Bestellung = :Bestellung AND (:nurVer <>1 OR GebindeSaldoBetragExklMwst<>0)  AND SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang),1,2) like 'IF'
	   	Group by SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang),1,2), GebindePreisTotal, GebindePreisFW
	   	
	UNION
	SELECT %ID, GebKontr->Gebinde GebindeOid,GebKontr->Gebinde->GebindeNr GebindeNr, DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) AS Bezeichnung, 
			Verrechnet,
			AuslieferungMenge AS AuslieferungMenge, 
			AnlieferungMenge AS AnlieferungMenge, 
			GebindeSaldoMenge AS GebindeSaldoMenge,
			AuslieferungBetrag AS AuslieferungBetrag, 
			AnlieferungBetrag AS AnlieferungBetrag,
			({fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragExklMwstClass(ID)), SQL_DOUBLE)}) AS GebindeSaldoBetragExklMwst,
			({fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragInklMwstClass(ID)), SQL_DOUBLE)}) AS GebindeSaldoBetragInklMwst,
			({fn CONVERT(DBUtils.NumberUtils_Round(DBAgrofreshEK.GebDetail_GebindeSaldoBetExklMwstFWClass(ID), 2), SQL_DOUBLE)}) AS GebindeSaldoBetragExklMwstFW,
			({fn CONVERT(DBUtils.NumberUtils_Round(DBAgrofreshEK.GebDetail_GebindeSaldoBetInklMwstFWClass(ID), 2), SQL_DOUBLE)}) AS GebindeSaldoBetragInklMwstFW,
			({fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragMwstClass(ID)), SQL_DOUBLE)}) AS GebindeSaldoBetragMwst,
			({fn CONVERT(DBUtils.NumberUtils_Round(DBAgrofreshEK.GebDetail_GebindeSaldoBetMwstFWClass(ID), 2), SQL_DOUBLE)}) AS GebindeSaldoBetragMwstFW,
			DBAgrofreshEK.GebKontr_GebindeAnfangsbestandPer(GebKontr, TO_DATE(MIN(Datum)))AS GebindeSaldoVortrag,
			({fn CONVERT(DBAgrofreshEK.GebDetail_GebindePreisTotalClass(ID), SQL_DOUBLE)}) AS GebindePreisTotal,
			GebindePreisFW, Datum
		FROM DBAgrofreshEK.GebDetail 
	    WHERE Bestellung = :Bestellung AND (:nurVer <>1 OR GebindeSaldoBetragExklMwst<>0)  AND SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang),1,2) <> 'IF'
	   	
		ORDER BY GebindeNr]]></SqlQuery>
</Query>

<Query name="ListeByTASDruckIfcoGroup">
<Type>%SQLQuery</Type>
<FormalSpec>Bestellung:%String,MandantOid:%String,Lang:%String,TeillieferNr:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Gebinde->GebindeNr GebindeNr, 'Ifco' AS Bezeichnung, 0 AS GebindeSaldoBetragMwst,
		0 AS Verrechnet, 0 AS AuslieferungMenge , 0 AS AuslieferungBetrag, SUM(AnzahlGebinde) AS AnlieferungMenge, 0 AS AnlieferungBetrag, 0 AS GebindePreisTotal, 0 AS GebindePreisFW, 0 AS GebindeSaldoBetragExklMwst, 
		0 AS GebindeSaldoBetragInklMwst,0 AS GebindeSaldoBetragInklMwstFW, 0 AS GebindeSaldoBetragExklMwstFW, 0 AS GebindeSaldoBetragMwstFW, 0 AS GebindeSaldoMenge, 
		Lieferdatum AS Datum, Gebinde GebindeOid, 0 AS GebindeSaldoVortrag
	    FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf = :Bestellung
	    AND TeillieferNr = :TeillieferNr
	    AND SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang),1,2) like 'IF'
	    GROUP BY SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang),1,2)
	UNION
	SELECT %ID, Gebinde->GebindeNr GebindeNr, DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) AS Bezeichnung, 0 AS GebindeSaldoBetragMwst,
		0 AS Verrechnet, 0 AS AuslieferungMenge , 0 AS AuslieferungBetrag, SUM(AnzahlGebinde) AS AnlieferungMenge, 0 AS AnlieferungBetrag, 0 AS GebindePreisTotal, 0 AS GebindePreisFW, 0 AS GebindeSaldoBetragExklMwst, 
		0 AS GebindeSaldoBetragInklMwst,0 AS GebindeSaldoBetragInklMwstFW, 0 AS GebindeSaldoBetragExklMwstFW, 0 AS GebindeSaldoBetragMwstFW, 0 AS GebindeSaldoMenge, 
		Lieferdatum AS Datum, Gebinde GebindeOid, 0 AS GebindeSaldoVortrag
	    FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf = :Bestellung
	    AND TeillieferNr = :TeillieferNr
	    AND SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang),1,2) <> 'IF'
	    GROUP BY Gebinde
	ORDER BY GebindeNr]]></SqlQuery>
</Query>

<Query name="ListeByTASDruck">
<Type>%SQLQuery</Type>
<FormalSpec>Bestellung:%String,MandantOid:%String,Lang:%String,TeillieferNr:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Gebinde->GebindeNr GebindeNr, DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) AS Bezeichnung, 0 AS GebindeSaldoBetragMwst,
		0 AS Verrechnet, 0 AS AuslieferungMenge , 0 AS AuslieferungBetrag, SUM(AnzahlGebinde) AS AnlieferungMenge, 0 AS AnlieferungBetrag, 0 AS GebindePreisTotal, 0 AS GebindePreisFW, 0 AS GebindeSaldoBetragExklMwst, 
		0 AS GebindeSaldoBetragInklMwst,0 AS GebindeSaldoBetragInklMwstFW, 0 AS GebindeSaldoBetragExklMwstFW, 0 AS GebindeSaldoBetragMwstFW, 0 AS GebindeSaldoMenge, 
		Lieferdatum AS Datum, Gebinde GebindeOid, 0 AS GebindeSaldoVortrag
	    FROM DBAgrofreshEK.Bestellungspos 
	    WHERE Bestellungskopf = :Bestellung
	    AND TeillieferNr = :TeillieferNr
	    GROUP BY Gebinde
	    ORDER BY Gebinde->GebindeNr]]></SqlQuery>
</Query>

<Query name="ListeDruckGebindeschein">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,Bestellung:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 'L' As "Art", 
			Bestellung AS "Bestellungskopf",
			GebKontr->Gebinde->Gebindenr As "GebindeNr", 
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) 
											AS "Bezeichnung",
			AuslieferungMenge As "Menge" 
	FROM DBAgrofreshEK.GebDetail 
	Where Bestellung=:Bestellung  AND 
			AuslieferungMenge<>0
	UNION SELECT 'R', 
			Bestellung AS "Bestellungskopf",
			GebKontr->Gebinde->Gebindenr, 
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang),
			AnlieferungMenge 
	FROM DBAgrofreshEK.GebDetail 
	Where Bestellung=:Bestellung AND 
			AnlieferungMenge<>0
	ORDER BY Art, GebindeNr]]></SqlQuery>
</Query>

<Query name="VbGebindedetails">
<Type>%SQLQuery</Type>
<FormalSpec>RgNr:%Integer,MandantOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[    SELECT ID,
           {fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragExklMwstClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragExklMwst,
           {fn CONVERT(DBUtils.NumberUtils_RoundWithEinst(1,DBAgrofreshEK.GebDetail_GebindeSaldoBetExklMwstFWClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragExklMwstFW,
           {fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragInklMwstClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragInklMwst,
           {fn CONVERT(DBUtils.NumberUtils_RoundWithEinst(1,DBAgrofreshEK.GebDetail_GebindeSaldoBetInklMwstFWClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragInklMwstFW,
           {fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragMieteClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragMiete,
           {fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragAdminClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragAdmin,
           {fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragBetragClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragBetrag,
           {fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindePreisTotalClass(ID)), SQL_DOUBLE)} AS GebindePreisTotal,
           GebindePreis,
           GebKontr->Gebinde->FibuKontoEK AS GebKontrGebindeFibuKontoEK,
           GebKontr->Gebinde->FibuKontoVK AS GebKontrGebindeFibuKontoVK,
           GebKontr->Gebinde->FibuKontoMiete AS GebKontrGebindeFibuKontoMiete,
           GebKontr->Gebinde->FibuKontoMieteAufw AS GebKontrGebindeFibuKontoMieteAufw,
           GebKontr->Gebinde->FibuKontoAdminkosten AS GebKontrGebindeFibuKontoAdminkosten,
           GebKontr->Gebinde->MwstMieteAufw AS GebKontrGebindeMwstMieteAufw,
           GebKontr->Gebinde->MwstMieteErl AS GebKontrGebindeMwstMieteErl,
           GebKontr->Gebinde->MwstAdminkosten AS GebKontrGebindeMwstAdminkosten,
           {fn CONVERT(DBFibu_SD.Mwst_GetMwstSatzFakturierungClass(GebKontr->Gebinde->MwstMieteAufw, Datum), SQL_DOUBLE)} AS GebKontrGebindeMwstSatzMieteAufw,
           {fn CONVERT(DBFibu_SD.Mwst_GetMwstSatzFakturierungClass(GebKontr->Gebinde->MwstMieteErl, Datum), SQL_DOUBLE)} AS GebKontrGebindeMwstSatzMieteErl,
           {fn CONVERT(DBFibu_SD.Mwst_GetMwstSatzFakturierungClass(GebKontr->Gebinde->MwstAdminkosten, Datum), SQL_DOUBLE)} AS GebKontrGebindeMwstSatzAdminkosten,
           {fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragMwstClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragMwst,
           {fn CONVERT(DBUtils.NumberUtils_RoundWithEinst(1,DBAgrofreshEK.GebDetail_GebindeSaldoBetMwstFWClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragMwstFW,
           GebKontr->Gebinde->MwstVK AS GebKontrGebindeMwstVK,
           {fn CONVERT(DBFibu_SD.Mwst_GetMwstSatzFakturierungClass(GebKontr->Gebinde->MwstVK, Datum), SQL_DOUBLE)} AS GebKontrGebindeMwstSatzVK,
           Mwst,
           MwstSatz,
           Bestellung->IsStorno AS "Storno",
           GebKontr->Gebinde->GebindeNr AS GebKontrGebindeNr
    FROM DBAgrofreshEK.GebDetail 
    WHERE Bestellung->AbrechnungsNr=:RgNr AND 
                       Bestellung->Mandant=:MandantOid AND
                       DBAgrofreshEK.GebDetail_GebindeSaldoBetragInklMwstClass(ID)<>0]]></SqlQuery>
</Query>

<Query name="ListeDruckGebindeKontr">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,firstVorname:%Boolean,vonDatum:%Date,bisDatum:%Date,vonAdressnr:%Integer,bisAdressnr:%Integer,selIfco:%Boolean,gebindeOid:%String,ohneVortrag:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID								AS "GebDetail.ID", 
			GebKontr->Lieferant->ID			AS "GebDetail.GebKontr.Lieferant.ID",
			Bestellung->Annahmedatum		AS "GebDetail.Bestellung.Annahmedatum",
			Bestellung->BestellungsNr  		AS "GebDetail.Bestellung.BestellungsNr",
			Bestellung->AnnahmeNr  			AS "GebDetail.Bestellung.AnnahmeNr",
			Bestellung->AbrechnungsNr		AS "GebDetail.Bestellung.AbrechnungsNr",
			GebKontr->Gebinde->GebindeNr 	AS "GebDetail.GebKontr.Gebinde.Nr", 
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) 
											AS "GebDetail.GebKontr.Gebinde.Bezeichnung",
			Verrechnet						AS "GebDetail.Verrechnet", 
			NVL(AnlieferungMenge,0)			AS "GebDetail.AnieferungMenge",
			NVL(AuslieferungMenge, 0)		AS "GebDetail.AuslieferungMenge", 
			GebindePreisTotal					AS "GebDetail.GebindePreisTotal", 
			GebindePreisFW					AS "GebDetail.GebindePreisFW", 
			CASE WHEN :ohneVortrag = 1 THEN (NVL(DBAgrofreshEK.GebDetail_GebindeSaldoPerDatClass(%ID, :vonDatum),0) + NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0)) ELSE
			(NVL(DBAgrofreshEK.GebDetail_GebindeSaldoVortragClass(%ID, 1),0) + NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0)) END
											AS "GebDetail.GebindeSaldoMenge", 
			Datum							AS "GebDetail.Datum", 
			GebKontr->ID				 	AS "GebDetail.GebKontrID"
	    FROM DBAgrofreshEK.GebDetail as d
	    WHERE GebKontr->Mandant = :MandantOid AND
	    	GebKontr->Lieferant->Adressnummer>=:vonAdressnr AND
	    	GebKontr->Lieferant->Adressnummer<=:bisAdressnr AND
	    	Datum>={d :vonDatum} AND Datum<={d :bisDatum} AND
	    	((:selIfco=0) OR (DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) LIKE 'IF%')) AND
	    	((NVL(:gebindeOid,'') = '') OR (GebKontr->Gebinde->Id = :gebindeOid))
	    		
	    ORDER BY GebKontr->Gebinde->GebindeNr, Datum, Bestellung->BestellungsNr]]></SqlQuery>
</Query>

<Query name="ListeDruckGebindeKontrIfcoGroup">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,firstVorname:%Boolean,vonDatum:%Date,bisDatum:%Date,vonAdressnr:%Integer,bisAdressnr:%Integer,selIfco:%Boolean,gebindeOid:%String,ohneVortrag:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID								AS "GebDetail.ID", 
			GebKontr->Lieferant->ID				AS "GebDetail.GebKontr.Lieferant.ID",
			Bestellung->Annahmedatum			AS "GebDetail.Bestellung.Annahmedatum",
			Bestellung->BestellungsNr				AS "GebDetail.Bestellung.BestellungsNr",
			Bestellung->AnnahmeNr			AS "GebDetail.Bestellung.AnnahmeNr",
			Bestellung->AbrechnungsNr			AS "GebDetail.Bestellung.AbrechnungsNr",
			0 								AS "GebDetail.GebKontr.Gebinde.Nr", 
			'Ifco'							AS "GebDetail.GebKontr.Gebinde.Bezeichnung",
			Verrechnet						AS "GebDetail.Verrechnet", 
			SUM(AnlieferungMenge)	 			AS "GebDetail.AnieferungMenge",
			SUM(AuslieferungMenge)				AS "GebDetail.AuslieferungMenge", 
			GebindePreisTotal					AS "GebDetail.GebindePreisTotal", 
			GebindePreisFW					AS "GebDetail.GebindePreisFW", 
			CASE WHEN :ohneVortrag = 1 THEN (NVL(DBAgrofreshEK.GebDetail_GebindeSaldoPerDatIFCOClass(%ID, :Lang, :vonDatum),0)+ SUM(NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0))) ELSE
			(NVL(DBAgrofreshEK.GebDetail_GebindeSaldoVortragIFCOClass(%ID, :Lang, 1),0)+ SUM(NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0))) END
											AS "GebDetail.GebindeSaldoMenge", 
			Datum							AS "GebDetail.Datum",
			'ifco'						 	AS "GebDetail.GebKontrID"
	    FROM DBAgrofreshEK.GebDetail as d
	    WHERE GebKontr->Mandant = :MandantOid AND
	    	GebKontr->Lieferant->Adressnummer>=:vonAdressnr AND
	    	GebKontr->Lieferant->Adressnummer<=:bisAdressnr AND
	    	Datum>={d :vonDatum} AND Datum<={d :bisDatum} AND
	    	((:selIfco=0) OR (DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) LIKE 'IF%')) AND
	    	((NVL(:gebindeOid,'') = '') OR (GebKontr->Gebinde->Id = :gebindeOid))AND
	    	(NVL(AnlieferungMenge,0) <> 0 OR NVL(AuslieferungMenge,0) <> 0) AND
	    	SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang),1,2) like 'IF' 
	    GROUP BY SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang),1,2), Datum
	    	
	UNION
	SELECT %ID								AS "GebDetail.ID", 
			GebKontr->Lieferant->ID				AS "GebDetail.GebKontr.Lieferant.ID",
			Bestellung->Annahmedatum			AS "GebDetail.Bestellung.Annahmedatum",
			Bestellung->BestellungsNr				AS "GebDetail.Bestellung.BestellungsNr",
			Bestellung->AnnahmeNr			AS "GebDetail.Bestellung.AnnahmeNr",
			Bestellung->AbrechnungsNr			AS "GebDetail.Bestellung.AbrechnungsNr",
			GebKontr->Gebinde->GebindeNr 	AS "GebDetail.GebKontr.Gebinde.Nr", 
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) 
											AS "GebDetail.GebKontr.Gebinde.Bezeichnung",
			Verrechnet						AS "GebDetail.Verrechnet", 
			AnlieferungMenge	 				AS "GebDetail.AnieferungMenge",
			AuslieferungMenge					AS "GebDetail.AuslieferungMenge", 
			GebindePreisTotal					AS "GebDetail.GebindePreisTotal", 
			GebindePreisFW					AS "GebDetail.GebindePreisFW", 
			CASE WHEN :ohneVortrag = 1 THEN (NVL(DBAgrofreshEK.GebDetail_GebindeSaldoPerDatClass(%ID, :vonDatum),0) + NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0)) ELSE
			(NVL(DBAgrofreshEK.GebDetail_GebindeSaldoVortragClass(%ID, 1),0) + NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0)) END
											AS "GebDetail.GebindeSaldoMenge", 
			Datum							AS "GebDetail.Datum",
			GebKontr->ID				 	AS "GebDetail.GebKontrID"
	    FROM DBAgrofreshEK.GebDetail as d
	    WHERE GebKontr->Mandant = :MandantOid AND
	    	GebKontr->Lieferant->Adressnummer>=:vonAdressnr AND
	    	GebKontr->Lieferant->Adressnummer<=:bisAdressnr AND
	    	Datum>={d :vonDatum} AND Datum<={d :bisDatum} AND
	    	((:selIfco=0) OR (DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) LIKE 'IF%')) AND
	    	((NVL(:gebindeOid,'') = '') OR (GebKontr->Gebinde->Id = :gebindeOid))AND
	    	(NVL(AnlieferungMenge,0) <> 0 OR NVL(AuslieferungMenge,0) <> 0) AND
	    	SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang),1,2) <> 'IF' 
	    	
	    		
	    ORDER BY "GebDetail.GebKontr.Gebinde.Nr", "GebDetail.Datum", "GebDetail.Bestellung.BestellungsNr"]]></SqlQuery>
</Query>

<Query name="ListeDruckGebindeKontrOrdDatum">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,firstVorname:%Boolean,vonDatum:%Date,bisDatum:%Date,vonAdressnr:%Integer,bisAdressnr:%Integer,selIfco:%Boolean,gebindeOid:%String,ohneVortrag:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID								AS "GebDetail.ID", 
			GebKontr->Lieferant->ID			AS "GebDetail.GebKontr.Lieferant.ID",
			Bestellung->Annahmedatum		AS "GebDetail.Bestellung.Annahmedatum",
			Bestellung->BestellungsNr  		AS "GebDetail.Bestellung.BestellungsNr",
			Bestellung->AnnahmeNr  			AS "GebDetail.Bestellung.AnnahmeNr",
			Bestellung->AbrechnungsNr		AS "GebDetail.Bestellung.AbrechnungsNr",
			GebKontr->Gebinde->GebindeNr 	AS "GebDetail.GebKontr.Gebinde.Nr", 
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) 
											AS "GebDetail.GebKontr.Gebinde.Bezeichnung",
			Verrechnet						AS "GebDetail.Verrechnet", 
			NVL(AnlieferungMenge,0) 		AS "GebDetail.AnieferungMenge",
			NVL(AuslieferungMenge,0)		AS "GebDetail.AuslieferungMenge", 
			GebindePreisTotal					AS "GebDetail.GebindePreisTotal", 
			GebindePreisFW					AS "GebDetail.GebindePreisFW", 
			CASE WHEN :ohneVortrag = 1 THEN (NVL(DBAgrofreshEK.GebDetail_GebindeSaldoPerDatClass(%ID, :vonDatum),0) + NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0)) ELSE
			(NVL(DBAgrofreshEK.GebDetail_GebindeSaldoVortragClass(%ID, 1),0) + NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0)) END
											AS "GebDetail.GebindeSaldoMenge", 
			Datum							AS "GebDetail.Datum", 
			GebKontr->ID				 	AS "GebDetail.GebKontrID"
	    FROM DBAgrofreshEK.GebDetail as d
	    WHERE GebKontr->Mandant = :MandantOid AND
	    	GebKontr->Lieferant->Adressnummer>=:vonAdressnr AND
	    	GebKontr->Lieferant->Adressnummer<=:bisAdressnr AND
	    	Datum>={d :vonDatum} AND Datum<={d :bisDatum} AND
	    	((:selIfco=0) OR (DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) LIKE 'IF%')) AND
	    	((NVL(:gebindeOid,'') = '') OR (GebKontr->Gebinde->Id = :gebindeOid))
	    		
	    ORDER BY Datum, Bestellung->BestellungsNr, GebKontr->Gebinde->GebindeNr]]></SqlQuery>
</Query>

<Query name="ListeDruckGebindeKontrODIfGroup">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,firstVorname:%Boolean,vonDatum:%Date,bisDatum:%Date,vonAdressnr:%Integer,bisAdressnr:%Integer,selIfco:%Boolean,gebindeOid:%String,ohneVortrag:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID								AS "GebDetail.ID", 
			GebKontr->Lieferant->ID				AS "GebDetail.GebKontr.Lieferant.ID",
			Bestellung->Annahmedatum			AS "GebDetail.Bestellung.Annahmedatum",
			Bestellung->BestellungsNr				AS "GebDetail.Bestellung.BestellungsNr",
			Bestellung->AnnahmeNr			AS "GebDetail.Bestellung.AnnahmeNr",
			Bestellung->AbrechnungsNr			AS "GebDetail.Bestellung.AbrechnungsNr",
			0							 	AS "GebDetail.GebKontr.Gebinde.Nr", 
			'Ifco'							AS "GebDetail.GebKontr.Gebinde.Bezeichnung",
			Verrechnet						AS "GebDetail.Verrechnet", 
			SUM(AnlieferungMenge)	 			AS "GebDetail.AnieferungMenge",
			SUM(AuslieferungMenge)				AS "GebDetail.AuslieferungMenge", 
			GebindePreisTotal					AS "GebDetail.GebindePreisTotal", 
			GebindePreisFW					AS "GebDetail.GebindePreisFW", 
			CASE WHEN :ohneVortrag = 1 THEN (NVL(DBAgrofreshEK.GebDetail_GebindeSaldoPerDatIFCOClass(%ID, :Lang, :vonDatum),0)+ SUM(NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0))) ELSE
			(NVL(DBAgrofreshEK.GebDetail_GebindeSaldoVortragIFCOClass(%ID, :Lang, 1),0)+ SUM(NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0))) END
											AS "GebDetail.GebindeSaldoMenge", 
			Datum							AS "GebDetail.Datum",
			'ifco'						 	AS "GebDetail.GebKontrID"
	    FROM DBAgrofreshEK.GebDetail as d
	    WHERE GebKontr->Mandant = :MandantOid AND
	    	GebKontr->Lieferant->Adressnummer>=:vonAdressnr AND
	    	GebKontr->Lieferant->Adressnummer<=:bisAdressnr AND
	    	Datum>={d :vonDatum} AND Datum<={d :bisDatum} AND
	    	((:selIfco=0) OR (DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) LIKE 'IF%')) AND
	    	((NVL(:gebindeOid,'') = '') OR (GebKontr->Gebinde->Id = :gebindeOid))AND
	    	(NVL(AnlieferungMenge,0) <> 0 OR NVL(AuslieferungMenge,0) <> 0) AND
	    	SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang),1,2) like 'IF' 
	    GROUP BY SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang),1,2), Datum, Bestellung->AnnahmeNr, GebKontr->Lieferant->Adressnummer
	    	
	UNION (
	SELECT %ID								AS "GebDetail.ID", 
			GebKontr->Lieferant->ID				AS "GebDetail.GebKontr.Lieferant.ID",
			Bestellung->Annahmedatum			AS "GebDetail.Bestellung.Annahmedatum",
			Bestellung->BestellungsNr				AS "GebDetail.Bestellung.BestellungsNr",
			Bestellung->AnnahmeNr			AS "GebDetail.Bestellung.AnnahmeNr",
			Bestellung->AbrechnungsNr			AS "GebDetail.Bestellung.AbrechnungsNr",
			GebKontr->Gebinde->GebindeNr 	AS "GebDetail.GebKontr.Gebinde.Nr", 
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) 
											AS "GebDetail.GebKontr.Gebinde.Bezeichnung",
			Verrechnet						AS "GebDetail.Verrechnet", 
			NVL(AnlieferungMenge,0)	AS "GebDetail.AnieferungMenge",
			NVL(AuslieferungMenge,0)	AS "GebDetail.AuslieferungMenge", 
			GebindePreisTotal					AS "GebDetail.GebindePreisTotal", 
			GebindePreisFW					AS "GebDetail.GebindePreisFW", 
				CASE WHEN :ohneVortrag = 1 THEN (NVL(DBAgrofreshEK.GebDetail_GebindeSaldoPerDatClass(%ID, :vonDatum),0) + SUM(NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0))) ELSE
			(NVL(DBAgrofreshEK.GebDetail_GebindeSaldoVortragClass(%ID, 1),0) + NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0)) END
											AS "GebDetail.GebindeSaldoMenge", 
			Datum							AS "GebDetail.Datum",
			GebKontr->ID				 	AS "GebDetail.GebKontrID"
	    FROM DBAgrofreshEK.GebDetail as d
	    WHERE GebKontr->Mandant = :MandantOid AND
	    	GebKontr->Lieferant->Adressnummer>=:vonAdressnr AND
	    	GebKontr->Lieferant->Adressnummer<=:bisAdressnr AND
	    	Datum>={d :vonDatum} AND Datum<={d :bisDatum} AND
	    	((:selIfco=0) OR (DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) LIKE 'IF%')) AND
	    	((NVL(:gebindeOid,'') = '') OR (GebKontr->Gebinde->Id = :gebindeOid))AND
	    	(NVL(AnlieferungMenge,0) <> 0 OR NVL(AuslieferungMenge,0) <> 0) AND
	    	SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang),1,2) <> 'IF' 
	    GROUP BY Datum, Bestellung->BestellungsNr, GebKontr->Gebinde->GebindeNr	
	 )	
	ORDER BY "GebDetail.Datum", "GebDetail.Bestellung.AnnahmeNr", "GebDetail.GebKontr.Gebinde.Nr"]]></SqlQuery>
</Query>

<Query name="ListeByBestDruckSR">
<Type>%SQLQuery</Type>
<FormalSpec>ArNr:%Integer,MandantOid:%String,Lang:%String,nurVer:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, 
		GebKontr->Gebinde->GebindeNr AS GebindeNr, 
		DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) AS Bezeichnung,
		Verrechnet, 
		SUM(NVL(AuslieferungMenge,0)) AS AuslieferungMenge,
		SUM(NVL(AnlieferungMenge,0)) AS AnlieferungMenge,
		({fn CONVERT(DBAgrofreshEK.GebDetail_GebindePreisTotalClass(ID), SQL_DOUBLE)}) AS GebindePreisTotal,
		NVL(GebindePreisFW,0) AS GebindePreisFW, 
		SUM({fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragExklMwstClass(ID)), SQL_DOUBLE)}) AS GebindeSaldoBetragExklMwst,
		SUM({fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragInklMwstClass(ID)), SQL_DOUBLE)}) AS GebindeSaldoBetragInklMwst,
		SUM({fn CONVERT(DBUtils.NumberUtils_Round(DBAgrofreshEK.GebDetail_GebindeSaldoBetExklMwstFWClass(ID), 2), SQL_DOUBLE)}) AS GebindeSaldoBetragExklMwstFW,
		SUM({fn CONVERT(DBUtils.NumberUtils_Round(DBAgrofreshEK.GebDetail_GebindeSaldoBetInklMwstFWClass(ID), 2), SQL_DOUBLE)}) AS GebindeSaldoBetragInklMwstFW,
		SUM({fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragMwstClass(ID)), SQL_DOUBLE)}) AS GebindeSaldoBetragMwst,
		SUM({fn CONVERT(DBUtils.NumberUtils_Round(DBAgrofreshEK.GebDetail_GebindeSaldoBetMwstFWClass(ID), 2), SQL_DOUBLE)}) AS GebindeSaldoBetragMwstFW,
		SUM(NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0)) AS GebindeSaldoMenge,
		Datum, GebKontr->Gebinde AS GebindeOid, 
		DBAgrofreshEK.GebKontr_GebindeAnfangsbestandPer(GebKontr, TO_DATE(MIN(Datum)))AS GebindeSaldoVortrag
	    FROM DBAgrofreshEK.GebDetail WHERE Bestellung->AbrechnungsNr = :ArNr AND (:nurVer <>1 OR GebindeSaldoBetragExklMwst<>0) 
 		GROUP BY GebKontr, GebindePreisTotal, NVL(GebindePreisFW,0)
	    ORDER BY GebKontr->Gebinde->GebindeNr]]></SqlQuery>
</Query>

<Query name="ListeByBestDruckSRIfcoGroup">
<Type>%SQLQuery</Type>
<FormalSpec>ArNr:%Integer,MandantOid:%String,Lang:%String,nurVer:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, 
		GebKontr->Gebinde->GebindeNr GebindeNr,
		'Ifco' AS Bezeichnung,
		Verrechnet, 
		SUM(NVL(AuslieferungMenge,0)) AS AuslieferungMenge,
		SUM(NVL(AnlieferungMenge,0)) AS AnlieferungMenge,
		({fn CONVERT(DBAgrofreshEK.GebDetail_GebindePreisTotalClass(ID), SQL_DOUBLE)}) AS GebindePreisTotal,
		NVL(GebindePreisFW,0) AS GebindePreisFW, 
		SUM({fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragExklMwstClass(ID)), SQL_DOUBLE)}) AS GebindeSaldoBetragExklMwst,
		SUM({fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragInklMwstClass(ID)), SQL_DOUBLE)}) AS GebindeSaldoBetragInklMwst,
		SUM({fn CONVERT(DBUtils.NumberUtils_Round(DBAgrofreshEK.GebDetail_GebindeSaldoBetExklMwstFWClass(ID), 2), SQL_DOUBLE)}) AS GebindeSaldoBetragExklMwstFW,
		SUM({fn CONVERT(DBUtils.NumberUtils_Round(DBAgrofreshEK.GebDetail_GebindeSaldoBetInklMwstFWClass(ID), 2), SQL_DOUBLE)}) AS GebindeSaldoBetragInklMwstFW,
		SUM({fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragMwstClass(ID)), SQL_DOUBLE)}) AS GebindeSaldoBetragMwst,
		SUM({fn CONVERT(DBUtils.NumberUtils_Round(DBAgrofreshEK.GebDetail_GebindeSaldoBetMwstFWClass(ID), 2), SQL_DOUBLE)}) AS GebindeSaldoBetragMwstFW,
		SUM(NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0)) AS GebindeSaldoMenge,
		Datum, GebKontr->Gebinde GebindeOid, 
		DBAgrofreshEK.GebKontr_GebindeAnfangsbestandPer(GebKontr, TO_DATE(MIN(Datum)))AS GebindeSaldoVortrag
	    FROM DBAgrofreshEK.GebDetail WHERE Bestellung->AbrechnungsNr = :ArNr AND (:nurVer <>1 OR GebindeSaldoBetragExklMwst<>0) 
	    AND SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang),1,2) like 'IF'
 		GROUP BY SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang),1,2), GebindePreisTotal, NVL(GebindePreisFW,0)
 	
 	UNION
	SELECT %ID, 
		GebKontr->Gebinde->GebindeNr GebindeNr, DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) AS Bezeichnung,
		Verrechnet, 
		SUM(NVL(AuslieferungMenge,0)) AS AuslieferungMenge,
		SUM(NVL(AnlieferungMenge,0)) AS AnlieferungMenge,
		({fn CONVERT(DBAgrofreshEK.GebDetail_GebindePreisTotalClass(ID), SQL_DOUBLE)}) AS GebindePreisTotal,
		GebindePreisFW, 
		SUM({fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragExklMwstClass(ID)), SQL_DOUBLE)}) AS GebindeSaldoBetragExklMwst,
		SUM({fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragInklMwstClass(ID)), SQL_DOUBLE)}) AS GebindeSaldoBetragInklMwst,
		SUM({fn CONVERT(DBUtils.NumberUtils_Round(DBAgrofreshEK.GebDetail_GebindeSaldoBetExklMwstFWClass(ID), 2), SQL_DOUBLE)}) AS GebindeSaldoBetragExklMwstFW,
		SUM({fn CONVERT(DBUtils.NumberUtils_Round(DBAgrofreshEK.GebDetail_GebindeSaldoBetInklMwstFWClass(ID), 2), SQL_DOUBLE)}) AS GebindeSaldoBetragInklMwstFW,
		SUM({fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragMwstClass(ID)), SQL_DOUBLE)}) AS GebindeSaldoBetragMwst,
		SUM({fn CONVERT(DBUtils.NumberUtils_Round(DBAgrofreshEK.GebDetail_GebindeSaldoBetMwstFWClass(ID), 2), SQL_DOUBLE)}) AS GebindeSaldoBetragMwstFW,
		SUM(NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0)) AS GebindeSaldoMenge,
		Datum, GebKontr->Gebinde GebindeOid, 
		DBAgrofreshEK.GebKontr_GebindeAnfangsbestandPer(GebKontr, TO_DATE(MIN(Datum)))AS GebindeSaldoVortrag
	    FROM DBAgrofreshEK.GebDetail WHERE Bestellung->AbrechnungsNr = :ArNr AND (:nurVer <>1 OR GebindeSaldoBetragExklMwst<>0) 
	    AND SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang),1,2) <> 'IF'
 		GROUP BY GebKontr, GebindePreisTotal, NVL(GebindePreisFW,0)
 		
	    ORDER BY GebindeNr]]></SqlQuery>
</Query>

<Query name="ListeBestellungVonBis">
<Type>%SQLQuery</Type>
<FormalSpec>BestellungVon:%Integer,BestellungBis:%Integer,MandantOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Bestellung->Verbucht AS Verbucht, Bestellung->Bestellstatus AS Bestellstatus
	FROM DBAgrofreshEK.GebDetail
	WHERE Bestellung->BestellungsNr BETWEEN :BestellungVon AND :BestellungBis
	AND Bestellung->Mandant = :MandantOid]]></SqlQuery>
</Query>

<Query name="ListeDruckSREinzel">
<Type>%SQLQuery</Type>
<FormalSpec>ArNr:%Integer,MandantOid:%String,Lang:%String,nurVer:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID,
		Bestellung,
		Bestellung->AbrechnungsNr AS AbrechnungsNr,
		DBAgrofreshEK.Bestellungspos_BestellungHasDetails(Bestellung) AS "Bestellungskopf.BestHasDetails",
		GebKontr->Gebinde->GebindeNr AS GebindeNr, 
		DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) AS Bezeichnung,
		Verrechnet, 
		NVL(AuslieferungMenge,0) AS AuslieferungMenge,
		NVL(AnlieferungMenge,0) AS AnlieferungMenge,
		({fn CONVERT(DBAgrofreshEK.GebDetail_GebindePreisTotalClass(ID), SQL_DOUBLE)}) AS GebindePreisTotal,
		NVL(GebindePreisFW,0) AS GebindePreisFW, 
		{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragExklMwstClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragExklMwst,
		{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragInklMwstClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragInklMwst,
		{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetExklMwstFWClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragExklMwstFW,
		{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragMwstClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragMwst,
		NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0) AS GebindeSaldoMenge,
		Datum, GebKontr->Gebinde AS GebindeOid, 
		DBAgrofreshEK.GebKontr_GebindeAnfangsbestandPer(GebKontr, TO_DATE(MIN(Datum)))AS GebindeSaldoVortrag
	    FROM DBAgrofreshEK.GebDetail WHERE Bestellung->AbrechnungsNr = :ArNr AND (:nurVer <>1 OR GebindeSaldoBetragExklMwst<>0) 
 		AND DBAgrofreshEK.Bestellungspos_BestellungHasDetails(Bestellung)= 0
 		GROUP BY GebindePreisTotal, NVL(GebindePreisFW,0)
	    ORDER BY GebKontr->Gebinde->GebindeNr]]></SqlQuery>
</Query>

<Query name="ListeDruckSREinzelIfcoGroup">
<Type>%SQLQuery</Type>
<FormalSpec>ArNr:%Integer,MandantOid:%String,Lang:%String,nurVer:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID,
		Bestellung,
		Bestellung->AbrechnungsNr AS AbrechnungsNr,
		GebKontr->Gebinde->GebindeNr GebindeNr,
		'Ifco' AS Bezeichnung,
		Verrechnet, 
		NVL(AuslieferungMenge,0) AS AuslieferungMenge,
		NVL(AnlieferungMenge,0) AS AnlieferungMenge,
		({fn CONVERT(DBAgrofreshEK.GebDetail_GebindePreisTotalClass(ID), SQL_DOUBLE)}) AS GebindePreisTotal,
		NVL(GebindePreisFW,0) AS GebindePreisFW, 
		{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragExklMwstClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragExklMwst,
		{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragInklMwstClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragInklMwst,
		{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetExklMwstFWClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragExklMwstFW,
		{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragMwstClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragMwst,
		NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0) AS GebindeSaldoMenge,
		Datum, GebKontr->Gebinde GebindeOid, 
		DBAgrofreshEK.GebKontr_GebindeAnfangsbestandPer(GebKontr, TO_DATE(MIN(Datum)))AS GebindeSaldoVortrag
	    FROM DBAgrofreshEK.GebDetail WHERE Bestellung->AbrechnungsNr = :ArNr AND (:nurVer <>1 OR GebindeSaldoBetragExklMwst<>0) 
	    AND SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang),1,2) like 'IF'
 		AND DBAgrofreshEK.Bestellungspos_BestellungHasDetails(Bestellung)= 0
 		GROUP BY SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang),1,2), GebindePreisTotal, NVL(GebindePreisFW,0)
 	
 	UNION
	SELECT %ID,
		Bestellung,
		Bestellung->AbrechnungsNr AS AbrechnungsNr,
		GebKontr->Gebinde->GebindeNr GebindeNr, DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang) AS Bezeichnung,
		Verrechnet, 
		NVL(AuslieferungMenge,0) AS AuslieferungMenge,
		NVL(AnlieferungMenge,0) AS AnlieferungMenge,
		({fn CONVERT(DBAgrofreshEK.GebDetail_GebindePreisTotalClass(ID), SQL_DOUBLE)}) AS GebindePreisTotal,
		GebindePreisFW, 
		{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragExklMwstClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragExklMwst,
		{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragInklMwstClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragInklMwst,
		{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetExklMwstFWClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragExklMwstFW,
		{fn CONVERT(DBUtils.NumberUtils_RoundGemEinst(:MandantOid,DBAgrofreshEK.GebDetail_GebindeSaldoBetragMwstClass(ID)), SQL_DOUBLE)} AS GebindeSaldoBetragMwst,
		NVL(AnlieferungMenge,0) - NVL(AuslieferungMenge,0) AS GebindeSaldoMenge,
		Datum, GebKontr->Gebinde GebindeOid, 
		DBAgrofreshEK.GebKontr_GebindeAnfangsbestandPer(GebKontr, TO_DATE(MIN(Datum)))AS GebindeSaldoVortrag
	    FROM DBAgrofreshEK.GebDetail WHERE Bestellung->AbrechnungsNr = :ArNr AND (:nurVer <>1 OR GebindeSaldoBetragExklMwst<>0) 
	    AND SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, :Lang),1,2) <> 'IF'
	    AND DBAgrofreshEK.Bestellungspos_BestellungHasDetails(Bestellung)= 0
 		GROUP BY GebKontr, GebindePreisTotal, NVL(GebindePreisFW,0)
 		
	    ORDER BY GebindeNr]]></SqlQuery>
</Query>

<Query name="ListeCheckVerrechnet">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT GebKontr->Gebinde AS Gebinde, GebKontr->Gebinde->GebindeNr GebindeNr,  
		DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, :MandantOid, 'de') AS Bezeichnung,
		Bestellung->BestellungsNr AS Bestellung
	FROM DBAgrofreshEK.GebDetail WHERE Bestellung->Mandant = :MandantOid AND Bestellung->Bestellstatus>=DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() 
	AND Bestellung->GebindeVerrechnung >= 3 AND NVL(Verrechnet,0)<>1 AND NVL(NieVerrechnen, 0) = 0
	AND DBAgrofreshEK.BestellungsKopf_IsStatusGedruckt(Bestellung->BearbeitungsstatusAR) = 1
	Order By Bestellung->BestellungsNr]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.GebKontrAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61340,60977.024142</TimeCreated>

<Query name="ListeByKunde">
<Type>%SQLQuery</Type>
<FormalSpec>Lieferant:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Gebinde->GebindeNr GebindeNr,  DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) AS Bezeichnung,
		Anlieferungen, Auslieferungen, Anfangsbestand, DatumAnfangsbestand, AuslieferungAbgerechnet, AnlieferungAbgerechnet, GebindeSaldo 
	    FROM DBAgrofreshEK.GebKontr WHERE Lieferant = :Lieferant ORDER BY Gebinde->GebindeNr]]></SqlQuery>
</Query>

<Query name="ListeDruckGebindeKontr">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,vonDatum:%Date,bisDatum:%Date,vonAdressnr:%Integer,bisAdressnr:%Integer,selIfco:%Boolean,gebindeOid:%String,ohneVortrag:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID						AS "GebKontr.ID", 
			Lieferant->ID               AS "GebKontr.Lieferant.ID",
			Gebinde->GebindeNr 		AS "GebKontr.Gebinde.Nr", 
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) 
									AS "GebKontr.Gebinde.Bezeichnung",
			DBAgrofreshEK.GebKontr_GebindeAnfangsbestandPer(ID, {d :vonDatum})
									AS "GebKontr.Anfangsbestand",
			CASE WHEN :ohneVortrag = 1 THEN DBAgrofreshEK.GebKontr_GebindeSaldoVonBis(ID, {d :vonDatum} , {d :bisDatum}) ELSE
											DBAgrofreshEK.GebKontr_GebindeSaldoPer(ID, {d :bisDatum}) END
									AS "GebKontr.GebindeSaldo",
			(Select SUM(AnlieferungMenge) FROM DBAgrofreshEK.GebDetail 
				WHERE GebKontr=kopf.%ID AND Datum <= {d :bisDatum} AND Datum >= {d :vonDatum}) AS "GebKontr.AnlieferungMenge",
			(Select SUM(AuslieferungMenge) FROM DBAgrofreshEK.GebDetail 
				WHERE GebKontr=kopf.%ID AND Datum <= {d :bisDatum} AND Datum >= {d :vonDatum}) AS "GebKontr.AuslieferungMenge"
					
	    FROM DBAgrofreshEK.GebKontr kopf
	    WHERE Mandant = :MandantOid AND
	    	Lieferant->Adressnummer>=:vonAdressnr AND
	    	Lieferant->Adressnummer<=:bisAdressnr AND
	    	((:selIfco=0) OR (DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde->ID, :MandantOid, :Lang) LIKE 'IF%')) AND
	    	((NVL(:gebindeOid,'') = '') OR (Gebinde->Id = :gebindeOid)) AND 
	    	Gebinde->GebindeNr < DBAgrofresh.Konst_GebindeFirstNichtVerrechenbar() AND
	    	(NVL((Select SUM(NVL(AnlieferungMenge,0)) FROM DBAgrofreshEK.GebDetail WHERE GebKontr=kopf.%ID AND Datum <= {d :bisDatum} AND Datum >= {d :vonDatum}),0) <>0 OR
	    	NVL((Select SUM(NVL(AuslieferungMenge,0)) FROM DBAgrofreshEK.GebDetail WHERE GebKontr=kopf.%ID AND Datum <= {d :bisDatum} AND Datum >= {d :vonDatum}),0) <>0 OR
	    	(NVL(DBAgrofresh.GebKontr_GebindeSaldoPer(ID, {d :vonDatum}), 0) <>0 OR
	    	NVL(DBAgrofresh.GebKontr_GebindeSaldoPer(ID, {d :bisDatum}), 0) <> 0) OR :ohneVortrag = 1)
	    ORDER BY Lieferant->Adressnummer, Gebinde->GebindeNr]]></SqlQuery>
</Query>

<Query name="ListeDruckGebindeKontrIfcoGroup">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,vonDatum:%Date,bisDatum:%Date,vonAdressnr:%Integer,bisAdressnr:%Integer,selIfco:%Boolean,gebindeOid:%String,ohneVortrag:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 'ifco'					AS "GebKontr.ID", 
			Lieferant->Adressnummer     AS "Adressnummer",
			Lieferant->ID               AS "GebKontr.Lieferant.ID",
			0				 		AS "GebKontr.Gebinde.Nr", 
			'Ifco'					AS "GebKontr.Gebinde.Bezeichnung",
			DBAgrofreshEK.GebKontr_GebindeSaldoIFCOPer({d :vonDatum}, :MandantOid, :Lang, Lieferant)
									AS "GebKontr.Anfangsbestand",
			CASE WHEN :ohneVortrag = 1 THEN DBAgrofreshEK.GebKontr_GebindeSaldoIFCOVonBis({d :vonDatum}, {d :bisDatum}, :MandantOid, :Lang, Lieferant) ELSE
											DBAgrofreshEK.GebKontr_GebindeSaldoIFCOPer({d :bisDatum}, :MandantOid, :Lang, Lieferant) END
									AS "GebKontr.GebindeSaldo",
			SUM((Select SUM(NVL(AnlieferungMenge,0)) FROM DBAgrofreshEK.GebDetail 
				WHERE GebKontr=kopf.%ID AND Datum <= {d :bisDatum} AND Datum >= {d :vonDatum})) AS "GebKontr.AnlieferungMenge",
			SUM((Select SUM(NVL(AuslieferungMenge,0)) FROM DBAgrofreshEK.GebDetail 
				WHERE GebKontr=kopf.%ID AND Datum <= {d :bisDatum} AND Datum >= {d :vonDatum})) AS "GebKontr.AuslieferungMenge"						
	    FROM DBAgrofreshEK.GebKontr kopf
	    WHERE Mandant = :MandantOid AND
	    	Lieferant->Adressnummer>=:vonAdressnr AND
	    	Lieferant->Adressnummer<=:bisAdressnr AND
	    	((:selIfco=0) OR (DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde->ID, :MandantOid, :Lang) LIKE 'IF%')) AND
	    	((NVL(:gebindeOid,'') = '') OR (Gebinde->Id = :gebindeOid)) AND
	    	Gebinde->GebindeNr < DBAgrofresh.Konst_GebindeFirstNichtVerrechenbar() AND
	    	(NVL((Select SUM(NVL(AnlieferungMenge,0)) FROM DBAgrofreshEK.GebDetail WHERE GebKontr=kopf.%ID AND Datum <= {d :bisDatum} AND Datum >= {d :vonDatum}),0) <>0 OR
	    	NVL((Select SUM(NVL(AuslieferungMenge,0)) FROM DBAgrofreshEK.GebDetail WHERE GebKontr=kopf.%ID AND Datum <= {d :bisDatum} AND Datum >= {d :vonDatum}),0) <>0 OR
	    	NVL(DBAgrofreshEK.GebKontr_GebindeSaldoPer(ID, {d :vonDatum}), 0) <>0 OR
	    	NVL(DBAgrofreshEK.GebKontr_GebindeSaldoPer(ID, {d :bisDatum}), 0) <>0) AND
	    	SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang),1,2) like 'IF' 
	    GROUP BY SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang),1,2), Lieferant->Adressnummer
	   
	UNION 
	SELECT %ID						AS "GebKontr.ID", 
			Lieferant->Adressnummer     AS "Adressnummer",
			Lieferant->ID               AS "GebKontr.Lieferant.ID",
			Gebinde->GebindeNr 		AS "GebKontr.Gebinde.Nr", 
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) 
									AS "GebKontr.Gebinde.Bezeichnung",
			DBAgrofreshEK.GebKontr_GebindeAnfangsbestandPer(ID, {d :vonDatum})
									AS "GebKontr.Anfangsbestand",
			CASE WHEN :ohneVortrag = 1 THEN DBAgrofreshEK.GebKontr_GebindeSaldoVonBis(ID, {d :vonDatum} , {d :bisDatum}) ELSE
											DBAgrofreshEK.GebKontr_GebindeSaldoPer(ID, {d :bisDatum}) END
									AS "GebKontr.GebindeSaldo",
			(Select SUM(NVL(AnlieferungMenge,0)) FROM DBAgrofreshEK.GebDetail 
				WHERE GebKontr=kopf.%ID AND Datum <= {d :bisDatum} AND Datum >= {d :vonDatum}) AS "GebKontr.AnlieferungMenge",
			(Select SUM(NVL(AuslieferungMenge,0)) FROM DBAgrofreshEK.GebDetail 
				WHERE GebKontr=kopf.%ID AND Datum <= {d :bisDatum} AND Datum >= {d :vonDatum}) AS "GebKontr.AuslieferungMenge"
									
	    FROM DBAgrofreshEK.GebKontr kopf
	    WHERE Mandant = :MandantOid AND
	    	Lieferant->Adressnummer>=:vonAdressnr AND
	    	Lieferant->Adressnummer<=:bisAdressnr AND
	    	((:selIfco=0) OR (DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde->ID, :MandantOid, :Lang) LIKE 'IF%')) AND
	    	((NVL(:gebindeOid,'') = '') OR (Gebinde->Id = :gebindeOid)) AND
	    	Gebinde->GebindeNr < DBAgrofresh.Konst_GebindeFirstNichtVerrechenbar() AND
	    	(NVL((Select SUM(NVL(AnlieferungMenge,0)) FROM DBAgrofreshEK.GebDetail WHERE GebKontr=kopf.%ID AND Datum <= {d :bisDatum} AND Datum >= {d :vonDatum}),0) <>0 OR
	    	NVL((Select SUM(NVL(AuslieferungMenge,0)) FROM DBAgrofreshEK.GebDetail WHERE GebKontr=kopf.%ID AND Datum <= {d :bisDatum} AND Datum >= {d :vonDatum}),0) <>0 OR
	    	NVL(DBAgrofreshEK.GebKontr_GebindeSaldoPer(ID, {d :vonDatum}), 0) <>0 OR
	    	NVL(DBAgrofreshEK.GebKontr_GebindeSaldoPer(ID, {d :bisDatum}), 0) <> 0) AND
	    	SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang),1,2)<>'IF'
	
	ORDER BY "Adressnummer", "GebKontr.Gebinde.Nr"]]></SqlQuery>
</Query>

<Query name="ListeDruckAdressen">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,firstVorname:%Boolean,vonDatum:%Date,bisDatum:%Date,vonAdressnr:%Integer,bisAdressnr:%Integer,ohneVortrag:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT Lieferant->ID			AS "Adresse.ID", 
			Lieferant->Adressnummer 	AS "Adresse.Adressnummer",
			DBAdressen.Adresse_GetName(Lieferant->Adresscode, Lieferant->Name, Lieferant->VornameZusatz1, :firstVorname) 
									AS "Adresse.Name", 
			Lieferant->Plz 			AS "Adresse.Plz",
			Lieferant->Ort 			AS "Adresse.Ort"
	    FROM DBAgrofreshEK.GebKontr 
	    WHERE Mandant = :MandantOid AND 
	    	Lieferant->Adressnummer>=:vonAdressnr AND
	    	Lieferant->Adressnummer<=:bisAdressnr AND
	    	((SELECT (SUM(NVL(AnlieferungMenge,0)) + SUM( NVL(AuslieferungMenge,0))) AS menge
	    		FROM DBAgrofreshEK.GebDetail 
	    		WHERE DBAgrofreshEK.GebDetail.GebKontr=DBAgrofreshEK.GebKontr.ID AND
	    				GebKontr->Gebinde->GebindeNr < DBAgrofresh.Konst_GebindeFirstNichtVerrechenbar() AND
	    				DBAgrofreshEK.GebDetail.Datum>={d :vonDatum} AND 
	    				DBAgrofreshEK.GebDetail.Datum<={d :bisDatum})>0 OR
	    	(DBAgrofreshEK.GebKontr_GebindeSaldoPer(ID, {d :vonDatum})<>0 AND :ohneVortrag = 0) OR 
	    	(DBAgrofreshEK.GebKontr_GebindeSaldoPer(ID, {d :bisDatum})<>0 AND :ohneVortrag = 0))
	    GROUP BY Lieferant->ID 
	    ORDER BY Lieferant->Adressnummer]]></SqlQuery>
</Query>

<Query name="ListeGebindeSaldoCheck">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	Select ID,
	(Select SUM(NVL(AnlieferungMenge,0)) FROM DBAgrofreshEK.GebDetail det WHERE NVL(Verrechnet,0) = 0 AND GebKontr = kontr.Id) AS CalcAnlieferung,
	(Select SUM(NVL(AuslieferungMenge,0)) FROM DBAgrofreshEK.GebDetail det WHERE NVL(Verrechnet,0) = 0 AND GebKontr = kontr.Id) AS CalcAuslieferung
	FROM DBAgrofreshEK.GebKontr kontr
	WHERE Anlieferungen  <> (Select NVL(SUM(NVL(AnlieferungMenge,0)),0) FROM DBAgrofreshEK.GebDetail det WHERE NVL(Verrechnet,0) = 0 AND GebKontr = kontr.Id) OR
	Auslieferungen  <> (Select NVL(SUM(NVL(AuslieferungMenge,0)),0) FROM DBAgrofreshEK.GebDetail det WHERE NVL(Verrechnet,0) = 0 AND GebKontr = kontr.Id) AND
	Mandant = :MandantOid]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.GebPreisAF">
<Super>%SerialObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61630,62258.938514</TimeCreated>

<Query name="ListeLieferGebPreisNachGebinde">
<Type>%SQLQuery</Type>
<FormalSpec>GebindeOid:%String,LieferantOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Lieferant->Adresse As Adresse, Gebinde, Verrechnen, AbDatum, Preis, Zusatzpreis, Miete
	FROM DBAgrofreshEK.LieferantenGebPreis
	WHERE Gebinde = :GebindeOid AND Lieferant->Adresse = :LieferantOid
	ORDER BY AbDatum desc]]></SqlQuery>
</Query>

<Query name="ListeLGGebPreisNachGebinde">
<Type>%SQLQuery</Type>
<FormalSpec>GebindeOid:%String,GruppenOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Gruppe->ID As LieferantnGg, Gebinde, Verrechnen, AbDatum, Preis, Zusatzpreis, Miete
	FROM DBAgrofreshEK.LGGebPreis
	WHERE Gebinde = :GebindeOid AND Gruppe = :GruppenOid
	ORDER BY AbDatum desc]]></SqlQuery>
</Query>

<Query name="ListeLieferantGebinde">
<Type>%SQLQuery</Type>
<FormalSpec>LieferantOid:%String,GruppenOid:%String,MandantOid:%String,Lang:%String,withKg:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Gebinde, Gebinde->GebindeNr AS GebNr, 0 AS isGruppenpreis, 
	Gebinde->GebindeNr AS GebindeNr,
	DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde->%ID, :MandantOid, :Lang) As GebindeBezeichnung,
	DBAgrofresh_SD.GebindePreis_GetPreisPerDatum(Gebinde->%ID, CURRENT_DATE) As GebindePreis, 
	DBAgrofresh_SD.GebindePreis_GetZusatzPreisPerDatum(Gebinde->%ID, CURRENT_DATE) As GebindeZusatzpreis
	FROM DBAgrofreshEK.LieferantenGebPreis
	WHERE Lieferant->Adresse = :LieferantOid Group by Gebinde
	UNION
	SELECT %ID, Gebinde, Gebinde->GebindeNr AS GebNr, 1 AS isGruppenpreis,
	Gebinde->GebindeNr AS GebindeNr,
	DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde->%ID, :MandantOid, :Lang) As GebindeBezeichnung,
	DBAgrofresh_SD.GebindePreis_GetPreisPerDatum(Gebinde->%ID, CURRENT_DATE) As GebindePreis, 
	DBAgrofresh_SD.GebindePreis_GetZusatzPreisPerDatum(Gebinde->%ID, CURRENT_DATE) As GebindeZusatzpreis
	FROM DBAgrofreshEK.LGGebPreis
	WHERE Gruppe = :GruppenOid AND :withKg = 1 AND Gebinde not in (SELECT Gebinde
	FROM DBAgrofreshEK.LieferantenGebPreis
	WHERE Lieferant->Adresse = :LieferantOid) Group by Gebinde
	
	ORDER BY GebNr]]></SqlQuery>
</Query>

<Query name="ListeLGGebinde">
<Type>%SQLQuery</Type>
<FormalSpec>GruppenOid:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Gruppe As Kundengruppe, Gebinde, 
	Gebinde->GebindeNr AS GebindeNr,
	DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde->%ID, :MandantOid, :Lang) As GebindeBezeichnung,
	DBAgrofresh_SD.GebindePreis_GetPreisPerDatum(Gebinde->%ID, CURRENT_DATE) As GebindePreis, 
	DBAgrofresh_SD.GebindePreis_GetZusatzPreisPerDatum(Gebinde->%ID, CURRENT_DATE) As GebindeZusatzpreis
	FROM DBAgrofreshEK.LGGebPreis
	WHERE Gruppe = :GruppenOid Group by Gebinde
	ORDER BY Gebinde->GebindeNr]]></SqlQuery>
</Query>

<Storage name="Default">
<Type>%Library.CacheSerialState</Type>
<StreamLocation>^DBAgrofreshEK.AF.GebPreisAFS</StreamLocation>
</Storage>
</Class>


<Class name="DBAgrofreshEK.AF.LGPreisAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>62343,29388.052866</TimeCreated>

<Query name="ListeDruckSelektion">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,ArtGrpNrVon:%Integer,ArtGrpNrBis:%Integer,ArtNrVon:%String,ArtNrBis:%String,LgNrVon:%Integer=0,LgNrBis:%Integer=0</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID,
			Artikel,
			Abzugstyp->PositionsNr AS "Abzugstyp.Nr", 
	       	DBAgrofresh_SD.Abzugstyp_GetTextClass(Abzugstyp, :MandantOid, :Lang) AS "Abzugstyp.Text", 
	       	AnzahlJeGebinde,
	       	Barcode,
	       	Einstandspreis,
	       	LieferantenSpezArtNr,
	       	Gebinde->GebindeNr As "Gebinde.Nr", 
	       	DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde->ID, :MandantOid, :Lang) As "Gebinde.Text", 
	 		ArtikelAktiv, 
			Herkunft->PositionsNr As "Herkunft.Nr",
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Herkunft, :MandantOid, :Lang) As "Herkunft.Text",
			Herkunft->IsoKennzeichen As "Herkunft.IsoKennzeichen",
	       	Produktionsart->PositionsNr As "Produktionsart.Nr",
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Produktionsart, :MandantOid, :Lang) As "Produktionsart.Text",
	       	Menge->PositionsNr AS "Mengeneinheit.Nr", 
	       	DBAgrofresh_SD.Mengencode_GetTextClass(Menge, :MandantOid, :Lang) AS "Mengeneinheit.Text",
	       	Gruppe->Code As "Kundengruppe.Code",
	       	DBAdressen_SD.Lieferantengrp_GetBezeichnungClass(Gruppe, :MandantOid, :Lang) AS "Kundengruppe.Text"
	FROM DBAgrofreshEK.LGPreis
	WHERE Artikel->Mandant = :MandantOid
		AND (Artikel->ArtikelNr BETWEEN :ArtNrVon AND :ArtNrBis OR :ArtNrVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpNrVon AND :ArtGrpNrBis OR :ArtGrpNrVon = 0)
	    AND (Gruppe->Code BETWEEN :LgNrVon AND :LgNrBis OR :LgNrBis = 0)
	ORDER BY Gruppe->Code]]></SqlQuery>
</Query>

<Query name="ListeIDsByLG">
<Type>%SQLQuery</Type>
<FormalSpec>LGOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID
	FROM DBAgrofreshEK.LGPreis
	WHERE Gruppe = :LGOid
	Order by Artikel->Artikelgruppe->ArtikelgruppenNr, Artikel->ArtikelNr]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.LagerAufnahmeAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61492,58741.371846</TimeCreated>

<Query name="ListeByArtikel">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>SELECT 	ID, 
		LagerPer,
		Bemerkung
FROM DBAgrofreshEK.LagerAufnahme
WHERE Artikel = :ArtikelOid
ORDER BY LagerPer DESC</SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.LieferantPreisAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61761,37949.157068</TimeCreated>

<Query name="ListeDruckSelektion">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,ArtGrpNrVon:%Integer,ArtGrpNrBis:%Integer,ArtNrVon:%String,ArtNrBis:%String,AdrNrVon:%Integer=0,AdrNrBis:%Integer=0</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID,
			Artikel,
			Abzugstyp->PositionsNr AS "Abzugstyp.Nr", 
	       	DBAgrofresh_SD.Abzugstyp_GetTextClass(Abzugstyp, :MandantOid, :Lang) AS "Abzugstyp.Text", 
	       	AnzahlJeGebinde,
	       	Barcode,
	       	Einstandspreis,
	       	LieferantenSpezArtNr,
	       	Gebinde->GebindeNr As "Gebinde.Nr", 
	       	DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde->ID, :MandantOid, :Lang) As "Gebinde.Text", 
	       	ArtikelAktiv, 
			Herkunft->PositionsNr As "Herkunft.Nr",
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Herkunft, :MandantOid, :Lang) As "Herkunft.Text",
			Herkunft->IsoKennzeichen As "Herkunft.IsoKennzeichen",
	       	Produktionsart->PositionsNr As "Produktionsart.Nr",
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Produktionsart, :MandantOid, :Lang) As "Produktionsart.Text",
	       	Menge->PositionsNr AS "Mengeneinheit.Nr", 
	       	DBAgrofresh_SD.Mengencode_GetTextClass(Menge, :MandantOid, :Lang) AS "Mengeneinheit.Text",
	       	Lieferant->Adresse->Adressnummer As "Kunde.AdressNr",
	       	Lieferant->Adresse->Kurzname As "Kunde.Kurzname",
	       	Lieferant->Adresse->Name As "Kunde.Name",
	       	Lieferant->Adresse->Plz As "Kunde.Plz",
	       	Lieferant->Adresse->Ort As "Kunde.Ort"
	FROM DBAgrofreshEK.LieferantenPreis
	WHERE Artikel->Mandant = :MandantOid
		AND (Artikel->ArtikelNr BETWEEN :ArtNrVon AND :ArtNrBis OR :ArtNrVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpNrVon AND :ArtGrpNrBis OR :ArtGrpNrVon = 0)
	    AND (Lieferant->Adresse->Adressnummer BETWEEN :AdrNrVon AND :AdrNrBis OR :AdrNrBis = 0)
	ORDER BY Lieferant->Adresse->Adressnummer]]></SqlQuery>
</Query>

<Query name="ListeIDsByAdresse">
<Type>%SQLQuery</Type>
<FormalSpec>AdressOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID
	FROM DBAgrofreshEK.LieferantenPreis
	WHERE Lieferant->Adresse = :AdressOid
	Order by Artikel->Artikelgruppe->ArtikelgruppenNr, Artikel->ArtikelNr]]></SqlQuery>
</Query>

<Query name="PreisExists">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelOid:%String,LieferantOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT 1 As pExists FROM DBAgrofreshEK.LieferantenPreis
			WHERE Artikel = :ArtikelOid AND Lieferant = :LieferantOid</SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.PreisAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61282,43170.818333</TimeCreated>

<Query name="GetPreiseIdsByArtikel">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT %ID FROM DBAgrofreshEK.Preis
	WHERE Artikel = :ArtikelOid</SqlQuery>
</Query>

<Query name="ListeLiefPreisNachArtGrp">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,ArtikelgruppenOid:%String,AdresseOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Lieferant->Adresse As Adresse, Artikel, ArtikelAktiv, Einstandspreis, 
	EinstandspreisAbDatum, DatumPreisaenderung,
	AnzahlJeGebinde
	FROM DBAgrofreshEK.LieferantenPreis
	WHERE Artikel->Mandant = :MandantOid AND Artikel->Artikelgruppe = :ArtikelgruppenOid
	AND Lieferant->Adresse = :AdresseOid
	ORDER BY Artikel->ArtikelNr]]></SqlQuery>
</Query>

<Query name="ListeLGPreisNachArtGrp">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,ArtikelgruppenOid:%String,GruppenOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Gruppe, Artikel, ArtikelAktiv, Einstandspreis, 
	EinstandspreisAbDatum, DatumPreisaenderung,
	AnzahlJeGebinde
	FROM DBAgrofreshEK.LGPreis
	WHERE Artikel->Mandant = :MandantOid AND Artikel->Artikelgruppe = :ArtikelgruppenOid
	AND Gruppe = :GruppenOid
	ORDER BY Artikel->ArtikelNr]]></SqlQuery>
</Query>

<Query name="ListeLiefPreisNachArtGrpKText">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,ArtikelgruppenOid:%String,AdresseOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Lieferant->Adresse As Adresse, Artikel, ArtikelAktiv, Einstandspreis, 
	EinstandspreisAbDatum, DatumPreisaenderung,
	AnzahlJeGebinde
	FROM DBAgrofreshEK.LieferantenPreis
	WHERE Artikel->Mandant = :MandantOid AND Artikel->Artikelgruppe = :ArtikelgruppenOid
	AND Lieferant->Adresse = :AdresseOid
	ORDER BY Artikel->Kurztext]]></SqlQuery>
</Query>

<Query name="ListeLGPreisNachArtGrpKText">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,ArtikelgruppenOid:%String,GruppenOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Gruppe, Artikel, ArtikelAktiv, Einstandspreis,
	EinstandspreisAbDatum, DatumPreisaenderung,
	AnzahlJeGebinde
	FROM DBAgrofreshEK.LGPreis
	WHERE Artikel->Mandant = :MandantOid AND Artikel->Artikelgruppe = :ArtikelgruppenOid
	AND Gruppe = :GruppenOid
	ORDER BY Artikel->Kurztext]]></SqlQuery>
</Query>

<Query name="ListeLiefPreisIdsByArtikel">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,ArtikelOid:%String,LieferantOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Artikel, LieferantenSpezArtNr
	FROM DBAgrofreshEK.LieferantenPreis
	WHERE Artikel->Mandant = :MandantOid 
	AND Artikel = :ArtikelOid
	AND Lieferant = :LieferantOid]]></SqlQuery>
</Query>

<Query name="ListeLGPreisIdsByArtikel">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,ArtikelOid:%String,Gruppe:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Artikel, LieferantenSpezArtNr
	FROM DBAgrofreshEK.LGPreis
	WHERE Artikel->Mandant = :MandantOid 
	AND Artikel = :ArtikelOid
	AND Gruppe = :Gruppe]]></SqlQuery>
</Query>

<Query name="ListeLieferantenPreis">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,LieferantenOid:%String,filterAktiv:%Boolean,VonGrpNr:%Integer=0,BisGrpNr:%Integer=0</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Lieferant->Adresse As Adresse, Artikel, ArtikelAktiv,
	Einstandspreis, EinstandspreisAbDatum, DatumPreisaenderung,
	Handlingskosten, HandlingskostenAbDatum,
	Menge, Artikel->Qualitaetsklasse As Qualitaet,
	Gebinde, AnzahlJeGebinde, Produktionsart, Herkunft, Barcode,
	LieferantenSpezArtNr, Abzugstyp, Verarbeitungsverlust,
	Artikel->Artikelgruppe As ArtikelgruppeOid,
	Artikel->Artikelgruppe->ArtikelgruppenNr As ArtikelgruppenNr,
	DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe, :MandantOid, :Lang) As Artikelgruppentext
	FROM DBAgrofreshEK.LieferantenPreis
	WHERE Artikel->Mandant = :MandantOid AND Lieferant->Adresse = :LieferantenOid
	AND (:filterAktiv = 0 OR (:filterAktiv = 1 AND ArtikelAktiv = :filterAktiv))
    AND (:BisGrpNr = 0 OR Artikel->Artikelgruppe->ArtikelgruppenNr between :VonGrpNr AND :BisGrpNr)
	ORDER BY Artikel->ArtikelNr]]></SqlQuery>
</Query>

<Query name="ListeLGPreis">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,GruppenOid:%String,filterAktiv:%Boolean,VonGrpNr:%Integer=0,BisGrpNr:%Integer=0</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Gruppe, Artikel, ArtikelAktiv, 
	Einstandspreis, EinstandspreisAbDatum, DatumPreisaenderung,
	Handlingskosten, HandlingskostenAbDatum,
	Menge, Artikel->Qualitaetsklasse As Qualitaet,
	Gebinde, AnzahlJeGebinde, Produktionsart, Herkunft, Barcode,
	LieferantenSpezArtNr, Abzugstyp, Verarbeitungsverlust,
	Artikel->Artikelgruppe As ArtikelgruppeOid,
	Artikel->Artikelgruppe->ArtikelgruppenNr As ArtikelgruppenNr,
	DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe, :MandantOid, :Lang) As Artikelgruppentext
	FROM DBAgrofreshEK.LGPreis
	WHERE Artikel->Mandant = :MandantOid
	AND Gruppe = :GruppenOid
	AND (:filterAktiv = 0 OR (:filterAktiv = 1 AND ArtikelAktiv = :filterAktiv))
    AND (:BisGrpNr = 0 OR Artikel->Artikelgruppe->ArtikelgruppenNr between :VonGrpNr AND :BisGrpNr)
	ORDER BY Artikel->ArtikelNr]]></SqlQuery>
</Query>

<Query name="ListeLiefPreisKText">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,LieferantenOid:%String,filterAktiv:%Boolean,VonGrpNr:%Integer=0,BisGrpNr:%Integer=0</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Lieferant->Adresse As Adresse, Artikel, ArtikelAktiv,
	Einstandspreis, EinstandspreisAbDatum, DatumPreisaenderung,
	Handlingskosten, HandlingskostenAbDatum,
	Menge, Artikel->Qualitaetsklasse As Qualitaet,
	Gebinde, AnzahlJeGebinde, Produktionsart, Herkunft, Barcode,
	LieferantenSpezArtNr, Abzugstyp, Verarbeitungsverlust,
	Artikel->Artikelgruppe As ArtikelgruppeOid,
	Artikel->Artikelgruppe->ArtikelgruppenNr As ArtikelgruppenNr,
	DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe, :MandantOid, :Lang) As Artikelgruppentext
	FROM DBAgrofreshEK.LieferantenPreis
	WHERE Artikel->Mandant = :MandantOid
	AND Lieferant->Adresse = :LieferantenOid
	AND (:filterAktiv = 0 OR (:filterAktiv = 1 AND ArtikelAktiv = :filterAktiv))
    AND (:BisGrpNr = 0 OR Artikel->Artikelgruppe->ArtikelgruppenNr between :VonGrpNr AND :BisGrpNr)
	ORDER BY Artikel->Kurztext]]></SqlQuery>
</Query>

<Query name="ListeLGPreisKText">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,GruppenOid:%String,filterAktiv:%Boolean,VonGrpNr:%Integer=0,BisGrpNr:%Integer=0</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Gruppe, Artikel, ArtikelAktiv,
	Einstandspreis, EinstandspreisAbDatum, DatumPreisaenderung,
	Handlingskosten, HandlingskostenAbDatum,
	Menge, Artikel->Qualitaetsklasse As Qualitaet,
	Gebinde, AnzahlJeGebinde, Produktionsart, Herkunft, Barcode,
	LieferantenSpezArtNr, Abzugstyp, Verarbeitungsverlust,
	Artikel->Artikelgruppe As ArtikelgruppeOid,
	Artikel->Artikelgruppe->ArtikelgruppenNr As ArtikelgruppenNr,
	DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe, :MandantOid, :Lang) As Artikelgruppentext
	FROM DBAgrofreshEK.LGPreis
	WHERE Artikel->Mandant = :MandantOid
	AND Gruppe = :GruppenOid
	AND (:filterAktiv = 0 OR (:filterAktiv = 1 AND ArtikelAktiv = :filterAktiv))
    AND (:BisGrpNr = 0 OR Artikel->Artikelgruppe->ArtikelgruppenNr between :VonGrpNr AND :BisGrpNr)
	ORDER BY Artikel->Kurztext]]></SqlQuery>
</Query>

<Query name="ListeSpezArtByLiefAdressNr">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,AdressNr:%Integer,AdressOidVZ:%String,Lieferdatum:%Date</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT l.Artikel->ID As ArtikelId,
	l.Artikel->ArtikelNr As ArtikelNr, 
	DBAgrofresh.Artikel_GetArtikeltextClass(l.Artikel, :MandantOid, 'de') As Artikeltext,
	l.Gebinde As GebindeId,
	(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(l.Gebinde, :MandantOid,'de')) As Gebinde,
	l.AnzahlJeGebinde,
	l.Menge As EinheitId, DBAgrofresh_SD.Mengencode_GetTextClass(l.Menge, :MandantOid, 'de') As Einheit,
	(SELECT Menge FROM DBPlattform.AngebotsPos pos
		JOIN DBPlattform.AngebotsKopf kopf ON kopf.ID = pos.AngebotsKopf 
		WHERE kopf.Datum = TO_DATE(:Lieferdatum) 
		AND kopf.Lieferant->Adresse->Adressnummer = :AdressNr
		AND kopf.Abnehmer->Adresse->ID = :AdressOidVZ
		AND pos.Artikel = l.Artikel
		AND kopf.Mandant = l.Artikel->Mandant
	) As Angebotsmenge,
	(SELECT Bemerkung FROM DBPlattform.AngebotsPos pos
		JOIN DBPlattform.AngebotsKopf kopf ON kopf.ID = pos.AngebotsKopf 
		WHERE kopf.Datum = TO_DATE(:Lieferdatum) 
		AND kopf.Lieferant->Adresse->Adressnummer = :AdressNr
		AND kopf.Abnehmer->Adresse->ID = :AdressOidVZ
		AND pos.Artikel = l.Artikel
		AND kopf.Mandant = l.Artikel->Mandant
	) As Bemerkung
	FROM DBAgrofreshEK.LieferantenPreis l
	WHERE l.Artikel->Mandant = :MandantOid 
	AND l.Lieferant->Adresse->Adressnummer = :AdressNr
	AND l.ArtikelAktiv = 1 AND l.Artikel->ArtikelAktiv = 1
	ORDER BY ArtikelNr]]></SqlQuery>
</Query>

<Query name="ListeBestellungserfassung">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,KundenGrpOid:%String,AdressOid:%Integer,sortBez:%Boolean=0,onylAktArtikel:%Boolean=1</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[SELECT %ID, Artikel,
	Artikel->Artikelgruppe AS ArtikelGruppe,
	ArtikelAktiv,
	Menge As MengeneinheitId,
	Gebinde,
	Herkunft,
	AnzahlJeGebinde AS AnzahlJeGebinde,
	CASE :sortBez WHEN 1 THEN DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang)  ELSE Artikel->ArtikelNr END AS sort2,
	1 AS IsKundenSpez,
	CASE WHEN NVL(Verarbeitungsverlust,0) = 0 THEN Artikel->VerlustEinkauf ELSE Verarbeitungsverlust END AS VerlustProzent
	FROM DBAgrofreshEK.LieferantenPreis Preis
	WHERE Artikel->Mandant = :MandantOid
	AND Lieferant->Adresse->ID = :AdressOid
	AND ((ArtikelAktiv=:onylAktArtikel) OR (:onylAktArtikel = 0))

UNION

SELECT  %ID, Artikel,
	Artikel->Artikelgruppe AS ArtikelGruppe,
	ArtikelAktiv,
	Menge As MengeneinheitId,
	Gebinde,
	Herkunft,
	AnzahlJeGebinde AS AnzahlJeGebinde,
	CASE :sortBez WHEN 1 THEN DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, :MandantOid, :Lang)  ELSE Artikel->ArtikelNr END AS sort2,
	0 AS IsKundenSpez,
	CASE WHEN NVL(Verarbeitungsverlust,0) = 0 THEN Artikel->VerlustEinkauf ELSE Verarbeitungsverlust END AS VerlustProzent
	FROM DBAgrofreshEK.LGPreis Preis
	WHERE Artikel->Mandant = :MandantOid
	AND Gruppe->ID = :KundenGrpOid
	AND Artikel->ArtikelNr 
	NOT IN (SELECT  Artikel->ArtikelNr AS ArtikelNr 
	FROM DBAgrofreshEK.LieferantenPreis Preis
	WHERE Artikel->Mandant = :MandantOid
	AND Lieferant->Adresse->ID = :AdressOid)
	AND ((ArtikelAktiv=:onylAktArtikel) OR (:onylAktArtikel = 0))

ORDER BY ArtikelGruppe, sort2]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.QSMeldungAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>62356,37438.880892</TimeCreated>

<Query name="ListeDruckEk">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,VonArtikel:%String,BisArtikel:%String,VonLieferant:%Integer,BisLieferant:%Integer,VonDatum:%Date,BisDatum:%Date,VonQualitaet:%Integer,BisQualitaet:%Integer,VonLiefer:%Integer,BisLiefer:%Integer,VonTransport:%Integer,BisTransport:%Integer,VonDiverses:%Integer,BisDiverses:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[        SELECT  ID,
           Charge->Artikel->ArtikelNr As "ArtikelNr",
           DBAgrofresh.Artikel_GetArtikeltextClass(Charge->Artikel->ID, :MandantOid, :Lang) As "ArtikelText",
           Charge->EingangsDatum As "EingangLieferDatum",
           EkWarenannehmer->Name As "AnnehmerVertreterName",
           EkWarenannehmer->Vorname As "AnnehmerVertreterVorname",
           DBAgrofresh_SD.Hilfstexte_GetTextClass(EkQSQualitaet->ID, :MandantOid, :Lang) As "Qualitaet",
           DBAgrofresh_SD.Hilfstexte_GetTextClass(EkQSLieferber->ID, :MandantOid, :Lang) As "Lieferbereitschaft",
           DBAgrofresh_SD.Hilfstexte_GetTextClass(EkQSTransport->ID, :MandantOid, :Lang) As "Transport",
           DBAgrofresh_SD.Hilfstexte_GetTextClass(EkQSDiverses->ID, :MandantOid, :Lang) As "Diverses",
           (SELECT VerlustProzent FROM DBAgrofreshEK.Bestellungspos WHERE Charge->ID = QS.Charge->ID) As "VerlustProzent",
           EkMenge As "Menge",
           EkAnzahlGebinde As "AnzahlGebinde",
           EkBemerkung As "Bemerkung",
           Charge->Lieferant->Adresse->Adressnummer as "LieferantAdressnummer",
           Charge->Lieferant->Adresse->Name As "LieferantName",
           Charge->Lieferant->Adresse->PLZ As "LieferantPLZ",
           Charge->Lieferant->Adresse->Ort As "LieferantOrt",
           Charge->PositionsNr As "ChargeNr",
           DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Charge->Gebinde, :MandantOid, :Lang) As "GebindeBez",
           DBAgrofresh_SD.Mengencode_GetTextClass(Charge->Artikel->Mengeneinheit, :MandantOid, :Lang) As "MengeneinheitBez"
        FROM DBAgrofreshEK.QSMeldung As "QS"
        WHERE Charge->Artikel->ArtikelNr BETWEEN :VonArtikel AND :BisArtikel
        AND Charge->Lieferant->Adresse->Adressnummer BETWEEN :VonLieferant AND :BisLieferant
        AND Charge->EingangsDatum BETWEEN :VonDatum AND :BisDatum
        AND NVL(EkQSQualitaet->PositionsNr, 0) BETWEEN :VonQualitaet AND :BisQualitaet
        AND NVL(EkQSLieferber->PositionsNr, 0) BETWEEN :VonLiefer AND :BisLiefer
        AND NVL(EkQSTransport->PositionsNr, 0) BETWEEN :VonTransport AND :BisTransport
        AND NVL(EkQSDiverses->PositionsNr, 0) BETWEEN :VonDiverses AND :BisDiverses
        
        ORDER BY Charge->Lieferant->Adresse->Adressnummer, Charge->Artikel->ArtikelNr, Charge->EingangsDatum]]></SqlQuery>
</Query>

<Query name="ListeDruckVk">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,VonArtikel:%String,BisArtikel:%String,VonLieferant:%Integer,BisLieferant:%Integer,VonDatum:%Date,BisDatum:%Date,VonQualitaet:%Integer,BisQualitaet:%Integer,VonLiefer:%Integer,BisLiefer:%Integer,VonTransport:%Integer,BisTransport:%Integer,VonDiverses:%Integer,BisDiverses:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[    SELECT ID,
           Charge->Artikel->ArtikelNr As "ArtikelNr",
           DBAgrofresh.Artikel_GetArtikeltextClass(Charge->Artikel->ID, :MandantOid, :Lang) As "ArtikelText",
           Charge->EingangsDatum As "EingangLieferDatum",
           "" As "AnnehmerVertreterVorname",
           DBAdressen_SD.Vertreter_GetNameClass(VkVertreter, :MandantOid, :Lang) As "AnnehmerVertreterName",
           DBAgrofresh_SD.Hilfstexte_GetTextClass(VkQSQualitaet->ID, :MandantOid, :Lang) As "Qualitaet",
           DBAgrofresh_SD.Hilfstexte_GetTextClass(VkQSLieferber->ID, :MandantOid, :Lang) As "Lieferbereitschaft",
           DBAgrofresh_SD.Hilfstexte_GetTextClass(VkQSTransport->ID, :MandantOid, :Lang) As "Transport",
           DBAgrofresh_SD.Hilfstexte_GetTextClass(VkQSDiverses->ID, :MandantOid, :Lang) As "Diverses",
           (SELECT VerlustProzent FROM DBAgrofreshEK.Bestellungspos WHERE Charge->ID = QS.Charge->ID) As "VerlustProzent",
           VkMenge As "Menge",
           VkAnzahlGebinde As "AnzahlGebinde",
           VkBemerkung As "Bemerkung",
           (SELECT CHA.Kunde->Adresse->Adressnummer FROM DBAgrofreshEK.ChargenAusgang As "CHA" WHERE CHA.Charge = QS.Charge) as "LieferantAdressnummer",
           (SELECT CHA.Kunde->Adresse->Name FROM DBAgrofreshEK.ChargenAusgang As "CHA" WHERE CHA.Charge = QS.Charge) As "LieferantName",
           (SELECT CHA.Kunde->Adresse->PLZ FROM DBAgrofreshEK.ChargenAusgang As "CHA" WHERE CHA.Charge = QS.Charge) As "LieferantPLZ",
           (SELECT CHA.Kunde->Adresse->Ort FROM DBAgrofreshEK.ChargenAusgang As "CHA" WHERE CHA.Charge = QS.Charge) As "LieferantOrt",
           Charge->PositionsNr As "ChargeNr",
           DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Charge->Gebinde, :MandantOid, :Lang) As "GebindeBez",
           DBAgrofresh_SD.Mengencode_GetTextClass(Charge->Artikel->Mengeneinheit, :MandantOid, :Lang) As "MengeneinheitBez"
    FROM DBAgrofreshEK.QSMeldung As "QS"
    WHERE Charge IN (	SELECT CHA.Charge
    					FROM DBAgrofreshEK.ChargenAusgang As "CHA"
    					WHERE CHA.Kunde->Adresse->Adressnummer BETWEEN :VonLieferant AND :BisLieferant
    					AND CHA.Artikel->ArtikelNr BETWEEN :VonArtikel AND :BisArtikel
    					AND CHA.AusgangsDatum BETWEEN :VonDatum AND :BisDatum	
    				)
    AND NVL(VkQSQualitaet->PositionsNr, 0) BETWEEN :VonQualitaet AND :BisQualitaet
    AND NVL(VkQSLieferber->PositionsNr, 0) BETWEEN :VonLiefer AND :BisLiefer
    AND NVL(VkQSTransport->PositionsNr, 0) BETWEEN :VonTransport AND :BisTransport
    AND NVL(VkQSDiverses->PositionsNr, 0) BETWEEN :VonDiverses AND :BisDiverses
    
    ORDER BY Charge->Lieferant->Adresse->Adressnummer, Charge->Artikel->ArtikelNr, Charge->EingangsDatum]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.AbrechnungstypAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>62262,42483.325994</TimeCreated>

<Query name="ListeGesamt">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[                SELECT %ID, PositionsNr, DBAgrofreshEK_SD.Hilfstexte_GetTextClass(%ID, :MandantOid, :Lang) As Text, 
                Mandant
                FROM DBAgrofreshEK_SD.Abrechnungstyp
                WHERE Mandant = :MandantOid AND LENGTH(DBAgrofreshEK_SD.Hilfstexte_GetTextClass(%ID, :MandantOid, :Lang)) > 0 ORDER BY PositionsNr]]></SqlQuery>
</Query>

<Query name="ListeDruck">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[                SELECT %ID, PositionsNr AS Code, DBAgrofreshEK_SD.Lieferart_GetTextClass(%ID, :MandantOid, :Lang) As wert1, '' As wert2, 
                Mandant
                FROM DBAgrofreshEK_SD.Abrechnungstyp as Satammdate 
                WHERE Mandant = :MandantOid AND LENGTH(DBAgrofreshEK_SD.Lieferart_GetTextClass(%ID, :MandantOid, :Lang)) > 0 ORDER BY PositionsNr]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.BestellartAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61289,29234.829889</TimeCreated>

<Query name="ListeGesamt">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, PositionsNr, DBAgrofreshEK_SD.Hilfstexte_GetTextClass(%ID, :MandantOid, :Lang) As Text, 
	Mandant
	FROM DBAgrofreshEK_SD.Bestellart 
	WHERE Mandant = :MandantOid AND LENGTH(DBAgrofreshEK_SD.Hilfstexte_GetTextClass(%ID, :MandantOid, :Lang)) > 0 ORDER BY PositionsNr]]></SqlQuery>
</Query>

<Query name="ListeDruck">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, PositionsNr AS Code, DBAgrofreshEK_SD.Bestellart_GetTextClass(%ID, :MandantOid, :Lang) As wert1, '' As wert2, 
	Mandant
	FROM DBAgrofreshEK_SD.Bestellart as Satammdate 
	WHERE Mandant = :MandantOid AND LENGTH(DBAgrofreshEK_SD.Bestellart_GetTextClass(%ID, :MandantOid, :Lang)) > 0 ORDER BY PositionsNr]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.DrucktypAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61353,47586.630363</TimeCreated>

<Query name="ListeGesamt">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT 	%ID, PositionsNr, DBAgrofreshEK_SD.Hilfstexte_GetTextClass(%ID, :MandantOid, :Lang) As Text, 
			Mandant, 
			DBAgrofreshEK_SD.DTypForm_GetFormularNrByDrucktyp(ID, DBAgrofreshEK.Konst_FormularTypOA()) AS FormularOA, 
			DBAgrofreshEK_SD.DTypForm_GetFormularNrByDrucktyp(ID, DBAgrofreshEK.Konst_FormularTypBE()) AS FormularBE, 
			DBAgrofreshEK_SD.DTypForm_GetFormularNrByDrucktyp(ID, DBAgrofreshEK.Konst_FormularTypAS()) AS FormularAS, 
			DBAgrofreshEK_SD.DTypForm_GetFormularNrByDrucktyp(ID, DBAgrofreshEK.Konst_FormularTypGS()) AS FormularGS, 
			DBAgrofreshEK_SD.DTypForm_GetFormularNrByDrucktyp(ID, DBAgrofreshEK.Konst_FormularTypAR()) AS FormularAR, 
			DBAgrofreshEK_SD.DTypForm_GetFormularNrByDrucktyp(ID, DBAgrofreshEK.Konst_FormularTypGU()) AS FormularGU, 
			DBAgrofreshEK_SD.DTypForm_GetFormularNrByDrucktyp(ID, DBAgrofreshEK.Konst_FormularTypSAR()) AS FormularSAR
	FROM DBAgrofreshEK_SD.Drucktyp 
	WHERE Mandant = :MandantOid ORDER BY PositionsNr</SqlQuery>
</Query>

<Query name="ListeDruck">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT %ID, PositionsNr AS Nummer, DBAgrofreshEK_SD.Hilfstexte_GetTextClass(%ID, :MandantOid, :Lang) As Wert1, '' As Wert2, 
	Mandant
	FROM DBAgrofreshEK_SD.Drucktyp 
	WHERE Mandant = :MandantOid ORDER BY PositionsNr</SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.FormGebFussAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61438,35736.612697</TimeCreated>

<Query name="ListeGesamt">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT %ID, Nummer, DBAgrofreshEK_SD.FormGebFuss_GetBezeichnungClass(%ID, :MandantOid, :Lang) As Bezeichnung, Mandant, DruckAlsFusszeile, AbstandOben
	FROM DBAgrofreshEK_SD.FormGebFuss 
	WHERE Mandant = :MandantOid ORDER BY Nummer</SqlQuery>
</Query>

<Query name="ListeNurVerrechenbare">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Nummer, DBAgrofreshEK_SD.FormGebFuss_GetBezeichnungClass(%ID, :MandantOid, :Lang) As Bezeichnung, Mandant, DruckAlsFusszeile, AbstandOben
	FROM DBAgrofreshEK_SD.FormGebFuss 
	WHERE Mandant = :MandantOid AND Verrechnung >= DBAgrofresh.Konst_GebindeVerrechnen() ORDER BY Nummer]]></SqlQuery>
</Query>

<Query name="ListeNurNichtVerrechenbare">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Nummer, DBAgrofreshEK_SD.FormGebFuss_GetBezeichnungClass(%ID, :MandantOid, :Lang) As Bezeichnung, Mandant, DruckAlsFusszeile, AbstandOben
	FROM DBAgrofreshEK_SD.FormGebFuss 
	WHERE Mandant = :MandantOid AND Verrechnung < DBAgrofresh.Konst_GebindeVerrechnen()  ORDER BY Nummer]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.FormGebFussEAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61438,35847.18619</TimeCreated>

<Query name="ListeAktive">
<Type>%SQLQuery</Type>
<FormalSpec>FormGebFussOid:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	%ID, Nummer, Aktiv, Index, Breite, Ausrichtung, 
			FontName, FontSize, FontBold, FontItalic, FontStrikeout, FontUnderline, FontColor,
			DBAgrofreshEK_SD.FormGebFussE_GetTextClass(%ID, :MandantOid, :Lang) As Text,
			RahmenAktivLinks, RahmenAktivRechts, RahmenAktivOben, RahmenAktivUnten,
			RahmenAbstandLinks, RahmenAbstandRechts, RahmenAbstandOben, RahmenAbstandUnten,
			RahmenBreiteLinks, RahmenBreiteRechts, RahmenBreiteOben, RahmenBreiteUnten,
			DetailFontName, DetailFontSize, DetailFontBold, DetailFontItalic, DetailFontStrikeout, DetailFontUnderline, DetailFontColor,
			DetailRahmenAktivLinks, DetailRahmenAktivRechts, DetailRahmenAktivOben, DetailRahmenAktivUnten,
			DetailRahmenAbstandLinks, DetailRahmenAbstandRechts, DetailRahmenAbstandOben, DetailRahmenAbstandUnten,
			DetailRahmenBreiteLinks, DetailRahmenBreiteRechts, DetailRahmenBreiteOben, DetailRahmenBreiteUnten,
			FormularGebindeFuss->Verrechnung As Verrechnung, FormatAnzDezStellen
	FROM DBAgrofreshEK_SD.FormGebFussE 
	WHERE FormularGebindeFuss->ID=:FormGebFussOid AND Aktiv=1 ORDER BY Index]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.FormularAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61352,31327.386725</TimeCreated>

<Query name="ListeGesamt">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT %ID, Nummer, DBAgrofreshEK_SD.Formular_GetBezeichnungClass(%ID, :MandantOid, :Lang) As Bezeichnung, Mandant
	FROM DBAgrofreshEK_SD.Formular 
	WHERE Mandant = :MandantOid ORDER BY Nummer</SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.FusstextAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61389,32684.080137</TimeCreated>

<Query name="ListeGesamt">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[ 
	SELECT %ID, PositionsNr, 
	DBAgrofreshEK_SD.Fusstext_GetText1Class(%ID, :MandantOid, :Lang) As Text1,
	DBAgrofreshEK_SD.Fusstext_GetText2Class(%ID, :MandantOid, :Lang) As Text2,
	DBAgrofreshEK_SD.Fusstext_GetText3Class(%ID, :MandantOid, :Lang) As Text3,
	DBAgrofreshEK_SD.Fusstext_GetText4Class(%ID, :MandantOid, :Lang) As Text4,
	DBAgrofreshEK_SD.Fusstext_GetText5Class(%ID, :MandantOid, :Lang) As Text5,
	DBAgrofreshEK_SD.Fusstext_GetText6Class(%ID, :MandantOid, :Lang) As Text6,
	DBAgrofreshEK_SD.Fusstext_GetText7Class(%ID, :MandantOid, :Lang) As Text7,
	DBAgrofreshEK_SD.Fusstext_GetText8Class(%ID, :MandantOid, :Lang) As Text8,
	DBAgrofreshEK_SD.Fusstext_GetText9Class(%ID, :MandantOid, :Lang) As Text9,
	DBAgrofreshEK_SD.Fusstext_GetText10Class(%ID, :MandantOid, :Lang) As Text10,
	Mandant
	FROM DBAgrofreshEK_SD.Fusstext
	WHERE Mandant = :MandantOid 
	AND (LENGTH(DBAgrofreshEK_SD.Fusstext_GetText1Class(%ID, :MandantOid, :Lang)) > 0  
	OR
	LENGTH(DBAgrofreshEK_SD.Fusstext_GetText2Class(%ID, :MandantOid, :Lang)) > 0
	OR
	LENGTH(DBAgrofreshEK_SD.Fusstext_GetText3Class(%ID, :MandantOid, :Lang)) > 0
	OR
	LENGTH(DBAgrofreshEK_SD.Fusstext_GetText4Class(%ID, :MandantOid, :Lang)) > 0
	OR
	LENGTH(DBAgrofreshEK_SD.Fusstext_GetText5Class(%ID, :MandantOid, :Lang)) > 0
	OR
	LENGTH(DBAgrofreshEK_SD.Fusstext_GetText6Class(%ID, :MandantOid, :Lang)) > 0
	OR
	LENGTH(DBAgrofreshEK_SD.Fusstext_GetText7Class(%ID, :MandantOid, :Lang)) > 0
	OR
	LENGTH(DBAgrofreshEK_SD.Fusstext_GetText8Class(%ID, :MandantOid, :Lang)) > 0
	OR
	LENGTH(DBAgrofreshEK_SD.Fusstext_GetText9Class(%ID, :MandantOid, :Lang)) > 0
	OR
	LENGTH(DBAgrofreshEK_SD.Fusstext_GetText10Class(%ID, :MandantOid, :Lang)) > 0)
	ORDER BY PositionsNr]]></SqlQuery>
</Query>

<Query name="ListeDruck">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, PositionsNr AS Code, DBAgrofreshEK_SD.Fusstext_GetText1Class(%ID, :MandantOid, :Lang) As wert1, DBAgrofreshEK_SD.Fusstext_GetText2Class(%ID, :MandantOid, :Lang) As wert2, 
	Mandant
	FROM DBAgrofreshEK_SD.Fusstext as Satammdate 
	WHERE Mandant = :MandantOid AND LENGTH(DBAgrofreshEK_SD.Fusstext_GetText1Class(%ID, :MandantOid, :Lang)) > 0 ORDER BY PositionsNr]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.LieferartAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61248,31498.296038</TimeCreated>

<Query name="ListeGesamt">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, PositionsNr, DBAgrofreshEK_SD.Hilfstexte_GetTextClass(%ID, :MandantOid, :Lang) As Text, 
	Mandant, Transporteur
	FROM DBAgrofreshEK_SD.Lieferart
	WHERE Mandant = :MandantOid AND LENGTH(DBAgrofreshEK_SD.Hilfstexte_GetTextClass(%ID, :MandantOid, :Lang)) > 0 ORDER BY PositionsNr]]></SqlQuery>
</Query>

<Query name="ListeDruck">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, PositionsNr AS Code, DBAgrofreshEK_SD.Lieferart_GetTextClass(%ID, :MandantOid, :Lang) As wert1, '' As wert2, 
	Mandant
	FROM DBAgrofreshEK_SD.Lieferart as Satammdate 
	WHERE Mandant = :MandantOid AND LENGTH(DBAgrofreshEK_SD.Lieferart_GetTextClass(%ID, :MandantOid, :Lang)) > 0 ORDER BY PositionsNr]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.MargeAbtAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61318,38649.590957</TimeCreated>

<Query name="ListeByMarge">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,Marge:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Marge, MargenSatz, AbDatum, Marge->%ID AS MargeID,
		   Marge->Margencode As MargenCode, DBAgrofreshEK_SD.Marge_GetTextClass(Marge, :MandantOid, :Lang) As Margentext,
		   DBCore.Abteilung_GetBezeichnungClass(Abteilung->%ID, :MandantOid, :Lang) As AbteilungBez
	       FROM DBAgrofreshEK_SD.MargeAbt WHERE Marge = :Marge Order by Abteilung->Abteilungnr, AbDatum]]></SqlQuery>
</Query>

<Query name="ListeByAbteilung">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,Abteilung:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Marge, MargenSatz, AbDatum, Marge->%ID AS MargeID,
		   Marge->Margencode As MargenCode, DBAgrofreshEK_SD.Marge_GetTextClass(Marge, :MandantOid, :Lang) As Margentext,
		   DBCore.Abteilung_GetBezeichnungClass(Abteilung->%ID, :MandantOid, :Lang) As AbteilungBez
	       FROM DBAgrofreshEK_SD.MargeAbt WHERE Abteilung = :Abteilung Order by Abteilung->Abteilungnr, Marge->Margencode, AbDatum]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.MargenAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61263,30284.941886</TimeCreated>

<Query name="ListeGesamt">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT %ID, Margencode, DBAgrofreshEK_SD.Marge_GetTextClass(%ID, :MandantOid, :Lang) As Text, 
	Mandant
	FROM DBAgrofreshEK_SD.Marge
	WHERE Mandant = :MandantOid ORDER BY Margencode</SqlQuery>
</Query>

<Query name="ListeDruck">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT %ID, Margencode AS Code, DBAgrofreshEK_SD.Marge_GetTextClass(%ID, :MandantOid, :Lang) As wert1, '' As wert2, 
	Mandant
	FROM DBAgrofreshEK_SD.Marge as Satammdate 
	WHERE Mandant = :MandantOid ORDER BY Margencode</SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.StrgBestAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61409,33735.778238</TimeCreated>

<Query name="ListeGesamt">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, PositionsNr, DBAgrofreshEK_SD.Hilfstexte_GetTextClass(%ID, :MandantOid, :Lang) As Text, 
	Mandant
	FROM DBAgrofreshEK_SD.StrgBest 
	WHERE Mandant = :MandantOid AND LENGTH(DBAgrofreshEK_SD.Hilfstexte_GetTextClass(%ID, :MandantOid, :Lang)) > 0 ORDER BY PositionsNr]]></SqlQuery>
</Query>

<Query name="ListeDruck">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, PositionsNr AS Code, DBAgrofreshEK_SD.StrgBest_GetTextClass(%ID, :MandantOid, :Lang) As wert1, '' As wert2, 
	Mandant
	FROM DBAgrofreshEK_SD.StrgBest as Satammdate 
	WHERE Mandant = :MandantOid AND LENGTH(DBAgrofreshEK_SD.StrgBest_GetTextClass(%ID, :MandantOid, :Lang)) > 0 ORDER BY PositionsNr]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.TblDataEntryAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61723,34814.680993</TimeCreated>

<Query name="ListeAktive">
<Type>%SQLQuery</Type>
<FormalSpec>TblKopfOid:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	%ID, Nummer, Aktiv, Index, Breite, Ausrichtung, 
			Font_Name, Font_Size, Font_Bold, Font_Italic, Font_Strikeout, Font_Underline, Font_Color,
			Rahmen_AktivLinks, Rahmen_AktivRechts, Rahmen_AktivOben, Rahmen_AktivUnten,
			Rahmen_AbstandLinks, Rahmen_AbstandRechts, Rahmen_AbstandOben, Rahmen_AbstandUnten,
			Rahmen_BreiteLinks, Rahmen_BreiteRechts, Rahmen_BreiteOben, Rahmen_BreiteUnten,
			Format_AnzDezStellen, Format_Einheit, Format_KeineAusgabe, Format_Datum, Format_Totalisieren,
			DBAgrofreshEK_SD.TblDataE_GetFormatTextFallsLeerClass(%ID, :MandantOid, :Lang) As Format_TextFallsLeer
	FROM DBAgrofreshEK_SD.TblDataE 
	WHERE Tabellenkopf->ID=:TblKopfOid AND Aktiv=1 ORDER BY Index]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.TblFussAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61723,34838.2213</TimeCreated>

<Query name="ListeGesamt">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT %ID, Nummer, DBAgrofreshEK_SD.TblFuss_GetBezeichnungClass(%ID, :MandantOid, :Lang) As Bezeichnung, Mandant
	FROM DBAgrofreshEK_SD.TblFuss 
	WHERE Mandant = :MandantOid ORDER BY Nummer</SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.TblFussEntryAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61723,34875.368298</TimeCreated>

<Query name="ListeAktive">
<Type>%SQLQuery</Type>
<FormalSpec>TblFussOid:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	%ID, Nummer, Aktiv, Index, Breite, Ausrichtung, 
			Font_Name, Font_Size, Font_Bold, Font_Italic, Font_Strikeout, Font_Underline, Font_Color,
			DBAgrofreshEK_SD.TblFussE_GetTextClass(%ID, :MandantOid, :Lang) As Text,
			Rahmen_AktivLinks, Rahmen_AktivRechts, Rahmen_AktivOben, Rahmen_AktivUnten,
			Rahmen_AbstandLinks, Rahmen_AbstandRechts, Rahmen_AbstandOben, Rahmen_AbstandUnten,
			Rahmen_BreiteLinks, Rahmen_BreiteRechts, Rahmen_BreiteOben, Rahmen_BreiteUnten, 
			DetailFont_Name, DetailFont_Size, DetailFont_Bold, DetailFont_Italic, DetailFont_Strikeout, DetailFont_Underline, DetailFont_Color,
			DetailRahmen_AktivLinks, DetailRahmen_AktivRechts, DetailRahmen_AktivOben, DetailRahmen_AktivUnten,
			DetailRahmen_AbstandLinks, DetailRahmen_AbstandRechts, DetailRahmen_AbstandOben, DetailRahmen_AbstandUnten,
			DetailRahmen_BreiteLinks, DetailRahmen_BreiteRechts, DetailRahmen_BreiteOben, DetailRahmen_BreiteUnten, 
			TotalFont_Name, TotalFont_Size, TotalFont_Bold, TotalFont_Italic, TotalFont_Strikeout, TotalFont_Underline, TotalFont_Color,
			TotalRahmen_AktivLinks, TotalRahmen_AktivRechts, TotalRahmen_AktivOben, TotalRahmen_AktivUnten,
			TotalRahmen_AbstandLinks, TotalRahmen_AbstandRechts, TotalRahmen_AbstandOben, TotalRahmen_AbstandUnten,
			TotalRahmen_BreiteLinks, TotalRahmen_BreiteRechts, TotalRahmen_BreiteOben, TotalRahmen_BreiteUnten,
			DBAgrofreshEK_SD.TblFussE_GetTotalTextClass(%ID, :MandantOid, :Lang) As TotalText
	FROM DBAgrofreshEK_SD.TblFussE 
	WHERE Tabellenfuss->ID=:TblFussOid AND Aktiv=1 ORDER BY Index]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.TblFussSkontoEntryAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61723,34911.433615</TimeCreated>

<Query name="ListeAktive">
<Type>%SQLQuery</Type>
<FormalSpec>TblFussOid:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	%ID, Nummer, Aktiv, Index, Breite, Ausrichtung, 
			Font_Name, Font_Size, Font_Bold, Font_Italic, Font_Strikeout, Font_Underline, Font_Color,
			DBAgrofreshEK_SD.TblFussSktE_GetTextClass(%ID, :MandantOid, :Lang) As Text,
			Rahmen_AktivLinks, Rahmen_AktivRechts, Rahmen_AktivOben, Rahmen_AktivUnten,
			Rahmen_AbstandLinks, Rahmen_AbstandRechts, Rahmen_AbstandOben, Rahmen_AbstandUnten,
			Rahmen_BreiteLinks, Rahmen_BreiteRechts, Rahmen_BreiteOben, Rahmen_BreiteUnten
	FROM DBAgrofreshEK_SD.TblFussSktE 
	WHERE Tabellenfuss->ID=:TblFussOid AND Aktiv=1 ORDER BY Index]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.TblKopfAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61723,34934.903343</TimeCreated>

<Query name="ListeGesamt">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT %ID, Nummer, DBAgrofreshEK_SD.TblKopf_GetBezeichnungClass(%ID, :MandantOid, :Lang) As Bezeichnung, Mandant
	FROM DBAgrofreshEK_SD.TblKopf 
	WHERE Mandant = :MandantOid ORDER BY Nummer</SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.TblKopfEntryAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61723,34969.261393</TimeCreated>

<Query name="ListeAktive">
<Type>%SQLQuery</Type>
<FormalSpec>TblKopfOid:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	%ID, Nummer, Aktiv, Index, Breite, Ausrichtung, 
			Font_Name, Font_Size, Font_Bold, Font_Italic, Font_Strikeout, Font_Underline, Font_Color,
			DBAgrofreshEK_SD.TblKopfE_GetTextClass(%ID, :MandantOid, :Lang) As Text,
			Rahmen_AktivLinks, Rahmen_AktivRechts, Rahmen_AktivOben, Rahmen_AktivUnten,
			Rahmen_AbstandLinks, Rahmen_AbstandRechts, Rahmen_AbstandOben, Rahmen_AbstandUnten,
			Rahmen_BreiteLinks, Rahmen_BreiteRechts, Rahmen_BreiteOben, Rahmen_BreiteUnten
	FROM DBAgrofreshEK_SD.TblKopfE
	WHERE Tabellenkopf->ID=:TblKopfOid AND Aktiv=1 ORDER BY Index]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.TblSREntryAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61775,58873.200061</TimeCreated>

<Query name="ListeAktive">
<Type>%SQLQuery</Type>
<FormalSpec>TblKopfOid:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	%ID, Nummer, Aktiv, Index, Breite, Ausrichtung, 
			Font_Name, Font_Size, Font_Bold, Font_Italic, Font_Strikeout, Font_Underline, Font_Color,
			DBAgrofreshEK_SD.TblSREntry_GetTextClass(%ID, :MandantOid, :Lang) As Text,
			Rahmen_AktivLinks, Rahmen_AktivRechts, Rahmen_AktivOben, Rahmen_AktivUnten,
			Rahmen_AbstandLinks, Rahmen_AbstandRechts, Rahmen_AbstandOben, Rahmen_AbstandUnten,
			Rahmen_BreiteLinks, Rahmen_BreiteRechts, Rahmen_BreiteOben, Rahmen_BreiteUnten,
			DetailFont_Name, DetailFont_Size, DetailFont_Bold, DetailFont_Italic, DetailFont_Strikeout, DetailFont_Underline, DetailFont_Color,
			DetailRahmen_AktivLinks, DetailRahmen_AktivRechts, DetailRahmen_AktivOben, DetailRahmen_AktivUnten,
			DetailRahmen_AbstandLinks, DetailRahmen_AbstandRechts, DetailRahmen_AbstandOben, DetailRahmen_AbstandUnten,
			DetailRahmen_BreiteLinks, DetailRahmen_BreiteRechts, DetailRahmen_BreiteOben, DetailRahmen_BreiteUnten
	FROM DBAgrofreshEK_SD.TblSREntry 
	WHERE Tabellenkopf->ID=:TblKopfOid AND Aktiv=1 ORDER BY Index]]></SqlQuery>
</Query>

<Query name="ListeAktiveDetail">
<Type>%SQLQuery</Type>
<FormalSpec>TblKopfOid:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	%ID, Nummer, Aktiv, Index, Breite, Ausrichtung, 
			DBAgrofreshEK_SD.TblSREntry_GetTextClass(%ID, :MandantOid, :Lang) As Text,
			DetailFont_Name AS Font_Name, DetailFont_Size AS Font_Size, DetailFont_Bold AS Font_Bold, DetailFont_Italic AS Font_Italic, 
			DetailFont_Strikeout AS Font_Strikeout, DetailFont_Underline AS Font_Underline, DetailFont_Color AS Font_Color,
			DetailRahmen_AktivLinks AS Rahmen_AktivLinks, DetailRahmen_AktivRechts AS Rahmen_AktivRechts, DetailRahmen_AktivOben AS Rahmen_AktivOben,
			DetailRahmen_AktivUnten AS Rahmen_AktivUnten,DetailRahmen_AbstandLinks AS Rahmen_AbstandLinks, DetailRahmen_AbstandRechts AS Rahmen_AbstandRechts,
			DetailRahmen_AbstandOben AS Rahmen_AbstandOben, DetailRahmen_AbstandUnten AS Rahmen_AbstandUnten, DetailRahmen_BreiteLinks AS Rahmen_BreiteLinks, 
			DetailRahmen_BreiteRechts AS Rahmen_BreiteRechts, DetailRahmen_BreiteOben AS Rahmen_BreiteOben, DetailRahmen_BreiteUnten AS Rahmen_BreiteUnten,
			Format_AnzDezStellen AS Format_AnzDezStellen, Format_Einheit AS Format_Einheit, Format_KeineAusgabe AS Format_KeineAusgabe, 
			Format_Datum AS Format_Datum, Format_Totalisieren AS Format_Totalisieren, DBAgrofreshEK_SD.TblSREntry_GetFormatTextFallsLeerClass(%ID, :MandantOid, :Lang) As Format_TextFallsLeer
	FROM DBAgrofreshEK_SD.TblSREntry 
	WHERE Tabellenkopf->ID=:TblKopfOid AND Aktiv=1 ORDER BY Index]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.TblSRgfEntryAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61828,42540.438959</TimeCreated>

<Query name="ListeAktive">
<Type>%SQLQuery</Type>
<FormalSpec>TblKopfOid:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	%ID, Nummer, Aktiv, Index, Breite, Ausrichtung, 
			Font_Name, Font_Size, Font_Bold, Font_Italic, Font_Strikeout, Font_Underline, Font_Color,
			DBAgrofreshEK_SD.TblSRgfEntry_GetTextClass(%ID, :MandantOid, :Lang) As Text,
			Rahmen_AktivLinks, Rahmen_AktivRechts, Rahmen_AktivOben, Rahmen_AktivUnten,
			Rahmen_AbstandLinks, Rahmen_AbstandRechts, Rahmen_AbstandOben, Rahmen_AbstandUnten,
			Rahmen_BreiteLinks, Rahmen_BreiteRechts, Rahmen_BreiteOben, Rahmen_BreiteUnten
	FROM DBAgrofreshEK_SD.TblSRgfEntry 
	WHERE Tabellenkopf->ID=:TblKopfOid AND Aktiv=1 ORDER BY Index]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.TblSRgkEntryAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61775,58915.485657</TimeCreated>

<Query name="ListeAktive">
<Type>%SQLQuery</Type>
<FormalSpec>TblKopfOid:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	%ID, Nummer, Aktiv, Index, Breite, Ausrichtung, 
			Font_Name, Font_Size, Font_Bold, Font_Italic, Font_Strikeout, Font_Underline, Font_Color,
			DBAgrofreshEK_SD.TblSRgkEntry_GetTextClass(%ID, :MandantOid, :Lang) As Text,
			Rahmen_AktivLinks, Rahmen_AktivRechts, Rahmen_AktivOben, Rahmen_AktivUnten,
			Rahmen_AbstandLinks, Rahmen_AbstandRechts, Rahmen_AbstandOben, Rahmen_AbstandUnten,
			Rahmen_BreiteLinks, Rahmen_BreiteRechts, Rahmen_BreiteOben, Rahmen_BreiteUnten
	FROM DBAgrofreshEK_SD.TblSRgkEntry 
	WHERE Tabellenkopf->ID=:TblKopfOid AND Aktiv=1 ORDER BY Index]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.SD.VerbeitungstypAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61289,29234.829889</TimeCreated>

<Query name="ListeGesamt">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, PositionsNr, DBAgrofreshEK_SD.Hilfstexte_GetTextClass(%ID, :MandantOid, :Lang) As Text, 
	Mandant
	FROM DBAgrofreshEK_SD.Verarbeitungstyp 
	WHERE Mandant = :MandantOid AND LENGTH(DBAgrofreshEK_SD.Hilfstexte_GetTextClass(%ID, :MandantOid, :Lang)) > 0 ORDER BY PositionsNr]]></SqlQuery>
</Query>

<Query name="ListeDruck">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, PositionsNr AS Code, DBAgrofreshEK_SD.Verarbeitungstyp_GetTextClass(%ID, :MandantOid, :Lang) As wert1, '' As wert2, 
	Mandant
	FROM DBAgrofreshEK_SD.Verarbeitungstyp as Satammdate 
	WHERE Mandant = :MandantOid AND LENGTH(DBAgrofreshEK_SD.Verarbeitungstyp_GetTextClass(%ID, :MandantOid, :Lang)) > 0 ORDER BY PositionsNr]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.StatistikDetailiertAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61874,53970.199297</TimeCreated>

<Query name="ListeArtikelUmsatzWoche">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelVon:%String,ArtikelBis:%String,ArtGrpVon:%Integer,ArtGrpBis:%Integer,DatumVon:%Date,DatumBis:%Date,DatumVJVon:%Date,DatumVJBis:%Date,MandantOid:%String,Lang:%String,OnlyLiefer:%Boolean,OnlyVerbucht:%Boolean,DayDiff:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 
		SUM(BetragExkl) AS BetragExkl, SUM(BetragInkl) AS BetragInkl, SUM(Menge) AS Menge, SUM(BetragVorjahrExkl) AS BetragVorjahrExkl, SUM(BetragVorjahrInkl) AS BetragVorjahrInkl, SUM(MengeVorjahr) AS MengeVorjahr,
		MengeneinheitArtikel, Mengeneinheit, "Artikel.ArtikelNr", "Artikel.Artikeltext", "Artikel.ArtikelGrpNr", "Artikel.ArtikelGrpText", Woche, Jahr, "Steuerungscode"
	FROM (
	SELECT 
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Menge) As Menge,  
		0 As BetragVorjahrExkl,
		0 As BetragVorjahrInkl,
		0 As MengeVorjahr,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		DATEPART(WEEK,DATEADD(DAY, :DayDiff, CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)) AS Woche,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Jahr
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr, DATEPART(WEEK,DATEADD(DAY, :DayDiff, CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END))
	 
	 UNION ALL
	    SELECT 
	   0 As BetragInkl,
	    0 As BetragExkl,
		0 As Menge,
		SUM(Nettobetrag2ExklMwstEW) As BetragVorjahrExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragVorjahrInkl,
		SUM(Menge) As MengeVorjahr,  
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		DATEPART(WEEK,DATEADD(DAY, :DayDiff, CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)) AS Woche,
		DATEPART(YEAR,DATEADD(YEAR, 1,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)) AS Jahr
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((BestellungsKopf->Annahmedatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 1) or (BestellungsKopf->Abrechnungsdatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 0))
	    AND (BestellungsKopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr, DATEPART(WEEK,DATEADD(DAY, :DayDiff, CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END))
	)
	GROUP BY "Artikel.ArtikelNr", Jahr, Woche
	ORDER BY "Artikel.ArtikelNr", Jahr, Woche]]></SqlQuery>
</Query>

<Query name="ListeArtikelUmsatzMonat">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelVon:%String,ArtikelBis:%String,ArtGrpVon:%Integer,ArtGrpBis:%Integer,DatumVon:%Date,DatumBis:%Date,DatumVJVon:%Date,DatumVJBis:%Date,MandantOid:%String,Lang:%String,OnlyLiefer:%Boolean,OnlyVerbucht:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 
		SUM(BetragExkl) AS BetragExkl, SUM(BetragInkl) AS BetragInkl, SUM(Menge) AS Menge, SUM(BetragVorjahrExkl) AS BetragVorjahrExkl, SUM(BetragVorjahrInkl) AS BetragVorjahrInkl, SUM(MengeVorjahr) AS MengeVorjahr,
		MengeneinheitArtikel, Mengeneinheit, "Artikel.ArtikelNr", "Artikel.Artikeltext", "Artikel.ArtikelGrpNr", "Artikel.ArtikelGrpText", Monat, Jahr, "Steuerungscode"
	FROM (
	SELECT 
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Menge) As Menge,  
		0 As BetragVorjahrExkl,
		0 As BetragVorjahrInkl,
		0 As MengeVorjahr,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		DATEPART(MONTH,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Monat,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Jahr
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr, DATEPART(MONTH,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)
	 
	 UNION ALL
	    SELECT 
	    0 As BetragInkl,
	    0 As BetragExkl,
		0 As Menge,
		SUM(Nettobetrag2ExklMwstEW) As BetragVorjahrExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragVorjahrInkl,
		SUM(Menge) As MengeVorjahr,  
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		DATEPART(MONTH,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Monat,
		DATEPART(YEAR,DATEADD(YEAR, 1,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)) AS Jahr
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((BestellungsKopf->Annahmedatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 1) or (BestellungsKopf->Abrechnungsdatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 0))
	    AND (BestellungsKopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr, DATEPART(MONTH,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE Bestellungskopf->Abrechnungsdatum END)
	)
	GROUP BY "Artikel.ArtikelNr", Jahr, Monat
	ORDER BY "Artikel.ArtikelNr", Jahr, Monat]]></SqlQuery>
</Query>

<Query name="ListeArtikelUmsatzTag">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelVon:%String,ArtikelBis:%String,ArtGrpVon:%Integer,ArtGrpBis:%Integer,DatumVon:%Date,DatumBis:%Date,DatumVJVon:%Date,DatumVJBis:%Date,MandantOid:%String,Lang:%String,OnlyLiefer:%Boolean,OnlyVerbucht:%Boolean</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 
		SUM(BetragExkl) AS BetragExkl, SUM(BetragInkl) AS BetragInkl, SUM(Menge) AS Menge, SUM(BetragVorjahrExkl) AS BetragVorjahrExkl, SUM(BetragVorjahrInkl) AS BetragVorjahrInkl, SUM(MengeVorjahr) AS MengeVorjahr,
		MengeneinheitArtikel, Mengeneinheit, "Artikel.ArtikelNr", "Artikel.Artikeltext", "Artikel.ArtikelGrpNr", "Artikel.ArtikelGrpText", Datum, Jahr, Vorjahr, "Steuerungscode"
	FROM (
	SELECT 
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Menge) As Menge,  
		0 As BetragVorjahrExkl,
		0 As BetragVorjahrInkl,
		0 As MengeVorjahr,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END AS Datum,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) -1) AS Vorjahr,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)) AS Jahr
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr, CASE WHEN :OnlyLiefer = 1 THEN Bestellungskopf->Annahmedatum ELSE Bestellungskopf->Abrechnungsdatum END
	 
	 UNION ALL
	    SELECT 
	    0 As BetragInkl,
	    0 As BetragExkl,
		0 As Menge,
		SUM(Nettobetrag2ExklMwstEW) As BetragVorjahrExkl,
		SUM(Nettobetrag2InklMwstEW) As BetragVorjahrInkl,
		SUM(Menge) As MengeVorjahr,  
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		NVL(Mwst->SteuerungInklExkl,0) AS "Steuerungscode",
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		CAST(DATEADD(YEAR, 1, CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE Bestellungskopf->Abrechnungsdatum END) AS DATE) AS Datum,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE Bestellungskopf->Abrechnungsdatum END) AS Vorjahr,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE Bestellungskopf->Abrechnungsdatum END) +1) AS Jahr
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((BestellungsKopf->Annahmedatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 1) or (BestellungsKopf->Abrechnungsdatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 0))
	    AND (BestellungsKopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr, CASE WHEN :OnlyLiefer = 1 THEN Bestellungskopf->Annahmedatum ELSE Bestellungskopf->Abrechnungsdatum END
	)
	GROUP BY "Artikel.ArtikelNr", Datum
	ORDER BY "Artikel.ArtikelNr", Datum]]></SqlQuery>
</Query>

<Query name="ListeArtikelLieferUmsatzTag">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelVon:%String,ArtikelBis:%String,ArtGrpVon:%Integer,ArtGrpBis:%Integer,AdresseVon:%Integer,AdresseBis:%Integer,DatumVon:%Date,DatumBis:%Date,DatumVJVon:%Date,DatumVJBis:%Date,OnlyLiefer:%Boolean,OnlyVerbucht:%Boolean,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 
		SUM(BetragInkl) AS BetragInkl, SUM(BetragExkl) AS BetragExkl, SUM(Menge) AS Menge, SUM(BetragVorjahrInkl) AS BetragVorjahrInkl,  SUM(BetragVorjahrExkl) AS BetragVorjahrExkl, SUM(MengeVorjahr) AS MengeVorjahr,
		MengeneinheitArtikel, Mengeneinheit, "Artikel.ArtikelNr", "Artikel.Artikeltext", "Artikel.ArtikelGrpNr", "Artikel.ArtikelGrpText",
		"Adresse.Adressnummer", "Adresse.Name", "Adresse.Strasse", "Adresse.Plz", "Adresse.Ort", Datum, CAST(DATEPART(DAY,Datum) As VARCHAR(2)) || '.'||CAST(DATEPART(MONTH,Datum) As VARCHAR(2))|| '.'  AS DetText, Vorjahr, Jahr 
	FROM (
	SELECT 
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Menge) As Menge,  
		0 As BetragVorjahrInkl,
		0 As BetragVorjahrExkl,
		0 As MengeVorjahr,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		BestellungsKopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(BestellungsKopf->Adresse->Adresse->Adresscode, BestellungsKopf->Adresse->Adresse->Name, BestellungsKopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		BestellungsKopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		BestellungsKopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		BestellungsKopf->Adresse->Adresse->Ort 			AS "Adresse.Ort",
		CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END AS Datum,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) -1) AS Vorjahr,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Jahr
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE BestellungsKopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND BestellungsKopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	    AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((Bestellungskopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 1) or (Bestellungskopf->Abrechnungsdatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 0))
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr, BestellungsKopf->Adresse->Adresse->Adressnummer, BestellungsKopf->Annahmedatum
	 
	 UNION ALL
	    SELECT 
	    0 As BetragInkl,
	    0 As BetragExkl,
		0 As Menge,
		SUM(Nettobetrag2InklMwstEW) As BetragVorjahrInkl,
		SUM(Nettobetrag2ExklMwstEW) As BetragVorjahrExkl,
		SUM(Menge) As MengeVorjahr,    
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		BestellungsKopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(BestellungsKopf->Adresse->Adresse->Adresscode, BestellungsKopf->Adresse->Adresse->Name, BestellungsKopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		BestellungsKopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		BestellungsKopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		BestellungsKopf->Adresse->Adresse->Ort 			AS "Adresse.Ort",
		CAST(DATEADD(YEAR, 1, CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS DATE) AS Datum,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Vorjahr,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)+1) AS Jahr
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE BestellungsKopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND BestellungsKopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	   	AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((BestellungsKopf->Annahmedatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 1) or (BestellungsKopf->Abrechnungsdatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 0))
	    AND (BestellungsKopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr, BestellungsKopf->Adresse->Adresse->Adressnummer, BestellungsKopf->Annahmedatum
	)
	GROUP BY "Artikel.ArtikelNr", "Adresse.Adressnummer", Datum
	ORDER BY "Artikel.ArtikelNr", "Adresse.Adressnummer", Datum]]></SqlQuery>
</Query>

<Query name="ListeArtikelLieferUmsatzWoche">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelVon:%String,ArtikelBis:%String,ArtGrpVon:%Integer,ArtGrpBis:%Integer,AdresseVon:%Integer,AdresseBis:%Integer,DatumVon:%Date,DatumBis:%Date,DatumVJVon:%Date,DatumVJBis:%Date,OnlyLiefer:%Boolean,OnlyVerbucht:%Boolean,MandantOid:%String,Lang:%String,DayDiff:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 
		SUM(BetragInkl) AS BetragInkl, SUM(BetragExkl) AS BetragExkl, SUM(Menge) AS Menge, SUM(BetragVorjahrInkl) AS BetragVorjahrInkl,  SUM(BetragVorjahrExkl) AS BetragVorjahrExkl, SUM(MengeVorjahr) AS MengeVorjahr,
		MengeneinheitArtikel, Mengeneinheit, "Artikel.ArtikelNr", "Artikel.Artikeltext", "Artikel.ArtikelGrpNr", "Artikel.ArtikelGrpText",
		"Adresse.Adressnummer", "Adresse.Name", "Adresse.Strasse", "Adresse.Plz", "Adresse.Ort", Datum, String(Woche)|| ' ' AS DetText, Vorjahr, Jahr 
	FROM (
	SELECT 
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Menge) As Menge,  
		0 As BetragVorjahrInkl,
		0 As BetragVorjahrExkl,
		0 As MengeVorjahr,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		BestellungsKopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(BestellungsKopf->Adresse->Adresse->Adresscode, BestellungsKopf->Adresse->Adresse->Name, BestellungsKopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		BestellungsKopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		BestellungsKopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		BestellungsKopf->Adresse->Adresse->Ort 			AS "Adresse.Ort",
		CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END AS Datum,
		CASE WHEN DATEPART(DAY, CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) > 1 THEN
		DATEPART(WEEK,DATEADD(DAY, :DayDiff, CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)) ELSE
		1 END AS Woche,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) -1) AS Vorjahr,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Jahr
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE BestellungsKopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND BestellungsKopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	    AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((BestellungsKopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 1) or (BestellungsKopf->Abrechnungsdatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 0))
	    AND (BestellungsKopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr, BestellungsKopf->Adresse->Adresse->Adressnummer, DATEPART(WEEK,DATEADD(DAY, :DayDiff, BestellungsKopf->Annahmedatum))
	 
	 UNION ALL
	    SELECT 
	    0 As BetragInkl,
	    0 As BetragExkl,
		0 As Menge,
		SUM(Nettobetrag2InklMwstEW) As BetragVorjahrInkl,
		SUM(Nettobetrag2ExklMwstEW) As BetragVorjahrExkl,
		SUM(Menge) As MengeVorjahr,    
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		BestellungsKopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(BestellungsKopf->Adresse->Adresse->Adresscode, BestellungsKopf->Adresse->Adresse->Name, BestellungsKopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		BestellungsKopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		BestellungsKopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		BestellungsKopf->Adresse->Adresse->Ort 			AS "Adresse.Ort",
		CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END AS Datum,
		CASE WHEN DATEPART(DAY, CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) > 1 THEN
		DATEPART(WEEK,DATEADD(DAY, :DayDiff, CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)) ELSE
		1 END AS Woche,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Vorjahr,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)+1) AS Jahr
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE BestellungsKopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND BestellungsKopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	   	AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((BestellungsKopf->Annahmedatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 1) or (BestellungsKopf->Abrechnungsdatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 0))
	    AND (BestellungsKopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr, BestellungsKopf->Adresse->Adresse->Adressnummer, DATEPART(WEEK,DATEADD(DAY, :DayDiff, BestellungsKopf->Annahmedatum))
	)
	GROUP BY "Artikel.ArtikelNr", "Adresse.Adressnummer", Woche
	ORDER BY "Artikel.ArtikelNr", "Adresse.Adressnummer", Woche]]></SqlQuery>
</Query>

<Query name="ListeArtikelLieferUmsatzMonat">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelVon:%String,ArtikelBis:%String,ArtGrpVon:%Integer,ArtGrpBis:%Integer,AdresseVon:%Integer,AdresseBis:%Integer,DatumVon:%Date,DatumBis:%Date,DatumVJVon:%Date,DatumVJBis:%Date,OnlyLiefer:%Boolean,OnlyVerbucht:%Boolean,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 
		SUM(BetragInkl) AS BetragInkl, SUM(BetragExkl) AS BetragExkl, SUM(Menge) AS Menge, SUM(BetragVorjahrInkl) AS BetragVorjahrInkl,  SUM(BetragVorjahrExkl) AS BetragVorjahrExkl, SUM(MengeVorjahr) AS MengeVorjahr,
		MengeneinheitArtikel, Mengeneinheit, "Artikel.ArtikelNr", "Artikel.Artikeltext", "Artikel.ArtikelGrpNr", "Artikel.ArtikelGrpText",
		"Adresse.Adressnummer", "Adresse.Name", "Adresse.Strasse", "Adresse.Plz", "Adresse.Ort", String(Monat)|| ' ' AS DetText, Vorjahr, Jahr 
	FROM (
	SELECT 
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Menge) As Menge,  
		0 As BetragVorjahrInkl,
		0 As BetragVorjahrExkl,
		0 As MengeVorjahr,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		BestellungsKopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(BestellungsKopf->Adresse->Adresse->Adresscode, BestellungsKopf->Adresse->Adresse->Name, BestellungsKopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		BestellungsKopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		BestellungsKopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		BestellungsKopf->Adresse->Adresse->Ort 			AS "Adresse.Ort",
		DATEPART(MONTH,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Monat,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) -1) AS Vorjahr,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Jahr
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE BestellungsKopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND BestellungsKopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	    AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((BestellungsKopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 1) or (BestellungsKopf->Abrechnungsdatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 0))
	    AND (BestellungsKopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr, BestellungsKopf->Adresse->Adresse->Adressnummer, DATEPART(MONTH,BestellungsKopf->Annahmedatum)
	 
	 UNION ALL
	    SELECT 
	    0 As BetragInkl,
	    0 As BetragExkl,
		0 As Menge,
		SUM(Nettobetrag2InklMwstEW) As BetragVorjahrInkl,
		SUM(Nettobetrag2ExklMwstEW) As BetragVorjahrExkl,
		SUM(Menge) As MengeVorjahr,    
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		BestellungsKopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(BestellungsKopf->Adresse->Adresse->Adresscode, BestellungsKopf->Adresse->Adresse->Name, BestellungsKopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		BestellungsKopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		BestellungsKopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		BestellungsKopf->Adresse->Adresse->Ort 			AS "Adresse.Ort",
		DATEPART(MONTH,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Monat,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Vorjahr,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)+1) AS Jahr
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE BestellungsKopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND BestellungsKopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	   	AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((BestellungsKopf->Annahmedatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 1) or (BestellungsKopf->Abrechnungsdatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 0))
	    AND (BestellungsKopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY Artikel->ArtikelNr, BestellungsKopf->Adresse->Adresse->Adressnummer, DATEPART(MONTH,BestellungsKopf->Annahmedatum)
	)
	GROUP BY "Artikel.ArtikelNr", "Adresse.Adressnummer", "Monat"
	ORDER BY "Artikel.ArtikelNr", "Adresse.Adressnummer", "Monat"]]></SqlQuery>
</Query>

<Query name="ListeLieferArtikelUmsatzTag">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelVon:%String,ArtikelBis:%String,ArtGrpVon:%Integer,ArtGrpBis:%Integer,AdresseVon:%Integer,AdresseBis:%Integer,DatumVon:%Date,DatumBis:%Date,DatumVJVon:%Date,DatumVJBis:%Date,OnlyLiefer:%Boolean,OnlyVerbucht:%Boolean,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 
		SUM(BetragInkl) AS BetragInkl, SUM(BetragExkl) AS BetragExkl, SUM(Menge) AS Menge, SUM(BetragVorjahrInkl) AS BetragVorjahrInkl,  SUM(BetragVorjahrExkl) AS BetragVorjahrExkl, SUM(MengeVorjahr) AS MengeVorjahr,
		MengeneinheitArtikel, Mengeneinheit, "Artikel.ArtikelNr", "Artikel.Artikeltext", "Artikel.ArtikelGrpNr", "Artikel.ArtikelGrpText",
		"Adresse.Adressnummer", "Adresse.Name", "Adresse.Strasse", "Adresse.Plz", "Adresse.Ort", Datum, CAST(DATEPART(DAY,Datum) As VARCHAR(2)) || '.'||CAST(DATEPART(MONTH,Datum) As VARCHAR(2))|| '.'  AS DetText, Vorjahr, Jahr 
	FROM (
	SELECT 
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Menge) As Menge,  
		0 As BetragVorjahrInkl,
		0 As BetragVorjahrExkl,
		0 As MengeVorjahr,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		BestellungsKopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(BestellungsKopf->Adresse->Adresse->Adresscode, BestellungsKopf->Adresse->Adresse->Name, BestellungsKopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		BestellungsKopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		BestellungsKopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		BestellungsKopf->Adresse->Adresse->Ort 			AS "Adresse.Ort",
		CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END AS Datum,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) -1) AS Vorjahr,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Jahr
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE BestellungsKopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND BestellungsKopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	    AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((BestellungsKopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 1) or (BestellungsKopf->Abrechnungsdatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 0))
	    AND (BestellungsKopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY BestellungsKopf->Adresse->Adresse->Adressnummer, Artikel->ArtikelNr, BestellungsKopf->Annahmedatum
	 
	 UNION ALL
	    SELECT 
	    0 As BetragInkl,
	    0 As BetragExkl,
		0 As Menge,
		SUM(Nettobetrag2InklMwstEW) As BetragVorjahrInkl,
		SUM(Nettobetrag2ExklMwstEW) As BetragVorjahrExkl,
		SUM(Menge) As MengeVorjahr,  
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		BestellungsKopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(BestellungsKopf->Adresse->Adresse->Adresscode, BestellungsKopf->Adresse->Adresse->Name, BestellungsKopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		BestellungsKopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		BestellungsKopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		BestellungsKopf->Adresse->Adresse->Ort 			AS "Adresse.Ort",
		CAST(DATEADD(YEAR, 1, CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS DATE) AS Datum,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Vorjahr,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)+1) AS Jahr
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE BestellungsKopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND BestellungsKopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	   	AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((BestellungsKopf->Annahmedatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 1) or (BestellungsKopf->Abrechnungsdatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 0))
	    AND (BestellungsKopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY BestellungsKopf->Adresse->Adresse->Adressnummer, Artikel->ArtikelNr, BestellungsKopf->Annahmedatum
	)
	GROUP BY "Adresse.Adressnummer", "Artikel.ArtikelNr", Datum
	ORDER BY "Adresse.Adressnummer", "Artikel.ArtikelNr", Datum]]></SqlQuery>
</Query>

<Query name="ListeLieferArtikelUmsatzWoche">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelVon:%String,ArtikelBis:%String,ArtGrpVon:%Integer,ArtGrpBis:%Integer,AdresseVon:%Integer,AdresseBis:%Integer,DatumVon:%Date,DatumBis:%Date,DatumVJVon:%Date,DatumVJBis:%Date,OnlyLiefer:%Boolean,OnlyVerbucht:%Boolean,MandantOid:%String,Lang:%String,DayDiff:%Integer</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 
		SUM(BetragInkl) AS BetragInkl, SUM(BetragExkl) AS BetragExkl, SUM(Menge) AS Menge, SUM(BetragVorjahrInkl) AS BetragVorjahrInkl,  SUM(BetragVorjahrExkl) AS BetragVorjahrExkl, SUM(MengeVorjahr) AS MengeVorjahr,
		MengeneinheitArtikel, Mengeneinheit, "Artikel.ArtikelNr", "Artikel.Artikeltext", "Artikel.ArtikelGrpNr", "Artikel.ArtikelGrpText",
		"Adresse.Adressnummer", "Adresse.Name", "Adresse.Strasse", "Adresse.Plz", "Adresse.Ort", Datum, String(Woche)|| ' ' AS DetText, Vorjahr, Jahr 
	FROM (
	SELECT 
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Menge) As Menge,  
		0 As BetragVorjahrInkl,
		0 As BetragVorjahrExkl,
		0 As MengeVorjahr,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		BestellungsKopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(BestellungsKopf->Adresse->Adresse->Adresscode, BestellungsKopf->Adresse->Adresse->Name, BestellungsKopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		BestellungsKopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		BestellungsKopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		BestellungsKopf->Adresse->Adresse->Ort 			AS "Adresse.Ort",
		CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END AS Datum,
		CASE WHEN DATEPART(DAY, CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) > 1 THEN
		DATEPART(WEEK,DATEADD(DAY, :DayDiff, CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)) ELSE
		1 END AS Woche,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) -1) AS Vorjahr,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Jahr
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE BestellungsKopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND BestellungsKopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	    AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((BestellungsKopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 1) or (BestellungsKopf->Abrechnungsdatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 0))
	    AND (BestellungsKopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY BestellungsKopf->Adresse->Adresse->Adressnummer, Artikel->ArtikelNr, DATEPART(WEEK,DATEADD(DAY, :DayDiff, BestellungsKopf->Annahmedatum))
	 
	 UNION ALL
	    SELECT 
	    0 As BetragInkl,
	    0 As BetragExkl,
		0 As Menge,
		SUM(Nettobetrag2InklMwstEW) As BetragVorjahrInkl,
		SUM(Nettobetrag2ExklMwstEW) As BetragVorjahrExkl,
		SUM(Menge) As MengeVorjahr, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		BestellungsKopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(BestellungsKopf->Adresse->Adresse->Adresscode, BestellungsKopf->Adresse->Adresse->Name, BestellungsKopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		BestellungsKopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		BestellungsKopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		BestellungsKopf->Adresse->Adresse->Ort 			AS "Adresse.Ort",
		CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END AS Datum,
		CASE WHEN DATEPART(DAY, CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) > 1 THEN
		DATEPART(WEEK,DATEADD(DAY, :DayDiff, CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)) ELSE
		1 END AS Woche,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Vorjahr,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)+1) AS Jahr
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE BestellungsKopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND BestellungsKopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	   	AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((BestellungsKopf->Annahmedatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 1) or (BestellungsKopf->Abrechnungsdatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 0))
	    AND (BestellungsKopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY BestellungsKopf->Adresse->Adresse->Adressnummer, Artikel->ArtikelNr, DATEPART(WEEK,DATEADD(DAY, :DayDiff, BestellungsKopf->Annahmedatum))
	)
	GROUP BY "Adresse.Adressnummer", "Artikel.ArtikelNr", Woche
	ORDER BY "Adresse.Adressnummer", "Artikel.ArtikelNr", Woche]]></SqlQuery>
</Query>

<Query name="ListeLieferArtikelUmsatzMonat">
<Type>%SQLQuery</Type>
<FormalSpec>ArtikelVon:%String,ArtikelBis:%String,ArtGrpVon:%Integer,ArtGrpBis:%Integer,AdresseVon:%Integer,AdresseBis:%Integer,DatumVon:%Date,DatumBis:%Date,DatumVJVon:%Date,DatumVJBis:%Date,OnlyLiefer:%Boolean,OnlyVerbucht:%Boolean,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 
		SUM(BetragInkl) AS BetragInkl, SUM(BetragExkl) AS BetragExkl, SUM(Menge) AS Menge, SUM(BetragVorjahrInkl) AS BetragVorjahrInkl,  SUM(BetragVorjahrExkl) AS BetragVorjahrExkl, SUM(MengeVorjahr) AS MengeVorjahr,
		MengeneinheitArtikel, Mengeneinheit, "Artikel.ArtikelNr", "Artikel.Artikeltext", "Artikel.ArtikelGrpNr", "Artikel.ArtikelGrpText",
		"Adresse.Adressnummer", "Adresse.Name", "Adresse.Strasse", "Adresse.Plz", "Adresse.Ort", String(Monat)|| ' ' AS DetText, Vorjahr, Jahr 
	FROM (
	SELECT 
		SUM(Nettobetrag2InklMwstEW) As BetragInkl,
		SUM(Nettobetrag2ExklMwstEW) As BetragExkl,
		SUM(Menge) As Menge,  
		0 As BetragVorjahrInkl,
		0 As BetragVorjahrExkl,
		0 As MengeVorjahr,
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		BestellungsKopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(BestellungsKopf->Adresse->Adresse->Adresscode, BestellungsKopf->Adresse->Adresse->Name, BestellungsKopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		BestellungsKopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		BestellungsKopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		BestellungsKopf->Adresse->Adresse->Ort 			AS "Adresse.Ort",
		DATEPART(MONTH,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Monat,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) -1) AS Vorjahr,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Jahr
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE BestellungsKopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND BestellungsKopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	    AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((BestellungsKopf->Annahmedatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 1) or (BestellungsKopf->Abrechnungsdatum between {d :DatumVon} AND {d :DatumBis} AND :OnlyLiefer = 0))
	    AND (BestellungsKopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY BestellungsKopf->Adresse->Adresse->Adressnummer, Artikel->ArtikelNr, DATEPART(MONTH,BestellungsKopf->Annahmedatum)
	 
	 UNION ALL
	    SELECT 
	    0 As BetragInkl,
	    0 As BetragExkl,
		0 As Menge,
		SUM(Nettobetrag2InklMwstEW) As BetragVorjahrInkl,
		SUM(Nettobetrag2ExklMwstEW) As BetragVorjahrExkl,
		SUM(Menge) As MengeVorjahr, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, Artikel->Mandant, :Lang) AS MengeneinheitArtikel, 
		DBAgrofresh_SD.Hilfstexte_GetTextClass(Mengeneinheit, BestellungsKopf->Mandant, :Lang) AS Mengeneinheit, 
		Artikel->ArtikelNr AS "Artikel.ArtikelNr",
		DBAgrofresh.Artikel_GetArtikeltextClass(Artikel->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.Artikeltext",
		
		Artikel->Artikelgruppe->ArtikelgruppenNr AS "Artikel.ArtikelGrpNr",
		DBAgrofresh_SD.Artikelgruppe_GetBezeichnungClass(Artikel->Artikelgruppe->ID, BestellungsKopf->Mandant, :Lang) AS "Artikel.ArtikelGrpText",
		
		BestellungsKopf->Adresse->Adresse->Adressnummer 	AS "Adresse.Adressnummer", 
		DBAdressen.Adresse_GetName(BestellungsKopf->Adresse->Adresse->Adresscode, BestellungsKopf->Adresse->Adresse->Name, BestellungsKopf->Adresse->Adresse->VornameZusatz1, 0) 
														AS "Adresse.Name", 
		BestellungsKopf->Adresse->Adresse->Strasse	 		AS "Adresse.Strasse", 
		BestellungsKopf->Adresse->Adresse->Plz 			AS "Adresse.Plz", 
		BestellungsKopf->Adresse->Adresse->Ort 			AS "Adresse.Ort",
		DATEPART(MONTH,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Monat,
		DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END) AS Vorjahr,
		(DATEPART(YEAR,CASE WHEN :OnlyLiefer = 1 THEN
		Bestellungskopf->Annahmedatum ELSE
		Bestellungskopf->Abrechnungsdatum END)+1) AS Jahr
		
		
	FROM DBAgrofreshEK.Bestellungspos 
	    WHERE BestellungsKopf->Adresse->Adresse->Adressnummer >= :AdresseVon AND BestellungsKopf->Adresse->Adresse->Adressnummer <= :AdresseBis
	   	AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR :ArtikelVon = '')
	    AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR :ArtGrpVon = 0)
	    AND ((BestellungsKopf->Annahmedatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 1) or (BestellungsKopf->Abrechnungsdatum between {d :DatumVJVon} AND {d :DatumVJBis} AND :OnlyLiefer = 0))
	    AND (BestellungsKopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAbrechnung() OR :OnlyLiefer = 1)
	    AND (Bestellungskopf->Bestellstatus >= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR (:OnlyLiefer = 0 AND :OnlyVerbucht = 0))
	    AND (Bestellungskopf->Verbucht = 1 OR :OnlyVerbucht = 0)
		AND BestellungsKopf->Mandant=:MandantOid 
	    GROUP BY BestellungsKopf->Adresse->Adresse->Adressnummer, Artikel->ArtikelNr, DATEPART(MONTH,BestellungsKopf->Annahmedatum)
	)
	GROUP BY "Adresse.Adressnummer", "Artikel.ArtikelNr", "Monat"
	ORDER BY "Adresse.Adressnummer", "Artikel.ArtikelNr", "Monat"]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.StrgAbzuegeAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61805,40081.43693</TimeCreated>

<Query name="ListeByStrg">
<Type>%SQLQuery</Type>
<FormalSpec>Strg:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT %ID, Abzug1, Abzug2, Abzug3, AbDatum
	       FROM DBAgrofreshEK.StrgAbzuege WHERE Steuerung = :Strg Order by AbDatum</SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.VerarbAuftragAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61611,30783.395976</TimeCreated>

<Query name="ListeNachOriginalCharge">
<Type>%SQLQuery</Type>
<FormalSpec>ChargenOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT 	ID, 
			Auftragsnr
	FROM DBAgrofreshEK.VerarbAuftrag 
	WHERE Charge = :ChargenOid
	ORder by Auftragsnr</SqlQuery>
</Query>

<Query name="ListeNachAuftragNr">
<Type>%SQLQuery</Type>
<FormalSpec>Auftragsnr:%String,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	ID, Artikel AS VerarbArtikel, 0 As ChargeNr, 0 As PositionsNr,
			AnzahlGebinde AS AnzGeb, Gebinde, MengeJeGebinde AS AnzahlJeGebinde, Bemerkung, Qualitaet,
			DBAgrofresh.Artikel_GetArtikeltextClass(Artikel, :MandantOid, :Lang) As VerarbArtikeltext,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Qualitaet, :MandantOid, :Lang) As QualitaetText,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) AS GebindeText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :MandantOid, :Lang) AS MengeneinheitText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Abzugstyp, :MandantOid, :Lang) As AbzugsText,
			Artikel->Mengeneinheit AS Mengeneinheit, Artikel
	FROM DBAgrofreshEK.VerarbProv 
	WHERE VerarbAuftrag->Auftragsnr = :Auftragsnr AND VerarbAuftrag->Mandant = :MandantOid
	
	UNION ALL
	
	SELECT 	ID, Artikel AS VerarbArtikel, 
	Case NVL(Mischposten,'') WHEN '' THEN PositionsNr ELSE (SELECT PositionsNr FROM DBAgrofreshEK.ChargenEingang WHERE ID = ce.Mischposten) END As ChargeNr, 
	Case NVL(Mischposten,'') WHEN '' THEN PositionsNr ELSE (SELECT PositionsNr FROM DBAgrofreshEK.ChargenEingang WHERE ID = ce.Mischposten) END As PositionsNr,
			AnzahlGebinde AS AnzGeb, Gebinde, MengeJeGebinde AS AnzahlJeGebinde, Bemerkung, Qualitaet,
			DBAgrofresh.Artikel_GetArtikeltextClass(Artikel, :MandantOid, :Lang) As VerarbArtikeltext,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Qualitaet, :MandantOid, :Lang) As QualitaetText,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) AS GebindeText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :MandantOid, :Lang) AS MengeneinheitText,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Abzugstyp, :MandantOid, :Lang) As AbzugsText,
			Artikel->Mengeneinheit AS Mengeneinheit, OriginalCharge->Artikel aS Artikel
	FROM DBAgrofreshEK.ChargenEingang ce
	WHERE VerarbeitungsAuftrag->Auftragsnr = :Auftragsnr AND Mandant = :MandantOid
	
	ORDER BY Artikel]]></SqlQuery>
</Query>

<Query name="ListeVerarbAuftrNachCharge">
<Type>%SQLQuery</Type>
<FormalSpec>ChargenEingangOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT 	ID, AuftragsNr AS VerarbAuftragsNr, Lieferdatum, Definitiv, PrduktionsscheinGedruckt AS Gedruckt,
			CASE NVL(AnzahlGebinde,0) WHEN 0 THEN DBAgrofreshEK.VerarbAuftrag_CalcAnzahlGebByAuftrag(ID) ELSE NVL(AnzahlGebinde,0) END AS AnzahlGebinde, 
			CASE NVL(Menge,0) WHEN 0 THEN DBAgrofreshEK.VerarbAuftrag_GetMengeByAuftrag(ID) ELSE NVL(Menge,0) END AS Menge, 
			VerlustMenge 
			
		FROM DBAgrofreshEK.VerarbAuftrag WHERE Charge = :ChargenEingangOid
		ORDER BY VerarbAuftragsNr</SqlQuery>
</Query>

<Query name="ListeChargenOidsNachAuftrag">
<Type>%SQLQuery</Type>
<FormalSpec>AuftragOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery>	SELECT ID FROM DBAgrofreshEK.ChargenEingang WHERE VerarbeitungsAuftrag = :AuftragOid</SqlQuery>
</Query>

<Query name="ListeVerarbAuftraegeForExport">
<Type>%SQLQuery</Type>
<FormalSpec>vonDatum:%Date,bisDatum:%Date,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	(SELECT PositionsNr FROM DBAgrofreshEK.ChargenEingang ce WHERE ce.ID = auftr.Charge) AS ChargenNr,
			(SELECT Artikel->ArtikelNr FROM DBAgrofreshEK.ChargenEingang ce WHERE ce.ID = auftr.Charge) AS ArtikelNr,
			(SELECT DBAgrofresh.Artikel_GetArtikeltextClass(Artikel, :MandantOid, :Lang) FROM DBAgrofreshEK.ChargenEingang ce WHERE ce.ID = auftr.Charge) AS ArtikelText,
			ID, AuftragsNr, Lieferdatum, Definitiv, PrduktionsscheinGedruckt AS Gedruckt,
			CASE NVL(AnzahlGebinde,0) WHEN 0 THEN DBAgrofreshEK.VerarbAuftrag_CalcAnzahlGebByAuftrag(ID) ELSE NVL(AnzahlGebinde,0) END AS AnzahlGebinde, 
			CASE NVL(Menge,0) WHEN 0 THEN DBAgrofreshEK.VerarbAuftrag_GetMengeByAuftrag(ID) ELSE NVL(Menge,0) END AS Menge, 
			VerlustMenge 
			
		FROM DBAgrofreshEK.VerarbAuftrag auftr 
		WHERE Lieferdatum between {d :vonDatum } AND {d :bisDatum } AND Mandant = :MandantOid
		ORDER BY Lieferdatum]]></SqlQuery>
</Query>

<Query name="ListeVerarbPositionenForExport">
<Type>%SQLQuery</Type>
<FormalSpec>vonDatum:%Date,bisDatum:%Date,MandantOid:%String,Lang:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	ID, PositionsNr AS ChargenNr,
			Artikel->ArtikelNr AS ArtikelNr, DBAgrofresh.Artikel_GetArtikeltextClass(Artikel, :MandantOid, :Lang) AS ArtikelText,
			VerarbeitungsAuftrag->AuftragsNr AS AuftragsNr,
			(SELECT PositionsNr FROM DBAgrofreshEK.ChargenEingang ce2 WHERE ce2.ID = ce.Mischposten) AS Mischposten,
			DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde, :MandantOid, :Lang) As Gebinde,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Artikel->Mengeneinheit, :MandantOid, :Lang) As Einheit,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Herkunft, :MandantOid, :Lang) As Herkunft,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Qualitaet, :MandantOid, :Lang) As Qualitaet,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Abzugstyp, :MandantOid, :Lang) AS Abzug,
			DBAgrofresh_SD.Hilfstexte_GetTextClass(Produktionsart, :MandantOid, :Lang) As Produktionsart,
			AnzahlGebinde, MengeEingang, Einzelgewicht, MengeEingangKg
			
		FROM DBAgrofreshEK.ChargenEingang ce
		WHERE VerarbeitungsAuftrag->Lieferdatum between {d :vonDatum } AND {d :bisDatum } AND VerarbeitungsAuftrag->Mandant = :MandantOid
		ORDER BY VerarbeitungsAuftrag->Lieferdatum, VerarbeitungsAuftrag->AuftragsNr]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.VerarbAufwandAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61607,34124.774728</TimeCreated>

<Query name="ListeNachOriginalCharge">
<Type>%SQLQuery</Type>
<FormalSpec>ChargenOid:%String,VerarbAuftragOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT 	%ID, 
			Artikel, 
			Bezugsart, 
			Bemerkung, 
			AnzahlMitarbeiter,
			Menge, 
			Ansatz,
			Betrag,
			VerarbAuftrag->AuftragsNr As VerarbAuftrag
	FROM DBAgrofreshEK.VerarbAufwand 
	WHERE OriginalCharge = :ChargenOid AND
	(VerarbAuftrag = :VerarbAuftragOid OR NVL(:VerarbAuftragOid, '') = '')]]></SqlQuery>
</Query>

<Query name="ListeByAuftrag">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,VerarbAuftragOid:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, Bezugsart, AnzahlMitarbeiter, Artikel, DBAgrofresh.Artikel_GetArtikeltextClass(Artikel, :MandantOid, :Lang) as ArtikelText,
			DBAgrofresh_SD.Mengencode_GetTextClass(Artikel->Mengeneinheit, :MandantOid, :Lang) as MengeneinheitText,
			Artikel->Artikelcode as Artikelcode
	       FROM DBAgrofreshEK.VerarbAufwand WHERE VerarbAuftrag = :VerarbAuftragOid]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.AF.VerarbeitungAF">
<Super>%RegisteredObject</Super>
<TimeChanged>62417,31307</TimeChanged>
<TimeCreated>61515,31824.135156</TimeCreated>

<Query name="ListeByVerarbtyp">
<Type>%SQLQuery</Type>
<FormalSpec>MandantOid:%String,Lang:%String,VerarbTyp:%String</FormalSpec>
<SqlProc>1</SqlProc>
<SqlQuery><![CDATA[	SELECT %ID, PosNummer, Bezugsart, Artikel, DBAgrofresh.Artikel_GetArtikeltextClass(Artikel, :MandantOid, :Lang) as ArtikelText,
			DBAgrofresh_SD.Mengencode_GetTextClass(Artikel->Mengeneinheit, :MandantOid, :Lang) as MengeneinheitText,
			Artikel->Artikelcode as Artikelcode,
		   DBAgrofreshEK_SD.Hilfstexte_GetTextClass(Verarbeitungstyp, :MandantOid, :Lang) AS Verarbeitungstyp
	       FROM DBAgrofreshEK.Verarbeitung WHERE Verarbeitungstyp = :VerarbTyp ORDER BY PosNummer]]></SqlQuery>
</Query>
</Class>


<Class name="DBAgrofreshEK.BestStrg">
<Description>
</Description>
<Super>%Persistent,%XML.Adaptor,DBCore.MandantRel</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61403,61250.037901</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="OfferteAnfrageAnzKopien">
<Description>
Offerte_Anzahl_Kopien</Description>
<Type>%Integer</Type>
</Property>

<Property name="BestellungAnzKopien">
<Description>
Auftragsbestaetigung_Anzahl_Kopien</Description>
<Type>%Integer</Type>
</Property>

<Property name="AnnahmescheinAnzKopien">
<Description>
Annahmeschein Anz Kopien</Description>
<Type>%Integer</Type>
</Property>

<Property name="AnnahmescheinSpezEinst">
<Description>
Annahmeschein Spez Einst</Description>
<Type>%Integer</Type>
</Property>

<Property name="AbrechnungAnzKopien">
<Description>
Lieferschein_Anzahl_Kopien</Description>
<Type>%Integer</Type>
</Property>

<Property name="AbrechnungImportFuss">
<Description>
Lieferschein_Export-Fuss</Description>
<Type>%Integer</Type>
</Property>

<Property name="AbrechnungSpezEinst">
<Description>
Lieferschein_SpezEinst</Description>
<Type>%Integer</Type>
</Property>

<Property name="SammelabrechnungAnzKopien">
<Description>
Rechnung_Anzahl_Kopien</Description>
<Type>%Integer</Type>
</Property>

<Property name="SammelabrechnungSpezEinst">
<Description>
Rechnung_SpezEinst</Description>
<Type>%Integer</Type>
</Property>

<Property name="Herkunft">
<Description>
Herkunft</Description>
<Type>%Integer</Type>
</Property>

<Property name="Abzug1">
<Description>
Abzug1</Description>
<Type>%Integer</Type>
</Property>

<Property name="Abzug2">
<Description>
Abzug2</Description>
<Type>%Integer</Type>
</Property>

<Property name="Abzug3">
<Description>
Abzug3</Description>
<Type>%Integer</Type>
</Property>

<Property name="Abzug1Text">
<Description>
Abzug1_Text</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Abzug2Text">
<Description>
Abzug2_Text</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Abzug3Text">
<Description>
Abzug3_Text</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GenerierungOPText">
<Description>
Generierung OP-Buchungstext</Description>
<Type>%Integer</Type>
</Property>

<Property name="SammelabrechnungImportFuss">
<Description>
Rechnung Export-Fuss</Description>
<Type>%Integer</Type>
</Property>

<Property name="EinstandsPreisMutieren">
<Description>
Engros Preis mutieren</Description>
<Type>%Integer</Type>
</Property>

<Property name="BarzahlungAnzKopien">
<Description>
Barzahlung_Anzahl_Kopien</Description>
<Type>%Integer</Type>
</Property>

<Property name="BarzahlungSpezEinst">
<Description>
Barzahlung_SpezEinst</Description>
<Type>%Integer</Type>
</Property>

<Property name="TestGebinderetouren">
<Description>
Test Gebinderetouren</Description>
<Type>%Integer</Type>
</Property>

<Property name="EinstellungenMutieren">
<Description>
Einstellungen mutieren</Description>
<Type>%Integer</Type>
</Property>

<Property name="TextOP">
<Description>
Einstellungen mutieren</Description>
<Type>%Integer</Type>
</Property>

<Property name="IsBestellungDatumInaktiv">
<Description>
Auftragdatum Inaktiv</Description>
<Type>%Boolean</Type>
</Property>

<Property name="IsAnnahmeDatumInaktiv">
<Description>
Auftragdatum Inaktiv</Description>
<Type>%Boolean</Type>
</Property>

<Property name="IsRabattInaktiv">
<Description>
Rabatt Inaktiv</Description>
<Type>%Boolean</Type>
</Property>

<Property name="IsMwstInaktiv">
<Description>
Mwst Inaktiv</Description>
<Type>%Boolean</Type>
</Property>

<Property name="IsVertreterInaktiv">
<Description>
Vertreter Inaktiv</Description>
<Type>%Boolean</Type>
</Property>

<Property name="IsBearbeiterInaktiv">
<Description>
Bearbeiter Inaktiv</Description>
<Type>%Boolean</Type>
</Property>

<Property name="IsKonditionenInaktiv">
<Description>
Konditionen Inaktiv</Description>
<Type>%Boolean</Type>
</Property>

<Property name="IsLieferartInaktiv">
<Description>
Lieferart Inaktiv</Description>
<Type>%Boolean</Type>
</Property>

<Property name="IsAnnahmezeitInaktiv">
<Description>
Annahmezeit Inaktiv</Description>
<Type>%Boolean</Type>
</Property>

<Property name="IsBestellartInaktiv">
<Description>
Bestellart Inaktiv</Description>
<Type>%Boolean</Type>
</Property>

<Property name="IsKommissionInaktiv">
<Description>
Bestellart Inaktiv</Description>
<Type>%Boolean</Type>
</Property>

<Property name="IsBestellerInaktiv">
<Description>
Besteller Inaktiv</Description>
<Type>%Boolean</Type>
</Property>

<Property name="IsReferenzInaktiv">
<Description>
Referenz Inaktiv</Description>
<Type>%Boolean</Type>
</Property>

<Property name="IsLagerortInaktiv">
<Description>
Lagerort Inaktiv</Description>
<Type>%Boolean</Type>
</Property>

<Property name="Abzug1FibuKonto">
<Type>DBFibu.Konto</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgAbzug1</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abzug1FibuKonto"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="Abzug1FibuKontoIndex">
<Properties>Abzug1FibuKonto</Properties>
</Index>

<Property name="Abzug2FibuKonto">
<Type>DBFibu.Konto</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgAbzug2</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abzug2FibuKonto"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="Abzug2FibuKontoIndex">
<Properties>Abzug2FibuKonto</Properties>
</Index>

<Property name="Abzug3FibuKonto">
<Type>DBFibu.Konto</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgAbzug3</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abzug3FibuKonto"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="Abzug3FibuKontoIndex">
<Properties>Abzug3FibuKonto</Properties>
</Index>

<Property name="ImportTyp">
<Type>DBAgrofreshEK.SD.StrgBest</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgImportTyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="ImportTyp"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ImportTypIndex">
<Properties>ImportTyp</Properties>
</Index>

<Property name="OffertenanfrageDrucktyp">
<Type>DBAgrofreshEK.SD.Drucktyp</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgOffertenanfrage</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="OffertenanfrageDrucktyp"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="OffertenanfrageDrucktypIndex">
<Properties>OffertenanfrageDrucktyp</Properties>
</Index>

<Property name="BestellungDrucktyp">
<Type>DBAgrofreshEK.SD.Drucktyp</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgBestellung</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="BestellungDrucktyp"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="BestellungDrucktypIndex">
<Properties>BestellungDrucktyp</Properties>
</Index>

<Property name="AnnahmescheinDrucktyp">
<Type>DBAgrofreshEK.SD.Drucktyp</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgAnnahmeschein</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="AnnahmescheinDrucktyp"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="AnnahmescheinDrucktypIndex">
<Properties>AnnahmescheinDrucktyp</Properties>
</Index>

<Property name="AbrechnungDrucktyp">
<Type>DBAgrofreshEK.SD.Drucktyp</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgAbrechnung</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="AbrechnungDrucktyp"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="AbrechnungDrucktypIndex">
<Properties>AbrechnungDrucktyp</Properties>
</Index>

<Property name="SammelabrechnungDrucktyp">
<Type>DBAgrofreshEK.SD.Drucktyp</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgSammelabrechnung</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="SammelabrechnungDrucktyp"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="SammelabrechnungDrucktypIndex">
<Properties>SammelabrechnungDrucktyp</Properties>
</Index>

<Property name="BarzahlungDrucktyp">
<Type>DBAgrofreshEK.SD.Drucktyp</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgBarzahlung</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="BarzahlungDrucktyp"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="BarzahlungDrucktypIndex">
<Properties>BarzahlungDrucktyp</Properties>
</Index>

<Property name="Mandant">
<Type>%String</Type>
</Property>

<ForeignKey name="FKMandant">
<Properties>Mandant</Properties>
<ReferencedClass>DBCore.Mandant</ReferencedClass>
<ReferencedKey>MandIdIndex</ReferencedKey>
</ForeignKey>

<Index name="MandantIdx">
<Properties>Mandant</Properties>
</Index>

<Property name="OffertenanfrageFusstext">
<Type>DBAgrofreshEK.SD.Fusstext</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgOAFusstext</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="OffertenanfrageFusstext"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="OffertenanfrageFusstextIndex">
<Properties>OffertenanfrageFusstext</Properties>
</Index>

<Property name="BestellungFusstext">
<Type>DBAgrofreshEK.SD.Fusstext</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgBestFusstext</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="BestellungFusstext"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="BestellungFusstextIndex">
<Properties>BestellungFusstext</Properties>
</Index>

<Property name="AnnahmescheinFusstext">
<Type>DBAgrofreshEK.SD.Fusstext</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgASFusstext</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="AnnahmescheinFusstext"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="AnnahmescheinFusstextIndex">
<Properties>AnnahmescheinFusstext</Properties>
</Index>

<Property name="AbrechnungFusstext">
<Type>DBAgrofreshEK.SD.Fusstext</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgARFusstext</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="AbrechnungFusstext"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="AbrechnungFusstextIndex">
<Properties>AbrechnungFusstext</Properties>
</Index>

<Property name="SammelabrechnungFusstext">
<Type>DBAgrofreshEK.SD.Fusstext</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgSammelAbrFusstext</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="SammelabrechnungFusstext"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="SammelabrechnungFusstextIndex">
<Properties>SammelabrechnungFusstext</Properties>
</Index>

<Property name="BarzahlungFusstext">
<Type>DBAgrofreshEK.SD.Fusstext</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgBZFusstext</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="BarzahlungFusstext"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="BarzahlungFusstextIndex">
<Properties>BarzahlungFusstext</Properties>
</Index>

<Property name="OffertenanfrageGebFuss">
<Type>DBAgrofreshEK.SD.FormGebFuss</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgOAGebFuss</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="OffertenanfrageGebFuss"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="OffertenanfrageGebFussIndex">
<Properties>OffertenanfrageGebFuss</Properties>
</Index>

<Property name="BestellungGebFuss">
<Type>DBAgrofreshEK.SD.FormGebFuss</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgBestGebFuss</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="BestellungGebFuss"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="BestellungGebFussIndex">
<Properties>BestellungGebFuss</Properties>
</Index>

<Property name="AnnahmescheinGebFuss">
<Type>DBAgrofreshEK.SD.FormGebFuss</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgASGebFuss</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="AnnahmescheinGebFuss"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="AnnahmescheinGebFussIndex">
<Properties>AnnahmescheinGebFuss</Properties>
</Index>

<Property name="AbrechnungGebFuss">
<Type>DBAgrofreshEK.SD.FormGebFuss</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgARGebFuss</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="AbrechnungGebFuss"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="AbrechnungGebFussIndex">
<Properties>AbrechnungGebFuss</Properties>
</Index>

<Property name="SammelabrechnungGebFuss">
<Type>DBAgrofreshEK.SD.FormGebFuss</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgSAGebFuss</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="SammelabrechnungGebFuss"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="SammelabrechnungGebFussIndex">
<Properties>SammelabrechnungGebFuss</Properties>
</Index>

<Property name="BarzahlungGebFuss">
<Type>DBAgrofreshEK.SD.FormGebFuss</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgBZGebFuss</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="BarzahlungGebFuss"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="BarzahlungGebFussIndex">
<Properties>BarzahlungGebFuss</Properties>
</Index>

<Property name="Preisliste">
<Type>DBAgrofresh.SD.Preisliste</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgPreisliste</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="PreislisteIndex">
<Properties>Preisliste</Properties>
</Index>

<Property name="GebindescheinAnzKopien">
<Type>%Integer</Type>
</Property>

<Property name="GebindescheinDrucktyp">
<Type>DBAgrofreshEK.SD.Drucktyp</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgGebindescheinDrucktyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="GebindescheinDrucktyp"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="GebindescheinDrucktypIndex">
<Properties>GebindescheinDrucktyp</Properties>
</Index>

<Property name="GebindescheinFusstext">
<Type>DBAgrofreshEK.SD.Fusstext</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgGebindescheinFusstext</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="GebindescheinFusstextIndex">
<Properties>GebindescheinFusstext</Properties>
</Index>

<Property name="GebindescheinGebFuss">
<Type>DBAgrofreshEK.SD.FormGebFuss</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgGSGebFuss</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="GebindescheinGebFuss"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="GebindescheinGebFussIndex">
<Properties>GebindescheinGebFuss</Properties>
</Index>

<Property name="VorschlagAbteilung">
<Type>DBCore.Abteilung</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgVorschlag</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="VorschlagAbteilung"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="VorschlagAbteilungIndex">
<Properties>VorschlagAbteilung</Properties>
</Index>

<Property name="VorschlagVertreter">
<Type>DBAdressen.SD.Vertreter</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgVorschlag</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="VorschlagVertreter"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="VorschlagVertreterIndex">
<Properties>VorschlagVertreter</Properties>
</Index>

<Property name="VorschlagLieferart">
<Type>DBAgrofreshEK.SD.Lieferart</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgVorschlag</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="VorschlagLieferart"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="VorschlagLieferartIndex">
<Properties>VorschlagLieferart</Properties>
</Index>

<Property name="VorschlagBestellart">
<Type>DBAgrofreshEK.SD.Bestellart</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgVorschlag</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="VorschlagBestellart"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="VorschlagBestellartIndex">
<Properties>VorschlagBestellart</Properties>
</Index>

<Property name="VorschlagKommission">
<Type>%Library.String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="VorschlagBesteller">
<Description>
Besteller</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="VorschlagReferenz">
<Description>
Referenz</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="VorschlagAnnahmezeit">
<Description>
Annahmezeit</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="AbzuegeDatum">
<Type>DBAgrofreshEK.StrgAbzuege</Type>
<Cardinality>many</Cardinality>
<Inverse>Steuerung</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="SAIntArt">
<Description>
Einstellung Sammelabrechnung</Description>
<Type>%Integer</Type>
</Property>

<Property name="IsAbrechnungstypInaktiv">
<Description>
Abrechnungstyp Inaktiv</Description>
<Type>%Boolean</Type>
</Property>

<Property name="TeilAnnahmescheinAnzKopien">
<Description>
TeilAnnahmeschein Anz Kopien</Description>
<Type>%Integer</Type>
</Property>

<Property name="TeilAnnahmescheinSpezEinst">
<Description>
TeilAnnahmeschein Spez Einst</Description>
<Type>%Integer</Type>
</Property>

<Property name="TeilAnnahmescheinGebFuss">
<Type>DBAgrofreshEK.SD.FormGebFuss</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgTASGebFuss</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="TeilAnnahmescheinGebFuss"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="TeilAnnahmescheinFusstext">
<Type>DBAgrofreshEK.SD.Fusstext</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgTASFusstext</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="TeilAnnahmescheinFusstext"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="TeilAnnahmescheinDrucktyp">
<Type>DBAgrofreshEK.SD.Drucktyp</Type>
<Cardinality>one</Cardinality>
<Inverse>BestStrgTeilAnnahmeschein</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="TeilAnnahmescheinDrucktyp"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Method name="SaveBestSteuerung">
<ClassMethod>1</ClassMethod>
<FormalSpec>steuerung:DBAgrofreshEK.BestStrg,typOid:%String,KundeOid:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	set status = ""
	set spez = steuerung
	if (KundeOid = "") && (typOid '= "") {
	//	set spez = ##Class(DBAgrofresh.TypStrg).DeleteAuftragsSteuerung(typOid)
		if ('##Class(DBAgrofreshEK.TypStrg).ExistsBestSteuerung(typOid)) {
			set spez = ##Class(DBAgrofreshEK.TypStrg).GetBestSteuerung(typOid)
			set spez = steuerung.%ConstructClone()
			set typ = ##class(DBAgrofreshEK.SD.Hilfstexte).%OpenId(typOid)
			set spez.Typ = typ
		}
		
	} elseif (typOid = "") && (KundeOid '= "") {
	//	set spez = ##Class(DBAgrofresh.KundenStrg).DeleteAuftragsSteuerung(KundeOid)
		if ('##Class(DBAgrofreshEK.LieferantenStrg).ExistsBestSteuerung(KundeOid)) {
			set spez = ##Class(DBAgrofreshEK.LieferantenStrg).GetBestSteuerung(KundeOid)
			set spez = steuerung.%ConstructClone()
			set adr = ##class(DBAdressen.Adresse).%OpenId(KundeOid)
			set spez.Lieferant = adr
		}
		
	}
	set status = spez.%Save()
	quit status
]]></Implementation>
</Method>

<Method name="ExistsBestSteuerung">
<ClassMethod>1</ClassMethod>
<FormalSpec>Mand:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.BestStrg 
	     WHERE Mandant=:Mand)
	quit (id '= "")
]]></Implementation>
</Method>

<Method name="GetBestSteuerung">
<ClassMethod>1</ClassMethod>
<FormalSpec>Mand:%String</FormalSpec>
<ReturnType>DBAgrofreshEK.BestStrg</ReturnType>
<Implementation><![CDATA[
	set steuerung = ""
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.TypStrg 
	     WHERE Mandant=:Mand Order by Typ->PositionsNr)
	if (id '= "") {
		set steuerung = ##Class(DBAgrofreshEK.TypStrg).%OpenId(id)
	} else {
		set steuerung = ##Class(DBAgrofreshEK.TypStrg).%New()
		set steuerung.Mandant = Mand
		d steuerung.%Save()
	}
	quit steuerung
]]></Implementation>
</Method>

<Method name="DeleteBestSteuerung">
<ClassMethod>1</ClassMethod>
<FormalSpec>Mand:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	set status = ""
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.BestStrg 
	     WHERE Mandant=:Mand)
	if (id '= "") {
		set status = ##Class(DBAgrofreshEK.BestStrg).%DeleteId(id)
	}
	quit status
]]></Implementation>
</Method>

<Method name="GebindeVerrechnen">
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set verrechnen = 0
	// Nur von Abrechnung prüfen da die Einstellung von BZ und SR die gleichen sein müssen
	if ((..AbrechnungGebFuss '= "")) {
		set verrechnen = (..AbrechnungGebFuss.Verrechnung >= ##class(DBAgrofresh.Konst).GebindeVerrechnen())
	}
	quit verrechnen
]]></Implementation>
</Method>

<Method name="GetGebindeVerrechnenByAdr">
<ClassMethod>1</ClassMethod>
<FormalSpec>AdrOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set steuerung = ""
	set verrechArt = 0
	set existKundenStrg = ##class(DBAgrofreshEK.LieferantenStrg).ExistsBestSteuerung(AdrOid)
	
	// KundenSTeuerung
	if (existKundenStrg '= 0) {
		set steuerung = ##class(DBAgrofreshEK.LieferantenStrg).GetBestSteuerung(AdrOid)
	
	} else {
		// Typen Steuerung
		set typ = 0
		&sql(SELECT TOP 1 EinkSteuerungstyp INTO :typ FROM DBAdressen.Adresse
		     WHERE ID=:AdrOid)
		if ((typ '= 0) && (typ '= $c(0)) && (typ '= "")) {
			set steuerung = ##Class(DBAgrofreshEK.TypStrg).GetBestSteuerung(+typ)
		} else {
			// STandard Steuerung
			set mandOid = ""
			&sql(SELECT TOP 1 Mandant INTO :mandOid FROM DBAdressen.Adresse
			     WHERE ID=:AdrOid)
			
			set steuerung = ##Class(DBAgrofreshEK.BestStrg).GetBestSteuerung(mandOid)
		}
	}
	
	if (steuerung '= "" && steuerung.AbrechnungGebFuss '= "") {
		set verrechArt = steuerung.AbrechnungGebFuss.Verrechnung
	}
	quit verrechArt
]]></Implementation>
</Method>

<Method name="%OnDelete">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Delete</METHOD> method to 
provide notification that the object specified by <VAR>oid</VAR> is being deleted.

<P>If this method returns an error then the object will not be deleted.
[Previously private]]]></Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%ObjectIdentity</FormalSpec>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	
	set id = $lg(oid,1)
	do ..DeleteStrgAbzuege(id)
	Quit $$$OK
]]></Implementation>
</Method>

<Trigger name="trgBeforeDelete">
<Code>	do ..DeleteStrgAbzuege({ID*O})</Code>
<Event>DELETE</Event>
</Trigger>

<Method name="DeleteStrgAbzuege">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestStrgOid:%String</FormalSpec>
<Implementation><![CDATA[
	if (BestStrgOid '= "") {
		
		set strSQL="SELECT ID FROM DBAgrofreshEK.StrgAbzuege WHERE Steuerung = '"_BestStrgOid_"'"
		set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
		do rs.Prepare(strSQL)
		set sc=rs.Execute()
		if $$$ISOK(sc) {
			if rs.Next(.sc) {
				set abzId =rs.Data("ID")
				do ##class(DBAgrofreshEK.StrgAbzuege).%DeleteId(abzId)
			}
		}
	}
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.BestStrgD</DataLocation>
<DefaultData>BestStrgDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.BestStrgD</IdLocation>
<IndexLocation>^DBAgrofreshEK.BestStrgI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.BestStrgS</StreamLocation>
<Data name="BestStrgDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>OfferteAnfrageAnzKopien</Value>
</Value>
<Value name="3">
<Value>BestellungAnzKopien</Value>
</Value>
<Value name="4">
<Value>AnnahmescheinAnzKopien</Value>
</Value>
<Value name="5">
<Value>AbrechnungAnzKopien</Value>
</Value>
<Value name="6">
<Value>AbrechnungImportFuss</Value>
</Value>
<Value name="7">
<Value>AbrechnungSpezEinst</Value>
</Value>
<Value name="8">
<Value>SammelabrechnungAnzKopien</Value>
</Value>
<Value name="9">
<Value>SammelabrechnungSpezEinst</Value>
</Value>
<Value name="10">
<Value>BestellNr</Value>
</Value>
<Value name="11">
<Value>Herkunft</Value>
</Value>
<Value name="12">
<Value>Abzug1</Value>
</Value>
<Value name="13">
<Value>Abzug1Prozent</Value>
</Value>
<Value name="14">
<Value>Abzug2</Value>
</Value>
<Value name="15">
<Value>Abzug2Prozent</Value>
</Value>
<Value name="16">
<Value>Abzug3</Value>
</Value>
<Value name="17">
<Value>Abzug3Prozent</Value>
</Value>
<Value name="18">
<Value>Abzug1Text</Value>
</Value>
<Value name="19">
<Value>Abzug2Text</Value>
</Value>
<Value name="20">
<Value>Abzug3Text</Value>
</Value>
<Value name="21">
<Value>GenerierungOPText</Value>
</Value>
<Value name="22">
<Value>LieferZeit</Value>
</Value>
<Value name="23">
<Value>SammelabrechnungImportFuss</Value>
</Value>
<Value name="24">
<Value>EngrosPreisMutieren</Value>
</Value>
<Value name="25">
<Value>AnbruchtsPreisMutieren</Value>
</Value>
<Value name="26">
<Value>DetailPreisMutieren</Value>
</Value>
<Value name="27">
<Value>BarzahlungAnzKopien</Value>
</Value>
<Value name="28">
<Value>BarzahlungSpezEinst</Value>
</Value>
<Value name="29">
<Value>TestGebinderetouren</Value>
</Value>
<Value name="30">
<Value>EinstellungenMutieren</Value>
</Value>
<Value name="31">
<Value>TextOP</Value>
</Value>
<Value name="32">
<Value>IsAuftragDatumInaktiv</Value>
</Value>
<Value name="33">
<Value>IsLieferDatumInaktiv</Value>
</Value>
<Value name="34">
<Value>IsRabattInaktiv</Value>
</Value>
<Value name="35">
<Value>IsMwstInaktiv</Value>
</Value>
<Value name="36">
<Value>IsVertreterInaktiv</Value>
</Value>
<Value name="37">
<Value>IsBearbeiterInaktiv</Value>
</Value>
<Value name="38">
<Value>IsKonditionenInaktiv</Value>
</Value>
<Value name="39">
<Value>IsLieferartInaktiv</Value>
</Value>
<Value name="40">
<Value>IsAnnahmezeitInaktiv</Value>
</Value>
<Value name="41">
<Value>IsGebietInaktiv</Value>
</Value>
<Value name="42">
<Value>IsBestellartInaktiv</Value>
</Value>
<Value name="43">
<Value>IsBestellNrInaktiv</Value>
</Value>
<Value name="44">
<Value>IsBestellerInaktiv</Value>
</Value>
<Value name="45">
<Value>IsReferenzInaktiv</Value>
</Value>
<Value name="46">
<Value>IsSkontoInaktiv</Value>
</Value>
<Value name="47">
<Value>Abzug1FibuKonto</Value>
</Value>
<Value name="48">
<Value>Abzug2FibuKonto</Value>
</Value>
<Value name="49">
<Value>Abzug3FibuKonto</Value>
</Value>
<Value name="50">
<Value>ImportTyp</Value>
</Value>
<Value name="51">
<Value>OffertenanfrageDrucktyp</Value>
</Value>
<Value name="52">
<Value>BestellungDrucktyp</Value>
</Value>
<Value name="53">
<Value>AnnahmescheinDrucktyp</Value>
</Value>
<Value name="54">
<Value>AbrechnungDrucktyp</Value>
</Value>
<Value name="55">
<Value>SammelabrechnungDrucktyp</Value>
</Value>
<Value name="56">
<Value>BarzahlungDrucktyp</Value>
</Value>
<Value name="57">
<Value>Mandant</Value>
</Value>
<Value name="58">
<Value>OffertenanfrageFusstext</Value>
</Value>
<Value name="59">
<Value>BestellungFusstext</Value>
</Value>
<Value name="60">
<Value>AnnahmescheinFusstext</Value>
</Value>
<Value name="61">
<Value>AbrechnungFusstext</Value>
</Value>
<Value name="62">
<Value>SammelabrechnungFusstext</Value>
</Value>
<Value name="63">
<Value>BarzahlungFusstext</Value>
</Value>
<Value name="64">
<Value>OffertenanfrageGebFuss</Value>
</Value>
<Value name="65">
<Value>BestellungGebFuss</Value>
</Value>
<Value name="66">
<Value>AnnahmescheinGebFuss</Value>
</Value>
<Value name="67">
<Value>AbrechnungGebFuss</Value>
</Value>
<Value name="68">
<Value>SammelabrechnungGebFuss</Value>
</Value>
<Value name="69">
<Value>BarzahlungGebFuss</Value>
</Value>
<Value name="70">
<Value>AnnahmescheinImportFuss</Value>
</Value>
<Value name="71">
<Value>AnnahmescheinSpezEinst</Value>
</Value>
<Value name="72">
<Value>Preisliste</Value>
</Value>
<Value name="73">
<Value>IsBestellungDatumInaktiv</Value>
</Value>
<Value name="74">
<Value>IsAnnahmeDatumInaktiv</Value>
</Value>
<Value name="75">
<Value>IsKommissionInaktiv</Value>
</Value>
<Value name="76">
<Value>IsAnnahmezeitInaktiv</Value>
</Value>
<Value name="77">
<Value>EinstandsPreisMutieren</Value>
</Value>
<Value name="78">
<Value>GebindescheinAnzKopien</Value>
</Value>
<Value name="79">
<Value>GebindescheinDrucktyp</Value>
</Value>
<Value name="80">
<Value>GebindescheinFusstext</Value>
</Value>
<Value name="81">
<Value>GebindescheinGebFuss</Value>
</Value>
<Value name="82">
<Value>VorschlagAbteilung</Value>
</Value>
<Value name="83">
<Value>VorschlagSachbearbeiter</Value>
</Value>
<Value name="84">
<Value>VorschlagLieferart</Value>
</Value>
<Value name="85">
<Value>VorschlagBestellart</Value>
</Value>
<Value name="86">
<Value>VorschlagKommission</Value>
</Value>
<Value name="87">
<Value>VorschlagBesteller</Value>
</Value>
<Value name="88">
<Value>VorschlagReferenz</Value>
</Value>
<Value name="89">
<Value>VorschlagVertreter</Value>
</Value>
<Value name="90">
<Value>VorschlagAnnahmezeit</Value>
</Value>
<Value name="91">
<Value>IsLagerortInaktiv</Value>
</Value>
<Value name="92">
<Value>SAIntArt</Value>
</Value>
<Value name="93">
<Value>IsAbrechnungstypInaktiv</Value>
</Value>
<Value name="94">
<Value>TeilAnnahmescheinAnzKopien</Value>
</Value>
<Value name="95">
<Value>TeilAnnahmescheinSpezEinst</Value>
</Value>
<Value name="96">
<Value>TeilAnnahmescheinGebFuss</Value>
</Value>
<Value name="97">
<Value>TeilAnnahmescheinFusstext</Value>
</Value>
<Value name="98">
<Value>TeilAnnahmescheinDrucktyp</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="AbrechnungAnzKopien">
</Property>
<Property name="AbrechnungDrucktyp">
</Property>
<Property name="AbrechnungFusstext">
</Property>
<Property name="AbrechnungGebFuss">
</Property>
<Property name="AbrechnungImportFuss">
</Property>
<Property name="AbrechnungSpezEinst">
</Property>
<Property name="Abzug1">
</Property>
<Property name="Abzug1FibuKonto">
</Property>
<Property name="Abzug1Prozent"/>
<Property name="Abzug1Text">
</Property>
<Property name="Abzug2">
</Property>
<Property name="Abzug2FibuKonto">
</Property>
<Property name="Abzug2Prozent"/>
<Property name="Abzug2Text">
</Property>
<Property name="Abzug3">
</Property>
<Property name="Abzug3FibuKonto">
</Property>
<Property name="Abzug3Prozent"/>
<Property name="Abzug3Text">
</Property>
<Property name="AnbruchtsPreisMutieren"/>
<Property name="AnnahmescheinAnzKopien">
</Property>
<Property name="AnnahmescheinDrucktyp">
</Property>
<Property name="AnnahmescheinFusstext">
</Property>
<Property name="AnnahmescheinGebFuss">
</Property>
<Property name="AnnahmescheinSpezEinst">
</Property>
<Property name="BarzahlungAnzKopien">
</Property>
<Property name="BarzahlungDrucktyp">
</Property>
<Property name="BarzahlungFusstext">
</Property>
<Property name="BarzahlungGebFuss">
</Property>
<Property name="BarzahlungSpezEinst">
</Property>
<Property name="BestellNr"/>
<Property name="BestellungAnzKopien">
</Property>
<Property name="BestellungDrucktyp">
</Property>
<Property name="BestellungFusstext">
</Property>
<Property name="BestellungGebFuss">
</Property>
<Property name="DetailPreisMutieren"/>
<Property name="EinstandsPreisMutieren">
</Property>
<Property name="EinstellungenMutieren">
</Property>
<Property name="EngrosPreisMutieren"/>
<Property name="GebindescheinAnzKopien">
</Property>
<Property name="GebindescheinDrucktyp">
</Property>
<Property name="GebindescheinFusstext">
</Property>
<Property name="GebindescheinGebFuss">
</Property>
<Property name="GenerierungOPText">
</Property>
<Property name="Herkunft">
</Property>
<Property name="ImportTyp">
</Property>
<Property name="IsAbrechnungstypInaktiv">
</Property>
<Property name="IsAnnahmeDatumInaktiv">
</Property>
<Property name="IsAnnahmezeitInaktiv">
</Property>
<Property name="IsAuftragDatumInaktiv"/>
<Property name="IsBearbeiterInaktiv">
</Property>
<Property name="IsBestellNrInaktiv"/>
<Property name="IsBestellartInaktiv">
</Property>
<Property name="IsBestellerInaktiv">
</Property>
<Property name="IsBestellungDatumInaktiv">
</Property>
<Property name="IsGebietInaktiv"/>
<Property name="IsKommissionInaktiv">
</Property>
<Property name="IsKonditionenInaktiv">
</Property>
<Property name="IsLagerortInaktiv">
</Property>
<Property name="IsLieferDatumInaktiv"/>
<Property name="IsLieferartInaktiv">
</Property>
<Property name="IsMwstInaktiv">
</Property>
<Property name="IsRabattInaktiv">
</Property>
<Property name="IsReferenzInaktiv">
</Property>
<Property name="IsSkontoInaktiv"/>
<Property name="IsVertreterInaktiv">
</Property>
<Property name="LieferZeit"/>
<Property name="Mandant">
</Property>
<Property name="OfferteAnfrageAnzKopien">
</Property>
<Property name="OffertenanfrageDrucktyp">
</Property>
<Property name="OffertenanfrageFusstext">
</Property>
<Property name="OffertenanfrageGebFuss">
</Property>
<Property name="Preisliste">
</Property>
<Property name="SAIntArt">
</Property>
<Property name="SammelabrechnungAnzKopien">
</Property>
<Property name="SammelabrechnungDrucktyp">
</Property>
<Property name="SammelabrechnungFusstext">
</Property>
<Property name="SammelabrechnungGebFuss">
</Property>
<Property name="SammelabrechnungImportFuss">
</Property>
<Property name="SammelabrechnungSpezEinst">
</Property>
<Property name="TeilAnnahmescheinAnzKopien">
</Property>
<Property name="TeilAnnahmescheinDrucktyp">
</Property>
<Property name="TeilAnnahmescheinFusstext">
</Property>
<Property name="TeilAnnahmescheinGebFuss">
</Property>
<Property name="TeilAnnahmescheinSpezEinst">
</Property>
<Property name="TestGebinderetouren">
</Property>
<Property name="TextOP">
</Property>
<Property name="VorschlagAbteilung">
</Property>
<Property name="VorschlagAnnahmezeit">
</Property>
<Property name="VorschlagBestellart">
</Property>
<Property name="VorschlagBesteller">
</Property>
<Property name="VorschlagKommission">
</Property>
<Property name="VorschlagLieferart">
</Property>
<Property name="VorschlagReferenz">
</Property>
<Property name="VorschlagSachbearbeiter"/>
<Property name="VorschlagVertreter">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.BestellungsKopf">
<Super>%Persistent,%Populate,%XML.Adaptor,DBCore.MandantRel</Super>
<TimeChanged>62430,55735.357053</TimeChanged>
<TimeCreated>61347,63620.242268</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="BestellungsNr">
<Description>
BestellungsNr</Description>
<Type>%Integer</Type>
</Property>

<Property name="AnnahmeNr">
<Description>
AnnahmeNr</Description>
<Type>%Integer</Type>
</Property>

<Property name="AbrechnungsNr">
<Description>
AbrechnungsNr</Description>
<Type>%Integer</Type>
</Property>

<Property name="BestellNrAbnehmer">
<Description>
BestellNr Abnemer (Alliance)</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Index name="BestellNrAbnehmerIdx">
<Properties>BestellNrAbnehmer</Properties>
</Index>

<Property name="Bestelldatum">
<Description>
Bestelldatum</Description>
<Type>%Date</Type>
</Property>

<Property name="Annahmedatum">
<Description>
Annahmedatum</Description>
<Type>%Date</Type>
</Property>

<Property name="Abrechnungsdatum">
<Description>
Abrechnungsdatum</Description>
<Type>%Date</Type>
</Property>

<Property name="Bestellstatus">
<Description>
Bestellstatus</Description>
<Type>%Integer</Type>
</Property>

<Property name="StatusAutoVerarbeitung">
<Description>
Status für automatische Verarbeitung</Description>
<Type>%Integer</Type>
</Property>

<Property name="CodeVerarbeitung">
<Description>
Code Verarbeitung</Description>
<Type>%Integer</Type>
</Property>

<Property name="CodeMwst">
<Description>
Code Mwst O/I/E/A</Description>
<Type>%Integer</Type>
</Property>

<Property name="Besteller">
<Description>
Besteller</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Referenz">
<Description>
Referenz</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Fusstext1">
<Description>
Fusstext 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="4096"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Fusstext2">
<Description>
Fusstext 2</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Fusstext3">
<Description>
Fusstext 3</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Fusstext4">
<Description>
Fusstext 4</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Anrede">
<Description>
Anrede/Bezeichnung</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Name">
<Description>
Name</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Adresszeile1">
<Description>
Adresszeile 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Adresszeile2">
<Description>
Adresszeile 2</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Adresszeile3">
<Description>
Adresszeile 3</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Plz">
<Description>
PLZ</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="15"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="PlzZusatz">
<Description>
PLZ Zusatz</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="15"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Ort">
<Description>
Ort</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="RabattProzent">
<Description>
Rabatt in %</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Kurs">
<Description>
Kurs</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Kurseinheit">
<Description>
Kurseinheit</Description>
<Type>%Integer</Type>
</Property>

<Property name="Annahmezeit">
<Description>
Annahmezeit</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="RetourenErfasst">
<Description>
Retouren erfasst</Description>
<Type>%Boolean</Type>
</Property>

<Property name="AuftragValidiert">
<Description>
Auftrag validiert</Description>
<Type>%Boolean</Type>
</Property>

<Property name="Skonto">
<Description>
Skonto</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="SachbearbeiterNr">
<Type>%Library.Integer</Type>
</Property>

<Property name="BetragFWInklMwst">
<Description>
Betrag FW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragFWInklMwst}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragInklMwstFWClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragFWExklMwst">
<Description>
Betrag exkl. Mwst FW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragFWExklMwst}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragExklMwstFWClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BearbeitungsstatusOA">
<Description>
BearbeitungsstatusOA - Offertenanfrage</Description>
<Type>%Integer</Type>
</Property>

<Property name="BearbeitungsstatusBE">
<Description>
BearbeitungsstatusBE - Bestellung</Description>
<Type>%Integer</Type>
</Property>

<Property name="BearbeitungsstatusAS">
<Description>
BearbeitungsstatusAS - Annahmeschein</Description>
<Type>%Integer</Type>
</Property>

<Property name="BearbeitungsstatusAR">
<Description>
BearbeitungsstatusAR - Abrechnung</Description>
<Type>%Integer</Type>
</Property>

<Property name="BearbeitungsstatusBZ">
<Description>
BearbeitungsstatusBZ - barzahlung</Description>
<Type>%Integer</Type>
</Property>

<Property name="Kommission">
<Type>%Library.String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GDBestellung">
<Type>DBAgrofreshEK.GebDetail</Type>
<Cardinality>many</Cardinality>
<Inverse>Bestellung</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="Bestellungspos">
<Type>DBAgrofreshEK.Bestellungspos</Type>
<Cardinality>children</Cardinality>
<Inverse>Bestellungskopf</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="Zahlungskondition">
<Type>DBDebiKredi.SD.KZahlungskond</Type>
<Cardinality>one</Cardinality>
<Inverse>BestellungsKopf</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Zahlungskondition"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ZahlungskonditionIndex">
<Properties>Zahlungskondition</Properties>
</Index>

<Property name="Lieferart">
<Type>DBAgrofreshEK.SD.Lieferart</Type>
<Cardinality>one</Cardinality>
<Inverse>BKLieferart</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Lieferart"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="LieferartIndex">
<Properties>Lieferart</Properties>
</Index>

<Property name="Bestellart">
<Type>DBAgrofreshEK.SD.Bestellart</Type>
<Cardinality>one</Cardinality>
<Inverse>BKBestellart</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Bestellart"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="BestellartIndex">
<Properties>Bestellart</Properties>
</Index>

<Property name="Fusstext">
<Type>DBAgrofreshEK.SD.Fusstext</Type>
<Cardinality>one</Cardinality>
<Inverse>BKFusstext</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Fusstext"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="FusstextIndex">
<Properties>Fusstext</Properties>
</Index>

<Property name="Adresse">
<Type>DBDebiKredi.Kreditor</Type>
<Cardinality>one</Cardinality>
<Inverse>BkAdresse</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Adresse"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="AdresseIndex">
<Properties>Adresse</Properties>
</Index>

<Property name="ZahlAdresse">
<Type>DBDebiKredi.Kreditor</Type>
<Cardinality>one</Cardinality>
<Inverse>BKZahlAdresse</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="ZahlAdresse"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ZahlAdresseIndex">
<Properties>ZahlAdresse</Properties>
</Index>

<Property name="Waehrung">
<Type>DBFibu.SD.Fremdwaehrung</Type>
<Cardinality>one</Cardinality>
<Inverse>BKWaehrung</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Waehrung"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="WaehrungIndex">
<Properties>Waehrung</Properties>
</Index>

<Property name="BetragEWInklMwst">
<Description>
Betrag EW Inklusiv Mwst</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragEWInklMwst}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragEWInklMwstByBestClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragMwst">
<Description>
Betrag Mwst</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragMwst}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragMwstByBestClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragMwstFW">
<Description>
Betrag Mwst</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragMwstFW}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragMwstFWByBestClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragEWExklMwst">
<Description>
Betrag EW Exklusiv Mwst</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragEWExklMwst}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragEWExklMwstByBestClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Warenaufwand">
<Description>
Warenaufwand</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Warenaufwand}=##class(DBAgrofreshEK.BestellungsKopf).GetWarenaufwandByBestClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebindeSaldo">
<Description>
GebindeSaldo</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GebindeSaldo}=##class(DBAgrofreshEK.BestellungsKopf).GetGebindeSaldoByBestClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="TotalMitGebinde">
<Description>
GebindeSaldo + BetragEWInklMwst</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {TotalMitGebinde}= {GebindeSaldo} + {GebindeMwstBetrag} + {BetragEWInklMwst} - {Skonto}</SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebindeVerrechnungAktiv">
<Description>
GebindeVerrechnungAktiv</Description>
<Type>%Boolean</Type>
</Property>

<Property name="FreigabeProduzentenabrechnung">
<Description>
FreigabeProduzentenabrechnung</Description>
<Type>%Boolean</Type>
</Property>

<Property name="OP">
<Type>DBDebiKredi.OPKredi</Type>
<Cardinality>one</Cardinality>
<Inverse>BestellungAgrofresh</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="OP"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="OPIndex">
<Properties>OP</Properties>
</Index>

<Property name="Verbucht">
<Description>
Verbucht</Description>
<Type>%Boolean</Type>
</Property>

<Property name="VerbuchungsjournalNr">
<Description>
Verbuchungsjournal-Nummer</Description>
<Type>%Integer</Type>
</Property>

<Property name="GewichtNetto">
<Description>
GewichtNetto</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GewichtNetto}=##class(DBAgrofreshEK.BestellungsKopf).GetGewichtNettoClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GewichtTara">
<Description>
GewichtTara</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GewichtTara}=##class(DBAgrofreshEK.BestellungsKopf).GetGewichtTaraClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GewichtBrutto">
<Description>
GewichtBrutto</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GewichtBrutto}=##class(DBAgrofreshEK.BestellungsKopf).GetGewichtBruttoClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="SkontoFW">
<Description>
SkontoFW</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Abteilung">
<Type>DBCore.Abteilung</Type>
<Cardinality>one</Cardinality>
<Inverse>AuftragEKAbteilung</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abteilung"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="TotalMitGebindeFW">
<Description>
GebindeSaldoFW + BetragEWInklMwstFW + MWST Gebinde</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {TotalMitGebindeFW}={GebindeSaldoFW}+{GebindeMwstBetragFW}+{BetragFWInklMwst}-{SkontoFW} </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebindeSaldoFW">
<Description>
GebindeSaldoFW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GebindeSaldoFW}=##class(DBAgrofreshEK.BestellungsKopf).GetGebindeSaldoFWByBestClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebindeMwstBetragFW">
<Description>
GebindeMwstBetragFW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GebindeMwstBetragFW}=##class(DBAgrofreshEK.BestellungsKopf).GetGebindeMwstFWByBestClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebindeMwstBetrag">
<Description>
GebindeMwstBetrag</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GebindeMwstBetrag}=##class(DBAgrofreshEK.BestellungsKopf).GetGebindeMwstByBestClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Mandant">
<Type>%String</Type>
</Property>

<ForeignKey name="FKMandant">
<Properties>Mandant</Properties>
<ReferencedClass>DBCore.Mandant</ReferencedClass>
<ReferencedKey>MandIdIndex</ReferencedKey>
</ForeignKey>

<Index name="MandantIdx">
<Properties>Mandant</Properties>
</Index>

<Property name="Abzug1Typ">
<Description>
Abzug1</Description>
<Type>%Integer</Type>
</Property>

<Property name="Abzug1Prozent">
<Description>
Abzung_in_%</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Abzug1Text">
<Description>
Abzug1_Text</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Abzug1Mwst">
<Description>
Abzug1 Mwst Code</Description>
<Type>DBFibu.SD.Mwst</Type>
<Cardinality>one</Cardinality>
<Inverse>BestkopfAbzug1</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abzug1Mwst"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="Abzug1MwstIndex">
<Properties>Abzug1Mwst</Properties>
</Index>

<Property name="Abzug1MwstSatz">
<Description>
Abzug1 MwstSatz</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Abzug1MwstSatzExport">
<Description>
Abzug1 MwstSatzExport</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Abzug2Typ">
<Description>
Abzug2</Description>
<Type>%Integer</Type>
</Property>

<Property name="Abzug2Prozent">
<Description>
Abzung2_in_%</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Abzug2Text">
<Description>
Abzug2_Text</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Abzug2Mwst">
<Description>
Abzug2 Mwst Code</Description>
<Type>DBFibu.SD.Mwst</Type>
<Cardinality>one</Cardinality>
<Inverse>BestkopfAbzug2</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abzug2Mwst"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="Abzug2MwstIndex">
<Properties>Abzug2Mwst</Properties>
</Index>

<Property name="Abzug2MwstSatz">
<Description>
Abzug2 MwstSatz</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Abzug2MwstSatzExport">
<Description>
Abzug2 MwstSatzExport</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Abzug3Typ">
<Description>
Abzug3</Description>
<Type>%Integer</Type>
</Property>

<Property name="Abzug3Prozent">
<Description>
Abzung3_in_%</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Abzug3Text">
<Description>
Abzug3_Text</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Abzug3Mwst">
<Description>
Abzug3 Mwst Code</Description>
<Type>DBFibu.SD.Mwst</Type>
<Cardinality>one</Cardinality>
<Inverse>BestkopfAbzug3</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abzug3Mwst"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="Abzug3MwstIndex">
<Properties>Abzug3Mwst</Properties>
</Index>

<Property name="Abzug3MwstSatz">
<Description>
Abzug3 MwstSatz</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Abzug3MwstSatzExport">
<Description>
Abzug3 MwstSatzExport</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Abzug1FibuKonto">
<Type>DBFibu.Konto</Type>
<Cardinality>one</Cardinality>
<Inverse>BestellungskopfAbzug1</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abzug1FibuKonto"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="Abzug1FibuKontoIndex">
<Properties>Abzug1FibuKonto</Properties>
</Index>

<Property name="Abzug2FibuKonto">
<Type>DBFibu.Konto</Type>
<Cardinality>one</Cardinality>
<Inverse>BestellungskopfAbzug2</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abzug2FibuKonto"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="Abzug2FibuKontoIndex">
<Properties>Abzug2FibuKonto</Properties>
</Index>

<Property name="Abzug3FibuKonto">
<Type>DBFibu.Konto</Type>
<Cardinality>one</Cardinality>
<Inverse>BestellungskopfAbzug3</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abzug3FibuKonto"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="Abzug3FibuKontoIndex">
<Properties>Abzug3FibuKonto</Properties>
</Index>

<Property name="BetragAbzug1EWInkl">
<Description>
BetragAbzug1EWInkl</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug1EWInkl}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWInklClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragAbzug1EWExkl">
<Description>
BetragAbzug1EWExkl</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug1EWExkl}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWExklClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragAbzug1EWMwst">
<Description>
BetragAbzug1EWMwst</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug1EWMwst}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWMwstClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragAbzug1FWInkl">
<Description>
BetragAbzug1FWInkl</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug1FWInkl}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1FWInklClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragAbzug1FWExkl">
<Description>
BetragAbzug1FWExkl</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug1FWExkl}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1FWExklClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragAbzug1FWMwst">
<Description>
BetragAbzug1FWMwst</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug1FWMwst}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1FWMwstClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragAbzug2EWInkl">
<Description>
BetragAbzug2EWInkl</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug2EWInkl}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2EWInklClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragAbzug2EWExkl">
<Description>
BetragAbzug2EWExkl</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug2EWExkl}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2EWExklClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragAbzug2EWMwst">
<Description>
BetragAbzug2EWMwst</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug2EWMwst}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2EWMwstClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragAbzug2FWInkl">
<Description>
BetragAbzug2FWInkl</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug2FWInkl}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2FWInklClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragAbzug2FWExkl">
<Description>
BetragAbzug2FWExkl</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug2FWExkl}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2FWExklClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragAbzug2FWMwst">
<Description>
BetragAbzug2FWMwst</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug2FWMwst}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2FWMwstClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragAbzug3EWInkl">
<Description>
BetragAbzug3EWInkl</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug3EWInkl}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3EWInklClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragAbzug3EWExkl">
<Description>
BetragAbzug3EWExkl</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug3EWExkl}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3EWExklClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragAbzug3EWMwst">
<Description>
BetragAbzug3EWMwst</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug3EWMwst}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3EWMwstClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragAbzug3FWInkl">
<Description>
BetragAbzug3FWInkl</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug3FWInkl}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3FWInklClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragAbzug3FWExkl">
<Description>
BetragAbzug3FWExkl</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug3FWExkl}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3FWExklClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragAbzug3FWMwst">
<Description>
BetragAbzug3FWMwst</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragAbzug3FWMwst}=##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3FWMwstClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="TotalMitGebMitAbzug">
<Description>
GebindeSaldo + Nettobetrag2InklMwstEW - Abzuege 1-3</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {TotalMitGebMitAbzug}={GebindeSaldo} + {GebindeMwstBetrag} + {BetragEWInklMwst}-{Skonto}-{BetragAbzug1EWInkl}-{BetragAbzug2EWInkl}-{BetragAbzug3EWInkl} </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="TotalMitGebMitAbzugFW">
<Description>
GebindeSaldoFW + BetragEWInklMwstFW + MWST Gebinde - Abzuege 1-3</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {TotalMitGebMitAbzugFW}={GebindeSaldoFW}+{GebindeMwstBetragFW}+{BetragFWInklMwst}-{SkontoFW}-{BetragAbzug1FWInkl}-{BetragAbzug2FWInkl}-{BetragAbzug3FWInkl}  </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="TotalOhneGebMitAbzugInkl">
<Description>
Nettobetrag2InklMwstEW - Abzuege 1-3</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {TotalOhneGebMitAbzugInkl}={BetragEWInklMwst}-{Skonto}-{BetragAbzug1EWInkl}-{BetragAbzug2EWInkl}-{BetragAbzug3EWInkl} </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="TotalOhneGebMitAbzugExkl">
<Description>
Nettobetrag2ExklMwstEW - Abzuege 1-3</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {TotalOhneGebMitAbzugExkl}={BetragEWExklMwst}-{Skonto}-{BetragAbzug1EWExkl}-{BetragAbzug2EWExkl}-{BetragAbzug3EWExkl} </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="TotalOhneGebMitAbzugFW">
<Description>
BetragEWInklMwstFW - Abzuege 1-3</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {TotalOhneGebMitAbzugFW}={BetragFWInklMwst}-{SkontoFW}-{BetragAbzug1FWInkl}-{BetragAbzug2FWInkl}-{BetragAbzug3FWInkl}  </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="TotalOhneGebMitAbzugFWExkl">
<Description>
 BetragEWExkklMwstFWe - Abzuege 1-3</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {TotalOhneGebMitAbzugFWExkl}={BetragFWExklMwst}-{SkontoFW}-{BetragAbzug1FWExkl}-{BetragAbzug2FWExkl}-{BetragAbzug3FWExkl}  </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Lagerort">
<Type>DBAgrofresh.SD.Lagerort</Type>
<Cardinality>one</Cardinality>
<Inverse>VorschlagBest</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Lagerort"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="LagerortIndex">
<Properties>Lagerort</Properties>
</Index>

<Property name="WarenannehmerNr">
<Type>%Library.Integer</Type>
</Property>

<UDLText name="T">
<Content><![CDATA[
// Wird bei Allianz als VZ verwendet

]]></Content>
</UDLText>

<Property name="Abnehmner">
<Type>DBDebiKredi.Debitor</Type>
<Cardinality>one</Cardinality>
<Inverse>BestellungAbnehmer</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="AbnehmnerIndex">
<Properties>Abnehmner</Properties>
</Index>

<Property name="AnnahmescheinPDF">
<Type>DBAgrofreshEK.PDFStream</Type>
<Cardinality>one</Cardinality>
<Inverse>BestAnnahmeschein</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="AnnahmescheinPDFIndex">
<Properties>AnnahmescheinPDF</Properties>
<Unique>1</Unique>
</Index>

<Property name="EtikettenPDF">
<Type>DBAgrofreshEK.PDFStream</Type>
<Cardinality>one</Cardinality>
<Inverse>BestEtiketten</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="EtikettenPDFIndex">
<Properties>EtikettenPDF</Properties>
<Unique>1</Unique>
</Index>

<Property name="GebindeVerrechnung">
<Description>
Einstellung von Bestellungssteuerung ob Gebinde mit Saldovortrag oder verrechnen....</Description>
<Type>%Integer</Type>
</Property>

<Property name="PlattformBestKopf">
<Type>DBPlattform.BestKopf</Type>
<Cardinality>many</Cardinality>
<ClientName>PlattformBestKopf</ClientName>
<Inverse>DefinitiveBestellung</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="InEdit">
<Description>
true, wenn Details oder Kopf editiert werden</Description>
<Type>%Boolean</Type>
<InitialExpression>0</InitialExpression>
</Property>

<Property name="BetragEWInklMwstAbzug">
<Description>
Betrag EW Inklusiv Mwst für Abzug</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragEWInklMwstAbzug}=##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugEWInklMwstClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragEWExklMwstAbzug">
<Description>
Betrag EW Exklusiv Mwst für Abzug</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragEWExklMwstAbzug}=##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugEWExklMwstClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragFWInklMwstAbzug">
<Description>
Betrag FW Inklusiv Mwst für Abzug</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragFWInklMwstAbzug}=##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugInklMwstFWClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragFWExklMwstAbzug">
<Description>
Betrag FW Exklusiv Mwst für Abzug</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragFWExklMwstAbzug}=##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugExklMwstFWClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragForAbzugEWInklMwst">
<Description>
Betrag EW Inklusiv Mwst</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragForAbzugEWInklMwst}=##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugEWInklMwstClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragForAbzugMwst">
<Description>
Betrag Mwst</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragForAbzugMwst}=##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugMwstClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragForAbzugEWExklMwst">
<Description>
Betrag EW Exklusiv Mwst</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragForAbzugEWExklMwst}=##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugEWExklMwstClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragForAbzugFWInklMwst">
<Description>
Betrag FW Inklusiv Mwst</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragForAbzugFWInklMwst}=##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugInklMwstFWClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragForAbzugFWMwst">
<Description>
Betrag Mwst FW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragForAbzugFWMwst}=##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugMwstFWClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragForAbzugFWExklMwst">
<Description>
Betrag FW Exklusiv Mwst</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {BetragForAbzugFWExklMwst}=##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugExklMwstFWClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="AbrechnungPDF">
<Type>DBAgrofreshEK.PDFStream</Type>
<Cardinality>one</Cardinality>
<Inverse>BestAbrechnung</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="AbrechnungPDFIndex">
<Properties>AbrechnungPDF</Properties>
<Unique>1</Unique>
</Index>

<Property name="IsHauptanlieferung">
<Type>%Boolean</Type>
</Property>

<Property name="TeilanlieferungNr">
<Type>%Integer</Type>
</Property>

<Property name="HauptanlieferungNr">
<Type>%Integer</Type>
</Property>

<Index name="TeilanlieferungIndex">
<Data>%%ID,BestellungsNr</Data>
<Properties>Mandant,HauptanlieferungNr,TeilanlieferungNr</Properties>
</Index>

<Index name="AbrechnungsnrIndex">
<Properties>Mandant,AbrechnungsNr</Properties>
</Index>

<Index name="BestellungsNrIndex">
<Properties>Mandant,BestellungsNr</Properties>
</Index>

<Index name="AnnahmeNrIndex">
<Properties>Mandant,AnnahmeNr</Properties>
</Index>

<Index name="AbrechnungsdatumIndex">
<Type>bitmap</Type>
<Properties>Abrechnungsdatum</Properties>
</Index>

<Property name="WebEdiCsv">
<Type>DBAgrofreshEK.CSVStream</Type>
<Cardinality>one</Cardinality>
<Inverse>BestKopf</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="WebEdiCsvIndex">
<Properties>WebEdiCsv</Properties>
<Unique>1</Unique>
</Index>

<Property name="IsStorno">
<Description>
IsStorno</Description>
<Type>%Boolean</Type>
</Property>

<Index name="TreeViewIndex">
<Properties>Mandant,Bestellstatus,Abrechnungsdatum,AbrechnungsNr,Annahmedatum,AnnahmeNr,Bestelldatum,BestellungsNr</Properties>
</Index>

<Property name="BetragVerzollung">
<Type>%Decimal</Type>
</Property>

<Property name="BetragTransport">
<Type>%Decimal</Type>
</Property>

<Property name="BetragDivKosten">
<Type>%Decimal</Type>
</Property>

<Property name="WarenEingang">
<Description>
Flag ob es sich bei der Bestellung um einen WarenEingang handelt</Description>
<Type>%Boolean</Type>
</Property>

<Property name="Abrechnungstyp">
<Type>DBAgrofreshEK.SD.Abrechnungstyp</Type>
<Cardinality>one</Cardinality>
<Inverse>Bestellung</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abrechnungstyp"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="Warenannehmer">
<Type>DBCore.Mitarbeiter</Type>
<Cardinality>one</Cardinality>
<Inverse>BestKopfWarenannehmer</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Warenannehmer"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="Sachbearbeiter">
<Type>DBCore.Mitarbeiter</Type>
<Cardinality>one</Cardinality>
<Inverse>BestKopfSachbearbeiter</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Sachbearbeiter"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Method name="GetBetragAbzug1EWInklClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	set bestellung = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	if (bestellung '= "") {
		if ((bestellung.CodeMwst = 3) || (bestellung.CodeMwst = 2)) {
			set betragExkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWExklClass(Oid)
			set betragAbzug = (betragExkl + ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWMwstClass(Oid))
			
		} else {
			set betragNetto = ##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugEWInklMwstClass(Oid)
			// Abzug 5 nicht von Total rechnen, dh gem AW 13.7.2010
			//if (bestellung.Abzug1Typ = 5) {
				// Typ 5 ist immer von Total gerechnet (ohne Artikelgruppen-Einschränkung)
			//	set betragNetto = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragEWInklMwstByBestClass(Oid)
			//}
			if ((bestellung.Abzug1Typ = 1)  || (bestellung.Abzug1Typ = 3) || (bestellung.Abzug1Typ = 4) || (bestellung.Abzug1Typ = 5)) {
				set betragAbzug = ##class(DBUtils.NumberUtils).RoundGemEinst(bestellung.Mandant, betragNetto * bestellung.Abzug1Prozent / 100)
			}
			if ((bestellung.Abzug1Typ = 3) || (bestellung.Abzug1Typ = 5)) {
				set betragAbzug = (-1)*betragAbzug
			}
		}
		k bestellung
	}
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetBetragAbzug1EWExklClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	
	set bestellung = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	if (bestellung '= "") {
		if ((bestellung.CodeMwst = 3) || (bestellung.CodeMwst = 2)) {
			set betragNetto = ##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugEWExklMwstClass(Oid)
			//if (bestellung.Abzug1Typ = 5) {
				// Typ 5 ist immer von Total gerechnet (ohne Artikelgruppen-Einschränkung)
			//	set betragNetto = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragEWExklMwstByBestClass(Oid)
			//}
			if ((bestellung.Abzug1Typ = 1)  || (bestellung.Abzug1Typ = 3) || (bestellung.Abzug1Typ = 4) || (bestellung.Abzug1Typ = 5)) {
				set betragAbzug = ##class(DBUtils.NumberUtils).RoundGemEinst(bestellung.Mandant, betragNetto * bestellung.Abzug1Prozent / 100)
			}
			if ((bestellung.Abzug1Typ = 3) || (bestellung.Abzug1Typ = 5)) {
				set betragAbzug = (-1)*betragAbzug
			}
			k bestellung
		} else {
			set betragInkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWInklClass(Oid)
			set betragAbzug = (betragInkl - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWMwstClass(Oid))
		}
	}
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetBetragAbzug1EWMwstClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	
	set bk = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	if ((bk.Abzug1FibuKonto '= $c(0)) && (bk.Abzug1FibuKonto '= "")) {
		set mandJahr = ##class(DBCore.MandantJahr).GetIdByDatum(bk.Mandant, bk.Annahmedatum)
		set mwstCodeKto = ##class(DBFibu.Konto).GetMwstCodeClass(mandJahr, bk.Abzug1FibuKonto.%Id())
		if ((bk.CodeMwst = 3) ||  ((bk.CodeMwst = 2) && (mwstCodeKto = 52))) {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromExkl(bk.Mandant,##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWExklClass(Oid),bk.Abzug1MwstSatz)
		} elseif (bk.CodeMwst = 2) {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromUrprod(bk.Mandant,##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWExklClass(Oid),bk.Abzug1MwstSatz)
		} else {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromInkl(bk.Mandant,##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWInklClass(Oid),bk.Abzug1MwstSatz)
		}
	}
	/*
	if (##class(DBAgrofreshEK.BestellungsKopf).%ExistsId(Oid)) {
		set betragInkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWInklClass(Oid)
		set betragExkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWExklClass(Oid)
		set betragAbzug = betragInkl - betragExkl
	}
	*/
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetBetragAbzug1FWInklClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	set bestellung = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	if (bestellung '= "") {
		if ((bestellung.CodeMwst = 3) || (bestellung.CodeMwst = 2)) {
			set betragExkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWExklClass(Oid)
			set betragAbzug = (betragExkl + ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWMwstClass(Oid))

		} else {
			set betragNetto = ##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugInklMwstFWClass(Oid)
			//if (bestellung.Abzug1Typ = 5) {
				// Typ 5 ist immer von Total gerechnet (ohne Artikelgruppen-Einschränkung)
			//	set betragNetto = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragInklMwstFWClass(Oid)
			//} 
			if ((bestellung.Abzug1Typ = 1)  || (bestellung.Abzug1Typ = 3) || (bestellung.Abzug1Typ = 4) || (bestellung.Abzug1Typ = 5)) {
				set betragAbzug = ##class(DBUtils.NumberUtils).Round(betragNetto * bestellung.Abzug1Prozent / 100, 2)
			}
			if ((bestellung.Abzug1Typ = 3) || (bestellung.Abzug1Typ = 5)) {
				set betragAbzug = (-1)*betragAbzug
			}
			k bestellung
		}
	}
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetBetragAbzug1FWExklClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	set bestellung = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	if (bestellung '= "") {
		set betragNetto = ##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugExklMwstFWClass(Oid)
		//if (bestellung.Abzug1Typ = 5) {
			// Typ 5 ist immer von Total gerechnet (ohne Artikelgruppen-Einschränkung)
		//	set betragNetto = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragExklMwstFWClass(Oid)
		//}
		if ((bestellung.Abzug1Typ = 1)  || (bestellung.Abzug1Typ = 3) || (bestellung.Abzug1Typ = 4) || (bestellung.Abzug1Typ = 5)) {
			set betragAbzug = ##class(DBUtils.NumberUtils).Round(betragNetto * bestellung.Abzug1Prozent / 100, 2)
		}
		if ((bestellung.Abzug1Typ = 3) || (bestellung.Abzug1Typ = 5)) {
			set betragAbzug = (-1)*betragAbzug
		}
		k bestellung
	}
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetBetragAbzug1FWMwstClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	
	set bk = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	if ((bk.Abzug1FibuKonto '= $c(0)) && (bk.Abzug1FibuKonto '= "")) {
		set mandJahr = ##class(DBCore.MandantJahr).GetIdByDatum(bk.Mandant, bk.Annahmedatum)
		set mwstCodeKto = ##class(DBFibu.Konto).GetMwstCodeClass(mandJahr, bk.Abzug1FibuKonto.%Id())
		if ((bk.CodeMwst = 3) ||  ((bk.CodeMwst = 2) && (mwstCodeKto = 52))) {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromExklFW(##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1FWExklClass(Oid),bk.Abzug1MwstSatz)
		} elseif (bk.CodeMwst = 2) {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromUrprodFW(##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1FWExklClass(Oid),bk.Abzug1MwstSatz)
		} else {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromInklFW(##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1FWInklClass(Oid),bk.Abzug1MwstSatz)
		}
	}
	/*if (##class(DBAgrofreshEK.BestellungsKopf).%ExistsId(Oid)) {
		set betragInkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1FWInklClass(Oid)
		set betragExkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1FWExklClass(Oid)
		set betragAbzug = betragInkl - betragExkl
	}*/
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetBetragAbzug2EWInklClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	set bestellung = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	if ((bestellung '= "") && (+bestellung.Abzug2Typ '= 0)) {
		
		set mandJahr = ##class(DBCore.MandantJahr).GetIdByDatum(bestellung.Mandant, bestellung.Annahmedatum)
		
		set mwstSteuerungKto = ##class(DBFibu.Konto).GetMwstSteuerungClass(mandJahr, bestellung.Abzug2FibuKonto.%Id())
		
		if ((bestellung.CodeMwst = 3) || ((bestellung.CodeMwst = 2) && (+mwstSteuerungKto = 3))) {
			set betragExkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2EWExklClass(Oid)
			set betragAbzug = (betragExkl + ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2EWMwstClass(Oid))

		} else {
			set betragNetto = ##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugEWInklMwstClass(Oid)
			if ((bestellung.Abzug1Typ = 3) || (bestellung.Abzug1Typ = 5)) {
				set betragNetto = betragNetto - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWInklClass(Oid)
			}
			if (bestellung.Abzug2Typ = 1) {
				if ((bestellung.Abzug1Typ '= 3) && (bestellung.Abzug1Typ '= 5)) {
					set betragNetto = betragNetto - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWInklClass(Oid)
				}
			}
			if ((bestellung.Abzug2Typ = 1) || (bestellung.Abzug2Typ = 4)) {
				set betragAbzug = ##class(DBUtils.NumberUtils).RoundGemEinst(bestellung.Mandant, betragNetto * bestellung.Abzug2Prozent / 100)
			}
		}
		k bestellung
	}
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetBetragAbzug2EWExklClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	set bestellung = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	if ((bestellung '= "") && (+bestellung.Abzug2Typ '= 0)) {
		if ((bestellung.CodeMwst = 3) || (bestellung.CodeMwst = 2)) {
			set mandJahr = ##class(DBCore.MandantJahr).GetIdByDatum(bestellung.Mandant, bestellung.Annahmedatum)
			set mwstSteuerungKto = ##class(DBFibu.Konto).GetMwstSteuerungClass(mandJahr, bestellung.Abzug2FibuKonto.%Id())
		
			if ((bestellung.CodeMwst = 2) && (+mwstSteuerungKto = 3)) {
				// wenn uproduktion aber abzug exkl gilt für abzug inkl als exkl ( Bsp alliance Verwaltungskosten)
				set betragNetto = ##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugEWInklMwstClass(Oid)
			} else {
				set betragNetto = ##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugEWExklMwstClass(Oid)
			}
			if ((bestellung.Abzug1Typ = 3) || (bestellung.Abzug1Typ = 5)) {
				set betragNetto = betragNetto - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWExklClass(Oid)
			}
			if (bestellung.Abzug2Typ = 1) {
				if ((bestellung.Abzug1Typ '= 3) && (bestellung.Abzug1Typ '= 5)) {
					set betragNetto = betragNetto - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWExklClass(Oid)
				}
			}
			if ((bestellung.Abzug2Typ = 1) || (bestellung.Abzug2Typ = 4)) {
				set betragAbzug = ##class(DBUtils.NumberUtils).RoundGemEinst(bestellung.Mandant, betragNetto * bestellung.Abzug2Prozent / 100)
			}
		} else {
			set betragInkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2EWInklClass(Oid)
			set betragAbzug = (betragInkl - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2EWMwstClass(Oid))
		}
		k bestellung
	}
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetBetragAbzug2EWMwstClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	
	set bk = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	
	if ((bk.Abzug2FibuKonto '= $c(0)) && (bk.Abzug2FibuKonto '= "")) {
		set mandJahr = ##class(DBCore.MandantJahr).GetIdByDatum(bk.Mandant, bk.Annahmedatum)
		set mwstCodeKto = ##class(DBFibu.Konto).GetMwstCodeClass(mandJahr, bk.Abzug2FibuKonto.%Id())
		if ((bk.CodeMwst = 3) ||  ((bk.CodeMwst = 2) && (mwstCodeKto = 52))) {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromExkl(bk.Mandant,##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2EWExklClass(Oid),bk.Abzug2MwstSatz)
		} elseif (bk.CodeMwst = 2) {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromUrprod(bk.Mandant,##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2EWExklClass(Oid),bk.Abzug2MwstSatz)
		} else {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromInkl(bk.Mandant,##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2EWInklClass(Oid),bk.Abzug2MwstSatz)
		}
	}
	/*
	if (##class(DBAgrofreshEK.BestellungsKopf).%ExistsId(Oid)) {
		set betragInkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2EWInklClass(Oid)
		set betragExkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2EWExklClass(Oid)
		set betragAbzug = betragInkl - betragExkl
	}
	*/
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetBetragAbzug2FWInklClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	set bestellung = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	if (bestellung '= "") {
		set betragNetto = ##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugInklMwstFWClass(Oid)
		if (bestellung.Abzug2Typ = 1) {
			if ((bestellung.Abzug1Typ '= 3) && (bestellung.Abzug1Typ '= 5)) {
				set betragNetto = betragNetto - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1FWInklClass(Oid)
			}
		}
		if ((bestellung.Abzug2Typ = 1) || (bestellung.Abzug2Typ = 4)) {
			set betragAbzug = ##class(DBUtils.NumberUtils).Round(betragNetto * bestellung.Abzug2Prozent / 100, 2)
		}
		k bestellung
	}
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetBetragAbzug2FWExklClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	set bestellung = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	if (bestellung '= "") {
		set betragNetto = ##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugExklMwstFWClass(Oid)
		if (bestellung.Abzug2Typ = 1) {
			if ((bestellung.Abzug1Typ '= 3) && (bestellung.Abzug1Typ '= 5)) {
				set betragNetto = betragNetto - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1FWExklClass(Oid)
			}
		}
		if ((bestellung.Abzug2Typ = 1) || (bestellung.Abzug2Typ = 4)) {
			set betragAbzug = ##class(DBUtils.NumberUtils).Round(betragNetto * bestellung.Abzug2Prozent / 100, 2)
		}
		k bestellung
	}
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetBetragAbzug2FWMwstClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	
	set bk = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	if ((bk.Abzug2FibuKonto '= $c(0)) && (bk.Abzug2FibuKonto '= "")) {
		set mandJahr = ##class(DBCore.MandantJahr).GetIdByDatum(bk.Mandant, bk.Annahmedatum)
		set mwstCodeKto = ##class(DBFibu.Konto).GetMwstCodeClass(mandJahr, bk.Abzug2FibuKonto.%Id())
		if ((bk.CodeMwst = 3) ||  ((bk.CodeMwst = 2) && (mwstCodeKto = 52))) {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromExklFW(##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2FWExklClass(Oid),bk.Abzug2MwstSatz)
		} elseif (bk.CodeMwst = 2) {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromUrprodFW(##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2FWExklClass(Oid),bk.Abzug2MwstSatz)
		} else {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromInklFW(##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2FWInklClass(Oid),bk.Abzug2MwstSatz)
		}
	}
	/*if (##class(DBAgrofreshEK.BestellungsKopf).%ExistsId(Oid)) {
		set betragInkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2FWInklClass(Oid)
		set betragExkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2FWExklClass(Oid)
		set betragAbzug = betragInkl - betragExkl
	}*/
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetBetragAbzug3EWInklClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	set bestellung = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	if (bestellung '= "") {
		if ((bestellung.CodeMwst = 3) || (bestellung.CodeMwst = 2)) {
			set betragExkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3EWExklClass(Oid)
			set betragAbzug = (betragExkl + ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3EWMwstClass(Oid))

		} else {
			set betragNetto = ##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugEWInklMwstClass(Oid)
			if ((bestellung.Abzug1Typ = 3) || (bestellung.Abzug1Typ = 5)) {
				set betragNetto = betragNetto - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWInklClass(Oid)
			}
			if (bestellung.Abzug3Typ = 1) {
				if ((bestellung.Abzug1Typ '= 3) && (bestellung.Abzug1Typ '= 5)) {
					set betragNetto = betragNetto - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWInklClass(Oid) - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2EWInklClass(Oid)
				} else {
					set betragNetto = betragNetto - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2EWInklClass(Oid)
				}
			}
			if ((bestellung.Abzug3Typ = 1) || (bestellung.Abzug3Typ = 4)) {
				set betragAbzug = ##class(DBUtils.NumberUtils).RoundGemEinst(bestellung.Mandant, betragNetto * bestellung.Abzug3Prozent / 100)
			}
		}
		k bestellung
	}
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetBetragAbzug3EWExklClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	set bestellung = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	if (bestellung '= "") {
		if ((bestellung.CodeMwst = 3) || (bestellung.CodeMwst = 2)) {
			set betragNetto = ##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugEWExklMwstClass(Oid)
			if ((bestellung.Abzug1Typ = 3) || (bestellung.Abzug1Typ = 5)) {
				set betragNetto = betragNetto - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWExklClass(Oid)
			}
			if (bestellung.Abzug3Typ = 1) {
				if ((bestellung.Abzug1Typ '= 3) && (bestellung.Abzug1Typ '= 5)) {
					set betragNetto = betragNetto - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1EWExklClass(Oid) - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2EWExklClass(Oid)
				} else {
					set betragNetto = betragNetto - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2EWExklClass(Oid)
				}
			}
			if ((bestellung.Abzug3Typ = 1) || (bestellung.Abzug3Typ = 4)) {
				set betragAbzug = ##class(DBUtils.NumberUtils).RoundGemEinst(bestellung.Mandant, betragNetto * bestellung.Abzug3Prozent / 100)
			}
		} else {
			set betragInkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3EWInklClass(Oid)
			set betragAbzug = (betragInkl - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3EWMwstClass(Oid))
		}
		k bestellung
	}
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetBetragAbzug3EWMwstClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	
	set bk = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	if ((bk '= $c(0)) && (bk.Abzug3FibuKonto '= $c(0)) && (bk.Abzug3FibuKonto '= "")) {
		set mandJahr = ##class(DBCore.MandantJahr).GetIdByDatum(bk.Mandant, bk.Annahmedatum)
		set mwstCodeKto = ##class(DBFibu.Konto).GetMwstCodeClass(mandJahr, bk.Abzug3FibuKonto.%Id())
		if ((bk.CodeMwst = 3) ||  ((bk.CodeMwst = 2) && (mwstCodeKto = 52))) {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromExkl(bk.Mandant,##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3EWExklClass(Oid),bk.Abzug3MwstSatz)
		} elseif (bk.CodeMwst = 2) {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromUrprod(bk.Mandant,##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3EWExklClass(Oid),bk.Abzug3MwstSatz)
		} else {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromInkl(bk.Mandant,##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3EWInklClass(Oid),bk.Abzug3MwstSatz)
		}
	}
	/*
	if (##class(DBAgrofreshEK.BestellungsKopf).%ExistsId(Oid)) {
		set betragInkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3EWInklClass(Oid)
		set betragExkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3EWExklClass(Oid)
		set betragAbzug = betragInkl - betragExkl
	}
	*/
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetBetragAbzug3FWInklClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	set bestellung = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	if (bestellung '= "") {
		set betragNetto = ##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugInklMwstFWClass(Oid)
		if (bestellung.Abzug3Typ = 1) {
			if ((bestellung.Abzug1Typ '= 3) && (bestellung.Abzug1Typ '= 5)) {
				set betragNetto = betragNetto - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1FWInklClass(Oid) - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2FWInklClass(Oid)
			} else {
				set betragNetto = betragNetto - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2FWInklClass(Oid)
			}
		}
		if ((bestellung.Abzug3Typ = 1) || (bestellung.Abzug3Typ = 4)) {
			set betragAbzug = ##class(DBUtils.NumberUtils).Round(betragNetto * bestellung.Abzug3Prozent / 100,2)
		}
		k bestellung
	}
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetBetragAbzug3FWExklClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	set bestellung = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	if (bestellung '= "") {
		set betragNetto = ##class(DBAgrofreshEK.BestellungsKopf).GetBetrAbzugExklMwstFWClass(Oid)
		if (bestellung.Abzug3Typ = 1) {
			if ((bestellung.Abzug1Typ '= 3) && (bestellung.Abzug1Typ '= 5)) {
				set betragNetto = betragNetto - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug1FWExklClass(Oid) - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2FWExklClass(Oid)
			} else {
				set betragNetto = betragNetto - ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug2FWExklClass(Oid)
			}
		}
		if ((bestellung.Abzug3Typ = 1) || (bestellung.Abzug3Typ = 4)) {
			set betragAbzug = ##class(DBUtils.NumberUtils).Round(betragNetto * bestellung.Abzug3Prozent / 100,2)
		}
		k bestellung
	}
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetBetragAbzug3FWMwstClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragAbzug = 0
	
	set bk = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	if ((bk.Abzug3FibuKonto '= $c(0)) && (bk.Abzug3FibuKonto '= "")) {
		set mandJahr = ##class(DBCore.MandantJahr).GetIdByDatum(bk.Mandant, bk.Annahmedatum)
		set mwstCodeKto = ##class(DBFibu.Konto).GetMwstCodeClass(mandJahr, bk.Abzug3FibuKonto.%Id())
		if ((bk.CodeMwst = 3) ||  ((bk.CodeMwst = 2) && (mwstCodeKto = 52))) {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromExklFW(##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3FWExklClass(Oid),bk.Abzug3MwstSatz)
		} elseif (bk.CodeMwst = 2) {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromUrprodFW(##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3FWExklClass(Oid),bk.Abzug3MwstSatz)
		} else {
			set betragAbzug = ##class(DBAgrofreshEK.BestellungsKopf).CalcAbzugMwstBetragFromInklFW(##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3FWInklClass(Oid),bk.Abzug3MwstSatz)
		}
	}
	/*if (##class(DBAgrofreshEK.BestellungsKopf).%ExistsId(Oid)) {
		set betragInkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3FWInklClass(Oid)
		set betragExkl = ##class(DBAgrofreshEK.BestellungsKopf).GetBetragAbzug3FWExklClass(Oid)
		set betragAbzug = betragInkl - betragExkl
	}*/
	quit betragAbzug
]]></Implementation>
</Method>

<Method name="GetGewichtNettoClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(GewichtNetto) INTO :betrag FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :Oid AND 
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotalVorRabatt() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattGesamttotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcGesamttotal())
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetGewichtTaraClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(GewichtTara) INTO :betrag FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :Oid AND 
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotalVorRabatt() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattGesamttotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcGesamttotal())
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetGewichtBruttoClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(GewichtBrutto) INTO :betrag FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :Oid AND 
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotalVorRabatt() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattGesamttotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcGesamttotal())
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetLastIDByAdrClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>AdrOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.BestellungsKopf
	     WHERE Adresse->Adresse = :AdrOid ORDER BY BestellungsNr DESC)
	Quit:(SQLCODE'=0) ""
	Quit id
]]></Implementation>
</Method>

<Method name="GetPreLastIDByAdrClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>AdrOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	set lastId = ##class(DBAgrofreshEK.BestellungsKopf).GetLastIDByAdrClass(AdrOid)
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.BestellungsKopf
	     WHERE Adresse->Adresse = :AdrOid AND not ID = :lastId ORDER BY BestellungsNr DESC)
	Quit:(SQLCODE'=0) ""
	Quit id
]]></Implementation>
</Method>

<Method name="GetBetragInklMwstFWClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragFW = 0
	&sql(SELECT SUM(Nettobetrag2InklMwstFW) INTO :betragFW FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :Oid AND 
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotalVorRabatt() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattGesamttotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcGesamttotal())
	Quit:(SQLCODE'=0) 0
	Quit betragFW
]]></Implementation>
</Method>

<Method name="GetBetragExklMwstFWClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betragFW = 0
	&sql(SELECT SUM(Nettobetrag2ExklMwstFW) INTO :betragFW FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :Oid AND 
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotalVorRabatt() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattGesamttotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcGesamttotal())
	Quit:(SQLCODE'=0) 0
	Quit betragFW
]]></Implementation>
</Method>

<Method name="GetBetragEWInklMwstByBestClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(Nettobetrag2InklMwstEW) INTO :betrag FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :Oid AND 
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotalVorRabatt() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattGesamttotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcGesamttotal())
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetBetragEWExklMwstByBestClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(Nettobetrag2ExklMwstEW) INTO :betrag FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :Oid AND 
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotalVorRabatt() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattGesamttotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcGesamttotal())
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetBetragMwstByBestClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(Nettobetrag2MwstBetragEW) INTO :betrag FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :Oid AND 
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotalVorRabatt() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattGesamttotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcGesamttotal())
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetBetragMwstFWByBestClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(Nettobetrag2MwstBetragFW) INTO :betrag FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :Oid AND 
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotalVorRabatt() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattGesamttotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcGesamttotal())
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetBetragEWInklMwstClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(Nettobetrag2InklMwstEW) INTO :betrag FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :Oid AND 
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotalVorRabatt() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattGesamttotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcGesamttotal()AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcHilfsstoffeKalkulation())
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetBetragEWExklMwstClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(Nettobetrag2ExklMwstEW) INTO :betrag FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :Oid AND 
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotalVorRabatt() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattGesamttotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcGesamttotal()AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcHilfsstoffeKalkulation())
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetGebindeMwstByBestClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(GebindeSaldoBetragMwst) INTO :betrag FROM DBAgrofreshEK.GebDetail
	     WHERE Bestellung = :Oid)
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetGebindeMwstFWByBestClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(GebindeSaldoBetragMwstFW) INTO :betrag FROM DBAgrofreshEK.GebDetail
	     WHERE Bestellung = :Oid)
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetGebindeSaldoFWByBestClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(GebindeSaldoBetragExklMwstFW) INTO :betrag FROM DBAgrofreshEK.GebDetail
	     WHERE Bestellung = :Oid)
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="IsStatusGedruckt">
<ClassMethod>1</ClassMethod>
<FormalSpec>status:%Integer</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set res = 0
	if (status'="") {
		set res = (status = ##class(DBAgrofreshEK.Konst).BearbeitungsstatusGedruckt())
	}
	Quit res
]]></Implementation>
</Method>

<Method name="IsStatusMutiert">
<ClassMethod>1</ClassMethod>
<FormalSpec>status:%Integer</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set res = 0
	if (status'="") {
		set res = (status = ##class(DBAgrofreshEK.Konst).BearbeitungsstatusMutiert())
	}
	Quit res
]]></Implementation>
</Method>

<Method name="IsStatusFreigabe">
<ClassMethod>1</ClassMethod>
<FormalSpec>status:%Integer</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set res = 0
	if (status'="") {
		set res = (status = ##class(DBAgrofreshEK.Konst).BearbeitungsstatusFreigabe())
	}
	Quit res
]]></Implementation>
</Method>

<Method name="IsStatusTeillieferung">
<ClassMethod>1</ClassMethod>
<FormalSpec>status:%Integer</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set res = 0
	if (status'="") {
		set res = (status = ##class(DBAgrofreshEK.Konst).BearbeitungsstatusTeillieferung())
	}
	Quit res
]]></Implementation>
</Method>

<Method name="SetBStatusMutiertClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>id:%String</FormalSpec>
<Implementation><![CDATA[
	if (id '= "") {
		set exists = $GET(^BestellungskopfNotSetStatusMutiert(id))
		set existsDeleting = $GET(^BestellungskopfIsDeleting(id))
		if ((('exists) || ('^BestellungskopfNotSetStatusMutiert(id))) && (('existsDeleting) || ('^BestellungskopfIsDeleting(id)))) {
			set kopf = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(id)
			do kopf.SetBStatusMutiert()
		}
	}
]]></Implementation>
</Method>

<Method name="SetBStatusMutiert">
<Implementation><![CDATA[
	set exists = $GET(^BestellungskopfNotSetStatusMutiert(..%Id()))
	set existsDeleting = $GET(^BestellungskopfIsDeleting(..%Id()))
	if ((('exists) || ('^BestellungskopfNotSetStatusMutiert(..%Id())))) {
		if ((('existsDeleting) || ('^BestellungskopfIsDeleting(..%Id())))) {
			set check = 0
			if (##class(DBAgrofreshEK.BestellungsKopf).IsStatusGedruckt(..BearbeitungsstatusOA)) {
				set ..BearbeitungsstatusOA = ##class(DBAgrofreshEK.Konst).BearbeitungsstatusMutiert()
				set check = 1
			}
			if (##class(DBAgrofreshEK.BestellungsKopf).IsStatusGedruckt(..BearbeitungsstatusBE)) {
				set ..BearbeitungsstatusBE = ##class(DBAgrofreshEK.Konst).BearbeitungsstatusMutiert()
				set check = 1
			}
			if (##class(DBAgrofreshEK.BestellungsKopf).IsStatusGedruckt(..BearbeitungsstatusAS)) {
				set ..BearbeitungsstatusAS = ##class(DBAgrofreshEK.Konst).BearbeitungsstatusMutiert()
				set check = 1
			}
			if (##class(DBAgrofreshEK.BestellungsKopf).IsStatusGedruckt(..BearbeitungsstatusAR)) {
				set ..BearbeitungsstatusAR = ##class(DBAgrofreshEK.Konst).BearbeitungsstatusMutiert()
				set check = 1
			}
			if (##class(DBAgrofreshEK.BestellungsKopf).IsStatusGedruckt(..BearbeitungsstatusBZ)) {
				set ..BearbeitungsstatusBZ = ##class(DBAgrofreshEK.Konst).BearbeitungsstatusMutiert()
				set check = 1
			}
			
			if (check) {
				do ..%Save()
			}
		}
	}
]]></Implementation>
</Method>

<Method name="SetFlagAutoMutiert">
<ClassMethod>1</ClassMethod>
<FormalSpec>kopfId:%String,notAutoMutiert:%Boolean</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	if (notAutoMutiert) {
		set ^BestellungskopfNotSetStatusMutiert(kopfId) = notAutoMutiert
	} else {
		kill ^BestellungskopfNotSetStatusMutiert(kopfId)
	}
	Quit 1
]]></Implementation>
</Method>

<Method name="GetIdByBestellungsNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,BestNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK.BestellungsKopf WHERE Mandant = :MandantOid
		 AND BestellungsNr = :BestNr)
	Quit:(SQLCODE'=0) ""
	Quit id
]]></Implementation>
</Method>

<Method name="GetIdByAnnahmeNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,AnanhmeNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK.BestellungsKopf WHERE Mandant = :MandantOid
		 AND AnnahmeNr = :AnanhmeNr)
	Quit:(SQLCODE'=0) ""
	Quit id
]]></Implementation>
</Method>

<Method name="GetIdByAbrechnungsNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,AbrechnungsNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK.BestellungsKopf WHERE Mandant = :MandantOid
		 AND AbrechnungsNr = :AbrechnungsNr)
	Quit:(SQLCODE'=0) ""
	Quit id
]]></Implementation>
</Method>

<Method name="GetIdByKrediDatumClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>KrediOid:%String,Datum:%Date</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.BestellungsKopf
	     WHERE Adresse = :KrediOid AND Annahmedatum = :Datum ORDER BY BestellungsNr DESC)
	Quit:(SQLCODE'=0) ""
	Quit id
]]></Implementation>
</Method>

<Method name="GetAdressNrByAllBestellungen">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set adr = ""
	&sql(SELECT TOP 1 Adresse->Adresse->Adressnummer INTO :adr FROM DBAgrofreshEK.BestellungsKopf
	     WHERE Mandant = :Mandant)
	Quit:(SQLCODE'=0) 0
	Quit adr
]]></Implementation>
</Method>

<Method name="GetAdressNrByBestellungsOid">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set adr = ""
	&sql(SELECT Adresse->Adresse->Adressnummer INTO :adr FROM DBAgrofreshEK.BestellungsKopf
	     WHERE ID = :Oid)
	Quit:(SQLCODE'=0) 0
	Quit adr
]]></Implementation>
</Method>

<Method name="GetWarenaufwandByBestClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(Warenaufwand) INTO :betrag FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :Oid)
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetGebindeSaldoByBestClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(GebindeSaldoBetragExklMwst) INTO :betrag FROM DBAgrofreshEK.GebDetail
	     WHERE Bestellung = :Oid)
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetMwstCodesAsList">
<ReturnType>%ListOfObjects</ReturnType>
<Implementation><![CDATA[
	set list = $ListBuild()
	set aktId = ..%Id()
	&sql(SELECT Mwst->MwstCode INTO :list FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :aktId  Group By Mwst->MwstCode)
	Quit:(SQLCODE'=0) $ListBuild()
	Quit list
]]></Implementation>
</Method>

<Method name="GetMwstBezAsList">
<FormalSpec>MandOid:%String="",Lang:%String=""</FormalSpec>
<ReturnType>%List</ReturnType>
<Implementation><![CDATA[
	set list = $ListBuild()
	set aktId = ..%Id()
	&sql(SELECT DBFibu_SD.Mwst_GetBezeichnungClass(Mwst->ID, :MandOid, :Lang) INTO :list FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :aktId  Group By Mwst->MwstCode)
	Quit:(SQLCODE'=0) $ListBuild()
	Quit list
]]></Implementation>
</Method>

<Method name="GetMwstSaetzeAsList">
<ReturnType>%List</ReturnType>
<Implementation><![CDATA[
	set list = $ListBuild()
	set aktId = ..%Id()
	&sql(SELECT MwstSatz INTO :list FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :aktId  Group By Mwst->MwstCode)
	Quit:(SQLCODE'=0) $ListBuild()
	Quit list
]]></Implementation>
</Method>

<Method name="GetMwstBetrageAsList">
<ReturnType>%List</ReturnType>
<Implementation><![CDATA[
	set list = $ListBuild()
	set aktId = ..%Id()
	&sql(SELECT SUM(MwstBetrag) INTO :list FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :aktId  Group By Mwst->MwstCode)
	Quit:(SQLCODE'=0) $ListBuild()
	Quit list
]]></Implementation>
</Method>

<Method name="GetMwstBetrageExklAsList">
<ReturnType>%List</ReturnType>
<Implementation><![CDATA[
	set list = $ListBuild()
	set aktId = ..%Id()
	&sql(SELECT SUM(BetragExklMwst) INTO :list FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :aktId  Group By Mwst->MwstCode)
	Quit:(SQLCODE'=0) $ListBuild()
	Quit list
]]></Implementation>
</Method>

<Method name="%OnAfterSave">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Save</METHOD> method to 
provide notification that the object is being saved. It is called after 
the object's data has been successfully written to disk.

<P><VAR>insert</VAR> will be set to 1 if this object is being saved for the first time.

<P>If this method returns an error then the call to <METHOD>%Save</METHOD> will fail.]]></Description>
<FormalSpec>insert:%Boolean</FormalSpec>
<Private>1</Private>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	
	if ('insert) {
		do ..SetBStatusMutiert()	
	}
	set id = ..%Id()
	d ##class(DBAgrofreshEK.BestellungsKopf).UpdateLsDatum(id, ..Annahmedatum)
	Quit $$$OK
]]></Implementation>
</Method>

<Trigger name="Update">
<Code>	do ##class(DBAgrofreshEK.BestellungsKopf).SetBStatusMutiertClass({ID*N})</Code>
<Event>UPDATE</Event>
<Time>AFTER</Time>
<Foreach>row</Foreach>
</Trigger>

<Method name="%OnDelete">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Delete</METHOD> method to 
provide notification that the object specified by <VAR>oid</VAR> is being deleted.

<P>If this method returns an error then the object will not be deleted.
[Previously private]]]></Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%ObjectIdentity</FormalSpec>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	set myId = $lg(oid,1)
	set ^BestellungskopfIsDeleting(myId) = 1
	set best = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(myId)
	set save = 0
	if (best.AnnahmescheinPDF '= "") {
		set save = 1
		set s = best.AnnahmescheinPDF.%Id()
		set best.AnnahmescheinPDF = ""
		&sql(DELETE FROM DBAgrofreshEK.PDFStream WHERE ID = :s)
	}
	if (best.EtikettenPDF '= "") {
		set save = 1
		set s = best.EtikettenPDF.%Id()
		set best.EtikettenPDF = ""
		&sql(DELETE FROM DBAgrofreshEK.PDFStream WHERE ID = :s)
	}
	if (best.AbrechnungPDF '= "") {
		set save = 1
		set s = best.AbrechnungPDF.%Id()
		set best.AbrechnungPDF = ""
		&sql(DELETE FROM DBAgrofreshEK.PDFStream WHERE ID = :s)
	}
	if (best.WebEdiCsv '= "") {
		set save = 1
		set s = best.WebEdiCsv.%Id()
		set best.WebEdiCsv = ""
		&sql(DELETE FROM DBAgrofreshEK.CSVStream WHERE ID = :s)
	}
	if (save = 1) {
		do best.%Save()
	}
	set best = ""
	DO ##class(DBAgrofreshEK.GebDetail).DeletePositonsByBestellung(myId)
	d ##class(DBUtils.ClassHelper).DeleteManyRelations("DBAgrofreshEK.BestellungsKopf", myId)
	Quit $$$OK
]]></Implementation>
</Method>

<Trigger name="trgDelete">
<Code><![CDATA[	set myId = {ID*O}
	do ##class(DBAgrofreshEK.BestellungsKopf).SetFlagAutoMutiert(myId, 1)
	set aOld = {AnnahmescheinPDF*O}
	set eOld = {EtikettenPDF*O}
	set abOld = {AbrechnungPDF*O}
	set webOld = {WebEdiCsv*O}
	&sql(DELETE FROM DBAgrofreshEK.PDFStream WHERE ID = :aOld)
	&sql(DELETE FROM DBAgrofreshEK.PDFStream WHERE ID = :eOld)
	&sql(DELETE FROM DBAgrofreshEK.PDFStream WHERE ID = :abOld)
	&sql(DELETE FROM DBAgrofreshEK.CSVStream WHERE ID = :webOld)
	//Quit $$$OK
	Quit ##class(DBUtils.ClassHelper).DeleteManyRelations("DBAgrofreshEK.BestellungsKopf", myId)]]></Code>
<Event>DELETE</Event>
</Trigger>

<Method name="DeleteAllFromMandant">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	Set strSQL="DELETE FROM DBAgrofreshEK.GebDetail WHERE GebKontr->Mandant="_MandantOid
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	
	If ($$$ISOK(sc)) {
		Set strSQL="DELETE FROM DBAgrofreshEK.BestellungsKopf WHERE Mandant="_MandantOid
		Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
		Do rs.Prepare(strSQL)
		Set sc=rs.Execute()
	}
	
	Quit sc
]]></Implementation>
</Method>

<Method name="GetFirstBestellungsOid">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set myId = ""
	&sql(SELECT TOP 1 %ID Into :myId FROM DBAgrofreshEK.BestellungsKopf WHERE Mandant=:MandantOid)
	Quit:(SQLCODE'=0) ""
	Quit myId
]]></Implementation>
</Method>

<Method name="GetLastBestellungsOid">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	set maxauftr = ""
	&sql(SELECT MAX(BestellungsNr) INTO :maxauftr FROM DBAgrofreshEK.BestellungsKopf WHERE Mandant = :MandantOid)
	if (maxauftr'="") {
		set id = ##class(DBAgrofreshEK.BestellungsKopf).GetIdByBestellungsNr(MandantOid, maxauftr)
	}
	Quit:(SQLCODE'=0) ""
	Quit id
]]></Implementation>
</Method>

<Method name="GetNextVerbuchungJnr">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set maxJnr = 0
	&sql(SELECT MAX(VerbuchungsjournalNr) INTO :maxJnr FROM DBAgrofreshEK.BestellungsKopf WHERE Mandant = :MandantOid)
	Set maxJnr = maxJnr + 1
	Quit:(SQLCODE'=0) 0
	Quit maxJnr
]]></Implementation>
</Method>

<Method name="GetNextTeillieferNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,BestllungsNr:%Integer</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set maxLNr = 0
	&sql(SELECT MAX(TeilanlieferungNr) INTO :maxLNr FROM DBAgrofreshEK.BestellungsKopf WHERE Mandant = :MandantOid AND HauptanlieferungNr = :BestllungsNr)
	Set maxLNr = maxLNr + 1
	Quit:(SQLCODE'=0) 1
	Quit maxLNr
]]></Implementation>
</Method>

<Method name="SearchWithFreeSelektion">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,vonDatum:%Date,bisDatum:%Date,nachStatus:%Boolean,bestellStatus:%Integer,nurVerbuchte:%Boolean,nurBarzahlungen:%Boolean,nurNichtAngelieferte:%Boolean,nurAngelieferte:%Boolean,Lagerort:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set strSQL = "SELECT ID, Adresse->Adresse->ID As AdressOid, Adresse->Adresse->Adressnummer As Adressnummer, "
	Set strSQL = strSQL_"Abrechnungsdatum, Annahmedatum, Bestelldatum, "
	Set strSQL = strSQL_"Bestellstatus, StatusAutoVerarbeitung, AbrechnungsNr, AnnahmeNr, BestellungsNr, "
	Set strSQL = strSQL_"GebindeSaldo, TotalMitGebinde, Verbucht, AuftragValidiert, RetourenErfasst, "
	Set strSQL = strSQL_"BearbeitungsstatusAR, BearbeitungsstatusAS, BearbeitungsstatusBE, "
	Set strSQL = strSQL_"BearbeitungsstatusBZ, BearbeitungsstatusOA "
	Set strSQL = strSQL_"FROM DBAgrofreshEK.Bestellungskopf "
	Set strSQL = strSQL_"WHERE Mandant = "_MandantOid_" "
	Set strSQL = strSQL_"AND Bestelldatum between '"_$ZDate(vonDatum,3)_"' and '"_$ZDate(bisDatum,3)_"' "
	
	if (nachStatus) {
		Set strSQL = strSQL_"AND NVL(Bestellstatus,0) = "_bestellStatus_" "
	}
	if (nurBarzahlungen) {
		Set strSQL = strSQL_"AND BearbeitungsstatusBZ = DBAgrofresh.Konst_BearbeitungsstatusGedruckt() "
	}
	if (nurNichtAngelieferte) {
		Set strSQL = strSQL_"AND NVL(Bestellstatus,0) < 3 "
	}
	if (nurAngelieferte) {
		Set strSQL = strSQL_"AND (NVL(Bestellstatus,0) >= 3 OR Bestellstatus IS NULL OR (Bestellstatus = 3 AND BearbeitungsstatusAS = DBAgrofresh.Konst_BearbeitungsstatusMutiert())) "
	}
	if (nurVerbuchte) {
		Set strSQL = strSQL_"AND Verbucht = 0 "
	}
	if ((Lagerort '= "") && (Lagerort '= $c(0))) {
		Set strSQL = strSQL_"AND Lagerort = "_Lagerort_" "
	}
	
	Set strSQL = strSQL_"ORDER BY Bestellstatus, Abrechnungsdatum DESC, BestellungsNr DESC"
	Quit strSQL
	/*w strSQL, !
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()	
	IF $$$ISOK(sc) {
		quit rs
	} else {
		quit ""
	}*/
]]></Implementation>
</Method>

<Method name="OutputEtikettenStream">
<ReturnType>%Library.GlobalBinaryStream</ReturnType>
<Implementation><![CDATA[
	Set tmpStream=##class(%Library.GlobalBinaryStream).%New()
	Set f = ..EtikettenPDF
	Set Ret=""
	If (f'="") {
		Set Size=f.DataStream.Size
		Set Ret=tmpStream.CopyFromAndSave(f.DataStream)
	}
	Quit tmpStream
]]></Implementation>
</Method>

<Method name="InputEtikettenStream">
<FormalSpec><![CDATA[&Stream:%Library.GlobalBinaryStream]]></FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	Set res=0
	Set fid = ""
	if (..EtikettenPDF '= "") {
		Set fid = ..EtikettenPDF.%Id()
	}
	Set sID = ""
	
		Set Cnt=0
		if (fid'="") {
			&sql(SELECT count(*) INTO :Cnt
		     	FROM DBAgrofreshEK.PDFStream
		     	WHERE ID = :fid)
		}
		If (Cnt=0) {
			Set myId=..%Id()
			Set v=##Class(DBAgrofreshEK.BestellungsKopf).%OpenId(myId)
			Set n=##Class(DBAgrofreshEK.PDFStream).%New()
			Set Ret=n.%Save()
			Set v.EtikettenPDF=n
			Set Ret=v.%Save()
			if (Ret=1) {
				do n.DataStream.CopyFromAndSave(Stream)
				Set Ret=n.%Save()
			}
			Set n=""
			Set v = ""
			Set res=(Ret=1)
			Quit res
		}
		&sql(SELECT ID InTo :sID 
		     FROM DBAgrofreshEK.PDFStream
		     WHERE ID = :fid)
		     
		Set s=##Class(DBAgrofreshEK.PDFStream).%OpenId(sID)
		Set Ret=s.DataStream.CopyFromAndSave(Stream)
		Set RetS = s.%Save()
		Set s = ""
		Set res=((Ret=1) && (RetS=1))
	
	Quit res
]]></Implementation>
</Method>

<Method name="OutputAnnahmescheinStream">
<ReturnType>%Library.GlobalBinaryStream</ReturnType>
<Implementation><![CDATA[
	Set tmpStream=##class(%Library.GlobalBinaryStream).%New()
	Set f = ..AnnahmescheinPDF
	Set Ret=""
	If (f'="") {
		Set Size=f.DataStream.Size
		Set Ret=tmpStream.CopyFromAndSave(f.DataStream)
	}
	Quit tmpStream
]]></Implementation>
</Method>

<Method name="InputAnnahmescheinStream">
<FormalSpec><![CDATA[&Stream:%Library.GlobalBinaryStream]]></FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	Set res=0
	Set fid = ""
	if (..AnnahmescheinPDFGetObjectId() '= "") {
		Set fid = ..AnnahmescheinPDFGetObjectId()
	}
	Set sID = ""
	
		Set Cnt=0
		if (fid'="") {
			&sql(SELECT count(*) INTO :Cnt
		     	FROM DBAgrofreshEK.PDFStream
		     	WHERE ID = :fid)
		}
		If (Cnt=0) {
			Set myId=..%Id()
			Set v=##Class(DBAgrofreshEK.BestellungsKopf).%OpenId(myId)
			Set n=##Class(DBAgrofreshEK.PDFStream).%New()
			Set Ret=n.%Save()
			Set v.AnnahmescheinPDF=n
			Set Ret=v.%Save()
			if (Ret=1) {
				do n.DataStream.CopyFromAndSave(Stream)
				Set Ret=n.%Save()
			}
			Set n=""
			Set res=(Ret=1)
			Quit res
		}
		&sql(SELECT ID InTo :sID 
		     FROM DBAgrofreshEK.PDFStream
		     WHERE ID = :fid)
		     
		Set s=##Class(DBAgrofreshEK.PDFStream).%OpenId(sID)
		Set Ret=s.DataStream.CopyFromAndSave(Stream)
		Set RetS = s.%Save()
		Set res=((Ret=1) && (RetS=1))
		Set s = ""
	Quit res
]]></Implementation>
</Method>

<Method name="ExecutePDFGeneration">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestellungOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
    set ret = 1
    set path = ##class(DBCore.AppEinstellung).GetStringEinst(##class(DBCore.Konst).AGRISPATH())
    if (path '= "") {
                   set ret = $ZF(-1, path_" -pl "_BestellungOid)
    }
    
    if (ret = 0) {
                   quit 1 
    } else {
                   quit 0 
    }
]]></Implementation>
</Method>

<Method name="GetBestellungForDesign">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = 0
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.BestellungsKopf where Mandant = :MandantOid order by ID desc)
	Quit:(SQLCODE'=0) ""
	Quit id
]]></Implementation>
</Method>

<Method name="GetBetragEWInklMwstByArNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>RgNr:%Integer,MandantOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(BetragEWInklMwst) INTO :betrag FROM DBAgrofreshEK.BestellungsKopf WHERE AbrechnungsNr=:RgNr AND Mandant = :MandantOid)
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetBetragFWInklMwstByArNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>RgNr:%Integer,MandantOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(BetragFWInklMwst) INTO :betrag FROM DBAgrofreshEK.BestellungsKopf WHERE AbrechnungsNr=:RgNr AND Mandant = :MandantOid)
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetBetragEWExklMwstByArNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>RgNr:%Integer,MandantOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(BetragEWExklMwst) INTO :betrag FROM DBAgrofreshEK.BestellungsKopf WHERE AbrechnungsNr=:RgNr AND Mandant = :MandantOid)
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetBetragFWExklMwstByArNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>RgNr:%Integer,MandantOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(BetragFWExklMwst) INTO :betrag FROM DBAgrofreshEK.BestellungsKopf WHERE AbrechnungsNr=:RgNr AND Mandant = :MandantOid)
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetTotalMitGebindeByArNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>RgNr:%Integer,MandantOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	&sql(SELECT SUM(TotalMitGebinde) INTO :betrag FROM DBAgrofreshEK.BestellungsKopf WHERE AbrechnungsNr=:RgNr AND Mandant = :MandantOid)
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="RecalcAllMwst">
<ClassMethod>1</ClassMethod>
<FormalSpec>vonBestellungNr:%Integer,bisBestellungNr:%Integer</FormalSpec>
<Implementation><![CDATA[
	//Letze Korrektur zurücksetzen
	Set strSQL="SELECT ID FROM DBAgrofreshEK.Bestellungskopf WHERE BestellungsNr BETWEEN "_vonBestellungNr_" AND "_bisBestellungNr_" AND Verbucht = 0"
    Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
    Do rs.Prepare(strSQL)
    Set sc=rs.Execute()
    if ($$$ISERR(sc)) {
		w "DBAgrofreshEK.Bestellungskopf.RecalcAllMwst - Fehler bei SQL-Statement für AuftragSelect",!
	}
	While (rs.Next()) {
		 Set auftragOid = rs.Data("ID")
		 DO ##Class(DBAgrofreshEK.Bestellungspos).RecalcMwst(auftragOid)
	}
]]></Implementation>
</Method>

<Method name="ResetArNummer">
<ClassMethod>1</ClassMethod>
<Implementation><![CDATA[
	Set strSQL="UPDATE DBAgrofreshEK.Bestellungskopf SET AbrechnungsNr = null  WHERE (Verbucht = 0 or Verbucht is Null) and AbrechnungsNr = 0 AND DBAgrofreshEK.BestellungsKopf_IsStatusGedruckt(BearbeitungsstatusAR) = 0 AND DBAgrofreshEK.BestellungsKopf_IsStatusMutiert(BearbeitungsstatusAR) = 0"
    Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
    Do rs.Prepare(strSQL)
    Set sc=rs.Execute()
    if ($$$ISERR(sc)) {
		w "DBAgrofreshEK.Bestellungskopf.ResetRgNummer - Fehler bei SQL-Statement für Reset",!
	}
]]></Implementation>
</Method>

<Method name="CalcAbzugMwstBetragFromInkl">
<ClassMethod>1</ClassMethod>
<FormalSpec>mandantOid:%String,betrag:%Decimal,mwstSatz:%Decimal</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	Set retval = 0
	
	set retval = ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,(betrag / (100+mwstSatz) * mwstSatz))

	quit retval
]]></Implementation>
</Method>

<Method name="CalcAbzugMwstBetragFromExkl">
<ClassMethod>1</ClassMethod>
<FormalSpec>mandantOid:%String,betrag:%Decimal,mwstSatz:%Decimal</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	Set retval = 0
	
	set retval = ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,(betrag / 100 * mwstSatz))

	quit retval
]]></Implementation>
</Method>

<Method name="CalcAbzugMwstBetragFromUrprod">
<ClassMethod>1</ClassMethod>
<FormalSpec>mandantOid:%String,betrag:%Decimal,mwstSatz:%Decimal</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	Set retval = 0
	set retval = ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,(betrag /(1 - (mwstSatz / 100)))- betrag)

	quit retval
]]></Implementation>
</Method>

<Method name="CalcAbzugMwstBetragFromInklFW">
<ClassMethod>1</ClassMethod>
<FormalSpec>betrag:%Decimal,mwstSatz:%Decimal</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	Set retval = 0
	
	set retval = ##class(DBUtils.NumberUtils).Round((betrag / (100+mwstSatz) * mwstSatz), 2)

	quit retval
]]></Implementation>
</Method>

<Method name="CalcAbzugMwstBetragFromExklFW">
<ClassMethod>1</ClassMethod>
<FormalSpec>betrag:%Decimal,mwstSatz:%Decimal</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	Set retval = 0
	
	set retval = ##class(DBUtils.NumberUtils).Round((betrag / 100 * mwstSatz), 2)

	quit retval
]]></Implementation>
</Method>

<Method name="CalcAbzugMwstBetragFromUrprodFW">
<ClassMethod>1</ClassMethod>
<FormalSpec>betrag:%Decimal,mwstSatz:%Decimal</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	Set retval = 0
	set retval = ##class(DBUtils.NumberUtils).Round((betrag /(1 - (mwstSatz / 100)))- betrag, 2)

	quit retval
]]></Implementation>
</Method>

<Method name="CalcAbzug1Betrag">
<ClassMethod>1</ClassMethod>
<FormalSpec>mandantOid:%String,betrag:%Decimal,abzugProzent1:%Decimal,abzug1Typ:%Integer</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	Set retval = 0
	
	if (abzug1Typ = 1) {
		Set retval = ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,(betrag * abzugProzent1 / 100))
	} elseif ((abzug1Typ = 3) || (abzug1Typ = 5)) {
		Set retval = ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,(betrag * abzugProzent1 / 100)*-1)
	} elseif (abzug1Typ = 4) {
		Set retval = ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,(betrag * abzugProzent1 / 100))
	}
	quit retval
]]></Implementation>
</Method>

<Method name="CalcAbzug1BetragFW">
<ClassMethod>1</ClassMethod>
<FormalSpec>betrag:%Decimal,abzugProzent1:%Decimal,abzug1Typ:%Integer</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	Set retval = 0
	if (abzug1Typ = 1) {
		Set retval = ##class(DBUtils.NumberUtils).Round((betrag * abzugProzent1 / 100), 2)
	} elseif ((abzug1Typ = 3) || (abzug1Typ = 5)) {
		Set retval = ##class(DBUtils.NumberUtils).Round((betrag * abzugProzent1 / 100)*-1, 2)
	} elseif (abzug1Typ = 4) {
		Set retval = ##class(DBUtils.NumberUtils).Round((betrag * abzugProzent1 / 100), 2)
	}
	quit retval
]]></Implementation>
</Method>

<Method name="CalcAbzug2Betrag">
<ClassMethod>1</ClassMethod>
<FormalSpec>mandantOid:%String,betrag:%Decimal,abzugProzent1:%Decimal,abzugProzent2:%Decimal,abzug1Typ:%Integer,abzug2Typ:%Integer</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	Set retval = 0
	Set zuschlag=0
	if ((abzug1Typ = 3) || (abzug1Typ = 5)) {
		Set zuschlag = ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,(betrag * abzugProzent1 / 100))
	}
	if (abzug2Typ = 1) {
		if ((abzug1Typ = 1) || (abzug1Typ = 4)) {
			Set retval = retval + ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,((betrag+zuschlag) * abzugProzent1 / 100 * -1))
		} elseif ((abzug1Typ = 3) || (abzug1Typ = 5)) {
			//Set retval = retval + ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,(betrag * abzugProzent1 / 100))
		}
		Set retval = ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,((betrag+zuschlag+retval) * abzugProzent2 / 100))
	} elseif (abzug2Typ = 4) {
		Set retval = ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,((betrag+zuschlag) * abzugProzent2 / 100))
	}
	quit retval
]]></Implementation>
</Method>

<Method name="CalcAbzug2BetragFW">
<ClassMethod>1</ClassMethod>
<FormalSpec>betrag:%Decimal,abzugProzent1:%Decimal,abzugProzent2:%Decimal,abzug1Typ:%Integer,abzug2Typ:%Integer</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	Set retval = 0
	Set zuschlag=0
	if ((abzug1Typ = 3) || (abzug1Typ = 5)) {
		Set zuschlag = ##class(DBUtils.NumberUtils).Round((betrag * abzugProzent1 / 100), 2)
	}
	
	if (abzug2Typ = 1) {
		if ((abzug1Typ = 1) || (abzug1Typ = 4)) {
			Set retval = retval + ##class(DBUtils.NumberUtils).Round(((betrag+zuschlag) * abzugProzent1 / 100 * -1), 2)
		} elseif ((abzug1Typ = 3) || (abzug1Typ = 5)) {
			//Set retval = retval + ##class(DBUtils.NumberUtils).Round((betrag * abzugProzent1 / 100), 2)
		}
		Set retval = ##class(DBUtils.NumberUtils).Round(((betrag+zuschlag+retval) * abzugProzent2 / 100), 2)
	} elseif (abzug2Typ = 4) {
		Set retval = ##class(DBUtils.NumberUtils).Round(((betrag+zuschlag) * abzugProzent2 / 100), 2)
	}
	quit retval
]]></Implementation>
</Method>

<Method name="CalcAbzug3Betrag">
<ClassMethod>1</ClassMethod>
<FormalSpec>mandantOid:%String,betrag:%Decimal,abzugProzent1:%Decimal,abzugProzent2:%Decimal,abzugProzent3:%Decimal,abzug1Typ:%Integer,abzug2Typ:%Integer,abzug3Typ:%Integer</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	Set retval = 0
	Set zuschlag = 0
	if ((abzug1Typ = 3) || (abzug1Typ = 5)) {
		Set zuschlag = ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,(betrag * abzugProzent1 / 100))
	}
	if (abzug3Typ = 1) {
		if ((abzug1Typ = 1) || (abzug1Typ = 4)) {
			Set retval = retval + ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,((betrag+zuschlag) * abzugProzent1 / 100 * -1))
		} elseif ((abzug1Typ = 3) || (abzug1Typ = 5)) {
			//Set retval = retval + ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,(betrag * abzugProzent1 / 100))
		}
		if (abzug2Typ = 1) {
			Set retval = retval + ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,((betrag+zuschlag+retval) * abzugProzent2 / 100 * -1))
		} elseif (abzug2Typ = 4) {
			Set retval = retval + ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,((betrag+zuschlag) * abzugProzent2 / 100 * -1))
		}
	
		Set retval = ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,((betrag+zuschlag+retval) * abzugProzent3 / 100))
	} elseif (abzug3Typ = 4) {
		Set retval = ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,((betrag+zuschlag) * abzugProzent3 / 100))
	}
	quit retval
]]></Implementation>
</Method>

<Method name="CalcAbzug3BetragFW">
<ClassMethod>1</ClassMethod>
<FormalSpec>betrag:%Decimal,abzugProzent1:%Decimal,abzugProzent2:%Decimal,abzugProzent3:%Decimal,abzug1Typ:%Integer,abzug2Typ:%Integer,abzug3Typ:%Integer</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	Set retval = 0
	Set zuschlag = 0
	if ((abzug1Typ = 3) || (abzug1Typ = 5)) {
		Set zuschlag = ##class(DBUtils.NumberUtils).Round((betrag * abzugProzent1 / 100), 2)
	}
	if (abzug3Typ = 1) {
		if ((abzug1Typ = 1) || (abzug1Typ = 4)) {
			Set retval = retval + ##class(DBUtils.NumberUtils).Round(((betrag+zuschlag) * abzugProzent1 / 100 * -1), 2)
		} elseif ((abzug1Typ = 3) || (abzug1Typ = 5)) {
			//Set retval = retval + ##class(DBUtils.NumberUtils).Round((betrag * abzugProzent1 / 100), 2)
		}
		if (abzug2Typ = 1) {
			Set retval = retval + ##class(DBUtils.NumberUtils).Round(((betrag+zuschlag+retval) * abzugProzent2 / 100 * -1), 2)
		} elseif (abzug2Typ = 4) {
			Set retval = retval + ##class(DBUtils.NumberUtils).Round(((betrag+zuschlag) * abzugProzent2 / 100 * -1), 2)
		}
		Set retval = ##class(DBUtils.NumberUtils).Round(((betrag+zuschlag+retval) * abzugProzent3 / 100), 2)
	} elseif (abzug3Typ = 4) {
		Set retval = ##class(DBUtils.NumberUtils).Round(((betrag+zuschlag) * abzugProzent3 / 100), 2)
	}
	quit retval
]]></Implementation>
</Method>

<Method name="CalcAbzugBetrag">
<ClassMethod>1</ClassMethod>
<FormalSpec>mandantOid:%String,betrag:%Decimal,abzugProzent1:%Decimal,abzugProzent2:%Decimal,abzugProzent3:%Decimal,abzug1Typ:%Integer,abzug2Typ:%Integer,abzug3Typ:%Integer</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	Set retval = 0
	if ((abzug1Typ = 1) || (abzug1Typ = 4)) {
		Set retval = retval + ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,(betrag * abzugProzent1 / 100 * -1))
	} elseif ((abzug1Typ = 3) || (abzug1Typ = 5)) {
		Set retval = retval + ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,(betrag * abzugProzent1 / 100))
	}
	if (abzug2Typ = 1) {
		Set retval = retval + ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,((betrag+retval) * abzugProzent2 / 100 * -1))
	} elseif (abzug2Typ = 3) {
		Set retval = retval + ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,(betrag * abzugProzent2 / 100))
	} elseif (abzug2Typ = 4) {
		Set retval = retval + ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,(betrag * abzugProzent2 / 100 * -1))
	}
	if (abzug3Typ = 1) {
		Set retval = retval + ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,((betrag+retval) * abzugProzent3 / 100 * -1))
	} elseif (abzug3Typ = 3) {
		Set retval = retval + ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,(betrag * abzugProzent3 / 100))
	} elseif (abzug3Typ = 4) {
		Set retval = retval + ##class(DBUtils.NumberUtils).RoundGemEinst(mandantOid,(betrag * abzugProzent3 / 100 * -1))
	}
	quit retval
]]></Implementation>
</Method>

<Method name="CalcAbzugBetragFW">
<ClassMethod>1</ClassMethod>
<FormalSpec>betrag:%Decimal,abzugProzent1:%Decimal,abzugProzent2:%Decimal,abzugProzent3:%Decimal,abzug1Typ:%Integer,abzug2Typ:%Integer,abzug3Typ:%Integer</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	Set retval = 0
	if ((abzug1Typ = 1) || (abzug1Typ = 4)) {
		Set retval = retval + ##class(DBUtils.NumberUtils).Round((betrag * abzugProzent1 / 100 * -1), 2)
	} elseif ((abzug1Typ = 3) || (abzug1Typ = 5)) {
		Set retval = retval + ##class(DBUtils.NumberUtils).Round((betrag * abzugProzent1 / 100), 2)
	}
	if (abzug2Typ = 1) {
		Set retval = retval + ##class(DBUtils.NumberUtils).Round(((betrag-retval) * abzugProzent2 / 100 * -1), 2)
	} elseif (abzug2Typ = 3) {
		Set retval = retval + ##class(DBUtils.NumberUtils).Round((betrag * abzugProzent2 / 100), 2)
	} elseif (abzug2Typ = 4) {
		Set retval = retval + ##class(DBUtils.NumberUtils).Round((betrag * abzugProzent2 / 100 * -1), 2)
	}
	if (abzug3Typ = 1) {
		Set retval = retval + ##class(DBUtils.NumberUtils).Round(((betrag-retval) * abzugProzent3 / 100 * -1), 2)
	} elseif (abzug3Typ = 3) {
		Set retval = retval + ##class(DBUtils.NumberUtils).Round((betrag * abzugProzent3 / 100), 2)
	} elseif (abzug3Typ = 4) {
		Set retval = retval + ##class(DBUtils.NumberUtils).Round((betrag * abzugProzent3 / 100 * -1), 2)
	}
	quit retval
]]></Implementation>
</Method>

<Method name="GetBetrAbzugEWInklMwstClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	set kopf = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	set mandId = kopf.Mandant
	set bisGr = ##class(DBCore.MandantEinstellung).GetIntEinst(mandId, ##class(DBCore.Konst).AGROFRESHABZUGBISAGR())
  	if (bisGr = 0) || (bisGr = "") {
    	Quit ##class(DBAgrofreshEK.BestellungsKopf).GetBetragEWInklMwstByBestClass(Oid)
  	}
	&sql(SELECT SUM(Nettobetrag2InklMwstEW) INTO :betrag FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :Oid AND 
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotalVorRabatt() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattGesamttotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcGesamttotal()AND
          		(Artikel->Artikelgruppe->ArtikelgruppenNr <= :bisGr OR 
          		NVL(AbzugID,0) > 0))
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetBetrAbzugEWExklMwstClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	set kopf = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	set mandId = kopf.Mandant
	set bisGr = ##class(DBCore.MandantEinstellung).GetIntEinst(mandId, ##class(DBCore.Konst).AGROFRESHABZUGBISAGR())
	if (bisGr = 0) || (bisGr = "") {
  		Quit ##class(DBAgrofreshEK.BestellungsKopf).GetBetragEWExklMwstByBestClass(Oid)
  	}
	&sql(SELECT SUM(Nettobetrag2ExklMwstEW) INTO :betrag FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :Oid AND 
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotalVorRabatt() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattGesamttotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcGesamttotal()AND
          		(Artikel->Artikelgruppe->ArtikelgruppenNr <= :bisGr OR 
          		NVL(AbzugID,0) > 0))
	Quit:(SQLCODE'=0) 0
	
    Quit betrag
]]></Implementation>
</Method>

<Method name="GetBetrAbzugInklMwstFWClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	set kopf = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	set mandId = kopf.Mandant
	set bisGr = ##class(DBCore.MandantEinstellung).GetIntEinst(mandId, ##class(DBCore.Konst).AGROFRESHABZUGBISAGR())
  	if (bisGr = 0) || (bisGr = "") {
   		Quit ##class(DBAgrofreshEK.BestellungsKopf).GetBetragInklMwstFWClass(Oid)
  	}
	&sql(SELECT SUM(Nettobetrag2InklMwstFW) INTO :betrag FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :Oid AND 
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotalVorRabatt() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattGesamttotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcGesamttotal()AND
          		(Artikel->Artikelgruppe->ArtikelgruppenNr <= :bisGr OR 
          		NVL(AbzugID,0) > 0))
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetBetrAbzugExklMwstFWClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	set kopf = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	set mandId = kopf.Mandant
	set bisGr = ##class(DBCore.MandantEinstellung).GetIntEinst(mandId, ##class(DBCore.Konst).AGROFRESHABZUGBISAGR())
  	if (bisGr = 0) || (bisGr = "") {
    	Quit ##class(DBAgrofreshEK.BestellungsKopf).GetBetragExklMwstFWClass(Oid)
  	}
	&sql(SELECT SUM(Nettobetrag2ExklMwstFW) INTO :betrag FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :Oid AND 
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotalVorRabatt() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattGesamttotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcGesamttotal()AND
          		(Artikel->Artikelgruppe->ArtikelgruppenNr <= :bisGr OR 
          		NVL(AbzugID,0) > 0))
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetBetrAbzugMwstFWClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	set kopf = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	set mandId = kopf.Mandant
	set bisGr = ##class(DBCore.MandantEinstellung).GetIntEinst(mandId, ##class(DBCore.Konst).AGROFRESHABZUGBISAGR())

  	if (bisGr = 0) || (bisGr = "") {
	  	Quit ##class(DBAgrofreshEK.BestellungsKopf).GetBetragMwstFWByBestClass(Oid)
  	}
	&sql(SELECT SUM(Nettobetrag2MwstBetragFW) INTO :betrag FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :Oid AND 
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotalVorRabatt() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattGesamttotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcGesamttotal()AND
          		(Artikel->Artikelgruppe->ArtikelgruppenNr <= :bisGr OR 
          		NVL(AbzugID,0) > 0))
	Quit:(SQLCODE'=0) 0
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetBetrAbzugMwstClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	set kopf = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(Oid)
	set mandId = kopf.Mandant
	set bisGr = ##class(DBCore.MandantEinstellung).GetIntEinst(mandId, ##class(DBCore.Konst).AGROFRESHABZUGBISAGR())
  	if (bisGr = 0) || (bisGr = "") {
	   Quit ##class(DBAgrofreshEK.BestellungsKopf).GetBetragMwstByBestClass(Oid)
	} else {
  		&sql(SELECT SUM(Nettobetrag2MwstBetragEW) INTO :betrag FROM DBAgrofreshEK.Bestellungspos
  	     WHERE Bestellungskopf = :Oid AND 
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcZwischentotalVorRabatt() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcRabattGesamttotal() AND
	     		Artikelcode<>DBAgrofreshEK.Konst_AcGesamttotal()AND
          		(Artikel->Artikelgruppe->ArtikelgruppenNr <= :bisGr OR 
          		NVL(AbzugID,0) > 0))
		Quit:(SQLCODE'=0) 0
  	}
	Quit betrag
]]></Implementation>
</Method>

<Method name="GetOidByChargenNrJahr">
<ClassMethod>1</ClassMethod>
<FormalSpec>ChargenNr:%Integer,Jahr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	Set strSQL="SELECT TOP 1 Bestellungskopf AS ID FROM DBAgrofreshEK.Bestellungspos WHERE Charge->PositionsNr = "_ChargenNr_" AND Charge->Jahr = "_Jahr
    Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
    Do rs.Prepare(strSQL)
    Set sc=rs.Execute()
	if (rs.Next()) {
		 Set id = rs.Data("ID")
	}
	quit id
]]></Implementation>
</Method>

<Method name="OutputAbrechnungStream">
<ReturnType>%Library.GlobalBinaryStream</ReturnType>
<Implementation><![CDATA[
	Set tmpStream=##class(%Library.GlobalBinaryStream).%New()
	Set f = ..AbrechnungPDF
	if (..Bestellstatus = 5) {
		set aNr = ..AbrechnungsNr
		set mandant = ..Mandant
		set fid = ""
		&sql(SELECT AbrechnungPDF INTO :fid FROM DBAgrofreshEK.BestellungsKopf where Mandant = :mandant and AbrechnungsNr = :aNr and AbrechnungPDF is not null)
		set f = ##class(DBAgrofreshEK.PDFStream).%OpenId(fid)
	} 
	Set Ret=""
	If (f'="") {
		Set Size=f.DataStream.Size
		Set Ret=tmpStream.CopyFromAndSave(f.DataStream)
	}
	Quit tmpStream
]]></Implementation>
</Method>

<Method name="InputAbrechnungStream">
<FormalSpec><![CDATA[&Stream:%Library.GlobalBinaryStream]]></FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	Set res=0
	Set fid = ""
	if (..AbrechnungPDF '= "") {
		Set fid = ..AbrechnungPDF.%Id()
	}
	set aNr = ..AbrechnungsNr
	set mandant = ..Mandant
	if (..Bestellstatus = 5) {
		&sql(SELECT AbrechnungPDF INTO :fid FROM DBAgrofreshEK.BestellungsKopf where Mandant = :mandant and AbrechnungsNr = :aNr and AbrechnungPDF is not null)
	}
	Set sID = ""
	Set Cnt=0
	if (fid'="") {
		&sql(SELECT count(*) INTO :Cnt
	     	FROM DBAgrofreshEK.PDFStream
	     	WHERE ID = :fid)
	}
	If (Cnt=0) {
		Set myId=..%Id()
		Set v=##Class(DBAgrofreshEK.BestellungsKopf).%OpenId(myId)
		Set n=##Class(DBAgrofreshEK.PDFStream).%New()
		Set Ret=n.%Save()
		Set v.AbrechnungPDF=n
		Set Ret=v.%Save()
		if (Ret=1) {
			do n.DataStream.CopyFromAndSave(Stream)
			Set Ret=n.%Save()
		}
		Set n=""
		Set v = ""
		Set res=(Ret=1)
		Quit res
	}
	&sql(SELECT ID InTo :sID 
	     FROM DBAgrofreshEK.PDFStream
	     WHERE ID = :fid)
	     
	Set s=##Class(DBAgrofreshEK.PDFStream).%OpenId(sID)
	Set Ret=s.DataStream.CopyFromAndSave(Stream)
	Set RetS = s.%Save()
	Set s = ""
	Set res=((Ret=1) && (RetS=1))
	
	Quit res
]]></Implementation>
</Method>

<Method name="DeleteAbrechnungsStream">
<ClassMethod>1</ClassMethod>
<FormalSpec>bestOId:%String</FormalSpec>
<Implementation><![CDATA[
	Set best=##Class(DBAgrofreshEK.BestellungsKopf).%OpenId(bestOId)
	if (best.AbrechnungPDF '= "") {
		Set fid = best.AbrechnungPDF.%Id()
		set best.AbrechnungPDF = ""
		do best.%Save()
		&sql(DELETE
	     FROM DBAgrofreshEK.PDFStream
	     WHERE ID = :fid)
	}
	Set best = ""
]]></Implementation>
</Method>

<Method name="BestellungHasRueckstandAnzGeb">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set count = 0
	&sql(SELECT COUNT(ID) INTO :count FROM DBAgrofreshEK.Bestellungspos where Bestellungskopf = :Oid and AnzahlGebinde < BestellteGebinde)
	if (count = 0) {
		quit 0
	} else {
		quit 1
	}
]]></Implementation>
</Method>

<Method name="BestellungHasRueckstandMenge">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set count = 0
	&sql(SELECT COUNT(ID) INTO :count FROM DBAgrofreshEK.Bestellungspos where Bestellungskopf = :Oid and Menge < BestellteMenge)
	if (count = 0) {
		quit 0
	} else {
		quit 1
	}
]]></Implementation>
</Method>

<Method name="CountBestByBestellNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,BestellNr:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set anz = 0
	Set strSQL="SELECT COUNT(1) As Cnt FROM DBAgrofreshEK.BestellungsKopf WHERE BestellNrAbnehmer = '"_BestellNr_"' AND Mandant = '"_MandantOid_"'"
    Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
    Do rs.Prepare(strSQL)
    Set sc=rs.Execute()
	while (rs.Next()) {
		 set anz = rs.Data("Cnt")
	}
	Quit +anz
]]></Implementation>
</Method>

<Method name="OutputWebEdiCsvStream">
<ReturnType>%Library.GlobalBinaryStream</ReturnType>
<Implementation><![CDATA[
	Set tmpStream=##class(%Library.GlobalBinaryStream).%New()
	Set f = ..WebEdiCsv
	Set Ret=""
	If (f'="") {
		Set Size=f.DataStream.Size
		Set Ret=tmpStream.CopyFromAndSave(f.DataStream)
	}
	Quit tmpStream
]]></Implementation>
</Method>

<Method name="InputWebEdiCsvStream">
<FormalSpec><![CDATA[&Stream:%Library.GlobalBinaryStream]]></FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	Set res=0
	Set fid = ""
	if (..WebEdiCsv '= "") {
		Set fid = ..WebEdiCsv.%Id()
	}
	Set sID = ""
	
		Set Cnt=0
		if (fid'="") {
			&sql(SELECT count(*) INTO :Cnt
		     	FROM DBAgrofreshEK.CSVStream
		     	WHERE ID = :fid)
		}
		If (Cnt=0) {
			Set myId=..%Id()
			Set v=##Class(DBAgrofreshEK.BestellungsKopf).%OpenId(myId)
			Set n=##Class(DBAgrofreshEK.CSVStream).%New()
			Set Ret=n.%Save()
			Set v.WebEdiCsv=n
			Set Ret=v.%Save()
			if (Ret=1) {
				do n.DataStream.CopyFromAndSave(Stream)
				Set Ret=n.%Save()
			}
			Set n=""
			Set v = ""
			Set res=(Ret=1)
			Quit res
		}
		&sql(SELECT ID InTo :sID 
		     FROM DBAgrofreshEK.CSVStream
		     WHERE ID = :fid)
		     
		Set s=##Class(DBAgrofreshEK.CSVStream).%OpenId(sID)
		Set Ret=s.DataStream.CopyFromAndSave(Stream)
		Set RetS = s.%Save()
		Set s = ""
		Set res=((Ret=1) && (RetS=1))
	
	Quit res
]]></Implementation>
</Method>

<Method name="GetAnzGebindeOnBest">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String,GebOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<Implementation><![CDATA[
	Set anzGebinde = 0
	Set strSQL="SELECT SUM(AnzahlGebinde) AS AnzGeb FROM DBAgrofreshEK.Bestellungspos WHERE Bestellung="_BestOid_" AND Gebinde="_GebOid
 	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
 	Do rs.Prepare(strSQL)
 	Set sc=rs.Execute()
 	if (rs.Next()) {
	 	set anzGebinde = rs.Data("ID")
 	}
 	quit anzGebinde
]]></Implementation>
</Method>

<Method name="GetMwstOidForUrprodAbzug">
<ClassMethod>1</ClassMethod>
<FormalSpec>MwstOid:%String,codeMwst:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set newMwstOid = MwstOid
	Set mwst = ##class(DBFibu.SD.Mwst).%OpenId(MwstOid)
	if (mwst '= "") {
		if ((mwst.MwstCode = 3) || (mwst.MwstCode = 4) || (mwst.MwstCode = 21) || (mwst.MwstCode = 22)) {
			Set mandant = mwst.Mandant
			if (codeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGURPROD()) {
				Set newMwstOid = ##class(DBFibu.SD.Mwst).GetMwstOidByCode(mandant,11)
			}
		}
	}
	Quit newMwstOid
]]></Implementation>
</Method>

<Method name="GetMwstCodeForUrprodAbzug">
<ClassMethod>1</ClassMethod>
<FormalSpec>MwstOid:%String,codeMwst:%Integer</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set newMwstCode = 0
	Set mwst = ##class(DBFibu.SD.Mwst).%OpenId(MwstOid)
	if (mwst '= "") {
		set newMwstCode = mwst.MwstCode
		if ((mwst.MwstCode = 3) || (mwst.MwstCode = 4) || (mwst.MwstCode = 21) || (mwst.MwstCode = 22)) {
			if (codeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGURPROD()) {
				Set newMwstCode = 11
			}
		}
	}
	Quit newMwstCode
]]></Implementation>
</Method>

<Method name="GetMwstSatzForUrprodAbzug">
<ClassMethod>1</ClassMethod>
<FormalSpec>MwstOid:%String,codeMwst:%Integer</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set newMwstSatz = 0
	Set mwst = ##class(DBFibu.SD.Mwst).%OpenId(MwstOid)
	if (mwst '= "") {
		set newMwstSatz = mwst.GetMwstSatzFakturierung($H)
		if ((mwst.MwstCode = 3) || (mwst.MwstCode = 4)) {
			if (codeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGURPROD()) {
				Set mandant = mwst.Mandant
				Set oid = ##class(DBFibu.SD.Mwst).GetMwstOidByCode(mandant,11)
				Set mwst = ##class(DBFibu.SD.Mwst).%OpenId(oid)
				Set newMwstSatz = mwst.GetMwstSatzFakturierung($H)
			}
		}
	}
	Quit newMwstSatz
]]></Implementation>
</Method>

<Method name="RecalcGebinde">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String,VonGebinde:%Integer=0,BisGebinde:%Integer=0</FormalSpec>
<Implementation><![CDATA[
	DO ##class(DBAgrofreshEK.GebDetail).DeleteVerBarPositonsByBest(Oid)
	Set strSQL="SELECT ID FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf="_Oid
	if ((VonGebinde '= 0) || (BisGebinde'= 0)) {
		Set strSQL = strSQL_" AND GebKontr->Gebinde->GebindeNr between "_VonGebinde_" AND "_BisGebinde
	}
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	while (rs.Next()) {
		set sPos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(rs.Data("ID"))
		if (sPos.Gebinde '= "") {
			do ##class(DBAgrofreshEK.Bestellungspos).AddGebToGebPos(sPos.Gebinde.%Id(), sPos.Bestellungskopf.%Id(), sPos.AnzahlGebinde, 0)
		}    
	}
]]></Implementation>
</Method>

<Method name="RecalcGebindePrices">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String,VonGebinde:%Integer=0,BisGebinde:%Integer=0</FormalSpec>
<Implementation><![CDATA[
	Set strSQL="SELECT ID FROM DBAgrofreshEK.GebDetail WHERE Bestellung="_Oid
	if ((VonGebinde '= 0) || (BisGebinde'= 0)) {
		Set strSQL = strSQL_" AND GebKontr->Gebinde->GebindeNr between "_VonGebinde_" AND "_BisGebinde
	}
 	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
 	Do rs.Prepare(strSQL)
 	Set sc=rs.Execute()
 	while (rs.Next()) {
  		set gebDetail = ##class(DBAgrofreshEK.GebDetail).%OpenId(rs.Data("ID"))
		set nurSaldo = 0
		set isSpezpreis = 0
  		set gebPreis = ##class(DBAgrofreshEK.GebPreis).GetPreisDetByBestellung(Oid, gebDetail.GebKontr.Gebinde.%Id(), .isSpezpreis, .nurSaldo) 
  		if ((gebDetail.Bestellung.Waehrung.FWCode = 1) || (isSpezpreis = 0)) {
   			set gebDetail.GebindePreis = gebPreis
   			//set gebDetail.GebindePreisFW = ##class(DBUtils.NumberUtils).GetBetragFWbyWaehrung(gebPreis, auftrag.Waehrung)
  		} else {
   			set gebDetail.GebindePreisFW = gebPreis
   			set gebDetail.GebindePreis = ##class(DBUtils.NumberUtils).RoundGemEinst(gebDetail.Bestellung.Mandant, ##class(DBUtils.NumberUtils).GetBetragEWbyWaehrung(gebPreis, gebDetail.Bestellung.Waehrung))
  		}
		set gebDetail.NieVerrechnen = nurSaldo
		if ((nurSaldo = 1) && (gebDetail.Verrechnet = 1)) {
			set gebDetail.Verrechnet = 0
		}
		set kundenKatOid = ""
		if ((gebDetail.GebKontr.Lieferant.Kundenkategorie '= "") && (gebDetail.GebKontr.Lieferant.Kundenkategorie '= $c(0))) {
			set kundenKatOid = gebDetail.GebKontr.Lieferant.Kundenkategorie.%Id()
		}
		//if ((gebDetail.AuslieferungMenge > 0) && ((gebDetail.GebindeAdminKosten = 0) || (gebDetail.GebindeAdminKosten = $c(0)))) {
			set gebDetail.GebindeAdminKosten  = ##class(DBAgrofresh.SD.GebAdminKosten).GetKostenEKByGebindeDatum(gebDetail.GebKontr.Gebinde.%Id(), kundenKatOid ,gebDetail.Datum,gebDetail.GebindeSaldoMenge)
		//}
		//if ((gebDetail.GebindeMiete = 0) || (gebDetail.GebindeMiete = $c(0))) {
			set gebDetail.GebindeMiete  = ##class(DBAgrofresh.SD.GebAdminKosten).GetMieteEKByGebindeDatum(gebDetail.GebKontr.Gebinde.%Id(), kundenKatOid, gebDetail.Datum)
		//}
		// Wenn eingestellt nur für gewisse Selektion verrechnen auf diese prüfen
		if (gebDetail.GebKontr.Gebinde.Selektion2 '= "") {
			set sel2 = gebDetail.GebKontr.Gebinde.Selektion2.%Id()
			set sel2ZahlAdr = ""
			if (gebDetail.GebKontr.Lieferant.FreieSelektion2 '= "") {
				set sel2ZahlAdr = gebDetail.GebKontr.Lieferant.FreieSelektion2.%Id()
			}
			if (sel2 '= sel2ZahlAdr) {
				set gebDetail.GebindeMiete = 0
				set gebDetail.GebindePreisFW = 0
				set gebDetail.GebindePreis = 0
			}
		}
  		d gebDetail.%Save()
  		k gebDetail
 	}
]]></Implementation>
</Method>

<Method name="SetStatusAutoVerarbeitung">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,VonKunde:%Integer,BisKunde:%Integer,BisDatum:%Date,stufenKleinere:%Boolean,status:%Integer</FormalSpec>
<Implementation><![CDATA[
	set strSQL = "Select ID FROM  DBAgrofreshEK.BestellungsKopf "
	Set strSQL=strSQL_"WHERE Mandant = "_MandantOid_"  AND "
	Set strSQL=strSQL_"Adresse->Adresse->Adressnummer between "_VonKunde_" AND "_BisKunde_" AND "
    Set strSQL=strSQL_"Annahmedatum <=TO_DATE("_BisDatum_") AND "
    Set strSQL=strSQL_"(NVL(Bestellstatus,0) = DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() OR "
    Set strSQL=strSQL_"("_stufenKleinere_" = 1 AND (NVL(Bestellstatus,0) <= DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein()))) AND "
    Set strSQL=strSQL_"NVL(Verbucht, 0) = 0"
    Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
    Do rs.Prepare(strSQL)
    Set sc=rs.Execute()
	while (rs.Next()) {
		set currId = rs.Data("ID")
		do ##class(DBAgrofreshEK.BestellungsKopf).SetFlagAutoMutiert(currId, 1)
		set kopf = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(currId)
		set kopf.StatusAutoVerarbeitung = status
		d kopf.%Save()
		do ##class(DBAgrofreshEK.BestellungsKopf).SetFlagAutoMutiert(currId, 0)
	}
    if ($$$ISERR(sc)) {
		w "DBAgrofreshEK.BestellungsKopf.SetStatusAutoVerarbeitung - Fehler bei SQL-Statement für Reset",strSQL,!
	}
]]></Implementation>
</Method>

<Method name="UpdateLsDatum">
<ClassMethod>1</ClassMethod>
<FormalSpec>auftragOid:%String,newDatum:%Date</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set glbBevor = $GET(^BestDetStopTrg(auftragOid))
	Set ^BestDetStopTrg(auftragOid) = 1
	
	set strSQL = "Select ID FROM DBAgrofreshEK.Bestellungspos "
	set strSQL = strSQL_"WHERE Bestellungskopf = "_auftragOid_" AND not Lieferdatum = TO_DATE("_newDatum_")"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
    Do rs.Prepare(strSQL)
    Set sc=rs.Execute()
	while (rs.Next()) {
		set detId = rs.Data("ID")
		set chargenId = ""
		
		if (detId '= "") {
			set pos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(detId)
			set pos.Lieferdatum = newDatum
			if (pos.Bestellungskopf.BearbeitungsstatusAS = ##class(DBAgrofreshEK.Konst).BearbeitungsstatusGedruckt()) {
				set pos.BearbeitungsstatusTAS = ##class(DBAgrofreshEK.Konst).BearbeitungsstatusGedruckt()
			}
			if ((pos.Charge '= "") && (pos.Charge '= $c(0))) {
				set chargenId = pos.Charge.%Id()
			}
			set state = pos.%Save()
			k pos
		}
		if ((chargenId '= "") && (chargenId '= $c(0))) {
			set charge = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(chargenId)
			set charge.EingangsDatum = newDatum
			set state = charge.%Save()
		}
	}
	if (glbBevor = "") {
		Kill ^BestDetStopTrg(auftragOid)
	}
	Quit 1
]]></Implementation>
</Method>

<Method name="GetMaxAbrechnungsdatumByJnr">
<ClassMethod>1</ClassMethod>
<FormalSpec>mandantOid:%String,journalnummer:%Integer</FormalSpec>
<ReturnType>%Date</ReturnType>
<Implementation><![CDATA[
	set datum = 0
	&sql(SELECT MAX(Abrechnungsdatum) INTO :datum FROM DBAgrofreshEK.BestellungsKopf WHERE Mandant=:mandantOid AND VerbuchungsjournalNr=:journalnummer)
	if (SQLCODE = 0) {
		quit datum
	} else {
		quit ""
	}
]]></Implementation>
</Method>

<Method name="GetNextBestellungsNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set nr = 0
	set typ = ##class(DBCore.FormularNr).FormNrAgrofreshEKBestellung()
	// Falls Global noch nicht gesetzt höchste vorhanden Nummer setzen
	if (+$GET(^FormularNr(MandantOid, typ)) = 0) {
		&sql(SELECT MAX(BestellungsNr) into :nr FROM DBAgrofreshEK.BestellungsKopf WHERE Mandant = :MandantOid)
		if (SQLCODE = 0) {
			SET ^FormularNr(MandantOid, typ) = nr	
		}
	}
	// Neue Nummer auslessen
	SET nr=$INCREMENT(^FormularNr(MandantOid, typ))
	// Prüfen ob noch keine RG mit Nummer vorhanden
	while (##class(DBAgrofreshEK.BestellungsKopf).GetIdByBestellungsNr(MandantOid, nr) '= "") {
		SET nr=$INCREMENT(^FormularNr(MandantOid, typ))
	}
		
	Quit nr
]]></Implementation>
</Method>

<Method name="GetNextAnnahmeNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set nr = 0
	set typ = ##class(DBCore.FormularNr).FormNrAgrofreshEKAnnahme()
	// Falls Global noch nicht gesetzt höchste vorhanden Nummer setzen
	if (+$GET(^FormularNr(MandantOid, typ)) = 0) {
		&sql(SELECT MAX(AnnahmeNr) into :nr FROM DBAgrofreshEK.BestellungsKopf WHERE Mandant = :MandantOid)
		if (SQLCODE = 0) {
			SET ^FormularNr(MandantOid, typ) = nr	
		}
	}
	// Neue Nummer auslessen
	SET nr=$INCREMENT(^FormularNr(MandantOid, typ))
	// Prüfen ob noch keine RG mit Nummer vorhanden
	while (##class(DBAgrofreshEK.BestellungsKopf).GetIdByAnnahmeNr(MandantOid, nr) '= "") {
		SET nr=$INCREMENT(^FormularNr(MandantOid, typ))
	}
		
	Quit nr
]]></Implementation>
</Method>

<Method name="GetNextAbrechnungsNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set nr = 0
	set typ = ##class(DBCore.FormularNr).FormNrAgrofreshEKAbrechnung()
	// Falls Global noch nicht gesetzt höchste vorhanden Nummer setzen
	if (+$GET(^FormularNr(MandantOid, typ)) = 0) {
		&sql(SELECT MAX(AbrechnungsNr) into :nr FROM DBAgrofreshEK.BestellungsKopf WHERE Mandant = :MandantOid)
		if (SQLCODE = 0) {
			SET ^FormularNr(MandantOid, typ) = nr	
		}
	}
	// Neue Nummer auslessen
	SET nr=$INCREMENT(^FormularNr(MandantOid, typ))
	// Prüfen ob noch keine RG mit Nummer vorhanden
	while (##class(DBAgrofreshEK.BestellungsKopf).GetIdByAbrechnungsNr(MandantOid, nr) '= "") {
		SET nr=$INCREMENT(^FormularNr(MandantOid, typ))
	}
		
	Quit nr
]]></Implementation>
</Method>

<Method name="SplittNebenkosten">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String</FormalSpec>
<Implementation><![CDATA[
	// Gewicht der Bestellung auslessen
	Set gesamtgewicht = 0
	Set nebenkosten = 0
	&sql(SELECT GewichtBrutto, (NVL(BetragDivKosten,0) + NVL(BetragTransport,0) + NVL(BetragVerzollung,0))
		 into :gesamtgewicht, :nebenkosten
		 FROM DBAgrofreshEK.Bestellungskopf 
		 WHERE ID=:BestOid)
	if (SQLCODE '= 0) {
		set gesamtgewicht = 0
	}
	
	// wenn geamtgewicht nicht 0 und Nebenkosten nicht 0 die nebenkosten aufteilen
	if ((gesamtgewicht '= 0) && (nebenkosten '= 0)) {
		// Gewicht der Positionen auslesen
		Set posOid = ""
		Set einzelgewicht = 0
		&sql(DECLARE CSP1 CURSOR FOR
			 SELECT ID, GewichtBrutto Into :posOid, :einzelgewicht
			 FROM DBAgrofreshEK.Bestellungspos 
			 WHERE Bestellungskopf=:BestOid)
		 
		&sql(OPEN CSP1)
	 	&sql(FETCH CSP1)
 	
	 	While (SQLCODE = 0) { 
			if (einzelgewicht '= 0) {
				set pos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(posOid)
				if (pos '= $c(0)) {
	 				set anteil = gesamtgewicht / einzelgewicht
	 				if (anteil '= 0) {
		 				set kostenAnteil = nebenkosten / anteil
						//set preisAnteil = kostenAnteil / pos.Menge
						set pos.Nebenkosten = kostenAnteil
	 				}
				}             
		 	}
			&sql(FETCH CSP1)
	 	}
	    &sql(CLOSE CSP1)
	    
	} else {
		// Wenn keine Nebenkosten oder kein gewicht auf 0 setzen
		&sql(Update DBAgrofreshEK.Bestellungspos set Nebenkosten = 0 WHERE Bestellungskopf=:BestOid)
	}
]]></Implementation>
</Method>

<Method name="DeleteGetreidePositions">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String</FormalSpec>
<Implementation><![CDATA[
	set st = 1
	Set strSQL="SELECT ID FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf = "_BestOid_" AND GetrAnnahme IS NOT NULL"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	if ($$$ISOK(sc)) {
		Set ^BestDetStopTrg(BestOid) = 1
		while rs.Next(.sc) {
			set id = rs.Data("ID")
			set pos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(id)
			set pos.GetrAnnahme = ""
			do pos.%Save()
			set pos = ""
			set state = ##class(DBAgrofreshEK.Bestellungspos).%DeleteId(id)		
			set st = $$$ISOK(st)
			if (st = 0) {
				Quit	
			}
		}
		d ##class(DBAgrofreshEK.Bestellungspos).ResetStopTriger(BestOid)
	}
	Quit st
]]></Implementation>
</Method>

<Method name="HasGetreidePositions">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set count = 0
	&sql(SELECT COUNT(*) INTO :count FROM DBAgrofreshEK.Bestellungspos WHERE BestellungsKopf = :BestOid AND GetrAnnahme IS NOT NULL)
	if (SQLCODE '= 0) {
		quit 0
	} else {
		quit count > 0
	}
]]></Implementation>
</Method>

<Method name="GetGetreideAnnahmeOid">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id  = ""
	&sql(SELECT TOP 1 GetrAnnahme INTO :id FROM DBAgrofreshEK.Bestellungspos WHERE BestellungsKopf = :BestOid AND GetrAnnahme IS NOT NULL)
	if (SQLCODE '= 0) {
		quit ""
	} else {
		quit id
	}
]]></Implementation>
</Method>

<Method name="GetIdByKommissionsNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,KommissionsNr:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK.Bestellungskopf WHERE Mandant = :MandantOid
		 AND Kommission like :KommissionsNr)
	Quit:(SQLCODE'=0) ""
	Quit id
]]></Implementation>
</Method>

<Method name="GetNextTeilAnnahmeNrByBest">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set nr = 0
	&sql(SELECT MAX(TeillieferNr) into :nr FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf = :BestOid)
	if (SQLCODE '= 0) {
		set nr = 0	
	}
	Quit nr + 1
]]></Implementation>
</Method>

<Method name="HasPositionsByBestTeilAnnahmeNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String,TeillieferNr:%Integer</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set nr = 0
	&sql(SELECT COUNT(%ID) into :nr FROM DBAgrofreshEK.Bestellungspos 
		 WHERE Bestellungskopf = :BestOid AND NVL(TeillieferNr,0) = :TeillieferNr)
		 
	if (SQLCODE '= 0) {
		set nr = 0
	}
	
	if (nr > 0) {
		QUIT 1
	} else {
		QUIT 0	
	}
]]></Implementation>
</Method>

<Method name="PositionenSortieren">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String,DefPosNrSchrit:%Integer,SortierArt:%Integer</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	Set strSQL = "SELECT ID, PositionsNr, NVL(ZusatztextId,0) As ZusatztextId, "
	
	if (SortierArt = ##class(DBAgrofresh.Konst).SortierungArtikelNr()) {
		set strSQL = strSQL_"CASE NVL(ZusatztextId,0)+NVL(TeillieferNr,0) WHEN 0 THEN Artikel->ArtikelNr ELSE "
		set strSQL = strSQL_"(SELECT Artikel->ArtikelNr FROM DBAgrofreshEK.Bestellungspos pos WHERE pos.Bestellungskopf='"_BestOid_"' AND pos.PositionsNr=t.PositionsNr) END As ArtikelNr "
		Set strSQL = strSQL_"FROM DBAgrofreshEK.Bestellungspos t WHERE Bestellungskopf = '"_BestOid_"' "
		set strSQL = strSQL_"order by ArtikelNr, PositionsNr, ZusatztextId"
	} elseif (SortierArt = ##class(DBAgrofresh.Konst).SortierungArtikelKurztext()) {
		set strSQL = strSQL_"CASE NVL(ZusatztextId,0)+NVL(TeillieferNr,0) WHEN 0 THEN Artikel->Kurztext ELSE "
		set strSQL = strSQL_"(SELECT Artikel->Kurztext FROM DBAgrofreshEK.Bestellungspos pos WHERE pos.Bestellungskopf='"_BestOid_"' AND pos.PositionsNr=t.PositionsNr) END As ArtikelKurztext "
		Set strSQL = strSQL_"FROM DBAgrofreshEK.Bestellungspos t WHERE Bestellungskopf = '"_BestOid_"' "
		set strSQL = strSQL_"order by ArtikelKurztext, PositionsNr, ZusatztextId"
	} elseif (SortierArt = ##class(DBAgrofresh.Konst).SortierungArtikelText()) {
		set strSQL = strSQL_"CASE NVL(ZusatztextId,0)+NVL(TeillieferNr,0) WHEN 0 THEN DetailText ELSE "
		set strSQL = strSQL_"(SELECT DetailText FROM DBAgrofreshEK.Bestellungspos pos WHERE pos.Bestellungskopf='"_BestOid_"' AND pos.PositionsNr=t.PositionsNr) END As DetText "
		Set strSQL = strSQL_"FROM DBAgrofreshEK.Bestellungspos t WHERE Bestellungskopf = '"_BestOid_"' "
		set strSQL = strSQL_"order by DetText, PositionsNr, ZusatztextId"
	} elseif (SortierArt = ##class(DBAgrofresh.Konst).SortierungArtikelGrText()) {
		set strSQL = strSQL_"CASE NVL(ZusatztextId,0)+NVL(TeillieferNr,0) WHEN 0 THEN Artikel->Artikelgruppe->ArtikelgruppenNr ELSE "
		set strSQL = strSQL_"(SELECT Artikel->Artikelgruppe->ArtikelgruppenNr FROM DBAgrofreshEK.Bestellungspos pos WHERE pos.Bestellungskopf='"_BestOid_"' AND pos.PositionsNr=t.PositionsNr) END As ArtikelgruppenNr, "
		set strSQL = strSQL_"CASE NVL(ZusatztextId,0)+NVL(TeillieferNr,0) WHEN 0 THEN DetailText ELSE "
		set strSQL = strSQL_"(SELECT DetailText FROM DBAgrofreshEK.Bestellungspos pos WHERE pos.Bestellungskopf='"_BestOid_"' AND pos.PositionsNr=t.PositionsNr) END As DetText "
		Set strSQL = strSQL_"FROM DBAgrofreshEK.Bestellungspos t WHERE Bestellungskopf = '"_BestOid_"' "
		set strSQL = strSQL_"order by ArtikelgruppenNr, DetText, PositionsNr, ZusatztextId"
	}
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	Set posNr = 0
	Set prevPosNr = 0
	
	IF $$$ISOK(sc) {
		While rs.Next(.sc) {
			// Init pro Detailposition
			Set posId =rs.Data("ID")
			if (rs.Data("PositionsNr") '= prevPosNr) {
				set prevPosNr = rs.Data("PositionsNr")
				set posNr = posNr + DefPosNrSchrit
			}
			// Objekt öffnen
			set detPos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(posId)
			if (detPos '= "") {
				set detPos.PositionsNr = posNr
				d detPos.%Save()
				k detPos
			}
		}
	}
	
	Quit sc
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.BestellungsKopfD</DataLocation>
<DefaultData>BestellungsKopfDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.BestellungsKopfD</IdLocation>
<IndexLocation>^DBAgrofreshEK.BestellungsKopfI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.BestellungsKopfS</StreamLocation>
<Data name="BestellungsKopfDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>BestellungsNr</Value>
</Value>
<Value name="3">
<Value>AnnahmeNr</Value>
</Value>
<Value name="4">
<Value>AbrechnungsNr</Value>
</Value>
<Value name="5">
<Value>Bestelldatum</Value>
</Value>
<Value name="6">
<Value>Annahmedatum</Value>
</Value>
<Value name="7">
<Value>Abrechnungsdatum</Value>
</Value>
<Value name="8">
<Value>Bestellstatus</Value>
</Value>
<Value name="9">
<Value>StatusAutoVerarbeitung</Value>
</Value>
<Value name="10">
<Value>CodeVerarbeitung</Value>
</Value>
<Value name="11">
<Value>CodeMwst</Value>
</Value>
<Value name="12">
<Value>Besteller</Value>
</Value>
<Value name="13">
<Value>Referenz</Value>
</Value>
<Value name="14">
<Value>Fusstext1</Value>
</Value>
<Value name="15">
<Value>Fusstext2</Value>
</Value>
<Value name="16">
<Value>Fusstext3</Value>
</Value>
<Value name="17">
<Value>Fusstext4</Value>
</Value>
<Value name="18">
<Value>Anrede</Value>
</Value>
<Value name="19">
<Value>Name</Value>
</Value>
<Value name="20">
<Value>Adresszeile1</Value>
</Value>
<Value name="21">
<Value>Adresszeile2</Value>
</Value>
<Value name="22">
<Value>Adresszeile3</Value>
</Value>
<Value name="23">
<Value>Plz</Value>
</Value>
<Value name="24">
<Value>PlzZusatz</Value>
</Value>
<Value name="25">
<Value>Ort</Value>
</Value>
<Value name="26">
<Value>RabattProzent</Value>
</Value>
<Value name="27">
<Value>Kurs</Value>
</Value>
<Value name="28">
<Value>Kurseinheit</Value>
</Value>
<Value name="29">
<Value>Annahmezeit</Value>
</Value>
<Value name="30">
<Value>RetourenErfasst</Value>
</Value>
<Value name="31">
<Value>AuftragValidiert</Value>
</Value>
<Value name="32">
<Value>VerteillisteNr</Value>
</Value>
<Value name="33">
<Value>Ruestdatum</Value>
</Value>
<Value name="34">
<Value>Skonto</Value>
</Value>
<Value name="35">
<Value>GewichtNetto</Value>
</Value>
<Value name="36">
<Value>GewichtTara</Value>
</Value>
<Value name="37">
<Value>GewichtBrutto</Value>
</Value>
<Value name="38">
<Value>SachbearbeiterNr</Value>
</Value>
<Value name="39">
<Value>SachbearbeiterBenutzername</Value>
</Value>
<Value name="40">
<Value>SachbearbeiterVorname</Value>
</Value>
<Value name="41">
<Value>SachbearbeiterName</Value>
</Value>
<Value name="42">
<Value>WIRAnteil</Value>
</Value>
<Value name="43">
<Value>BetragFW</Value>
</Value>
<Value name="44">
<Value>BearbeitungsstatusOF</Value>
</Value>
<Value name="45">
<Value>BearbeitungsstatusAU</Value>
</Value>
<Value name="46">
<Value>BearbeitungsstatusRZ</Value>
</Value>
<Value name="47">
<Value>BearbeitungsstatusLS</Value>
</Value>
<Value name="48">
<Value>BearbeitungsstatusRG</Value>
</Value>
<Value name="49">
<Value>BearbeitungsstatusBZ</Value>
</Value>
<Value name="50">
<Value>BearbeitungsstatusOA</Value>
</Value>
<Value name="51">
<Value>BearbeitungsstatusAN</Value>
</Value>
<Value name="52">
<Value>BearbeitungsstatusAB</Value>
</Value>
<Value name="53">
<Value>Zahlungskondition</Value>
</Value>
<Value name="54">
<Value>Lieferart</Value>
</Value>
<Value name="55">
<Value>Bestellart</Value>
</Value>
<Value name="56">
<Value>Fusstext</Value>
</Value>
<Value name="57">
<Value>Adresse</Value>
</Value>
<Value name="58">
<Value>ZahlAdresse</Value>
</Value>
<Value name="59">
<Value>Waehrung</Value>
</Value>
<Value name="60">
<Value>BearbeitungsstatusBE</Value>
</Value>
<Value name="61">
<Value>Kommission</Value>
</Value>
<Value name="62">
<Value>Vertreter</Value>
</Value>
<Value name="63">
<Value>GebindeVerrechnungAktiv</Value>
</Value>
<Value name="64">
<Value>BearbeitungsstatusAS</Value>
</Value>
<Value name="65">
<Value>BearbeitungsstatusAR</Value>
</Value>
<Value name="66">
<Value>FreigabeProduzentenabrechnung</Value>
</Value>
<Value name="67">
<Value>OP</Value>
</Value>
<Value name="68">
<Value>Verbucht</Value>
</Value>
<Value name="69">
<Value>VerbuchungsjournalNr</Value>
</Value>
<Value name="70">
<Value>SkontoFW</Value>
</Value>
<Value name="71">
<Value>Abteilung</Value>
</Value>
<Value name="72">
<Value>Mandant</Value>
</Value>
<Value name="73">
<Value>Abzug1Typ</Value>
</Value>
<Value name="74">
<Value>Abzug1Prozent</Value>
</Value>
<Value name="75">
<Value>Abzug1Text</Value>
</Value>
<Value name="76">
<Value>Abzug2Typ</Value>
</Value>
<Value name="77">
<Value>Abzug2Prozent</Value>
</Value>
<Value name="78">
<Value>Abzug2Text</Value>
</Value>
<Value name="79">
<Value>Abzug3Typ</Value>
</Value>
<Value name="80">
<Value>Abzug3Prozent</Value>
</Value>
<Value name="81">
<Value>Abzug3Text</Value>
</Value>
<Value name="82">
<Value>Abzug1FibuKonto</Value>
</Value>
<Value name="83">
<Value>Abzug2FibuKonto</Value>
</Value>
<Value name="84">
<Value>Abzug3FibuKonto</Value>
</Value>
<Value name="85">
<Value>Lagerort</Value>
</Value>
<Value name="86">
<Value>WarenannehmerNr</Value>
</Value>
<Value name="87">
<Value>WarenannehmerBenutzername</Value>
</Value>
<Value name="88">
<Value>WarenannehmerVorname</Value>
</Value>
<Value name="89">
<Value>WarenannehmerName</Value>
</Value>
<Value name="90">
<Value>Abnehmner</Value>
</Value>
<Value name="91">
<Value>AnnahmescheinPDF</Value>
</Value>
<Value name="92">
<Value>EtikettenPDF</Value>
</Value>
<Value name="93">
<Value>GebindeVerrechnung</Value>
</Value>
<Value name="94">
<Value>InEdit</Value>
</Value>
<Value name="95">
<Value>BestellNrAbnehmer</Value>
</Value>
<Value name="96">
<Value>AbrechungPDF</Value>
</Value>
<Value name="97">
<Value>AbrechnungPDF</Value>
</Value>
<Value name="98">
<Value>IsNachbestellung</Value>
</Value>
<Value name="99">
<Value>IsHauptanlieferung</Value>
</Value>
<Value name="100">
<Value>TeilanlieferungNr</Value>
</Value>
<Value name="101">
<Value>HauptanlieferungNr</Value>
</Value>
<Value name="102">
<Value>WebEdiCsv</Value>
</Value>
<Value name="103">
<Value>IsStorno</Value>
</Value>
<Value name="104">
<Value>Abzug1Mwst</Value>
</Value>
<Value name="105">
<Value>Abzug1MwstSatz</Value>
</Value>
<Value name="106">
<Value>Abzug2Mwst</Value>
</Value>
<Value name="107">
<Value>Abzug2MwstSatz</Value>
</Value>
<Value name="108">
<Value>Abzug2MwstSatzExport</Value>
</Value>
<Value name="109">
<Value>Abzug3Mwst</Value>
</Value>
<Value name="110">
<Value>Abzug3MwstSatz</Value>
</Value>
<Value name="111">
<Value>Abzug1MwstSatzExport</Value>
</Value>
<Value name="112">
<Value>Abzug3MwstSatzExport</Value>
</Value>
<Value name="113">
<Value>BetragVerzollung</Value>
</Value>
<Value name="114">
<Value>BetragTransport</Value>
</Value>
<Value name="115">
<Value>BetragDivKosten</Value>
</Value>
<Value name="116">
<Value>WarenEingang</Value>
</Value>
<Value name="117">
<Value>Abrechnungstyp</Value>
</Value>
<Value name="118">
<Value>Warenannehmer</Value>
</Value>
<Value name="119">
<Value>Sachbearbeiter</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Abnehmner">
</Property>
<Property name="AbrechnungPDF">
</Property>
<Property name="AbrechnungsNr">
</Property>
<Property name="Abrechnungsdatum">
</Property>
<Property name="Abrechnungstyp">
</Property>
<Property name="Abteilung">
</Property>
<Property name="Abzug1FibuKonto">
</Property>
<Property name="Abzug1Mwst">
</Property>
<Property name="Abzug1MwstSatz">
</Property>
<Property name="Abzug1MwstSatzExport">
</Property>
<Property name="Abzug1Prozent">
</Property>
<Property name="Abzug1Text">
</Property>
<Property name="Abzug1Typ">
</Property>
<Property name="Abzug2FibuKonto">
</Property>
<Property name="Abzug2Mwst">
</Property>
<Property name="Abzug2MwstSatz">
</Property>
<Property name="Abzug2MwstSatzExport">
</Property>
<Property name="Abzug2Prozent">
</Property>
<Property name="Abzug2Text">
</Property>
<Property name="Abzug2Typ">
</Property>
<Property name="Abzug3FibuKonto">
</Property>
<Property name="Abzug3Mwst">
</Property>
<Property name="Abzug3MwstSatz">
</Property>
<Property name="Abzug3MwstSatzExport">
</Property>
<Property name="Abzug3Prozent">
</Property>
<Property name="Abzug3Text">
</Property>
<Property name="Abzug3Typ">
</Property>
<Property name="Adresse">
</Property>
<Property name="Adresszeile1">
</Property>
<Property name="Adresszeile2">
</Property>
<Property name="Adresszeile3">
</Property>
<Property name="AnnahmeNr">
</Property>
<Property name="Annahmedatum">
</Property>
<Property name="AnnahmescheinPDF">
</Property>
<Property name="Annahmezeit">
</Property>
<Property name="Anrede">
</Property>
<Property name="AuftragValidiert">
</Property>
<Property name="BearbeitungsstatusAB"/>
<Property name="BearbeitungsstatusAN"/>
<Property name="BearbeitungsstatusAR">
</Property>
<Property name="BearbeitungsstatusAS">
</Property>
<Property name="BearbeitungsstatusBE">
</Property>
<Property name="BearbeitungsstatusBZ">
</Property>
<Property name="BearbeitungsstatusOA">
</Property>
<Property name="BestellNrAbnehmer">
</Property>
<Property name="Bestellart">
</Property>
<Property name="Bestelldatum">
</Property>
<Property name="Besteller">
</Property>
<Property name="Bestellstatus">
</Property>
<Property name="BestellungsNr">
</Property>
<Property name="BetragAbzug1EWExkl">
</Property>
<Property name="BetragAbzug1EWInkl">
</Property>
<Property name="BetragAbzug1EWMwst">
</Property>
<Property name="BetragAbzug1FWExkl">
</Property>
<Property name="BetragAbzug1FWInkl">
</Property>
<Property name="BetragAbzug1FWMwst">
</Property>
<Property name="BetragAbzug2EWExkl">
</Property>
<Property name="BetragAbzug2EWInkl">
</Property>
<Property name="BetragAbzug2EWMwst">
</Property>
<Property name="BetragAbzug2FWExkl">
</Property>
<Property name="BetragAbzug2FWInkl">
</Property>
<Property name="BetragAbzug2FWMwst">
</Property>
<Property name="BetragAbzug3EWExkl">
</Property>
<Property name="BetragAbzug3EWInkl">
</Property>
<Property name="BetragAbzug3EWMwst">
</Property>
<Property name="BetragAbzug3FWExkl">
</Property>
<Property name="BetragAbzug3FWInkl">
</Property>
<Property name="BetragAbzug3FWMwst">
</Property>
<Property name="BetragDivKosten">
</Property>
<Property name="BetragEWExklMwst">
</Property>
<Property name="BetragEWExklMwstAbzug">
</Property>
<Property name="BetragEWInklMwst">
</Property>
<Property name="BetragEWInklMwstAbzug">
</Property>
<Property name="BetragFW"/>
<Property name="BetragFWExklMwst">
</Property>
<Property name="BetragFWExklMwstAbzug">
</Property>
<Property name="BetragFWInklMwst">
</Property>
<Property name="BetragFWInklMwstAbzug">
</Property>
<Property name="BetragForAbzugEWExklMwst">
</Property>
<Property name="BetragForAbzugEWInklMwst">
</Property>
<Property name="BetragForAbzugFWExklMwst">
</Property>
<Property name="BetragForAbzugFWInklMwst">
</Property>
<Property name="BetragForAbzugFWMwst">
</Property>
<Property name="BetragForAbzugMwst">
</Property>
<Property name="BetragMwst">
</Property>
<Property name="BetragMwstFW">
</Property>
<Property name="BetragTransport">
</Property>
<Property name="BetragVerzollung">
</Property>
<Property name="CodeMwst">
</Property>
<Property name="CodeVerarbeitung">
</Property>
<Property name="EtikettenPDF">
</Property>
<Property name="FreigabeProduzentenabrechnung">
</Property>
<Property name="Fusstext">
</Property>
<Property name="Fusstext1">
</Property>
<Property name="Fusstext2">
</Property>
<Property name="Fusstext3">
</Property>
<Property name="Fusstext4">
</Property>
<Property name="GebindeMwstBetrag">
</Property>
<Property name="GebindeMwstBetragFW">
</Property>
<Property name="GebindeSaldo">
</Property>
<Property name="GebindeSaldoFW">
</Property>
<Property name="GebindeVerrechnung">
</Property>
<Property name="GebindeVerrechnungAktiv">
</Property>
<Property name="GewichtBrutto">
</Property>
<Property name="GewichtNetto">
</Property>
<Property name="GewichtTara">
</Property>
<Property name="HauptanlieferungNr">
</Property>
<Property name="InEdit">
</Property>
<Property name="IsHauptanlieferung">
</Property>
<Property name="IsStorno">
</Property>
<Property name="Kommission">
</Property>
<Property name="Kurs">
</Property>
<Property name="Kurseinheit">
</Property>
<Property name="Lagerort">
</Property>
<Property name="Lieferart">
</Property>
<Property name="Lieferzeit"/>
<Property name="Mandant">
</Property>
<Property name="Name">
</Property>
<Property name="OP">
</Property>
<Property name="Ort">
</Property>
<Property name="Plz">
</Property>
<Property name="PlzZusatz">
</Property>
<Property name="RabattProzent">
</Property>
<Property name="Referenz">
</Property>
<Property name="RetourenErfasst">
</Property>
<Property name="Ruestdatum"/>
<Property name="Sachbearbeiter">
</Property>
<Property name="SachbearbeiterBenutzername"/>
<Property name="SachbearbeiterName"/>
<Property name="SachbearbeiterNr">
</Property>
<Property name="SachbearbeiterVorname"/>
<Property name="Skonto">
</Property>
<Property name="SkontoFW">
</Property>
<Property name="StatusAutoVerarbeitung">
</Property>
<Property name="TeilanlieferungNr">
</Property>
<Property name="TotalMitGebMitAbzug">
</Property>
<Property name="TotalMitGebMitAbzugFW">
</Property>
<Property name="TotalMitGebinde">
</Property>
<Property name="TotalMitGebindeFW">
</Property>
<Property name="TotalOhneGebMitAbzugExkl">
</Property>
<Property name="TotalOhneGebMitAbzugFW">
</Property>
<Property name="TotalOhneGebMitAbzugFWExkl">
</Property>
<Property name="TotalOhneGebMitAbzugInkl">
</Property>
<Property name="Verbucht">
</Property>
<Property name="VerbuchungsjournalNr">
</Property>
<Property name="VerteillisteNr"/>
<Property name="Vertreter"/>
<Property name="WIRAnteil"/>
<Property name="Waehrung">
</Property>
<Property name="WarenEingang">
</Property>
<Property name="Warenannehmer">
</Property>
<Property name="WarenannehmerBenutzername"/>
<Property name="WarenannehmerName"/>
<Property name="WarenannehmerNr">
</Property>
<Property name="WarenannehmerVorname"/>
<Property name="Warenaufwand">
</Property>
<Property name="WebEdiCsv">
</Property>
<Property name="ZahlAdresse">
</Property>
<Property name="Zahlungskondition">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.Bestellungspos">
<Super>%Persistent,%Populate,%XML.Adaptor</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61380,42742.196245</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="PositionsNr">
<Description>
Pos-Nr</Description>
<Type>%Integer</Type>
</Property>

<Property name="Lieferdatum">
<Description>
Lieferdatum</Description>
<Type>%Date</Type>
</Property>

<Property name="Lagerstatus">
<Description>
Lagerstatus</Description>
<Type>%Integer</Type>
</Property>

<Property name="BestellNr">
<Description>
Bestell-Nr</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="DetailText">
<Description>
Bestellungsdetail</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Artikelcode">
<Description>
Artikelcode - Art des Details (Text, pauschal...)</Description>
<Type>%Integer</Type>
</Property>

<Property name="AnzahlGebinde">
<Description>
Anzahl Gebinde</Description>
<Type>%Integer</Type>
</Property>

<Property name="AnzahlGedruckteGebinde">
<Description>
Anzahl gedruckte Gebinde</Description>
<Type>%Integer</Type>
</Property>

<Property name="AnzahlJeGebinde">
<Description>
Anzahl je Gebinde</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="AnzahlHauptGebinde">
<Description>
Anzahl Hauptgebinde</Description>
<Type>%Integer</Type>
</Property>

<Property name="Menge">
<Description>
Menge</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BestellteMenge">
<Description>
Bestellte Menge</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BestellteGebinde">
<Description>
Bestellte Gebinde</Description>
<Type>%Integer</Type>
</Property>

<Property name="Preis">
<Description>
Preis</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="PreisFW">
<Description>
Preis FW</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="RabattProzent">
<Description>
Rabatt in %</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="RabattBetrag">
<Description>
Rabatt in Fr.</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="MwstSatz">
<Description>
Mwst-Satz</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="MwstSatzExport">
<Description>
Mwst-Satz</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="MwstBetrag">
<Description>
Mwst-Betrag</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragExklMwst">
<Description>
Betrag exkl. Mwst</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragInklMwst">
<Description>
Betrag inkl. Mwst</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragInklMwstFW">
<Description>
Betrag inkl. Mwst FW</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Warenaufwand">
<Description>
Warenaufwand</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GewichtNetto">
<Description>
Gewicht</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="ParzellenNr">
<Description>
Parzellen-Nr</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GewichtTara">
<Description>
Gewicht tarra</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GewichtBrutto">
<Description>
Gewicht brutto</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="ZusatztextID">
<Description>
Zusatztext ID</Description>
<Type>%Integer</Type>
</Property>

<Property name="GrammJeEinheit">
<Description>
Gramm je Einheit</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GrammJeLaufmeter">
<Description>
Gramm je Laufmeter</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Bestellungskopf">
<Type>DBAgrofreshEK.BestellungsKopf</Type>
<Cardinality>parent</Cardinality>
<Inverse>Bestellungspos</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Bestellungskopf"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="Artikel">
<Type>DBAgrofresh.Artikel</Type>
<Cardinality>one</Cardinality>
<Inverse>EkDetPos</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Artikel"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ArtikelIndex">
<Properties>Artikel</Properties>
</Index>

<Property name="Herkunft">
<Type>DBAgrofresh.SD.Herkunft</Type>
<Cardinality>one</Cardinality>
<Inverse>EkDetPos</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Herkunft"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="HerkunftIndex">
<Properties>Herkunft</Properties>
</Index>

<Property name="Gebinde">
<Type>DBAgrofresh.SD.Gebinde</Type>
<Cardinality>one</Cardinality>
<Inverse>EkDetPos</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Gebinde"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="GebindeIndex">
<Properties>Gebinde</Properties>
</Index>

<Property name="Qualitaet">
<Type>DBAgrofresh.SD.Qualitaetsklasse</Type>
<Cardinality>one</Cardinality>
<Inverse>EkDetPos</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Qualitaet"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="QualitaetIndex">
<Properties>Qualitaet</Properties>
</Index>

<Property name="Produktionsart">
<Type>DBAgrofresh.SD.Produktionsart</Type>
<Cardinality>one</Cardinality>
<Inverse>EkDetPos</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Produktionsart"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ProduktionsartIndex">
<Properties>Produktionsart</Properties>
</Index>

<Property name="Lagerort">
<Type>DBAgrofresh.SD.Lagerort</Type>
<Cardinality>one</Cardinality>
<Inverse>EkDetPos</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Lagerort"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="LagerortIndex">
<Properties>Lagerort</Properties>
</Index>

<Property name="Mengeneinheit">
<Type>DBAgrofresh.SD.Mengencode</Type>
<Cardinality>one</Cardinality>
<Inverse>EkBestellDetail</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Mengeneinheit"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="Mwst">
<Type>DBFibu.SD.Mwst</Type>
<Cardinality>one</Cardinality>
<Inverse>BestellungsposMwst</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="MwstIndex">
<Properties>Mwst</Properties>
</Index>

<Property name="Lieferant">
<Type>DBAdressen.Adresse</Type>
<Cardinality>one</Cardinality>
<Inverse>BPLieferant</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Lieferant"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="LieferantIndex">
<Properties>Lieferant</Properties>
</Index>

<Property name="Abzugstyp">
<Type>DBAgrofresh.SD.Abzugstyp</Type>
<Cardinality>one</Cardinality>
<Inverse>BestPosAbzugstyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abzugstyp"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="AbzugstypIndex">
<Properties>Abzugstyp</Properties>
</Index>

<Property name="SpezPreis">
<Type>DBAgrofreshEK.Preis</Type>
<Cardinality>one</Cardinality>
<Inverse>BPSpezPreis</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="SpezPreis"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="SpezPreisIndex">
<Properties>SpezPreis</Properties>
</Index>

<Property name="Charge">
<Type>DBAgrofreshEK.ChargenEingang</Type>
<Cardinality>one</Cardinality>
<Inverse>BPChargenEingang</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Charge"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ChargeIndex">
<Properties>Charge</Properties>
</Index>

<Property name="Lagerbewegung">
<Type>DBAgrofresh.Lagerbew</Type>
<Cardinality>many</Cardinality>
<Inverse>Bestelldet</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="MwstBetragFW">
<Description>
Mwst-Betrag FW</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BetragExklMwstFW">
<Description>
Betrag exkl. Mwst FW</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="RabattBetragFW">
<Description>
Rabatt Betrag FW</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Artikelrabatt1ExklMwstEW">
<Description>
Artikelrabatt 1 exkl. Mwst EW</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Artikelrabatt1InklMwstEW">
<Description>
Artikelrabatt 1 inkkl. Mwst EW</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Artikelrabatt1MwstbetragEW">
<Description>
Artikelrabatt 1 Mwstbetrag EW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Artikelrabatt1MwstbetragEW}=({Artikelrabatt1InklMwstEW}-{Artikelrabatt1ExklMwstEW}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Artikelrabatt1InProzent">
<Description>
Artikelrabatt 1 in Prozent</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Nettobetrag1ExklMwstEW">
<Description>
Nettobetrag 1 exkl. Mwst EW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Nettobetrag1ExklMwstEW}=({BetragExklMwst}-{Artikelrabatt1ExklMwstEW}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Nettobetrag1InklMwstEW">
<Description>
Nettobetrag 1 inkkl. Mwst EW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Nettobetrag1InklMwstEW}=({BetragInklMwst}-{Artikelrabatt1InklMwstEW}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Nettobetrag1MwstbetragEW">
<Description>
Nettobetrag 1 Mwstbetrag EW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Nettobetrag1MwstbetragEW}=({MwstBetrag}-{Artikelrabatt1MwstbetragEW}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Artikelrabatt2ExklMwstEW">
<Description>
Artikelrabatt 2 exkl. Mwst EW</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Artikelrabatt2InklMwstEW">
<Description>
Artikelrabatt 2 inkkl. Mwst EW</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Artikelrabatt2MwstbetragEW">
<Description>
Artikelrabatt 2 Mwstbetrag EW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Artikelrabatt2MwstbetragEW}=({Artikelrabatt2InklMwstEW}-{Artikelrabatt2ExklMwstEW}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Artikelrabatt2InProzent">
<Description>
Artikelrabatt 2 in Prozent</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Nettobetrag2ExklMwstEW">
<Description>
Nettobetrag 2 exkl. Mwst EW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Nettobetrag2ExklMwstEW}=({Nettobetrag1ExklMwstEW}-{Artikelrabatt2ExklMwstEW}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Nettobetrag2InklMwstEW">
<Description>
Nettobetrag 2 inkkl. Mwst EW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Nettobetrag2InklMwstEW}=({Nettobetrag1InklMwstEW}-{Artikelrabatt2InklMwstEW}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Nettobetrag2MwstbetragEW">
<Description>
Nettobetrag 2 Mwstbetrag EW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Nettobetrag2MwstbetragEW}=({Nettobetrag1MwstbetragEW}-{Artikelrabatt2MwstbetragEW}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Artikelrabatt1ExklMwstFW">
<Description>
Artikelrabatt 1 exkl. Mwst FW</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Artikelrabatt1InklMwstFW">
<Description>
Artikelrabatt 1 inkkl. Mwst FW</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Artikelrabatt1MwstbetragFW">
<Description>
Artikelrabatt 1 Mwstbetrag FW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Artikelrabatt1MwstbetragFW}=({Artikelrabatt1InklMwstFW}-{Artikelrabatt1ExklMwstFW}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Nettobetrag1ExklMwstFW">
<Description>
Nettobetrag 1 exkl. Mwst FW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Nettobetrag1ExklMwstFW}=({BetragExklMwstFW}-{Artikelrabatt1ExklMwstFW}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Nettobetrag1InklMwstFW">
<Description>
Nettobetrag 1 inkkl. Mwst FW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Nettobetrag1InklMwstFW}=({BetragInklMwstFW}-{Artikelrabatt1InklMwstFW}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Nettobetrag1MwstbetragFW">
<Description>
Nettobetrag 1 Mwstbetrag FW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Nettobetrag1MwstbetragFW}=({MwstBetragFW}-{Artikelrabatt1MwstbetragFW}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Artikelrabatt2ExklMwstFW">
<Description>
Artikelrabatt 2 exkl. Mwst FW</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Artikelrabatt2InklMwstFW">
<Description>
Artikelrabatt 2 inkkl. Mwst FW</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Artikelrabatt2MwstbetragFW">
<Description>
Artikelrabatt 2 Mwstbetrag FW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Artikelrabatt2MwstbetragFW}=({Artikelrabatt2InklMwstFW}-{Artikelrabatt2ExklMwstFW}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Nettobetrag2ExklMwstFW">
<Description>
Nettobetrag 2 exkl. Mwst FW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Nettobetrag2ExklMwstFW}=({Nettobetrag1ExklMwstFW}-{Artikelrabatt2ExklMwstFW}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Nettobetrag2InklMwstFW">
<Description>
Nettobetrag 2 inkkl. Mwst FW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Nettobetrag2InklMwstFW}=({Nettobetrag1InklMwstFW}-{Artikelrabatt2InklMwstFW}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Nettobetrag2MwstbetragFW">
<Description>
Nettobetrag 2 Mwstbetrag FW</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Nettobetrag2MwstbetragFW}=({Nettobetrag1MwstbetragFW}-{Artikelrabatt2MwstbetragFW}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="PlattformBestPos">
<Type>DBPlattform.BestPos</Type>
<Cardinality>many</Cardinality>
<Inverse>DefinitiveBestPos</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="KorrekturMwst">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="SSCCInfo">
<Type>SSCCInfo</Type>
<Collection>list</Collection>
</Property>

<Property name="IsFromNachbestellung">
<Type>%Boolean</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {IsFromNachbestellung}=##class(DBAgrofreshEK.Bestellungspos).CheckNachbestellung({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
</Property>

<Property name="AbzugID">
<Description>
AbzugID</Description>
<Type>%Integer</Type>
</Property>

<Property name="Erstbestellmenge">
<Description>
Erstbestellmenge (Sollte mal fuer Statistik oder so dienen)</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Parzelle">
<Type>DBAgrofresh.SD.Parzelle</Type>
<Cardinality>one</Cardinality>
<Inverse>Bestellungspos</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Parzelle"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="BestelllistenNr">
<Description>
Bestelllisten Nr</Description>
<Type>%Integer</Type>
</Property>

<Property name="Nebenkosten">
<Description>
Anteil an Transport, Zoll, Divkosten im verhältniss zum gewicht der Position
wird gebraucht in Wareneinkauf.</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="IsFromKalibrierung">
<Type>%Boolean</Type>
</Property>

<Property name="Haendlingskosten">
<Description>
Kosten welche dem Produzenten vom VP im Verkauf abgezogen werden</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GetrAnnahme">
<Type>DBSpezial.Getr.Annahme</Type>
<Cardinality>one</Cardinality>
<Inverse>BestellPos</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="GetrAnnameIdx">
<Properties>GetrAnnahme</Properties>
</Index>

<Property name="VerlustProzent">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BedarfMenge">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BedarfAnzGebinde">
<Type>%Integer</Type>
</Property>

<Property name="TeillieferNr">
<Type>%Integer</Type>
</Property>

<Property name="Annahmezeit">
<Description>
Annahmezeit</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="BearbeitungsstatusTAS">
<Description>
BearbeitungsstatusTAS - Teilannahme</Description>
<Type>%Integer</Type>
</Property>

<Method name="CheckNachbestellung">
<ClassMethod>1</ClassMethod>
<FormalSpec>PosID:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set retval = 0
	&sql(SELECT BestKopf->IsNachbestellung INTO :retval from DBPlattform.BestPos where DefinitiveBestPos = :PosID)
	Quit:(SQLCODE'=0) 0
	quit retval
]]></Implementation>
</Method>

<Method name="BestellungHasDetails">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestellungOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf = :BestellungOid)
	Quit:(SQLCODE'=0) 0
	Quit id '= ""
]]></Implementation>
</Method>

<Method name="BestellungHasArtikel">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestellungOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf = :BestellungOid AND Artikel <>"")
	Quit:(SQLCODE'=0) 0
	Quit id '= ""
]]></Implementation>
</Method>

<Method name="GebindeMutationAllowed">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String,GebindeOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	
	set retval = 1
	Set strSQL="SELECT ID FROM DBAgrofreshEK.Bestellungspos WHERE  BestellungsKopf ='"_BestOid_"'"_
				" AND Gebinde = '"_GebindeOid_"'"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	IF $$$ISOK(sc) {
		If (rs.Next(.sc)) {
			//Datensatz gefunden -> Gebinde öffnen und schauen, ob Manuelle Mutation erlaubt ist
			set geb = ##class(DBAgrofresh.SD.Gebinde).%OpenId(GebindeOid)
			if (geb '= "") {
				set retval = '(geb.ManuelleGebindemutSperren)
			} 
			
		}
	}
	Quit retval
]]></Implementation>
</Method>

<Method name="GetAktPosNummer">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestellungOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set pos = ""
	&sql(SELECT Max(PositionsNr) INTO :pos FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf = :BestellungOid)
	Quit:(SQLCODE'=0) 0
	Quit +pos
]]></Implementation>
</Method>

<Method name="GetOidByPosAndBestellung">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestellungOid:%String,aktPos:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT Top 1 ID into :id FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf = :BestellungOid AND PositionsNr = :aktPos AND ISNULL(ZusatztextID,0) = 0)
	Quit:(SQLCODE'=0) ""
	Quit id
]]></Implementation>
</Method>

<Method name="GetOidByKrediDatumArtikelClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>KrediOid:%String,Datum:%Date,Artikel:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf->Adresse = :KrediOid AND Bestellungskopf->Annahmedatum = :Datum AND Artikel = :Artikel
	     ORDER BY Bestellungskopf->BestellungsNr DESC)
	Quit:(SQLCODE'=0) ""
	Quit id
]]></Implementation>
</Method>

<Method name="GetOidByBestellungArtikelClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String,Artikel:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :BestOid AND Artikel = :Artikel)
	Quit:(SQLCODE'=0) ""
	Quit id
]]></Implementation>
</Method>

<Method name="GetOidByBestPosNrTeilLieferNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String,PositionsNr:%Integer,TeillieferNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.Bestellungspos
	     WHERE Bestellungskopf = :BestOid AND PositionsNr = :PositionsNr AND TeillieferNr = :TeillieferNr)
	Quit:(SQLCODE'=0) ""
	Quit id
]]></Implementation>
</Method>

<Method name="GetAktZusatztextByPosNummer">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestellungOid:%String,aktPos:%Integer</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set pos = ""
	&sql(SELECT Max(ZusatztextID) INTO :pos FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf = :BestellungOid AND PositionsNr = :aktPos)
	Quit:(SQLCODE'=0) 0
	Quit +pos
]]></Implementation>
</Method>

<Method name="DeletePositonsByBestellung">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestellungOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set st = 1
	Set strSQL="SELECT ID FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf = "_BestellungOid
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	if ($$$ISOK(sc)) {
		Set ^BestDetStopTrg(BestellungOid) = 1
		while rs.Next(.sc) {
			set id = rs.Data("ID")
			//Bei Nachbestellung muss Charge gelöst werden und nicht gelöscht
			// Nein, führte bei Basseti zu Problemen, wiso wurde dies mal eingebaut? dh 10.01.2011
			/*set pos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(id)
			if (pos.Bestellungskopf.TeilanlieferungNr > 0) {
				set pos.Charge = ""
				w pos.%Save(),!
			}
			set pos = ""*/
			set state = ##class(DBAgrofreshEK.Bestellungspos).%DeleteId(id)		
			set st = $$$ISOK(st)
			if (st = 0) {
				Quit	
			}
		}
		d ##class(DBAgrofreshEK.Bestellungspos).ResetStopTriger(BestellungOid)
	}
	Quit st
	
	/*set pos = ""
	&sql(DELETE FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf = :BestellungOid)
	Quit ((SQLCODE = 0) || (SQLCODE = 100))*/
]]></Implementation>
</Method>

<Method name="DeletePositon">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestellungOid:%String,PosNr:%Integer,ZText:%Integer,teilLieferNr:%Integer</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set st = 1
	Set strSQL="SELECT ID FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf = "_BestellungOid_" AND PositionsNr = "_PosNr_" AND ("_ZText_" = 0 OR NVL(ZusatztextID,0) = "_ZText_") AND NVL(TeillieferNr,0) = "_teilLieferNr
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	if ($$$ISOK(sc)) {
		Set ^BestDetStopTrg(BestellungOid) = 1
		// Wenn es sich um eine Teillieferposition handelt muss die Menge wieder zum Original hinzugefügt werden
		if (teilLieferNr > 0) {
			set detId = ""
			&sql(SELECT ID into :detId FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf = :BestellungOid AND PositionsNr = :PosNr AND NVL(ZusatztextID,0) = 0 AND NVL(TeillieferNr,0) = :teilLieferNr)
			if (SQLCODE '= 0) {
				set detId = ""
			}
			set hauptId = ""
			&sql(SELECT ID into :hauptId FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf = :BestellungOid AND PositionsNr = :PosNr AND NVL(ZusatztextID,0) = 0 AND NVL(TeillieferNr,0) = 0)
			if ((SQLCODE = 0) && (detId '= "")) {
				set hauptPos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(hauptId)
				set detPos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(detId)
				
				set hauptPos.AnzahlGebinde = hauptPos.AnzahlGebinde + detPos.AnzahlGebinde
				set hauptPos.Menge = hauptPos.Menge + detPos.Menge
				set state = hauptPos.%Save()
				
				k hauptPos, detPos
			}
		} else {
			// wenn es sich um die Hauptposition handelt muss geprüft werden ob es Teilpositionen hat und wenn ja die erstbestellmenge übergeben werden
			set detId = ""
			&sql(SELECT TOP 1 ID into :detId FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf = :BestellungOid AND PositionsNr = :PosNr AND NVL(ZusatztextID,0) = 0 AND NVL(TeillieferNr,0) <> 0 Order by TeillieferNr ASC)
			if ((SQLCODE = 0) && (detId '= "")) {
				set menge = 0
				&sql(SELECT Erstbestellmenge into :menge FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf = :BestellungOid AND PositionsNr = :PosNr AND NVL(ZusatztextID,0) = 0 AND NVL(TeillieferNr,0) = 0)
				if (SQLCODE '= 0) {
					set menge = 0
				}
				set detPos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(detId)
				set detPos.Erstbestellmenge = menge
				set state = detPos.%Save()
				
				k detPos
			}
		}
		
		while rs.Next(.sc) {
			set id = rs.Data("ID")
			set state = ##class(DBAgrofreshEK.Bestellungspos).%DeleteId(id)	
			set st = $$$ISOK(state)
		}
		d ##class(DBAgrofreshEK.Bestellungspos).ResetStopTriger(BestellungOid)
	}
	Quit st
]]></Implementation>
</Method>

<Method name="DeleteAbzugeByPositon">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestellungOid:%String,PosNr:%Integer</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set st = 1
	Set strSQL="SELECT ID FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf = "_BestellungOid_" AND PositionsNr = "_PosNr_" AND AbzugID > 0"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	if ($$$ISOK(sc)) {
		Set ^BestDetStopTrg(BestellungOid) = 1
		while rs.Next(.sc) {
			set id = rs.Data("ID")
			set state = ##class(DBAgrofreshEK.Bestellungspos).%DeleteId(id)		
			set st = $$$ISOK(state)
			if (st = 0) {
				w "Fehler beim löschen der Abzugsposition ", state
			}
		}
		d ##class(DBAgrofreshEK.Bestellungspos).ResetStopTriger(BestellungOid)
	}
	Quit st
]]></Implementation>
</Method>

<Method name="%OnDelete">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Delete</METHOD> method to 
provide notification that the object specified by <VAR>oid</VAR> is being deleted.

<P>If this method returns an error then the object will not be deleted.
[Previously private]]]></Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%ObjectIdentity</FormalSpec>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	set myId = $lg(oid,1)
	
	// Gebinde Nachführen
	set anzahlGeb = 0
	set BestellungId = ""
	set gebId = ""
	set chargenId = ""
	
	Set strSQL="SELECT  AnzahlGebinde, Bestellungskopf->ID AS bestellungId, Gebinde->ID as gebId, Charge->ID as cId FROM DBAgrofreshEK.Bestellungspos WHERE ID='"_myId_"'"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	IF $$$ISOK(sc) {
		if rs.Next(.sc) {
			Set BestellungId=rs.Data("bestellungId")
			Set anzahlGeb=rs.Data("AnzahlGebinde")
			Set gebId=rs.Data("gebId")
			set chargenId = rs.Data("cId")
		}
	}
	
	if ((gebId '= "") && (BestellungId '= "") && (gebId '= "0") && (BestellungId '= "0")) {
		do ##class(DBAgrofreshEK.Bestellungspos).AddGebToGebPos(gebId, BestellungId, anzahlGeb, 1)
	}
	// END Gebinde Nachführen
	set BestellungId = ""
	
	&sql(SELECT Bestellungskopf->ID
	 INTO :BestellungId 
	 FROM DBAgrofreshEK.Bestellungspos WHERE ID=:myId)
	 
	if (SQLCODE=0) {
		Set ^BestDetOldValues(myId, 5) = BestellungId
		Set ^BestDetOldValues(myId, 4) = chargenId
	} else {
		Set ^BestDetOldValues(myId, 5) = ""
		Set ^BestDetOldValues(myId, 4) = ""
	}
	
	do ##class(DBAgrofreshEK.BestellungsKopf).SetBStatusMutiertClass(BestellungId)
	
	d ..CheckGetreide(myId)
	//d ..CheckForBestellt(myId)
	
	//Lagerbewegungen lösen
	d ##class(DBAgrofreshEK.Bestellungspos).ReleaseLagerBew(myId)

	set st = ##class(DBUtils.ClassHelper).DeleteManyRelations("DBAgrofreshEK.Bestellungspos", myId)
	
	Quit $$$OK
]]></Implementation>
</Method>

<Method name="%OnAfterDelete">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Delete</METHOD> method to 
provide notification that the object specified by <VAR>oid</VAR> has been deleted.
The callback occurs immediately after %DeleteData has been called. If %DeleteData returns
an error then %OnAfterDelete is not called.

<P>If %OnAfterDelete returns an error (%Status) then the transaction is rolled back.
[Previously private]]]></Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%ObjectIdentity</FormalSpec>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	set myId = $lg(oid,1)	
	
	//w "DBAgrofreshEK.Bestellungspos %OnAfterDelete mit ID"_myId,!
	
	Set bestId = ^BestDetOldValues(myId, 5)
	
	// Auskommentiert, da wen eine Detailposition Zusatztexte oder Abzuege hatte
	// konnte diese nicht mehr gelöscht werden. DH 29.04.2010
	//Set ^BestDetStopTrg(bestId) = 1
	SET status = $$$OK
	//Set status = ##class(DBAgrofreshEK.Bestellungspos).RecalcRabattTotal(bestId)
	if ($$$ISERR(status)) {
		w "DBAgrofreshEK.Bestellungspos.%OnDelete - Fehler bei RabattTotal-Berechnung",!
		w status,!
	}
	Set chargenId = ^BestDetOldValues(myId, 4)
	//d ##class(DBAgrofreshEK.Bestellungspos).ResetStopTriger(bestId)
	KILL ^BestDetOldValues(myId,4)
	KILL ^BestDetOldValues(myId,5)
	
	if ((chargenId '= "") && (chargenId '= $c(0))) {
		set st = ..DeleteChargen(chargenId)
	}
	
	Quit $$$OK
]]></Implementation>
</Method>

<Method name="CheckForBestellt">
<ClassMethod>1</ClassMethod>
<FormalSpec>myId:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	set detPos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(myId)
	//W "Lagerstatus: "_detPos.Lagerstatus ,!
	if (+detPos.Lagerstatus = ##class(DBAgrofresh.Konst).LagerstatusBestellt()) {
		if (detPos.Artikel '= "") {
			if (detPos.Artikel.LagerAktiv) {
				set lagerOid = ""
				if (detPos.Lagerort '= "") {
					set lagerOid = detPos.Lagerort.%Id()
				}
				//w "STARTE ADDLAGER",!
				d ##class(DBAgrofresh.ArtikelLager).AddLager(detPos.Artikel.Mandant, detPos.Artikel.%Id(),lagerOid, (-1) * +detPos.AnzahlGebinde, (-1) * +detPos.Menge, 0, 0, 1)
			}
		}
	}
	kill detPos
]]></Implementation>
</Method>

<Method name="CheckGetreide">
<ClassMethod>1</ClassMethod>
<FormalSpec>myId:%String</FormalSpec>
<Implementation><![CDATA[
	set detPos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(myId)
	if (detPos.GetrAnnahme '= "") {
		//Wenn nötig Getreideannahme löschen
		set anId = detPos.GetrAnnahme.%Id()
		set count = 0
		&sql(SELECT COUNT(ID) INTO :count FROM DBAgrofreshEK.Bestellungspos WHERE GetrAnnahme = :anId)
		set detPos.GetrAnnahme = ""  
		do detPos.%Save()
		if (count = 1) {
			do ##class(DBSpezial.Getr.Annahme).%DeleteId(anId)
		}
	}
	kill detPos
]]></Implementation>
</Method>

<Method name="CopyPositon">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestellungOid:%String,PosNr:%Integer,NewPosNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set oid = ""
	set oldPos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(##class(DBAgrofreshEK.Bestellungspos).GetOidByPosAndBestellung(BestellungOid, PosNr))
	
	if (oldPos '= "") {
		set newPos = oldPos.%ConstructClone(-1)
		set newPos.PositionsNr = NewPosNr
		set newPos.Bestellungskopf = oldPos.Bestellungskopf
		do newPos.%Save()
		set oid = newPos.%Id()
		k oldPos
		k newPos
	}
	Quit oid
]]></Implementation>
</Method>

<Method name="%OnBeforeSave">
<FormalSpec>insert:%Boolean</FormalSpec>
<Private>1</Private>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	set bId = ..Bestellungskopf.%Id()
	If (('insert) && ($GET(^BestDetStopTrg(bId))="")) {
		set anzahlGeb = 0
		set bestellungId = 0
		set gebId = 0
	
		set myId = ..%Id()
		Set strSQL="SELECT  AnzahlGebinde, Bestellungskopf->ID AS bestellungId, Gebinde->Id as GebindeId FROM DBAgrofreshEK.Bestellungspos WHERE ID='"_myId_"'"
		Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
		Do rs.Prepare(strSQL)
		Set sc=rs.Execute()
		IF $$$ISOK(sc) {
			if rs.Next(.sc) {
				Set bestellungId=rs.Data("bestellungId")
				Set anzahlGeb=rs.Data("AnzahlGebinde")
				Set gebId=rs.Data("GebindeId")
			}
		}
	
		//Lock ^BestDetOldValues(myId,1)
		//Lock ^BestDetOldValues(myId,2)
		//Lock ^BestDetOldValues(myId,3)
		Set ^BestDetOldValues(myId, 1) = anzahlGeb
		Set ^BestDetOldValues(myId, 2) = bestellungId
		Set ^BestDetOldValues(myId, 3) = gebId
	}
	Quit $$$OK
]]></Implementation>
</Method>

<Method name="%OnAfterSave">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Save</METHOD> method to 
provide notification that the object is being saved. It is called after 
the object's data has been successfully written to disk.

<P><VAR>insert</VAR> will be set to 1 if this object is being saved for the first time.

<P>If this method returns an error then the call to <METHOD>%Save</METHOD> will fail.]]></Description>
<FormalSpec>insert:%Boolean</FormalSpec>
<Private>1</Private>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	set bId = ..Bestellungskopf.%Id()
	
	If ($GET(^BestDetStopTrg(bId))="") {
		Set ^BestDetStopTrg(bId) = 1
		
		set detId = ..%Id()
	
		If ('insert) {
		
			Set anzahlGeb = ^BestDetOldValues(detId, 1)
			Set bestellungId = ^BestDetOldValues(detId, 2)
			Set gebId = ^BestDetOldValues(detId, 3)
			
			//Lock -^BestDetOldValues(detId,1)
			//Lock -^BestDetOldValues(detId,2)
			//Lock -^BestDetOldValues(detId,3)
		
			if (bestellungId '= "") && (gebId '= "") {
				do ##class(DBAgrofreshEK.Bestellungspos).AddGebToGebPos(gebId, bestellungId, anzahlGeb, 1)
			}
		}
		if (..Gebinde '= "") {
			do ##class(DBAgrofreshEK.Bestellungspos).AddGebToGebPos(..Gebinde.%Id(), bId, ..AnzahlGebinde, 0)
		}
		set kopf = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(bId)
		if (kopf '= "") {
			do kopf.SetBStatusMutiert()
			k kopf
		}
		//do ..Bestellungskopf.SetBStatusMutiert()
	
		KILL ^BestDetOldValues(detId, 1)
		KILL ^BestDetOldValues(detId, 2)
		KILL ^BestDetOldValues(detId, 3)
	
		//Set status = ##class(DBAgrofreshEK.Bestellungspos).RecalcRabattTotal(bId)
		//if ($$$ISERR(status)) {
		//	w "DBAgrofreshEK.Bestellungspos.%OnAfterSave - Fehler bei RabattTotal-Berechnung",!
		//	w status,!
		//}
		
		Set status = ##class(DBAgrofreshEK.Bestellungspos).RecalcMwst(bId)
		if ($$$ISERR(status)) {
			w "DBAgrofreshEK.Bestellungspos.%OnAfterSave - Fehler bei RecalcMwst-Berechnung",!
			w status,!
		}
		
		Kill ^BestDetStopTrg(bId)
	}
	
	Quit $$$OK
]]></Implementation>
</Method>

<Trigger name="Update">
<Code><![CDATA[	// Gebinde nachführen
	new anzahlGeb
	new bestellungId
	new gebId
	
	set anzahlGeb = {AnzahlGebinde*O}
	set bestellungId = {Bestellungskopf*O}
	set gebId = {Gebinde*O}
	
	if (bestellungId '= "") && (gebId '= "") {
		do ##class(DBAgrofreshEK.Bestellungspos).AddGebToGebPos(gebId, bestellungId, anzahlGeb, 1)
	}
	
	set anzahlGeb = {AnzahlGebinde*N}
	set bestellungId = {Bestellungskopf*N}
	set gebId = {Gebinde*N}
	
	if (bestellungId '= "") && (gebId '= "") {
		do ##class(DBAgrofreshEK.Bestellungspos).AddGebToGebPos(gebId, bestellungId, anzahlGeb, 0)
	}
	// END Gebinde nachführen
	
	do ##class(DBAgrofreshEK.BestellungsKopf).SetBStatusMutiertClass(bestellungId)
	
	//Set status = ##class(DBAgrofreshEK.Bestellungspos).RecalcRabattTotal({Bestellungskopf*N})
	//if ($$$ISERR(status)) {
	//	w "DBAgrofreshEK.Bestellungspos.Update - Fehler bei RabattTotal-Berechnung",!
	//	w status,!
	//}]]></Code>
<Event>UPDATE</Event>
<Time>AFTER</Time>
<Foreach>row</Foreach>
</Trigger>

<Trigger name="Insert">
<Code><![CDATA[	// Gebinde Position nachführen
	new anzahlGeb
	new bestellungId
	new gebId
	
	set anzahlGeb = {AnzahlGebinde*N}
	set bestellungId = {Bestellungskopf*N}
	set gebId = {Gebinde*N}
	
	if ((gebId '= "") && (bestellungId '= "")) {
		do ##class(DBAgrofreshEK.Bestellungspos).AddGebToGebPos(gebId, bestellungId, anzahlGeb, 0)
	}
	// END Gebinde nachführen
	
	do ##class(DBAgrofreshEK.BestellungsKopf).SetBStatusMutiertClass({Bestellungskopf*N})
	
	//Set status = ##class(DBAgrofreshEK.Bestellungspos).RecalcRabattTotal(bestellungId)
	//if ($$$ISERR(status)) {
	//	w "DBAgrofreshEK.Bestellungspos.Insert - Fehler bei RabattTotal-Berechnung",!
	//	w status,!
	//}]]></Code>
<Event>INSERT</Event>
<Time>AFTER</Time>
<Foreach>row</Foreach>
</Trigger>

<Trigger name="trgAfterDelete">
<Code><![CDATA[	new myId
	set myId = {ID*O}
	
	// Gebinde Position nachführen
	new anzahlGeb
	new bestellungId
	new gebId
	new charge
	new st
	new err
	new status
	
	set anzahlGeb = {AnzahlGebinde*O}
	set bestellungId = {Bestellungskopf*O}
	set gebId = {Gebinde*O}
	set charge = {Charge*O}
	
	
	if ((gebId '= "") && (bestellungId '= "")) {
		do ##class(DBAgrofreshEK.Bestellungspos).AddGebToGebPos(gebId, bestellungId, anzahlGeb, 1)
	}
	
	set st = ##class(DBAgrofreshEK.Bestellungspos).DeleteChargen(charge)
	
	
	If ('$$$ISOK(st)) {
		set %msg = "Fehler beim Löschen der zugehörigen Charge"
		set %ok = 0
	}
	
	//Set status = ##class(DBAgrofreshEK.Bestellungspos).RecalcRabattTotal(bestellungId)
	//if ($$$ISERR(status)) {
	//	w "DBAgrofreshEK.Bestellungspos.trgAfterDelete - Fehler bei RabattTotal-Berechnung",!
	//	w status,!
	//}]]></Code>
<Event>DELETE</Event>
<Time>AFTER</Time>
<Foreach>row</Foreach>
</Trigger>

<Trigger name="trgBeforeDelete">
<Code>	new myId	
	new res
	set myId = {ID*O}
	
	do ##class(DBAgrofreshEK.BestellungsKopf).SetBStatusMutiertClass({Bestellungskopf*N})
	
	//d ..CheckGetreide(myId)
	d ##class(DBAgrofreshEK.Bestellungspos).CheckForBestellt(myId)
	
	//Lagerbewegungen lösen
	d ##class(DBAgrofreshEK.Bestellungspos).ReleaseLagerBew(myId)
	
	set res = ##class(DBUtils.ClassHelper).DeleteManyRelations("DBAgrofreshEK.Bestellungspos", myId)

	Quit res</Code>
<Event>DELETE</Event>
<Foreach>row</Foreach>
</Trigger>

<Method name="ReleaseLagerBew">
<ClassMethod>1</ClassMethod>
<FormalSpec>detailId:%String</FormalSpec>
<Implementation><![CDATA[

	W "ReleaseLagerBew: "_detailId,!
	Set strSQL="SELECT ID FROM DBAgrofresh.LagerBew WHERE Bestelldet = '"_detailId_"'"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	IF $$$ISOK(sc) {
		While rs.Next(.sc) {
			Set lbId = rs.Data("ID")
			Set bew = ##class(DBAgrofresh.Lagerbew).%OpenId(lbId)
			Set bew.Bestelldet = ""
			Do bew.%Save()
			KILL bew
		}
	}
]]></Implementation>
</Method>

<Method name="AddGebToGebPos">
<ClassMethod>1</ClassMethod>
<FormalSpec>gebindeId:%String,bestellungId:%String,oldAnlieferung:%Decimal(SCALE=5),storno:%Boolean</FormalSpec>
<Implementation><![CDATA[
	set ^GebindeSet(gebindeId) = 1
	do ##class(DBAgrofreshEK.Bestellungspos).CheckHauptGebinde(gebindeId, bestellungId, oldAnlieferung, storno)
	do ##class(DBAgrofreshEK.Bestellungspos).CheckPallette(gebindeId, bestellungId, oldAnlieferung, storno)
			
	KILL ^GebindeSet(gebindeId)

	// wenn storno wert invertieren
	if storno {
		set oldAnlieferung = ((-1)*oldAnlieferung)
	}
	set gebId = ##class(DBAgrofreshEK.GebDetail).GetIdByBestellungGebinde(bestellungId, gebindeId)
	set gebinde = ##class(DBAgrofresh.SD.Gebinde).%OpenId(gebindeId)
	set best = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(bestellungId)
	//GebDetail nur anlegen, wenn Gebinde verrechenbar ist
	//gem. AW 10.08.09
	if ((gebinde '= "") && (gebinde.GebindeNr < ##class(DBAgrofresh.Konst).GebindeFirstNichtVerrechenbar())) {

		// Aktueller bestand auslesen
		set dbAnlieferung = 0	
		Set strSQL="SELECT AnlieferungMenge as menge FROM DBAgrofreshEK.GebDetail WHERE Bestellung->ID ="_bestellungId_" AND GebKontr->Gebinde->ID="_gebindeId
		Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
		Do rs.Prepare(strSQL)
		Set sc=rs.Execute()
		IF $$$ISOK(sc) {
			While rs.Next(.sc) {
				Set dbAnlieferung=rs.Data("menge")
			}
		}
		// Neue Menge berrechnen 
		set newAnlieferung = dbAnlieferung + oldAnlieferung

		// prüfen ob schon Detailposition vorhanden
		if (gebId = "") {
			w "Gebindepos wird erstellt", !
			set gebPos = ##class(DBAgrofreshEK.GebDetail).%New()
			set gebPos.Bestellung = best
			//w "Bestellung: "_best, " - Adresse: "_best.Adresse.Adresse, !
			//w gebindeId, " ", best.Adresse.Adresse.%Id(), !
			set gebKtrId = ""
			set gebKtrId = ##class(DBAgrofreshEK.GebKontr).GetIdByGebAdr(gebindeId, best.Adresse.Adresse.%Id())
			w "Gebindekontrolle = "_gebKtrId, !
			if (gebKtrId '= "") {
				w "öffne Gebindekontrolle = "_gebKtrId, !
				set gebKontr = ##class(DBAgrofreshEK.GebKontr).%OpenId(gebKtrId)
				set gebPos.GebKontr = gebKontr
			} else {
				w "erstelle neue Gebindekontrolle", !
				set gebKontr = ##class(DBAgrofreshEK.GebKontr).%New()
				set gebKontr.Gebinde = gebinde
				w "weise Adresse zu: "_best.Adresse.Adresse, !
				set gebKontr.Lieferant = best.Adresse.Adresse
				set gebKontr.DatumAnfangsbestand = +$H
				set gebKontr.Mandant = best.Mandant
				set state = gebKontr.%Save()
				set gebPos.GebKontr = gebKontr
			}
			do gebPos.%Save()
			set gebId = gebPos.%Id()
			k gebPos
			k gebKontr
		}

		// Werte auf gebindeposition speichern
		set gebDetail = ##class(DBAgrofreshEK.GebDetail).%OpenId(gebId)
		if (best.Annahmedatum '= "") {
			set gebDetail.Datum = best.Annahmedatum
		} else {
			set gebDetail.Datum = best.Bestelldatum
		}
		
		if (gebinde '= "" && gebinde.MwstEK '= "") {
			//w "Mwst überprüfung",!
			// MWST überprüfung wegen Inkl /Exkl...
			set mwstOid = ##class(DBFibu.SD.Mwst).GetOidByStrgForOrderMgmt(gebDetail.Bestellung.CodeMwst, gebinde.MwstEK.%Id(), gebinde.Mandant, 1)
			set newMwst = ##class(DBFibu.SD.Mwst).%OpenId(mwstOid)
			set gebDetail.Mwst = newMwst
			k newMwst
			if (gebDetail.Mwst '= "") {
				// Wenn GebindeMwst Inkl und Auftrag Exkl
				set gebDetail.MwstSatz = ##class(DBFibu.SD.Mwst).GetMwstSatzFakturierungClass(gebDetail.Mwst.%Id(), gebDetail.Datum)
				
				// wenn Auftrag Export
				if (gebDetail.Bestellung.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGEXPORT()) {
					set gebDetail.MwstSatz = ##class(DBFibu.SD.Mwst).GetMwstSatzExportClass(gebinde.MwstEK.%Id(), gebDetail.Datum)
				}
			} else {
				set gebDetail.MwstSatz = 0
			}
		} else {
			set gebDetail.MwstSatz = 0
		}
		if (+gebDetail.GebindePreis = 0) {
			
			set isSpezpreis = 0
			set nurSaldo = 0
			set gebPreis = ##class(DBAgrofreshEK.GebPreis).GetPreisDetByBestellung(best.%Id(), gebinde.%Id(), .isSpezpreis, .nurSaldo) 
			//w "Preis: ", gebPreis, !
			if ((best.Waehrung.FWCode = 1)) {
				set gebDetail.GebindePreis = gebPreis
				// Fremdwaehrung und Kundenspez = Preis in FW
			} elseif ((best.Waehrung.FWCode '= 1) && (isSpezpreis = 1)) {
				set gebDetail.GebindePreisFW = gebPreis
				set gebDetail.GebindePreis = ##class(DBUtils.NumberUtils).RoundGemEinst(best.Mandant, ##class(DBUtils.NumberUtils).GetBetragEWbyWaehrung(gebPreis, best.Waehrung))
				// Fremdwaehrung,Preis= Preis in EW
			} elseif ((best.Waehrung.FWCode '= 1)) {
				set gebDetail.GebindePreisFW = ##class(DBUtils.NumberUtils).Round(##class(DBUtils.NumberUtils).GetBetragFWbyWaehrung(gebPreis, best.Waehrung), 2)
				set gebDetail.GebindePreis = gebPreis
			}
			set gebDetail.NieVerrechnen = nurSaldo
		}
		
		set gebDetail.AnlieferungMenge = newAnlieferung
		set kundenKatOid = ""
		if ((gebDetail.GebKontr.Lieferant.Kundenkategorie '= "") && (gebDetail.GebKontr.Lieferant.Kundenkategorie '= $c(0))) {
			set kundenKatOid = gebDetail.GebKontr.Lieferant.Kundenkategorie.%Id()
		}
		if ((gebDetail.GebindeAdminKosten = 0) ||(gebDetail.GebindeAdminKosten = $c(0))) {
			set gebDetail.GebindeAdminKosten  = ##class(DBAgrofresh.SD.GebAdminKosten).GetKostenEKByGebindeDatum(gebinde.%Id(), kundenKatOid ,gebDetail.Datum,gebDetail.GebindeSaldoMenge)
		}
		if ((gebDetail.GebindeMiete = 0) || (gebDetail.GebindeMiete = "") || (gebDetail.GebindeMiete = $c(0))) {
			set gebDetail.GebindeMiete  = ##class(DBAgrofresh.SD.GebAdminKosten).GetMieteEKByGebindeDatum(gebinde.%Id(), kundenKatOid, gebDetail.Datum)
		}
		// Wenn eingestellt nur für gewisse Selektion verrechnen auf diese prüfen
		if (gebDetail.GebKontr.Gebinde.Selektion2 '= "") {
			set sel2 = gebDetail.GebKontr.Gebinde.Selektion2.%Id()
			set sel2ZahlAdr = ""
			if (gebDetail.GebKontr.Lieferant.FreieSelektion2 '= "") {
				set sel2ZahlAdr = gebDetail.GebKontr.Lieferant.FreieSelektion2.%Id()
			}
			if (sel2 '= sel2ZahlAdr) {
				set gebDetail.GebindeMiete = 0
			}
		}
		// Wenn nicht verrechnet wird ist der Gebindepreis 0 -> daher keine prüfung mehr (rz)
		set gebDetail.AnlieferungBetrag = (newAnlieferung * gebDetail.GebindePreisTotal)

		do gebDetail.%Save()
		if (((gebDetail.AuslieferungMenge = 0) || (gebDetail.AuslieferungMenge = "")) && ((gebDetail.AnlieferungMenge = 0) || (gebDetail.AnlieferungMenge = ""))) {
			//set currOid = gebDetail.%Id()
			//w "In Delete Detail",currOid, !
			//k gebDetail
			//d ##class(DBAgrofreshEK.GebDetail).%DeleteId(currOid)
		}
		
		// prüfen ob noch Gebindedetails vorhanden
		// Abfrage
	    Set strSQL="SELECT count(AnlieferungMenge) + count(AuslieferungMenge) AS anz, ID AS ID FROM DBAgrofreshEK.GebDetail WHERE Bestellung ="_bestellungId_" AND GebKontr->Gebinde="_gebindeId
	    Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	    Do rs.Prepare(strSQL)
	    Set sc=rs.Execute()
	    // Result prüfen
	    if (rs.Next()) {
		    if (+rs.Data("anz") = 0) {
			    Set strSQL="DELETE FROM DBAgrofreshEK.GebDetail WHERE (ID='"_rs.Data("ID")_"')"
			    Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
			    Do rs.Prepare(strSQL)
			    Set sc=rs.Execute()
		    } 
	    }
	}
]]></Implementation>
</Method>

<Method name="CheckHauptGebinde">
<ClassMethod>1</ClassMethod>
<FormalSpec>gebindeId:%String,bestId:%String,oldLieferung:%Decimal(SCALE=5),storno:%Boolean</FormalSpec>
<Implementation><![CDATA[
	// prüfung ob Hauptgebinde eingetragen
	set gebinde = ##class(DBAgrofresh.SD.Gebinde).%OpenId(gebindeId)
	set hauptgebindeId = ""
	if (gebinde.Hauptgebinde '= "") {
		set hauptgebindeId = gebinde.Hauptgebinde.%Id()
	}
	// Anzahl Gebinde je Hauptgebinde ausrechnen
	set anzJeGeb = gebinde.AnzGebJeHauptGeb
	kill gebinde
	
	if (hauptgebindeId '= "") && ($Get(^GebindeSet(hauptgebindeId))'= 1) {
		// Anzahl Hauptgebinde ausrechnen
		set anzHG = (oldLieferung / anzJeGeb)
		set anzHGRound = ##class(DBUtils.NumberUtils).Round(anzHG, 0)
		if (anzHG < 1) {
			set anzHGRound = 1
		}elseif (anzHG > anzHGRound) {
			set anzHGRound = anzHGRound +1
		}
		d ##class(DBAgrofreshEK.Bestellungspos).AddGebToGebPos(hauptgebindeId, bestId, +anzHGRound, storno)
	}
	// prüfung ob Untergebinde vorhanden
	set unterGebinde = ""
	set faktor = 0
	&sql(Select Top 1 ID, AnzGebJeHauptGeb INTO unterGebinde, faktor FROM DBAgrofresh_SD.Gebinde WHERE Hauptgebinde->Id = :gebindeId)
	
	if (SQLCODE=0) {
		if (unterGebinde '= "") && ($Get(^GebindeSet(unterGebinde))'= 1) {
			set anzUG = (oldLieferung * +faktor)
			d ##class(DBAgrofreshEK.Bestellungspos).AddGebToGebPos(unterGebinde, bestId, +anzUG, storno)
		}
	}
]]></Implementation>
</Method>

<Method name="CheckPallette">
<ClassMethod>1</ClassMethod>
<FormalSpec>gebindeId:%String,bestId:%String,oldLieferung:%Decimal(SCALE=5),storno:%Boolean</FormalSpec>
<Implementation><![CDATA[
	// Init
	set gebinde = ##class(DBAgrofresh.SD.Gebinde).%OpenId(gebindeId)
	set anzJeGeb = 0
	set mandId = gebinde.Mandant
	set palOid = ##class(DBCore.MandantEinstellung).GetStringEinst(mandId, ##class(DBCore.Konst).AGROFRESHEKGEBTYPPALLETTE())
	set einst = ##class(DBCore.MandantEinstellung).GetShortEinst(mandId, ##class(DBCore.Konst).AGROFRESHEKAUTOPALCALC())
	
	// prüfung ob Pallettenerfassung aktiv
	// Wenn keine Berechnung aktiv verlassen
	if (einst = ##class(DBAgrofresh.Konst).AutoCalcPalNein()) || (palOid = "") || ($Get(^GebindeSet(palOid))= 1) || (palOid =gebindeId) {
		kill gebinde
		Quit
		
	// Wenn optimierte Berechnung aktiv die maximale Anzahl als Faktor
	} elseif (einst = ##class(DBAgrofresh.Konst).AutoCalcPalOptimiert()) {
		set anzJeGeb = gebinde.MaxAnzahlJePalette
		
	// Wenn optimierte Berechnung aktiv die Anzahl als Faktor
	} elseif (einst = ##class(DBAgrofresh.Konst).AutoCalcPalStandard()) {
		set anzJeGeb = gebinde.AnzahlJePalette
	}
	kill gebinde
	
	// Anzahl Pallette ausrechnen
	set anzHG = (oldLieferung / anzJeGeb)
	set anzHGRound = ##class(DBUtils.NumberUtils).Round(anzHG, 0)
	if (anzHG < 1) {
		set anzHGRound = 1
	}elseif (anzHG > anzHGRound) {
		set anzHGRound = anzHGRound +1
	}
	d ##class(DBAgrofreshEK.Bestellungspos).AddGebToGebPos(palOid, bestId, +anzHGRound, storno)
]]></Implementation>
</Method>

<Method name="SetGedruckteGebinde">
<ClassMethod>1</ClassMethod>
<FormalSpec>PosOid:%String</FormalSpec>
<Implementation><![CDATA[
	set pos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(PosOid)
	if ((pos '= "") && (pos '= $c(0))) {
		set kopfOid = pos.Bestellungskopf.%Id()
		Set ^BestDetStopTrg(kopfOid) = 1
		set pos.AnzahlGedruckteGebinde = pos.AnzahlGebinde
		set state = pos.%Save()
		Kill ^BestDetStopTrg(kopfOid)
		Kill pos
	}
]]></Implementation>
</Method>

<Method name="DeleteChargen">
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	//w "in DeleteChargen mit Oid: "_chargenOid
	if (##class(DBAgrofreshEK.ChargenEingang).%ExistsId(chargenOid)) {
		set isMischposten = 0
		&sql(SELECT NVL(IsMischposten,0) into :isMischposten FROM DBAgrofreshEK.ChargenEingang WHERE ID = :chargenOid)
		set ret = $$$OK
		if (isMischposten = 0) {
			set ret = ##class(DBAgrofreshEK.ChargenEingang).%DeleteId(chargenOid)
			if ($$$ISOK(ret)) {
				w !,"is ok",!
			} else {
				w !,"is nok: ",ret, !
			}
		}
		Quit ret
	} else {
		w "ChargenOid nicht gefunden: "_chargenOid,!
		Quit $$$OK
	}
]]></Implementation>
</Method>

<Method name="RecalcRabattTotal">
<ClassMethod>1</ClassMethod>
<FormalSpec>bestkopfOid:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	set status = $$$OK
	
	Set strSQL="SELECT ID FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf="_bestkopfOid_" ORDER BY PositionsNr DESC"
    Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
    Do rs.Prepare(strSQL)
    Set sc=rs.Execute()
    if ($$$ISERR(sc)) {
		w "DBAgrofreshEK.Bestellungspos.RecalcRabattTotal - Fehler bei SQL-Statement",!
		w sc,!
	}

    Set zwischenRabatt = 0
    Set gesamtRabatt = 0
    Set letzteZeileRabatt = 0
    while (rs.Next()) {
	    
		Set id = rs.Data("ID")
		Set pos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(id)
	
		if (pos.Artikelcode = ##class(DBAgrofreshEK.Konst).AcRabattZwischentotal()) {
			Set zwischenRabatt = pos.RabattProzent
			Set letzteZeileRabatt = 1
			
		} elseif (pos.Artikelcode = ##class(DBAgrofreshEK.Konst).AcRabattGesamttotal()) {
			Set gesamtRabatt = pos.RabattProzent
			//Set letzteZeileRabatt = 1
			
		} elseif (pos.Artikelcode = ##class(DBAgrofreshEK.Konst).AcZwischentotalVorRabatt()) {
			
			
		} elseif (pos.Artikelcode = ##class(DBAgrofreshEK.Konst).AcZwischentotal()) {
			if (letzteZeileRabatt = 0) {
				Set zwischenRabatt = 0
			} else {
				Set letzteZeileRabatt = 0
			}
		} elseif (pos.Artikelcode = ##class(DBAgrofreshEK.Konst).AcGesamttotal()) {
			Set gesamtRabatt = 0
			
		} else {
			set mandOid = pos.Bestellungskopf.Mandant
			Set pos.Artikelrabatt1InProzent = zwischenRabatt
			Set pos.Artikelrabatt2InProzent = gesamtRabatt
			
			Set pos.Artikelrabatt1ExklMwstEW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabatt(mandOid, pos.BetragExklMwst,pos.Artikelrabatt1InProzent)
			Set pos.Artikelrabatt1InklMwstEW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabatt(mandOid, pos.BetragInklMwst,pos.Artikelrabatt1InProzent)
			
			Set pos.Artikelrabatt2ExklMwstEW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabatt(mandOid, pos.Nettobetrag1ExklMwstEW,pos.Artikelrabatt2InProzent)
			Set pos.Artikelrabatt2InklMwstEW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabatt(mandOid, pos.Nettobetrag1InklMwstEW,pos.Artikelrabatt2InProzent)
			
			Set pos.Artikelrabatt1ExklMwstFW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabattFW(pos.BetragExklMwstFW,pos.Artikelrabatt1InProzent)
			Set pos.Artikelrabatt1InklMwstFW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabattFW(pos.BetragInklMwstFW,pos.Artikelrabatt1InProzent)
			
			Set pos.Artikelrabatt2ExklMwstFW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabattFW(pos.Nettobetrag1ExklMwstFW,pos.Artikelrabatt2InProzent)
			Set pos.Artikelrabatt2InklMwstFW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabattFW(pos.Nettobetrag1InklMwstFW,pos.Artikelrabatt2InProzent)
			
			Set status = pos.%Save()
			if ($$$ISERR(status)) {
				w "DBAgrofreshEK.Bestellungspos.RecalcRabattTotal - Fehler bei Rabattberechnung",!
				w status,!
			}
			kill pos
			Set letzteZeileRabatt = 0
		}			
	}

	Set strSQL="SELECT ID FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf="_bestkopfOid_" ORDER BY PositionsNr"
    Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
    Do rs.Prepare(strSQL)
    Set sc=rs.Execute()
    if ($$$ISERR(sc)) {
		w "DBAgrofreshEK.Bestellungspos.RecalcRabattTotal - Fehler bei SQL-Statement",!
	}

    Set zwischenTotalInkl = 0
    Set zwischenTotalExkl = 0
    Set zwischenTotalMwst = 0
    Set gesamtTotalInkl = 0
    Set gesamtTotalExkl = 0
    Set gesamtTotalMwst = 0
    
    Set zwischenTotalInklFW = 0
    Set zwischenTotalExklFW = 0
    Set zwischenTotalMwstFW = 0
    Set gesamtTotalInklFW = 0
    Set gesamtTotalExklFW = 0
    Set gesamtTotalMwstFW = 0
    
    Set zwischenTotalRInkl = 0
    Set zwischenTotalRExkl = 0
    Set zwischenTotalRMwst = 0
    Set gesamtTotalRInkl = 0
    Set gesamtTotalRExkl = 0
    Set gesamtTotalRMwst = 0
    
    Set zwischenTotalRInklFW = 0
    Set zwischenTotalRExklFW = 0
    Set zwischenTotalRMwstFW = 0
    Set gesamtTotalRInklFW = 0
    Set gesamtTotalRExklFW = 0
    Set gesamtTotalRMwstFW = 0
    
    Set letzteZeileTotal = 0
    while (rs.Next()) {
		Set id = rs.Data("ID")
		Set pos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(id)
	
		if (pos.Artikelcode = ##class(DBAgrofreshEK.Konst).AcZwischentotal()) {
			Set letzteZeileTotal = 1
			
			Set pos.BetragExklMwst = zwischenTotalExkl
			Set pos.BetragInklMwst = zwischenTotalInkl
			Set pos.MwstBetrag = zwischenTotalMwst
			
			Set zwischenTotalRExkl = zwischenTotalExkl
		    Set zwischenTotalRInkl = zwischenTotalInkl
		    Set zwischenTotalRMwst = zwischenTotalMwst
    
    		Set zwischenTotalExkl = 0
			Set zwischenTotalInkl = 0
			Set zwischenTotalMwst = 0
			
			Set pos.BetragExklMwstFW = zwischenTotalExklFW
			Set pos.BetragInklMwstFW = zwischenTotalInklFW
			Set pos.MwstBetragFW = zwischenTotalMwstFW
			
			Set zwischenTotalRExklFW = zwischenTotalExklFW
		    Set zwischenTotalRInklFW = zwischenTotalInklFW
		    Set zwischenTotalRMwstFW = zwischenTotalMwstFW
    
    		Set zwischenTotalExklFW = 0
			Set zwischenTotalInklFW = 0
			Set zwischenTotalMwstFW = 0
			
			Set status = pos.%Save()
			if ($$$ISERR(status)) {
				w "DBAgrofreshEK.Bestellungspos.RecalcRabattTotal - Fehler bei Zwischentotal-Berechnung",!
				w status,!
			}
		
		} elseif (pos.Artikelcode = ##class(DBAgrofreshEK.Konst).AcZwischentotalVorRabatt()) {
			Set pos.BetragExklMwst = zwischenTotalExkl
			Set pos.BetragInklMwst = zwischenTotalInkl
			Set pos.MwstBetrag = zwischenTotalMwst
			
			Set pos.BetragExklMwstFW = zwischenTotalExklFW
			Set pos.BetragInklMwstFW = zwischenTotalInklFW
			Set pos.MwstBetragFW = zwischenTotalMwstFW
			
			Set status = pos.%Save()
			if ($$$ISERR(status)) {
				w "DBAgrofreshEK.Bestellungspos.RecalcRabattTotal - Fehler bei ZwischentotalVorRabatt-Berechnung",!
				w status,!
			}
			
		} elseif (pos.Artikelcode = ##class(DBAgrofreshEK.Konst).AcGesamttotal()) {
			Set letzteZeileTotal = 1
			
			Set pos.BetragExklMwst = gesamtTotalExkl
			Set pos.BetragInklMwst = gesamtTotalInkl
			Set pos.MwstBetrag = gesamtTotalMwst
			
			Set gesamtTotalRExkl = gesamtTotalExkl
		    Set gesamtTotalRInkl = gesamtTotalInkl
		    Set gesamtTotalRMwst = gesamtTotalMwst
    
			Set gesamtTotalExkl = 0
			Set gesamtTotalInkl = 0
			Set gesamtTotalMwst = 0
			
			Set pos.BetragExklMwstFW = gesamtTotalExklFW
			Set pos.BetragInklMwstFW = gesamtTotalInklFW
			Set pos.MwstBetragFW = gesamtTotalMwstFW
			
			Set gesamtTotalRExklFW = gesamtTotalExklFW
		    Set gesamtTotalRInklFW = gesamtTotalInklFW
		    Set gesamtTotalRMwstFW = gesamtTotalMwstFW
    
			Set gesamtTotalExklFW = 0
			Set gesamtTotalInklFW = 0
			Set gesamtTotalMwstFW = 0
			
			Set status = pos.%Save()
			if ($$$ISERR(status)) {
				w "DBAgrofreshEK.Bestellungspos.RecalcRabattTotal - Fehler bei Gesamttotal-Berechnung",!
				w status,!
			}
		
		} elseif (pos.Artikelcode = ##class(DBAgrofreshEK.Konst).AcRabattZwischentotal()) {
			if (pos.Bestellungskopf.CodeMwst = 1) {
				if (letzteZeileTotal = 0) {
					Set pos.Preis = zwischenTotalInkl
					Set pos.PreisFW = zwischenTotalInklFW
				} else {
					Set pos.Preis = zwischenTotalRInkl
					Set pos.PreisFW = zwischenTotalRInklFW
				}
			} else {
				if (letzteZeileTotal = 0) {
					Set pos.Preis = zwischenTotalExkl
					Set pos.PreisFW = zwischenTotalExklFW
				} else {
					Set pos.Preis = zwischenTotalRExkl
					Set pos.PreisFW = zwischenTotalRExklFW
				}
			}
			set mandOid = pos.Bestellungskopf.Mandant
			if (letzteZeileTotal = 0) {
				Set pos.MwstBetrag = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabatt(mandOid, (-1)*zwischenTotalMwst,pos.RabattProzent)
				Set pos.MwstBetragFW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabattFW((-1)*zwischenTotalMwstFW,pos.RabattProzent)
				if (pos.Bestellungskopf.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGEXKL()) {
					Set pos.BetragExklMwst = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabatt(mandOid, (-1)*zwischenTotalExkl,pos.RabattProzent)
					Set pos.BetragExklMwstFW =##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabattFW((-1)*zwischenTotalExklFW,pos.RabattProzent)
				} else {
					Set pos.BetragInklMwst = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabatt(mandOid, (-1)*zwischenTotalInkl,pos.RabattProzent)
					Set pos.BetragInklMwstFW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabattFW((-1)*zwischenTotalInklFW,pos.RabattProzent)
				}
			} else {
				Set pos.MwstBetrag =##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabatt(mandOid, (-1)*zwischenTotalRMwst,pos.RabattProzent)
				Set pos.MwstBetragFW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabattFW((-1)*zwischenTotalRMwstFW,pos.RabattProzent)
				if (pos.Bestellungskopf.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGEXKL()) {
					Set pos.BetragExklMwst =##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabatt(mandOid, (-1)*zwischenTotalRExkl,pos.RabattProzent)
					Set pos.BetragExklMwstFW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabattFW((-1)*zwischenTotalRExklFW,pos.RabattProzent)
				} else {
					Set pos.BetragInklMwstFW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabattFW((-1)*zwischenTotalRInklFW,pos.RabattProzent)
					Set pos.BetragInklMwst = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabatt(mandOid, (-1)*zwischenTotalRInkl,pos.RabattProzent)
				}
			}
			
			if (pos.Bestellungskopf.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGEXKL()) {
				Set pos.BetragInklMwst = (pos.BetragExklMwst + pos.MwstBetrag)
				Set pos.BetragInklMwstFW = (pos.BetragExklMwstFW + pos.MwstBetragFW)
			} else {
				Set pos.BetragExklMwst = (pos.BetragInklMwst - pos.MwstBetrag)
				Set pos.BetragExklMwstFW = (pos.BetragInklMwstFW - pos.MwstBetragFW)
			}
			
			Set status = pos.%Save()
			if ($$$ISERR(status)) {
				w "DBAgrofreshEK.Bestellungspos.RecalcRabattTotal - Fehler bei Zwischentotal-Berechnung",!
				w status,!
			}
			Set letzteZeileTotal = 0
			Set zwischenTotalExkl = zwischenTotalExkl + pos.BetragExklMwst
			Set zwischenTotalInkl = zwischenTotalInkl + pos.BetragInklMwst
			Set zwischenTotalMwst = zwischenTotalMwst + pos.MwstBetrag
		
			Set zwischenTotalExklFW = zwischenTotalExklFW + pos.BetragExklMwstFW
			Set zwischenTotalInklFW = zwischenTotalInklFW + pos.BetragInklMwstFW
			Set zwischenTotalMwstFW = zwischenTotalMwstFW + pos.MwstBetragFW
		
			Set gesamtTotalExkl = gesamtTotalExkl + pos.BetragExklMwst
			Set gesamtTotalInkl = gesamtTotalInkl + pos.BetragInklMwst
			Set gesamtTotalMwst = gesamtTotalMwst + pos.MwstBetrag
			
			Set gesamtTotalExklFW = gesamtTotalExklFW + pos.BetragExklMwstFW
			Set gesamtTotalInklFW = gesamtTotalInklFW + pos.BetragInklMwstFW
			Set gesamtTotalMwstFW = gesamtTotalMwstFW + pos.MwstBetragFW
			
		} elseif (pos.Artikelcode = ##class(DBAgrofreshEK.Konst).AcRabattGesamttotal()) {
			if (pos.Bestellungskopf.CodeMwst = 1) {
				if (letzteZeileTotal = 0) {
					Set pos.Preis = gesamtTotalInkl
					Set pos.PreisFW = gesamtTotalInklFW
				} else {
					Set pos.Preis = gesamtTotalRInkl
					Set pos.PreisFW = gesamtTotalRInklFW
				}
			} else {
				if (letzteZeileTotal = 0) {
					Set pos.Preis = gesamtTotalExkl
					Set pos.PreisFW = gesamtTotalExklFW
				} else {
					Set pos.Preis = gesamtTotalRExkl
					Set pos.PreisFW = gesamtTotalRExklFW
				}
			}
			set mandOid = pos.Bestellungskopf.Mandant
			if (letzteZeileTotal = 0) {
				Set pos.MwstBetrag = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabatt(mandOid, gesamtTotalMwst,pos.RabattProzent)
				Set pos.MwstBetragFW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabattFW(gesamtTotalMwstFW,pos.RabattProzent)
				if (pos.Bestellungskopf.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGEXKL()) {
					Set pos.BetragExklMwst = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabatt(mandOid, gesamtTotalExkl,pos.RabattProzent)
					Set pos.BetragExklMwstFW =##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabattFW(gesamtTotalExklFW,pos.RabattProzent)
				} else {
					Set pos.BetragInklMwstFW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabattFW(gesamtTotalInklFW,pos.RabattProzent)
					Set pos.BetragInklMwst =##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabatt(mandOid, gesamtTotalInkl,pos.RabattProzent)
				}
			} else {
				Set pos.MwstBetrag =##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabatt(mandOid, gesamtTotalRMwst,pos.RabattProzent)
				Set pos.MwstBetragFW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabattFW(gesamtTotalRMwstFW,pos.RabattProzent)
				if (pos.Bestellungskopf.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGEXKL()) {
					Set pos.BetragExklMwst = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabatt(mandOid, gesamtTotalRExkl,pos.RabattProzent)
					Set pos.BetragExklMwstFW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabattFW(gesamtTotalRExklFW,pos.RabattProzent)
				} else {
					Set pos.BetragInklMwst = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabatt(mandOid, gesamtTotalRInkl,pos.RabattProzent)
					Set pos.BetragInklMwstFW = ##class(DBAgrofreshEK.Bestellungspos).CalcArtikelrabattFW(gesamtTotalRInklFW,pos.RabattProzent)
				}
			}
			
			if (pos.Bestellungskopf.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGEXKL()) {
				Set pos.BetragInklMwst = (pos.BetragExklMwst + pos.MwstBetrag)
				Set pos.BetragInklMwstFW = (pos.BetragExklMwstFW + pos.MwstBetragFW)
			} else {
				Set pos.BetragExklMwst = (pos.BetragInklMwst - pos.MwstBetrag)
				Set pos.BetragExklMwstFW = (pos.BetragInklMwstFW - pos.MwstBetragFW)
			}
			
			Set status = pos.%Save()
			if ($$$ISERR(status)) {
				w "DBAgrofreshEK.Bestellungspos.RecalcRabattTotal - Fehler bei Gesamttotal-Berechnung",!
				w status,!
			}
			Set letzteZeileTotal = 0
			
			Set gesamtTotalExkl = gesamtTotalExkl - pos.BetragExklMwst
			Set gesamtTotalInkl = gesamtTotalInkl - pos.BetragInklMwst
			Set gesamtTotalMwst = gesamtTotalMwst - pos.MwstBetrag
			
			Set gesamtTotalExklFW = gesamtTotalExklFW - pos.BetragExklMwstFW
			Set gesamtTotalInklFW = gesamtTotalInklFW - pos.BetragInklMwstFW
			Set gesamtTotalMwstFW = gesamtTotalMwstFW - pos.MwstBetragFW
			
		} else {
			Set letzteZeileTotal = 0
			Set zwischenTotalExkl = zwischenTotalExkl + pos.BetragExklMwst
			Set zwischenTotalInkl = zwischenTotalInkl + pos.BetragInklMwst
			Set zwischenTotalMwst = zwischenTotalMwst + pos.MwstBetrag
		
			Set zwischenTotalExklFW = zwischenTotalExklFW + pos.BetragExklMwstFW
			Set zwischenTotalInklFW = zwischenTotalInklFW + pos.BetragInklMwstFW
			Set zwischenTotalMwstFW = zwischenTotalMwstFW + pos.MwstBetragFW
		
			Set gesamtTotalExkl = gesamtTotalExkl + pos.BetragExklMwst
			Set gesamtTotalInkl = gesamtTotalInkl + pos.BetragInklMwst
			Set gesamtTotalMwst = gesamtTotalMwst + pos.MwstBetrag
			
			Set gesamtTotalExklFW = gesamtTotalExklFW + pos.BetragExklMwstFW
			Set gesamtTotalInklFW = gesamtTotalInklFW + pos.BetragInklMwstFW
			Set gesamtTotalMwstFW = gesamtTotalMwstFW + pos.MwstBetragFW
		}
		kill pos	
	}

	Quit status
]]></Implementation>
</Method>

<Method name="CalcArtikelrabatt">
<ClassMethod>1</ClassMethod>
<FormalSpec>mandOid:%String,betrag:%Decimal(SCALE=5),prozentsatz:%Decimal(SCALE=5)</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	Set r = 0
	Set r = ##class(DBUtils.NumberUtils).RoundGemEinst(mandOid, betrag / 100 * prozentsatz)
	Quit r
]]></Implementation>
</Method>

<Method name="CalcArtikelrabattFW">
<ClassMethod>1</ClassMethod>
<FormalSpec>betrag:%Decimal(SCALE=5),prozentsatz:%Decimal(SCALE=5)</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	Set r = 0
	Set r = ##class(DBUtils.NumberUtils).Round(betrag / 100 * prozentsatz, 2)
	Quit r
]]></Implementation>
</Method>

<Method name="UpdateLieferdatumByBestellung">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String,NewDatum:%Date</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	Set sqlDate = $ZDate(NewDatum,3)
	Set strSQL="UPDATE DBAgrofreshEK.Bestellungspos (Lieferdatum) VALUES ({d '"_sqlDate_"'}) WHERE  Bestellungskopf ='"_BestOid_"'"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	
	Set strSQL="UPDATE DBAgrofreshEK.GebDetail (Datum) VALUES ({d '"_sqlDate_"'}) WHERE  Bestellung ='"_BestOid_"'"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	
	Quit $$$ISOK(sc)
]]></Implementation>
</Method>

<Method name="SetTeillieferposAsPrinted">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String,TeillieferNr:%Integer,NewDatum:%Date,Lieferzeit:%Decimal</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	Set sqlDate = $ZDate(NewDatum,3)
	Set strSQL="UPDATE DBAgrofreshEK.Bestellungspos (Lieferdatum, Annahmezeit, BearbeitungsstatusTAS) VALUES ({d '"_sqlDate_"'}, "_Lieferzeit_", DBAgrofreshEK.Konst_BearbeitungsstatusGedruckt()) WHERE  Bestellungskopf ='"_BestOid_"' AND NVL(TeillieferNr,0) ="_TeillieferNr
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	
	Quit $$$ISOK(sc)
]]></Implementation>
</Method>

<Method name="ChangeLagerort">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String</FormalSpec>
<Implementation><![CDATA[
	Set ^BestDetStopTrg(BestOid) = 1
	&sql(Update DBAgrofreshEK.Bestellungspos Set Lagerort=Bestellungskopf->Lagerort WHERE Bestellungskopf->ID = :BestOid)
	k ^BestDetStopTrg(BestOid)
]]></Implementation>
</Method>

<Method name="AbrechnungHasDetails">
<ClassMethod>1</ClassMethod>
<FormalSpec>ArNr:%Integer</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set id = ""
	Set strSQL="SELECT TOP 1 ID FROM DBAgrofreshEK.Bestellungspos WHERE  Bestellungskopf->AbrechnungsNr='"_ArNr_"'"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	IF $$$ISOK(sc) {
		While rs.Next(.sc) {
			Set id=rs.Data("ID")
		}
	}
	Quit id '= ""
]]></Implementation>
</Method>

<Method name="SetSSCC">
<ClassMethod>1</ClassMethod>
<FormalSpec>bestkopfOid:%String,gcp:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	w "Beginn SetSSCC",!
	set status = $$$OK
	
	Set strSQL="SELECT ID FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf="_bestkopfOid_" ORDER BY PositionsNr DESC"
    Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
    Do rs.Prepare(strSQL)
    Set sc=rs.Execute()
    if ($$$ISERR(sc)) {
		w "DBAgrofreshEK.Bestellungspos.SetSSCC - Fehler bei SQL-Statement",!
		w sc,!
	}

    while (rs.Next()) {
		Set id = rs.Data("ID")
		Set pos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(id)
		set ssccGen = ##class(DBDebiKredi.Konst).SSCCGenJePalette()
		
		if ((pos '= $$$NULLOREF) && (pos.Bestellungskopf.Abnehmner '= $$$NULLOREF)) {
			set ssccGen = pos.Bestellungskopf.Abnehmner.SSCCGenerierung		
		}
		
		set altAnzahl = 0
		
		Set strSQL="SELECT SUM(SSCCInfo_AnzahlGebinde) AS Anzahl FROM DBAgrofreshEK.Bestellungspos_SSCCInfo WHERE Bestellungspos ='"_id_"'"
    	Set rs2 = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
    	Do rs2.Prepare(strSQL)
    	Set sc2=rs2.Execute()
    	if ($$$ISERR(sc2)) {
	    	w "DBAgrofreshEK.Bestellungspos.SetSSCC - Fehler bei SQL-Statement für Anzahl",!
			w "Statement: "_strSQL,!
			w sc2,!
		}
		if (rs2.Next()) {
			Set altAnzahl = rs2.Data("Anzahl")
		}
				
		if ((pos.AnzahlGebinde '= altAnzahl) && (pos.AnzahlGebinde '= 0)) {
			
			do pos.SSCCInfo.Clear()
			
			set anzahlJePal = pos.Gebinde.AnzahlJePalette
			set anzahlGeb = pos.AnzahlGebinde
			
			for {
				if ($GET(^SSCCPartNumber) = "") {
					SET ^SSCCPartNumber = 0	
				}
				if ((($L(gcp) = 9) && (^SSCCPartNumber > 9999900)) || (($L(gcp) = 11) && (^SSCCPartNumber > 99900))) {
					SET ^SSCCPartNumber = 1
					SET result = 1
				} else {
					SET result=$INCREMENT(^SSCCPartNumber)
				}
				set info = ##class(DBAgrofreshEK.SSCCInfo).%New()
				
				//je Palette
				if (ssccGen = ##class(DBDebiKredi.Konst).SSCCGenJePalette()) {
					if (anzahlJePal = 0) {
						set info.AnzahlGebinde = anzahlGeb
						set anzahlGeb = 0
					} elseif (anzahlGeb > anzahlJePal) {
						set info.AnzahlGebinde = anzahlJePal
						set anzahlGeb = anzahlGeb - anzahlJePal
					} else {
						set info.AnzahlGebinde = anzahlGeb
						set anzahlGeb = 0
					}
				// je Position
				} else {
					set info.AnzahlGebinde = anzahlGeb
					set anzahlGeb = 0
				}
				set info.SSCCPart = result
				set info.SSCC = ##class(DBUtils.NumberUtils).GenerateSSCC(gcp, result)
				do pos.SSCCInfo.Insert(info)
				QUIT:anzahlGeb=0
			}
			Set status = pos.%Save()	
			w status,!
			if ($$$ISERR(status)) {
				w "DBAgrofreshEK.Bestellungspos.SetSSCC - Fehler bei Speichern des SSCC",!
			}
			
		} else {
			w "Keine SSCC erstellt, da Anzahl aktuell",!
		}
    }
    
	w "End SetSSCC",!
    quit status
]]></Implementation>
</Method>

<Method name="RecalcMwst">
<ClassMethod>1</ClassMethod>
<FormalSpec>bestellungskopfOid:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	//w "Start RecalcMwst BestellungsOid "_bestellungskopfOid,!
	
	//Letze Korrektur zurücksetzen
	Set strSQL="SELECT ID From DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf="_bestellungskopfOid_" and KorrekturMwst is not null and KorrekturMwst <> 0"
    Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
    Do rs.Prepare(strSQL)
    Set sc=rs.Execute()
    if ($$$ISERR(sc)) {
		w "DBAgrofreshEK.Bestellungspos.RecalcMwst - Fehler bei SQL-Statement für Reset",!
	}
	set bestellung = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(bestellungskopfOid)
	set mandant = bestellung.Mandant
	While (rs.Next()) {
		 Set posOid = rs.Data("ID")
		 set pos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(posOid)
		  if (pos '= "") {
			
			//w "Reset Pos "_posOid,!
			Set pos.MwstBetrag = pos.MwstBetrag - pos.KorrekturMwst
			if (pos.Bestellungskopf.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGEXKL()) {
				Set pos.BetragInklMwst = (pos.BetragInklMwst - pos.KorrekturMwst)
			} elseif ((pos.Bestellungskopf.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGINKL()) ||
			(pos.Bestellungskopf.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGURPROD())) {
				Set pos.BetragExklMwst = (pos.BetragExklMwst + pos.KorrekturMwst)
			}
			Set pos.KorrekturMwst = 0
			set mandant = pos.Bestellungskopf.Mandant
			DO pos.%Save()
		 }	
	}
	set status = $$$OK
	
	Set strSQL="SELECT ID From DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf="_bestellungskopfOid_" AND BetragExklMwst <> 0"
    Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
    Do rs.Prepare(strSQL)
    Set sc=rs.Execute()
    if ($$$ISERR(sc)) {
		w "DBAgrofreshEK.Bestellungspos.RecalcMwst - Fehler bei SQL-Statement für RecalDet",!
	}
	While (rs.Next()) {
		 Set posOid = rs.Data("ID")
		 set pos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(posOid)
		 if (pos '= "" && pos.Mwst '= "") {
			if (pos.Bestellungskopf.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGEXKL()) {
				if (pos.BetragExklMwst '= (pos.BetragInklMwst-pos.MwstBetrag)) {
					//w "Pos "_posOid_" stimmt nicht Exkl = Inkl-Mwst",!
					//w "Old MwstBetrag: "_pos.MwstBetrag
					Set pos.MwstBetrag = ##class(DBUtils.NumberUtils).RoundGemEinst(pos.Bestellungskopf.Mandant,  pos.BetragExklMwst*pos.MwstSatz/100)
					//w " New MwstBetrag: "_pos.MwstBetrag,!
					//w "Old InklBetrag: "_pos.BetragInklMwst
					Set pos.BetragInklMwst = pos.BetragExklMwst+pos.MwstBetrag
					//w " New InklBetrag: "_pos.BetragInklMwst,!
					DO pos.%Save()
				}
			} elseif ((pos.Bestellungskopf.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGINKL()) ||
					(pos.Bestellungskopf.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGURPROD())) {
				if (pos.BetragInklMwst '= (pos.BetragExklMwst+pos.MwstBetrag)) {
					//w "Pos "_posOid_" stimmt nicht Inkl = Exkl+Mwst",!
					//w "Old BetragExklMwst: "_pos.BetragExklMwst
					Set pos.BetragExklMwst = ##class(DBUtils.NumberUtils).RoundGemEinst(pos.Bestellungskopf.Mandant,  pos.BetragInklMwst/(1+pos.MwstSatz/100))
					//w " New BetragExklMwst: "_pos.BetragExklMwst,!
					//w "Old MwstBetrag: "_pos.MwstBetrag
					Set pos.MwstBetrag = pos.BetragInklMwst-pos.BetragExklMwst
					//w " New MwstBetrag: "_pos.MwstBetrag,!
					DO pos.%Save()
				}
			}
		 }		
	}
	
	set abzugBisGr = ##class(DBCore.MandantEinstellung).GetIntEinst(mandant, ##class(DBCore.Konst).AGROFRESHABZUGBISAGR())

	Set rset = ##class(%ResultSet).%New("DBAgrofreshEK.AF.BestellungsKopfAF.ListeMwstByCodesForRecalc")
	Do rset.Execute(bestellungskopfOid, mandant, abzugBisGr)
	While (rset.Next()) {
	   Set mwstOid = rset.Data("Mwst")
	   Set myMwstBetrag = rset.Data("MwstBetrag")
	   //w "MwstBetrag "_myMwstBetrag,!
	   Set mwstSatz = rset.Data("MwstSatz")
	   Set calcMwstBetrag = 0
	   Set mwstCode = rset.Data("MwstCode")
	   if ((mwstSatz '= 0) || (mwstSatz '= "") || (mwstSatz '= $c(0))) {
			//w "-------------------------------------------------",!
			//w "MwstCode: "_mwstCode_" berechnung OID "_mwstOid,!
			Set calcMwstBetrag = rset.Data("MwstBetragCalc")
			//w "Abweichung von Beträgen "_calcMwstBetrag_" zu "_myMwstBetrag,!
	   
			if (calcMwstBetrag '= myMwstBetrag) {
			   set korrBetrag = calcMwstBetrag - myMwstBetrag

			   Set strSQL="SELECT TOP 1 ID FROM DBAgrofreshEK.Bestellungspos WHERE Bestellungskopf="_bestellungskopfOid_" and Mwst->ID="_mwstOid_" ORDER BY ABS(BetragExklMwst) DESC"
			   Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
			   Do rs.Prepare(strSQL)
			   Set sc=rs.Execute()
			   if ($$$ISERR(sc)) {
				w "DBAgrofreshEK.Bestellungspos.RecalcMwst - Fehler bei SQL-Statement von grösstem Betrag wählen",!
			   }
			   if (rs.Next()) {
				   Set oidPos = rs.Data("ID")
				   set korrPos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(oidPos)
					if (korrPos '= "") {
						//w "MwstBetrag vor Change "_korrPos.MwstBetrag_" Korrbetrag "_korrPos.KorrekturMwst,!
						Set korrPos.MwstBetrag = (korrPos.MwstBetrag + korrBetrag)
						if (pos.Bestellungskopf.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGEXKL()) {
					   		Set korrPos.BetragInklMwst = (korrPos.BetragInklMwst + korrBetrag)
						} elseif ((pos.Bestellungskopf.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGINKL()) ||
							(pos.Bestellungskopf.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGURPROD())) {
							Set korrPos.BetragExklMwst = (korrPos.BetragExklMwst - korrBetrag)
						}
					   	Set korrPos.KorrekturMwst =  korrBetrag
					   	Set status = korrPos.%Save()
					   	//w "Korrigiere "_oidPos_" um "_korrBetrag_" auf MwstBetrag "_korrPos.MwstBetrag,!
					   	//w "Betrag Exkl "_korrPos.BetragExklMwst_" Betrag Inkl "_korrPos.BetragInklMwst,!
				   }
			   }
			   
		   }
		   
		   //w "-------------------------------------------------",!
	   }
	}
	
	Quit status
]]></Implementation>
</Method>

<Method name="ResetStopTriger">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String</FormalSpec>
<Implementation><![CDATA[	Kill ^BestDetStopTrg(BestOid)
]]></Implementation>
</Method>

<Method name="SetAufDetStopTrg">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String,stopp:%Boolean</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	if (stopp) {
		set ^BestDetStopTrg(BestOid) = stopp
	} else {
		kill ^BestDetStopTrg(BestOid)
	}
	Quit 1
]]></Implementation>
</Method>

<Method name="GetNextBestelllistenNummer">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set nr = 0
	// Neue Nummer auslessen
	SET nr=$INCREMENT(^FormularNr(MandantOid, ##class(DBCore.FormularNr).FormNrAgrofreshEKBestelliste()))
	Quit nr
]]></Implementation>
</Method>

<Method name="UpdateBestelllistenNummer">
<ClassMethod>1</ClassMethod>
<FormalSpec>ArtGrpVon:%Integer,ArtGrpBis:%Integer,ArtikelVon:%String,ArtikelBis:%String,VonAdr:%Integer,BisAdr:%Integer,VonDatum:%Date,BisDatum:%Date,Mandant:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	Set sqlDateVon = $ZDate(VonDatum,3)
	Set sqlDateBis = $ZDate(BisDatum,3)
	set ListenNr = ##class(DBAgrofreshEK.Bestellungspos).GetNextBestelllistenNummer(Mandant)
	&SQL(UPDATE	DBAgrofreshEK.Bestellungspos Set BestelllistenNr = :ListenNr
	WHERE Bestellungskopf->Mandant = :Mandant 	 
  		AND (Artikel->ArtikelNr BETWEEN :ArtikelVon AND :ArtikelBis OR NVL(:ArtikelVon, '') = '')
		AND (Artikel->Artikelgruppe->ArtikelgruppenNr BETWEEN :ArtGrpVon AND :ArtGrpBis OR NVL(:ArtGrpVon,0) = 0)
		AND (Bestellungskopf->Adresse->Adresse->Adressnummer BETWEEN :VonAdr AND :BisAdr)
		AND (Bestellungskopf->Annahmedatum BETWEEN {d :sqlDateVon} AND {d :sqlDateBis})
		AND NVL(BestelllistenNr,0) = 0)
	
	Quit (SQLCODE = 0)
]]></Implementation>
</Method>

<Method name="GetLetzterEP">
<ClassMethod>1</ClassMethod>
<FormalSpec>ArtikelOid:%String,AdressOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<Implementation><![CDATA[
	set preis = 0
	&sql(SELECT TOP 1 Preis Into :preis FROM DBAgrofreshEK.Bestellungspos WHERE  Bestellungskopf->Adresse->Adresse =:AdressOid AND Artikel = :ArtikelOid ORDER BY Lieferdatum DESC)
	Quit:(SQLCODE'=0) 0
	Quit +preis
]]></Implementation>
</Method>

<Method name="GetOidByChargenId">
<ClassMethod>1</ClassMethod>
<FormalSpec>charge:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 id into :id FROM DBAgrofreshEK.Bestellungspos WHERE Charge=:charge)
	Quit:(SQLCODE'=0) ""
	quit id
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.BestellungsposD</DataLocation>
<DefaultData>BestellungsposDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.BestellungsposD</IdLocation>
<IndexLocation>^DBAgrofreshEK.BestellungsposI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.BestellungsposS</StreamLocation>
<Data name="BestellungsposDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>PositionsNr</Value>
</Value>
<Value name="3">
<Value>Lieferdatum</Value>
</Value>
<Value name="4">
<Value>Abrechnungsdatum</Value>
</Value>
<Value name="5">
<Value>Lagerstatus</Value>
</Value>
<Value name="6">
<Value>BestellNr</Value>
</Value>
<Value name="7">
<Value>DetailText</Value>
</Value>
<Value name="8">
<Value>AnzahlGebinde</Value>
</Value>
<Value name="9">
<Value>AnzahlGedruckteGebinde</Value>
</Value>
<Value name="10">
<Value>AnzahlJeGebinde</Value>
</Value>
<Value name="11">
<Value>AnzahlHauptGebinde</Value>
</Value>
<Value name="12">
<Value>Menge</Value>
</Value>
<Value name="13">
<Value>BestellteMenge</Value>
</Value>
<Value name="14">
<Value>Preis</Value>
</Value>
<Value name="15">
<Value>PreisFW</Value>
</Value>
<Value name="16">
<Value>RabattProzent</Value>
</Value>
<Value name="17">
<Value>RabattBetrag</Value>
</Value>
<Value name="18">
<Value>MwstSatz</Value>
</Value>
<Value name="19">
<Value>MwstSatzExport</Value>
</Value>
<Value name="20">
<Value>MwstBetrag</Value>
</Value>
<Value name="21">
<Value>BetragExklMwst</Value>
</Value>
<Value name="22">
<Value>BetragInklMwst</Value>
</Value>
<Value name="23">
<Value>BetragFW</Value>
</Value>
<Value name="24">
<Value>Warenaufwand</Value>
</Value>
<Value name="25">
<Value>GewichtNetto</Value>
</Value>
<Value name="26">
<Value>ParzellenNr</Value>
</Value>
<Value name="27">
<Value>Ruestdatum</Value>
</Value>
<Value name="28">
<Value>GewichtTara</Value>
</Value>
<Value name="29">
<Value>GewichtBrutto</Value>
</Value>
<Value name="30">
<Value>ZusatztextID</Value>
</Value>
<Value name="31">
<Value>GrammJeEinheit</Value>
</Value>
<Value name="32">
<Value>GrammJeLaufmeter</Value>
</Value>
<Value name="33">
<Value>Artikel</Value>
</Value>
<Value name="34">
<Value>Herkunft</Value>
</Value>
<Value name="35">
<Value>Gebinde</Value>
</Value>
<Value name="36">
<Value>Qualitaet</Value>
</Value>
<Value name="37">
<Value>Produktionsart</Value>
</Value>
<Value name="38">
<Value>Lagerort</Value>
</Value>
<Value name="39">
<Value>Mengeneinheit</Value>
</Value>
<Value name="40">
<Value>Mwst</Value>
</Value>
<Value name="41">
<Value>Artikelcode</Value>
</Value>
<Value name="42">
<Value>Lieferant</Value>
</Value>
<Value name="43">
<Value>Abzugstyp</Value>
</Value>
<Value name="44">
<Value>SpezPreis</Value>
</Value>
<Value name="45">
<Value>Charge</Value>
</Value>
<Value name="46">
<Value>Abteilung</Value>
</Value>
<Value name="47">
<Value>SachbearbeiterNr</Value>
</Value>
<Value name="48">
<Value>SachbearbeiterBenutzername</Value>
</Value>
<Value name="49">
<Value>SachbearbeiterVorname</Value>
</Value>
<Value name="50">
<Value>SachbearbeiterName</Value>
</Value>
<Value name="51">
<Value>Lagerbewegung</Value>
</Value>
<Value name="52">
<Value>BetragInklMwstFW</Value>
</Value>
<Value name="53">
<Value>MwstBetragFW</Value>
</Value>
<Value name="54">
<Value>BetragExklMwstFW</Value>
</Value>
<Value name="55">
<Value>RabattBetragFW</Value>
</Value>
<Value name="56">
<Value>Artikelrabatt1ExklMwstEW</Value>
</Value>
<Value name="57">
<Value>Artikelrabatt1InklMwstEW</Value>
</Value>
<Value name="58">
<Value>Artikelrabatt1InProzent</Value>
</Value>
<Value name="59">
<Value>Artikelrabatt2ExklMwstEW</Value>
</Value>
<Value name="60">
<Value>Artikelrabatt2InklMwstEW</Value>
</Value>
<Value name="61">
<Value>Artikelrabatt2InProzent</Value>
</Value>
<Value name="62">
<Value>Artikelrabatt1ExklMwstFW</Value>
</Value>
<Value name="63">
<Value>Artikelrabatt1InklMwstFW</Value>
</Value>
<Value name="64">
<Value>Artikelrabatt2ExklMwstFW</Value>
</Value>
<Value name="65">
<Value>Artikelrabatt2InklMwstFW</Value>
</Value>
<Value name="66">
<Value>SSCCPart</Value>
</Value>
<Value name="67">
<Value>KorrekturMwst</Value>
</Value>
<Value name="68">
<Value>AbzugID</Value>
</Value>
<Value name="69">
<Value>Erstbestellmenge</Value>
</Value>
<Value name="70">
<Value>Parzelle</Value>
</Value>
<Value name="71">
<Value>BestellteGebinde</Value>
</Value>
<Value name="72">
<Value>BestellteMenge2</Value>
</Value>
<Value name="73">
<Value>BestelllistenNr</Value>
</Value>
<Value name="74">
<Value>Nebenkosten</Value>
</Value>
<Value name="75">
<Value>IsFromKalibrierung</Value>
</Value>
<Value name="76">
<Value>Haendlingskosten</Value>
</Value>
<Value name="77">
<Value>GetrAnnahme</Value>
</Value>
<Value name="78">
<Value>VerlustProzent</Value>
</Value>
<Value name="79">
<Value>BedarfMenge</Value>
</Value>
<Value name="80">
<Value>BedarfAnzGebinde</Value>
</Value>
<Value name="81">
<Value>TeillierNr</Value>
</Value>
<Value name="82">
<Value>TeillieferNr</Value>
</Value>
<Value name="83">
<Value>Annahmezeit</Value>
</Value>
<Value name="84">
<Value>BearbeitungsstatusTAS</Value>
</Value>
</Data>
<Data name="SSCCInfo">
<Attribute>SSCCInfo</Attribute>
<Structure>subnode</Structure>
<Subscript>"SSCCInfo"</Subscript>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Abrechnungsdatum"/>
<Property name="Abteilung"/>
<Property name="AbzugID">
</Property>
<Property name="Abzugstyp">
</Property>
<Property name="Annahmezeit">
</Property>
<Property name="AnzahlGebinde">
</Property>
<Property name="AnzahlGedruckteGebinde">
</Property>
<Property name="AnzahlHauptGebinde">
</Property>
<Property name="AnzahlJeGebinde">
</Property>
<Property name="Artikel">
</Property>
<Property name="Artikelcode">
</Property>
<Property name="Artikelrabatt1ExklMwstEW">
</Property>
<Property name="Artikelrabatt1ExklMwstFW">
</Property>
<Property name="Artikelrabatt1InProzent">
</Property>
<Property name="Artikelrabatt1InklMwstEW">
</Property>
<Property name="Artikelrabatt1InklMwstFW">
</Property>
<Property name="Artikelrabatt1MwstbetragEW">
</Property>
<Property name="Artikelrabatt1MwstbetragFW">
</Property>
<Property name="Artikelrabatt2ExklMwstEW">
</Property>
<Property name="Artikelrabatt2ExklMwstFW">
</Property>
<Property name="Artikelrabatt2InProzent">
</Property>
<Property name="Artikelrabatt2InklMwstEW">
</Property>
<Property name="Artikelrabatt2InklMwstFW">
</Property>
<Property name="Artikelrabatt2MwstbetragEW">
</Property>
<Property name="Artikelrabatt2MwstbetragFW">
</Property>
<Property name="BearbeitungsstatusTAS">
</Property>
<Property name="BedarfAnzGebinde">
</Property>
<Property name="BedarfMenge">
</Property>
<Property name="BestellNr">
</Property>
<Property name="BestelllistenNr">
</Property>
<Property name="BestellteGebinde">
</Property>
<Property name="BestellteMenge">
</Property>
<Property name="Bestellungskopf">
</Property>
<Property name="BetragExklMwst">
</Property>
<Property name="BetragExklMwstFW">
</Property>
<Property name="BetragFW"/>
<Property name="BetragInklMwst">
</Property>
<Property name="BetragInklMwstFW">
</Property>
<Property name="Charge">
</Property>
<Property name="DetailText">
</Property>
<Property name="Erstbestellmenge">
</Property>
<Property name="Gebinde">
</Property>
<Property name="GetrAnnahme">
</Property>
<Property name="GewichtBrutto">
</Property>
<Property name="GewichtNetto">
</Property>
<Property name="GewichtTara">
</Property>
<Property name="GrammJeEinheit">
</Property>
<Property name="GrammJeLaufmeter">
</Property>
<Property name="Haendlingskosten">
</Property>
<Property name="Herkunft">
</Property>
<Property name="IsFromKalibrierung">
</Property>
<Property name="IsFromNachbestellung">
</Property>
<Property name="KorrekturMwst">
</Property>
<Property name="Lagerort">
</Property>
<Property name="Lagerstatus">
</Property>
<Property name="Lieferant">
</Property>
<Property name="Lieferdatum">
</Property>
<Property name="Menge">
</Property>
<Property name="Mengeneinheit">
</Property>
<Property name="Mwst">
</Property>
<Property name="MwstBetrag">
</Property>
<Property name="MwstBetragFW">
</Property>
<Property name="MwstSatz">
</Property>
<Property name="MwstSatzExport">
</Property>
<Property name="Nebenkosten">
</Property>
<Property name="Nettobetrag1ExklMwstEW">
</Property>
<Property name="Nettobetrag1ExklMwstFW">
</Property>
<Property name="Nettobetrag1InklMwstEW">
</Property>
<Property name="Nettobetrag1InklMwstFW">
</Property>
<Property name="Nettobetrag1MwstbetragEW">
</Property>
<Property name="Nettobetrag1MwstbetragFW">
</Property>
<Property name="Nettobetrag2ExklMwstEW">
</Property>
<Property name="Nettobetrag2ExklMwstFW">
</Property>
<Property name="Nettobetrag2InklMwstEW">
</Property>
<Property name="Nettobetrag2InklMwstFW">
</Property>
<Property name="Nettobetrag2MwstbetragEW">
</Property>
<Property name="Nettobetrag2MwstbetragFW">
</Property>
<Property name="Parzelle">
</Property>
<Property name="ParzellenNr">
</Property>
<Property name="PositionsNr">
</Property>
<Property name="Preis">
</Property>
<Property name="PreisFW">
</Property>
<Property name="Produktionsart">
</Property>
<Property name="Qualitaet">
</Property>
<Property name="RabattBetrag">
</Property>
<Property name="RabattBetragFW">
</Property>
<Property name="RabattProzent">
</Property>
<Property name="Ruestdatum"/>
<Property name="SSCCPart"/>
<Property name="SachbearbeiterBenutzername"/>
<Property name="SachbearbeiterName"/>
<Property name="SachbearbeiterNr"/>
<Property name="SachbearbeiterVorname"/>
<Property name="SpezPreis">
</Property>
<Property name="TeillieferNr">
</Property>
<Property name="VerlustProzent">
</Property>
<Property name="Warenaufwand">
</Property>
<Property name="ZusatztextID">
</Property>
<Property name="childsub">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.CSVStream">
<Super>%Persistent</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61921,49755.857425</TimeCreated>

<Property name="DataStream">
<Type>%GlobalBinaryStream</Type>
</Property>

<Property name="BestKopf">
<Type>DBAgrofreshEK.BestellungsKopf</Type>
<Cardinality>many</Cardinality>
<Inverse>WebEdiCsv</Inverse>
<Relationship>1</Relationship>
</Property>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.CSVStreamD</DataLocation>
<DefaultData>CSVStreamDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.CSVStreamD</IdLocation>
<IndexLocation>^DBAgrofreshEK.CSVStreamI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.CSVStreamS</StreamLocation>
<Data name="CSVStreamDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>DataStream</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="DataStream">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.ChargenAusgang">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62416,57210.597027</TimeChanged>
<TimeCreated>61445,38043.931192</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="PositionsNr">
<Type>%Integer</Type>
</Property>

<Property name="Kunde">
<Type>DBDebiKredi.Debitor</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenAusgangKunde</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Kunde"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="KundeIndex">
<Properties>Kunde</Properties>
</Index>

<Property name="AusgangsDatum">
<Type>%Date</Type>
</Property>

<Property name="Belegnummer">
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Belegtext">
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="ZeitAbgang">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Artikel">
<Type>DBAgrofresh.Artikel</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenAusgangArtikel</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Artikel"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ArtikelIndex">
<Properties>Artikel</Properties>
</Index>

<Property name="Herkunft">
<Type>DBAgrofresh.SD.Herkunft</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenAusgangHerkunft</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Herkunft"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="HerkunftIndex">
<Properties>Herkunft</Properties>
</Index>

<Property name="TageVerfall">
<Type>%Integer</Type>
</Property>

<Property name="AnzahlGebinde">
<Type>%Integer</Type>
</Property>

<Property name="AnzahlGebindeBestellt">
<Type>%Integer</Type>
</Property>

<Property name="Gebinde">
<Type>DBAgrofresh.SD.Gebinde</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenAusgangGebinde</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Gebinde"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="GebindeIndex">
<Properties>Gebinde</Properties>
</Index>

<Property name="MengeJeGebinde">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="AnzahlEtiketten">
<Type>%Integer</Type>
</Property>

<Property name="AnzahlEtikettenGedruckt">
<Type>%Integer</Type>
</Property>

<Property name="Preis">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Betrag">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<UDLText name="T">
<Content><![CDATA[
// wird jeweils das ab Artikel gespeichert

]]></Content>
</UDLText>

<Property name="Einzelgewicht">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="MengeAusgang">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="MengeBestellt">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="MengeInKg">
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {MengeInKg}=##class(DBAgrofreshEK.ChargenAusgang).GetMengeInKgClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Method name="GetMengeInKgClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[

	set mengeInKg = ""
	&sql(SELECT (Einzelgewicht*MengeAusgang) as menginKg INTO :mengeInKg
		 from DBAgrofreshEK.ChargenAusgang WHERE ID = :chargenOid)
	Quit:(SQLCODE'=0) 0
	Quit mengeInKg
]]></Implementation>
</Method>

<Property name="Mandant">
<Type>%String</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Mandant}=##class(DBAgrofreshEK.ChargenAusgang).GetMandant({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
</Property>

<Method name="GetMandant">
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[

	set mand = ""
	&sql(SELECT Auftragskopf->Mandant INTO :mand from DBAgrofresh.Auftragspos WHERE Charge = :chargenOid)
	Quit:(SQLCODE'=0) 0
	Quit mand
]]></Implementation>
</Method>

<Property name="Charge">
<Type>DBAgrofreshEK.ChargenEingang</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenAusgaenge</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Charge"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ChargeIndex">
<Properties>Charge</Properties>
</Index>

<Index name="ChargeDatumIndex">
<Properties>Charge,AusgangsDatum</Properties>
</Index>

<Property name="APChargenAusgang">
<Type>DBAgrofresh.Auftragspos</Type>
<Cardinality>many</Cardinality>
<Inverse>Charge</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Method name="GetNewPosNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>ChargenOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	
	set nr = 0
	&sql(SELECT Max(PositionsNr) INTO :nr FROM DBAgrofreshEK.ChargenAusgang WHERE Charge = :ChargenOid)
	Quit:(SQLCODE'=0) 1
	set nr = +nr + 1
	Quit nr
]]></Implementation>
</Method>

<Method name="GetAuftragsposOid">
<ClassMethod>1</ClassMethod>
<FormalSpec>ChargenOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set oid = ""
	&sql(SELECT ID INTO :oid FROM DBAgrofresh.Auftragspos WHERE Charge = :ChargenOid)
	Quit:(SQLCODE'=0) ""
	Quit oid
]]></Implementation>
</Method>

<Method name="GetAuftragsStatusByAusgangsOid">
<ClassMethod>1</ClassMethod>
<FormalSpec>ChargenAusgangOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set status = 0
	&sql(SELECT Auftragskopf->Auftragsstatus INTO :status FROM DBAgrofresh.Auftragspos WHERE Charge = :ChargenAusgangOid)
	Quit:(SQLCODE'=0) ""
	Quit status
]]></Implementation>
</Method>

<Property name="Abteilung">
<Type>DBCore.Abteilung</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenAusgang</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abteilung"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="AbteilungIndex">
<Properties>Abteilung</Properties>
</Index>

<Property name="Lagerort">
<Type>DBAgrofresh.SD.Lagerort</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenAusgang</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Lagerort"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="LagerortIndex">
<Properties>Lagerort</Properties>
</Index>

<Property name="Abzugstyp">
<Type>DBAgrofresh.SD.Abzugstyp</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenAusgang</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abzugstyp"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="AbzugstypIndex">
<Properties>Abzugstyp</Properties>
</Index>

<Property name="IsDirektverkauf">
<Type>%Boolean</Type>
</Property>

<Index name="ChargenMengeIdx">
<Properties>Charge,MengeAusgang,IsDirektverkauf</Properties>
</Index>

<Property name="Produktionsart">
<Type>DBAgrofresh.SD.Produktionsart</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenAusgang</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Produktionsart"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="Qualitaet">
<Type>DBAgrofresh.SD.Qualitaetsklasse</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenAusgang</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Qualitaet"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="QualitaetIndex">
<Properties>Qualitaet</Properties>
</Index>

<Property name="GewichtsKorrekturAnteil">
<Description>
Auf der Eingangscharge gibt es eine Gewichtskorrektur, wenn die Ausgangs charge wieder von
der Eingangscharge getrennt wird muss diese wieder abgezogen werden.</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Method name="%OnDelete">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Delete</METHOD> method to 
provide notification that the object specified by <VAR>oid</VAR> has been deleted.
The callback occurs immediately after %DeleteData has been called. If %DeleteData returns
an error then %OnAfterDelete is not called.

<P>If %OnAfterDelete returns an error (%Status) then the transaction is rolled back.
[Previously private]]]></Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%ObjectIdentity</FormalSpec>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	// Gewichtskorrekturmenge zurücksetzen
	set chargenId = $lg(oid,1)	
	set obj = ##class(DBAgrofreshEK.ChargenAusgang).%OpenId(chargenId)
	if ((obj '= $c(0)) && (obj '= "") && (obj.Charge '= $c(0)) && (obj.Charge '= "")) {
		set korrekturMenge = obj.GewichtsKorrekturAnteil
		set ceId = obj.Charge.%Id()	
		k obj
		/*set korrekturMenge = 0
		set ceId = ""
		&sql(SELECT Charge, GewichtsKorrekturAnteil
		 INTO :ceId, :korrekturMenge
		 FROM DBAgrofreshEK.ChargenAusgang WHERE ID=:chargenId)
	 
		if (SQLCODE'=0)  {
			set korrekturMenge = 0
			set ceId = ""
		}*/
	
		if ((ceId '= "") && (korrekturMenge '= 0)) {
			Set ^StoppTriggerChargenEingang(ceId) = 1
			set ce = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(ceId)
			if (ce '= "") {
				set ce.GewichtKorrektur = ce.GewichtKorrektur - korrekturMenge
				if (ce.GewichtKorrektur < 0) {
					set ce.GewichtKorrektur = 0
				}
				do ce.%Save()
			}
			k ce
			Kill ^StoppTriggerChargenEingang(ceId)		
		}
	}
	// Charge von Auftragspos löschen, nicht da im OnDelete der Position das löschen der Charge aufgerufen wird und er dan dreht.
	/*set posId = ""
	&sql(SELECT ID FROM DBAgrofresh.Auftragspos WHERE Charge = :chargenId)
	if (SQLCODE'=0)  {
		set posId = ""
	}
	if ((posId '= "") && (posId '= $c(0))) {
		&sql(Update DBAgrofresh.Auftragspos SET Charge = NULL WHERE ID = :posId)
	}*/
	Quit $$$OK
]]></Implementation>
</Method>

<Trigger name="trgBeforeDelete">
<Code><![CDATA[	// Gewichtskorrekturmenge zurücksetzen
	set chargenId = {ID*O}
	/*set korrekturMenge = 0
	set ceId = ""
	&sql(SELECT Charge, GewichtsKorrekturAnteil
	 INTO :ceId, :korrekturMenge
	 FROM DBAgrofreshEK.ChargenAusgang WHERE ID=:chargenId)
	 
	if (SQLCODE'=0)  {
		set korrekturMenge = 0
		set ceId = ""
	}*/
	set obj = ##class(DBAgrofreshEK.ChargenAusgang).%OpenId(chargenId)
	if ((obj '= $c(0)) && (obj '= "") && (obj.Charge '= $c(0)) && (obj.Charge '= "")) {
		set korrekturMenge = obj.GewichtsKorrekturAnteil
		set ceId = obj.Charge.%Id()	
	
		if ((ceId '= "") && (korrekturMenge '= 0)) {
			set ce = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(ceId)
			if (ce '= "") {
				set ce.GewichtKorrektur = ce.GewichtKorrektur - korrekturMenge
				if (ce.GewichtKorrektur < 0) {
					set ce.GewichtKorrektur = 0
				}
				do ce.%Save()
			}	
			k ce	
		}
	}
	k obj
	// Charge von Auftragspos löschen, nicht da im OnDelete der Position das löschen der Charge aufgerufen wird und er dan dreht.
	/*set posId = ""
	&sql(SELECT ID FROM DBAgrofresh.Auftragspos WHERE Charge = :chargenId)
	if (SQLCODE'=0)  {
		set posId = ""
	}
	if ((posId '= "") && (posId '= $c(0))) {
		&sql(Update DBAgrofresh.Auftragspos SET Charge = NULL WHERE ID = :posId)
	}*/
	Quit $$$OK]]></Code>
<Event>DELETE</Event>
<Foreach>row</Foreach>
</Trigger>

<Method name="%OnAfterSave">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Save</METHOD> method to 
provide notification that the object is being saved. It is called after 
the object's data has been successfully written to disk.

<P><VAR>insert</VAR> will be set to 1 if this object is being saved for the first time.

<P>If this method returns an error then the call to <METHOD>%Save</METHOD> will fail.]]></Description>
<FormalSpec>insert:%Boolean</FormalSpec>
<Private>1</Private>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	if ((..Charge '= $$$NULLOREF) && (..Charge '= $c(0))) {
		if (($Get(^StoppTriggerChargenEingang(..Charge.%Id())) '= 1)) {
			if (((..Charge.MengeVerfuegbar = 0) || (..Charge.MengeVerfuegbar = $c(0)) || (..Charge.MengeVerfuegbar = $$$NULLOREF)) && 
			((..Charge.Provisorisch = 0) || (..Charge.Provisorisch = $c(0)) || (..Charge.Provisorisch = $$$NULLOREF) || (..Charge.Provisorisch = ""))) {
			
				Set ^StoppTriggerChargenEingang(..Charge.%Id()) = 1
				set ce = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(..Charge.%Id())
				set ce.ErledigtDatum = +$h
				do ce.%Save()
				kill ce
				Kill ^StoppTriggerChargenEingang(..Charge.%Id())
			}
		}
	}
	Quit $$$OK
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.ChargenAusgangD</DataLocation>
<DefaultData>ChargenAusgangDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.ChargenAusgangD</IdLocation>
<IndexLocation>^DBAgrofreshEK.ChargenAusgangI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.ChargenAusgangS</StreamLocation>
<Data name="ChargenAusgangDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>PositionsNr</Value>
</Value>
<Value name="3">
<Value>Kunde</Value>
</Value>
<Value name="4">
<Value>AusgangsDatum</Value>
</Value>
<Value name="5">
<Value>Belegnummer</Value>
</Value>
<Value name="6">
<Value>Belegtext</Value>
</Value>
<Value name="7">
<Value>ZeitAbgang</Value>
</Value>
<Value name="8">
<Value>Artikel</Value>
</Value>
<Value name="9">
<Value>Herkunft</Value>
</Value>
<Value name="10">
<Value>TageVerfall</Value>
</Value>
<Value name="11">
<Value>AnzahlGebinde</Value>
</Value>
<Value name="12">
<Value>Gebinde</Value>
</Value>
<Value name="13">
<Value>MengeJeGebinde</Value>
</Value>
<Value name="14">
<Value>AnzahlEtiketten</Value>
</Value>
<Value name="15">
<Value>AnzahlEtikettenGedruckt</Value>
</Value>
<Value name="16">
<Value>Preis</Value>
</Value>
<Value name="17">
<Value>Betrag</Value>
</Value>
<Value name="18">
<Value>Einzelgewicht</Value>
</Value>
<Value name="19">
<Value>MengeAusgang</Value>
</Value>
<Value name="20">
<Value>Charge</Value>
</Value>
<Value name="21">
<Value>Abteilung</Value>
</Value>
<Value name="22">
<Value>Lagerort</Value>
</Value>
<Value name="23">
<Value>Abzugstyp</Value>
</Value>
<Value name="24">
<Value>IsDirektverkauf</Value>
</Value>
<Value name="25">
<Value>MengeBestellt</Value>
</Value>
<Value name="26">
<Value>Produktionsart</Value>
</Value>
<Value name="27">
<Value>Qualitaet</Value>
</Value>
<Value name="28">
<Value>AnzahlGebindeBestellt</Value>
</Value>
<Value name="29">
<Value>GewichtsKorrekturAnteil</Value>
</Value>
</Data>
<Property name="Abteilung"/>
<Property name="Abzugstyp"/>
<Property name="AnzahlEtiketten"/>
<Property name="AnzahlEtikettenGedruckt"/>
<Property name="AnzahlGebinde"/>
<Property name="AnzahlGebindeBestellt"/>
<Property name="Artikel"/>
<Property name="AusgangsDatum"/>
<Property name="Belegnummer"/>
<Property name="Belegtext"/>
<Property name="Betrag"/>
<Property name="Charge"/>
<Property name="Einzelgewicht"/>
<Property name="Gebinde"/>
<Property name="GewichtsKorrekturAnteil"/>
<Property name="Herkunft"/>
<Property name="IsDirektverkauf"/>
<Property name="Kunde"/>
<Property name="Lagerort"/>
<Property name="Mandant"/>
<Property name="MengeAusgang"/>
<Property name="MengeBestellt"/>
<Property name="MengeInKg"/>
<Property name="MengeJeGebinde"/>
<Property name="PositionsNr"/>
<Property name="Preis"/>
<Property name="Produktionsart"/>
<Property name="Qualitaet"/>
<Property name="TageVerfall"/>
<Property name="ZeitAbgang"/>
</Storage>
</Class>


<Class name="DBAgrofreshEK.ChargenEingang">
<Super>%Persistent,%XML.Adaptor,DBCore.MandantRel</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61445,38040.618741</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="StrId">
<Type>%String</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {StrId}={ID} </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Index name="ChargenIdIndex">
<Properties>StrId</Properties>
<Unique>1</Unique>
</Index>

<Property name="PositionsNr">
<Type>%Integer</Type>
<Required>1</Required>
</Property>

<Index name="PositionsNrIndex">
<Properties>PositionsNr</Properties>
</Index>

<Property name="EingangsDatum">
<Type>%Date</Type>
<Required>1</Required>
</Property>

<Property name="Jahr">
<Type>%Integer</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Jahr}=##class(DBAgrofreshEK.ChargenEingang).GetJahr({EingangsDatum}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
</Property>

<Method name="GetJahr">
<ClassMethod>1</ClassMethod>
<FormalSpec>dat:%Date</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set y = 0
	set y = +$P($ZD(dat),"/",3)
	Quit y
]]></Implementation>
</Method>

<Index name="ChargenIdx">
<Properties>Mandant,Jahr,PositionsNr</Properties>
<Unique>1</Unique>
</Index>

<Property name="Status">
<Type>%Integer</Type>
</Property>

<Property name="Belegnummer">
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Belegtext">
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Lieferant">
<Type>DBDebiKredi.Kreditor</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenEingangLieferant</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Lieferant"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="LieferantIndex">
<Properties>Lieferant</Properties>
</Index>

<Property name="ZeitEingang">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="TageVerfall">
<Type>%Integer</Type>
</Property>

<Property name="Parzelle">
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Artikel">
<Type>DBAgrofresh.Artikel</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenEingangArtikel</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Artikel"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ArtikelIndex">
<Properties>Artikel</Properties>
</Index>

<Property name="Herkunft">
<Type>DBAgrofresh.SD.Herkunft</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenEingangHerkunft</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Herkunft"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="HerkunftIndex">
<Properties>Herkunft</Properties>
</Index>

<Property name="Zulieferant">
<Type>DBAdressen.Adresse</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenEingangZulieferant</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Zulieferant"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ZulieferantIndex">
<Properties>Zulieferant</Properties>
</Index>

<Property name="AnzahlGebinde">
<Type>%Integer</Type>
</Property>

<Property name="AnzahlGebindeVerfuegbar">
<Type>%Integer</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {AnzahlGebindeVerfuegbar}=##class(DBAgrofreshEK.ChargenEingang).GetAnzahlGebindeVerfuegbarClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
</Property>

<Property name="AnzahlGebindeVerarbeitung">
<Type>%Integer</Type>
</Property>

<Property name="AnzahlGebDefVerarbeitet">
<Type>%Integer</Type>
</Property>

<Property name="AnzahlGebindeVerarbeitungProv">
<Type>%Integer</Type>
</Property>

<Property name="AnzahlGebindeVerarbVerfuegbar">
<Type>%Integer</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {AnzahlGebindeVerarbVerfuegbar}=##class(DBAgrofreshEK.ChargenEingang).GetAnzGebVerarbVerfuegbarClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
</Property>

<Property name="AnzahlGebindeVerlust">
<Type>%Integer</Type>
</Property>

<Property name="AnzahlGebDirektverkauf">
<Type>%Integer</Type>
</Property>

<Property name="AnzahlGebDirektverVerfuegbar">
<Type>%Integer</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {AnzahlGebDirektverVerfuegbar}=##class(DBAgrofreshEK.ChargenEingang).GetGebDirektverkaufVerfClass({ID},{AnzahlGebDirektverkauf}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
</Property>

<Property name="Gebinde">
<Type>DBAgrofresh.SD.Gebinde</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenEingangGebinde</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Gebinde"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="GebindeIndex">
<Properties>Gebinde</Properties>
</Index>

<Property name="MengeJeGebinde">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="AnzahlEtiketten">
<Type>%Integer</Type>
</Property>

<Property name="AnzahlEtikettenGedruckt">
<Type>%Integer</Type>
</Property>

<Property name="Preis">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Betrag">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<UDLText name="T">
<Content><![CDATA[
// wird jeweils das ab Artikel gespeichert

]]></Content>
</UDLText>

<Property name="Einzelgewicht">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="MengeBestellt">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="MengeEingang">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="MengeVerarbeitung">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="MengeDefVerarbeitet">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Bemerkung">
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Verlust">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="MengeVerfuegbar">
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {MengeVerfuegbar}=##class(DBAgrofreshEK.ChargenEingang).GetMengeVerfuegbarClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="MengeVerarbeitungVerfuegbar">
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {MengeVerarbeitungVerfuegbar}=##class(DBAgrofreshEK.ChargenEingang).GetMengeVerarbVerfuegbarClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="MengeVerarbeitungProv">
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {MengeVerarbeitungProv}=##class(DBAgrofreshEK.ChargenEingang).GetMengeVerarbProvClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="AusVerarbeitung">
<Description>
Charge ist aus Verarbeitung entstanden. Trifft auch bei Retouren... zu welche über das Prinzip der Verarbeitung geregelt werden</Description>
<Type>%Boolean</Type>
</Property>

<Property name="Kalibrierung">
<Description>
Gesamte Charge ist Rohware in Kalibrierung und steht nicht zum Verkauf</Description>
<Type>%Boolean</Type>
</Property>

<Property name="GewichtKorrektur">
<Description>
Falls das Gewicht welches im EK angegeben wurde vom eigentlichen Gewicht abweicht kann die Abweichung hier gespeichert werden</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="AusKalibrierung">
<Description><![CDATA[
Charge ist aus Kalibrierung entstanden. -> Falls Sie gelöscht wird muss die EK Position auch gelöscht werden]]></Description>
<Type>%Boolean</Type>
</Property>

<Property name="VerlustMengeGesamt">
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {VerlustMengeGesamt}=##class(DBAgrofreshEK.ChargenEingang).GetVerlustMengeGesamtClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="VerlustAnzGebindeGesamt">
<Type>%Integer</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {VerlustAnzGebindeGesamt}=##class(DBAgrofreshEK.ChargenEingang).GetVerlustAnzGebGesamtClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
</Property>

<Property name="MengeEingangKg">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="AnzGebKalibrierung">
<Type>%Integer</Type>
</Property>

<Property name="MengeKalibrierung">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="ErledigtDatum">
<Description>
Datum wenn Saldo auf 0 war</Description>
<Type>%Date</Type>
</Property>

<Method name="GetMengeVerarbProvClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set sumProv = 0
	&sql(SELECT SUM(NVL(MengeEingangKg,0)) into :sumProv FROM DBAgrofreshEK.VerarbProv WHERE VerarbAuftrag->Charge = :chargenOid)
	quit:(SQLCODE '= 0) 0
	quit sumProv
]]></Implementation>
</Method>

<Method name="GetMengeVerarbVerfuegbarClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set mengeEingang = 0
	
	&sql(SELECT MengeVerarbeitung INTO :mengeEingang
		FROM DBAgrofreshEK.ChargenEingang WHERE ID = :chargenOid)
		
	set sumVerarbeitungen = ##class(DBAgrofreshEK.ChargenEingang).GetMengeVerarbeitetClass(chargenOid)
	
	quit mengeEingang - sumVerarbeitungen
]]></Implementation>
</Method>

<Method name="GetAnzGebVerarbeitetClass">
<Description>
Charge und Artikel.Mengeneinheit.CodeEinheit</Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set anzGeb = 0
	// Verlust in anzGeb enthalten
	//&sql(SELECT NVL(ABS(SUM(AnzahlGebinde)),0) + NVL(SUM(VerlustAnzGeb),0)
	&sql(SELECT NVL(SUM(AnzahlGebinde),0) INTO :anzGeb
		FROM DBAgrofreshEK.VerarbAuftrag WHERE Charge = :chargenOid)	

	Quit:(SQLCODE'=0) 0
	Quit anzGeb
]]></Implementation>
</Method>

<Method name="GetMengeVerarbeitetClass">
<Description>
Charge und Artikel.Mengeneinheit.CodeEinheit</Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set menge = 0
	// Verlust in Menge enthalten
	//&sql(SELECT NVL(ABS(SUM(Menge)),0) + NVL(SUM(VerlustMenge),0)
	&sql(SELECT NVL(SUM(Menge),0) INTO :menge
		FROM DBAgrofreshEK.VerarbAuftrag WHERE Charge = :chargenOid)	

	Quit:(SQLCODE'=0) 0
	Quit menge
]]></Implementation>
</Method>

<Method name="GetMengeVerfuegbarClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set sumMenge = 0
	
	&sql(SELECT SUM(MengeAusgang) INTO :sumMenge FROM DBAgrofreshEK.ChargenAusgang
		 WHERE Charge = :chargenOid)
	// Falls SQL Satement nicht erfolgreich ist menge 0
	if (SQLCODE'=0) {
		set sumMenge = 0
	}
	set sumVerarbeitungen = 0
	
	set codeOrig = ""
	set mengeEingang = 0
	set direktverkauf = 0
	set korrektur = 0
	set mischposten = ""
	
	&sql(SELECT MengeEingang, 
			Artikel->Mengeneinheit->CodeEinheit,
			DirektverkaufVerfuegbar,
			MengeVerarbeitung,
			GewichtKorrektur,
			Mischposten
			INTO :mengeEingang,:codeOrig,:direktverkauf, :sumVerarbeitungen, :korrektur, :mischposten
		FROM DBAgrofreshEK.ChargenEingang WHERE ID = :chargenOid)
		
	//set orig = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(chargenOid)
	//set codeOrig = orig.Artikel.Mengeneinheit.CodeEinheit
	//set direktverkauf = orig.DirektverkaufVerfuegbar
	// Falls die Charge zu einem Mischposten gehört ist der Saldo immer 0
	if ((SQLCODE '= 0) || ((mischposten '= "") && (mischposten '= $$$NULLOREF))) {
		Quit 0
	}
	
	set idStmt = ""
	Quit mengeEingang - sumMenge - sumVerarbeitungen - direktverkauf + korrektur
]]></Implementation>
</Method>

<Method name="GetAnzahlGebindeVerfuegbarClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set sumMenge = 0
	
	&sql(SELECT SUM(AnzahlGebinde) INTO :sumMenge FROM DBAgrofreshEK.ChargenAusgang
		 WHERE Charge = :chargenOid AND NVL(IsDirektverkauf,0) = 0)
	// Falls SQL Satement nicht erfolgreich ist menge 0
	if (SQLCODE'=0) {
		set sumMenge = 0
	}
	set sumVerarbeitungen = 0
	
	set mengeEingang = 0
	set direktverkauf = 0
	set direktverkaufGesamt = 0
	set mischposten = ""
	
	&sql(SELECT AnzahlGebinde, 
			AnzahlGebDirektverkauf,
			AnzahlGebDirektverVerfuegbar,
			AnzahlGebindeVerarbeitung,
			Mischposten
			INTO :mengeEingang, :direktverkaufGesamt, :direktverkauf, :sumVerarbeitungen, :mischposten
		FROM DBAgrofreshEK.ChargenEingang WHERE ID = :chargenOid)
	
	// Falls die Charge zu einem Mischposten gehört ist der Saldo immer 0
	if ((SQLCODE '= 0) || ((mischposten '= "") && (mischposten '= $$$NULLOREF))) {
		Quit 0
	}
	// DirektverkaufVerkauft = Gesamt direktverkauf - Saldo
	set direktverkaufVerkauft = (direktverkaufGesamt - direktverkauf)
	// Verlust ist in Verarbeitungen enthalten
	Quit mengeEingang - sumMenge - direktverkaufVerkauft - sumVerarbeitungen - direktverkauf
]]></Implementation>
</Method>

<Method name="GetAnzGebVerarbVerfuegbarClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set codeOrig = ""
	set mengeEingang = 0
	set gebVerarbeitet = 0
	
	&sql(SELECT AnzahlGebindeVerarbeitung, 
			DBAgrofreshEK.ChargenEingang_GetAnzGebVerarbeitetClass(:chargenOid)
			INTO :mengeEingang,:gebVerarbeitet
		FROM DBAgrofreshEK.ChargenEingang WHERE ID = :chargenOid)
		
	if (SQLCODE '= 0) {
		set mengeEingang = 0
		set gebVerarbeitet = 0
	}
	quit (mengeEingang - gebVerarbeitet)
]]></Implementation>
</Method>

<Property name="ChargenAusgaenge">
<Type>DBAgrofreshEK.ChargenAusgang</Type>
<Cardinality>many</Cardinality>
<Inverse>Charge</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BPChargenEingang">
<Type>DBAgrofreshEK.Bestellungspos</Type>
<Cardinality>many</Cardinality>
<Inverse>Charge</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="Mandant">
<Type>%String</Type>
</Property>

<ForeignKey name="FKMandant">
<Properties>Mandant</Properties>
<ReferencedClass>DBCore.Mandant</ReferencedClass>
<ReferencedKey>MandIdIndex</ReferencedKey>
</ForeignKey>

<Index name="MandantIdx">
<Properties>Mandant</Properties>
</Index>

<Property name="LagerEffektiv">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Eingangspreis">
<Type>DBAgrofreshEK.Eingangspreis</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenEingangPreis</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Eingangspreis"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="EingangspreisIndex">
<Properties>Eingangspreis</Properties>
</Index>

<Property name="LagerAufnahme">
<Type>DBAgrofreshEK.LagerAufnahme</Type>
<Cardinality>one</Cardinality>
<Inverse>CELagerAufnahme</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="LagerAufnahme"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="LagerAufnahmeIndex">
<Properties>LagerAufnahme</Properties>
</Index>

<Property name="OriginalCharge">
<Type>DBAgrofreshEK.ChargenEingang</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenAufgeteilt</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="OriginalCharge"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="OriginalChargeIndex">
<Properties>OriginalCharge</Properties>
</Index>

<Property name="ChargenAufgeteilt">
<Type>DBAgrofreshEK.ChargenEingang</Type>
<Cardinality>many</Cardinality>
<Inverse>OriginalCharge</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="Bestellt">
<Type>%Integer</Type>
</Property>

<Property name="Qualitaet">
<Type>DBAgrofresh.SD.Qualitaetsklasse</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenEingang</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Qualitaet"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="QualitaetIndex">
<Properties>Qualitaet</Properties>
</Index>

<Property name="VerarbeitungsAuftrag">
<Type>DBAgrofreshEK.VerarbAuftrag</Type>
<Cardinality>one</Cardinality>
<Inverse>Chargen</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="VerarbeitungsAuftrag"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="VerarbeitungsAuftragIndex">
<Properties>VerarbeitungsAuftrag</Properties>
</Index>

<Property name="VerarbAufwandOriginalCharge">
<Type>DBAgrofreshEK.VerarbAufwand</Type>
<Cardinality>many</Cardinality>
<Inverse>OriginalCharge</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="VerarbeitungAktiv">
<Type>%Boolean</Type>
<InitialExpression>1</InitialExpression>
</Property>

<Property name="QSMeldung">
<Type>DBAgrofreshEK.QSMeldung</Type>
<Cardinality>many</Cardinality>
<Inverse>Charge</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="Abteilung">
<Type>DBCore.Abteilung</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenEingang</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abteilung"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="AbteilungIndex">
<Properties>Abteilung</Properties>
</Index>

<Property name="Lagerort">
<Type>DBAgrofresh.SD.Lagerort</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenEingang</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Lagerort"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="LagerortIndex">
<Properties>Lagerort</Properties>
</Index>

<Property name="Abzugstyp">
<Type>DBAgrofresh.SD.Abzugstyp</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenEingang</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abzugstyp"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="AbzugstypIndex">
<Properties>Abzugstyp</Properties>
</Index>

<Property name="Direktverkauf">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="DirektverkaufVerfuegbar">
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {DirektverkaufVerfuegbar}=##class(DBAgrofreshEK.ChargenEingang).GetDirektverkaufVerfuegbarClass({ID},{Direktverkauf}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Produktionsart">
<Type>DBAgrofresh.SD.Produktionsart</Type>
<Cardinality>one</Cardinality>
<Inverse>ChargenEingang</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Produktionsart"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="LagerBew">
<Type>DBAgrofresh.Lagerbew</Type>
<Cardinality>many</Cardinality>
<Inverse>ChargenEingang</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="JournalNr">
<Type>%Integer</Type>
</Property>

<Property name="RetourenPos">
<Description><![CDATA[
Charge ist eine Retourenposition -> Schlechte ware die zurück an den Lieferanten geht.]]></Description>
<Type>%Boolean</Type>
</Property>

<Property name="Provisorisch">
<Description>
Provisorische Charge = Charge aus Verarbeitung welche bereits eine Nummer hat,
aber noch nicht verkauft werden darf</Description>
<Type>%Boolean</Type>
</Property>

<Property name="Transportschein">
<Description>
Interner Lieferschein in ein anderes Lager oder zur verarbeitung</Description>
<Type>DBPlattform.Transportschein</Type>
<Cardinality>one</Cardinality>
<Inverse>Chargen</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="LagerBew"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="TransportscheinIndex">
<Properties>Transportschein</Properties>
</Index>

<Property name="Aufgeteilt">
<Description>
Charge wurde aufgetielt, Z.B ein Lagerwechsel einer Teilcharge</Description>
<Type>%Boolean</Type>
</Property>

<Property name="Mischposten">
<Description>
Originale Charge aus welcher die Verarbeitung entstand</Description>
<Type>%String</Type>
</Property>

<ForeignKey name="FKMischposten">
<Description>
Fremdschlüssel zur originalen Charge</Description>
<Properties>Mischposten</Properties>
<ReferencedClass>DBAgrofreshEK.ChargenEingang</ReferencedClass>
<ReferencedKey>ChargenIdIndex</ReferencedKey>
</ForeignKey>

<Index name="MischpostenIdx">
<Properties>Mischposten</Properties>
</Index>

<Property name="IsMischposten">
<Description>
Charge wurde aufgetielt, Z.B ein Lagerwechsel einer Teilcharge</Description>
<Type>%Boolean</Type>
</Property>

<Method name="GetDirektverkaufVerfuegbarClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String,menge:%Decimal</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	
	//set orig = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(chargenOid)
	//set menge = orig.Direktverkauf
	//kill orig
	set sumMenge = 0
	&sql(SELECT SUM(MengeAusgang) INTO :sumMenge FROM DBAgrofreshEK.ChargenAusgang
		 WHERE Charge = :chargenOid and IsDirektverkauf = 1)
	Quit:(SQLCODE'=0) 0
	Quit menge - sumMenge
]]></Implementation>
</Method>

<Method name="GetGebDirektverkaufVerfClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String,menge:%Decimal</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	//kill orig
	//set sumGeb = 0
	//&sql(SELECT SUM(AnzahlGebinde) INTO :sumGeb FROM DBAgrofreshEK.ChargenAusgang
	//	 WHERE Charge = :chargenOid and IsDirektverkauf = 1)
	//Quit:(SQLCODE'=0) 0
	//Quit menge - sumGeb
	set anz = 0
	&sql(SELECT DBUtils.Dev_CalcGebinde(MengeJeGebinde, DirektverkaufVerfuegbar) INTO :anz FROM DBAgrofreshEK.ChargenEingang
		 WHERE ID = :chargenOid)
	Quit anz
]]></Implementation>
</Method>

<Method name="ArtikelHasDirektverkauf">
<ClassMethod>1</ClassMethod>
<FormalSpec>artikelOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set sumMenge = 0
	&sql(SELECT SUM(DirektverkaufVerfuegbar) INTO :sumMenge FROM DBAgrofreshEK.ChargenEingang
		 WHERE Artikel = :artikelOid)
	Quit:(SQLCODE'=0) 0
	if (sumMenge > 0) {
		quit 1
	} else {
		quit 0
	}
]]></Implementation>
</Method>

<Method name="ResetDirektverkauf">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String</FormalSpec>
<Implementation><![CDATA[
	// Wichtig Gebinde vor Menge, da Gebinde über Menge berechnet werden
	&sql(UPDATE DBAgrofreshEK.ChargenEingang set AnzahlGebDirektverkauf = (AnzahlGebDirektverkauf-AnzahlGebDirektverVerfuegbar) where AnzahlGebDirektverVerfuegbar > 0 and Artikel->Mandant = :MandantOid)
	// Menge
	&sql(UPDATE DBAgrofreshEK.ChargenEingang set Direktverkauf = (Direktverkauf-DirektverkaufVerfuegbar) where DirektverkaufVerfuegbar > 0 and Artikel->Mandant = :MandantOid)
]]></Implementation>
</Method>

<Method name="%OnDelete">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Delete</METHOD> method to 
provide notification that the object specified by <VAR>oid</VAR> has been deleted.
The callback occurs immediately after %DeleteData has been called. If %DeleteData returns
an error then %OnAfterDelete is not called.

<P>If %OnAfterDelete returns an error (%Status) then the transaction is rolled back.
[Previously private]]]></Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%ObjectIdentity</FormalSpec>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	
	set chargenId = $lg(oid,1)	
	
	
	set anzahlGeb = 0
	set menge = 0
	set originalCharge = ""
	set mischposten = ""
	set retPos = 0
	&SQL(SELECT AnzahlGebinde, MengeEingang, OriginalCharge, Mischposten, NVL(RetourenPos,0) into :anzahlGeb, :menge, :originalCharge, :mischposten, :retPos FROM DBAgrofreshEK.ChargenEingang WHERE ID = :chargenId)

	if ((retPos = 1) && (SQLCODE = 0)) {
		d ##class(DBAgrofreshEK.ChargenEingang).AddMengeToVerarbeitung(originalCharge, anzahlGeb, menge, 1)
	}
	if (((mischposten '= "") || (mischposten '= $$$NULLOREF)) && (SQLCODE = 0)) {
		d ##class(DBAgrofreshEK.ChargenEingang).AddMengeToMischposten(mischposten, anzahlGeb, menge, 1)
	}
	
	
	set vAuftr = ""
	&sql(SELECT VerarbeitungsAuftrag
	 INTO :vAuftr
	 FROM DBAgrofreshEK.ChargenEingang WHERE ID=:chargenId)
	 
	if (SQLCODE=0)  {
		Set ^ChargenEingangOldValues(chargenId, 1) = vAuftr
	} else {
		Set ^ChargenEingangOldValues(chargenId, 1) = ""
	}
	
	do ..DelVerarbZusaetze(chargenId)
	//w "START METHODE DelVerarbeitungsChargen mit Oid :"_chargenId,!
	do ..DelVerarbeitungsChargen(chargenId)
	do ##class(DBAgrofreshEK.ChargenEingang).DelQSMeldung(chargenId)	
	do ##class(DBAgrofreshEK.ChargenEingang).ReleaseLagerBew(chargenId)
	//w "END METHODE",!
	Quit $$$OK
]]></Implementation>
</Method>

<Trigger name="trgBeforeDelete">
<Code>	w "in before delete von CE",!
	new id
	
	set id = {ID}
	
	Set ^ChargenEingangOldValues(id, 1) = {VerarbeitungsAuftrag*O}
	
	w "alte chargenid"_id,!
	do ##class(DBAgrofreshEK.ChargenEingang).DelVerarbZusaetze(id)
	do ##class(DBAgrofreshEK.ChargenEingang).DelVerarbeitungsChargen(id)
	do ##class(DBAgrofreshEK.ChargenEingang).DelQSMeldung(id)
	do ##class(DBAgrofreshEK.ChargenEingang).ReleaseLagerBew(id)
	
	QUIT $$$OK</Code>
<Event>DELETE</Event>
<Foreach>row</Foreach>
</Trigger>

<Method name="%OnAfterDelete">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Delete</METHOD> method to 
provide notification that the object specified by <VAR>oid</VAR> has been deleted.
The callback occurs immediately after %DeleteData has been called. If %DeleteData returns
an error then %OnAfterDelete is not called.

<P>If %OnAfterDelete returns an error (%Status) then the transaction is rolled back.
[Previously private]]]></Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%ObjectIdentity</FormalSpec>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	w "START AFTER DELETE CE",!
	set chargenId = $lg(oid,1)	
	
	Set vAuftr = ^ChargenEingangOldValues(chargenId, 1)
	
	//Versuchen, den Auftrag, welcher auf die Charge gelinkt war zu löschen
	//wenn letzte Charge zu einem Auftrag gelöscht -> funktioniert das
	do ##class(DBAgrofreshEK.ChargenEingang).DelVerarbAuftraege(vAuftr)
	
	
	KILL ^ChargenEingangOldValues(chargenId,1)
	w "END AFTER DELETE CE",!
	Quit $$$OK
]]></Implementation>
</Method>

<Trigger name="trgAfterDelete">
<Code><![CDATA[	
	new id
	set id = {ID}
	
	Set vAuftr = ^ChargenEingangOldValues(id, 1)
	//Versuchen, den Auftrag, welcher auf die Charge gelinkt war zu löschen
	//wenn letzte Charge zu einem Auftrag gelöscht -> funktioniert das
	do ##class(DBAgrofreshEK.ChargenEingang).DelVerarbAuftraege(vAuftr)
	
	KILL ^ChargenEingangOldValues(id,1)]]></Code>
<Event>DELETE</Event>
<Time>AFTER</Time>
</Trigger>

<Method name="ReleaseLagerBew">
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenId:%String</FormalSpec>
<Implementation><![CDATA[

	W "ReleaseLagerBew: "_chargenId,!
	Set strSQL="SELECT ID FROM DBAgrofresh.LagerBew WHERE ChargenEingang = '"_chargenId_"'"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	IF $$$ISOK(sc) {
		While rs.Next(.sc) {
			Set lbId = rs.Data("ID")
			Set bew = ##class(DBAgrofresh.Lagerbew).%OpenId(lbId)
			Set bew.ChargenEingang = ""
			Do bew.%Save()
			KILL bew
		}
	}
]]></Implementation>
</Method>

<Method name="GetLastChargenNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set nr = 0
	set year = +$P($ZD($H),"/",3)
	&sql(SELECT TOP 1 PositionsNr INTO :nr FROM DBAgrofreshEK.ChargenEingang 
			WHERE Mandant = :MandantOid AND datepart('year',Eingangsdatum) = :year
			ORDER BY datepart('year',Eingangsdatum) DESC, PositionsNr DESC)
	Quit:(SQLCODE'=0) 0
	
	Quit nr
]]></Implementation>
</Method>

<Method name="GetNextChargenNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,Lieferdatum:%Date</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	
	set nr = 0
	//set year = +$P($ZD($H),"/",3)
	set year = ##class(DBUtils.DateUtils).GetYearFromDate(Lieferdatum)
	if ($GET(^ChargeEingangNr(MandantOid, year)) = "") {
		SET ^ChargeEingangNr(MandantOid, year) = ##Class(DBAgrofreshEK.ChargenEingang).GetLastChargenNr(MandantOid)	
	}
	
	SET nr=$INCREMENT(^ChargeEingangNr(MandantOid, year))
		
	Quit nr
]]></Implementation>
</Method>

<Method name="SetNextChargenNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,Lieferdatum:%Date,Nummer:%Integer</FormalSpec>
<Implementation><![CDATA[
	
	set year = ##class(DBUtils.DateUtils).GetYearFromDate(Lieferdatum)
	SET ^ChargeEingangNr(MandantOid, year) = Nummer
]]></Implementation>
</Method>

<Method name="GetChargenNrByOid">
<ClassMethod>1</ClassMethod>
<FormalSpec>Oid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set nr = 0
		
	&sql(SELECT PositionsNr INTO :nr FROM DBAgrofreshEK.ChargenEingang
		 WHERE Id = :Oid)
	Quit:(SQLCODE'=0) 0	 
	Quit nr
]]></Implementation>
</Method>

<Method name="GetOidByChargenNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,ChargenNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set year = +$P($ZD($H),"/",3)
	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK.ChargenEingang
		 WHERE Mandant = :MandantOid AND PositionsNr = :ChargenNr AND datepart('year',Eingangsdatum) = :year)
		 
		 
	if ((SQLCODE'=0) || (id = "")) {
		set year = +(year -1)
		&sql(SELECT ID INTO :id FROM DBAgrofreshEK.ChargenEingang
			 WHERE Mandant = :MandantOid AND PositionsNr = :ChargenNr AND datepart('year',Eingangsdatum) = :year)
		Quit:(SQLCODE'=0) ""
	}
	Quit id
]]></Implementation>
</Method>

<Method name="GetOidByChargenNrJahr">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,Jahr:%Integer,ChargenNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK.ChargenEingang
		 WHERE Mandant = :MandantOid AND PositionsNr = :ChargenNr AND datepart('year',Eingangsdatum) = :Jahr)
		 
	Quit:(SQLCODE'=0) ""
	Quit id
]]></Implementation>
</Method>

<Method name="ArtikelHasChargen">
<ClassMethod>1</ClassMethod>
<FormalSpec>ArtikelOid:%String,ProdGrpOid:%String,checkGrp:%Boolean</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set count = 0
	if (checkGrp = 1) {
		&sql(SELECT COUNT(ID) INTO :count FROM DBAgrofreshEK.ChargenEingang
			 WHERE (Artikel->Produktgruppe = :ProdGrpOid) 
			 AND NVL(ErledigtDatum,TO_DATE(0)) = TO_DATE(0))
	} else {
		&sql(SELECT COUNT(ID) INTO :count FROM DBAgrofreshEK.ChargenEingang
			 WHERE (Artikel = :ArtikelOid)
			 AND NVL(ErledigtDatum,TO_DATE(0)) = TO_DATE(0))
	}
	Quit:(SQLCODE'=0) 0
	Quit count > 0
]]></Implementation>
</Method>

<Method name="DelVerarbeitungsChargen">
<ClassMethod>1</ClassMethod>
<FormalSpec>OriginalCharge:%String</FormalSpec>
<Implementation><![CDATA[
	//w "DEL VERARBCHARGEN START für ", OriginalCharge, !
	//Chargen selektieren, wobei der Parameter als OriginalCharge zugewiesen ist
	Set strSQL="SELECT ID, VerarbeitungsAuftrag FROM DBAgrofreshEK.ChargenEingang WHERE OriginalCharge ="_OriginalCharge
	//w "DELVERARBCHARGEN SQL STMT: "_strSQL
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	IF $$$ISOK(sc) {
		While rs.Next(.sc) {
			
			Set id = rs.Data("ID")
			Set verarbAuftr = rs.Data("VerarbeitungsAuftrag")
			//w "VERARBCHARGE GEFUNDEN ID :"_id
			//mit dieser Id muss nun geprüft werden ob bereits ChargenAusgänge auf diesen Eingang
			//erfasst sind
			
			// wenn nicht -> Charge löschen, ansonsten Charge nicht löschen
			Set strSQL2="SELECT COUNT(*) As Anz FROM DBAgrofreshEK.ChargenAusgang WHERE Charge ="_id
			Set rs2 = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
			Do rs2.Prepare(strSQL2)
			Set sc2=rs2.Execute()
			IF $$$ISOK(sc2) {
				//wenn keiner gefunden wurde, darf der ChargenEingang gelöscht werden
				If (rs2.Next(.sc2)) {
					Set anz = rs2.Data("Anz")
					//w "ANZAHL GEFUNDENE AUSGAENGE: "_anz
					if (+anz = 0) {
						do ##class(DBAgrofreshEK.ChargenEingang).%DeleteId(id)
						do ##class(DBAgrofreshEK.ChargenEingang).DelVerarbAuftraege(verarbAuftr)
					}
				}
			}	
		}
	}
]]></Implementation>
</Method>

<Method name="DelVerarbZusaetze">
<ClassMethod>1</ClassMethod>
<FormalSpec>Charge:%String</FormalSpec>
<Implementation><![CDATA[
	
	Set auftrIds = ""
	//w "in VerarbZusaetze START"
	// VerarbProv löschen
	Set strSQL="SELECT ID, VerarbAuftrag FROM DBAgrofreshEK.VerarbProv WHERE OriginalCharge ="_Charge_" ORDER BY ID"
	//w "SQL STMT DELVERARBZUSAETZE: "_strSQL
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	
	if ($$$ISOK(sc)) {
		While (rs.Next(.sc)) {
			Set id = rs.Data("ID")
			Set vAuftrId = rs.Data("VerarbAuftrag")
			//wenn alle gleichen ids gelöscht wurden -> Auftrag dazu löschen
			w "vor listfind",!
			if ($ListFind(auftrIds, vAuftrId) = 0) {
				set auftrIds = auftrIds_$lb(vAuftrId)
			}
			w "DEL VERARBPROVID: "_id
			do ##class(DBAgrofreshEK.VerarbProv).%DeleteId(id)	

		}
	}
	//set ct = 0
	//&sql(select count(*) into :ct from dbagrofreshek.verarbprov where originalcharge = :Charge)
	
	//w "ANZAHL VERARBPROV NACH LÖSCHEN: "_ct,!
	
	//VerarbAufwand löschen
	Set strSQL="SELECT ID FROM DBAgrofreshEK.VerarbAufwand WHERE OriginalCharge ="_Charge
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	
	if ($$$ISOK(sc)) {
		While (rs.Next(.sc)) {
			Set id = rs.Data("ID")
			if (id '= "") {
				do ##class(DBAgrofreshEK.VerarbAufwand).%DeleteId(id)	
			}
		}
	}
	//w "DEL VERARBAUFTR START",!
	//w auftrIds,!
	//Aufträge zu den prov. Positionen löschen
	for i = 1:1:$ListLength(auftrIds) {
		w "FOR für Auftr: "_$ListGet(auftrIds, i)
		set aId = $ListGet(auftrIds, i)
		if (aId '= "") {
			//w "DEL ID: "_aId,!
			if (##class(DBAgrofreshEK.VerarbAuftrag).%ExistsId(aId)) {
				set st = ##class(DBAgrofreshEK.VerarbAuftrag).%DeleteId(aId)
				w st
			}
		}
	}
]]></Implementation>
</Method>

<Method name="DelVerarbAuftraege">
<ClassMethod>1</ClassMethod>
<FormalSpec>AuftrId:%String</FormalSpec>
<Implementation><![CDATA[
	
	if (AuftrId '= "") {
		// Versuchen den Auftrag zu löschen -> wenn es die letzte Charge eines Auftrages
		// ist, wird dies auch glücken
		//w "DEL AUFTR ID GEFUNDEN: "_AuftrId
		if (##class(DBAgrofreshEK.VerarbAuftrag).%ExistsId(AuftrId)) {
			set s =  ##class(DBAgrofreshEK.VerarbAuftrag).%DeleteId(AuftrId)
			//w !,"STATUS VERARBLöschung: "_s,!
		}
	}
]]></Implementation>
</Method>

<Method name="DelQSMeldung">
<ClassMethod>1</ClassMethod>
<FormalSpec>ChargenOid:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	
	set sc = $$$OK
	
	//VerarbAufwand löschen
	Set strSQL="SELECT ID FROM DBAgrofreshEK.QSMeldung WHERE Charge = "_ChargenOid
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	
	if ($$$ISOK(sc)) {
		While (rs.Next(.sc)) {
			Set id = rs.Data("ID")
			if (id '= "") {
				Set sc = ##class(DBAgrofreshEK.QSMeldung).%DeleteId(id)	
			}
		}
	}
	Quit sc
]]></Implementation>
</Method>

<Method name="GetNextJournalNrByMand">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set journalNr = 0
	&SQL(SELECT MAX(JournalNr) into :journalNr FROM DBAgrofreshEK.ChargenEingang WHERE Mandant = :MandOid)
	Quit:(SQLCODE'=0) 1
	Quit journalNr + 1
]]></Implementation>
</Method>

<Method name="%OnAfterSave">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Save</METHOD> method to 
provide notification that the object is being saved. It is called after 
the object's data has been successfully written to disk.

<P><VAR>insert</VAR> will be set to 1 if this object is being saved for the first time.

<P>If this method returns an error then the call to <METHOD>%Save</METHOD> will fail.]]></Description>
<FormalSpec>insert:%Boolean</FormalSpec>
<Private>1</Private>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	if ((..VerarbeitungAktiv = 1) && ($Get(^StoppTriggerChargenEingang(..%Id())) '= 1)) {
		// Prüfung verarbeitung auf aktueller Charge
		//w "Menge: ", ..MengeEingang, !
		//w "Menge Verarbeitung Verfügbar", ..MengeVerarbeitungVerfuegbar, !
		if ((+..MengeVerarbeitung = +..MengeDefVerarbeitet) || (+..MengeVerarbeitungVerfuegbar = 0)) {
			Set ^StoppTriggerChargenEingang(..%Id()) = 1
			set ..VerarbeitungAktiv = 0
			d ..%Save()
			Kill ^StoppTriggerChargenEingang(..%Id())
		}
	}
	// Neu Prüfung auf Verarbeitungsauftrag, jedoch erst auskommentiert, dh 04.06.2011
		// Prüfung verarbeitung auf Originalcharge
	/*if ((..OriginalCharge '= $c(0)) && (..OriginalCharge '= "")) {
		if ((..OriginalCharge.VerarbeitungAktiv = 1) && ($Get(^StoppTriggerChargenEingang(..OriginalCharge.%Id())) '= 1)) {
			//w "Menge OriginalCharge Verarbeitung Verfügbar", ..MengeVerarbeitungVerfuegbar, !
			if (..OriginalCharge.MengeVerarbeitungVerfuegbar <= 0) {
				Set ^StoppTriggerChargenEingang(..OriginalCharge.%Id()) = 1
				set originalCharge = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(..OriginalCharge.%Id())
				if ((originalCharge '= "") && (originalCharge '= $c(0))) {
					set originalCharge.VerarbeitungAktiv = 0
					d originalCharge.%Save()
				}
				Kill ^StoppTriggerChargenEingang(..OriginalCharge.%Id())
			}
		}
	}*/
	if (($Get(^StoppTriggerChargenEingang(..%Id())) '= 1)) {
		if (((..MengeVerfuegbar = 0) || (..MengeVerfuegbar = $c(0)) || (..MengeVerfuegbar = $$$NULLOREF)) && 
		((..Provisorisch = 0) || (..Provisorisch = $c(0)) || (..Provisorisch = $$$NULLOREF) || (..Provisorisch = "")) &&
		((..IsMischposten = 0) || (..IsMischposten = $c(0)) || (..IsMischposten = $$$NULLOREF) || (..MengeEingang > 0))) {
			Set ^StoppTriggerChargenEingang(..%Id()) = 1
			set ..ErledigtDatum = +$h	
			d ..%Save()
			Kill ^StoppTriggerChargenEingang(..%Id())
		
		} elseif ((..RetourenPos = 1) && (..AnzahlGebinde < 0) && (..AusVerarbeitung = 1)) {
			//Retouren Aus Kalibierung auf Erledigt setzten
			Set ^StoppTriggerChargenEingang(..%Id()) = 1
			set ..ErledigtDatum = +$h	
			d ..%Save()
			Kill ^StoppTriggerChargenEingang(..%Id())
		}
		
		if ((..OriginalCharge '= $$$NULLOREF) && (..OriginalCharge '= "") && (..OriginalCharge '= $c(0))) {
			if (($Get(^StoppTriggerChargenEingang(..OriginalCharge)) '= 1) && (..OriginalCharge.MengeVerfuegbar = 0) && (..OriginalCharge.Provisorisch = 0)) {
				Set ^StoppTriggerChargenEingang(..OriginalCharge) = 1
				set orig = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(..OriginalCharge.%Id())
				if ((orig '= $$$NULLOREF) && (orig '= "") && (orig '= $c(0))) {
					set orig.ErledigtDatum = +$h	
					d orig.%Save()
					k orig
				}
				Kill ^StoppTriggerChargenEingang(..OriginalCharge)
			}
		}
	}
	set id = ..%Id()
	// Bei Retourenpositionen Menge Verarbeitung nachführen
	set bestPosId = ##class(DBAgrofreshEK.Bestellungspos).GetOidByChargenId(..%Id())
	//w "ChargenEingang After Save Mengenanpassung mit: ", ..RetourenPos, !, "Kalibrierung: ", ..AusKalibrierung, !, "bestPosId ", bestPosId, !
	if (((..RetourenPos = 1) && ((..AusKalibrierung = 0) ||(..AusKalibrierung = $$$NULLOREF))) && ((bestPosId '= $c(0)) && (bestPosId '= ""))) {
		// Alte Menge Stornieren wenn aus edit
		if (insert = 0) {
			Set anzahlGeb = $Get(^CEOldStornoValues(id, 1))
			Set menge = $Get(^CEOldStornoValues(id, 2))
			Set originalChargeId = $Get(^CEOldStornoValues(id, 3))
		
			if ((+anzahlGeb '= 0) ||(+menge '= 0)) {
				//w "ChargenEingang After Save Storniere Menge: ", +menge, !
				d ##class(DBAgrofreshEK.ChargenEingang).AddMengeToVerarbeitung(originalChargeId, anzahlGeb, menge, 1)
			}
		}
		if ((..OriginalCharge '= $c(0)) && (..OriginalCharge '= "")) {
			// Neue Menge wieder gutschreiben
			//w "ChargenEingang After Save Addiere Menge: ", ..MengeEingang, !
			d ##class(DBAgrofreshEK.ChargenEingang).AddMengeToVerarbeitung(..OriginalCharge.%Id(), ..AnzahlGebinde, ..MengeEingang, 0)
		}
	}
	// Wenn teil von Verarbeitung, Menge auf Verarbeitungsauftrag neu rechnen lassen
	if ((..VerarbeitungsAuftrag '= $$$NULLOREF)) {
		Set menge = $Get(^CEOldStornoValues(id, 2))
		if (menge '= ..MengeEingang) {
			d ##class(DBAgrofreshEK.VerarbAuftrag).RecalcMengeByAuftrag(..VerarbeitungsAuftrag.%Id())
		}
	}
	// Mischposten nachführen
	if (insert = 0) {
		Set anzahlGeb = $Get(^CEOldStornoValues(id, 1))
		Set menge = $Get(^CEOldStornoValues(id, 2))
		Set mischpostenId = $Get(^CEOldStornoValues(id, 4))
	
		if ((mischpostenId '= "") || (+anzahlGeb '= 0) ||(+menge '= 0)) {
			d ##class(DBAgrofreshEK.ChargenEingang).AddMengeToMischposten(mischpostenId, anzahlGeb, menge, 1)
		}
	}
	if ((..Mischposten '= $$$NULLOREF) && (..Mischposten '= "")) {
		// Neue Menge wieder gutschreiben
		d ##class(DBAgrofreshEK.ChargenEingang).AddMengeToMischposten(..Mischposten, ..AnzahlGebinde, ..MengeEingang, 0)
	}
	k ^CEOldStornoValues(id)
	// Wenn Kalibrierung auf Bestellungspos Menge nachführen
	if ((..AusKalibrierung = 1) && ((bestPosId '= $c(0)) && (bestPosId '= ""))) {
		set bestpos = ##class(DBAgrofreshEK.Bestellungspos).%OpenId(bestPosId)
		if (bestpos '= $c(0)) {
			set bestpos.Menge = ..MengeEingang
			set bestpos.BestellteMenge = ..MengeBestellt
			set bestpos.Qualitaet = ..Qualitaet
			set bestpos.Herkunft = ..Herkunft
			set bestpos.Produktionsart = ..Produktionsart
			d bestpos.%Save()
		}
	}
	Quit $$$OK
]]></Implementation>
</Method>

<Method name="%OnBeforeSave">
<FormalSpec>insert:%Boolean</FormalSpec>
<Private>1</Private>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	// Anzahl zu druckende Etiketten berechnen
	set mandId = ..Mandant
	/// Konstante, für wieviele Gebinde eine Etikette gedruckt werden soll
	set calcProGeb = ##class(DBCore.MandantEinstellung).GetIntEinst(mandId, ##class(DBAgrofreshEK.Konst).EtikettenEtiketteProGeb()) //progeb
	/// Konstante, für wieviele Etikketnen pro Gebinde gedruckt werden sollen
	set calcJeGeb = ##class(DBCore.MandantEinstellung).GetIntEinst(mandId, ##class(DBAgrofreshEK.Konst).EtikettenEtiketteJeGeb()) //jeGeb
	
	set anzahlGebinde = ..AnzahlGebinde
	
	if ((..Gebinde '= $C(0)) && (..Gebinde '= "")) {
		if (+..Gebinde.AnzahlEtikettenJeGebinde '= 0) {
			set calcProGeb = ..Gebinde.AnzahlEtikettenJeGebinde 
		}
		if (+..Gebinde.EtiketteJeGebinde '= 0) {
		set calcJeGeb = ..Gebinde.EtiketteJeGebinde
		}
	}
	if (calcProGeb = 0) {
		set calcProGeb = 1
	}
	if (calcJeGeb = 0) {
		set calcJeGeb = 1
	}
	set anzahlEtiketten = 0
	&sql(SELECT TOP 1 CEILING((:anzahlGebinde / :calcJeGeb) * :calcProGeb) into :anzahlEtiketten FROM DBAgrofreshEK.ChargenEingang)
	set ..AnzahlEtiketten = anzahlEtiketten
	
	// brauchs auch zum Verarbeitungsauftrag neu rechnen falls menge gewechselt.
	// oder für Mischposten neu rechnen
	if ((insert = 0) && ((..RetourenPos = 1) || (..VerarbeitungsAuftrag '= $$$NULLOREF) || ((..Mischposten '= "") || (..Mischposten '= $$$NULLOREF)))) {
		set anzahlGeb = 0
		set menge = 0
		set originalChargeId = ""
		set mischpostenId = ""
		set id = ..%Id()
		
		&SQL(SELECT AnzahlGebinde, MengeEingang, OriginalCharge, Mischposten into :anzahlGeb, :menge, :originalChargeId, :mischpostenId FROM DBAgrofreshEK.ChargenEingang WHERE ID = :id)
		if (SQLCODE '= 0) {
			set anzahlGeb = 0
			set menge = 0
			set originalChargeId = ""
			set mischpostenId = ""
		}
		// Werte für wenn Stornierung neu berrechnen
		Set ^CEOldStornoValues(id, 1) = anzahlGeb
		Set ^CEOldStornoValues(id, 2) = menge
		Set ^CEOldStornoValues(id, 3) = originalChargeId
		Set ^CEOldStornoValues(id, 4) = mischpostenId
	}
	Quit $$$OK
]]></Implementation>
</Method>

<Method name="GetMengeTransportiertClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set mengeTransportiert = 0
	&sql(SELECT SUM(MengeEingang)
			INTO :mengeTransportiert
		FROM DBAgrofreshEK.ChargenEingang WHERE OriginalCharge = :chargenOid AND NVL(Aufgeteilt,0) = 1)
		
	if (SQLCODE '= 0) {
		set mengeTransportiert = 0
	}
	quit mengeTransportiert
]]></Implementation>
</Method>

<Method name="GetAnzGebTransportiertClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set anzGeb = 0
	&sql(SELECT SUM(AnzahlGebinde)
			INTO :anzGeb
		FROM DBAgrofreshEK.ChargenEingang WHERE OriginalCharge = :chargenOid AND NVL(Aufgeteilt,0) = 1)
		
	if (SQLCODE '= 0) {
		set anzGeb = 0
	}
	quit anzGeb
]]></Implementation>
</Method>

<Method name="AddMengeToVerarbeitung">
<ClassMethod>1</ClassMethod>
<FormalSpec>OriginalChargenOid:%String,AnzahlGebinde:%Integer,Menge:%Decimal,Storno:%Boolean</FormalSpec>
<Implementation><![CDATA[
	if ((OriginalChargenOid '= "") && (OriginalChargenOid '= $c(0))) {
		w "AddMengeToVerarbeitung: ", OriginalChargenOid, " Anz: ", AnzahlGebinde, " Menge: ", Menge, " Storno: ", Storno, !
		set orig = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(OriginalChargenOid)
		if ((orig '= "" ) && (orig '= $c(0))) {
			set faktor = -1
			if (Storno = 1) {
				set faktor = 1
			}
			set orig.MengeVerarbeitung = orig.MengeVerarbeitung + (faktor * Menge)
			set orig.AnzahlGebindeVerarbeitung = orig.AnzahlGebindeVerarbeitung + (faktor * AnzahlGebinde)
			d orig.%Save()
		}
	}
]]></Implementation>
</Method>

<Method name="AddMengeToMischposten">
<ClassMethod>1</ClassMethod>
<FormalSpec>MischpostenId:%String,AnzahlGebinde:%Integer,Menge:%Decimal,Storno:%Boolean</FormalSpec>
<Implementation><![CDATA[
	if ((MischpostenId '= "") && (MischpostenId '= $$$NULLOREF)) {
		//w "AddMengeToMischposten: ", MischpostenId, " Anz: ", AnzahlGebinde, " Menge: ", Menge, " Storno: ", Storno, !
		set orig = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(MischpostenId)
		if ((orig '= "" ) && (orig '= $c(0))) {
			set faktor = 1
			if (Storno = 1) {
				set faktor = -1
			}
			set orig.MengeEingang = orig.MengeEingang + (faktor * Menge)
			set orig.MengeBestellt = orig.MengeEingang
			set orig.AnzahlGebinde = orig.AnzahlGebinde + (faktor * AnzahlGebinde)
			set orig.Bestellt = orig.AnzahlGebinde
			d orig.%Save()
		}
	}
]]></Implementation>
</Method>

<Method name="GetMengeVerfuegbarPerDatumClass">
<Description>
Bei Menge Per Datum muss folgendes Berücksichtigt werden:
Verlust ist nicht per Datum und wird immer direkt abgezogen.
Direktverkauf und Menge in Verarbeitung muss Abends wieder zurückgesetzt werden, 
deshalb werden diese nicht berücksichtigt.</Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String,PerDatum:%Date</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set sumMenge = 0
	set korrektur = 0
	
	&sql(SELECT SUM(NVL(MengeAusgang,0)), SUM(NVL(GewichtsKorrekturAnteil,0)) INTO :sumMenge, :korrektur FROM DBAgrofreshEK.ChargenAusgang
		 WHERE Charge = :chargenOid AND AusgangsDatum <= TO_DATE(:PerDatum))
	// Falls SQL Satement nicht erfolgreich ist menge 0
	if (SQLCODE'=0) {
		set sumMenge = 0
		set korrektur = 0
	}
	set sumVerarbeitungen = 0
	set mengeEingang = 0
	
	&sql(SELECT MengeEingang
			INTO :mengeEingang
		FROM DBAgrofreshEK.ChargenEingang WHERE ID = :chargenOid)
		
	if (SQLCODE'=0) {
		set mengeEingang = 0
	}
	// Verlust in Menge enthalten	
	//&sql(SELECT ABS(SUM(NVL(Menge,0))) + SUM(NVL(VerlustMenge,0))
	&sql(SELECT SUM(NVL(Menge,0))
			INTO :sumVerarbeitungen
		FROM DBAgrofreshEK.VerarbAuftrag WHERE Charge = :chargenOid AND Lieferdatum <= TO_DATE(:PerDatum))
		
	if (SQLCODE'=0) {
		set sumVerarbeitungen = 0
	}
	Quit mengeEingang - sumMenge - sumVerarbeitungen + korrektur
]]></Implementation>
</Method>

<Method name="GetAnzGebVerfPerDatumClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String,PerDatum:%Date</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set sumMenge = 0
	
	&sql(SELECT SUM(AnzahlGebinde) INTO :sumMenge FROM DBAgrofreshEK.ChargenAusgang
		 WHERE Charge = :chargenOid AND AusgangsDatum <= TO_DATE(:PerDatum))
	// Falls SQL Satement nicht erfolgreich ist menge 0
	if (SQLCODE'=0) {
		set sumMenge = 0
	}
	set sumVerarbeitungen = 0
	//&sql(SELECT ABS(SUM(NVL(AnzahlGebinde,0))) + SUM(NVL(VerlustAnzGeb,0))
	// Verlust in anzahl gebinde enthalten
	&sql(SELECT SUM(NVL(AnzahlGebinde,0))
			INTO :sumVerarbeitungen
		FROM DBAgrofreshEK.VerarbAuftrag WHERE Charge = :chargenOid AND Lieferdatum <= TO_DATE(:PerDatum))
		
	if (SQLCODE'=0) {
		set sumVerarbeitungen = 0
	}
	
	set mengeEingang = 0
	
	&sql(SELECT AnzahlGebinde
			INTO :mengeEingang
		FROM DBAgrofreshEK.ChargenEingang WHERE ID = :chargenOid)
	if (SQLCODE'=0) {
		set mengeEingang = 0
	}
	
	// Verlust ist in Verarbeitungen enthalten
	Quit mengeEingang - sumMenge - sumVerarbeitungen
]]></Implementation>
</Method>

<Method name="GetVerlustMengeGesamtClass">
<Description>
Charge und Artikel.Mengeneinheit.CodeEinheit</Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set verlust = 0
	&sql(SELECT SUM(VerlustMenge)
			INTO :verlust
		FROM DBAgrofreshEK.VerarbAuftrag WHERE Charge = :chargenOid)	

	Quit:(SQLCODE'=0) 0
	Quit verlust
]]></Implementation>
</Method>

<Method name="GetVerlustAnzGebGesamtClass">
<Description>
Charge und Artikel.Mengeneinheit.CodeEinheit</Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set verlust = 0
	&sql(SELECT SUM(VerlustAnzGeb)
			INTO :verlust
		FROM DBAgrofreshEK.VerarbAuftrag WHERE Charge = :chargenOid)	

	Quit:(SQLCODE'=0) 0
	Quit verlust
]]></Implementation>
</Method>

<Method name="GetAnzVerarbPosByChargeClass">
<Description>
Charge und Artikel.Mengeneinheit.CodeEinheit</Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>chargenOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set anz = 0
	&sql(SELECT Count(ID)
			INTO :anz
		FROM DBAgrofreshEK.ChargenEingang WHERE OriginalCharge = :chargenOid AND (AusKalibrierung= 1 OR AusVerarbeitung = 1))	

	Quit:(SQLCODE'=0) 0
	Quit anz
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.ChargenEingangD</DataLocation>
<DefaultData>ChargenEingangDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.ChargenEingangD</IdLocation>
<IndexLocation>^DBAgrofreshEK.ChargenEingangI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.ChargenEingangS</StreamLocation>
<Data name="ChargenEingangDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>ChargenNr</Value>
</Value>
<Value name="3">
<Value>Status</Value>
</Value>
<Value name="4">
<Value>Belegnummer</Value>
</Value>
<Value name="5">
<Value>Belegtext</Value>
</Value>
<Value name="6">
<Value>Lieferant</Value>
</Value>
<Value name="7">
<Value>EingangsDatum</Value>
</Value>
<Value name="8">
<Value>TageVerfall</Value>
</Value>
<Value name="9">
<Value>Parzelle</Value>
</Value>
<Value name="10">
<Value>Artikel</Value>
</Value>
<Value name="11">
<Value>Herkunft</Value>
</Value>
<Value name="12">
<Value>Zulieferant</Value>
</Value>
<Value name="13">
<Value>AnzahlGebinde</Value>
</Value>
<Value name="14">
<Value>Gebinde</Value>
</Value>
<Value name="15">
<Value>MengeJeGebinde</Value>
</Value>
<Value name="16">
<Value>Einzelgewicht</Value>
</Value>
<Value name="17">
<Value>MengeEingang</Value>
</Value>
<Value name="18">
<Value>AnzahlEtiketten</Value>
</Value>
<Value name="19">
<Value>AnzahlEtikettenGedruckt</Value>
</Value>
<Value name="20">
<Value>Preis</Value>
</Value>
<Value name="21">
<Value>Betrag</Value>
</Value>
<Value name="22">
<Value>Mandant</Value>
</Value>
<Value name="23">
<Value>ZeitEingang</Value>
</Value>
<Value name="24">
<Value>LagerEffektiv</Value>
</Value>
<Value name="25">
<Value>Eingangspreis</Value>
</Value>
<Value name="26">
<Value>LagerAufnahme</Value>
</Value>
<Value name="27">
<Value>OriginalCharge</Value>
</Value>
<Value name="28">
<Value>Bemerkung</Value>
</Value>
<Value name="29">
<Value>Bestellt</Value>
</Value>
<Value name="30">
<Value>PositionsNr</Value>
</Value>
<Value name="31">
<Value>Year</Value>
</Value>
<Value name="32">
<Value>Qualitaet</Value>
</Value>
<Value name="33">
<Value>VerarbeitungsAuftrag</Value>
</Value>
<Value name="34">
<Value>VerarbeitungAktiv</Value>
</Value>
<Value name="35">
<Value>Abteilung</Value>
</Value>
<Value name="36">
<Value>Lagerort</Value>
</Value>
<Value name="37">
<Value>Abzugstyp</Value>
</Value>
<Value name="38">
<Value>Direktverkauf</Value>
</Value>
<Value name="39">
<Value>Produktionsart</Value>
</Value>
<Value name="40">
<Value>Statusa</Value>
</Value>
<Value name="41">
<Value>LagerBew</Value>
</Value>
<Value name="42">
<Value>JournalNr</Value>
</Value>
<Value name="43">
<Value>MengeVerarbeitung</Value>
</Value>
<Value name="44">
<Value>AnzahlGebindeVerarbeitung</Value>
</Value>
<Value name="45">
<Value>Verlust</Value>
</Value>
<Value name="46">
<Value>MengeBestellt</Value>
</Value>
<Value name="47">
<Value>RetourenPos</Value>
</Value>
<Value name="48">
<Value>Provisorisch</Value>
</Value>
<Value name="49">
<Value>GebindeDirektverkauf</Value>
</Value>
<Value name="50">
<Value>AnzahlGebindeVerarbeitungProv</Value>
</Value>
<Value name="51">
<Value>AnzahlGebindeVerlust</Value>
</Value>
<Value name="52">
<Value>AnzahlGebDirektverkauf</Value>
</Value>
<Value name="53">
<Value>Transportschein</Value>
</Value>
<Value name="54">
<Value>Aufgeteilt</Value>
</Value>
<Value name="55">
<Value>AusVerarbeitung</Value>
</Value>
<Value name="56">
<Value>LagerzugangsKopf</Value>
</Value>
<Value name="57">
<Value>Kalibrierung</Value>
</Value>
<Value name="58">
<Value>GewichtKorrektur</Value>
</Value>
<Value name="59">
<Value>AusKalibrierung</Value>
</Value>
<Value name="60">
<Value>MengeEingangStk</Value>
</Value>
<Value name="61">
<Value>MengeEingangKg</Value>
</Value>
<Value name="62">
<Value>MengeDefVerarbeitet</Value>
</Value>
<Value name="63">
<Value>AnzahlGebDefVerarbeitet</Value>
</Value>
<Value name="64">
<Value>ErfassteBestPos</Value>
</Value>
<Value name="65">
<Value>AnzGebKalibrierung</Value>
</Value>
<Value name="66">
<Value>MengeKalibrierung</Value>
</Value>
<Value name="67">
<Value>Mischposten</Value>
</Value>
<Value name="68">
<Value>IsMischposten</Value>
</Value>
<Value name="69">
<Value>ErledigtDatum</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Abteilung">
</Property>
<Property name="Abzugstyp">
</Property>
<Property name="AnzGebKalibrierung">
</Property>
<Property name="AnzahlEtiketten">
</Property>
<Property name="AnzahlEtikettenGedruckt">
</Property>
<Property name="AnzahlGebDefVerarbeitet">
</Property>
<Property name="AnzahlGebDirektverVerfuegbar">
</Property>
<Property name="AnzahlGebDirektverkauf">
</Property>
<Property name="AnzahlGebinde">
</Property>
<Property name="AnzahlGebindeVerarbVerfuegbar">
</Property>
<Property name="AnzahlGebindeVerarbeitung">
</Property>
<Property name="AnzahlGebindeVerarbeitungProv">
</Property>
<Property name="AnzahlGebindeVerfuegbar">
</Property>
<Property name="AnzahlGebindeVerlust">
</Property>
<Property name="Artikel">
</Property>
<Property name="Aufgeteilt">
</Property>
<Property name="AusKalibrierung">
</Property>
<Property name="AusVerarbeitung">
</Property>
<Property name="Belegnummer">
</Property>
<Property name="Belegtext">
</Property>
<Property name="Bemerkung">
</Property>
<Property name="Bestellt">
</Property>
<Property name="Betrag">
</Property>
<Property name="ChargenNr"/>
<Property name="Direktverkauf">
</Property>
<Property name="DirektverkaufVerfuegbar">
</Property>
<Property name="EingangsDatum">
</Property>
<Property name="Eingangspreis">
</Property>
<Property name="Einzelgewicht">
</Property>
<Property name="ErfassteBestPos"/>
<Property name="ErledigtDatum">
</Property>
<Property name="Gebinde">
</Property>
<Property name="GebindeDirektverkauf"/>
<Property name="GebindeDirektverkaufVerfuegbar"/>
<Property name="GewichtKorrektur">
</Property>
<Property name="Herkunft">
</Property>
<Property name="IsMischposten">
</Property>
<Property name="Jahr">
</Property>
<Property name="JournalNr">
</Property>
<Property name="Kalibrierung">
</Property>
<Property name="LagerAufnahme">
</Property>
<Property name="LagerBew"/>
<Property name="LagerEffektiv">
</Property>
<Property name="Lagerort">
</Property>
<Property name="Lieferant">
</Property>
<Property name="Mandant">
</Property>
<Property name="MengeBestellt">
</Property>
<Property name="MengeDefVerarbeitet">
</Property>
<Property name="MengeEingang">
</Property>
<Property name="MengeEingangKg">
</Property>
<Property name="MengeInKg"/>
<Property name="MengeJeGebinde">
</Property>
<Property name="MengeKalibrierung">
</Property>
<Property name="MengeVerarbeitung">
</Property>
<Property name="MengeVerarbeitungProv">
</Property>
<Property name="MengeVerarbeitungVerfuegbar">
</Property>
<Property name="MengeVerfuegbar">
</Property>
<Property name="MengeVerfuegbarInKg"/>
<Property name="Mischposten">
</Property>
<Property name="OriginalCharge">
</Property>
<Property name="Parzelle">
</Property>
<Property name="PositionsNr">
</Property>
<Property name="Preis">
</Property>
<Property name="Produktionsart">
</Property>
<Property name="Provisorisch">
</Property>
<Property name="Qualitaet">
</Property>
<Property name="RetourenPos">
</Property>
<Property name="Status">
</Property>
<Property name="StrId">
</Property>
<Property name="TageVerfall">
</Property>
<Property name="Transportschein">
</Property>
<Property name="VerarbeitungAktiv">
</Property>
<Property name="VerarbeitungsAuftrag">
</Property>
<Property name="Verlust">
</Property>
<Property name="VerlustAnzGebindeGesamt">
</Property>
<Property name="VerlustMengeGesamt">
</Property>
<Property name="ZeitEingang">
</Property>
<Property name="Zulieferant">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.Eingangspreis">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62416,57210.770126</TimeChanged>
<TimeCreated>61479,31174.897833</TimeCreated>
<Inheritance>right</Inheritance>

<Property name="LagerEffMenge">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="LagerEffPreis">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="PreisAusbezahlt">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="ChargenEingangPreis">
<Type>DBAgrofreshEK.ChargenEingang</Type>
<Cardinality>many</Cardinality>
<Inverse>Eingangspreis</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.EingangspreisD</DataLocation>
<DefaultData>EingangspreisDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.EingangspreisD</IdLocation>
<IndexLocation>^DBAgrofreshEK.EingangspreisI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.EingangspreisS</StreamLocation>
<Data name="EingangspreisDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>LagerEffMenge</Value>
</Value>
<Value name="3">
<Value>LagerEffPreis</Value>
</Value>
<Value name="4">
<Value>PreisAusbezahlt</Value>
</Value>
</Data>
<Property name="LagerEffMenge"/>
<Property name="LagerEffPreis"/>
<Property name="PreisAusbezahlt"/>
</Storage>
</Class>


<Class name="DBAgrofreshEK.GebDetail">
<Description>
</Description>
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61102,37876.666847</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Datum">
<Description>
Datum</Description>
<Type>%Date</Type>
</Property>

<Property name="Verrechnet">
<Description>
Verrechnet</Description>
<Type>%Boolean</Type>
</Property>

<Property name="AnlieferungMenge">
<Description>
Anlieferung Menge</Description>
<Type>%Integer</Type>
</Property>

<Property name="AnlieferungBetrag">
<Description>
Anlieferung Betrag</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="AuslieferungMenge">
<Description>
Auslieferung Menge</Description>
<Type>%Integer</Type>
</Property>

<Property name="AuslieferungBetrag">
<Description>
Auslieferung Betrag</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebindePreis">
<Description>
Preis des Gebinde zum Annahmezeitpunkt</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebindeSaldoMenge">
<Description>
Saldo(Lieferungen - Retouren)</Description>
<Type>%Integer</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GebindeSaldoMenge}=##class(DBAgrofreshEK.GebDetail).GebindeSaldoMengeClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
</Property>

<Property name="GebindeSaldoBetragExklMwst">
<Description>
Saldo(Lieferungen - Retouren)</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GebindeSaldoBetragExklMwst}=##class(DBAgrofreshEK.GebDetail).GebindeSaldoBetragExklMwstClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebindeSaldoBetragInklMwst">
<Description>
Saldo(Lieferungen - Retouren)</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GebindeSaldoBetragInklMwst}=##class(DBAgrofreshEK.GebDetail).GebindeSaldoBetragInklMwstClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebindeSaldoBetragMwst">
<Description>
Saldo(Lieferungen - Retouren)</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GebindeSaldoBetragMwst}=##class(DBAgrofreshEK.GebDetail).GebindeSaldoBetragMwstClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebindeSaldoBetragExklMwstFW">
<Description>
Saldo(Lieferungen - Retouren)</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GebindeSaldoBetragExklMwstFW}=##class(DBAgrofreshEK.GebDetail).GebindeSaldoBetExklMwstFWClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebindeSaldoBetragInklMwstFW">
<Description>
Saldo(Lieferungen - Retouren)</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GebindeSaldoBetragInklMwstFW}=##class(DBAgrofreshEK.GebDetail).GebindeSaldoBetInklMwstFWClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebindeSaldoBetragMwstFW">
<Description>
Saldo(Lieferungen - Retouren)</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GebindeSaldoBetragMwstFW}=##class(DBAgrofreshEK.GebDetail).GebindeSaldoBetMwstFWClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Mwst">
<Type>DBFibu.SD.Mwst</Type>
<Cardinality>one</Cardinality>
<Inverse>GebDetailEKMwst</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Mwst"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="MwstIndex">
<Properties>Mwst</Properties>
</Index>

<Property name="MwstSatz">
<Description>
Mwst-Satz</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebKontr">
<Type>DBAgrofreshEK.GebKontr</Type>
<Cardinality>parent</Cardinality>
<Inverse>GebDetail</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="GebKontr"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="Bestellung">
<Type>DBAgrofreshEK.BestellungsKopf</Type>
<Cardinality>one</Cardinality>
<Inverse>GDBestellung</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Bestellung"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="BestellungIndex">
<Properties>Bestellung</Properties>
</Index>

<Property name="GebindeSaldoVortrag">
<Description>
SaldoVortrag</Description>
<Type>%Integer</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GebindeSaldoVortrag}=##class(DBAgrofreshEK.GebDetail).GebindeSaldoVortragClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
</Property>

<Property name="GebindeMiete">
<Description>
Preis des Gebinde Miete zum Annahmezeitpunkt</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebindeAdminKosten">
<Description>
Preis der Gebinde Administrationskosten zum Annahmezeitpunkt</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebindeSaldoBetragMiete">
<Description>
Saldo</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GebindeSaldoBetragMiete}=##class(DBAgrofreshEK.GebDetail).GebindeSaldoBetragMieteClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebindeSaldoBetragAdmin">
<Description>
Saldo</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GebindeSaldoBetragAdmin}=##class(DBAgrofreshEK.GebDetail).GebindeSaldoBetragAdminClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebindePreisTotal">
<Description>
Preis des Gebinde inkl Miete und Administrationskosten</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GebindePreisTotal}=##class(DBAgrofreshEK.GebDetail).GebindePreisTotalClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GebindeSaldoBetragBetrag">
<Description>
Saldo</Description>
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GebindeSaldoBetragBetrag}=##class(DBAgrofresh.GebDetail).GebindeSaldoBetragBetragClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<UDLText name="T">
<Content><![CDATA[
//Adminkosten je Ladung

]]></Content>
</UDLText>

<Property name="AdminKostenJeLadung">
<Type>%Boolean</Type>
</Property>

<Property name="GebindePreisFW">
<Description>
Preis des Gebinde zum Lieferzeitpunkt</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="NieVerrechnen">
<Description>
NieVerrechnen</Description>
<Type>%Boolean</Type>
</Property>

<Method name="GebindeSaldoBetragBetragClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>ID:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	if (ID '= "") {
		set obj = ##class(DBAgrofreshEK.GebDetail).%OpenId(ID)
		if (obj '= "") {
			set menge = obj.GebindeSaldoMenge 
			set betrag = (menge * obj.GebindePreis)
			k obj
		}
	}
	Quit betrag
]]></Implementation>
</Method>

<Method name="DeletePositonsByBestellung">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestellungOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	Set strSQL="DELETE FROM DBAgrofreshEK.GebDetail WHERE Bestellung = "_BestellungOid
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	Quit $$$ISOK(sc)
]]></Implementation>
</Method>

<Method name="DeleteVerBarPositonsByBest">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestellungOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	Set strSQL="DELETE FROM DBAgrofreshEK.GebDetail WHERE Bestellung ='"_BestellungOid_"' AND GebKontr->Gebinde->GebindeNr < DBAgrofresh.Konst_GebindeFirstNichtVerrechenbar()"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	//w "Delete GebindePositions by Bestellung Status = "_sc,!
	Quit $$$ISOK(sc)
]]></Implementation>
</Method>

<Method name="GetIdByBestellungGebinde">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestellungOid:%String,GebindeOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set MyId = ""
	set strSQL ="SELECT ID FROM DBAgrofreshEK.GebDetail WHERE Bestellung = "_BestellungOid_" AND GebKontr->Gebinde = "_GebindeOid
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
    IF $$$ISOK(sc) {
		IF rs.Next(.sc) {
			Set MyId=rs.Data("ID")
		}
    }
	Quit MyId
]]></Implementation>
</Method>

<Method name="GebindeSaldoMengeClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>ID:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set menge = 0
	if (ID '= "") {
		set obj = ##class(DBAgrofreshEK.GebDetail).%OpenId(ID)
		if (obj '= "") {
			// Wenn gebinde mit Saldovortrag oder Gebinde Verrechnen (nicht je auftrag) muss der Vortrag mitgerechnet werden
			if ((obj.Bestellung '= "") && ((obj.NieVerrechnen = 1) || (obj.Bestellung.GebindeVerrechnung = ##class(DBAgrofresh.Konst).GebindeMitSaldovortrag()))) {
				set menge = (obj.GebindeSaldoVortrag + obj.AnlieferungMenge - obj.AuslieferungMenge)
			} else {
				set menge = (obj.AnlieferungMenge - obj.AuslieferungMenge)
			}
			k obj
		}
	}
	Quit menge
]]></Implementation>
</Method>

<Method name="GebindeSaldoBetragExklMwstClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>ID:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	if (ID '= "") {
		set obj = ##class(DBAgrofreshEK.GebDetail).%OpenId(ID)
		if (obj '= "") {
			/*
			if (obj.Bestellung.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGEXKL()) {
				set betrag = ##class(DBAgrofreshEK.GebDetail).BetragInklAdminMieteClass(ID)
			} else {
				set betrag = obj.GebindeSaldoBetragInklMwst - obj.GebindeSaldoBetragMwst
			}
			*/
			//set betrag = ##class(DBAgrofreshEK.GebDetail).GebindeSaldoBetragInklMwstClass(ID) - ##class(DBAgrofreshEK.GebDetail).GebindeSaldoBetragMwstClass(ID)
			set betrag = ##class(DBAgrofreshEK.GebDetail).BetragInklAdminMieteClass(ID)
			k obj
		}
	}
	Quit betrag
]]></Implementation>
</Method>

<Method name="GebindeSaldoBetragInklMwstClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>ID:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	if (ID '= "") {
		set obj = ##class(DBAgrofreshEK.GebDetail).%OpenId(ID)
		if (obj '= "") {
			/*
			if (obj.Bestellung.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGEXKL()) {
				set betrag = obj.GebindeSaldoBetragExklMwst + obj.GebindeSaldoBetragMwst
			} else {
				set betrag = ##class(DBAgrofreshEK.GebDetail).BetragInklAdminMieteClass(ID)
			}
			*/
			//set betrag = ##class(DBAgrofreshEK.GebDetail).BetragInklAdminMieteClass(ID)
			set betrag = ##class(DBAgrofreshEK.GebDetail).GebindeSaldoBetragExklMwstClass(ID) + ##class(DBAgrofreshEK.GebDetail).GebindeSaldoBetragMwstClass(ID)
			k obj
		}
	}
	Quit betrag
]]></Implementation>
</Method>

<Method name="GebindeSaldoBetragMwstClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>ID:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	if (ID '= "") {
		set obj = ##class(DBAgrofreshEK.GebDetail).%OpenId(ID)
		if (obj '= "") {
			set betrag = ##class(DBAgrofreshEK.GebDetail).BetragInklAdminMieteClass(ID)
			if (obj.Bestellung.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGKEINE()) {
				set betrag = 0
			} else {
				if ((obj.Mwst '= "") && (obj.Mwst '= $c(0)) && (obj.MwstSatz '= 0)) {
					if (obj.Mwst.SteuerungInklExkl = ##class(DBCore.Konst).MWSTSTEUERUNGEXKL()) {
						set betrag = ((betrag / 100) * obj.MwstSatz)
						//set betrag = betrag - (betrag / (1+ (obj.MwstSatz / 100)))
						
					} elseif (obj.Mwst.SteuerungInklExkl = ##class(DBCore.Konst).MWSTSTEUERUNGINKL()) {
						set betrag = ((betrag / 100) * obj.MwstSatz)
						//set betrag = betrag - (betrag / (1+ (obj.MwstSatz / 100)))
						
					} elseif (obj.Mwst.SteuerungInklExkl = ##class(DBCore.Konst).MWSTSTEUERUNGURPROD()) {
						set betrag = (((betrag * (1+ (obj.MwstSatz / 100))) / 100) * obj.MwstSatz)
						
					} else {
						set betrag = 0
					}
				} else {
					set betrag = 0
				}
			}
			/*
			if (obj.Bestellung.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGKEINE()) {
				set betrag = 0
			} elseif (obj.Bestellung.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGINKL()) {
				set betrag = betrag - (betrag / (1+ (obj.MwstSatz / 100)))
			} else {
				set betrag = (betrag / 100 * obj.MwstSatz)
			}
			*/
			set betrag = ##class(DBUtils.NumberUtils).RoundGemEinst(obj.Bestellung.Mandant,betrag)
			k obj
		}
	}
	Quit betrag
]]></Implementation>
</Method>

<Method name="GebindeSaldoBetExklMwstFWClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>ID:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	if (ID '= "") {
		set obj = ##class(DBAgrofreshEK.GebDetail).%OpenId(ID)
		if (obj '= "") {
			set menge = obj.GebindeSaldoMenge
			if (obj.Bestellung.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGEXKL()) {
				set betrag = (menge * obj.GebindePreisFW)
			} else {
				set betrag = obj.GebindeSaldoBetragInklMwstFW - obj.GebindeSaldoBetragMwstFW
			}
			k obj
		}
	}
	Quit betrag
]]></Implementation>
</Method>

<Method name="GebindeSaldoBetInklMwstFWClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>ID:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	if (ID '= "") {
		set obj = ##class(DBAgrofreshEK.GebDetail).%OpenId(ID)
		if (obj '= "") {
			set menge = obj.GebindeSaldoMenge
			if (obj.Bestellung.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGEXKL()) {
				set betrag = obj.GebindeSaldoBetragExklMwstFW + obj.GebindeSaldoBetragMwstFW
			} else {
				set betrag = (menge * obj.GebindePreisFW)
			}
			k obj
		}
	}
	Quit betrag
]]></Implementation>
</Method>

<Method name="GebindeSaldoBetMwstFWClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>ID:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	if (ID '= "") {
		set obj = ##class(DBAgrofreshEK.GebDetail).%OpenId(ID)
		if (obj '= "") {
			set betrag = (obj.GebindeSaldoMenge * obj.GebindePreisFW)
			if (obj.Bestellung.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGKEINE()) {
				set betrag = 0
			} elseif (obj.Bestellung.CodeMwst = ##class(DBCore.Konst).MWSTSTEUERUNGINKL()) {
				set betrag = betrag - (betrag / (1+ (obj.MwstSatz / 100)))
			} else {
				set betrag = (betrag / 100 * obj.MwstSatz)
			}
			set betrag = $NORMALIZE(betrag,2)
			k obj
		}
	}
	Quit betrag
]]></Implementation>
</Method>

<Method name="GebindeSaldoBetragMieteClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>ID:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	if (ID '= "") {
		set obj = ##class(DBAgrofreshEK.GebDetail).%OpenId(ID)
		if (obj '= "") {
			set menge = obj.GebindeSaldoMenge
			set betrag = (menge * obj.GebindeMiete)
			k obj
		}
	}
	Quit betrag
]]></Implementation>
</Method>

<Method name="GebindeSaldoBetragAdminClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>ID:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	if (ID '= "") {
		set obj = ##class(DBAgrofreshEK.GebDetail).%OpenId(ID)
		if (obj '= "") {
			set menge = obj.AuslieferungMenge
			set betrag = (menge * obj.GebindeAdminKosten)
			k obj
		}
	}
	Quit betrag
]]></Implementation>
</Method>

<Method name="BetragInklAdminMieteClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>ID:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	if (ID '= "") {
		set obj = ##class(DBAgrofreshEK.GebDetail).%OpenId(ID)
		if ((obj '= $c(0)) && (obj '= "")) {
			set menge = obj.GebindeSaldoMenge
			set betrag = (menge * obj.GebindePreis)
			set mengeR = obj.AuslieferungMenge
			set mieteBetrag = (menge * obj.GebindeMiete)
			set adminBetrag = 0
			set orderHasDet = ##class(DBAgrofreshEK.Bestellungspos).BestellungHasDetails(obj.Bestellung.%Id())
			if ((mengeR '= 0) && (orderHasDet = 0)) {
				set adminBetrag = (mengeR * obj.GebindeAdminKosten)
			}
			set betrag = betrag + mieteBetrag - adminBetrag
			set betrag = ##class(DBUtils.NumberUtils).RoundGemEinst(obj.Bestellung.Mandant, betrag)
			k obj
		}
	}
	Quit betrag
]]></Implementation>
</Method>

<Method name="GebindePreisTotalClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>ID:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set preis = 0
	if (ID '= "") {
		set obj = ##class(DBAgrofreshEK.GebDetail).%OpenId(ID)
		if (obj '= "") {
			if (obj.GebindePreis '= $c(0)) {
				set preis = (preis + obj.GebindePreis)
			}
			if (obj.GebindeMiete '= $c(0)) {
				set preis = (preis + obj.GebindeMiete)
			}
			set orderHasDet = ##class(DBAgrofreshEK.Bestellungspos).BestellungHasDetails(obj.Bestellung.%Id())
			if ((obj.GebindeAdminKosten '= $c(0)) && (obj.AuslieferungMenge > 0) && (orderHasDet = 0)) {
				set preis = (preis + obj.GebindeAdminKosten)
			}
			//set preis = ((+obj.GebindePreis) + (+obj.GebindeMiete) + (+obj.GebindeAdminKosten))
			k obj
		}
	}
	Quit preis
]]></Implementation>
</Method>

<Method name="%OnBeforeSave">
<FormalSpec>Insert:%Boolean</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	If (Insert=0) {
		set gebindeId = ..%Id()
		set oldAuslieferungen = 0
		set oldAnlieferungen = 0
		set gebKopfId = 0
		set gebAbgerechnet = 0
		&sql(SELECT AuslieferungMenge, AnlieferungMenge, GebKontr->ID, Verrechnet INTO :oldAuslieferungen, :oldAnlieferungen, :gebKopfId, :gebAbgerechnet FROM DBAgrofreshEK.GebDetail WHERE ID=:gebindeId)
		
		Set ^GebDetEKOldValues(gebindeId, 1) = oldAuslieferungen
		Set ^GebDetEKOldValues(gebindeId, 2) = oldAnlieferungen
		Set ^GebDetEKOldValues(gebindeId, 3) = gebKopfId
		Set ^GebDetEKOldValues(gebindeId, 4) = gebAbgerechnet
	}
	Quit $$$OK
]]></Implementation>
</Method>

<Method name="%OnAfterSave">
<FormalSpec>Insert:%Boolean</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	set gebindeId = ..%Id()
	Set oldAnlieferungen = 0
	If (Insert=0) {
		Set oldAuslieferungen = ^GebDetEKOldValues(gebindeId, 1)
		Set oldAnlieferungen = ^GebDetEKOldValues(gebindeId, 2)
		Set gebKopfId = ^GebDetEKOldValues(gebindeId, 3)
		Set gebAbgerechnet = ^GebDetEKOldValues(gebindeId, 4)
		
		do ##class(DBAgrofreshEK.GebDetail).AddBetragToSaldo(gebKopfId, oldAuslieferungen, oldAnlieferungen, gebAbgerechnet, 1)
	}
	
	do ##class(DBAgrofreshEK.GebDetail).AddBetragToSaldo(..GebKontr.%Id(), ..AuslieferungMenge, ..AnlieferungMenge, ..Verrechnet, 0)
	// nicht mutiert setzen wenn Gebinde retouren oder nur Gebinde wegen Lagerghetto
	// bei lieferung ändern jedoch schon.
	// dh nach Absprache mit AW 10.03.2011, und doch mutieret setzten wenn Rechnung dh gem AW 13.04.2011
	if ((oldAnlieferungen '= ..AnlieferungMenge) || (..Bestellung.Bestellstatus >= ##class(DBAgrofreshEK.Konst).BestellungsStatusAbrechnung())) {
		do ##class(DBAgrofreshEK.BestellungsKopf).SetBStatusMutiertClass(..Bestellung.%Id())
	}
	KILL ^GebDetEKOldValues(gebindeId)
	
	Quit $$$OK
]]></Implementation>
</Method>

<Method name="%OnDelete">
<Description>
[Previously private]</Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%ObjectIdentity</FormalSpec>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	//w "DBAgrofreshEK.GebDetail.%OnDelete",!
	set myId = $lg(oid,1)
	
	set gd=##class(DBAgrofreshEK.GebDetail).%OpenId(myId)
	
	if (gd '= "") {
		do ##class(DBAgrofreshEK.GebDetail).AddBetragToSaldo(gd.GebKontr.%Id(), gd.AuslieferungMenge, gd.AnlieferungMenge, gd.Verrechnet, 1)
		do ##class(DBAgrofreshEK.BestellungsKopf).SetBStatusMutiertClass(gd.Bestellung.%Id())
	}
	Quit $$$OK
]]></Implementation>
</Method>

<Trigger name="InsertGebDetail">
<Code>	new newAuslieferungen
	new newAnlieferungen
	new gebKopfId
	
	set gebKopfId = {GebKontr*N}
	set newAuslieferungen = {AuslieferungMenge*N}
	set newAnlieferungen = {AnlieferungMenge*N}
	
	// nicht mutiert setzen wenn Gebinde retouren oder nur Gebinde wegen Lagerghetto
	// bei lieferung ändern jedoch schon.
	// dh nach Absprache mit AW 10.03.2011
	if (+newAnlieferungen '= 0) {
		do ##class(DBAgrofreshEK.BestellungsKopf).SetBStatusMutiertClass({Bestellung*N})
	}
	do ##class(DBAgrofreshEK.GebDetail).AddBetragToSaldo(gebKopfId, newAuslieferungen, newAnlieferungen, 0, 0)</Code>
<Event>INSERT</Event>
<Time>AFTER</Time>
<Foreach>row</Foreach>
</Trigger>

<Trigger name="UpdateGebDetail">
<Code>	new gebKopfId
	new abgerechnet
	new oldAuslieferungen
	new newAuslieferungen
	new oldAnlieferungen
	new newAnlieferungen
	
	set gebKopfId = {GebKontr*N}
	set abgerechnet = {Verrechnet*O}
	set oldAuslieferungen = {AuslieferungMenge*O}
	set oldAnlieferungen = {AnlieferungMenge*O}
	
	do ##class(DBAgrofreshEK.GebDetail).AddBetragToSaldo(gebKopfId, oldAuslieferungen, oldAnlieferungen, abgerechnet, 1)
	
	set abgerechnet = {Verrechnet*N}
	set newAuslieferungen = {AuslieferungMenge*N}
	set newAnlieferungen = {AnlieferungMenge*N}
	
	// nicht mutiert setzen wenn Gebinde retouren oder nur Gebinde wegen Lagerghetto
	// bei lieferung ändern jedoch schon.
	// dh nach Absprache mit AW 10.03.2011
	if (+oldAuslieferungen '= +newAuslieferungen) {
		do ##class(DBAgrofreshEK.BestellungsKopf).SetBStatusMutiertClass({Bestellung*N})
	}
	do ##class(DBAgrofreshEK.GebDetail).AddBetragToSaldo(gebKopfId, newAuslieferungen, newAnlieferungen, abgerechnet, 0)</Code>
<Event>UPDATE</Event>
<Time>AFTER</Time>
<Foreach>row</Foreach>
</Trigger>

<Trigger name="DeleteGebDetail">
<Code>	do ##class(DBAgrofreshEK.BestellungsKopf).SetBStatusMutiertClass({Bestellung*N})

	new newAuslieferungen
	new newAnlieferungen
	new gebKopfId
	new abgerechnet
	set abgerechnet = {Verrechnet*O}
	
	set gebKopfId = {GebKontr*O}
	set newAuslieferungen = {AuslieferungMenge*O}
	set newAnlieferungen = {AnlieferungMenge*O}
		
	do ##class(DBAgrofreshEK.GebDetail).AddBetragToSaldo(gebKopfId, newAuslieferungen, newAnlieferungen, abgerechnet, 1)</Code>
<Event>DELETE</Event>
<Time>AFTER</Time>
<Foreach>row</Foreach>
</Trigger>

<Method name="AddBetragToSaldo">
<ClassMethod>1</ClassMethod>
<FormalSpec>kopfId:%String,oldAuslieferungen:%Decimal(SCALE=5),oldAnlieferungen:%Decimal(SCALE=5),abgerechnet:%Boolean,storno:%Boolean</FormalSpec>
<Implementation><![CDATA[
	if (storno = 1) {
		set oldAuslieferungen = ((-1)*oldAuslieferungen)
		set oldAnlieferungen = ((-1)*oldAnlieferungen)
	}
	
	set dbAnlieferungAbgerechnet = 0
	set dbAuslieferungAbgerechnet = 0
	set dbAuslieferung = 0
	set dbAnlieferung = 0
	
	&sql(SELECT AnlieferungAbgerechnet, 
				AuslieferungAbgerechnet, 
				Anlieferungen, 
				Auslieferungen
			INTO 
				:dbAnlieferungAbgerechnet,
				:dbAuslieferungAbgerechnet,
				:dbAnlieferung,
				:dbAuslieferung
			FROM DBAgrofreshEK.GebKontr WHERE ID=:kopfId)
	
	if (abgerechnet = 1) {
		set newAuslieferungAbgerechnet = dbAuslieferungAbgerechnet + oldAuslieferungen
		set newAnlieferungAbgerechnet = dbAnlieferungAbgerechnet + oldAnlieferungen
		set newAuslieferungen = dbAuslieferung
		set newAnlieferungen = dbAnlieferung
		
	} else {
		set newAuslieferungAbgerechnet = dbAuslieferungAbgerechnet
		set newAnlieferungAbgerechnet = dbAnlieferungAbgerechnet
		set newAuslieferungen = dbAuslieferung + oldAuslieferungen
		set newAnlieferungen = dbAnlieferung + oldAnlieferungen	
	}
	
	&sql(UPDATE DBAgrofreshEK.GebKontr 
			SET AuslieferungAbgerechnet=:newAuslieferungAbgerechnet, 
				AnlieferungAbgerechnet=:newAnlieferungAbgerechnet,
				Auslieferungen=:newAuslieferungen, 
				Anlieferungen=:newAnlieferungen
			WHERE ID=:kopfId)
			
	
	// prüfen ob noch Gebindedetails vorhanden
	// Abfrage
    Set strSQL="SELECT count(*) AS anz FROM DBAgrofreshEK.GebDetail WHERE GebKontr=?"
    Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
    Do rs.Prepare(strSQL)
    Set sc=rs.Execute(kopfId)
    // Result prüfen
    if (rs.Next()) {
	    if (+rs.Data("anz") = 0) {
		    Set strSQL="DELETE FROM DBAgrofreshEK.GebKontr WHERE (ID=?)"
		    Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
		    Do rs.Prepare(strSQL)
		    Set sc=rs.Execute(kopfId)
	    } else {
		    Quit $$$ERROR($$$GeneralError,"Failure: Gebinde Detailpositionen vorhanden")
	    }
    }
]]></Implementation>
</Method>

<Method name="SetGebindeVerrechnet">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestellungOid:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	set strSQL = "UPDATE DBAgrofreshEK.GebDetail SET Verrechnet=1 WHERE NVL(NieVerrechnen,0) = 0 AND Bestellung->ID="_BestellungOid
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
    Quit sc
]]></Implementation>
</Method>

<Method name="SetGebindeNichtVerrechnet">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestellungOid:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	set strSQL = "UPDATE DBAgrofreshEK.GebDetail SET Verrechnet=0 WHERE Bestellung->ID="_BestellungOid
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
    Quit sc
]]></Implementation>
</Method>

<Method name="GebindeSaldoVortragClass">
<Description>
forceVortrag nimmt auch den Saldovortrag mit wenn es auf der Bestellung nicht eingestellt ist (Bsp. Gebindekontrolle)</Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>ID:%String,forceVortrag:%Boolean=0</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set vortrag = 0
	if (ID'="") {
		set obj = ##class(DBAgrofreshEK.GebDetail).%OpenId(ID)
		if ((forceVortrag=1) || ((obj.Bestellung '= "") && ((obj.NieVerrechnen = 1) || (obj.Bestellung.GebindeVerrechnung = ##class(DBAgrofresh.Konst).GebindeMitSaldovortrag())))) {

			set annahmeNr = +obj.Bestellung.AnnahmeNr
			set Datum = obj.Datum
			if (Datum = "") {
				set Datum = obj.Bestellung.Annahmedatum
			}
			set GebKontr = obj.GebKontr.%Id()
			set Saldo = obj.GebKontr.GebindeSaldo
		   	// Wenn Lieferschein vorhanden nach LS gehen
		   	if (obj.Bestellung.Bestellstatus >= ##class(DBAgrofreshEK.Konst).BestellungsStatusAnnahmeschein()) {
				&sql(SELECT(SUM(NVL(AnlieferungMenge,0))-SUM(NVL(AuslieferungMenge,0))) into :vortrag FROM DBAgrofreshEK.GebDetail WHERE (Datum> TO_DATE(:Datum) OR (Datum= TO_DATE(:Datum) AND ((:annahmeNr <> 0 AND Bestellung->AnnahmeNr>=:annahmeNr) OR NVL(Bestellung->AnnahmeNr,0) = 0))) AND GebKontr=:GebKontr AND NVL(Verrechnet,0)<>1)
				if (SQLCODE '= 0) {
					set vortrag = 0
			   	}
		   	} else {
			   	&sql(SELECT(SUM(NVL(AnlieferungMenge,0))-SUM(NVL(AuslieferungMenge,0))) into :vortrag FROM DBAgrofreshEK.GebDetail WHERE  NVL(Bestellung->Bestellstatus,0) < DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() AND NVL(Bestellung->AnnahmeNr,0)=0 AND GebKontr=:GebKontr AND (NVL(Verrechnet,0)<>1 OR NVL(NieVerrechnen,0)=1))
				if (SQLCODE '= 0) {
					set vortrag = 0
			   	}
		   	}
	        set vortrag = Saldo - vortrag
		}
	}
	Quit vortrag
]]></Implementation>
</Method>

<Method name="GebindeSaldoPerDatClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>ID:%String,PerDatum:%Date</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set vortrag = 0
	if (ID'="") {
		set obj = ##class(DBAgrofreshEK.GebDetail).%OpenId(ID)
		
		set annahmeNr = +obj.Bestellung.AnnahmeNr
		set Datum = obj.Datum
		if (Datum = "") {
			set Datum = obj.Bestellung.Annahmedatum
		}
		set GebKontr = obj.GebKontr.%Id()
		&sql(SELECT(SUM(NVL(AnlieferungMenge,0))-SUM(NVL(AuslieferungMenge,0))) into :vortrag FROM DBAgrofreshEK.GebDetail WHERE (Datum< TO_DATE(:Datum) OR (Datum= TO_DATE(:Datum) AND (:annahmeNr = 0 OR Bestellung->AnnahmeNr<:annahmeNr))) AND Datum >= TO_DATE(:PerDatum) AND GebKontr=:GebKontr AND NVL(Verrechnet,0)<>1)
	   	if (SQLCODE '= 0) {
		   	set vortrag = 0
	   	}
	}
	Quit vortrag
]]></Implementation>
</Method>

<Method name="GebindeSaldoPerDatIFCOClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>ID:%String,Lang:%String,PerDatum:%Date</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set vortrag = 0
	if (ID'="") {
		set obj = ##class(DBAgrofreshEK.GebDetail).%OpenId(ID)
		
			set adrOid = obj.Bestellung.Adresse.%Id()
			set Datum = obj.Datum
			if (Datum = "") {
				set Datum = obj.Bestellung.Annahmedatum
			}
			set mandantOid = obj.Bestellung.Mandant
			set strSQL = "SELECT (SUM(NVL(AnlieferungMenge,0))-SUM(NVL(AuslieferungMenge,0))) AS Vortrag FROM DBAgrofreshEK.GebDetail WHERE Datum < TO_DATE("_Datum_") AND Datum >= '"_PerDatum_"' AND SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, "_mandantOid_", '"_Lang_"'),1,2) like 'IF' AND Bestellung->Adresse ="_adrOid_" AND NVL(Verrechnet,0)<>1"
			Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
			Do rs.Prepare(strSQL)
			Set sc=rs.Execute()
	        IF $$$ISOK(sc) {
				IF rs.Next(.sc) {
					Set vortrag=rs.Data("Vortrag")
				}
	        }
	}
	Quit vortrag
]]></Implementation>
</Method>

<Method name="GebindeSaldoVortragIFCOClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>ID:%String,Lang:%String,forceVortrag:%Boolean=0</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set vortrag = 0
	if (ID'="") {
		set obj = ##class(DBAgrofreshEK.GebDetail).%OpenId(ID)
		
		if (forceVortrag || ((obj.Auftrag '= "") && (obj.Bestellung.GebindeVerrechnung = ##class(DBAgrofreshEK.Konst).GebindeMitSaldovortrag()))) {

			set adrOid = obj.Bestellung.Adresse.%Id()
			set Datum = obj.Datum
			if (Datum = "") {
				set Datum = obj.Bestellung.Annahmedatum
			}
			set mandantOid = obj.Bestellung.Mandant
			set strSQL = "SELECT (SUM(NVL(AnlieferungMenge,0))-SUM(NVL(AuslieferungMenge,0))) AS Vortrag FROM DBAgrofreshEK.GebDetail WHERE Datum < TO_DATE("_Datum_") AND SUBSTRING(DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde, "_mandantOid_", '"_Lang_"'),1,2) like 'IF' AND Bestellung->Adresse ="_adrOid_" AND NVL(Verrechnet,0)<>1"
			Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
			Do rs.Prepare(strSQL)
			Set sc=rs.Execute()
	        IF $$$ISOK(sc) {
				IF rs.Next(.sc) {
					Set vortrag=rs.Data("Vortrag")
				}
	        }
		}
	}
	Quit vortrag
]]></Implementation>
</Method>

<Method name="ResetGebPreis">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandOid:%String,vonAdrNr:%Integer,bisAdrNr:%Integer,vonDatum:%Date,bisDatum:%Date,vonGebindeNr:%Integer,bisGebindeNr:%Integer,arg:%Boolean</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	// Datums fehlen auch manchmal sollte zwar nicht mehr vorkommen
	set strSQL = "UPDATE DBAgrofreshEK.GebDetail SET Datum=Bestellung->Annahmedatum WHERE Bestellung->Mandant='"_MandOid_"' AND Bestellung->Verbucht=0 AND Datum=0"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	
	// Auf manchen Gebkontrollen fehlt noch der Mandant
	set strSQL = "UPDATE DBAgrofreshEK.GebKontr SET Mandant='"_MandOid_"' WHERE Gebinde->Mandant='"_MandOid_"'"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	
	// Auf Äufträgen die Verrechnungsart von der Auftragssteuerung eintragen lassen
	// Auslessen und setzen der Art
	set strSQL = "UPDATE DBAgrofreshEK.BestellungsKopf SET GebindeVerrechnung=DBAgrofreshEK.BestStrg_GetGebindeVerrechnenByAdr(Adresse->Adresse->ID) "
	// prüfung Datum
	set strSQL = strSQL_"WHERE Annahmedatum>= TO_DATE("_vonDatum_") AND Annahmedatum<= TO_DATE("_bisDatum_") AND NVL(Verbucht,0)=0 AND "
	// prüfung AdressNr nur falls bisAdrNr nicht 0
	if (bisAdrNr '= 0) {
		set strSQL = strSQL_"Adresse->Adresse->Adressnummer >= "_vonAdrNr_" AND Adresse->Adresse->Adressnummer <= "_bisAdrNr_" AND "
	}
	// prüfung ob bereits gedruckte Rechnungen auch
	if (arg = 0) {
		set strSQL = strSQL_"NVL(BearbeitungsstatusAR,0) = 0 AND "
	}
	// prüfung Mandant
	set strSQL = strSQL_"Mandant = '"_MandOid_"'"
	//w "Statement Auftrag: "_strSQL, !
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	
	
	// Preise neu berrechnen lassen
	set strSQL = "UPDATE DBAgrofreshEK.GebDetail SET GebindePreis=DBAgrofreshEK.GebPreis_GetPreisDetByBestellung(Bestellung->ID, GebKontr->Gebinde->ID) "
	set strSQL = strSQL_"WHERE Bestellung->Mandant='"_MandOid_"' AND NVL(Bestellung->Verbucht,0)=0"
	// prüfung auf Datum
	set strSQL = strSQL_" AND Datum>= TO_DATE("_vonDatum_") AND Datum<= TO_DATE("_bisDatum_") "
	// prüfung Gebinde nur falls bis Gebinde nicht 0
	if (bisGebindeNr '= 0) {
		set strSQL = strSQL_" AND GebKontr->Gebinde->GebindeNr >="_vonGebindeNr_" AND GebKontr->Gebinde->GebindeNr <="_bisGebindeNr_""
	}
	// prüfung ob bereits gedruckte Abrechnungen auch
	if (arg = 0) {
		set strSQL = strSQL_" AND NVL(Bestellung->BearbeitungsstatusAR,0) = 0"
	}
	// AdrNr
	if (bisAdrNr '= 0) {
		set strSQL = strSQL_" AND Bestellung->Adresse->Adresse->Adressnummer >= "_vonAdrNr_" AND Bestellung->Adresse->Adresse->Adressnummer <= "_bisAdrNr_""
	}
	//w "Statement Gebinde: "_strSQL, !
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
    Quit sc
]]></Implementation>
</Method>

<Method name="ResetGebPreisByBest">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
		
	// Preise neu berrechnen lassen
	set strSQL = "UPDATE DBAgrofreshEK.GebDetail SET GebindePreis=DBAgrofreshEK.GebPreis_GetPreisDetByBestellung(Bestellung->ID, GebKontr->Gebinde->ID) "
	set strSQL = strSQL_"WHERE Bestellung='"_BestOid_"'"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
    Quit sc
]]></Implementation>
</Method>

<Method name="ResetGebDatum">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandOid:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	// Datums fehlen oder sind völlig falsch
	set strSQL = "SELECT ID FROM DBAgrofreshEK.GebDetail WHERE Bestellung->Mandant="_MandOid
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	IF ($$$ISOK(sc)) {
		while (rs.Next(.sc)) {
			Set myId=rs.Data("ID")
			set gebDet = ##class(DBAgrofreshEK.GebDetail).%OpenId(myId)
			if (gebDet '= "") {
				// Automutiert Flag
				d ##class(DBAgrofreshEK.BestellungsKopf).SetFlagAutoMutiert(gebDet.Bestellung.%Id(), 1)
				// Annahmedatum
				if ((gebDet.Bestellung.Annahmedatum '= 0) && (gebDet.Bestellung.Annahmedatum '= "")) {
					set gebDet.Datum = gebDet.Bestellung.Annahmedatum
				}
				// prüfung ob Verrechnet Flag fälschlicherweise nicht gesetzt
				if ((+gebDet.Bestellung.Bestellstatus>=##class(DBAgrofreshEK.Konst).BestellungsStatusAbrechnung()) &&
					(+gebDet.Bestellung.GebindeVerrechnung >= 3) &&
					(+gebDet.NieVerrechnen = 0)) {
					//&&(##class(DBAgrofreshEK.BestellungsKopf).IsStatusGedruckt(gebDetBestellung.BearbeitungsstatusAR) = 1)
					set gebDet.Verrechnet = 1
				}
				
				// prüfung ob Flag fälschlicherweise gesetzt
				if ((+gebDet.NieVerrechnen = 0) && (+gebDet.Verrechnet = 1)) {
					set gebDet.Verrechnet = 0
				}
				set state = gebDet.%Save()
				// Automutiert Flag zurück
				d ##class(DBAgrofreshEK.BestellungsKopf).SetFlagAutoMutiert(gebDet.Bestellung.%Id(), 0)
				k gebDet
			}
		}
	}
	Quit sc
]]></Implementation>
</Method>

<Method name="GetAnzDetPosByKopfId">
<ClassMethod>1</ClassMethod>
<FormalSpec>gebKontrOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set count = 0
	&sql(SELECT Count(ID) Into :count FROM DBAgrofreshEK.GebDetail WHERE GebKontr->ID =:gebKontrOid)
	Quit:(SQLCODE'=0) 0
	Quit +count
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>{%%PARENT}("GebDetail")</DataLocation>
<DefaultData>GebDetailDefaultData</DefaultData>
<IdLocation>^DBAgrofresh.GebKontrC("GebDetail")</IdLocation>
<IndexLocation>^DBAgrofreshEK.GebDetailI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.GebDetailS</StreamLocation>
<Data name="GebDetailDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Datum</Value>
</Value>
<Value name="3">
<Value>Verrechnet</Value>
</Value>
<Value name="4">
<Value>LieferungMenge</Value>
</Value>
<Value name="5">
<Value>LieferungBetrag</Value>
</Value>
<Value name="6">
<Value>RetourenMenge</Value>
</Value>
<Value name="7">
<Value>RetourenBetrag</Value>
</Value>
<Value name="8">
<Value>GebindePreis</Value>
</Value>
<Value name="9">
<Value>Auftrag</Value>
</Value>
<Value name="10">
<Value>AnlieferungMenge</Value>
</Value>
<Value name="11">
<Value>AnlieferungBetrag</Value>
</Value>
<Value name="12">
<Value>AuslieferungMenge</Value>
</Value>
<Value name="13">
<Value>AuslieferungBetrag</Value>
</Value>
<Value name="14">
<Value>Bestellung</Value>
</Value>
<Value name="15">
<Value>Mwst</Value>
</Value>
<Value name="16">
<Value>MwstSatz</Value>
</Value>
<Value name="17">
<Value>GebindeMiete</Value>
</Value>
<Value name="18">
<Value>GebindeAdminKosten</Value>
</Value>
<Value name="19">
<Value>AdminKostenJeLadung</Value>
</Value>
<Value name="20">
<Value>GebindePreisFW</Value>
</Value>
<Value name="21">
<Value>GebindeSaldoMenge</Value>
</Value>
<Value name="22">
<Value>GebindeSaldoBetragExklMwst</Value>
</Value>
<Value name="23">
<Value>GebindeSaldoBetragInklMwst</Value>
</Value>
<Value name="24">
<Value>GebindeSaldoBetragMwst</Value>
</Value>
<Value name="25">
<Value>GebindeSaldoBetragExklMwstFW</Value>
</Value>
<Value name="26">
<Value>GebindeSaldoBetragInklMwstFW</Value>
</Value>
<Value name="27">
<Value>GebindeSaldoBetragMwstFW</Value>
</Value>
<Value name="28">
<Value>GebindeSaldoBetragMiete</Value>
</Value>
<Value name="29">
<Value>GebindeSaldoBetragAdmin</Value>
</Value>
<Value name="30">
<Value>GebindePreisTotal</Value>
</Value>
<Value name="31">
<Value>GebindeSaldoBetragBetrag</Value>
</Value>
<Value name="32">
<Value>NieVerrechnen</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="AdminKostenJeLadung">
</Property>
<Property name="AnlieferungBetrag">
</Property>
<Property name="AnlieferungMenge">
</Property>
<Property name="AuslieferungBetrag">
</Property>
<Property name="AuslieferungMenge">
</Property>
<Property name="Bestellung">
</Property>
<Property name="Datum">
</Property>
<Property name="GebKontr">
</Property>
<Property name="GebindeAdminKosten">
</Property>
<Property name="GebindeMiete">
</Property>
<Property name="GebindePreis">
</Property>
<Property name="GebindePreisFW">
</Property>
<Property name="GebindePreisTotal">
</Property>
<Property name="GebindeSaldoBetrag"/>
<Property name="GebindeSaldoBetragAdmin">
</Property>
<Property name="GebindeSaldoBetragBetrag">
</Property>
<Property name="GebindeSaldoBetragExklMwst">
</Property>
<Property name="GebindeSaldoBetragExklMwstFW">
</Property>
<Property name="GebindeSaldoBetragInklMwst">
</Property>
<Property name="GebindeSaldoBetragInklMwstFW">
</Property>
<Property name="GebindeSaldoBetragMiete">
</Property>
<Property name="GebindeSaldoBetragMwst">
</Property>
<Property name="GebindeSaldoBetragMwstFW">
</Property>
<Property name="GebindeSaldoMenge">
</Property>
<Property name="GebindeSaldoVortrag">
</Property>
<Property name="Mwst">
</Property>
<Property name="MwstSatz">
</Property>
<Property name="NieVerrechnen">
</Property>
<Property name="Verrechnet">
</Property>
<Property name="childsub">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.GebKontr">
<Description>
</Description>
<Super>%Persistent,%XML.Adaptor,DBCore.MandantRel</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61102,38178.734514</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="DatumAnfangsbestand">
<Description>
Datum (Anfangsbestand)</Description>
<Type>%Date</Type>
</Property>

<Property name="Anlieferungen">
<Description>
Anlieferungen</Description>
<Type>%Integer</Type>
</Property>

<Property name="Auslieferungen">
<Description>
Auslieferungen</Description>
<Type>%Integer</Type>
</Property>

<Property name="Anfangsbestand">
<Description>
Anfangbestand</Description>
<Type>%Integer</Type>
</Property>

<Property name="AuslieferungAbgerechnet">
<Description>
Auslieferung abgerechnet</Description>
<Type>%Integer</Type>
</Property>

<Property name="AnlieferungAbgerechnet">
<Description>
Anlieferung abgerechnet</Description>
<Type>%Integer</Type>
</Property>

<Property name="GebDetail">
<Type>DBAgrofreshEK.GebDetail</Type>
<Cardinality>children</Cardinality>
<Inverse>GebKontr</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="Lieferant">
<Description>
Lieferant</Description>
<Type>DBAdressen.Adresse</Type>
<Cardinality>one</Cardinality>
<Inverse>GKLieferant</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Lieferant"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="LieferantIndex">
<Properties>Lieferant</Properties>
</Index>

<Property name="Gebinde">
<Type>DBAgrofresh.SD.Gebinde</Type>
<Cardinality>one</Cardinality>
<Inverse>GKGebindeEK</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Gebinde"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="GebindeIndex">
<Properties>Gebinde</Properties>
</Index>

<Property name="Mandant">
<Description>
Mandant muss gelinkt werden wegen Fremdmandant (Abfragen auf Mandant dürfen nicht über Kunde gehen!)</Description>
<Type>%String</Type>
</Property>

<ForeignKey name="FKMandant">
<Properties>Mandant</Properties>
<ReferencedClass>DBCore.Mandant</ReferencedClass>
<ReferencedKey>MandIdIndex</ReferencedKey>
</ForeignKey>

<Index name="MandantIdx">
<Properties>Mandant</Properties>
</Index>

<Property name="GebindeSaldo">
<Description>
Saldo(Lieferungen - Retouren)</Description>
<Type>%Integer</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {GebindeSaldo}=##class(DBAgrofreshEK.GebKontr).GebindeSaldoClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
</Property>

<Method name="GebindeSaldoClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>ID:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set menge = 0
	if (ID '= "") {
		set obj = ##class(DBAgrofreshEK.GebKontr).%OpenId(ID)
		if (obj '= "") {
			set menge = (obj.Anfangsbestand + obj.Anlieferungen - obj.Auslieferungen)
		}
	}
	Quit menge
]]></Implementation>
</Method>

<Method name="GebindeSaldoByGebAdrClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>GebindeOid:%String,AdresseOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set menge = 0
	&sql(SELECT TOP 1 GebindeSaldo INTO :menge FROM DBAgrofreshEK.GebKontr WHERE Gebinde = :GebindeOid AND Lieferant = :AdresseOid)
	Quit:(SQLCODE'=0) 0
	Quit menge
]]></Implementation>
</Method>

<Method name="GebindeSaldoByGebAdrDatum">
<ClassMethod>1</ClassMethod>
<FormalSpec>GebindeOid:%String,AdresseOid:%String,perDatum:%Date</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set saldo = 0
	set id = ##class(DBAgrofreshEK.GebKontr).GetIdByGebAdr(GebindeOid, AdresseOid)
	if (id '= "") {
		set saldo = ##class(DBAgrofreshEK.GebKontr).GebindeSaldoPer(id, perDatum)
	}
	Quit saldo
]]></Implementation>
</Method>

<Method name="GebindeSaldoVorByGebAdrAuftr">
<ClassMethod>1</ClassMethod>
<FormalSpec>GebindeOid:%String,AdresseOid:%String,BestOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set saldoVortrag = 0
	set gebKontrOid = ##class(DBAgrofreshEK.GebKontr).GetIdByGebAdr(GebindeOid, AdresseOid)
	if (gebKontrOid '= "") {
		set bestStatus = 0
		set lsDatum = $H
		&sql(SELECT NVL(Bestellstatus,0), Annahmedatum into :bestStatus, :lsDatum FROM DBAgrofreshEK.Bestellungskopf WHERE ID = :BestOid)
		   	if (SQLCODE '= 0) {
		   	set bestStatus = 0
	   	}
		if (bestStatus >= ##class(DBAgrofreshEK.Konst).BestellungsStatusAnnahmeschein()) {
			set saldoVortrag = ##class(DBAgrofreshEK.GebKontr).GebindeSaldoPer(gebKontrOid, lsDatum)
		} else {
			set saldo = 0
			&sql(SELECT GebindeSaldo into :saldo FROM DBAgrofreshEK.GebKontr WHERE ID = :gebKontrOid)
		   	if (SQLCODE '= 0) {
			   	set saldo = 0
		   	}
			set vortrag = 0
			&sql(SELECT(SUM(NVL(AnlieferungMenge,0))-SUM(NVL(AuslieferungMenge,0))) into :vortrag FROM DBAgrofreshEK.GebDetail WHERE  NVL(Bestellung->Bestellstatus,0) < DBAgrofreshEK.Konst_BestellungsStatusAnnahmeschein() AND NVL(Bestellung->AnnahmeNr,0)=0 AND GebKontr=:gebKontrOid AND (NVL(Verrechnet,0)<>1 OR NVL(NieVerrechnen,0)=1))
			if (SQLCODE '= 0) {
				set vortrag = 0
			}
		   	set saldoVortrag = saldo - vortrag
		}
	}
	Quit saldoVortrag
]]></Implementation>
</Method>

<Method name="GetIdByGebAdr">
<ClassMethod>1</ClassMethod>
<FormalSpec>GebindeOid:%String,AdresseOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.GebKontr WHERE Gebinde = :GebindeOid AND Lieferant = :AdresseOid)
	Quit:(SQLCODE'=0) ""
	Quit id
]]></Implementation>
</Method>

<Method name="GebindeAnfangsbestandPer">
<ClassMethod>1</ClassMethod>
<FormalSpec>gebKontrOid:%String,perDatum:%Date</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	// AnfangsSaldo enstspricht dem Bestand vom Vortag.
	set datum = $ZD(perDatum)
	set date1 = ##class(DBUtils.DateUtils).DayAdd(datum, -1)
	Quit ##class(DBAgrofreshEK.GebKontr).GebindeSaldoPer(gebKontrOid, $zdh(date1))
]]></Implementation>
</Method>

<Method name="GebindeSaldoPer">
<ClassMethod>1</ClassMethod>
<FormalSpec>gebKontrOid:%String,perDatum:%Date</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set saldo = 0
	&sql(SELECT GebindeSaldo into :saldo FROM DBAgrofreshEK.GebKontr WHERE ID=:gebKontrOid)
	if (SQLCODE'=0) {
		set saldo = 0
	}
    
    set diff = 0	
	&sql(SELECT (SUM(NVL(AnlieferungMenge,0))-SUM(NVL(AuslieferungMenge,0))) into :diff FROM DBAgrofreshEK.GebDetail WHERE Datum> TO_DATE(:perDatum) AND GebKontr=:gebKontrOid AND NVL(Verrechnet,0)<>1)
 	if (SQLCODE'=0) {
		set diff = 0
	}
   	Quit (saldo-diff)
]]></Implementation>
</Method>

<Method name="GebindeSaldoVonBis">
<ClassMethod>1</ClassMethod>
<FormalSpec>gebKontrOid:%String,vonDatum:%Date,bisDatum:%Date</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set saldo = 0
	&sql(SELECT (SUM(NVL(AnlieferungMenge,0))-SUM(NVL(AuslieferungMenge,0))) into :saldo FROM DBAgrofreshEK.GebDetail WHERE Datum>= TO_DATE(:vonDatum) AND Datum<= TO_DATE(:bisDatum) AND GebKontr=:gebKontrOid AND NVL(Verrechnet,0)<>1)
 	if (SQLCODE'=0) {
		set saldo = 0
	}
   	Quit saldo
]]></Implementation>
</Method>

<Method name="GebindeSaldoIFCOPer">
<ClassMethod>1</ClassMethod>
<FormalSpec>perDatum:%Date,MandantOid:%String,Lang:%String,Lieferant:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set saldo = 0
	&sql(SELECT SUM(NVL(GebindeSaldo,0)) into :saldo FROM DBAgrofreshEK.GebKontr WHERE DBAgrofresh_SD.Gebinde_GetBezeichnungClass(Gebinde->ID, :MandantOid, :Lang) LIKE 'IF%' AND Lieferant = :Lieferant AND Mandant = :MandantOid)
 	if (SQLCODE'=0) {
		set saldo = 0
	}
    set diff = 0	
	&sql(SELECT (SUM(NVL(AnlieferungMenge,0))-SUM(NVL(AuslieferungMenge,0))) into :diff FROM DBAgrofreshEK.GebDetail WHERE Datum> TO_DATE(:perDatum) AND DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde->ID, :MandantOid, :Lang) LIKE 'IF%' AND NVL(Verrechnet,0)<>1 AND GebKontr->Lieferant = :Lieferant AND GebKontr->Mandant = :MandantOid)
	 if (SQLCODE'=0) {
		set diff = 0
	}
   	Quit (saldo-diff)
]]></Implementation>
</Method>

<Method name="GebindeSaldoIFCOVonBis">
<ClassMethod>1</ClassMethod>
<FormalSpec>vonDatum:%Date,bisDatum:%Date,MandantOid:%String,Lang:%String,Lieferant:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set saldo = 0
    &sql(SELECT (SUM(NVL(AnlieferungMenge,0))-SUM(NVL(AuslieferungMenge,0))) into :saldo FROM DBAgrofreshEK.GebDetail WHERE Datum>= TO_DATE(:vonDatum) AND Datum <= TO_DATE(:bisDatum) AND DBAgrofresh_SD.Gebinde_GetBezeichnungClass(GebKontr->Gebinde->ID, :MandantOid, :Lang) LIKE 'IF%' AND NVL(Verrechnet,0)<>1 AND GebKontr->Lieferant = :Lieferant AND GebKontr->Mandant = :MandantOid)
    Quit:(SQLCODE '= 0) 0
   	Quit saldo
]]></Implementation>
</Method>

<Method name="RecalcAllGebindeSaldo">
<ClassMethod>1</ClassMethod>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	&sql(UPDATE DBAgrofreshEK.GebKontr kontr SET Anlieferungen = (Select NVL(SUM(NVL(AnlieferungMenge,0)),0) FROM DBAgrofreshEK.GebDetail det WHERE NVL(Verrechnet,0) = 0 AND GebKontr = kontr.Id),
		Auslieferungen = (Select NVL(SUM(NVL(AuslieferungMenge ,0)),0) FROM DBAgrofreshEK.GebDetail det WHERE NVL(Verrechnet,0) = 0 AND GebKontr = kontr.Id)
		WHERE Anlieferungen <> (Select NVL(SUM(NVL(AnlieferungMenge,0)),0) FROM DBAgrofreshEK.GebDetail det WHERE NVL(Verrechnet,0) = 0 AND GebKontr = kontr.Id) OR
		Auslieferungen <> (Select NVL(SUM(NVL(AuslieferungMenge ,0)),0) FROM DBAgrofreshEK.GebDetail det WHERE NVL(Verrechnet,0) = 0 AND GebKontr = kontr.Id))
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.GebKontrD</DataLocation>
<DefaultData>GebKontrDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.GebKontrD</IdLocation>
<IndexLocation>^DBAgrofreshEK.GebKontrI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.GebKontrS</StreamLocation>
<Data name="GebKontrDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>DatumAnfangsbestand</Value>
</Value>
<Value name="3">
<Value>Anlieferungen</Value>
</Value>
<Value name="4">
<Value>Auslieferungen</Value>
</Value>
<Value name="5">
<Value>Anfangsbestand</Value>
</Value>
<Value name="6">
<Value>AuslieferungAbgerechnet</Value>
</Value>
<Value name="7">
<Value>AnlieferungAbgerechnet</Value>
</Value>
<Value name="8">
<Value>Kunde</Value>
</Value>
<Value name="9">
<Value>Gebinde</Value>
</Value>
<Value name="10">
<Value>Lieferant</Value>
</Value>
<Value name="11">
<Value>Mandant</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Anfangsbestand">
</Property>
<Property name="AnlieferungAbgerechnet">
</Property>
<Property name="Anlieferungen">
</Property>
<Property name="AuslieferungAbgerechnet">
</Property>
<Property name="Auslieferungen">
</Property>
<Property name="DatumAnfangsbestand">
</Property>
<Property name="Gebinde">
</Property>
<Property name="GebindeSaldo">
</Property>
<Property name="Lieferant">
</Property>
<Property name="Mandant">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.GebPreis">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62416,57210.862316</TimeChanged>
<TimeCreated>61630,57821.96072</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Gebinde">
<Type>DBAgrofresh.SD.Gebinde</Type>
<Cardinality>one</Cardinality>
<Inverse>EKPreis</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Gebinde"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="GebindeIndex">
<Properties>Gebinde</Properties>
</Index>

<Property name="AbDatum">
<Description>
AbDatum welches Preis gütlig ist</Description>
<Type>%Date</Type>
</Property>

<Property name="Preis">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Zusatzpreis">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Miete">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Verrechnen">
<Type>%Boolean</Type>
</Property>

<Property name="EanCode">
<Description>
EAN Code</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="ImmerVorschlagen">
<Type>%Boolean</Type>
</Property>

<Property name="NurSaldoFuehren">
<Type>%Boolean</Type>
</Property>

<Method name="HasToBeProposed">
<ClassMethod>1</ClassMethod>
<FormalSpec>FibuMandantOid:%String,AdressOid:%String,GebindeOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set propose = 0
	set found = 0
	
	set adr = ##class(DBAdressen.Adresse).%OpenId(AdressOid)
	set kredOid = ##class(DBDebiKredi.Kreditor).GetIdByAdrOid(FibuMandantOid, AdressOid)
	
	set kundGrpNr = ""
	set kundGrpOid = ""
	
	if ((adr '= "") && (adr.Kundengruppe '= "")) {
		set kundGrpOid = adr.Kundengruppe.%Id()
		set kundGrpNr = adr.Kundengruppe.Code	
	}
	k adr
	
	set immer = 0
	set nurSaldo = 0
	&sql(SELECT Top 1 NVL(ImmerVorschlagen,0), NVL(NurSaldoFuehren,0) into :immer, :nurSaldo FROM DBAgrofreshEK.LieferantenGebPreis 
	 			WHERE Lieferant = :kredOid AND Gebinde = :GebindeOid
	 			AND AbDatum <= CURRENT_DATE ORDER BY AbDatum desc)	
	 if (SQLCODE = 0) {
	   	set found = 1
	   	if ((immer = 1) || (nurSaldo = 1)) {
		   	set propose = 1
	   	} 
	 } else {
		set immer = 0
		set nurSaldo = 0
	 }
	 			
	// suche Nach Kundenspezifischem
	/*Set strSQL="SELECT Top 1 ImmerVorschlagen, NurSaldoFuehren FROM DBAgrofreshEK.LieferantenGebPreis "_
	 			"WHERE Lieferant = '"_kredOid_"' "_
	 			"AND Gebinde = '"_GebindeOid_"' "_
	 			"AND AbDatum <= CURRENT_DATE "_
	 			"ORDER BY AbDatum desc"
	 			
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
    IF $$$ISOK(sc) {
		While rs.Next(.sc) {
	   		set found = 1
			Set propose=rs.Data("ImmerVorschlagen")
			if (propose = 0) {
				Set propose=rs.Data("NurSaldoFuehren")
			}
			Quit
		}
    }*/
    
    // Suche Nach Gruppensepzifischem
    if ((found = 0) && (kundGrpNr < ##class(DBAgrofresh.Konst).KundenGrpKundenbezStart()) && (kundGrpNr '= "")) {
		&sql(SELECT Top 1 NVL(ImmerVorschlagen,0), NVL(NurSaldoFuehren,0)  into :immer, :nurSaldo FROM DBAgrofreshEK.KGGebPreis 
			WHERE Gruppe = :kundGrpOid AND Gebinde = :GebindeOid
			AND AbDatum <= CURRENT_DATE ORDER BY AbDatum desc)
		if (SQLCODE = 0) {
	   		set found = 1
	   		if ((immer = 1) || (nurSaldo = 1)) {
		   		set propose = 1
	   		} 
	 	} else {
			set immer = 0
			set nurSaldo = 0
	 	}
	 	
		/*Set strSQL="SELECT Top 1 ImmerVorschlagen, NurSaldoFuehren FROM DBAgrofreshEK.KGGebPreis "_
		 			"WHERE Gruppe = '"_kundGrpOid_"' "_
		 			"AND Gebinde = '"_GebindeOid_"' "_
		 			"AND AbDatum <= CURRENT_DATE "_
		 			"ORDER BY AbDatum desc"
		Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
		Do rs.Prepare(strSQL)
		Set sc=rs.Execute()
        IF $$$ISOK(sc) {
			If (rs.Next(.sc)) {
	   			set found = 1
				Set propose=rs.Data("ImmerVorschlagen")
				if (propose = 0) {
					Set propose=rs.Data("NurSaldoFuehren")
				}
			}
        } */
    }
    
    // Suche nach Gebindeselbst
    if (found = 0) {
		set gebinde = ##class(DBAgrofresh.SD.Gebinde).%OpenId(GebindeOid)
		if (gebinde '= "") {
			set propose = gebinde.ImmerVorschlagen
		}
    }
       
	Quit propose
]]></Implementation>
</Method>

<Method name="GetPreisDetByBestellung">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String,GebindeOid:%String,isKundenSpez:%Boolean=0,NurSaldoFuehren:%Boolean=0</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set preis = 0
	set found = 0
	set bestellung = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(BestOid)
	if ((bestellung '= "") && ((bestellung.GebindeVerrechnung = ##class(DBAgrofresh.Konst).GebindeVerrechnen()) || (bestellung.GebindeVerrechnung = ##class(DBAgrofresh.Konst).GebindeVerrechnenJeAuftrag()) || (bestellung.GebindeVerrechnung = ##class(DBAgrofresh.Konst).GebindeBarzahlung())))  {
		set AdressOid = bestellung.Adresse.Adresse.%Id()
		set Datum = bestellung.Annahmedatum
		if (Datum = "") {
			set Datum = bestellung.Bestelldatum
		}
		
		set adr = ##class(DBAdressen.Adresse).%OpenId(AdressOid)
		set kredOid = bestellung.Adresse.%Id()
	
		set kundGrpNr = ""
		set kundGrpOid = ""
	
		if ((adr '= "") && (adr.Kundengruppe '= "")) {
			set kundGrpOid = adr.Kundengruppe.%Id()
			set kundGrpNr = adr.Kundengruppe.Code	
		}
	
		// suche Nach Kundenspezifischem
		Set strSQL="SELECT Top 1 Preis, NVL(NurSaldoFuehren,0) AS NurSaldoFuehren FROM DBAgrofreshEK.LieferantenGebPreis "_
		 			"WHERE Lieferant = '"_kredOid_"' "_
		 			"AND Gebinde = '"_GebindeOid_"' "_
		 			"AND AbDatum <= '"_$ZDate(Datum,3)_"' "_
		 			"ORDER BY AbDatum desc"
		Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
		Do rs.Prepare(strSQL)
		Set sc=rs.Execute()
	    IF $$$ISOK(sc) {
			While rs.Next(.sc) {
				set isKundenSpez = 1
		   		set found = 1
				Set preis=rs.Data("Preis")
				Set NurSaldoFuehren=rs.Data("NurSaldoFuehren")
				Quit
			}
	    }

    	
	    // Suche Nach Gruppensepzifischem
	    if ((found = 0) && (kundGrpNr < ##class(DBAgrofresh.Konst).KundenGrpKundenbezStart()) && (kundGrpNr '= "")) {
		   set preistyp = 2
			Set strSQL="SELECT Top 1 Preis, NVL(NurSaldoFuehren,0) AS NurSaldoFuehren FROM DBAgrofreshEK.KGGebPreis "_
			 			"WHERE Gruppe = '"_kundGrpOid_"' "_
			 			"AND Gebinde = '"_GebindeOid_"' "_
		 				"AND AbDatum <= '"_$ZDate(Datum,3)_"' "_
			 			"ORDER BY AbDatum desc"
			Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
			Do rs.Prepare(strSQL)
			Set sc=rs.Execute()
	        IF $$$ISOK(sc) {
				If (rs.Next(.sc)) {
					set isKundenSpez = 1
					Set NurSaldoFuehren=rs.Data("NurSaldoFuehren")
		   			set found = 1
					Set preis=rs.Data("Preis")
				}
	        } 
	    }
	    
	    // Suche Nach Grundpreis
		set gebinde = ##class(DBAgrofresh.SD.Gebinde).%OpenId(GebindeOid)
		if (gebinde '= "") {
	  		if (found = 0) {
				set isKundenSpez = 0
				set preis = ##class(DBAgrofresh.SD.GebindePreis).GetPreisPerDatum(GebindeOid, Datum)
			}
		
			// Wenn eingestellt nur für gewisse Kundenkategorie verrechnen auf diese prüfen
			if (gebinde.Selektion2 '= "") {
				set kundenKat = gebinde.Selektion2.%Id()
				set kundenkatZahlAdr = ""
				if (adr.FreieSelektion2 '= "") {
					set kundenkatZahlAdr = adr.FreieSelektion2.%Id()
				}
				if (kundenKat '= kundenkatZahlAdr) {
					set preis = 0
				}
			}
	    }
	}
       
	Quit preis
]]></Implementation>
</Method>

<Method name="GetPreis">
<Description><![CDATA[
Methode gibt den Preis anhand des Mandanten, Adresse und Gebinde zurück
onlyGroup steuert, dass nur nach den Gruppe gesucht wird -> dann muss onlyKunde auf False sein!!!
onlyKunde steuert, dass explizit nur nach dem Kunden gesucht wird,
und nicht wenn der Lieferant nicht gefunden wurde, noch nach der Gruppe gesucht wird]]></Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>FibuMandantOid:%String,AdressOid:%String,GebindeOid:%String,onlyGroup:%Boolean,onlyKunde:%Boolean,otherKGOid:%String=""</FormalSpec>
<ReturnType>DBAgrofreshEK.GebPreis</ReturnType>
<Implementation><![CDATA[
	
	set adr = ##class(DBAdressen.Adresse).%OpenId(AdressOid)
	set kredOid = ##class(DBDebiKredi.Kreditor).GetIdByAdrOid(FibuMandantOid, AdressOid)
	set geb = ##class(DBAgrofresh.SD.Gebinde).%OpenId(GebindeOid)
	set gebGrpOid = ""
	set kundGrpOid = ""
	set kundGrpNr = ""
	// Kundengruppe der Adresse auswählen
	if (otherKGOid = "") {
		if (adr '= "") && (adr.Kundengruppe '= "") {
			set kundGrpOid = adr.Kundengruppe.%Id()
			set kundGrpNr = adr.Kundengruppe.Code	
		}
	// andere Kundengruppe auswählen
	} else {
		set kg = ##class(DBAdressen.SD.Kundengruppe).%OpenId(otherKGOid)
		if (kg '= "") {
			set kundGrpOid = kg.%Id()
			set kundGrpNr = kg.Code	
		}
	}
	set onlyGroup = onlyGroup && (kundGrpNr < ##class(DBAgrofresh.Konst).KundenGrpKundenbezStart())

	// wenn Oids nicht übergeben wurden -> Quit
	if ((FibuMandantOid = "") || ((otherKGOid="") && (AdressOid = "")) || (GebindeOid = "")) {
		Quit ""
	}
	// onlyGroup und onlyKunde dürfen nie beide auf true gesetzt sein
	// Wenn doch -> Quit
	if ((onlyGroup = 1) && (onlyKunde = 1)) {
		Quit ""
	}
	
	set id = ""	
	set preistyp = 0	
	//wenn Kundenspezifisch
	if (onlyGroup = 0) {
		
		set preistyp = 1
		Set strSQL="SELECT Top 1 ID FROM DBAgrofreshEK.LieferantenGebPreis "_
		 			"WHERE Lieferant = '"_kredOid_"' "_
		 			"AND Gebinde = '"_GebindeOid_"' "_
		 			"AND AbDatum <= CURRENT_DATE "_
		 			"ORDER BY AbDatum desc"
		Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
		Do rs.Prepare(strSQL)
		Set sc=rs.Execute()
        IF $$$ISOK(sc) {
			While rs.Next(.sc) {
				Set id=rs.Data("ID")
				Quit
			}
        }
		
	} // wenn noch kein Preis gefunden und Kundengrp < 90
	if ((id = "") && (onlyKunde = 0) && (kundGrpNr < ##class(DBAgrofresh.Konst).KundenGrpKundenbezStart())) {
		set preistyp = 2
		Set strSQL="SELECT ID FROM DBAgrofreshEK.KGGebPreis "_
		 			"WHERE Gruppe = '"_kundGrpOid_"' "_
		 			"AND Gebinde = '"_GebindeOid_"' "_
		 			"AND AbDatum <= CURRENT_DATE "_
		 			"ORDER BY AbDatum desc"
		Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
		Do rs.Prepare(strSQL)
		Set sc=rs.Execute()
        IF $$$ISOK(sc) {
			If (rs.Next(.sc)) {
				Set id=rs.Data("ID")
			}
        }
	}
	if (id '= "") {
		if (preistyp = 1) {
			Quit ##class(DBAgrofreshEK.LieferantenGebPreis).%OpenId(id)	
		} elseif (preistyp = 2) {
			Quit ##class(DBAgrofreshEK.KGGebPreis).%OpenId(id)
		} else {
			Quit ""	
		}
	} else {
		Quit ""	
	}
]]></Implementation>
</Method>

<Method name="DeleteAllByMandant">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	Set strSQL="DELETE FROM DBAgrofreshEK.LieferantenGebPreis "_
			"WHERE Gebinde->Mandant = '"_MandantOid_"'"
			
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
    IF $$$ISOK(sc) {
		Set strSQL="DELETE FROM DBAgrofreshEK.KGGebPreis "_
				"WHERE Gebinde->Mandant = '"_MandantOid_"'"
			
		Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
		Do rs.Prepare(strSQL)
		Set sc=rs.Execute()
    }
	quit sc
]]></Implementation>
</Method>

<Method name="existsPreisKundenspez">
<ClassMethod>1</ClassMethod>
<FormalSpec>BestOid:%String,GebindeOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set found = 0
	set bestellung = ##class(DBAgrofreshEK.BestellungsKopf).%OpenId(BestOid)
	if ((bestellung '= "") && ((bestellung.GebindeVerrechnung = ##class(DBAgrofresh.Konst).GebindeVerrechnen()) || (bestellung.GebindeVerrechnung = ##class(DBAgrofresh.Konst).GebindeVerrechnenJeAuftrag()) || (bestellung.GebindeVerrechnung = ##class(DBAgrofresh.Konst).GebindeBarzahlung())))  {
		set AdressOid = bestellung.Adresse.Adresse.%Id()
		set Datum = bestellung.Annahmedatum
		if (Datum = "") {
			set Datum = bestellung.Bestelldatum
		}
		
		set adr = ##class(DBAdressen.Adresse).%OpenId(AdressOid)
		set kredOid = bestellung.Adresse.%Id()
	
		set kundGrpNr = ""
		set kundGrpOid = ""
	
		if (adr '= "") && (adr.Kundengruppe '= "") {
			set kundGrpOid = adr.Kundengruppe.%Id()
			set kundGrpNr = adr.Kundengruppe.Code	
		}
	
		// suche Nach Kundenspezifischem
		Set strSQL="SELECT Top 1 Preis FROM DBAgrofreshEK.LieferantenGebPreis "_
		 			"WHERE Lieferant = '"_kredOid_"' "_
		 			"AND Gebinde = '"_GebindeOid_"' "_
		 			"AND AbDatum <= '"_$ZDate(Datum,3)_"' "_
		 			"ORDER BY AbDatum desc"
		Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
		Do rs.Prepare(strSQL)
		Set sc=rs.Execute()
	    IF $$$ISOK(sc) {
			While rs.Next(.sc) {
		   		set found = 1
				Set preis=rs.Data("Preis")
				Quit
			}
	    }

    	
	    // Suche Nach Gruppensepzifischem
	    if ((found = 0) && (kundGrpNr < ##class(DBAgrofresh.Konst).KundenGrpKundenbezStart()) && (kundGrpNr '= "")) {
		   set preistyp = 2
			Set strSQL="SELECT Top 1 Preis FROM DBAgrofreshEK.KGGebPreis "_
			 			"WHERE Gruppe = '"_kundGrpOid_"' "_
			 			"AND Gebinde = '"_GebindeOid_"' "_
		 				"AND AbDatum <= '"_$ZDate(Datum,3)_"' "_
			 			"ORDER BY AbDatum desc"
			Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
			Do rs.Prepare(strSQL)
			Set sc=rs.Execute()
	        IF $$$ISOK(sc) {
				If (rs.Next(.sc)) {
		   			set found = 1
					Set preis=rs.Data("Preis")
				}
	        } 
	    }
	    
	}
	Quit found
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.GebPreisD</DataLocation>
<DefaultData>GebPreisDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.GebPreisD</IdLocation>
<IndexLocation>^DBAgrofreshEK.GebPreisI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.GebPreisS</StreamLocation>
<Data name="GebPreisDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Gebinde</Value>
</Value>
<Value name="3">
<Value>AbDatum</Value>
</Value>
<Value name="4">
<Value>Preis</Value>
</Value>
<Value name="5">
<Value>Zusatzpreis</Value>
</Value>
<Value name="6">
<Value>Miete</Value>
</Value>
<Value name="7">
<Value>Verrechnen</Value>
</Value>
<Value name="8">
<Value>EanCode</Value>
</Value>
<Value name="9">
<Value>ImmerVorschlagen</Value>
</Value>
<Value name="10">
<Value>NurSaldoFuehren</Value>
</Value>
</Data>
<Property name="AbDatum"/>
<Property name="EanCode"/>
<Property name="Gebinde"/>
<Property name="ImmerVorschlagen"/>
<Property name="Miete"/>
<Property name="NurSaldoFuehren"/>
<Property name="Preis"/>
<Property name="Verrechnen"/>
<Property name="Zusatzpreis"/>
</Storage>
</Class>


<Class name="DBAgrofreshEK.KGGebPreis">
<Super>DBAgrofreshEK.GebPreis,%XML.Adaptor</Super>
<TimeChanged>61630,58326.830112</TimeChanged>
<TimeCreated>61630,58076.975649</TimeCreated>
<Inheritance>right</Inheritance>

<Property name="Gruppe">
<Type>DBAdressen.SD.Kundengruppe</Type>
<Cardinality>one</Cardinality>
<Inverse>GruppenGebPreisEK</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Gruppe"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="GruppeIdx">
<Properties>Gruppe</Properties>
</Index>

<Method name="GetPreisIdPerDatum">
<ClassMethod>1</ClassMethod>
<FormalSpec>Gruppe:%String,Gebinde:%String,Datum:%Date</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	if (Gruppe ="") {
		quit ""
	}
	if (Gebinde ="") {
		quit ""
	}
	set id = ""
	
	//&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.KGGebPreis
	//	WHERE  Gruppe=:Gruppe AND Gebinde=:Gebinde AND AbDatum <= {d :Datum} Order by AbDatum desc)
	
	Set strSQL="SELECT TOP 1 ID FROM DBAgrofreshEK.KGGebPreis "_
			"WHERE Gebinde->ID= '"_Gebinde_"' "_
			"AND Gruppe->ID = '"_Gruppe_"' "_
			"AND AbDatum <= TO_DATE('"_Datum_"', 'DD.MM.yy') "_
			"Order by AbDatum desc"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
       IF $$$ISOK(sc) {
		if rs.Next(.sc) {
			Set id=rs.Data("ID")
		}
    }
	quit id
]]></Implementation>
</Method>

<Method name="PreisPerDatumExists">
<ClassMethod>1</ClassMethod>
<FormalSpec>Gruppe:%String,Gebinde:%String,Datum:%Date</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set id = ##Class(DBAgrofreshEK.KGGebPreis).GetOidByKundeGebindeDatum(Gruppe, Gebinde, Datum)
	if (id = "") {
		Quit 0	
	} else {
		Quit 1
	}
]]></Implementation>
</Method>

<Method name="GetOidByKundeGebindeDatum">
<ClassMethod>1</ClassMethod>
<FormalSpec>Gruppe:%String,Gebinde:%String,Datum:%Date</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	w Datum,!
	set id = ""
	//&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.KGGebPreis
	//     WHERE  Gebinde= :Gebinde AND AbDatum = {d :Datum} AND Gruppe = :Gruppe)
	
	Set strSQL="SELECT TOP 1 ID FROM DBAgrofreshEK.KGGebPreis "_
			"WHERE Gebinde->ID= '"_Gebinde_"' "_
			"AND Gruppe->ID = '"_Gruppe_"' "_
			"AND AbDatum = TO_DATE('"_Datum_"', 'DD.MM.yy')"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
       IF $$$ISOK(sc) {
		if rs.Next(.sc) {
			Set id=rs.Data("ID")
		}
    }
	Quit id
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DefaultData>KGGebPreisDefaultData</DefaultData>
<Data name="KGGebPreisDefaultData">
<Structure>listnode</Structure>
<Subscript>"KGGebPreis"</Subscript>
<Value name="1">
<Value>Gruppe</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="DBAgrofreshEK.KGPreis">
<Description>
</Description>
<Super>DBAgrofreshEK.Preis,%XML.Adaptor</Super>
<TimeChanged>62343,53374.606737</TimeChanged>
<TimeCreated>61102,57877.638666</TimeCreated>
<Inheritance>right</Inheritance>

<Property name="Gruppe">
<Type>DBAdressen.SD.Kundengruppe</Type>
<Cardinality>one</Cardinality>
<Inverse>KGPreisGruppe</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Gruppe"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="GruppeIndex">
<Properties>Gruppe</Properties>
</Index>

<Index name="GruppeArtikelIdx">
<Properties>Artikel,Gruppe</Properties>
<Unique>1</Unique>
</Index>

<Method name="GetOidByKundengruppe">
<ClassMethod>1</ClassMethod>
<FormalSpec>KgOid:%String,ArtikelOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID into :id FROM DBAgrofreshEK.KGPreis WHERE Gruppe = :KgOid AND Artikel = :ArtikelOid)
	
	if (SQLCODE '= 0) {
		set id = ""
	}
	quit id
]]></Implementation>
</Method>

<Method name="%OnDelete">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Delete</METHOD> method to 
provide notification that the object specified by <VAR>oid</VAR> is being deleted.

<P>If this method returns an error then the object will not be deleted.
[Previously private]]]></Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%ObjectIdentity</FormalSpec>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
    Set tId = $LG(oid,1)
    Quit ##class(DBAgrofreshEK.Preis).DeleteReferenzes(tId)
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DefaultData>KGPreisDefaultData</DefaultData>
<Data name="KGPreisDefaultData">
<Subscript>"KGPreis"</Subscript>
<Value name="1">
<Value>Gruppe</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="DBAgrofreshEK.Konst">
<Super>%RegisteredObject</Super>
<TimeChanged>62347,32629.222813</TimeChanged>
<TimeCreated>61396,53060.059511</TimeCreated>

<Method name="BearbeitungsstatusNichtGedruckt">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 0
]]></Implementation>
</Method>

<Method name="BearbeitungsstatusGedruckt">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 1
]]></Implementation>
</Method>

<Method name="BearbeitungsstatusMutiert">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 2
]]></Implementation>
</Method>

<Method name="BearbeitungsstatusFreigabe">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 3
]]></Implementation>
</Method>

<Method name="BearbeitungsstatusTeillieferung">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 4
]]></Implementation>
</Method>

<Method name="MengencodeGewicht">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[	Quit 1
]]></Implementation>
</Method>

<Method name="MengencodeStueck">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[	Quit 2
]]></Implementation>
</Method>

<Method name="MengencodeProzent">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[	Quit 3
]]></Implementation>
</Method>

<Method name="AcRabattZwischentotal">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	
	Quit 65
]]></Implementation>
</Method>

<Method name="AcRabattGesamttotal">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	
	Quit 66
]]></Implementation>
</Method>

<Method name="AcZwischentotal">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	
	Quit 67
]]></Implementation>
</Method>

<Method name="AcGesamttotal">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	
	Quit 68
]]></Implementation>
</Method>

<Method name="AcZwischentotalVorRabatt">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	
	Quit 69
]]></Implementation>
</Method>

<Method name="AcHilfsstoffeKalkulation">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	
	Quit 90
]]></Implementation>
</Method>

<Method name="FormularTypOA">
<Description>
-----------------
Formulartypen	*
-----------------
Formulartyp Offertanfrage</Description>
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 0
]]></Implementation>
</Method>

<Method name="FormularTypBE">
<Description>
Formulartyp Bestellung</Description>
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 1
]]></Implementation>
</Method>

<Method name="FormularTypAS">
<Description>
Formulartyp Auftragsbestaetigung</Description>
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 2
]]></Implementation>
</Method>

<Method name="FormularTypGS">
<Description>
Formulartyp Gebindeschein</Description>
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 3
]]></Implementation>
</Method>

<Method name="FormularTypAR">
<Description>
Formulartyp Abrechnung</Description>
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 4
]]></Implementation>
</Method>

<Method name="FormularTypGU">
<Description>
Formulartyp Gutschrift</Description>
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 5
]]></Implementation>
</Method>

<Method name="FormularTypSAR">
<Description>
Formulartyp Sammelabrechnung</Description>
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 6
]]></Implementation>
</Method>

<Method name="FormularTypFM">
<Description>
Formulartyp Faxmail</Description>
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 7
]]></Implementation>
</Method>

<Method name="FormularTypTAS">
<Description>
Formulartyp Auftragsbestaetigung</Description>
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 8
]]></Implementation>
</Method>

<Method name="SeitenTyp1Seite">
<Description>
-------------------------
Seitentypen Formulare	*
-------------------------
1. Seite Original</Description>
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 0
]]></Implementation>
</Method>

<Method name="SeitenTypFolgeSeite">
<Description>
Folge Seite Original</Description>
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 1
]]></Implementation>
</Method>

<Method name="SeitenTyp1SeiteKopie">
<Description>
1. Seite Kopie</Description>
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 2
]]></Implementation>
</Method>

<Method name="SeitenTypFolgeSeiteKopie">
<Description>
Folge Seite Kopie</Description>
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 3
]]></Implementation>
</Method>

<Method name="BestellungsStatusErfasst">
<Description>
-------------------------
Auftragstati
-------------------------</Description>
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 0
]]></Implementation>
</Method>

<Method name="BestellungsStatusOffertanfrage">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 1
]]></Implementation>
</Method>

<Method name="BestellungsStatusBestellung">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 2
]]></Implementation>
</Method>

<Method name="BestellungsStatusAnnahmeschein">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 3
]]></Implementation>
</Method>

<Method name="BestellungsStatusAbrechnung">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 4
]]></Implementation>
</Method>

<Method name="BestellungsStatusSammelabrg">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 5
]]></Implementation>
</Method>

<Method name="BestellungsStatusSammelabrgPDF">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 6
]]></Implementation>
</Method>

<Method name="BestellungsStatusAlle">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 9
]]></Implementation>
</Method>

<Method name="EtikettenEtiketteProGeb">
<Description>
Konstante für die Einstellung, für wieviele Gebinde eine Etikette gedruckt werden soll</Description>
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 1210067
]]></Implementation>
</Method>

<Method name="EtikettenEtiketteJeGeb">
<Description>
Konstante für die Einstellung, für wieviele Etikketnen pro Gebinde gedruckt werden sollen</Description>
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 1210068
]]></Implementation>
</Method>

<Method name="StatusAutoLaufBestGesperrt">
<ClassMethod>1</ClassMethod>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[	Quit 9
]]></Implementation>
</Method>
</Class>


<Class name="DBAgrofreshEK.LGGebPreis">
<Super>DBAgrofreshEK.GebPreis,%XML.Adaptor</Super>
<TimeChanged>62343,64257</TimeChanged>
<TimeCreated>62342,29751.46012</TimeCreated>
<Inheritance>right</Inheritance>

<Property name="Gruppe">
<Type>DBAdressen.SD.Lieferantengrp</Type>
<Cardinality>one</Cardinality>
<Inverse>GruppenGebPreisEK</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Gruppe"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="LGruppeIdx">
<Properties>Gruppe</Properties>
</Index>

<Method name="GetPreisIdPerDatum">
<ClassMethod>1</ClassMethod>
<FormalSpec>Gruppe:%String,Gebinde:%String,Datum:%Date</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	if (Gruppe ="") {
		quit ""
	}
	if (Gebinde ="") {
		quit ""
	}
	set id = ""
	
	//&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.LGGebPreis
	//	WHERE  Gruppe=:Gruppe AND Gebinde=:Gebinde AND AbDatum <= {d :Datum} Order by AbDatum desc)
	
	Set strSQL="SELECT TOP 1 ID FROM DBAgrofreshEK.LGGebPreis "_
			"WHERE Gebinde->ID= '"_Gebinde_"' "_
			"AND Gruppe->ID = '"_Gruppe_"' "_
			"AND AbDatum <= TO_DATE('"_Datum_"', 'DD.MM.yy') "_
			"Order by AbDatum desc"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
       IF $$$ISOK(sc) {
		if rs.Next(.sc) {
			Set id=rs.Data("ID")
		}
    }
	quit id
]]></Implementation>
</Method>

<Method name="PreisPerDatumExists">
<ClassMethod>1</ClassMethod>
<FormalSpec>Gruppe:%String,Gebinde:%String,Datum:%Date</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set id = ##Class(DBAgrofreshEK.LGGebPreis).GetOidByKundeGebindeDatum(Gruppe, Gebinde, Datum)
	if (id = "") {
		Quit 0	
	} else {
		Quit 1
	}
]]></Implementation>
</Method>

<Method name="GetOidByKundeGebindeDatum">
<ClassMethod>1</ClassMethod>
<FormalSpec>Gruppe:%String,Gebinde:%String,Datum:%Date</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	w Datum,!
	set id = ""
	//&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.LGGebPreis
	//     WHERE  Gebinde= :Gebinde AND AbDatum = {d :Datum} AND Gruppe = :Gruppe)
	
	Set strSQL="SELECT TOP 1 ID FROM DBAgrofreshEK.LGGebPreis "_
			"WHERE Gebinde->ID= '"_Gebinde_"' "_
			"AND Gruppe->ID = '"_Gruppe_"' "_
			"AND AbDatum = TO_DATE('"_Datum_"', 'DD.MM.yy')"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
       IF $$$ISOK(sc) {
		if rs.Next(.sc) {
			Set id=rs.Data("ID")
		}
    }
	Quit id
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DefaultData>LGGebPreisDefaultData</DefaultData>
<Data name="LGGebPreisDefaultData">
<Structure>listnode</Structure>
<Subscript>"LGGebPreis"</Subscript>
<Value name="1">
<Value>Gruppe</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="DBAgrofreshEK.LGPreis">
<Super>DBAgrofreshEK.Preis,%XML.Adaptor</Super>
<TimeChanged>62342,55070.404929</TimeChanged>
<TimeCreated>62342,29440.634368</TimeCreated>
<Inheritance>right</Inheritance>

<Property name="Gruppe">
<Type>DBAdressen.SD.Lieferantengrp</Type>
<Cardinality>one</Cardinality>
<Inverse>LGPreisGruppe</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Gruppe"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="LGruppeIndex">
<Properties>Gruppe</Properties>
</Index>

<Index name="LGruppeArtikelIdx">
<Properties>Artikel,Gruppe</Properties>
<Unique>1</Unique>
</Index>

<Method name="GetOidByLieferanten">
<ClassMethod>1</ClassMethod>
<FormalSpec>LgOid:%String,ArtikelOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID into :id FROM DBAgrofreshEK.LGPreis WHERE Gruppe = :LgOid AND Artikel = :ArtikelOid)
	
	if (SQLCODE '= 0) {
		set id = ""
	}
	quit id
]]></Implementation>
</Method>

<Method name="%OnDelete">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Delete</METHOD> method to 
provide notification that the object specified by <VAR>oid</VAR> is being deleted.

<P>If this method returns an error then the object will not be deleted.
[Previously private]]]></Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%ObjectIdentity</FormalSpec>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
    Set tId = $LG(oid,1)
    Quit ##class(DBAgrofreshEK.Preis).DeleteReferenzes(tId)
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DefaultData>LGPreisDefaultData</DefaultData>
<Data name="LGPreisDefaultData">
<Structure>listnode</Structure>
<Subscript>"LGPreis"</Subscript>
<Value name="1">
<Value>Gruppe</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="DBAgrofreshEK.LagerAufnahme">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62416,57210.993177</TimeChanged>
<TimeCreated>61479,31008.525204</TimeCreated>
<Inheritance>right</Inheritance>

<Property name="LagerPer">
<Type>%Library.Date</Type>
<Required>1</Required>
</Property>

<Index name="DatumIndex">
<Properties>LagerPer,Artikel</Properties>
<Unique>1</Unique>
</Index>

<Property name="Bemerkung">
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="CELagerAufnahme">
<Type>DBAgrofreshEK.ChargenEingang</Type>
<Cardinality>many</Cardinality>
<Inverse>LagerAufnahme</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="Artikel">
<Type>DBAgrofresh.Artikel</Type>
<Cardinality>one</Cardinality>
<Inverse>LagerAufnahmeArtikel</Inverse>
<Relationship>1</Relationship>
<Required>1</Required>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Artikel"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ArtikelIndex">
<Properties>Artikel</Properties>
</Index>

<Method name="HigherLagerPerExists">
<ClassMethod>1</ClassMethod>
<FormalSpec>Per:%Library.Date,ArtOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK.LagerAufnahme
			WHERE LagerPer > :Per AND Artikel = :ArtOid)
	if (id'="") {
		Quit 1	
	} else {
		Quit 0	
	}
]]></Implementation>
</Method>

<Method name="GetLagerPer">
<ClassMethod>1</ClassMethod>
<FormalSpec>Per:%Library.Date,ArtOid:%String</FormalSpec>
<ReturnType>DBAgrofreshEK.LagerAufnahme</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK.LagerAufnahme
			WHERE LagerPer = :Per AND Artikel = :ArtOid)
	if (id'="") {
		Quit ##class(DBAgrofreshEK.LagerAufnahme).%OpenId(id)
	} else {
		Quit ""
	}
]]></Implementation>
</Method>

<Method name="GetLagerPerOid">
<ClassMethod>1</ClassMethod>
<FormalSpec>Per:%Library.Date,ArtOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK.LagerAufnahme
			WHERE LagerPer = :Per AND Artikel = :ArtOid)
	Quit id
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.LagerAufnahmeD</DataLocation>
<DefaultData>LagerAufnahmeDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.LagerAufnahmeD</IdLocation>
<IndexLocation>^DBAgrofreshEK.LagerAufnahmeI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.LagerAufnahmeS</StreamLocation>
<Data name="LagerAufnahmeDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>LagerPer</Value>
</Value>
<Value name="3">
<Value>Bemerkung</Value>
</Value>
<Value name="4">
<Value>Artikel</Value>
</Value>
</Data>
<Property name="Artikel"/>
<Property name="Bemerkung"/>
<Property name="LagerPer"/>
</Storage>
</Class>


<Class name="DBAgrofreshEK.LieferantenGebPreis">
<Super>DBAgrofreshEK.GebPreis,%XML.Adaptor</Super>
<TimeChanged>61630,63279</TimeChanged>
<TimeCreated>61630,58975.059445</TimeCreated>
<Inheritance>right</Inheritance>

<Property name="Lieferant">
<Type>DBDebiKredi.Kreditor</Type>
<Cardinality>one</Cardinality>
<Inverse>LieferantGebPreis</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Lieferant"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="LieferantIndex">
<Properties>Lieferant</Properties>
</Index>

<Method name="GetPreisIdPerDatum">
<ClassMethod>1</ClassMethod>
<FormalSpec>Lieferant:%String,Gebinde:%String,Datum:%Date</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	if (Lieferant ="") {
		quit ""
	}
	if (Gebinde ="") {
		quit ""
	}
	set id = ""
	
	//&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.LieferantenGebPreis
	//	WHERE  Lieferant=:Lieferant AND Gebinde=:Gebinde AND AbDatum <= {d :Datum} Order by AbDatum desc)
	
	Set strSQL="SELECT TOP 1 ID FROM DBAgrofreshEK.LieferantenGebPreis "_
			"WHERE Gebinde->ID= '"_Gebinde_"' "_
			"AND Lieferant->Adresse->ID = '"_Lieferant_"' "_
			"AND AbDatum <= TO_DATE('"_Datum_"', 'DD.MM.yy') "_
			"Order by AbDatum desc"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
       IF $$$ISOK(sc) {
		if rs.Next(.sc) {
			Set id=rs.Data("ID")
		}
    }
	quit id
]]></Implementation>
</Method>

<Method name="PreisPerDatumExists">
<ClassMethod>1</ClassMethod>
<FormalSpec>Lieferant:%String,Gebinde:%String,Datum:%Date</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set id = ##Class(DBAgrofreshEK.LieferantenGebPreis).GetOidByLieferantGebindeDatum(Lieferant, Gebinde, Datum)
	if (id = "") {
		Quit 0	
	} else {
		Quit 1
	}
]]></Implementation>
</Method>

<Method name="GetOidByLieferantGebindeDatum">
<ClassMethod>1</ClassMethod>
<FormalSpec>Lieferant:%String,Gebinde:%String,Datum:%Date</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	//&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.LieferantenGebPreis
	//     WHERE  Gebinde= :Gebinde AND AbDatum = {d :Datum} AND Lieferant = :Lieferant)
	
	Set strSQL="SELECT TOP 1 ID FROM DBAgrofreshEK.LieferantenGebPreis "_
			"WHERE Gebinde->ID= '"_Gebinde_"' "_
			"AND Lieferant->Adresse->ID = '"_Lieferant_"' "_
			"AND AbDatum = TO_DATE('"_Datum_"', 'DD.MM.yy')"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
      IF $$$ISOK(sc) {
		if rs.Next(.sc) {
			Set id=rs.Data("ID")
		}
    }
	Quit id
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DefaultData>LieferantenGebPreisDefaultData</DefaultData>
<Data name="LieferantenGebPreisDefaultData">
<Structure>listnode</Structure>
<Subscript>"LieferantenGebPreis"</Subscript>
<Value name="1">
<Value>Lieferant</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="DBAgrofreshEK.LieferantenPreis">
<Description>
</Description>
<Super>DBAgrofreshEK.Preis,%XML.Adaptor</Super>
<TimeChanged>61816,63101.303699</TimeChanged>
<TimeCreated>61102,57830.310719</TimeCreated>
<Inheritance>right</Inheritance>

<Property name="Lieferant">
<Type>DBDebiKredi.Kreditor</Type>
<Cardinality>one</Cardinality>
<Inverse>LieferantenPreisLieferant</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Lieferant"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="LieferantIndex">
<Properties>Lieferant</Properties>
</Index>

<Index name="LieferantArtIdx">
<Properties>Artikel,Lieferant</Properties>
<Unique>1</Unique>
</Index>

<Method name="%OnDelete">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Delete</METHOD> method to 
provide notification that the object specified by <VAR>oid</VAR> is being deleted.

<P>If this method returns an error then the object will not be deleted.
[Previously private]]]></Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%ObjectIdentity</FormalSpec>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
    Set tId = $LG(oid,1)
    Quit ##class(DBAgrofreshEK.Preis).DeleteReferenzes(tId)
]]></Implementation>
</Method>

<Method name="LiefPreisExists">
<ClassMethod>1</ClassMethod>
<FormalSpec>ArtikelOid:%String,LieferantOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	
	set retval = ""
	
	set rset = ##class(%ResultSet).%New("DBAgrofreshEK.AF.LieferantPreisAF.PreisExists")
	do rset.Execute(ArtikelOid, LieferantOid)
	while (rset.Next()) {
		set retval = rset.Data("pExists")
	}
		
	if (retval '= "") {
		Quit 1
	} else {
		Quit 0
	}
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
</Storage>
</Class>


<Class name="DBAgrofreshEK.LieferantenStrg">
<Super>DBAgrofreshEK.BestStrg,%XML.Adaptor</Super>
<TimeChanged>62178,32522.63392</TimeChanged>
<TimeCreated>61408,34723.306558</TimeCreated>
<Inheritance>right</Inheritance>

<Property name="Lieferant">
<Type>DBAdressen.Adresse</Type>
<Cardinality>one</Cardinality>
<Inverse>LieferantenStrgLieferant</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Lieferant"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="LieferantIndex">
<Properties>Lieferant</Properties>
</Index>

<Method name="ExistsBestSteuerung">
<ClassMethod>1</ClassMethod>
<FormalSpec>AdrOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.LieferantenStrg 
	     WHERE Lieferant=:AdrOid)
	quit (id '= "")
]]></Implementation>
</Method>

<Method name="GetBestSteuerung">
<ClassMethod>1</ClassMethod>
<FormalSpec>AdrOid:%String</FormalSpec>
<ReturnType>DBAgrofreshEK.BestStrg</ReturnType>
<Implementation><![CDATA[
	set steuerung = ""
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.LieferantenStrg 
	     WHERE Lieferant=:AdrOid)
	if (id '= "") {
		set steuerung = ##Class(DBAgrofreshEK.LieferantenStrg).%OpenId(id)
	} else {
		set steuerung = ##Class(DBAgrofreshEK.LieferantenStrg).%New()
	}
	quit steuerung
]]></Implementation>
</Method>

<Method name="DeleteBestSteuerung">
<ClassMethod>1</ClassMethod>
<FormalSpec>AdrOid:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	set status = $$$OK
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.LieferantenStrg 
	     WHERE Lieferant=:AdrOid)
	if (id '= "") {
		set status = ##Class(DBAgrofreshEK.BestStrg).%DeleteId(id)
	}
	quit status
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DefaultData>LieferantenStrgDefaultData</DefaultData>
<Data name="LieferantenStrgDefaultData">
<Structure>listnode</Structure>
<Subscript>"LieferantenStrg"</Subscript>
<Value name="1">
<Value>Lieferant</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="DBAgrofreshEK.PDFStream">
<Super>%Persistent</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61772,29616.356736</TimeCreated>

<Property name="DataStream">
<Type>%GlobalBinaryStream</Type>
</Property>

<Property name="BestAnnahmeschein">
<Type>DBAgrofreshEK.BestellungsKopf</Type>
<Cardinality>many</Cardinality>
<Inverse>AnnahmescheinPDF</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="BestEtiketten">
<Type>DBAgrofreshEK.BestellungsKopf</Type>
<Cardinality>many</Cardinality>
<Inverse>EtikettenPDF</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="BestAbrechnung">
<Type>DBAgrofreshEK.BestellungsKopf</Type>
<Cardinality>many</Cardinality>
<Inverse>AbrechnungPDF</Inverse>
<Relationship>1</Relationship>
</Property>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.PDFStreamD</DataLocation>
<DefaultData>PDFStreamDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.PDFStreamD</IdLocation>
<IndexLocation>^DBAgrofreshEK.PDFStreamI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.PDFStreamS</StreamLocation>
<Data name="PDFStreamDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>DataStream</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="DataStream">
</Property>
</Storage>
</Class>


<Project name="DBAgrofreshEK" TargetType="3">
  <Items>
    <ProjectItem name="DBAgrofreshEK.AF.BestellungsKopfAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.BestellungsposAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.ChargenAusgangAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.ChargenEingangAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.GebDetailAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.GebKontrAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.GebPreisAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.LGPreisAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.LagerAufnahmeAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.LieferantPreisAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.PreisAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.QSMeldungAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.AbrechnungstypAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.BestellartAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.DrucktypAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.FormGebFussAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.FormGebFussEAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.FormularAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.FusstextAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.LieferartAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.MargeAbtAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.MargenAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.StrgBestAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.TblDataEntryAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.TblFussAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.TblFussEntryAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.TblFussSkontoEntryAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.TblKopfAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.TblKopfEntryAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.TblSREntryAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.TblSRgfEntryAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.TblSRgkEntryAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.SD.VerbeitungstypAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.StatistikDetailiertAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.StrgAbzuegeAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.VerarbAuftragAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.VerarbAufwandAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.AF.VerarbeitungAF" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.BestStrg" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.BestellungsKopf" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.Bestellungspos" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.CSVStream" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.ChargenAusgang" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.ChargenEingang" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.Eingangspreis" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.GebDetail" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.GebKontr" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.GebPreis" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.KGGebPreis" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.KGPreis" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.Konst" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.LGGebPreis" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.LGPreis" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.LagerAufnahme" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.LieferantenGebPreis" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.LieferantenPreis" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.LieferantenStrg" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.PDFStream" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.Preis" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.QSMeldung" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.Abrechnungstyp" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.Bestellart" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.DTypForm" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.DTypRepHead" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.DTypTblFuss" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.DTypTblKopf" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.Drucktyp" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.FormDrucker" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.FormDruckerBen" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.FormGebFuss" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.FormGebFussE" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.Formular" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.Fusstext" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.Hilfstexte" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.Lieferart" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.Marge" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.MargeAbt" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.StrgBest" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.TblDataE" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.TblFuss" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.TblFussE" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.TblFussSktE" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.TblKopf" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.TblKopfE" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.TblSREntry" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.TblSRgfEntry" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.TblSRgkEntry" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SD.Verarbeitungstyp" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.SSCCInfo" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.StrgAbzuege" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.TypStrg" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.VerarbAuftrag" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.VerarbAufwand" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.VerarbProv" type="CLS"></ProjectItem>
    <ProjectItem name="DBAgrofreshEK.Verarbeitung" type="CLS"></ProjectItem>
  </Items>
</Project>


<Class name="DBAgrofreshEK.Preis">
<Description>
</Description>
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61102,42498.23516</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Artikel">
<Type>DBAgrofresh.Artikel</Type>
<Cardinality>one</Cardinality>
<Inverse>EKPreisArtikel</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Artikel"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ArtikelIndex">
<Properties>Artikel</Properties>
</Index>

<Property name="ArtikelAktiv">
<Description>
Artikel aktiv</Description>
<Type>%Boolean</Type>
</Property>

<Property name="Preislisten">
<Description>
Preislisten</Description>
<Type>%Boolean</Type>
</Property>

<Property name="AnzahlJeGebinde">
<Description>
AnzahlJeGebinde</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="LieferantenSpezArtNr">
<Description>
KundenSpezArtikelnummer</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Barcode">
<Description>
Barcode</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Einstandspreis">
<Description>
Einstandspreis</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="AbpackdatumTage">
<Description>
AbpackdatumTage</Description>
<Type>%Integer</Type>
</Property>

<Property name="VerfalldatumTage">
<Description>
VerfaldatumTage</Description>
<Type>%Integer</Type>
</Property>

<Property name="AnzahlJeEinheitTyp2">
<Description>
Anzahl Je Einheit Typ2</Description>
<Type>%Integer</Type>
</Property>

<Property name="Zusatzsortierung">
<Description>
Zusatzsortierung</Description>
<Type>%Integer</Type>
</Property>

<Property name="EinstandspreisAbDatum">
<Description>
EinstandspreisAbDatum</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="DatumPreisaenderung">
<Description>
Datum Preisaenderung</Description>
<Type>%Date</Type>
</Property>

<Property name="Etikettendruck">
<Description>
Etikettendruck</Description>
<Type>%Integer</Type>
</Property>

<Property name="EtiketteJeGebinde">
<Description>
Etikette je Gebinde</Description>
<Type>%Integer</Type>
</Property>

<Property name="AnzahlEtikettenJeGebinde">
<Description>
AnzahlEtikettenJeGebinde</Description>
<Type>%Integer</Type>
</Property>

<Property name="ArtikeltextEtikette">
<Description>
Artikeltext Etikette</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Gebinde">
<Type>DBAgrofresh.SD.Gebinde</Type>
<Cardinality>one</Cardinality>
<Inverse>EKPreisGebinde</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Gebinde"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="GebindeIndex">
<Properties>Gebinde</Properties>
</Index>

<Property name="Herkunft">
<Type>DBAgrofresh.SD.Herkunft</Type>
<Cardinality>one</Cardinality>
<Inverse>EKPreisHerkunft</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Herkunft"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="HerkunftIndex">
<Properties>Herkunft</Properties>
</Index>

<Property name="Produktionsart">
<Type>DBAgrofresh.SD.Produktionsart</Type>
<Cardinality>one</Cardinality>
<Inverse>EKPreisProdArt</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Produktionsart"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ProduktionsartIndex">
<Properties>Produktionsart</Properties>
</Index>

<Property name="Etikettentyp1">
<Type>DBPrint.Etikette</Type>
<Cardinality>one</Cardinality>
<Inverse>EKPreisEtikettentyp1</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Etikettentyp1"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="Etikettentyp1Index">
<Properties>Etikettentyp1</Properties>
</Index>

<Property name="Etikettentyp2">
<Type>DBPrint.Etikette</Type>
<Cardinality>one</Cardinality>
<Inverse>EKPreisEtikettentyp2</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Etikettentyp2"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="Etikettentyp2Index">
<Properties>Etikettentyp2</Properties>
</Index>

<Property name="LieferantEtikette">
<Type>DBAdressen.Adresse</Type>
<Cardinality>one</Cardinality>
<Inverse>EKPreisLieferant</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="LieferantEtikette"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="LieferantEtiketteIndex">
<Properties>LieferantEtikette</Properties>
</Index>

<Property name="Produzent">
<Type>DBAdressen.Adresse</Type>
<Cardinality>one</Cardinality>
<Inverse>EKPreisProduzent</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Produzent"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ProduzentIndex">
<Properties>Produzent</Properties>
</Index>

<Property name="Zulieferant">
<Type>DBAdressen.Adresse</Type>
<Cardinality>one</Cardinality>
<Inverse>EKPreisZulieferant</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Zulieferant"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ZulieferantIndex">
<Properties>Zulieferant</Properties>
</Index>

<Property name="Menge">
<Type>DBAgrofresh.SD.Mengencode</Type>
<Cardinality>one</Cardinality>
<Inverse>EKPreisMenge</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Menge"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="MengeIndex">
<Properties>Menge</Properties>
</Index>

<Property name="Abzugstyp">
<Type>DBAgrofresh.SD.Abzugstyp</Type>
<Cardinality>one</Cardinality>
<Inverse>EKPreisAbzugstyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abzugstyp"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="AbzugstypIndex">
<Properties>Abzugstyp</Properties>
</Index>

<Property name="GrammJeEinheit">
<Description>
Gramm je Einheit</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="GrammJeLaufmeter">
<Description>
Gramm je Laufmeter</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Method name="GetPreis">
<Description><![CDATA[
Methode gibt den Preis anhand des Mandanten, Adresse und Artikel zurück
onlyGroup steuert, dass nur nach den Gruppe gesucht wird -> dann muss onlyKunde auf False sein!!!
onlyKunde steuert, dass explizit nur nach dem Kunden gesucht wird,
und nicht wenn der Kunde nicht gefunden wurde, noch nach der Gruppe gesucht wird]]></Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,FibuMandOid:%String,AdressOid:%String,ArtikelOid:%String,onlyGroup:%Boolean,onlyKunde:%Boolean,otherKGOid:%String=""</FormalSpec>
<ReturnType>DBAgrofreshEK.Preis</ReturnType>
<Implementation><![CDATA[
	
	set adr = ##class(DBAdressen.Adresse).%OpenId(AdressOid)
	set krediOid = ##class(DBDebiKredi.Kreditor).GetIdByAdrOid(FibuMandOid, AdressOid)
	set art = ##class(DBAgrofresh.Artikel).%OpenId(ArtikelOid)
	set artGrpOid = ""
	set lieferantenGrpOid = ""
	set lieferantenGrpNr = ""
	set artNr = ""
	// Lieferantengruppe der Adresse auswählen
	if (otherKGOid = "") {
		if (adr '= "") && (adr.Lieferantengruppe '= "") {
			set lieferantenGrpOid = adr.Lieferantengruppe.%Id()
			set lieferantenGrpNr = adr.Lieferantengruppe.Code	
		}
	// andere Kundengruppe auswählen
	} else {
		set kg = ##class(DBAdressen.SD.Lieferantengrp).%OpenId(otherKGOid)
		if (kg '= "") {
			set lieferantenGrpOid = kg.%Id()
			set lieferantenGrpNr = kg.Code	
		}
	}
	if (art '= "") {
		if (art.Artikelgruppe '= "") {
			set artGrp = art.Artikelgruppe.%Id()
		}
		set artNr = art.ArtikelNr
	}
	set onlyGroup = onlyGroup && (lieferantenGrpNr < ##class(DBAgrofresh.Konst).KundenGrpKundenbezStart())

	// wenn Oids nicht übergeben wurden -> Quit
	if ((MandantOid = "") || ((otherKGOid="") && (AdressOid = "")) || (ArtikelOid = "")) {
		Quit ""
	}
	// onlyGroup und onlyKunde dürfen nie beide auf true gesetzt sein
	// Wenn doch -> Quit
	if ((onlyGroup = 1) && (onlyKunde = 1)) {
		Quit ""
	}
	
	
	set id = ""	
	set preistyp = 0	
	//wenn Kundenspezifisch
	if (onlyGroup = 0) {
		
		set preistyp = 1
		&SQL(SELECT ID into :id FROM DBAgrofreshEK.LieferantenPreis 
			WHERE Artikel->Mandant = :MandantOid
			AND Lieferant = :krediOid
			AND Artikel = :ArtikelOid)
			
		if (SQLCODE '= 0) {
			set id = ""
		}
		
	} // wenn noch kein Preis gefunden und Kundengrp < 90
	if ((id = "") && (onlyKunde = 0) && (lieferantenGrpNr < ##class(DBAgrofresh.Konst).KundenGrpKundenbezStart())) {
		set preistyp = 2
		&SQL(SELECT ID into :id FROM DBAgrofreshEK.LGPreis 
			WHERE Artikel->Mandant = :MandantOid
			AND Gruppe = :lieferantenGrpOid
			AND Artikel = :ArtikelOid)
			
		if (SQLCODE '= 0) {
			set id = ""
		}
	}
	if (id '= "") {
		if (preistyp = 1) {
			Quit ##class(DBAgrofreshEK.LieferantenPreis).%OpenId(id)	
		} elseif (preistyp = 2) {
			Quit ##class(DBAgrofreshEK.LGPreis).%OpenId(id)
		} else {
			Quit ""	
		}
	} else {
		Quit ""	
	}
]]></Implementation>
</Method>

<Method name="GetOidForArtikelbaum">
<ClassMethod>1</ClassMethod>
<FormalSpec>KreditorOid:%String,lieferantenGrpOid:%String,ArtikelOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	set zusatzNr = 0
	set lieferantenGrpNr = 0
	
	set kg = ##class(DBAdressen.SD.Lieferantengrp).%OpenId(lieferantenGrpOid)
	if (kg '= "") {
		set lieferantenGrpNr = kg.Code	
	}
	//wenn Kundenspezifisch
	&sql(SELECT ID into :id FROM DBAgrofreshEK.LieferantenPreis 
		WHERE Lieferant = :KreditorOid
		AND Artikel->ID = :ArtikelOid)
        
	if (SQLCODE '= 0) {
		set id = ""
	}
	
	// wenn noch kein Preis gefunden und Kundengrp < 90
	if ((id = "") && (lieferantenGrpNr < ##class(DBAgrofresh.Konst).KundenGrpKundenbezStart())) {
		&SQL(SELECT ID into :id FROM DBAgrofreshEK.LGPreis 
			WHERE Artikel->ID = :ArtikelOid
			AND Gruppe = :lieferantenGrpOid)
			  
		if (SQLCODE '= 0) {
			set id = ""
		}
	}

	quit id
]]></Implementation>
</Method>

<Method name="ArtikelHasSpezPreis">
<ClassMethod>1</ClassMethod>
<FormalSpec>KreditorOid:%String,lieferantenGrpOid:%String,ArtikelOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set id = ##class(DBAgrofreshEK.Preis).GetOidForArtikelbaum(KreditorOid, lieferantenGrpOid, ArtikelOid)
	quit id '= ""
]]></Implementation>
</Method>

<Method name="ClonePreis">
<ClassMethod>1</ClassMethod>
<FormalSpec>srcPreis:DBAgrofreshEK.Preis</FormalSpec>
<ReturnType>DBAgrofreshEK.Preis</ReturnType>
<Implementation><![CDATA[
	set retval = ""
	if (srcPreis '= "") {
		set retval = srcPreis.%ConstructClone(-1)
	
	}
	Quit retval
]]></Implementation>
</Method>

<Method name="UpdatePreiseAbDatum">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,Alle:%Boolean,KundenGruppen:%Boolean,GruppenNrVon:%Integer,GruppenNrBis:%Integer,Adressen:%Boolean,AdressNrVon:%Integer,AdressNrBis:%Integer,AuchNullWerte:%Boolean</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	
	set cnt = 0
	set date = $PIECE($HOROLOG,",",1)
	if (Alle = 1) {
		if (AuchNullWerte = 1) {
			&sql(UPDATE DBAgrofreshEK.Preis
				SET Einstandspreis = EinstandspreisAbDatum,EinstandspreisAbDatum = 0, 
					DatumPreisaenderung = NULL 
				 WHERE DatumPreisaenderung <= :date AND not DatumPreisaenderung is null AND Artikel->Mandant = :MandantOid)
		} else {
			&sql(UPDATE DBAgrofreshEK.Preis 
				SET Einstandspreis = case NVL(EinstandspreisAbDatum,0) when 0 THEN Einstandspreis ELSE EinstandspreisAbDatum END, EinstandspreisAbDatum = 0,
					DatumPreisaenderung = NULL 
				WHERE DatumPreisaenderung <= :date AND not DatumPreisaenderung is null
				 AND Artikel->Mandant = :MandantOid)
		}
	} else {
		if (KundenGruppen = 1) {
			if (AuchNullWerte = 1) {
				&sql(UPDATE DBAgrofreshEK.LGPreis
				SET Einstandspreis = EinstandspreisAbDatum,EinstandspreisAbDatum = 0, 
					DatumPreisaenderung = NULL 
					 WHERE DatumPreisaenderung <= :date AND Artikel->Mandant = :MandantOid AND not DatumPreisaenderung is null
					 AND Gruppe->Code BETWEEN :GruppenNrVon AND :GruppenNrBis)
			} else {
				&sql(UPDATE DBAgrofreshEK.LGPreis 
					SET Einstandspreis = case NVL(EinstandspreisAbDatum,0) when 0 THEN Einstandspreis ELSE EinstandspreisAbDatum END, EinstandspreisAbDatum = 0,
						DatumPreisaenderung = NULL 
					WHERE DatumPreisaenderung <= :date AND not DatumPreisaenderung is null
					 AND Artikel->Mandant = :MandantOid
					 AND Gruppe->Code BETWEEN :GruppenNrVon AND :GruppenNrBis)
			}
		} 
		if (Adressen = 1) {
			if (AuchNullWerte = 1) {
				&sql(UPDATE DBAgrofreshEK.LieferantenPreis 
					SET Einstandspreis = EinstandspreisAbDatum,EinstandspreisAbDatum = 0, 
						DatumPreisaenderung = NULL 
					 WHERE DatumPreisaenderung <= :date AND Artikel->Mandant = :MandantOid AND not DatumPreisaenderung is null
					 AND Lieferant->Adresse->AdressNummer BETWEEN :AdressNrVon AND :AdressNrBis)
			} else {
				&sql(UPDATE DBAgrofreshEK.LieferantenPreis  
					SET Einstandspreis = case NVL(EinstandspreisAbDatum,0) when 0 THEN Einstandspreis ELSE EinstandspreisAbDatum END, EinstandspreisAbDatum = 0,
						DatumPreisaenderung = NULL 
					WHERE DatumPreisaenderung <= :date AND not DatumPreisaenderung is null
					 AND Artikel->Mandant = :MandantOid
					 AND Lieferant->Adresse->AdressNummer BETWEEN :AdressNrVon AND :AdressNrBis)
			}
		}
	}
	
	set cnt = %ROWCOUNT
	Quit cnt
]]></Implementation>
</Method>

<Method name="EtikettenUebernehmen">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,GruppenNrVon:%Integer,GruppenNrBis:%Integer,Etikettendruck:%Integer=0,EtiketteJeGeb:%Integer=0,Etikettentyp1:%String=""</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set cnt = 0
	set ettyp = ##class(DBAgrofreshEK.Etikette).%OpenId(Etikettentyp1)
	if (ettyp '= "") {
	Set strSQL="UPDATE DBAgrofreshEK.LGPreis "_
		 			"SET Etikettendruck = "_Etikettendruck_", EtiketteJeGebinde = "_EtiketteJeGeb_", Etikettentyp1 = "_ettyp_" "_
		 			"WHERE Artikel->Mandant = '"_MandantOid_"' "_
		 			"AND Gruppe->Code BETWEEN "_GruppenNrVon_" AND "_GruppenNrBis
	} else {
		Set strSQL="UPDATE DBAgrofreshEK.LGPreis "_
		 			"SET Etikettendruck = "_Etikettendruck_", EtiketteJeGebinde = "_EtiketteJeGeb_
		 			" WHERE Artikel->Mandant = '"_MandantOid_"' "_
		 			"AND Gruppe->Code BETWEEN "_GruppenNrVon_" AND "_GruppenNrBis
	}
	
	
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
	
	set cnt = %ROWCOUNT
	Quit cnt
]]></Implementation>
</Method>

<Method name="DeleteAllByMandant">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	// Verknüpfung auf Detailpositionen zurücksetzen
	Set strSQL="UPDATE DBAgrofreshEK.Bestellungspos "_
			"SET SpezPreis = NULL "_
			"WHERE Artikel->Mandant = '"_MandantOid_"'"
			
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
    IF $$$ISOK(sc) {
	    
	    // SpezEinst von Kunde löschen
		Set strSQL="DELETE FROM DBAgrofreshEK.LieferantenPreis "_
				"WHERE Artikel->Mandant = '"_MandantOid_"'"
			
		Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
		Do rs.Prepare(strSQL)
		Set sc=rs.Execute()
	    IF $$$ISOK(sc) {
		    
		    
	   		 // SpezEinst von Lieferantengruppe löschen
			Set strSQL="DELETE FROM DBAgrofreshEK.LGPreis "_
					"WHERE Artikel->Mandant = '"_MandantOid_"'"
			
			Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
			Do rs.Prepare(strSQL)
			Set sc=rs.Execute()
	    }
    }
	quit sc
]]></Implementation>
</Method>

<Method name="DeleteAllPreiseByMandant">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	// Verknüpfung auf Detailpositionen zurücksetzen
	Set strSQL="SELECT ID FROM DBAgrofreshEK.Preis "_
			"WHERE Artikel->Mandant = '"_MandantOid_"'"
			
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
    IF $$$ISOK(sc) {
		While rs.Next(.sc) {
			Set id=rs.Data("ID")
			set preis = ##class(DBAgrofreshEK.Preis).%OpenId(id)
			set preis.DatumPreisaenderung = ""
			set preis.Einstandspreis = 0
			set preis.EinstandspreisAbDatum = 0
			d preis.%Save()
			k preis
		}
	}
	quit sc
]]></Implementation>
</Method>

<Method name="DeleteReferenzes">
<ClassMethod>1</ClassMethod>
<FormalSpec>tId:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	// Verknüpfung auf Detailpositionen zurücksetzen
	Set strSQL="UPDATE DBAgrofreshEK.Bestellungspos "_
			"SET SpezPreis = NULL "_
			"WHERE SpezPreis->ID = '"_tId_"'"
	w strSQL, !
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	Do rs.Prepare(strSQL)
	Set sc=rs.Execute()
    IF $$$ISOK(sc) {
		Quit $$$OK
    } else {
	    Quit $$$ERROR(##class(DBCore.ErrorCodes).OBJEKTREFSNICHTLOESCHBAR() ,##class(DBCore.ErrorCodes).OBJEKTREFSNICHTLOESCHBARMSG())
    }
]]></Implementation>
</Method>

<Method name="%OnDelete">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Delete</METHOD> method to 
provide notification that the object specified by <VAR>oid</VAR> is being deleted.

<P>If this method returns an error then the object will not be deleted.
[Previously private]]]></Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%ObjectIdentity</FormalSpec>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
    Set tId = $LG(oid,1)
    Quit ##class(DBAgrofreshEK.Preis).DeleteReferenzes(tId)
]]></Implementation>
</Method>

<Property name="BPSpezPreis">
<Type>DBAgrofreshEK.Bestellungspos</Type>
<Cardinality>many</Cardinality>
<Inverse>SpezPreis</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="Qualitaetsklasse">
<Type>DBAgrofresh.SD.Qualitaetsklasse</Type>
<Cardinality>one</Cardinality>
<Inverse>PreisEKQualitaetsklasse</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Qualitaetsklasse"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="QualitaetsklasseIndex">
<Properties>Qualitaetsklasse</Properties>
</Index>

<Property name="Handlingskosten">
<Description>
Handlingskosten</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="HandlingskostenAbDatum">
<Description>
HandlingskostenAbDatum</Description>
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Verarbeitungsverlust">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.PreisD</DataLocation>
<DefaultData>PreisDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.PreisD</IdLocation>
<IndexLocation>^DBAgrofreshEK.PreisI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.PreisS</StreamLocation>
<Data name="PreisDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>ArtikelAktiv</Value>
</Value>
<Value name="3">
<Value>Preislisten</Value>
</Value>
<Value name="4">
<Value>AnzahlJeGebinde</Value>
</Value>
<Value name="5">
<Value>LieferantenSpezArtNr</Value>
</Value>
<Value name="6">
<Value>Barcode</Value>
</Value>
<Value name="7">
<Value>Einstandspreis</Value>
</Value>
<Value name="8">
<Value>AbpackdatumTage</Value>
</Value>
<Value name="9">
<Value>VerfalldatumTage</Value>
</Value>
<Value name="10">
<Value>AnzahlJeEinheitTyp2</Value>
</Value>
<Value name="11">
<Value>Zusatzsortierung</Value>
</Value>
<Value name="12">
<Value>EinstandspreisAbDatum</Value>
</Value>
<Value name="13">
<Value>DatumPreisaenderung</Value>
</Value>
<Value name="14">
<Value>Etikettendruck</Value>
</Value>
<Value name="15">
<Value>EtiketteJeGebinde</Value>
</Value>
<Value name="16">
<Value>AnzahlEtikettenJeGebinde</Value>
</Value>
<Value name="17">
<Value>ArtikeltextEtikette</Value>
</Value>
<Value name="18">
<Value>Etikettentyp2</Value>
</Value>
<Value name="19">
<Value>Lieferant</Value>
</Value>
<Value name="20">
<Value>Produzent</Value>
</Value>
<Value name="21">
<Value>Zulieferant</Value>
</Value>
<Value name="22">
<Value>Menge</Value>
</Value>
<Value name="23">
<Value>Abzugstyp</Value>
</Value>
<Value name="24">
<Value>GrammJeEinheit</Value>
</Value>
<Value name="25">
<Value>GrammJeLaufmeter</Value>
</Value>
<Value name="26">
<Value>Gebinde</Value>
</Value>
<Value name="27">
<Value>Herkunft</Value>
</Value>
<Value name="28">
<Value>Produktionsart</Value>
</Value>
<Value name="29">
<Value>Artikel</Value>
</Value>
<Value name="30">
<Value>Etikettentyp1</Value>
</Value>
<Value name="31">
<Value>LieferantEtikette</Value>
</Value>
<Value name="32">
<Value>Qualitaetsklasse</Value>
</Value>
<Value name="33">
<Value>Handlingskosten</Value>
</Value>
<Value name="34">
<Value>HandlingskostenAbDatum</Value>
</Value>
<Value name="35">
<Value>Verarbeitungsverlust</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="AbpackdatumTage">
</Property>
<Property name="Abzugstyp">
</Property>
<Property name="AnzahlEtikettenJeGebinde">
</Property>
<Property name="AnzahlJeEinheitTyp2">
</Property>
<Property name="AnzahlJeGebinde">
</Property>
<Property name="Artikel">
</Property>
<Property name="ArtikelAktiv">
</Property>
<Property name="ArtikeltextEtikette">
</Property>
<Property name="Barcode">
</Property>
<Property name="DatumPreisaenderung">
</Property>
<Property name="Einstandspreis">
</Property>
<Property name="EinstandspreisAbDatum">
</Property>
<Property name="EtiketteJeGebinde">
</Property>
<Property name="Etikettendruck">
</Property>
<Property name="Etikettentyp1">
</Property>
<Property name="Etikettentyp2">
</Property>
<Property name="Gebinde">
</Property>
<Property name="GrammJeEinheit">
</Property>
<Property name="GrammJeLaufmeter">
</Property>
<Property name="Handlingskosten">
</Property>
<Property name="HandlingskostenAbDatum">
</Property>
<Property name="Herkunft">
</Property>
<Property name="LieferantEtikette">
</Property>
<Property name="LieferantenSpezArtNr">
</Property>
<Property name="Menge">
</Property>
<Property name="Preislisten">
</Property>
<Property name="Produktionsart">
</Property>
<Property name="Produzent">
</Property>
<Property name="Qualitaetsklasse">
</Property>
<Property name="Verarbeitungsverlust">
</Property>
<Property name="VerfalldatumTage">
</Property>
<Property name="Zulieferant">
</Property>
<Property name="Zusatzsortierung">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.QSMeldung">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62416,57211.694258</TimeChanged>
<TimeCreated>61658,50817.857796</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Charge">
<Type>DBAgrofreshEK.ChargenEingang</Type>
<Cardinality>one</Cardinality>
<Inverse>QSMeldung</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Charge"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ChargeIndex">
<Properties>Charge</Properties>
<Unique>1</Unique>
</Index>

<Property name="QsText">
<Description>
QS Text für Allgemeinen Dialog ohne Chargen</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="VkDetailpos">
<Description>
Auftragsverwaltung Detailposition, wird auch für die jenigen benötigt welche keine Chargenverwaltung haben und deshalb über die Detailposition arbeiten</Description>
<Type>DBAgrofresh.Auftragspos</Type>
<Cardinality>one</Cardinality>
<Inverse>QsMeldung</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="VkDetailpos"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="VkDetailposIndex">
<Properties>VkDetailpos</Properties>
</Index>

<Property name="EkAbteilung">
<Description>
für jene die anstatt Vertreter Abteilung haben</Description>
<Type>DBCore.Abteilung</Type>
<Cardinality>one</Cardinality>
<Inverse>QsMeldungEk</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="EkAbteilung"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="EkAbteilungIndex">
<Properties>EkAbteilung</Properties>
</Index>

<Property name="EkQsMeldung">
<Type>DBAgrofresh.SD.QSMeldTyp</Type>
<Cardinality>one</Cardinality>
<Inverse>QsMeldungEk</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="EkQsMeldung"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="EkQsMeldungIndex">
<Properties>EkQsMeldung</Properties>
</Index>

<Property name="EkBemerkung">
<Description>
QS Text</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="32767"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="EkBild">
<Type>%GlobalBinaryStream</Type>
</Property>

<Property name="EkBildName">
<Description>
Name der eingelesenen Bild Datei</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="VkVertreter">
<Type>DBAdressen.SD.Vertreter</Type>
<Cardinality>one</Cardinality>
<Inverse>QsMeldungVk</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="VkVertreter"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="VkVertreterIndex">
<Properties>VkVertreter</Properties>
</Index>

<Property name="VkAbteilung">
<Description>
für jene die anstatt Vertreter Abteilung haben</Description>
<Type>DBCore.Abteilung</Type>
<Cardinality>one</Cardinality>
<Inverse>QsMeldungVk</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="VkAbteilung"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="VkAbteilungIndex">
<Properties>VkAbteilung</Properties>
</Index>

<Property name="VkBemerkung">
<Description>
QS Text</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="32767"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="VkBild">
<Type>%GlobalBinaryStream</Type>
</Property>

<Property name="VkBildName">
<Description>
Name der eingelesenen Bild Datei</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="VkQsMeldung">
<Type>DBAgrofresh.SD.QSMeldTyp</Type>
<Cardinality>one</Cardinality>
<Inverse>QsMeldungVk</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="VkQsMeldung"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="VkQsMeldungIndex">
<Properties>VkQsMeldung</Properties>
</Index>

<Property name="VkQsLieferber">
<Type>DBAgrofresh.SD.QSLieferber</Type>
<Cardinality>one</Cardinality>
<Inverse>QsMeldungVk</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="VkQsLieferber"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="VkQsLieferberIndex">
<Properties>VkQsLieferber</Properties>
</Index>

<Property name="VkQSQualitaet">
<Type>DBAgrofresh.SD.QSQualitaet</Type>
<Cardinality>one</Cardinality>
<Inverse>QsMeldungVk</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="VkQSQualitaet"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="VkQSQualitaetIndex">
<Properties>VkQSQualitaet</Properties>
</Index>

<Property name="VkQsTransport">
<Type>DBAgrofresh.SD.QSTransport</Type>
<Cardinality>one</Cardinality>
<Inverse>QsMeldungVk</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="VkQsLieferber"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="VkQsTransportIndex">
<Properties>VkQsTransport</Properties>
</Index>

<Property name="EkQsLieferber">
<Type>DBAgrofresh.SD.QSLieferber</Type>
<Cardinality>one</Cardinality>
<Inverse>QsMeldungEk</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="EkQsLieferber"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="EkQsLieferberIndex">
<Properties>EkQsLieferber</Properties>
</Index>

<Property name="EkQSQualitaet">
<Type>DBAgrofresh.SD.QSQualitaet</Type>
<Cardinality>one</Cardinality>
<Inverse>QsMeldungEk</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="EkQSQualitaet"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="EkQSQualitaetIndex">
<Properties>EkQSQualitaet</Properties>
</Index>

<Property name="EkQsTransport">
<Type>DBAgrofresh.SD.QSTransport</Type>
<Cardinality>one</Cardinality>
<Inverse>QsMeldungEk</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="EkQsLieferber"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="EkQsTransportIndex">
<Properties>EkQsTransport</Properties>
</Index>

<Property name="EkWarenannehmerNr">
<Type>%Library.Integer</Type>
</Property>

<Property name="EkAnzahlGebinde">
<Type>%Integer</Type>
</Property>

<Property name="EkMenge">
<Type>%Decimal</Type>
</Property>

<Property name="VkAnzahlGebinde">
<Type>%Integer</Type>
</Property>

<Property name="VkMenge">
<Type>%Decimal</Type>
</Property>

<Property name="EkQSDiverses">
<Type>DBAgrofresh.SD.QSDiverses</Type>
<Cardinality>one</Cardinality>
<Inverse>QsMeldungEk</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="EkQsLieferber"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="EkQSDiversesIndex">
<Properties>EkQSDiverses</Properties>
</Index>

<Property name="VkQSDiverses">
<Type>DBAgrofresh.SD.QSDiverses</Type>
<Cardinality>one</Cardinality>
<Inverse>QsMeldungVk</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="EkQsLieferber"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="VkQSDiversesIndex">
<Properties>VkQSDiverses</Properties>
</Index>

<Property name="EkWarenannehmer">
<Type>DBCore.Mitarbeiter</Type>
<Cardinality>one</Cardinality>
<Inverse>QSWarenannehmer</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="EkWarenannehmer"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Method name="GetOidByChargenOid">
<ClassMethod>1</ClassMethod>
<FormalSpec>ChargenOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK.QSMeldung WHERE Charge = :ChargenOid)
	Quit id
]]></Implementation>
</Method>

<Method name="GetOidByDetailOid">
<ClassMethod>1</ClassMethod>
<FormalSpec>DetPosOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK.QSMeldung WHERE VkDetailpos = :DetPosOid)
	Quit id
]]></Implementation>
</Method>

<Method name="OutputStreamVk">
<ReturnType>%Library.GlobalBinaryStream</ReturnType>
<Implementation><![CDATA[
	Set tmpStream=##class(%Library.GlobalBinaryStream).%New()
	Set Ret=""
	
	Set Size= ..VkBild.Size
	Set Ret=tmpStream.CopyFromAndSave(..VkBild)

	Quit tmpStream
]]></Implementation>
</Method>

<Method name="InputStreamVk">
<FormalSpec>Stream:%Library.GlobalBinaryStream</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	Set Ret=..VkBild.CopyFromAndSave(Stream)
	Set RetS = ..%Save()
	Set res=((RetS=1))
	Quit res
]]></Implementation>
</Method>

<Method name="OutputStreamEk">
<ReturnType>%Library.GlobalBinaryStream</ReturnType>
<Implementation><![CDATA[
	Set tmpStream=##class(%Library.GlobalBinaryStream).%New()
	Set Ret=""
	
	Set Size= ..EkBild.Size
	Set Ret=tmpStream.CopyFromAndSave(..EkBild)

	Quit tmpStream
]]></Implementation>
</Method>

<Method name="InputStreamEk">
<FormalSpec>Stream:%Library.GlobalBinaryStream</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	Set Ret=..EkBild.CopyFromAndSave(Stream)
	Set RetS = ..%Save()
	Set res=((RetS=1))
	Quit res
]]></Implementation>
</Method>

<Method name="GetBildStreamVk">
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%String</FormalSpec>
<ReturnType>%Library.GlobalBinaryStream</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set stream = ##class(%Library.GlobalBinaryStream).%New()
	if (oid '= "") {
		Set rs = ##Class(DBAgrofreshEK.QSMeldung).%OpenId(oid)
		set Ret = stream.CopyFromAndSave(rs.OutputStreamVk())	
	}	
	quit stream
]]></Implementation>
</Method>

<Method name="GetBildStreamEk">
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%String</FormalSpec>
<ReturnType>%Library.GlobalBinaryStream</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set stream = ##class(%Library.GlobalBinaryStream).%New()
	if (oid '= "") {
		Set rs = ##Class(DBAgrofreshEK.QSMeldung).%OpenId(oid)
		set Ret = stream.CopyFromAndSave(rs.OutputStreamEk())	
	}	
	quit stream
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.QSMeldungD</DataLocation>
<DefaultData>QSMeldungDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.QSMeldungD</IdLocation>
<IndexLocation>^DBAgrofreshEK.QSMeldungI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.QSMeldungS</StreamLocation>
<Data name="QSMeldungDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>QsText</Value>
</Value>
<Value name="3">
<Value>VkDetailpos</Value>
</Value>
<Value name="4">
<Value>EkVertreter</Value>
</Value>
<Value name="5">
<Value>EkAbteilung</Value>
</Value>
<Value name="6">
<Value>EkQsMeldung</Value>
</Value>
<Value name="7">
<Value>EkBemerkung</Value>
</Value>
<Value name="8">
<Value>EkBild</Value>
</Value>
<Value name="9">
<Value>VkVertreter</Value>
</Value>
<Value name="10">
<Value>VkAbteilung</Value>
</Value>
<Value name="11">
<Value>VkQsMeldung</Value>
</Value>
<Value name="12">
<Value>VkBemerkung</Value>
</Value>
<Value name="13">
<Value>VkBild</Value>
</Value>
<Value name="14">
<Value>Charge</Value>
</Value>
<Value name="15">
<Value>EkBildName</Value>
</Value>
<Value name="16">
<Value>VkBildName</Value>
</Value>
<Value name="17">
<Value>VkQsLieferber</Value>
</Value>
<Value name="18">
<Value>VkQSQualitaet</Value>
</Value>
<Value name="19">
<Value>VkQsTransport</Value>
</Value>
<Value name="20">
<Value>EkQsLieferber</Value>
</Value>
<Value name="21">
<Value>EkQSQualitaet</Value>
</Value>
<Value name="22">
<Value>EkQsTransport</Value>
</Value>
<Value name="23">
<Value>EkWarenannehmerNr</Value>
</Value>
<Value name="24">
<Value>EkWarenannehmerBenutzername</Value>
</Value>
<Value name="25">
<Value>EkWarenannehmerVorname</Value>
</Value>
<Value name="26">
<Value>EkWarenannehmerName</Value>
</Value>
<Value name="27">
<Value>EkAnzahlGebinde</Value>
</Value>
<Value name="28">
<Value>EkMenge</Value>
</Value>
<Value name="29">
<Value>VkAnzahlGebinde</Value>
</Value>
<Value name="30">
<Value>VkMenge</Value>
</Value>
<Value name="31">
<Value>EkQSDiverses</Value>
</Value>
<Value name="32">
<Value>VkQSDiverses</Value>
</Value>
<Value name="33">
<Value>EkWarenannehmer</Value>
</Value>
</Data>
<Property name="Charge"/>
<Property name="EkAbteilung"/>
<Property name="EkAnzahlGebinde"/>
<Property name="EkBemerkung"/>
<Property name="EkBild"/>
<Property name="EkBildName"/>
<Property name="EkMenge"/>
<Property name="EkQSDiverses"/>
<Property name="EkQSQualitaet"/>
<Property name="EkQsLieferber"/>
<Property name="EkQsMeldung"/>
<Property name="EkQsTransport"/>
<Property name="EkVertreter"/>
<Property name="EkWarenannehmer"/>
<Property name="EkWarenannehmerBenutzername"/>
<Property name="EkWarenannehmerName"/>
<Property name="EkWarenannehmerNr"/>
<Property name="EkWarenannehmerVorname"/>
<Property name="QsText"/>
<Property name="VkAbteilung"/>
<Property name="VkAnzahlGebinde"/>
<Property name="VkBemerkung"/>
<Property name="VkBild"/>
<Property name="VkBildName"/>
<Property name="VkDetailpos"/>
<Property name="VkMenge"/>
<Property name="VkQSDiverses"/>
<Property name="VkQSQualitaet"/>
<Property name="VkQsLieferber"/>
<Property name="VkQsMeldung"/>
<Property name="VkQsTransport"/>
<Property name="VkVertreter"/>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.Abrechnungstyp">
<Super>DBAgrofreshEK.SD.Hilfstexte</Super>
<TimeChanged>62262,42963</TimeChanged>
<TimeCreated>62262,42530.878482</TimeCreated>

<Method name="GetIdByPosNrOnMandant">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,PosNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
                set id = ""
                &sql(SELECT ID INTO :id FROM DBAgrofreshEK_SD.Abrechnungstyp
                                WHERE Mandant = :MandantOid AND PositionsNr = :PosNr)
                Quit id
]]></Implementation>
</Method>

<Property name="Bestellung">
<Type>DBAgrofreshEK.BestellungsKopf</Type>
<Cardinality>many</Cardinality>
<Inverse>Abrechnungstyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="Getreideart">
<Type>DBSpezial.Getr.SD.Getrart</Type>
<Cardinality>many</Cardinality>
<Inverse>Abrechnungstyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.Bestellart">
<Description>
</Description>
<Super>DBAgrofreshEK.SD.Hilfstexte,%XML.Adaptor</Super>
<TimeChanged>61658,53315.489534</TimeChanged>
<TimeCreated>61100,39419.427538</TimeCreated>
<Inheritance>right</Inheritance>

<Property name="BKBestellart">
<Type>DBAgrofreshEK.BestellungsKopf</Type>
<Cardinality>many</Cardinality>
<Inverse>Bestellart</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestellungsVorschlag">
<Type>DBDebiKredi.Kreditor</Type>
<Cardinality>many</Cardinality>
<Inverse>Bestellart</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Method name="GetIdByPosNrOnMandant">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,PosNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK_SD.Bestellart
		 WHERE Mandant = :MandantOid AND PositionsNr = :PosNr)
	Quit id
]]></Implementation>
</Method>

<Property name="BestStrgVorschlag">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>VorschlagBestellart</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.DTypForm">
<Super>%Persistent</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61723,34310.718174</TimeCreated>

<Property name="Drucktyp">
<Type>DBAgrofreshEK.SD.Drucktyp</Type>
<Cardinality>one</Cardinality>
<Inverse>Formular</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="DrucktypIndex">
<Properties>Drucktyp</Properties>
</Index>

<Property name="Formular">
<Type>DBAgrofreshEK.SD.Formular</Type>
<Cardinality>one</Cardinality>
<Inverse>Drucktyp</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="FormularIndex">
<Properties>Formular</Properties>
</Index>

<Property name="FormularTyp">
<Type>%Integer</Type>
</Property>

<Index name="PKey">
<Properties>Drucktyp,FormularTyp</Properties>
</Index>

<Method name="GetOidByDrucktyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>drucktypOid:%String,formularTyp:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO :oid
		 FROM DBAgrofreshEK_SD.DTypForm
		 WHERE Drucktyp=:drucktypOid AND FormularTyp=:formularTyp)
	Quit oid
]]></Implementation>
</Method>

<Method name="GetFormularOidByDrucktyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>drucktypOid:%String,formularTyp:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT Formular INTO :oid
		 FROM DBAgrofreshEK_SD.DTypForm
		 WHERE Drucktyp=:drucktypOid AND FormularTyp=:formularTyp)
	Quit oid
]]></Implementation>
</Method>

<Method name="GetFormularNrByDrucktyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>drucktypOid:%String,formularTyp:%Integer</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	Set nummer = ""
	&sql(SELECT Formular->Nummer INTO :nummer
		 FROM DBAgrofreshEK_SD.DTypForm
		 WHERE Drucktyp=:drucktypOid AND FormularTyp=:formularTyp)
	Quit nummer
]]></Implementation>
</Method>

<Method name="DeleteByDrucktyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>drucktypOid:%String,formularTyp:%Integer</FormalSpec>
<Implementation><![CDATA[
	&sql(Delete
		 FROM DBAgrofreshEK_SD.DTypForm
		 WHERE Drucktyp=:drucktypOid AND FormularTyp=:formularTyp)
]]></Implementation>
</Method>

<Method name="OutputStream">
<ClassMethod>1</ClassMethod>
<FormalSpec>DrucktypOid:%String,FormularTyp:%Integer,Sprache:%String</FormalSpec>
<ReturnType>%Library.GlobalBinaryStream</ReturnType>
<Implementation><![CDATA[
	Set tmpStream=##class(%Library.GlobalBinaryStream).%New()
	Set oid = ##class(DBAgrofreshEK.SD.DTypForm).GetFormularOidByDrucktyp(DrucktypOid, FormularTyp)
	Set Ret=""
	If (oid'="") {
		&sql(SELECT count(*) As Cnt INTO :Cnt
		     FROM DBCore.ReportStream 
		     WHERE AgrofreshEKFormular=:oid AND Sprache=:Sprache)
		If (Cnt>0) {
			&sql(SELECT %ID INTO :sID 
				 FROM DBCore.ReportStream 
				 WHERE AgrofreshEKFormular=:oid AND Sprache=:Sprache)
			Set s=##Class(DBCore.ReportStream).%OpenId(sID)
			Set Size=s.DataStream.Size
			Set Ret=tmpStream.CopyFromAndSave(s.DataStream)
		} Else {
			Set StdSprache="de"
			&sql(SELECT count(*) As Cnt INTO :Cnt
			     FROM DBCore.ReportStream 
			     WHERE AgrofreshEKFormular=:oid AND Sprache=:StdSprache)
			If (Cnt>0) {
				&sql(SELECT %ID INTO :sID 
				     FROM DBCore.ReportStream 
				     WHERE AgrofreshEKFormular=:oid AND Sprache=:StdSprache)
				Set s=##Class(DBCore.ReportStream).%OpenId(sID)
				Set Size=s.DataStream.Size
				Set Ret=tmpStream.CopyFromAndSave(s.DataStream)
			}
		}
	}
	Quit tmpStream
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.SD.DTypFormD</DataLocation>
<DefaultData>DTypFormDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.DTypFormD</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.DTypFormI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.DTypFormS</StreamLocation>
<Data name="DTypFormDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Drucktyp</Value>
</Value>
<Value name="3">
<Value>Formular</Value>
</Value>
<Value name="4">
<Value>FormularTyp</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Drucktyp">
</Property>
<Property name="Formular">
</Property>
<Property name="FormularTyp">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.DTypRepHead">
<Super>%Persistent</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61723,34387.372465</TimeCreated>

<Property name="Drucktyp">
<Type>DBAgrofreshEK.SD.Drucktyp</Type>
<Cardinality>one</Cardinality>
<Inverse>ReportHeader</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="DrucktypIndex">
<Properties>Drucktyp</Properties>
</Index>

<Property name="ReportHeader">
<Type>DBCore.ReportHeader</Type>
<Cardinality>one</Cardinality>
<Inverse>DrucktypAgrofreshEK</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="ReportHeaderIndex">
<Properties>ReportHeader</Properties>
</Index>

<Property name="FormularTyp">
<Type>%Integer</Type>
</Property>

<Property name="SeitenTyp">
<Type>%Integer</Type>
</Property>

<Index name="PKey">
<Properties>Drucktyp,FormularTyp,SeitenTyp</Properties>
</Index>

<Method name="GetOidByDrucktyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>drucktypOid:%String,formularTyp:%Integer,seitenTyp:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO :oid
		 FROM DBAgrofreshEK_SD.DTypRepHead
		 WHERE Drucktyp=:drucktypOid AND FormularTyp=:formularTyp AND SeitenTyp=:seitenTyp)
	Quit oid
]]></Implementation>
</Method>

<Method name="GetReportHeaderOidByDrucktyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>drucktypOid:%String,formularTyp:%Integer,seitenTyp:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ReportHeader INTO :oid
		 FROM DBAgrofreshEK_SD.DTypRepHead
		 WHERE Drucktyp=:drucktypOid AND FormularTyp=:formularTyp AND SeitenTyp=:seitenTyp)
	Quit oid
]]></Implementation>
</Method>

<Method name="GetReportHeaderNrByDrucktyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>drucktypOid:%String,formularTyp:%Integer,seitenTyp:%Integer</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	Set nummer = ""
	&sql(SELECT ReportHeader->Nummer INTO :nummer
		 FROM DBAgrofreshEK_SD.DTypRepHead
		 WHERE Drucktyp=:drucktypOid AND FormularTyp=:formularTyp AND SeitenTyp=:seitenTyp)
	Quit nummer
]]></Implementation>
</Method>

<Method name="DeleteByDrucktyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>drucktypOid:%String,formularTyp:%Integer,seitenTyp:%Integer</FormalSpec>
<Implementation><![CDATA[
	&sql(Delete
		 FROM DBAgrofreshEK_SD.DTypRepHead
		 WHERE Drucktyp=:drucktypOid AND FormularTyp=:formularTyp AND SeitenTyp=:seitenTyp)
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.SD.DTypRepHeadD</DataLocation>
<DefaultData>DTypRepHeadDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.DTypRepHeadD</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.DTypRepHeadI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.DTypRepHeadS</StreamLocation>
<Data name="DTypRepHeadDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Drucktyp</Value>
</Value>
<Value name="3">
<Value>ReportHeader</Value>
</Value>
<Value name="4">
<Value>FormularTyp</Value>
</Value>
<Value name="5">
<Value>SeitenTyp</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Drucktyp">
</Property>
<Property name="FormularTyp">
</Property>
<Property name="ReportHeader">
</Property>
<Property name="SeitenTyp">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.DTypTblFuss">
<Super>%Persistent</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61723,34426.060168</TimeCreated>

<Property name="Drucktyp">
<Type>DBAgrofreshEK.SD.Drucktyp</Type>
<Cardinality>one</Cardinality>
<Inverse>TblFuss</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="DrucktypIndex">
<Properties>Drucktyp</Properties>
</Index>

<Property name="TblFuss">
<Type>DBAgrofreshEK.SD.TblFuss</Type>
<Cardinality>one</Cardinality>
<Inverse>Drucktyp</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="TblFussIndex">
<Properties>TblFuss</Properties>
</Index>

<Property name="FormularTyp">
<Type>%Integer</Type>
</Property>

<Index name="PKey">
<Properties>Drucktyp,FormularTyp</Properties>
</Index>

<Method name="GetOidByDrucktyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>drucktypOid:%String,formularTyp:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO :oid
		 FROM DBAgrofreshEK_SD.DTypTblFuss
		 WHERE Drucktyp=:drucktypOid AND FormularTyp=:formularTyp)
	Quit oid
]]></Implementation>
</Method>

<Method name="GetFussOidByDrucktyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>drucktypOid:%String,formularTyp:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT TblFuss INTO :oid
		 FROM DBAgrofreshEK_SD.DTypTblFuss
		 WHERE Drucktyp=:drucktypOid AND FormularTyp=:formularTyp)
	Quit oid
]]></Implementation>
</Method>

<Method name="GetFussNrByDrucktyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>drucktypOid:%String,formularTyp:%Integer</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	Set nummer = ""
	&sql(SELECT TblFuss->Nummer INTO :nummer
		 FROM DBAgrofreshEK_SD.DTypTblFuss
		 WHERE Drucktyp=:drucktypOid AND FormularTyp=:formularTyp)
	Quit nummer
]]></Implementation>
</Method>

<Method name="DeleteByDrucktyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>drucktypOid:%String,formularTyp:%Integer</FormalSpec>
<Implementation><![CDATA[
	&sql(Delete
		 FROM DBAgrofreshEK_SD.DTypTblFuss
		 WHERE Drucktyp=:drucktypOid AND FormularTyp=:formularTyp)
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.SD.DTypTblFussD</DataLocation>
<DefaultData>DTypTblFussDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.DTypTblFussD</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.DTypTblFussI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.DTypTblFussS</StreamLocation>
<Data name="DTypTblFussDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Drucktyp</Value>
</Value>
<Value name="3">
<Value>TblFuss</Value>
</Value>
<Value name="4">
<Value>FormularTyp</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Drucktyp">
</Property>
<Property name="FormularTyp">
</Property>
<Property name="TblFuss">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.DTypTblKopf">
<Super>%Persistent</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61723,34457.63705</TimeCreated>

<Property name="TblKopf">
<Type>DBAgrofreshEK.SD.TblKopf</Type>
<Cardinality>one</Cardinality>
<Inverse>Drucktyp</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="TblKopfIndex">
<Properties>TblKopf</Properties>
</Index>

<Property name="Drucktyp">
<Type>DBAgrofreshEK.SD.Drucktyp</Type>
<Cardinality>one</Cardinality>
<Inverse>TblKopf</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="DrucktypIndex">
<Properties>Drucktyp</Properties>
</Index>

<Property name="FormularTyp">
<Type>%Integer</Type>
</Property>

<Index name="PKey">
<Properties>Drucktyp,FormularTyp</Properties>
</Index>

<Method name="GetOidByDrucktyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>drucktypOid:%String,formularTyp:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO :oid
		 FROM DBAgrofreshEK_SD.DTypTblKopf
		 WHERE Drucktyp=:drucktypOid AND FormularTyp=:formularTyp)
	Quit oid
]]></Implementation>
</Method>

<Method name="GetKopfOidByDrucktyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>drucktypOid:%String,formularTyp:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT TblKopf INTO :oid
		 FROM DBAgrofreshEK_SD.DTypTblKopf
		 WHERE Drucktyp=:drucktypOid AND FormularTyp=:formularTyp)
	Quit oid
]]></Implementation>
</Method>

<Method name="GetKopfNrByDrucktyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>drucktypOid:%String,formularTyp:%Integer</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	Set nummer = ""
	&sql(SELECT TblKopf->Nummer INTO :nummer
		 FROM DBAgrofreshEK_SD.DTypTblKopf
		 WHERE Drucktyp=:drucktypOid AND FormularTyp=:formularTyp)
	Quit nummer
]]></Implementation>
</Method>

<Method name="DeleteByDrucktyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>drucktypOid:%String,formularTyp:%Integer</FormalSpec>
<Implementation><![CDATA[
	&sql(Delete
		 FROM DBAgrofreshEK_SD.DTypTblKopf
		 WHERE Drucktyp=:drucktypOid AND FormularTyp=:formularTyp)
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.SD.DTypTblKopfD</DataLocation>
<DefaultData>DTypTblKopfDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.DTypTblKopfD</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.DTypTblKopfI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.DTypTblKopfS</StreamLocation>
<Data name="DTypTblKopfDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>TblKopf</Value>
</Value>
<Value name="3">
<Value>Drucktyp</Value>
</Value>
<Value name="4">
<Value>FormularTyp</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Drucktyp">
</Property>
<Property name="FormularTyp">
</Property>
<Property name="TblKopf">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.Drucktyp">
<Description>
</Description>
<Super>DBAgrofreshEK.SD.Hilfstexte,%XML.Adaptor</Super>
<TimeChanged>62368,40594.564382</TimeChanged>
<TimeCreated>61353,42739.607854</TimeCreated>
<Inheritance>right</Inheritance>

<Property name="KopieEindrucken">
<Description>
Kopie eindrucken</Description>
<Type>%Boolean</Type>
</Property>

<Property name="KopieDrehung">
<Description>
Kopie Drehung</Description>
<Type>%Integer</Type>
</Property>

<Property name="KopieNummer">
<Description>
Kopie mit Nummer ergaenzen</Description>
<Type>%Boolean</Type>
</Property>

<Property name="KopieFontName">
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="KopieFontSize">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="KopieFontBold">
<Type>%Boolean</Type>
</Property>

<Property name="KopieFontItalic">
<Type>%Boolean</Type>
</Property>

<Property name="KopieFontStrikeout">
<Type>%Boolean</Type>
</Property>

<Property name="KopieFontUnderline">
<Type>%Boolean</Type>
</Property>

<Property name="KopieFontColor">
<Type>%Integer</Type>
</Property>

<Property name="KopieText">
<Description>
Text</Description>
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="KopiePosLinks">
<Type>%Integer</Type>
</Property>

<Property name="KopiePosUnten">
<Type>%Integer</Type>
</Property>

<Property name="TextTotalOhneGebinde">
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="TextUebertrag">
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<UDLText name="T">
<Content><![CDATA[
/**********************************************************
*
* Bestellungssteuerung
*
***********************************************************/
]]></Content>
</UDLText>

<Property name="BestStrgOffertenanfrage">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>OffertenanfrageDrucktyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgBestellung">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>BestellungDrucktyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgAnnahmeschein">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>AnnahmescheinDrucktyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgAbrechnung">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>AbrechnungDrucktyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgSammelabrechnung">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>SammelabrechnungDrucktyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgBarzahlung">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>BarzahlungDrucktyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgGebindescheinDrucktyp">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>GebindescheinDrucktyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="TblKopf">
<Type>DBAgrofreshEK.SD.DTypTblKopf</Type>
<Cardinality>many</Cardinality>
<Inverse>Drucktyp</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="TblFuss">
<Type>DBAgrofreshEK.SD.DTypTblFuss</Type>
<Cardinality>many</Cardinality>
<Inverse>Drucktyp</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="Formular">
<Type>DBAgrofreshEK.SD.DTypForm</Type>
<Cardinality>many</Cardinality>
<Inverse>Drucktyp</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="ReportHeader">
<Type>DBAgrofreshEK.SD.DTypRepHead</Type>
<Cardinality>many</Cardinality>
<Inverse>Drucktyp</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="BestStrgTeilAnnahmeschein">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>TeilAnnahmescheinDrucktyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<UDLText name="T">
<Content><![CDATA[
/************************************************************************
*
* Methoden
*
*************************************************************************/
]]></Content>
</UDLText>

<Method name="GetKopieText">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..KopieText, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GeKopietTextClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.Drucktyp).%OpenId(myID)
		set text = rs.GetKopieText(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetKopieText">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..KopieText, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTextTotalOhneGebinde">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..TextTotalOhneGebinde, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTextTotalOhneGebindeClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.Drucktyp).%OpenId(myID)
		set text = rs.GetTextTotalOhneGebinde(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetTextTotalOhneGebinde">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..TextTotalOhneGebinde, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetIdByPosNrOnMandant">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,PosNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK_SD.Drucktyp
		 WHERE Mandant = :MandantOid AND PositionsNr = :PosNr)
	Quit id
]]></Implementation>
</Method>

<Method name="GetTextUebertrag">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..TextUebertrag, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTextUebertragClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofresh.SD.Drucktyp).%OpenId(myID)
		set text = rs.GetTextUebertrag(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetTextUebertrag">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..TextUebertrag, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="CopyDrucktyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>SrcOid:%String,newNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	/// Init
	set status = ""
	set dstAs = ""
	/// Source öffnen
	set srcAs = ##class(DBAgrofreshEK.SD.Drucktyp).%OpenId(SrcOid)
	
	/// kopieren und Typ zuweisen
	set dstAs = srcAs.%ConstructClone(-1)
	set dstAs.PositionsNr = newNr
	set status = dstAs.%Save()
	set id = dstAs.%Id()
	kill dstAs, srcAs
	quit id
]]></Implementation>
</Method>

<Method name="GetFirstIdOnMandant">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK_SD.Drucktyp
		 WHERE Mandant = :MandantOid ORDER BY PositionsNr)
	Quit id
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DefaultData>DrucktypDefaultData</DefaultData>
<Data name="DrucktypDefaultData">
<Structure>listnode</Structure>
<Subscript>"Drucktyp"</Subscript>
<Value name="1">
<Value>KopieEindrucken</Value>
</Value>
<Value name="2">
<Value>KopieDrehung</Value>
</Value>
<Value name="3">
<Value>KopieNummer</Value>
</Value>
<Value name="4">
<Value>KopieFontName</Value>
</Value>
<Value name="5">
<Value>KopieFontSize</Value>
</Value>
<Value name="6">
<Value>KopieFontBold</Value>
</Value>
<Value name="7">
<Value>KopieFontItalic</Value>
</Value>
<Value name="8">
<Value>KopieFontStrikeout</Value>
</Value>
<Value name="9">
<Value>KopieFontUnderline</Value>
</Value>
<Value name="10">
<Value>KopieFontColor</Value>
</Value>
<Value name="11">
<Value>KopiePosLinks</Value>
</Value>
<Value name="12">
<Value>KopiePosUnten</Value>
</Value>
<Value name="13">
<Value>EzDrucken</Value>
</Value>
<Value name="14">
<Value>FormularOA</Value>
</Value>
<Value name="15">
<Value>FormularBE</Value>
</Value>
<Value name="16">
<Value>FormularAS</Value>
</Value>
<Value name="17">
<Value>FormularGS</Value>
</Value>
<Value name="18">
<Value>FormularAR</Value>
</Value>
<Value name="19">
<Value>FormularGU</Value>
</Value>
<Value name="20">
<Value>FormularSAR</Value>
</Value>
<Value name="21">
<Value>FormKopfOA</Value>
</Value>
<Value name="22">
<Value>FormKopfBE</Value>
</Value>
<Value name="23">
<Value>FormKopfAS</Value>
</Value>
<Value name="24">
<Value>FormKopfGS</Value>
</Value>
<Value name="25">
<Value>FormKopfAR</Value>
</Value>
<Value name="26">
<Value>FormKopfGU</Value>
</Value>
<Value name="27">
<Value>FormKopfSAR</Value>
</Value>
<Value name="28">
<Value>FormFussOA</Value>
</Value>
<Value name="29">
<Value>FormFussBE</Value>
</Value>
<Value name="30">
<Value>FormFussAS</Value>
</Value>
<Value name="31">
<Value>FormFussGS</Value>
</Value>
<Value name="32">
<Value>FormFussAR</Value>
</Value>
<Value name="33">
<Value>FormFussGU</Value>
</Value>
<Value name="34">
<Value>FormFussSAR</Value>
</Value>
<Value name="35">
<Value>KopfSeite1OA</Value>
</Value>
<Value name="36">
<Value>KopfSeite1BE</Value>
</Value>
<Value name="37">
<Value>KopfSeite1AS</Value>
</Value>
<Value name="38">
<Value>KopfSeite1GS</Value>
</Value>
<Value name="39">
<Value>KopfSeite1AR</Value>
</Value>
<Value name="40">
<Value>KopfSeite1GU</Value>
</Value>
<Value name="41">
<Value>KopfSeite1SAR</Value>
</Value>
<Value name="42">
<Value>KopfFolgeOA</Value>
</Value>
<Value name="43">
<Value>KopfFolgeBE</Value>
</Value>
<Value name="44">
<Value>KopfFolgeAS</Value>
</Value>
<Value name="45">
<Value>KopfFolgeGS</Value>
</Value>
<Value name="46">
<Value>KopfFolgeAR</Value>
</Value>
<Value name="47">
<Value>KopfFolgeGU</Value>
</Value>
<Value name="48">
<Value>KopfFolgeSAR</Value>
</Value>
<Value name="49">
<Value>KopfKopieSeite1OA</Value>
</Value>
<Value name="50">
<Value>KopfKopieSeite1BE</Value>
</Value>
<Value name="51">
<Value>KopfKopieSeite1AS</Value>
</Value>
<Value name="52">
<Value>KopfKopieSeite1GS</Value>
</Value>
<Value name="53">
<Value>KopfKopieSeite1AR</Value>
</Value>
<Value name="54">
<Value>KopfKopieSeite1GU</Value>
</Value>
<Value name="55">
<Value>KopfKopieSeite1SAR</Value>
</Value>
<Value name="56">
<Value>KopfKopieFolgeOA</Value>
</Value>
<Value name="57">
<Value>KopfKopieFolgeBE</Value>
</Value>
<Value name="58">
<Value>KopfKopieFolgeAS</Value>
</Value>
<Value name="59">
<Value>KopfKopieFolgeGS</Value>
</Value>
<Value name="60">
<Value>KopfKopieFolgeAR</Value>
</Value>
<Value name="61">
<Value>KopfKopieFolgeGU</Value>
</Value>
<Value name="62">
<Value>KopfKopieFolgeSAR</Value>
</Value>
<Value name="63">
<Value>KopfSeite1FM</Value>
</Value>
<Value name="64">
<Value>KopfFolgeFM</Value>
</Value>
<Value name="65">
<Value>KopfKopieSeite1FM</Value>
</Value>
<Value name="66">
<Value>KopfKopieFolgeFM</Value>
</Value>
</Data>
<Data name="KopieText">
<Attribute>KopieText</Attribute>
<Structure>subnode</Structure>
<Subscript>"DBAgrofreshEK.SD.Drucktyp.KopieText"</Subscript>
</Data>
<Data name="TextTotalOhneGebinde">
<Attribute>TextTotalOhneGebinde</Attribute>
<Structure>subnode</Structure>
<Subscript>"DBAgrofreshEK.SD.Drucktyp.TextTotalOhneGebinde"</Subscript>
</Data>
<Data name="TextUebertrag">
<Attribute>TextUebertrag</Attribute>
<Structure>subnode</Structure>
<Subscript>"DBAgrofreshEK.SD.Drucktyp.TextUebertrag"</Subscript>
</Data>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.FormDrucker">
<Description>
</Description>
<Super>%Persistent,%XML.Adaptor,DBCore.MandantRel</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61411,29417.252354</TimeCreated>
<Inheritance>right</Inheritance>

<Property name="Mandant">
<Type>%String</Type>
</Property>

<ForeignKey name="FKMandant">
<Properties>Mandant</Properties>
<ReferencedClass>DBCore.Mandant</ReferencedClass>
<ReferencedKey>MandIdIndex</ReferencedKey>
</ForeignKey>

<Index name="MandantIdx">
<Properties>Mandant</Properties>
</Index>

<Property name="OAODruckerSeite1">
<Description>
Offertenanfrage Original Drucker Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="OAOSchachtSeite1">
<Description>
Offertenanfrage Original Schacht Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="OAODruckerFolge">
<Description>
Offertenanfrage Original Drucker Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="OAOSchachtFolge">
<Description>
Offertenanfrage Original Schacht Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="OAKDruckerSeite1">
<Description>
Offertenanfrage Kopie Drucker Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="OAKSchachtSeite1">
<Description>
Offertenanfrage Kopie Schacht Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="OAKDruckerFolge">
<Description>
Offertenanfrage Kopie Drucker Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="OAKSchachtFolge">
<Description>
Offertenanfrage Kopie Schacht Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="BEODruckerSeite1">
<Description>
Bestellung Original Drucker Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="BEOSchachtSeite1">
<Description>
Bestellung Original Schacht Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="BEODruckerFolge">
<Description>
Bestellung Original Drucker Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="BEOSchachtFolge">
<Description>
Bestellung Original Schacht Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="BEKDruckerSeite1">
<Description>
Bestellung Kopie Drucker Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="BEKSchachtSeite1">
<Description>
Bestellung Kopie Schacht Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="BEKDruckerFolge">
<Description>
Bestellung Kopie Drucker Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="BEKSchachtFolge">
<Description>
Bestellung Kopie Schacht Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="ASODruckerSeite1">
<Description>
Annahmeschein Original Drucker Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="ASOSchachtSeite1">
<Description>
Annahmeschein Original Schacht Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="ASODruckerFolge">
<Description>
Annahmeschein Original Drucker Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="ASOSchachtFolge">
<Description>
Annahmeschein Original Schacht Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="ASKDruckerSeite1">
<Description>
Annahmeschein Kopie Drucker Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="ASKSchachtSeite1">
<Description>
Annahmeschein Kopie Schacht Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="ASKDruckerFolge">
<Description>
Annahmeschein Kopie Drucker Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="ASKSchachtFolge">
<Description>
Annahmeschein Kopie Schacht Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GSODruckerSeite1">
<Description>
Gebindeschein Original Drucker Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GSOSchachtSeite1">
<Description>
Gebindeschein Original Schacht Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GSODruckerFolge">
<Description>
Gebindeschein Original Drucker Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GSOSchachtFolge">
<Description>
Gebindeschein Original Schacht Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GSKDruckerSeite1">
<Description>
Gebindeschein Kopie Drucker Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GSKSchachtSeite1">
<Description>
Gebindeschein Kopie Schacht Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GSKDruckerFolge">
<Description>
Gebindeschein Kopie Drucker Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GSKSchachtFolge">
<Description>
Gebindeschein Kopie Schacht Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="ARODruckerSeite1">
<Description>
Abrechnung Original Drucker Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="AROSchachtSeite1">
<Description>
Abrechnung Original Schacht Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="ARODruckerFolge">
<Description>
Abrechnung Original Drucker Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="AROSchachtFolge">
<Description>
Abrechnung Original Schacht Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="ARKDruckerSeite1">
<Description>
Abrechnung Kopie Drucker Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="ARKSchachtSeite1">
<Description>
Abrechnung Kopie Schacht Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="ARKDruckerFolge">
<Description>
Abrechnung Kopie Drucker Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="ARKSchachtFolge">
<Description>
Abrechnung Kopie Schacht Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GuODruckerSeite1">
<Description>
Gutschrift Original Drucker Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GuOSchachtSeite1">
<Description>
Gutschrift Original Schacht Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GuODruckerFolge">
<Description>
Gutschrift Original Drucker Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GuOSchachtFolge">
<Description>
Gutschrift Original Schacht Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GuKDruckerSeite1">
<Description>
Gutschrift Kopie Drucker Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GuKSchachtSeite1">
<Description>
Gutschrift Kopie Schacht Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GuKDruckerFolge">
<Description>
Gutschrift Kopie Drucker Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="GuKSchachtFolge">
<Description>
Gutschrift Kopie Schacht Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="SARODruckerSeite1">
<Description>
Mahnung Original Drucker Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="SAROSchachtSeite1">
<Description>
Mahnung Original Schacht Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="SARODruckerFolge">
<Description>
Mahnung Original Drucker Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="SAROSchachtFolge">
<Description>
Mahnung Original Schacht Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="SARKDruckerSeite1">
<Description>
Mahnung Kopie Drucker Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="SARKSchachtSeite1">
<Description>
Mahnung Kopie Schacht Seite 1</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="SARKDruckerFolge">
<Description>
Mahnung Kopie Drucker Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="SARKSchachtFolge">
<Description>
Mahnung Kopie Schacht Folgeseiten</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="FaxDrucker">
<Description>
Fax Drucker</Description>
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Method name="GetFormDrucker">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,BenutzerOid:%String</FormalSpec>
<ReturnType>DBAgrofreshEK.SD.FormDrucker</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO :oid
		 FROM DBAgrofreshEK_SD.FormDruckerBen
		 WHERE Mandant=:MandantOid AND Benutzer=:BenutzerOid)
	
	if (oid="") {
		&sql(SELECT ID INTO :oid
			 FROM DBAgrofreshEK_SD.FormDrucker
			 WHERE Mandant=:MandantOid AND ID not in (SELECT ID FROM DBAgrofreshEK_SD.FormDruckerBen WHERE Mandant=:MandantOid))
	}
	
	set res = ""
	if (oid'="") {
		set res = ##class(DBAgrofreshEK.SD.FormDrucker).%OpenId(oid)
	} else {
		set res = ##class(DBAgrofreshEK.SD.FormDrucker).%New()
		do res.%Save()		
	}

	Quit res
]]></Implementation>
</Method>

<Method name="GetFormDruckerOid">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT TOP 1 ID INTO :oid
		 FROM DBAgrofreshEK_SD.FormDrucker
		 WHERE Mandant=:MandantOid AND ID not in (SELECT ID FROM DBAgrofreshEK_SD.FormDruckerBen WHERE Mandant=:MandantOid))
	Quit oid
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.SD.FormDruckerD</DataLocation>
<DefaultData>FormDruckerDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.FormDruckerD</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.FormDruckerI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.FormDruckerS</StreamLocation>
<Data name="FormDruckerDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Mandant</Value>
</Value>
<Value name="3">
<Value>OAODruckerSeite1</Value>
</Value>
<Value name="4">
<Value>OAOSchachtSeite1</Value>
</Value>
<Value name="5">
<Value>OAODruckerFolge</Value>
</Value>
<Value name="6">
<Value>OAOSchachtFolge</Value>
</Value>
<Value name="7">
<Value>OAKDruckerSeite1</Value>
</Value>
<Value name="8">
<Value>OAKSchachtSeite1</Value>
</Value>
<Value name="9">
<Value>OAKDruckerFolge</Value>
</Value>
<Value name="10">
<Value>OAKSchachtFolge</Value>
</Value>
<Value name="11">
<Value>BEODruckerSeite1</Value>
</Value>
<Value name="12">
<Value>BEOSchachtSeite1</Value>
</Value>
<Value name="13">
<Value>BEODruckerFolge</Value>
</Value>
<Value name="14">
<Value>BEOSchachtFolge</Value>
</Value>
<Value name="15">
<Value>BEKDruckerSeite1</Value>
</Value>
<Value name="16">
<Value>BEKSchachtSeite1</Value>
</Value>
<Value name="17">
<Value>BEKDruckerFolge</Value>
</Value>
<Value name="18">
<Value>BEKSchachtFolge</Value>
</Value>
<Value name="19">
<Value>ASODruckerSeite1</Value>
</Value>
<Value name="20">
<Value>ASOSchachtSeite1</Value>
</Value>
<Value name="21">
<Value>ASODruckerFolge</Value>
</Value>
<Value name="22">
<Value>ASOSchachtFolge</Value>
</Value>
<Value name="23">
<Value>ASKDruckerSeite1</Value>
</Value>
<Value name="24">
<Value>ASKSchachtSeite1</Value>
</Value>
<Value name="25">
<Value>ASKDruckerFolge</Value>
</Value>
<Value name="26">
<Value>ASKSchachtFolge</Value>
</Value>
<Value name="27">
<Value>GSODruckerSeite1</Value>
</Value>
<Value name="28">
<Value>GSOSchachtSeite1</Value>
</Value>
<Value name="29">
<Value>GSODruckerFolge</Value>
</Value>
<Value name="30">
<Value>GSOSchachtFolge</Value>
</Value>
<Value name="31">
<Value>GSKDruckerSeite1</Value>
</Value>
<Value name="32">
<Value>GSKSchachtSeite1</Value>
</Value>
<Value name="33">
<Value>GSKDruckerFolge</Value>
</Value>
<Value name="34">
<Value>GSKSchachtFolge</Value>
</Value>
<Value name="35">
<Value>ARODruckerSeite1</Value>
</Value>
<Value name="36">
<Value>AROSchachtSeite1</Value>
</Value>
<Value name="37">
<Value>ARODruckerFolge</Value>
</Value>
<Value name="38">
<Value>AROSchachtFolge</Value>
</Value>
<Value name="39">
<Value>ARKDruckerSeite1</Value>
</Value>
<Value name="40">
<Value>ARKSchachtSeite1</Value>
</Value>
<Value name="41">
<Value>ARKDruckerFolge</Value>
</Value>
<Value name="42">
<Value>ARKSchachtFolge</Value>
</Value>
<Value name="43">
<Value>GuODruckerSeite1</Value>
</Value>
<Value name="44">
<Value>GuOSchachtSeite1</Value>
</Value>
<Value name="45">
<Value>GuODruckerFolge</Value>
</Value>
<Value name="46">
<Value>GuOSchachtFolge</Value>
</Value>
<Value name="47">
<Value>GuKDruckerSeite1</Value>
</Value>
<Value name="48">
<Value>GuKSchachtSeite1</Value>
</Value>
<Value name="49">
<Value>GuKDruckerFolge</Value>
</Value>
<Value name="50">
<Value>GuKSchachtFolge</Value>
</Value>
<Value name="51">
<Value>SARODruckerSeite1</Value>
</Value>
<Value name="52">
<Value>SAROSchachtSeite1</Value>
</Value>
<Value name="53">
<Value>SARODruckerFolge</Value>
</Value>
<Value name="54">
<Value>SAROSchachtFolge</Value>
</Value>
<Value name="55">
<Value>SARKDruckerSeite1</Value>
</Value>
<Value name="56">
<Value>SARKSchachtSeite1</Value>
</Value>
<Value name="57">
<Value>SARKDruckerFolge</Value>
</Value>
<Value name="58">
<Value>SARKSchachtFolge</Value>
</Value>
<Value name="59">
<Value>FaxDrucker</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="ARKDruckerFolge">
</Property>
<Property name="ARKDruckerSeite1">
</Property>
<Property name="ARKSchachtFolge">
</Property>
<Property name="ARKSchachtSeite1">
</Property>
<Property name="ARODruckerFolge">
</Property>
<Property name="ARODruckerSeite1">
</Property>
<Property name="AROSchachtFolge">
</Property>
<Property name="AROSchachtSeite1">
</Property>
<Property name="ASKDruckerFolge">
</Property>
<Property name="ASKDruckerSeite1">
</Property>
<Property name="ASKSchachtFolge">
</Property>
<Property name="ASKSchachtSeite1">
</Property>
<Property name="ASODruckerFolge">
</Property>
<Property name="ASODruckerSeite1">
</Property>
<Property name="ASOSchachtFolge">
</Property>
<Property name="ASOSchachtSeite1">
</Property>
<Property name="BEKDruckerFolge">
</Property>
<Property name="BEKDruckerSeite1">
</Property>
<Property name="BEKSchachtFolge">
</Property>
<Property name="BEKSchachtSeite1">
</Property>
<Property name="BEODruckerFolge">
</Property>
<Property name="BEODruckerSeite1">
</Property>
<Property name="BEOSchachtFolge">
</Property>
<Property name="BEOSchachtSeite1">
</Property>
<Property name="FaxDrucker">
</Property>
<Property name="GSKDruckerFolge">
</Property>
<Property name="GSKDruckerSeite1">
</Property>
<Property name="GSKSchachtFolge">
</Property>
<Property name="GSKSchachtSeite1">
</Property>
<Property name="GSODruckerFolge">
</Property>
<Property name="GSODruckerSeite1">
</Property>
<Property name="GSOSchachtFolge">
</Property>
<Property name="GSOSchachtSeite1">
</Property>
<Property name="GuKDruckerFolge">
</Property>
<Property name="GuKDruckerSeite1">
</Property>
<Property name="GuKSchachtFolge">
</Property>
<Property name="GuKSchachtSeite1">
</Property>
<Property name="GuODruckerFolge">
</Property>
<Property name="GuODruckerSeite1">
</Property>
<Property name="GuOSchachtFolge">
</Property>
<Property name="GuOSchachtSeite1">
</Property>
<Property name="Mandant">
</Property>
<Property name="OAKDruckerFolge">
</Property>
<Property name="OAKDruckerSeite1">
</Property>
<Property name="OAKSchachtFolge">
</Property>
<Property name="OAKSchachtSeite1">
</Property>
<Property name="OAODruckerFolge">
</Property>
<Property name="OAODruckerSeite1">
</Property>
<Property name="OAOSchachtFolge">
</Property>
<Property name="OAOSchachtSeite1">
</Property>
<Property name="SARKDruckerFolge">
</Property>
<Property name="SARKDruckerSeite1">
</Property>
<Property name="SARKSchachtFolge">
</Property>
<Property name="SARKSchachtSeite1">
</Property>
<Property name="SARODruckerFolge">
</Property>
<Property name="SARODruckerSeite1">
</Property>
<Property name="SAROSchachtFolge">
</Property>
<Property name="SAROSchachtSeite1">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.FormDruckerBen">
<Description>
</Description>
<Super>DBAgrofreshEK.SD.FormDrucker,%XML.Adaptor</Super>
<TimeChanged>61436,41426.151334</TimeChanged>
<TimeCreated>61411,29531.53739</TimeCreated>
<Inheritance>right</Inheritance>

<Property name="Benutzer">
<Type>DBCore.Benutzer</Type>
<Cardinality>one</Cardinality>
<Inverse>EKFormDruckerBen</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Benutzer"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="BenutzerIndex">
<Properties>Benutzer</Properties>
</Index>

<Index name="MandantBenutzerIndex">
<Properties>Mandant,Benutzer</Properties>
<Unique>1</Unique>
</Index>

<Method name="GetFormDruckerBenOid">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,BenutzerOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO :oid
		 FROM DBAgrofreshEK_SD.FormDruckerBen
		 WHERE Mandant=:MandantOid AND Benutzer=:BenutzerOid)
	Quit oid
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DefaultData>FormDruckerBenDefaultData</DefaultData>
<Data name="FormDruckerBenDefaultData">
<Structure>listnode</Structure>
<Subscript>"FormDruckerBen"</Subscript>
<Value name="1">
<Value>Benutzer</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.FormGebFuss">
<Super>%Persistent,%XML.Adaptor,DBCore.MandantRel</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61438,31788.73096</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Nummer">
<Type>%Integer</Type>
<Required>1</Required>
</Property>

<Index name="NummerIndex">
<Properties>Nummer</Properties>
</Index>

<Property name="Mandant">
<Type>%String</Type>
</Property>

<ForeignKey name="FKMandant">
<Properties>Mandant</Properties>
<ReferencedClass>DBCore.Mandant</ReferencedClass>
<ReferencedKey>MandIdIndex</ReferencedKey>
</ForeignKey>

<Index name="MandantIdx">
<Properties>Mandant</Properties>
</Index>

<Index name="MandantNummerIndex">
<Properties>Mandant,Nummer</Properties>
<Unique>1</Unique>
</Index>

<Property name="Bezeichnung">
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Method name="GetBezeichnung">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Bezeichnung, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetBezeichnungClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.FormGebFuss).%OpenId(myID)
		set text = rs.GetBezeichnung(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetBezeichnung">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Bezeichnung, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetNextFreeNumber">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set nr = 0
	&sql(Select max(Nummer) into :nr From DBAgrofreshEK_SD.FormGebFuss WHERE Mandant=:MandOid)
	Quit +nr+1
]]></Implementation>
</Method>

<Method name="GetFormGebFussOidByCode">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandOid:%String,FormGebFussNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO :oid
		 FROM DBAgrofreshEK_SD.FormGebFuss
		 WHERE Nummer = :FormGebFussNr AND Mandant=:MandOid)
	Quit oid
]]></Implementation>
</Method>

<Property name="FormularGebindeFussEntry">
<Type>DBAgrofreshEK.SD.FormGebFussE</Type>
<Cardinality>children</Cardinality>
<Inverse>FormularGebindeFuss</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="Anordnung">
<Type>%Integer</Type>
</Property>

<Property name="Verrechnung">
<Type>%Integer</Type>
</Property>

<Property name="DruckAlsFusszeile">
<Type>%Boolean</Type>
</Property>

<Property name="AbstandOben">
<Type>%Integer</Type>
</Property>

<Property name="NurVerrechnendeDrucken">
<Type>%Boolean</Type>
</Property>

<Property name="BestStrgOAGebFuss">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>OffertenanfrageGebFuss</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgBestGebFuss">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>BestellungGebFuss</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgASGebFuss">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>AnnahmescheinGebFuss</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgARGebFuss">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>AbrechnungGebFuss</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgSAGebFuss">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>SammelabrechnungGebFuss</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgBZGebFuss">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>BarzahlungGebFuss</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgGSGebFuss">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>GebindescheinGebFuss</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="TextTotalGebinde">
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="TotalGebindeFontName">
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="TotalGebindeFontSize">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="TotalGebindeFontBold">
<Type>%Boolean</Type>
</Property>

<Property name="TotalGebindeFontItalic">
<Type>%Boolean</Type>
</Property>

<Property name="TotalGebindeFontStrikeout">
<Type>%Boolean</Type>
</Property>

<Property name="TotalGebindeFontUnderline">
<Type>%Boolean</Type>
</Property>

<Property name="TotalGebindeFontColor">
<Type>%Integer</Type>
</Property>

<Property name="TotalGebindeRahmenAktivLinks">
<Type>%Boolean</Type>
</Property>

<Property name="TotalGebindeRahmenBreiteLinks">
<Type>%Integer</Type>
</Property>

<Property name="TotalGebindeRahmenAbstandLinks">
<Type>%Integer</Type>
</Property>

<Property name="TotalGebindeRahmenAktivOben">
<Type>%Boolean</Type>
</Property>

<Property name="TotalGebindeRahmenBreiteOben">
<Type>%Integer</Type>
</Property>

<Property name="TotalGebindeRahmenAbstandOben">
<Type>%Integer</Type>
</Property>

<Property name="TotalGebindeRahmenAktivRechts">
<Type>%Boolean</Type>
</Property>

<Property name="TotalGebindeRahmenBreiteRechts">
<Type>%Integer</Type>
</Property>

<Property name="TotalGebindeRahmenAbstandRechts">
<Type>%Integer</Type>
</Property>

<Property name="TotalGebindeRahmenAktivUnten">
<Type>%Boolean</Type>
</Property>

<Property name="TotalGebindeRahmenBreiteUnten">
<Type>%Integer</Type>
</Property>

<Property name="TotalGebindeRahmenAbstandUnten">
<Type>%Integer</Type>
</Property>

<Property name="IfcoGruppieren">
<Type>%Boolean</Type>
</Property>

<Property name="BestStrgTASGebFuss">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>TeilAnnahmescheinGebFuss</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Method name="GetTextTotalGebinde">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..TextTotalGebinde, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTextTotalGebindeClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofresh.SD.FormGebFuss).%OpenId(myID)
		set text = rs.GetTextTotalGebinde(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetTextTotalGebinde">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..TextTotalGebinde, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="CopyFormGebFuss">
<ClassMethod>1</ClassMethod>
<FormalSpec>SrcOid:%String,newNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	/// Init
	set status = ""
	set dstAs = ""
	/// Source öffnen
	set srcAs = ##class(DBAgrofreshEK.SD.FormGebFuss).%OpenId(SrcOid)
	
	/// kopieren und Typ zuweisen
	set dstAs = srcAs.%ConstructClone(-1)
	set dstAs.Nummer = newNr
	set status = dstAs.%Save()
	set id = dstAs.%Id()
	// Wenn erfolgreich auch die Childern kopieren
	if ($$$ISOK(status)) {
		// Formular Fuss Entrys
		Set strSQL="SELECT ID FROM DBAgrofreshEK_SD.FormGebFussE WHERE FormularGebindeFuss = '"_SrcOid_"'"
		Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	    Do rs.Prepare(strSQL)
	    Set sc=rs.Execute()
	    while (rs.Next()) {
		    set pos = ##class(DBAgrofreshEK.SD.FormGebFussE).%OpenId(rs.Data("ID"))
		    if (pos '= "") {
			    set newPos = pos.%ConstructClone(-1)
			    set newPos.FormularGebindeFuss=dstAs
			    set posState = newPos.%Save()
			    
				if ('$$$ISOK(posState)) {
					w "Error in Save von FormularGebindeFuss Entrys",  posState, !
				}
				k pos			    
		    }
	    }
	}
	kill dstAs, srcAs
	quit id
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.SD.FormGebFussD</DataLocation>
<DefaultData>FormGebFussDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.FormGebFussD</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.FormGebFussI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.FormGebFussS</StreamLocation>
<Data name="Bezeichnung">
<Attribute>Bezeichnung</Attribute>
<Structure>subnode</Structure>
<Subscript>"Bezeichnung"</Subscript>
</Data>
<Data name="FormGebFussDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Nummer</Value>
</Value>
<Value name="3">
<Value>Mandant</Value>
</Value>
<Value name="4">
<Value>Anordnung</Value>
</Value>
<Value name="5">
<Value>Verrechnung</Value>
</Value>
<Value name="6">
<Value>DruckAlsFusszeile</Value>
</Value>
<Value name="7">
<Value>AbstandOben</Value>
</Value>
<Value name="8">
<Value>NurVerrechnendeDrucken</Value>
</Value>
<Value name="9">
<Value>TotalGebindeFontName</Value>
</Value>
<Value name="10">
<Value>TotalGebindeFontSize</Value>
</Value>
<Value name="11">
<Value>TotalGebindeFontBold</Value>
</Value>
<Value name="12">
<Value>TotalGebindeFontItalic</Value>
</Value>
<Value name="13">
<Value>TotalGebindeFontStrikeout</Value>
</Value>
<Value name="14">
<Value>TotalGebindeFontUnderline</Value>
</Value>
<Value name="15">
<Value>TotalGebindeFontColor</Value>
</Value>
<Value name="16">
<Value>TotalGebindeRahmenAktivLinks</Value>
</Value>
<Value name="17">
<Value>TotalGebindeRahmenBreiteLinks</Value>
</Value>
<Value name="18">
<Value>TotalGebindeRahmenAbstandLinks</Value>
</Value>
<Value name="19">
<Value>TotalGebindeRahmenAktivOben</Value>
</Value>
<Value name="20">
<Value>TotalGebindeRahmenBreiteOben</Value>
</Value>
<Value name="21">
<Value>TotalGebindeRahmenAbstandOben</Value>
</Value>
<Value name="22">
<Value>TotalGebindeRahmenAktivRechts</Value>
</Value>
<Value name="23">
<Value>TotalGebindeRahmenBreiteRechts</Value>
</Value>
<Value name="24">
<Value>TotalGebindeRahmenAbstandRechts</Value>
</Value>
<Value name="25">
<Value>TotalGebindeRahmenAktivUnten</Value>
</Value>
<Value name="26">
<Value>TotalGebindeRahmenBreiteUnten</Value>
</Value>
<Value name="27">
<Value>TotalGebindeRahmenAbstandUnten</Value>
</Value>
<Value name="28">
<Value>IfcoGruppieren</Value>
</Value>
</Data>
<Data name="TextTotalGebinde">
<Attribute>TextTotalGebinde</Attribute>
<Structure>subnode</Structure>
<Subscript>"TextTotalGebinde"</Subscript>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="AbstandOben">
</Property>
<Property name="Anordnung">
</Property>
<Property name="DruckAlsFusszeile">
</Property>
<Property name="IfcoGruppieren">
</Property>
<Property name="Mandant">
</Property>
<Property name="Nummer">
</Property>
<Property name="NurVerrechnendeDrucken">
</Property>
<Property name="TotalGebindeFontBold">
</Property>
<Property name="TotalGebindeFontColor">
</Property>
<Property name="TotalGebindeFontItalic">
</Property>
<Property name="TotalGebindeFontName">
</Property>
<Property name="TotalGebindeFontSize">
</Property>
<Property name="TotalGebindeFontStrikeout">
</Property>
<Property name="TotalGebindeFontUnderline">
</Property>
<Property name="TotalGebindeRahmenAbstandLinks">
</Property>
<Property name="TotalGebindeRahmenAbstandOben">
</Property>
<Property name="TotalGebindeRahmenAbstandRechts">
</Property>
<Property name="TotalGebindeRahmenAbstandUnten">
</Property>
<Property name="TotalGebindeRahmenAktivLinks">
</Property>
<Property name="TotalGebindeRahmenAktivOben">
</Property>
<Property name="TotalGebindeRahmenAktivRechts">
</Property>
<Property name="TotalGebindeRahmenAktivUnten">
</Property>
<Property name="TotalGebindeRahmenBreiteLinks">
</Property>
<Property name="TotalGebindeRahmenBreiteOben">
</Property>
<Property name="TotalGebindeRahmenBreiteRechts">
</Property>
<Property name="TotalGebindeRahmenBreiteUnten">
</Property>
<Property name="Verrechnung">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.FormGebFussE">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61438,31930.339658</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Nummer">
<Type>%Integer</Type>
<Required>1</Required>
</Property>

<Index name="NummerIndex">
<Properties>Nummer</Properties>
</Index>

<Property name="Aktiv">
<Type>%Boolean</Type>
</Property>

<Property name="Index">
<Type>%Integer</Type>
</Property>

<Property name="Breite">
<Type>%Integer</Type>
</Property>

<Property name="Ausrichtung">
<Type>%Integer</Type>
</Property>

<Property name="FontName">
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="FontSize">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="FontBold">
<Type>%Boolean</Type>
</Property>

<Property name="FontItalic">
<Type>%Boolean</Type>
</Property>

<Property name="FontStrikeout">
<Type>%Boolean</Type>
</Property>

<Property name="FontUnderline">
<Type>%Boolean</Type>
</Property>

<Property name="FormularGebindeFuss">
<Type>DBAgrofreshEK.SD.FormGebFuss</Type>
<Cardinality>parent</Cardinality>
<Inverse>FormularGebindeFussEntry</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="FontColor">
<Type>%Integer</Type>
</Property>

<Property name="RahmenAktivLinks">
<Type>%Boolean</Type>
</Property>

<Property name="RahmenBreiteLinks">
<Type>%Integer</Type>
</Property>

<Property name="RahmenAbstandLinks">
<Type>%Integer</Type>
</Property>

<Property name="RahmenAktivOben">
<Type>%Boolean</Type>
</Property>

<Property name="RahmenBreiteOben">
<Type>%Integer</Type>
</Property>

<Property name="RahmenAbstandOben">
<Type>%Integer</Type>
</Property>

<Property name="RahmenAktivRechts">
<Type>%Boolean</Type>
</Property>

<Property name="RahmenBreiteRechts">
<Type>%Integer</Type>
</Property>

<Property name="RahmenAbstandRechts">
<Type>%Integer</Type>
</Property>

<Property name="RahmenAktivUnten">
<Type>%Boolean</Type>
</Property>

<Property name="RahmenBreiteUnten">
<Type>%Integer</Type>
</Property>

<Property name="RahmenAbstandUnten">
<Type>%Integer</Type>
</Property>

<Property name="Text">
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Method name="GetText">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTextClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.FormGebFussE).%OpenId(myID)
		set text = rs.GetText(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetFormGebFussEOidByNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>FormGebFussOid:%String,FormGebFussENr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO :oid
		 FROM DBAgrofreshEK_SD.FormGebFussE
		 WHERE Nummer = :FormGebFussENr AND FormularGebindeFuss=:FormGebFussOid)
	Quit oid
]]></Implementation>
</Method>

<Property name="DetailFontName">
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="DetailFontSize">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="DetailFontBold">
<Type>%Boolean</Type>
</Property>

<Property name="DetailFontItalic">
<Type>%Boolean</Type>
</Property>

<Property name="DetailFontStrikeout">
<Type>%Boolean</Type>
</Property>

<Property name="DetailFontUnderline">
<Type>%Boolean</Type>
</Property>

<Property name="DetailFontColor">
<Type>%Integer</Type>
</Property>

<Property name="DetailRahmenAktivLinks">
<Type>%Boolean</Type>
</Property>

<Property name="DetailRahmenBreiteLinks">
<Type>%Integer</Type>
</Property>

<Property name="DetailRahmenAbstandLinks">
<Type>%Integer</Type>
</Property>

<Property name="DetailRahmenAktivOben">
<Type>%Boolean</Type>
</Property>

<Property name="DetailRahmenBreiteOben">
<Type>%Integer</Type>
</Property>

<Property name="DetailRahmenAbstandOben">
<Type>%Integer</Type>
</Property>

<Property name="DetailRahmenAktivRechts">
<Type>%Boolean</Type>
</Property>

<Property name="DetailRahmenBreiteRechts">
<Type>%Integer</Type>
</Property>

<Property name="DetailRahmenAbstandRechts">
<Type>%Integer</Type>
</Property>

<Property name="DetailRahmenAktivUnten">
<Type>%Boolean</Type>
</Property>

<Property name="DetailRahmenBreiteUnten">
<Type>%Integer</Type>
</Property>

<Property name="DetailRahmenAbstandUnten">
<Type>%Integer</Type>
</Property>

<UDLText name="T">
<Content><![CDATA[
// Format wird für MWST gebraucht

]]></Content>
</UDLText>

<Property name="FormatAnzDezStellen">
<Type>%Integer</Type>
</Property>

<Property name="FormatEinheit">
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="FormatKeineAusgabe">
<Type>%Boolean</Type>
</Property>

<Property name="FormatTotalisieren">
<Type>%Boolean</Type>
</Property>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>{%%PARENT}("FormularGebindeFussEntry")</DataLocation>
<DefaultData>FormGebFussEDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.FormGebFussC("FormularGebindeFussEntry")</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.FormGebFussEI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.FormGebFussES</StreamLocation>
<Data name="FormGebFussEDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Nummer</Value>
</Value>
<Value name="3">
<Value>Aktiv</Value>
</Value>
<Value name="4">
<Value>Index</Value>
</Value>
<Value name="5">
<Value>Breite</Value>
</Value>
<Value name="6">
<Value>Ausrichtung</Value>
</Value>
<Value name="7">
<Value>FontName</Value>
</Value>
<Value name="8">
<Value>FontSize</Value>
</Value>
<Value name="9">
<Value>FontBold</Value>
</Value>
<Value name="10">
<Value>FontItalic</Value>
</Value>
<Value name="11">
<Value>FontStrikeout</Value>
</Value>
<Value name="12">
<Value>FontUnderline</Value>
</Value>
<Value name="13">
<Value>FontColor</Value>
</Value>
<Value name="14">
<Value>RahmenAktivLinks</Value>
</Value>
<Value name="15">
<Value>RahmenBreiteLinks</Value>
</Value>
<Value name="16">
<Value>RahmenAbstandLinks</Value>
</Value>
<Value name="17">
<Value>RahmenAktivOben</Value>
</Value>
<Value name="18">
<Value>RahmenBreiteOben</Value>
</Value>
<Value name="19">
<Value>RahmenAbstandOben</Value>
</Value>
<Value name="20">
<Value>RahmenAktivRechts</Value>
</Value>
<Value name="21">
<Value>RahmenBreiteRechts</Value>
</Value>
<Value name="22">
<Value>RahmenAbstandRechts</Value>
</Value>
<Value name="23">
<Value>RahmenAktivUnten</Value>
</Value>
<Value name="24">
<Value>RahmenBreiteUnten</Value>
</Value>
<Value name="25">
<Value>RahmenAbstandUnten</Value>
</Value>
<Value name="26">
<Value>DetailFontName</Value>
</Value>
<Value name="27">
<Value>DetailFontSize</Value>
</Value>
<Value name="28">
<Value>DetailFontBold</Value>
</Value>
<Value name="29">
<Value>DetailFontItalic</Value>
</Value>
<Value name="30">
<Value>DetailFontStrikeout</Value>
</Value>
<Value name="31">
<Value>DetailFontUnderline</Value>
</Value>
<Value name="32">
<Value>DetailFontColor</Value>
</Value>
<Value name="33">
<Value>DetailRahmenAktivLinks</Value>
</Value>
<Value name="34">
<Value>DetailRahmenBreiteLinks</Value>
</Value>
<Value name="35">
<Value>DetailRahmenAbstandLinks</Value>
</Value>
<Value name="36">
<Value>DetailRahmenAktivOben</Value>
</Value>
<Value name="37">
<Value>DetailRahmenBreiteOben</Value>
</Value>
<Value name="38">
<Value>DetailRahmenAbstandOben</Value>
</Value>
<Value name="39">
<Value>DetailRahmenAktivRechts</Value>
</Value>
<Value name="40">
<Value>DetailRahmenBreiteRechts</Value>
</Value>
<Value name="41">
<Value>DetailRahmenAbstandRechts</Value>
</Value>
<Value name="42">
<Value>DetailRahmenAktivUnten</Value>
</Value>
<Value name="43">
<Value>DetailRahmenBreiteUnten</Value>
</Value>
<Value name="44">
<Value>DetailRahmenAbstandUnten</Value>
</Value>
<Value name="45">
<Value>FormatAnzDezStellen</Value>
</Value>
<Value name="46">
<Value>FormatEinheit</Value>
</Value>
<Value name="47">
<Value>FormatKeineAusgabe</Value>
</Value>
<Value name="48">
<Value>FormatTotalisieren</Value>
</Value>
</Data>
<Data name="Text">
<Attribute>Text</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text"</Subscript>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Aktiv">
</Property>
<Property name="Ausrichtung">
</Property>
<Property name="Breite">
</Property>
<Property name="DetailFontBold">
</Property>
<Property name="DetailFontColor">
</Property>
<Property name="DetailFontItalic">
</Property>
<Property name="DetailFontName">
</Property>
<Property name="DetailFontSize">
</Property>
<Property name="DetailFontStrikeout">
</Property>
<Property name="DetailFontUnderline">
</Property>
<Property name="DetailRahmenAbstandLinks">
</Property>
<Property name="DetailRahmenAbstandOben">
</Property>
<Property name="DetailRahmenAbstandRechts">
</Property>
<Property name="DetailRahmenAbstandUnten">
</Property>
<Property name="DetailRahmenAktivLinks">
</Property>
<Property name="DetailRahmenAktivOben">
</Property>
<Property name="DetailRahmenAktivRechts">
</Property>
<Property name="DetailRahmenAktivUnten">
</Property>
<Property name="DetailRahmenBreiteLinks">
</Property>
<Property name="DetailRahmenBreiteOben">
</Property>
<Property name="DetailRahmenBreiteRechts">
</Property>
<Property name="DetailRahmenBreiteUnten">
</Property>
<Property name="FontBold">
</Property>
<Property name="FontColor">
</Property>
<Property name="FontItalic">
</Property>
<Property name="FontName">
</Property>
<Property name="FontSize">
</Property>
<Property name="FontStrikeout">
</Property>
<Property name="FontUnderline">
</Property>
<Property name="FormatAnzDezStellen">
</Property>
<Property name="FormatEinheit">
</Property>
<Property name="FormatKeineAusgabe">
</Property>
<Property name="FormatTotalisieren">
</Property>
<Property name="FormularGebindeFuss">
</Property>
<Property name="Index">
</Property>
<Property name="Nummer">
</Property>
<Property name="RahmenAbstandLinks">
</Property>
<Property name="RahmenAbstandOben">
</Property>
<Property name="RahmenAbstandRechts">
</Property>
<Property name="RahmenAbstandUnten">
</Property>
<Property name="RahmenAktivLinks">
</Property>
<Property name="RahmenAktivOben">
</Property>
<Property name="RahmenAktivRechts">
</Property>
<Property name="RahmenAktivUnten">
</Property>
<Property name="RahmenBreiteLinks">
</Property>
<Property name="RahmenBreiteOben">
</Property>
<Property name="RahmenBreiteRechts">
</Property>
<Property name="RahmenBreiteUnten">
</Property>
<Property name="childsub">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.Formular">
<Super>%Persistent,%XML.Adaptor,DBCore.MandantRel</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61349,55962.208335</TimeCreated>
<Inheritance>right</Inheritance>

<Property name="Nummer">
<Type>%Integer</Type>
<Required>1</Required>
</Property>

<Index name="NummerIndex">
<Properties>Nummer</Properties>
</Index>

<Property name="Mandant">
<Type>%String</Type>
</Property>

<ForeignKey name="FKMandant">
<Properties>Mandant</Properties>
<ReferencedClass>DBCore.Mandant</ReferencedClass>
<ReferencedKey>MandIdIndex</ReferencedKey>
</ForeignKey>

<Index name="MandantIdx">
<Properties>Mandant</Properties>
</Index>

<Index name="MandantNummerIndex">
<Properties>Mandant,Nummer</Properties>
<Unique>1</Unique>
</Index>

<Property name="Bezeichnung">
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="FormularFile">
<Type>DBCore.ReportStream</Type>
<Cardinality>many</Cardinality>
<Inverse>AgrofreshEKFormular</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="Drucktyp">
<Type>DBAgrofreshEK.SD.DTypForm</Type>
<Cardinality>many</Cardinality>
<Inverse>Formular</Inverse>
<Relationship>1</Relationship>
</Property>

<Method name="GetBezeichnung">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Bezeichnung, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetBezeichnungClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.Formular).%OpenId(myID)
		set text = rs.GetBezeichnung(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetBezeichnung">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Bezeichnung, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetNextFreeNumber">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set nr = 0
	&sql(Select max(Nummer) into :nr From DBAgrofreshEK_SD.Formular WHERE Mandant=:MandOid)
	Quit +nr+1
]]></Implementation>
</Method>

<Method name="OutputStream">
<FormalSpec>Sprache:%String</FormalSpec>
<ReturnType>%Library.GlobalBinaryStream</ReturnType>
<Implementation><![CDATA[
	Set tmpStream=##class(%Library.GlobalBinaryStream).%New()
	Set oid = ..%Id()
	Set Ret=""
	If (oid'="") {
		w "OutputStream... oid:"_oid, !
		&sql(SELECT count(*) As Cnt INTO :Cnt
		     FROM DBCore.ReportStream 
		     WHERE AgrofreshEKFormular=:oid AND Sprache=:Sprache)
		If (Cnt>0) {
			&sql(SELECT %ID INTO :sID 
				 FROM DBCore.ReportStream 
				 WHERE AgrofreshEKFormular=:oid AND Sprache=:Sprache)
				 
			w "OutputStream... sID:"_sID, !
			Set s=##Class(DBCore.ReportStream).%OpenId(sID)
			Set Size=s.DataStream.Size
			Set Ret=tmpStream.CopyFromAndSave(s.DataStream)
		} Else {
			Set StdSprache="de"
			&sql(SELECT count(*) As Cnt INTO :Cnt
			     FROM DBCore.ReportStream 
			     WHERE AgrofreshEKFormular=:oid AND Sprache=:StdSprache)
			If (Cnt>0) {
				&sql(SELECT %ID INTO :sID 
				     FROM DBCore.ReportStream 
				     WHERE AgrofreshEKFormular=:oid AND Sprache=:StdSprache)
				     
				w "OutputStream... sID:"_sID, !
				Set s=##Class(DBCore.ReportStream).%OpenId(sID)
				Set Size=s.DataStream.Size
				Set Ret=tmpStream.CopyFromAndSave(s.DataStream)
			}
		}
	}
	Quit tmpStream
]]></Implementation>
</Method>

<Method name="InputStream">
<FormalSpec>Stream:%Library.GlobalBinaryStream,Sprache:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	Set res=0
	Set oid=..%Id()
	Set sID = ""
	If (oid'="") {
		Set Cnt=0
		&sql(SELECT count(*) As Cnt INTO :Cnt
		     FROM DBCore.ReportStream 
		     WHERE AgrofreshEKFormular=:oid AND Sprache=:Sprache)
		If (Cnt=0) {
			Set n=##Class(DBCore.ReportStream).%New()
			Set n.Sprache = Sprache
			Set n.AgrofreshEKFormular = ##Class(DBAgrofreshEK.SD.Formular).%OpenId(oid)
			Set Ret=n.%Save()
			Set n=""
			Set res=(Ret=1)
			Quit:'res res
		}
		&sql(SELECT ID InTo :sID 
		     FROM DBCore.ReportStream 
		     WHERE AgrofreshEKFormular=:oid AND 
		           Sprache=:Sprache)
		Set s=##Class(DBCore.ReportStream).%OpenId(sID)
		Set Ret=s.DataStream.CopyFromAndSave(Stream)
		Set RetS = s.%Save()
		Set res=((Ret=1) && (RetS=1))
	}
	Quit res
]]></Implementation>
</Method>

<Method name="GetFormularOidByCode">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandOid:%String,FormularNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO :oid
		 FROM DBAgrofreshEK_SD.Formular
		 WHERE Nummer = :FormularNr AND Mandant=:MandOid)
	Quit oid
]]></Implementation>
</Method>

<Method name="%OnDelete">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Delete</METHOD> method to 
provide notification that the object specified by <VAR>oid</VAR> is being deleted.

<P>If this method returns an error then the object will not be deleted.
[Previously private]]]></Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%ObjectIdentity</FormalSpec>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	set reportOid = $lg(oid,1)
	
	&sql(DELETE FROM DBCore.ReportStream WHERE AgrofreshEKFormular = :reportOid)
			
	Quit $$$OK
]]></Implementation>
</Method>

<Trigger name="trgOnDelete">
<Code><![CDATA[	set myId = {ID*O}
	&sql(DELETE FROM DBCore.ReportStream WHERE AgrofreshEKFormular = :myId)]]></Code>
<Event>DELETE</Event>
</Trigger>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.SD.FormularD</DataLocation>
<DefaultData>FormularDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.FormularD</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.FormularI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.FormularS</StreamLocation>
<Data name="Bezeichnung">
<Attribute>Bezeichnung</Attribute>
<Structure>subnode</Structure>
<Subscript>"Bezeichnung"</Subscript>
</Data>
<Data name="FormularDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Nummer</Value>
</Value>
<Value name="3">
<Value>Mandant</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Mandant">
</Property>
<Property name="Nummer">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.Fusstext">
<Description>
</Description>
<Super>%Persistent,%XML.Adaptor,DBCore.MandantRel</Super>
<TimeChanged>62416,57259.581823</TimeChanged>
<TimeCreated>61381,49982.582083</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="PositionsNr">
<Description>
Position_Nr</Description>
<Type>%Integer</Type>
</Property>

<Property name="Text1">
<Description>
Text 1</Description>
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="4096"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Text2">
<Description>
Text 2</Description>
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Text3">
<Description>
Text 3</Description>
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Text4">
<Description>
Text 4</Description>
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Text5">
<Description>
Text 5</Description>
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Text6">
<Description>
Text 6</Description>
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Text7">
<Description>
Text 7</Description>
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Text8">
<Description>
Text 8</Description>
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Text9">
<Description>
Text 9</Description>
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Text10">
<Description>
Text 10</Description>
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Mandant">
<Type>%String</Type>
</Property>

<ForeignKey name="FKMandant">
<Properties>Mandant</Properties>
<ReferencedClass>DBCore.Mandant</ReferencedClass>
<ReferencedKey>MandIdIndex</ReferencedKey>
</ForeignKey>

<Index name="MandantIdx">
<Properties>Mandant</Properties>
</Index>

<Property name="BKFusstext">
<Type>DBAgrofreshEK.BestellungsKopf</Type>
<Cardinality>many</Cardinality>
<Inverse>Fusstext</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgOAFusstext">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>OffertenanfrageFusstext</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgBestFusstext">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>BestellungFusstext</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgASFusstext">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>AnnahmescheinFusstext</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgARFusstext">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>AbrechnungFusstext</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgSammelAbrFusstext">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>SammelabrechnungFusstext</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgBZFusstext">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>BarzahlungFusstext</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgGebindescheinFusstext">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>GebindescheinFusstext</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="BestStrgTASFusstext">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>TeilAnnahmescheinFusstext</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Method name="GetText1">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text1, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText1Class">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.Fusstext).%OpenId(myID)
		set text = rs.GetText1(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText1">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text1, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText2">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text2, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText2Class">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.Fusstext).%OpenId(myID)
		set text = rs.GetText2(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText2">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text2, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText3">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text3, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText3Class">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.Fusstext).%OpenId(myID)
		set text = rs.GetText3(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText3">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text3, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText4">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text4, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText4Class">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.Fusstext).%OpenId(myID)
		set text = rs.GetText4(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText4">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text4, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText5">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text5, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText5Class">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.Fusstext).%OpenId(myID)
		set text = rs.GetText5(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText5">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text5, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText6">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text6, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText6Class">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.Fusstext).%OpenId(myID)
		set text = rs.GetText6(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText6">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text6, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText7">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text7, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText7Class">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.Fusstext).%OpenId(myID)
		set text = rs.GetText7(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText7">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text7, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText8">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text8, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText8Class">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.Fusstext).%OpenId(myID)
		set text = rs.GetText8(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText8">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text8, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText9">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text9, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText9Class">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.Fusstext).%OpenId(myID)
		set text = rs.GetText9(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText9">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text9, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText10">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text10, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetText10Class">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.Fusstext).%OpenId(myID)
		set text = rs.GetText10(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText10">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text10, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetIdByPosNrOnMandant">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,PosNr:%Integer,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[

	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK_SD.Fusstext
		 WHERE Mandant = :MandantOid AND PositionsNr = :PosNr
		 AND (LENGTH(DBAgrofreshEK_SD.Fusstext_GetText1Class(%ID, :MandantOid, :Lang)) > 0  
		 OR
		LENGTH(DBAgrofreshEK_SD.Fusstext_GetText2Class(%ID, :MandantOid, :Lang)) > 0
		OR
		LENGTH(DBAgrofreshEK_SD.Fusstext_GetText3Class(%ID, :MandantOid, :Lang)) > 0
		OR
		LENGTH(DBAgrofreshEK_SD.Fusstext_GetText4Class(%ID, :MandantOid, :Lang)) > 0
		OR
		LENGTH(DBAgrofreshEK_SD.Fusstext_GetText5Class(%ID, :MandantOid, :Lang)) > 0
		OR
		LENGTH(DBAgrofreshEK_SD.Fusstext_GetText6Class(%ID, :MandantOid, :Lang)) > 0
		OR
		LENGTH(DBAgrofreshEK_SD.Fusstext_GetText7Class(%ID, :MandantOid, :Lang)) > 0
		OR
		LENGTH(DBAgrofreshEK_SD.Fusstext_GetText8Class(%ID, :MandantOid, :Lang)) > 0
		OR
		LENGTH(DBAgrofreshEK_SD.Fusstext_GetText9Class(%ID, :MandantOid, :Lang)) > 0
		OR
		LENGTH(DBAgrofreshEK_SD.Fusstext_GetText10Class(%ID, :MandantOid, :Lang)) > 0))
	Quit id
]]></Implementation>
</Method>

<Method name="GetIdByPosNrOnMandWOCheckText">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,PosNr:%Integer,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK_SD.Fusstext
		 WHERE Mandant = :MandantOid AND PositionsNr = :PosNr)
	Quit id
]]></Implementation>
</Method>

<Method name="DeleteTextFromId">
<ClassMethod>1</ClassMethod>
<FormalSpec>FusstextOid:%String,Lang:%String</FormalSpec>
<Implementation><![CDATA[
	set obj = ##class(DBAgrofreshEK.SD.Fusstext).%OpenId(FusstextOid)
	if (obj '= "") {
		set val = obj.Text1.GetAt(Lang)
		if (val '= "") {
			do obj.Text1.SetAt("",Lang)	
		}
		set val2 = obj.Text2.GetAt(Lang)
		if (val2 '= "") {
			do obj.Text2.SetAt("",Lang)	
		}
		set val3 = obj.Text3.GetAt(Lang)
		if (val3 '= "") {
			do obj.Text3.SetAt("",Lang)	
		}
		set val4 = obj.Text4.GetAt(Lang)
		if (val '= "") {
			do obj.Text4.SetAt("",Lang)	
		}
		
		do obj.%Save()
	}
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.SD.FusstextD</DataLocation>
<DefaultData>FusstextDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.FusstextD</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.FusstextI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.FusstextS</StreamLocation>
<Data name="FusstextDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>PositionsNr</Value>
</Value>
<Value name="3">
<Value>Mandant</Value>
</Value>
</Data>
<Data name="Text1">
<Attribute>Text1</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text1"</Subscript>
</Data>
<Data name="Text10">
<Attribute>Text10</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text10"</Subscript>
</Data>
<Data name="Text2">
<Attribute>Text2</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text2"</Subscript>
</Data>
<Data name="Text3">
<Attribute>Text3</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text3"</Subscript>
</Data>
<Data name="Text4">
<Attribute>Text4</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text4"</Subscript>
</Data>
<Data name="Text5">
<Attribute>Text5</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text5"</Subscript>
</Data>
<Data name="Text6">
<Attribute>Text6</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text6"</Subscript>
</Data>
<Data name="Text7">
<Attribute>Text7</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text7"</Subscript>
</Data>
<Data name="Text8">
<Attribute>Text8</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text8"</Subscript>
</Data>
<Data name="Text9">
<Attribute>Text9</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text9"</Subscript>
</Data>
<Property name="Mandant"/>
<Property name="PositionsNr"/>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.Hilfstexte">
<Description>
</Description>
<Super>%Persistent,%XML.Adaptor,DBCore.MandantRel</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61408,30414.932213</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="PositionsNr">
<Description>
Position</Description>
<Type>%Integer</Type>
</Property>

<Property name="Text">
<Description>
Text</Description>
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Mandant">
<Type>%String</Type>
</Property>

<ForeignKey name="FKMandant">
<Properties>Mandant</Properties>
<ReferencedClass>DBCore.Mandant</ReferencedClass>
<ReferencedKey>MandIdIndex</ReferencedKey>
</ForeignKey>

<Index name="MandantIdx">
<Properties>Mandant</Properties>
</Index>

<Method name="GetText">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTextClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if ((myID '= "") && (myID '= $c(0))) {
		Set rs=##Class(DBAgrofreshEK.SD.Hilfstexte).%OpenId(myID)
		set text = rs.GetText(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetIdByPosNrOnMandant">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,PosNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[

	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK_SD.Hilfstexte
		 WHERE Mandant = :MandantOid AND PositionsNr = :PosNr)
	Quit id
]]></Implementation>
</Method>

<Method name="DeleteTextFromId">
<ClassMethod>1</ClassMethod>
<FormalSpec>HilfstextOid:%String,Lang:%String</FormalSpec>
<Implementation><![CDATA[
	set obj = ##class(DBAgrofreshEK.SD.Hilfstexte).%OpenId(HilfstextOid)
	if (obj '= "") {
		set val = obj.Text.GetAt(Lang)
		if (val '= "") {
			Do ##class(DBUtils.StringUtils).SetText(obj.Text, "", Lang, obj.Mandant)
			do obj.%Save()
		}
	}
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.SD.HilfstexteD</DataLocation>
<DefaultData>HilfstexteDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.HilfstexteD</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.HilfstexteI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.HilfstexteS</StreamLocation>
<Data name="HilfstexteDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>PositionsNr</Value>
</Value>
<Value name="3">
<Value>Mandant</Value>
</Value>
</Data>
<Data name="Text">
<Attribute>Text</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text"</Subscript>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Mandant">
</Property>
<Property name="PositionsNr">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.Lieferart">
<Description>
</Description>
<Super>DBAgrofreshEK.SD.Hilfstexte,%XML.Adaptor</Super>
<TimeChanged>61658,53291.831716</TimeChanged>
<TimeCreated>61100,39418.430235</TimeCreated>
<Inheritance>right</Inheritance>

<Property name="Transporteur">
<Type>DBAdressen.Adresse</Type>
<Cardinality>one</Cardinality>
<Inverse>TransporteurEKLieferart</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="TransporteurIndex">
<Properties>Transporteur</Properties>
</Index>

<Property name="AdressVorschlag">
<Type>DBAdressen.Adresse</Type>
<Cardinality>one</Cardinality>
<Inverse>AdressVorschlagEKLieferart</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="AdressVorschlagIndex">
<Properties>AdressVorschlag</Properties>
</Index>

<Property name="BKLieferart">
<Type>DBAgrofreshEK.BestellungsKopf</Type>
<Cardinality>many</Cardinality>
<Inverse>Lieferart</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="Verrechnen">
<Type>%Boolean</Type>
</Property>

<Property name="BestellungsVorschlag">
<Type>DBDebiKredi.Kreditor</Type>
<Cardinality>many</Cardinality>
<Inverse>Lieferart</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Method name="GetIdByPosNrOnMandant">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,PosNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK_SD.Lieferart
		 WHERE Mandant = :MandantOid AND PositionsNr = :PosNr)
	Quit id
]]></Implementation>
</Method>

<Property name="BestStrgVorschlag">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>VorschlagLieferart</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DefaultData>LieferartDefaultData</DefaultData>
<Data name="LieferartDefaultData">
<Structure>listnode</Structure>
<Subscript>"Lieferart"</Subscript>
<Value name="1">
<Value>Transporteur</Value>
</Value>
<Value name="2">
<Value>AdressVorschlag</Value>
</Value>
<Value name="3">
<Value>Verrechnen</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.Marge">
<Super>%Persistent,%XML.Adaptor,DBCore.MandantRel</Super>
<TimeChanged>62416,57259.83862</TimeChanged>
<TimeCreated>61262,58610.899164</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Margencode">
<Description>
Position</Description>
<Type>%Integer</Type>
<Required>1</Required>
</Property>

<Property name="Text">
<Description>
Text</Description>
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Mandant">
<Type>%String</Type>
</Property>

<ForeignKey name="FKMandant">
<Properties>Mandant</Properties>
<ReferencedClass>DBCore.Mandant</ReferencedClass>
<ReferencedKey>MandIdIndex</ReferencedKey>
</ForeignKey>

<Index name="MandantIdx">
<Properties>Mandant</Properties>
</Index>

<Property name="ArtikelMarge">
<Type>DBAgrofresh.Artikel</Type>
<Cardinality>many</Cardinality>
<Inverse>Marge</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="MargeAbt">
<Type>DBAgrofreshEK.SD.MargeAbt</Type>
<Cardinality>many</Cardinality>
<Inverse>Marge</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Method name="GetText">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTextClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.Marge).%OpenId(myID)
		set text = rs.GetText(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetIdByMargeNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,MargeNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	
	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK_SD.Marge
	     WHERE Margencode = :MargeNr AND Mandant = :MandantOid)
	Quit id
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.SD.MargeD</DataLocation>
<DefaultData>MargeDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.MargeD</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.MargeI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.MargeS</StreamLocation>
<Data name="MargeDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Margencode</Value>
</Value>
<Value name="3">
<Value>Mandant</Value>
</Value>
</Data>
<Data name="Text">
<Attribute>Text</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text"</Subscript>
</Data>
<Property name="Mandant"/>
<Property name="Margencode"/>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.MargeAbt">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62416,57212.300347</TimeChanged>
<TimeCreated>61318,38153.962438</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Abteilung">
<Type>DBCore.Abteilung</Type>
<Cardinality>one</Cardinality>
<Inverse>MargeAbt</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abteilung"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="Marge">
<Type>DBAgrofreshEK.SD.Marge</Type>
<Cardinality>one</Cardinality>
<Inverse>MargeAbt</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Marge"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="MargenSatz">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="MargenSatz2">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="KontoMarge2">
<Type>DBFibu.Konto</Type>
<Cardinality>one</Cardinality>
<Inverse>MargeAbtKtoMarge2</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="KontoMarge2"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="AbDatum">
<Description>
Ab welchem Datum die Marge gütlig ist</Description>
<Type>%Date</Type>
</Property>

<Method name="GetProzentByAbteilungMarge">
<ClassMethod>1</ClassMethod>
<FormalSpec>Abteilung:%String,Marge:%String,Datum:%Date</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	if (Abteilung ="") || (Marge="") || (Datum ="") {
		quit 0
	}
	set Prozent = 0
	
	&sql(SELECT TOP 1 MargenSatz INTO :Prozent FROM DBAgrofreshEK_SD.MargeAbt 
		WHERE  Abteilung=:Abteilung AND Marge = :Marge AND AbDatum <= :Datum Order by AbDatum desc )
	
	quit +Prozent
]]></Implementation>
</Method>

<Method name="GetOidByAbteilungMarge">
<ClassMethod>1</ClassMethod>
<FormalSpec>Abteilung:%String,Marge:%String,Datum:%Date</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK_SD.MargeAbt 
	     WHERE Abteilung=:Abteilung AND Marge = :Marge AND AbDatum <= :Datum Order by AbDatum desc)
	Quit id
]]></Implementation>
</Method>

<Method name="MargePerDatumExists">
<ClassMethod>1</ClassMethod>
<FormalSpec>Abteilung:%String,Marge:%String,Datum:%Date</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set id = ##Class(DBAgrofreshEK.SD.MargeAbt).GetOidByAbtMargeDatum(Abteilung, Marge, Datum)
	if (id = "") {
		Quit 0	
	} else {
		Quit 1
	}
]]></Implementation>
</Method>

<Method name="GetOidByAbtMargeDatum">
<ClassMethod>1</ClassMethod>
<FormalSpec>Abteilung:%String,Marge:%String,Datum:%Date</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK_SD.MargeAbt
	     WHERE Abteilung=:Abteilung AND Marge = :Marge AND AbDatum = :Datum)
	Quit id
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.SD.MargeAbtD</DataLocation>
<DefaultData>MargeAbtDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.MargeAbtD</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.MargeAbtI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.MargeAbtS</StreamLocation>
<Data name="MargeAbtDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Abteilung</Value>
</Value>
<Value name="3">
<Value>Marge</Value>
</Value>
<Value name="4">
<Value>MargenSatz</Value>
</Value>
<Value name="5">
<Value>MargenSatz2</Value>
</Value>
<Value name="6">
<Value>KontoMarge2</Value>
</Value>
<Value name="7">
<Value>AbDatum</Value>
</Value>
</Data>
<Property name="AbDatum"/>
<Property name="Abteilung"/>
<Property name="KontoMarge2"/>
<Property name="Marge"/>
<Property name="MargenSatz"/>
<Property name="MargenSatz2"/>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.StrgBest">
<Super>DBAgrofreshEK.SD.Hilfstexte,%XML.Adaptor</Super>
<TimeChanged>61422,29489</TimeChanged>
<TimeCreated>61408,30663.913753</TimeCreated>
<Inheritance>right</Inheritance>

<Method name="GetIdByPosNrOnMandant">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,PosNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK_SD.StrgBest
		 WHERE Mandant = :MandantOid AND PositionsNr = :PosNr)
	Quit id
]]></Implementation>
</Method>

<Property name="BestStrgImportTyp">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>ImportTyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="TypStrgTyp">
<Type>DBAgrofreshEK.TypStrg</Type>
<Cardinality>many</Cardinality>
<Inverse>Typ</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="Lieferant">
<Type>DBAdressen.Adresse</Type>
<Cardinality>many</Cardinality>
<Inverse>EinkSteuerungstyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.TblDataE">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61723,33551.927105</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Nummer">
<Type>%Integer</Type>
<Required>1</Required>
</Property>

<Index name="NummerIndex">
<Properties>Nummer</Properties>
</Index>

<Property name="Aktiv">
<Type>%Boolean</Type>
</Property>

<Property name="Index">
<Type>%Integer</Type>
</Property>

<Property name="Breite">
<Type>%Integer</Type>
</Property>

<Property name="Ausrichtung">
<Type>%Integer</Type>
</Property>

<Property name="Tabellenkopf">
<Type>DBAgrofreshEK.SD.TblKopf</Type>
<Cardinality>parent</Cardinality>
<Inverse>TabellendataEntry</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Formularkopf"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="Rahmen">
<Type>DBCore.CORahmen</Type>
</Property>

<Property name="Format">
<Type>DBCore.COFormat</Type>
</Property>

<Property name="Font">
<Type>DBCore.COFont</Type>
</Property>

<Method name="GetTblDataEntryOidByNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>TblKopfOid:%String,TblDataEntryNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO :oid
		 FROM DBAgrofreshEK_SD.TblDataE
		 WHERE Nummer = :TblDataEntryNr AND Tabellenkopf=:TblKopfOid)
	Quit oid
]]></Implementation>
</Method>

<Method name="GetFormatTextFallsLeerClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.TblDataE).%OpenId(myID)
		set text = rs.Format.GetFormatTextFallsLeer(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>{%%PARENT}("TabellendataEntry")</DataLocation>
<DefaultData>TblDataEDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.TblKopfC("TabellendataEntry")</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.TblDataEI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.TblDataES</StreamLocation>
<Data name="TblDataEDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Nummer</Value>
</Value>
<Value name="3">
<Value>Aktiv</Value>
</Value>
<Value name="4">
<Value>Index</Value>
</Value>
<Value name="5">
<Value>Breite</Value>
</Value>
<Value name="6">
<Value>Ausrichtung</Value>
</Value>
<Value name="7">
<Value>Rahmen</Value>
</Value>
<Value name="8">
<Value>Format</Value>
</Value>
<Value name="9">
<Value>Font</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Aktiv">
</Property>
<Property name="Ausrichtung">
</Property>
<Property name="Breite">
</Property>
<Property name="Font">
</Property>
<Property name="Format">
</Property>
<Property name="Index">
</Property>
<Property name="Nummer">
</Property>
<Property name="Rahmen">
</Property>
<Property name="Tabellenkopf">
</Property>
<Property name="childsub">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.TblFuss">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61723,33659.863421</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Nummer">
<Type>%Integer</Type>
<Required>1</Required>
</Property>

<Index name="NummerIndex">
<Properties>Nummer</Properties>
</Index>

<Property name="Mandant">
<Type>%String</Type>
</Property>

<ForeignKey name="FKMandant">
<Properties>Mandant</Properties>
<ReferencedClass>DBCore.Mandant</ReferencedClass>
<ReferencedKey>MandIdIndex</ReferencedKey>
</ForeignKey>

<Index name="MandantNummerIndex">
<Properties>Mandant,Nummer</Properties>
<Unique>1</Unique>
</Index>

<Property name="Bezeichnung">
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="TabellenfussEntry">
<Type>DBAgrofreshEK.SD.TblFussE</Type>
<Cardinality>children</Cardinality>
<Inverse>Tabellenfuss</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="TabellenfussSkontoEntry">
<Type>DBAgrofreshEK.SD.TblFussSktE</Type>
<Cardinality>children</Cardinality>
<Inverse>Tabellenfuss</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="GenFont">
<Type>DBCore.COFont</Type>
</Property>

<Property name="GenRahmen">
<Type>DBCore.CORahmen</Type>
</Property>

<Method name="GetBezeichnung">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Bezeichnung, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetBezeichnungClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.TblFuss).%OpenId(myID)
		set text = rs.GetBezeichnung(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetBezeichnung">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Bezeichnung, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetNextFreeNumber">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set nr = 0
	&sql(Select max(Nummer) into :nr From DBAgrofreshEK_SD.TblFuss WHERE Mandant=:MandOid)
	Quit +nr+1
]]></Implementation>
</Method>

<Method name="GetTblFussOidByCode">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandOid:%String,TblFussNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO oid
		 FROM DBAgrofreshEK_SD.TblFuss
		 WHERE Nummer = :TblFussNr AND Mandant=:MandOid)
	Quit oid
]]></Implementation>
</Method>

<Method name="CopyTblFuss">
<ClassMethod>1</ClassMethod>
<FormalSpec>SrcOid:%String,newNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	/// Init
	set status = ""
	set dstAs = ""
	/// Source öffnen
	set srcAs = ##class(DBAgrofreshEK.SD.TblFuss).%OpenId(SrcOid)
	
	/// kopieren und Typ zuweisen
	set dstAs = srcAs.%ConstructClone(-1)
	set dstAs.Nummer = newNr
	set status = dstAs.%Save()
	set id = dstAs.%Id()
	
	// Wenn erfolgreich auch die Childern kopieren
	if ($$$ISOK(status)) {
		// Formular Fuss Entrys
		Set strSQL="SELECT ID FROM DBAgrofreshEK_SD.TblFussE WHERE Tabellenfuss = '"_SrcOid_"'"
		Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	    Do rs.Prepare(strSQL)
	    Set sc=rs.Execute()
	    while (rs.Next()) {
		    set pos = ##class(DBAgrofreshEK.SD.TblFussE).%OpenId(rs.Data("ID"))
		    if (pos '= "") {
			    set newPos = pos.%ConstructClone(-1)
			    set newPos.Tabellenfuss=dstAs
			    set posState = newPos.%Save()
			    
				if ('$$$ISOK(posState)) {
					w "Error in Save von Formularfuss Entrys",  posState, !
				}
				k pos			    
		    }
	    }
		// Formular Skonto Entrys
		Set strSQL="SELECT ID FROM DBAgrofreshEK_SD.TblFussSktE WHERE Tabellenfuss = '"_SrcOid_"'"
		Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	    Do rs.Prepare(strSQL)
	    Set sc=rs.Execute()
	    while (rs.Next()) {
		    set pos = ##class(DBAgrofreshEK.SD.TblFussSktE).%OpenId(rs.Data("ID"))
		    if (pos '= "") {
			    set newPos = pos.%ConstructClone(-1)
			    set newPos.Tabellenfuss=dstAs
			    set posState = newPos.%Save()
			    
				if ('$$$ISOK(posState)) {
					w "Error in Save von Formularfuss Skonto Entrys",  posState, !
				}
				k pos			    
		    }
		    
	    }
	}
	
	kill dstAs, srcAs
	quit id
]]></Implementation>
</Method>

<Property name="Drucktyp">
<Type>DBAgrofreshEK.SD.DTypTblFuss</Type>
<Cardinality>many</Cardinality>
<Inverse>TblFuss</Inverse>
<Relationship>1</Relationship>
</Property>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.SD.TblFussD</DataLocation>
<DefaultData>TblFussDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.TblFussD</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.TblFussI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.TblFussS</StreamLocation>
<Data name="Bezeichnung">
<Attribute>Bezeichnung</Attribute>
<Structure>subnode</Structure>
<Subscript>"Bezeichnung"</Subscript>
</Data>
<Data name="TblFussDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Nummer</Value>
</Value>
<Value name="3">
<Value>Mandant</Value>
</Value>
<Value name="4">
<Value>GenFont</Value>
</Value>
<Value name="5">
<Value>GenRahmen</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="GenFont">
</Property>
<Property name="GenRahmen">
</Property>
<Property name="Mandant">
</Property>
<Property name="Nummer">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.TblFussE">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61723,33881.514902</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Nummer">
<Type>%Integer</Type>
<Required>1</Required>
</Property>

<Index name="NummerIndex">
<Properties>Nummer</Properties>
</Index>

<Property name="Aktiv">
<Type>%Boolean</Type>
</Property>

<Property name="Index">
<Type>%Integer</Type>
</Property>

<Property name="Breite">
<Type>%Integer</Type>
</Property>

<Property name="Ausrichtung">
<Type>%Integer</Type>
</Property>

<Property name="Font">
<Type>DBCore.COFont</Type>
</Property>

<Property name="Text">
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Tabellenfuss">
<Type>DBAgrofreshEK.SD.TblFuss</Type>
<Cardinality>parent</Cardinality>
<Inverse>TabellenfussEntry</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Tabellenfuss"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="Rahmen">
<Type>DBCore.CORahmen</Type>
</Property>

<Property name="DetailFont">
<Type>DBCore.COFont</Type>
</Property>

<Property name="DetailRahmen">
<Type>DBCore.CORahmen</Type>
</Property>

<Property name="TotalFont">
<Type>DBCore.COFont</Type>
</Property>

<Property name="TotalRahmen">
<Type>DBCore.CORahmen</Type>
</Property>

<Property name="TotalText">
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Method name="GetText">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTextClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.TblFussE).%OpenId(myID)
		set text = rs.GetText(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTblFussEntryOidByNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>TblFussOid:%String,TblFussEntryNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO :oid
		 FROM DBAgrofreshEK_SD.TblFussE
		 WHERE Nummer = :TblFussEntryNr AND Tabellenfuss=:TblFussOid)
	Quit oid
]]></Implementation>
</Method>

<Method name="GetTotalText">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..TotalText, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTotalTextClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.TblFussE).%OpenId(myID)
		set text = rs.GetTotalText(MandOid, Lang)
		k rs
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetTotalText">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..TotalText, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>{%%PARENT}("TabellenfussEntry")</DataLocation>
<DefaultData>TblFussEDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.TblFussC("TabellenfussEntry")</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.TblFussEI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.TblFussES</StreamLocation>
<Data name="TblFussEDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Nummer</Value>
</Value>
<Value name="3">
<Value>Aktiv</Value>
</Value>
<Value name="4">
<Value>Index</Value>
</Value>
<Value name="5">
<Value>Breite</Value>
</Value>
<Value name="6">
<Value>Ausrichtung</Value>
</Value>
<Value name="7">
<Value>Font</Value>
</Value>
<Value name="8">
<Value>Rahmen</Value>
</Value>
<Value name="9">
<Value>DetailFont</Value>
</Value>
<Value name="10">
<Value>DetailRahmen</Value>
</Value>
<Value name="11">
<Value>TotalFont</Value>
</Value>
<Value name="12">
<Value>TotalRahmen</Value>
</Value>
</Data>
<Data name="Text">
<Attribute>Text</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text"</Subscript>
</Data>
<Data name="TotalText">
<Attribute>TotalText</Attribute>
<Structure>subnode</Structure>
<Subscript>"TotalText"</Subscript>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Aktiv">
</Property>
<Property name="Ausrichtung">
</Property>
<Property name="Breite">
</Property>
<Property name="DetailFont">
</Property>
<Property name="DetailRahmen">
</Property>
<Property name="Font">
</Property>
<Property name="Index">
</Property>
<Property name="Nummer">
</Property>
<Property name="Rahmen">
</Property>
<Property name="Tabellenfuss">
</Property>
<Property name="TotalFont">
</Property>
<Property name="TotalRahmen">
</Property>
<Property name="childsub">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.TblFussSktE">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61723,33955.822363</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Nummer">
<Type>%Integer</Type>
<Required>1</Required>
</Property>

<Index name="NummerIndex">
<Properties>Nummer</Properties>
</Index>

<Property name="Aktiv">
<Type>%Boolean</Type>
</Property>

<Property name="Index">
<Type>%Integer</Type>
</Property>

<Property name="Breite">
<Type>%Integer</Type>
</Property>

<Property name="Ausrichtung">
<Type>%Integer</Type>
</Property>

<Property name="Font">
<Type>DBCore.COFont</Type>
</Property>

<Property name="Text">
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Tabellenfuss">
<Type>DBAgrofreshEK.SD.TblFuss</Type>
<Cardinality>parent</Cardinality>
<Inverse>TabellenfussSkontoEntry</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Tabellenfuss"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="Rahmen">
<Type>DBCore.CORahmen</Type>
</Property>

<Method name="GetText">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTextClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.TblFussSktE).%OpenId(myID)
		set text = rs.GetText(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTblFussSkontoEntryOidByNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>TblFussOid:%String,TblFussSkontoEntryNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO :oid
		 FROM DBAgrofreshEK_SD.TblFussSktE
		 WHERE Nummer = :TblFussSkontoEntryNr AND Tabellenfuss=:TblFussOid)
	Quit oid
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>{%%PARENT}("TabellenfussSkontoEntry")</DataLocation>
<DefaultData>TblFussSktEDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.TblFussC("TabellenfussSkontoEntry")</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.TblFussSktEI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.TblFussSktES</StreamLocation>
<Data name="TblFussSktEDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Nummer</Value>
</Value>
<Value name="3">
<Value>Aktiv</Value>
</Value>
<Value name="4">
<Value>Index</Value>
</Value>
<Value name="5">
<Value>Breite</Value>
</Value>
<Value name="6">
<Value>Ausrichtung</Value>
</Value>
<Value name="7">
<Value>Font</Value>
</Value>
<Value name="8">
<Value>Rahmen</Value>
</Value>
</Data>
<Data name="Text">
<Attribute>Text</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text"</Subscript>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Aktiv">
</Property>
<Property name="Ausrichtung">
</Property>
<Property name="Breite">
</Property>
<Property name="Font">
</Property>
<Property name="Index">
</Property>
<Property name="Nummer">
</Property>
<Property name="Rahmen">
</Property>
<Property name="Tabellenfuss">
</Property>
<Property name="childsub">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.TblKopf">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61723,34122.330839</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Nummer">
<Type>%Integer</Type>
<Required>1</Required>
</Property>

<Index name="NummerIndex">
<Properties>Nummer</Properties>
</Index>

<Property name="Mandant">
<Type>%String</Type>
</Property>

<ForeignKey name="FKMandant">
<Properties>Mandant</Properties>
<ReferencedClass>DBCore.Mandant</ReferencedClass>
<ReferencedKey>MandIdIndex</ReferencedKey>
</ForeignKey>

<Index name="MandantNummerIndex">
<Properties>Mandant,Nummer</Properties>
<Unique>1</Unique>
</Index>

<Property name="Bezeichnung">
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Drucktyp">
<Type>DBAgrofreshEK.SD.DTypTblKopf</Type>
<Cardinality>many</Cardinality>
<Inverse>TblKopf</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="TabellenkopfEntry">
<Type>DBAgrofreshEK.SD.TblKopfE</Type>
<Cardinality>children</Cardinality>
<Inverse>Tabellenkopf</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="TabellendataEntry">
<Type>DBAgrofreshEK.SD.TblDataE</Type>
<Cardinality>children</Cardinality>
<Inverse>Tabellenkopf</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="TabellenSREntry">
<Type>DBAgrofreshEK.SD.TblSREntry</Type>
<Cardinality>children</Cardinality>
<Inverse>Tabellenkopf</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="TabellenSRgkEntry">
<Type>DBAgrofreshEK.SD.TblSRgkEntry</Type>
<Cardinality>children</Cardinality>
<Inverse>Tabellenkopf</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="TabellenSRgfEntry">
<Type>DBAgrofreshEK.SD.TblSRgfEntry</Type>
<Cardinality>children</Cardinality>
<Inverse>Tabellenkopf</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="GenFont">
<Type>DBCore.COFont</Type>
</Property>

<Property name="GenRahmen">
<Type>DBCore.CORahmen</Type>
</Property>

<Property name="DataGenFont">
<Type>DBCore.COFont</Type>
</Property>

<Property name="DataGenRahmen">
<Type>DBCore.CORahmen</Type>
</Property>

<Property name="SrGenFontAktiv">
<Type>%Boolean</Type>
</Property>

<Property name="SrGenFont">
<Type>DBCore.COFont</Type>
</Property>

<Property name="SrGenRahmen">
<Type>DBCore.CORahmen</Type>
</Property>

<Property name="SrKopfGenFont">
<Type>DBCore.COFont</Type>
</Property>

<Property name="SrKopfGenRahmen">
<Type>DBCore.CORahmen</Type>
</Property>

<Method name="GetBezeichnung">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Bezeichnung, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetBezeichnungClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.TblKopf).%OpenId(myID)
		set text = rs.GetBezeichnung(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetBezeichnung">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Bezeichnung, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetNextFreeNumber">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set nr = 0
	&sql(Select max(Nummer) into :nr From DBAgrofreshEK_SD.TblKopf WHERE Mandant=:MandOid)
	Quit +nr+1
]]></Implementation>
</Method>

<Method name="GetTblKopfOidByCode">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandOid:%String,TblKopfNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO :oid
		 FROM DBAgrofreshEK_SD.TblKopf
		 WHERE Nummer = :TblKopfNr AND Mandant=:MandOid)
	Quit oid
]]></Implementation>
</Method>

<Method name="CopyTblKopf">
<ClassMethod>1</ClassMethod>
<FormalSpec>SrcOid:%String,newNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	/// Init
	set status = ""
	set dstAs = ""
	/// Source öffnen
	set srcAs = ##class(DBAgrofreshEK.SD.TblKopf).%OpenId(SrcOid)
	
	/// kopieren und Nummer zuweisen
	set dstAs = srcAs.%ConstructClone(-1)
	set dstAs.Nummer = newNr
	set status = dstAs.%Save()
	set id = dstAs.%Id()
	
	// Wenn erfolgreich auch die Childern kopieren
	if ($$$ISOK(status)) {
		// Formular Kopf Entrys
		Set strSQL="SELECT ID FROM DBAgrofreshEK_SD.TblKopfE WHERE Tabellenkopf='"_SrcOid_"'"
		Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	    Do rs.Prepare(strSQL)
	    Set sc=rs.Execute()
	    while (rs.Next()) {
		    set pos = ##class(DBAgrofreshEK.SD.TblKopfE).%OpenId(rs.Data("ID"))
		    if (pos '= "") {
			    set newPos = pos.%ConstructClone(-1)
			    set newPos.Tabellenkopf=dstAs
			    set posState = newPos.%Save()
			    
				if ('$$$ISOK(posState)) {
					w "Error in Save von Kopf Entrys",  posState, !
				}
				k pos			    
		    }
		    
	    }
		// Formular Detail
		Set strSQL="SELECT ID FROM DBAgrofreshEK_SD.TblDataE WHERE Tabellenkopf='"_SrcOid_"'"
		Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	    Do rs.Prepare(strSQL)
	    Set sc=rs.Execute()
	    while (rs.Next()) {
		    set pos = ##class(DBAgrofreshEK.SD.TblDataE).%OpenId(rs.Data("ID"))
		    if (pos '= "") {
			    set newPos = pos.%ConstructClone(-1)
			    set newPos.Tabellenkopf=dstAs
			    set posState = newPos.%Save()
			    
				if ('$$$ISOK(posState)) {
					w "Error in Save von Detail Formular Detail ",  posState, !
				}
				k pos			    
		    }
		    
	    }
	}
	set status = dstAs.%Save()
	kill dstAs, srcAs
	quit id
]]></Implementation>
</Method>

<UDLText name="T">
<Content><![CDATA[
// Zuschläge / Abzüge unterdrücken

]]></Content>
</UDLText>

<Property name="BlankZSAZ">
<Type>%Boolean</Type>
</Property>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.SD.TblKopfD</DataLocation>
<DefaultData>TblKopfDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.TblKopfD</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.TblKopfI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.TblKopfS</StreamLocation>
<Data name="Bezeichnung">
<Attribute>Bezeichnung</Attribute>
<Structure>subnode</Structure>
<Subscript>"Bezeichnung"</Subscript>
</Data>
<Data name="TblKopfDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Nummer</Value>
</Value>
<Value name="3">
<Value>Mandant</Value>
</Value>
<Value name="4">
<Value>GenFont</Value>
</Value>
<Value name="5">
<Value>GenRahmen</Value>
</Value>
<Value name="6">
<Value>SrGenFontAktiv</Value>
</Value>
<Value name="7">
<Value>SrGenFont</Value>
</Value>
<Value name="8">
<Value>SrGenRahmen</Value>
</Value>
<Value name="9">
<Value>SrKopfGenFont</Value>
</Value>
<Value name="10">
<Value>SrKopfGenRahmen</Value>
</Value>
<Value name="11">
<Value>DataGenFont</Value>
</Value>
<Value name="12">
<Value>DataGenRahmen</Value>
</Value>
<Value name="13">
<Value>BlankZSAZ</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="BlankZSAZ">
</Property>
<Property name="DataGenFont">
</Property>
<Property name="DataGenRahmen">
</Property>
<Property name="GenFont">
</Property>
<Property name="GenRahmen">
</Property>
<Property name="Mandant">
</Property>
<Property name="Nummer">
</Property>
<Property name="SrGenFont">
</Property>
<Property name="SrGenFontAktiv">
</Property>
<Property name="SrGenRahmen">
</Property>
<Property name="SrKopfGenFont">
</Property>
<Property name="SrKopfGenRahmen">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.TblKopfE">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61723,34195.422994</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Nummer">
<Type>%Integer</Type>
<Required>1</Required>
</Property>

<Index name="NummerIndex">
<Properties>Nummer</Properties>
</Index>

<Property name="Aktiv">
<Type>%Boolean</Type>
</Property>

<Property name="Index">
<Type>%Integer</Type>
</Property>

<Property name="Breite">
<Type>%Integer</Type>
</Property>

<Property name="Ausrichtung">
<Type>%Integer</Type>
</Property>

<Property name="Text">
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Method name="GetText">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTextClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.TblKopfE).%OpenId(myID)
		set text = rs.GetText(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTblKopfEntryOidByNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>TblKopfOid:%String,TblKopfEntryNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO :oid
		 FROM DBAgrofreshEK_SD.TblKopfE
		 WHERE Nummer = :TblKopfEntryNr AND Tabellenkopf=:TblKopfOid)
	Quit oid
]]></Implementation>
</Method>

<Property name="Tabellenkopf">
<Type>DBAgrofreshEK.SD.TblKopf</Type>
<Cardinality>parent</Cardinality>
<Inverse>TabellenkopfEntry</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Tabellenkopf"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="FontColor">
<Type>%Integer</Type>
</Property>

<Property name="Font">
<Type>DBCore.COFont</Type>
</Property>

<Property name="Rahmen">
<Type>DBCore.CORahmen</Type>
</Property>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>{%%PARENT}("TabellenkopfEntry")</DataLocation>
<DefaultData>TblKopfEDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.TblKopfC("TabellenkopfEntry")</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.TblKopfEI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.TblKopfES</StreamLocation>
<Data name="TblKopfEDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Nummer</Value>
</Value>
<Value name="3">
<Value>Aktiv</Value>
</Value>
<Value name="4">
<Value>Index</Value>
</Value>
<Value name="5">
<Value>Breite</Value>
</Value>
<Value name="6">
<Value>Ausrichtung</Value>
</Value>
<Value name="7">
<Value>FontColor</Value>
</Value>
<Value name="8">
<Value>Font</Value>
</Value>
<Value name="9">
<Value>Rahmen</Value>
</Value>
</Data>
<Data name="Text">
<Attribute>Text</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text"</Subscript>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Aktiv">
</Property>
<Property name="Ausrichtung">
</Property>
<Property name="Breite">
</Property>
<Property name="Font">
</Property>
<Property name="FontColor">
</Property>
<Property name="Index">
</Property>
<Property name="Nummer">
</Property>
<Property name="Rahmen">
</Property>
<Property name="Tabellenkopf">
</Property>
<Property name="childsub">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.TblSREntry">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61775,58372.116634</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Nummer">
<Type>%Integer</Type>
<Required>1</Required>
</Property>

<Index name="NummerIndex">
<Properties>Nummer</Properties>
</Index>

<Property name="Aktiv">
<Type>%Boolean</Type>
</Property>

<Property name="Index">
<Type>%Integer</Type>
</Property>

<Property name="Breite">
<Type>%Integer</Type>
</Property>

<Property name="Ausrichtung">
<Type>%Integer</Type>
</Property>

<Property name="Font">
<Type>DBCore.COFont</Type>
</Property>

<Property name="FontColor">
<Type>%Integer</Type>
</Property>

<Method name="GetTblSREntryOidByNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>TblKopfOid:%String,TblSREntryNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO :oid
		 FROM DBAgrofreshEK_SD.TblSREntry
		 WHERE Nummer = :TblSREntryNr AND Tabellenkopf=:TblKopfOid)
	Quit oid
]]></Implementation>
</Method>

<Property name="Tabellenkopf">
<Type>DBAgrofreshEK.SD.TblKopf</Type>
<Cardinality>parent</Cardinality>
<Inverse>TabellenSREntry</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Tabellenkopf"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="Rahmen">
<Type>DBCore.CORahmen</Type>
</Property>

<Property name="Format">
<Type>DBCore.COFormat</Type>
</Property>

<Property name="DetailFont">
<Type>DBCore.COFont</Type>
</Property>

<Property name="DetailRahmen">
<Type>DBCore.CORahmen</Type>
</Property>

<Property name="Text">
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Method name="GetText">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTextClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.TblSREntry).%OpenId(myID)
		set text = rs.GetText(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetFormatTextFallsLeer">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Format.TextFallsLeer, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetFormatTextFallsLeerClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.TblSREntry).%OpenId(myID)
		set text = rs.GetFormatTextFallsLeer(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetFormatTextFallsLeerLeer">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Format.TextFallsLeer, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>{%%PARENT}("FormularSREntry")</DataLocation>
<DefaultData>TblSREntryDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.FormKopfC("FormularSREntry")</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.TblSREntryI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.TblSREntryS</StreamLocation>
<Data name="TblSREntryDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Nummer</Value>
</Value>
<Value name="3">
<Value>Aktiv</Value>
</Value>
<Value name="4">
<Value>Index</Value>
</Value>
<Value name="5">
<Value>Breite</Value>
</Value>
<Value name="6">
<Value>Ausrichtung</Value>
</Value>
<Value name="7">
<Value>Font</Value>
</Value>
<Value name="8">
<Value>FontColor</Value>
</Value>
<Value name="9">
<Value>Rahmen</Value>
</Value>
<Value name="10">
<Value>Format</Value>
</Value>
<Value name="11">
<Value>DetailFont</Value>
</Value>
<Value name="12">
<Value>DetailRahmen</Value>
</Value>
</Data>
<Data name="Text">
<Attribute>Text</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text"</Subscript>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Aktiv">
</Property>
<Property name="Ausrichtung">
</Property>
<Property name="Breite">
</Property>
<Property name="DetailFont">
</Property>
<Property name="DetailRahmen">
</Property>
<Property name="Font">
</Property>
<Property name="FontColor">
</Property>
<Property name="Format">
</Property>
<Property name="Index">
</Property>
<Property name="Nummer">
</Property>
<Property name="Rahmen">
</Property>
<Property name="Tabellenkopf">
</Property>
<Property name="childsub">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.TblSRgfEntry">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61828,42465.672025</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Nummer">
<Type>%Integer</Type>
<Required>1</Required>
</Property>

<Index name="NummerIndex">
<Properties>Nummer</Properties>
</Index>

<Property name="Aktiv">
<Type>%Boolean</Type>
</Property>

<Property name="Index">
<Type>%Integer</Type>
</Property>

<Property name="Breite">
<Type>%Integer</Type>
</Property>

<Property name="Ausrichtung">
<Type>%Integer</Type>
</Property>

<Property name="Font">
<Type>DBCore.COFont</Type>
</Property>

<Property name="Tabellenkopf">
<Type>DBAgrofreshEK.SD.TblKopf</Type>
<Cardinality>parent</Cardinality>
<Inverse>TabellenSRgfEntry</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Tabellenkopf"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="Rahmen">
<Type>DBCore.CORahmen</Type>
</Property>

<Property name="Format">
<Type>DBCore.COFormat</Type>
</Property>

<Property name="Text">
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Method name="GetText">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTextClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.TblSRgfEntry).%OpenId(myID)
		set text = rs.GetText(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetFormatTextFallsLeer">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Format.FormatTextFallsLeer, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetFormatTextFallsLeerClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.TblSRgfEntry).%OpenId(myID)
		set text = rs.GetFormatTextFallsLeer(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetFormatTextFallsLeerLeer">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Format.FormatTextFallsLeer, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTblSRgfEntryOidByNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>TblKopfOid:%String,TblSRgfEntryNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO :oid
		 FROM DBAgrofreshEK_SD.TblSRgfEntry
		 WHERE Nummer = :TblSRgfEntryNr AND Tabellenkopf=:TblKopfOid)
	Quit oid
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>{%%PARENT}("TabellenSRgfEntry")</DataLocation>
<DefaultData>TblSRgfEntryDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.TblKopfC("TabellenSRgfEntry")</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.TblSRgfEntryI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.TblSRgfEntryS</StreamLocation>
<Data name="TblSRgfEntryDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Nummer</Value>
</Value>
<Value name="3">
<Value>Aktiv</Value>
</Value>
<Value name="4">
<Value>Index</Value>
</Value>
<Value name="5">
<Value>Breite</Value>
</Value>
<Value name="6">
<Value>Ausrichtung</Value>
</Value>
<Value name="7">
<Value>Font</Value>
</Value>
<Value name="8">
<Value>Rahmen</Value>
</Value>
<Value name="9">
<Value>Format</Value>
</Value>
</Data>
<Data name="Text">
<Attribute>Text</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text"</Subscript>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Aktiv">
</Property>
<Property name="Ausrichtung">
</Property>
<Property name="Breite">
</Property>
<Property name="Font">
</Property>
<Property name="Format">
</Property>
<Property name="Index">
</Property>
<Property name="Nummer">
</Property>
<Property name="Rahmen">
</Property>
<Property name="Tabellenkopf">
</Property>
<Property name="childsub">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.TblSRgkEntry">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61775,58434.747728</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Nummer">
<Type>%Integer</Type>
<Required>1</Required>
</Property>

<Index name="NummerIndex">
<Properties>Nummer</Properties>
</Index>

<Property name="Aktiv">
<Type>%Boolean</Type>
</Property>

<Property name="Index">
<Type>%Integer</Type>
</Property>

<Property name="Breite">
<Type>%Integer</Type>
</Property>

<Property name="Ausrichtung">
<Type>%Integer</Type>
</Property>

<Property name="Font">
<Type>DBCore.COFont</Type>
</Property>

<Property name="FontColor">
<Type>%Integer</Type>
</Property>

<Property name="Tabellenkopf">
<Type>DBAgrofreshEK.SD.TblKopf</Type>
<Cardinality>parent</Cardinality>
<Inverse>TabellenSRgkEntry</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Tabellenkopf"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="Rahmen">
<Type>DBCore.CORahmen</Type>
</Property>

<Property name="Format">
<Type>DBCore.COFormat</Type>
</Property>

<Property name="Text">
<Type>%String</Type>
<Collection>array</Collection>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Method name="GetText">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Text, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTextClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.TblSRgkEntry).%OpenId(myID)
		set text = rs.GetText(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetText">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Text, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetFormatTextFallsLeer">
<FormalSpec>MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[	Quit ##Class(DBUtils.StringUtils).GetText(..Format.TextFallsLeer, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetFormatTextFallsLeerClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>myID:%String,MandOid:%String,Lang:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set text = ""
	if (myID '= "") {
		Set rs=##Class(DBAgrofreshEK.SD.TblSRgkEntry).%OpenId(myID)
		set text = rs.GetFormatTextFallsLeer(MandOid, Lang)
	}
	Quit text
]]></Implementation>
</Method>

<Method name="SetFormatTextFallsLeerLeer">
<FormalSpec>MandOid:%String,Lang:%String,Value:%String</FormalSpec>
<Implementation><![CDATA[	Do ##class(DBUtils.StringUtils).SetText(..Format.TextFallsLeer, Value, Lang, MandOid)
]]></Implementation>
</Method>

<Method name="GetTblSRgkEntryOidByNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>TblKopfOid:%String,TblSRgkEntryNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	Set oid = ""
	&sql(SELECT ID INTO :oid
		 FROM DBAgrofreshEK_SD.TblSRgkEntry
		 WHERE Nummer = :TblSRgkEntryNr AND Tabellenkopf=:TblKopfOid)
	Quit oid
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>{%%PARENT}("FormularSRgkEntry")</DataLocation>
<DefaultData>TblSRgkEntryDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.SD.FormKopfC("FormularSRgkEntry")</IdLocation>
<IndexLocation>^DBAgrofreshEK.SD.TblSRgkEntryI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.SD.TblSRgkEntryS</StreamLocation>
<Data name="TblSRgkEntryDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Nummer</Value>
</Value>
<Value name="3">
<Value>Aktiv</Value>
</Value>
<Value name="4">
<Value>Index</Value>
</Value>
<Value name="5">
<Value>Breite</Value>
</Value>
<Value name="6">
<Value>Ausrichtung</Value>
</Value>
<Value name="7">
<Value>Font</Value>
</Value>
<Value name="8">
<Value>FontColor</Value>
</Value>
<Value name="9">
<Value>Rahmen</Value>
</Value>
<Value name="10">
<Value>Format</Value>
</Value>
</Data>
<Data name="Text">
<Attribute>Text</Attribute>
<Structure>subnode</Structure>
<Subscript>"Text"</Subscript>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="Aktiv">
</Property>
<Property name="Ausrichtung">
</Property>
<Property name="Breite">
</Property>
<Property name="Font">
</Property>
<Property name="FontColor">
</Property>
<Property name="Format">
</Property>
<Property name="Index">
</Property>
<Property name="Nummer">
</Property>
<Property name="Rahmen">
</Property>
<Property name="Tabellenkopf">
</Property>
<Property name="childsub">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SD.Verarbeitungstyp">
<Super>DBAgrofreshEK.SD.Hilfstexte,%XML.Adaptor</Super>
<TimeChanged>61515,42464.21685</TimeChanged>
<TimeCreated>61514,49356.820805</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Method name="GetIdByPosNrOnMandant">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandantOid:%String,PosNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[

	set id = ""
	&sql(SELECT ID INTO :id FROM DBAgrofreshEK_SD.Verarbeitungstyp
		 WHERE Mandant = :MandantOid AND PositionsNr = :PosNr)
	Quit id
]]></Implementation>
</Method>

<Property name="VerarbTyp">
<Type>DBAgrofreshEK.Verarbeitung</Type>
<Cardinality>many</Cardinality>
<Inverse>Verarbeitungstyp</Inverse>
<Relationship>1</Relationship>
</Property>

<Property name="ArtikelVorschlag">
<Type>DBAgrofresh.Artikel</Type>
<Cardinality>many</Cardinality>
<Inverse>VerarbeitungsTyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
</Storage>
</Class>


<Class name="DBAgrofreshEK.SSCCInfo">
<Super>%SerialObject</Super>
<TimeChanged>61822,48725.490524</TimeChanged>
<TimeCreated>61822,33549.057819</TimeCreated>

<Property name="SSCCPart">
<Description>
Fortlaufende Nummer fuer SSCC</Description>
<Type>%Integer</Type>
</Property>

<Property name="AnzahlGebinde">
<Type>%Integer</Type>
</Property>

<Property name="SSCC">
<Description>
Full SSCC</Description>
<Type>%String</Type>
</Property>

<Storage name="Default">
<Type>%Library.CacheSerialState</Type>
<State>SSCCInfoState</State>
<StreamLocation>^DBAgrofreshEK.SSCCInfoS</StreamLocation>
<Data name="SSCCInfoState">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>SSCCPart</Value>
</Value>
<Value name="2">
<Value>AnzahlGebinde</Value>
</Value>
<Value name="3">
<Value>SSCC</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="DBAgrofreshEK.StrgAbzuege">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62423,55039</TimeChanged>
<TimeCreated>61724,65352.048135</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="Steuerung">
<Type>DBAgrofreshEK.BestStrg</Type>
<Cardinality>one</Cardinality>
<Inverse>AbzuegeDatum</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Steuerung"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="SteuerungIndex">
<Properties>Steuerung</Properties>
</Index>

<Property name="AbDatum">
<Type>%Date</Type>
</Property>

<Property name="Abzug1">
<Type>%Decimal</Type>
</Property>

<Property name="Abzug2">
<Type>%Decimal</Type>
</Property>

<Property name="Abzug3">
<Type>%Decimal</Type>
</Property>

<Method name="GetOidByStrgDatum">
<ClassMethod>1</ClassMethod>
<FormalSpec>StrgOid:%String,Datum:%Date</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.StrgAbzuege
	     WHERE  Steuerung = :StrgOid AND AbDatum <= :Datum Order by AbDatum desc)
	Quit id
]]></Implementation>
</Method>

<Method name="PreisPerDatumExists">
<ClassMethod>1</ClassMethod>
<FormalSpec>StrgOid:%String,Datum:%Date</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.StrgAbzuege
	     WHERE  Steuerung = :StrgOid AND AbDatum = :Datum Order by AbDatum desc)
	if (id = "") {
		Quit 0	
	} else {
		Quit 1
	}
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.StrgAbzuegeD</DataLocation>
<DefaultData>StrgAbzuegeDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.StrgAbzuegeD</IdLocation>
<IndexLocation>^DBAgrofreshEK.StrgAbzuegeI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.StrgAbzuegeS</StreamLocation>
<Data name="StrgAbzuegeDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>Steuerung</Value>
</Value>
<Value name="3">
<Value>AbDatum</Value>
</Value>
<Value name="4">
<Value>Abzug1</Value>
</Value>
<Value name="5">
<Value>Abzug2</Value>
</Value>
<Value name="6">
<Value>Abzug3</Value>
</Value>
</Data>
<Property name="%%CLASSNAME">
</Property>
<Property name="AbDatum">
</Property>
<Property name="Abzug1">
</Property>
<Property name="Abzug2">
</Property>
<Property name="Abzug3">
</Property>
<Property name="Steuerung">
</Property>
</Storage>
</Class>


<Class name="DBAgrofreshEK.TypStrg">
<Super>DBAgrofreshEK.BestStrg,%XML.Adaptor</Super>
<TimeChanged>61840,44525.128705</TimeChanged>
<TimeCreated>61408,34255.821501</TimeCreated>
<Inheritance>right</Inheritance>

<Property name="Typ">
<Type>DBAgrofreshEK.SD.StrgBest</Type>
<Cardinality>one</Cardinality>
<Inverse>TypStrgTyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Typ"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="TypIndex">
<Properties>Typ</Properties>
</Index>

<Method name="ExistsBestSteuerung">
<ClassMethod>1</ClassMethod>
<FormalSpec>TypOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.TypStrg
	     WHERE Typ=:TypOid)
	quit (id '= "")
]]></Implementation>
</Method>

<Method name="GetBestSteuerung">
<ClassMethod>1</ClassMethod>
<FormalSpec>TypOid:%String</FormalSpec>
<ReturnType>DBAgrofreshEK.BestStrg</ReturnType>
<Implementation><![CDATA[
	set steuerung = ""
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.TypStrg
	     WHERE Typ=:TypOid)
	if (id '= "") {
		set steuerung = ##Class(DBAgrofreshEK.TypStrg).%OpenId(id)
	} else {
		set steuerung = ##Class(DBAgrofreshEK.TypStrg).%New()
	}
	quit steuerung
]]></Implementation>
</Method>

<Method name="DeleteBestSteuerung">
<ClassMethod>1</ClassMethod>
<FormalSpec>TypOid:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	set status = ""
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.TypStrg
	     WHERE Typ=:TypOid)
	if (id '= "") {
		set status = ##Class(DBAgrofreshEK.BestStrg).%DeleteId(id)
	}
	quit status
]]></Implementation>
</Method>

<Method name="CopyBestSteuerung">
<ClassMethod>1</ClassMethod>
<FormalSpec>SrcTypOid:%String,DstTypOid:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	/// Init
	set status = ""
	set dstAs = ""
	
	/// Source steuerung öffnen
	set SrcId = ""
	&sql(SELECT TOP 1 ID INTO :SrcId FROM DBAgrofreshEK.TypStrg
	     WHERE Typ=:SrcTypOid)
	if (SrcId '= "") {
		set srcAs = ##Class(DBAgrofreshEK.TypStrg).%OpenId(SrcId)
	} else {
		quit 100
	}
		
	/// Ziel steuerung öffnen
	if (##Class(DBAgrofreshEK.TypStrg).ExistsBestSteuerung(DstTypOid)) {
		set DstId = ""
		&sql(SELECT TOP 1 ID INTO :DstId FROM DBAgrofreshEK.TypStrg
	  	   WHERE Typ=:DstTypOid)
		set dstAs = ##Class(DBAgrofreshEK.TypStrg).%OpenId(DstId)
	} else {
		set dstAs = ##Class(DBAgrofreshEK.TypStrg).%New()
	}
	
	/// kopieren und Typ zuweisen
	set dstAs = srcAs.%ConstructClone(0)
	set typ = ##Class(DBAgrofreshEK.SD.StrgBest).%OpenId(DstTypOid)
	
	/// Bereinigen und zurück 
	set dstAs.Typ = typ
	set status = dstAs.%Save()
	kill dstAs, typ, srcTyp
	quit status
]]></Implementation>
</Method>

<Method name="FirstTypIdByTyp">
<ClassMethod>1</ClassMethod>
<FormalSpec>MandOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 Typ INTO :id FROM DBAgrofreshEK.TypStrg
	     WHERE Mandant=:MandOid AND Typ->PositionsNr>0 ORDER BY Typ->PositionsNr)
	quit id
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DefaultData>TypStrgDefaultData</DefaultData>
<Data name="TypStrgDefaultData">
<Structure>listnode</Structure>
<Subscript>"TypStrg"</Subscript>
<Value name="1">
<Value>Typ</Value>
</Value>
</Data>
</Storage>
</Class>


<Class name="DBAgrofreshEK.VerarbAuftrag">
<Super>%Persistent,%XML.Adaptor,DBCore.MandantRel</Super>
<TimeChanged>62416,57260.433335</TimeChanged>
<TimeCreated>61599,34184.344759</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<UDLText name="T">
<Content><![CDATA[
//AuftragsNr wird direkt hier in der DB generiert

]]></Content>
</UDLText>

<Property name="AuftragsNr">
<Type>%Integer</Type>
</Property>

<Property name="Mandant">
<Type>%String</Type>
</Property>

<ForeignKey name="FKMandant">
<Properties>Mandant</Properties>
<ReferencedClass>DBCore.Mandant</ReferencedClass>
<ReferencedKey>MandIdIndex</ReferencedKey>
</ForeignKey>

<Index name="MandantIdx">
<Properties>Mandant</Properties>
</Index>

<Property name="Chargen">
<Type>DBAgrofreshEK.ChargenEingang</Type>
<Cardinality>many</Cardinality>
<Inverse>VerarbeitungsAuftrag</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Index name="NrMandIdx">
<Properties>AuftragsNr,Mandant</Properties>
<Unique>1</Unique>
</Index>

<Property name="VerarbProv">
<Type>DBAgrofreshEK.VerarbProv</Type>
<Cardinality>many</Cardinality>
<Inverse>VerarbAuftrag</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="VerarbAufwand">
<Type>DBAgrofreshEK.VerarbAufwand</Type>
<Cardinality>many</Cardinality>
<Inverse>VerarbAuftrag</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLPROJECTION" value="NONE"/>
</Property>

<Property name="Kunde">
<Type>DBDebiKredi.Debitor</Type>
<Cardinality>one</Cardinality>
<Inverse>VerarbAuftrag</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Kunde"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="KundeIndex">
<Properties>Kunde</Properties>
</Index>

<Property name="Lieferzeit">
<Type>%Time</Type>
</Property>

<Property name="Ruestlinie">
<Type>DBAgrofresh.SD.Ruestlinie</Type>
<Cardinality>one</Cardinality>
<Inverse>AuftragRuestlinie</Inverse>
<Relationship>1</Relationship>
</Property>

<Index name="RuestlinieIndex">
<Properties>Ruestlinie</Properties>
</Index>

<Property name="PrduktionsscheinGedruckt">
<Type>%Boolean</Type>
</Property>

<Property name="Lieferdatum">
<Type>%Date</Type>
</Property>

<Property name="Definitiv">
<Type>%Boolean</Type>
</Property>

<Property name="AnzahlGebinde">
<Type>%Integer</Type>
</Property>

<Property name="Verarbeiter">
<Type>DBAdressen.Adresse</Type>
<Cardinality>one</Cardinality>
<Inverse>VerarbAuftrag</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Verarbeiter"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Property name="Menge">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="VerlustAnzGeb">
<Type>%Integer</Type>
</Property>

<Property name="VerlustMenge">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Charge">
<Description>
Originale Charge aus welcher die Verarbeitung entstand</Description>
<Type>%String</Type>
</Property>

<ForeignKey name="FKCharge">
<Description>
Fremdschlüssel zur originalen Charge</Description>
<Properties>Charge</Properties>
<ReferencedClass>DBAgrofreshEK.ChargenEingang</ReferencedClass>
<ReferencedKey>ChargenIdIndex</ReferencedKey>
</ForeignKey>

<Index name="ChargeIdx">
<Properties>Charge</Properties>
</Index>

<Index name="ChargeDatumIdx">
<Properties>Charge,Lieferdatum</Properties>
</Index>

<Index name="ChargeMengeIdx">
<Properties>Charge,Menge</Properties>
</Index>

<Index name="ChargeAnzGebIdx">
<Properties>Charge,AnzahlGebinde</Properties>
</Index>

<Method name="SetAuftragsNr">
<ClassMethod>1</ClassMethod>
<FormalSpec><![CDATA[&Ctr:%RegisteredObject,MandantOid:%String]]></FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set newAuftrNr = 0
	&sql(SELECT NVL(Max(AuftragsNr),0) INTO :newAuftrNr FROM DBAgrofreshEK.VerarbAuftrag	
			WHERE Mandant = :MandantOid)
	set Ctr = newAuftrNr + 1
	Quit Ctr
]]></Implementation>
</Method>

<Trigger name="InsertBeforeNewData">
<Code>	set nr = {AuftragsNr*N}
	if ({AuftragsNr*N} '= ##class(DBAgrofreshEK.VerarbAuftrag).SetAuftragsNr(.nr, {Mandant*N})) {
		set {AuftragsNr*N} = nr
	}</Code>
<Event>INSERT</Event>
</Trigger>

<Method name="DeleteAuftrag">
<ClassMethod>1</ClassMethod>
<FormalSpec>AuftragOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set isKalibrierung = 0
	&sql(SELECT TOP 1 NVL(AusKalibrierung,0) into :isKalibrierung FROM DBAgrofreshEK.ChargenEingang WHERE VerarbeitungsAuftrag = :AuftragOid)
	if (SQLCODE '= 0) {
		set isKalibrierung = 0
	}
	// Aufwand
	&sql(DELETE FROM DBAgrofreshEK.VerarbAufwand WHERE VerarbAuftrag = :AuftragOid)
	// Prov Verarbeitungen
	&sql(DELETE FROM DBAgrofreshEK.VerarbProv WHERE VerarbAuftrag = :AuftragOid)
	// Wenn aus Kalibrierung können direkt die Bestellpositionen gelöscht werden 
	// und erst danach noch die Chargen falls es noch gibt.
	//w "isKalibrierung = ", isKalibrierung, !
	if (isKalibrierung = 1) {
		//w "löschen der Bestellpositionen von Auftrag ",AuftragOid, !
		//löschen der Bestellpositionen
		Set strSQL="SELECT ID, Bestellungskopf From DBAgrofreshEK.Bestellungspos WHERE Charge->VerarbeitungsAuftrag = "_AuftragOid
	    Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	    Do rs.Prepare(strSQL)
	    Set sc=rs.Execute()
		While (rs.Next()) {
			Set posOid = rs.Data("ID")
			Set kopfId = rs.Data("Bestellungskopf")
			//w "lösche Position ", posOid, !
			Set ^BestDetStopTrg(kopfId) = 1
			if ((posOid '= "") && (posOid '= $c(0))) {
				d ##class(DBAgrofreshEK.Bestellungspos).%DeleteId(posOid)
			}
			d ##class(DBAgrofreshEK.Bestellungspos).ResetStopTriger(kopfId)
		}
		// Bestellungspositionen
		//&sql(DELETE FROM DBAgrofreshEK.Bestellungspos WHERE Charge->VerarbeitungsAuftrag = :AuftragOid)
		//w "SQLCODE: ", SQLCODE, !
	}
	// Chargen
	//&sql(DELETE FROM DBAgrofreshEK.ChargenEingang WHERE VerarbeitungsAuftrag = :AuftragOid)
	Set strSQL="SELECT ID FROM DBAgrofreshEK.ChargenEingang WHERE VerarbeitungsAuftrag = "_AuftragOid
    Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
    Do rs.Prepare(strSQL)
    Set sc=rs.Execute()
	While (rs.Next()) {
		Set ceId = rs.Data("ID")
		if ((ceId '= "") && (ceId '= $c(0))) {
			d ##class(DBAgrofreshEK.ChargenEingang).%DeleteId(ceId)
		}
	}
	
	// AuftragSelbst
	//&sql(DELETE FROM DBAgrofreshEK.VerarbAuftrag WHERE ID = :AuftragOid)
	do ##class(DBAgrofreshEK.VerarbAuftrag).%DeleteId(AuftragOid)
	
	Quit SQLCODE=0
]]></Implementation>
</Method>

<Method name="DeleteAuftraegeByOrigCharge">
<ClassMethod>1</ClassMethod>
<FormalSpec>ChargenOid:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	// Aufträge abfragen
	Set rset = ##class(%ResultSet).%New("DBAgrofreshEK.AF.VerarbAuftragAF.ListeVerarbAuftrNachCharge")
	Do rset.Execute(ChargenOid)
	While (rset.Next()) {
		// Jeden Auftrag einzeln löschen
		do ##class(DBAgrofreshEK.VerarbAuftrag).DeleteAuftrag(rset.Data("ID"))
	}
	// Charge öffnen und für verarbeitung sperren
	set charge = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(ChargenOid)
	set charge.MengeVerarbeitung = 0
	set charge.VerarbeitungAktiv = 0
	set charge.AnzahlGebindeVerarbeitung = 0
	set charge.Kalibrierung = 0
	set charge.Verlust = 0
	set st = charge.%Save()
	
	Quit 1
]]></Implementation>
</Method>

<Method name="GetOrigMengeByAuftrag">
<ClassMethod>1</ClassMethod>
<FormalSpec>AuftragOid:%String,nurDef:%Boolean=0</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set menge = 0
	if (nurDef = 1) {
		&sql(SELECT SUM(CASE NVL(RetourenPos,0) WHEN 0 THEN NVL(MengeEingangKg,0) ELSE NVL(MengeEingangKg,0) * (-1) END)  into :menge
			FROM DBAgrofreshEK.ChargenEingang 
			WHERE VerarbeitungsAuftrag = :AuftragOid)
	} else {
		&sql(SELECT SUM(MengeEingang) into :menge FROM (
		SELECT 	CASE NVL(RetourenPos,0) WHEN 0 THEN MengeEingangKg ELSE MengeEingangKg * (-1) END AS MengeEingang
		FROM DBAgrofreshEK.ChargenEingang 
		WHERE VerarbeitungsAuftrag = :AuftragOid
	
		UNION ALL
	
		SELECT 	MengeEingangKg AS MengeEingang
		FROM DBAgrofreshEK.VerarbProv
		WHERE VerarbAuftrag = :AuftragOid))
	}
	Quit:(SQLCODE'=0) 0
	quit menge
]]></Implementation>
</Method>

<Method name="GetMengeByAuftrag">
<ClassMethod>1</ClassMethod>
<FormalSpec>AuftragOid:%String,nurDef:%Boolean=0</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set geb = ##class(DBAgrofreshEK.VerarbAuftrag).CalcAnzahlGebByAuftrag(AuftragOid, nurDef)
	set mengeJeGeb = 1
	&sql(SELECT MengeJeGebinde into :mengeJeGeb FROM DBAgrofreshEK.ChargenEingang WHERE ID = (SELECT Charge FROM DBAgrofreshEK.VerarbAuftrag WHERE ID = :AuftragOid))
	if ((SQLCODE'=0) || (mengeJeGeb = 0)) {
		set mengeJeGeb = 1
	}
	quit ##class(DBUtils.NumberUtils).Round(geb * mengeJeGeb, 2)
]]></Implementation>
</Method>

<Method name="GetMengeByCharge">
<ClassMethod>1</ClassMethod>
<FormalSpec>ChargeOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set menge = 0
	&sql(SELECT SUM(MengeEingang) into :menge FROM (
	SELECT 	CASE NVL(RetourenPos,0) WHEN 0 THEN MengeEingangKg ELSE MengeEingangKg * (-1) END AS MengeEingang
	FROM DBAgrofreshEK.ChargenEingang 
	WHERE VerarbeitungsAuftrag->Charge = :ChargeOid
	
	UNION ALL
	
	SELECT 	MengeEingangKg AS MengeEingang
	FROM DBAgrofreshEK.VerarbProv
	WHERE VerarbAuftrag->Charge = :ChargeOid))
	Quit:(SQLCODE'=0) 0
	quit menge
]]></Implementation>
</Method>

<Method name="GetPostenNrByAuftrag">
<ClassMethod>1</ClassMethod>
<FormalSpec>AuftragOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ##class(DBAgrofreshEK.VerarbAuftrag).GetOrigChargenOidByAuftrag(AuftragOid)
	set nr = ""
	&sql(SELECT PositionsNr into :nr FROM DBAgrofreshEK.ChargenEingang WHERE ID = :id)
	Quit:(SQLCODE'=0) ""
	quit nr
]]></Implementation>
</Method>

<Method name="GetOrigChargenOidByAuftrag">
<ClassMethod>1</ClassMethod>
<FormalSpec>AuftragOid:%String</FormalSpec>
<ReturnType>%String</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT Charge into :id FROM DBAgrofreshEK.VerarbAuftrag WHERE ID = :AuftragOid)
	Quit:(SQLCODE'=0) ""
	quit id
]]></Implementation>
</Method>

<Method name="CalcAnzahlGebByAuftrag">
<ClassMethod>1</ClassMethod>
<FormalSpec>AuftragOid:%String,nurDef:%Boolean=0</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set menge = ##class(DBAgrofreshEK.VerarbAuftrag).GetOrigMengeByAuftrag(AuftragOid, nurDef)
	set anzJeGeb = 0
	set origCharge = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(##class(DBAgrofreshEK.VerarbAuftrag).GetOrigChargenOidByAuftrag(AuftragOid))
	if ((origCharge '= "") && (origCharge '= $c(0))) {
		set anzJeGeb = origCharge.MengeJeGebinde
	}
	if (+anzJeGeb <= 0) {
		set anzJeGeb = 1
	}
	set anzGeb = menge / anzJeGeb
	if ((menge # anzJeGeb) '= 0) {
		set anzGeb = anzGeb -(anzGeb # 1) + 1
		//set anzGeb = anzGeb +1
	}
	Quit anzGeb
]]></Implementation>
</Method>

<Method name="CalcSaveAnzGebMengeByAuftrag">
<ClassMethod>1</ClassMethod>
<FormalSpec>AuftragOid:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<SqlProc>1</SqlProc>
<Implementation><![CDATA[
	set verarbAuftrag = ##class(DBAgrofreshEK.VerarbAuftrag).%OpenId(AuftragOid)
	set chargenOid = verarbAuftrag.Charge
	set origCharge = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(chargenOid)
	set mengeAuftrag = ##class(DBAgrofreshEK.VerarbAuftrag).GetMengeByAuftrag(AuftragOid)
	//set mengeCharge = ##class(DBAgrofreshEK.VerarbAuftrag).GetMengeByCharge(chargenOid)
	
	set anzJeGeb = 0
	set mengeFreigegeben = 0
	if ((origCharge '= "") && (origCharge '= $c(0))) {
		//set mengeFreigegeben = origCharge.MengeVerarbeitung
		set anzJeGeb = origCharge.MengeJeGebinde
		if ((origCharge.VerlustAnzGebindeGesamt = $$$NULLOREF) || (origCharge.VerlustAnzGebindeGesamt = 0)) {
			set verarbAuftrag.VerlustAnzGeb = origCharge.AnzahlGebindeVerlust
		}
		if ((origCharge.VerlustMengeGesamt = $$$NULLOREF) || (origCharge.VerlustMengeGesamt = 0)) {
			set verarbAuftrag.VerlustMenge = origCharge.Verlust
		}
		set mengeAuftrag = +mengeAuftrag + +verarbAuftrag.VerlustMenge
		//set mengeCharge = +mengeCharge + +verarbAuftrag.VerlustMenge
	}
	if (+anzJeGeb <= 0) {
		set anzJeGeb = 1
	}
	// prüfen ob mehr verarbeitet als eingegangen, dann herunterrechnen
	/*if ((mengeCharge > mengeFreigegeben) && (mengeCharge '= 0)) {
		set faktor = mengeFreigegeben / mengeCharge
		set mengeAuftrag = ##class(DBUtils.NumberUtils).Round(mengeAuftrag * faktor, 0)
	}*/
	
	// Anzahl Gebinde berechnen und speichern falls noch nicht vorhanden
	set anzGeb = mengeAuftrag / anzJeGeb
	if ((mengeAuftrag # anzJeGeb) '= 0) {
		set anzGeb = anzGeb -(anzGeb # 1) + 1
		//set anzGeb = anzGeb +1
	}	
	set verarbAuftrag.AnzahlGebinde = anzGeb
	set verarbAuftrag.Menge = mengeAuftrag
	
	d verarbAuftrag.%Save()

	Quit anzGeb
]]></Implementation>
</Method>

<Method name="AddAuftrForGebDifferenzen">
<ClassMethod>1</ClassMethod>
<Implementation><![CDATA[
	//set strSQL = "SELECT ID, Mandant, Eingangsdatum, Verlust FROM DBAgrofreshEK.ChargenEingang ce WHERE MengeVerarbeitung = Verlust AND NVL(MengeVerarbeitung,0) <> 0 AND NVL((SELECT COUNT(ID) FROM DBAgrofreshEK.VerarbAuftrag WHERE Charge = ce.ID),0) = 0"
	set strSQL = "SELECT ID FROM DBAgrofreshEK.ChargenEingang WHERE NVL(AnzahlGebDefVerarbeitet,0) <> NVL(AnzahlGebindeVerarbeitung,0) AND NVL(AnzahlGebindeVerarbeitung,0) <> 0 AND NVL(VerarbeitungAktiv,0) = 0 AND PositionsNr < 20000"
	Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
    Do rs.Prepare(strSQL)
    Set sc=rs.Execute()
    while (rs.Next()) {
	    set auftr = ##class(DBAgrofreshEK.VerarbAuftrag).%New()
	    set auftr.Charge = rs.Data("ID")
	    set charge = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(auftr.Charge)
	    set auftr.Lieferdatum = charge.EingangsDatum
	    set auftr.Mandant = charge.Mandant
	    set auftr.AnzahlGebinde = charge.AnzahlGebindeVerarbeitung - charge.AnzahlGebDefVerarbeitet
	    set auftr.VerlustAnzGeb = auftr.AnzahlGebinde
	    set auftr.Definitiv = 1
	    d auftr.%Save()
	    k auftr
	    k charge
    }
]]></Implementation>
</Method>

<Method name="RecalcMengeByAuftrag">
<ClassMethod>1</ClassMethod>
<FormalSpec>Id:%String</FormalSpec>
<ReturnType>%Status</ReturnType>
<Implementation><![CDATA[
	if (+##class(DBAgrofreshEK.VerarbAuftrag).GetStoppAutoRecalc(Id) = 0) {
		set auftr = ##class(DBAgrofreshEK.VerarbAuftrag).%OpenId(Id)
		if (auftr '= $$$NULLOREF) {
			set auftr.Menge = ##class(DBAgrofreshEK.VerarbAuftrag).GetMengeByAuftrag(Id, 1) + +auftr.VerlustMenge
			set auftr.AnzahlGebinde = ##class(DBAgrofreshEK.VerarbAuftrag).CalcAnzahlGebByAuftrag(Id, 1) + +auftr.VerlustAnzGeb
			quit auftr.%Save()
		}
	}
]]></Implementation>
</Method>

<Method name="SetStoppAutoRecalc">
<ClassMethod>1</ClassMethod>
<FormalSpec>Id:%String,stopp:%Boolean</FormalSpec>
<Implementation><![CDATA[
	if (stopp = 1) {
		set ^VerarbAuftragStoppRecalc(Id) = 1
	} else {
		kill ^VerarbAuftragStoppRecalc(Id)
	}
]]></Implementation>
</Method>

<Method name="GetStoppAutoRecalc">
<ClassMethod>1</ClassMethod>
<FormalSpec>Id:%String</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[	quit +$Get(^VerarbAuftragStoppRecalc(Id))
]]></Implementation>
</Method>

<Method name="%OnBeforeSave">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Save</METHOD> method to 
provide notification that the object is being saved. It is called before 
any data is written to disk.

<P><VAR>insert</VAR> will be set to 1 if this object is being saved for the first time.

<P>If this method returns an error then the call to <METHOD>%Save</METHOD> will fail.]]></Description>
<FormalSpec>insert:%Boolean</FormalSpec>
<Private>1</Private>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	if (insert) {
		set nr = +..AuftragsNr
		if (..AuftragsNr '= ..SetAuftragsNr(.nr, ..Mandant)) {
			set ..AuftragsNr = +nr
		}
	}
	// brauchs auch zum Verarbeitungsauftrag neu rechnen falls menge gewechselt.
	if (insert = 0) {
		set id = ..%Id()
		k ^CEOldVerArbAuftrValues(id)
		set anzahlGeb = 0
		set menge = 0
		set dev = 0
		
		&SQL(SELECT AnzahlGebinde, Menge, Definitiv into :anzahlGeb, :menge, :dev FROM DBAgrofreshEK.VerarbAuftrag WHERE ID = :id)
		if (SQLCODE '= 0) {
			set anzahlGeb = 0
			set menge = 0
			set dev = 0
		}
		if (dev = 1) {
			// Werte für wenn Stornierung neu berrechnen
			Set ^CEOldVerArbAuftrValues(id, 1) = anzahlGeb
			Set ^CEOldVerArbAuftrValues(id, 2) = menge
		}
	}
	Quit $$$OK
]]></Implementation>
</Method>

<Method name="AddMengeToVerarbeitung">
<ClassMethod>1</ClassMethod>
<FormalSpec>ChargenOid:%String,AnzahlGebinde:%Integer,Menge:%Decimal,Storno:%Boolean</FormalSpec>
<Implementation><![CDATA[
	if ((ChargenOid '= "") && (ChargenOid '= $c(0))) {
		//w "VerarbeitungsAuftrag AddMengeToVerarbeitung: ", ChargenOid, " Anz: ", AnzahlGebinde, " Menge: ", Menge, " Storno: ", Storno, !
		set orig = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(ChargenOid)
		if ((orig '= "" ) && (orig '= $c(0))) {
			set faktor = 1
			if (Storno = 1) {
				set faktor = -1
			}
			Set ^StoppTriggerChargenEingang(orig.%Id()) = 1
			set orig.MengeDefVerarbeitet = orig.MengeDefVerarbeitet + (faktor * Menge)
			set orig.AnzahlGebDefVerarbeitet = orig.AnzahlGebDefVerarbeitet + (faktor * AnzahlGebinde)
			d orig.%Save()
			Kill ^StoppTriggerChargenEingang(orig.%Id())
		}
	}
]]></Implementation>
</Method>

<Method name="%OnAfterSave">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Save</METHOD> method to 
provide notification that the object is being saved. It is called after 
the object's data has been successfully written to disk.

<P><VAR>insert</VAR> will be set to 1 if this object is being saved for the first time.

<P>If this method returns an error then the call to <METHOD>%Save</METHOD> will fail.]]></Description>
<FormalSpec>insert:%Boolean</FormalSpec>
<Private>1</Private>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	// Prüfung verarbeitung auf Originalcharge
	if ((..Charge '= $c(0)) && (..Charge '= "")) {
		set OriginalCharge = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(..Charge)
		if ((OriginalCharge '= "") && (OriginalCharge '= $c(0))) {
			if ((OriginalCharge.VerarbeitungAktiv = 1) && ($Get(^StoppTriggerChargenEingang(OriginalCharge.%Id())) '= 1)) {
				//w "Menge OriginalCharge Verarbeitung Verfügbar", OriginalCharge.MengeVerarbeitungVerfuegbar, !
				if (+OriginalCharge.MengeVerarbeitungVerfuegbar = 0) {
					Set ^StoppTriggerChargenEingang(OriginalCharge.%Id()) = 1
					set OriginalCharge.VerarbeitungAktiv = 0
					d OriginalCharge.%Save()
					Kill ^StoppTriggerChargenEingang(OriginalCharge.%Id())
				}
			}
		}
	}
	set id = ..%Id()
	//w "Trigger on After Save", " Definitiv: ", ..Definitiv, " Insert: " , insert, !
	if ((..Definitiv = 1) && (..Charge '= $c(0)) && (..Charge '= "")) {
		// Alte Menge Stornieren wenn aus edit
		if (insert = 0) {
			Set anzahlGeb = $Get(^CEOldVerArbAuftrValues(id, 1))
			Set menge = $Get(^CEOldVerArbAuftrValues(id, 2))
		
			if ((+anzahlGeb '= 0) ||(+menge '= 0)) {
				d ##class(DBAgrofreshEK.VerarbAuftrag).AddMengeToVerarbeitung(..Charge, anzahlGeb, menge, 1)
			}
		}
		// Neue Menge wieder gutschreiben
		d ##class(DBAgrofreshEK.VerarbAuftrag).AddMengeToVerarbeitung(..Charge, ..AnzahlGebinde, ..Menge, 0)
		
		k ^CEOldVerArbAuftrValues(id)
	}
	Quit $$$OK
]]></Implementation>
</Method>

<Method name="%OnDelete">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Delete</METHOD> method to 
provide notification that the object specified by <VAR>oid</VAR> has been deleted.
The callback occurs immediately after %DeleteData has been called. If %DeleteData returns
an error then %OnAfterDelete is not called.

<P>If %OnAfterDelete returns an error (%Status) then the transaction is rolled back.
[Previously private]]]></Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%ObjectIdentity</FormalSpec>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	//w "START On DELETE VerArbAuftrag",!
	set auftrId = $lg(oid,1)	
	set charge = ""
	set menge = 0
	set anzGebinde = 0
	set definitiv = 0
	&sql(SELECT Charge, Menge, AnzahlGebinde, Definitiv into :charge, :menge, :anzGebinde, :definitiv FROM DBAgrofreshEK.VerarbAuftrag WHERE ID = :auftrId)
	if ((SQLCODE = 0) && (charge '= $c(0)) && (charge '= "")) {
		// Prüfung verarbeitung auf Originalcharge
		set OriginalCharge = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(charge)
		if ((OriginalCharge '= "") && (OriginalCharge '= $c(0))) {
			if ((OriginalCharge.VerarbeitungAktiv = 1)  && ($Get(^StoppTriggerChargenEingang(OriginalCharge.%Id())) '= 1)) {
				//w "Menge OriginalCharge Verarbeitung Verfügbar", OriginalCharge.MengeVerarbeitungVerfuegbar, !
				if (+(+OriginalCharge.MengeVerarbeitungVerfuegbar + +menge) = 0) {
					Set ^StoppTriggerChargenEingang(OriginalCharge.%Id()) = 1
					set OriginalCharge.VerarbeitungAktiv = 0
					d OriginalCharge.%Save()
					Kill ^StoppTriggerChargenEingang(OriginalCharge.%Id())
				}
			} elseif ((+OriginalCharge.VerarbeitungAktiv '= 1) && ($Get(^StoppTriggerChargenEingang(OriginalCharge.%Id())) '= 1)) {
				if (+(+OriginalCharge.MengeVerarbeitungVerfuegbar + +menge) '= 0) {
					Set ^StoppTriggerChargenEingang(OriginalCharge.%Id()) = 1
					set OriginalCharge.VerarbeitungAktiv = 1
					d OriginalCharge.%Save()
					Kill ^StoppTriggerChargenEingang(OriginalCharge.%Id())
				}
			}
		}
		// Definitv verarbeitete Ware abziehen
		if ((definitiv = 1) && ((+anzGebinde '= 0) ||(+menge '= 0))) {
			d ##class(DBAgrofreshEK.VerarbAuftrag).AddMengeToVerarbeitung(charge, anzGebinde, menge, 1)
		}
		
	}
	//w "Ende On DELETE VerArbAuftrag",!
	Quit $$$OK
]]></Implementation>
</Method>

<Method name="UpdateDatumAufAuftragsChargen">
<Description>
Führt auf den Chargen des Auftrages das Eingangsdatum anhand des Lieferdatums des Auftrages nach</Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>AuftragOid:%String</FormalSpec>
<Implementation><![CDATA[
	if ((AuftragOid '= "") && (AuftragOid '= $c(0))) {
		set auftrag = ##class(DBAgrofreshEK.VerarbAuftrag).%OpenId(AuftragOid)
		set strSQL = "SELECT ID FROM DBAgrofreshEK.ChargenEingang WHERE VerarbeitungsAuftrag = "_AuftragOid
		Set rs = ##class(%Library.ResultSet).%New("%DynamicQuery:SQL")
	    Do rs.Prepare(strSQL)
	    Set sc=rs.Execute()
	    while (rs.Next()) {
			set charge = ##class(DBAgrofreshEK.ChargenEingang).%OpenId(rs.Data("ID"))
			if ((charge '= "" ) && (charge '= $c(0))) {
				Set ^StoppTriggerChargenEingang(charge.%Id()) = 1
				set charge.EingangsDatum = auftrag.Lieferdatum
				d charge.%Save()
				Kill ^StoppTriggerChargenEingang(charge.%Id())
				k charge
			}
		}
		k auftrag
	}
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.VerarbAuftragD</DataLocation>
<DefaultData>VerarbAuftragDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.VerarbAuftragD</IdLocation>
<IndexLocation>^DBAgrofreshEK.VerarbAuftragI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.VerarbAuftragS</StreamLocation>
<Data name="VerarbAuftragDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>AuftragsNr</Value>
</Value>
<Value name="3">
<Value>Mandant</Value>
</Value>
<Value name="4">
<Value>pAuftragsNr</Value>
</Value>
<Value name="5">
<Value>Kunde</Value>
</Value>
<Value name="6">
<Value>Lieferzeit</Value>
</Value>
<Value name="7">
<Value>Ruestlinie</Value>
</Value>
<Value name="8">
<Value>PrduktionsscheinGedruckt</Value>
</Value>
<Value name="9">
<Value>Lieferdatum</Value>
</Value>
<Value name="10">
<Value>PostenNr</Value>
</Value>
<Value name="11">
<Value>Verarbeiter</Value>
</Value>
<Value name="12">
<Value>Definitiv</Value>
</Value>
<Value name="13">
<Value>AnzahlGebinde</Value>
</Value>
<Value name="14">
<Value>Menge</Value>
</Value>
<Value name="15">
<Value>VerlustAnzGeb</Value>
</Value>
<Value name="16">
<Value>VerlustMenge</Value>
</Value>
<Value name="17">
<Value>Charge</Value>
</Value>
</Data>
<Property name="AnzahlGebinde"/>
<Property name="AuftragsNr"/>
<Property name="Charge"/>
<Property name="Definitiv"/>
<Property name="Kunde"/>
<Property name="Lieferdatum"/>
<Property name="Lieferzeit"/>
<Property name="Mandant"/>
<Property name="Menge"/>
<Property name="PostenNr"/>
<Property name="PrduktionsscheinGedruckt"/>
<Property name="Ruestlinie"/>
<Property name="Verarbeiter"/>
<Property name="VerlustAnzGeb"/>
<Property name="VerlustMenge"/>
</Storage>
</Class>


<Class name="DBAgrofreshEK.VerarbAufwand">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62416,57212.536681</TimeChanged>
<TimeCreated>61606,40014.531865</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="OriginalCharge">
<Type>DBAgrofreshEK.ChargenEingang</Type>
<Cardinality>one</Cardinality>
<Inverse>VerarbAufwandOriginalCharge</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="OriginalCharge"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="OriginalChargeIndex">
<Properties>OriginalCharge</Properties>
</Index>

<Property name="VerarbAuftrag">
<Type>DBAgrofreshEK.VerarbAuftrag</Type>
<Cardinality>one</Cardinality>
<Inverse>VerarbAufwand</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="VerarbAuftrag"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="VerarbAuftragIndex">
<Properties>VerarbAuftrag</Properties>
</Index>

<Property name="Artikel">
<Type>DBAgrofresh.Artikel</Type>
<Cardinality>one</Cardinality>
<Inverse>VerarbAufwand</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Artikel"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ArtikelIndex">
<Properties>Artikel</Properties>
</Index>

<Property name="Bemerkung">
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Menge">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Bezugsart">
<Type>%Integer</Type>
</Property>

<Property name="Ansatz">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Betrag">
<Type>%Decimal</Type>
<Calculated>1</Calculated>
<SqlComputeCode> Set {Betrag}=##class(DBAgrofreshEK.VerarbAufwand).GetBetragClass({ID}) </SqlComputeCode>
<SqlComputed>1</SqlComputed>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="AnzahlMitarbeiter">
<Type>%Integer</Type>
</Property>

<Method name="GetBetragClass">
<ClassMethod>1</ClassMethod>
<FormalSpec>verarbAufwandOid:%String</FormalSpec>
<ReturnType>%Decimal</ReturnType>
<ReturnTypeParams>SCALE=5</ReturnTypeParams>
<Implementation><![CDATA[
	set betrag = 0
	set mitarbeiter = 1
	
	set obj = ##class(DBAgrofreshEK.VerarbAufwand).%OpenId(verarbAufwandOid)
	if (obj '= "") {
		if (+obj.AnzahlMitarbeiter > 0) {
			set mitarbeiter = +obj.AnzahlMitarbeiter
		}
		set betrag = mitarbeiter * obj.Menge * obj.Ansatz	
		kill obj
	}
	Quit betrag
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.VerarbAufwandD</DataLocation>
<DefaultData>VerarbAufwandDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.VerarbAufwandD</IdLocation>
<IndexLocation>^DBAgrofreshEK.VerarbAufwandI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.VerarbAufwandS</StreamLocation>
<Data name="VerarbAufwandDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>OriginalCharge</Value>
</Value>
<Value name="3">
<Value>VerarbAuftrag</Value>
</Value>
<Value name="4">
<Value>Artikel</Value>
</Value>
<Value name="5">
<Value>Bemerkung</Value>
</Value>
<Value name="6">
<Value>Menge</Value>
</Value>
<Value name="7">
<Value>Bezugsart</Value>
</Value>
<Value name="8">
<Value>Ansatz</Value>
</Value>
<Value name="9">
<Value>Lieferzeit</Value>
</Value>
<Value name="10">
<Value>PrduktionsscheinGedruckt</Value>
</Value>
<Value name="11">
<Value>AnzahlMitarbeiter</Value>
</Value>
</Data>
<Property name="Ansatz"/>
<Property name="AnzahlMitarbeiter"/>
<Property name="Artikel"/>
<Property name="Bemerkung"/>
<Property name="Betrag"/>
<Property name="Bezugsart"/>
<Property name="Menge"/>
<Property name="OriginalCharge"/>
<Property name="VerarbAuftrag"/>
</Storage>
</Class>


<Class name="DBAgrofreshEK.VerarbProv">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62416,57212.712544</TimeChanged>
<TimeCreated>61604,32447.494861</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="VerarbAuftrag">
<Type>DBAgrofreshEK.VerarbAuftrag</Type>
<Cardinality>one</Cardinality>
<Inverse>VerarbProv</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="VerarbAuftrag"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="VerarbAuftragIndex">
<Properties>VerarbAuftrag</Properties>
</Index>

<Property name="Artikel">
<Type>DBAgrofresh.Artikel</Type>
<Cardinality>one</Cardinality>
<Inverse>VerarbProv</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Artikel"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ArtikelIndex">
<Properties>Artikel</Properties>
</Index>

<Property name="Qualitaet">
<Type>DBAgrofresh.SD.Qualitaetsklasse</Type>
<Cardinality>one</Cardinality>
<Inverse>VerarbProv</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Qualitaet"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="QualitaetIndex">
<Properties>Qualitaet</Properties>
</Index>

<Property name="AnzahlGebinde">
<Type>%Integer</Type>
</Property>

<Property name="Gebinde">
<Type>DBAgrofresh.SD.Gebinde</Type>
<Cardinality>one</Cardinality>
<Inverse>VerarbProv</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Gebinde"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="GebindeIndex">
<Properties>Gebinde</Properties>
</Index>

<Property name="MengeJeGebinde">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Einzelgewicht">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="MengeEingang">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="MengeEingangKg">
<Type>%Decimal</Type>
<Parameter name="SCALE" value="5"/>
</Property>

<Property name="Bemerkung">
<Type>%String</Type>
<Parameter name="MAXLEN" value="255"/>
<Parameter name="TRUNCATE" value="1"/>
</Property>

<Property name="Abzugstyp">
<Type>DBAgrofresh.SD.Abzugstyp</Type>
<Cardinality>one</Cardinality>
<Inverse>VerarbProv</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Abzugstyp"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="AbzugstypIndex">
<Properties>Abzugstyp</Properties>
</Index>

<Property name="Herkunft">
<Type>DBAgrofresh.SD.Herkunft</Type>
<Cardinality>one</Cardinality>
<Inverse>VerarbProv</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Herkunft"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="HerkunftIndex">
<Properties>Herkunft</Properties>
</Index>

<Property name="Produktionsart">
<Type>DBAgrofresh.SD.Produktionsart</Type>
<Cardinality>one</Cardinality>
<Inverse>VerarbProv</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Produktionsart"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ProdartIndex">
<Properties>Produktionsart</Properties>
</Index>

<Method name="%OnAfterDelete">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Delete</METHOD> method to 
provide notification that the object specified by <VAR>oid</VAR> has been deleted.
The callback occurs immediately after %DeleteData has been called. If %DeleteData returns
an error then %OnAfterDelete is not called.

<P>If %OnAfterDelete returns an error (%Status) then the transaction is rolled back.
[Previously private]]]></Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%ObjectIdentity</FormalSpec>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	set myId = $lg(oid,1)	
	// stellt unter umständen schon gelöschte Positionen wieder her
	//do ##class(DBAgrofreshEK.VerarbProv).TryDeleteAuftrag(myId)
	
	Quit $$$OK
]]></Implementation>
</Method>

<Trigger name="trgAfterDelete">
<Code>	new myId
	set myId = {ID}
	//do ##class(DBAgrofreshEK.VerarbProv).TryDeleteAuftrag(myId)</Code>
<Event>DELETE</Event>
<Time>AFTER</Time>
</Trigger>

<Method name="%OnDelete">
<Description><![CDATA[
This callback method is invoked by the <METHOD>%Delete</METHOD> method to 
provide notification that the object specified by <VAR>oid</VAR> is being deleted.

<P>If this method returns an error then the object will not be deleted.
[Previously private]]]></Description>
<ClassMethod>1</ClassMethod>
<FormalSpec>oid:%ObjectIdentity</FormalSpec>
<ReturnType>%Status</ReturnType>
<ServerOnly>1</ServerOnly>
<Implementation><![CDATA[
	set myId = $lg(oid,1)
	do ##class(DBAgrofreshEK.VerarbProv).SaveAuftragOidToGlobal(myId)
	
	Quit $$$OK
]]></Implementation>
</Method>

<Trigger name="trgBeforeDelete">
<Code>	new myId
	set myId = {ID}
	do ##class(DBAgrofreshEK.VerarbProv).SaveAuftragOidToGlobal(myId)</Code>
<Event>DELETE</Event>
</Trigger>

<Method name="SaveAuftragOidToGlobal">
<ClassMethod>1</ClassMethod>
<FormalSpec>VerarbProvOid:%String</FormalSpec>
<Implementation><![CDATA[

	set verarbAuftrag = ""
	
	set prov = ##class(DBAgrofreshEK.VerarbProv).%OpenId(VerarbProvOid)	
	if (prov '= "") {
		set verarbAuftrag = prov.VerarbAuftrag.%Id()
		kill prov
	} 
	
	Set ^VerarbProvOldValues(VerarbProvOid, 1) = verarbAuftrag
]]></Implementation>
</Method>

<Method name="TryDeleteAuftrag">
<ClassMethod>1</ClassMethod>
<FormalSpec>VerarbProvOid:%String</FormalSpec>
<Implementation><![CDATA[
	
	set verarbAuftr = ^VerarbProvOldValues(VerarbProvOid, 1)
	kill ^VerarbProvOldValues(VerarbProvOid,1)
	
	set cnt = 0
	&sql(SELECT COUNT(*) INTO :cnt FROM DBAgrofreshEK.VerarbProv WHERE
			VerarbAuftrag = :verarbAuftr)
	
	// zugehöriger Auftrag versuchen zu löschen
	// kann fehlschlagen wenn Arbeitsaufwand
	// darauf erfasst ist, ist auch gut so
	if (cnt = 0) {
		do ##class(DBAgrofreshEK.VerarbAuftrag).%DeleteId(verarbAuftr)
	}
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.VerarbProvD</DataLocation>
<DefaultData>VerarbProvDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.VerarbProvD</IdLocation>
<IndexLocation>^DBAgrofreshEK.VerarbProvI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.VerarbProvS</StreamLocation>
<Data name="VerarbProvDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>VerarbAuftrag</Value>
</Value>
<Value name="3">
<Value>Originalcharge</Value>
</Value>
<Value name="4">
<Value>Artikel</Value>
</Value>
<Value name="5">
<Value>Qualitaet</Value>
</Value>
<Value name="6">
<Value>AnzahlGebinde</Value>
</Value>
<Value name="7">
<Value>Gebinde</Value>
</Value>
<Value name="8">
<Value>MengeJeGebinde</Value>
</Value>
<Value name="9">
<Value>Einzelgewicht</Value>
</Value>
<Value name="10">
<Value>MengeEingang</Value>
</Value>
<Value name="11">
<Value>OriginalCharge</Value>
</Value>
<Value name="12">
<Value>Bemerkung</Value>
</Value>
<Value name="13">
<Value>Abzugstyp</Value>
</Value>
<Value name="14">
<Value>Herkunft</Value>
</Value>
<Value name="15">
<Value>Produktionsart</Value>
</Value>
<Value name="16">
<Value>MengeEingangKg</Value>
</Value>
</Data>
<Property name="Abzugstyp"/>
<Property name="AnzahlGebinde"/>
<Property name="Artikel"/>
<Property name="Bemerkung"/>
<Property name="Einzelgewicht"/>
<Property name="Gebinde"/>
<Property name="Herkunft"/>
<Property name="MengeEingang"/>
<Property name="MengeEingangKg"/>
<Property name="MengeJeGebinde"/>
<Property name="OriginalCharge"/>
<Property name="Produktionsart"/>
<Property name="Qualitaet"/>
<Property name="VerarbAuftrag"/>
</Storage>
</Class>


<Class name="DBAgrofreshEK.Verarbeitung">
<Super>%Persistent,%XML.Adaptor</Super>
<TimeChanged>62416,57212.855701</TimeChanged>
<TimeCreated>61515,30323.50467</TimeCreated>
<Inheritance>right</Inheritance>

<Parameter name="XMLIGNOREINVALIDATTRIBUTE">
<Description><![CDATA[
Controls how to handle attributes that are unexpected.
-> If this parameter is 1 (the default), such attributes are ignored.
-> If it is 0, they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNOREINVALIDTAG">
<Description><![CDATA[
Controls how to handle tags that are unexpected. 
-> If this parameter is 1, such tags are ignored. 
-> If it is 0 (the default), they are treated as errors, and import fails.]]></Description>
<Default>1</Default>
</Parameter>

<Parameter name="XMLIGNORENULL">
<Default>1</Default>
</Parameter>

<Property name="IdForExport">
<Type>%XML.Id</Type>
<Private>1</Private>
<Transient>1</Transient>
<Parameter name="XMLNAME" value="ID"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
</Property>

<Property name="PosNummer">
<Type>%Integer</Type>
</Property>

<Property name="Bezugsart">
<Type>%Integer</Type>
</Property>

<Property name="Verarbeitungstyp">
<Type>DBAgrofreshEK.SD.Verarbeitungstyp</Type>
<Cardinality>one</Cardinality>
<Inverse>VerarbTyp</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Verarbeitungstyp"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="VerarbeitungstypIndex">
<Properties>Verarbeitungstyp</Properties>
</Index>

<Property name="Artikel">
<Type>DBAgrofresh.Artikel</Type>
<Cardinality>one</Cardinality>
<Inverse>VerarbeitungArt</Inverse>
<Relationship>1</Relationship>
<Parameter name="XMLELEMENTREF" value="1"/>
<Parameter name="XMLNAME" value="Artikel"/>
<Parameter name="XMLPROJECTION" value="ATTRIBUTE"/>
<Parameter name="XMLREFERENCE" value="ID"/>
</Property>

<Index name="ArtikelIndex">
<Properties>Artikel</Properties>
</Index>

<Method name="GetOidByVerarbeitungPosNr">
<ClassMethod>1</ClassMethod>
<FormalSpec>aktVerarb:%String,PosNr:%Integer</FormalSpec>
<ReturnType>%String</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT %ID INTO :id FROM DBAgrofreshEK.Verarbeitung
			WHERE Verarbeitungstyp = :aktVerarb AND PosNummer =:PosNr)
	Quit id
]]></Implementation>
</Method>

<Method name="GetNextkNrByVerarbeitung">
<ClassMethod>1</ClassMethod>
<FormalSpec>aktVerarb:%String</FormalSpec>
<ReturnType>%Integer</ReturnType>
<Implementation><![CDATA[
	set nr = ""
	&sql(SELECT MAX(PosNummer) INTO :nr FROM DBAgrofreshEK.Verarbeitung
			WHERE Verarbeitungstyp = :aktVerarb)
	Quit nr+1
]]></Implementation>
</Method>

<Method name="PosNrExists">
<ClassMethod>1</ClassMethod>
<FormalSpec>aktVerarb:%String,PosNr:%Integer</FormalSpec>
<ReturnType>%Boolean</ReturnType>
<Implementation><![CDATA[
	set id = ""
	&sql(SELECT TOP 1 ID INTO :id FROM DBAgrofreshEK.Verarbeitung
	     WHERE Verarbeitungstyp = :aktVerarb AND PosNummer = :PosNr)
	if (id = "") {
		Quit 0	
	} else {
		Quit 1
	}
]]></Implementation>
</Method>

<Storage name="Default">
<Type>%Library.CacheStorage</Type>
<DataLocation>^DBAgrofreshEK.VerarbeitungD</DataLocation>
<DefaultData>VerarbeitungDefaultData</DefaultData>
<IdLocation>^DBAgrofreshEK.VerarbeitungD</IdLocation>
<IndexLocation>^DBAgrofreshEK.VerarbeitungI</IndexLocation>
<StreamLocation>^DBAgrofreshEK.VerarbeitungS</StreamLocation>
<Data name="VerarbeitungDefaultData">
<Structure>listnode</Structure>
<Subscript/>
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
<Value name="2">
<Value>PosNummer</Value>
</Value>
<Value name="3">
<Value>Bezugsart</Value>
</Value>
<Value name="4">
<Value>Verarbeitungstyp</Value>
</Value>
<Value name="5">
<Value>Artikel</Value>
</Value>
</Data>
<Property name="Artikel"/>
<Property name="Bezugsart"/>
<Property name="PosNummer"/>
<Property name="Verarbeitungstyp"/>
</Storage>
</Class>
</Export>
