 DELIMITER $$

DROP PROCEDURE IF EXISTS `e_ht_doc_new`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `e_ht_doc_new`(
	IN _MODE VARCHAR(250),
	IN _Key VARCHAR(38),
	IN _Rodzaj INTEGER,
	IN _Rodzaj_typ INTEGER,		
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255),
	IN _Param_D VARCHAR(255),
	IN _Param_C VARCHAR(255)
	
)
S_e_ht_doc_new: BEGIN 
	SET 
		_Key = IF(IFNULL(_Key, '') = '', NewGUID(), _Key),
		@ht.doc.Calc_Ver = IFNULL(@ht.doc.Calc_Ver, 0) 	--	2
	;
	IF (_MODE != 'ZM') THEN
	--	`opng_e`
		INSERT IGNORE INTO `opng_e`
			(GUID, tag, Rodzaj, Rodzaj_typ, DataWystaw, idnuser, Calc_Ver)
		SELECT
			_Key, -1, _Rodzaj, _Rodzaj_typ, CURRENT_DATE(), IFNULL(@session.Registration.IdnUser, @session.CheckLogonUserLogin), @ht.doc.Calc_Ver
		;
	ELSE
	--	`zmng_e`
	-- TODO dodaj TAG do opng lub inna wartość np. 'updatelevel'
		INSERT IGNORE INTO `zmng_e`
			(GUID, Rodzaj, Rodzaj_typ, DataWystaw, idnuser, Calc_Ver)
		SELECT
			_Key, _Rodzaj, _Rodzaj_typ, CURRENT_DATE(), IFNULL(@session.Registration.IdnUser, @session.CheckLogonUserLogin), @ht.doc.Calc_Ver
		;
	END IF;
END$$


DROP PROCEDURE IF EXISTS `C_HT`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `C_HT`(
	IN _MODE VARCHAR(250),
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255),
	IN _Param_C VARCHAR(255)
)
S_C_HT: BEGIN 
	IF (_MODE = '') OR (_MODE = 'init') THEN
		CALL ht_init('');
	END IF; 	--	INIT
	
END$$



/* ************************************************************************************************************************************************************************
	Narzędzia 
************************************************************************************************************************************************************************ */	
DROP PROCEDURE IF EXISTS `ht_rodzaj_update_zmienne`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ht_rodzaj_update_zmienne`(
	IN _Rodzaj INTEGER
)
/*
	CALL ht_rodzaj_update_zmienne(Rodzaj);
*/
BEGIN 
	SET 
		@ht_rodzaj_calc = TRUE,
		@ht.doc.Rodzaj = _Rodzaj
	;
	SELECT 
		o.antyrodzaj, o.grupa, o.Twtyp, o.MagTyp, o.Rztyp, o.Fntyp, IFNULL(o.wzordekr, '') AS wzordekr, o.rv_id, o.RodzajDowodu, o.ugrpGUID, 
		o.Nazwa, o.Opis, o.upr_optyp, o.upr_rodzaj,
		o.IsWaluta, o.IsRozrachunek, o.IsPozycjeVisible, o.MA_Magzyny, o.MA_Detale, o.MA_Kontrahenta, 
		o.IsKorekta, o.IsPodlegaVAT, o.IsTabelkaVatEditable, o.IsSprzedazNieKrajowa, o.IsDostawa, o.IsWlasny,
		o.Init_From_Platnik,
		o.init_datavat
	INTO
		@ht.doc.antyrodzaj, @ht.doc.Optyp, @ht.doc.Twtyp, @ht.doc.MagTyp, @ht.doc.Rztyp, @ht.doc.fntyp, @ht.doc.wzordekr, @ht.doc.rv_id, @ht.doc.RodzajDowodu, @ht.doc.ugrpGUID,
		@ht.doc.Rodzaj.Nazwa, @ht.doc.Rodzaj.Opis, @ht.doc.upr_optyp, @ht.doc.upr_rodzaj,

		@ht.doc.IsWaluta,
		@ht.doc.IsRozrachunek,
		@ht.doc.IsPozycjeVisible,
		@ht.doc.MA_Magzyny,
		@ht.doc.MA_Detale,
		@ht.doc.MA_Kontrahenta,
		@ht.doc.IsKorekta,
		@ht.doc.IsPodlegaVAT,
		@ht.doc.IsTabelkaVatEditable,
		@ht.doc.IsSprzedazNieKrajowa,
		@ht.doc.IsDostawa,
		@ht.doc.IsWlasny,
		@ht.doc.Init_From_Platnik,
		@ht.doc.init_datavat
	FROM `operdoc` o 
	WHERE
		o.Rodzaj = @ht.doc.Rodzaj
	;
END$$


DROP PROCEDURE IF EXISTS `ht_rodzaj_calc`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ht_rodzaj_calc`(
	IN _Rodzaj INTEGER
)
		/*
		CALL ht_rodzaj_calc(Rodzaj);
			@NEW.Brutto,		
			@NEW.CKwota,		
			@NEW.CKwotaWal,		
			@NEW.CWN,		
			@NEW.CRozliczone,		
			@NEW.Kurs_rozliczen,		
			@NEW.gruparozrach,		
			@NEW.gruparozrach_wymus,		
			@NEW.Waluta` INTEGER NOT NULL DEFAULT '0',		
		*/
		
S_ht_rodzaj_calc: BEGIN 
	IF IFNULL(@ht.doc.Rodzaj, -1) = _Rodzaj THEN 
		LEAVE S_ht_rodzaj_calc; 
	END IF;		-- W Y J D Ź  bo rodzaj ten sam
	
	CALL ht_rodzaj_Recalc(_Rodzaj);
END$$

DROP PROCEDURE IF EXISTS `ht_rodzaj_Recalc`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ht_rodzaj_Recalc`(
	IN _Rodzaj INTEGER
)
		/*
			@NEW.Brutto,		
			@NEW.CKwota,		
			@NEW.CKwotaWal,		
			@NEW.CWN,		
			@NEW.CRozliczone,		
			@NEW.Kurs_rozliczen,		
			@NEW.gruparozrach,		
			@NEW.gruparozrach_wymus,		
			@NEW.Waluta` INTEGER NOT NULL DEFAULT '0',		
		*/
		
