Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Windows telefon
  • 1s skd početni i konačni saldo. Greška u obračunu stanja u SKD-u i njegovoj softverskoj korekciji na primjeru univerzalnog izvještaja

1s skd početni i konačni saldo. Greška u obračunu stanja u SKD-u i njegovoj softverskoj korekciji na primjeru univerzalnog izvještaja

Ne znam koliko je ljudi već naišlo na grešku u obračunu početnog i krajnjeg stanja po grupama. Lično, imao sam "sreću", štaviše, više puta. Razlog, kako sam uspio otkriti, leži u pogrešnim postavkama polja podataka ACS-a, čije važnosti mnogi početnici (i ne baš) programeri još nisu u potpunosti svjesni.

Kada se SKD skup podataka kreira automatski na osnovu upita, obično nema problema, jer sama platforma ispravno popunjava postavke polja na osnovu teksta zahtjeva. Ali postoje situacije kada se postavke polja podataka ne popunjavaju automatski (na primjer, koristite vanjski izvor podataka), dok izvorni podaci sadrže kretanja sa stanjem i prometom.

Ako se ranije niste susreli s ovim problemom, onda za bolje razumijevanje njegove suštine predlažem da ga sami reproducirate pomoću univerzalnog izvještaja (po metapodacima). Pokrećemo izvještaj, izaberemo bilo koji neprazan registar akumulacije sa stanjem i prometom, uključimo potvrdni okvir "Detaljne evidencije" u postavkama izvještaja (), odredimo neke grupe i dodamo Registrar u prikazana polja. Voila - početni i konačni saldo se zbrajaju za svaku grupu. Ispada izvještaj sa apsolutno netačnim brojkama, koji se ni na koji način ne mogu prikazati korisnicima.

Za rješavanje ovog problema potrebno je ispravno popuniti postavke za polja ACS skupa podataka – posebno polje „Uloga“, koje je od ključnog značaja.

RJEŠENJE interaktivno ( nije pogodno za Univerzalni izvještaj):

Otvorite šemu rasporeda podataka vašeg izvještaja i pogledajte postavke polja skupa podataka.

Za polja početnih i konačnih stanja za svaki od resursa morate popuniti ulogu: odaberite grupu uloga "Ostatak" i u njoj navedite vrijednost "Početno stanje" ili "Krajnje stanje". pa ( ) ovo se radi u SKD konstruktoru.

Slično, morate postaviti ulogu "Dimenzija" za sve dimenzije vašeg skupa podataka.

Ali to nije dovoljno da izvještaji rade ispravno. Da biste ispravno izračunali zaostala polja, potrebno je znati period svakog kretanja kako biste ih rasporedili u ispravan hronološki red. Ako vaš izvorni izvor podataka nema polje za period, morate ga dodati tamo. Ako već postoji polje za period u skupu podataka, potrebno je da navedete ulogu "Period" i odgovarajući broj perioda (za više detalja o numerisanju perioda, pogledajte pomoć).

Ovakva podešavanja polja podataka ACS-a u većini slučajeva omogućavaju da se postigne ispravan proračun reziduala po grupama kada sa zadanim postavkama oni su pogrešno izračunati.

Softversko RJEŠENJE (na primjeru Univerzalnog izvještaja o metapodacima):

Sada da vidimo kako popraviti istu grešku u generičkom izvještaju o metapodacima. Univerzalni izvještaj se razlikuje od većine drugih izvještaja po tome što se shema sastava podataka generira potpuno programski, tako da također morate programski konfigurirati uloge za ACS polja podataka.

Za uloge početni i konačni bilans za svaki od resursa najlakši način je ne izmišljati točak (sve je već napisano prije nas) i koristiti standardnu ​​proceduru FillDataSetFieldRemainder() from zajednički modul GenericReports. Tu prosljeđujete polje skupa podataka i ime resursa kao parametre, a kao rezultat, polje ostatka s ispravno popunjenom ulogom se kreira u skupu podataka.

Slično tome, kada kreirate polja skupa podataka za dimenzije, morate im dati ulogu Dimension. Kod će biti otprilike ovako:

NewDimension = GenericReports.AddDataSetField(DataCompositionSchema.DataSets, Dimension.Name, Dimension.Synonim); NewDimension.Role.Dimension = true;

Gore opisane manipulacije sa resursnim i mjernim poljima su neophodne, ali nisu dovoljne za rješavanje problema - glavna nevolja univerzalnog izvještaja je nedostatak numeracije perioda. Polja za period su prisutna u skupu podataka, ali njihove uloge nisu popunjene.

