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 ProductsInWarehousesRemains

Nyní 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 ProductsInWarehousesRemains

UPD 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.Employee

Ve 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.

  1. Vytvořme nový parametr, nazvěme ho „Období“
  2. Nastavte tento parametr na typ „Standardní období“
  3. 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