BEGIN 
	SET @ht_rodzaj_calc = TRUE;
	SET @ht.doc.Rodzaj = _Rodzaj;
	--	Wstaw postawowe parametry 
	SELECT 
		o.antyrodzaj, o.grupa, o.Twtyp, o.MagTyp, o.Rztyp, o.Fntyp, IFNULL(o.wzordekr, '') AS wzordekr, o.rv_id, o.RodzajDowodu, o.ugrpGUID, 
		o.Nazwa, o.Opis, o.upr_optyp, o.upr_rodzaj, o.lang_id, o.IsKorekta, o.IsRozrachunek
	INTO
		@ht.doc.antyrodzaj, @ht.doc.Optyp, @ht.doc.Twtyp, @ht.doc.MagTyp, @ht.doc.Rztyp, @ht.doc.fntyp, @ht.doc.wzordekr, @ht.doc.rv_id, @ht.doc.RodzajDowodu, @ht.doc.ugrpGUID,
		@ht.doc.Rodzaj.Nazwa, @ht.doc.Rodzaj.Opis, @ht.doc.upr_optyp, @ht.doc.upr_rodzaj, @ht.doc.lang_id,
		@ht.doc.IsKorekta, @ht.doc.IsRozrachunek
	FROM `operdoc` o 
	WHERE
		o.Rodzaj = @ht.doc.Rodzaj
	;
	
	IF _Rodzaj = 39 THEN SET @ht.doc.Twtyp = @ht.TwRZ; END IF; -- UWAGA poprawić operdoc TwTyp bo dla 39 (inwentar.) jest zle - powinno byc rozchod
	
	SET
		@MagTyp = @ht.doc.MagTyp
	;	
	SET
		/*
		@ht.doc.MagTyp = @MagTyp :=
			IF(@ht.doc.Twtyp != @ht.TwZm,
				IF(@ht.doc.Twtyp = @ht.TwNN, @ht.mtNN, @ht.doc.Twtyp),									-- każde ale nie zamowienie
				IF(@ht.doc.Rodzaj IN (@ht.CZmOO, @ht.CZmEx, @ht.CZmZP),	
					@ht.mtRZ,
					IF(@ht.doc.Rodzaj IN (@ht.CZmDD, @ht.CZMIm),	
						@ht.mtPZ,
						@ht.mtNN
					)
				)	
			),	
		
		*/
		@ht.doc.MA_Magzyny = (@MagTyp IN (@ht.mtPZ, @ht.mtMM, @ht.mtRZ)),
		@ht.doc.MA_Detale = (@ht.doc.Optyp IN (@ht.ST, @ht.MG, @ht.ZT)),
		@ht.doc.MA_Kontrahenta = (@ht.doc.Optyp IN (@ht.ZM, @ht.ST, @ht.ZT, @ht.ZP, @ht.SI, @ht.KS, @ht.BN)) OR (@ht.doc.Rodzaj IN (@ht.CRzWZ, @ht.CPzPZ, @ht.CMGZW, @ht.CRzKW, @ht.CPzKP)),
		@ht.doc.IsKorekta = @IsKorekta := (@ht.doc.FnTyp = @ht.fnkor),
		@ht.doc.IsPodlegaVAT = (@ht.doc.Optyp IN (@ht.ZM, @ht.ST, @ht.ZT, @ht.ZP, @ht.SI)) AND (NOT @ht.doc.Rodzaj IN (@ht.CKsRu, @ht.CKsKR)),
		@ht.doc.IsWaluta = (@ht.doc.Optyp IN (@ht.ST, @ht.ZT, @ht.MG, @ht.ZM)),
		@ht.doc.IsRozrachunek = @ht.doc.IsRozrachunek OR (@ht.doc.Rztyp != @ht.Rznnn),
		@ht.doc.IsSprzedazNieKrajowa = @ht.doc.Rodzaj IN (@ht.CSpFE, @ht.CSTUE, @ht.CSTKU, @ht.CSTKE, @ht.CZmEX),		-- class function TSubOper_Operacje.GetCzyRodzajToSprzedazNieKrajowa(
		@ht.doc.IsDostawa = (@ht.doc.Rodzaj IN (@ht.CDost, @ht.CDoND, @ht.CDoNW)),
		@ht.doc.IsWlasny = (@ht.doc.Optyp IN (@ht.ST, @ht.MG, @ht.KS))
	;
	--	IsPozycjeVisible
	SET @ht.doc.IsPozycjeVisible = 
		(@ht.doc.Optyp IN (@ht.ST, @ht.MG, @ht.ZT, @ht.ZM)) 
		OR
		(@ht.doc.Rodzaj IN (@ht.CZpZI, @ht.CZpKI, @ht.CStSp))
		;
	IF NOT @ht.doc.IsPozycjeVisible AND (@session.globals.Owner IN ('RELACOM')) THEN
		SET @ht.doc.IsPozycjeVisible =
			(@ht.doc.Rodzaj IN (@ht.CWeDW, @ht.CWeDK))
		;
	END IF;
	IF NOT @ht.doc.IsPozycjeVisible THEN
		SET @ht.doc.IsPozycjeVisible =
			(@ht.doc.Rodzaj IN (@ht.CKsFv)) AND
			@session.HT.IR.ZakupPozostalyMaPozycje
		;
	END IF;
	
	--	IsTabelkaVatEditable
	IF @ht.doc.IsPodlegaVAT THEN
		SET @ht.doc.IsTabelkaVatEditable = 
			(@ht.doc.Optyp IN (@ht.ZT, @ht.ZP, @ht.SI, @ht.WE))
		;
		IF NOT @ht.doc.IsTabelkaVatEditable AND (@session.globals.Owner IN ('BALTIMA')) THEN
			SET @ht.doc.IsTabelkaVatEditable =
				(@ht.doc.Optyp IN (@ht.ST, @ht.ZP, @ht.SI))
			;
		END IF;
	ELSE
		SET @ht.doc.IsTabelkaVatEditable = FALSE;
	END IF;
	
END$$

DROP PROCEDURE IF EXISTS `ht_GET_Initial_variables`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ht_GET_Initial_variables`(
	IN _MODE VARCHAR(250),
	IN _FROM VARCHAR(250),
	IN _Key VARCHAR(38),
	IN _Rodzaj INTEGER,
	IN _Rodzaj_typ INTEGER,		
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255)
)
		/*
		CALL ht_GET_Initial_variables('before.insert', 'OP', _Key, _Rodzaj, _Rodzaj_typ, '', '');
		
		CALL ht_GET_Initial_variables('before.edit', 'OP', _Key, -1, -1, '', '');
		CALL ht_GET_Initial_variables('before.delete', 'OP', _Key, -1, -1, '', '');
		
		CALL ht_GET_Initial_variables('before.insert', 'ZM', _Key, _Rodzaj, _Rodzaj_typ, '', '');
		
		CALL ht_GET_Initial_variables('before.edit', 'ZM', _Key, -1, -1, '', '');
		CALL ht_GET_Initial_variables('before.delete', 'ZM', _Key, -1, -1, '', '');
		
		*/
		
S_ht_GET_Initial_variables: BEGIN 

	IF _MODE = 'before.insert' THEN
		CALL ht_rodzaj_Recalc(_Rodzaj);
		SET @ht.doc.Rodzaj_typ = _Rodzaj_typ;
	END IF;
	
	IF _MODE = 'before.edit' OR _MODE = 'before.delete' THEN
		IF _FROM = 'op' THEN
			SELECT
				n.Rodzaj, n.Rodzaj_typ, n.idnuser, n.datawplywu, n.status, n.Calc_Ver, d.Nazwa, d.Opis, d.upr_optyp, d.upr_rodzaj
			INTO
				@ht.doc.Rodzaj, @ht.doc.Rodzaj_typ, @ht.doc.idnuser, @ht.doc.datawplywu, @ht.doc.status, @ht.doc.Calc_Ver, @ht.doc.Rodzaj.Nazwa, @ht.doc.Rodzaj.Opis, @ht.doc.upr_optyp, @ht.doc.upr_rodzaj
			FROM `opng` n
			INNER JOIN `operdoc` d ON d.Rodzaj = n.Rodzaj
			WHERE	
				n.GUID = _Key
			;	
		ELSE
			SELECT
				n.Rodzaj, n.Rodzaj_typ, n.idnuser, n.datawplywu, n.status, n.Calc_Ver, d.Nazwa, d.Opis, d.upr_optyp, d.upr_rodzaj
			INTO
				@ht.doc.Rodzaj, @ht.doc.Rodzaj_typ, @ht.doc.idnuser, @ht.doc.datawplywu, @ht.doc.status, @ht.doc.Calc_Ver, @ht.doc.Rodzaj.Nazwa, @ht.doc.Rodzaj.Opis, @ht.doc.upr_optyp, @ht.doc.upr_rodzaj
			FROM `zmng` n
			INNER JOIN `operdoc` d ON d.Rodzaj = n.Rodzaj
			WHERE	
				n.GUID = _Key
			;	
		END IF;
		
		CALL ht_rodzaj_Recalc(@ht.doc.Rodzaj);
		SET @ht.doc.UPR_ThisIsUserRecord = (
			IFNULL(@session.Registration.IdnUser, @session.CheckLogonUserLogin) = @ht.doc.idnuser
			)
		;
	
	END IF;
		
	IF _MODE LIKE 'on.%' THEN
		IF _FROM = 'op' THEN
			SELECT
				n.Rodzaj, n.Rodzaj_typ, n.idnuser, n.datawplywu, n.status, n.Calc_Ver, d.Nazwa, d.Opis, d.upr_optyp, d.upr_rodzaj
			INTO
				@ht.doc.Rodzaj, @ht.doc.Rodzaj_typ, @ht.doc.idnuser, @ht.doc.datawplywu, @ht.doc.status, @ht.doc.Calc_Ver, @ht.doc.Rodzaj.Nazwa, @ht.doc.Rodzaj.Opis, @ht.doc.upr_optyp, @ht.doc.upr_rodzaj
			FROM `opng_e` n
			INNER JOIN `operdoc` d ON d.Rodzaj = n.Rodzaj
			WHERE	
				n.GUID = _Key
			;	
		ELSE
			SELECT
				n.Rodzaj, n.Rodzaj_typ, n.idnuser, n.datawplywu, n.status, n.Calc_Ver, d.Nazwa, d.Opis, d.upr_optyp, d.upr_rodzaj
			INTO
				@ht.doc.Rodzaj, @ht.doc.Rodzaj_typ, @ht.doc.idnuser, @ht.doc.datawplywu, @ht.doc.status, @ht.doc.Calc_Ver, @ht.doc.Rodzaj.Nazwa, @ht.doc.Rodzaj.Opis, @ht.doc.upr_optyp, @ht.doc.upr_rodzaj
			FROM `zmng_e` n
			INNER JOIN `operdoc` d ON d.Rodzaj = n.Rodzaj
			WHERE	
				n.GUID = _Key
			;	
		END IF;
		
		CALL ht_rodzaj_Recalc(@ht.doc.Rodzaj);
		SET @ht.doc.UPR_ThisIsUserRecord = (
			IFNULL(@session.Registration.IdnUser, @session.CheckLogonUserLogin) = @ht.doc.idnuser
			)
		;
	END IF;
	
END$$

DROP FUNCTION IF EXISTS `Get_ugrpguid`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `Get_ugrpguid`(
	_MODE VARCHAR(250),	
	_Default_ugrpguid VARCHAR(255)
) RETURNS VARCHAR(250)
    NO SQL
    DETERMINISTIC
BEGIN 
	/*
	SET @SYSTEM.Client.Session.log_USER.ugrpguid = 
		IFNULL(@SYSTEM.Client.Session.log_USER.ugrpguid,
			IFNULL(@session.user.CurrugrpGUID, _Default_ugrpguid))
	;
	RETURN @SYSTEM.Client.Session.log_USER.ugrpguid;
	*/ 
	RETURN
		IFNULL(@SYSTEM.Client.Session.log_USER.ugrpguid,
			IFNULL(@session.user.CurrugrpGUID, IFNULL(_Default_ugrpguid, 'ALL')))
	;
END$$


DROP FUNCTION IF EXISTS `ht_Doc_Is`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `ht_Doc_Is`(_MODE VARCHAR(250), _Rodzaj INTEGER) RETURNS BOOLEAN
    NO SQL
    DETERMINISTIC
BEGIN 
	CALL ht_rodzaj_calc(_Rodzaj);
	IF _MODE = '' THEN
		RETURN FALSE;
	ELSEIF _MODE = 'MA_Magzyny' THEN
		RETURN @ht.doc.MA_Magzyny;
	ELSEIF _MODE = 'MA_Detale' THEN
		RETURN @ht.doc.MA_Detale;
	ELSEIF _MODE = 'MA_Kontrahenta' THEN
		RETURN @ht.doc.MA_Kontrahenta;
	ELSEIF _MODE = 'IsKorekta' THEN
		RETURN @ht.doc.IsKorekta;
	ELSEIF _MODE = 'IsPodlegaVAT' THEN
		RETURN @ht.doc.IsPodlegaVAT;
	ELSEIF _MODE = 'IsWaluta' THEN
		RETURN @ht.doc.IsWaluta;
	ELSEIF _MODE = 'IsRozrachunek' THEN
		RETURN @ht.doc.IsRozrachunek;
	ELSEIF _MODE = 'IsSprzedazNieKrajowa' THEN
		RETURN @ht.doc.IsSprzedazNieKrajowa;
	ELSEIF _MODE = 'IsDostawa' THEN
		RETURN @ht.doc.IsDostawa;
	ELSEIF _MODE = 'IsWlasny' THEN
		RETURN @ht.doc.IsWlasny;
	ELSE	
		RETURN FALSE;
	END IF;	
END$$

/* ************************************************************************************************************************************************************************
	Narządko do `operdoc` 
************************************************************************************************************************************************************************ */	
DROP PROCEDURE IF EXISTS `t_ng_doc_Info_tool`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `t_ng_doc_Info_tool`(
	IN _MODE VARCHAR(250),	--	oper: INSERT, EDIT, DELETE 
	IN _Rodzaj INTEGER,
	IN _Rodzaj_Typ INTEGER,
	IN _Key VARCHAR(255),	
	IN _TableName VARCHAR(220),
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255)
	
)
/*
	CALL t_ng_doc_Info_tool('prepare', 3, 0, '', '', '', '');
	CALL t_ng_doc_Info_tool('prepare', 3, 0, '', 'opng', '', '');
*/
BEGIN 
	DECLARE _SQLText, _SQLText_NG_statement TEXT;
	
	IF _MODE = 'prepare' THEN
	
		DROP TEMPORARY TABLE IF EXISTS `t_ng_doc_Info`;
		CREATE TEMPORARY TABLE IF NOT EXISTS `t_ng_doc_Info` (
			`oper` VARCHAR(20) DEFAULT NULL COMMENT 'INSERT, EDIT, DELETE',
			`GUID` VARCHAR(38) NOT NULL DEFAULT '',
			`TableName` VARCHAR(220) DEFAULT NULL COMMENT '`opng`, `opng_e`, `zmng`, `zmng_e`',

			`KontrGUID` VARCHAR(38), 
			`idnuser` VARCHAR(100), 
			`datawplywu` DATE, 
			`status` INTEGER, 
			`Calc_Ver` INTEGER, 
			
			`_Magazyn1_Kasa` INTEGER,		
			`_Magazyn2` INTEGER,
			`_Tymczasowa` BOOLEAN,
			`_Waluta` INTEGER,
			`_OsobaGUID` VARCHAR(38), 
			`_AreaGUID` VARCHAR(38), 
			`_Input_GUID` VARCHAR(255),
			`_Param_A` VARCHAR(255),
			`_Param_B` VARCHAR(255),
			`_Param_C` VARCHAR(255),
		  
			`rodzaj` INT(11) NOT NULL DEFAULT '0',
			`grupa` INT(11) NOT NULL DEFAULT '0',
			`nazwa` VARCHAR(20) DEFAULT NULL,
			`opis` VARCHAR(50) DEFAULT NULL,
			`mask` VARCHAR(50) DEFAULT ';NNNNNN;YYYY',
			`DocFinPrint` INT(11) DEFAULT NULL,
			`DocMagPrint` INT(11) DEFAULT NULL,
			`DocFinPrintDupl` INT(11) DEFAULT NULL,
			`DocMagPrintDupl` INT(11) DEFAULT NULL,
			`wspolna` INT(11) NOT NULL DEFAULT '0',
			`valid` INT(11) DEFAULT '1',
			`wzordekr` VARCHAR(20) DEFAULT NULL,
			`mask_wewn` VARCHAR(50) NOT NULL DEFAULT '%NNNNNN/%YYYY',
			`wspolna_wewn` INT(11) NOT NULL DEFAULT '0',
			`numdok_automat` INT(11) NOT NULL DEFAULT '1',
			`numwewn_automat` INT(11) NOT NULL DEFAULT '0',
			`rv_id` INT(11) NOT NULL DEFAULT '0',
			`opis_drukowany` VARCHAR(50) NOT NULL DEFAULT '',
			`RodzajDowodu` VARCHAR(20) DEFAULT '',
			`rodzaj_op_numeracji` INT(11) DEFAULT '0',
			`ugrpGUID` VARCHAR(38) NOT NULL DEFAULT 'ALL',
			`KPR` INT(11) DEFAULT '0',
			`antyrodzaj` INT(11) DEFAULT NULL,
			`PrintAutomat` INT(11) NOT NULL DEFAULT '-1',
			`twtyp` INT(11) NOT NULL DEFAULT '4',
			`rztyp` INT(11) NOT NULL DEFAULT '0',
			`fntyp` INT(11) NOT NULL DEFAULT '0',
			`upr_optyp` VARCHAR(50) NOT NULL DEFAULT '',
			`upr_rodzaj` VARCHAR(50) NOT NULL DEFAULT '',
			`MagTyp` INT(11) DEFAULT '0',
			`IsWaluta` INT(11) NOT NULL DEFAULT '0',
			`IsRozrachunek` INT(11) NOT NULL DEFAULT '0',
			`IsPozycjeVisible` INT(11) NOT NULL DEFAULT '0',
			`MA_Magzyny` INT(11) NOT NULL DEFAULT '0',
			`MA_Detale` INT(11) NOT NULL DEFAULT '0',
			`MA_Kontrahenta` INT(11) NOT NULL DEFAULT '0',
			`IsKorekta` INT(11) NOT NULL DEFAULT '0',
			`IsPodlegaVAT` INT(11) NOT NULL DEFAULT '0',
			`IsTabelkaVatEditable` INT(11) NOT NULL DEFAULT '0',
			`IsSprzedazNieKrajowa` INT(11) NOT NULL DEFAULT '0',
			`IsDostawa` INT(11) NOT NULL DEFAULT '0',
			`IsWlasny` INT(11) NOT NULL DEFAULT '0',
			
			`Rodzaj_Typ` INT(11) NOT NULL DEFAULT '0',
			`NazwaEx` VARCHAR(50) DEFAULT '',
			`OpisEx` VARCHAR(150) DEFAULT '',
			`sys` INT(11) DEFAULT '0',
			`disabled` INT(11) DEFAULT '0',
			`status_before` INT(11) DEFAULT '-1',
			`status_after` INT(11) DEFAULT '-1',
			`Instancje_Kreowanie` INT(11) DEFAULT NULL,
			`Instancje_Likwidacja` INT(11) DEFAULT NULL,
			
			`doc_ReadOnly` INT(11) DEFAULT 0,
			`doc_ReadOnly_Msg` VARCHAR(255) DEFAULT '',
						
			`doc_DataZabrOper_Status` VARCHAR(255) DEFAULT '',
			`doc_DataZabrOper_Msg` VARCHAR(255) DEFAULT '',
						
			`doc_UprOK` INT(11) DEFAULT 0,
			`doc_Upr_Msg` VARCHAR(255) DEFAULT '',
			`doc_UPR_ThisIsUserRecord` INT(11) DEFAULT 0
			
			
			/*
			doc_ReadOnly,
			doc_ReadOnly_Msg,
						
			doc_DataZabrOper_Status,	--	"" lub "OK", "ReadOnly", "Info"
			doc_DataZabrOper_Msg,
						
						
			doc_UprOK,
			doc_Upr_Msg
			*/
			
		)
		;
	END IF;	
	
	IF _MODE != 'prepare' THEN
		CALL t_ng_doc_Info_tool('prepare', 0, 0, '', '', '', '');
		
		IF IFNULL(_Key, '') != '' THEN

			SET _SQLText = 
			'
			INSERT INTO `t_ng_doc_Info`
				SELECT 
					''#oper#'' AS oper,
					''_Key'' AS GUID,
					''#TableName#'' AS TableName,
					
					n.KontrGUID AS KontrGUID, 
					n.idnuser, n.datawplywu, n.status, n.Calc_Ver,
					#ng_statement#
					'''' AS _Input_GUID,
					'''' AS _Param_A,
					'''' AS _Param_B,
					'''' AS _Param_C,
					
					o.*,
					p.Typ AS Rodzaj_Typ,
					p.Nazwa AS NazwaEx,
					p.Opis AS OpisEx,
					p.sys,
					p.disabled,
					p.status_before,
					p.status_after,
					(p.status_before = -1 AND p.status_after = 0) AS Instancje_Kreowanie, 
					(p.status_before = 0 AND p.status_after = -1) AS Instancje_Likwidacja,
					
					0 AS doc_ReadOnly,
					'''' AS doc_ReadOnly_Msg,
								
					'''' AS doc_DataZabrOper_Status,
					'''' AS doc_DataZabrOper_Msg,
								
					0 AS doc_UprOK,
					'''' AS doc_Upr_Msg,
					IFNULL((
						IFNULL(@session.Registration.IdnUser, @session.CheckLogonUserLogin) = n.idnuser
					), 0) AS doc_UPR_ThisIsUserRecord
				FROM `#TableName#` n
				INNER JOIN `operdoc` o ON o.Rodzaj = n.Rodzaj
				LEFT JOIN `operdoc_typy` p ON p.Rodzaj = o.Rodzaj AND p.Typ = n.Rodzaj_Typ
				WHERE
					n.GUID = ''_Key''
					
			;
			';
			
			SET _SQLText = REPLACE(_SQLText, '#TableName#', _TableName);
			SET _SQLText = REPLACE(_SQLText, '#oper#', _MODE);
			IF _TableName IN ('opng', 'opng_e') THEN
				SET _SQLText_NG_statement = 
				'
					IF(o.Grupa = 6, n.nrkasy, n.ZMagazynu) AS _Magazyn1_Kasa,		
					DoMagazynu AS _Magazyn2,
					n.Tymczasowa AS _Tymczasowa,
					n.Waluta AS _Waluta,
					n.OsobaGUID AS _OsobaGUID, 
					n.AreaGUID AS _AreaGUID, 
				'
				;
			ELSE
				SET _SQLText_NG_statement = 
				'
					n.idnmagazyn AS _Magazyn1_Kasa,		
					n.MagazynWys AS _Magazyn2,
					n.Tymczasowa AS _Tymczasowa,
					n.Waluta AS _Waluta,
					n.OsobaGUID AS _OsobaGUID, 
					n.AreaGUID AS _AreaGUID, 
				'
				;
			END IF;
			
			SET _SQLText = REPLACE(_SQLText, '#ng_statement#', _SQLText_NG_statement);
			SET _SQLText = REPLACE(_SQLText, '_Key', _Key);
			
			SET @_SQLText = _SQLText;
			CALL _ExecuteCmd(_SQLText, @Error);
			
		ELSE
			INSERT INTO `t_ng_doc_Info`
				SELECT 
					_MODE AS oper,
					'' AS GUID,
					_TableName AS TableName,

					'' AS KontrGUID, 
					'' AS idnuser, NULL AS datawplywu, 0 AS status, 0 AS Calc_Ver,
					
					0 AS _Magazyn1_Kasa,		
					0 AS _Magazyn2,
					0 AS _Tymczasowa,
					0 AS _Waluta,
					'' AS _OsobaGUID, 
					'' AS _AreaGUID, 
					'' AS _Input_GUID,
					'' AS _Param_A,
					'' AS _Param_B,
					'' AS _Param_C,
					
					o.*,
					p.Typ AS Rodzaj_Typ,
					p.Nazwa AS NazwaEx,
					p.Opis AS OpisEx,
					p.sys,
					p.disabled,
					p.status_before,
					p.status_after,
					(p.status_before = -1 AND p.status_after = 0) AS Instancje_Kreowanie, 
					(p.status_before = 0 AND p.status_after = -1) AS Instancje_Likwidacja,
					
					0 AS doc_ReadOnly,
					'' AS doc_ReadOnly_Msg,
								
					'' AS doc_DataZabrOper_Status,
					'' AS doc_DataZabrOper_Msg,
								
					0 AS doc_UprOK,
					'' AS doc_Upr_Msg,
					1 AS doc_UPR_ThisIsUserRecord
				FROM `operdoc` o 
				LEFT JOIN `operdoc_typy` p ON p.Rodzaj = o.Rodzaj AND p.Typ = _Rodzaj_Typ
				WHERE
					o.Rodzaj = _Rodzaj
			;
		
		END IF;

	END IF;	
	
END$$


DROP PROCEDURE IF EXISTS `doc_getInfo`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `doc_getInfo`(
	IN _MODE VARCHAR(250),
	IN _Key VARCHAR(255),	
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255)
	
)
/*
	zwraca wartości w operdoc
	z rekordu opng lub opng_e
		CALL doc_getInfo('opng_e', @IdnOper, '', '');
		CALL doc_getInfo('opng', @IdnOper, '', '');
		CALL doc_getInfo('opng_e', @IdnOper, '', '');
	
*/
BEGIN 
	IF _MODE = 'opng_e' THEN
		SELECT 
			o.*,
			p.*,
			(status_before = -1 AND status_after = 0) AS Instancje_Kreowanie, 
			(status_before = 0 AND status_after = -1) AS Instancje_Likwidacja 
		FROM `opng_e` n
		INNER JOIN `operdoc` o ON o.Rodzaj = n.Rodzaj
		LEFT JOIN `operdoc_typy` p ON p.Rodzaj = o.Rodzaj AND p.Typ = n.Rodzaj_Typ
		WHERE
			n.GUID = _Key
			
		;
	END IF;	
	IF _MODE = 'opng' THEN
		SELECT 
			o.*,
			p.*,
			(status_before = -1 AND status_after = 0) AS Instancje_Kreowanie, 
			(status_before = 0 AND status_after = -1) AS Instancje_Likwidacja 
		FROM `opng` n
		INNER JOIN `operdoc` o ON o.Rodzaj = n.Rodzaj
		LEFT JOIN `operdoc_typy` p ON p.Rodzaj = o.Rodzaj AND p.Typ = n.Rodzaj_Typ
		WHERE
			n.GUID = _Key
			
		;
	END IF;	
