Vērtību tabula ir īpašs universāls objekts, kas paredzēts datu glabāšanai tabulas veidā. Galvenā atšķirība starp tabulu un lietojumprogrammu objektiem ir saistību trūkums ar fiziskām datu bāzes tabulām. Vērtību tabula pastāv tikai RAM, kas, no vienas puses, sniedz unikālas iespējas, un, no otras puses, uzliek noteiktus ierobežojumus. Tomēr mijiedarbības iespējas ar tabulu ir salīdzināmas ar mijiedarbību ar objektiem, kas faktiski pastāv datu bāzē.
Vēsturiski 1C vērtību tabulai ir divējāds mērķis, jo tā ir esošo tabulu virtuāls analogs, bet tajā pašā laikā tas ir arī vadības elements. Pārejot uz pārvaldītu lietojumprogrammu, liela daļa šīs funkcionalitātes ir novecojusi, taču šodien tā joprojām var būt lietotāja interfeisa elements, taču ar dažiem būtiskiem ierobežojumiem.
Vērtību tabulas rekvizītus nosaka divu iepriekš definētu kolekciju kombinācijas: tās kolonnas un rindas.
Vērtību tabulas kolonna ir tās noteicošais īpašums. Tā ir tabulas kolonnu kopa, kas nosaka tās struktūru. Kolonnas atbilst fizisko tabulu vai kolonnu laukiem, kas pazīstami no tabulas sadaļas vai dokumentu žurnāla lietotāja saskarnes. Kolonnai var būt iekšējais nosaukums, vērtības veids un virsraksts, kas tiek parādīts, interaktīvi strādājot ar tabulu.
Tā kā kolonnas ir objektu kolekcija, varat pievienot, dzēst un rediģēt kolonnas.
No viedokļa programmatūras interfeiss, rindas ir atsevišķa kolekcija, kas iegulta vērtību tabulā. Tie ir analogi ierakstiem fiziskajās tabulās, tas ir, rindām, kas lietotājam ir pazīstamas tabulas sadaļā vai dokumentu žurnālā. Katra atsevišķa rinda ir objekts ar nosauktu rekvizītu kopu, kuru nosaukumi atbilst tabulas kolonnu nosaukumiem.
Tādējādi mijiedarbība ar virkni ir ļoti līdzīga mijiedarbībai ar citiem objektiem. Varat lasīt un rakstīt tā rekvizītus, tostarp izmantojot iepriekš definētu funkciju “FillPropertyValues()”. Tā kā rindas ir galvenā vērtību tabulas kolekcija, metode Clear() tiek izmantota, lai dzēstu visas tabulas rindas.
Ir daudzi veidi, kā sagatavot vērtību tabulu lietošanai. Apskatīsim dažus no tiem. Katrs piemērs tiks sniegts kā kodu saraksts ar komentāriem.
Galvenā metode, kas ļauj izveidot tieši izstrādātājam nepieciešamo tabulu, diemžēl ir darbietilpīgākā, jo tai ir manuāli jānorāda visi nepieciešamie tabulas rekvizīti.
DemoTable = jauna vērtību tabula;ValueType = New TypeDescription("DirectoryLink.Nomenclature"); Title = "Nomenklatūra (produkts)"; DemoTable.Columns.Add(nosaukums, vērtības veids, galvene);
// Iespēja kopēt visas rindas no tehniskās specifikācijas standarta, bet saglabājot tikai divas norādītās Standarta kolonnas = "Nomenklatūra, daudzums"; DemoTabula = TableEtalon.Copy(, ColumnsEtalon);// Opcija ar iepriekš atlasīto rindu kopēšanu no tehniskās specifikācijas standarta, vienlaikus saglabājot divas norādītās standarta kolonnas = SelectIntoArrayThe Rows We Need From the Table of the Standard(); ColumnsStandard = "Nomenklatūra, daudzums"; DemoTabula = TableEtalon.Copy(RowsEtalon, ColumnsEtalon);ColumnsStandard = "Nomenklatūra"; DemoTabula = TableEtalon.Copy(RowsEtalon, ColumnsEtalon);// Opcija ar pilnu tabulas kopiju un sekojošu vienas rindas dzēšanu ar daudzuma lauka vērtību
vienāds ar nulliŠajā īsajā rakstā mēs apskatījām pamatīpašības un praktiskos paņēmienus, lai izveidotu vērtību tabulu, kas ir pietiekama izpratnei un lietošanas sākšanai. Pats vērtību tabulas objekts ir tik daudzšķautņains, ka detalizēts apraksts tās iespējas prasa uzrakstīt atsevišķu rakstu par darba paņēmieniem un metodēm.
Vērtību tabula platformā 1C 8.3 (8.2) ir universāla vērtību kolekcija, ko izstrādātājs var izmantot, kad programmatūras izstrāde lai ieviestu savus algoritmus. Būtībā 1C vērtību tabula ir dinamiska vērtību kopa, kurā ir kolonnas un kolonnas.
Apgūstiet programmēšanu 1C formātā vietā no manas grāmatas “Programmēšana 1C 11 soļos”
Lielisks ceļvedis izstrādātājiem pārvaldītā 1C lietojumprogrammā gan iesācējiem izstrādātājiem, gan pieredzējušiem programmētājiem.
Reklāmas kods 15% atlaidei - 48PVXHeYu
Ja šī nodarbība jums palīdzēja atrisināt kādu problēmu, jums tā patika vai noderēja, tad varat atbalstīt manu projektu, ziedojot jebkuru summu:
Jūs varat maksāt manuāli:
Yandex.Money - 410012882996301
Tīmekļa nauda — R955262494655
Pievienojieties manām grupām.
Ir divas īpašas metodes vērtību tabulas meklēšanai:
Šī metode atgriež pirmo atrasto rindu ar vēlamo vērtību vai Undefined, ja tā to neatrod. Tāpēc to ir ērti izmantot meklēšanai 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:
Šī 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:
Vienīgais negatīvais, kā redzat, ir tas, ka jūs nevarat izmantot citus salīdzināšanas veidus, izņemot “vienāds”.
Š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;
ValueTable.Columns.Add("Nosaukums");
Vērtību tabula.Slejas.Pievienot("Uzvārds");
NewLine.Name = "Vasīlijs";
NewLine.LastName = "Ķirbis";
FoundRow = ValueTable.Find(SearchValue);
FoundRow = ValueTable.Find(SearchValue, "Piegādātājs, Pircējs");
SearchStructure = Structure("Darbinieks", SearchValue);
FoundRows masīvs = ValueTable.FindRows(SearchStructure);
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
Atskaite(Vērtību tabula[Konts].Nosaukums);
EndCycle;
ValueTable.Delete(Dzēšamā rinda);
pēc indeksa
ValueTable.Delete(0);
ValueTable.Columns.Delete(ColumnDeleted);
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;
Vērtību tabula Aizpildiet vērtības (viltus, "fiskālā grāmatvedības karogs");
12. Kā 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();
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
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;
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");
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"));
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);
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);
Sveiciens visiem infostart lasītājiem. Šis raksts būs veltīts 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āparametrē veidlapas vērtību tabula, vai arī tā jāizveido programmatiski (lai aprakstītu, 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āšana.
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 brīdī, kad tiek atvērta forma 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ārada
programmu tabula
vērtības, kas satur datus. 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. Paturiet prātā - tas ir ļoti svarīgi, jo... Šos veidus pārsūtīsim uz veidlapas tabulu.
Mēs izveidojam tabulu, kurā ir vairākas kolonnas:
CD = NewDateQalifiers(DateParts.Time);EndCycle;
Šī ir vienkārša kombinācija, un mūsu galds ir gatavs.
Katrai kolonnai no TK kolonnu cikla
JaunsElements = Elements.Add(Column.Name, Type("FormField"), SelectionFieldTable);EndCycle;
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "ScheduleTable." + Kolonna.nosaukums;
JaunsElements.Platums = 10;
Nosacīts dizains, ja nepieciešams, 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 parāda to kontrolēta forma ar komentāriem, kas palīdzēs jums izveidot savas tabulas.