1c atlasiet vērtību tabulas rindas pēc nosacījuma. Ir svarīgi nekad nejaukt objekta īpašību un objekta metodi

Naudas un preču uzskaitei biznesā plaši tiek izmantotas dažādas tabulas. Gandrīz katrs dokuments ir tabula.

Vienā tabulā ir norādītas preces, kas jānosūta no noliktavas. Citā tabulā norādītas saistības maksāt par šīm precēm.

Tāpēc 1C darbs ar galdiem ieņem ievērojamu vietu.

1C tabulas tiek sauktas arī par “tabulu daļām”. Tādi ir direktoriji, dokumenti un citi.

Vaicājums, kad tas tiek izpildīts, atgriež tabulu, kurai var piekļūt divos dažādos veidos.

Pirmā - ātrāka - atlase, rindu iegūšana no tās iespējama tikai secībā. Otrais ir vaicājuma rezultāta augšupielāde vērtību tabulā un pēc tam nejauša piekļuve tai.

//1. iespēja – secīga piekļuve vaicājuma rezultātiem

//iegūstiet tabulu
Select = Query.Run().Select();
// mēs izejam visas vaicājuma rezultāta rindas secībā
Kamēr Select.Next() Loop
Atskaite(Atlase.Vārds);
EndCycle;

//Opcija 2 – augšupielāde vērtību tabulā
Pieprasījums = New Request("SELECT Name FROM Directory.Nomenclature");
//iegūstiet tabulu
Tabula = Query.Run().Unload().
//tālāk mēs varam arī atkārtot visas rindas
Katrai rindai no tabulas cikla
Report(String.Name);
EndCycle;
//vai patvaļīgi piekļūt virknēm
Rinda = tabula.Atrast("Lāpsta", "Vārds");

Svarīga iezīme ir tā, ka tabulā, kas iegūta no vaicājuma rezultāta, visas kolonnas tiks stingri drukātas. Tas nozīmē, ka, pieprasot Nomenklatūras direktorijā lauku Nosaukums, jūs saņemsiet String tipa kolonnu ar pieļaujamo garumu ne vairāk kā N rakstzīmes.

Tabula uz veidlapas (biezs klients)

Lietotājs strādā ar tabulu, kad tā ir novietota uz veidlapas.

Darbā ar formām pamatprincipus apspriedām nodarbībā un nodarbībā tālāk

Tātad, novietosim tabulu uz veidlapas. Lai to izdarītu, varat vilkt tabulu no vadības paneļa. Tāpat izvēlnē varat atlasīt Form/Insert Control.

Datus var glabāt konfigurācijā – tad jāizvēlas esošā (iepriekš pievienotā) tabulas daļa konfigurācijas objektam, kura formu rediģējat.

Datu rekvizītā noklikšķiniet uz pogas "...". Lai redzētu sarakstu tabulas daļas, jums ir jāpaplašina objekta filiāle.

Atlasot tabulas daļu, 1C pati pievienos kolonnas veidlapas tabulai. Rindas, ko lietotājs ievadījis šādā tabulā, tiks automātiski saglabātas kopā ar atsauces grāmatu/dokumentu.

Tajā pašā datu rekvizītā varat ievadīt patvaļīgu nosaukumu un atlasīt vērtību tabulas veidu.

Tas nozīmē, ka ir izvēlēta patvaļīga vērtību tabula. Tas automātiski nepievienos kolonnas, kā arī netiks automātiski saglabāts, taču jūs varat ar to darīt visu, ko vēlaties.

Ar peles labo pogu noklikšķinot uz tabulas, varat pievienot kolonnu. Kolonnas rekvizītos varat norādīt tās nosaukumu (atsaucei 1C kodā), veidlapas kolonnas virsrakstu, savienojumu ar tabulas daļas atribūtu (pēdējais - ja nav atlasīta patvaļīga tabula, bet gan tabulas daļa).

Veidlapas tabulas rekvizītos varat norādīt, vai lietotājs var pievienot/dzēst rindas. Izvērstāka veidlapa ir izvēles rūtiņa Tikai skats. Šos rekvizītus ir ērti izmantot tabulu kārtošanai, kas paredzētas informācijas attēlošanai, bet ne rediģēšanai.

Lai pārvaldītu tabulu, veidlapā ir jāparāda komandu panelis. Atlasiet izvēlnes vienumu Form/Insert Control/Command Bar.

Komandjoslas rekvizītos atzīmējiet izvēles rūtiņu Automātiskā aizpilde, lai paneļa pogas tiktu parādītas automātiski.

Veidlapas tabula (plāns/pārvaldīts klients)

Pārvaldītā veidlapā šīs darbības izskatās nedaudz savādāk. Ja veidlapā ir jāievieto tabulas daļa, izvērsiet zaru Objekts un velciet vienu no tabulas daļām pa kreisi. Tas ir viss!

Ja nepieciešams ievietot vērtību tabulu, pievienojiet jaunu formas atribūtu un tā rekvizītos norādiet veidu – vērtību tabula.

Lai pievienotu kolonnas, izmantojiet labās pogas izvēlni uz šī formas atribūta un atlasiet Pievienot atribūta kolonnu.

Pēc tam arī velciet tabulu pa kreisi.

Lai tabulai būtu komandjosla, tabulas rekvizītos atlasiet vērtības sadaļā Lietošana – Komandjoslas pozīcija.

Tabulas augšupielāde programmā Excel

Jebkuru 1C tabulu, kas atrodas veidlapā, var izdrukāt vai augšupielādēt programmā Excel.

Lai to izdarītu, ar peles labo pogu noklikšķiniet uz brīva vieta tabulā un atlasiet Saraksts.

Pārvaldītā (plānā) klientā līdzīgas darbības var veikt, izmantojot izvēlnes vienumu Visas darbības/Displeja saraksts.

