Standardni parametar &Period i problemi u upotrebi.

20.02.2024

Pa počnimo.

Radi jednostavnosti, razumijevajući primjer, gradit ćemo na jednom jednostavnom cirkulirajućem registru akumulacije.

U mom slučaju, ovo je registar akumulacije "Računovodstvo u toku".

Na primjer, rigidno ćemo naznačiti njegove parametre (ne mekim nametanjem parametara na sistem kontrole pristupa):

Imajte na umu da je frekvencija virtuelne tabele “Record”.

Ali, kao što je gore navedeno, potreban nam je period u smislu periodičnosti, pa predlažem da izračunamo polje „Period“ na sljedeći način (nije baš lijepo, ali nisam vidio bolje opcije):

Kao što se vidi sa snimka ekrana, zahtjevu se prosljeđuje parametar koji korisnik specificira na obrascu: Vrijednost nabrajanja "Frequency" - ova enumeracija se nalazi u gotovo svim standardnim rješenjima.

Na kartici "Parametri" naznačit ćemo njegove dostupne vrste:

Ovom postavkom oblikujemo svoj period tako da sve bude lijepo i oku ugodno)

Evo i samih formata:

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

Dan: DF = dd.MM.gggg

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

Četvrtina: DF = "do "četvrtine" yyyy "y.""

Godina: DF = "gggg "y."

Dekada: DF = ""Decenija sa "dd.MM.yyyy"

Polu godine: DF = ""Pola godine od" dd.MM.gggg"

To je sve. Izlaz je divna slika:

Kreirajmo izvještaj sa jednim skupom podataka upita:

ODABIR PROIZVODA U SKLADIŠTIMA Preostalo. Skladište, GoodsInWarehousesRemains. Nomenklatura, preostali proizvodi u skladištima. Stanje količine IZ registra akumulacije. ProductsInWarehouses. Remains(&MyDate ,) AS ProductsInWarehousesRemains

Sada idemo na karticu parametri i vidimo da je sistem, pored našeg parametra &MyDate, kreirao i parametar &Period.
Da bismo vizuelno pratili periode, kreiraćemo glavni obrazac izveštaja i na njega postaviti polje tabele sa podacima: Settings Composer.Settings.DataParameters

Sačuvajmo izveštaj i otvorimo ga u preduzeću. U polju tabele sa parametrima prikazuje se samo parametar &Period:

Shodno tome, bilo kakva promjena ovog parametra neće dati željeni rezultat.

Zašto parametar &MyDate nije dostupan? Naravno, jer na kartici parametara ima označen checkbox Ograničenje dostupnosti.

Poništite izbor u polju. Sada vidimo oba u dostupnim parametrima. Tek kada se generira izvještaj, vidjet ćemo da izvještaj reaguje na parametar &Period, a ne na &Moj datum.

U ovom primjeru, najjednostavnije je preimenovati parametar &MyDate u zahtjevu u &Period i postići željeni rezultat. Ali možda imate upit u kojem je već korišten parametar &Period, ili vam religijski stavovi ne dozvoljavaju korištenje ovog parametra, u svakom slučaju problem možete riješiti ovako:

ODABIR PROIZVODA U SKLADIŠTIMA Preostalo. Skladište, GoodsInWarehousesRemains. Nomenklatura, preostali proizvodi u skladištima. Stanje količine IZ registra akumulacije. ProductsInWarehouses. Remains((&MyDate) ,) AS ProductsInWarehousesRemains

UPD od korisnika Boo:

Glavni problem pri korištenju “standardnih” (sistemski dodatih) parametara je taj što će se prilikom korištenja više virtualnih tabela u izvještaju, ako je ovaj parametar definiran, u svim ostalim slučajevima umjesto “sopstvenih” koristiti njegova vrijednost.

Dozvolite mi da vam dam primjer:

SELECT EmployeesSP.Employee, WorkersSP.ReasonChangesState, WorkersSP.Period, WorkersSPAnotherDate.Period AS Period2, WorkersSPAnotherDate.ReasonChangesStates AS ReasonChangesState2 FROM RegisterInformation.EmployeesLaEmployee nikkiSP LIJEVA KONEKCIJA Registar informacija.Zaposleni u organizacijama.Odsječak najnovijeg (&OtherDate ,) AS EmployeesSPAnotherDate BY EmployeesSP.Employee = EmployeesSPAnotherDate.Employee

