Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Windows 8
  • 1-të qarkullojnë nëpër tabelën e vlerave. Cilat metoda ekzistojnë dhe si të kërkoni për vlera të shumta në të njëjtën kohë

1-të qarkullojnë nëpër tabelën e vlerave. Cilat metoda ekzistojnë dhe si të kërkoni për vlera të shumta në të njëjtën kohë

Një tabelë vlerash është një objekt specifik gjenerik i krijuar për të ruajtur të dhënat në një pamje tabele. Dallimi kryesor midis një tabele dhe objekteve të aplikacionit është se ai nuk është i lidhur me tabelat fizike të bazës së të dhënave. Tabela e vlerave ekziston vetëm në RAM, e cila, nga njëra anë, ofron mundësi unike, dhe nga ana tjetër, vendos kufizime të caktuara. Megjithatë, mundësitë e ndërveprimit me një tabelë janë të krahasueshme me bashkëveprimin me objektet që ekzistojnë në të vërtetë në bazën e të dhënave.

Historikisht, tabela e vlerave në 1C ka një qëllim të dyfishtë, duke qenë një analog virtual i tabelave ekzistuese, por në të njëjtën kohë - dhe një element kontrolli. Me kalimin në një aplikacion të menaxhuar, pjesa më e madhe e këtij funksioni është zhvlerësuar, por edhe tani ai mund të jetë gjithashtu një element i ndërfaqes së përdoruesit, por me një sërë kufizimesh domethënëse.

Struktura e tabelës së vlerave si objekt

Vetitë e një tabele vlerash përcaktohen nga kombinimet e dy koleksioneve të paracaktuara: kolonat dhe rreshtat e saj.

Tabela e vlerave Kolonat

Kolona e tabelës së vlerave është vetia e saj përcaktuese. Është grupi i kolonave në një tabelë që përcakton strukturën e saj. Kolonat korrespondojnë me fushat në tabelat fizike ose me kolonat e njohura të ndërfaqes së përdoruesit në një seksion tabelor ose regjistër dokumentesh. Një kolonë mund të ketë një emër të brendshëm, një lloj vlere dhe një titull që shfaqet kur ndërvepron me tabelën.

Meqenëse kolonat janë koleksione objektesh, ju mund të shtoni, hiqni dhe modifikoni kolona.

Rreshti i tabelës së vlerave

Nga pikëpamja e ndërfaqes së programit, vargjet janë një koleksion i veçantë i ngulitur në një tabelë vlerash. Ato janë analoge me regjistrimet e tabelave fizike, domethënë rreshtat e një pjese tabelare ose një ditar dokumentesh që janë të njohura për përdoruesin. Çdo rresht individual është një objekt me një grup karakteristikash të emërtuara, emrat e të cilëve korrespondojnë me emrat e kolonave të tabelës.

Kështu, bashkëveprimi me një varg është shumë i ngjashëm me bashkëveprimin me objekte të tjera. Ju mund të lexoni dhe shkruani vetitë e tij, duke përfshirë përdorimin e funksionit të paracaktuar "FillPropertyValues()". Meqenëse rreshtat janë koleksioni kryesor i tabelës së vlerave, metoda "Clear()" përdoret për të fshirë të gjitha rreshtat e tabelës.

Krijo tabelën e vlerave

Ka shumë mënyra për të bërë gati për përdorim një tabelë vlerash. Le të shqyrtojmë disa prej tyre. Çdo shembull do të jepet si lista kodesh me komente.

Krijimi i një tabele me një konstruktor

Metoda kryesore, e cila ju lejon të krijoni saktësisht llojin e tabelës që i nevojitet zhvilluesit, fatkeqësisht kërkon më shumë kohë, pasi kërkon që ju të specifikoni manualisht të gjitha vetitë e nevojshme të tabelës.

