itthon / Windows Leckék / 1s uv standard választás időszaki négyzet. Standard paraméter &Időszak és használati problémák

1s uv standard választás időszaki négyzet. Standard paraméter &Időszak és használati problémák

A beléptető rendszerről szóló jelentések készítésekor gyakran kell időszakválasztást megjeleníteni a jelentés űrlapon, így nem kell manuálisan megadni a dátumokat, hanem listából kell kiválasztani. szabványos időszakok, mint például: „Év”, „Hónap”, „Hét” stb. A Dátum típusú paramétereknél csak „Ez év eleje, hónap stb.” adható meg, de a „Vége” nincs megadva.

A helyzet az, hogy az adattípusok közül csak a „Normál kezdő dátum” típus érhető el, de szeretnék a „Szabványos befejezési dátumot” is.

Van mód ennek megkerülésére.

  1. Hozzunk létre egy új paramétert, nevezzük „időszaknak”
  2. Állítsa ezt a paramétert a „Szabványos időszak” típusra.
  3. A kérelemben használt „Időszak kezdete” és „Időszak vége” paraméterek „Kifejezés” mezőjében állítsa be a „ &Period.StartDate" és " &Period.End Date” sorrendben.

De van egy kis finomság. Ha virtuális táblákat használunk a lekérdezésben, akkor nagy valószínűséggel a jelentés leáll, és egy hibaüzenet jelenik meg, például „Hiba a nézet feldolgozása során, típushiba, paraméterszám...”.

Ennek elkerülése érdekében el kell távolítania az összes virtuális tábla paramétert.

És adja hozzá őket az „Adatösszetétel” lap táblázataihoz.

Annak érdekében, hogy a paraméterek megjelenjenek gyors beállítások jelentést, engedélyezze a megfelelő jelzőt a jelentés paramétereihez.

Most így néz ki az időszak kiválasztása a jelentés űrlapon.

Hozzunk létre egy jelentést egyetlen lekérdezési adatkészlettel:

TERMÉKEK KIVÁLASZTÁSA A RAKTÁROKBAN Maradt. Raktár, ÁrukRaktárokban Maradványok. Nómenklatúra, Raktárban maradt termékek. Mennyiségegyenleg a felhalmozási nyilvántartásból. TermékekRaktárokban. Maradványok (&MyDate,) AS TermékekRaktárokban Maradványok

Most menjünk a paraméterek lapra, és nézzük meg, hogy a rendszer a &Saját dátum paraméterünkön kívül létrehozta a &Period paramétert is.
Az időszakok vizuális követése érdekében létrehozunk egy fő jelentési űrlapot, és elhelyezünk egy táblázat mezőt az adatokkal: Beállítások Composer.Settings.DataParameters

Mentsük el a jelentést és nyissuk meg a vállalatban. A paramétereket tartalmazó táblázat mezőben csak az &Időszak paraméter jelenik meg:

Ennek megfelelően ezen paraméter bármilyen változtatása nem hozza meg a kívánt eredményt.

Miért nem érhető el a &MyDate paraméter? Természetesen, mert a paraméterek fülön van egy jelölőnégyzet bejelölve Elérhetőségi korlátozás.

Törölje a jelölőnégyzet jelölését. Most elérhető paraméterek mindkettőt látjuk. Csak a jelentés létrehozásakor fogjuk látni, hogy a jelentés a &Időszak paraméterre reagál, és nem a &Saját dátumra.

BAN BEN ebben a példában A legegyszerűbb módja annak, hogy a kérésben szereplő &Saját dátum paramétert átnevezze &Periodra, és elérje a kívánt eredményt. De lehet, hogy van olyan lekérdezése, amelyben a &Period paramétert már használták, vagy a vallási nézetei nem teszik lehetővé ennek a paraméternek a használatát, mindenesetre a következőképpen oldhatja meg a problémát:

TERMÉKEK KIVÁLASZTÁSA A RAKTÁROKBAN Maradt. Raktár, ÁrukRaktárokban Maradványok. Nómenklatúra, Raktárban maradt termékek. Mennyiségegyenleg a felhalmozási nyilvántartásból. TermékekRaktárokban. Maradványok((&SajátDátum) ,) AS TermékekRaktárokban Maradványok

UPD a felhasználótól Lehurrogás:

A „standard” (rendszerhez hozzáadott) paraméterek használatakor a fő probléma az, hogy több virtuális tábla használatakor egy jelentésben, ha ez a paraméter definiálva van, akkor minden más esetben ennek értéke kerül felhasználásra a „saját” helyett.

Hadd mondjak egy példát:

SELECT EmployeesSP.Employee, WorkersSP.ReasonChangesConditions, WorkersSP.Period, WorkersSPAnotherDate.Period AS Period2, WorkersSPAnotherDate.ReasonChangesStates AS ReasonChangesCondition2 FROM RegisterInformation.EmployeesOrganizations(SliceOrganizations) AS WorkersSP BAL KAPCSOLAT Információk nyilvántartása.Szervezetek alkalmazottai.Slice of the Latest(&OtherDate ,) AS EmployeesSPAotherDate BY EmployeesSP.Employee = EmployeesSPANOtherDate.Employee

