//"intezkfk.sci","Integracja ZK do FK - include","\Integracja z FK a\",0,2.1.1,SYSTEM
/////////////////////////////////////////
// "Integracja ZK do FK - include"
// intezkfk.sci
/////////////////////////////////////////
#define APOSTROF "\t"

// dostępne opcje wywołania fukcji IntegrortZK()
#define NIE_EKSP_OZNAK				0x2

record	TestRej
	int Rej
	int Typ
endrec

#include "Integracja ZK do FK - include2"
#include "Integracja ZK do FK - include3"
#include "Integracja SOD - include"

int Sub IntegrZK(long idDK, int iOpcje)
// zmienne globalne: BaseDK basDK, BaseDP basDP, InfoVat StVat(6)

	IntegrZK = 0

	string sTyp
	int err
	int bKorekta = 0, bRozliczony
	int nCount = 1
	int nPozycja = 0
	dispatch dpStVat
	int iRejVat, k
	int index = 1

	String strOkres
	float dKwota, dKurs, dWKwota
	String strTmp
	int iSubtyp
	int iRok, iRok2

	string sRej
	long lSuper
	long lABC

	int IDFK_K
	long ii
	Dispatch xKontrahent
	Dispatch xDokZk
	Dispatch xTypDokumentuZk
	Dispatch xKsSchematZk
	Dispatch xParams
	Dispatch xKZ
	int nCzyWal, nZapCount
	int czyRelatedDokument = 0
	string xmlDoc
	Dispatch xDefDok
	int iOkresSter

	string sSQL
	long idZK
	dispatch xConn=GetAdoConnection()
	dispatch xRec="ADODB.Recordset"

	Dispatch xIntegracja = xFactory.GetObject("BIntegracjaFK")

	strOpis = ""

	nRes=!(xDokumentZk=GetObjById("BDokumentZk",idDK))
	if nRes then Error "Brak takiego rekordu w bazie DK"

	iSubtyp = xDokumentZk.charakter
	if ( iSubtyp == FWZ || iSubtyp == WKZ) then				// || iSubtyp == DIM || iSubtyp == DKM) then
		iRok = dbd.firmainfo.GetRokByDate(xDokumentZk.dataWystawienia)
	else
		//  na podstawie definicji typu dokumentu w FK okreslamy rok dla wszystkich pozostałych dokumentow
		buf = xDokumentZk.dataWystawieniaObca
		iRok2 = dbd.firmainfo.GetRokByDate(xDokumentZk.dataWystawieniaObca)
		if iRok2 == -3 then  //rok zamkniety
			IntegrZK = ZamknietyRok(1, xDokumentZk.numer, buf, idDK)
			if IntegrZK then exit
		endif
		xTypDokumentuZk = GetObjByKod("BTypDokumentuZk", xDokumentZk.typDK)
		if !xTypDokumentuZk then  error "Brak takiego rekordu"
		sParam = using "%d", iRok2
		xDefDok.Create(ObjectFK(".DefDokum"))
		xDefDok.Open(sParam, dbd)
		xDefDok.MoveTo(xTypDokumentuZk.symbolFK)
		iOkresSter = xDefDok.Value("konfOkres")
		select case iOkresSter
			case 1
				iRok = dbd.firmainfo.GetRokByDate(xDokumentZk.dataZakupu)
				if iRok == -3 then //warning
					IntegrZK = ZamknietyRok2(1, xDokumentZk.numer, xDokumentZk.dataZakupu, idDK, 0)
					if IntegrZK then exit
					iRok = dbd.firmainfo.GetRokByDate(xDokumentZk.dataWplywu)
				endif
			case 2
				iRok = dbd.firmainfo.GetRokByDate(xDokumentZk.dataWystawieniaObca)
				if iRok == -3 then //warning
					IntegrZK = ZamknietyRok2(1, xDokumentZk.numer, xDokumentZk.dataWystawieniaObca, idDK, 0)
					if IntegrZK then exit
					iRok = dbd.firmainfo.GetRokByDate(xDokumentZk.dataWplywu)
				endif
			case else				
				iRok = dbd.firmainfo.GetRokByDate(xDokumentZk.dataWplywu)
		endselect
	endif

	if RokFK(1).Zap == 1 then

		if RokFK(1).IdRok != iRok then
			UstawRok(iRok)
		endif

	else
		UstawRok(iRok)
	endif

	dst=RokFK(1).Rok
	plkn=RokFK(1).PlanKont
	defdok=RokFK(1).DefDokument
	rozrDokument=RokFK(1).RokDokumentRoz

	// sprawdzamy typ dokumentu
	Select Case xDokumentZk.charakter
		Case FVZ, FKZ, RUZ, RKZ, DIM, DKM, FVR, FKR, ZRZ, ZRK, FVM, FKM, FZZ, ZKZ, WNT, FWZ, WKZ, WNK, ZVW, ZWK
		Case Else
			IntegrZK = 1 // pomijamy
			AddError("Nie można wysłać dokumentu " + xDokumentZk.numer+".",idDK)
	EndSelect

	if ( IntegrZK == 1 ) then Exit

	//dla wspolnej bazy - sprawdzamy czy dokumenty, zostaly zapisane w RDF
	if (xIntegracja.CzyItgXML == 1 && !xDokumentZk.statusRDF) then
		if CzyIntegrSentToFK(xDokumentZk.numer, idDK) then Exit // pomijamy
	endif

	if CzyIntegrBrakSchematu(xDokumentZk.schematKsiegowania, xDokumentZk.numer, idDK) then
		IntegrZK = 1 // pomijamy
		Exit
	endif

	xKsSchematZk = GetObjByKod("BKsSchematZk", xDokumentZk.schematKsiegowania)
	if xKsSchematZk then
		nRes = 0
	else
		nRes = 1
	endif

	if CzyIntegrBlednySchemat(nRes, xDokumentZk.numer, idDK) then
		IntegrZK = 1 // pomijamy
		Exit
	endif

	if 0 != xDokumentZk.danekh.KhId then

		xKontrahent = GetObjById("BKontrahent", xDokumentZk.danekh.KhId)
		if !xKontrahent then error "Brak takiego rekordu w bazie KH"
		if ( (1 != xIntegracja.trybWspolpracy) && (4 != xIntegracja.trybWspolpracy) ) then
			IntegrZK = CzyIntegrBrakIDFK(val(xKontrahent.identyfikatorFK), xDokumentZk.numer, idDK, KHtypKH)
			if IntegrZK then exit
		endif
	endif

	sTyp = xDokumentZk.typDk
	nRes = !(xDokZk=GetObjById("BDokZk",idDK))
	if nRes then  error "Dokument nie załadowany"

	if xDokZk.czyZaimport then
		//dokument moze miec typ dokumentu wprowadzony tylko w centrali
		// sprawdzamy czy ma taki typ
		xTypDokumentuZk = GetObjByKod("BTypDokumentuZk", xDokumentZk.typDk)
		sTyp = ""
		if xTypDokumentuZk && (xDokumentZk.charakter == xTypDokumentuZk.charakter) then
			// typ dokumentu pasuje z odzdialu z centrala
			sTyp = xDokumentZk.typDk
		else
			// nie znaleizono typu o takim kodzie wiec
			// szukamy dla podstawowego typu dla charakteru dokumentu
			xTypDokumentuZk = GetObjByKod("BTypDokumentuZk", TypDOK(xDokumentZk.charakter))
			if xTypDokumentuZk && (xDokumentZk.charakter == xTypDokumentuZk.charakter) then
				sTyp = xDokumentZk.typDk
			else
				IntegrZK = CzyIntegrBrakTypDK("", xDokumentZk.numer, idDK, TypDOK(xDokumentZk.charakter))
			endif
		endif
	endif


	if !(xDokZk.czyZaimport) || ((xDokZk.czyZaimport) && sTyp != "") then

		xTypDokumentuZk = GetObjByKod("BTypDokumentuZk", sTyp)
		if !xTypDokumentuZk then error "Brak takiego rekordu"

		IntegrZK = CzyIntegrBrakTypDK(xTypDokumentuZk.symbolFK, xDokumentZk.numer, idDK, sTyp)
	endif
	if IntegrZK then exit

	iSubtyp = xDokumentZk.charakter
	//sprawdzamy czy faktury walutowe nie sa eksportowane jako stare( nie walutowe) do FK
	if(iSubtyp == ZVW || iSubtyp == ZWK)  && (xTypDokumentuZk.typFK != "FWZ" && xTypDokumentuZk.typFK != "FWZK") then
 		if(xDokumentZk.kurs != xDokumentZk.kursDoch) then
			nRes = 1
		else
			nRes = 0
		endif
	endif
	IntegrZK = CzyIntegrBlednyTypFK(nRes, xTypDokumentuZk.symbolFK, xDokumentZk.numer, idDK, sTyp)
	if IntegrZK then exit