DemoTable = New ValueTable; // Para së gjithash, ne inicializojmë TK // Më pas, përcaktojmë parametrat e nevojshëm për kolonat e reja dhe i shtojmë ato në koleksion // Krijimi i kolonës "Nomenklatura" Emri = "Nomenklatura"; ValueType = New TypeDescription("ReferenceReference.Nomenklature"); Titulli = "Nomenklatura (artikull)"; DemoTable.Columns.Add(Name, ValueType, Title); // Krijimi i kolonës "Shuma" Emri = "Shuma"; ValueType = NewTypeDescription("Numri"); DemoTable.Columns.Add(Name, ValueType); // Si rezultat i këtyre manipulimeve, ne kemi krijuar një tabelë boshe me kolona të shtypura // Nëse keni nevojë të përdorni shtypje më të saktë të llojeve primitive, atëherë duhet të përdorni sintaksën e zgjeruar të konstruktorit "TypeDescription".

Krijimi i një tabele duke kopjuar

Nëse keni në dorë një referencë me një strukturë dhe/ose përbërje të përshtatshme, mund të kopjoni ose shkarkoni tabelën e referencës së vlerave. Nëse referenca është një tabelë tjetër, atëherë duhet të aplikoni metodën "Kopjo tabelën e referencës". Nëse keni të bëni me një pjesë tabelare ose një grup rekord regjistrash, duhet të përdorni metodën "Shkarko tabelën e vlerave". Nëse ju nevojitet vetëm struktura, atëherë mund të përdorni metodën "CopyColumns".

// Variant me kopjimin e të gjitha rreshtave nga standardi TK por me ruajtjen e vetëm dy kolonave të specifikuara Kolonat e referencës = "Nomenklatura, sasia"; DemoTable = TableReference.Copy(, ColumnsReference); // Variant me kopjim të rreshtave të zgjedhur paraprakisht nga standardi TK, duke ruajtur dy kolonat e specifikuara. Kolonat e Referencës = "Nomenklatura, Sasia"; DemoTable = TableReference.Copy(Referenca e rreshtave, Referenca e Kolonave); // Opsioni me kopjim të rreshtave nga standardi TK sipas filtrit të specifikuar, duke ruajtur një kolonë "Nomenklatura" // Të gjitha rreshtat do të zgjidhen ku vlera në kolonën Sasia është 0, vetëm kolona e Nomenklaturës do të përfshihet në tabela që rezulton Zgjedhja e rreshtit = Struktura e re ("Sasia" , 0); Kolonat e Referencës = "Nomenklatura"; DemoTable = TableReference.Copy(Referenca e rreshtave, Referenca e Kolonave); // Varianti me kopjimin e plotë të tabelës dhe fshirjen e mëvonshme të një rreshti me vlerën e fushës së sasisë të barabartë me zero dhe fshirjen e të gjithë kolonës "Numër" RowSelection = Struktura e re ("Numri", 0); Kolonat e Referencës = "Nomenklatura"; DemoTable = TableReference.Copy(Referenca e rreshtave, Referenca e Kolonave); TableString = DemoTable.Find(0, "Count"); DemoTable.Delete(TableString); DemoTable.Columns.Delete("Sasia"); // Opsione të ngjashme dhe modifikimet e tyre mund të aplikohen në pjesët e tabelës dhe regjistrat e grupeve të rekordeve

Krijimi i një tabele me një pyetje

Nëse baza e të dhënave ka një shabllon për tabelën që ju nevojitet, atëherë mund të përdorni një pyetje për të krijuar shpejt një tabelë me strukturën e dëshiruar.

// Një shembull i krijimit të një tabele të zbrazët duke ndjekur strukturën e regjistrit të akumulimit // Është e lehtë të merret me mend se në këtë mënyrë mund të merrni edhe tabelën e plotësuar Kërkesë = Kërkesë e re ("SELECT FIRST 0 * Nga Regjistri i Akumulimit. Mallrat në Magazinë "); QueryResult = Query.Execute(); DemoTable = QueryResult.Upload(); // Një shembull me krijimin e një tabele boshe sipas llojeve të specifikuara në mënyrë eksplicite dhe emrave të fushave Query = New Query; Query.Text = "ZGJEDH PARË 0 | Vlera(Catalog.Nomenclature.NullReference) AS Nomenklaturë, | EXPRESS(0 SI NUMRI(15, 3)) SI Sasi"; QueryResult = Query.Execute(); DemoTable = QueryResult.Upload(); // E RËNDËSISHME! Mos harroni se lloji Null është gjithmonë i pranishëm në llojet e vlerave të kolonës të marra nga pyetësori // Kështu, TM e krijuar nga pyetja ka gjithmonë lloje të përbërë kolonash

