Esimerkki ulkoisen tietolähteen käyttämisestä tallennusjärjestelmässä. Tietojoukot SKD-tietojoukon objektien arvotaulukko

Edellisessä artikkelissani kirjoitin jo, että 1C on paradoksaalinen alusta. Tiedon kokoamisjärjestelmä on yksi näistä paradokseista. SKD on suunniteltu monimutkaisten raporttien suunnitteluun, ja se sisältää "manuaalisen" raporttiohjelmoinnin korvaamisen suunnittelulla monitoimisessa työkalupakkissa. Mahdollisuus käyttää kulunvalvontajärjestelmiä ilmestyi kahdeksannessa versiossa, mutta kesti kauan ennen kuin versio 8.2 ilmestyi, jotta 1C saattoi käyttää sitä vakiotuotteissaan. Toisaalta ACS on monikäyttöinen työkalupakki, jonka avulla voit luoda erittäin monimutkaisia ​​raportteja ilman yhtä koodiriviä. Kulunvalvontajärjestelmällä on kuitenkin melko korkea oppimisen este, ja sen täysimääräisen käytön aloittaminen "lennossa" on erittäin vaikeaa, koska käyttöliittymä ei ole täysin intuitiivinen ja täydellisimmät käyttöohjeet ovat saatavilla vain maksullisen kirjallisuuden muodossa.

SKD:tä tutkiessani ilmeni ongelma. On tarpeen hankkia tiedot kolmannen osapuolen arvotaulukosta kyselykielellä ja sitten käyttää näitä tietoja kuten vastaavia tietokantataulukoiden tietoja (pienennystoiminnot, ryhmittely ja niin edelleen). Klassisessa muodossa luomme kyselyn, joka vastaanottaa tiedot kyselylle parametrina välitetystä taulukosta.

