 DELIMITER $$

/* ************************************************************************************************************************************************************************
	Uniwersalne sql-ki dla naglowkow i pozycji
	xxng i xxpo
	swiat zwykly	opng zmng oppo zmpo etc
	E	 			opng_e zmng_e oppo_e zmpo_e etc
	TE				TE_opng TE_zmng TE_oppo TE_zmpo etc
************************************************************************************************************************************************************************ */	

/*
	???
	wołana w typ pliku tylko jako ...
		CALL _Cmd_xxNgPo_Tools('SQL', _FROM, _WORLD, _FROM_TO, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.SQL);
*/
DROP PROCEDURE IF EXISTS `_Cmd_xxNgPo_Tools`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `_Cmd_xxNgPo_Tools`(
	IN _MODE VARCHAR(250),
	IN _FROM VARCHAR(250),
	IN _WORLD VARCHAR(250),
	IN _FROM_TO VARCHAR(250),
	IN _IdnOper VARCHAR(38),	--	IdnOper/IdnNg
	IN _GUID VARCHAR(38),		--	GUID pozycji
	IN _Param_A VARCHAR(255),	--	gdy _Param_A zawiera "p.IDN = 0" to ogranicza select do pozycji nowych IDN = 0 lub NULL
	IN _Param_B VARCHAR(255),
	IN _Param_C VARCHAR(255),	--	Schema (_Schema)
	IN _Param_D VARCHAR(255),	--	gdy = "No.execute" to nie wykonuje
	INOUT _IN_OUT TEXT
)
S_Cmd_xxNgPo_Tools: BEGIN 
	DECLARE _SQLText, _Params TEXT;
	DECLARE _ModeParam, _Schema VARCHAR(50);

						IF _MODE = '_FetchParams' THEN
							SET
								_Params = _IN_OUT,
								_ModeParam = IF(LOCATE('<#', _IN_OUT) > 0, '<>', '')
							;
							set @.apro = '1';
							SET
								@.OPZM.GUI = IFNULL(_Params2('_FetchParams', _ModeParam, _Params, 'GUI', ''), 0),
								@ht.Init_doc_date =  _Get_Init_doc_date(),
								@.DEST.CreatorGUID = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'CreatorGUID', ''), ''),
								@.DEST.KontrGUID = IFNULL(_Params2('_FetchParams', _ModeParam, _Params, 'KontrGUID', ''), ''),
								@.DEST.Rodzaj = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'Rodzaj', ''), ''),
								@.DEST.Rodzaj_typ = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'Rodzaj_typ', ''), ''),
								@.DEST.Tymczasowa = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'Tymczasowa', ''), ''),
								@.DEST.terminrealizacji = DATE(_VarStr(NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'terminrealizacji', ''), ''))),
								@.DEST.datawystaw = DATE(_VarStr(NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'datawystaw', ''), ''))),
								@.DEST.PlatnikGUID = IFNULL(_Params2('_FetchParams', _ModeParam, _Params, 'PlatnikGUID', ''), ''),
								@.DEST.AkwizytorGUID = IFNULL(_Params2('_FetchParams', _ModeParam, _Params, 'AkwizytorGUID', ''), ''),
								@.DEST.AreaGUID = IFNULL(_Params2('_FetchParams', _ModeParam, _Params, 'AreaGUID', ''), ''),
								@.DEST.Kancel = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'Kancel', ''), ''),
								@.DEST.Oryginalne_Uwagi = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'Oryginalne_Uwagi', ''), ''),
								@.DEST.IS_Rozrachunek = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'IS_Rozrachunek', ''), ''),
								@.DEST.IS_GUID_Dostawy = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'IS_GUID_Dostawy', ''), ''),
								@.DEST.IsStorno = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'IsStorno', ''), ''),
								@.DEST.adr_link.RESET = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'adr_link.RESET', ''), ''),
								@.DEST.Allways.calc_ver.3 = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'Allways.calc_ver.3', ''), ''),
								@.DEST.zmagazynu = _VarInt(NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'zmagazynu', ''), '')),
								@.DEST.domagazynu = _VarInt(NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'domagazynu', ''), '')),
								@.DEST.NrKasy = _VarInt(NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'nrkasy', ''), '')),
								@.DEST.idnmagazyn = _VarInt(NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'idnmagazyn', ''), '')),
								@.DEST.magazynwys = _VarInt(NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'magazynwys', ''), '')),
								@.DEST.Waluta = _VarInt(NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'Waluta', ''), '')),
								@.DEST.Zaplacono = _VarDouble(NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'zaplacono', ''), '')),
								@.DEST.calc_ver = IFNULL(NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'calc_ver', ''), ''), 3),
								@.DEST.nrzamw = IFNULL(_Params2('_FetchParams', _ModeParam, _Params, 'nrzamw', ''), ''),
								@.DEST.nrzamwkontr = IFNULL(_Params2('_FetchParams', _ModeParam, _Params, 'nrzamwkontr', ''), ''),
								@.DEST.transza_sped = _VarInt(NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'transza_sped', ''), '')),
								@.DEST.WyjazdGUID = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'WyjazdGUID', ''), ''),
								@.DEST.Dotyczy = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'dotyczy', ''), ''),
								@.DEST.NrDokFin = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'nrdokfin', ''), ''),
								@.DEST.NrDokMag = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'nrdokmag', ''), ''),
								@.DEST.NrWewn = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'nrwewn', ''), ''),
								@.DEST.NrDokKas = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'nrdokkas', ''), ''),

								@.DEST.Typ_Przepisania_Cen = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'Typ_Przepisania_Cen', ''), ''),
								@.DEST.Przeliczenie_B_N = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'przeliczenie_B_N', ''), ''),
				
								@.DEST.info5 = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'info5', ''), ''),
								@.DEST.ugrpguid = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'ugrpguid', ''), ''),
								@.DEST.korektatytulem = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'korektatytulem', ''), ''),
								@.DEST.zlecenieGUID = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'zlecenieGUID', ''), ''),
								
							--	z C_HT_Clone - na razie nie uzywane	
								@.DEST.UPDATE_zamowienieGUID = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'UPDATE_zamowienieGUID', ''), ''),
								@.DEST.Zapotrzebowanie_Powiazane = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'Zapotrzebowanie_Powiazane', ''), ''),
								@.DEST.UPDATE_KatCol_from_kontrah = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'UPDATE_KatCol_from_kontrah', ''), ''),
								@.DEST.Vat_Fixed = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'Vat_Fixed', ''), ''),
								
								@.OPZM.AutoNum.Before.Apply = NULLIF(_Params2('_FetchParams', _ModeParam, _Params, 'AutoNum', ''), '')
							;
							set @.apro = '2';
							
							SET
								@.DEST.Kancel = IFNULL(@.DEST.Kancel, FALSE),
								@.DEST.Oryginalne_Uwagi = IFNULL(@.DEST.Oryginalne_Uwagi, FALSE),
								@.DEST.IS_GUID_Dostawy = IFNULL(@.DEST.IS_GUID_Dostawy, FALSE),
								@.DEST.adr_link.RESET = IFNULL(@.DEST.adr_link.RESET, FALSE),
								@.DEST.Allways.calc_ver.3 = IFNULL(@.DEST.Allways.calc_ver.3, FALSE)
							;
							IF @.OPZM.GUI = 1 THEN
								SET
									@.DEST.OpTyp = (
										SELECT od.Grupa AS OpTyp FROM `operdoc` od WHERE @.OPZM.GUI = 1 AND od.Rodzaj = @.DEST.Rodzaj
								);
								SET 
									@.OPZM.GUI.UPR = 
										GREATEST(_GetUprawnienie(@.DEST.OpTyp, ''), _GetUprawnienie(@.DEST.Rodzaj, ''))
								;
								
							END IF;
							LEAVE S_Cmd_xxNgPo_Tools;
						
						END IF;

	IF _MODE = '#FROM#TO' THEN
	-- CALL _Cmd_xxNgPo_Tools('#FROM#TO', _FROM, _WORLD, @Move.FROM.TO, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, SQL);
		SET @.SQL = _IN_OUT;
		SET @.SQL = REPLACE(@.SQL, '#FROM.', IF(_FROM_TO IN ('REAL', 'R', 'NR'), '#REAL.', IF(_FROM_TO = 'E', '#E.', IF(_FROM_TO = 'M', '#M.', ''))));
		SET @.SQL = REPLACE(@.SQL, '#TO.', IF(_FROM_TO IN ('REAL', 'R', 'NR'), '#REAL.', IF(_FROM_TO = 'E', '#E.', IF(_FROM_TO = 'M', '#M.', ''))));
		SET _IN_OUT = @.SQL;
	END IF;
	
	IF _MODE = 'SQL' THEN
		SET _SQLText = _IN_OUT;
		SET @.SQL = _SQLText;
		--	Schema bazy
			SET _Schema = IFNULL(_Param_C, '');	--	Schema (_Schema)
			SET _Schema = IF(_Schema IN ('', '?', SCHEMA()), '', CONCAT(_Schema, '.'));
			SET _SQLText = REPLACE(_SQLText, '#_Schema.#', _Schema);
		--	zmiana X_xx -> X.xx by stosowac mniej riplejsów 
			SET _SQLText = REPLACE(_SQLText, '#E_xx', '#E.xx');
			SET _SQLText = REPLACE(_SQLText, '#TE_xx', '#TE.xx');
			SET _SQLText = REPLACE(_SQLText, '#M_xx', '#M.xx');
			
		--	swiat realny W/ R / REAL ... 
			SET _SQLText = REPLACE(_SQLText, 'real.', 'R.');
			SET _SQLText = REPLACE(_SQLText, 'REAL.ng', 'R.xxng');
			SET _SQLText = REPLACE(_SQLText, 'REAL.po', 'R.xxpo');
			SET _SQLText = REPLACE(_SQLText, 'REAL.xx', 'R.xx');
		--	c.d. swiat realny W/ R / REAL
			SET _SQLText = REPLACE(_SQLText, '#R.xxng#', IF(_FROM = 'OP', 'opng', 'zmng'));
			SET _SQLText = REPLACE(_SQLText, '#R.xxpo#', IF(_FROM = 'OP', 'oppo', 'zmpo'));
			SET _SQLText = REPLACE(_SQLText, '#R.xxng_vat#', IF(_FROM = 'OP', 'opng_vat', 'zmng_vat'));
			SET _SQLText = REPLACE(_SQLText, '#R.xxpo_corr#', IF(_FROM = 'OP', 'oppo_corr', 'oppo_corr'));
		--	swiat E	
			SET _SQLText = REPLACE(_SQLText, '#E.xxng#', IF(_FROM = 'OP', 'opng_e', 'zmng_e'));
			SET _SQLText = REPLACE(_SQLText, '#E.xxpo#', IF(_FROM = 'OP', 'oppo_e', 'zmpo_e'));
			SET _SQLText = REPLACE(_SQLText, '#E.xxng_vat#', IF(_FROM = 'OP', 'opng_vat_e', 'zmng_vat_e'));
			SET _SQLText = REPLACE(_SQLText, '#E.xxpo_corr#', IF(_FROM = 'OP', 'oppo_corr_e', 'oppo_corr_e'));
		--	swiat TE	
			SET _SQLText = REPLACE(_SQLText, '#TE.xxng#', IF(_FROM = 'OP', 'TE_opng', 'TE_zmng'));
			SET _SQLText = REPLACE(_SQLText, '#TE.xxpo#', IF(_FROM = 'OP', 'TE_oppo', 'TE_zmpo'));
			SET _SQLText = REPLACE(_SQLText, '#TE.xxng_vat#', IF(_FROM = 'OP', 'TE_opng_vat', 'TE_zmng_vat'));
			SET _SQLText = REPLACE(_SQLText, '#TE.xxpo_corr#', IF(_FROM = 'OP', 'TE_oppo_corr', 'TE_oppo_corr'));
		--	swiat M
			SET _SQLText = REPLACE(_SQLText, '#M.xxng#', IF(_FROM = 'OP', 'opng_m', 'zmng_m'));
			SET _SQLText = REPLACE(_SQLText, '#M.xxpo#', IF(_FROM = 'OP', 'oppo_m', 'zmpo_m'));
			SET _SQLText = REPLACE(_SQLText, '#M.xxng_vat#', IF(_FROM = 'OP', 'opng_vat_m', 'zmng_vat_m'));
			SET _SQLText = REPLACE(_SQLText, '#M.xxpo_corr#', IF(_FROM = 'OP', 'oppo_corr_m', 'oppo_corr_m'));
		
		

			SET _SQLText = REPLACE(_SQLText, '#xxng#', IF(_FROM = 'OP', '#opng#', '#zmng#'));
			SET _SQLText = REPLACE(_SQLText, '#xxpo#', IF(_FROM = 'OP', '#oppo#', '#zmpo#'));
			SET _SQLText = REPLACE(_SQLText, '#xxng_vat#', IF(_FROM = 'OP', '#opng_vat#', '#zmng_vat#'));
			SET _SQLText = REPLACE(_SQLText, '#xxpo_corr#', IF(_FROM = 'OP', '#oppo_corr#', '#oppo_corr#'));	--	w zm brak
			
			SET _SQLText = REPLACE(_SQLText, '#opng#', IF(_WORLD = 'E', 'opng_e', IF(_WORLD = 'TE', 'TE_opng', IF(_WORLD = 'M', 'opng_m', 'opng'))));
			SET _SQLText = REPLACE(_SQLText, '#zmng#', IF(_WORLD = 'E', 'zmng_e', IF(_WORLD = 'TE', 'TE_zmng', IF(_WORLD = 'M', 'zmng_m', 'zmng'))));
			SET _SQLText = REPLACE(_SQLText, '#oppo#', IF(_WORLD = 'E', 'oppo_e', IF(_WORLD = 'TE', 'TE_oppo', IF(_WORLD = 'M', 'oppo_m', 'oppo'))));
			SET _SQLText = REPLACE(_SQLText, '#zmpo#', IF(_WORLD = 'E', 'zmpo_e', IF(_WORLD = 'TE', 'TE_zmpo', IF(_WORLD = 'M', 'zmpo_m', 'zmpo'))));
			SET _SQLText = REPLACE(_SQLText, '#opng_vat#', IF(_WORLD = 'E', 'opng_vat_e', IF(_WORLD = 'TE', 'TE_opng_vat', IF(_WORLD = 'M', 'opng_vat_m', 'opng_vat'))));
			SET _SQLText = REPLACE(_SQLText, '#zmng_vat#', IF(_WORLD = 'E', 'zmng_vat_e', IF(_WORLD = 'TE', 'TE_zmng_vat', IF(_WORLD = 'M', 'zmng_vat_m', 'zmng_vat'))));
			SET _SQLText = REPLACE(_SQLText, '#oppo_corr#', IF(_WORLD = 'E', 'oppo_corr_e', IF(_WORLD = 'TE', 'TE_oppo_corr', IF(_WORLD = 'M', 'oppo_corr_m', 'oppo_corr'))));
			
			--	Teraz spr. czy mamy wejsciowe tabele temp.  : #t_Calc_WE_NG# #t_Calc_WE_PO#
			IF _IdnOper LIKE '%t_Calc_WE_NG' THEN
			--	w `t_Calc_WE_NG` sa GUIDy naglowkow!!! pozycji do przeliczenia
				SET _SQLText = REPLACE(_SQLText, '#n.GUID#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#t_Calc_WE_NG#', ', `t_Calc_WE_NG` tng');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnOperNg#', 'p.#IdnOper# = tng.GUID ');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnOper#', 'p.IdnOper = tng.GUID ');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnOper_corr#', 'p.IdnOper_corr = tng.GUID ');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnNg#', 'p.IdnNg = tng.GUID ');
				SET _SQLText = REPLACE(_SQLText, '#n.WyjazdGUID#', 'TRUE');
				-- pozostale wykasuj
				SET _SQLText = REPLACE(_SQLText, '#t_Calc_WE_PO#', '');
				SET _SQLText = REPLACE(_SQLText, '#p.GUID#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#TRUE#', 'TRUE');
			
			ELSEIF _GUID LIKE '%t_Calc_WE_PO' THEN
			--	w `t_Calc_WE_PO` sa GUIDy pozycji do przeliczenia
				SET _SQLText = REPLACE(_SQLText, '#n.GUID#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#t_Calc_WE_PO#', ', `t_Calc_WE_PO` tpo');
				SET _SQLText = REPLACE(_SQLText, '#p.GUID#', 'p.GUID = tpo.GUID ');
				-- pozostale wykasuj
				SET _SQLText = REPLACE(_SQLText, '#t_Calc_WE_NG#', '');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnOperNg#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnOper#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnOper_corr#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnNg#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#TRUE#', 'TRUE');
				
			ELSE
				SET _SQLText = REPLACE(_SQLText, '#t_Calc_WE_NG#', '');
				SET _SQLText = REPLACE(_SQLText, '#t_Calc_WE_PO#', '');
				
				SET _SQLText = 
					REPLACE(_SQLText, '#n.GUID#', 
						IF(IFNULL(NULLIF(_IdnOper, 'ALL_REC'), '') = '', 
							'TRUE',
							CONCAT("n.GUID = ", QUOTE(_IdnOper))
						)
					);
				SET _SQLText = 
					REPLACE(_SQLText, '#n.WyjazdGUID#', 
						IF(IFNULL(NULLIF(_IdnOper, 'ALL_REC'), '') = '', 
							'TRUE',
							CONCAT("n.WyjazdGUID = ", QUOTE(_IdnOper))
						)
					);
				SET _SQLText = 
					REPLACE(_SQLText, '#p.GUID#', 
						IF(IFNULL(NULLIF(_GUID, 'ALL_REC'), '') = '', 
							'TRUE',
							CONCAT("p.GUID = ", QUOTE(_GUID))
						)
					);
				SET _SQLText = 
					REPLACE(_SQLText, '#p.IdnOperNg#', 
						IF(IFNULL(_IdnOper, '') = '', 
							'TRUE',
							CONCAT("p.#IdnOper# = ", QUOTE(_IdnOper))
						)
					);
				SET _SQLText = 
					REPLACE(_SQLText, '#p.IdnOper#', 
						IF(IFNULL(_IdnOper, '') = '', 
							'TRUE',
							CONCAT("p.IdnOper = ", QUOTE(_IdnOper))
						)
					);
				SET _SQLText = 
					REPLACE(_SQLText, '#p.IdnOper_corr#', 
						IF(IFNULL(_IdnOper, '') = '', 
							'TRUE',
							CONCAT("p.IdnOper_corr = ", QUOTE(_IdnOper))
						)
					);
				SET _SQLText = 
					REPLACE(_SQLText, '#p.IdnNg#', 
						IF(IFNULL(_IdnOper, '') = '', 
							'TRUE',
							CONCAT("p.IdnNg = ", QUOTE(_IdnOper))
						)
					);
			END IF;
			
			SET _SQLText = 
				REPLACE(_SQLText, '#p.IDN = 0#', IF(_Param_A LIKE '%p.IDN = 0%', 'IFNULL(p.IDN, 0) = 0', 'TRUE'))
			;
			SET _SQLText = REPLACE(_SQLText, '#IdnOperFin#', IF(_FROM = 'OP', 'IdnOperFin', 'IdnNg'));
			SET _SQLText = REPLACE(_SQLText, '#IdnOper#', IF(_FROM = 'OP', 'IdnOper', 'IdnNg'));
			SET _SQLText = REPLACE(_SQLText, '#idnWZ#', IF(_FROM = 'OP', 'idnWZ', 'IdnNg'));
			SET _SQLText = REPLACE(_SQLText, '#_IdnOper#', QUOTE(_IdnOper));
			SET _SQLText = REPLACE(_SQLText, '#_Ng_GUID_orig#', QUOTE(_GUID));	--	 wyjatkowo tutaj parametr GUID jako NIE GUID pozycji ale jako GUID orygnalu
			SET _SQLText = REPLACE(_SQLText, '#_GRP_GUID#', QUOTE(_GUID));		--	 grupowanie - #_GRP_GUID# obsługujemy z parametru _GUUD
			SET @.SQL = _SQLText;
		
		SET _IN_OUT = @.SQL;
	END IF;

	IF _MODE = 'EXE.SQL' THEN
		SET @.SQL = _IN_OUT;
		CALL _Cmd_xxNgPo_Tools('SQL', _FROM, _WORLD, _FROM_TO, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.SQL);
		SET _IN_OUT = @.SQL;
		IF IFNULL(_Param_D, '') <> "No.execute" THEN
			-- jmam CALL _ExecuteCmd(@.SQL, @Error);
			CALL _ExecuteCmd_Auto(_IN_OUT, @Error);
			-- CALL _erp_external_process_log_tools('Err.Check.for.Last.ID', '', '', '', 0, '', '');		
			set @.SQL.last = @.SQL;
		END IF;	
	END IF;
	
END$$

