1c krijimi i një tabele vlerash. Cilat metoda ekzistojnë dhe si të kërkoni për disa vlera në të njëjtën kohë

Publikuar më 21 shtator 2011

Tabela e vlerave 1C - pjesa 3. Metadatat. Duke kaluar nëpër kolonat e tabelës së vlerave

Në këtë artikull do t'ju tregoj se si të punoni me një tabelë vlerash të një strukture "të panjohur", si të përsërisni nëpër kolonat e një tabele vlerash, si të nxirrni të dhëna nga kolonat dhe rreshtat pa përdorur emrat e kolonave. (Ky artikull i përket serisë së artikujve 1C nga e para; programimi 1C nga e para; tabela e vlerave 1C)

Për të shpjeguar materialin dhe për të qenë në gjendje të ekzekutojmë shembujt tanë të kodit "live", na duhen disa Tabela e testimit të vlerave 1C. Disa nga shembujt tanë do të nxjerrin të dhëna nga një tabelë vlerash, kështu që ne do të bëjmë një tabelë me tre kolona "Mbiemri", "Emri", "Emri i mesëm" dhe futim një sasi të vogël të dhënash në të - deri në 3. rreshta :)

Pra, le të krijojmë një tabelë testimi të vlerave 1C dhe ta plotësojmë:

MyTZ = Tabela e re e vlerës; // krijoni një tabelë të re vlerash të ruajtura në variablin "MyTZ" MyTZ.Columns.Add("Mbiemri"); // krijoni kolonën "Mbiemri" MyTZ.Columns.Add("Emri"); // krijoni kolonën "Emri" MyTZ.Columns.Add("Patronimik"); // krijoni kolonën "Emri i mesëm" // shtoni rreshtin e parë në tabelën tonë të vlerave NewLine = MyTZ.Add(); NewString.LastName = "Chapaev"; NewLine.Name = "Vasily"; NewString.Emri i mesëm = "Ivanovich"; // shtoni rreshtin e dytë NewLine = MyTZ.Add(); NewString.LastName = "Dzerzhinsky"; NewRow.Name = "Felix"; NewString.Emri i mesëm = "Edmundovich"; // shtoni rreshtin e tretë NewLine = MyTZ.Add(); NewLine.LastName = "Kotovsky"; NewLine.Name = "Gregory"; NewString.Emri i mesëm = "Ivanovich";

Tabela jonë e testimit përbëhet nga tre kolona: Emri, Mbiemri, Patronimik; dhe ka tre rreshta të mbushura me emrat e heronjve të Luftës Civile.

Shembulli i parë i kodit është duke numëruar kolonat e një tabele me vlerë 1C si një koleksion.

// shfaqi emrat e të gjitha kolonave të TK Për Çdo Kolonë Nga Raporti i Ciklit të MyTZ.Columns("Emri i kolonës: " + Emri i kolonës); Cikli i Fundit;

Cikli ynë do të shfaqë të gjithë emrat e kolonave në dritaren e mesazheve 1C:

Emri i kolonës: Mbiemri Emri i kolonës: Emri Emri i kolonës: Emri i mesit

Shohim që për të përsëritur nëpër kolona, ​​përdoret një cikël i veçantë i përsëritjes së koleksionit, i ngjashëm me ciklin e përsëritjes së rreshtit (në artikullin e mëparshëm). MyTZ.Kollonat- ky është një koleksion i kolonave të tabelës së vlerës 1C "MyTZ". Koleksioni përmban objekte të tipit "Kollona e tabelës së vlerave"Çdo objekt i këtij lloji është një kolonë e tabelës së vlerave dhe përmban veti dhe metoda. Duke hyrë në këto veti dhe metoda, ne marrim informacionin e nevojshëm për një kolonë ose kryejmë disa veprime të tjera me të.

Për shembull, aksesi në pronë "Emri" (Kolona.Emri) marrim emrin e kolonës aktuale.

Do të doja të tërhiqja vëmendjen te titulli i serialit: “Për të gjithë Kolona Nga MyTZ.Column Cycle" Variabli me emër "Kolona" shpikur nga ne. Nuk është e nevojshme të përdorni të njëjtin emër. Ju mund ta quani këtë variabël çdo gjë që ju pëlqen, për shembull "Column My Current" Atëherë shembulli i mësipërm do të duket si ky:

// shfaqi emrat e të gjitha kolonave të TK-së Për Çdo MyCurrentColumn Nga Raporti i Ciklit MyTK.Columns("Emri i kolonës: " + MyCurrentColumn.Name); Cikli i Fundit;

Kur nënsistemi i ekzekutimit 1C ndeshet me një lak të këtij lloji, me çdo kalim të lakut ai cakton një element nga koleksioni ynë në një ndryshore me emrin e specifikuar, në këtë rast - një element koleksioni kolonat e tabelës së vlerave MyTZ.Kollonat Dhe më pas ne aksesojmë variablin që përmban kolonën aktuale dhe përdorim vetinë "Emri".

Unë propozoj që pranë emrit të kolonës të shfaqet numri i secilës kolonë në koleksionin e kolonave:

// shfaq numrin dhe emrat e të gjitha kolonave të tabelës së vlerave Për çdo kolonë nga MyTZ.Columns Cikli i kolonësNumber = MyTZ.Columns.Index(Column); // merrni numrin e kolonës Emri i kolonës = Emri i kolonës; // merrni emrin e kolonës Report("Numri i kolonës:" + Numri i kolonës + "Emri i kolonës: " + Emri i kolonës); Cikli i Fundit;

Teksti i mëposhtëm do të shfaqet në dritaren e mesazheve 1C:

Numri i kolonës:0 Emri i kolonës: Mbiemri Numri i kolonës:1 Emri i kolonës: Emri Numri i kolonës:2 Emri i kolonës: Emri i mesit

Ju lutemi vini re se kolonat në tabelën e vlerave 1C numërohen duke filluar nga zero, ashtu si rreshtat e tabelës së vlerave.

Numri i kolonave në tabelën e vlerës 1C

Për të gjetur numrin e kolonave në tabelën e vlerave, ne përdorim metodën "Count()" në koleksionin e kolonave.

Numri i Kolonave = MyTZ.Columns.Sasia(); Raporti (Numri i Kolonave);

Numri "3" do të shfaqet në ekran. Në të vërtetë, tabela jonë ka tre kolona: "Mbiemri", "Emri", "Patronimi"