konkluzioni

Në këtë artikull të shkurtër, ne kemi trajtuar vetitë bazë dhe teknikat praktike për krijimin e një tabele vlerash, të mjaftueshme për të kuptuar dhe filluar përdorimin. Tabela e vlerave të objektit në vetvete është aq e shumëanshme sa që një përshkrim i hollësishëm i aftësive të tij kërkon shkrimin e një artikulli të veçantë mbi teknikat dhe metodat e punës.

Tabela e vlerave në platformën 1C 8.3 (8.2) është një koleksion universal i vlerave që një zhvillues mund të përdorë në zhvillimin e softuerit për të zbatuar algoritmet e tyre. Në fakt, tabela e vlerave 1C është një grup dinamik vlerash që kanë kolona dhe kolona.

Artikuj rreth koleksioneve të tjera universale të vlerave në 1C

Mësoni programimin në 1C në një vend nga libri im "Programi në 1C në 11 hapa"

  1. Libri është shkruar në gjuhë të qartë dhe të thjeshtë - për një fillestar.
  2. Mësoni të kuptoni arkitekturën 1C;
  3. Do të filloni të shkruani kodin në gjuhën 1C;
  4. Të zotërojë teknikat bazë të programimit;
  5. Konsolidoni njohuritë e marra me ndihmën e një libri detyrash;

Një udhëzues i shkëlqyer për zhvillimin në një aplikacion të menaxhuar 1C, si për zhvilluesit fillestarë ashtu edhe për programuesit me përvojë.

  1. Gjuhë shumë e kapshme dhe e kuptueshme
  2. Libri dërgohet me e-mail në format PDF. Mund të hapet në çdo pajisje!
  3. Kuptoni ideologjinë e një aplikacioni të menaxhuar 1C
  4. Mësoni si të zhvilloni një aplikacion të menaxhuar;
  5. Mësoni të zhvilloni forma të menaxhuara 1C;
  6. Ju do të jeni në gjendje të punoni me elementët bazë dhe të nevojshëm të formularëve të menaxhuar
  7. Programimi nën një aplikacion të menaxhuar do të bëhet i qartë

Kodi promovues për një zbritje prej 15% - 48PVXHeYu


Nëse ky mësim ju ndihmoi të zgjidhni ndonjë problem, ju pëlqeu ose ishte i dobishëm, atëherë mund të mbështesni projektin tim duke transferuar çdo shumë:

mund të paguhet manualisht:

Yandex.Money - 410012882996301
Paratë në ueb - R955262494655

Bashkohuni me grupet e mia.

Kërkoni në tabelën e vlerave 1C

Cilat metoda ekzistojnë dhe si të kërkoni për vlera të shumta në të njëjtën kohë.

Ekzistojnë dy metoda të veçanta për të kërkuar një tabelë vlerash:

1. Gjeni

TVHorizon = Directories.Nomenclature.FindBy Name("Horizon TV");
FoundString = TZNomenclature.Find(TVHorizon);
//mund të specifikojmë gjithashtu se në cilat kolona të kërkojmë për të shpejtuar kërkimin
FoundString = TKNomenclature.Find(TVHorizon, "Nomenklature");

Kjo metodë kthen vargun e parë të gjetur me vlerën që po kërkoni, ose të Padefinuar nëse nuk e gjen. Prandaj, është i përshtatshëm për ta përdorur atë për të kërkuar vlera unike, sepse përndryshe, kur të gjeni një vlerë, do të duhet ta fshini atë nga tabela për të gjetur vlerën tjetër.

