itthon / Internet / Standard paraméter &Időszak és használati problémák. Adott gyakorisággal készítünk jelentést az skd-n 1s egy jelentést az skd-ben, hogyan állítsunk be egy időszakot

Standard paraméter &Időszak és használati problémák. Adott gyakorisággal készítünk jelentést az skd-n 1s egy jelentést az skd-ben, hogyan állítsunk be egy időszakot

Az ACS-re vonatkozó jelentések készítésekor gyakran szükségessé válik az időszak választásának megjelenítése a jelentési űrlapon, sőt, hogy a dátumokat ne kézzel kelljen kitölteni, hanem a 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 az "Év eleje, hónap stb." adható meg, de a "Vége" nincs megadva.

Az a tény, 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átum” típust 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 "Normál időszak" típusúra
  3. A lekérdezésben használt "StartPeriod" és "EndPeriod" paraméterek "Expression" mezőjében állítsa be a " kifejezéseket &Period.StartDate" és " &Period.EndDate" 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 "Feldolgozási hiba megtekintése, típushiba, paraméterszám ...".

Ennek elkerülése érdekében el kell távolítania a virtuális táblák összes paraméterét.

És adja hozzá őket a táblázatokhoz az Adatösszetétel lapon.

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.

Szóval, kezdjük.

Az egyszerűség kedvéért a példa megértése érdekében egyetlen egyszerű fordított halmozási regiszterre építünk.

Esetemben ez a "Folyamatban lévő munka elszámolása" felhalmozási nyilvántartás.

Például a paramétereit mereven fogjuk megadni (nem a paraméterek lágy rákényszerítésével az ACS-re):

Vegye figyelembe, hogy a frekvencia virtuális asztal- "Rekord".

De amint fentebb megjegyeztük, szükségünk van a periódusra a periodicitás összefüggésében, ezért javaslom az "Időszak" mező kiszámítását a következő módon (nem túl szép, de jobb lehetőségeket Nem láttam):

Amint az 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 "Periodikus" felsorolás értéke - ez a felsorolás szinte minden szabványos megoldásban elérhető.

Rendelkezésre álló típusai a "Paraméterek" fülön láthatók:

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

Itt vannak a tényleges 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 óta" nn.MM.yyyy "

Fél év: DF = "" Fél év óta" nn.hh.yyyy"

Ez minden. Ennek eredményeként egy csodálatos képünk van:

Ez a cikk tárgyalja az adatösszetevő rendszer (ACS) használatakor az időszak beállításának néhány jellemzőjét, azokat a problémákat, amelyek az átlagos felhasználó és az 1C rendszer közötti időszak fogalmának különbségéből adódnak, és javaslatokat tesz ezek megoldására. .
Az adatösszeállítási rendszer (DCS) használatával készített jelentések többsége megköveteli a felhasználótól, hogy adja meg azt az időszakot, amelyre vonatkozóan a jelentés készül. Általános szabály, hogy az ACS-ben a periódusbevitelt paraméterek segítségével szervezzük, a következő konstrukció segítségével, lásd az ábrát. 1. ábra Az időszak megadásának ez a módszere „klasszikusnak” tekinthető, az ITS-ről szóló cikkben és az 1C fejlesztéssel kapcsolatos egyéb szakirodalomban le van írva, ezért ezt fogjuk alapul venni. Tekintsünk példának egy egyszerű lekérdezést, amely lekéri az összes áru/szolgáltatás értékesítési bizonylatot egy adott időszakra vonatkozóan (lásd az ábrát). 2. ábra A jelentés használatakor a felhasználó beállítja az időszakot a paramétereken keresztül, 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). Fontolgat 3. ábra
A felhasználó szempontjából az időszak nincs beállítva, azaz NINCS KORLÁTOZOTT, vagyis MINDEN dátumhatár nélküli dokumentumot be kell vonni a jelentésbe.
Az 1C rendszer „szempontjából” a paraméter-periódus be van állítva, és ... mindkét határa 01.01.
2). Fontolgat 4. ábra
A felhasználó szemszögéből a 2010.01.28-i dátumtól kezdődő összes dokumentumot szerepeltetni kell a jelentésben.
A "szempontból" 1C időszak 2010.01.28. és 0001.01.01. között kivételt jelent.

Természetesen megpróbálhatja elmagyarázni a felhasználónak, hogy a jelentés miért nem jeleníti meg azokat a dokumentumokat, amelyeket látni szeretne, és hogyan jelenik meg az időszak az 1C „szempontjából”, de ez egy hálátlan feladat, és téves. Jó program mindenekelőtt kényelmesnek kell lennie a felhasználó számára, mert a program létezik a felhasználó számára, é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). StartPeriod és EndPeriod nincs beállítva -> minden dokumentum.
2). Csak a StartPeriod van beállítva –> a StartPeriodtól kezdődő összes dokumentum
3). Ezenkívül ellenőrizzük, hogy az Időszak vége >= Az Időszak kezdete, és ha ez nem igaz, akkor feltételezzük, hogy az Időszak vége nincs beállítva, azaz. 2).
A fentiek alapján az EndDate 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) ИНАЧЕ &Период.ДатаОкончания КОНЕЦ КОНЕЦ

A korszakválasztási tervünk végső nézete a következőben látható 5. ábra

Az időszak beállításának néhány jellemzője az ACS-ben.

Az adatösszeállítási rendszer (DCS) használatával készített jelentések többsége megköveteli a felhasználótól, hogy adja meg azt az időszakot, amelyre vonatkozóan a jelentés készül.