END$$

DROP PROCEDURE IF EXISTS `operdoc_init`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `operdoc_init`(
	IN _MODE VARCHAR(250)
)
/*
	uzupełnienie wartości w operdoc
	np.
	CALL operdoc_init('is*');
	
DROP TABLE `_operdoc`;
CREATE TABLE `_operdoc` LIKE  `operdoc`;
INSERT INTO `_operdoc` SELECT * FROM `operdoc`;


ALTER TABLE `_operdoc` 
   ADD COLUMN `IsWaluta` INT(11) DEFAULT '0' NOT NULL,
   ADD COLUMN `IsRozrachunek` INT(11) DEFAULT '0' NOT NULL,
   ADD COLUMN `IsPozycjeVisible` INT(11) DEFAULT '0' NOT NULL,
   ADD COLUMN `MA_Magzyny` INT(11) DEFAULT '0' NOT NULL,
   ADD COLUMN `MA_Detale` INT(11) DEFAULT '0' NOT NULL,
   ADD COLUMN `MA_Kontrahenta` INT(11) DEFAULT '0' NOT NULL,
   ADD COLUMN `IsKorekta` INT(11) DEFAULT '0' NOT NULL,
   ADD COLUMN `IsPodlegaVAT` INT(11) DEFAULT '0' NOT NULL,
   ADD COLUMN `IsTabelkaVatEditable` INT(11) DEFAULT '0' NOT NULL,
   ADD COLUMN `IsSprzedazNieKrajowa` INT(11) DEFAULT '0' NOT NULL,
   ADD COLUMN `IsDostawa` INT(11) DEFAULT '0' NOT NULL,
   ADD COLUMN `IsWlasny` INT(11) DEFAULT '0' NOT NULL
;   

	SELECT * FROM `_operdoc` ;
	CALL operdoc_init('is*');
	CALL operdoc_init('NettoDoRozrachXXX');
	
	Wstawianie masek do `erp_obj_counters_masks` ...
	CALL operdoc_init('operdoc_typy->Counters.Mask.Like.Rodzaj=0');
*/
S_operdoc_init:BEGIN 

	IF _MODE = 'operdoc_typy->Counters.Mask.Like.Rodzaj=0' THEN
		DROP TEMPORARY TABLE IF EXISTS `t_operdoc_typy_R_0`; 
		CREATE TEMPORARY TABLE `t_operdoc_typy_R_0` 
			SELECT * FROM `operdoc_typy` WHERE Typ <> 0 ORDER BY Rodzaj
		; 
						--	SELECT * FROM `t_operdoc_typy_R_0`;
		DROP TEMPORARY TABLE IF EXISTS `t_erp_obj_counters_masks_R_0`; 
		CREATE TEMPORARY TABLE `t_erp_obj_counters_masks_R_0` 
		SELECT
			opt.Typ, obm.*
		FROM `t_operdoc_typy_R_0` opt, `erp_obj_counters_masks` obm
		WHERE
			obm.Rodzaj = opt.Rodzaj
			AND obm.Podrodzaj = 0
			AND NOT objType IN ('oper', 'oper_wewn')
		ORDER BY Rodzaj 
		;
		UPDATE `t_erp_obj_counters_masks_R_0` 
		SET PodRodzaj = Typ
		;
		ALTER TABLE `t_erp_obj_counters_masks_R_0` DROP COLUMN `Typ`;
		INSERT IGNORE INTO `erp_obj_counters_masks`
			SELECT * FROM `t_erp_obj_counters_masks_R_0` ORDER BY Rodzaj
		; 
		LEAVE S_operdoc_init;
	END IF;
	
	CALL _Session_Refresh_Variables('', '', '');
	CALL C_HT('', '', '', '');

	IF _MODE = 'NettoDoRozrachXXX' THEN
		UPDATE `operdoc` od
		SET
			od.NettoDoRozrachWal = 
			IF(NOT (
				((od.grupa IN (@ht.ST, IF(@session.globals.Owner = 'Stanpol', @ht.ZP, @ht.ST))) AND @session.HT.IR.Sprzedaz_export_BruttoWal_do_rozrach)
				OR 
				((od.Rodzaj IN (@ht.CZkFV,@ht.CZkRU,@ht.CZkKF,@ht.CZkKR)) AND @session.HT.IR.Zakup_krajowy_walucie_Brutto_do_rozrach) 
				),
				1,
				od.NettoDoRozrachWal
			)
		WHERE
			TRUE
			AND od.ISRozrachunek
			AND od.grupa IN (@ht.ZT, @ht.ST, @ht.SI, @ht.ZP, @ht.WE)
		;
		
	END IF;
	
	IF _MODE = 'is*' THEN
	/* 	
		uzupełnienie wartości w operdoc ISxxx
	*/
		BEGIN
			DECLARE _Rodzaj VARCHAR(38);
			
			DECLARE done BOOL DEFAULT FALSE;
			DECLARE c_proc CURSOR FOR
				SELECT 
					Rodzaj
				FROM `operdoc`
				;
			DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
			OPEN c_proc;
			loop_IS: LOOP
				FETCH c_proc INTO
					_Rodzaj
				;
				IF done THEN
					LEAVE loop_IS;
				ELSE
					--	kolejny rekord
					CALL ht_rodzaj_Recalc(_Rodzaj);
					UPDATE `operdoc` o
					SET
						o.IsWaluta = @ht.doc.IsWaluta,
						o.IsRozrachunek = @ht.doc.IsRozrachunek,
						o.IsPozycjeVisible = @ht.doc.IsPozycjeVisible,
						o.MA_Magzyny = @ht.doc.MA_Magzyny,
						o.MA_Detale = @ht.doc.MA_Detale,
						o.MA_Kontrahenta = @ht.doc.MA_Kontrahenta,
						o.IsKorekta = @ht.doc.IsKorekta,
						o.IsPodlegaVAT = @ht.doc.IsPodlegaVAT,
						o.IsTabelkaVatEditable = @ht.doc.IsTabelkaVatEditable,
						o.IsSprzedazNieKrajowa = @ht.doc.IsSprzedazNieKrajowa,
						o.IsDostawa = @ht.doc.IsDostawa,
						o.IsWlasny = @ht.doc.IsWlasny
					WHERE
						o.Rodzaj = _Rodzaj
					;
				END IF;
			END LOOP;
			CLOSE c_proc;
		END;
	
	END IF;

	