Ir divas īpašas metodes vērtību tabulas meklēšanai:

1. Atrast

TVHorizon = Directories.Nomenclature.FindByName("TVHorizon");
FoundString = TZNomenklatūra.Atrast(TVHorizon);
//varam arī norādīt, kurās kolonnās meklēt, lai paātrinātu meklēšanu
FoundString = TZNomenklatūra.Atrast(TVHorizon, "Nomenklatūra");

Šī metode atgriež pirmo atrasto rindu ar vēlamo vērtību vai Undefined, ja tā to neatrod. Tāpēc ir ērti to izmantot, lai meklētu unikālas vērtības, jo pretējā gadījumā, kad vērtība ir atrasta, tā būs jānoņem no tabulas, lai atrastu nākamo.

Lai izvairītos no šīm problēmām, ir šāda metode, kas ļauj atrast atbilstošu virkņu masīvu:

2. FindStrings


Atlases struktūra.Insert("Nomenklatūra", TVHorizon); // vispirms norādiet kolonnu, kur meklēt, un pēc tam, ko meklēt.

Šī metode vienmēr atgriež masīvu, taču, ja nekas netiek atrasts, tas var būt tukšs. Un šī metode, tāpat kā iepriekšējā, atgriež pašas vērtību tabulas rindas, nevis pašas vērtības atsevišķā masīvā. Tāpēc, mainot vērtības masīva virknē vai, tāpat kā iepriekšējā metodē, atrastajai virknei, jūs mainīsit vērtību apstrādātajā vērtību tabulā.

Vēl viena šīs metodes priekšrocība ir tā, ka tā var vienlaikus meklēt vairākās vērtību tabulas kolonnās:


SelectionStructure = jauna struktūra;
Atlases struktūra.Insert("Nomenklatūra", TVHorizon);
Atlases struktūra.Insert("Daudzums", 10);
FoundArray of Rows = TZNomenclature.FindLines(SelectionStructure);

Vienīgais negatīvais, kā redzat, ir tas, ka jūs nevarat izmantot citus salīdzināšanas veidus, izņemot “vienāds”.

Publicēts 2011. gada 21. septembrī

Vērtību tabula 1C – 3.daļa. Metadati. Pārlūkot vērtību tabulas kolonnas

Šajā rakstā es jums pastāstīšu, kā strādāt ar “nezināmas” struktūras vērtību tabulu, kā atkārtot vērtību tabulas kolonnas, kā iegūt datus no kolonnām un rindām, neizmantojot kolonnu nosaukumus. (Šis raksts pieder rakstu sērijai 1C no nulles; 1C programmēšana no nulles; 1C vērtību tabula)

Lai izskaidrotu materiālu un varētu izmantot mūsu piemērus programmas kods"tiešraidē", mums vajag dažus vērtību testa tabula 1C. Daži no mūsu piemēriem izgūs datus no vērtību tabulas, tāpēc mēs izveidosim tabulu ar trim kolonnām “Uzvārds”, “Vārds”, “Vidais vārds” un ievadīsim tajā nelielu datu apjomu - pat 3. rindas :)

Tātad, izveidosim 1C vērtību testa tabulu un aizpildīsim to:

MyTZ = jauna vērtību tabula; // izveidot jaunu vērtību tabulu, kas saglabāta mainīgajā "MyTZ" MyTZ.Columns.Add("Last Name"); // izveidot kolonnu "Uzvārds" MyTZ.Columns.Add("Nosaukums"); // izveidot kolonnu "Nosaukums" MyTZ.Columns.Add("Patronymic"); // izveidojiet kolonnu "Vidējais nosaukums" // pievienojiet pirmo rindu mūsu vērtību tabulai NewLine = MyTZ.Add(); NewString.LastName = "Čapajevs"; NewLine.Name = "Vasīlijs"; NewString.Middle name = "Ivanovičs"; // pievieno otro rindiņu NewLine = MyTZ.Add(); NewString.LastName = "Dzeržinskis"; NewRow.Name = "Fēlikss"; NewString.Middle name = "Edmundovičs"; // pievienot trešo rindiņu NewLine = MyTZ.Add(); NewLine.LastName = "Kotovskis"; NewLine.Name = "Gregorijs"; NewString.Middle name = "Ivanovičs";

Mūsu pārbaudes tabula sastāv no trim kolonnām: Vārds, Uzvārds, Patronīms; un tajā ir trīs aizpildītas rindas ar pilsoņu kara varoņu vārdiem.

Pirmais koda paraugs ir 1C vērtību tabulas kolonnu uzskaitīšana kā kolekcija.

// parādīt visu TK kolonnu nosaukumus katrai kolonnai no MyTZ.Columns cikla atskaites("Slejas nosaukums: " + Kolonnas.Nosaukums); EndCycle;

Mūsu cikls 1C ziņojuma logā parādīs visus kolonnu nosaukumus:

Kolonnas nosaukums: Uzvārds Kolonnas nosaukums: Vārds Kolonnas nosaukums: Otrais vārds

Mēs redzam, ka kolonnu atkārtošanai tiek izmantots īpašs kolekcijas iterācijas cikls, kas ir līdzīgs rindu iterācijas ciklam (iepriekšējā rakstā). MansTK.Slejas- šī ir 1C vērtību tabulas kolonnu kolekcija "MyTZ". Kolekcijā ir šāda veida objekti "Vērtību tabulas kolonna" Katrs šāda veida objekts ir vērtību tabulas kolonna, un tajā ir rekvizīti un metodes. Piekļūstot šīm īpašībām un metodēm, mēs iegūstam nepieciešamo informāciju par vienu kolonnu vai veicam ar to kādas citas darbības.

Piemēram, piekļūstot īpašumam "Vārds" (Kolonna.Vārds) mēs iegūstam pašreizējās kolonnas nosaukumu.