Për të mos vuajtur kështu, ekziston metoda e mëposhtme, e cila ju lejon të gjeni një grup vargjesh të përshtatshme:

2. FindStrings


Struktura e përzgjedhjes.Insert("Nomenklatura", TVHorizon); // fillimisht specifikojmë kolonën ku të kërkojmë, dhe më pas çfarë të kërkojmë.

Kjo metodë kthen gjithmonë një grup, por ai mund të jetë bosh nëse nuk gjendet asgjë. Dhe kjo metodë, si ajo e mëparshme, kthen vetë rreshtat e tabelës së vlerave, dhe jo vetë vlerat në një grup të veçantë. Prandaj, duke ndryshuar vlerat në rreshtin e grupit ose, si në metodën e mëparshme, për rreshtin e gjetur, do të ndryshoni vlerën në tabelën e përpunuar të vlerave.

Çfarë tjetër është e mirë për këtë metodë është se ajo mund të kërkojë disa kolona të tabelës së vlerave në të njëjtën kohë:


SelectionStructure = Struktura e re;
Struktura e përzgjedhjes.Insert("Nomenklatura", TVHorizon);
Struktura e përzgjedhjes.Insert("Sasia", 10);
FoundStringArray = TKNomenclature.FindStrings(SelectionStructure);

E vetmja negative, siç mund ta shihni, nuk mund të përdorni lloje të tjera krahasimi përveç "të barabartë"

Këtu është një fakt i vogël për të filluar - shembuj të thjeshtë të punës me një tabelë vlerash:

1. Krijoni një tabelë vlerash

ValueTable = New ValueTable;


2. Krijoni kolona të tabelës së vlerave:

ValueTable.Columns.Add("Emri");
ValueTable.Columns.Add("Mbiemri");


3. Shtoni rreshta të rinj duke përdorur emrat e kolonave:


NewString.Name = "Vasily";
NewRow.LastName = "Pupkin";


4. Si të kërkoni një vlerë në tabelën e vlerave:
Është e nevojshme të gjesh një rresht tabele që përmban vlerën e dëshiruar.

FoundString = ValueTable.Find(LookupValue);


5. Gjeni paraqitjen e parë në kolona të caktuara të një tabele vlerash

FoundString = ValueTable.Find(LookupValue, "Furnizuesi, Blerësi");


6. Nëse duhet të gjeni të gjitha dukuritë në tabelën e vlerave:
Ne përdorim strukturën e kërkimit.

SearchStructure = Structure ("Punonjës", LookupValue);
ArrayFoundStrings = ValueTable.FindStrings(Struktura e Kërkimit);


Le të krijojmë një strukturë kërkimi, çdo element i së cilës do të përmbajë emrin e kolonës si çelës dhe vlerën e kërkuar në këtë kolonë si vlerë. Strukturën e kërkimit ia kalojmë si parametër metodës FindStrings(). Si rezultat, marrim rreshtat e tabelës.
Nëse e shtojmë kërkimin për vlerën e dëshiruar në strukturën e kërkimit, për shembull, gjithashtu në kolonën Përgjegjës, atëherë si rezultat i aplikimit të metodës FindRows(), do të marrim të gjitha rreshtat ku të dy Punonjësit dhe Përgjegjësit janë të barabartë me atë të dëshiruar. vlerë.

7. Si të kaloni nëpër një tabelë vlerash në mënyrë të rastësishme

Për çdo CurrentRow nga ValueTable Loop
Raporti(CurrentLine.Emri);
Cikli i Fundit;

Bëni të njëjtën gjë duke përdorur indekset:

SeniorIndex = ValueTable.Count() - 1;
Për MF = 0 sipas Ciklit të Indeksit të Lartë
Raporti(Tabela e vlerës[Numërimi]. Emri);
Cikli i Fundit;


8. Fshirja e një rreshti të tabelës me vlera ekzistuese

ValueTable.Delete(RemoveRow);

sipas indeksit

ValueTable.Delete(0);