Marrja e një objekti kolone sipas numrit të tij (indeksi) dhe numërimi i kolonave duke përdorur indeksin e kolonës

Le të bëjmë një cikël kërkimi nëpër të gjitha kolonat e tabelës së vlerave duke përdorur indekset e kolonave (numrat). Mos harroni se numërimi i kolonave fillon nga zero. Prandaj, ne duhet të rrisim numëruesin e ciklit "Sch" nga zero në një numër të barabartë me numrin e kolonave minus një.

Për llogarinë = 0 Nga MyTZ.Columns.Sasia() - 1 Cikli Kolona Aktuale = MyTZ.Columns[Act]; Raporti(CurrentColumn.Emri); Cikli i Fundit;

Në ekran do të marrim sa vijon

Emri i plotë

Unë mendoj se ky shembull ishte i qartë. Ne iu drejtuam metodës Sasi() koleksionet e kolonave" MyTZ.Columns.Sasia()", mori numrin e kolonave dhe filloi një lak me një numërues nga zero përpara numri i kolonave minus një. Brenda ciklit marrim çdo kolonë nga koleksioni i kolonave dhe caktojmë objektin aktual të kolonës në një ndryshore Kolona aktuale Tjetra, ndryshorja Kolona aktuale ne hyjmë në pronë Emri dhe shfaqni vlerën e kësaj prone në ekran: Raporti(CurrentColumn.Emri);

Është e rëndësishme të mos ngatërroni kurrë vetinë e një objekti dhe metodën e një objekti.

Një pronë është një vlerë e caktuar statike dhe qasja në të shkruhet pa kllapa, për shembull Kolona aktuale.Emri. Një metodë është në thelb një procedurë ose funksion i një objekti, dhe thirrjet për procedurat dhe funksionet shkruhen gjithmonë me kllapa (edhe nëse nuk ka parametra hyrës). Për shembull: MyTZ.Columns.Sasia()

Nëse hyjmë në një metodë dhe harrojmë të shkruajmë kllapat, përkthyesi 1C do të na japë një mesazh gabimi dhe nuk do të ekzekutojë kodin. Meqenëse përkthyesi do të konsiderojë se ne nuk po aksesojmë një metodë, por një pronë - sepse nuk ka kllapa. Por nuk do të jetë në gjendje të gjejë prona me atë emër (sepse ekziston vetëm një metodë me atë emër) - e cila do të tregohet në mesazhin e gabimit.

Kjo është ajo që do të shkruajë përkthyesi nëse harroj të vendos kllapa në një thirrje metodë në një mënyrë kaq të gabuar MyTZ.Kollonat.Sasia(pa kllapa pas "Sasia()"):

Fusha e objektit nuk u gjet (Sasia)

Në këtë rast, "fusha" dhe "prona" duhet të kuptohen si sinonime, ose një pasaktësi në terminologjinë e zhvilluesve 1C. Ata përdorin të dyja këto fjalë për t'iu referuar të njëjtit koncept. Edhe pse në gjuhë të tjera programimi këto terma mund të nënkuptojnë gjëra të ndryshme.

Marrja e të dhënave nga një tabelë me vlera 1C duke përdorur numrat e kolonave

Për të filluar, unë ju ofroj një shembull të thjeshtë të marrjes së të dhënave nga rreshti i parë i tabelës sonë. Ju lutemi vini re se ne po përdorim tabelën e parapopulluar që nga fillimi i artikullit. Ne e dimë me siguri se tabela ka një rresht të parë dhe të paktën një kolonë. Nëse e zbatojmë këtë shembull në një tabelë të zbrazët, do të ndodhë një gabim. Kështu që:

First Line = MyTK; // merrni rreshtin e parë (të numëruar nga zero) FirstColumnValue = FirstRow; // merrni vlerën e kolonës së parë (numërimi i kolonës është gjithashtu nga e para) Raporti (Vlera e kolonës së parë); // shfaq vlerën e kolonës së parë në rreshtin e parë të tabelës

Ekrani do të shfaqë:

Çapaev

Fillimisht kemi marrë një objekt të rreshtit të tabelës së vlerave duke hyrë në tabelën e vlerave duke përdorur operatorin [...]. (nëse keni harruar se si ta bëni këtë, mund të shikoni artikujt e mëparshëm) Ne kaluam argumentin "0" brenda operatorit. Ky është indeksi i rreshtit të parë të tabelës së vlerave. First Line = MyTK;

Më tej, ne gjithashtu kemi të drejtë të aksesojmë një objekt string duke përdorur operatorin [...]. Brenda këtij operatori kaluam numrin e kolonës së tabelës së vlerave, në këtë rast edhe “0”. Dhe kështu, morëm vlerën e kolonës me numër "0" për rreshtin aktual të tabelës me numër "0". Ne e shfaqëm këtë vlerë në ekran dhe përfaqëson vargun "Chapaev".

Le ta komplikojmë pak shembullin tonë:

First Line = MyTK; // merrni rreshtin e parë (të numëruar nga zero) Raporti (FirstLine); // shfaq vlerën e kolonës së parë në rreshtin e parë të tabelës Raporti (Rreshti i parë); // shfaq vlerën e kolonës së dytë në rreshtin e parë të tabelës Report (Rreshti i parë); // shfaq vlerën e kolonës së tretë në rreshtin e parë të tabelës

Tani kemi shfaqur vlerat nga të tre kolonat e rreshtit të parë të tabelës sonë të vlerave:

Chapaev Vasily Ivanovich

Tani do ta modifikoj edhe këtë shembull në mënyrë që të mund të bëjmë pa variablin "Linja e parë"

Raporti (MyTZ); // shfaq vlerën e kolonës së parë në rreshtin e parë të tabelës Report(MyTZ); // shfaq vlerën e kolonës së dytë në rreshtin e parë të tabelës Report(MyTZ); // shfaq vlerën e kolonës së tretë në rreshtin e parë të tabelës

E njëjta gjë do të jetë në ekran

Chapaev Vasily Ivanovich

Ne pamë në shembullin e mësipërm se për të hyrë në një vlerë të vendosur në një rresht specifik dhe një kolonë specifike të një tabele vlerash, mund të përdorim një thirrje sekuenciale të dy operatorëve [...] në këtë formë: Tabela e vlerave[Indeksi i rreshtit][Indeksi i kolonës]