Request = Uusi pyyntö(
"VALITA
| Taulukko. Nimikkeistö,
| Pöytä. Varasto
|FROM
| &TK AS Taulukko");
Request.SetParameter("TZ", TZ);

Mutta SKD:n kanssa kaikki ei ole niin yksinkertaista. Valitettavasti on mahdotonta suorittaa edellä kuvattua toimintoa tietojen kokoonpanojärjestelmässä. Järjestelmä on kuitenkin ottanut käyttöön mahdollisuuden ladata ulkoisia arvotaulukoita.

Tässä kannattaa tehdä lyhyt poikkeama ja puhua tietojoukoista. Tietojoukot ovat tietolähteitä, joista tiedonhallintajärjestelmä saa tiedot, jotka se myöhemmin kokoaa raportiksi. Tietojoukot jaetaan tyyppeihin, pääasiassa "Kysely"-tyyppiä käyttäen, jonka runkoon ohjelmoija kirjoittaa kyselyn tietokantaan. "Objekti"-tyyppiä käytetään tietojen lataamiseen ulkoisista objekteista. Molemmissa tapauksissa tulos on tietty kenttäjoukko, joka on saatu pyynnön suorittamisen tai ulkoisen objektin lataamisen seurauksena. Myöhemmin näitä kenttiä voidaan muokata "Asetukset"-välilehdellä sekä raporttirakenteen yksityiskohtaisia ​​asetuksia. Erilaisten joukkojen yhdistämiseksi ACS tarjoaa mahdollisuuden ilmoittaa tietojoukkojen väliset yhteydet samannimisessä välilehdessä. Nämä yhteydet ovat suora analogi vasemmalle liittämiselle klassisessa kyselyssä. On kuitenkin otettava huomioon, että minkään tietojoukon kyselyt eivät "tiedä" muiden tietojoukkojen olemassaolosta, lopulta tietojoukkojen väliset suhteet vaikuttavat tietojen asetteluun "" määritetyn rakenteen mukaisesti; Asetukset” -välilehti.

Tarkastellaanpa ongelmaa esimerkkiin asti. On olemassa vakioraportti: Palkkalaskelmat ZiK 8:n kokoonpanon järjestämiseen. Raportin laskelmat on ryhmiteltävä tiettyihin ryhmiin. Laskentanäkymä-ryhmän vastaavuudet tallennetaan ulkoiseen arvotaulukkoon. Ladataksemme sen päätietojen asettelumalliin luomme "tietojoukkoobjektin", jonka nimi on "Ryhmät" (kuva 2). Teemme yhteyden ”kyselytietojoukkoon” - ”Accruals” laskentatyypin mukaan (kuva 3). Kohdassa "Pyyntötietojoukko" - "Kerrytykset" on tiedot ryhmille, poistamme kaikki merkinnät. Sen jälkeen "Asetukset"-välilehdellä voidaan käyttää "Ryhmä"-kenttää, jonka arvo ladataan ulkoisesta tietolähteestä (kuva 4). Raportin luontitoiminnossa täydennämme ulkoisten tietojen lataamista.

Funktio GenerateReport(tulos = määrittelemätön, salauksenpurkutiedot = määrittelemätön, OutputInReportForm = tosi) Vie

//saamalla tai muodostamalla tarvittavan "Groups"-arvotaulukon ja kirjoittamalla sen samannimiseen muuttujaan

ExternalData = Uusi rakenne();//luo ja täytä ulkoinen tietorakenne
Ulkoiset tiedot.Insert(Ryhmät);

UserPanelValue = TypicalReports.GetUserPanelSettingsValuesofObject(ThisObject);
DefaultSettings = AsetuksetComposer.GetSettings();
TypicalReports.GetAppliedSetting(ThisObject);
TypicalReports.GenerateTypicalReport(ThisObject, Result, Decryption Data, OutputToReportForm, ExternalData);
SettingsLinker.LoadSettings(oletusasetus);
Palautustulos;

EndFunction

Jos tekisimme raportin tyhjästä, raportin generointikoodi näyttäisi tältä:

ExternalDataSets = uusi rakenne;
ExternalDataSets.Insert("Ryhmät", Ryhmät); //Ryhmät - haluttu arvotaulukko
DataCompositionSchema = GetLayout("MainDataCompositionSchema"); //Asettelumme tietovuokaaviolla
Asetukset = DataCompositionScheme.DefaultSettings;
LayoutLinker = newDataLayoutLayoutLinker;
LayoutLayout = LayoutComposer.Execute(DataLayoutSchema, Settings);
DataCompositionProcessor = newDataCompositionProcessor;
DataCompositionProcessor.Initialize(LayoutLayout, ExternalDataSets);
TabDoc = Uusi taulukkodokumentti;
OutputProcessor = Uusi OutputProcessorDataCompositionResultInTabularDocument;
OutputProcessor.SetDocument(TabDoc);
OutputProcessor.Output(DataCompositionProcessor);

Lukea 9660 kerran

41
Tein hiljattain raportin, jossa on rajoittamaton määrä sarakkeita. En halunnut puuhata koodia, joten päätin tehdä sen kulunvalvontajärjestelmässä. Tässä ei ollut ongelmaa, tulos piti venyttää mielivaltaiseen asetteluun (oma otsikko +... 27
Vaikka CDS-opiskelijat törmäävät tähän ensimmäisenä tai toisena päivänä, sen pitäisi olla UKK-osiossa. Yksinkertainen esimerkki raportin tulostamisesta ohjelmallisesti asettelun perusteella oletusasetuksia käyttäen. //Hae kaavio osoitteesta... 18
Kulunvalvontajärjestelmän raportteja luotaessa oletusarvoisesti kaikki ryhmittelyt laajenevat, mutta joskus on tarpeen näyttää raportti tiivistetyillä ryhmittelyillä heti luomisen jälkeen! Tämän raporttimoduulin koodin avulla voit tiivistää... 10
Tällä välilehdellä voit määrittää, mitä yhteyksiä kahden tai useamman tietojoukon välillä tehdään, minkä parametrien ja ehtojen mukaan..png 1. "Yhteyden lähde" ​​- osoittaa ensimmäisen tietojoukon, alkaen... 9
Raportteja kehitettäessä vaaditaan, että rajoitettujen oikeuksien käyttäjälle raportti luodaan kokonaan ilman oikeuksien tarkistamista! Varsinkin jos RLS on määritetty. Voit tehdä tämän useilla tavoilla: 1. Asenna...

Joskus tietyn asettelutuloksen saamiseksi on tarpeen luoda linkkejä tietojoukkojen välille kulunvalvontajärjestelmässä. Yritämme puhua artikkelissamme, milloin tätä tarvitaan ja miten se tehdään.

1C:ssä toteutettu tietojen asettelumalli tukee kolmenlaisia ​​tietolähteitä (kuva 1)

Tietolähteet

Ilmeisin ja kehittäjien useimmin käyttämä tietolähde on kysely.

1C:n versiossa 8 toteutettu kyselyn suunnittelija on erittäin kätevä, ja useimmissa tapauksissa voit linkittää useita taulukoita yhteen ja tehdä tarvittavat ryhmittelyt ja valinnat suoraan siihen.

Monimutkaisissa tapauksissa, kun on tarpeen tai tarkoituksenmukaisempaa käyttää jonkin koodin suorittamista (esimerkiksi tietojen lataaminen kolmannen osapuolen tiedostosta) tai kun kyselyä ei ole mahdollista käyttää, "Object" -tietolähde tulee pelastus. Moduulissa suoritettavalla mielivaltaisella koodilla tulee olla lähdössä tietty rakenne, johon kulunvalvontajärjestelmä pääsee käsiksi.

Kolmas tietolähde on Unioni. Itse asiassa tätä lähdettä voidaan pitää yhtenä viestintätyypeistä. Se yhdistää (vähentää useita taulukoita yhdeksi), ilman yhteensopivuutta, mutta tiettyjen kenttien yhteensopivuutta. Eli jos kahdessa yhdistettävässä taulukossa on 3 ja 4 riviä, tuloksena olevassa tietolähteessä on 7 riviä.

Ongelman muotoilu

Testausalueeksi valitsemme UPP-pohjan, version 1.3.92.3, joka toimii normaalissa sovellustilassa.

Olemme saaneet seuraavan tehtävän: luoda vain kulunvalvontajärjestelmää käyttäen raportti, joka näyttäisi tositteen ostettujen tavaroiden taulukon, jossa hinnat on otettu vastapuolen lähettämästä tiedostosta.

Joten meidän on:

  1. Ota kuittiasiakirjan taulukkoosa;
  2. Lataa tiedosto "Object" -tietolähteeseen;
  3. Yhdistä nämä kaksi lähdettä tietyllä parametrilla (tässä tapauksessa tämä on koodi);
  4. Näytä tuloksena oleva taulukko.

Toteutusprosessi

Käydään läpi kaikki luetellut vaiheet:

  • Luomme kyselyn kuittitositteen taulukkoosalle (kuva 2)

Kuva 2

  • Luo tietojoukkoobjekti (kuva 3);

Kuva 3

Tässä on tärkeää kiinnittää huomiota kohtaan "Tiedot sisältävän kohteen nimi", joka on määritettävä raporttimoduulin koodissa.

  • Siirrymme raporttimoduuliin ja luomme sinne "Kun tulostat" -menettelyn (kuva 4);


Kuva 4

Emme kuvaile menettelyä tietojen hankkimiseksi ulkoisesta tiedostosta, kiinnitämme huomiota siihen koodin osaan, jonka on oltava asettelussa, jotta voimme saada tietoja "tietojoukolle 2" (kuva 5).

Kuva 5

Tärkeä! Kun linkityksen aikana luodaan "Object" proseduurikoodiin, StandardProcessing-parametrin arvon on oltava False.

Siirry "Tietojoukon linkit" -välilehteen.

Linkityssarjat

Siirry kaavion vastaavaan välilehteen (kuva 6).

Näemme taulukon osan, joka on joitakin poikkeuksia lukuun ottamatta hyvin samanlainen kuin kyselyn suunnittelijassa oleva taulukkoosa. Et voi valita "Kaikki"-valintaruutua tiedonsiirtolähdejoukolle ja viestintäkohdejoukolle, mutta useita lisäsarakkeita on lisätty.

Tietojoukkosuhteissa voit luoda vain suhteen, joka on samanlainen kuin kyselyn rakentajan vasen ulompi liitos.

Ennen kuin luot yhteyden, päätetään sarakkeiden tarkoitus:

  1. Linkkilähde on ensimmäinen tietojoukko, josta kaikki saatavilla olevat arvot otetaan;
  2. Viestintävastaanotin – joukko tietoja, joista valitaan tilaamme vastaavat arvot;
  3. Lähdelauseke – ensimmäisen tietojoukon kenttä tai lauseke, jota vastaan ​​vertailu suoritetaan;
  4. Kohdelauseke on riippuvan joukon kenttä tai lauseke;
  5. Parametri – jos määrität parametrin nimen tähän kenttään, viestintä vastaanottimen kanssa tapahtuu vain parametrissa määritetyn arvon mukaisesti;
  6. Parametriluettelo – määrittää mahdollisuuden käyttää arvoluetteloa parametrina;
  7. Yhteysehto – määrittämällä tähän lausekkeen lähdekenttien avulla voit luoda ehdon, jonka täyttyminen toimii signaalina yhteyden muodostamiselle;
  8. Alkuarvo – näyttää yhteyden alkuarvon;
  9. Pakollinen suhde – määrittää, ovatko lähteessä (asetettu arvoon EPÄTOSI) tai kohteessa (asetettu TOSI) käytetyt kentät käytössä, ja lisää tämän perusteella suhteen asetteluun.

Täten:

  • Viestinnän lähde on pyyntömme tulos;
  • Objekti toimii vastaanottimena;
  • Lähdelauseke on "NomenclatureCode";
  • Vastaanottimen ilmaisu "nimikkeistö";
  • Viestintä on pakollista (kuva 7).

Jos olisimme ilmoittaneet yhteysehdoksi jonkin nimikkeistön nimen tai sen kopiotyypin tai jotain muuta, olisimme saaneet tehtäväämme varten tarkemman näytteen. Toimintamme tulos näkyy kuvassa 8

Kuva 8

Raportin kahdella alimmalla rivillä ei ollut vastaavuutta hinnoittelutiedostossa.

Joskus käy niin, että raportin tietoja ei saada kyselyllä tai kyselyjen yhdistelmällä. Sinun on käytettävä joitain menetelmiä tietojen keräämiseen, ja tiedot sijoitetaan arvotaulukkoon. Herää kysymys - voidaanko tätä dataa käyttää tiedon kokoonpanokaaviossa? Loppujen lopuksi SKD-työkalu on tehokas ja kätevä. Osoittautuu, että arvotaulukon tietoja on mahdollista käyttää raportin tietolähteenä kulunvalvontajärjestelmässä, eikä se ole ollenkaan vaikeaa. Tämä artikkeli näyttää, kuinka tällainen raportti luodaan tavallisille lomakkeille.
Joten miten luot ACS-raportin käyttämällä arvotaulukon tietoja? Ensimmäiset asiat ensin.
Avaa ensin konfiguraattori ja luo uusi ulkoinen raportti.

Avaa objektimoduuli ja luo ennalta määritetty menettely tulosta kirjoitettaessa (DocumentResult, Salauksenpurkutiedot, StandardProcessing)

Tämän menettelyn aikana keräämme tietoja ja luomme raportin.
Kun tulostat kirjoitetaan -menettelyssä, poistamme normaalin käsittelyn käytöstä. StandardProcessing = False;
Sitten muodostamme arvotaulukon mielivaltaisella tavalla. Arvotaulukon sarakkeiden nimien on vastattava ACS:n tietojoukon tulevia kenttiä:


Lisätään esimerkiksi kolme riviä tietoja. Seuraavaksi luomme raportin tulosteen vaihe vaiheelta.

  • Kaaviosta saamme oletusasetukset.

  • Lähetämme salauksen purkutiedot sopivalle muuttujalle.

  • Luomme asettelun layout builderilla.

  • Siirrämme kaavion, asetukset ja dekoodaustiedot layout-asetteluun.

  • Suoritamme taiton asetteluprosessorilla. Voit tehdä tämän suorittamalla tietojen kokoonpanoprosessorin Initialize()-menetelmän. Parametreina välitämme tietojen koostumuksen asettelun, ulkoiset tietojoukot (tyyppi: Rakenne, rakenneavaimen tulee vastata objektin nimeä tiedonkokoonpanokaaviossa, arvo on luotu arvotaulukko), salauksen purkutiedot.

  • Tyhjennä laskentataulukkoasiakirjan kenttä.

  • Näytämme tuloksen laskentataulukkoasiakirjassa.
Tuloksena on seuraava koodi:
DataLayoutSchema = GetLayout( "MainDataCompositionSchema"); //Asetukset = DataCompositionScheme.DefaultSettings; // - Jos teet sen edellä esitetyllä tavalla (suositus joissakin resursseissa), silloin kun muutat asetuksia asiakastilassa // et näe näitä muutoksia, koska asetukset ovat aina oletuksena. Kuinka tehdä se oikein - vaihtoehto alla Asetukset = AsetuksetSäveltäjä. GetSettings(); DecryptionData = newDataCompositionDecryptionData; LayoutLinker = newDataLayoutLayoutLinker; LayoutLayout = LayoutLocker. Execute(DataCompositionScheme, Settings, DecryptionData); ExternalDataSet = Uusi rakenne( "Arvotaulukon esimerkki", TZOutput); DataCompositionProcessor = newDataCompositionProcessor; DataCompositionProcessor. Initialize(LayoutLayout, ExternalDataSet, DecryptionData); DocumentResult. Asia selvä();

OutputProcessor = Uusi OutputProcessorDataCompositionResultInTabularDocument; Lähtöprosessori. SetDocument(DocumentResult); Lähtöprosessori. Output (DataCompositionProcessor); Asettelukaavion asettelun lisääminen. Voimme jättää nimen oletusarvoksi.

Luomme tietojoukon. Voit tehdä tämän lisäämällä uuden objektityypin tietojoukon. Tiedot sisältävän objektin Nimi-kenttään laitetaan nimi, jonka määritimme avaimeksi ulkoista tietojoukkorakennetta luotaessa. Sitten lisäämme kenttiä. Nimien on vastattava täsmälleen arvotaulukon sarakkeiden nimiä. Seuraavaksi voimme määrittää hyväksyttävät arvot, muodot jne.

Lisää resursseja tarvittaessa. Tulokset lasketaan niiden perusteella. Meidän tapauksessamme nämä ovat Määrä- ja Määrä-kentät.

Asetukset-välilehdellä luomme asetusten suunnittelijalla oletusraportin vaihtoehdon


Tallennamme raporttimme. Käynnistämme sen asiakkaassa ja luomme sen. Kuvassa on esimerkki ACS-raportin suorittamisesta arvotaulukon tietoja käyttäen.

Siinä kaikki. Tarpeeksi yksinkertainen, eikö?

Tuloksena oleva esimerkkiraportti voidaan ladata
Hei!

Tänään haluan kuvailla aihetta, jota et voi ymmärtää ilman sukellusvarusteita :) ;)