9. Fshirja e një kolone ekzistuese të tabelës së vlerave

ValueTable.Columns.Delete(RemoveColumn);


sipas indeksit

ValueTable.Columns.Delete(0);

Duhet të merret parasysh se fshirja e një rreshti (ose kolone) "nga mesi" i tabelës së vlerave do të çojë në një ulje me një nga indekset e rreshtave që ishin "pas" fshirjes.

10. Si të plotësohet tabela e vlerave nëse emrat e kolonave janë të përfshira në variabla?

NewRow = ValueTable.Add();
NewRow[ColumnName] = Vlera;


11. Si të plotësoni të gjithë kolonën e tabelës së vlerave me vlerën e dëshiruar?
Kolona Flamuri i Kontabilitetit Fiskal në tabelën e vlerave të tabelës së vlerave duhet të plotësohet me vlerën False

ValueTable.FillValue(False, "Flamuri i Kontabilitetit Fiskal");


Ne përdorim metodën FillValues() për tabelën e vlerave. Parametri i parë është vlera për të mbushur. Parametri i dytë është emri i kolonës së mbushur.

12. Si të plotësoni tabelën e vlerave "TableRecipient" me të dhënat e tabelës së vlerave "SourceTable"?

Nëse Tabela e Marrësit nuk ekziston ende në kohën e operacionit, ose kolonat e saj të mëparshme nuk kanë nevojë të ruhen, mund ta krijoni atë si një kopje të plotë të origjinalit

TableReceiver = TableOriginal.Copy();


Opsioni i dytë: ekziston tabela TableReceiver dhe është për të ardhur keq të humbasësh kolonat dhe kufizimet e saj në llojet e të dhënave të kolonave. Por ju duhet të plotësoni të dhënat për kolonat, emrat e të cilëve përputhen me emrat e tabelës burimore.

Transferimi i pjesshëm i të dhënave për kolonat me emra që përputhen:

Për çdo rresht të SourceTable nga SourceTable Loop
FillPropertyValues ​​(NewString, SourceTableString);
Cikli i Fundit


Për çdo rresht të tabelës së burimit, një rresht i ri shtohet në tabelën e destinacionit dhe vlerat plotësohen në ato kolona të tabelës së re, emrat e të cilëve përputhen me emrat e kolonave në tabelën burimore.

Nëse tabelat nuk kanë kolona me të njëjtin emër, tabela e destinacionit do të përfundojë me aq rreshta me vlera null sa ka pasur rreshta në tabelën burimore.
Nëse për disa kolona me të njëjtin emër, lloji i vlerës së të dhënave nga tabela burimore nuk bie në grupin e llojeve të lejuara të kolonës së tabelës së destinacionit, do të marrim vlera boshe në fusha të tilla.
Le të shqyrtojmë rastin e tretë. Në rastin e kolonave me të njëjtin emër, kolona e tabelës së destinacionit duhet të jetë në përputhje të plotë me kolonën e tabelës burimore.

Kopjimi i plotë i të dhënave për kolonat me emra që përputhen

SimilarColumns = New Array();

Për çdo kolonë nga SourceTable.Columns Loop
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

Nëse përputhet Kolona<>E padefinuar Pastaj

// Merrni vetitë e kolonës.
Emri = Kolona.Emri;
ValueType = Column.ValueType;
Titulli = Kolona.Titulli;
Gjerësia = Kolona.Gjerësia;

// Zëvendësoni kolonat në tabelën e destinacionit.
Index = TableReceiver.Columns.Index(CoincidentColumn);

TableReceiver.Columns.Delete(Index);
TableReceiver.Columns.Insert(Indeksi, Emri, Vlera Lloji, Titulli, Gjerësia);

// Shtoni emrin tjetër të kolonave që përputhen në grup.
Same-nameColumns.Add(Column.Name);

FundNëse;

Cikli i Fundit;

// Kaloni nëpër rreshtat e tabelës burimore.
Për çdo rresht të SourceTable Nga SourceTable Loop