A második allekérdezésben a „standard” PERIOD paraméter értéke lesz a szelet dátuma paraméter, nem pedig az OtherDate érték.

Ez a „hiba” akkor is megfigyelhető, ha a második részlekérdezést a második adatkészlethez adják ki, és az ACS segítségével összekapcsolják. A második kérésben az „ADDATE(&Időszak, HÓNAP, -1)” kifejezést használó opció szintén nem működik, a hónap nem kerül kivonásra. De a „Period” paraméter átnevezése a kérelemben például „FirstDate”-re megoldja ezt a problémát.

Egyébként pontosan ugyanez a probléma figyelhető meg a felhalmozási és számviteli regiszterek virtuális tábláinál, amelyek például a forgalom megállapítására szolgálnak. Itt a rendszer hozzáadja a „Period kezdete” és „Időszak vége” paramétereket.
Tehát a még kissé megnövekedett összetettségű kérések esetén is célszerű kikapcsolni a rendelkezésre állást és a „standard időszakok” használatát.

Az időszak beállításának néhány jellemzője a beléptető rendszerben.

A legtöbb adatösszeállítási rendszer (DCS) használatával készült jelentés megköveteli a felhasználótól, hogy adja meg azt az időszakot, amelyre a jelentés készül.

Általános szabály, hogy az ACS-ben a periódusbevitelt paramétereken keresztül szervezik, a következő konstrukció segítségével, lásd: Ez az időszakbeviteli módszer „klasszikusnak” tekinthető; le van írva az ITS-ről szóló cikkben és más, az 1C fejlesztéssel foglalkozó irodalomban, így vegyük alapul. Tekintsünk példának egy egyszerű kérést, amely megkapja az összes Áruértékesítés és szolgáltatás dokumentumát meghatározott időszak cm.

A jelentés használatakor a felhasználó beállítja az időszakot a paramétereken keresztül, lásd. Úgy tűnik, minden rendben van... DE van egy kis probléma:

A helyzet az, hogy a felhasználók túlnyomó többsége másként „érti” az időszakot, mint az 1C „érti”, példák:

A felhasználó szemszögéből nézve az időszak nincs megadva, azaz KORLÁTOZTALAN, azaz MINDEN dátumkorlátozás nélküli dokumentum szerepeljen a jelentésben.

Az 1C rendszer „szempontjából” a paraméter-periódus be van állítva, és ... mindkét határa 01.01.0001, és csak az üres dátummal rendelkező dokumentumok kerülnek be a jelentésbe, ami a gyakorlatban azt jelenti, hogy egyetlen dokumentum sem kerül bele.

A felhasználó szempontjából a jelentésnek tartalmaznia kell minden dokumentumot a 2010.01.28-tól kezdődően.

Az 1C „szempontjából” a 2010.01.28. - 0001.01.01. időszak jelent kivételt.

Természetesen megpróbálhatja elmagyarázni a felhasználónak, hogy a jelentés miért nem azokat a dokumentumokat jeleníti meg, amelyeket látni szeretne, és hogyan jelenik meg az időszak az 1C „szempontjából”, de ez egy hálátlan feladat, és szintén téves. Jó program mindenekelőtt kényelmesnek kell lennie a felhasználó számára, mert a program a felhasználó számára létezik, és nem fordítva, ezért meg kell „tanítani” az 1C-t, hogy megértse az időszakot, ahogyan a felhasználó megérti, nevezetesen:

1). Az időszak kezdete és az időszak vége nincs megadva -> minden dokumentum.

2). Csak az Időszak eleje van megadva -> az Időszak elejétől kezdődő összes dokumentum

3). Ezenkívül ellenőrizni fogjuk, hogy az Időszak vége >= Időszak eleje, és ha ez nem igaz, akkor feltételezzük, hogy az Időszak vége nincs megadva, azaz. 2).

A fentiek alapján a Befejezés dátuma paraméter kifejezése a következő:

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

AKKOR DATETIME(3999;12;31)

MIKOR &Időszak.Befejező dátum<&Период.ДатаНачала

AKKOR DATETIME(3999;12;31) DATETIME(3999;12;31;23;59,59)

&Period.Befejezés dátuma

Korabeli válogatásunk végleges formája a képen látható

Megjegyzés: ez a paraméter beállítási mechanizmus a régebbi 1C 8.1 és 8.2 platformokhoz (és az ezek irányítása alatt futó konfigurációkhoz) készült; az 1C platform régebbi verziói beépített mechanizmusokkal rendelkeznek az üres paraméterek vezérlésére, és nincs szükség a mechanizmus igénybevételére A cikkben leírtak szerint az 1C platform egyes verzióiban hibák és helytelen működés lehetséges.

Szóval, kezdjük.

Az egyszerűség kedvéért a példa megértése érdekében egyetlen egyszerű, keringő felhalmozási regiszterre építünk.