Sukellus tarkoittaa, että sukellus on melko syvä. Kirjallisuudessa on vähän viittauksia tähän aiheeseen, etkä pysty ymmärtämään sitä ennen kuin saat halun. Tällaisesta toiminnasta ei tule edes viestiä;) Muuten, dokumentaatio puhuu tästä erittäin huonosti ja epäjohdonmukaisesti, sinun on käännyttävä kolmannen osapuolen kirjallisuuteen.

Suosittelen esimerkiksi "Monimutkaisten raporttien kehittäminen 1C:Enterprise 8.2:ssa". Data Composition System", (katso tarkemmin sivut 224, 267 ja 473)


ACS:ssä on kahdenlaisia ​​tietolähteitä: Kysely, objekti ja liitto (tätä asiaa ei lasketa, se ei ole tietolähde, vaan olemassa olevan tiedon prosessori). Katso kuva 1:

Ensin kuvailen, mitä haluamme saada tulokseksi:

Ilmoita, käyttäjä napsautti " Lomake» ja luettelo kohteista tuli näkyviin (katso kuva 2):

Kyllä, tein yhden epätarkkuuden, nimittäin: ei ole painiketta " Lomake"mutta siellä on painike" uutta toimintaa"(Selitän hieman myöhemmin, miksi näin tapahtui;)