/*
	Wykonawcza - to ona jest głównie wołana!!!
*/
DROP PROCEDURE IF EXISTS `_ExecuteCmd_xxNgPo`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `_ExecuteCmd_xxNgPo`(
	IN _MODE VARCHAR(250),
	IN _FROM VARCHAR(250),
	IN _WORLD VARCHAR(250),
	-- IN _WORLD_NG VARCHAR(250),		--	"TE" czyli tabele `TE_xxxx` lub "E" czyli `xxxx_e` lub "" czyli xxxx
	-- IN _WORLD_PO VARCHAR(250),		--	"TE" czyli tabele `TE_xxxx` lub "E" czyli `xxxx_e` lub "" czyli xxxx
	IN _IdnOper VARCHAR(38),	--	IdnOper/IdnNg
	IN _GUID VARCHAR(38),		--	GUID pozycji
	IN _Param_A VARCHAR(255),	--	gdy _Param_A zawiera "p.IDN = 0" to ogranicza select do pozycji nowych IDN = 0 lub NULL
	IN _Param_B VARCHAR(255),	--	w _Param_B jest to co wyzej w _FROM_TO
	IN _Param_C VARCHAR(255),	--	Schema (_Schema)
	IN _Param_D VARCHAR(255),	--	gdy = "No.execute" to nie wykonuje
	INOUT _Param_E TEXT
)
S_ExecuteCmd_xxNgPo: BEGIN 
	DECLARE _SQLText TEXT;
	DECLARE _WORLD_PO, _WORLD_NG, _Schema VARCHAR(100);
	
	IF _MODE = 'MODE' THEN
		SET _Param_E = 
		REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
			UPPER(_Param_E), 
			'N.NG', 'N.xxng'), 
			'N.PO', 'N.xxpo'), 
			'N.V', 'N.xxng_vat'), 
			'TE.NG', 'TE.xxng'), 
			'TE.PO', 'TE.xxpo'), 
			'TE.V', 'TE.xxng_vat'), 
			'N.TO.TE', 'N->TE'),
			'TE<-N', 'N->TE'),
			'TE.TO.N', 'N<-TE'),
			'TE->N', 'N<-TE'),
			'TE.xxng<-N.xxng', 'N.xxng->TE.xxng'),
			'TE.xxpo<-N.xxpo', 'N.xxpo->TE.xxpo'),
			'TE.xxpo_corr<-N.xxpo_corr', 'N.xxpo_corr->TE.xxpo_corr'),
			'TE.xxng_vat<-N.xxng_vat', 'N.xxng_vat->TE.xxng_vat'),
			' ', '')
		;
		LEAVE S_ExecuteCmd_xxNgPo;
	END IF;
	
	SET 
		-- _MODE = REPLACE(REPLACE(REPLACE(REPLACE(_MODE, '`', ''), ' ', ''), 'xxpo', 'PO'), 'xxng', 'NG'),
		_WORLD = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(_WORLD, '`', ''), ' ', ''), 'xxpo:', 'PO:'), 'xxng:', 'NG:'), 'PO:', 'p:'), 'NG:', 'n:')
	;
	SET _WORLD_NG = IF(LOCATE('n:E', _WORLD) > 0, 'E', IF(LOCATE('n:TE', _WORLD) > 0, 'TE', '')); 
	SET _WORLD_PO = IF(LOCATE('p:E', _WORLD) > 0, 'E', IF(LOCATE('p:TE', _WORLD) > 0, 'TE', '')); 
	IF _WORLD_NG = '' AND _WORLD_PO = '' THEN
	--	Gdy oba puste to moze zlecono zwyczajnie "E" lub "TE" - wtedy nie ma n: czy p: - w taki przypadku przepisz ten swiat do _WORLD_NG i _WORLD_PO
		SET 
			_WORLD_NG = _WORLD,
			_WORLD_PO = _WORLD
		;
	END IF;
	
	
	CALL _Cmd_xxNgPo_Tools('#FROM#TO', _FROM, _WORLD, @My.Local.FROM.TO := _Param_B, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
	
	set @_WORLD_NG = _WORLD_NG, @_WORLD_PO = _WORLD_PO;
	
		IF _MODE IN ('', '_EXECUTE') THEN
			SET _SQLText = _Param_E;
			
		--	Schema bazy
			SET _Schema = IFNULL(_Param_C, '');	--	Schema (_Schema)
			SET _Schema = IF(_Schema IN ('', '?', SCHEMA()), '', CONCAT(_Schema, '.'));
			SET _SQLText = REPLACE(_SQLText, '#_Schema.#', _Schema);
			

			SET _SQLText = REPLACE(_SQLText, '#xxng#', IF(_FROM = 'OP', '#opng#', '#zmng#'));
			SET _SQLText = REPLACE(_SQLText, '#xxpo#', IF(_FROM = 'OP', '#oppo#', '#zmpo#'));
			SET _SQLText = REPLACE(_SQLText, '#xxng_vat#', IF(_FROM = 'OP', '#opng_vat#', '#zmng_vat#'));
			SET _SQLText = REPLACE(_SQLText, '#xxpo_corr#', IF(_FROM = 'OP', '#oppo_corr#', '#oppo_corr#'));	--	w zm brak
			
			SET _SQLText = REPLACE(_SQLText, '#opng#', IF(_WORLD_NG = 'E', 'opng_e', IF(_WORLD_NG = 'TE', 'TE_opng', IF(_WORLD_NG = 'M', 'opng_m', 'opng'))));
			SET _SQLText = REPLACE(_SQLText, '#zmng#', IF(_WORLD_NG = 'E', 'zmng_e', IF(_WORLD_NG = 'TE', 'TE_zmng', IF(_WORLD_NG = 'M', 'zmng_m', 'zmng'))));
			SET _SQLText = REPLACE(_SQLText, '#oppo#', IF(_WORLD_PO = 'E', 'oppo_e', IF(_WORLD_PO = 'TE', 'TE_oppo', IF(_WORLD_NG = 'M', 'oppo_m', 'oppo'))));
			SET _SQLText = REPLACE(_SQLText, '#zmpo#', IF(_WORLD_PO = 'E', 'zmpo_e', IF(_WORLD_PO = 'TE', 'TE_zmpo', IF(_WORLD_NG = 'M', 'zmpo_m', 'zmpo'))));
			SET _SQLText = REPLACE(_SQLText, '#opng_vat#', IF(_WORLD_PO = 'E', 'opng_vat_e', IF(_WORLD_PO = 'TE', 'TE_opng_vat', IF(_WORLD_NG = 'M', 'opng_vat_m', 'opng_vat'))));
			SET _SQLText = REPLACE(_SQLText, '#zmng_vat#', IF(_WORLD_PO = 'E', 'zmng_vat_e', IF(_WORLD_PO = 'TE', 'TE_zmng_vat', IF(_WORLD_NG = 'M', 'zmng_vat_m', 'zmng_vat'))));
			SET _SQLText = REPLACE(_SQLText, '#oppo_corr#', IF(_WORLD_PO = 'E', 'oppo_corr_e', IF(_WORLD_PO = 'TE', 'TE_oppo_corr', IF(_WORLD_NG = 'M', 'oppo_corr_m', 'oppo_corr'))));
			

			SET _SQLText = REPLACE(_SQLText, 'real.', 'REAL.');
			SET _SQLText = REPLACE(_SQLText, 'R.xxng', 'REAL.xxng');
			SET _SQLText = REPLACE(_SQLText, 'REAL.ng', 'REAL.xxng');
			SET _SQLText = REPLACE(_SQLText, 'R.xxpo', 'REAL.xxpo');
			SET _SQLText = REPLACE(_SQLText, 'REAL.po', 'REAL.xxpo');
			SET _SQLText = REPLACE(_SQLText, 'R.xxng_vat', 'REAL.xxng_vat');
			SET _SQLText = REPLACE(_SQLText, 'R.xxpo_corr', 'REAL.xxpo_corr');
			
			SET _SQLText = REPLACE(_SQLText, '#REAL.xxng#', IF(_FROM = 'OP', 'opng', 'zmng'));
			SET _SQLText = REPLACE(_SQLText, '#REAL.xxpo#', IF(_FROM = 'OP', 'oppo', 'zmpo'));
			SET _SQLText = REPLACE(_SQLText, '#REAL.xxng_vat#', IF(_FROM = 'OP', 'opng_vat', 'zmng_vat'));
			SET _SQLText = REPLACE(_SQLText, '#REAL.xxpo_corr#', IF(_FROM = 'OP', 'oppo_corr', 'oppo_corr'));

		--	Teraz zmieniamy X_xx na X.xx by potem nie podwajac riplejsów 
		-- zatem zamiast ...
		--	zmiana X_xx -> X.xx by stosowac mniej riplejsów 
			SET _SQLText = REPLACE(_SQLText, '#E_xx', '#E.xx');
			SET _SQLText = REPLACE(_SQLText, '#TE_xx', '#TE.xx');
			SET _SQLText = REPLACE(_SQLText, '#M_xx', '#M.xx');
		--	swiat E	
			SET _SQLText = REPLACE(_SQLText, '#E.xxng#', IF(_FROM = 'OP', 'opng_e', 'zmng_e'));
			SET _SQLText = REPLACE(_SQLText, '#E.xxpo#', IF(_FROM = 'OP', 'oppo_e', 'zmpo_e'));
			SET _SQLText = REPLACE(_SQLText, '#E.xxng_vat#', IF(_FROM = 'OP', 'opng_vat_e', 'zmng_vat_e'));
			SET _SQLText = REPLACE(_SQLText, '#E.xxpo_corr#', IF(_FROM = 'OP', 'oppo_corr_e', 'oppo_corr_e'));
		--	swiat TE	
			SET _SQLText = REPLACE(_SQLText, '#TE.xxng#', IF(_FROM = 'OP', 'TE_opng', 'TE_zmng'));
			SET _SQLText = REPLACE(_SQLText, '#TE.xxpo#', IF(_FROM = 'OP', 'TE_oppo', 'TE_zmpo'));
			SET _SQLText = REPLACE(_SQLText, '#TE.xxng_vat#', IF(_FROM = 'OP', 'TE_opng_vat', 'TE_zmng_vat'));
			SET _SQLText = REPLACE(_SQLText, '#TE.xxpo_corr#', IF(_FROM = 'OP', 'TE_oppo_corr', 'TE_oppo_corr'));
		--	swiat M
			SET _SQLText = REPLACE(_SQLText, '#M.xxng#', IF(_FROM = 'OP', 'opng_m', 'zmng_m'));
			SET _SQLText = REPLACE(_SQLText, '#M.xxpo#', IF(_FROM = 'OP', 'oppo_m', 'zmpo_m'));
			SET _SQLText = REPLACE(_SQLText, '#M.xxng_vat#', IF(_FROM = 'OP', 'opng_vat_m', 'zmng_vat_m'));
			SET _SQLText = REPLACE(_SQLText, '#M.xxpo_corr#', IF(_FROM = 'OP', 'oppo_corr_m', 'oppo_corr_m'));
			
			SET _SQLText = 
				REPLACE(_SQLText, '#xxng#', 
					IF(_FROM = 'OP',
						IF(_WORLD_NG = 'E', 'opng_e', IF(_WORLD_NG = 'TE', 'TE_opng', IF(_WORLD_NG = 'M', 'opng_m', 'opng'))),
						IF(_WORLD_NG = 'E', 'zmng_e', IF(_WORLD_NG = 'TE', 'TE_zmng', IF(_WORLD_NG = 'M', 'zmng_m', 'zmng')))
					)
				);
			SET _SQLText = 
				REPLACE(_SQLText, '#xxpo#', 
					IF(_FROM = 'OP',
						IF(_WORLD_PO = 'E', 'oppo_e', IF(_WORLD_PO = 'TE', 'TE_oppo', IF(_WORLD_NG = 'M', 'oppo_m', 'oppo'))),
						IF(_WORLD_PO = 'E', 'zmpo_e', IF(_WORLD_PO = 'TE', 'TE_zmpo', IF(_WORLD_NG = 'M', 'zmpo_m', 'zmpo')))
					)
				);
			SET _SQLText = 
				REPLACE(_SQLText, '#xxng_vat#', 
					IF(_FROM = 'OP',
						IF(_WORLD_PO = 'E', 'opng_vat_e', IF(_WORLD_PO = 'TE', 'TE_opng_vat', IF(_WORLD_NG = 'M', 'opng_vat_m', 'opng_vat'))),
						IF(_WORLD_PO = 'E', 'zmng_vat_e', IF(_WORLD_PO = 'TE', 'TE_zmng_vat', IF(_WORLD_NG = 'M', 'zmng_vat_m', 'zmng_vat')))
					)
				);
				
			SET _SQLText = REPLACE(_SQLText, '#opng#', IF(_WORLD_NG = 'E', 'opng_e', IF(_WORLD_NG = 'TE', 'TE_opng', 'opng')));
			SET _SQLText = REPLACE(_SQLText, '#oppo#', IF(_WORLD_PO = 'E', 'oppo_e', IF(_WORLD_PO = 'TE', 'TE_oppo', 'oppo')));
			SET _SQLText = REPLACE(_SQLText, '#zmng#', IF(_WORLD_NG = 'E', 'zmng_e', IF(_WORLD_NG = 'TE', 'TE_zmng', 'zmng')));
			SET _SQLText = REPLACE(_SQLText, '#zmpo#', IF(_WORLD_PO = 'E', 'zmpo_e', IF(_WORLD_PO = 'TE', 'TE_zmpo', 'zmpo')));
			SET _SQLText = REPLACE(_SQLText, '#opng_vat#', IF(_WORLD_PO = 'E', 'opng_vat_e', IF(_WORLD_PO = 'TE', 'TE_opng_vat', 'opng_vat')));
			SET _SQLText = REPLACE(_SQLText, '#zmng_vat#', IF(_WORLD_PO = 'E', 'zmng_vat_e', IF(_WORLD_PO = 'TE', 'TE_zmng_vat', 'zmng_vat')));
			SET _SQLText = REPLACE(_SQLText, '#oppo_corr#', IF(_WORLD_PO = 'E', 'oppo_corr_e', IF(_WORLD_PO = 'TE', 'TE_oppo_corr', 'oppo_corr')));

			--	Teraz spr. czy mamy wejsciowe tabele temp.  : #t_Calc_WE_NG# #t_Calc_WE_PO#
			IF _IdnOper LIKE 'ALL_REC' THEN
			--	w `t_Calc_WE_NG` sa GUIDy naglowkow!!! pozycji do przeliczenia
				SET _SQLText = REPLACE(_SQLText, '#n.GUID#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#t_Calc_WE_NG#', '');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnOperNg#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnOper#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnOper_corr#', 'p.IdnOper_corr = tng.GUID ');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnNg#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#n.WyjazdGUID#', 'TRUE');
				-- pozostale wykasuj
				SET _SQLText = REPLACE(_SQLText, '#t_Calc_WE_PO#', '');
				SET _SQLText = REPLACE(_SQLText, '#p.GUID#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#TRUE#', 'TRUE');
			
			ELSEIF _IdnOper LIKE '%t_Calc_WE_NG' THEN
			--	w `t_Calc_WE_NG` sa GUIDy naglowkow!!! pozycji do przeliczenia
				SET _SQLText = REPLACE(_SQLText, '#n.GUID#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#t_Calc_WE_NG#', ', `t_Calc_WE_NG` tng');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnOperNg#', 'p.#IdnOper# = tng.GUID ');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnOper#', 'p.IdnOper = tng.GUID ');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnOper_corr#', 'p.IdnOper_corr = tng.GUID ');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnNg#', 'p.IdnNg = tng.GUID ');
				SET _SQLText = REPLACE(_SQLText, '#n.WyjazdGUID#', 'TRUE');
				-- pozostale wykasuj
				SET _SQLText = REPLACE(_SQLText, '#t_Calc_WE_PO#', '');
				SET _SQLText = REPLACE(_SQLText, '#p.GUID#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#TRUE#', 'TRUE');
			
			ELSEIF _GUID LIKE '%t_Calc_WE_PO' THEN
			--	w `t_Calc_WE_PO` sa GUIDy pozycji do przeliczenia
				SET _SQLText = REPLACE(_SQLText, '#n.GUID#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#t_Calc_WE_PO#', ', `t_Calc_WE_PO` tpo');
				SET _SQLText = REPLACE(_SQLText, '#p.GUID#', 'p.GUID = tpo.GUID ');
				-- pozostale wykasuj
				SET _SQLText = REPLACE(_SQLText, '#t_Calc_WE_NG#', '');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnOperNg#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnOper#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnOper_corr#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#p.IdnNg#', 'TRUE');
				SET _SQLText = REPLACE(_SQLText, '#TRUE#', 'TRUE');
				
			ELSE
				SET _SQLText = REPLACE(_SQLText, '#t_Calc_WE_NG#', '');
				SET _SQLText = REPLACE(_SQLText, '#t_Calc_WE_PO#', '');
				
				SET _SQLText = 
					REPLACE(_SQLText, '#n.GUID#', 
						IF(IFNULL(NULLIF(_IdnOper, 'ALL_REC'), '') = '', 
							'TRUE',
							CONCAT("n.GUID = ", QUOTE(_IdnOper))
						)
					);
				SET _SQLText = 
					REPLACE(_SQLText, '#n.WyjazdGUID#', 
						IF(IFNULL(NULLIF(_IdnOper, 'ALL_REC'), '') = '', 
							'TRUE',
							CONCAT("n.WyjazdGUID = ", QUOTE(_IdnOper))
						)
					);
				SET _SQLText = 
					REPLACE(_SQLText, '#p.GUID#', 
						IF(IFNULL(NULLIF(_GUID, 'ALL_REC'), '') = '', 
							'TRUE',
							CONCAT("p.GUID = ", QUOTE(_GUID))
						)
					);
				SET _SQLText = 
					REPLACE(_SQLText, '#p.IdnOperNg#', 
						IF(IFNULL(_IdnOper, '') = '', 
							'TRUE',
							CONCAT("p.#IdnOper# = ", QUOTE(_IdnOper))
						)
					);
				SET _SQLText = 
					REPLACE(_SQLText, '#p.IdnOper#', 
						IF(IFNULL(_IdnOper, '') = '', 
							'TRUE',
							CONCAT("p.IdnOper = ", QUOTE(_IdnOper))
						)
					);
				SET _SQLText = 
					REPLACE(_SQLText, '#p.IdnOper_corr#', 
						IF(IFNULL(_IdnOper, '') = '', 
							'TRUE',
							CONCAT("p.IdnOper_corr = ", QUOTE(_IdnOper))
						)
					);
				SET _SQLText = 
					REPLACE(_SQLText, '#p.IdnNg#', 
						IF(IFNULL(_IdnOper, '') = '', 
							'TRUE',
							CONCAT("p.IdnNg = ", QUOTE(_IdnOper))
						)
					);
			END IF;
			
			SET _SQLText = 
				REPLACE(_SQLText, '#p.IDN = 0#', IF(_Param_A LIKE '%p.IDN = 0%', 'IFNULL(p.IDN, 0) = 0', 'TRUE'))
			;
			SET _SQLText = REPLACE(_SQLText, '#IdnOperFin#', IF(_FROM = 'OP', 'IdnOperFin', 'IdnNg'));
			SET _SQLText = REPLACE(_SQLText, '#IdnOper#', IF(_FROM = 'OP', 'IdnOper', 'IdnNg'));
			SET _SQLText = REPLACE(_SQLText, '#idnWZ#', IF(_FROM = 'OP', 'idnWZ', 'IdnNg'));
			SET _SQLText = REPLACE(_SQLText, '#_IdnOper#', QUOTE(_IdnOper));
			SET _SQLText = REPLACE(_SQLText, '#_Ng_GUID_orig#', QUOTE(_GUID));	--	 wyjatkowo tutaj parametr GUID jako NIE GUID pozycji ale jako GUID orygnalu
			SET _SQLText = REPLACE(_SQLText, '#_GRP_GUID#', QUOTE(_GUID));		--	 grupowanie - #_GRP_GUID# obsługujemy z parametru _GUUD
			SET @_SQLText.C_HT_TE_EXECUTE = _SQLText;

			
			SET _Param_E = _SQLText;
			IF IFNULL(_Param_D, '') <> "No.execute" THEN
				-- jmam CALL _ExecuteCmd(_SQLText, @Error);
				CALL _ExecuteCmd_Auto(_Param_E, @Error);
				-- CALL _erp_external_process_log_tools('Err.Check.for.Last.ID', '', '', '', 0, '', '');		
			END IF;	
		END IF;	
END$$

DROP PROCEDURE IF EXISTS `C_HT_xxNgPo_DO`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `C_HT_xxNgPo_DO`(
	IN _MODE VARCHAR(250),
	IN _FROM VARCHAR(250),
	IN _WORLD VARCHAR(250),
	IN _IdnOper VARCHAR(38),	--	IdnOper/IdnNg
	IN _GUID VARCHAR(38),		--	GUID pozycji
	IN _Param_A VARCHAR(255),
	IN _Param_B VARCHAR(255),	--	ew. Rodzaj np. dla Wyjazdu
	IN _Param_C VARCHAR(255),
	IN _Param_D VARCHAR(255),	--	_Param_D???
	IN _Param_E TEXT	--	Parametry
)
S_C_HT_xxNgPo_DO: BEGIN 
	DECLARE _SQLText TEXT;	
	DECLARE CZZ_Zamowienie INTEGER DEFAULT 0;
	DECLARE CZZ_KursDzis INTEGER DEFAULT 1;
	DECLARE CZZ_OdNowa INTEGER DEFAULT 2;
	
	set @jmam = '10';
	/*
	DECLARE _WORLD_PO, _WORLD_NG VARCHAR(100);
		SET 
			_MODE = REPLACE(REPLACE(REPLACE(REPLACE(_MODE, '`', ''), ' ', ''), 'xxpo', 'PO'), 'xxng', 'NG'),
			_WORLD = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(_WORLD, '`', ''), ' ', ''), 'xxpo:', 'PO:'), 'xxng:', 'NG:'), 'PO:', 'p:'), 'NG:', 'n:')
		;
		
		-- SET @_WORLD = 'n:E;p:XTE';
		SET _WORLD_NG = IF(LOCATE('n:E', _WORLD) > 0, 'E', IF(LOCATE('n:TE', _WORLD) > 0, 'TE', '')); 
		SET _WORLD_PO = IF(LOCATE('p:E', _WORLD) > 0, 'E', IF(LOCATE('p:TE', _WORLD) > 0, 'TE', '')); 
	*/

						IF (_MODE LIKE '%.Clear') OR (_MODE LIKE '%.Delete') THEN	
						/************************************************************************************************************************
							M.Clear
							TE.Clear
							M.p.Clear
							M.n.Clear
							M.vat.Clear
							M.corr.Clear
							ale rowniez
							p.Clear lub p.Delete
							itp
						*************************************************************************************************************************/
							SET @session.globals.OPZM.Apply.ver = _Globals_Get_Only_IFNULL('OPZM.Apply.ver', @session.globals.OPZM.Apply.ver);
							SET _MODE = REPLACE(_MODE, 'Delete', 'Clear');
							SET @Delete.All = (_MODE LIKE '_.Clear%') OR (_MODE LIKE 'TE.Clear');	
							SET @Delete.World = 
								IF((_MODE LIKE 'R.%') OR (_MODE LIKE 'Real.%'),
									'R',
									IF(_MODE LIKE 'E.%',
										'E',
										IF(_MODE LIKE 'M.%',
											'M',
											IF(_MODE LIKE 'TE.%',
												'TE',
												_WORLD
											)
										)
									)
								)
							;
							IF _MODE LIKE '%n.%' OR @Delete.All THEN	
								SET @.SQL.n.to.n.delete = "DELETE n FROM `#xxng#` n WHERE n.GUID = #_IdnOper#;";
								CALL _ExecuteCmd_xxNgPo('', _FROM, @Delete.World, _IdnOper, _GUID, _Param_A, @Delete.World, _Param_C, _Param_D, @.SQL.n.to.n.delete);
							END IF;
							
							IF _MODE LIKE '%p.%' OR @Delete.All THEN
								SET @.SQL.p.to.p.delete = "DELETE FROM `#xxpo#` WHERE #IdnOper# = #_IdnOper# ORDER BY IDN;";
								CALL _ExecuteCmd_xxNgPo('', _FROM, @Delete.World, _IdnOper, _GUID, _Param_A, @Delete.World, _Param_C, _Param_D, @.SQL.p.to.p.delete);
							END IF;
								
							IF (_MODE LIKE '%corr.%' OR @Delete.All) AND _FROM = 'OP' THEN
								SET @.SQL.pc.to.pc.delete = "DELETE FROM `#oppo_corr#` WHERE IdnOper_corr = #_IdnOper# ORDER BY IDN;";
								CALL _ExecuteCmd_xxNgPo('', _FROM, @Delete.World, _IdnOper, _GUID, _Param_A, @Delete.World, _Param_C, _Param_D, @.SQL.pc.to.pc.delete);
							END IF;
								
							IF _MODE LIKE '%vat.%' OR @Delete.All THEN
								SET @.SQL.vat.to.vat.delete = "DELETE v FROM `#xxng_vat#` v WHERE v.IdnOper = #_IdnOper#;";
								CALL _ExecuteCmd_xxNgPo('', _FROM, @Delete.World, _IdnOper, _GUID, _Param_A, @Delete.World, _Param_C, _Param_D, @.SQL.vat.to.vat.delete);
							END IF;
							
							LEAVE S_C_HT_xxNgPo_DO;		
						END IF;
						
						IF (_MODE LIKE 'R%->%') OR (_MODE LIKE 'E%->%') OR (_MODE LIKE 'M%->%') THEN	
						/************************************************************************************************************************
							z R do -> TE/E/M
							albo co jest dosc rzadkie
							z E do -> TE/M
						*************************************************************************************************************************/
							SET @session.globals.OPZM.Apply.ver = _Globals_Get_Only_IFNULL('OPZM.Apply.ver', @session.globals.OPZM.Apply.ver);
							SET @Move.All = (_MODE LIKE 'R->%') OR (_MODE LIKE 'E->%') OR (_MODE LIKE 'M->%');	--	np N->TE, N->M, N->E 
							SET @Move.FROM.TO = 
								IF(_MODE LIKE 'R%->%',
									'R',
									IF(_MODE LIKE 'E%->%',
										'E',
										IF(_MODE LIKE 'M%->%',
											'M',
											'N'
										)
									)
								)
							;
							SET @Move.World = 
								IF(_MODE LIKE '%->TE%',
									'TE',
									IF(_MODE LIKE '%->M%',
										'M',
										IF(_MODE LIKE '%->E%',
											'E',
											_WORLD
										)
									)
								)
							;
							SET @Move.Clear = (_MODE LIKE '%->Delete->%') OR (_MODE LIKE '%->Clear->%');
							
							IF _MODE LIKE '%.n->%.n' OR @Move.All THEN	
							--	Nagłowek
								SET @.SQL.n.to.n = "REPLACE `#xxng#` SELECT n.* FROM `#FROM.xxng#` n WHERE n.GUID = #_IdnOper#;";
								CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.n.to.n);
								SET @.SQL.OPZM.N.fvrudowz = (_FROM = 'OP');
								IF @.SQL.OPZM.N.fvrudowz THEN
									SET @.SQL.n.to.n.check.fvrudowz = "
									SET @.SQL.OPZM.N.fvrudowz = 
										IFNULL((SELECT n.fvrudowz FROM `#xxng#` n WHERE n.GUID = #_IdnOper#), 0)
									;
									"
									;
									CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.n.to.n.check.fvrudowz);
								END IF;
							END IF;
							
							IF _MODE LIKE '%.p->%.p' OR @Move.All THEN	
							--	pozycje
							--	Czy najpierw usuwac ????
								IF @Move.Clear THEN
									SET @.SQL.p.to.p.delete = "DELETE FROM `#xxpo#` WHERE #IdnOper# = #_IdnOper# ORDER BY IDN;";
									CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.p.to.p.delete);
								END IF;
							
								IF @.SQL.OPZM.N.fvrudowz THEN
									-- było do 29 XII 2021 
									-- SET @.SQL.p.to.p = "REPLACE `#xxpo#` SELECT p.* FROM `oppo` p WHERE p.IdnOperFin = #_IdnOper# ORDER BY p.IDN;";
									SET @.SQL.p.to.p = "REPLACE `#xxpo#` SELECT p.* FROM `oppo` p WHERE p.IdnOperFin = #_IdnOper# OR p.IdnOper = #_IdnOper# ORDER BY p.IDN;";					
								ELSE
									SET @.SQL.p.to.p = "REPLACE `#xxpo#` SELECT p.* FROM `#FROM.xxpo#` p WHERE p.#IdnOper# = #_IdnOper# ORDER BY p.IDN;";
								END IF;
								CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.p.to.p);
							END IF;
							
							IF (_MODE LIKE '%.corr->%.corr' OR @Move.All) AND _FROM = 'OP' THEN	
							--	pozycje korekty
							--	IF _MODE IN ('N.xxpo_corr->TE.xxpo_corr', 'N->TE') AND _FROM = 'OP' THEN	
							--	Czy najpierw usuwac ????
								IF @Move.Clear THEN
									SET @.SQL.pc.to.pc.delete = "DELETE FROM `#oppo_corr#` WHERE IdnOper_corr = #_IdnOper# ORDER BY IDN;";
									CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.pc.to.pc.delete);
								END IF;
								
								SET @.SQL.pc.to.pc = "INSERT INTO `#oppo_corr#` SELECT p.* FROM `#FROM.xxpo_corr#` p WHERE p.IdnOper_corr = #_IdnOper# ORDER BY p.IDN;";
								CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.pc.to.pc);
								SET @.SQL.pc.to.pc.2 = 
								"
								UPDATE `#oppo_corr#` c
								SET
									`Temporary` = 0
								WHERE
									c.IdnOper_corr = #_IdnOper#
								;
								"
								;
								CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.pc.to.pc.2);
							END IF;
							
							IF _MODE LIKE '%.vat->%.vat' OR @Move.All THEN	
							-- IF _MODE IN ('N.xxng_vat->TE.xxng_vat', 'N->TE') THEN	
							--	Czy najpierw usuwac ????
								IF @Move.Clear THEN
									SET @.SQL.vat.to.vat.delete = "DELETE v FROM `#xxng_vat#` v WHERE v.IdnOper = #_IdnOper#;";
									CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.vat.to.vat.delete);
								END IF;
								SET @.SQL.vat.to.vat = "REPLACE `#xxng_vat#` SELECT v.* FROM `#FROM.xxng_vat#` v WHERE v.IdnOper = #_IdnOper#;";
								CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.vat.to.vat);
								IF IFNULL(@session.globals.CALC.VAT.Ver, '') >= '2021' THEN
								/********************************************************
									Nowe od 2021 r. 
								********************************************************/
									CALL C_HT_xxng_vat('`xxng_vat`.make.fixed.bezpozycyjne.niezerowe', _FROM, @Move.World, _IdnOper, '', '', '', '', '');
									CALL C_HT_xxng_vat('`xxng_vat`.fill.brakujace.stawki', _FROM, @Move.World, _IdnOper, '', '', '', '', _Param_E);
								END IF;
							END IF;
							
							LEAVE S_C_HT_xxNgPo_DO;		
						END IF;
						
						IF (_MODE LIKE 'R%<-%') OR (_MODE LIKE 'E%<-%')  OR (_MODE LIKE 'M%<-%') THEN	
						/************************************************************************************************************************
							z R do <- TE/E/M
							albo co jest dosc rzadkie
							z E do <- TE/M
						*************************************************************************************************************************/
							SET @session.globals.OPZM.Apply.ver = _Globals_Get_Only_IFNULL('OPZM.Apply.ver', @session.globals.OPZM.Apply.ver);
							SET @Move.All = (_MODE LIKE 'R<-%') OR (_MODE LIKE 'E<-%') OR (_MODE LIKE 'M<-%');	--	np N->TE, N->M, N->E 
							SET @Move.FROM.TO = 
								IF(_MODE LIKE 'R%<-%',
									'R',
									IF(_MODE LIKE 'E%<-%',
										'E',
										IF(_MODE LIKE 'M%<-%',
											'M',
											'N'
										)
									)
								)
							;
							SET @Move.World = 
								IF(_MODE LIKE '%<-TE%',
									'TE',
									IF(_MODE LIKE '%<-M%',
										'M',
										IF(_MODE LIKE '%<-E%',
											'E',
											_WORLD
										)
									)
								)
							;
							SET @Move.Clear = (_MODE LIKE '%<-Delete<-%') OR (_MODE LIKE '%<-Clear<-%');
							
							IF _MODE LIKE '%.n<-%.n' OR @Move.All THEN	
							--	Nagłowek
								SET @.SQL.n.from.n = "REPLACE `#FROM.xxng#` SELECT n.* FROM `#xxng#` n WHERE n.GUID = #_IdnOper#;";
								CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.n.from.n);
							END IF;
						
							IF _MODE LIKE '%.p<-%.p' OR @Move.All THEN	
							--	pozycje
							--	Czy najpierw usuwac ????
								IF @Move.Clear THEN
									SET @.SQL.p.from.p.delete = "DELETE FROM `#TO.xxpo#` WHERE #IdnOper# = #_IdnOper# ORDER BY IDN;";
									CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.p.from.p.delete);
								END IF;
								
								SET @.SQL.p.from.p = "INSERT IGNORE INTO `#TO.xxpo#` SELECT p.* FROM `#xxpo#` p WHERE p.#IdnOper# = #_IdnOper# ORDER BY p.IDN;";
								CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.p.from.p);
							--	... i jeszcze podczepione		
								SET @.SQL.OPZM.N.fvrudowz = (_FROM = 'OP');
								IF @.SQL.OPZM.N.fvrudowz THEN
									SET @.SQL.n.to.n.check.fvrudowz = "
									SET @.SQL.OPZM.N.fvrudowz = 
										IFNULL((SELECT n.fvrudowz FROM `#xxng#` n WHERE n.GUID = #_IdnOper#), 0)
									;
									"
									;
									CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.n.to.n.check.fvrudowz);
								END IF;
								IF _FROM = 'OP' AND @.SQL.OPZM.N.fvrudowz THEN
								--	byla edycja podlaczonych WZ/PZ - usun laczac z oppo_e i pole IdnOper_e 
									SET @.SQL.p.from.p.FVWZ = "
									UPDATE `#xxng#` ne USE KEY (GUID), `#xxpo#` pe USE KEY (idnoperfin), `#TO.xxpo#` p USE KEY (UGUID) 
									SET
										p.IdnWZ = pe.IdnWZ,
										p.IdnOperFin = pe.IdnOperFin,
										p.idnvat = IF(pe.IdnOperFin = ne.GUID, pe.idnvat, p.idnvat),
										p.Rabat = IF(pe.IdnOperFin = ne.GUID, pe.Rabat, p.Rabat),
										p.idncennik = IF(pe.IdnOperFin = ne.GUID, pe.idncennik, p.idncennik),
									--	jmam 10 XII 2021
										p.Kurs = IF(pe.IdnOperFin = ne.GUID, pe.Kurs, p.Kurs),
										
										p.CenaNet = IF(pe.IdnOperFin = ne.GUID, pe.CenaNet, p.CenaNet),
										p.CenaNetWalzRab = IF(pe.IdnOperFin = ne.GUID, pe.CenaNetWalzRab, p.CenaNetWalzRab),
										p.cenabrt = IF(pe.IdnOperFin = ne.GUID, pe.cenabrt, p.cenabrt),
										
										p.wartnetwal = IF(pe.IdnOperFin = ne.GUID, pe.wartnetwal, p.wartnetwal),
										p.wartnet = IF(pe.IdnOperFin = ne.GUID, pe.wartnet, p.wartnet),
										p.wartvat = IF(pe.IdnOperFin = ne.GUID, pe.wartvat, p.wartvat),
										p.wartbrt = IF(pe.IdnOperFin = ne.GUID, pe.wartbrt, p.wartbrt), 
										p.wartbrtwal = IF(pe.IdnOperFin = ne.GUID, pe.wartbrtwal, p.wartbrtwal),
										
										p.koszt_nabycia = IF(pe.IdnOperFin = ne.GUID, pe.koszt_nabycia, p.koszt_nabycia),
										
										p.grp_GUID = IF(pe.IdnOperFin = ne.GUID, pe.grp_GUID, DEFAULT(p.grp_GUID)),
										p.grp_TowrSymb = IF(pe.IdnOperFin = ne.GUID, pe.grp_TowrSymb, DEFAULT(p.grp_TowrSymb)),
										p.grp_TowrNazwa = IF(pe.IdnOperFin = ne.GUID, pe.grp_TowrNazwa, DEFAULT(p.grp_TowrNazwa)),
										p.grp_Ilosc = IF(pe.IdnOperFin = ne.GUID, pe.grp_Ilosc, DEFAULT(p.grp_Ilosc)),
										p.grp_IdnTowr = IF(pe.IdnOperFin = ne.GUID, pe.grp_IdnTowr, DEFAULT(p.grp_IdnTowr)),
										p.grp_Jednostka = IF(pe.IdnOperFin = ne.GUID, pe.grp_Jednostka, DEFAULT(p.grp_Jednostka)),
										
										p.TowrNazwa2 = IF(pe.IdnOperFin = ne.GUID, pe.TowrNazwa2, p.TowrNazwa2),
										
										p.LP = IF(pe.IdnOperFin = ne.GUID, pe.LP, p.LP),
										
										p.Calc_ver = pe.Calc_ver
									WHERE
										ne.GUID = #_IdnOper#
										AND ne.fvrudowz <> 0
										AND 
										pe.IdnOperFin = ne.GUID
										AND
										p.GUID = pe.GUID
									;
									"
									;
									CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.p.from.p.FVWZ);
								END IF;
							END IF;
							
							IF (_MODE LIKE '%.corr<-%.corr' OR @Move.All) AND _FROM = 'OP' THEN	
							--	Czy najpierw usuwac ????
								IF @Move.Clear THEN
									SET @.SQL.pc.from.pc.delete = "DELETE FROM `#TO.xxpo_corr#` WHERE IdnOper_corr = #_IdnOper# ORDER BY IDN;";
									CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.pc.from.pc.delete);
								END IF;
								
								SET @.SQL.pc.from.pc = "INSERT INTO `#TO.xxpo_corr#` SELECT p.* FROM `#xxpo_corr#` p WHERE p.IdnOper_corr = #_IdnOper# ORDER BY p.IDN;";
								CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.pc.from.pc);
							
								-- DELETE oc FROM `oppo_corr` oc WHERE oc.idnoper_corr = _IdnOper;
								-- INSERT IGNORE INTO `oppo_corr` SELECT oc.* FROM `TE_oppo_corr` oc WHERE oc.idnoper_corr = _IdnOper;
							END IF;
							
							IF _MODE LIKE '%.vat<-%.vat' OR @Move.All THEN	
							--	Czy najpierw usuwac ????
								IF @Move.Clear THEN
									SET @.SQL.vat.from.vat.delete = "DELETE v FROM `#TO.xxng_vat#` v WHERE v.IdnOper = #_IdnOper#;";
									CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.vat.from.vat.delete);
								END IF;
								IF IFNULL(@session.globals.CALC.VAT.Ver, '') >= '2021' THEN
								/********************************************************
									Nowe od 2021 r. 
								********************************************************/
									SET @.SQL.vat.from.vat = 
										"REPLACE `#TO.xxng_vat#` SELECT v.* FROM `#xxng_vat#` v WHERE v.IdnOper = #_IdnOper# AND (v.Netto != 0 OR v.Brutto != 0 OR v.Vat != 0 OR v.NettoWal != 0 OR v.BruttoWal != 0 OR v.VatWal != 0); 	-- z niezerowymi wpisami"
									;
								ELSE
								/********************************************************
									Przed 2021 r.   2017, 1999
								********************************************************/
									SET @.SQL.vat.from.vat = 
										"REPLACE `#TO.xxng_vat#` SELECT v.* FROM `#xxng_vat#` v WHERE v.IdnOper = #_IdnOper#;"
									;
								END IF;
								CALL _ExecuteCmd_xxNgPo('', _FROM, @Move.World, _IdnOper, _GUID, _Param_A, @Move.FROM.TO, _Param_C, _Param_D, @.SQL.vat.from.vat);
							END IF;
							
							LEAVE S_C_HT_xxNgPo_DO;		
						END IF;
		
	IF NOT (_MODE LIKE 'SPEC.%') THEN
		SET 
			_MODE = REPLACE(REPLACE(REPLACE(REPLACE(_MODE, '`', ''), ' ', ''), 'xxpo', 'PO'), 'xxng', 'NG')
		;
	END IF;
	
		IF _MODE IN ('CHECK.NgPO.INF') THEN
			-- było SET @.NgPO.INF.Need.Refresh = IF((IFNULL(@.NgPO.INF.IdnOper, '') = _IdnOper), FALSE, TRUE);
			SET @.NgPO.INF.Need.Refresh = 
				IF((IFNULL(@.NgPO.INF.IdnOper, '') = _IdnOper), 
					(@.OPZM.GUI = 1), -- było FALSE, 
					TRUE
				);
			IF @.NgPO.INF.Need.Refresh THEN
				
				SET 
				@.NgPO.INF.IdnOper = _IdnOper,
				@.NgPO.INF.SQL = 
				"
				SELECT
					n.Idn,
					n.Rodzaj,
					n.Rodzaj_Typ,
					od.Grupa,
					od.Grupa AS OpTyp,
					od.Antyrodzaj,
					#n.grupaoper# AS grupaoper,
					n.datawplywu,
					_VarStr_NotNull(
					#NrDok#
					) AS NrDok,
					#n.NrDokMag# AS NrDokMag,
					#n.nrwewn# AS NrWewn,
					#n.NrFvWewn# AS NrFvWewn,
					n.KontrGUID,
					n.Waluta,
					n.Kurs,
					od.IsKorekta, 
					#n.fvrudowz# AS fvrudowz,
					od.MagTyp,
					od.MA_Kontrahenta,
					od.IsDostawa, od.MA_Magzyny, od.MA_Detale, od.IsPozycjeVisible,
					-- na razie NULL AS Default_AutoNum_Before_Apply
					od.Default_AutoNum_Before_Apply,
					n.Status,
					#n.paragon_printed#,
					#paragon_zafiskalizowany#,
					#n.kancelaria_kierunek# AS kancelaria_kierunek,
					#n.zaksiegowana# AS zaksiegowana,
					(n.CreatorGUID = @SYSTEM.Client.Session.log_USER_GUID) AS ThisIsUserRecord,		-- lub @SYSTEM.Client.Session.log_USER_GUID to samo co @session.INFO.User_GUID;
					od.SortTyp,
					n.ExtFlags
				-- FROM `#xxng#` n 
				INTO
					@.NgPO.INF.Idn,
					@.NgPO.INF.Rodzaj,
					@.NgPO.INF.Rodzaj_Typ,
					@.NgPO.INF.Grupa,
					@.NgPO.INF.OpTyp,
					@.NgPO.INF.Antyrodzaj,
					@.NgPO.INF.grupaoper,
					@.NgPO.INF.datawplywu,
					@.NgPO.INF.NrDok,
					@.NgPO.INF.NrDokMag,
					@.NgPO.INF.nrwewn,
					@.NgPO.INF.NrFvWewn,
					@.NgPO.INF.KontrGUID,
					@.NgPO.INF.Waluta,
					@.NgPO.INF.Kurs,
					@.NgPO.INF.ISKorekta,
					@.NgPO.INF.fvrudowz,
					@.NgPO.INF.MagTyp,
					@.NgPO.INF.MA_Kontrahenta,
					@.NgPO.INF.IsDostawa, @.NgPO.INF.MA_Magzyny, @.NgPO.INF.MA_Detale, @.NgPO.INF.IsPozycjeVisible,
					@.NgPO.INF.Default_AutoNum_Before_Apply,
					@.NgPO.INF.oper.Status,
					@.NgPO.INF.paragon_printed,
					@.NgPO.INF.paragon_zafiskalizowany,
					@.NgPO.INF.kancelaria_kierunek,
					@.NgPO.INF.zaksiegowana,
					@.NgPO.INF.ThisIsUserRecord,
					@.NgPO.INF.SortTyp,
					@.NgPO.INF.ExtFlags
				FROM (SELECT 'X' AS X) AS inf
				LEFT JOIN `#xxng#` n ON #n.GUID#	-- teraz left
				LEFT JOIN `operdoc` od ON od.Rodzaj = n.Rodzaj
				WHERE
					TRUE
					-- jmam n.GUID = #_IdnOper#
					-- AND #n.GUID#
				LIMIT 1
				;		
				"
				;	
				SET 
				@.NgPO.INF.SQL.Nrdok.OP = 
				"
					IF(n.Rodzaj IN (@ht.CKPKP, @ht.CKWKW, @ht.CRKBO), 
						n.nrdokkas,
						IF(n.Rodzaj IN (@ht.CBNWN, @ht.CBNMA),
							n.nrraportu,
							IF(od.Grupa = @ht.MG,
								n.NrDokMag,
								n.NrDokFin
							)
						)
					)
				",
				@.NgPO.INF.SQL.Nrdok.ZM = 
					QUOTE("")
				;	
				SET @.NgPO.INF.SQL = REPLACE(@.NgPO.INF.SQL, '#n.grupaoper#', IF(_FROM = 'OP', 'n.grupaoper', 'od.Grupa'));
				SET @.NgPO.INF.SQL = REPLACE(@.NgPO.INF.SQL, '#n.fvrudowz#', IF(_FROM = 'OP', 'n.fvrudowz', 'FALSE'));
				SET @.NgPO.INF.SQL = REPLACE(@.NgPO.INF.SQL, '#NrDok#', IF(_FROM = 'OP', @.NgPO.INF.SQL.Nrdok.OP, @.NgPO.INF.SQL.Nrdok.ZM));
				SET @.NgPO.INF.SQL = REPLACE(@.NgPO.INF.SQL, '#n.NrDokMag#', IF(_FROM = 'OP', 'n.NrDokMag', QUOTE("")));
				SET @.NgPO.INF.SQL = REPLACE(@.NgPO.INF.SQL, '#n.nrwewn#', IF(_FROM = 'OP', 'n.nrwewn', QUOTE("")));
				SET @.NgPO.INF.SQL = REPLACE(@.NgPO.INF.SQL, '#n.NrFvWewn#', IF(_FROM = 'OP', 'n.NrFvWewn', QUOTE("")));
				SET @.NgPO.INF.SQL = REPLACE(@.NgPO.INF.SQL, '#n.paragon_printed#', IF(_FROM = 'OP', 'n.paragon_printed', '0'));
				SET @.NgPO.INF.SQL = REPLACE(@.NgPO.INF.SQL, '#paragon_zafiskalizowany#', IF(_FROM = 'OP', 
					'IF(n.Rodzaj IN (0), n.paragon_printed, 0)', 
					'0'));
				SET @.NgPO.INF.SQL = REPLACE(@.NgPO.INF.SQL, '#n.kancelaria_kierunek#', IF(_FROM = 'OP', 
					'IF(n.Rodzaj IN (@ht.CKsNN), n.kancelaria_kierunek, 0)', 
					'0'));
				SET @.NgPO.INF.SQL = REPLACE(@.NgPO.INF.SQL, '#n.zaksiegowana#', IF(_FROM = 'OP', 'n.zaksiegowana', '0'));
					
				CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.NgPO.INF.SQL);
			--	Na koniec gdy mamy GUI czyli Gdy w Params mamy @.OPZM.GUI = 1 to musimy wstawic msg sterujace
				IF (@.OPZM.GUI = 1) THEN
					SET
						@.OPZM.GUI.ReadOnly = 0,
						@.NgPO.INF.ExistAttachPoz = NULL,
						@.NgPO.INF.ExistAttachPozFisk = NULL
					;
					IF _FROM = 'OP' THEN
					/**********************************************************************************************************************************
						WZ lub PZ gdy ma juz podczepione pozycje
						oraz ew. czy zafiskalizowany dok. finansowy
					**********************************************************************************************************************************/
						SET
						@.NgPO.INF.SQL.Fisk.poz = 
						"
						SELECT 
							COUNT(*) AS ExistAttachPoz,
							IFNULL(nfin.paragon_printed, 0) AS paragon_printed
						INTO
							@.NgPO.INF.ExistAttachPoz,
							@.NgPO.INF.ExistAttachPozFisk
						FROM `#oppo#` p, `#opng#` nfin
						WHERE
							-- p.IdnOper = '{8CCB5662-79EB-4566-A8CC-BF80DED23FE0}' 
							p.#IdnOper# = #_IdnOper#
							AND p.Rodzaj IN (10, 12)
							AND IFNULL(p.IDNWZ, '') != ''
							AND nfin.GUID = p.IDNWZ
						;
						"
						;
						CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.NgPO.INF.SQL.Fisk.poz);
					/**********************************************************************************************************************************
						Czy mam pozycje korygowane czyli czy pozycje dok. były korygowane?
					**********************************************************************************************************************************/
						SET
						@.NgPO.INF.SQL.Kor.poz = 
						"
						SELECT 
							COUNT(*) AS C 
						INTO
							@.NgPO.INF.Poz.korygowanych
						FROM `#oppo#` p 
						INNER JOIN `oppo` pkor ON pkor.guidkorpo = p.guid 
						WHERE 
							NOT(pkor.rodzaj IN (64, 65, 66, 70)) AND 
							p.idnoperfin = #_IdnOper#
						;
						"
						;
						CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.NgPO.INF.SQL.Kor.poz);
					/**********************************************************************************************************************************
						Gdy sam jako dokument byłem korygowany - czy mam mlodsze pozycje korygujace ten sam oryginal?
					**********************************************************************************************************************************/
						SET
						@.NgPO.INF.Poz.korygowanych.Pre = 0,
						@.NgPO.INF.Poz.korygowanych.Changed = 0,
					--	SQLka	
						@.NgPO.INF.SQL.Kor.poz.Pre = 
						"
						SELECT 
							COUNT(cprev.idn) AS cPosLater,
							IFNULL(SUM(c.Changed), 0)
						INTO
							@.NgPO.INF.Poz.korygowanych.Pre,
							@.NgPO.INF.Poz.korygowanych.Changed
						FROM `#oppo_corr#` c 
						LEFT JOIN `oppo_corr` cprev ON cprev.GUID_corr_prev = c.guid 
						WHERE  
							c.IdnOper_corr = #_IdnOper#
						;
						"
						;
						CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.NgPO.INF.SQL.Kor.poz.Pre);
						
					END IF;	
				--	Status umozliwia Edycje?	
					SET
						@.NgPO.INF.Status.NoEdit = 
						IFNULL(
						(
							SELECT 
								(s.ParamExtra = 'NoEdit') 
							FROM `slowniki_pierwotne` s 
							WHERE 
								s.Slownik_GUID = 
									IF(@.NgPO.INF.Rodzaj IN (@ht.CZmZP),
										'ZmZPStatus',
										IF(@.NgPO.INF.Rodzaj IN (@ht.ZM),
											'zamwstatus', 
											'OperStatus' 
										)
									)
								AND s.VALUE = @.NgPO.INF.oper.Status 
							
						), 0
						)
					;
				END IF;
				
			END IF;
		END IF;
		
		IF _MODE IN ('PO.CALC_ROWS') THEN