Polja perioda se dodaju u izvještaj postupkom generičkog modula GenericReports.AddPeriodFieldsToDataSet(), koji se poziva iz procedure modula objekta AddDataSetFields(). Nažalost, ovaj postupak ne upisuje brojeve perioda.

Osim toga, polja "Broj linije" i "Registar" nigdje se programski ne dodaju izvještaju. Činilo mi se čudnim, jer. oni su prisutni u konačnom skupu podataka.

Kako se ispostavilo, polja "Broj linije" i "Matičar"(Recorder) se dodaje od strane same platforme automatski kada se inicijalizuje programer postavki. Štaviše, platforma ne ispunjava uloge za polja koja kreira, a nemoguće ih je popuniti programski, što stvara probleme pri daljem radu s njima. Ali ako su ova polja kreirana "ručno" i ispravne uloge su im programski dodijeljene, tada platforma ne pokušava ponovo da ih kreira.

U nastavku nudim recept koji mi je pomogao da gotovo u potpunosti riješim ovaj problem platforme i Univerzalnog izvještaja o metapodacima:

Evo isječka koda objektnog modula:

// Dodaj polja perioda If TableName = "RemaindersAnd Turnovers" OR TableName = "Turnovers" Then GenericReports.AddPeriodFieldsToDataSet(DataCompositionScheme.DataSets); EndIf; treba zamijeniti sa sljedećim: // Dodajte polja perioda If TableName = "RemaindersAnd Turnovers" OR TableName = "Turnovers" Then ListPeriods = GenericReports.AddPeriodFieldsToDataSet(DataCompositionScheme.DataSets); //Popunite servisna polja i ručno postavite periode, jer platforma ih ne ispunjava Polje = GenericReports.AddDataSetField(DataCompositionScheme.DataSets, "LineNumber", "LineNumber"); Field.Role.PeriodNumber = 1; Polje = GenericReports.AddDataSetField(DataCompositionSchema.DataSets, "Recorder", "Recorder"); Field.Role.PeriodNumber = 2; sc = 3; Za svaki FieldPeriodFromListPeriods petlja FieldPeriod.Value.Role.PeriodNumber = cn; Ako je count > 3 Tada FieldPeriod.Value.Role.PeriodType = DataCompositionPeriodType.Optional; EndIf; sc = sc + 1; EndCycle; EndIf;

Uspio sam pronaći jedno ograničenje vezano za ovo rješenje. Za tačan obračun i kon. rezidua, neophodno je da se prilikom korišćenja bilo kakvih detalja registratorskog dokumenta u izveštaju bira i sam registrator. Inače, univerzalni izvještaj nakon ovakvih poboljšanja više ne izaziva alergije kod korisnika.

AŽURIRANJE: Rečeno mi je u komentarima da je članak na ovu temu jednom objavljen na ITS disku. Nažalost, ovaj članak mi je prošao, ali mi je samo djelimično mogao pomoći u rješavanju problema sa univerzalnim izvještajem. Nažalost, problemi platforme sa ACS servisnim poljima, kao što je "Rekorder", takođe nisu opisani.

U svakom slučaju, nadam se da će moj članak pomoći svima onima koji imaju slične probleme. Proveo sam dosta vremena tražeći ovo rešenje...

Ne znam koliko je ljudi već naišlo na grešku u obračunu početnog i krajnjeg stanja po grupama. Lično, imao sam "sreću", štaviše, više puta. Razlog, kako sam uspio otkriti, leži u pogrešnim postavkama polja podataka ACS-a, čije važnosti mnogi početnici (i ne baš) programeri još nisu u potpunosti svjesni.

Kada se SKD skup podataka kreira automatski na osnovu upita, obično nema problema, jer sama platforma ispravno popunjava postavke polja na osnovu teksta zahtjeva. Ali postoje situacije kada se postavke polja podataka ne popunjavaju automatski (na primjer, koristite vanjski izvor podataka), dok izvorni podaci sadrže kretanja sa stanjem i prometom.

Ako se ranije niste susreli s ovim problemom, onda za bolje razumijevanje njegove suštine predlažem da ga sami reproducirate pomoću univerzalnog izvještaja (po metapodacima). Pokrećemo izvještaj, izaberemo bilo koji neprazan registar akumulacije sa stanjem i prometom, uključimo potvrdni okvir "Detaljne evidencije" u postavkama izvještaja (), odredimo neke grupe i dodamo Registrar u prikazana polja. Voila - početni i konačni saldo se zbrajaju za svaku grupu. Ispada izvještaj sa apsolutno netačnim brojkama, koji se ni na koji način ne mogu prikazati korisnicima.