Kyllä kyllä! Toinen kohta: tämä koko luettelo on johdettu "Object" -tietojoukosta:

Ratkaisu:

  1. Luo ulkoinen raportti;
  2. Lisää ACS-asettelu, kutsutaan sitä nimellä "Main Data Layout Scheme";
  3. Lisäämme siihen "Object" -tietojoukon, annamme sille nimen "Nomenclature List" (pitäisi olla sama kuin kuvassa 3);
  4. Emme kokeile liikaa raporttiasetusten kanssa, olkoon kaiken yksinkertaista (katso kuva 4)

Ok, puolet työstä tehty ;)

Luodaan nyt pääraporttilomake (kyllä, vielä yksi asia! Määritykseni toimii tavallisessa käyttöliittymässä, mutta uskon, että löydät ratkaisun hallinnoiduista lomakkeista;) Joten lomake:

Tästä se ongelma syntyy! Jos napsautamme "luo"-painiketta (kuva 5.), näemme virheilmoituksen!


Omistan tämän artikkelin tämän ongelman ratkaisemiseen!

"Generate"-painiketapahtumaa ei ollut mahdollista siepata, joten päätin käyttää kainalosauvaa. Käynnistin kokoonpanon debug-tilassa ja yritin löytää "luo" -painikkeen.