/*
	//sprawdzamy, czy dokumenty zlotowkowe nie sa wysylane jako faktura walutowa
	if (xTypDokumentuZk.typFK == "FWZ" || xTypDokumentuZk.typFK == "FWZK") && (xDokumentZk.waluta == "") then
		IntegrZK = CzyIntegrBlednyTypFK2(xTypDokumentuZk.symbolFK, xDokumentZk.numer, idDK, sTyp)
	endif
	
	if IntegrZK then exit
*/	
	if(xTypDokumentuZk) then
		if(xTypDokumentuZk.typFK == "FVS" || xTypDokumentuZk.typFK == "RUS" || xTypDokumentuZk.typFK == "FVZ" ||xTypDokumentuZk.typFK == "RUZ" || xTypDokumentuZk.typFK == "FVSM" || xTypDokumentuZk.typFK == "FVT") then
		 	czyRelatedDokument = 1		
		else
			czyRelatedDokument = 0
		endif
		xDokumentZk.SprawdzUzgodnienieFK()
	endif

	iSubtyp = xDokumentZk.charakter
	Select Case iSubtyp
		Case FVZ, FKZ, RUZ, RKZ, DIM, DKM, FVR, FKR, ZRZ, ZRK, FVM, FKM, FZZ, ZKZ, WNT, FWZ, WKZ, WNK, ZVW, ZWK
			for ii=1 to ii>xDokumentZk.Pozycje.Count()
				if ((!xDokumentZk.CzyKorekta) || (xDokumentZk.CzyKorekta && xDokumentZk.Pozycje.item(ii).wlasna)) then
					if (xDokumentZk.CzyKorekta) then
						if (xDokumentZk.Pozycje.item(ii).idpozkoryg) then
							xRejZk = xDokumentZk.Pozycje.item(ii).przedKorekta.rejestrVAT
							if xRejZk.id then
								if xRejZk.rejestrFKid then
									IntegrZK = CzyintegrBlednyRej(xRejZk.rejestrFKid, xDokumentZk.numer, idDK, 0)
								else
									// nie ma uzgdonionego rejestru
									IntegrZK = CzyintegrBlednyRej(0, xDokumentZk.numer, idDK, 0)
								endif
								if IntegrZK then exit
							else
								// nieokreślony rejestr
								IntegrZK = CzyintegrBrakRej(1, xDokumentZk.numer, idDK)
								if IntegrZK then exit
							endif
						endif

						xRejZk = xDokumentZk.Pozycje.item(ii).poKorekcie.rejestrVAT
						if xRejZk.id then
							if xRejZk.rejestrFKid then
								IntegrZK = CzyintegrBlednyRej(xRejZk.rejestrFKid, xDokumentZk.numer, idDK, 0)
							else
								// nie ma uzgdonionego rejestru
								IntegrZK = CzyintegrBlednyRej(0, xDokumentZk.numer, idDK, 0)
							endif
							if IntegrZK then exit
						else
							// nieokreślony rejestr
							IntegrZK = CzyintegrBrakRej(1, xDokumentZk.numer, idDK)
							if IntegrZK then exit
						endif
					else
						xRejZk = xDokumentZk.Pozycje.item(ii).rejestrVAT
						if xRejZk.id then
							if xRejZk.rejestrFKid then
								IntegrZK = CzyintegrBlednyRej(xRejZk.rejestrFKid, xDokumentZk.numer, idDK, 0)
							else
								// nie ma uzgdonionego rejestru
								IntegrZK = CzyintegrBlednyRej(0, xDokumentZk.numer, idDK, 0)
							endif
							if IntegrZK then exit
						else
							// nieokreślony rejestr
							IntegrZK = CzyintegrBrakRej(1, xDokumentZk.numer, idDK)
							if IntegrZK then exit
						endif
					endif
					if (iSubtyp == FWZ || iSubtyp == WKZ) then
						if (xDokumentZk.CzyKorekta) then
							if (xDokumentZk.Pozycje.item(ii).idpozkoryg) then
								xRejZk = xDokumentZk.Pozycje.item(ii).przedKorekta.rejVATnalicz
								if xRejZk.id then
									if xRejZk.rejestrFKid then
										IntegrZK = CzyintegrBlednyRej(xRejZk.rejestrFKid, xDokumentZk.numer, idDK, 0)
									else
										// nie ma uzgdonionego rejestru
										IntegrZK = CzyintegrBlednyRej(0, xDokumentZk.numer, idDK, 0)
									endif
									if IntegrZK then exit
								else
									// nieokreślony rejestr
									IntegrZK = CzyintegrBrakRej(1, xDokumentZk.numer, idDK)
									if IntegrZK then exit
								endif
							endif

							xRejZk = xDokumentZk.Pozycje.item(ii).poKorekcie.rejVATnalicz
							if xRejZk.id then
								if xRejZk.rejestrFKid then
									IntegrZK = CzyintegrBlednyRej(xRejZk.rejestrFKid, xDokumentZk.numer, idDK, 0)
								else
									// nie ma uzgdonionego rejestru
									IntegrZK = CzyintegrBlednyRej(0, xDokumentZk.numer, idDK, 0)
								endif
								if IntegrZK then exit
							else
								// nieokreślony rejestr
								IntegrZK = CzyintegrBrakRej(1, xDokumentZk.numer, idDK)
								if IntegrZK then exit
							endif
						else
							xRejZk = xDokumentZk.Pozycje.item(ii).rejVATnalicz
							if xRejZk.id then
								if xRejZk.rejestrFKid then
									IntegrZK = CzyintegrBlednyRej(xRejZk.rejestrFKid, xDokumentZk.numer, idDK, 0)
								else
									// nie ma uzgdonionego rejestru
									IntegrZK = CzyintegrBlednyRej(0, xDokumentZk.numer, idDK, 0)
								endif
								if IntegrZK then exit
							else
								// nieokreślony rejestr
								IntegrZK = CzyintegrBrakRej(1, xDokumentZk.numer, idDK)
								if IntegrZK then exit
							endif
						endif
					endif

					//if (iSubtyp == DIM || iSubtyp == DKM || iSubtyp == FVZ || iSubtyp == FKZ) then
					//if (xDokumentZk.czySamoopodatkowanie) then
						if (xDokumentZk.CzyKorekta) then
							if (xDokumentZk.Pozycje.item(ii).idpozkoryg) then
								xRejZk = xDokumentZk.Pozycje.item(ii).przedKorekta.rejestrVATnalezny
								if xRejZk.id then
									if xRejZk.rejestrFKid then
										IntegrZK = CzyintegrBlednyRej(xRejZk.rejestrFKid, xDokumentZk.numer, idDK, 0)
									else
										// nie ma uzgdonionego rejestru
										IntegrZK = CzyintegrBlednyRej(0, xDokumentZk.numer, idDK, 0)
									endif
									if IntegrZK then exit