Vēlos vērst jūsu uzmanību uz seriāla nosaukumu: “Visiem Kolonna No MyTZ.Column Cycle" Mainīgais ar nosaukumu "Kolonna" mūsu izdomāts. Nav nepieciešams lietot vienu un to pašu nosaukumu. Piemēram, varat saukt šo mainīgo jebko, kas jums patīk "Mana pašreizējā kolonna" Tad iepriekš minētais piemērs izskatītos šādi:

// parādīt visu TK kolonnu nosaukumus katrai MyCurrentColumn no MyTK.Columns cikla atskaites("Slejas nosaukums: " + ManaPašreizējāSleja.Nosaukums); EndCycle;

Kad 1C izpildes apakšsistēma saskaras ar šāda veida ciklu, katrā cikla gājienā tā piešķir mainīgo ar norādītais vārds viens elements no mūsu kolekcijas, šajā gadījumā - viens kolekcijas elements vērtību tabulas kolonnas MansTK.Slejas Un tad mēs piekļūstam mainīgajam, kas satur pašreizējo kolonnu, un izmantojam īpašumu "Vārds".

Es ierosinu blakus kolonnas nosaukumam parādīt katras kolonnas numuru kolonnu kolekcijā:

// parāda visu vērtību tabulas kolonnu numurus un nosaukumus katrai kolonnai no MyTZ.Columns Cycle ColumnNumber = MyTZ.Columns.Index(Column); // iegūt kolonnas numuru ColumnName = Column.Name; // iegūt kolonnas nosaukumu Report("Slejas numurs:" + Kolonnas numurs + " Kolonnas nosaukums: " + Kolonnas nosaukums); EndCycle;

1C ziņojuma logā tiks parādīts šāds teksts:

Kolonnas numurs:0 Kolonnas nosaukums: Uzvārds Ailes numurs:1 Kolonnas nosaukums: Vārds Kolonnas numurs:2 Kolonnas nosaukums: Otrais nosaukums

Lūdzu, ņemiet vērā, ka 1C vērtību tabulas kolonnas ir numurētas, sākot no nulles, tāpat kā vērtību tabulas rindas.

Kolonnu skaits 1C vērtību tabulā

Lai uzzinātu kolonnu skaitu vērtību tabulā, mēs izmantojam metodi "Count()" kolonnu kolekcijā.

Kolonnu skaits = MyTZ.Columns.Quantity(); Pārskats (kolonnu skaits);

Ekrānā tiks parādīts skaitlis "3". Patiešām, mūsu tabulā ir trīs slejas: "Uzvārds", "Vārds", "Patronims"

Kolonnas objekta iegūšana pēc tā numura (indeksa) un kolonnu uzskaitīšana, izmantojot kolonnu indeksu

Izveidosim ciklu, kurā tiek meklētas visas vērtību tabulas kolonnas, izmantojot kolonnu indeksus (skaitļus). Atcerieties, ka kolonnu numerācija sākas no nulles. Tāpēc mums ir jāpalielina cikla skaitītājs “Sch” no nulles līdz skaitlim, kas vienāds ar kolonnu skaitu mīnus viens.

Kontam = 0 pēc MyTZ.Columns.Quantity() - 1 cikls CurrentColumn = MyTZ.Columns[Act]; Pārskats(Pašreizējā kolonna.Nosaukums); EndCycle;

Ekrānā mēs redzēsim sekojošo

Pilnais vārds

Es domāju, ka šis piemērs bija skaidrs. Mēs pievērsāmies metodei Daudzums () kolonnu kolekcijas" MyTZ.Columns.Quantity()", ieguva kolonnu skaitu un sāka cilpu ar skaitītāju no nulle pirms tam kolonnu skaits mīnus viens. Cilpas iekšpusē mēs iegūstam katru kolonnu no kolonnu kolekcijas un piešķiram pašreizējās kolonnas objektu mainīgajam Pašreizējā kolonna Tālāk mainīgais Pašreizējā kolonna piekļūstam īpašumam Vārds un parādīt šī īpašuma vērtību ekrānā: Pārskats(Pašreizējā kolonna.Nosaukums);

Ir svarīgi nekad nejaukt objekta īpašību un objekta metodi.

Rekvizīts ir noteikta statiska vērtība, un piekļuve tai tiek rakstīta, piemēram, bez iekavām Pašreizējā kolonna.Nosaukums. Metode būtībā ir objekta procedūra vai funkcija, un procedūru un funkciju izsaukumi vienmēr tiek rakstīti ar iekavām (pat ja nav ievades parametru). Piemēram: MyTZ.Columns.Quantity()

Ja piekļūstam kādai metodei un aizmirstam ierakstīt iekavas, 1C tulks parādīs kļūdas ziņojumu un nepalaiž kodu. Tā kā tulks uzskatīs, ka mēs piekļūstam nevis metodei, bet īpašībai - jo nav iekavas. Bet tas nevarēs atrast rekvizītus ar šādu nosaukumu (jo ir tikai metode ar šādu nosaukumu) - tas tiks norādīts kļūdas ziņojumā.

To rakstīs tulks, ja metodes izsaukumā aizmirsīšu ievietot iekavas tik nepareizā veidā MansTZ.Slejas.Daudzums(bez iekavām aiz "Daudzums()"):

Objekta lauks nav atrasts (daudzums)

Šajā gadījumā “lauks” un “īpašums” ir jāsaprot kā sinonīmi vai neprecizitāte 1C izstrādātāju terminoloģijā. Viņi izmanto abus šos vārdus, lai atsauktos uz vienu un to pašu jēdzienu. Lai gan citās programmēšanas valodās šie termini var nozīmēt dažādas lietas.

Datu iegūšana no 1C vērtību tabulas, izmantojot kolonnu numurus