U drugom potupitu, vrijednost “standardnog” parametra PERIOD će se koristiti kao parametar datuma preseka, a ne vrijednost OtherDate.

Ovaj „propust“ će se primijetiti čak i ako se drugi potupit ispusti u drugi skup podataka i poveže pomoću ACS-a. Opcija koja u drugom zahtjevu koristi izraz kao što je “DODATI(&Period, MJESEC, -1)” također neće raditi, mjesec se neće oduzimati. Ali preimenovanje parametra “Period” u zahtjevu u, na primjer, “FirstDate” rješava ovaj problem.

Uzgred, potpuno isti problem se uočava i sa virtuelnim tabelama akumulacije i računovodstvenim registrima, koji se koriste za dobijanje, na primer, prometa. Tu sistem dodaje parametre “Početak perioda” i “Kraj perioda”.
Dakle, u slučaju zahtjeva čak i malo povećane složenosti, ima smisla isključiti dostupnost i korištenje „standardnih perioda“.

Neke karakteristike podešavanja perioda u sistemu kontrole pristupa.

Većina izvještaja koji se razvijaju korištenjem sistema za sastavljanje podataka (DCS) zahtijevaju od korisnika da unese period za koji će izvještaj biti napravljen.

Po pravilu, u ACS-u je unos perioda organizovan preko parametara, koristeći sljedeću konstrukciju, vidi ovaj način unosa perioda opisan je u članku o ITS-u i drugoj literaturi posvećenoj razvoju u 1C, dakle uzmimo to kao osnovu. Uzmimo kao primjer jednostavan zahtjev koji prima sve dokumente Prodaja roba i usluga za dati period, vidi

Prilikom korištenja ovog izvještaja, korisnik postavlja period kroz parametre, vidi se da je sve ispravno..., ALI postoji mali problem:

Stvar je u tome da velika većina korisnika "razumi" period drugačije nego što ga "razumi" 1C, primjeri:

Sa stanovišta korisnika, period nije preciziran, odnosno NEOGRANIČEN, odnosno SVI dokumenti bez ograničenja datuma trebaju biti uključeni u izvještaj.

„Sa tačke gledišta“ 1C sistema, parametar perioda je postavljen i ... obe njegove granice su jednake 01.01.0001 i samo dokumenti sa praznim datumom će biti uključeni u izveštaj, što u praksi znači ne jedan dokument će biti uključen.

Sa stanovišta korisnika, izvještaj treba da sadrži sve dokumente počev od 28.01.2010.

„Sa tačke gledišta“ 1C, period 28.01.2010 - 01.01.0001 će uzrokovati izuzetak.

Možete, naravno, pokušati objasniti korisniku zašto izvještaj ne prikazuje dokumente koje očekuje da vidi i kako je period predstavljen sa „ugla“ 1C, ali to je nezahvalan zadatak i je takođe pogrešno. Dobar program bi, prije svega, trebao biti prilagođen korisniku, jer program postoji za korisnika, a ne obrnuto, stoga ćete morati "naučiti" 1C da razumije period onako kako ga korisnik razumije, naime:

1). Početak perioda i kraj perioda nisu navedeni -> svi dokumenti.

2). Naveden je samo početak perioda -> svi dokumenti počevši od početka perioda

3). Osim toga, provjerit ćemo da li je kraj perioda >= početak perioda, a ako to nije tačno, onda ćemo pretpostaviti da kraj perioda nije naveden, tj. 2).

Na osnovu gore navedenog, izraz za parametar Krajnji datum je:

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

ONDA DATETIME(3999,12,31)

KADA &Period.Završni datum<&Период.ДатаНачала

ONDA DATETIME(3999,12,31) DATETIME(3999,12,31,23,59,59)

&Period.Završni datum

Konačni oblik našeg dizajna odabira perioda prikazan je u

Napomena: ovaj mehanizam za podešavanje parametara je namenjen starijim platformama 1C 8.1 i 8.2 (a konfiguracije koje rade pod njihovom kontrolom imaju ugrađene mehanizme za kontrolu praznih parametara i nema potrebe da se pribegava mehanizmu); opisano u ovom članku, osim toga, Na nekim verzijama 1C platforme moguće su greške i neispravan rad.