/*								else
									// nieokreślony rejestr
									IntegrZK = CzyintegrBrakRej(1, xDokumentZk.numer, idDK)
*/
									if IntegrZK then exit
								endif
							endif

							xRejZk = xDokumentZk.Pozycje.item(ii).poKorekcie.rejestrVATnalezny
							if xRejZk.id then
								if xRejZk.rejestrFKid then
									IntegrZK = CzyintegrBlednyRej(xRejZk.rejestrFKid, xDokumentZk.numer, idDK, 0)
								else
									// nie ma uzgdonionego rejestru
									IntegrZK = CzyintegrBlednyRej(0, xDokumentZk.numer, idDK, 0)
								endif
								if IntegrZK then exit
/*							else
								// nieokreślony rejestr
								IntegrZK = CzyintegrBrakRej(1, xDokumentZk.numer, idDK)
*/
								if IntegrZK then exit
							endif
						else
							xRejZk = xDokumentZk.Pozycje.item(ii).rejestrVATnalezny
							if xRejZk.id then
								if xRejZk.rejestrFKid then
									IntegrZK = CzyintegrBlednyRej(xRejZk.rejestrFKid, xDokumentZk.numer, idDK, 0)
								else
									// nie ma uzgdonionego rejestru
									IntegrZK = CzyintegrBlednyRej(0, xDokumentZk.numer, idDK, 0)
								endif
								if IntegrZK then exit