set @janusz.1 = '1';
		/*
			Naliczanie pozycji 
			UWAGA gdy @.CAL.FULL = TRUE to oznacza ze mamy wdrozona tabele `op_calc` i na niej liczymy
		*/
			SET @_WORLD_PO = IF(LOCATE('p:E', _WORLD) > 0, 'E', IF(LOCATE('p:TE', _WORLD) > 0, 'TE', _WORLD)); 
		--	Sprawdz/odswiez zmienne	bo...
set @janusz.1 = '2';
			CALL C_HT_xxNgPo_DO('CHECK.NgPO.INF', _FROM, _WORLD, _IdnOper, '', '', '', '', '', '');
set @janusz.1 = '3';
		--	... gdy OP i korekta z pozycjami to koniecznie licz z oppo_corr	
			IF _FROM = 'OP' AND @.NgPO.INF.ISKorekta AND @.NgPO.INF.MA_Detale THEN
set @janusz.1 = '3.1';
				CALL C_HT_xxNgPo_CalcPo('CALC.`xxpo`', 'OP.corr.j', @_WORLD_PO, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, '');		
			ELSE
set @janusz.1 = '3.2';
				CALL C_HT_xxNgPo_CalcPo('CALC.`xxpo`', _FROM, @_WORLD_PO, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, '');		
			END IF;
		END IF;

		IF _MODE IN ('PO.CALC_LP') THEN
		/*
		TODO nie działa jeszcze dla Wyjazdu - DOROBIĆ
			CALL C_HT_xxNgPo_DO('PO.CALC_LP', 'OP', 'E', 'E', 'IdnOper', 'guid', '', '', '', '', '');		
			albo
			CALL C_HT_xxNgPo_DO('`xxpo`.CALC_LP', 'OP', 'E', 'E', 'IdnOper', 'guid', '', '', '', '', '');		
			Ustawia LP wg 
			_Param_C
			
		*/
			-- było do 20 VI 2022 SET @aSortTyp = IF(IFNULL(_Param_C, IF(@session.globals.Owner = 'KONKOL', '2', '')) = '', 0, _Param_C);
			SET @aSortTyp = IFNULL(NULLIF(_Param_C, ''), 
					IF(@session.globals.Owner = 'KONKOL', 
						'2', 
						IF(@session.globals.Owner IN ('BALTIMA'),
							@ht.COpTypSortTyp_BY_zmpo_IF_exists,
							@.NgPO.INF.SortTyp
						)
					)
				)
			;
			DROP TEMPORARY TABLE IF EXISTS `t_xxpo_lp`;
			/*	było
			SET 
			_SQLText = 
			"
			CREATE TEMPORARY TABLE `t_xxpo_lp` ENGINE=MEMORY AS
				SELECT
					p.GUID, 
					_VarInt(0) AS LP
				FROM `#xxpo#` p
				LEFT JOIN `TowrNg` t ON p.idntowr = t.GUID
				#LEFT_JOIN_zmpo#
				WHERE
					p.#IdnOper# = #_IdnOper#
				ORDER BY 
					IF(@aSortTyp = @ht.COpTypSortTyp_NONE,
						CONCAT(p.LP, p.Idn),
						IF(@aSortTyp = @ht.COpTypSortTyp_Usluga_TreeNode_Symbol,
							CONCAT(p.usluga, t.Treenode, p.towrsymb),
							IF(@aSortTyp = @ht.COpTypSortTyp_Usluga_Symbol,
								CONCAT(IF(IFNULL(p.IdnTowr, '') = '', 'ZZZZZZ', ''), p.usluga, p.towrsymb),
								IF(@aSortTyp = @ht.COpTypSortTyp_BY_zmpo_IF_exists,
									CONCAT(IF(IFNULL(p.GUIDzm, '') != '', z.LP, 'ZZZZZZ'), p.LP, p.Idn),
									CONCAT(p.LP, p.Idn)
								)
							)
						)
					)
						
			;		
			"
			;
			*/
			SET 
			_SQLText = 
			"
			CREATE TEMPORARY TABLE `t_xxpo_lp` ENGINE=MEMORY AS
				SELECT
					p.GUID, 
					_VarInt(0) AS LP,
					p.IDN
				FROM `#xxpo#` p
				LEFT JOIN `TowrNg` t ON p.idntowr = t.GUID
				#LEFT_JOIN_zmpo#
				WHERE
					p.#IdnOper# = #_IdnOper#
				ORDER BY 
					#ORDER BY#
			;		
			"
			;
			
			SET _SQLText = 
				REPLACE(_SQLText, '#ORDER BY#', 
					IF(@aSortTyp = @ht.COpTypSortTyp_NONE,
						-- było "CONCAT_WS('', p.LP, p.Idn)",
						"p.LP, p.Idn",
						IF(@aSortTyp = @ht.COpTypSortTyp_Usluga_TreeNode_Symbol,
							"CONCAT_WS('', p.usluga, t.Treenode, p.towrsymb)",
							IF(@aSortTyp = @ht.COpTypSortTyp_Usluga_Symbol,
								"CONCAT_WS('', IF(IFNULL(p.IdnTowr, '') = '', 'ZZZZZZ', ''), p.usluga, p.towrsymb)",
								IF(@aSortTyp = @ht.COpTypSortTyp_BY_zmpo_IF_exists AND _FROM = 'OP',
									"CONCAT_WS('', IF(IFNULL(p.GUIDzm, '') != '', z.LP, 'ZZZZZZ'), p.LP, p.Idn)",
									-- było "CONCAT_WS('', p.LP, p.Idn)"
									"p.LP, p.Idn"
								)
							)
						)
					)
				
				)
			;
			SET _SQLText = 
				REPLACE(_SQLText, '#LEFT_JOIN_zmpo#', 
					IF(_FROM = 'OP' AND @aSortTyp = @ht.COpTypSortTyp_BY_zmpo_IF_exists, 
						'LEFT JOIN `zmpo` z ON z.GUID = p.GUIDzm', 
						''
					)
				);
				
			CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
			SET @.t_xxpo_lp.SQL = _SQLText;
			SET @_SQLText.C_HT_TE_EXECUTE.UPDATE.LP.XXpo = @_SQLText.C_HT_TE_EXECUTE;
			SET @LP = 0;
			UPDATE `t_xxpo_lp` t
			SET 
				t.LP = _VarInt(@LP := @LP + 1)
			;
			
			SET 
			_SQLText = 
			"
			UPDATE `#xxpo#` p, `t_xxpo_lp` t
			SET
				p.lp = t.lp -- , p.Update_status = 'NO_TRIGGER'
			WHERE 
				p.GUID = t.GUID
			; 
			"
			;
				
			CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
		END IF;
	
		IF _MODE IN ('PO<-TowrNg', 'TowrNg->PO') THEN
			IF _FROM = 'OP' THEN
				SET 
				@.SQLText.TowrNg.to.PO = 
				"
				UPDATE `#xxpo#` p, `TowrNg` t
				SET
					-- p.Tag = 1,
					p.TowrSymb = t.Symbol, 
					p.TowrNazwa = t.Nazwa, 
					p.IdnVat = IFNULL(IF((t.VatPrevYear > 0) AND (@session.vat.edityear <= t.VatPrevYear), t.VatPrevId, t.Vat), 0),
					p.Jednostka = t.Jednostka,
					p.Usluga = t.Usluga,
					-- p.ilewopakowaniu = IF(@session.globals.Owner = 'IZOHAN', t.opakowanie_zbiorcze_d, t.ilewopakowaniu),
					p.ilewopakowaniu = 
					CASE -- TODO dodać kolumnę do operdoc decydujaca co wchodzi do opak.
						WHEN @ht.doc.MagTyp = @ht.mtRZ THEN 	/*RZ, ZM OO = 2*/
						--	rozchod
							IF(@session.globals.Owner = 'IZOHAN', 
								t.opakowanie_zbiorcze_d, 
								t.opakowanie_d
							) 
						WHEN @ht.doc.MagTyp = @ht.mtPZ THEN 	/*PZ, ZM DD = 0*/
						--	przychod
							IF(@session.globals.Owner = 'IZOHAN', 
								t.ilewopakowaniu_zbiorczym_d, 
								t.ilewopakowaniu
							) 
						WHEN @ht.doc.MagTyp = @ht.mtMM THEN 	/*MM = 1*/
								t.ilewopakowaniu
						ELSE 		/*NN = 3*/
								t.ilewopakowaniu
					END,
					-- p.kat5 = t.katcol0,
					-- p.kat6 = t.katcol1,
					-- p.kat7 = t.katcol2,
					-- p.kat8 = t.katcol3,
					-- p.kat9 = t.katcol4,
					p.kat5 = IF(@.p.kat.from.zmpo := (IFNULL(p.ExtFlags, '') LIKE '%kat.from.zmpo%'), p.kat5, t.katcol0),
					p.kat6 = IF(@.p.kat.from.zmpo, p.kat6, t.katcol1),
					p.kat7 = IF(@.p.kat.from.zmpo, p.kat7, t.katcol2),
					p.kat8 = IF(@.p.kat.from.zmpo, p.kat8, t.katcol3),
					p.kat9 = IF(@.p.kat.from.zmpo, p.kat9, t.katcol4),
					p.cena_minimalna = t.cena_minimalna,
					p.opakowanie_zwrotne = t.opakowanie_zwrotne,
					-- było p.info = t.info,
					p.info = IFNULL(NULLIF(p.info, ''), t.info),
					-- było p.info2 = t.info2,
					p.info2 = IFNULL(NULLIF(p.info2, ''), t.info2),
					-- było p.info3 = t.info3,
					p.info3 = IFNULL(NULLIF(p.info3, ''), t.info3),
					-- było p.info4 = t.info4,
					p.info4 = IFNULL(NULLIF(p.info4, ''), t.info4),
					p.oplata_produktowa = t.oplata_produktowa,
					p.min_ord_quant = t.min_ord_quant,
					-- skok p.CzasOczekiwania = t.CzasOczekiwania,
					p.waga_jedn = t.waga,
					p.waga = IFNULL(t.waga, 0) * ABS(IFNULL(p.Ilosc, 0)),
					p.pkwiu = t.pkwiu,
					p.termin_waznosci = DATE_ADD(CURRENT_DATE(), INTERVAL t.dni_waznosci DAY),
					p.CenaNet = IF(p.Rodzaj IN (@ht.CInwn, @ht.CInNW, @ht.CInND), t.CenaZkpNet, p.CenaNet),
					p.ExtFlags = REPLACE(IFNULL(p.ExtFlags, ''), '(TowrNg->PO)', ''), 
					p.create_At = IF(p.create_At = '0000-00-00 00:00:00', NOW(), p.create_At)
				WHERE
					TRUE
					AND
					#p.GUID#
					AND
					#p.IdnOper#
					AND
					IFNULL(p.IdnTowr, '') != '' 
					AND 
					t.GUID = p.IdnTowr
					AND
					#p.IDN = 0#		-- tutaj zastepujemy nast. wstawka: IF(_Param_A LIKE '%p.IDN = 0%', 'IFNULL(p.IDN, 0) = 0', 'TRUE')
					AND 
					(IFNULL(p.IDN, 0) = 0 OR IFNULL(p.ExtFlags, '') LIKE '%(TowrNg->PO)%') 
				; 		
				"
				;
			ELSE
				SET 
				@.SQLText.TowrNg.to.PO = 
				"
				UPDATE `#xxpo#` p, `TowrNg` t
				SET
					p.TowrSymb = t.Symbol, 
					p.TowrNazwa = t.Nazwa, 
					p.IdnVat = IFNULL(IF((t.VatPrevYear > 0) AND (@session.vat.edityear <= t.VatPrevYear), t.VatPrevId, t.Vat), 0),
					p.Jednostka = t.Jednostka,
					p.Usluga = t.Usluga,
					p.ilewopakowaniu = 
					CASE -- TODO dodać kolumnę do operdoc decydujaca co wchodzi do opak.
						WHEN p.MagTyp = @ht.mtRZ THEN 	/*RZ, ZM OO = 2*/
						--	do odbiorcy
							IF(@session.globals.Owner = 'IZOHAN', 
								t.opakowanie_zbiorcze_d, 
								t.opakowanie_d
							) 
							
						WHEN p.MagTyp = @ht.mtPZ THEN 	/*PZ, ZM DD = 0*/
						--	do dostawcy
							IF(@session.globals.Owner = 'IZOHAN', 
								t.ilewopakowaniu_zbiorczym_d, 
								t.ilewopakowaniu
							) 
						WHEN p.MagTyp = @ht.mtMM THEN 	/*MM = 1 */
								t.ilewopakowaniu
						ELSE 		/*NN = 3*/
								t.ilewopakowaniu
					END,
					p.kat5 = t.katcol0,
					p.kat6 = t.katcol1,
					p.kat7 = t.katcol2,
					p.kat8 = t.katcol3,
					p.kat9 = t.katcol4,
					p.cena_minimalna = t.cena_minimalna,
					p.opakowanie_zwrotne = t.opakowanie_zwrotne,
					-- było p.info = t.info,
					p.info = IFNULL(NULLIF(p.info, ''), t.info),
					-- było p.info2 = t.info2,
					p.info2 = IFNULL(NULLIF(p.info2, ''), t.info2),
					-- było p.info3 = t.info3,
					p.info3 = IFNULL(NULLIF(p.info3, ''), t.info3),
					-- było p.info4 = t.info4,
					p.info4 = IFNULL(NULLIF(p.info4, ''), t.info4),
					p.oplata_produktowa = t.oplata_produktowa,
					p.min_ord_quant = t.min_ord_quant,
					p.CzasOczekiwania = t.CzasOczekiwania,
					p.waga = IFNULL(t.waga, 0) * ABS(IFNULL(p.Ilosc, 0)),	--	????
					-- p.pkwiu = t.pkwiu,
					-- p.termin_waznosci = DATE_ADD(CURRENT_DATE(), INTERVAL t.dni_waznosci DAY)
					p.waga_jedn = t.waga,
					p.zlecono = IFNULL(p.zlecono, 0),
					p.ExtFlags = REPLACE(IFNULL(p.ExtFlags, ''), '(TowrNg->PO)', ''),
					p.create_At = IF(p.create_At = '0000-00-00 00:00:00', NOW(), p.create_At)
				WHERE
					TRUE
					AND
					#p.GUID#
					AND
					#p.IdnNg#
					AND
					IFNULL(p.IdnTowr, '') != '' 
					AND 
					t.GUID = p.IdnTowr
					AND
					#p.IDN = 0# 	-- tutaj zastepujemy nast. wstawka: IF(_Param_A LIKE '%p.IDN = 0%', 'IFNULL(p.IDN, 0) = 0', 'TRUE')
					AND 
					(IFNULL(p.IDN, 0) = 0 OR IFNULL(p.ExtFlags, '') LIKE '%(TowrNg->PO)%')
				;
				"
				;

			END IF;
			
			CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.SQLText.TowrNg.to.PO);
			SET @_SQLText.C_HT_TE_EXECUTE.TowrNg = @_SQLText.C_HT_TE_EXECUTE;
		END IF;
	
						IF _MODE = 'PO<-POZYCJE_CENYRABAT' THEN
							CALL C_HT_xxNgPo_CenyRabaty('TE.PO<-pozycje_cenyrabat', _FROM, _WORLD, _IdnOper, _GUID, FALSE, FALSE, FALSE, '', _Param_E);
							CALL C_HT_xxNgPo_DO('PO.CALC_ROWS', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
						END IF;
	
						IF _MODE LIKE 'PO.POST%' THEN
						--	Sprawdz/odswiez zmienne	bo...
							CALL C_HT_xxNgPo_DO('CHECK.NgPO.INF', _FROM, _WORLD, _IdnOper, '', '', '', '', '', '');
						--	... 
						--	1. gdy nie ma pozycji to w ogole co my tu robimy 
							IF @.NgPO.INF.MA_Detale THEN
								IF _MODE = 'PO.POST' THEN
								--	2 gdy OP i korekta z pozycjami to koniecznie licz z oppo_corr	
									IF _FROM = 'OP' AND @.NgPO.INF.ISKorekta THEN
									--	Korekta
									--	najpierw system naliczy ...potem dopiero system usunie i wstawi pozycje dla changed <> 0 ...
						--	UWAGA to ponizej trzeba zamienic na cos innego!!!!			
										CALL C_HT_TE_Corr('E.`#oppo_corr#`.CALC.and.dostosuj.`#oppo#`', 'OP', _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
									/*	
									--	tera namasci z naglowka i ...	
										CALL C_HT_xxNgPo_DO('NG->PO', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
									--	namasci z towarow
										CALL C_HT_xxNgPo_DO('TowrNg->PO', _FROM, _WORLD, _IdnOper, '', _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
									*/	
									ELSE
						--	NIE Korekta
						set @.cc.1 := '1';
									--	system namasci z naglowka i ...	
										CALL C_HT_xxNgPo_DO('NG->PO', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
						set @.cc.1 := '2';
									--	namasci z towarow
										CALL C_HT_xxNgPo_DO('TowrNg->PO', _FROM, _WORLD, _IdnOper, '', _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
						set @.cc.1 := '3';
									--	przeliczy
										CALL C_HT_xxNgPo_DO('PO.CALC_ROWS', _FROM, _WORLD, _IdnOper, '', _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
						set @.cc.1 := '4';
									--	ustawi LP
										CALL C_HT_xxNgPo_DO('PO.CALC_LP', _FROM, _WORLD, _IdnOper, '', _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
									--	rozrzucanie	
										IF _FROM = 'OP' AND NOT @.NgPO.INF.ISKorekta THEN
											DO _counters_tools('SET', 'C_HT_xxNgPo_Rozrzuc', '', '');		-- to tylko Licznik!!!!
											CALL C_HT_xxNgPo_Rozrzuc('Transport', _FROM, _WORLD, _IdnOper, '', '', '', '', '');
										END IF;
									END IF;
								END IF;
							END IF;
						END IF;
	
		IF _MODE IN ('NG->PO', 'PO<-NG', 'NG->PO.for.WyjazdGUID', 'PO<-NG.for.WyjazdGUID') THEN	
			SET @aDoIt = @session.HT.IR.Wymus_przepisywanie_katcol_do_poz;
		--	Sprawdz/odswiez zmienne	bo...
			CALL C_HT_xxNgPo_DO('CHECK.NgPO.INF', _FROM, _WORLD, _IdnOper, '', '', '', '', '', '');
		--	... 
		--	1. gdy nie ma pozycji to w ogole co my tu robimy 
			IF @.NgPO.INF.MA_Detale THEN
				IF _FROM = 'OP' THEN
					SET 
					@.SQLText.NG.to.PO = 
					"
					UPDATE `#oppo#` p, `#opng#` n, `operdoc` od1, `operdoc` od
					SET
						-- n.IlePoz = @n.IlePoz := (IFNULL(n.IlePoz, 0) + 1),
						-- p.LP = @n.IlePoz,
						p.idnoperfin =  
							IF(IFNULL(p.idnwz, '') != '', 
								p.idnwz,
								p.idnoper
							),
						-- p.IdnOper_e = n.GUID,		--	tutaj docieramy tylko gdy tworzymy rekord (idn=0) - gdy wgrywamy z real to idn != 0 - jest to mozliwe w fvrudowz ale tylko gdy tworzymy wlasna pozycje uslugowa
						-- bylo p.rodzaj = n.rodzaj,
						p.rodzaj = od.Rodzaj,
						p.rodzaj_typ = n.rodzaj_typ,
						p.Tymczasowa = n.Tymczasowa,
						p.kontridn = n.kontridn,
						p.datawystaw = n.datawystaw,
						p.datasprzed = n.datasprzed,
						p.datawplywu = n.datawplywu,
						p.Ilosc = IFNULL(p.Ilosc, 1),
						-- p.rabat = IFNULL(p.rabat, 0),
						p.rabat = 
							IF(IFNULL(p.IDN, 0) = 0 AND IFNULL(p.GUIDZM, '') = '',  --	gdy idn zerowy i nie jest to poz. realizujaca zamowienie to wstaw
								IFNULL(n.kontrrabat, 0), 
								p.rabat
							),
						p.idncennik = IF(IFNULL(p.IDN, 0) = 0, n.kontrklasacenowa, p.idncennik),
						p.cenanet = IFNULL(p.cenanet, 0),
						-- p.IleOpakowan = 1,
						p.ilewopakowaniu = 1,
					--	było p.kurs = n.kurs,	
						p.kurs = IF(IFNULL(p.idnwz, '') <> '', p.kurs, n.kurs),	-- dla poz. WZ/PZ podczepionych już do dok. fin. nie powinno to zajsc
						-- bylo p.ZMagazynu = n.ZMagazynu, 
						p.ZMagazynu = 
							(
								CASE 
							/*RZ*/	WHEN od.MagTyp = @ht.mtRZ THEN IF(n.ZMagazynu > 0, n.ZMagazynu, n.DoMagazynu) 
							/*PZ*/	WHEN od.MagTyp = @ht.mtPZ THEN 0
							/*MM*/	WHEN od.MagTyp = @ht.mtMM THEN IF(n.ZMagazynu > 0, n.ZMagazynu, n.DoMagazynu) 
							/*NN*/	ELSE 0
								END
							),
						
						-- bylo p.DoMagazynu = n.DoMagazynu,
						p.DoMagazynu = 
							(
								CASE 
							/*RZ*/	WHEN od.MagTyp = @ht.mtRZ THEN 0
							/*PZ*/	WHEN od.MagTyp = @ht.mtPZ THEN IF(n.DoMagazynu > 0, n.DoMagazynu, n.ZMagazynu) 
							/*MM*/	WHEN od.MagTyp = @ht.mtMM THEN IF(n.DoMagazynu > 0, n.DoMagazynu, n.ZMagazynu) 
							/*NN*/	ELSE 0
								END
							),
						
						p.Calc_Ver = n.Calc_Ver,
						p.AreaGUID = IFNULL(p.AreaGUID, n.AreaGUID),
						p.TypSymbolow = IF(n.rodzaj = 73, 0, IFNULL(@tr.zmpo_e.TypSymbolow, 0)),  	-- dla CZmZP = 73  (Zamówienie - zlecenie produkcyjne)
						p.kat0 = IF(n.KatCol0 != -1 AND @aDoIt, n.KatCol0, p.kat0),
						p.kat1 = IF(n.KatCol1 != -1 AND @aDoIt, n.KatCol1, p.kat1),
						p.kat2 = IF(n.KatCol2 != -1 AND @aDoIt, n.KatCol2, p.kat2),
						p.kat3 = IF(n.KatCol3 != -1 AND @aDoIt, n.KatCol3, p.kat3),
						p.kat4 = IF(n.KatCol4 != -1 AND @aDoIt, n.KatCol4, p.kat4),
						p.cenanet = IF(p.opakowanie_zwrotne > 0, 0, p.cenanet),
						p.Rodzaj_Przeliczenia = IFNULL(n.Rodzaj_Przeliczenia,
					--	Gdy drukarka fiskalna i realizujemy tu paragon lub Fakt. imienna (uproszcz.) to ustaw rodzaj przeliczenia na 3 (Fiskalny)
							IF(IFNULL(@session.HT.IR.DrukarkaFiskalna, FALSE) AND n.Rodzaj IN (@ht.CSpBR, @ht.CSpRU, @ht.CSpKR /*, @ht.CRzWZ*/),
							--	UWAGA Powinien byc fiskalny = 3 ale dla JARZ jeśli jest 5 to niech zostanie !!!!
								IF(@session.globals.Owner = 'JARZEBINSCY' AND p.Rodzaj_Przeliczenia = 5, 
									5,  	--	dla JARZ jeśli jest 5 to niech zostanie !!!!
									3		--  3 -> _BN_CN_WN - fiskalne z brutto->netto  (fiskalne)
								),
								p.Rodzaj_Przeliczenia
							)
						),
					--	I JESZCZE MAGAZYNY TEZ UWAZGLEDNIJ	
					--	ExtFlag
						p.ExtFlags = REPLACE(IFNULL(p.ExtFlags, ''), '(NG->PO)', ''),
						p.create_At = IF(p.create_At = '0000-00-00 00:00:00', NOW(), p.create_At)
					WHERE
						TRUE
						AND
						#p.GUID#
					/*	było
						AND
						#p.IdnOper#
						AND
						n.GUID = p.IdnOper
					*/
						AND
						#n.GUID#
						AND
						p.IdnOper = n.GUID
					/*	12 III 2024 - jmam zakomentowałem bo i tak ng->po tylko po IdnOper
						AND
						n.fvrudowz = 0
					*/
						AND
						od1.Rodzaj = n.Rodzaj
						AND
						od.Rodzaj = 
							IF(od1.MA_Magzyny,
								IF(p.Ilosc > 0, 
									IFNULL(od1.rodzaj_plus, od.Rodzaj), 
									IFNULL(od1.rodzaj_minus, od.Rodzaj)
								),	
								od1.Rodzaj
							)
						/*	było do 30 V 2023 potem wprow. rodzaj_plus i rodzaj_minus
							IF(od1.MA_Magzyny,
								IF(od1.IsKorekta,
								--	Korekta
									IF((p.Ilosc > 0.0) OR (p.WartNet > 0),
										od1.AntyRodzaj,
										od1.Rodzaj
									),
								--	NIE Korekta
									IF(od1.Rodzaj IN (@ht.CInwn, @ht.CInNW, @ht.CInND),
										IF(p.Ilosc >= 0.0, @ht.CInNW, @ht.CInND),
										IF(od1.Rodzaj IN (@ht.CZmZP),
											@ht.CZM_ZP1,
											od1.Rodzaj
										)
									)
								),	
								od1.Rodzaj
							)
							*/
						AND
						#p.IDN = 0# 	-- tutaj zastepujemy nast. wstawka: IF(_Param_A LIKE '%p.IDN = 0%', 'IFNULL(p.IDN, 0) = 0', 'TRUE')
						AND 
						(IFNULL(p.IDN, 0) = 0 OR IFNULL(p.ExtFlags, '') LIKE '%(NG->PO)%')
					;
					"
					;
				ELSE
					SET 
					@.SQLText.NG.to.PO = 
					"
					UPDATE `#zmpo#` p, `#zmng#` n, `operdoc` od
					SET
						p.MagTyp = od.MagTyp,
						p.kontrGUID = n.kontrGUID,
						p.idn_kontrah = n.idn_kontrah,
						p.Tymczasowa = n.Tymczasowa,
						p.rabat = IF(IFNULL(p.rabat, 0) = 0, IFNULL(n.rabat, 0), p.rabat),
						p.idncennik = n.klasacenowa,
						
						p.rodzaj = n.rodzaj,
						p.rodzaj_typ = n.rodzaj_typ,
						p.wersja = n.wersja,
						p.idnmagazyn = IFNULL(n.idnmagazyn, p.idnmagazyn),
						p.MagazynWys = IFNULL(n.MagazynWys, p.MagazynWys),
						
						p.Calc_Ver = n.Calc_Ver,
						p.AreaGUID = IFNULL(p.AreaGUID, n.AreaGUID),
						p.terminrealizacji = IFNULL(n.terminrealizacji, p.terminrealizacji),
					
						p.TypSymbolow = IF(n.rodzaj = 73, 0, IFNULL(@tr.zmpo_e.TypSymbolow, 0)),  	-- dla CZmZP = 73  (Zamówienie - zlecenie produkcyjne)
						p.cenanet = IF(p.opakowanie_zwrotne > 0, 0, p.cenanet),
						p.Rodzaj_Przeliczenia = IFNULL(n.Rodzaj_Przeliczenia,
					--	Gdy drukarka fiskalna i realizujemy tu paragon lub Fakt. imienna (uproszcz.) to ustaw rodzaj przeliczenia na 3 (Fiskalny)
							IF(IFNULL(@session.HT.IR.DrukarkaFiskalna, FALSE) AND n.Rodzaj2 IN (0, 2),
								3,	--	_BN_CN_WN - fiskalne z brutto->netto  (fiskalne)
								p.Rodzaj_Przeliczenia
							)
						),
						p.reserve = IFNULL(@session.HT.IR.Rezerwacja, 0) AND od.MagTyp = 2,
						p.zlecono = IFNULL(p.zlecono, 0),

						p.kat0 = IF(n.KatCol0 != -1 AND @aDoIt, n.KatCol0, p.kat0),
						p.kat1 = IF(n.KatCol1 != -1 AND @aDoIt, n.KatCol1, p.kat1),
						p.kat2 = IF(n.KatCol2 != -1 AND @aDoIt, n.KatCol2, p.kat2),
						p.kat3 = IF(n.KatCol3 != -1 AND @aDoIt, n.KatCol3, p.kat3),
						p.kat4 = IF(n.KatCol4 != -1 AND @aDoIt, n.KatCol4, p.kat4),
						p.kurs = n.kurs,
					--	ExtFlag
						p.ExtFlags = REPLACE(IFNULL(p.ExtFlags, ''), '(NG->PO)', ''),
						p.create_At = IF(p.create_At = '0000-00-00 00:00:00', NOW(), p.create_At)
					WHERE
						TRUE
						AND
						#p.GUID#
					/*	było
						AND
						#p.IdnNg#
						AND
						n.GUID = p.IdnNg
					*/
						AND
						#n.GUID#
						AND
						p.IdnNg = n.GUID
						AND
						od.Rodzaj = n.Rodzaj
						AND
						#p.IDN = 0# 	-- tutaj zastepujemy nast. wstawka: IF(_Param_A LIKE '%p.IDN = 0%', 'IFNULL(p.IDN, 0) = 0', 'TRUE')
						AND 
						(IFNULL(p.IDN, 0) = 0 OR IFNULL(p.ExtFlags, '') LIKE '%(NG->PO)%')
					;	
					"
					;
				END IF;
				IF _MODE LIKE '%.for.WyjazdGUID' THEN
					SET _SQLText = REPLACE(_SQLText, '#n.GUID#', '#n.WyjazdGUID#');
				END IF;
				
				CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.SQLText.NG.to.PO);
				
				IF _FROM = 'OP' AND @.NgPO.INF.fvrudowz THEN
				--	Dok. mający nie własne pozycje - UWAGA na przepisywanie np. kursu z nagłowka - możemy to zrobic jedynie dla
				--	IdnOperFin
					SET 
					@.SQLText.NG.to.PO.kurs = 
					"
					UPDATE `#oppo#` p, `#opng#` n -- , `operdoc` od1, `operdoc` od
					SET
						p.kurs = n.kurs
					WHERE
						#n.GUID#
						AND 
						TRUE
						AND
						#p.GUID#
						AND
						p.IdnOperFin = n.GUID
						AND
						n.fvrudowz <> 0
					/*	
						AND
						#p.IDN = 0# 	-- tutaj zastepujemy nast. wstawka: IF(_Param_A LIKE '%p.IDN = 0%', 'IFNULL(p.IDN, 0) = 0', 'TRUE')
						AND 
						(IFNULL(p.IDN, 0) = 0 OR IFNULL(p.ExtFlags, '') LIKE '%(NG->PO)%')
					*/
					;	
					"
					;
					IF _MODE LIKE '%.for.WyjazdGUID' THEN
						SET _SQLText = REPLACE(_SQLText, '#n.GUID#', '#n.WyjazdGUID#');
					END IF;
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.SQLText.NG.to.PO.kurs);
				END IF;
			END IF;
		END IF;

		IF _MODE IN ('NG<-kontrah', 'kontrah->NG', 'NG<-kontrah.for.WyjazdGUID') THEN
			IF _FROM = 'OP' THEN
		--	OPERACJE	
				SET 
				_SQLText = 
				"
				UPDATE `#xxng#` n
				INNER JOIN `operdoc` od ON od.Rodzaj = n.Rodzaj
				LEFT JOIN `kontrah` k ON k.guid = n.KontrGUID AND IFNULL(n.KontrGUID, '') <> ''
				SET
					n.kontridn = IFNULL(k.Idn, 0),
					n.kontrnazwa = IFNULL(k.nazwa, ''),
					n.kontrsymbol = IFNULL(k.symbol, ''),
					n.kontradres = IFNULL(CONCAT(k.ulica,', ',k.zipcode, ' ', k.nazwamiasta), ''),
					n.kontrklasacenowa = IF(NOT IFNULL(@session.HT.IR.KlasyCenowe_z_UGRPGUID, FALSE) OR n.kontrklasacenowa = 0, IFNULL(k.klasacenowa, 0), n.kontrklasacenowa),
					n.kontrnip = IFNULL(k.nip, ''),
					n.kontrpodzialnip = IFNULL(k.podzialnip, 0),
					n.kontrupowaznienie = IFNULL(k.Upowaznienie, 0),
					n.spedycja = IFNULL(k.spedycja, 0),
					n.platnikguid = 
						IF(IFNULL(n.PlatnikGUID, '') = '' AND IFNULL(n.KontrGUID, '') != '',
							IFNULL(k.platnikguid, n.KontrGUID),
							n.platnikguid
						),
					
					n.akwizytorguid = IFNULL(k.akwizytorguid, ''),
					-- n.rodzaj2 = IFNULL(k.rodzaj2, 2),
					n.rodzaj2 = (@.n.rodzaj2 := IFNULL(k.rodzaj2, 1)), 
					n.kontrrabat = IFNULL(k.rabat, 0),
					n.idn_tab_kurs = IFNULL(k.idn_tab_kurs, 0),
					n.Odbierajacy = IF(@session.HT.IR.PrzenosOdbierajacegoZKartyKontrahenta AND k.Upowaznienie = 0, k.Odbierajacy, n.Odbierajacy),
			-- 2016-01-14	n.Przeliczenie_B_N = (@session.HT.IR.Przeliczenie_B_N AND (n.grupaoper = @ht.ST OR n.Rodzaj = 10)),
			-- 		n.Przeliczenie_B_N = IF(@session.HT.IR.Przeliczenie_B_N_z_klasy_cen, kc.czy_ceny_brt, n.Przeliczenie_B_N),
					-- n.lang_id = k.lang_id,
					n.lang_id = IFNULL(n.lang_id, k.lang_id),
					n.KatCol0 = IFNULL(IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng AND NOT (IFNULL(n.ExtFlags, '') LIKE '%<NG.KatColZZamowienia>%'), 
                        k.KatCol0, n.KatCol0), -1),
					n.KatCol1 = IFNULL(IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng AND NOT (IFNULL(n.ExtFlags, '') LIKE '%<NG.KatColZZamowienia>%'), 
                        k.KatCol1, n.KatCol1), -1),
					n.KatCol2 = IFNULL(IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng AND NOT (IFNULL(n.ExtFlags, '') LIKE '%<NG.KatColZZamowienia>%'), 
                        k.KatCol2, n.KatCol2), -1),
					n.KatCol3 = IFNULL(IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng AND NOT (IFNULL(n.ExtFlags, '') LIKE '%<NG.KatColZZamowienia>%'), 
                        k.KatCol3, n.KatCol3), -1),
					n.KatCol4 = IFNULL(IF(@session.HT.IR.Przepisz_katcol_kontrah_do_opng AND NOT (IFNULL(n.ExtFlags, '') LIKE '%<NG.KatColZZamowienia>%'), 
                        k.KatCol4, n.KatCol4), -1),
				--	Stare ... inicj.spos.platn - nie uzywane (błędna logika)
					-- stare n.sposobplatn = IF((od.grupa IN (@ht.ZT, @ht.ZP)) AND @session.HT.IR.Zakup_nie_inicjuj_sposobu_platnosci_z_karty_kontra, n.sposobplatn, IFNULL(k.sposplat, 0)),
				--	Nowe ... inicj.spos.platn 	(apro luty 2022) + (jmam mar 2022)
					n.sposobplatn = 
						_Get_sposobplatn('', 'OP', od.grupa, n.Rodzaj, n.sposobplatn, k.sposplat, 0),
					n.kontofk = 
						IFNULL(
						IF(@session.globals.Owner != 'ASEKURACJA', 
							IF(od.RzTyp IN (@ht.Rz_NL, @ht.RzSNL, @ht.Rz_SN, @ht.RzSSN), -- aRzTyp in [Rz_NL, RzSNL, Rz_SN, RzSSN],
								k.kontofk,
								IF(od.RzTyp IN (@ht.Rz_ZB, @ht.RzSZB, @ht.Rz_SZ, @ht.RzSSZ), -- aRzTyp in [Rz_ZB, RzSZB, Rz_SZ, RzSSZ],
									k.kontofk2,
									n.kontofk
								)	
							),	
							n.kontofk
						), ''),
					n.uwagi = 
						IFNULL(
						IF(@session.HT.IR.przepisz_uwagi_kontrah_do_oper, 
							IF(@session.globals.Owner = 'CDG',
								CONCAT(k.UwagiNaFV, '\n'),
								_CONCATStr(k.Uwagi, k.UwagiNaFV, '\n') 
							),
							n.uwagi
						), ''),
					n.dotyczy = 
						IFNULL(
						IF(@session.globals.Owner = 'STANPOL', 
							k.opis_dzialalnosci, 
							n.dotyczy
						), n.dotyczy),
					k.TypSymbolow = (@tr.oppo_e.TypSymbolow := k.TypSymbolow),
					n.ugrpGUID = IF(@session.HT.IR.przepisz_ugrpGUID_z_kontrah, k.ugrpGUID, n.ugrpGUID),
					n.AreaGUID = 
					/* 
						AREAGUID w triggerach
						gdy @session.HT.IR.Inicjuj_lokaliozacje_z_Kontrahenta to ...
							gdy kontrahent byl pusty czyli jest inicjowany to
								gdy AreaGUID jest pusty to inicjuj
								gdy AreaGUID jest ustawiony to oznacza ze inicjujemy te lokalizacje wczesniej i zostawiamy ja nie zminiajac
							gdy kontrahent NIE byl pusty to zawsze zminiamy lokalizacje
						A TUTAJ...
							zmieniamy tylko gdy AreaGUID jest pusty 
							Jesli chcemy zminic wraz z nowym kontrahentem takze AreaGUID to musimy w UPDATE na `kontrGUID` dodać czyszczenie `AreaGUID`
					
					*/
						IF(@session.HT.IR.Inicjuj_lokaliozacje_z_Kontrahenta AND IFNULL(n.AreaGUID, '') = '' AND od.Init_AreaGUID, 
							IFNULL(k.AreaGUID,
								(SELECT an.GUID FROM `erp_area_nodes` an WHERE an.Type = 'LOC' AND an.KontrGUID = n.KontrGUID LIMIT 1)
							),
							n.AreaGUID
						),
					n.split_payment = IF(od.grupa IN (@ht.ZT, @ht.ZP), k.SplitPayment, 0),
				--	pole powiazany w `kontrah` gdy 0 po pole jpkflags tylko czyścic gdy <> 0 dodać do jpkflags 'TP'
					n.jpkflags = 
						CASE WHEN @session.globals.Owner = 'INT' THEN
						REPLACE(
							IF(IFNULL(k.powiazany, 0) <> 0 AND n.rodzaj IN (1),
								REPLACE(CONCAT_WS(';', REPLACE(CONCAT(NULLIF(n.jpkflags, ''), ';'), 'TP;', ''), 'TP'), ';;', ';'),
								REPLACE(CONCAT(NULLIF(n.jpkflags, ''), ';'), 'TP;', '')
							),
							';;', ';'
						)

						ELSE
						REPLACE(
							IF(IFNULL(k.powiazany, 0) = 0,
								REPLACE(CONCAT(NULLIF(n.jpkflags, ''), ';'), 'TP;', ''), 
								REPLACE(CONCAT_WS(';', REPLACE(CONCAT(NULLIF(n.jpkflags, ''), ';'), 'TP;', ''), 'TP'), ';;', ';')
							),
							';;', ';'
						)
						END,
					
					
					n.Przeliczenie_B_N = 
						(IFNULL(@session.HT.IR.DrukarkaFiskalna, FALSE) AND (n.Rodzaj IN (0, 2) OR (n.Rodzaj = 10 and k.rodzaj2 IN (0, 2))))
						OR
						(IFNULL(@session.HT.IR.Przeliczenie_B_N, FALSE) AND (n.grupaoper = @ht.ST OR n.Rodzaj = 10)),
						
					n.Rodzaj_Przeliczenia = 
				--	Gdy drukarka fiskalna i realizujemy tu paragon lub Fakt. imienna (uproszcz.) to ustaw rodzaj przeliczenia na 3 (Fiskalny)
				--	Mamy ciag zam-> Rodzaj2 ale przeliczany wg rodzaju rodzaj_fin_do_WZ z kontrahenta... potem Rodzaj2->Finansowy
						IF(
						IFNULL(@session.HT.IR.DrukarkaFiskalna, FALSE) AND 
						(n.Rodzaj IN (@ht.CSpBR, @ht.CSpRU, @ht.CSpKR) OR (n.Rodzaj = 10 AND IFNULL(k.rodzaj_fin_do_WZ, @.n.rodzaj2) IN (@ht.CSpBR, @ht.CSpRU, @ht.CSpKR))),
						--	UWAGA Powinien byc fiskalny = 3 ale dla JARZ jest 5 !!!!
							IF(@session.globals.Owner = 'JARZEBINSCY',
								5,
								3	--	_BN_CN_WN - fiskalne z brutto->netto  (fiskalne)
							),
							n.Rodzaj_Przeliczenia
						),
						
					n.ExtFlags = REPLACE(IFNULL(n.ExtFlags, ''), '(NG<-Kontrah)', ''),
					
					n.NrDokFin = IF(n.NrDokFin = '***KONTR***', REPLACE('***KONTR***', 'KONTR', SUBSTR(k.Symbol, 1, 14)), n.NrDokFin),
					n.NrDokMag = IF(n.NrDokMag = '***KONTR***', REPLACE('***KONTR***', 'KONTR', SUBSTR(k.Symbol, 1, 14)), n.NrDokMag),
					n.NrWewn = IF(n.NrWewn = '***KONTR***', REPLACE('***KONTR***', 'KONTR', SUBSTR(k.Symbol, 1, 14)), n.NrWewn),
					n.NrDokKas = IF(n.NrDokKas = '***KONTR***', REPLACE('***KONTR***', 'KONTR', SUBSTR(k.Symbol, 1, 14)), n.NrDokKas)
					
				/*					
					  {$IFDEF UprawnieniaDoZapisow}
					  if RegistryInt.GetRegIntValueBoolean('przepisz_ugrpGUID_z_kontrah', False, 'OPNGINFOPATH') then
						aNaglowek.FieldByName('ugrpGUID').AsString := aDSTempKontrah.FieldByName('ugrpGUID').AsString;
					  {$ENDIF UprawnieniaDoZapisow}
				*/
				WHERE 
					#n.GUID#
					AND 
					(IFNULL(n.IDN, 0) = 0 OR IFNULL(n.ExtFlags, '') LIKE '%(NG<-Kontrah)%')
				;
				"
				;
			ELSE
		--	ZAMOWIENIA	
				--	Na chwile aby zawsze pobrac z IREga - zmienna @session.HT.IR.Przepisz_katcol_kontrah_do_zmng nie byla dotad uzywana !!!!!!!!!!!!!!
					SET @session.HT.IR.Przepisz_katcol_kontrah_do_zmng = IFNULL(@session.HT.IR.Przepisz_katcol_kontrah_do_zmng, @session.HT.IR.Przepisz_katcol_kontrah_do_opng);
				SET 
				_SQLText = 
				"
				UPDATE `#xxng#` n
				INNER JOIN `operdoc` od ON od.Rodzaj = n.Rodzaj
				LEFT JOIN `kontrah` k ON k.guid = n.KontrGUID AND IFNULL(n.KontrGUID, '') <> ''
				SET
					n.idn_kontrah = IFNULL(k.Idn, 0),
					-- n.kontrnazwa = IFNULL(k.nazwa, ''),
					n.kontrsymbol = IFNULL(k.symbol, ''),
					n.klasacenowa = IF(NOT IFNULL(@session.HT.IR.KlasyCenowe_z_UGRPGUID, FALSE) OR n.klasacenowa = 0, IFNULL(k.klasacenowa, 0), n.klasacenowa),
					n.spedycja = IFNULL(k.spedycja, 0),
					n.platnikguid = IFNULL(k.platnikguid, ''),
					n.akwizytorguid = IFNULL(k.akwizytorguid, ''),
					n.rodzaj2 = (@.n.rodzaj2 := IFNULL(k.rodzaj2, 1)), 
					n.rabat = IFNULL(k.rabat, 0),
					n.idn_tab_kurs = IFNULL(k.idn_tab_kurs, 0),
			-- 2016-01-14	n.Przeliczenie_B_N = (@session.HT.IR.Przeliczenie_B_N AND (n.grupaoper = @ht.ST OR n.Rodzaj = 10)),
			-- 		n.Przeliczenie_B_N = IF(@session.HT.IR.Przeliczenie_B_N_z_klasy_cen, kc.czy_ceny_brt, n.Przeliczenie_B_N),
					-- n.lang_id = k.lang_id,
					n.lang_id = (@.k.lang_id := IFNULL(n.lang_id, k.lang_id)),
					n.KatCol0 = IFNULL(IF(@session.HT.IR.Przepisz_katcol_kontrah_do_zmng, k.KatCol0, n.KatCol0), -1),
					n.KatCol1 = IFNULL(IF(@session.HT.IR.Przepisz_katcol_kontrah_do_zmng, k.KatCol1, n.KatCol1), -1),
					n.KatCol2 = IFNULL(IF(@session.HT.IR.Przepisz_katcol_kontrah_do_zmng, k.KatCol2, n.KatCol2), -1),
					n.KatCol3 = IFNULL(IF(@session.HT.IR.Przepisz_katcol_kontrah_do_zmng, k.KatCol3, n.KatCol3), -1),
					n.KatCol4 = IFNULL(IF(@session.HT.IR.Przepisz_katcol_kontrah_do_zmng, k.KatCol4, n.KatCol4), -1),
					-- WYJASNIJ!!! n.sposobplatn = IF(@session.HT.IR.Zakup_nie_inicjuj_sposobu_platnosci_z_karty_kontra, n.sposobplatn, IFNULL(k.sposplat, 0)),
					-- no no n.sposobplatn = IFNULL(IF(@session.HT.IR.Zakup_nie_inicjuj_sposobu_platnosci_z_karty_kontra, n.sposobplatn, k.sposplat), k.sposplat),
				--	Dla zam. z klientem przychodowe (a la zakup) ...	
				--	n.sposobplatn = IF((od.MagTyp = 0) AND od.MA_Kontrahenta AND @session.HT.IR.Zakup_nie_inicjuj_sposobu_platnosci_z_karty_kontra, n.sposobplatn, IFNULL(k.sposplat, 0)),
				--	Nowe ... inicj.spos.platn 	(apro luty 2022) + (jmam mar 2022)
				--	n.sposobplatn = IF((od.MagTyp = 0) AND od.MA_Kontrahenta AND @session.HT.IR.Zakup_inicjuj_sposob_platnosci_z_karty_kontrah, IFNULL(k.sposplat, 0), n.sposobplatn),
				--	n.sposobplatn = IFNULL(k.sposplat, IFNULL(n.sposobplatn, 0)),
					n.sposobplatn = 
						_Get_sposobplatn('', 'ZM', od.grupa, n.Rodzaj, n.sposobplatn, k.sposplat, 0),
					n.uwagi = 
						IFNULL(
						IF(@session.HT.IR.przepisz_uwagi_kontrah_do_oper, 
							IF(@session.globals.Owner = 'CDG',
								CONCAT(_VarStr(k.UwagiNaFV), '\n'),
								CONCAT_WS('\n', _VarStr(k.Uwagi), _VarStr(k.UwagiNaFV)) 
							),
							_VarStr(n.uwagi)
						), ''),
						
					n.Przeliczenie_B_N = 
						(IFNULL(@session.HT.IR.DrukarkaFiskalna, FALSE) AND (@.n.rodzaj2 IN (0, 2)))
						OR
						IF(k.guid IS NULL, 
							DEFAULT(n.Przeliczenie_B_N),
							IFNULL((SELECT kc.czy_ceny_brt FROM `klasycen` kc WHERE kc.idn = k.klasacenowa), n.Przeliczenie_B_N)
						),	
						
					n.Rodzaj_Przeliczenia = 
				--	Gdy drukarka fiskalna i realizujemy tu paragon lub Fakt. imienna (uproszcz.) to ustaw rodzaj przeliczenia na 3 (Fiskalny)
				--	Mamy ciag zam-> Rodzaj2 ale przeliczany wg rodzaju rodzaj_fin_do_WZ z kontrahenta... potem Rodzaj2->Finansowy
						IF(
						IFNULL(@session.HT.IR.DrukarkaFiskalna, FALSE) AND 
						(@.n.rodzaj2 IN (@ht.CSpBR, @ht.CSpRU, @ht.CSpKR) OR (@.n.rodzaj2 = 10 AND IFNULL(k.rodzaj_fin_do_WZ, @.n.rodzaj2) IN (@ht.CSpBR, @ht.CSpRU, @ht.CSpKR))),
							3,	--	_BN_CN_WN - fiskalne z brutto->netto  (fiskalne)
							n.Rodzaj_Przeliczenia
						),
						
					k.TypSymbolow = (@tr.oppo_e.TypSymbolow := k.TypSymbolow),
					n.ugrpGUID = IF(@session.HT.IR.przepisz_ugrpGUID_z_kontrah, k.ugrpGUID, n.ugrpGUID),
					n.zamawiajacy = k.odp_za_zam,	
					n.warunki_dostawy = 
						IF(NOT @session.globals.Owner in ('POLAM','AXIS'),
							_varSTR(k.UwagiNaFV), 
							_varSTR(n.warunki_dostawy)
						),
					n.warunki_dostawy_2 = 
						IF(NOT @session.globals.Owner = 'BALTIMA',
						--	wszyscy
							_varSTR(n.warunki_dostawy_2),
						--	dla BALTIMA	zal. od lang_id
							/*	było
							IF(n.Rodzaj IN (@ht.CZmOO, @ht.CZmEX),
								IFNULL(@session.HT.IR.Tresc.warunki.Sostawy.na.ZMOO, n.warunki_dostawy_2),
								IF(n.Rodzaj IN (@ht.CZmDD, @ht.CZmIm),
									IFNULL(@session.HT.IR.Tresc.warunki.Sostawy.na.ZMDD, n.warunki_dostawy_2),
									n.warunki_dostawy_2
								)
							)
							*/
							IFNULL(
								IF(n.Rodzaj IN (@ht.CZmOO, @ht.CZmEX),
								--	zm OO - teraz język
									-- było IFNULL(@session.HT.IR.Tresc.warunki.Sostawy.na.ZMOO, n.warunki_dostawy_2),
									IF(@.k.lang_id = 'pl',
										_varSTR(@session.HT.IR.Tresc.warunki.Dostawy.na.ZMOOpl),
										IF(@.k.lang_id = 'en',
											_varSTR(@session.HT.IR.Tresc.warunki.Dostawy.na.ZMOOen),
											IF(@.k.lang_id = 'de',
												_varSTR(@session.HT.IR.Tresc.warunki.Dostawy.na.ZMOOde),
												IF(@.k.lang_id = 'fr',
													_varSTR(@session.HT.IR.Tresc.warunki.Dostawy.na.ZMOOfr),
													NULL
												)
											)
										)
									),
									IF(n.Rodzaj IN (@ht.CZmDD, @ht.CZmIm),
									--	zm DD - tu także język
										-- było IFNULL(@session.HT.IR.Tresc.warunki.Sostawy.na.ZMDD, n.warunki_dostawy_2),
										IF(@.k.lang_id = 'pl',
											_varSTR(@session.HT.IR.Tresc.warunki.Dostawy.na.ZMDDpl),
											IF(@.k.lang_id = 'en',
												_varSTR(@session.HT.IR.Tresc.warunki.Dostawy.na.ZMDDen),
												IF(@.k.lang_id = 'de',
													_varSTR(@session.HT.IR.Tresc.warunki.Dostawy.na.ZMDDde),
													IF(@.k.lang_id = 'fr',
														_varSTR(@session.HT.IR.Tresc.warunki.Dostawy.na.ZMDDfr),
														NULL
													)
												)
											)
										),
										NULL
									)
								),
								n.warunki_dostawy_2
							)
						),
					n.AreaGUID = 
					/* 
						AREAGUID w triggerach
						gdy @session.HT.IR.Inicjuj_lokaliozacje_z_Kontrahenta to ...
							gdy kontrahent byl pusty czyli jest inicjowany to
								gdy AreaGUID jest pusty to inicjuj
								gdy AreaGUID jest ustawiony to oznacza ze inicjujemy te lokalizacje wczesniej i zostawiamy ja nie zminiajac
							gdy kontrahent NIE byl pusty to zawsze zminiamy lokalizacje
						A TUTAJ...
							zmieniamy tylko gdy AreaGUID jest pusty 
							Jesli chcemy zminic wraz z nowym kontrahentem takze AreaGUID to musimy w UPDATE na `kontrGUID` dodać czyszczenie `AreaGUID`
					
					*/
						IF(@session.HT.IR.Inicjuj_lokaliozacje_z_Kontrahenta AND IFNULL(n.AreaGUID, '') = '' AND od.Init_AreaGUID, 
							IFNULL(k.AreaGUID,
								(SELECT an.GUID FROM `erp_area_nodes` an WHERE an.Type = 'LOC' AND an.KontrGUID = n.KontrGUID LIMIT 1)
							),
							n.AreaGUID
						),
					
					n.ExtFlags = REPLACE(IFNULL(n.ExtFlags, ''), '(NG<-Kontrah)', '')
					
				/*					
					  {$IFDEF UprawnieniaDoZapisow}
					  if RegistryInt.GetRegIntValueBoolean('przepisz_ugrpGUID_z_kontrah', False, 'OPNGINFOPATH') then
						aNaglowek.FieldByName('ugrpGUID').AsString := aDSTempKontrah.FieldByName('ugrpGUID').AsString;
					  {$ENDIF UprawnieniaDoZapisow}
				*/
				WHERE 
					-- jmam n.GUID = #_IdnOper#
					#n.GUID#
					AND 
					(IFNULL(n.IDN, 0) = 0 OR IFNULL(n.ExtFlags, '') LIKE '%(NG<-Kontrah)%')
				;
				"
				;
			END IF;
			IF _MODE LIKE '%.for.WyjazdGUID' THEN
				SET _SQLText = REPLACE(_SQLText, '#n.GUID#', '#n.WyjazdGUID#');
			END IF;
			
			CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
			set @.SQL.kontrah.2.ng = _SQLText;

		END IF;

		IF _MODE IN ('NG<-platnik', 'platnik->NG') THEN
			IF @session.globals.Owner = 'IZOHAN' THEN
				SET 
				_SQLText = 
				"
				UPDATE `#xxng#` n, `kontrah` k
				SET
					n.#kontrklasacenowa# = 
						IF(NOT IFNULL(@session.HT.IR.KlasyCenowe_z_UGRPGUID, FALSE) OR n.#kontrklasacenowa# = 0, 
							k.klasacenowa, 
							n.#kontrklasacenowa#
						)
				WHERE 
					-- jmam n.GUID = #_IdnOper#
					#n.GUID#
					AND
					k.guid = n.PlatnikGUID
					AND
					@session.globals.Owner = 'IZOHAN'
				;
				"
				;  
				SET _SQLText = REPLACE(_SQLText, '#kontrklasacenowa#', IF(_FROM = 'OP', 'kontrklasacenowa', 'klasacenowa'));
				CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
			END IF;
		END IF;
		
		IF _MODE IN ('NG<-Set.Other', 'NG<-Set.Other.for.WyjazdGUID') THEN
		-- 'NG<-Set.Other'
				SET 
				_SQLText = 
				"
				UPDATE `#xxng#` n
				SET
					n.Dataplatnosci = (@.n.DataPlatnosci := 
						DATE_ADD(n.datawystaw, INTERVAL 
								IFNULL(
								(SELECT plat.dni FROM `platnosc` plat WHERE plat.IDN = n.sposobplatn LIMIT 1),
								0) DAY
						))
					#dataplatnosci_oczekiwana#
						
				WHERE 
					-- jmam n.GUID = #_IdnOper#
					#n.GUID#
				;
				"
				;  
				SET _SQLText = REPLACE(_SQLText, '#dataplatnosci_oczekiwana#', 
					IF(_FROM = 'OP', 
						IF(@session.globals.Owner != 'RELACOM', 
							', n.dataplatnosci_oczekiwana = @.n.DataPlatnosci',
							', n.dataplatnosci_oczekiwana = DATE_ADD(n.datawplywu, INTERVAL @session.HT.IR.DniPowiekszeniaDatyPlatnosciOczekiwanej DAY)'
						),
						''
					)
					);
			IF _MODE = 'NG<-Set.Other.for.WyjazdGUID' THEN
				SET _SQLText = REPLACE(_SQLText, '#n.GUID#', '#n.WyjazdGUID#');
			END IF;
			

			CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
			
			IF _FROM = 'OP' THEN
				SET 
				_SQLText = 
				"
				UPDATE `#xxng#` n
				SET
					n.NrDokFin = REPLACE(n.NrDokFin, '***T***', '*** TYMCZASOWA ***'),
					n.NrDokMag = REPLACE(n.NrDokMag, '***T***', '*** TYMCZASOWA ***'),
					n.NrWewn = REPLACE(n.NrWewn, '***T***', '*** TYMCZASOWA ***'),
					n.NrDokKas = REPLACE(n.NrDokKas, '***T***', '*** TYMCZASOWA ***')
				WHERE 
					-- jmam n.GUID = #_IdnOper#
					#n.GUID#
					AND n.Tymczasowa
				;
				"
				;  
				IF _MODE = 'NG<-Set.Other.for.WyjazdGUID' THEN
					SET _SQLText = REPLACE(_SQLText, '#n.GUID#', '#n.WyjazdGUID#');
				END IF;
				CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
			END IF;
			
		END IF;
		
		IF _MODE IN ('NG<-operdoc', 'operdoc->NG', 'NG<-operdoc.for.WyjazdGUID') THEN
            SET @_WORLD.TAG := CONCAT('<', _WORLD, '>');
			IF _FROM = 'OP' THEN
				SET 
				_SQLText = 
				"
				UPDATE `#xxng#` n, `operdoc` d
				SET
					n.rozrachunek = (@.NEW.rozrachunek := d.IsRozrachunek),
					n.grupaoper = @ng.f.grupaoper := d.Grupa,
					n.wzordekr = IF(n.fvrudowz AND IFNULL(d.wzordekr_a, '') <> '', d.wzordekr_a, d.wzordekr),
					n.rv_id = d.rv_id, 
					n.RodzajDowodu = d.RodzajDowodu,
					n.lang_id = d.lang_id,                    -- # 034196
					n.ugrpGUID = d.ugrpGUID,
					
					n.kancelaria_kierunek = d.init_kancelaria_kierunek,
					
					n.gruparozrach = IFNULL(@ng.f.gruparozrach := @ht.doc.RzTypRozrach, 0),
					n.DoMagazynu = IF(d.MagTyp = @ht.mtRZ, 0, n.DoMagazynu),
					n.ZMagazynu = IF(d.MagTyp = @ht.mtPZ, 0, n.ZMagazynu),
                    n.ExtFlags = CONCAT_WS('', @_WORLD.TAG, REPLACE(n.ExtFlags, @_WORLD.TAG, ''))
				WHERE
					-- jmam n.GUID = #_IdnOper#
					#n.GUID#
					AND
					d.Rodzaj = n.Rodzaj
				;
				"
				;
				-- CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
				
				
				/*
				UPDATE `t_trigg_operdoc` d
				SET
					NEW.rozrachunek = d.IsRozrachunek,
					NEW.grupaoper = @ng.f.grupaoper := d.Grupa,
					-- NEW.wzordekr = d.wzordekr,
					NEW.wzordekr = IF(NEW.fvrudowz AND IFNULL(d.wzordekr_a, '') <> '', d.wzordekr_a, d.wzordekr),
					NEW.rv_id = d.rv_id, 
					NEW.RodzajDowodu = d.RodzajDowodu,
					-- PO CO??? juz jest ustawiony!!!??? NEW.ugrpGUID = d.ugrpGUID,
					
					NEW.kancelaria_kierunek = d.init_kancelaria_kierunek,
					
					NEW.gruparozrach = IFNULL((@ng.f.gruparozrach := @ht.doc.RzTypRozrach), 0)
				
				
				WHERE
					d.Rodzaj = NEW.Rodzaj
				;
				*/

			ELSE
				SET 
				_SQLText = 
				"
				UPDATE `#xxng#` n, `operdoc` d
				SET
					n.grupaoper = @ng.f.grupaoper := d.Grupa,
					n.RodzajDowodu = d.RodzajDowodu,
					n.lang_id = d.lang_id,                    -- # 034196
					n.ugrpGUID = d.ugrpGUID,
                    n.ExtFlags = CONCAT_WS('', @_WORLD.TAG, REPLACE(n.ExtFlags, @_WORLD.TAG, ''))
				WHERE
					-- jmam n.GUID = #_IdnOper#
					#n.GUID#
					AND
					d.Rodzaj = n.Rodzaj
				;
				"
				;
				
				/*
				UPDATE `t_trigg_operdoc` d
				SET
					NEW.rozrachunek = d.IsRozrachunek,
					NEW.grupaoper = @ng.f.grupaoper := d.Grupa,
					-- NEW.wzordekr = d.wzordekr,
					NEW.wzordekr = IF(NEW.fvrudowz AND IFNULL(d.wzordekr_a, '') <> '', d.wzordekr_a, d.wzordekr),
					NEW.rv_id = d.rv_id, 
					NEW.RodzajDowodu = d.RodzajDowodu,
					-- PO CO??? juz jest ustawiony!!!??? NEW.ugrpGUID = d.ugrpGUID,
					
					NEW.kancelaria_kierunek = d.init_kancelaria_kierunek,
					
					NEW.gruparozrach = IFNULL((@ng.f.gruparozrach := @ht.doc.RzTypRozrach), 0)
				
				
				WHERE
					d.Rodzaj = NEW.Rodzaj
				;
				*/

			END IF;
			IF _MODE = 'NG<-operdoc.for.WyjazdGUID' THEN
				SET _SQLText = REPLACE(_SQLText, '#n.GUID#', '#n.WyjazdGUID#');
			END IF;
			
			CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
			
		END IF;

		IF _MODE IN ('NG<-@.Params.I', '@.Params.I->NG') THEN
		/*******************************************************
			Wstawianie zmiennych inicjalnych do naglowka OP i ZM
			cz. 1
		*******************************************************/
			SET @.SQL.N.INIT = 
			"
			UPDATE `#xxng#` n
			SET
				n.Rodzaj = IFNULL(@.DEST.Rodzaj, n.Rodzaj),
				n.Rodzaj_typ = IFNULL(@.DEST.Rodzaj_typ, n.Rodzaj_typ),
				n.DataWystaw = IFNULL(@.DEST.datawystaw, DATE(@ht.Init_doc_date)),
				n.DataWplywu = IFNULL(@.DEST.datawystaw, DATE(@ht.Init_doc_date)),
				n.KontrGUID = IFNULL(@.DEST.KontrGUID, n.KontrGUID),
				n.PlatnikGUID = IFNULL(@.DEST.PlatnikGUID, n.PlatnikGUID),
				n.AkwizytorGUID = IFNULL(@.DEST.AkwizytorGUID, n.AkwizytorGUID),
				n.AreaGUID = IFNULL(@.DEST.AreaGUID, n.AreaGUID),
				n.WyjazdGUID = IFNULL(@.DEST.WyjazdGUID, n.WyjazdGUID),
				n.Tymczasowa = IFNULL(@.DEST.Tymczasowa, n.Tymczasowa),
				n.Waluta = IFNULL(@.DEST.Waluta, n.Waluta), 
				n.ugrpguid = IFNULL(@.DEST.ugrpguid, n.ugrpguid),
				n.calc_ver = IFNULL(@.DEST.calc_ver, n.calc_ver),
				n.Przeliczenie_B_N = IFNULL(@.DEST.Przeliczenie_B_N, n.Przeliczenie_B_N),
				-- n.ExtFlags = CONCAT(REPLACE(IFNULL(n.ExtFlags, ''), '(NG<-Kontrah)', ''), '(NG<-Kontrah)')  
				n.ExtFlags = CONCAT('(NG<-Kontrah)', ''),
				n.create_At = IF(n.create_At = '0000-00-00 00:00:00', NOW(), n.create_At)
			WHERE
				-- jmam n.GUID = #_IdnOper#
				#n.GUID#
			;	
			"
			;
			CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.SQL.N.INIT);
			
			
		END IF;
		
		IF _MODE IN ('NG<-@.Params.II', '@.Params.II->NG') THEN
		/*******************************************************
			Wstawianie zmiennych inicjalnych do naglowka OP i ZM
			cz. 2
		*******************************************************/
			IF _FROM = 'OP' THEN
				SET @.SQL.OPZM.N.4 = 
				"
				UPDATE `#xxng#` n, `operdoc` od
				SET
					n.ZMagazynu = IF(od.MagTyp = @ht.mtPZ, 0, IFNULL(@.DEST.zmagazynu, n.ZMagazynu)),
					n.DoMagazynu = IF(od.MagTyp = @ht.mtRZ, 0, IFNULL(@.DEST.domagazynu, n.DoMagazynu)),
					n.NrKasy = IF(od.Grupa in (6), IFNULL(@.DEST.NrKasy, n.NrKasy), 0),
					n.Rodzaj_typ = IFNULL(@.DEST.Rodzaj_typ, n.Rodzaj_typ),
					n.Tymczasowa = IFNULL(@.DEST.Tymczasowa, n.Tymczasowa),
					n.korektatytulem = IF(@.OPZM.IN_MODE LIKE 'Korekta.Do.%', IFNULL(@.DEST.korektatytulem, ''), n.korektatytulem),
					n.zlecenieGUID = IFNULL(@.DEST.zlecenieGUID, n.zlecenieGUID),
					n.Zaplacono = IF(od.Grupa in (6), IFNULL(@.DEST.Zaplacono, n.Zaplacono), 0),
					
					n.Data_Vat = 
							IF(od.IsKorekta OR n.Rodzaj = 105,
								'0000-00-00', 
								@ht.Init_doc_date
							),
					n.NrDokFin = IF(IFNULL(@.DEST.NrDokFin, '') LIKE '***%***', @.DEST.NrDokFin, n.NrDokFin),
					n.NrDokMag = IF(IFNULL(@.DEST.NrDokMag, '') LIKE '***%***', @.DEST.NrDokMag, n.NrDokMag),
					n.NrWewn = IF(IFNULL(@.DEST.NrWewn, '') LIKE '***%***', @.DEST.NrWewn, n.NrWewn),
					n.NrDokKas = IF(IFNULL(@.DEST.NrDokKas, '') LIKE '***%***', @.DEST.NrDokKas, n.NrDokKas),
					n.Dotyczy = IFNULL(@.DEST.Dotyczy, n.Dotyczy)
				WHERE
					-- jmam n.GUID = #_IdnOper#
					#n.GUID#
					AND 
					od.Rodzaj = n.Rodzaj
				;	
				"
				;
			ELSE
				SET @.SQL.OPZM.N.4 =  
				"
				UPDATE `#xxng#` n, `operdoc` od
				SET
					n.idnmagazyn = IFNULL(@.DEST.idnmagazyn, n.idnmagazyn),
					n.magazynwys = IFNULL(@.DEST.magazynwys, n.magazynwys),
					n.terminrealizacji = IFNULL(DATE(@.DEST.terminrealizacji), 
						IF(@session.globals.Owner = 'IZOHAN',
							n.terminrealizacji,
							DATE(@ht.Init_doc_date)
						)
					),
					n.zlecenieGUID = IFNULL(@.DEST.zlecenieGUID, n.zlecenieGUID),
					n.DataZakonczUmowy = IFNULL(n.DataZakonczUmowy, @ht.Init_doc_date),
					n.kurs = IFNULL(n.kurs, 1),
					n.Rezerwacja = IFNULL(n.Rezerwacja, 0), 
					n.symboper = IFNULL(n.symboper, 0),
					n.rabat = IFNULL(n.rabat, 0),
					n.nrzamw = IF(IFNULL(@.DEST.nrzamw, '') LIKE '***%***', @.DEST.nrzamw, n.nrzamw),
					n.nrzamwkontr = IFNULL(@.DEST.nrzamwkontr, n.nrzamwkontr),
					n.transza_sped = IFNULL(@.DEST.transza_sped, n.transza_sped)
				WHERE
					-- jmam n.GUID = #_IdnOper#
					#n.GUID#
					AND 
					od.Rodzaj = n.Rodzaj
				;	
				"
				;
			END IF;
			CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.SQL.OPZM.N.4);
		END IF;
		
		IF _MODE IN ('NG<-Set.Other.@', 'Set.Other.@->NG', 'NG<-Set.Other.@.for.WyjazdGUID') THEN
			IF _FROM = 'OP' THEN
				SET 
				_SQLText = 
				"
				UPDATE `#xxng#` n, `operdoc` od
				SET
					n.DataSprzed = 
						IF(@.EDIT.Jedna_data_na_dok_mag := @session.HT.IR.Jedna_data_na_dok_mag AND 
								(n.Rodzaj IN (@ht.CPzPz, @ht.CRzWz, @ht.CMMMM, @ht.CPZPw, @ht.CRZRW, @ht.CRzKR, @ht.CPzKW, @ht.CRzKW, @ht.CPzKP, @ht.CRzKZ, @ht.CRzKK, @ht.CMM_MP, @ht.CMM_MR 
									-- , IF(@session.globals.Owner = 'CRIST', @ht.CKsNN, -9999)	--	zakomentowalem (AP wraz z RG 2018-03-08)
								)),
							n.datawystaw,
							IFNULL(n.DataSprzed, @ht.Init_doc_date)
						),
					n.DataWplywu = 
						IF(@.EDIT.Jedna_data_na_dok_mag,
							n.datawystaw,
							IFNULL(n.DataWplywu, @ht.Init_doc_date)
						),
						
					n.Data_Vat = 
							IF(n.Data_Vat = '0000-00-00' AND NOT (od.IsKorekta OR n.Rodzaj = 105),
								@ht.Init_doc_date,
								n.Data_Vat
							),
					n.DataWaluty = IFNULL(n.DataWaluty, @ht.Init_doc_date),
					n.DataPlatnosci = IFNULL(n.DataPlatnosci, @ht.Init_doc_date),
					n.dataplatnosci_oczekiwana = IFNULL(n.dataplatnosci_oczekiwana, @ht.Init_doc_date),
						

					n.status_obieg = 
						IF(n.Rodzaj = @ht.CKsNN AND @session.globals.Owner != 'CRIST',
							3,
							n.status_obieg
						),
						
					n.waluta_rozliczen = 
						@.n.waluta_rozliczen := IF(n.Waluta_Rozliczen < 0, n.Waluta, n.Waluta_Rozliczen),

					n.NettoDoRozrach = 
						IF(@.n.waluta_rozliczen > 0,
							od.NettoDoRozrachWal,
							n.NettoDoRozrach
						),
					n.CWN = IFNULL(n.CWN, 0),
					n.kontrklasacenowa = @.n.kontrklasacenowa := 
						IF(IFNULL(@session.HT.IR.KlasyCenowe_z_UGRPGUID, FALSE),
							IFNULL((SELECT kl.idn FROM `klasycen` kl WHERE kl.ugrpGUID = n.ugrpGUID ORDER BY idn LIMIT 1), n.kontrklasacenowa),
							n.kontrklasacenowa
						),
					n.Przeliczenie_B_N = 
						IF(@session.HT.IR.Przeliczenie_B_N_z_klasy_cen,
							IFNULL((SELECT kc.czy_ceny_brt FROM `klasycen` kc  WHERE kc.idn = @.n.kontrklasacenowa ORDER BY idn LIMIT 1), n.Przeliczenie_B_N),
							(
								(IFNULL(@session.HT.IR.DrukarkaFiskalna, FALSE) AND n.Rodzaj IN (0, 2))
								OR
								(IFNULL(@session.HT.IR.Przeliczenie_B_N, FALSE) AND (n.grupaoper = @ht.ST OR n.Rodzaj = 10))
							)
						)
						
				WHERE
					-- jmam n.GUID = #_IdnOper#
					#n.GUID#
					AND 
					od.Rodzaj = n.Rodzaj
				;	
				"
				;
				IF _MODE = 'NG<-Set.Other.@.for.WyjazdGUID' THEN
					SET _SQLText = REPLACE(_SQLText, '#n.GUID#', '#n.WyjazdGUID#');
				END IF;
				
				CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
				SET @.SQL.OPZM.Rozrach = _SQLText;
			--	WALUTA, Kurs, Kurs_Rozliczen, idn_tab_kurs
				SET 
				_SQLText = 
				"
				UPDATE `#xxng#` n
				SET
					n.Kurs = IFNULL((SELECT k.Kurs FROM `kursy_calc` k WHERE k.idnwaluty1 = n.Waluta AND k.idnwaluty2 = 0 LIMIT 1), 1), 
					n.Kurs_Rozliczen = IFNULL((SELECT k.Kurs FROM `kursy_calc` k WHERE k.idnwaluty1 = n.Waluta_Rozliczen AND k.idnwaluty2 = 0 LIMIT 1), 1),
					n.datawaluty = IFNULL((SELECT k.data FROM `kursy` k WHERE k.idnwaluty = n.Waluta AND k.idn_tab_kurs = n.idn_tab_kurs AND k.data < n.DataWystaw ORDER BY k.data DESC LIMIT 1), n.datawaluty),
					n.tabela_kursow = IFNULL((SELECT IFNULL(k.numer_tab_kurs, '') FROM `kursy` k WHERE k.idnwaluty = n.Waluta AND k.idn_tab_kurs = n.idn_tab_kurs AND k.data < n.DataWystaw ORDER BY k.data DESC LIMIT 1), n.tabela_kursow)
					
				WHERE
					-- jmam n.GUID = #_IdnOper#
					#n.GUID#
				;	
				"
				;
				IF _MODE = 'NG<-Set.Other.@.for.WyjazdGUID' THEN
					SET _SQLText = REPLACE(_SQLText, '#n.GUID#', '#n.WyjazdGUID#');
				END IF;
				
				CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
				SET @.SQL.OPZM.Waluty = _SQLText;
			ELSE
				SET
				_SQLText = 
				"
				UPDATE `#xxng#` n, `operdoc` od
				SET
					n.magazynwys = 
						IFNULL(
							IF(IFNULL(n.WyjazdGUID, '') <> '',
								n.magazynwys,
								IF(IFNULL(n.akwizytorGUID, '') <> '',
									(SELECT k.magazyn_akwizytora FROM `kontrah` k WHERE k.guid = n.akwizytorGUID),
									NULL
								)
							),
							IF(n.magazynwys <= 0 , n.idnmagazyn, n.magazynwys)
					),
					-- n.terminrealizacji = IFNULL(@.DEST.terminrealizacji, n.terminrealizacji),
					n.DataPlatnosci = IFNULL(n.DataPlatnosci, @ht.Init_doc_date),
					n.klasacenowa = @.n.klasacenowa := 
						IF(IFNULL(@session.HT.IR.KlasyCenowe_z_UGRPGUID, FALSE),
							IFNULL((SELECT kl.idn FROM `klasycen` kl WHERE kl.ugrpGUID = n.ugrpGUID ORDER BY idn LIMIT 1), n.klasacenowa),
							n.klasacenowa
						),
					n.Przeliczenie_B_N = 
						IF(@session.HT.IR.Przeliczenie_B_N_z_klasy_cen,
							IFNULL((SELECT kc.czy_ceny_brt FROM `klasycen` kc  WHERE kc.idn = @.n.klasacenowa ORDER BY idn LIMIT 1), n.Przeliczenie_B_N),
							n.Przeliczenie_B_N
						)
				WHERE
					-- jmam n.GUID = #_IdnOper#
					#n.GUID#
					AND 
					od.Rodzaj = n.Rodzaj
				;	
				"
				;
				IF _MODE = 'NG<-Set.Other.@.for.WyjazdGUID' THEN
					SET _SQLText = REPLACE(_SQLText, '#n.GUID#', '#n.WyjazdGUID#');
				END IF;
				
				CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
				SET @.SQL.NG.ZM.Update = _SQLText;
			END IF;
			
		END IF;
		
		IF _MODE IN ('NG<-DEFAULT', 'TE.xxng<-DEFAULT') THEN		
			CALL C_HT_xxNgPo_DO('NG<-operdoc', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
			CALL C_HT_xxNgPo_DO('NG<-Kontrah', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
			CALL C_HT_xxNgPo_DO('NG<-platnik', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
			CALL C_HT_xxNgPo_DO('NG<-Set.Other', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
			CALL C_HT_xxNgPo_DO('NG<-Set.Other.@', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
		END IF;

		IF _MODE IN ('NG<-PO', 'PO->NG') THEN	
			IF _FROM = 'OP' THEN
				IF _WORLD LIKE '%TE%' THEN
				--	UWAGA jesli TE to jest to temp a nie moge robic UPDATE na klilka subselectow bo zglasza blad dla Temporarek "Can't reopen table: 'p'"
				--	ZATEM musze zrobic kilka updatow
					SET _SQLText = "UPDATE `#opng#` n SET n.ilepoz = (SELECT COUNT(*) FROM `#oppo#` p WHERE p.IdnOper = n.GUID) WHERE n.GUID = #_IdnOper#;";
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
					SET @_SQLText.C_HT_TE_EXECUTE.1 = @_SQLText.C_HT_TE_EXECUTE;

					SET _SQLText = "UPDATE `#opng#` n SET n.waga = IFNULL((SELECT SUM(IFNULL(p.waga, 0)) FROM `#oppo#` p WHERE p.IdnOper = n.GUID), 0) WHERE n.GUID = #_IdnOper#;";
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
					SET @_SQLText.C_HT_TE_EXECUTE.2 = @_SQLText.C_HT_TE_EXECUTE;
					
					SET _SQLText = "UPDATE `#opng#` n SET n.netto_bez_zaliczki = IFNULL((SELECT SUM(IFNULL(p.wartnet, 0)) FROM `#oppo#` p WHERE p.idnoperfin = n.GUID AND p.usluga <> 8), 0) WHERE n.GUID = #_IdnOper#;";
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
					SET @_SQLText.C_HT_TE_EXECUTE.3 = @_SQLText.C_HT_TE_EXECUTE;
				--	jpkgtu
					SET @.n.jpkgtu = (SELECT n.jpkgtu FROM `TE_opng` n WHERE n.GUID = _IdnOper);
					IF IFNULL(@session.HT.IR.Ustaw_jpkgtu_na_podstawie_pozycji, FALSE) THEN
					-- 	tylko z pozycji !!!! -> @session.HT.IR.Ustaw_jpkgtu_na_podstawie_pozycji = TRUE
						UPDATE `TE_opng` n, `operdoc` od
						SET
							n.jpkgtu = 
							-- tylko z pozycji !!!! -> @session.HT.IR.Ustaw_jpkgtu_na_podstawie_pozycji = TRUE
								(
								SELECT 
									GROUP_CONCAT(DISTINCT jpkgtu SEPARATOR ';') AS jpkgtu 
								FROM `TE_oppo` p 
								LEFT JOIN `TowrNg` t ON p.idntowr = t.guid 
								WHERE 
									p.idnoperfin = n.GUID 
								ORDER BY t.jpkgtu
								)
						WHERE
							n.GUID = _IdnOper
							AND od.Rodzaj = n.Rodzaj
							AND od.Grupa IN (@ht.ST, @ht.SI)
							-- AND IFNULL(@session.HT.IR.Ustaw_jpkgtu_na_podstawie_pozycji, FALSE)
						;
					ELSE
					-- Kombinacja z nagl. i pozycji.	
						UPDATE `TE_opng` n, `operdoc` od
						SET
							n.jpkgtu = 
							-- Kombinacja z nagl. i pozycji.	
								(
								SELECT
									GROUP_CONCAT(DISTINCT jpkgtu SEPARATOR ';') AS jpkgtu
								FROM
								(
									SELECT
										g.Value AS jpkgtu 
									FROM `v_jpk_gtu` g
									WHERE
										g.Value <> ''
										AND LOCATE(g.Value, @.n.jpkgtu) > 0
									UNION
									SELECT
										g.Value AS jpkgtu 
									FROM `TE_oppo` p 
									INNER JOIN `TowrNg` t ON p.idntowr = t.guid 
									INNER JOIN `v_jpk_gtu` g ON g.Value = t.jpkgtu AND g.Value <> ''
									WHERE
										p.idnoperfin = _IdnOper
									ORDER BY jpkgtu
								) AS t_jpkgtu
								)
						WHERE
							n.GUID = _IdnOper
							AND od.Rodzaj = n.Rodzaj
							AND od.Grupa IN (@ht.ST, @ht.SI)
							-- AND NOT IFNULL(@session.HT.IR.Ustaw_jpkgtu_na_podstawie_pozycji, FALSE)
						;
					END IF;
					/*
					SET _SQLText = "UPDATE `#opng#` n, `operdoc` od SET n.jpkgtu = IF(od.Grupa IN (@ht.ST, @ht.SI),(SELECT GROUP_CONCAT(DISTINCT t.jpkgtu) AS jpkgtu FROM `#oppo#` p LEFT JOIN `TowrNg` t ON p.idntowr = t.guid WHERE p.idnoperfin = n.GUID ORDER BY t.jpkgtu), n.jpkgtu) WHERE n.GUID = #_IdnOper# AND od.Rodzaj = n.Rodzaj;";
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
					SET @_SQLText.C_HT_TE_EXECUTE.4 = @_SQLText.C_HT_TE_EXECUTE;
					*/
				ELSE
				--	OPERACJE
					SET 
					_SQLText = 
					"
					UPDATE `#opng#` n, `operdoc` od
					SET
						n.tag = 2,	--	faza oppo to nbg
						n.ilepoz = (SELECT COUNT(*) FROM `#oppo#` p WHERE p.IdnOper = n.GUID),
						n.waga = IFNULL((SELECT SUM(IFNULL(p.waga, 0)) FROM `#oppo#` p WHERE p.IdnOper = n.GUID), 0),
						n.netto_bez_zaliczki = IFNULL((SELECT SUM(IFNULL(p.wartnet, 0)) FROM `#oppo#` p WHERE p.idnoperfin = n.GUID AND p.usluga <> 8), 0),
					/* było !!!
						n.jpkgtu = 
							IF(od.Grupa IN (@ht.ST, @ht.SI),
								(SELECT GROUP_CONCAT(DISTINCT t.jpkgtu) AS jpkgtu FROM `#oppo#` p LEFT JOIN `TowrNg` t ON p.idntowr = t.guid WHERE p.idnoperfin = n.GUID ORDER BY t.jpkgtu),
								n.jpkgtu
							)
					.. jest ...
					*/
						n.jpkgtu = 
							IF(od.Grupa IN (@ht.ST, @ht.SI),
								IF(IFNULL(@session.HT.IR.Ustaw_jpkgtu_na_podstawie_pozycji, FALSE),	
								-- tylko z pozycji !!!!
									(
									SELECT 
										GROUP_CONCAT(DISTINCT jpkgtu SEPARATOR ';') AS jpkgtu 
									FROM `#oppo#` p 
									LEFT JOIN `TowrNg` t ON p.idntowr = t.guid 
									WHERE 
										p.idnoperfin = n.GUID 
									ORDER BY t.jpkgtu
									),
								-- Kombinacja z nagl. i pozycji.	
									(
									SELECT
										GROUP_CONCAT(DISTINCT jpkgtu SEPARATOR ';') AS jpkgtu
									FROM
									(
										SELECT
											g.Value AS jpkgtu 
										FROM `v_jpk_gtu` g, `#opng#` nn
										WHERE
											g.Value <> ''
											AND nn.GUID = #_IdnOper#
											AND LOCATE(g.Value, nn.JpkGTU) > 0
										UNION
										SELECT
											g.Value AS jpkgtu 
										FROM `#oppo#` p 
										INNER JOIN `TowrNg` t ON p.idntowr = t.guid 
										INNER JOIN `v_jpk_gtu` g ON g.Value = t.jpkgtu AND g.Value <> ''
										WHERE
											p.idnoperfin = #_IdnOper#
										ORDER BY jpkgtu
									) AS t_jpkgtu
									)
								
								),
								n.jpkgtu
							)					
					WHERE
						-- jmam n.GUID = #_IdnOper#
						#n.GUID#
						AND od.Rodzaj = n.Rodzaj
					;	
					"
					;
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
					SET @_SQLText.C_HT_TE_EXECUTE.4 = _SQLText;
				END IF;
			ELSE
				IF _WORLD LIKE '%TE%' THEN
				--	UWAGA jesli TE to jest to tem a nie moge robic UPDATE na klilka subselectow bo zglasza blad dla Temporarek "Can't reopen table: 'p'"
				--	ZATEM musze zrobic kilka updatow
					SET _SQLText = "UPDATE `#zmng#` n SET n.ilepoz = @.nup.n.ilepoz := (SELECT COUNT(*) FROM `#zmpo#` p WHERE idnNg = n.GUID AND p.wersja = n.wersja) WHERE n.GUID = #_IdnOper#;";
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
					SET @_SQLText.C_HT_TE_EXECUTE.1 = @_SQLText.C_HT_TE_EXECUTE;

					SET _SQLText = "UPDATE `#zmng#` n SET n.IlepozZreal = @.nup.n.IlepozZreal := IFNULL((SELECT SUM(IFNULL(p.zrealizowano >= p.ilosc, 0)) FROM `#zmpo#` p WHERE p.IdnNg = n.GUID AND p.wersja = n.wersja), 0) WHERE n.GUID = #_IdnOper#;";
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
					SET @_SQLText.C_HT_TE_EXECUTE.2 = @_SQLText.C_HT_TE_EXECUTE;

					SET _SQLText = 
					"
					UPDATE `#zmng#` n 
					SET 
						n.waga = IFNULL((SELECT SUM(IFNULL(waga, 0)) FROM `#zmpo#` WHERE idnNg = n.GUID), 0),
						n.Status = IF(@.nup.n.ilepoz = @.nup.n.IlepozZreal, 2, n.Status),
						n.zrealizowane = (@.nup.n.ilepoz = @.nup.n.IlepozZreal)
					WHERE 
						-- jmam n.GUID = #_IdnOper#
						#n.GUID#
					"
					;
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
					SET @_SQLText.C_HT_TE_EXECUTE.3 = @_SQLText.C_HT_TE_EXECUTE;
					

				ELSE
				--	ZAMOWIENIA
					SET 
					_SQLText = 
					"
					UPDATE `#zmng#` n
					SET
						-- n.tag = 2,	--	faza zmpo to nbg
						n.ilepoz = @.nup.n.ilepoz := (SELECT COUNT(*) FROM `#zmpo#` p WHERE idnNg = n.GUID AND p.wersja = n.wersja),
						n.IlepozZreal = @.nup.n.IlepozZreal := IFNULL((SELECT SUM(IFNULL(p.zrealizowano >= p.ilosc, 0)) FROM `#zmpo#` p WHERE p.IdnNg = n.GUID AND p.wersja = n.wersja), 0),
						n.waga = IFNULL((SELECT SUM(IFNULL(waga, 0)) FROM `#zmpo#` WHERE idnNg = n.GUID), 0),
						n.Status = IF(@.nup.n.ilepoz = @.nup.n.IlepozZreal, 2, n.Status),
						n.zrealizowane = (@.nup.n.ilepoz = @.nup.n.IlepozZreal)
						
					WHERE
						-- jmam n.GUID = #_IdnOper#
						#n.GUID#
					;	
					"
					;
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
				END IF;
			END IF;
		END IF;

		IF _MODE IN ('NG<-VAT<-PO', 'NG<-VAT') THEN
			IF @session.globals.CALC.VAT.Ver >= '2021' THEN
			/********************************************************
				Nowe od 2021 r. 
			********************************************************/
						DO _counters_tools('SET', CONCAT_WS('.', 'CALC.VAT.Ver.2021', _WORLD, _FROM), '', '');		-- to tylko Licznik!!!!
				CALL C_HT_xxng_vat('Oper.Nalicz.Tabelke+`xxng`+prepare.do.Edycji', _FROM, _WORLD, _IdnOper, '', '', '', '', '');
			ELSE
			/********************************************************
				Przed 2021 r.   2017, 1999
			********************************************************/
				SET @.EXISTS.t_xxng_vat_INF = NULL; -- zawsze
				CALL xxng_vat_TOOLS('UPDATE `xxng_vat` and `xxng`', _FROM, 
					IF(LOCATE('TE', _WORLD) > 0, 'TE', IF(LOCATE('E', _WORLD) > 0, 'E', _WORLD)),  --	tutaj koniecznie "TE" albo "E" albo "" czyli eliminujemy : oraz n: i p:
					_IdnOper, '', '', '', ''); 
			END IF;
		END IF;

		IF _MODE IN ('NG.POST') THEN	
			CALL C_HT_xxNgPo_DO('NG<-PO', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
			CALL C_HT_xxNgPo_DO('NG<-VAT', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
			IF _FROM = 'OP' THEN	--	rozrachunkowy POST naglowka 
set @.janusz = '6 wlazlem OP';			
				SET 
				@.SQL.OPZM.Rozlicz = 
				"
				SELECT
					n.Rodzaj, 
					n.rozrachunek,
					n.gruparozrach_wymus, n.Netto, n.NettoWal, n.Brutto, n.BruttoWal, n.NettoDoRozrach,
					n.Zaplacono, 
					n.Kurs,
					n.Kurs_rozliczen,
					n.CWN,
					n.CKwota,
					n.CKwotaWal,
					n.CRozliczone,
					n.CRozliczoneWal,
					n.nierozliczony			
				INTO 
					@.NEW.Rodzaj, 
					@.NEW.rozrachunek,
					@.NEW.gruparozrach_wymus, @.NEW.Netto, @.NEW.NettoWal, @.NEW.Brutto, @.NEW.BruttoWal, @.NEW.NettoDoRozrach,
					@.NEW.Zaplacono, 
					@.NEW.Kurs,
					@.NEW.Kurs_rozliczen,
					@.NEW.CWN,
					@.NEW.CKwota,
					@.NEW.CKwotaWal,
					@.NEW.CRozliczone,
					@.NEW.CRozliczoneWal,
					@.NEW.nierozliczony
				FROM `#xxng#` n
				WHERE
					-- jmam n.GUID = #_IdnOper#
					#n.GUID#
				;
				"
				;

				CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.SQL.OPZM.Rozlicz);
				
				IF @.NEW.rozrachunek OR (@.NEW.Rodzaj = @ht.CKsNN) THEN --	gdy Rozrachunek lub Zakup KANCELARIA naliczaj pola rozrachunkowe
					-- CALL rozrach_rodzaj_calc(NEW.Rodzaj, NEW.gruparozrach_wymus, NEW.Brutto);
					-- CALL rozrach_nalicz_pola(NEW.Rodzaj, NEW.gruparozrach_wymus, NEW.Netto, NEW.NettoWal, NEW.Brutto, 
					CALL _Rozrach_Nalicz_Pola(@.NEW.Rodzaj, @.NEW.gruparozrach_wymus, @.NEW.Netto, @.NEW.NettoWal, @.NEW.Brutto, @.NEW.BruttoWal, @.NEW.NettoDoRozrach,
						@.NEW.Zaplacono, 
						@.NEW.Kurs,
						@.NEW.Kurs_rozliczen,
						@.NEW.CWN,
						@.NEW.CKwota,
						@.NEW.CKwotaWal,
						@.NEW.CRozliczone,
						@.NEW.CRozliczoneWal,
						@.NEW.nierozliczony,
						'', '', '', '');
					SET 
					@.SQL.OPZM.Rozlicz_2 = 
					"
					UPDATE `#xxng#` n, `operdoc` d
					SET
						n.CWN = @.NEW.CWN,
						n.CKwota = @.NEW.CKwota,
						n.CKwotaWal = @.NEW.CKwotaWal,
						n.CRozliczone = @.NEW.CRozliczone, 
						n.CRozliczoneWal = @.NEW.CRozliczoneWal,
						n.nierozliczony = @.NEW.nierozliczony,
						n.gruparozrach = IFNULL(@ng.f.gruparozrach := @ht.doc.RzTypRozrach, 0)
						
					WHERE
						-- jmam n.GUID = #_IdnOper#
						#n.GUID#
						AND
						d.Rodzaj = n.Rodzaj
					;
					"
					;
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.SQL.OPZM.Rozlicz_2);
				END IF;	
			
			END IF;
		END IF;
		

		IF _MODE IN ('NG<-Numeracja') THEN
			SET @._Is_Obj_Counters = @session.globals.HT.erp_obj_counters_values_e_1_rec;

		--	Gdy w _Param_E mamy  Clear_Star_Numbers=1 to usuwamy gwazdki z numerow ***....***
			SET @.OPZM.AutoNum.Clear.Star.Numbers.Before.Apply = 
				IFNULL(IF(_Param_E <> '', NULLIF(_FetchParams('', _Param_E, 'Clear_Star_Numbers', ''), ''), NULL), FALSE)
			;
			
			IF _FROM = 'OP' THEN
				IF @.OPZM.AutoNum.Clear.Star.Numbers.Before.Apply THEN
					SET 
					_SQLText = 
					"
					UPDATE `#xxng#` n
					SET
						n.NrDokMag = IF(n.NrDokMag LIKE '***%***', '', n.NrDokMag),
						n.NrDokFin = IF(n.NrDokFin LIKE '***%***', '', n.NrDokFin),
						n.NrDokKas = IF(n.NrDokKas LIKE '***%***', '', n.NrDokKas),
						n.NrWewn = IF(n.NrWewn LIKE '***%***', '', n.NrWewn),
						n.lp_ks_podawcza_str = IF(n.lp_ks_podawcza_str LIKE '***%***', '', n.lp_ks_podawcza_str)
					WHERE
						-- jmam n.GUID = #_IdnOper#
						#n.GUID#
					;
					"
					;
					set @_SQLText_AN = _SQLText;
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
					set @_SQLText_AN_2 = _SQLText;
				END IF;
			
				SET 
				_SQLText = 
				"
				SELECT
					n.rodzaj, n.Rodzaj_typ, IFNULL(n.NrDokFin, ''), IFNULL(n.NrDokMag, ''), IFNULL(n.NrDokKas, ''), IFNULL(n.NrRaportu, ''), IFNULL(n.NrWewn, ''), IFNULL(n.lp_ks_podawcza_str, ''), 
					n.fvrudowz,
					n.KontrGUID, n.PlatnikGUID, 
					n.ZMagazynu, 
					n.DoMagazynu, 
					-- IFNULL((SELECT Grupa FROM`Magazyny` WHERE IdnMagazynu = n.ZMagazynu), 0) AS ZMagazynu_grupa,
					-- IFNULL((SELECT Grupa FROM`Magazyny` WHERE IdnMagazynu = n.DoMagazynu), 0) AS DoMagazynu_grupa,
					n.NrKasy, n.RodzajDowodu, n.Rv_id, n.datasprzed, n.DataWystaw, n.DataWplywu, n.transza_zamow,
					n.tymczasowa,
					n.ugrpGUID,
					n.Calc_ver,
					od.Grupa AS OpTyp, 
					od.TwTyp, od.MagTyp,
					od.MA_Magzyny,
					od.numdok_automat,
					od.numwewn_automat,
					od.IsKorekta,
					od.DocMagPrint				
				INTO
					@n.rodzaj, @n.Rodzaj_typ, @n.NrDokFin, @n.NrDokMag, @n.NrDokKas, @n.NrRaportu, @n.NrWewn, @n.lp_ks_podawcza_str,  
					@n.fvrudowz,
					@n.KontrGUID, @n.PlatnikGUID, 
					-- @n.ZMagazynu_n, @n.DoMagazynu_n, 
					@n.ZMagazynu, @n.DoMagazynu, 
					
					@n.NrKasy, @n.RodzajDowodu, @n.Rv_id, @n.datasprzed, @n.DataWystaw, @n.DataWplywu, @n.transza_zamow,
					@n.tymczasowa,
					@n.ugrpGUID,
					@n.Calc_ver,
					@od.OpTyp,
					@od.TwTyp, @od.MagTyp,
					@od.MA_Magzyny,
					@od.numdok_automat,
					@od.numwewn_automat,
					@od.IsKorekta,
					@od.DocMagPrint
				FROM `#xxng#` n
				INNER JOIN `operdoc` od ON od.Rodzaj = n.Rodzaj
				WHERE 
					-- jmam n.GUID = #_IdnOper#
					#n.GUID#
				;
				"
				;
			ELSE
				IF @.OPZM.AutoNum.Clear.Star.Numbers.Before.Apply THEN
					SET 
					_SQLText = 
					"
					UPDATE `#xxng#` n
					SET
						n.NrZamw = IF(n.NrZamw LIKE '***%***', '', n.NrZamw)
					WHERE
						-- jmam n.GUID = #_IdnOper#
						#n.GUID#
					;
					"
					;
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
				END IF;
			
				SET 
				_SQLText = 
				"
				SELECT
					n.rodzaj, n.Rodzaj_typ, IFNULL(n.NrZamw, ''), 
					n.KontrGUID, 
					n.IdnMagazyn, 
					n.MagazynWys, 
					-- IFNULL((SELECT Grupa FROM`Magazyny` WHERE IdnMagazynu = n.IdnMagazyn), 0) AS IdnMagazyn_grupa,
					-- IFNULL((SELECT Grupa FROM`Magazyny` WHERE IdnMagazynu = n.MagazynWys), 0) AS MagazynWys_grupa,
					n.RodzajDowodu, 0 AS Rv_id, n.DataWystaw, n.DataWplywu, n.transza_zamow,
					n.tymczasowa,
					n.ugrpGUID,
					od.Grupa AS OpTyp, 
					od.TwTyp, od.MagTyp,
					od.MA_Magzyny,
					od.numdok_automat,
					od.numwewn_automat
				INTO
					@n.rodzaj, @n.Rodzaj_typ, @n.NrZamw, 
					@n.KontrGUID, 
					-- @n.ZMagazynu_n, @n.DoMagazynu_n, 
					@n.ZMagazynu, @n.DoMagazynu, 
					@n.RodzajDowodu, @n.Rv_id, @n.DataWystaw, @n.DataWplywu, @n.transza_zamow,
					@n.tymczasowa,
					@n.ugrpGUID,
					@od.OpTyp,
					@od.TwTyp, @od.MagTyp,
					@od.MA_Magzyny,
					@od.numdok_automat,
					@od.numwewn_automat
				FROM `#xxng#` n
				INNER JOIN `operdoc` od ON od.Rodzaj = n.Rodzaj
				WHERE 
					-- jmam n.GUID = #_IdnOper#
					#n.GUID#
				;
				"
				;
			END IF;
			
			CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
			IF @session.HT.IR.NieNadawajNumerowDlaTymczas AND @n.tymczasowa > 0 AND @n.rodzaj = @ht.CPzPZ THEN
				LEAVE S_C_HT_xxNgPo_DO;
			END IF;
			SET 
				@_Res1_mask = 
					IF(_FROM = 'ZM',
						@n.ZMagazynu,		--	Dla zamowien
						IF(@od.OpTyp = 6, 	--	Czy KASA?
							@n.NrKasy,
							IF(@od.MagTyp IN (@ht.mtMM, @ht.mtRZ), 
								@n.ZMagazynu, 
								@n.DoMagazynu
							)
						)
					),
				@_Res2_mask = 
					IF(_FROM = 'ZM',
						@n.DoMagazynu,		--	Dla zamowien
						IF(@od.MagTyp IN (@ht.mtMM, @ht.mtPZ), 
							@n.DoMagazynu, 
							0
						)
					)
			;	
			SET 
				@_Res1 =
					IFNULL((SELECT Grupa FROM`Magazyny` WHERE IdnMagazynu = @_Res1_mask), @_Res1_mask),
				@_Res2 =
					IFNULL((SELECT Grupa FROM`Magazyny` WHERE IdnMagazynu = @_Res2_mask), @_Res2_mask)
			;
			
			SET
				@_Params =
				CONCAT(
					_VarStr(@_Res1_mask), ';',
					_VarStr(@_Res2_mask), ';',
					_VarStr(@n.DataWystaw), ';',
					_VarStr(@n.RodzajDowodu), ';', 
					_VarStr(@n.Rv_id), ';',
					_VarStr(@n.ugrpGUID), ';'
				)
			;
			SET	
				@_ParamsMag = 
				IF((@session.globals.Owner <> 'SEVENET'),
					@_Params, -- dla wszystkich to samo co dla dokfin
					CONCAT(
						_VarStr(@_Res1_mask), ';',
						_VarStr(@_Res2_mask), ';',
						_VarStr(@n.datasprzed), ';',
						_VarStr(@n.RodzajDowodu), ';', 
						_VarStr(@n.Rv_id), ';',
						_VarStr(@n.ugrpGUID), ';'
					)
				)
			;	
			
			
			IF _FROM = 'OP' THEN
				IF IFNULL(@n.NrDokMag, '') = '' AND @od.MA_Magzyny AND @n.fvrudowz = 0 THEN
				-- NR DokMAG dla Faktur etc
					IF (@n.rodzaj = @ht.CRzWZ) AND (@session.globals.Owner = 'KONKOL') AND @n.PlatnikGUID = '{B3B597BB-72E1-473B-B972-33DA256FF062}' THEN
						CALL Auto_Biedronka_Get_NrDokMag('', @n.KontrGUID, @n.transza_zamow, @n.DataWystaw, @n.NrDokMag);
					ELSE
						IF @od.OpTyp = 2 THEN 	-- MG		NrDokMag
							CALL GetUniqNrForFieldAndUpdate('', 0, @n.rodzaj, @_Res1, @_ParamsMag, @n.NrDokMag);
						ELSE					-- Inne operacje nie magazynowe ale na magazynach np. FV
							IF @session.globals.Owner != 'LACZPOL' THEN	--	DODATKOWO!!! laczpol zazyczyl sobie aby nie numerowac faktur i innych magazynowatych 
								CALL GetUniqNrForFieldAndUpdate('', 0, 
									IFNULL(@od.DocMagPrint, IF(@od.MagTyp IN (@ht.mtRZ), @ht.CRzWZ, @ht.CPzPZ)),  -- rodzaj mag.!!!
									IF(@od.MagTyp IN (@ht.mtRZ), @_Res1, @_Res2), 
									@_ParamsMag, @n.NrDokMag);
							END IF;
						END IF;
						-- CALL numdok_prapre_num('', @n.rodzaj, 0, '', @n.ZMagazynu, @n.DoMagazynu, @n.DataWystaw, @n.RodzajDowodu, @n.Rv_id, @n.NrDokMag);
					END IF;
					-- select @n.NrDokMag;
					/* */
					SET 
					_SQLText = 
					"
					UPDATE `#xxng#` n
					SET
						n.NrDokMag = @n.NrDokMag
					WHERE
						-- jmam n.GUID = #_IdnOper#
						#n.GUID#
					;
					"
					;
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
				END IF;
			
				IF @od.OpTyp = 2 THEN -- MG		NrDokMag
				--	MAGAZYNOWE
					IF IFNULL(@n.NrDokMag, '') != '' THEN
						LEAVE S_C_HT_xxNgPo_DO;
					END IF;
					
					CALL GetUniqNrForFieldAndUpdate('', 0, @n.rodzaj, @_Res1, @_Params, @n.NrDokMag);
					
					SET 
					_SQLText = 
					"
					UPDATE `#xxng#` n
					SET
						n.NrDokMag = @n.NrDokMag
					WHERE
						-- jmam n.GUID = #_IdnOper#
						#n.GUID#
					;
					"
					;
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
					
				ELSEIF @od.OpTyp = 6 THEN 
				--	KASOWE 
				--	Gdy oba numer sa ustalone to wychodzimy	
					IF IFNULL(@n.NrDokKas, '') != '' AND IFNULL(@n.NrRaportu, '') != '' THEN
						LEAVE S_C_HT_xxNgPo_DO;
					END IF;
				
					IF IFNULL(@n.NrDokKas, '') = '' THEN -- KS		NrDokKas
						-- LEAVE S_C_HT_xxNgPo_DO;
						CALL GetUniqNrForFieldAndUpdate('', 0, @n.rodzaj, @_Res1, @_Params, @n.NrDokKas);
					END IF;

					IF IFNULL(@n.NrRaportu, '') = '' THEN -- KS		NrRaportu
						-- LEAVE S_C_HT_xxNgPo_DO;
						CALL GetUniqNrForFieldAndUpdate('', -1, 22, @_Res1, @_Params, @n.NrRaportu);	 -- UWAGA -1 jako numer oznacza ze pobieramy numer a nie go inkrementujemy
					END IF;
					
					SET 
					_SQLText = 
					"
					UPDATE `#xxng#` n
					SET
						n.NrDokKas = @n.NrDokKas,
						n.NrRaportu = @n.NrRaportu
					WHERE
						-- jmam n.GUID = #_IdnOper#
						#n.GUID#
					;
					"
					;
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
				ELSE				 
				-- 		NrDokFin
					IF (IFNULL(@n.NrDokFin, '') = '') AND @od.numdok_automat THEN
					--	UWAGA dla SEVENETU?
						IF (@session.globals.Owner = 'SEVENET') THEN
							CALL AutoNum_GetNumberText_OperDoc('', @_Numer, @n.NrDokFin, '', 'nrdokfin', @n.rodzaj, 0, @n.ZMagazynu, @n.DoMagazynu,  @n.DataWplywu, @n.RodzajDowodu, @n.Rv_id, @n.ugrpGUID);
						ELSE
							CALL GetUniqNrForFieldAndUpdate('', 0, @n.rodzaj, @_Res1, @_Params, @n.NrDokFin);
						END IF;
						SET 
						_SQLText = 
						"
						UPDATE `#xxng#` n
						SET
							n.NrDokFin = @n.NrDokFin
						WHERE
						-- jmam n.GUID = #_IdnOper#
						#n.GUID#
						;
						"
						;
						CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
					END IF;
				-- 		NrWewn
					IF (IFNULL(@n.NrWewn, '') = '') AND @od.numwewn_automat THEN
						CALL GetUniqNrForFieldAndUpdate('WEWN', 0, @n.rodzaj, @_Res1, @_Params, @n.NrWewn);
						SET 
						_SQLText = 
						"
						UPDATE `#xxng#` n
						SET
							n.NrWewn = @n.NrWewn
						WHERE
							-- jmam n.GUID = #_IdnOper#
							#n.GUID#
						;
						"
						;
						CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
					END IF;
				END IF;
			
			--	Ksiazka podawcza - dla @ht.CSPLI, @ht.CKsNN czyli dla 61 Sprzedaż nie podlegająca VAT (licencje) i 104 Zakup KANCELARIA
				IF @n.rodzaj IN (@ht.CSPLI, @ht.CKsNN) AND @n.lp_ks_podawcza_str = '' THEN	--	
					IF @n.Calc_ver >= 5 THEN
					--	Licznik opng.lp_ks_podawcza_str (po Bozemu)
						SET _SQLText = 
						"CALL erp_obj_counters_values_tools('EXECUTE', 'opng.lp_ks_podawcza_str', @n.rodzaj, '0', #_IdnOper#, '#xxng#', '', '', '');";
					ELSE
					--	Licznik oper_wewn 
						SET _SQLText = 
						"CALL erp_obj_counters_values_tools('EXECUTE', 'oper_wewn', @n.rodzaj, '0', #_IdnOper#, '#xxng#', '', '', '');";
					END IF;
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
				END IF;
			
			ELSE
		--	ZAMOWIENIA	
				IF (IFNULL(@n.NrZamw, '') = '') AND @od.numdok_automat THEN
				/* ? ? ? ? ? Czy to wlaczyc ? ? ? ? ? */
				--	UWAGA dla SEVENETU?
					-- IF (@session.globals.Owner = 'SEVENET') THEN
					-- 	CALL AutoNum_GetNumberText_OperDoc('', @_Numer, @n.NrZamw, '', 'NrZamw', @n.rodzaj, 0, @n.ZMagazynu, @n.DoMagazynu,  @n.DataWplywu, @n.RodzajDowodu, @n.Rv_id, @n.ugrpGUID);
					-- ELSE
					CALL GetUniqNrForFieldAndUpdate('', 0, @n.rodzaj, @_Res1, @_Params, @n.NrZamw);
					-- END IF;
				
					SET 
					_SQLText = 
					"
					UPDATE `#xxng#` n
					SET
						n.NrZamw = @n.NrZamw,
						n.Analityka = 
							IF(@session.globals.Owner = 'IZOHAN',
								SUBSTR(@n.NrZamw, 1, 6),
								@n.NrZamw
							)
					WHERE
						-- jmam n.GUID = #_IdnOper#
						#n.GUID#
					;
					"
					;
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
				END IF;
			END IF;
			
		END IF;
		
		IF _MODE IN ('Befor.Apply.MSG_Err/MSG_War<-ExtFlags_Inf') THEN
		--	W _Param_A		Warunek TRUE - sa validatory/FALSE nie sa
			set @.x1 = '1'; 
			SET 
				@.Valid.MSG_n_Err := NULL, @.Valid.MSG_n_War := NULL, @.Valid.MSG_p_Err := NULL, @.Valid.MSG_p_War := NULL,
				@.Valid.MSG_Err := NULL,
				@.Valid.MSG_War := NULL
			;		
			IF IFNULL(_Param_A, FALSE) THEN
			set @.x1 = '3'; 
				SET 
				@.SQLText.Valid.1 = 
				"
					SELECT
						NULLIF(_ExtFlags('Get.Content', n.ExtFlags_Inf, 'Err', '', ''), '') AS MSG_n_Err,
						NULLIF(_ExtFlags('Get.Content', n.ExtFlags_Inf, 'War', '', ''), '') AS MSG_n_War,
						GROUP_CONCAT(DISTINCT NULLIF(_ExtFlags('Get.Content', p.ExtFlags_Inf, 'Err', '', ''), '') SEPARATOR ',\n') AS MSG_p_Err,
						GROUP_CONCAT(DISTINCT NULLIF(_ExtFlags('Get.Content', p.ExtFlags_Inf, 'War', '', ''), '') SEPARATOR ',\n') AS MSG_p_War
							
					INTO @.Valid.MSG_n_Err, @.Valid.MSG_n_War, @.Valid.MSG_p_Err, @.Valid.MSG_p_War
					FROM `#xxng#` n
					LEFT JOIN `#xxpo#` p ON p.#IdnOper# = n.GUID
					WHERE
						-- jmam n.GUID = #_IdnOper#
						#n.GUID#
					;
				"
				;
				CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.SQLText.Valid.1);
				SET 
					@.Valid.MSG_Err = 
					CONCAT_WS(',\n',
						CONCAT('Błędy nagłówka:\n', @.Valid.MSG_n_Err),
						CONCAT('Błędy w pozycjach:\n', @.Valid.MSG_p_Err)
					),
					@.Valid.MSG_War = 
					CONCAT_WS(',\n',
						CONCAT('Ostrzeżenia nagłówka:\n', @.Valid.MSG_n_War),
						CONCAT('Ostrzeżenia w pozycjach:\n', @.Valid.MSG_p_War)
					)
				;
			END IF;
		
		END IF;
		
		
	set @jmam = '11';
		
		IF _MODE LIKE 'SPEC.%' THEN
		/*******************************************************
			Algorytmy specjalne
		*******************************************************/
	set @jmam = '11.1';
			IF _MODE LIKE 'SPEC.Korekta.Do.%' THEN
			/*******************************************************
				Tworzenie korekty
				CZY TO DZIAŁA dla innych tabel ??????????????????????????????????????????????????????????
			*******************************************************/
	set @jmam = concat('11.2.', _MODE);
				
				IF _MODE = 'SPEC.Korekta.Do.`opng`' THEN
					SET @.IdnOper.Orig = @.OPZM.INPUT_Key;
set @jmam = 'jestem tu 1';
					-- poprz. CALL C_HT_TE_Corr('Prepare.KOR', _FROM, _WORLD, _IdnOper, @.IdnOper.Orig, '', '', '', '', '');
					CALL C_HT_xxNgPo_Corr('Prepare.KOR', _FROM, _WORLD, _IdnOper, @.IdnOper.Orig, '', '', '', '', '');
				END IF;	
				
				IF _MODE = 'SPEC.Korekta.Do.`t_oppo_corr_init_bi`' THEN
					-- poprz. CALL C_HT_TE_Corr('Prepare.KOR.from.t_oppo_corr_init_bi', _FROM, _WORLD, _IdnOper, '', '', '', '', '', '');
					CALL C_HT_xxNgPo_Corr('Prepare.KOR.from.t_oppo_corr_init_bi', _FROM, _WORLD, _IdnOper, '', '', '', '', '', '');
					SET @.IdnOper.Orig = @_Ng_GUID_orig;
				END IF;	
				
			END IF;
		
		--	TYLKO 'SPEC.Realizacja.ZM.Init.Ng' używana reszta poniżej nie!!!
			IF _MODE LIKE 'SPEC.Realizacja.ZM.Init.Ng' THEN
			/*******************************************************
				Realizacja zamowien, zlecen, etc
				NAGLOWEK po Insercie - tylko OP
				W _GUID jest @_ZM_Key
			*******************************************************/
				SET @_ZM_Key = _GUID;	--	IdnNg realizowanego zamowienia
			--	Temp z zamowienie.zlecenie
				DROP TEMPORARY TABLE IF EXISTS `t_zmng_ZAM_Realizowane`;
				CREATE TEMPORARY TABLE `t_zmng_ZAM_Realizowane` SELECT * FROM `zmng` WHERE GUID = @_ZM_Key;
			--	Adresacja!!!
				CALL ht_clone_tools('CLONE.ADDR', @_ZM_Key, _IdnOper, 'zmng', 'opng', 'CLEAR.before'); -- Realizacja ZAM
			--	Ogólny Update z zamowienia
				SET @session.HT.IR.Inicjacja_DataWystaw_dok_realizujacego_zam = IFNULL(@session.HT.IR.Inicjacja_DataWystaw_dok_realizujacego_zam, 0);
				SET 
				@.SPEC.Realizacja.ZM.Init.Ng.SQL = 
				"
				UPDATE `#opng#` n, `t_zmng_ZAM_Realizowane` z
				SET
					n.datasprzed = n.datawystaw,
					n.datawplywu = n.datawystaw,
				
					n.Rodzaj2 = IF(n.Rodzaj = @ht.CRzWZ, 1, n.Rodzaj2),
					-- ????????
					n.PlatnikGUID = IF(IFNULL(z.PlatnikGUID, '') = '', n.PlatnikGUID, z.PlatnikGUID),
					n.AkwizytorGUID = IFNULL(n.AkwizytorGUID, z.AkwizytorGUID),
					n.ZlecenieGUID = z.ZlecenieGUID,
					n.wyjazdGUID = IF(IFNULL(n.wyjazdGUID, '') != '', n.wyjazdGUID, z.wyjazdGUID),
					n.sposobplatn = z.sposobplatn,
					n.spedycja = z.spedycja,
					n.info1 = z.info1,
					n.info2 = z.info2,
					n.info3 = z.info3,
					n.info4 = z.info4,
					n.info5 = z.info5,
					n.info6 = z.info6,
					-- ??? n.RodzajDowodu = z.RodzajDowodu,	-- ?????
					n.transza_zamow = z.transza_zamow,	-- ?????
					n.uwagi = IF(@session.HT.IR.PrzepiszUwagiZZamowienia, z.uwagi, n.uwagi),
					n.Nrdokfin = IF(z.info1 LIKE 'DEPOZYT%', 'DEPOZYT', n.Nrdokfin),
					n.Dotyczy = 
						IF(z.info1 LIKE 'DEPOZYT%',
							REPLACE(z.info1, 'DEPOZYT ', 'Jest to dok. depozyt. i '),
							CONCAT(
								'Zam. nr: ', z.nrzamw,
								IF(z.nrzamwkontr != '', 
									CONCAT('Nr zam. odbiorcy: ', z.nrzamwkontr),
									''
								)	
							)	
						),	
					n.datawystaw = 
						IFNULL(
							n.datawystaw,
							_Get_Default_DataWystaw_Realizacji_ZM('', n.rodzaj, z.rodzaj, z.zamwpermn, z.terminrealizacji)
						),
						/*
						IF(z.rodzaj IN (@ht.CZmOO, @ht.CZmEx) AND z.zamwpermn,
						--	Gdy zam. jest perman. ( i OO lub eksportowe) to ustal dete jako pierwszy nastepny roboczy dzien
							IF(@session.globals.Owner = 'SECURITY',
								DATE(_Get_Next_Prev_Working_Day('NewDoc', z.terminrealizacji, -3)),
							-- 	bylo _Get_Next_WorkDay(z.terminrealizacji),
								DATE(_Get_Next_Prev_Working_Day(NULL, z.terminrealizacji, NULL))
							),
						--	pozostałe zam.	
							IF(@session.globals.Owner = 'SECURITY',
								DATE(_Get_Next_Prev_Working_Day('NewDoc', z.terminrealizacji, -3)),
								IF((IFNULL(n.DataWystaw, '') = '') OR ((n.Rodzaj = @ht.CMMMM) AND (@session.globals.Owner IN ('CDG','MPGK'))),
								--	Gdy CDG i MM-ka to date jako termin realizacji
									-- było do 2020-10-15	z.terminrealizacji,
									-- było DATE(GREATEST(z.terminrealizacji, CURRENT_DATE())),
									(CASE @session.HT.IR.Inicjacja_DataWystaw_dok_realizujacego_zam WHEN 0 THEN n.DataWystaw WHEN 1 THEN GREATEST(CURRENT_DATE(), z.TerminRealizacji) ELSE z.terminrealizacji END),
									n.datawystaw
								)
							)
						), 
						*/
					n.Wydzial =
						IF(@PrzepiszWydzial := ((z.rodzaj IN (@ht.CZmZP)) AND (n.Rodzaj IN (@ht.CRzRW, @ht.CPzPW))),
						--	Przepisz wydzial i ustaw Guid zlecenia gdy RW lub PW
							z.Wydzial,
							n.Wydzial
						),
					n.ZlecenieGUID =
						IF(@PrzepiszWydzial,
						--	i ustaw Guid zlecenia gdy RW lub PW
							IF(@session.HT.IR.PrzepiszGUIDZleceniaProd, z.GUID, n.ZlecenieGUID),
							n.ZlecenieGUID
						),
					n.opis = IF(n.guid LIKE 'WZ_z_PPT_%', 'z PPT', n.opis),
					n.ExtFlags = NULLIF(CONCAT_WS('', n.ExtFlags, '<Realizacja.ZM>'), '')
				WHERE
					n.GUID = #_IdnOper#
					AND
					z.GUID = @_ZM_Key
				;	
				"
				;
				CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.SPEC.Realizacja.ZM.Init.Ng.SQL);
			--	Mam juz KontrGUID i Platnik oraz sposoby platnosci i inne  z ZAMOWIENIA - zatem ...
			--	ustaw to co z Platnika i ...
				CALL C_HT_xxNgPo_DO('NG<-platnik', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
			--	ustaw reszte parametrow
				CALL C_HT_xxNgPo_DO('NG<-Set.Other', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
			--	katcol-e	
				IF @session.HT.IR.PrzepiszKatColZZamowienia THEN
					SET 
					@.SPEC.Realizacja.ZM.PREPARE.Ng.kat.SQL = 
					"
					UPDATE `#opng#` n, `t_zmng_ZAM_Realizowane` z
					SET
						n.katcol0 = z.katcol0,
						n.katcol1 = z.katcol1,
						n.katcol2 = z.katcol2,
						n.katcol3 = z.katcol3,
						n.katcol4 = z.katcol4,
                        n.ExtFlags = CONCAT_WS('', n.ExtFlags, '<NG.KatColZZamowienia>')
					WHERE
						n.GUID = #_IdnOper#
						AND
						z.GUID = @_ZM_Key
					;	
					"
					;
					CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.SPEC.Realizacja.ZM.PREPARE.Ng.kat.SQL);
				END IF;
				
			END IF;

		--	5 VIII 2024 - TYLKO 'SPEC.Realizacja.ZM.Init.Ng' używana reszta nie
		--	dlatego od 5 VIII 2024 jest to nawa do użytku!!! 
		--	26 II 2025 jeszcze jej nie używam ale zostawiam
			IF _MODE LIKE 'SPEC.Realizacja.ZM.Init.Po' THEN	
			--	UWAGA tutaj nie jest świat TE !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
			--	może to byc M, TE - zatem gdy M to musimy na wtepie przerzucic dane do M->TE  a na komniec spowrotrm M<-TE
			--	ZATEM
				IF _WORLD IN ('E', 'M') THEN
				--	1. Przygotuj tabel `TE_xxxx`	
					DROP TEMPORARY TABLE IF EXISTS `TE_oppo`;
					CREATE TEMPORARY TABLE IF NOT EXISTS `TE_oppo` LIKE `oppo_e`;
					DROP TEMPORARY TABLE IF EXISTS `TE_opng`;
					CREATE TEMPORARY TABLE IF NOT EXISTS `TE_opng` LIKE `opng_e`;
				--	2. przerzucic dane do M->TE
					IF _WORLD = 'M' THEN
						CALL C_HT_xxNgPo_DO('M.n->clear->TE.n', 'OP', '', _IdnOper, '', '', '', '', '', @P);
						CALL C_HT_xxNgPo_DO('M.p->clear->TE.p', 'OP', '', _IdnOper, '', '', '', '', '', @P);
					ELSEIF _WORLD = 'E' THEN
						CALL C_HT_xxNgPo_DO('E.n->clear->TE.n', 'OP', '', _IdnOper, '', '', '', '', '', @P);
						CALL C_HT_xxNgPo_DO('E.p->clear->TE.p', 'OP', '', _IdnOper, '', '', '', '', '', @P);
					END IF;
				END IF;
					
			--	Czy Realizacja zamowien, zlecen, etc ??????????????
				SET 
					@_ZM_Key = _GUID,	--	IdnNg realizowanego zamowienia (@.OPZM.INPUT_Key !!!!)
					@_zmpo_GUID = NULLIF(_Param_A, '')
				;
			--	Tworze `TE_zmpo` w ktorych bede mial pozycje realizacji
				DROP TEMPORARY TABLE IF EXISTS `twe_zmpo_realizuj`;
				CREATE TEMPORARY TABLE `twe_zmpo_realizuj` (
				  `GUID` VARCHAR(38) NOT NULL DEFAULT '',	--	GUID pozycji zmpo
				  `DoRealizacji` DOUBLE(16,6) DEFAULT NULL,
				  `pGuidOP` VARCHAR(38) DEFAULT NULL,	--	GUID pozycji realizujacej oppo
				  `ilosc_pierwotna` DOUBLE(16,6) DEFAULT NULL,	--	może potrzebna do zamykania
				  PRIMARY KEY (`GUID`)
				)
				;
				SET @.t_CShowRealizowalnosc.COUNT = 0;
				IF @.OPZM.IN_MODE LIKE 'Realizacja.ZM.From.geo_xxpo%' THEN
					INSERT IGNORE INTO `twe_zmpo_realizuj`
					(GUID, DoRealizacji, pGuidOP)
						SELECT
							gxp.pGuid,
							gxp.pIloscPak,	--	(t.Ilosc - t.zrealizowano)
							NULLIF(gxp.pGuidOP, '')
						FROM `geo_xxpo` gxp
						WHERE
							nGuid = @_ZM_Key
					;
				ELSEIF @.OPZM.IN_MODE LIKE 'Realizacja.ZM.From.%`t_GUI_WE_zmpo`%' THEN
					INSERT IGNORE INTO `twe_zmpo_realizuj`
					(GUID, DoRealizacji)
						SELECT
							t.GUID,
							(t.Ilosc - t.zrealizowano)
						FROM `t_GUI_WE_zmpo` t
						WHERE
							TRUE
					;
				ELSEIF IFNULL(@.t_CShowRealizowalnosc.COUNT, 0) > 0 THEN
					INSERT IGNORE INTO `twe_zmpo_realizuj`
					(GUID, DoRealizacji)
						SELECT
							t.GUID,
							t.MogeZrealizowac AS DoRealizacji
						FROM `t_CShowRealizowalnosc` t
						WHERE
							t.MogeZrealizowac > 0
					;
				ELSE
					SET _SQLText = 
					"
					INSERT IGNORE INTO `twe_zmpo_realizuj`
					(GUID, DoRealizacji)
						SELECT
							p.GUID,
							(p.Ilosc - p.zrealizowano)
						FROM #`zmpo`# p
						WHERE
							p.IdnNG = #_IdnOper#
							AND 
							#p.GUID#
							AND 
							(p.Ilosc - p.zrealizowano) > 0
							AND
							IFNULL(p.IdnTowr, '') != ''
						ORDER BY p.LP	
					;	
					"
					;
					SET @.SQL.OPZM.ins_Realizacja = REPLACE(_SQLText, '#`zmpo`#', 
							IF(@.OPZM.IN_MODE = 'Realizacja.ZM.From.zmng', 
								'`zmpo`',
								IF(@.OPZM.IN_MODE = 'Realizacja.ZM.From.zmng.skaner', 
									'`t_skaner.zmpo`',
									IF(@.OPZM.IN_MODE LIKE 'Realizacja.ZM.From.%`t_zlecprod.zmpo`%', 
										'`t_zlecprod.zmpo`',
										'`zmpo`'
									)
								)
							)		
						);
						
					CALL _ExecuteCmd_xxNgPo('', 'ZM', 'TE', @_ZM_Key, @_zmpo_GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.SQL.OPZM.ins_Realizacja);
					
				END IF;
				
			--	Przygotuj `TE_zmpo`	
				DROP TEMPORARY TABLE IF EXISTS `TE_zmpo`;
				CREATE TEMPORARY TABLE IF NOT EXISTS `TE_zmpo` LIKE `zmpo_e`;
			--  zamiast ...
			--	CALL C_HT_OPZM('recreate.`TE_xxpo`', '', 'ZM', _WORLD, '' ,'', '', '', '' ,'', '');
			
			--	`TE_zmpo` <- to co jest do realizacji	
				INSERT IGNORE INTO `TE_zmpo` 
					SELECT
						p.*
					FROM `twe_zmpo_realizuj` tr, `zmpo` p
					WHERE
						p.GUID = tr.GUID
					ORDER BY p.LP	
				;
			--	ALE GDY Permanentne!!!!!
				UPDATE `TE_zmpo` p, `zmng` n
				SET
					p.ExtFlags = NULLIF(CONCAT_WS('', p.ExtFlags, IF(n.zamwpermn = 1, '<Z_ZM_PERMN>', NULL)), ''),
					p.permanentne = 
						IF(@session.globals.Owner = 'SECURITY',
							p.permanentne, --	nie zmieniamy - to powinno byc powszechne !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
							n.zamwpermn
						)
					
				WHERE
					n.GUID = p.IdnNg
				-- and p.idn < 80333669
				;
				
								--	CALL _WatchTimeLogs_Tools('stop', "TE.Realizuj", "wstaw do `TE_zmpo`", '', '', '');
			--	Teraz do pozycji a la oppo_e			
			--	`TE_oppo` <- `TE_zmpo`
								--	CALL _WatchTimeLogs_Tools('start', "TE.Realizuj", "wstaw do `TE_oppo`", '', '', '');
				INSERT IGNORE INTO `TE_oppo` 
				(GUID, IdnOper, GUIDzm, IdnTowr, Ilosc, CenaNet, TypSymbolow, Rodzaj_Przeliczenia, ExtFlags)
					SELECT
						IFNULL(tr.pGuidOP,
							IF(_MODE = 'From.zmng.skaner.NEW',
								CONCAT('WZ', MD5(CONCAT(_IdnOper, tp.GUID))),
								UUID()	--	NEWGUID()
							)
						) AS GUID,
						_IdnOper,
						tp.GUID,
						tp.IdnTowr,
						tr.DoRealizacji,
						tp.CenaNet,
						tp.TypSymbolow,
						tp.Rodzaj_Przeliczenia,
						IF(tp.ExtFlags LIKE '%<Z_ZM_PERMN>%', '<Z_ZM_PERMN>', DEFAULT(tp.ExtFlags))

					FROM `TE_zmpo` tp, `twe_zmpo_realizuj` tr, `TE_opng` n, `operdoc` od 
					WHERE
						tr.GUID = tp.GUID
					--	A teraz warunek na magtyp !!!! czyli 
					--	gdy dok. typu Rz to pozycje z zam. tylko o magTyp = 2 a (OO, zlec.prod. rw)  ...
					--	gdy dok. typu Pz to pozycje z zam. tylko o magTyp = 0 (DD zlec. prod. pw)
						AND n.GUID = _IdnOper
						AND od.Rodzaj = n.Rodzaj
					/*	było ...  ale ze wzgl. na Oferty które mają @ht.mtNN musimy przepuscić
						AND od.MagTyp = tp.MagTyp
					*/
						AND tp.MagTyp IN (od.MagTyp, @ht.mtNN)
					ORDER BY tp.LP	
				;			
								--	CALL _WatchTimeLogs_Tools('stop', "TE.Realizuj", "wstaw do `TE_oppo`", '', '', '');

								--	CALL _WatchTimeLogs_Tools('start', "TE.Realizuj", "NG->PO", '', '', '');
				CALL C_HT_xxNgPo_DO('NG->PO', 'OP', 'TE', _IdnOper, '', _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
				CALL C_HT_xxNgPo_DO('TowrNg->PO', 'OP', 'TE', _IdnOper, '', _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
								--	CALL _WatchTimeLogs_Tools('stop', "TE.Realizuj", "NG->PO", '', '', '');
				
								--	CALL _WatchTimeLogs_Tools('start', "TE.Realizuj", "UPDATE `TE_oppo` p, `TE_zmpo` z", '', '', '');
				--	Teraz update pozycji szczegolowe
				SET 
				@.SPEC.Realizacja.ZM.PREPARE.PO.1.SQL = 
				"
				UPDATE `#opng#` n, `#oppo#` p, `#zmpo#` z, `operdoc` od
				SET
					p.Lp = z.Lp,
					p.rabat = IF(@.DEST.Typ_Przepisania_Cen != 0,  z.rabat, p.rabat),
					p.idnvat =
						/*	do X 2024
						IF(p.Rodzaj = @ht.CSpFE AND @session.HT.IR.Wymuszaj_zero_stawke_VAT_dla_STFE,
							2,	--	to stawka 0%
							IF(p.Rodzaj IN (@ht.CSTUE, @ht.CZkIm, @ht.CZTUE) AND (z.idnVat != 5),		--	<> od niepodlega
								2,	--	to stawka 0%
								IF(p.Rodzaj IN (@ht.CZkRU),		--	<> od niepodlega
									5,	--	to stawka niepodlega
									IFNULL(NULLIF(z.idnvat, 0), p.idnvat)
								)	
							)	
						),
						... teraz dodałem X 2024 */
						_Get_IdnVat('', 'OP', IFNULL(NULLIF(z.idnvat, 0), p.idnvat), p.Rodzaj, n.Rodzaj2, n.RV_Id, od.ZerowaStawkaVat, ''),
					p.usluga = z.usluga,
					p.TypSymbolow = z.TypSymbolow,
					p.towrsymb = z.towrsymb,
					
					p.towrnazwa = z.towrnazwa,
					p.uwagi = z.uwagi,
					p.uwagi2 = z.uwagi2,
					p.ilosc_L_do_przeliczen = z.ilosc_L_do_przeliczen,
					p.ilosc_M_do_przeliczen = z.ilosc_M_do_przeliczen,
					p.id_przelicznika = z.id_przelicznika,
					-- p.przelicznik = z.przelicznik,
					-- bylo p.opakowanie_zwrotne = z.opakowanie_zwrotne,
					p.opakowanie_zwrotne = IF(IFNULL(@session.HT.IR.PrzeniesOpakZwZmpoDoOppo, TRUE), z.opakowanie_zwrotne, p.opakowanie_zwrotne),
					
					p.WartnetWal = z.WartnetWal,
					p.OsobaGuid = z.OsobaGuid,
					p.jednostka = z.jednostka,
					p.RecepturaGuid = z.RecepturaGuid,
					p.AreaGUID = z.AreaGUID,
					p.oplata_produktowa = z.oplata_produktowa,
					p.info = z.info,	 -- ????
					p.info2 = z.info2,
					p.info3 = z.info3,
					p.info4 = z.info4,
					p.ilewopakowaniu = z.ilewopakowaniu,
					p.waga = z.waga,
					p.waga_jedn = z.waga_jedn,
					p.spakowano = z.spakowano,
					-- p.RcNgGuid = IF(p.Rodzaj IN (@ht.CZmOO, @ht.CZmEx, @ht.CZmZP, @ht.cZmWE), z.RcNgGuid, p.RcNgGuid), 
					p.RcNgGuid = IF(z.Rodzaj IN (@ht.CZmZP), z.RcNgGuid, p.RcNgGuid), 
					p.GUID_ZmPo_MM = z.GUID,
					p.ExtFlags = CONCAT_WS('', p.ExtFlags, '<from.zmpo>')
				WHERE
					TRUE
					AND #n.GUID#
					AND p.IdnOper = n.GUID
					AND	z.GUID = p.GUIDzm
					AND od.Rodzaj = n.Rodzaj
				;
				"
				;
				CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, _GUID, _Param_A, _Param_B, _Param_C, _Param_D, @.SPEC.Realizacja.ZM.PREPARE.PO.1.SQL);
			--	towrnazwa uwazgledniajac :  %WW, %W etc	
				UPDATE `TE_oppo` p, `TE_opng` n, `slowniki_pierwotne` s
				SET
					p.towrnazwa = 
								-- UstawRokMsc(aSrcPo.FieldByName('towrnazwa').AsString, FNg.FieldByName('DataWystaw').AsDateTime);
							REPLACE(REPLACE(REPLACE(REPLACE(p.towrnazwa, 
								'%WW', _VarStr(LPAD(MONTH(n.DataWystaw), 2, '0'))), 
								'%W', _VarStr(IFNULL(s.DisplayValue, ''))), 
								'%RRRR', _VarStr(LPAD(YEAR(n.DataWystaw), 4, '0'))), 
								'%RR', _VarStr(LPAD(YEAR(n.DataWystaw) MOD 1000, 2, '0')))
				WHERE
					TRUE
					AND n.GUID = _IdnOper
					AND p.IdnOper = n.GUID
					AND	s.slownik_GUID = 'MIESIACE'
					AND s.Value = MONTH(n.DataWystaw)
				;

				IF (@.DEST.Typ_Przepisania_Cen != CZZ_OdNowa) THEN
					UPDATE `TE_oppo` p, `TE_zmpo` z
					SET
						p.idncennik = p.idncennik,
						p.cenanet = 
							IF(p.Rodzaj_Przeliczenia IN (3,4,5),	 	-- CRodzaj_Przeliczenia_Brutto_Netto, CRodzaj_Przeliczenia_Brutto_Netto2, CRodzaj_Przeliczenia_CenaBrutto_Netto
								z.cenanet,
								z.cenanet
							),	
						p.cenabrt = 
							IF(p.Rodzaj_Przeliczenia IN (3,4,5,7), 		-- CRodzaj_Przeliczenia_Brutto_Netto, CRodzaj_Przeliczenia_Brutto_Netto2, CRodzaj_Przeliczenia_CenaBrutto_Netto
								z.cenabrt,
								p.cenabrt
							),
						p.WartNetWal = 
							IF(p.Rodzaj_Przeliczenia IN (1, 2),	 		-- CRodzaj_Przeliczenia_NettoWal_CenaNet, CRodzaj_Przeliczenia_NettoWal_Rabat
								z.WartNetWal,
								p.WartNetWal
							),
						p.WartBrt = 
							IF(p.Rodzaj_Przeliczenia IN (4),	 		-- CRodzaj_Przeliczenia_Brutto_Netto2 
								z.WartBrt,
								p.WartBrt
							)
					WHERE
						TRUE
						AND p.IdnOper = _IdnOper
						AND	z.GUID = p.GUIDzm
					;
				END IF;
				
				IF (@.DEST.Typ_Przepisania_Cen = CZZ_Zamowienie) THEN
					UPDATE `TE_oppo` p, `TE_zmpo` z
					SET
						p.kurs = p.kurs,
						p.cenanet = 
							IF(p.Rodzaj_Przeliczenia IN (3,4,5),	 -- CRodzaj_Przeliczenia_Brutto_Netto, CRodzaj_Przeliczenia_Brutto_Netto2, CRodzaj_Przeliczenia_CenaBrutto_Netto
								z.cenanet,
								z.cenanet
							),	
						p.cenabrt = 
							IF(p.Rodzaj_Przeliczenia IN (3,4,5,7), 		-- CRodzaj_Przeliczenia_Brutto_Netto, CRodzaj_Przeliczenia_Brutto_Netto2, CRodzaj_Przeliczenia_CenaBrutto_Netto
								z.cenabrt,
								p.cenabrt
							),
						p.WartNetWal = 
							IF(p.Rodzaj_Przeliczenia IN (1, 2),	 		-- CRodzaj_Przeliczenia_NettoWal_CenaNet, CRodzaj_Przeliczenia_NettoWal_Rabat
								z.WartNetWal,
								p.WartNetWal
							),
						p.WartBrt = 
							IF(p.Rodzaj_Przeliczenia IN (4),	 		-- CRodzaj_Przeliczenia_Brutto_Netto2 
								z.WartBrt,
								p.WartBrt
							)
					WHERE
						TRUE
						AND p.IdnOper = _IdnOper
						AND	z.GUID = p.GUIDzm
					;
				END IF;
				
				IF (@session.globals.Owner = 'PLISZKA') THEN
					UPDATE `TE_oppo` p, `TE_zmpo` z
					SET
						p.kat5 = z.kat5,
						p.kat6 = z.kat6,
						p.kat7 = z.kat7,
						p.kat8 = z.kat8,
						p.kat9 = z.kat9,
						p.ExtFlags = CONCAT_WS('', p.ExtFlags, '<kat.from.zmpo>')
					
					WHERE
						TRUE
						AND p.IdnOper = _IdnOper
						AND	z.GUID = p.GUIDzm
					;
				END IF;
				
				IF @session.HT.IR.PrzepiszKatColZZamowienia THEN
			-- UWAGA !!!!!!!!tu w Delphi jest {$IFDEF PrzepiszKatColeZPozycjiZM}
					UPDATE `TE_oppo` p, `TE_zmpo` z
					SET
						p.kat0 = z.kat0,
						p.kat1 = z.kat1,
						p.kat2 = z.kat2,
						p.kat3 = z.kat3,
						p.kat4 = z.kat4,
						p.kat5 = z.kat5,
						p.kat6 = z.kat6,
						p.kat7 = z.kat7,
						p.kat8 = z.kat8,
						p.kat9 = z.kat9,
						p.ExtFlags = CONCAT_WS('', p.ExtFlags, '<kat.from.zmpo>')
					WHERE
						TRUE
						AND p.IdnOper = _IdnOper
						AND	z.GUID = p.GUIDzm
					;
				END IF;
				
			/* ******************************************************************************************************************************************************************************
				UWAGA na końcu GDY sa PERMANENTNE pozycje - musze wyczyscic je z zawartosci GUIDZm - bo pozycja oppo  nie moze realizowac pozycji zamowienia permanentnego
			****************************************************************************************************************************************************************************** */
				UPDATE `TE_oppo` p, `TE_zmpo` z
				SET
					p.GUIDZm = 
						IF(@session.globals.Owner = 'SECURITY',
							IF(z.permanentne = 1, '', p.GUIDZm), --	to powinno byc powszechne !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
							IF(z.permanentne = 1 OR (p.ExtFlags LIKE '%<Z_ZM_PERMN>%'), '', p.GUIDZm)
						)
				WHERE
					TRUE
					AND p.IdnOper = _IdnOper
					AND	z.GUID = p.GUIDzm
				;
				
				IF _WORLD IN ('E', 'M') THEN
				--	Na koniec gdy E lub M				
					IF _WORLD = 'M' THEN
						CALL C_HT_xxNgPo_DO('M.n<-clear<-TE.n', 'OP', '', _IdnOper, '', '', '', '', '', @P);
						CALL C_HT_xxNgPo_DO('M.p<-clear<-TE.p', 'OP', '', _IdnOper, '', '', '', '', '', @P);
					ELSE
						CALL C_HT_xxNgPo_DO('E.n<-clear<-TE.n', 'OP', '', _IdnOper, '', '', '', '', '', @P);
						CALL C_HT_xxNgPo_DO('E.p<-clear<-TE.p', 'OP', '', _IdnOper, '', '', '', '', '', @P);
					END IF;
					
				END IF;
				
			/* ******************************************************************************************************************************************************************************
				UWAGA !!!! NOWOSC - NALICZANIE pozycji w `t_oppo_e_insert` takie calc_po ale w temp
			****************************************************************************************************************************************************************************** */
				CALL C_HT_xxNgPo_DO('PO.CALC_ROWS', 'OP', _WORLD, _IdnOper, '', _Param_A, _Param_B, _Param_C, _Param_D, _Param_E);
	-- na razie nie ma zadnego LP 			CALL C_HT_xxNgPo_DO('PO.CALC_LP', 'OP', _WORLD, _IdnOper, '', _Param_A, _Param_B, _Param_C, _Param_D, _SQLText);
		--	!!!!!!!!! DOROBIC  i zdjac FALSE
				IF FALSE AND @.DEST.Typ_Przepisania_Cen = CZZ_OdNowa THEN
					CALL _pozycje_cenyrabat_oppo_e('dla.IdnOper', _IdnOper, FALSE, FALSE, '', '');  	--	dla wszystkich pozycji o IdnOper = _IdnOper
				END IF;
				
				CALL C_HT_OPZM('NG.POST', '', 'OP', _WORLD, _IdnOper, '', '', '', '' ,'', '');
					
			END IF;

		END IF;
		
		IF _MODE IN ('REEDIT.Prepare') THEN
		/*******************************************************
			Przygotowanie do edycji  w polu p.ExtFlags
		*******************************************************/
			SET @.n.ExtFlags = CONCAT(
				IF(_Param_E LIKE '%NG<-Kontrah%', '(NG<-Kontrah)', ''),
				IF(_Param_E LIKE '%NG<-DEFAULT%', '(NG<-Kontrah)', '')	--	gdy default to kontrahenta zapal bo sie nie ustawi
			)
			;
			SET 
			@.SQLText.REEDIT.Prepare.n = 
			"
			UPDATE `#xxng#` n
			SET
				n.ExtFlags = _ExtFlags('ADD.Text', n.ExtFlags, @.n.ExtFlags, '', '')
			WHERE
				TRUE
				AND
				-- jmam n.GUID = #_IdnOper#
				#n.GUID#
			;
			"
			;
			CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, '', '', '', '', '', @.SQLText.REEDIT.Prepare.n);
			
			-- SELECT @.SQLText.REEDIT.Prepare.n;
				
			SET @_Dont_touch_poz = IFNULL((_Param_E LIKE '%Dont_touch_poz%'), FALSE);
			IF NOT @_Dont_touch_poz THEN
			
				SET @.p.ExtFlags = CONCAT(
					IF(_Param_E LIKE '%TowrNg->PO%', '(TowrNg->PO)', ''),
					IF(_Param_E LIKE '%NG->PO%', '(NG->PO)', ''),
					IF(_Param_E LIKE '%<-Ceny%', '(<-Ceny)', '')
				)	
				;
			
				SET 
				@.SQLText.REEDIT.Prepare.p = 
				"
				UPDATE `#xxpo#` p
				SET
					p.ExtFlags = _ExtFlags('ADD.Text', p.ExtFlags, @.p.ExtFlags, '', '')
				WHERE
					TRUE
					AND
					-- p.#IdnOper# = #_IdnOper#
					-- #p.IdnOper#
					#p.IdnOperNg#
				;
				"
				;
				CALL _ExecuteCmd_xxNgPo('', _FROM, _WORLD, _IdnOper, '', '', '', '', '', @.SQLText.REEDIT.Prepare.p);
				
				-- SELECT @.SQLText.REEDIT.Prepare.p;
			END IF;
		END IF;
		
		
	SET @X.y.z = '';
END$$



DELIMITER ;

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

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

/*
$Log: C_HT_xxNgPo.sql,v $
Revision 1.46  2025/02/25 20:23:27  jmam
$send$ Wersja po poprawkach 1/2 roku

Revision 1.45  2025/02/25 20:22:54  jmam
Wersja po poprawkach 1/2 roku

*/