Sākumā es piedāvāju vienkāršu piemēru datu iegūšanai no mūsu tabulas pirmās rindas. Lūdzu, ņemiet vērā, ka mēs izmantojam iepriekš aizpildīto tabulu no raksta sākuma. Mēs noteikti zinām, ka tabulā ir pirmā rinda un vismaz viena kolonna. Ja izmantosim šo piemēru tukšai tabulai, radīsies kļūda. Tātad:

FirstLine = MyTK; // iegūt pirmo rindu (numurētu no nulles) FirstColumnValue = FirstRow; // iegūt pirmās kolonnas vērtību (kolonnu numerācija arī ir no nulles) Report(Value of the FirstColumn); // parāda pirmās kolonnas vērtību tabulas pirmajā rindā

Ekrānā tiks parādīts:

Čapajevs

Pirmkārt, mēs ieguvām vērtību tabulas rindas objektu, piekļūstot vērtību tabulai, izmantojot [...] operatoru. (ja esat aizmirsis, kā to izdarīt, varat apskatīt iepriekšējos rakstus) Mēs nodevām argumentu “0” operatora iekšpusē. Šis ir vērtību tabulas pirmās rindas indekss. FirstLine = MyTK;

Turklāt mums ir arī tiesības piekļūt virknes objektam, izmantojot [...] operatoru. Šī operatora iekšpusē mēs nodevām vērtību tabulas kolonnas numuru, šajā gadījumā arī “0”. Tādējādi mēs saņēmām kolonnas vērtību "0" pašreizējai tabulas rindai ar numuru "0". Mēs parādījām šo vērtību ekrānā, un tā apzīmē virkni “Chapaev”.

Nedaudz sarežģīsim mūsu piemēru:

FirstLine = MyTK; // iegūt pirmo rindiņu (numurētu no nulles) Report(FirstLine); // parāda pirmās kolonnas vērtību tabulas pirmajā rindā Report(FirstRow); // parādīt otrās kolonnas vērtību tabulas pirmajā rindā Report(FirstRow); // parāda trešās kolonnas vērtību tabulas pirmajā rindā

Tagad mēs esam parādījuši vērtības no visām trim mūsu vērtību tabulas pirmās rindas kolonnām:

Čapajevs Vasilijs Ivanovičs

Tagad es arī modificēšu šo piemēru, lai mēs varētu iztikt bez mainīgā "Pirmā līnija"

Pārskats (MyTZ); // parāda pirmās kolonnas vērtību tabulas pirmajā rindā Report(MyTZ); // parādīt otrās kolonnas vērtību tabulas pirmajā rindā Report(MyTZ); // parāda trešās kolonnas vērtību tabulas pirmajā rindā

Tas pats būs uz ekrāna

Čapajevs Vasilijs Ivanovičs

Iepriekš redzamajā piemērā mēs redzējām, ka, lai piekļūtu vērtībai, kas atrodas noteiktā rindā un vērtību tabulas noteiktā kolonnā, mēs varam izmantot divu operatoru secīgu izsaukumu [...] šādā formā: Vērtību tabula[Rindas indekss][Slejas indekss]

Tātad, mēs esam gatavi izveidot cilpu un iegūt visu rindu un visu kolonnu datus, izmantojot rindu un kolonnu indeksus:

Rindu skaitītājs = 0 pēc MyTZ.Quantity() - 1 cilpa // cikls pa rindām ColumnCounter = 0 pēc MyTZ.Columns.Quantity() - 1 cilpa // ligzdots cilpa caur kolonnām // iegūstiet šūnas vērtību (no pašreizējās rindas un pašreizējās kolonnas) CellValue = MyTK[RowCounter][ColumnCounter]; // parāda rindas numuru, kolonnas numuru un šūnas vērtību Report("Rindas numurs" + Rindu skaits + "kolonnas Nr" + Kolonnu skaits + " = " + ŠūnasVērtība); EndCycle; EndCycle;

Ekrānā tiks parādīts sekojošais:

Rindas Nr. 0 kolonna Nr. 0 = Čapajeva līnija Nr. 0 kolonna Nr. 1 = Vasilija līnija Nr. 0 kolonna Nr. 2 = Ivanoviča rinda Nr. 1 kolonna Nr. 0 = Dzeržinska līnija Nr. 1 kolonna Nr. 1 = Fēlikss Rindas Nr. 1 kolonna Nr. 2 = Edmundoviča rinda Nr. 2 kolonna Nr. 0 = Kotovska līnija Nr. 2 kolonna Nr. 1 = Grigorijs Rinda Nr. 2 kolonna Nr. 2 = Ivanovičs

Izmantojot divus ciklus, no kuriem viens ir ligzdots otrā, mēs parādījām visu kolonnu vērtības no visām 1C vērtību tabulas rindām. Šajā gadījumā mēs neizmantojām kolonnu nosaukumus, bet piekļuvām kolonnām un rindām pēc to indeksiem. Lai iegūtu labāku izpratni, pievērsiet uzmanību komentāriem piemērā.

Noslēgumā es ierosinu nedaudz mainīt mūsu piemēru, lai kolonnu numuru vietā ekrānā tiktu parādīti to vārdi. Turklāt es izveidošu reprezentatīvāku dizainu satura parādīšanai ekrānā.

For LineCounter = 0 By MyTZ.Quantity() - 1 Cikls // cilpa cauri rindām Report(" ======= Rindas Nr. " + LineCounter + " ======="); Ziņot(" "); // rindas padeve (ievietojiet tukša rinda) For ColumnCounter = 0 By MyTZ.Columns.Quantity() - 1 Loop // ligzdots cilpa cauri kolonnām // iegūst šūnas vērtību (no pašreizējās rindas un pašreizējās kolonnas) CellValue = MyTZ[RowCounter][ColumnCounter]; // iegūstiet kolonnas nosaukumu ColumnName = MyTZ.Columns[ColumnCounter].Name; // parādīt kolonnas nosaukumu un šūnas vērtību Report(ColumnName + ": " + CellValue); EndCycle; Ziņot(" "); // rindas padeve (tukšas rindas ievietošana) EndCycle;