/*							else
								// nieokreślony rejestr
								IntegrZK = CzyintegrBrakRej(1, xDokumentZk.numer, idDK)
*/
								if IntegrZK then exit
							endif
						endif
					//endif
				endif
			next ii
	endselect
	if IntegrZK then exit

	if IntegrZK then exit

	if ( xDokumentZk.czyKorekta ) then bKorekta = 1

	bRozliczony = xDokumentZk.czyRozliczony

	dst.Clear()
	sOpisy=0
	dbd.CurrentDate = sDataWpr

	if(xIntegracja.currentLoadNewVersion) then//obiekt integracji obsługuje guidy dokumentów
		dst.Value("UId") = xDokumentZk.guid
	endif

	dst.Value("DataWystawieniaKsef") = xDokumentZk.dataWystawieniaKsef
	dst.Value("GuidEarch") = xDokumentZk.guidEarch
	dst.Value("NumerKsef") = xDokumentZk.numberKsef

    // SME
	if (iSubtyp == WNT || iSubtyp == WNK) then
        dst.Value("proceduraSME") = iif(xDokumentZk.procedura_SME, 1, 0)
	endif

// żeby nie było komunikatu w FK-a typu: okres dokumentu nie jest zgodny z okresem rejestru VAT
//		if (iSubtyp == DIM || iSubtyp == DKM || iSubtyp == FWZ || iSubtyp == WKZ) then
//			dst.Value("DataOkr") = sData
//		else
//			dst.Value("DataOkr") = xDokumentZk.dataWplywu
//		endif
	dst.Value("DataDok") = xDokumentZk.dataWystawieniaObca	//zarówno dla dokumentów obcych jak i własnych jest to data wystawienia dokumentu

	if iSubtyp == FWZ || iSubtyp == WKZ || iSubtyp == DIM || iSubtyp == DKM then
		 //w szczególnych przypadkach, jako datę operacji gospodarczej, wysyłamy datę wystawienia dokumentu
		 //- dla faktury wewnętrznej (bo innej daty nie ma na tym dokumencie)
		 //- dla DIM-a (bo jest to data odprawy celnej w FK-a)
		dst.Value("DataOper") = xDokumentZk.dataWystawieniaObca
	else
		dst.Value("DataOper") = xDokumentZk.dataZakupu
	endif

	dst.Value("Datawpr") = sDataWpr
	if xDokumentZk.danekh.KhId != 0 then
		xKontrahent = GetObjById("BKontrahent", xDokumentZk.danekh.KhId)
		if !xKontrahent then  error "Brak takiego rekordu w bazie KH"

		if ( 1 == xIntegracja.trybWspolpracy || 4 == xIntegracja.trybWspolpracy) then
			dst.Value("kontrahent") = xKontrahent.guid
		else
			dst.Value("kontrahent") = val(xKontrahent.identyfikatorFK)
		endif
	endif
	
	dst.Danekh.Value("Nazwa") = xDokumentZk.danekh.KhNazwa
	dst.DaneKh.Value("Nip") = xDokumentZk.danekh.KhNIP
	dst.DaneKh.Value("Ulica") = IIF(Len(xDokumentZk.danekh.KhUlica) > lenULICA, Mid(xDokumentZk.danekh.KhUlica,0,lenULICA), xDokumentZk.danekh.KhUlica)
	dst.DaneKh.Value("Dom") = xDokumentZk.danekh.KhDomu
	dst.DaneKh.Value("Lokal") = xDokumentZk.danekh.KhLokal
	dst.DaneKh.Value("Miejscowosc") = IIF(Len(xDokumentZk.danekh.KhMiasto) > lenMIASTO, Mid(xDokumentZk.danekh.KhMiasto,0,lenMIASTO), xDokumentZk.danekh.KhMiasto)
	dst.DaneKh.Value("KodPocztowy") = xDokumentZk.danekh.KhPoczta
	dst.DaneKh.Value("kraj") = xDokumentZk.danekh.kraj.symbol

	if xDokumentZk.danekh.KhKod == "" && xDokumentZk.danekh.KhNazwa != "" then
		kontrah.ClearRecord()
		kontrah.Value("nazwa") = dst.Danekh.Value("Nazwa")
		kontrah.Value("nip") = dst.Danekh.Value("Nip")
		kontrah.Value("ulica") = dst.Danekh.Value("Ulica")
		kontrah.Value("nrDomu") = dst.Danekh.Value("Dom")
		kontrah.Value("nrMieszkania") = dst.Danekh.Value("Lokal")
		kontrah.Value("miejscowosc") = dst.Danekh.Value("Miejscowosc")
		kontrah.Value("kodPocztowy") = dst.Danekh.Value("KodPocztowy")
		
		IDFK_K = kontrah.CheckIfExists()
		if !IDFK_K then
			if kontrah.Validate() && (IntegrZK == 0) then
				if !kontrah.Insert() && kontrah.CheckIfExists() then
					if ItgInfo.Info("PlanKontSubjectType") then
						dst.Value("kontrahent") = kontrah.GetExistingPoz(0)
					else
						dst.Value("kontrahent") = kontrah.GetExistingId(0)
					endif
				endif
			endif
		else
			if ItgInfo.Info("PlanKontSubjectType") then
				dst.Value("kontrahent") = kontrah.GetExistingPoz(0)
			else
				dst.Value("kontrahent") = kontrah.GetExistingId(0)
			endif
		endif
	endif

	dst.Value("mppFlags") = xDokumentZk.mppFlags
	dst.Value("accountNo") = xDokumentZk.accountNo

	dst.Value("JPK_V7") = xDokumentZk.JPK_V7

	if xDokumentZk.charakter != DIM && xDokumentZk.charakter != DKM then
		dKwota = Round( (xDokumentZk.netto + xDokumentZk.niePodlega + xDokumentZk.vat),2 )
	else
		dKwota = Round( (xDokumentZk.netto + xDokumentZk.niePodlega),2 )
	endif

	xDekretacjeZk.Clear()
	xDekretParams = xDekretacjeZk.Params()
	xDekretParams.id=xDokumentZk.id
	xDekretacjeZk.Dekret(xDekretParams)
	AccountingSOD(xDokumentZk, xDekretacjeZk)

	nCzyWal = 0
	if xDokumentZk.GetRozrachunek() then
		nCzyWal = CzyWalutowy(xDokumentZk.GetRozrachunek().id)
	endif

	if nCzyWal then
		dst.Value("waluta") = xDokumentZk.waluta

		dKurs = xDokumentZk.kurs
		dst.Value("kurs") = dKurs

		dWKwota = xDokumentZk.wysokoscNaleznosci
		dst.Value("wkwota") = dWKwota

		dKwota = Round(dWKwota * dKurs, 2)

		dst.Value("Kwota") = dKwota
	else
		if ( xDokumentZk.charakter == DIM || xDokumentZk.charakter == DKM || xDokumentZk.charakter == WNT || xDokumentZk.charakter == WNK ) then
			// w tym wypadku dKwota zawiera cła, akcyzy i inne, a nie powinna

			dKwota = 0
			nZapCount = xDekretacjeZk.zapisy.Count()

			for ii=1 to ii > nZapCount
				if !xDekretacjeZk.zapisy.item(ii).ma then
					dKwota += xDekretacjeZk.zapisy.item(ii).kwota
				endif
			next ii

			dst.Value("Kwota") = dKwota
		else
			dKwota = xDokumentZk.netto + xDokumentZk.niePodlega + xDokumentZk.vat
			dst.Value("Kwota") = dKwota
		endif
	endif

	sTyp = xDokumentZk.typDk
	if xDokZk.czyZaimport then
		//dokument moze miec typ dokumentu wprowadzony tylko w centrali
		// sprawdzamy czy ma taki typ
		xTypDokumentuZk = GetObjByKod("BTypDokumentuZk", xDokumentZk.typDk)
		sTyp = ""
		if xTypDokumentuZk && (xDokumentZk.charakter == xTypDokumentuZk.charakter) then
			// typ dokumentu pasuje z odzdialu z centrala
			sTyp = xDokumentZk.typDk
		else
			// nie znaleizono typu o takim kodzie wiec
			// szukamy dla podstawowego typu dla charakteru dokumentu
			xTypDokumentuZk = GetObjByKod("BTypDokumentuZk", TypDOK(xDokumentZk.charakter))
			if xTypDokumentuZk && (xDokumentZk.charakter == xTypDokumentuZk.charakter) then
				sTyp = xDokumentZk.typDk
			else
				error "Brak takiego rekordu"
			endif
		endif
	endif
	// w sumie mogloby nie byc tego wraunku bo styp musi byc
