Ahenda väärtuste tabelit 1s 8.3. Millised meetodid on olemas ja kuidas otsida mitut väärtust korraga

Alustuseks väike fakt – lihtsad näited väärtustabeliga töötamise kohta:

1. Koostage väärtuste tabel

ValueTable = Uus väärtustabel;


2. Loo väärtuste tabeli veerud:

ValueTable.Columns.Add("Nimi");
Väärtuste tabel.Veerud.Add("Perenimi");


3. Lisage veergude nimede abil uusi ridu:


NewLine.Name = "Vassili";
NewLine.LastName = "Pupkin";


4. Kuidas väärtuste tabelist väärtust otsida?
On vaja leida soovitud väärtust sisaldav tabeli rida.

FoundRow = ValueTable.Find(SearchValue);


5. Leidke väärtuste tabeli teatud veergudes esimene esinemine

FoundRow = ValueTable.Find(SearchValue, "Tarnija, Ostja");


6. Kui teil on vaja väärtuste tabelist leida kõik esinemised:
Kasutame otsingustruktuuri.

SearchStructure = Structure("Töötaja", SearchValue);
Array of FoundRows = ValueTable.FindRows(SearchStructure);


Loome otsingustruktuuri, mille iga element sisaldab võtmena veeru nime ja väärtusena selles veerus soovitud väärtust. Edastame otsingustruktuuri parameetrina FindLines() meetodile. Selle tulemusena saame tabeli read.
Kui lisada otsingustruktuurile soovitud väärtuse otsing näiteks ka veerus Vastutaja, siis FindLines() meetodi rakendamise tulemusena saame kõik read, kus nii Töötaja kui ka Vastutaja on võrdsed otsitud väärtus.

7. Kuidas korrata väärtuste tabelit juhuslikus järjekorras

Iga praeguse rea jaoks väärtuste tabelist
Aruanne(praegune rida.Nimi);
EndCycle;

Sama asi indeksite kasutamisel:

SeniorIndex = ValueTable.Quantity() - 1;
Konto jaoks = 0 kuni SeniorIndex Cycle
Aruanne(tabeliväärtused[konto].Nimi);
EndCycle;


8. Olemasoleva väärtustabeli rea kustutamine

ValueTable.Delete(Kustutatav rida);

indeksi järgi

ValueTable.Delete(0);


9. Väärtuste tabeli olemasoleva veeru kustutamine

ValueTable.Columns.Delete(VeergKustutatud);


indeksi järgi

ValueTable.Columns.Delete(0);

Tuleb arvestada, et väärtuste tabeli rea (või veeru) "keskelt" kustutamine toob kaasa "pärast" kustutamist asuvate ridade indeksite vähenemise ühe võrra.

10. Kuidas täita väärtuste tabelit, kui veergude nimed sisalduvad muutujates?

UusRida = ValueTable.Add();
UusRida[VeeruNimi] = Väärtus;


11. Kuidas täita kogu väärtustabeli veerg soovitud väärtusega?
Väärtuste tabeli väärtuste tabeli veerg Fiscal Accounting Flag tuleb täita väärtusega False

Väärtuste tabel, täitke väärtused (vale, "Fiskaalarvestuse lipp");


Väärtuste tabeli jaoks kasutame meetodit FillValues(). Esimene parameeter on täidetav väärtus. Teine parameeter on täidetava veeru nimi.

12. Kuidas saab väärtustabelit “Receiver Table” täita väärtuste tabeli “SourceTable” andmetega?

Kui adressaatide tabelit toimingu tegemise ajal veel ei eksisteeri või selle eelmisi veerge pole vaja salvestada, saate selle luua originaali täieliku koopiana

Saaja tabel = Source table.Copy();


Variant kaks: tabel ReceiverTable on olemas ja kahju oleks kaotada selle veerud ja veergude andmetüüpide piirangud. Kuid peate täitma veergude andmed, mille nimed ühtivad lähtetabeli nimedega.

Osaline andmeedastus vastavate nimedega veergude jaoks:

SourceTable tsükli iga lähtetabeli rea jaoks
FillPropertyValues(NewRow, SourceTableRow);
Tsükli lõpp