Tagad mūsu ekrānā informācija sāka izskatīties reprezentatīvāka:

Rinda Nr. 0 ======= Uzvārds: Čapajevs Vārds: Vasilijs Patronīms: Ivanovičs ======= Rinda Nr. 1 ======= Uzvārds: Dzeržinskis Vārds: Fēlikss Tēvvārds: Edmundovičs ===== == 2. rinda ======= Uzvārds: Kotovskis Vārds: Grigorijs Tēvvārds: Ivanovičs

Jā, gandrīz aizmirsu. Izmantojot divus [...][...] operatorus rindā, mēs varam nodot šīs kolonnas nosaukumu kolonnas indeksa vietā: Vērtību tabula[Rindas indekss][Slejas nosaukums]

For LineCounter = 0 By MyTZ.Quantity() - 1 Cikls // cilpa cauri rindām Report(" ======= Rindas Nr. " + LineCounter + " ======="); Ziņot(" "); // rindas padeve (ievietojot tukšu rindu) For ColumnCounter = 0 By MyTZ.Columns.Quantity() - 1 Loop // ligzdots cilpa caur kolonnām ColumnName = MyTZ.Columns[ColumnCounter].Name; // iegūt kolonnas nosaukumuCell Value = MyTZ[RowCounter][Slejas nosaukums]; //

Pievērsiet uzmanību līnijai, kas apzīmēta ar bultiņu ". Šajā rindā pašreizējās kolonnas indeksa vietā mēs nododam pašreizējās kolonnas nosaukumu argumentam kvadrātiekavās [...] Rezultāts būs tāds pats.

Un tagad pēdējā lieta šajā rakstā.

PAREIZI iegūt visus datus no 1C vērtību tabulas, izmantojot cilpas, izmantojot rindu kolekciju un kolonnu kolekciju

Katrai CurrentLine From MyTZ Loop // cilpa caur virkņu kolekciju Report(" ======= Rindas Nr. " + MyTZ.Index(CurrentLine) + " ======="); Ziņot(" "); Katrai pašreizējai kolonnai no MyTZ.Columns Loop // ligzdota cilpa, kas atkārtojas caur kolonnu kolekciju ColumnName = CurrentColumn.Name; // iegūt kolonnas nosaukumsCellValue = PašreizējāRinda[SlejasNosaukums]; // iegūt šūnas vērtību BY kolonnas NAME Report(ColumnName + ": " + CellValue); // parāda kolonnas nosaukumu un šūnas vērtību End of Cycle; Ziņot(" "); EndCycle;

Piemērā tika izmantotas divas cilpas. Cilpa, kas paredzēta cilpai cauri kolonnu kolekcijai, ir ligzdota cilpas iekšpusē. Ja esat izskatījis iepriekš minētos piemērus un izlasījis iepriekšējos rakstus, jums nebūs nekādu grūtību saprast, kā šis piemērs darbojas.

Visbeidzot, es pēc iespējas samazināšu koda rindu skaitu mūsu pēdējā piemērā, izslēdzot starpposma mainīgo izmantošanu. Mēs iegūsim "industriālā koda" paraugu, kas tiek izmantots reālās problēmās.

Tas jādara tikai tad, ja jums ir laba izpratne par to, ko jūs darāt. Ja kods ir ļoti sarežģīts, tad ir pieļaujams atstāt starpposma mainīgos, lai vēlāk būtu vieglāk saprast savu kodu. Tāpat jebkurš kods ir jākomentē vismaz minimāli, lai pēc kāda laika būtu vieglāk saprast programmu tekstus.

Katrai pašreizējai līnijai no MyTZ cikla // atkārtojiet rindas Report(" ======= Rindas Nr. " + MyTZ.Index(CurrentLine) + " =======" + Symbols.PS); Katrai pašreizējai kolonnai no MyTZ.Columns Loop // atkārtojiet kolonnas Report(PašreizējāSlejas nosaukums + ": " + PašreizējāRinda[Pašreizējās kolonnas.Nosaukums]); EndCycle; Ziņot(" "); EndCycle;

Izvade uz ekrāna nav mainījusies, tā paliek tāda pati kā iepriekšējā piemērā:

2 NEDĒĻU KURSS

"PROGRAMMĒŠANA 1C IESĀCĒJIEM"

Kurss pienāks līdz e-pasts. Kļūsti par programmētāju, izpildot soli pa solim uzdevumus.

Lai piedalītos, nepieciešams tikai dators un internets

Bezmaksas piekļuve kursam:

