Uživatelská procedura dbo.ep_ZjistiCenuPolozky

PříspěvekNapsal: 12.06.2020 08:50
od dagmar.mayerova
Uživatelská (slepá) procedura dbo.ep_ZjistiCenuPolozky je určena pro externí ocenění položky na dokladech skladů, nákupu a prodeje, fakturace a pokladního prodeje. Zatím nejsou podporovány firemní aktivity a není možné slepou procedurou ovlivňovat slevy.
Je volána procedurou hp_ZjistiCenuPolozky, která zajišťuje standardní ocenění položky dokladovou cenou.

Procedura umožňuje ovlivnit výpočet ceny, a to buď s výpočtem ceny zcela vlastním způsobem nebo s možností zasáhnout do ceny navržené systémem. To je ovlivněno neveřejnou konstantou TabHGlob.OZSlepaProcCena:
TabHGlob.OZSlepaProcCena = 0 - uživatelská procedura se nespouští
TabHGlob.OZSlepaProcCena = 1 - procedura se spouští na začátku standardního výpočtu ceny, určeno pro vlastní ocenění, v tomto případě se nespouští proces standardního ocenění HELIOS Orange, což může šetřit systémové prostředky
TabHGlob.OZSlepaProcCena = 2 - procedura se spouští na konci standardního výpočtu ceny, určeno pro ovlivnění ceny dotažené systémem podle standardních pravidel

V souvislosti s tím byla vytvořena nová zastřešující procedura HP_ZjistiCenuPolozky, která zastřešuje dvě původní procedury pro dohledání ceny HP_HodnotyProPolozkuZceniku a HP_DotahniNabidkovouCenuNew.

Parametry:
@IDDoklad INT - ID hlavičky cílového dokladu (Sklad, Fakturace, DOBJ)
@IDPolozka INT - ID položky cílového dokladu (Slad, Fakturace, DOBJ), při zakládání nové položky může být NULL
@DruhPohybu INT - Druh pohybu zboží cílového dokladu
@CisloOrg INT - Číslo organizace nebo Místo určení dle TabHGlob.DohledatCenyDle
@IDZboSklad INT - ID skladové karty
@CisloTabDObj INT - Číslo tabulky Došlých objednávek (1-v přípravě, 2-DOBJ, 3-archiv)
@CoMamDelat INT - Parametr z podřízené procedury (HP_HodnotyProPolozkuZCeniku)
0=nejprve hledat akci, poté cenu dle množství (Zejména při zakládání nové položky).
1=akci známe, hledat cenu podle množství (Zejména při aktualizaci ceny stávající položky).
2=hledat jen akci, nikoliv cenu (téměř nevyužívaný stav, pokud je třeba zjistit jen akci)
@DotahniCenu INT - 0= volá se pouze první (HP_HodnotyProPolozkuZceniku) procedura; 1= volá se první i druhá (HP_DotahniNabidkovouCenuNew) procedura
@ZdrojCeny BIT - Parametr pro obě podřízené procedury. Pokud je 1, dodá všechny možné ceny, které existují viz funkcionalita "Zdroj ceny" na položce dokladu. Pokud je 0, dodá pouze 1 cenu s nejvyšší prioritou.
@CenaPuvodni NUMERIC(19,6) -Cena z editoru položky před zahájením výpočtu. POZOR nejedná se o cenu dohledanou předchozími mechanismy cenotvorby při TabHGlob.OZSlepaProcCena = 2
@Nalezeno OUT BIT - OUT 0-procedura nestanovila cenu / 1-procedura cenu stanovila
na vstupu: byla stanovena standardní cenotvorbou
na výstupu: cena byla stanovena externím oceněním
@Cena OUT NUMERIC(19,6) - OUT Stanovená cena, při TabHGlob.OZSlepaProcCena = 2 obsahuje cenu dohledanou předchozími mechanismy
na vstupu: cena zjištěna standardní cenotvorbou
na výstupu: cena zjištěna externím oceněním

Příklad:

Kód: Vybrat vše
/****** Object:  StoredProcedure [dbo].[ep_ZjistiCenuPolozky]    Script Date: 18.06.2019 18:18:30 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ep_ZjistiCenuPolozky]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[ep_ZjistiCenuPolozky]
GO

/****** Object:  StoredProcedure [dbo].[ep_ZjistiCenuPolozky]    Script Date: 18.06.2019 18:18:30 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[ep_ZjistiCenuPolozky]
   @IDDoklad INT
   ,@IDPolozka INT
   ,@DruhPohybu INT
   ,@IDZboSklad INT
        ,@VstupniCena INT
   ,@CisloTabDObj INT
   ,@CoMamDelat INT
   ,@DotahniCenu INT
   ,@ZdrojCeny BIT
   ,@Nalezeno BIT OUT
   ,@Cena NUMERIC(19,6) OUT
AS
SET XACT_ABORT, NOCOUNT ON;
-- =============================================
-- Author:      JDO
-- Description:   Slepa procedura pro dotazeni ceny pro testovani JHO
-- =============================================

SET @Nalezeno = 0;

SELECT
   @Cena = ISNULL(@Cena,0.) + InventuraCena
   ,@Nalezeno = 1
FROM TabStavSkladu
WHERE ID = @IDZboSklad;
GO



Příklad pro TabHGlob.OZSlepaProcCena = 1

Kód: Vybrat vše
alter PROCEDURE dbo.ep_ZjistiCenuPolozky
   @IDDoklad INT,
   @IDPolozka INT,
   @DruhPohybu INT,
        @CisloOrg INT,
   @IDZboSklad INT,
        @VstupniCena INT,
   @CisloTabDObj INT,
   @CoMamDelat INT,
   @DotahniCenu INT,
   @ZdrojCeny BIT,
        @CenaPuvodni NUMERIC(19,6),
   @Nalezeno BIT OUT,
   @Cena NUMERIC(19,6) OUT
AS

IF @DotahniCenu=1

SELECT
  @Cena = InventuraCena
  ,@Nalezeno = 1
  FROM TabStavSkladu
  WHERE ID = @IDZboSklad

--select ozslepaproccena from tabhglob
--update tabhglob set ozslepaproccena = 1



Příklad pro TabHGlob.OZSlepaProcCena = 2

Kód: Vybrat vše
alter PROCEDURE dbo.ep_ZjistiCenuPolozky
   @IDDoklad INT,
   @IDPolozka INT,
   @DruhPohybu INT,
        @CisloOrg INT,
   @IDZboSklad INT,
        @VstupniCena INT,
   @CisloTabDObj INT,
   @CoMamDelat INT,
   @DotahniCenu INT,
   @ZdrojCeny BIT,
        @CenaPuvodni NUMERIC(19,6),
   @Nalezeno BIT OUT,
   @Cena NUMERIC(19,6) OUT
AS
IF @Nalezeno = 1
SELECT
  @Cena = @Cena + InventuraCena
  FROM TabStavSkladu
  WHERE ID = @IDZboSklad

--select ozslepaproccena from tabhglob
--update tabhglob set ozslepaproccena = 2