Štandardný parameter &Obdobie a problémy pri používaní. V parametroch vytvoríme report so zadanou frekvenciou na SKD 1s 8 SKD obdobie

  • 26.11.2023

Poďme vytvoriť prehľad s jednou množinou údajov dopytu:

VYBERTE PRODUKTY V SKLADOCH Zostávajúce. Sklad, TovarVSkladochZostatky. Nomenklatúra, Zostávajúce produkty v skladoch. Množstvo Zostatok Z registra akumulácie. ProduktyVSkladoch. Remains(&MyDate,) AS ProductsInWarehousesRemains

Teraz prejdeme na záložku parametrov a uvidíme, že systém okrem nášho parametra &MyDate vytvoril aj parameter &Period.
Aby sme mohli vizuálne sledovať obdobia, vytvoríme hlavný formulár prehľadu a umiestnime naň pole tabuľky s údajmi: Nastavenia Composer.Settings.DataParameters

Uložme prehľad a otvorme ho v podniku. V poli tabuľky s parametrami sa zobrazuje iba parameter &Obdobie:

Preto akákoľvek zmena tohto parametra neprinesie požadovaný výsledok.

Prečo nie je parameter &MyDate dostupný? Samozrejme, pretože na karte parametrov má zaškrtnuté políčko Obmedzenie dostupnosti.

Zrušte začiarknutie políčka. Teraz vidíme oboje v dostupných parametroch. Až pri generovaní zostavy uvidíme, že zostava reaguje na parameter &Obdobie a nie na &MôjDátum.

V tomto príklade je najjednoduchšie premenovať parameter &MyDate v požiadavke na &Period a dosiahnuť požadovaný výsledok. Možno však máte dotaz, v ktorom už bol použitý parameter &Obdobie, alebo vaše náboženské názory vám tento parameter neumožňujú, v každom prípade môžete problém vyriešiť takto:

VYBERTE PRODUKTY V SKLADOCH Zostávajúce. Sklad, TovarVSkladochZostatky. Nomenklatúra, Zostávajúce produkty v skladoch. Množstvo Zostatok Z registra akumulácie. ProduktyVSkladoch. Remains((&MyDate) ,) AS ProductsInWarehousesRemains

UPD od používateľa Boo:

Hlavným problémom pri použití „štandardných“ (systémom pridaných) parametrov je, že pri použití viacerých virtuálnych tabuliek v zostave, ak je tento parameter definovaný, sa vo všetkých ostatných prípadoch použije jeho hodnota namiesto „vlastných“.

Uvediem príklad:

VYBERTE ZamestnancovSP.Zamestnanec, PracovníciSP.DôvodZmenyPodmienky, PracovníciSP.Obdobie, PracovníciSPĎalšíDátum.Obdobie AS Obdobie2, PracovníciSPĎalšíDátum.DôvodZmenyStaty AKO DôvodZmenyStav2 Z RegistraInformácie.Zamestnanci&NajčastejšieOrganizácieE JV ĽAVÉ PRIPOJENIE Register informácií.Zamestnanci organizácií.Časť najnovšieho(&InýDátum ,) AS ZamestnanciSPInýDátum PODĽA ZamestnancovSP.Zamestnanec = ZamestnanciSPAnotherDate.Employee

V druhom poddotaze sa ako parameter dátumu časti použije hodnota „štandardného“ parametra PERIOD, a nie hodnota OtherDate.

Táto „závada“ bude pozorovaná aj vtedy, ak sa druhý poddotaz odošle do druhého súboru údajov a prepojí sa pomocou ACS. Možnosť používajúca v druhej požiadavke výraz ako „ADDATE(&Obdobie, MESIAC, -1)“ tiež nebude fungovať, mesiac sa neodpočíta. Tento problém však rieši premenovanie parametra „Period“ v požiadavke napríklad na „FirstDate“.

Mimochodom, presne ten istý problém je pozorovaný pri virtuálnych tabuľkách akumulačných a účtovných registrov, ktoré sa používajú napríklad na získanie obratu. Tam systém pridá parametre „Start of Period“ a „End of Period“.
Takže v prípade požiadaviek čo i len mierne zvýšenej zložitosti má zmysel vypnúť dostupnosť a používanie „štandardných období“.

Niektoré funkcie nastavenia obdobia v systéme kontroly prístupu.

Väčšina zostáv, ktoré sú vyvinuté pomocou systému skladania údajov (DCS), vyžaduje, aby používateľ zadal obdobie, pre ktoré bude zostava zostavená.

Spravidla je v ACS zadávanie období organizované pomocou parametrov s použitím nasledujúcej konštrukcie, pozri Tento spôsob zadávania obdobia sa považuje za „klasický“, je popísaný v článku o ITS a inej literatúre venovanej vývoju v 1C, takže berme to ako základ. Uvažujme ako príklad jednoduchú požiadavku, ktorá dostane všetky doklady Predaj tovaru a služieb za dané obdobie, viď