// Shtoni një rresht të ri në tabelën e destinacionit.
NewString = TableReceiver.Add();

// Plotësoni vlerat në qelizat që përputhen.
Për çdo NameColumns Of Same NameColumns Loop
NewString[Emri i kolonës] = SourceTableString[Emri i kolonës];

Cikli i Fundit;

Cikli i Fundit;


Ne do të duhet të zëvendësojmë kolonën në tabelën e destinacionit me një të re, vetitë e së cilës do të përputhen plotësisht me kolonën e tabelës burimore.
Prandaj, nëse një kolonë me të njëjtin emër gjendet në tabelën e marrësit, ne mbledhim në variabla të gjitha vetitë për kolonën e re. Më pas, fshini të vjetrën dhe krijoni një kolonë të re. Pastaj kalojmë nëpër rreshtat e tabelës burimore.
Në ciklin, ne shtojmë një rresht të ri në tabelën e marrësit dhe hapim një lak përmes emrave të kolonave në grupin e kolonave që përputhen.
Brenda këtij cikli të mbivendosur, ne mbushim qelizat e tabelës së marrësit me të dhënat e qelizës së tabelës burimore.

13. Si të shtoni kolona në tabelën e vlerave "Tabela e vlerave" me kufizime të llojit?

Kur shtoni një kolonë, thjesht mund të specifikoni emrin e saj dhe mos prekni parametrin e dytë të metodës Add(). Në këtë rast, lloji i të dhënave të kolonës është arbitrar.

Shtimi i një kolone pa specifikuar një lloj të dhënash

// Shtoni një kolonë pa kufizime të llojit.
ValueTable.Columns.Add("Objekt");


Ju mund të plotësoni vlerën e parametrit të dytë. Është e nevojshme të kaloni një përshkrim të llojit të lejuar për kolonën atje. Vetë përshkrimi mund të merret duke përdorur konstruktorin, duke kaluar emrin e vargut të llojit si parametër (nëse ka shumë lloje, atëherë ndahen me presje) ose një grup llojesh të vlefshme.

Shtimi i një kolone që specifikon llojin e të dhënave

// Kufizimet në llojet e të dhënave të kolonës:
// Vetëm elementë të drejtorisë "Contractors".
ValueTable.Columns.Add("Llogaria", New TypeDescription("ReferenceReference.Accounts"));


Nëse ka një varg midis llojeve të lejuara për plotësimin e të dhënave të kolonës, mund të kufizoni thellësinë e bitit (gjatësinë), të specifikoni përdorimin e një gjatësie të ndryshueshme ose fikse. E gjithë kjo sigurohet duke krijuar një objekt duke përdorur konstruktorin StringQualifiers. Më tej, ky objekt do të përdoret si një nga parametrat e konstruktorit TypeDescription.

Përdorimi i kualifikuesve për të specifikuar llojin e të dhënave të një kolone të tabelës së vlerave

// Përgatitja dhe vendosja e kufijve për të dhënat e tipit String.
Kualifikuesit e vargut = Kualifikuesit e ri të vargut (20, ValidLength.Variable);
AllowedTypes = NewTypeDescription("String",StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Ju mund të bëni të njëjtën gjë për kualifikuesit e numrave dhe datave.
Ju lutemi vini re: përshkrimi i llojit mund të ndërtohet nga konstruktori si "nga e para", dhe ju mund të përdorni një përshkrim ekzistues të llojit si bazë

Përdorimi i deklaratave ekzistuese të tipit për të specifikuar llojin e të dhënave të një kolone të tabelës së vlerave

// Zgjerimi i përshkrimit të përdorur më parë të llojeve.
Number Qualifiers = Number Qualifiers (10, 2, ValidSign.Jo-negative);
DateQualifiers = New DateQualifiers(DateParts.Date);
ExtendedValidTypes = NewTypeDescription(ValidTypes, "Number, Date",NumberQualifiers,DateQualifiers);

ValueTable.Columns.Add("Shënim", ExtendedAllowedTypes);

Artikujt kryesorë të lidhur