Pra, ne jemi gati të krijojmë një lak dhe të marrim të dhënat e të gjitha rreshtave dhe të gjitha kolonave duke përdorur indekset e rreshtave dhe kolonave:

Për RowCounter = 0 By MyTZ.Quantity() - 1 Loop // cikli nëpër rreshta Për ColumnCounter = 0 By MyTZ.Columns.Quantity() - 1 Loop // cikli i mbivendosur nëpër kolona // merrni vlerën e qelizës (nga rreshti aktual dhe kolonat aktuale) CellValue = MyTK[RowCounter][ColumnCounter]; // shfaq numrin e rreshtit, numrin e kolonës dhe vlerën e qelizës Raport ("Nr i rreshtit" + Numri i rreshtave + "Numri i kolonës" + Numri i kolonave + " = " + Vlera e qelizave); Cikli i Fundit; Cikli i Fundit;

Më poshtë do të shfaqet në ekran:

Linja nr. 0 kolona nr. 0 = linja Chapaev nr. 0 kolona nr. 1 = Vasily linja nr. 0 kolona nr. 2 = linja Ivanovich nr. 1 kolona nr. 0 = Linja Dzerzhinsky nr. Linja nr. 1, kolona nr. 2 = Edmundovich, linja nr. 2, kolona nr. 0 = linja Kotovsky nr. 2, kolona nr. 1 = linja Grigory nr. 2, kolona nr. 2 = Ivanovich

Duke përdorur dy cikle, njëra prej të cilave është e vendosur brenda tjetrës, ne shfaqëm vlerat e të gjitha kolonave nga të gjitha rreshtat e tabelës së vlerave 1C. Në këtë rast, ne nuk kemi përdorur emrat e kolonave, por kemi aksesuar kolonat dhe rreshtat sipas indekseve të tyre. Për më shumë kuptim, kushtojini vëmendje komenteve brenda shembullit.

Si përfundim, unë propozoj të ndryshojmë pak shembullin tonë në mënyrë që në vend të numrave të kolonave, të shfaqë emrat e tyre në ekran. Dhe përveç kësaj, unë do të bëj një dizajn më të paraqitshëm për shfaqjen e përmbajtjes në ekran.

Për LineCounter = 0 Nga MyTZ.Sasia() - 1 Loop // cikli përmes rreshtave Raporto(" ======= Nr linja " + LineCounter + " ======="); Për të raportuar(" "); // furnizimi i linjës (fut një rresht bosh) Për ColumnCounter = 0 By MyTZ.Columns.Quantity() - 1 cikli // cikli i ndërthurur nëpër kolona // merrni vlerën e qelizës (nga rreshti aktual dhe kolona aktuale) CellValue = MyTZ [RowCounter][ColumnCounter]; // merrni emrin e kolonës Emri i kolonës = MyTZ.Columns[ColumnCounter].Emri; // shfaq emrin e kolonës dhe vlerën e qelizës Raporti (Emri i kolonës + ": " + Vlera e qelisë); Cikli i Fundit; Për të raportuar(" "); // furnizimi i linjës (duke futur një rresht bosh) EndCycle;

Tani, në ekranin tonë informacioni filloi të dukej më përfaqësues:

Linja nr. 0 ======= Mbiemri: Chapaev Emri: Vasily Patronimi: Ivanovich ======= Rreshti nr. 1 ======= Mbiemri: Dzerzhinsky Emri: Felix Patronimi: Edmundovich ===== == Rreshti nr. 2 ======= Mbiemri: Kotovsky Emri: Grigory Patronimi: Ivanovich

Po, pothuajse harrova. Kur përdorim dy [...][...] operatorë në një rresht, ne mund të kalojmë emrin e kësaj kolone në vend të një indeksi kolone: ValueTable[RowIndex][Emri i kolonës]

Për LineCounter = 0 Nga MyTZ.Sasia() - 1 Loop // cikli përmes rreshtave Raporto(" ======= Nr linja " + LineCounter + " ======="); Për të raportuar(" "); // furnizimi i linjës (duke futur një rresht bosh) Për ColumnCounter = 0 By MyTZ.Columns.Quantity() - 1 Loop // cikli i ndërthurur nëpër kolona ColumnName = MyTZ.Columns[ColumnCounter].Name; // merrni emrin e kolonës Vlera e qelizës = MyTZ[RowCounter][Emri i kolonës]; //

Kushtojini vëmendje rreshtit të shënuar me një shigjetë ". Në këtë rresht, në vend të indeksit të kolonës aktuale, ne ia kalojmë emrin e kolonës aktuale argumentit në kllapa katrore [...] Rezultati do të jetë i njëjtë.

Dhe tani, gjëja e fundit në këtë artikull.

Marrja e saktë e të gjitha të dhënave nga tabela e vlerës 1C duke përdorur sythe përmes një koleksioni rreshtash dhe një koleksioni kolonash

Për çdo linjë aktuale nga MyTZ Loop // cikli përmes një koleksioni vargjesh Raporto(" ======= Nr. i linjës " + MyTZ.Index(CurrentLine) + " ======="); Për të raportuar(" "); Për çdo kolonë aktuale nga MyTZ.Columns Loop // cikli i mbivendosur që përsëritet përmes një koleksioni kolonash Emri i kolonës = Emri i kolonës aktuale; // merrni emrin e kolonësCellValue = CurrentRow[Emri i kolonës]; // merrni vlerën e qelizës NGA kolona EMRI Raporti(Emri i kolonës + ": " + Vlera e qelisë); // shfaq emrin e kolonës dhe vlerën e qelizës Fundi i ciklit; Për të raportuar(" "); Cikli i Fundit;

Në shembull, u përdorën dy sythe. Një lak për ciklin përmes një koleksioni kolonash është i vendosur brenda një cikli për të kaluar nëpër rreshta. Nëse keni punuar me shembujt e mësipërm dhe keni lexuar artikujt e mëparshëm, atëherë nuk do të keni ndonjë vështirësi të kuptoni se si funksionon ky shembull.

Së fundi, do të zvogëloj sa më shumë numrin e rreshtave të kodit në shembullin tonë të fundit duke eliminuar përdorimin e variablave të ndërmjetëm. Ne do të marrim një mostër të "kodit industrial" që përdoret në probleme reale.

