1s 8.3 struktūru vērtību tabulai

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 tabulas daļu sarakstu, ir jāpaplašina zars Objekts.

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 tukšas vietas 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.

Sveiciens visiem infostart lasītājiem. Šis raksts būs veltīts jautājumam par patvaļīgas vērtību tabulas izveidi pārvaldītas lietojumprogrammas formātā 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). Mēs centīsimies to darīt: programmatiski izveidot patvaļīgu vērtību tabulu kontrolē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 programmatiska 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 parāda to pārvaldāmā formā ar komentāriem, kas palīdzēs jums izveidot savas tabulas.

Šeit ir neliels fakts iesākumam — vienkārši piemēri darbam 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 saņemšanas tabulai tiek pievienota jauna rinda, un vērtības tiek aizpildītas tajās jaunās tabulas kolonnās, kuru nosaukumi sakrīt ar 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

// Pievienojiet jaunu rindu mērķa tabulai.
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);

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”.