Általános szabály, hogy az ACS-ben az időszak bevitele paramétereken keresztül van megszervezve, a következő konstrukció segítségével, lásd. A periódus megadásának ez a módszere „klasszikusnak” tekinthető, le van írva az ITS-ről szóló cikkben és az 1C fejlesztésével kapcsolatos egyéb szakirodalomban, hát vegyük alapul. Tekintsünk példának egy egyszerű lekérdezést, amely lekéri az összes áru/szolgáltatás értékesítési bizonylatot egy adott időszakra vonatkozóan (lásd az ábrát).

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ó szempontjából az időszak nincs beállítva, azaz NINCS KORLÁTOZOTT, vagyis MINDEN dátumhatár nélküli dokumentumot be kell vonni a jelentésbe.

Az 1C rendszer „szempontjából” a paraméter-periódus be van állítva, és ... mindkét határa 01.01.

A felhasználó szemszögéből a 2010.01.28-i dátumtól kezdődő összes dokumentumot szerepeltetni kell a jelentésben.

A "szempontból" 1C időszak 2010.01.28. és 0001.01.01. között kivételt jelent.

Természetesen megpróbálhatja elmagyarázni a felhasználónak, hogy a jelentés miért nem jeleníti meg azokat a dokumentumokat, amelyeket látni szeretne, és hogyan jelenik meg az időszak az 1C "szempontjából", de ez hálátlan feladat, és téves. A jó programnak mindenekelőtt kényelmesnek kell lennie a felhasználó számára, mert a program létezik a felhasználó számára, é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). StartPeriod és EndPeriod nincs beállítva -> minden dokumentum.

2). Csak a StartPeriod van beállítva -> az összes dokumentum a StartPeriodtól kezdve

3). Ezenkívül ellenőrizzük, hogy az Időszak vége >= Az Időszak kezdete, és ha ez nem igaz, akkor feltételezzük, hogy az Időszak vége nincs beállítva, azaz. 2).

A fentiek alapján az EndDate paraméter kifejezése a következő:

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

AKKOR DATETIME(3999;12;31)

WHEN &Period.EndDate<&Период.ДатаНачала

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

&Period.EndDate

A korszakválasztási tervünk végső nézete a következőben látható

Megjegyzés: ez a paraméterbeállító mechanizmus a régi 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 a kitöltetlen paraméterek vezérlésére, és nincs szükség a leírt mechanizmusra. ebben a cikkben az 1C platform egyes verziói mellett hibák és helytelen munka is lehetséges.

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

KIVÁLASZTÁS A Raktárban lévő áruk maradványai. Raktár, Áru Raktárban Maradványok. Nómenklatúra, áruk Raktárban Maradványok. Mennyiségegyenleg a felhalmozási nyilvántartásból. áruk a raktárakban. Maradványok(&SajátDátum ,) AS ÁrukA Raktárban Maradványok

Most menjünk a paraméterek fülre, és nézzük meg, hogy a rendszer a &MyDate paraméterünkön kívül létrehozta a &Period paramétert is.
Az időszakok vizuális megfigyelése érdekében hozzuk létre a fő jelentési űrlapot, és helyezzünk el egy táblázat mezőt az adatokkal: BeállításokComposer.Settings.DataParameters

Mentse el a jelentést, és nyissa 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? Természetesen, mert a paraméterek fülön van egy jelölőnégyzet Elérhetőségi korlátozás.

Eltávolítjuk a dawt. Most mindkettőt látjuk az elérhető paraméterekben. Csak a jelentés létrehozásakor fogjuk látni, hogy a jelentés az &Időszak paraméterre válaszol, és nem a &Saját dátumra.

Ebben a példában a legegyszerűbb, ha a lekérdezés &MyDate paraméterét átnevezi &Időpontra, és eléri a kívánt eredményt. De lehet, hogy van olyan kérése, amely már használta a &Period paramétert, vagy vallási meggyőződése nem teszi lehetővé ennek a paraméternek a használatát, mindenesetre a következőképpen oldhatja meg a problémát:

KIVÁLASZTÁS A Raktárban lévő áruk maradványai. Raktár, Áru Raktárban Maradványok. Nómenklatúra, áruk Raktárban Maradványok. Mennyiségegyenleg a felhalmozási nyilvántartásból. áruk a raktárakban. Maradványok((&SajátDátum) ,) AS ÁrukRaktárokban Maradványok

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

A "standard" (rendszer által hozzáadott) paraméterek használatakor a fő probléma az, hogy több virtuális tábla használatakor a 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.

Mondok egy példát:

SELECT EmployeesSP.Employee, EmployeesSP.ReasonChangeState, EmployeesSP.Period, EmployeesSPOtherDate.Period AS Period2, EmployeesSPOtherDate.ReasonChangeState AS Indokolás alkalmazott) AS WorkersSP BAL CSATLAKOZÁS Információk nyilvántartása.Szervezetek alkalmazottai.Az Utolsó(&MásDátum ,) AS alkalmazottakSPOtherDate szelet BY EmployeesSP.Employee = EmployeesSPOtherDate.Employee

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

Ez a "hiba" akkor is megfigyelhető, ha a második részlekérdezés a második adatkészlethez kerül, és már az ACS segítségével összekapcsolva van. A második lekérdezésben az "ADDDATE(&Period, MONTH, -1)" kifejezést használó opció sem fog működni, a hónap nem lesz kivonva. De a "Period" paraméter átnevezése a lekérdezésben például "FirstDate"-re megoldja ezt a problémát.

Egyébként pontosan ugyanez a probléma figyelhető meg a virtuális felhalmozási táblákkal és a számviteli regiszterekkel, amelyeket például a forgalom mérésére használnak. Ott a rendszer hozzáadja a "StartPeriod" és "EndPeriod" paramétereket.
Tehát még egy kicsit összetettebb kérések esetén is célszerű kikapcsolni a "standard időszakok" elérhetőségét és használatát.