Az én esetemben ez a "Folyamatban lévő könyvelés" felhalmozási nyilvántartás.

Például a paramétereit mereven fogjuk jelezni (nem a paraméterek lágy rákényszerítésével a beléptető rendszerre):

Kérjük, vegye figyelembe, hogy a virtuális tábla gyakorisága „Rekord”.

De, mint fentebb megjegyeztük, szükségünk van az időszakra a periodicitás szempontjából, ezért javaslom az „Időszak” mező kiszámítását a következő módon (nem túl szép, de nem láttam jobb lehetőséget):

Amint a képernyőképen látható, egy paramétert adnak át a kérésnek, amelyet a felhasználó az űrlapon ad meg: A "Frekvencia" felsorolás értéke - ez a felsorolás szinte minden szabványos megoldásban megtalálható.

Az elérhető típusokat a „Paraméterek” fülön jelezzük:

Ezzel a beállítással úgy formázzuk az időszakunkat, hogy minden szép és kellemes legyen a szemnek)

Itt vannak maguk a formátumok:

Hónap: DF="MMMM yyyy "y."

Nap: DF = nn.MM.yyyy

Hét: DF = ""Hét a következőtől: "nn.MM.yyyy"

Negyed: DF = "negyed" yyyy "y."

Év: DF = "yyyy "y."

Évtized: DF = "" Évtized a következővel: "nn.MM.yyyy"

Félév: DF = ""Fél év a következőtől:" nn.MM.yyyy"

Ez minden. A kimenet egy csodálatos kép:

Ez a cikk bemutatja az időszak beállításának néhány jellemzőjét adatkompozíciós rendszer (DCS) használatakor, olyan problémákat, amelyek a hétköznapi felhasználó és az 1C rendszer közötti időszak fogalmának különbségei miatt merülnek fel, és javaslatokat tesz ezek megoldására. .
A legtöbb adatösszeállítási rendszer (DCS) használatával készült jelentés megköveteli a felhasználótól, hogy adja meg azt az időszakot, amelyre a jelentés készül. Általános szabály, hogy az ACS-ben a periódusbevitelt paramétereken keresztül szervezzük, a következő konstrukció segítségével, lásd. 1. ábra A periódus megadásának ez a módszere „klasszikusnak” tekinthető; az ITS-ről szóló cikkben és más, az 1C fejlesztéssel foglalkozó irodalomban le van írva, tehát vegyük alapul. Tekintsünk példának egy egyszerű kérést, amely megkapja az összes dokumentumot Áruk és szolgáltatások értékesítése egy adott időszakra vonatkozóan, ld. 2. ábra A jelentés használatakor a felhasználó a paramétereken keresztül állítja be az időszakot, lásd. 3. ábraÚgy tűnik, minden rendben van... DE van egy kis probléma:

A helyzet az, hogy a felhasználók túlnyomó többsége másként „érti” az időszakot, mint az 1C „érti”, példák:
1). Mérlegeljük 3. ábra
A felhasználó szemszögéből nézve az időszak nincs megadva, azaz KORLÁTOZTALAN, azaz MINDEN dátumkorlátozás nélküli dokumentum szerepeljen a jelentésben.
Az 1C rendszer „szempontjából” a paraméter-periódus be van állítva, és ... mindkét határa 01.01.0001, és csak az üres dátummal rendelkező dokumentumok kerülnek be a jelentésbe, ami a gyakorlatban azt jelenti, hogy egyetlen dokumentum sem kerül bele.
2). Mérlegeljük 4. ábra
A felhasználó szempontjából a jelentésnek tartalmaznia kell minden dokumentumot a 2010.01.28-tól kezdődően.
Az 1C „szempontjából” a 2010.01.28. – 0001.01.01. időszak jelent kivételt.

Természetesen megpróbálhatja elmagyarázni a felhasználónak, hogy a jelentés miért nem azokat a dokumentumokat jeleníti meg, amelyeket látni szeretne, és hogyan jelenik meg az időszak az 1C „szempontjából”, de ez egy hálátlan feladat, és szintén rossz. Egy jó programnak mindenekelőtt felhasználóbarátnak kell lennie, mert a program a felhasználó számára létezik, és nem fordítva, ezért meg kell „tanítania” az 1C-t, hogy megértse az időszakot, ahogyan a felhasználó megérti, nevezetesen:
1). Az időszak kezdete és az időszak vége nincs megadva -> minden dokumentum.
2). Csak az Időszak eleje van megadva –> az Időszak elejétől kezdődő összes dokumentum
3). Ezenkívül ellenőrizni fogjuk, hogy az Időszak vége >= Időszak eleje, és ha ez nem igaz, akkor feltételezzük, hogy az Időszak vége nincs megadva, azaz. 2).
A fentiek alapján a Befejezés dátuma paraméter kifejezése így fog kinézni:

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) ИНАЧЕ &Период.ДатаОкончания КОНЕЦ КОНЕЦ

Korabeli válogatásunk végleges formája a képen látható 5. ábra