END$$

/* ************************************************************************************************************************************************************************
	inicjalne oraz `t_ht_ngpo_transact` 
************************************************************************************************************************************************************************ */	

DROP PROCEDURE IF EXISTS `ht_init_const`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ht_init_const`(
	IN _MODE VARCHAR(250)
)
/*
	CALL ht_init_const('');
*/
BEGIN 
	SET
	-- 	Strony 
		@ht.CSTR_WN = 1,  -- pierwsza i True
		@ht.CSTR_MA = 0,  -- druga i False
		
	--	RODZAJE OPERACJI REPREZENTOWANYCH W tablicy OPNG 
		@ht.CFIRSTOP = 00,
		@ht.CSpBR = 00,			--  Sprzedaż bezrachunkowa - paragon lub zestaw.sprz.
		@ht.CSpFV = 01,			--  Sprzedaż - Faktura VAT 
		@ht.CSpRU = 02,			--  Sprzedaż - r-k uproszczony
		@ht.CSpKF = 03,			--  Sprzedaż - korekta faktury VAT 
		@ht.CSpKR = 04,			--  Sprzedaż - korekta r-ku 

		@ht.CZkFV = 05,			--  Zakup towarów - Faktura VAT 
		@ht.CZkRU = 06,			--  Zakup towarów - r-k uproszczony
		@ht.CZkKF = 07,			--  Zakup towarów - korekta faktury VAT 
		@ht.CZkKR = 08,			--  Zakup towarów - korekta r-ku 

		@ht.CMMMM = 09,			--  MM 
		@ht.CRzWZ = 10,			--  WZ 
		@ht.CRzRW = 11,			--  RW 
		@ht.CPzPZ = 12,			--  PZ 
		@ht.CPzPW = 13,			--  PW 
		@ht.CRzKR = 14,			--  - RW 
		@ht.CPzKW = 15,			--  - PW 
		@ht.CRzKW = 16,			--  - WZ 
		@ht.CPzKP = 17,			--  - PZ 
		@ht.CRzKZ = 18,			--  KZ 
		@ht.CRzKK = 19,			--  - KZ 

		@ht.CKPKP = 20,			--  KP 
		@ht.CKWKW = 21,			--  KW 
		@ht.CRKBO = 22,			--  BO raportu kasowego 

		@ht.CKsFv = 23,			--  Zakup pozostały (kosztowe) FV 
		@ht.CKsRu = 24,			--  Zakup pozostały (kosztowe) r-k uproszczony
		@ht.CKsKF = 25,			--  Korekta zakupu pozostały (kosztowe) FV 
		@ht.CKsKR = 26,			--  Korekta zakupu pozostały (kosztowe) r-k uproszczony

		@ht.CZmOO = 27,			--  Zamówienie od odbiorcy 
		@ht.CZmDD = 28,			--  Zamówienie u dostawcy 

		@ht.CSiFv = 29,			--  Sprzedaż inna - Faktura VAT 
		@ht.CSiRu = 30,			--  Sprzedaż inna - r-k uproszczony
		@ht.CSiKF = 31,			--  Sprzedaż inna - korekta faktury VAT 
		@ht.CSiKR = 32,			--  Sprzedaż inna - korekta r-ku 
		@ht.CWeDW = 33,			--  Dowód wewnetrzny 
		@ht.CWeSM = 34,			--  Dowód wewnetrzny ????????????
		@ht.CWeDK = 35,			--  Korekta dowodu wewnetrznego 

		@ht.CBNWN = 36,			--  Przychód bankowy 
		@ht.CBNMA = 37,			--  Rozchód bankowy 
		@ht.CBNBO = 38,			--  BO banku WN

		@ht.CInwn = 39,			--  Inwentaryzacja 

		@ht.CPrMo = 40,			--  Produkcja - montaż 
		@ht.CPrDe = 41,			--  Produkcja - demontaż 
		@ht.CKstr = 42,			--  Kosztorys 
		
		@ht.CRoWn = 43,			--  Rozrachunki - należności 
		@ht.CRoMa = 44,			--  Rozrachunki - zobowiazanie 
		@ht.CRoNO = 45,			--  Rozrachunki - nota odsetkowa 
		
		@ht.CSePr = 46,			--  Serwis - przyjęcie 
		@ht.CSeWy = 47,			--  Serwis - wydanie 
		@ht.CRoSW = 48,			--  Rozrachunki - korekta nalezności
		@ht.CRoSM = 49,			--  Rozrachunki - korekta zobowiazania 
		
		@ht.CSpFE = 50,			--  Sprzedaż - Faktura VAT Eksportowa 
		@ht.CMgBO = 51,			--  BO magazynu 
		@ht.CZmEX = 52,			--  Zamówienie eksportowe 
		@ht.CSeNa = 53,			--  Serwis - przyjecie z naprawy 
		@ht.CSeLw = 54,			--  Serwis - lista wysyłkowa 
		@ht.CRoSN = 55,			--  Rozrachunki spłata należnosci 
		@ht.CRoSZ = 56,			--  Rozrachunki spłata zobowiązania 
		@ht.CPrZ1 = 57,			--  Zestawienie PW i RW dla CPrMO - operacja "wirtualna" :-) 
		@ht.CPrZ2 = 58,			--  Zestawienie PrMO dla ZM       - operacja "wirtualna" :-) 
		@ht.CPrKA = 59,			--  Produkcja - Kalkulacja 
		@ht.CMgPc = 60,			--  Przecena 
		@ht.CSPLI = 61,			--  Sprzedaż nie podlegająca VAT (licencje)
		@ht.CZkIm = 62,			--  Zakup importowy
		@ht.CBNBM = 63,			--  Bank BO MA (bilans otwarcia debetowy) 
		@ht.CDost = 64,
		@ht.CDoND = 65,
		@ht.CDoNW = 66,
		@ht.CInNW = 67,			--  Inwentaryzacja nadwyżka - czyli w Mag jest mniej niż w systemie zatem PZ
		@ht.CInND = 68,			--  Inwentaryzacja niedobór - czyli w Mag jest więcej niż w systemie zatem RZ
		@ht.CSpSp = 69,
		@ht.CMGZW = 70,			--  Zwrot towaru
		@ht.CZGKC = 71,
		@ht.CZGNM = 72,
		@ht.CZmZP = 73,			--  Zamówienie - zlecenie produkcyjne 
		@ht.CZmIm = 74,			--  Zamówienie importowe 
		@ht.CZpZI = 75,			--  Zakup inwestycyjny
		@ht.CZGRE = 76,
		@ht.CStZW = 77,			--  Zmiana wartość środka trwałego
		@ht.CZpKI = 78,			--  Zakup inwestycyjny - korekta faktury VAT 
		@ht.CUmowa = 79,			--  Wirtualny rodzaj dokumentu Umowa 
		@ht.CSTUE = 80,			--  Sprzedaż wewnątrzwspólnotowa T i U
		@ht.CZTUE = 81,			--  Nabycie wewnątrzwspólnotowe  
		@ht.CZPUE = 82,			--  Nabycie wewnątrzwspólnotowe  usług 
		@ht.CWeFV = 83,			--  Sprzedaż wewnętrzna 
		@ht.CWeKF = 84,			--  Sprzedaż wewnętrzna - korekta 
		@ht.CSTKU = 85,			--  Sprzedaż wewnątrzwspólnotowa T i U - korekta 
		@ht.CZTKU = 86,			--  Nabycie wewnątrzwspólnotowe - korekta 
		@ht.CZmOF = 87,			--  Oferty w zamowieniach 

		@ht.CROZN = 88,      	--  korekta spłaty nalezności  
		@ht.CROZZ = 89,      	--  korekta spłaty zobowiązania  

		@ht.CSTKE = 90,      	--  korekta faktury eksportowej 

		@ht.CZMWE = 91,      	--  Zamówienie wewnętrzne - realizowane MM-ką

		@ht.CStSp = 92,      	--  Sprzedaz środka trwałego
		@ht.CStLs = 93,      	--  Likwidacja środka trwałego

		@ht.CStZA = 94,      	--  Zmina miejsca środka trwałego
		@ht.CStZU = 95,      	--  Zmiana uzytkownika środka trwałego
		@ht.CStIN = 96,      	--  Inwentaryzacja środka trwałego

		@ht.CSeKo = 97,     	--  Serwis Operacja kontrolna

		@ht.CZmPM  = 98,      	--  Przekaz międzywydziałowy
		@ht.CPrPM  = 99,      	--  Produkcja - Przekaz międzywydziałowy rozliczający CZmPM

		@ht.CPrOD  = 100,      	--  Produkcja - Karta odstepstw Obun
		@ht.CZlecKoszt = 101,  	--  Zlecenia kosztowe

		@ht.CMM_MP = 102,  	--  Przesunicie magazynowe - przychd
		@ht.CMM_MR = 103,  	--  Przesunicie magazynowe - rozchd
		@ht.CKsNN = 104,  	--  Zakup KANCELARIA
		@ht.CST_KZ = 105,  	--  Faktura korygujca zbiorcza
		
		@ht.CZM_ZP0 = 106,  	--  Zlecenie produkcyjne +
		@ht.CZM_ZP1 = 107,  	--  Zlecenie produkcyjne -

		@ht.CZmZA = 108,		--  Zapotrzebowanie
		
		@ht.CZMPN = 109,		--  Zam. plan. sprzed
		@ht.CZAOF = 110,		--  Zapytanie ofertowe
		@ht.CKNIN = 111,		--  inne dokumenty kancelaryjne
		
		@ht.CLASTOP = @ht.CKNIN,
		
	-- 	Op typ
		@ht.ST = 0,	
		@ht.ZT = 1,
		@ht.MG = 2,
		@ht.SI = 3,
		@ht.ZP = 4,
		@ht.WE = 5,
		@ht.KS = 6,
		@ht.ZM = 7,		
		@ht.PR = 8,
		@ht.BN = 9,
		@ht.KT = 10,
		@ht.RO = 11,
		@ht.SE = 12,
		@ht.KA = 13,
		@ht.ZG = 14,
		@ht.TS = 15,
		@ht.UM = 16,
		@ht.NN = 17,
		
	-- 	FN typ
		@ht.FnNrm = 0,
		@ht.FnKor = 1,
		@ht.FnInw = 2,
		@ht.FnZam = 3,
		@ht.FnNnn = 4,
		@ht.FnKst = 5,
		@ht.FnPro = 6,
		@ht.FnSer = 7,
		@ht.FnKal = 8,
		@ht.FnPrz = 9,

	-- 	RZ typ
		@ht.Rznnn = 0, 		-- nieokreslony (nie rozrachunek
		@ht.Rz_NL = 1, 		-- należność - nam winien WN		
		@ht.RzSNL = 2, 		-- korekta należności -WN czyli MA (my zwracamy)
		@ht.Rz_ZB = 3, 		-- zobowiązanie - my winni MA
		@ht.RzSZB = 4, 		-- korekta zobowiązania -MA czyli WN
		@ht.Rz_SN = 5, 		-- spłata nalezności MA
		@ht.Rz_SZ = 6, 		-- spłata zobowiązania WN
		@ht.RzSSN = 7, 		-- korekta spłaty nalezności -MA
		@ht.RzSSZ = 8, 		-- korekta spłaty zobowiązania -WN

	--	Tw typ	
		@ht.TwPZ = 0, 
		@ht.TwMM = 1, 
		@ht.TwRZ = 2, 
		@ht.TwZm = 3,
		@ht.TwNN = 4,
		
	--	Mag typ	
		@ht.mtPZ = 0, 
		@ht.mtMM = 1, 
		@ht.mtRZ = 2, 
		@ht.mtNN = 3,
		@ht.mtNNN = 4,
		@ht.mtPlanPZ = 10, 
		@ht.mtPlanRZ = 12,
		
	/*
		Pole nierozliczony znaczenie:
		0-rozliczony, 1 czesciowo, 2 nierozliczony
		czyli odwrotnie niż w dotychczasowym OnCalc
	*/
		@ht.CNierozliczony_0 =   0,		-- rozliczony
		@ht.CNierozliczony_50 =  1,		-- czesciowo
		@ht.CNierozliczony_100 = 2,		-- nierozliczony

		@ht.COpTypSortTyp_NONE                       = 0,
		@ht.COpTypSortTyp_Usluga_TreeNode_Symbol     = 1,
		@ht.COpTypSortTyp_Usluga_Symbol              = 2,
		@ht.COpTypSortTyp_BY_zmpo_IF_exists          = 3,
		
	--	standardowe przeliczenie cena net.->rabat->wart.wal.
		@ht._NB_CN_WN  = 0, 	-- CRodzaj_Przeliczenia_CenaNet_NettoWal
	--	z wart.wal->(rabat nie ruszany)->cena net.	
		@ht._NB_WN_CN  = 1, 	-- CRodzaj_Przeliczenia_NettoWal_CenaNet
	--	z wart.wal->rabat	
		@ht._NB_WN_R   = 2, 	-- CRodzaj_Przeliczenia_NettoWal_Rabat
	--	fiskalne z brutto->netto  (fiskalne)	z ceny netto -> wrt brutto, -> ceny brutto (zaokr), -> i dalej jak dla _BN_CB_WN
		@ht._BN_CN_WN  = 3, 	-- CRodzaj_Przeliczenia_Brutto_Netto
	--	z wart brutto->netto							
		@ht._BN_WB_WN  = 4, 	-- CRodzaj_Przeliczenia_Brutto_Netto2
	--	z ceny brutto->netto	
		@ht._BN_CB_WN  = 5, 	-- CRodzaj_Przeliczenia_CenaBrutto_Netto
	--	z wart.wal->(rabat nie ruszany)->cena net. wart vat edytowana	
		@ht._BN_WN_CNve  = 6 	-- CRodzaj_Przeliczenia_NettoWal_CenaNet_VatEdyt

		
		
	;	


--	Status operacji
	SET
		@COPNG_Status_NONE             = 0,
		@COPNG_Status_WYSLANA          = 1,
		@COPNG_Status_DRUKOWANA        = 3,
		@COPNG_Status_ZREALIZOWANA     = 2,
		@COPNG_Status_ANULOWANA        = 4,
		@COPNG_Status_WYDANE_Z_MAG     = 8,
		@COPNG_Status_PAKOWANA         = _varInt(0x10)
	;
	SET
		@COpngStatus_Maska          = _varInt(0xFF00),	
		@COpngStatus_Aktywna        = @COPNG_Status_NONE,	-- 0000
		@COpngStatus_Wyslana        = @COPNG_Status_WYSLANA,	-- 0001
		@COpngStatus_Zrealizowana   = @COPNG_Status_ZREALIZOWANA | @COPNG_Status_WYSLANA,	-- $0003
		@COpngStatus_Anulowana      = @COPNG_Status_ANULOWANA, -- 0100
		@COpngStatus_WYDANE_Z_MAG   = @COPNG_Status_WYDANE_Z_MAG,	-- 1000
		@COpngStatus_PAKOWANA       = @COPNG_Status_PAKOWANA,	-- 1000
		@COpngStatus_NIE_Aktywna    = _varInt(0x00FF)    -- 1111
	;
	SET
		@COpngStatus_Zamknieta      = @COpngStatus_Zrealizowana,
		@COPNG_Status_BankWczytany  = @COPNG_Status_WYSLANA,
		@cOpNgStatusTrans_Sent      = @COPNG_Status_WYSLANA,
		@cOpNgStatusTrans_NotSent   = @COPNG_Status_NONE
	;
END$$

DROP PROCEDURE IF EXISTS `ht_init`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ht_init`(
	IN _MODE VARCHAR(250)
)
/*
	CALL ht_init('');
*/
BEGIN 
	CALL ht_init_const('');
	
	SET @ht.doc.Rodzaj = -1; 
	CALL ht_rodzaj_calc(0);
	CALL ht_rodzaj_calc(-1);
	SET @ht.doc.Rodzaj = -1; 
	
	CALL ht_vat_init('');
	CALL ngpo_init('');
	CALL oppo_calc_init('');
	CALL stztmg_init('');
	CALL zamowienia_init('');
	CALL mag_delta_init('');
	IF @ht.ZezwalajNaGrupowaniePozycji IS NULL THEN
		SET @ht.ZezwalajNaGrupowaniePozycji = EXISTS(
			SELECT od.Rodzaj FROM `operdoc` od WHERE od.ZezwalajNaGrupowaniePozycji <> 0
		);
	END IF;
	-- bylo CALL CenyRabaty_init('');
	-- jest ...
	CALL cenyrabat_edit_info('INIT', '', '', '', '', '', '', '');		
	-- CALL oppo_corr_init('');
	