//		if !(xDokZk.item(1).czyZaimport) || ((xDokZk.item(1).czyZaimport) && sTyp != "") then
		xTypDokumentuZk = GetObjByKod("BTypDokumentuZk", sTyp)
		if !xTypDokumentuZk then error "Brak takiego rekordu"
//		endif
	dst.Value("skrot") = xTypDokumentuZk.symbolFK

	if bKorekta then
		if xDokumentZk.czyKZ then	//korekta zbiorcza
			xKZ = xDokumentZk.dokumentyKorygowaneKZ
			k = 1
			for k to k > xKZ.Count
				Powiazanie(xKZ.item(k).id, 0, 0)
			next k
		else
			// musimy siegnac do dokumentu korygowanego pierwotnego
			// przyjete ze jest to pierwszy w kolekcji
			if xDokumentZk.DokumentZKorektami.Count() && xDokumentZk.DokumentZKorektami.item(1).Numer!= xDokumentZk.Numer then
				Powiazanie(xDokumentZk.DokumentZKorektami.item(1).id, 0, 1)
			endif
		endif
	else
		if xDokumentZk.DokumentZKorektami.Count() && xDokumentZk.DokumentZKorektami.item(1).Numer== xDokumentZk.Numer then
			k = 2
			for k to k > xDokumentZk.DokumentZKorektami.Count()
				Powiazanie(xDokumentZk.DokumentZKorektami.item(k).id, 1, 0)		
			next k
		endif
	endif

	if(nCzyWal &&(xTypDokumentuZk.typFK == "FWZ" || xTypDokumentuZk.typFK == "FWZK"))  then //&& czyPozycjaVAT then //nowy typ dokumentu w FK - wielowalutowy
		dst.RejestrVAT.PozycjaVAT.MoveKursVAT()
		//dst.RejestrVAT.PozycjaVAT.Value("TypExt") = 1
		dst.RejestrVAT.PozycjaVAT.Value("Nazwa") = xDokumentZk.waluta
		dst.RejestrVAT.PozycjaVAT.Value("Wartosc") = xDokumentZk.kurs

		dst.RejestrVAT.PozycjaVAT.MoveKursCITPIT()
		dst.RejestrVAT.PozycjaVAT.Value("TypExt") = 2
		dst.RejestrVAT.PozycjaVAT.Value("Nazwa") = xDokumentZk.waluta
		dst.RejestrVAT.PozycjaVAT.Value("Wartosc") = xDokumentZk.kursDoch
	endif

	dispatch pozycja
	dispatch dpRejestrNP = xTypDokumentuZk.rejestrNP
	for ii=1 to ii>xDokumentZk.Pozycje.Count()
		if ((!xDokumentZk.CzyKorekta) || (xDokumentZk.CzyKorekta && xDokumentZk.Pozycje.item(ii).wlasna)) then
			if (xDokumentZk.CzyKorekta) then
				if (xDokumentZk.Pozycje.item(ii).idpozkoryg) then
					pozycja = xDokumentZk.Pozycje.item(ii).przedKorekta
					xRejZk = pozycja.rejestrVAT
					iRejVat = xRejZk.rejestrFKid
					if (iSubtyp != WKZ) then
						lABC = xRejZk.typ
					endif
					dpStVat = pozycja.stVAT
					TabRejVat.Wstaw(iRejVat,dpStVat, pozycja,lABC, 0, 1, 0, 0)
					if pozycja.czyVat50 then
						dpStVat = GETxStawkaObjectByIdentifier(GETIDxVATNP())
						TabRejVat.Wstaw(dpRejestrNP.rejestrFKid, dpStVat, pozycja,lABC, 0, 1, 0, 0)
					endif
				endif

				pozycja = xDokumentZk.Pozycje.item(ii).poKorekcie
				xRejZk = pozycja.rejestrVAT
				iRejVat = xRejZk.rejestrFKid
				if (iSubtyp != WKZ) then
					lABC = xRejZk.typ
				endif
				dpStVat = pozycja.stVAT
				TabRejVat.Wstaw(iRejVat,dpStVat, pozycja,lABC, 0, 0, 0, 0)
				if pozycja.czyVat50 then
					dpStVat = GETxStawkaObjectByIdentifier(GETIDxVATNP())
					TabRejVat.Wstaw(dpRejestrNP.rejestrFKid, dpStVat, pozycja,lABC, 0, 0, 0, 0)
				endif
			else
			pozycja = xDokumentZk.Pozycje.item(ii)
				xRejZk = pozycja.rejestrVAT
				iRejVat = xRejZk.rejestrFKid
				if (iSubtyp != FWZ) then
					lABC = xRejZk.typ
				endif
				dpStVat = pozycja.stVAT
				TabRejVat.Wstaw(iRejVat,dpStVat, pozycja,lABC, 0, 0, 0, 0)
				if pozycja.czyVat50 then
					dpStVat = GETxStawkaObjectByIdentifier(GETIDxVATNP())
					TabRejVat.Wstaw(dpRejestrNP.rejestrFKid, dpStVat, pozycja,lABC, 0, 0, 0, 0)
				endif
			endif

			if (iSubtyp == FWZ || iSubtyp == WKZ) then
				if (xDokumentZk.CzyKorekta) then
					if (xDokumentZk.Pozycje.item(ii).idpozkoryg) then
						pozycja = xDokumentZk.Pozycje.item(ii).przedKorekta
						xRejZk = pozycja.rejVATnalicz
						iRejVat = xRejZk.rejestrFKid
						lABC = xRejZk.typ
						dpStVat = pozycja.stVAT
						TabRejVat.Wstaw(iRejVat,dpStVat, pozycja,lABC, 1, 1, 0, 0)
					endif

					pozycja = xDokumentZk.Pozycje.item(ii).poKorekcie
					xRejZk = pozycja.rejVATnalicz
					iRejVat = xRejZk.rejestrFKid
					lABC = xRejZk.typ
					dpStVat = pozycja.stVAT
					TabRejVat.Wstaw(iRejVat,dpStVat, pozycja,lABC, 1, 0, 0, 0)
				else
					pozycja = xDokumentZk.Pozycje.item(ii)
					xRejZk = pozycja.rejVATnalicz
					iRejVat = xRejZk.rejestrFKid
					lABC = xRejZk.typ
					dpStVat = pozycja.stVAT
					TabRejVat.Wstaw(iRejVat,dpStVat, pozycja,lABC, 1, 0, 0, 0)
				endif
			endif
			if (iSubtyp == DIM || iSubtyp == DKM || iSubtyp == FVZ || iSubtyp == FKZ) then
			//if (xDokumentZk.czySamoopodatkowanie) then
				if (xDokumentZk.CzyKorekta) then
					if (xDokumentZk.Pozycje.item(ii).idpozkoryg) then
						pozycja = xDokumentZk.Pozycje.item(ii).przedKorekta
						xRejZk = pozycja.rejestrVATnalezny
						iRejVat = xRejZk.rejestrFKid
						if iRejVat then
							//lABC = xRejZk.typ
							dpStVat = pozycja.stVAT
							TabRejVat.Wstaw(iRejVat,dpStVat, pozycja,lABC, 1, 1, 0, 0)
						endif
					endif

					pozycja = xDokumentZk.Pozycje.item(ii).poKorekcie
					xRejZk = pozycja.rejestrVATnalezny
					iRejVat = xRejZk.rejestrFKid
					if iRejVat then
						//lABC = xRejZk.typ
						dpStVat = pozycja.stVAT
						TabRejVat.Wstaw(iRejVat,dpStVat, pozycja,lABC, 1, 0, 0, 0)
					endif
				else
					pozycja = xDokumentZk.Pozycje.item(ii)
					xRejZk = pozycja.rejestrVATnalezny
					iRejVat = xRejZk.rejestrFKid
					if iRejVat then
						//lABC = xRejZk.typ
						dpStVat = pozycja.stVAT
						TabRejVat.Wstaw(iRejVat,dpStVat, pozycja,lABC, 1, 0, 0, 0)
					endif
				endif
			endif
			DodajDoOpisu(xDokumentZk.Pozycje.item(ii).opis, "/")
		endif
	next ii

	if ( iSubtyp == FWZ || iSubtyp == WKZ ) then
		sSQL  = using "SELECT id2 FROM HM.ZZ where typ = 151 and baza1 = 34 and baza2 = 34 and id1 = %l", xDokumentZk.id
		xRec.Open(sSQL,xConn)
		if xRec.RecordCount() && !xRec.EOF then
			idZK = xRec.Fields("id2").Value
		endif
		xRec.Close()

		if idZK == 0 then
			dst.Value("Datawpl") = xDokumentZk.dataWplywu
			strTmp = xDokumentZk.numerObcy
		endif

		sSQL  = using "SELECT data_obcy, datasp, datawplywu, kod_obcy FROM HM.DK where id = %l", idZK
		xRec.Open(sSQL,xConn)
		if xRec.RecordCount() && !xRec.EOF then
			dst.Value("DataDok") = xRec.Fields("data_obcy").Value
			dst.Value("DataOper") = xRec.Fields("datasp").Value
			dst.Value("Datawpl") = xRec.Fields("datawplywu").Value
			strTmp = xRec.Fields("kod_obcy").Value
		endif
		xRec.Close()
	else
		dst.Value("Datawpl") = xDokumentZk.dataWplywu
		strTmp = xDokumentZk.numerObcy
	endif
	
    if len(strTmp)>0 then
        strTmp += " "
    endif
	strTmp += "["
	strTmp += xDokumentZk.numer
	strTmp += "]"
	strTmp = Mid(strTmp, 1, iif(len(strTmp)>256,256,len(strTmp)))
	dst.Value("nazwa") = strTmp

	dst.Value("tresc")	= xDekretacjeZk.trescwFK  //opis fk

	nCzyWal = 0
	if xDokumentZk.GetRozrachunek() then
		nCzyWal = CzyWalutowy(xDokumentZk.GetRozrachunek().id)
	endif

	ZapiszZAP(xDekretacjeZk, 0, 0,xDokumentZk.czyRozliczony,xDokumentZk.terminPlatnosci, nCzyWal, xDokumentZk.waluta, !czyRelatedDokument, 0)
	// równoległe księgowania magazynowe
	if iOpcje & ROWNOLEGLE_KSIEG_MAG then
		if !bKorekta then
			for ii=1 to ii>xDokumentZk.transakcjaTw.powiazaniaTw.Count()
				nRes=!(xDokumentMg=GetObjById("BDokumentMg",xDokumentZk.transakcjaTw.powiazaniaTw.item(ii).idWlascicielaTrans))
				if nRes then  error "Dokument nie załadowany"
				if ( xDokumentMg.czyWystawiony && !IntegrZatwWart(xDokumentMg, xDokumentZk.numer, 1) ) then
					if ( !((iOpcje & NIE_EKSP_OZNAK) && xDokumentMg.czyWyeksportFK) ) then
						xDekretacjeMg.Clear()
						xDekretParams = xDekretacjeMg.Params()
						xDekretParams.id = xDokumentMg.id
						xDekretacjeMg.Dekret(xDekretParams)
						if(xTypDokumentuZk.typFK == "FWZ" || xTypDokumentuZk.typFK == "FWZK")  then //nowy typ dokumentu w FK - wielowalutowy
						//ewentualne rownolegle ksiegowanie magazynowe tylko w PLN
							ZapiszZAP(xDekretacjeMg, 1, 0, 0, xDokumentMg.termin, 0, "", 0, 0)
						else
							ZapiszZAP(xDekretacjeMg, 1, 0, 0, xDokumentMg.termin, nCzyWal, xDokumentZk.waluta, 0, 0)
						endif
					else
						eksport.AddInfo("Nie można powtórnie wyeksportować zapisów do dokumentu " + xDokumentMg.numer + ".")
					endif
				endif
			next ii
		endif
		//korekta i innne korekty
		for ii=1 to ii>xDokumentZk.zwiazkiOdpDok.Count()
			if ((xDokumentZk.zwiazkiOdpDok.item(ii).dkBase == 33) && xDokumentZk.zwiazkiOdpDok.item(ii).idDk) then
				nRes=!(xDokumentMg=GetObjById("BDokumentMg",xDokumentZk.zwiazkiOdpDok.item(ii).idDk))
				if nRes then  error "Dokument nie załadowany"
				if ( xDokumentMg.czyWystawiony && !IntegrZatwWart(xDokumentMg, xDokumentZk.numer, 1) ) then
					if ( !((iOpcje & NIE_EKSP_OZNAK) && xDokumentMg.czyWyeksportFK) ) then
						xDekretacjeMg.Clear()
						xDekretParams = xDekretacjeMg.Params()
						xDekretParams.id = xDokumentMg.id
						xDekretacjeMg.Dekret(xDekretParams)

						if(xTypDokumentuZk.typFK == "FWZ" || xTypDokumentuZk.typFK == "FWZK")  then //nowy typ dokumentu w FK - wielowalutowy
						//ewentualne rownolegle ksiegowanie magazynowe tylko w PLN
							ZapiszZAP(xDekretacjeMg, 1, 0, 0, xDokumentMg.termin, 0, "", 0, 0)
						else
							ZapiszZAP(xDekretacjeMg, 1, 0, 0, xDokumentMg.termin, nCzyWal, xDokumentZk.waluta, 0, 0)
						endif
					else
						eksport.AddInfo("Nie można powtórnie wyeksportować zapisów do dokumentu " + xDokumentMg.numer + ".")
					endif
				endif
			endif
		next ii	
	endif // równoległe księgowania magazynowe
	ZapiszETRANSFERS(xDokumentZk, xDekretacjeZk)
	// rejestry VAT
	RejestryVAT(idDK)

	//DIM jest wielowalutowy, wiec czyscimy dla dokumentu walutowosc ;podobnie faktury walutowe
	//if  xDokumentZk.charakter == DIM || xDokumentZk.charakter == DKM ||	((xDokumentZk.charakter == ZVW || xDokumentZk.charakter == ZWK) && (xTypDokumentuZk.typFK == "FWZ" || xTypDokumentuZk.typFK == "FWZK"))then
	//ten warunek powinien być nie na typ dokumentu, tylko na to jak on jest obslugiwany w FK
	if xTypDokumentuZk.typFK == "DIM" || xTypDokumentuZk.typFK == "FWZ" || xTypDokumentuZk.typFK == "FWZK" then
		dst.Value("waluta") = ""
		dKurs = 0
		dst.Value("kurs") = dKurs
		dWKwota = 0
		dst.Value("wkwota") = dWKwota
	endif

	if (xIntegracja.CzyItgXML == 1 && xDokumentSp.statusRDF) then
		dst.ValidateForXML()
	else
		dst.Validate()
	endif
	if (ers.Count) then IntegrZK = ShowError( xDokumentZk.nazwa+" "+xDokumentZk.numer)

	if(IntegrZK == 0) then
		if (xIntegracja.CzyItgXML == 1 && xDokumentZk.statusRDF) then
			xmlDoc = dst.GiveXML(0)
			xParams = xfactory.NewObject("BDekretacjeXml")
			xParams.guid = xDokumentZk.guid
			xparams.tresc = xmlDoc
			xIntegracja.ZapiszXMLwRDF(xParams)
		EndIf

		If ( xIntegracja.CzyItgXML != 1 || !xDokumentZk.statusRDF ) Then
			IntegrZK = !dst.Insert()
			if (IntegrZK == 0 && xIntegracja.trybWspolpracy == 4) then
				xIntegracja.UstawDokumentRDFwBuforzeFK(xDokumentZk) // tylko dla wspólnej bazy ustawiamy status dokumentu w RDF
			endif
		EndIf
	endif

	ShowStatus(xDokumentZk.numer,idDK, IntegrZK)