Iga lähtetabeli rea jaoks lisatakse vastuvõtvasse tabelisse uus rida ja väärtused täidetakse uue tabeli veergudes, mille nimed ühtivad lähtetabeli veergude nimedega

Kui tabelites ei ole sama nimega veerge, sisaldab sihttabel sama palju nullväärtustega ridu, kui oli lähtetabelis.
Kui mõne samanimelise veeru puhul ei kuulu lähtetabeli andmeväärtuse tüüp sihttabeli lubatud veerutüüpide massiivi, saame sellistel väljadel tühjad väärtused.
Vaatleme kolmandat juhtumit. Samanimeliste veergude puhul tuleb sihttabeli veerg viia täielikult vastavusse lähtetabeli veeruga.

Andmete täielik kopeerimine sobivate nimedega veergude jaoks

Samad veerud = Uus massiiv();

Iga allikatabeli veeru jaoks.Veerutsükkel
Sobivusveerg = Tabelivastuvõtja.Veerud.Leia(veerg.Nimi);

Kui sobib veerg<>Määratlemata Siis

// Hangi veeru atribuudid.
Nimi = Veerg.Nimi;
ValueType = Column.ValueType;
Päis = Veerg.Päis;
Laius = veerg.laius;

// Asendage veerud sihttabelis.
Indeks = tabelivastuvõtja.veerud.indeks(Sobiv veerg);

TabelReceiver.Veerud.Kustuta(Indeks);
ReceiverTable.Columns.Insert(indeks, nimi, väärtuse tüüp, päis, laius);

// Lisage massiivile järgmised sobivate veergude nimed.
Samad veerud.Lisa(Veerg.Nimi);

endIf;

EndCycle;

// Lähtetabeli ridade läbimine.
SourceTable tsükli iga SourceTable rea jaoks

// Lisa sihttabelisse uus rida.
UusRida = TableReceiver.Add();

// Täitke vastavates lahtrites olevad väärtused.
Iga nime veerud samanimelistest veergudest Tsükkel
UusRida[VeeruNimi] = AllikatabelRida[VeeruNimi];

EndCycle;

EndCycle;


Peame sihttabeli veeru asendama uuega, mille omadused vastavad täielikult lähtetabeli veerule.
Seega, kui adressaatide tabelist leitakse samanimeline veerg, kogume kõik uue veeru omadused muutujatena. Järgmisena kustutage vana ja looge uus veerg. Seejärel vaatame läbi lähtetabeli read.
Tingis lisame vastuvõtvasse tabelisse uue rea ja avame vastavate veergude massiivi veergude nimede kohal tsükli.
Selle pesastatud tsükli sees täidame sihttabeli lahtrid lähtetabeli lahtri andmetega.

13. Kuidas lisada väärtuste tabelisse "ValueTable" veerge tüübipiirangutega?

Veeru lisamisel saad lihtsalt määrata selle nime ja jätta meetodi Add() teise parameetri puutumata. Sel juhul on veeru andmetüüp suvaline.

Veeru lisamine andmetüüpi määramata

// Lisage veerg ilma tüübipiiranguteta.
ValueTable.Columns.Add("Objekt");


Saate sisestada teise parameetri väärtuse. Seal peate edastama veeru jaoks lubatud tüübi kirjelduse. Kirjelduse enda saab hankida konstruktori abil, edastades sellele parameetrina tüübi stringi nime (kui tüüpe on palju, eraldades komadega) või kehtivate tüüpide massiivi.

Andmetüüpi näitava veeru lisamine

// Veeru andmetüüpide piirangud:
// Ainult kataloogi "Counterparties" elemendid.
Väärtuste tabel.Veerud.Add("Konto", Uus tüüpide kirjeldus("DirectoryLink.Accounts"));


Kui veeruandmete täitmiseks lubatud tüüpide hulgas on string, saate piirata selle biti sügavust (pikkust), määrata muutuva või fikseeritud pikkuse kasutamise. Kõik see saavutatakse objekti loomisega String Qualifiers konstruktori abil. Järgmisena kasutatakse seda objekti TypeDescription konstruktori ühe parameetrina.