END$$



DROP PROCEDURE IF EXISTS `C_HT__INTNET`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `C_HT__INTNET`(
	IN _MODE VARCHAR(150),
	IN _OpTyp INTEGER,
	IN _Rodzaj INTEGER,
	IN _PodRodzaj INTEGER,
	IN _Param_A VARCHAR(50),	
	IN _Param_B VARCHAR(50)	
)
/*------------------------------------------------------------------------------------------------------------------------------------------------------------------	
		
		
		
------------------------------------------------------------------------------------------------------------------------------------------------------------------*/	
S_erp_obj_counters__INTNET: BEGIN
	IF _MODE = 'select.distinct.OpTypy' THEN
	/* *************************************************************************************************************************************************************
		Zwraca lewy panel do definicji masek
		CALL C_HT__INTNET('select.distinct.OpTypy', '0', '0', '0', '', '');		
	**************************************************************************************************************************************************************/
		SELECT 
			-- ot.*,
			ot.OpTyp,
			ot.Nazwa AS Opis,
			_VarStr('') AS upr_optyp,
			_VarInt(0) AS u_optyp 
		FROM `v_optypy` ot
		ORDER BY OpTyp
		;
		/*
		SELECT 
			_VarInt(sp.Value) AS OpTyp,
			sp.DisplayValue AS Opis,
			_VarStr('') AS upr_optyp,
			_VarInt(0) AS u_optyp
		FROM `slowniki_pierwotne` sp
		WHERE 
			sp.slownik_GUID = 'optyp'
		ORDER BY OpTyp
		;
		*/
	END IF;

	IF _MODE = 'select.operdoc' THEN
	/* *************************************************************************************************************************************************************
		Zwraca lewy panel do definicji masek
		CALL C_HT__INTNET('select.operdoc', '0', '0', '0', '', '');		
	**************************************************************************************************************************************************************/
		SELECT 
			ot.Opis AS GrupaOpis,
			IF(IFNULL(odt.Nazwa, '') != '', odt.Nazwa, od.Nazwa) AS Nazwa_op, 
			IF(IFNULL(odt.Opis, '') != '', odt.Opis, od.Opis) AS Opis_op,
			od.*,
			odt.Typ,
			odt.sys,
			odt.disabled,
			odt.status_before,
			odt.status_after,
			odt.substatuses_before,
			odt.substatus_after,
			odt.Counter
		FROM `operdoc` od 
		LEFT JOIN `operdoc_typy` odt ON odt.Rodzaj = od.Rodzaj
		INNER JOIN `v_optypy` ot ON ot.Optyp = od.Grupa
		;
		/*
		SELECT 
			sp.DisplayValue AS GrupaOpis,
			IF(IFNULL(odt.Nazwa, '') != '', odt.Nazwa, od.Nazwa) AS Nazwa_op, 
			IF(IFNULL(odt.Opis, '') != '', odt.Opis, od.Opis) AS Opis_op,
			od.*,
			odt.Typ,
			odt.sys,
			odt.disabled,
			odt.status_before,
			odt.status_after,
			odt.substatuses_before,
			odt.substatus_after,
			odt.Counter
		FROM `operdoc` od 
		LEFT JOIN `operdoc_typy` odt ON odt.Rodzaj = od.Rodzaj
		INNER JOIN `slowniki_pierwotne` sp ON sp.slownik_GUID = 'optyp' AND _VarInt(sp.Value) = od.Grupa
		;
		*/
	END IF;
	
	IF _MODE = 'select.erp_statusy_biblioteczne' THEN
	/* *************************************************************************************************************************************************************
		Zwraca lewy panel do definicji masek
		CALL C_HT__INTNET('select.erp_statusy_biblioteczne', '0', '0', '0', '', '');		
	**************************************************************************************************************************************************************/
		SELECT * FROM `erp_statusy_biblioteczne` sb WHERE deleted = 0;
	END IF;