Lisäsin "Luo" -menettelyn lomakkeeseen, mutta siihen ei ole merkintöjä, minun piti määritellä "lomake" -painikkeen toiminta uudelleen ennen lomakkeen avaamista:


Kuvassa Lomakkeen toiminnan muuttamisen lisäksi kuvassa 8 on esimerkki pyynnöstä, sen käsittelystä ja generoidun tiedon siirtämisestä kulunvalvontajärjestelmään. Tutkitaanpa tarkemmin:

  1. Luomme syöttödataa kulunvalvontajärjestelmää varten;
  2. Alustamme kulunvalvontajärjestelmän;
  3. Näytämme tuloksen LOMAKELLA (huomio myös tämä!).

Muistetaanpa tietojen koostumuksen järjestelmäobjektien vuorovaikutuskaavio:

Ulkoisen raportin tietojen asetteluskeema on käytettävissä globaalina objektina lomakemenetelmässä DataComposition Schema. Voit käyttää sitä myös nimellä välittämällä sen menetelmälle HankiLayout(katso kuva 8)

Koodin tärkein osa on alla:

Pyyntö = Uusi pyyntö; Query.Text = "SELECT | Nimikkeistö.Nimi nimikkeistönä |FROM | Hakemisto. Nimikkeistö AS Nimikkeistö"; NomenclatureList = Request.Run().Upload(); DataSets = Uusi rakenne("NimikkeistöLista", NimikkeistöLista); //SKD = ​​GetLayout("MainData LayoutScheme"); SKD = ​​​​DataCompositionScheme; LayoutComp = uusi DataLayoutComposer; layoutComp = LayoutComp.Execute(SKD, SKD.DefaultSettings); CompDataProcessor = uusi DataCompositionProcessor; ProcessorCompData.Initialize(layoutComp, DataSets); output = uusi DataCompositionResultOutputProcessorInTabularDocument; output.SetDocument(FormElements.Result); output.Output(ProcessorCompData, true);

