1s 8.3 Období hlášení ACS. Standardní parametr &Období a problémy při používání
Pojďme vytvořit přehled s jednou sadou dat dotazu:
VYBERTE PRODUKTY VE SKLADech Zbývající. Sklad, ZbožíVSkladechZbytky. Nomenklatura, Zbývající produkty ve skladech. QuantityBalance Z registru akumulace. Produkty ve skladech. Remains(&MyDate ,) AS ProductsInWarehousesRemainsNyní přejdeme na záložku parametry a uvidíme, že systém kromě našeho parametru &MojeDatum vytvořil také parametr &Období.
Abychom mohli vizuálně sledovat období, vytvoříme hlavní formulář zprávy a umístíme na něj pole tabulky s údaji: Nastavení Composer.Settings.DataParameters
Uložme sestavu a otevřeme ji v podniku. V poli tabulky s parametry je zobrazen pouze parametr &Období:
Jakákoli změna tohoto parametru tedy nepřinese požadovaný výsledek.
Proč není parametr &MyDate dostupný? Samozřejmě, protože na záložce parametry má zaškrtnuté políčko Omezení dostupnosti.
Zrušte zaškrtnutí políčka. Nyní vidíme obojí v dostupných parametrech. Pouze při generování sestavy uvidíme, že sestava reaguje na parametr &Období, nikoli na &MojeDatum.
V v tomto příkladu Nejjednodušší způsob je přejmenovat parametr &MyDate v požadavku na &Period a dosáhnout požadovaného výsledku. Možná však máte dotaz, ve kterém byl parametr &Period již použit, nebo vaše náboženské názory vám tento parametr neumožňují, v každém případě můžete problém vyřešit takto:
VYBERTE PRODUKTY VE SKLADech Zbývající. Sklad, ZbožíVSkladechZbytky. Nomenklatura, Zbývající produkty ve skladech. QuantityBalance Z registru akumulace. Produkty ve skladech. Remains((&MyDate) ,) AS ProductsInWarehousesRemainsUPD od uživatele Vypískat:
Hlavním problémem při použití „standardních“ (systémem přidaných) parametrů je to, že při použití více virtuálních tabulek v sestavě, pokud je tento parametr definován, bude ve všech ostatních případech použita jeho hodnota namísto „vlastních“.
Uvedu příklad:
AS SP LEVÉ PŘIPOJENÍ Registr informací.Zaměstnanci organizací.Slice of the Latest(&OtherDate ,) AS EmployeesSPAnotherDate BY EmployeesSP.Employee = EmployeesSPAnotherDate.EmployeeVe druhém dílčím dotazu bude jako parametr data řezu použita hodnota „standardního“ parametru PERIOD, nikoli hodnota OtherDate.
Tato „závada“ bude pozorována, i když bude druhý dílčí dotaz odeslán do druhé datové sady a propojen pomocí ACS. Možnost používající ve druhém požadavku výraz jako „ADDATE(&Období, MĚSÍC, -1)“ také nebude fungovat, měsíc se neodečte. Ale přejmenování parametru „Period“ v požadavku například na „FirstDate“ tento problém řeší.
Mimochodem, úplně stejný problém nastává u virtuální stoly akumulační a účetní registry sloužící k získávání např. obratu. Tam systém přidá parametry „Start of Period“ a „End of Period“.
Takže v případě požadavků, které jsou i trochu složitější, má smysl dostupnost a používání „standardních lhůt“ vypnout.
Některé funkce nastavení období v systému kontroly přístupu.
Většina sestav, které jsou vyvíjeny pomocí Data Composition System (DCS), vyžaduje, aby uživatel zadal období, pro které bude sestava sestavena.
Zápis období je v ACS zpravidla organizován pomocí parametrů, pomocí následující konstrukce, viz. Tento způsob zápisu období je považován za „klasický“ je popsán v článku o ITS a další literatuře věnované vývoji v 1C, tak berme to jako základ. Uvažujme jako příklad jednoduchou poptávku, která obdrží veškeré doklady Prodej zboží a služeb za dané období viz
Při použití tohoto přehledu uživatel nastavuje období přes parametry, viz. Vše se zdá být v pořádku..., ALE je tu malý problém:
Jde o to, že naprostá většina uživatelů „chápe“ období jinak, než jej „chápe“ 1C, příklady:
Z pohledu uživatele není období specifikováno, tedy NEOMEZENO, to znamená, že do výkazu by měly být zahrnuty VŠECHNY doklady bez omezení data.
„Z pohledu“ systému 1C je nastaven parametr-období a ... obě jeho hranice jsou rovny 01.01.0001 a do sestavy budou zahrnuty pouze dokumenty s prázdným datem, což v praxi znamená nebude zahrnut ani jeden dokument.
Z pohledu uživatele by měla sestava obsahovat všechny doklady počínaje datem 28. 1. 2010.
„Z pohledu“ 1C způsobí výjimku období 28. 1. 2010 - 1. 1. 0001.
Můžete se samozřejmě pokusit uživateli vysvětlit, proč zpráva nezobrazuje dokumenty, které očekává, že uvidí, a jak je období prezentováno z „pohledu“ 1C, ale je to nevděčný úkol a je také špatně. Dobrý program musí být především pohodlné pro uživatele, protože program existuje pro uživatele, a ne naopak, proto je nutné „naučit“ 1C chápat období tak, jak mu rozumí uživatel, konkrétně:
1). Začátek období a konec období nejsou specifikovány -> všechny doklady.
2). Je zadán pouze Počátek období -> všechny dokumenty počínaje Počátkem období
3). Navíc zkontrolujeme, že End of Period >= Beginning of Period, a pokud to není pravda, tak budeme předpokládat, že End of Period není specifikován, tzn. 2).
Na základě výše uvedeného je výraz pro parametr Datum ukončení:
WHEN &Period.EndDate=DATETIME(1;1;1)
PAK DATETIME(3999;12;31)
WHEN &Period.End Date<&Период.ДатаНачала
PAK DATETIME(3999;12;31) DATETIME(3999;12;31;23;59;59)
&Period.Datum ukončení
Finální podoba našeho návrhu dobového výběru je uvedena v
Poznámka: tento mechanismus pro nastavení parametrů je určen pro starší platformy 1C 8.1 a 8.2 (a konfigurace běžící pod jejich kontrolou starší verze platformy 1C mají vestavěné mechanismy pro ovládání prázdných parametrů a není třeba se uchýlit k mechanismu); popsané v tomto článku, navíc Na některých verzích platformy 1C jsou možné chyby a nesprávná operace.
Při vytváření výkazů v systému řízení přístupu je často potřeba zobrazit výběr období na formuláři výkazu, takže data nemusíte zadávat ručně, ale vybírat ze seznamu standardních období, jako například: „Rok“ , „Měsíc“, „Týden“ atd. . U parametrů typu Datum můžete zadat pouze „Začátek tohoto roku, měsíc atd.“, ale „Konec“ není k dispozici.
Jde o to, že z datových typů je k dispozici pouze typ „Standardní počáteční datum“, ale chci také „Standardní koncové datum“.
Existuje způsob, jak to obejít.
- Vytvořme nový parametr, nazvěme ho „Období“
- Nastavte tento parametr na typ „Standardní období“
- V poli „Výraz“ parametrů „Začátek období“ a „Konec období“, které jsou použity v požadavku, nastavte výrazy „ &Period.StartDate" a " &Period.Datum ukončení“.
Ale je tu mírná jemnost. Pokud v dotazu použijeme virtuální tabulky, pak s největší pravděpodobností přestane sestava fungovat a zobrazí se chybové hlášení typu „Chyba při zpracování pohledu, neshoda typu, číslo parametru...“.
Abyste tomu zabránili, musíte odstranit všechny parametry virtuální tabulky.
A přidejte je do tabulek na kartě „Složení dat“.
Aby se parametry zobrazovaly v nastavení rychlé sestavy, povolme u parametrů sestavy odpovídající příznak.
Nyní výběr období na formuláři hlášení vypadá takto.
Tento článek pojednává o některých funkcích nastavení období při použití systému skládání dat (DCS), problémech, které vznikají kvůli rozdílům v pojetí období mezi běžným uživatelem a systémem 1C, a také navrhuje způsoby, jak je vyřešit. .
Většina sestav, které jsou vyvíjeny pomocí Data Composition System (DCS), vyžaduje, aby uživatel zadal období, pro které bude sestava sestavena. Zpravidla je v ACS zadávání období organizováno pomocí parametrů s použitím následující konstrukce, viz. Obr. 1 Tento způsob zadávání období je považován za „klasický“; je popsán v článku o ITS a další literatuře věnované vývoji v 1C, berme ho tedy jako základ. Uvažujme jako příklad jednoduchou poptávku, která obdrží veškeré doklady Prodej zboží a služeb za dané období viz Obr.2 Při použití tohoto přehledu si uživatel nastavuje období přes parametry viz. Obr.3 Vše se zdá být v pořádku... ALE je tu malý problém:
Jde o to, že naprostá většina uživatelů „chápe“ období jinak, než jej „chápe“ 1C, příklady:
1). Uvažujme Obr.3
Z pohledu uživatele není období specifikováno, tedy NEOMEZENO, to znamená, že do výkazu by měly být zahrnuty VŠECHNY doklady bez omezení data.
„Z pohledu“ systému 1C je nastaven parametr-období a ... obě jeho hranice jsou rovny 01.01.0001 a do sestavy budou zahrnuty pouze dokumenty s prázdným datem, což v praxi znamená nebude zahrnut ani jeden dokument.
2). Uvažujme Obr.4
Z pohledu uživatele by měla sestava obsahovat všechny dokumenty počínaje datem 28. 1. 2010.
„Z pohledu“ 1C způsobí výjimku období 28. 1. 2010 – 1. 1. 0001.
Můžete se samozřejmě pokusit uživateli vysvětlit, proč zpráva nezobrazuje dokumenty, které očekává, že uvidí, a jak je období prezentováno z „pohledu“ 1C, ale je to nevděčný úkol a je také špatně. Dobrý program by měl být především uživatelsky přívětivý, protože program existuje pro uživatele, a ne naopak, proto budete muset 1C „naučit“ chápat období tak, jak mu rozumí uživatel, konkrétně:
1). Začátek období a konec období nejsou zadané -> všechny doklady.
2). Zadává se pouze Počátek období –> všechny doklady počínaje Počátkem období
3). Navíc zkontrolujeme, že End of Period >= Beginning of Period, a pokud to není pravda, tak budeme předpokládat, že End of Period není specifikován, tzn. 2).
Na základě výše uvedeného bude výraz pro parametr Datum ukončení vypadat takto:
SELECT WHEN &Period.EndDate=DATETIME(1,1,1) THEN DATETIME(3999,12,31,23,59,59) ELSE SELECT WHEN &Period.EndDate<&Период.ДатаНачала ТОГДА ДАТАВРЕМЯ(3999,12,31,23,59,59) ИНАЧЕ &Период.ДатаОкончания КОНЕЦ КОНЕЦ
Finální podoba našeho návrhu dobového výběru je uvedena v Obr.5