EndSub

int Sub BeginProcessZK()
	TabRejVat.ClearRec()
EndSub

int Sub DoProcessZK(long idDK)
	DoProcessZK = 0
	rozUidStrona = ROZ_STRONA_MA
	int iVal, err
	int iOpcje = 0
	long ii
	Dispatch xDokZk

	Dispatch xDokMg

	nRes=!(xDokumentZk=GetObjById("BDokumentZk",idDK))
	if nRes then Error "Brak takiego rekordu w bazie DK"

	nRes = !(xDokZk=GetObjById("BDokZk",idDK))
	if nRes then error "Dokument nie załadowany"

	if ( xDokZk.czyBufor ) then
		DoProcessZK = 1 // pomijamy
		AddError("Nie można wysłać niezatwierdzonego dokumentu " + xDokumentZk.numer+".",idDK)
		Exit // nie wysyłamy dokumentów z bufora
	endif

	if ( xDokZk.czyAnulowany ) then
		DoProcessZK = 1 // pomijamy
		AddError("Nie można wysłać anulowanego dokumentu " + xDokumentZk.numer+".",idDK)
		Exit // nie wysyłamy dokumentów anulowanych
	endif

	if ( iNieIntegrOznak && xDokZk.czyWyekspFK ) then
		DoProcessZK = 1 // pomijamy
		AddError("Nie można powtórnie wysłać dokumentu " + xDokumentZk.numer+".",idDK)
		Exit // nie wysyłamy oznakowanych dokumentów
	endif

	// czy równoległe księgowanie magazynowe
	if ( iRownoKsiegMag ) then iOpcje |= ROWNOLEGLE_KSIEG_MAG

	if ( iNieIntegrOznak ) then iOpcje |= NIE_EKSP_OZNAK

	TabRejVat.ClearRec()
	DoProcessZK = IntegrZK(idDK, iOpcje)
	if	DoProcessZK then Exit	 // pomijamy

	/////////////////////////////////////////////////
	// oznaczamy wysłane dokumenty
	if ( iOznaczaj ) then
		nRes=!(xDokumentZk=GetObjById("BDokumentZk",idDK))
		if nRes then  Error "Brak takiego rekordu w bazie DK"

		nRes = !(xDokZk=GetObjById("BDokZk",idDK))
		if nRes then  error "Dokument nie załadowany"

		xDokZk.SetEkspFK()

		// dokumenty magazynowe rozliczające dokument handlowy
		if ( iRownoKsiegMag ) then
			if ( !xDokumentZk.czyKorekta )then
				xDokumentZk.transakcjaTw.powiazaniaTw.PokazujIstniejace()
				for ii=1 to ii>xDokumentZk.transakcjaTw.powiazaniaTw.Count()
					// !!! sprawdzic jak sie wysyla nie zatwierdzone wartosciowo
					nRes=!(xDokumentMg=GetObjById("BDokumentMg",xDokumentZk.transakcjaTw.powiazaniaTw.item(ii).idWlascicielaTrans))
					if nRes then  error "Dokument nie załadowany"

					if (xDokumentMg.czyWystawiony) then
						nRes = !(xDokMg=GetObjById("BDokMg",xDokumentMg.id))
						if nRes then  error "Dokument nie załadowany"

						xDokMg.SetEkspFK()
					endif
				next ii
			endif
			for ii=1 to ii>xDokumentZk.zwiazkiOdpDok.Count()
				if ((xDokumentZk.zwiazkiOdpDok.item(ii).dkBase == 33) && xDokumentZk.zwiazkiOdpDok.item(ii).idDk) then
					nRes=!(xDokumentMg=GetObjById("BDokumentMg",xDokumentZk.zwiazkiOdpDok.item(ii).idDk))
					if nRes then  error "Dokument nie załadowany"
					if (xDokumentMg.czyWystawiony) then

						nRes = !(xDokMg=GetObjByID("BDokMg",xDokumentMg.id))
						if nRes then  error "Dokument nie załadowany"

						xDokMg.SetEkspFK()
					endif
				endif
			next ii
		endif
	endif
EndSub

int Sub EndProcessZK()
EndSub