Kvalifitseerijate kasutamine väärtustabeli veeru andmetüübi määramiseks

// String tüüpi andmete ettevalmistamine ja piirangute seadmine.
Stringi kvalifikatsioonid = New String Qualifiers(20, AllowedLength.Variable);
ValidTypes = NewTypeDescription("String", StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Sarnaseid toiminguid saab teha ka numbri- ja kuupäevakvalifitseerijate puhul.
Pange tähele: tüübikirjeldused saab ehitaja koostada kas "nullist" või võtta aluseks olemasoleva tüübikirjelduse.

Olemasolevate tüübideklaratsioonide kasutamine väärtustabeli veeru andmetüübi määramiseks

// Varem kasutatud tüübikirjelduse laiendus.
QualifiersNumbers = New QualifiersNumbers(10, 2, ValidSign.Non-negative);
DateQualifiers = Uued Kuupäevakvalifitseerijad(Kuupäevaosad.Kuupäev);
Extended ValidTypes = New TypeDescription(ValidTypes, "Number, Date", Number Qualifiers, Date Qualifiers);

ValueTable.Columns.Add("Märkus", ExtendedAcceptableTypes);

Raha ja kaupade arvestuseks kasutatakse ettevõtluses laialdaselt erinevaid tabeleid. Peaaegu iga dokument on tabel.

Ühes tabelis on kirjas kaubad, mis laost välja saadetakse. Teine tabel näitab nende kaupade eest tasumise kohustusi.

Seetõttu on 1C-s tabelitega töötamine silmapaistval kohal.

1C tabeleid nimetatakse ka "tabeliosadeks". Kataloogidel, dokumentidel ja muul on need olemas.

Päring tagastab täitmisel tabeli, millele pääseb juurde kahel erineval viisil.

Esimene - kiirem - valik, sellest ridade saamine on võimalik ainult järjekorras. Teine on päringutulemuse üleslaadimine väärtuste tabelisse ja seejärel juhuslik juurdepääs sellele.

//Valik 1 – järjestikune juurdepääs päringu tulemustele

//võta tabel kätte
Select = Query.Run().Select();
// käime läbi kõik päringutulemuse read järjekorras
Kuigi Select.Next() Loop
Aruanne(Valik.Nimi);
EndCycle;

//Valik 2 – väärtuste tabelisse üleslaadimine
Request = New Request("SELECT nimi kataloogist.Nomenklatuur");
//võta tabel kätte
Tabel = Query.Run().Unload().
//Edasi saame ka itereerida läbi kõik read
Tabelitsükli iga rea ​​jaoks
Aruanne(String.Nimi);
EndCycle;
//või suvalise juurdepääsu stringidele
Rida = Tabel.Leia("Kühvel", "Nimi");

Oluline omadus on see, et päringu tulemusest saadud tabelis on kõik veerud rangelt trükitud. See tähendab, et taotledes Nomenklatuuri kataloogist välja Nimi, saate veeru kujul String, mille lubatud pikkus ei ületa N tähemärki.

Tabel vormil (paks klient)

Kasutaja töötab tabeliga, kui see on vormile paigutatud.

Vormiga töötamise põhiprintsiipe arutasime edasi- ja edasitunnis

Niisiis, paneme tabeli vormile. Selleks saate tabelit juhtpaneelilt lohistada. Samamoodi saate valida menüüst Vorm/Insert Control.

Andmeid saab konfiguratsioonis salvestada – siis tuleb valida konfiguratsiooniobjekti olemasolev (varem lisatud) tabeliosa, mille vormi redigeerite.

Klõpsake atribuudis Andmed nuppu "...". Tabeliosade loendi nägemiseks peate laiendama objekti haru.

Kui valite tabeliosa, lisab 1C ise vormi tabelisse veerud. Kasutaja poolt sellisesse tabelisse sisestatud read salvestatakse automaatselt koos teatmeraamatu/dokumendiga.

Samas atribuudis Andmed saate sisestada suvalise nime ja valida väärtustabeli tüübi.

See tähendab, et valitud on suvaline väärtuste tabel. See ei lisa automaatselt veerge ega salvestata seda automaatselt, kuid saate sellega teha, mida soovite.

Tabelil paremklõpsates saate veeru lisada. Veeru atribuutides saate määrata selle nime (viitmiseks 1C koodis), vormi veeru pealkirja, seose tabeliosa atribuudiga (viimane - kui pole valitud suvalist tabelit, vaid tabeliosa).

Vormi tabeli atribuutides saate määrata, kas kasutaja saab ridu lisada/kustutada. Täpsem vorm on märkeruut Ainult kuva. Neid atribuute on mugav kasutada teabe kuvamiseks, kuid mitte redigeerimiseks mõeldud tabelite korraldamiseks.

Tabeli haldamiseks peate vormil kuvama käsupaneeli. Valige menüükäsk Vorm/Insert Control/Command Bar.

Märkige käsuriba atribuutides ruut Automaattäide, et paneeli nupud ilmuksid automaatselt.

Tabel vormil (õhuke/hallatud klient)

Hallatud vormil näevad need toimingud veidi teistsugused välja. Kui teil on vaja vormile asetada tabeliosa, laiendage haru Objekt ja lohistage üks tabeliosadest vasakule. See on kõik!

Kui teil on vaja paigutada väärtuste tabel, lisage uus vormi atribuut ja määrake selle atribuutides tüüp – väärtuste tabel.

Veergude lisamiseks kasutage sellel vormiatribuudil paremklõpsu menüüd ja valige Lisa atribuudi veerg.

Seejärel lohistage tabel ka vasakule.

Selleks, et tabelil oleks käsuriba, valige tabeli atribuutide alt väärtused jaotises Kasutus – Käsuriba asukoht.

Tabeli üleslaadimine Excelisse

Mis tahes vormil asuvat 1C tabelit saab printida või Excelisse üles laadida.

Selleks paremklõpsake tabelis tühjal kohal ja valige loend.

Hallatavas (õhukeses) kliendis saab sarnaseid toiminguid teha kasutades menüükäsku Kõik toimingud/Kuvaloend.

Otsige 1C väärtuste tabelist

Millised meetodid on olemas ja kuidas otsida mitut väärtust korraga.

Väärtuste tabeli otsimiseks on kaks erimeetodit:

1. Leia

TVHorizon = Directories.Nomenclature.FindByName("TVHorizon");
FoundString = TZNomenklatuur.Leia(TVHorizon);
//saame ka määrata, millistest veergudest otsida, et otsingut kiirendada
FoundString = TZNomenklatuur.Find(TVHorizon, "Nomenklatuur");

See meetod tagastab esimese leitud rea soovitud väärtusega või määramata, kui see seda ei leia. Seetõttu on seda mugav kasutada unikaalsete väärtuste otsimiseks, sest vastasel juhul, kui väärtus on leitud, peate selle järgmise leidmiseks tabelist eemaldama.

Selle probleemi vältimiseks on järgmine meetod, mis võimaldab teil leida sobivate stringide massiivi.

2. FindStrings


Valiku struktuur.Insert("Nomenklatuur", TVHorizon); // kõigepealt märkige veerg, kust otsida, ja seejärel, mida otsida.

See meetod tagastab alati massiivi, kuid kui midagi ei leita, võib see olla tühi. Ja see meetod, nagu ka eelmine, tagastab väärtuste tabeli read ise, mitte väärtused ise eraldi massiivina. Seega, muutes väärtusi massiivi stringis või, nagu eelmises meetodis, leitud stringi jaoks, muudate väärtust töödeldud väärtuste tabelis.

Teine hea asi selle meetodi juures on see, et see suudab otsida väärtustabeli mitmest veerust korraga:


SelectionStructure = Uus struktuur;
Valiku struktuur.Insert("Nomenklatuur", TVHorizon);
Valiku struktuur.Insert("Kogus", 10);
FoundArray of Rows = TZNomenklatuur.FindLines(SelectionStructure);

Ainus negatiivne, nagu näete, on see, et te ei saa kasutada muid võrdlustüüpe peale "võrdne"