END$$

DROP PROCEDURE IF EXISTS `operdoc_default`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `operdoc_default`(
	IN _MODE VARCHAR(250),
	IN _Param_A VARCHAR(200),
	IN _Param_B VARCHAR(200),
	IN _Param_C TEXT
)
S_operdoc_default:BEGIN

	IF _MODE = 't_operdoc_default.CREATE' THEN
	/********************************************************************************************************
		CALL operdoc_default('t_operdoc_default.CREATE', '', '', '');
	********************************************************************************************************/
	/****************************************************************************
		Wstęp
	****************************************************************************/
		DO _Birth_System();
		CALL _Session_Refresh_Variables('', '', '');
		DROP TEMPORARY TABLE IF EXISTS `t_operdoc_default`;
		CREATE TEMPORARY TABLE `t_operdoc_default` SELECT * FROM `operdoc`;
		-- DESC t_operdoc;

	/****************************************************************************
		1. przebieg
	****************************************************************************/
		UPDATE `t_operdoc_default` od
		SET
			-- od.Grupa = (od.Grupa := od.Grupa),
			od.MA_Kontrahenta = (od.Grupa IN (@ht.ZM, @ht.ST, @ht.ZT, @ht.ZP, @ht.SI, @ht.KS, @ht.BN)) OR (od.Rodzaj IN (@ht.CRzWZ, @ht.CPzPZ, @ht.CMGZW, @ht.CRzKW, @ht.CPzKP)),
			od.MA_Magzyny = (od.MagTyp IN (@ht.mtPZ, @ht.mtMM, @ht.mtRZ)),
			od.MA_Detale = (od.Grupa IN (@ht.ST, @ht.MG, @ht.ZT)),
			od.IsPozycjeVisible = 
				(od.Grupa IN (@ht.ST, @ht.MG, @ht.ZT, @ht.ZM)) 
				OR
				(od.Rodzaj IN (@ht.CZpZI, @ht.CZpKI, @ht.CStSp)),
			od.IsKorekta = @IsKorekta := (od.FnTyp = @ht.fnkor),
			od.IsPodlegaVAT = (od.Grupa IN (@ht.ZM, @ht.ST, @ht.ZT, @ht.ZP, @ht.SI)) AND (NOT od.Rodzaj IN (@ht.CKsRu, @ht.CKsKR)),
			od.IsWaluta = (od.Grupa IN (@ht.ST, @ht.ZT, @ht.MG, @ht.ZM)),
			od.IsSprzedazNieKrajowa = od.Rodzaj IN (@ht.CSpFE, @ht.CSTUE, @ht.CSTKU, @ht.CSTKE, @ht.CZmEX),		-- class function TSubOper_Operacje.GetCzyRodzajToSprzedazNieKrajowa(
			od.IsRozrachunek = od.IsRozrachunek OR (od.Rztyp != @ht.Rznnn),
			od.IsDostawa = (od.Rodzaj IN (@ht.CDost, @ht.CDoND, @ht.CDoNW)),
			od.IsWlasny = (od.Grupa IN (@ht.ST, @ht.MG, @ht.KS))
			
		;
	/****************************************************************************
		2. przebieg	- IsPozycjeVisible dla tych niewidocznych
	****************************************************************************/
		UPDATE `t_operdoc_default` od
		SET
			od.IsPozycjeVisible = 
				IF(od.Rodzaj IN (@ht.CWeDW, @ht.CWeDK) AND @session.globals.Owner IN ('RELACOM'),
					1,
					IF(od.Rodzaj IN (@ht.CKsFv),
						@session.HT.IR.ZakupPozostalyMaPozycje,
						od.IsPozycjeVisible
					)
				)
		WHERE
			NOT od.IsPozycjeVisible
		;	
	/****************************************************************************
		3. przebieg	- IsTabelkaVatEditable dla IsPodlegaVAT
	****************************************************************************/
		UPDATE `t_operdoc_default` od
		SET
			od.IsTabelkaVatEditable = 
				od.IsPodlegaVAT AND
				(
					od.Grupa IN (@ht.ZT, @ht.ZP, @ht.SI, @ht.WE)
					OR
					(@session.globals.Owner IN ('BALTIMA') AND od.Grupa IN (@ht.ZT, @ht.ZP, @ht.SI, @ht.WE))
				)
		;	

	END IF;

	IF _MODE LIKE 't_operdoc_niezgodne.%' THEN
		IF _MODE = 't_operdoc_niezgodne.CREATE.Check.ALL.Select' THEN
		/********************************************************************************************************
			3 w 1 - create, wszystkie istotne pola i SELECT
			CALL operdoc_default('t_operdoc_niezgodne.CREATE.Check.ALL.Select', '', '', '');
		********************************************************************************************************/
			DROP TEMPORARY TABLE IF EXISTS `t_operdoc_default`;
			DROP TEMPORARY TABLE IF EXISTS `t_operdoc_niezgodne`;

			CALL operdoc_default('t_operdoc_default.CREATE', '', '', '');
			-- select * from `t_operdoc_default`;
			CALL operdoc_default('t_operdoc_niezgodne.CREATE', '', '', '');
			/****************************************************************************
			Porównanie	MA_Kontrahenta
			****************************************************************************/
			CALL operdoc_default('t_operdoc_niezgodne.Check.Column.Value', 'MA_Kontrahenta', '', 
			'(od.Grupa IN (@ht.ZM, @ht.ST, @ht.ZT, @ht.ZP, @ht.SI, @ht.KS, @ht.BN)) OR (od.Rodzaj IN (@ht.CRzWZ, @ht.CPzPZ, @ht.CMGZW, @ht.CRzKW, @ht.CPzKP))'
			);
			/****************************************************************************
			Porównanie	MA_Magzyny
			****************************************************************************/
			CALL operdoc_default('t_operdoc_niezgodne.Check.Column.Value', 'MA_Magzyny', '', 
			'(od.MagTyp IN (@ht.mtPZ, @ht.mtMM, @ht.mtRZ))'
			);
			/****************************************************************************
			Porównanie	MA_Detale
			****************************************************************************/
			CALL operdoc_default('t_operdoc_niezgodne.Check.Column.Value', 'MA_Detale', '', 
			'(od.Grupa IN (@ht.ST, @ht.MG, @ht.ZT))'
			);
			/****************************************************************************
			Porównanie	IsPozycjeVisible
			****************************************************************************/
			CALL operdoc_default('t_operdoc_niezgodne.Check.Column.Value', 'IsPozycjeVisible', '', 
'(od.Grupa IN (@ht.ST, @ht.MG, @ht.ZT, @ht.ZM)) 
OR
(od.Rodzaj IN (@ht.CZpZI, @ht.CZpKI, @ht.CStSp))
Ale dla pozost. jeszcze jeden warunek...
IF(od.Rodzaj IN (@ht.CWeDW, @ht.CWeDK) AND @session.globals.Owner IN (''RELACOM''),
	1,
	IF(od.Rodzaj IN (@ht.CKsFv),
		@session.HT.IR.ZakupPozostalyMaPozycje,
		od.IsPozycjeVisible
	)
)
'
			);
			/****************************************************************************
			Porównanie	IsKorekta
			UWAGA 
			1. dla rodzaju 75 (ZP ZI, Zakup inwestycyjny) należy chyba pilnie 
			zmienic FnTyp z 1 (@ht.FnKor) na 0 (@ht.FnNrm) lub 2 (@ht.FnInw)
			bo nie jest to przecież korekta tylko normalny dokument
			...podobnie 
			2. dla rodzaju 78 (ZP-ZI, Faktura korygująca Zak.Inwest.) należy chyba 
			zmienic FnTyp z 0 (@ht.FnNrm) na 1 (@ht.FnKor)
			****************************************************************************/
			CALL operdoc_default('t_operdoc_niezgodne.Check.Column.Value', 'IsKorekta', '', 
'(od.FnTyp = @ht.fnkor)
UWAGA 
1. dla rodzaju 75 (ZP ZI, Zakup inwestycyjny) należy chyba pilnie 
zmienic FnTyp z 1 (@ht.FnKor) na 0 (@ht.FnNrm) lub 2 (@ht.FnInw)
bo nie jest to przecież korekta tylko normalny dokument
...podobnie 
2. dla rodzaju 78 (ZP-ZI, Faktura korygująca Zak.Inwest.) należy chyba 
zmienic FnTyp z 0 (@ht.FnNrm) na 1 (@ht.FnKor)
'
			);
			/****************************************************************************
			Porównanie	IsPodlegaVAT
			****************************************************************************/
			CALL operdoc_default('t_operdoc_niezgodne.Check.Column.Value', 'IsPodlegaVAT', '', 
'(od.Grupa IN (@ht.ZM, @ht.ST, @ht.ZT, @ht.ZP, @ht.SI)) AND (NOT od.Rodzaj IN (@ht.CKsRu, @ht.CKsKR))');
			/****************************************************************************
			Porównanie	IsTabelkaVatEditable
			****************************************************************************/
			CALL operdoc_default('t_operdoc_niezgodne.Check.Column.Value', 'IsTabelkaVatEditable', '', 
'od.IsTabelkaVatEditable = 
od.IsPodlegaVAT AND
(
	od.Grupa IN (@ht.ZT, @ht.ZP, @ht.SI, @ht.WE)
	OR
	(@session.globals.Owner IN (''BALTIMA'') AND od.Grupa IN (@ht.ZT, @ht.ZP, @ht.SI, @ht.WE))
)
'
			);
			/****************************************************************************
			Porównanie	IsWaluta
			****************************************************************************/
			CALL operdoc_default('t_operdoc_niezgodne.Check.Column.Value', 'IsWaluta', '', '(od.Grupa IN (@ht.ST, @ht.ZT, @ht.MG, @ht.ZM))');
			/****************************************************************************
			Porównanie	IsSprzedazNieKrajowa
			****************************************************************************/
			CALL operdoc_default('t_operdoc_niezgodne.Check.Column.Value', 'IsSprzedazNieKrajowa', '', 'od.Rodzaj IN (@ht.CSpFE, @ht.CSTUE, @ht.CSTKU, @ht.CSTKE, @ht.CZmEX),		-- class function TSubOper_Operacje.GetCzyRodzajToSprzedazNieKrajowa(');
			/****************************************************************************
			Porównanie	IsRozrachunek
			****************************************************************************/
			CALL operdoc_default('t_operdoc_niezgodne.Check.Column.Value', 'IsRozrachunek', '', '(od.Grupa IN (@ht.ST, @ht.ZT, @ht.MG, @ht.ZM))');
			/****************************************************************************
			Porównanie	IsDostawa
			****************************************************************************/
			CALL operdoc_default('t_operdoc_niezgodne.Check.Column.Value', 'IsDostawa', '', '(od.Rodzaj IN (@ht.CDost, @ht.CDoND, @ht.CDoNW))');
			/****************************************************************************
			Porównanie	IsWlasny
			****************************************************************************/
			CALL operdoc_default('t_operdoc_niezgodne.Check.Column.Value', 'IsWlasny', '', '(od.Grupa IN (@ht.ST, @ht.MG, @ht.KS))');

		--	SELECT
			CALL operdoc_default('t_operdoc_niezgodne.SELECT', '', '', '');
		
		
		END IF;
		
		IF _MODE = 't_operdoc_niezgodne.CREATE' THEN
		/********************************************************************************************************
			CALL operdoc_default('t_operdoc_niezgodne.CREATE', '', '', '');
		********************************************************************************************************/
			-- SHOW CREATE TABLE `t_operdoc_niezgodne`;
			DROP TEMPORARY TABLE IF EXISTS `t_operdoc_niezgodne`;
			CREATE TEMPORARY TABLE `t_operdoc_niezgodne` (
			  `CheckField` VARCHAR(256) DEFAULT NULL,
			  `DefaulValue` INT(11) NOT NULL DEFAULT '0',
			  `ActualValue` INT(11) NOT NULL DEFAULT '0',
			  `Rodzaj` INT(11) NOT NULL DEFAULT '0',
			  `Inf` TEXT DEFAULT NULL
			)
			;
		END IF;

		IF _MODE LIKE 't_operdoc_niezgodne.Check.Column.Value' THEN
		/********************************************************************************************************
			CALL operdoc_default('t_operdoc_niezgodne.Check.Column.Value', 'IsPodlegaVAT', '', '');
			_Param_A	Nazwa pola porownanego
			_Param_B	Inf
		********************************************************************************************************/
			SET	
				@.SQLText.Check.FieldName = _Param_A,
				@.SQLText.Check.Inf = _Param_C
			;
			SET
				@.SQLText.Check.Field.SQL = 
				"
				INSERT IGNORE INTO `t_operdoc_niezgodne`
				(CheckField, DefaulValue, ActualValue, Rodzaj, Inf)
				SELECT
					_VarStr('#FielName#') AS CheckField,
					tod.#FielName# AS DefaulValue, 
					od.#FielName# AS ActualValue,
					tod.Rodzaj,
					@.SQLText.Check.Inf AS Inf
				FROM `t_operdoc_default` tod, `operdoc` od
				WHERE
					tod.Rodzaj = od.Rodzaj
					AND tod.#FielName# <> od.#FielName#
				;
				"
			;
			SET @.SQLText.Check.Field.SQL = REPLACE(@.SQLText.Check.Field.SQL, '#FielName#', @.SQLText.Check.FieldName);
			CALL _ExecuteCmd(@.SQLText.Check.Field.SQL, @Error);
		END IF;
		
		IF _MODE = 't_operdoc_niezgodne.SELECT' THEN
		/********************************************************************************************************
			CALL operdoc_default('t_operdoc_niezgodne.SELECT', '', '', '');
		********************************************************************************************************/
			SELECT
				odn.CheckField, odn.DefaulValue, odn.ActualValue, odn.Rodzaj, 
				od.Nazwa, od.Opis, od.Valid,
				od.Grupa, ot.Opis AS Optyp,
				odn.Inf
				-- ,tod.*
			FROM `t_operdoc_niezgodne` odn, `operdoc` od, `v_optypy` ot 
			WHERE
				od.Rodzaj = odn.Rodzaj
				AND ot.OpTyp = od.Grupa
			;
			
		END IF;

	END IF;

END$$

DELIMITER ;

/*
====================================================================================================================================================================================
	NOTATNIK
====================================================================================================================================================================================

CALL C_HT('', '', '', '');

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
*/