Pri použití tohto prehľadu užívateľ nastavuje obdobie cez parametre, viď. Všetko sa zdá byť v poriadku..., ALE je tu malý problém:

Ide o to, že prevažná väčšina používateľov „chápe“ obdobie inak, ako ho „chápe“ 1C, príklady:

Z pohľadu používateľa obdobie nie je určené, teda NEOBMEDZENÉ, to znamená, že do prehľadu by mali byť zahrnuté VŠETKY doklady bez obmedzenia dátumu.

„Z pohľadu“ systému 1C je nastavený parameter-obdobie a ... obe jeho hranice sa rovnajú 01.01.0001 a do výkazu budú zahrnuté len doklady s prázdnym dátumom, čo v praxi znamená nebude zahrnutý ani jeden dokument.

Z pohľadu užívateľa by mala zostava obsahovať všetky doklady počnúc dátumom 28.01.2010.

„Z pohľadu“ 1C spôsobí výnimku obdobie 28. 1. 2010 - 1. 1. 0001.

Môžete sa, samozrejme, pokúsiť vysvetliť používateľovi, prečo správa nezobrazuje dokumenty, ktoré očakáva, že uvidí a ako je obdobie prezentované z „pohľadu“ 1C, ale je to nevďačná úloha a je tiež nesprávne. Dobrý program by mal byť v prvom rade užívateľsky prívetivý, pretože program existuje pre používateľa a nie naopak, preto budete musieť „naučiť“ 1C, aby pochopil obdobie, ako ho chápe používateľ, a to:

1). Začiatok obdobia a Koniec obdobia nie sú určené -> všetky doklady.

2). Zadaný je len Začiatok obdobia -> všetky doklady začínajúce od Začiatku obdobia

3). Okrem toho skontrolujeme, že End of Period >= Beginning of Period a ak to nie je pravda, tak budeme predpokladať, že End of Period nie je špecifikovaný, t.j. 2).

Na základe vyššie uvedeného je výraz pre parameter Dátum ukončenia:

WHEN &Period.EndDate=DATETIME(1;1;1)

POTOM DATETIME(3999;12;31)

KEDY &Period.Dátum ukončenia<&Период.ДатаНачала

POTOM DATETIME(3999;12;31) DATETIME(3999;12;31;23;59;59)

&Period.Dátum ukončenia

Konečná podoba nášho dizajnu dobového výberu je zobrazená v

Poznámka: Tento mechanizmus nastavenia parametrov je určený pre staršie platformy 1C 8.1 a 8.2 (a konfigurácie bežiace pod ich kontrolou); staršie verzie platformy 1C majú zabudované mechanizmy na ovládanie prázdnych parametrov a nie je potrebné sa uchýliť k mechanizmu popísané v tomto článku, navyše Na niektorých verziách platformy 1C sú možné chyby a nesprávne fungovanie.

Pri vytváraní výkazov v systéme kontroly prístupu je často potrebné zobraziť výber obdobia na formulári výkazu, takže dátumy nemusíte zadávať ručne, ale vyberte si zo zoznamu štandardných období, ako napríklad: „Rok“ , „Mesiac“, „Týždeň“ atď. Pre parametre typu Dátum môžete zadať iba „Začiatok tohto roka, mesiac atď.“, ale „Koniec“ nie je k dispozícii.

Ide o to, že z typov údajov je k dispozícii iba typ „Štandardný dátum začiatku“, ale chcem aj „Štandardný dátum ukončenia“.

Existuje spôsob, ako to obísť.

  1. Vytvorme nový parameter, nazvime ho „Obdobie“
  2. Nastavte tento parameter na typ „Štandardné obdobie“
  3. V poli „Výraz“ parametrov „Začiatok obdobia“ a „Koniec obdobia“, ktoré sa používajú v požiadavke, nastavte výrazy „ &Period.StartDate" a " &Period.End Date“.

Je tu však mierna jemnosť. Ak v dotaze použijeme virtuálne tabuľky, potom s najväčšou pravdepodobnosťou prestane fungovať zostava a zobrazí sa chybové hlásenie ako „Chyba pri spracovaní zobrazenia, nesúlad typu, číslo parametra...“.

Aby ste tomu zabránili, musíte odstrániť všetky parametre virtuálnej tabuľky.

A pridajte ich do tabuliek na karte „Zloženie údajov“.

Aby sa parametre zobrazovali v nastaveniach rýchlej zostavy, povoľme príslušný príznak pre parametre zostavy.

Výber obdobia vo formulári prehľadu teraz vyzerá takto.