Za rješavanje ovog problema potrebno je ispravno popuniti postavke za polja ACS skupa podataka – posebno polje „Uloga“, koje je od ključnog značaja.

RJEŠENJE interaktivno ( nije pogodno za Univerzalni izvještaj):

Otvorite šemu rasporeda podataka vašeg izvještaja i pogledajte postavke polja skupa podataka.

Za polja početnih i konačnih stanja za svaki od resursa morate popuniti ulogu: odaberite grupu uloga "Ostatak" i u njoj navedite vrijednost "Početno stanje" ili "Krajnje stanje". pa ( ) ovo se radi u SKD konstruktoru.

Slično, morate postaviti ulogu "Dimenzija" za sve dimenzije vašeg skupa podataka.

Ali to nije dovoljno da izvještaji rade ispravno. Da biste ispravno izračunali zaostala polja, potrebno je znati period svakog kretanja kako biste ih rasporedili u ispravan hronološki red. Ako vaš izvorni izvor podataka nema polje za period, morate ga dodati tamo. Ako već postoji polje za period u skupu podataka, potrebno je da navedete ulogu "Period" i odgovarajući broj perioda (za više detalja o numerisanju perioda, pogledajte pomoć).

Ovakva podešavanja polja podataka ACS-a u većini slučajeva omogućavaju da se postigne ispravan proračun reziduala po grupama kada sa zadanim postavkama oni su pogrešno izračunati.

Softversko RJEŠENJE (na primjeru Univerzalnog izvještaja o metapodacima):

Sada da vidimo kako popraviti istu grešku u generičkom izvještaju o metapodacima. Univerzalni izvještaj se razlikuje od većine drugih izvještaja po tome što se shema sastava podataka generira potpuno programski, tako da također morate programski konfigurirati uloge za ACS polja podataka.

Za uloge početni i konačni bilans za svaki od resursa najlakši način je ne izmišljati točak (sve je već napisano prije nas) i koristiti standardnu ​​proceduru FillDataSetFieldRemainder() from zajednički modul GenericReports. Tu prosljeđujete polje skupa podataka i ime resursa kao parametre, a kao rezultat, polje ostatka s ispravno popunjenom ulogom se kreira u skupu podataka.

Slično tome, kada kreirate polja skupa podataka za dimenzije, morate im dati ulogu Dimension. Kod će biti otprilike ovako:

NewDimension = GenericReports.AddDataSetField(DataCompositionSchema.DataSets, Dimension.Name, Dimension.Synonim); NewDimension.Role.Dimension = true;

Gore opisane manipulacije sa resursnim i mjernim poljima su neophodne, ali nisu dovoljne za rješavanje problema - glavna nevolja univerzalnog izvještaja je nedostatak numeracije perioda. Polja za period su prisutna u skupu podataka, ali njihove uloge nisu popunjene.

Polja perioda se dodaju u izvještaj postupkom generičkog modula GenericReports.AddPeriodFieldsToDataSet(), koji se poziva iz procedure modula objekta AddDataSetFields(). Nažalost, ovaj postupak ne upisuje brojeve perioda.

Osim toga, polja "Broj linije" i "Registar" nigdje se programski ne dodaju izvještaju. Činilo mi se čudnim, jer. oni su prisutni u konačnom skupu podataka.

Kako se ispostavilo, polja "Broj linije" i "Matičar"(Recorder) se dodaje od strane same platforme automatski kada se inicijalizuje programer postavki. Štaviše, platforma ne ispunjava uloge za polja koja kreira, a nemoguće ih je popuniti programski, što stvara probleme pri daljem radu s njima. Ali ako su ova polja kreirana "ručno" i ispravne uloge su im programski dodijeljene, tada platforma ne pokušava ponovo da ih kreira.

U nastavku nudim recept koji mi je pomogao da gotovo u potpunosti riješim ovaj problem platforme i Univerzalnog izvještaja o metapodacima:

Evo isječka koda objektnog modula:

// Dodaj polja perioda If TableName = "RemaindersAnd Turnovers" OR TableName = "Turnovers" Then GenericReports.AddPeriodFieldsToDataSet(DataCompositionScheme.DataSets); EndIf; treba zamijeniti sa sljedećim: // Dodajte polja perioda If TableName = "RemaindersAnd Turnovers" OR TableName = "Turnovers" Then ListPeriods = GenericReports.AddPeriodFieldsToDataSet(DataCompositionScheme.DataSets); //Popunite servisna polja i ručno postavite periode, jer platforma ih ne ispunjava Polje = GenericReports.AddDataSetField(DataCompositionScheme.DataSets, "LineNumber", "LineNumber"); Field.Role.PeriodNumber = 1; Polje = GenericReports.AddDataSetField(DataCompositionSchema.DataSets, "Recorder", "Recorder"); Field.Role.PeriodNumber = 2; sc = 3; Za svaki FieldPeriodFromListPeriods petlja FieldPeriod.Value.Role.PeriodNumber = cn; Ako je count > 3 Tada FieldPeriod.Value.Role.PeriodType = DataCompositionPeriodType.Optional; EndIf; sc = sc + 1; EndCycle; EndIf;

Uspio sam pronaći jedno ograničenje vezano za ovo rješenje. Za tačan obračun i kon. rezidua, neophodno je da se prilikom korišćenja bilo kakvih detalja registratorskog dokumenta u izveštaju bira i sam registrator. Inače, univerzalni izvještaj nakon ovakvih poboljšanja više ne izaziva alergije kod korisnika.

AŽURIRANJE: Rečeno mi je u komentarima da je članak na ovu temu jednom objavljen na ITS disku. Nažalost, ovaj članak mi je prošao, ali mi je samo djelimično mogao pomoći u rješavanju problema sa univerzalnim izvještajem. Nažalost, problemi platforme sa ACS servisnim poljima, kao što je "Rekorder", takođe nisu opisani.

U svakom slučaju, nadam se da će moj članak pomoći svima onima koji imaju slične probleme. Proveo sam dosta vremena tražeći ovo rešenje...

41
Nedavno sam napravio izvještaj sa neograničenim brojem kolona. Nisam bio voljan petljati se s kodom, odlučio sam to učiniti na ACS-u. S tim nije bilo problema, bilo je potrebno rastegnuti rezultat na proizvoljan izgled (vlastiti naslov + ... 27
Iako učenici SKD nailaze na ovo prvog ili drugog dana, to bi trebalo biti u odjeljku FAQ. Jednostavan primjer programskog izlaza izvještaja o izgledu koristeći zadane postavke. //Preuzmi shemu iz... 18
Prilikom generisanja izveštaja na ACS-u, podrazumevano se proširuju sve grupe, ali se dešava da je potrebno prikazati izveštaj sa skupljenim grupama odmah nakon generisanja! Ovaj kod u modulu izvještaja omogućava vam da sažimate... 10
Na ovoj kartici možete odrediti kakve veze se prave između dva ili više skupova podataka, prema kojim parametrima i uslovima..png 1. "Izvor veze" - prvi skup podataka je naznačen, od ... 9
Da je prilikom izrade izvještaja potrebno da korisnik sa ograničenim pravima generira izvještaj u potpunosti bez provjere prava! Pogotovo ako je RLS konfigurisan. Postoji nekoliko načina da to uradite: 1. Instalirajte ...

Još jedna česta greška pri kreiranju izveštaja o ACS-u za 1s preduzeće je da su početna i konačna stanja u virtuelnim tabelama akumulacionih registara pogrešno izračunata. Na primjer, napravimo jednostavan izvještaj koji će prikazati stanja i kretanja u registru GoodsInWarehouses. Njegov zahtjev će izgledati ovako:

Također ćemo kreirati jednostavne postavke varijanti:

Kao rezultat dobijamo sledeći izveštaj:

Imate pitanje, treba li vam pomoć konsultanta?

Jer nigde nismo naznačili početak i kraj perioda, izveštaj treba da prikazuje podatke sa početka baze podataka. Ali u našim grupacijama po skladištu i nomenklaturi postoje početna stanja različita od nule. Lako je shvatiti da su podaci pogrešno prikazani, jer. na početku baze podataka ne bi trebalo biti nikakvih ostataka. Iako je sam zahtjev tačan.

Činjenica je da SKD ima svoj mehanizam za obračun stanja. Za njegov ispravan rad potrebno je nedvosmisleno odrediti lokaciju rekordera na vremenskoj osi. U ovom slučaju, postoji samo referenca u odabiru, tako da sistem povezivanja to ne može učiniti. Da biste izbjegli takvo ponašanje ACS-a, odaberite polje PeriodSecond u zahtjevu. U ovom slučaju, sistem će ispravno izračunati bilance:

Treba imati na umu da polja sa ulogom "Period" imaju okvir za potvrdu "Dodatno". A ako se iz nekog razloga obriše iz polja PeriodSecond, izvještaj će se vratiti na pogrešnu verziju. Za ispravan obračun stanja, u ulozi mora biti označena zastavica „Dodatno“, ili polje mora biti prisutno u odabranim poljima izvještaja na nivou varijante.

Dobar dan, dragi čitaoci blog stranice! Prošli put smo se već dotakli teme koja je govorila o korištenju funkcije. A danas, u prvom iz ove serije članaka, naučit ćemo čemu služe uloge polja sastava podataka, te također razmotriti primjere ispunjavanja ovih uloga.

Uloga polja SKD ukazuje šta je ovo polje. Svaka uloga polja može sadržavati vlastito svojstvo. Na primjer, ima numeričku vrijednost i sadrži broj tačke, ako je polje tačka. Ako je vrijednost svojstva "Period" 0 (nula), to znači da ovo polje nije tačka. Ili svojstvo "Dimension" - sadrži znak da je polje dimenzija. Ako je polje dimenzija, tada se ova informacija koristi prilikom izračunavanja zbroja za preostala polja.

Možete odrediti ulogu za svako polje sheme sastava podataka. Uloge utiču na ispravnost obračuna ostataka. Konkretno, početni i konačni saldo za neku tabelu. Ako je u upitu odabrana virtuelna tabela „Stanja i prometi“, tada se početna i završna stanja računaju po složenom algoritmu, posebno ako koristimo dodatna storniranja po periodima.

Ali ako sve ovo radi ispravno u upitima, prema skupu izlaznih polja, onda su stvari malo gore u sastavu podataka. Uostalom, ne znamo koja polja će korisnik zapravo odabrati. Sve će ovisiti o konfiguraciji njegove verzije izvještaja, koju može promijeniti u bilo kojem trenutku. Dakle, sistem sastava podataka ima svoj mehanizam za izračunavanje početnih i konačnih reziduala za određeni skup podataka, a za to se koriste uloge. Otvorimo ga i vidimo da za svako polje možete postaviti uloge.

Hajde da dodamo skup podataka upita. Da bismo to učinili, moramo aktivirati korijenski element "Query Builder". Okrenimo se virtuelnoj tabeli "Stanja i promet" registra akumulacije. šta vidimo?

Kao što možete vidjeti iz gornje ilustracije, možemo vidjeti da je za neka polja uloga popunjena. Ovo se dogodilo jer imamo postavljenu zastavicu "AutoComplete". Ali to nije uvijek moguće, pa ponekad morate ručno postaviti ulogu. Pogledajmo par primjera.

Pretpostavimo da u upitu koji koristimo, na primjer, koristimo operator jezika upita "SELECT". Hajde da opišemo ovo stanje:

IZBOR KADA Ostaci robe i obrti.Nomenklatura = Vrijednost(Katalog.Nomenklatura.Prazna referenca) ONDA Vrijednost(Imenik.Nomenklatura.Šampon) OSTALO Ostaci robe i prometi.Nomenklatura KRAJ.

Ovaj unos znači da ako nomenklatura odgovara nultoj referenci (mi se pozivamo na referencu vrijednosti funkcije "Nomenklatura", nultu referencu), tada će biti vraćena vrijednost unaprijed definiranog elementa. Pretpostavimo da u našoj konfiguraciji postoji takav predefinirani element i zove se "šampon". U suprotnom, vraćamo vrijednost same stavke. Dobijamo sljedeće:

Kao što vidite, za polje "Nomenklatura" uloga nije popunjena. Ali kao što možete vidjeti na slici, u stvari, nemamo postavljenu ulogu za polje “Field1” i u ovom slučaju ostatak neće biti ispravno izračunat.

Postoje i drugi primjeri u kojima se uloga ne može postaviti sama. Na primjer, ovo je korištenje, odnosno određena tablica vrijednosti se unosi u ulaz, na primjer, učitava se iz druge baze podataka, a ostatke treba izračunati iz nje. U ovom slučaju, uloge moramo dodijeliti sami. Kako se to radi, razmotrit ćemo u.

Na kraju članka želim da vas posavjetujem bez Anatolija Sotnikova. Ovo je kurs iskusnog programera. On će vam pokazati na posebnoj osnovi kako da napravite izvještaje u ACS-u. Samo treba pažljivo slušati i zapamtiti! Dobićete odgovore na pitanja kao što su:
  • Kako napraviti jednostavan izvještaj o listi?
  • Čemu služe kolone Polje, Putanja i Naslov na kartici Polja?
  • Koja su ograničenja za polja izgleda?
  • Kako pravilno postaviti uloge?
  • Koje su uloge polja za raspored?
  • Gdje mogu pronaći karticu rasporeda podataka u upitu?
  • Kako konfigurirati parametre u SKD-u?
  • Dalje zanimljivije...
Možda ne biste trebali sami da pretražujete internet u potrazi za potrebnim informacijama? Štaviše, sve je spremno za upotrebu. Samo počnite! Svi detalji o tome šta se nalazi u besplatnim video tutorijalima

Top Related Articles