Sp-force-hide ( displejs: nav;).sp-forma ( displejs: bloks; fons: #eff2f4; polsterējums: 5 pikseļi; platums: 270 pikseļi; maksimālais platums: 100%; apmales rādiuss: 0px; -moz-border -rādiuss: 0px; -webkit-border-radius: 0px; font-family: Arial, "Helvetica Neue", sans-serif; fona atkārtojums: bez atkārtošanas; fona pozīcija: centrs; fona izmērs: automātisks;) .sp-form ievade ( displejs: inline-block; necaurredzamība: 1; redzamība: redzams;).sp-form .sp-form-fields-wrapper ( margin: 0 auto; platums: 260px;).sp-form .sp -form-control ( fons: #ffffff; apmales krāsa: #cccccc; apmales stils: vienkrāsains; apmales platums: 1px; fonta izmērs: 15 pikseļi; polsterējums pa kreisi: 8,75 pikseļi; polsterējums pa labi: 8,75 pikseļi; apmale -rādiuss: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; augstums: 35px; platums: 100%;).sp-form .sp-field label (krāsa: #444444; font- izmērs: 13 pikseļi; fonta stils: normāls; fonta svars: treknrakstā;).sp-form .sp-button ( border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; fona krāsa: #f4394c; krāsa: #ffffff; platums: 100%; fonta svars: 700; fonta stils: normāls; fontu saime: Arial, "Helvetica Neue", sans-serif; box-ēna: nav; -moz-box-shadow: nav; -webkit-box-shadow: nav; fons: lineārs gradients(uz augšu, #e30d22 , #f77380);).sp-form .sp-button-container (teksta līdzināšana: centrā; platums: automātiski;)

Sveiciens visiem infostart lasītājiem. Šajā rakstā galvenā uzmanība tiks pievērsta jautājumam par pielāgotas vērtību tabulas izveidi pārvaldītas lietojumprogrammas formā programmatiski.

Uzdevuma iezīmes.

Ikviens, kurš ir ieprogrammējis parastā lietojumprogrammā, bieži ir saskāries ar uzdevumu veidlapā iegūt patvaļīgu vērtību tabulu. Patvaļīga vērtību tabula ir tabula, kuras kolonnu skaits un veids nav iepriekš zināms. Tas ir, varētu būt 3 kolonnas vai varbūt 6, vai varbūt 8. Parastā lietojumprogrammā viss ir vienkārši: apstrādes veidlapā varat ievietot elementu "Vērtību tabula" un pēc tam pārsūtīt izveidoto vērtību tabulu ​šim elementam programmatiski. Pēc tam ar vienkāršu komandu:

Form Elements.TableField.CreateColumns();

veidlapā iegūstiet gatavu vērtību tabulu. Šķiet, ka tas varētu būt vienkāršāk.

Tas viss bija parastajā pieteikumā. Pārvaldītā lietojumprogrammā viss ir mainījies. Nav tik vienkārši izveidot patvaļīgu tabulu. Tagad jums ir vai nu stingri jāparametizē veidlapas vērtību tabula, vai arī tā jāizveido programmatiski (aprakstiet, labi, tā patiesībā ir pašas pārvaldītās lietojumprogrammas būtība). Lūk, ko mēs centīsimies darīt: programmatūra izveidot pielāgotu vērtību tabulu pārvaldītā formā.

Problēmas risinājums.

Pirmā lieta, kas mums jādara, ir noteikt, kā tabula tiks parādīta veidlapā. Galvenais ir tas, ka apstrādē nav jāizveido neviens formas elements. Mēs to izveidosim programmatiski, tāpat kā visu tabulu. Tas ir, tabula tiks aprakstīta un izveidota veidlapas atvēršanas brīdī vai izmantojot pogu - atkarībā no tā, kam tā ir nepieciešama.

Tabulas izveide veidlapā notiek, aprakstot vērtību tabulu kā atribūtu:
SelectionTypeArray = jauns masīvs; Array of SelectionType.Add(Type("Vērtību tabula")); ChoiceTypeDescription = Jauns tipa apraksts(ChoiceTypeArray); Detaļu masīvs = New Array; Array of Attributes.Add(New Form Attributes("Grafika tabula", Atlases veida apraksts, "", "TZN")); Tagad mums ir jāizveido programmas vērtību tabula, kurā ir dati. Ja vērtību tabula tiek iegūta no vaicājuma, tad viss ir vairāk vai mazāk kārtībā. Ja tabula ir izveidota manuāli, tad to kolonnu nozīmi, kurās būs skaitļi vai datumi, var izveidot, izmantojot “Tipu aprakstu”. Lieta ir tāda, ka vērtību tabulas kolonnām ir jābūt noteikta veida. Ja, piemēram, ir paredzēts, ka lietotājs šajās kolonnās aizpildīs datus interaktīvi, tad vērtību tabulas kolonnu nevar pievienot vienkārši ar nosaukumu, tai ir jābūt tipam. Paturiet prātā - tas ir ļoti svarīgi, jo... Mēs pārnesim šos veidus uz veidlapas tabulu.
Mēs izveidojam tabulu, kurā ir vairākas kolonnas:
CD = NewDateQalifiers(DateParts.Time); ArrayKD = jauns masīvs; ArrayCD.Add(Tips("Datums")); DescriptionTypesTime = New DescriptionTypes(ArrayCD,CD); TZ = jauna vērtību tabula;
TK.Columns.Add("Ar", AprakstsVeidiLaiks);
TK.Columns.Add("Pirms", AprakstsVeidiLaiks);
TK.Columns.Add("Nosaukums");
TK.Columns.Add("Note"); // Pilns nosaukums un piezīme - rindas Tālāk mēs aizpildīsim mūsu TK programmas tabulu ar nepieciešamajiem datiem. Mēs saņemam TK tabulu, kas satur nepieciešamās vērtības un ir gatava pārsūtīšanai uz izveidoto formas atribūtu. Katrai kolonnai no TK. Kolonnu cikls

Atribūtu masīvs.Pievienot(New Form Attributes(Column.Name, Column.ValueType,"ScheduleTable"));
EndCycle;
ChangeDetails(ArrayDetails);
SelectionFieldsTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldsTable.DataPath = "ScheduleTable";
SelectionFieldTable.Display = TableDisplay.List;

Šī ir vienkārša kombinācija, un mūsu galds ir gatavs.

Katrai kolonnai no TK. Kolonnu cikls

JaunsElements = Elements.Add(Column.Name, Type("FormField"), SelectionFieldTable);
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "ScheduleTable." + Kolonna.nosaukums;
JaunsElements.Platums = 10;
EndCycle;

Nosacīts dizains, ja vajag, rakstām arī manuāli, komandu izvēlni – manuāli. Tabulu apstrādātāji ir rakstīti arī ar roku. Piemēram, lai tabulai “Atlase” pievienotu notikumu apdarinātāju:

Table of SelectionFields.SetAction("Atlase","TZNSelection");

Lai apstrādātu šo notikumu, tiek noteikta atsevišķa procedūra procedūras veidā:

&OnClient
Procedūra TKNSelection (TK, atlasītā rinda, lauks, standarta apstrāde)
//apdarinātāja komandas EndProcedure

Ņemiet vērā, ka tabulu apstrādātāji aktivizē klientu, un tāpēc tiem ir jābūt kompilatora rādītāja komandai

&OnClient

Pēdējais, ko es gribēju piebilst, ir tas, ka pēc visām šīm darbībām neaizmirstiet gatavo tabulu nodot formas atribūtam:

ValueВFormAttributes(ToR, "ScheduleTable");

Rezultātā mums ir šāds:


Un šeit ir pasākuma "Atlase" darbība:



Pēcvārds.

Es ceru, ka raksts palīdzēs tiem 1C programmētājiem, kuri sāk programmatiski veidot tabulas uz veidlapas.

Varat lejupielādēt apstrādi, kas programmatiski izveido vērtību tabulu un izvada to uz kontrolēta forma ar komentāriem, kas palīdzēs jums izveidot savas tabulas.

Šeit ir neliels fakts, ar ko sākt - vienkāršus piemērus strādājot ar vērtību tabulu:

1. Izveidojiet vērtību tabulu

ValueTable = jauna vērtību tabula;


2. Izveidojiet kolonnas vērtību tabulai:

ValueTable.Columns.Add("Nosaukums");
Vērtību tabula.Slejas.Pievienot("Uzvārds");


3. Pievienojiet jaunas rindas, izmantojot kolonnu nosaukumus:


NewLine.Name = "Vasīlijs";
NewLine.LastName = "Ķirbis";


4. Kā vērtību tabulā meklēt vērtību:
Ir jāatrod tabulas rinda, kurā ir vēlamā vērtība.

FoundRow = ValueTable.Find(SearchValue);


5. Atrodiet pirmo gadījumu atsevišķās vērtību tabulas kolonnās

FoundRow = ValueTable.Find(SearchValue, "Piegādātājs, Pircējs");


6. Ja vērtību tabulā jāatrod visi gadījumi:
Mēs izmantojam meklēšanas struktūru.

SearchStructure = Structure("Darbinieks", SearchValue);
FoundRows masīvs = ValueTable.FindRows(SearchStructure);


Izveidosim meklēšanas struktūru, kuras katrs elements kā atslēgu saturēs kolonnas nosaukumu un kā vērtību šajā kolonnā vēlamo vērtību. Mēs nododam meklēšanas struktūru kā parametru metodei FindLines (). Rezultātā mēs iegūstam tabulas rindas.
Ja meklēšanas struktūrai pievienosiet vēlamās vērtības meklēšanu, piemēram, arī kolonnā Atbildīgais, tad FindLines() metodes pielietošanas rezultātā iegūsim visas rindas, kurās gan Darbinieks, gan Atbildīgais ir vienādi ar meklētā vērtība.

7. Kā atkārtot vērtību tabulu nejaušā secībā

Katrai pašreizējai rindai no vērtību tabulas cilpas
Pārskats(PašreizējāRinda.Nosaukums);
EndCycle;

Tas pats, izmantojot indeksus:

SeniorIndex = ValueTable.Daudzums() - 1;
Kontam = 0 līdz SeniorIndex ciklam
Report(TabulasVērtības[Konts].Nosaukums);
EndCycle;


8. Esošas vērtību tabulas rindas dzēšana

ValueTable.Delete(Dzēšamā rinda);

pēc indeksa

ValueTable.Delete(0);


9. Esošas vērtību tabulas kolonnas dzēšana

ValueTable.Columns.Delete(ColumnDeleted);


pēc indeksa

ValueTable.Columns.Delete(0);

Jāņem vērā, ka vērtību tabulas rindas (vai kolonnas) dzēšana “no vidus” novedīs pie to rindu indeksu samazināšanās par vienu, kas atrodas “pēc” izdzēšanas.

10. Kā aizpildīt vērtību tabulu, ja kolonnu nosaukumi ir ietverti mainīgajos?

NewRow = ValueTable.Add();
NewRow[Slejasnosaukums] = Vērtība;


11. Kā aizpildīt visu vērtību tabulas kolonnu ar vēlamo vērtību?
Vērtību tabulas Vērtību tabulas kolonna Fiskālās grāmatvedības karodziņš jāaizpilda ar vērtību False

Vērtību tabula. Aizpildiet vērtības (False, "Fiskālās grāmatvedības karogs");


Vērtību tabulai izmantojam metodi FillValues(). Pirmais parametrs ir aizpildāmā vērtība. Otrais parametrs ir aizpildāmās kolonnas nosaukums.

12. Kā es varu aizpildīt vērtību tabulu “Receiver Table” ar datiem no vērtību tabulas “SourceTable”?

Ja adresātu tabula operācijas laikā vēl nepastāv vai tās iepriekšējās kolonnas nav jāsaglabā, varat to izveidot kā pilnīgu oriģināla kopiju.

Adresātu tabula = Source table.Copy();


Otrais variants: ReceiverTable tabula pastāv, un būtu žēl zaudēt tās kolonnas un ierobežojumus kolonnu datu tipiem. Bet jums ir jāaizpilda dati par kolonnām, kuru nosaukumi atbilst avota tabulas nosaukumiem.

Daļēja datu pārsūtīšana kolonnām ar atbilstošiem nosaukumiem:

Katrai avota tabulas rindai no avota tabulas cikla
FillPropertyValues(NewRow, SourceTableRow);
Cikla beigas


Katrai avota tabulas rindai mērķa tabulai tiek pievienota jauna rinda un tiek aizpildītas vērtības šajās kolonnās. jauns galds, kuru nosaukumi atbilst avota tabulas kolonnu nosaukumiem

Ja tabulās nav kolonnu ar vienādiem nosaukumiem, galamērķa tabulā būs tik daudz rindu ar nulles vērtībām, cik rindu bija avota tabulā.
Ja dažām tāda paša nosaukuma kolonnām datu vērtības tips no avota tabulas neietilpst mērķa tabulas atļauto kolonnu tipu masīvā, mēs iegūsim tukšas vērtības šādos laukos.
Apskatīsim trešo gadījumu. Tāda paša nosaukuma kolonnu gadījumā galamērķa tabulas kolonna ir pilnībā jāsaskaņo ar avota tabulas kolonnu.

Pilnīga datu kopēšana kolonnām ar atbilstošiem nosaukumiem

Tās pašas kolonnas = jauns masīvs();

Katrai kolonnai no avota tabulas. Kolonnu cikls
MatchingColumn = Tabulas uztvērējs.Slejas.Atrast(kolonnas.nosaukums);

Ja atbilst kolonna<>Undefined Tad

// Iegūt kolonnas rekvizītus.
Nosaukums = Column.Name;
ValueType = Column.ValueType;
Header = Kolonna.Galvene;
Platums = Column.Width;

// Aizstāt kolonnas mērķa tabulā.
Index = tabulas uztvērējs.Slejas.Indekss(atbilstošā kolonna);

Tabulas uztvērējs.Slejas.Dzēst(Indekss);
ReceiverTable.Columns.Insert(Index, Name, ValueType, Header, Width);

// Pievienojiet masīvam nākamo atbilstošo kolonnu nosaukumu.
Tās pašas kolonnas.Pievienot(Slejas.Nosaukums);

endIf;

EndCycle;

// Pārvietojieties cauri avota tabulas rindām.
Katrai avota tabulas rindai no cikla Source Table

// Pievienot jauna līnija uz saņemšanas galdu.
NewRow = TableReceiver.Add();

// Ievadiet vērtības atbilstošajās šūnās.
Katram nosaukumam Kolonnas No tāda paša nosaukuma kolonnām Cikls
NewRow[Slejasnosaukums] = Avota tabulaRinda[Slejas nosaukums];

EndCycle;

EndCycle;


Mums būs jāaizstāj kolonna galamērķa tabulā ar jaunu, kuras rekvizīti pilnībā atbildīs avota tabulas kolonnai.
Tāpēc, ja adresātu tabulā tiek atrasta tāda paša nosaukuma kolonna, mēs apkopojam visas jaunās kolonnas rekvizītus mainīgajos. Pēc tam izdzēsiet veco un izveidojiet jaunu kolonnu. Pēc tam mēs cilpu cauri avota tabulas rindām.
Ciklā mēs pievienojam jaunu rindu saņemšanas tabulai un atveram cilpu virs kolonnu nosaukumiem atbilstošo kolonnu masīvā.
Šajā ligzdotajā cilpā mēs aizpildām mērķa tabulas šūnas ar avota tabulas šūnas datiem.

13. Kā vērtību tabulai “ValueTable” pievienot kolonnas ar tipa ierobežojumiem?

Pievienojot kolonnu, varat vienkārši norādīt tās nosaukumu un atstāt neskartu otro Add() metodes parametru. Šajā gadījumā kolonnas datu tips ir patvaļīgs.

Kolonnas pievienošana, nenorādot datu veidu

// Pievienojiet kolonnu bez veida ierobežojumiem.
ValueTable.Columns.Add("Objekts");


Varat ievadīt otrā parametra vērtību. Tur jums jānodod kolonnai atļautā veida apraksts. Pašu aprakstu var iegūt, izmantojot konstruktoru, nododot tam kā parametru tipa virknes nosaukumu (ja ir daudz veidu, atdalot ar komatiem) vai derīgu tipu masīvu.

Kolonnas pievienošana, kas norāda datu veidu

// Ierobežojumi kolonnu datu tipiem:
// Tikai elementi direktorijā "Darījumu partneri".
Vērtību tabula.Columns.Add("Konts", Jauns veidu apraksts("DirectoryLink.Accounts"));


Ja starp kolonnu datu aizpildīšanai atļautajiem veidiem ir virkne, varat ierobežot tās bitu dziļumu (garumu), norādīt mainīga vai fiksēta garuma izmantošanu. Tas viss tiek panākts, izveidojot objektu, izmantojot String Qualifiers konstruktoru. Tālāk šis objekts tiks izmantots kā viens no TypeDescription konstruktora parametriem.

Kvalifikatoru izmantošana, lai norādītu vērtību tabulas kolonnas datu tipu

// Sagatavojiet un iestatiet ierobežojumus String tipa datiem.
String Qualifiers = New String Qualifiers(20, AllowedLength.Variable);
ValidTypes = NewTypeDescription("String", StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Līdzīgas darbības var veikt ar numuru un datuma kvalifikatoriem.
Lūdzu, ņemiet vērā: tipu aprakstus konstruktors var izveidot vai nu “no nulles”, vai par pamatu var izmantot esošu tipa aprakstu.

Esošo tipu deklarāciju izmantošana, lai norādītu vērtību tabulas kolonnas datu tipu

// Iepriekš izmantotā tipa apraksta paplašinājums.
QualifiersNumbers = New QualifiersNumbers(10, 2, ValidSign.Non-negatīvs);
DateQualifiers = New DateQualifiers(DateParts.Date);
Extended ValidTypes = Jauns tipa apraksts(Derīgs tipi, "Numurs, Datums", Numuru apzīmētāji, Datuma kvalifikatori);

ValueTable.Columns.Add("Piezīme", ExtendedAcceptableTypes);