Kjo duhet të bëhet vetëm kur e kuptoni mirë atë që po bëni. Nëse kodi është shumë kompleks, atëherë është e pranueshme të lini variabla të ndërmjetme për ta bërë më të lehtë të kuptoni kodin tuaj më vonë. Gjithashtu, çdo kod duhet të komentohet të paktën minimalisht, në mënyrë që pas një kohe të jetë më e lehtë për të kuptuar tekstet e programit.

Për çdo linjë aktuale nga cikli MyTZ // përsëritni mbi rreshta Raportoni (" ======= Nr. i rreshtit. " + MyTZ.Index(Linja aktuale) + " =======" + Simbolet.PS); Për çdo kolonë aktuale nga MyTZ.Columns Loop // përsëritje mbi kolona Raporto(CurrentColumn.Name + ": " + CurrentRow[CurrentColumn.Name]); Cikli i Fundit; Për të raportuar(" "); Cikli i Fundit;

Dalja në ekran nuk ka ndryshuar, mbetet e njëjtë si në shembullin e mëparshëm:

KURSI 2 JAvor

"PROGRAMIMI NË 1C PËR FILLESTARËT"

Kursi do të dërgohet me email. Bëhuni një programues duke përfunduar detyrat hap pas hapi.

Për të marrë pjesë ju duhet vetëm një kompjuter dhe internet

Qasje falas në kurs:

Sp-force-hide ( display: asnjë;).sp-form ( shfaqja: bllok; sfondi: #eff2f4; mbushja: 5 px; gjerësia: 270 px; gjerësia maksimale: 100%; rreze-kufi: 0 px; -moz-border -rrezja: 0 px; -kit-webkit-border-radius: 0px; font-familje: Arial, "Helvetica Neue", sans-serif; sfond-përsëritje: pa përsëritje; sfond-pozicion: qendër; madhësia e sfondit: automatik;) Hyrja .sp-form ( ekrani: blloku i brendshëm; opaciteti: 1; dukshmëria: i dukshëm;).sp-form .sp-form-fields-wrapper ( margjina: 0 automatik; gjerësia: 260 px;).sp-form .sp -form-kontrolli ( sfondi: #ffffff; ngjyra e kufirit: #cccccc; stili i kufirit: i fortë; gjerësia e kufirit: 1 px; madhësia e shkronjave: 15 px; mbushja-majtas: 8,75 px; mbushja-djathtas: 8,75 px; kufiri -rrezja: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; lartësia: 35px; gjerësia: 100%;).sp-form .sp-etiketa e fushës ( ngjyra: #444444; font- madhësia: 13 px; stili i shkronjave: normale; pesha e shkronjave: bold;).sp-formë .sp-button (radius-kufi: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; ngjyra e sfondit: #f4394c; ngjyra: #ffffff; gjerësia: 100%, pesha e shkronjave: 700; stili i shkronjave: normale; font-familja: Arial, "Helvetica Neue", sans-serif; kuti-hije: asnjë; -moz-box-hije: asnjë; -webkit-box-hije: asnjë; sfond: linear-gradient (në krye, #e30d22 , #f77380);).

(Ky artikull i përket serisë së artikujve 1C nga e para; programimi 1C nga e para; tabela e vlerave 1C)

Një strukturë virtuale e ruajtjes së të dhënave në formë tabelare - kjo është ajo që është

Tabela e vlerave nuk është një objekt i përhershëm i bazës së të dhënave 1C dhe nuk ruhet midis seancave të nisjes.

Tabela e vlerave 1C(TK) krijohet "në fluturim" duke përdorur kodin e programit, dhe më pas puna me të kryhet në të njëjtën mënyrë si me çdo objekt tjetër programi të gjuhës së programimit 1C. Përdorimi i thirrjeve të metodës dhe aksesimi i vetive të një objekti tabele.

Me fjalë të tjera, programuesi krijon një tabelë në memorie, e mbush atë me të dhëna, punon me të, rendit, grupon, llogarit totalet, etj. Merr të dhënat e nevojshme për përdorim të mëtejshëm.

Le të krijojmë një tabelë vlerash dhe ta mbushim me diçka. Duhet mbajtur mend se një tabelë me vlera 1C mund të krijohet jo vetëm me dorë, duke thirrur operatorin

NewValueTable;

Një tabelë vlerash është shpesh rezultat i një thirrjeje metode në një objekt tjetër, për shembull, rezultati i një pyetjeje mund të hidhet në një tabelë vlerash, e kështu me radhë.

Më lejoni t'ju jap një shembull të thjeshtë menjëherë.

// MyTZ = New ValueTable; // krijoni një tabelë të re vlerash të ruajtura në variablin "MyTZ" MyTZ. Kolonat. Add("Mbiemri"); // krijoni kolonën "Mbiemri" MyTZ. Kolonat. Shto ("Emri"); // krijoni kolonën "Emri". Raporti (MyTZ); // shfaq vlerën e ndryshores MyTZ //

Krijova një tabelë me vlera 1C, me dy kolona: "Mbiemri", "Emri". Procedura Raporti (MyTK) do të shfaqë llojin e ndryshores në dritaren e mesazhit MyTZ: Tabela e vlerave

Tabela jonë e vlerave është bosh për momentin. Le t'i shtojmë nja dy rreshta, me emrat dhe mbiemrat.

// plotësoni tabelën e vlerave // shtoni rreshtin e parë në tabelën tonë të vlerave NewLine = MyTZ. Add() ; Linja e re. Mbiemri = "Sidorov" ; Linja e re. Emri = "Vasya"; // shtoni një rresht të dytë në tabelën tonë të vlerave NewLine = MyTZ. Add() ; Linja e re. Mbiemri = "Ivanov" ; Linja e re. Emri = "Pjetër";

Ne morëm një tabelë si kjo:

Duhet të mbani mend: Numrat e rreshtave në tabelën e vlerave fillojnë nga zero

Pse na duhen edhe numrat e rreshtave? Dhe në mënyrë që të mund të aksesojmë një rresht të veçantë të tabelës së vlerave, për shembull, marrim dhe shfaqim këtë rresht në ekran.

// *** shfaq vlerat e vijës zero në ekran *** (në jetën e përditshme ne zakonisht numërojmë gjërat duke filluar nga një, por këtu - nga zero) // merrni rreshtin zero të tabelës sonë duke përdorur indeksin e rreshtit në kllapa katrore OurNullString = MyTZ[ 0] ; // tani i gjithë vargu zero gjendet në variablin "OurFirstLine" Raporti (OurNullString.Mbiemri) ; // shfaq vlerën e kolonës "Mbiemri" i ruajtur në rreshtin zero Raporti (OurNullString.Name) ; // shfaq vlerën e kolonës "Emri" nga e njëjta rresht

Si rezultat, ekrani do të shfaqë:

Sidorov Vasya

Tani, për shumë të zgjuar dhe konciz, unë do të tregoj një shembull që ju lejon të përdorni vlerën e një kolone në një rresht të tillë dhe të tillë (Vlera e një kolone në një rresht të tillë është një qelizë e tabelës së vlerave Një term jozyrtar, por i përshtatshëm). Por pa përdorur një variabël të ndërmjetëm si "OurZeroString".

Për të shfaqur vlerën e qelizave nga rreshti i dytë (mos harroni se rreshti është i dyti, por indeksi i kësaj rreshti është një, kështu që numërimi fillon nga zero)

Së fundi, pika e fundit në këtë artikull. Unë ju tregova një shembull të hyrjes në një rresht të vetëm të një tabele vlerash sipas indeksit (numrit të rreshtit). Forma universale për leximin ose caktimin e përmbajtjes së një qelize është: "MyValueTable[RowNumber].ColumnName"

Tani do t'ju jap një cikël të prodhimit të plotë të përmbajtjes së tabelës së vlerave. Pa shpjegime të hollësishme, në mënyrë që të mund të grumbulloni edhe trurin tuaj :)

// // kaloni nëpër dhe shfaqni të gjitha rreshtat e tabelës sonë të vlerave// Për LineNumber = 0 Sipas MyTZ. Sasia() - Raport 1 Cikli (MyTZ[Numri i linjës] . Mbiemri) ; // shfaq vlerën e kolonës "Mbiemri". Raporti (MyTK[Numri i linjës] . Emri) ; // shfaq vlerën e kolonës "Emri". Cikli i Fundit ;

Si rezultat i ekzekutimit të këtij cikli, në ekran do të shfaqet sa vijon:

Sidorov Vasya Ivanov Petya

Këtu ju thashë bazat e punës me tabelën e vlerave 1C. Ky informacion vlen për 1C 8.0, 8.1, 8.2. Detajet interesante rreth objektit "Tabela e vlerave 1C" nuk mbarojnë këtu. Ky objekt ka aftësi të mëdha për punë të përshtatshme me të dhëna. Unë do të flas për këtë në artikujt vijues.

Degtyarev Roman.

Si të mësoni të programoni në 1C nga e para?

Si të punoni si programues 1C dhe të fitoni deri në 150,000 rubla në muaj?

REGJISTROHU FALAS

KURSI 2 JAvor

"PROGRAMIMI NË 1C PËR FILLESTARËT"

Kursi do të dërgohet me email. Bëhuni një programues duke përfunduar detyrat hap pas hapi.

Për të marrë pjesë ju duhet vetëm një kompjuter dhe internet

Qasje falas në kurs:

Sp-force-hide ( display: asnjë;).sp-form ( shfaqja: bllok; sfondi: #eff2f4; mbushja: 5 px; gjerësia: 270 px; gjerësia maksimale: 100%; rreze-kufi: 0 px; -moz-border -rrezja: 0 px; -kit-webkit-border-radius: 0px; font-familje: Arial, "Helvetica Neue", sans-serif; sfond-përsëritje: pa përsëritje; sfond-pozicion: qendër; madhësia e sfondit: automatik;) Hyrja .sp-form ( ekrani: blloku i brendshëm; opaciteti: 1; dukshmëria: i dukshëm;).sp-form .sp-form-fields-wrapper ( margjina: 0 automatik; gjerësia: 260 px;).sp-form .sp -form-kontrolli ( sfondi: #ffffff; ngjyra e kufirit: #cccccc; stili i kufirit: i fortë; gjerësia e kufirit: 1 px; madhësia e shkronjave: 15 px; mbushja-majtas: 8,75 px; mbushja-djathtas: 8,75 px; kufiri -rrezja: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; lartësia: 35px; gjerësia: 100%;).sp-form .sp-etiketa e fushës ( ngjyra: #444444; font- madhësia: 13 px; stili i shkronjave: normale; pesha e shkronjave: bold;).sp-formë .sp-button (radius-kufi: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; ngjyra e sfondit: #f4394c; ngjyra: #ffffff; gjerësia: 100%, pesha e shkronjave: 700; stili i shkronjave: normale; font-familja: Arial, "Helvetica Neue", sans-serif; kuti-hije: asnjë; -moz-box-hije: asnjë; -webkit-box-hije: asnjë; sfond: linear-gradient (në krye, #e30d22 , #f77380);).

Përshëndetje për të gjithë lexuesit e infostart. Ky artikull do t'i kushtohet çështjes së krijimit të një tabele arbitrare të vlerave në formën e një aplikacioni të menaxhuar në mënyrë programore.

Karakteristikat e detyrës.

Kushdo që ka programuar në një aplikacion të rregullt shpesh është përballur me detyrën e marrjes së një tabele arbitrare të vlerave në një formular. Një tabelë arbitrare e vlerave është një tabelë, numri dhe lloji i kolonave të së cilës nuk dihen paraprakisht. Kjo do të thotë, mund të ketë 3 kolona, ​​ose ndoshta 6, ose ndoshta 8. Në një aplikacion normal, gjithçka është e thjeshtë: mund të vendosni elementin "Tabela e vlerave" në formularin e përpunimit dhe më pas të transferoni tabelën e krijuar të vlerave ​ndaj këtij elementi në mënyrë programore. Pastaj me një komandë të thjeshtë:

Form Elements.TableField.CreateColumns();

merrni një tabelë të gatshme të vlerave në formular. Duket se mund të jetë më e thjeshtë.

Kjo ishte e gjitha në aplikimin e rregullt. Në një aplikacion të menaxhuar, gjithçka ka ndryshuar. Nuk është aq e lehtë të krijosh një tabelë arbitrare. Tani ju duhet ose të parametrizoni në mënyrë të ngurtë tabelën e vlerave në formë, ose ta krijoni atë në mënyrë programore (përshkruani, mirë, kjo, në fakt, është thelbi i vetë aplikacionit të menaxhuar). Kjo është ajo që ne do të përpiqemi të bëjmë: të krijojmë në mënyrë programore një tabelë arbitrare të vlerave në një formë të kontrolluar.

Zgjidhja e problemit.

Gjëja e parë që duhet të bëjmë është të përcaktojmë se si do të shfaqet tabela në formular. Gjëja kryesore është se nuk keni nevojë të krijoni ndonjë element të formës në përpunim. Ne do ta krijojmë atë në mënyrë programore, si e gjithë tabela. Kjo do të thotë, tabela do të përshkruhet dhe krijohet në momentin e hapjes së formularit ose përdorimit të një butoni - në varësi të kujt i nevojitet.

Krijimi i një tabele në formë ndodh përmes përshkrimit të tabelës së vlerave si një atribut:
SelectionTypeArray = Array i ri; Array of SelectionType.Add(Type("Tabela e vlerave")); ChoiceTypeDescription = New TypeDescription (ChoiceTypeArray); Array of Details = Array i ri; Array of Atribute.Add(New Form Atribute ("Tabela e orarit", Përshkrimi i SelectionType, "", "TZN")); Tani duhet të krijojmë një tabelë programatike të vlerave që përmban të dhënat. Nëse tabela e vlerave merret nga një pyetje, atëherë gjithçka është pak a shumë në rregull. Nëse tabela krijohet manualisht, atëherë kuptimi i kolonave që do të përmbajnë numra ose data mund të krijohet përmes "Përshkrimit të Llojeve". Çështja është se kolonat në tabelën e vlerave duhet të kenë një lloj. Nëse, për shembull, pritet që përdoruesi të plotësojë të dhënat në këto kolona në mënyrë interaktive, atëherë nuk mund të shtoni një kolonë të tabelës së vlerave thjesht me një emër; ajo duhet të ketë një lloj. Mbani në mend - kjo është shumë e rëndësishme sepse... Ne do t'i transferojmë këto lloje në tabelën në formular.
Ne krijojmë një tabelë që përmban disa kolona:
CD = NewDateQualifiers (DateParts.Time); ArrayKD = Array i ri; ArrayCD.Add(Type("Data")); DescriptionTypesTime = Përshkrim i ri Llojet (ArrayCD,CD); TZ = Tabela e re e vlerës;
TK.Columns.Add("Me", DescriptionTypesTime);
TK.Columns.Add("Para", DescriptionTypesTime);
TK.Columns.Add("Emri");
TK.Columns.Add("Shënim"); // Emri i plotë dhe Shënimi - rreshtat Më pas, ne do të plotësojmë tabelën tonë të programit TK me të dhënat e nevojshme. Ne marrim një tabelë TK që përmban vlerat e nevojshme dhe është gati për t'u transferuar në atributin e formës së krijuar. Për çdo kolonë nga TK Cikli i kolonave

Array of Atributes.Add(New Form Atribute(Column.Name, Column.ValueType,"ScheduleTable"));
Cikli i Fundit;
Change Details(ArrayDetails);
SelectionFieldsTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldsTable.DataPath = "ScheduleTable";
SelectionFieldTable.Display = TableDisplay.List;

Ky është një kombinim i thjeshtë dhe tabela jonë është gati.

Për çdo kolonë nga TK Cikli i kolonave

NewElement = Elements.Add(Column.Name, Type("FormField"), SelectionFieldTable);
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "Tabela e orarit." + Kolona.Emri;
Elementi i ri.Gjerësia = 10;
Cikli i Fundit;

Dizajni i kushtëzuar, nëse na nevojitet, e shkruajmë edhe me dorë, menynë e komandës - me dorë. Trajtuesit e tabelave shkruhen gjithashtu me dorë. Për shembull, për të shtuar një mbajtës ngjarjesh për tabelën "Zgjedhja":

Tabela e SelectionFields.SetAction("Selection","TZNSelection");

Për të përpunuar këtë ngjarje, përshkruhet një procedurë e veçantë në formën e një procedure:

&OnClient
Procedura TKNSelection (TK, Selected Row, Field, Standard Processing)
//komandat e mbajtësit EndProcedure

Vini re se mbajtësit e tabelave ndezin klientin dhe për këtë arsye duhet të kenë një komandë të treguesit të përpiluesit

&OnClient

Epo, gjëja e fundit që doja të shtoja është se pas gjithë këtyre hapave, sigurohuni që të mbani mend të kaloni tabelën e përfunduar në atributin e formës:

ValueВFormAttributes(ToR, "ScheduleTable");

Kjo është ajo që kemi si rezultat:


Dhe këtu është trajtimi i ngjarjes "Përzgjedhja":



Pasthënie.

Shpresoj se artikulli do t'i ndihmojë ata programues 1C që kanë filluar të krijojnë tabela në një formë në mënyrë programore.

Ju mund të shkarkoni një përpunim që krijon në mënyrë programore një tabelë vlerash dhe e shfaq atë në një formë të menaxhueshme me komente që do t'ju ndihmojnë të krijoni tabelat tuaja.

Për të llogaritur paratë dhe mallrat, tabela të ndryshme përdoren gjerësisht në biznes. Pothuajse çdo dokument është një tabelë.

Një tabelë liston mallrat që do të dërgohen nga magazina. Një tabelë tjetër tregon detyrimet për të paguar për këto mallra.

Prandaj, në 1C, puna me tabela zë një vend të spikatur.

Tabelat në 1C quhen gjithashtu "pjesë tabelare". Drejtoritë, dokumentet dhe të tjerët i kanë ato.

Pyetja, kur ekzekutohet, kthen një tabelë që mund të aksesohet në dy mënyra të ndryshme.

Zgjedhja e parë - më e shpejtë - marrja e rreshtave prej saj është e mundur vetëm në rregull. E dyta është ngarkimi i rezultatit të pyetjes në një tabelë vlerash dhe më pas aksesi i rastësishëm në të.

//Opsioni 1 – akses sekuencial në rezultatet e pyetjeve

//merr tabelën
Zgjidh = Query.Run().Select();
// kalojmë nëpër të gjitha rreshtat e rezultatit të pyetjes me radhë
Ndërsa Select.Next() Loop
Raporti (Përzgjedhja. Emri);
Cikli i Fundit;

//Opsioni 2 - ngarkimi në një tabelë vlerash
Kërkesë = Kërkesë e re ("SELECT Emri FROM Directory.Nomenklature");
//merr tabelën
Tabela = Query.Run().Shkarko().
//më tej ne gjithashtu mund të përsërisim nëpër të gjitha rreshtat
Për çdo rresht nga cikli i tabelës
Raporti (String.Emri);
Cikli i Fundit;
//ose qasje arbitrare në vargjet
Rreshti = Tabela.Gjeni("Lopata", "Emri");

Një veçori e rëndësishme është se në tabelën që merret nga rezultati i pyetjes, të gjitha kolonat do të shtypen në mënyrë strikte. Kjo do të thotë që duke kërkuar fushën Emri nga drejtoria e Nomenklaturës, do të merrni një kolonë të llojit String me gjatësi të lejueshme jo më shumë se N karaktere.

Tabela në formular (klient i trashë)

Përdoruesi punon me tabelën kur vendoset në formular.

Diskutuam për parimet bazë të punës me formularët në orën e mësimit dhe në atë

Pra, le ta vendosim tabelën në formular. Për ta bërë këtë, mund ta tërhiqni tabelën nga paneli i Kontrolleve. Në mënyrë të ngjashme, mund të zgjidhni Form/Insert Control nga menyja.

Të dhënat mund të ruhen në konfigurim - atëherë duhet të zgjidhni pjesën tabelare ekzistuese (të shtuar më parë) të objektit të konfigurimit, formën e të cilit po redaktoni.

Klikoni butonin "..." në pronën Data. Për të parë listën e pjesëve tabelare, duhet të zgjeroni degën Object.

Kur zgjidhni pjesën tabelare, vetë 1C do të shtojë kolona në tabelën në formular. Rreshtat e futura nga përdoruesi në një tabelë të tillë do të ruhen automatikisht së bashku me librin/dokumentin e referencës.

Në të njëjtën veti të dhënash, mund të futni një emër arbitrar dhe të zgjidhni llojin e tabelës së vlerave.

Kjo do të thotë që është zgjedhur një tabelë arbitrare e vlerave. Nuk do të shtojë automatikisht kolona, ​​as nuk do të ruhet automatikisht, por ju mund të bëni çfarë të doni me të.

Duke klikuar me të djathtën në tabelë, mund të shtoni një kolonë. Në vetitë e një kolone, mund të specifikoni emrin e saj (për referencë në kodin 1C), titullin e kolonës në formular, lidhjen me atributin e pjesës tabelare (kjo e fundit - nëse nuk zgjidhet një tabelë arbitrare, por një pjesa tabelare).

Në vetitë e tabelës në formular, mund të specifikoni nëse përdoruesi mund të shtojë/fshijë rreshta. Një formë më e avancuar është kutia e kontrollit "Vetëm Shiko". Këto veti janë të përshtatshme për t'u përdorur për organizimin e tabelave të destinuara për shfaqjen e informacionit, por jo për redaktimin.

Për të menaxhuar tabelën, duhet të shfaqni një panel komandimi në formular. Zgjidhni artikullin e menysë Forma/Insert Control/Command Bar.

Në veçoritë e shiritit të komandës, zgjidhni kutinë e kontrollit "Plotësimi automatik" në mënyrë që butonat në panel të shfaqen automatikisht.

Tabela e formularit (klient i hollë/i menaxhuar)

Në një formë të menaxhuar, këto veprime duken pak më ndryshe. Nëse keni nevojë të vendosni një pjesë tabelare në formular, zgjeroni degën Object dhe tërhiqni një nga pjesët tabelare në të majtë. Kjo eshte e gjitha!

Nëse keni nevojë të vendosni një tabelë vlerash, shtoni një atribut të ri të formës dhe në vetitë e tij specifikoni llojin - tabelën e vlerave.

Për të shtuar kolona, ​​përdorni menunë e klikuar me të djathtën në këtë atribut të formës, zgjidhni Shto kolonën e atributit.

Pastaj tërhiqeni edhe tabelën në të majtë.

Në mënyrë që një tabelë të ketë një shirit komandash, në veçoritë e tabelës, zgjidhni vlerat në seksionin "Përdorimi - pozicioni i shiritit të komandës".

Ngarkimi i një tabele në Excel

Çdo tabelë 1C e vendosur në formular mund të printohet ose ngarkohet në Excel.

Për ta bërë këtë, klikoni me të djathtën në një hapësirë ​​boshe në tabelë dhe zgjidhni List.

Në një klient të menaxhuar (të hollë), veprime të ngjashme mund të kryhen duke përdorur artikullin e menysë Të gjitha veprimet/Lista e ekranit.

Pyetje Krijimi i një kolone tabele me vlera të llojeve të ndryshme në 1C v8
Përgjigju
Kur krijoni një kolonë të tabelës së vlerave, mund të kaloni varg llojesh, dhe ndoshta një lloj specifik. Një grup llojesh përdoret kur duhet të specifikoni disa lloje të ndryshme për një kolonë.

Përdoret për të treguar llojet "objekt i përgjithshëm" - "Përshkrimi i llojeve". Prandaj, së pari do të shpjegojmë se çfarë është "Përshkrimi i llojeve" ("Përshkrimi i llojeve të vlerave").

"Përshkrimi i llojeve të vlerave". Për të përshkruar llojet e pranueshme të vlerave të pronave të objekteve të ndryshme në sistem, përdoret një objekt i veçantë "Përshkrimi i llojeve". Duke përdorur këtë objekt, ju mund të përshkruani llojet e vlefshme të vlerave që mund t'u caktohen pronave. Për të kufizuar më tej vlerat e mundshme të llojeve primitive Number, String dhe Date janë dhënë kualifikueset. Kualifikuesit përshkruajnë parametra të tillë si gjatësia e një vargu ose numri, pjesët e vlefshme të një date, etj.

Sintaksa e metodës "Përshkrimi i llojit".

Llojet e reja të përshkrimit (<Исходное описание типов>, <Добавляемые типы>, <Вычитаемые типы>, <Квалификаторы числа>, <Квалификаторы строки>, <Квалификаторы даты>)
Opsione:
<Исходное описание типов> (opsionale)
Lloji: Përshkrimi Llojet. Përshkrimi fillestar i llojeve, mbi bazën e të cilit do të ndërtohet një e re.
<Добавляемые типы> (opsionale)
Lloji: Array, String. Një grup vlerash tipi Një lloj i përbërë nga llojet që do të përdoren në objekt, ose një varg që përmban emrat e llojeve të ndara me presje.
<Вычитаемые типы> (opsionale)
Lloji: Array, String. Një grup vlerash të tipit (ose një varg që përmban emra tipash të ndarë me presje) që përbëhet nga llojet që do të përjashtohen nga deklarata fillestare e specifikuar në parametrin e parë.
<Квалификаторы числа> (opsionale)
Lloji: KualifikuesitNumrat. Kualifikuesit e numrave që përshkruajnë vlera të vlefshme të një lloji numerik.
<Квалификаторы строки> (opsionale)
Lloji: QualifiersStrings. Kualifikuesit e vargut që përshkruajnë vlera të vlefshme të një lloji vargu.
<Квалификаторы даты> (opsionale)
Lloji: QualifiersData. Kualifikuesit e datës që përshkruajnë vlera të vlefshme të llojit të datës.
Përshkrim:
Krijon një përshkrim tipi bazuar në përshkrimin e një lloji tjetër, duke shtuar disa lloje dhe duke përjashtuar të tjerët. Nëse nuk specifikohet një kualifikues i ri, kualifikuesit e deklaratës së tipit origjinal do të mbahen.
Një shembull i përdorimit të objektit "Përshkrimi i llojit":

// zgjeroni përshkrimin e Llojeve të vlefshme me lloje të reja Array = Array i ri; Array. Shto(Lloji( "Lidhja e referencës. Metodat")); Array. Add(Type ("Numër" )); Shenja = ValidSign. Jo negative; QuNumbers = Numbers Numbers (10, 2, Sign); ValidTypes = NewTypeDescription(ValidTypes, Array, KvNumbers);
Tani, në fakt, shembuj të krijimit të saktë të vlerave të kolonave të llojeve të ndryshme në një tabelë.

Në përgjithësi, mjafton të përcaktohen llojet e kolonave si më poshtë:

TK. Kolonat. Shto( "Indeksi i renditjes", Përshkrim i ri Llojet ( "Numri" ) ; TK. Kolonat. Add("SectionName", New TypeDescription("String") ); TK. Kolonat. Add("DataCorr" , New TypeDescription("Data") ); TK. Kolonat. Shto( "Fshirja e pakushtëzuar", New TypeDescription ("Boolean")); TK. Kolonat. Add("Nomenklatura" , New TypeDescription() ); TK. Kolonat. Add("SectionData", New TypeDescription("Struktura")); // shembull i krijimit të kolonave "numri" dhe "string" me sqarimin e parametrave: TK. Kolonat. Shto( "Përqindja e përfunduar", Përshkrim i ri Llojet ( "Numri" , Kualifikuesit e rinjNumrat ( 18 , 2 ) ) ; TK. Kolonat. Add("SectionName" , NewTypeDescription("String" , , NewStringQualifiers(200, AllowedLength. Variable) ) ; TK. Kolonat. Add("DecommissionedDate" , NewTypeDescription("Date" , , , NewDateQualifiers(DateParts.DateTime) ) ;

Megjithatë, në përgjithësi, një grup kalohet si lloji i kolonës. Një grup përdoret kur disa lloje duhet të caktohen në një kolonë. Atëherë përkufizimi i strukturës do të jetë diçka e tillë (janë dhënë shembuj për lloje të ndryshme kolonash, kur lloji është një grup, por për thjeshtësi, përbërja e grupit është dhënë i të njëjtit lloj, për të mos u ngatërruar )

////// formimi i strukturës së specifikimeve teknike (krijimi i kolonave) //// përcaktojnë kualifikuesit për zëvendësim në fushat kualifikuese të specifikimit teknik CN = Numrat e Kualifikuesve të Rinj (18, 9); KS = NewStringQualifiers(200); CD = NewDateQualifiers (DataParts.DateTime) ; //// përcaktoni përshkrimet e tipit për kolonat e ardhshme TK // Një grup është përshkrimi fillestar i llojeve, në bazë të të cilit do të ndërtohet një i ri // Ju lutemi vini re se për kolonat TK përshkrimi fillestar i llojit në këtë shembull është një grup Array = Array i ri; Array. Add(Type("String") ); TypeDescriptionString = New TypeDescription(Array, , KS) ; Array. Qartë() ; Array. Add(Type("Numër") ); TypeDescriptionNumber = New TypeDescription(Array, , , CN) ; Array. Qartë() ; Array. Add(Type("Data") ); DescriptionTypesDate = Përshkrimi i riTypes(Array, , , , CD) ; Array. Qartë() ; Array. Shto(Lloji( "DirectoryLink.Nomenklatura")) ; Lloji PërshkrimiNomenklatura = Lloji i ri Përshkrimi (Array) ; Array. Qartë() ; Array. Shto(Lloji( "DirectoryLink.SeriesNomenklature")) ; TypeDescriptionSeries = New TypeDescription(Array) ; Array. Qartë() ; Array. Shto(Lloji( "DirectoryLink.Quality")) ; TypeDescriptionQuality = New TypeDescription(Array) ; Array. Qartë() ; Array. Add(Type("Boolean") ); TypeDescriptionBoolean = New TypeDescription(Array) ; // në fakt duke shtuar kolona në TK (duke krijuar strukturën e TK-së së ardhshme) TK. Kolonat. Add("Nomenklatura", Përshkrim LlojetNomenklatura) ; TK. Kolonat. Add("Kodi" , TypeDescriptionString) ; TK. Kolonat. Shto( "Nomenklatura e serisë", PërshkrimiTypesSeries); TK. Kolonat. Add("Kodi i Llogarisë", Lloji DescriptionString) ; TK. Kolonat. Add("ActionDate" , TypeDescriptionDate) ; TK. Kolonat. Add("Cilësia" , TypeDescriptionQuality) ; TK. Kolonat. Add("NumberUS", PërshkrimiTypesNumber) ; TK. Kolonat. Add("Write off", TypeDescriptionBoolean); . . . //////// formimi i strukturës së specifikimeve teknike (krijimi i kolonave) ////////////////////////////////////////////////////////

Për të shtuar një rresht në një tabelë vlerash, shihni