Tento článok sa zaoberá niektorými funkciami nastavenia obdobia pri používaní systému skladania údajov (DCS), problémami, ktoré vznikajú v dôsledku rozdielov v koncepcii obdobia medzi bežným používateľom a systémom 1C, a tiež navrhuje spôsoby, ako ich vyriešiť. .
Väčšina zostáv, ktoré sú vyvinuté pomocou systému skladania údajov (DCS), vyžaduje, aby používateľ zadal obdobie, pre ktoré bude zostava zostavená. Spravidla je v ACS zadávanie období organizované cez parametre s použitím nasledujúcej konštrukcie, viď. Obr.1 Tento spôsob zadávania periódy sa považuje za „klasický“, je popísaný v článku o ITS a inej literatúre venovanej vývoju v 1C, berme ho teda ako základ. Uvažujme ako príklad jednoduchú požiadavku, ktorá dostane všetky doklady Predaj tovaru a služieb za dané obdobie, viď Obr.2 Pri použití tohto prehľadu si užívateľ nastavuje obdobie cez parametre, viď. Obr.3 Všetko sa zdá byť v poriadku... ALE je tu malý problém:

Ide o to, že prevažná väčšina používateľov „chápe“ obdobie inak, ako ho „chápe“ 1C, príklady:
1). Uvažujme Obr.3
Z pohľadu používateľa obdobie nie je určené, teda NEOBMEDZENÉ, to znamená, že do prehľadu by mali byť zahrnuté VŠETKY doklady bez obmedzenia dátumu.
„Z pohľadu“ systému 1C je nastavený parameter-obdobie a ... obe jeho hranice sa rovnajú 01.01.0001 a do výkazu budú zahrnuté len doklady s prázdnym dátumom, čo v praxi znamená nebude zahrnutý ani jeden dokument.
2). Uvažujme Obr.4
Z pohľadu užívateľa by mala zostava obsahovať všetky doklady počnúc dátumom 28.01.2010.
„Z pohľadu“ 1C spôsobí výnimku obdobie 28. 1. 2010 – 1. 1. 0001.

Môžete sa, samozrejme, pokúsiť vysvetliť používateľovi, prečo správa nezobrazuje dokumenty, ktoré očakáva, že uvidí a ako je obdobie prezentované z „pohľadu“ 1C, ale je to nevďačná úloha a je tiež nesprávne. Dobrý program by mal byť v prvom rade užívateľsky prívetivý, pretože program existuje pre používateľa a nie naopak, preto budete musieť „naučiť“ 1C, aby pochopil obdobie, ako ho chápe používateľ, a to:
1). Začiatok obdobia a Koniec obdobia nie sú určené -> všetky doklady.
2). Uvádza sa len Začiatok obdobia –> všetky doklady začínajúce od Začiatku obdobia
3). Okrem toho skontrolujeme, že End of Period >= Beginning of Period a ak to nie je pravda, tak budeme predpokladať, že End of Period nie je špecifikovaný, t.j. 2).
Na základe vyššie uvedeného bude výraz pre parameter Dátum ukončenia vyzerať 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) ИНАЧЕ &Период.ДатаОкончания КОНЕЦ КОНЕЦ

Konečná podoba nášho dizajnu dobového výberu je zobrazená v Obr.5

Takže, začnime.

Pre jednoduchosť, pochopenie príkladu, budeme stavať na jednom jednoduchom cirkulačnom akumulačnom registri.

V mojom prípade ide o register akumulácie „Rozpracované účtovníctvo“.

Napríklad označíme jeho parametre pevne (nie mäkkým ukladaním parametrov na systém kontroly prístupu):

Upozorňujeme, že frekvencia virtuálneho stola je „Záznam“.

Ale, ako je uvedené vyššie, potrebujeme obdobie z hľadiska periodicity, preto navrhujem vypočítať pole „Obdobie“ nasledujúcim spôsobom (nie veľmi pekné, ale nevidel som žiadne lepšie možnosti):

Ako je vidieť zo snímky obrazovky, do požiadavky sa odovzdá parameter, ktorý používateľ zadá vo formulári: Hodnota enumerácie "Frekvencia" - tento enumerácia sa nachádza takmer vo všetkých štandardných riešeniach.

Jeho dostupné typy uvedieme na karte „Parametre“:

S týmto nastavením naformátujeme naše obdobie tak, aby bolo všetko krásne a lahodilo oku)

Tu sú samotné formáty:

Mesiac: DF="MMMM yyyy "y.""

Deň: DF = dd.MM.yyyy

Týždeň: DF = ""Týždeň od "dd.MM.yyyy"

Štvrťrok: DF = "na "štvrťrok" yyyy "y.""

Rok: DF = "yyyy "y."

Dekáda: DF = ""Dekáda s "dd.MM.yyyy"

Polrok: DF = ""Polrok od" dd.MM.yyyy"

To je všetko. Výstupom je nádherný obrázok: