ACS nu este doar pentru rapoarte - implementarea selecțiilor universale. Utilizarea selecțiilor în SCD Cum să faceți selecții fără SDS

Pentru a scrie procesarea, programatorii trebuiau adesea să folosească interogări pentru a obține date și apoi să le proceseze. Datele, la rândul lor, au fost obținute din cerere. Ei bine, o solicitare fără selecție sau filtru este rară. Să vorbim despre selecțiile în astfel de solicitări, folosind exemplul de solicitare:

Pentru a organiza selecția după contraparte pentru utilizator într-o formă obișnuită, programatorul a trebuit să plaseze trei elemente pe formular, care arăta cam așa:

Cât de mult efort este nevoie ca un programator să descrie diferite tipuri de comparații (egale, nu egale, într-o listă, într-un grup...) și, pe baza acestor tipuri de comparații, să își rafinească cererea finală de obținere a datelor.

Să vedem cum se poate face acest lucru folosind ACS. În procesarea noastră, să creăm un aspect cu tipul Schemei de compoziție a datelor și să îl completăm cu solicitarea noastră:

În fila Setări, vom adăuga o nouă grupare fără detalii și, în exemplul nostru, câmpul Cont, deoarece în final vom introduce totul în tabelul de valori:

Și în fila Selecție, adăugați contrapartea la selecție:

Acum să începem să creăm formularul. Să afișăm pe forma procesării propriu-zise Selecția cu care va lucra utilizatorul. Vom afișa pe formular un element de tipul Câmp tabel și îi vom da numele Selection cu tipul de date Composer.Settings.Selection:

Acum să creăm handlere de evenimente pentru formularul OnOpen și un handler pentru a face clic pe butonul Run, codul este prezentat mai jos:

Perem Layout; Procedură ButtonExecutePress(Button) Result.Clear(); LayoutLinker = newDataLayoutLayoutLinker; Layout Layout = Layout Composer.Execute(Layout, Composer.GetSettings(), Type("DataCompositionLayoutGeneratorForValueCollection")); CompositionProcessor = newDataCompositionProcessor; LayoutProcessor.Initialize(LayoutLayout); Procesor de ieșire = Procesor de ieșire nou al rezultatului compoziției datelor într-o colecție de valori; OutputProcessor.SetObject(Result); OutputProcessor.Output(CompositionProcessor); Dacă FormElements.Result.Columns.Quantity() = 0, atunci FormElements.Result.CreateColumns(); endIf; EndProcedure ProcedureOnOpen() Layout = GetLayout("Layout"); SourceAvailableSettings = Noua SourceAvailableSettingsDataComposition(Layout); Linker.Initialize(SourceAvailableSettings); Linker.LoadSettings(Layout.DefaultSettings); Sfârșitul procedurii

Prelucrarea este gata, după ce a fost lansată, puteți vedea imediat în Selecția noastră Contrapartea care a apărut în Selecția noastră, din care puteți selecta orice tip de comparație, precum și să adăugați linii de selecție suplimentare folosind detaliile directorului Contrapărți:

Asta este tot, sper că acest articol vă va ajuta să îmbunătățiți flexibilitatea selecțiilor în procesarea dvs.

Kononov Serghei

Pentru ce poate fi folosit SKD?

Opinia stabilită este în scopuri de raportare.

De fapt Capacitățile ACS merg dincolo de crearea de rapoarte universale.

Și astăzi vom arăta cum folosind sistemul de control al accesului, utilizatorul va putea configura selecția flexibilă a datelor. În plus, această selecție va fi utilizată la obținerea și prelucrarea datelor.

Pentru ce sarcini va fi util?

Să dăm exemple din configurații tipice:

  • Prelucrare „Încărcarea datelor pe site”
  • Formarea unei liste de prețuri
  • Încărcarea datelor în TSD (terminal de colectare a datelor)
  • Segmentarea produselor, partenerilor
  • Formarea comenzilor (clienti, furnizori) in functie de necesitati
  • Planificarea reparațiilor în 1C:ERP.

Adică, instrumentul este util oriunde este necesar pentru a oferi utilizatorului opțiuni de selecție largi.

Crearea unei selecții aleatorii într-o formă controlată folosind ACS

Lecția acoperă lucrul cu generator de setări scheme de prezentare a datelor:

  • Ieșire de selecție pe formular
  • Conexiune software între generatorul de setări și diagrama de aspect
  • Crearea de selecții implicite în sistemul de control acces.

Primirea datelor din baza de date cu filtrare prin selecția ACS

Videoclipul arată cum puteți selecta date folosind selecția setată anterior în generatorul de setări.

Se folosește un obiect „înfricoșător” – ProcessorOutputResultCompositionDataIntoValueCollection.

De fapt, nu totul este atât de complicat - în 8 minute rezolvăm problema.

Stocarea selecțiilor SKD în baza de informații

În lecție ne vom uita salvarea setărilor constructorului ACS folosind Magazinul de valori.

Să ne dăm seama cum să rezolvăm această problemă în configurația „1C: Manufacturing Enterprise Management 1.3”.

Vizionare placuta! :)

În general, ACS oferă o mulțime de oportunități.

Iată câteva „trucuri” pe care nici nu am avut timp să le descriem pe pagina cursului.

Dacă trebuie să colectați date din diferite surse, există trei opțiuni.

Puteți încerca să compuneți o singură interogare „universală” pentru toate datele (lung), puteți afișa datele mai multor interogări într-o buclă (structură rigidă, inflexibilă) - sau puteți utiliza pur și simplu ACS și conectarea seturilor de dateîn loc de o singură cerere.

În același timp, este important să obțineți rezultate corecte - acest lucru are particularitățile sale dacă există mai multe surse

Cu ajutorul SKD puteți pur și simplu obțineți un instantaneu cu cele mai recente pentru fiecare dată din raport.

Sau, pentru claritate, - obțineți prețul produsului pentru fiecare dată de vânzare.

Cu ajutorul ACS te poți organiza afișând toate datele pentru perioada din raport, și nu numai cele pentru care au fost date în raport (adăugarea de date fără programare, doar cu capabilitățile sistemului de control acces)

Folosind ACS, puteți organiza grupări imbricate cu adăugarea de perioade (an/trimestru/lună etc.)

Aranjați raportul după cum doriți, de exemplu, afișați antetul coloanei pe verticală și datele din această coloană pe orizontală.

Permiteți utilizatorului să aleagă frecvența cu care datele vor fi afișate în raport (pe an, pe trimestru, pe lună) - numai prin setări, fără a edita modulul de raport.

Cum să combinați mai multe condiții folosind SAU într-un raport? Această opțiune, de exemplu, nu este disponibilă în generatorul de rapoarte, dar este disponibilă în ACS

Dacă afișați date rezumative sub forma unei diagrame, trebuie să puteți controla cu precizie aspectul acestora: vizibilitatea markerilor pentru o serie, alternarea culorilor seriilor de diagrame, separarea datelor trecute de datele viitoare pe o diagramă cu o linie verticală , etc.

Desigur, există nuanțe cărora trebuie să li se acorde atenție.

La crearea raportului, dezvoltatorul a depanat textul interogării, dar când a folosit această interogare într-un raport privind sistemul de control al accesului, sistemul produce un rezultat incorect.

Prin urmare, este important să puteți obține interogarea pe care sistemul o execută de fapt pentru a obține date din baza de date și să depanați o astfel de interogare.

Când adăugați detalii la un înregistrator de documente la un raport, sistemul produce uneori solduri de deschidere și de închidere „incorecte”.

Prin urmare, este important să configurați corect câmpurile din raportul privind sistemul de control acces astfel încât soldurile să fie afișate corect atât cu cât și fără detaliu la document.

Rezultatul raportului se poate modifica în funcție de locul în care este configurată selecția după valoarea resursei - la nivel de raport și la nivelul unui grup individual, trebuie să monitorizați acest lucru.

Dacă doriți să stăpânește ACS profesional si zilnic aplica in munca ta, înscrie-te la curs:

A sustine - 2 luni. Domeniul cursului - 34 de ore de predare.

Nu amânați studiile!

Extensie limbaj de interogare pentru sistemul de compunere a datelor

Extinderea limbajului de interogare pentru sistemul de compunere a datelor se realizează utilizând instrucțiuni sintactice speciale incluse în acolade și plasate direct în textul interogării.

Elemente sintactice ale extensiei limbajului de interogare a sistemului de compunere a datelor

ALEGE

Această propoziție descrie câmpurile pe care utilizatorul le va putea selecta pentru ieșire. După acest cuvânt cheie, sunt listate aliasurile câmpurilor din lista principală de selecție a interogărilor care vor fi disponibile pentru configurare, separate prin virgule.

De exemplu:

(SELECTARE articol, depozit)

După aliasul câmpului poate exista o combinație de caractere „.*”, ceea ce indică posibilitatea de a utiliza câmpuri copil din acest câmp.

De exemplu, intrarea Nomenclatură.* indică posibilitatea utilizării câmpurilor copil din câmpul „Nomenclatură” (de exemplu, câmpul „Nomenclatură.Cod”). Elementul SELECT poate apărea numai în prima interogare de alăturare.

UNDE

Sunt descrise câmpurile pe care utilizatorul poate aplica selecția. Această propunere utilizează câmpuri de tabel. Utilizarea alias-urilor câmpurilor din lista de selecție nu este permisă. Fiecare parte a uniunii poate conține propriul element WHERE.

(UNDE Nomenclatura.*, Depozit)

Un exemplu simplu

Este necesar să obțineți vânzări pentru perioada + afișarea întregului articol, indiferent dacă au existat vânzări sau nu. Adică trebuie să selectați date din tabelul cifrei de afaceri din Registrul vânzărilor, date din directorul nomenclatorului. Să omitem întrebarea de ce avem nevoie de toată nomenclatura.

Pentru a rezolva problema, puteți crea o interogare care conectează articolul și tabelul cifrei de afaceri din vânzări cu o îmbinare la stânga, ca urmare, pentru articolul care nu a fost vândut în perioada selectată, vom obține valorile câmpului Contrapartidă, Acord, Cantitate, Sumă= nul. Aceasta cerere:

SELECT ReferenceNomenclature.Link AS Nomenclature, SalesTurnover.Counterparty, SalesTurnover.Counterparty Agreement, SalesTurnover.QuantityTurnover AS Cantitate, SalesTurnover.CostTurnover AS Cost FROM Reference.Nomenclature AS Reference Nomenclature AS Reference Nomenclature ACCUMUL DE REFERINȚE ACCUMUL DE PUNCȚIE DE VÂNZARE ASS. menclature.Link = SalesTurnover. Nomenclatură

Iată rezultatul:

Contrapartidă Acord Nomenclatură Cantitate Sumă
nul nul _Test1 nul nul
LLC „Coarne și copite” Acord1 Papuci 10 1200
"Gazprom" Mișto contract Cizme 5 13000
nul nul Galoșuri nul nul
nul nul Ardezii nul nul

În acest exemplu, nu au existat vânzări ale articolelor: „Plantofi” și „Papuci”

Și totul ar fi bine, dacă grupăm eșantionul după contraparte, atunci toate articolele nevândute se vor încadra într-un grup separat, unde Contraparte = Null, dar clientul dorește să aibă o selecție aleatorie în raport în funcție de câmpul contraparte (în mod firesc, aceasta înseamnă contrapartea din Registrul vânzărilor). Ce ar trebuii să fac? La urma urmei, de fapt, trebuie doar să filtram tabelul Vânzări. Dacă folosim completarea automată în constructorul ACS, atunci câmpurile de selecție disponibile vor include câmpul Contrapartidă, totul pare să fie în regulă, dar la executarea unui raport cu selecție de contraparte vom pierde toate înregistrările din legătura cu articolul. De exemplu, să setăm selecția: Contrapartidă = LLC „Coarne și copite”. Rezultatul va arăta astfel:

Deloc ce ne trebuie, nu?

Pentru a rezolva problema, puteți, desigur, să adăugați un parametru la interogare, de exemplu, la parametrii unui tabel virtual Cifra de afaceri din vânzări, dar in acelasi timp se pierde flexibilitatea setarii tipului de comparatie.

Există o soluție: pentru aceasta în generator de interogări pe filă Compoziția datelor => Mese adăugați un câmp de condiții la condițiile tabelului virtual Cifra de afaceri din vânzăriși își schimbă porecla în CounterpartySelection

Pentru a nu confunda utilizatorul cu câmpurile de selecție, vom dezactiva câmpul de condiție Contrapartidăși schimbați titlul câmpului CounterpartySelection


Ca urmare a executării acestei scheme cu selecția activată de câmpul contraparte, interogarea rezultată va lua forma:

SELECT SprNomenclature.Link AS Nomenclature, SalesTurnover.Counterparty AS Counterparty, SalesTurnover.Counterparty Agreement AS Counterparty Agreement, SalesTurnover.QuantityTurnover AS >Quantity, SalesTurnover.CostTurnover AS Counterparty, SalesTurnover AS Counterparty Agreement(Counterparty ASgrement) sentation, PRESENTATIONLINK(SalesTurnover.Counterparty ) AS CounterpartyPresentation, SprNomenclature.Presentation AS NomenclaturePresentation FROM Directory.Nomenclature AS SprNomenclature LEFT CONNECTION Register Accumulations.Sales.Turnover(&P , , , Counterparty = &P3 ) AS SalesTurnover BY Nomenclature.Spr.Nomenclature.Vânzare.

Și în consecință rezultatul:

Contrapartidă Acord Nomenclatură Cantitate Sumă
nul nul _Test1 nul nul
LLC „Coarne și copite” Acord1 Papuci 10 1200
nul nul Cizme nul nul
nul nul Galoșuri nul nul
nul nul Ardezii nul nul

Test1 este un grup din directorul Nomenclatură în care se află totul

La publicație este atașată schema XML a raportului utilizat în publicație. Am creat circuitul în Integrated Automation, dar cred că totul va funcționa bine atât în ​​UPP, cât și în UT 10

Rezumând

Acest exemplu arată cum să vă creați propriile setări de selecție în sistemul de control al accesului și să le dezactivați pe cele create automat dacă proiectați un circuit cu marcajul activat Completare automată.

Dacă aveți suficientă experiență pentru a crea circuite fără a utiliza Completare automată- atunci acest sfat nu are sens.

Software utilizat

  • Program de captură de ecranSnimOK!
  • Editor de fișiere XML