Joo! Tässä on taas kiva hetki!!!

Tässä esimerkissä, kuten näet (katso kuva 2), tuloste suoritetaan muodossa, ei taulukossa. asiakirja! Ja tämä on erittäin hyvä, koska voimme työskennellä lomakkeen kanssa (ohjelmallisesti siepata lomakeelementin tapahtumia, tehdä kaikenlaisia ​​temppuja vetämällä ja pudottamalla jne.;)

Laskentataulukkodokumentissa voimme yksinkertaisesti näyttää käsitellyt tiedot näytöllä ja siirtää dokumentin hallinnan käyttäjälle, emmekä voi millään tavalla vaikuttaa tämän sisällön jatkokäsittelyyn!

Katso ohjejärjestelmä" Laskentataulukon asiakirjakenttä ", ja annan vain otteen 1c Enterprise 8.2 -järjestelmän sisäänrakennetusta dokumentaatiosta:

"Laskentataulukon dokumenttikenttä on lomakkeelle asetettu laskentataulukkoasiakirja. Taulukkoasiakirjan monien suunnitteluominaisuuksien ohella tämä mahdollistaa tapahtumien käsittelyn järjestämisen, kun valitaan soluja, kuvia ja muita laskentataulukkoasiakirjan kenttiin sijoitettuja säätimiä."

Okei, kuten sanotaan, onnea taisteluun ;)

Aiheeseen liittyviä julkaisuja