1c voeg een tabel met waarden toe. Welke methoden zijn er en hoe kunt u tegelijkertijd naar verschillende waarden zoeken

Hier is een klein feit om te beginnen - eenvoudige voorbeelden van het werken met een tabel met waarden:

1. Maak een tabel met waarden

WaardenTabel = Nieuwe WaardenTabel;


2. Maak kolommen van de tabel met waarden:

ValuesTable.Columns.Add ("Naam");
ValuesTable.Columns.Add ("Achternaam");


3. Voeg nieuwe regels toe met kolomnamen:


NewStroka.Name = "Vasily";
NewStroka.Surname = "Pupkin";


4. Zo zoekt u naar een waarde in een waardentabel:
Het is noodzakelijk om de tabelrij te vinden die de vereiste waarde bevat.

FoundString = ValueTable.Find (LookupValue);


5. Zoek de eerste instantie in specifieke kolommen van de tabel met waarden

FoundString = ValueTable.Find (SearchValue, "Leverancier, Koper");


6. Als u alle exemplaren in de tabel met waarden wilt vinden:
We gebruiken de zoekstructuur.

SearchStructure = Structuur ("Werknemer", LookupValue);
ArrayFoundStrings = ValueTable.FindStrings (SearchStructure);


Laten we een zoekstructuur maken, waarvan elk element de naam van een kolom als sleutel en de gewenste waarde in deze kolom als waarde zal bevatten. We geven de SearchStructure als parameter door aan de methode FindStrings (). Als resultaat krijgen we de rijen van de tabel.
Als u een zoekopdracht naar de vereiste waarde toevoegt aan de zoekstructuur, bijvoorbeeld in de kolom Verantwoordelijke, krijgen we als resultaat van het gebruik van de methode FindStrings () alle rijen waarin zowel de werknemer als de verantwoordelijke gelijk zijn aan de Gewenste waarde.

7. Hoe een tabel met waarden in willekeurige volgorde te herhalen?

Voor elke huidige regel uit de waardetabellus
Rapport (CurrentString.Name);
Einde van cyclus;

Hetzelfde met indexen:

MajorIndex = ValueTable.Quantity () - 1;
Voor MF = 0 tot hoge indexcyclus:
Rapport (TableValues ​​​​[Count] .Name);
Einde van cyclus;


8. Een bestaande rij van de tabel met waarden verwijderen

ValuesTable.Delete (DeletedString);

op index

WaardenTabel.Verwijderen (0);


9. Een bestaande kolom van de tabel met waarden verwijderen

ValuesTable.Columns.Remove (DeletedColumn);


op index

WaardenTabel.Kolommen.Verwijderen (0);

Houd er rekening mee dat het verwijderen van een rij (of kolom) "uit het midden" van de tabel met waarden zal leiden tot een afname met één in de indices van de rijen die "na" de verwijderde waren

10. Hoe de tabel met waarden invullen als de kolomnamen in variabelen staan?

NewRow = ValuesTable.Add ();
NewString [Kolomnaam] = Waarde;


11. Hoe de hele kolom van de tabel met waarden vullen met de vereiste waarde?
Kolom FiscalAccount Vlag in de tabel met waardenValuesTable moet worden gevuld met de waarde False

ValuesTable.FillValues ​​​​(False, "FiscalAccounting Flag");


Pas de methode FillValues ​​​​() toe op de tabel met waarden. De eerste parameter is de waarde die moet worden ingevuld. De tweede parameter is de naam van de te vullen kolom.

12. Hoe de tabel met waarden "RecipientTable" vullen met de gegevens van de tabel met waarden "BronTable"?

Als de ontvangerstabel nog niet bestaat op het moment van de bewerking of als de vorige kolommen niet hoeven te worden opgeslagen, kunt u deze maken als een volledige kopie van het origineel

ReceiverTable = SourceTable.Copy ();


Optie twee: de tabel TableRecipient bestaat, en het is jammer dat de kolommen en beperkingen op de gegevenstypen van de kolommen verloren gaan. Maar u moet de gegevens voor de kolommen invullen, waarvan de namen samenvallen met de namen van de brontabel.

Gedeeltelijke gegevensoverdracht voor kolommen met overeenkomende namen:

Voor elke SourceTable-rij van SourceTable-lus
FillPropertyValues ​​​​(NewRow, SourceTableRow);
Einde cyclus


Voor elke rij van de brontabel wordt een nieuwe rij toegevoegd aan de ontvangende tabel en worden de waarden ingevuld in die kolommen van de nieuwe tabel, waarvan de namen samenvallen met de namen van de kolommen in de originele tabel.

Als de tabellen geen kolommen met dezelfde namen hebben, bevat de secundaire tabel evenveel rijen met lege waarden als de rijen in de brontabel.
Als voor sommige kolommen met dezelfde naam het gegevenswaardetype uit de brontabel niet in de reeks toegestane kolomtypen van de ontvangende tabel valt, krijgen we lege waarden in dergelijke velden.
Laten we eens kijken naar het derde geval. Bij gelijknamige kolommen dient de kolom van de ontvangende tabel volledig in overeenstemming te worden gebracht met de kolom van de brontabel.

Volledige kopie van gegevens voor kolommen met overeenkomende namen

Gelijknamige kolommen = nieuwe array ();

Voor elke kolom uit de brontabel. Columns Loop
MatchingColumn = TableRecipient.Columns.Find (Column.Name);

Als overeenkomende kolom<>Ongedefinieerd Dan

// Haal de eigenschappen van de kolom op.
Naam = Kolom.Naam;
ValueType = Kolom.ValueType;
Kop = Kolom. Kop;
Breedte = Kolom.Breedte;

// Vervang kolommen in de ontvangende tabel.
Index = TableReceiver.Columns.Index (MatchingColumn);

TableReceiver.Columns.Remove (Index);
TableReceiver.Columns.Insert (index, naam, waardetype, koptekst, breedte);

// Voeg de volgende naam van de overeenkomende kolommen toe aan de array.
Kolommen met dezelfde naam.Toevoegen (Kolomnaam);

Stop als;

Einde van cyclus;

// Loop door de rijen van de brontabel.
Voor elke SourceTable-rij van SourceTable-lus

// Voeg een nieuwe rij toe aan de ontvangerstabel.
NewRow = TableRecipient.Toevoegen ();

// Vul waarden in in overeenkomende cellen.
Voor elke naamkolommen van Like Columns Loop
NewRow [Kolomnaam] = SourceTableRow [Kolomnaam];

Einde van cyclus;

Einde van cyclus;


We zullen de kolom in de ontvangende tabel moeten vervangen door een nieuwe, waarvan de eigenschappen volledig overeenkomen met de kolom van de brontabel.
Daarom, als een kolom met dezelfde naam wordt gevonden in de ontvangerstabel, verzamelen we alle eigenschappen voor de nieuwe kolom in variabelen. Verwijder vervolgens de oude en maak een nieuwe kolom. Vervolgens doorlopen we de rijen van de brontabel.
Voeg in de lus een nieuwe rij toe aan de ontvangende tabel en open de lus om de kolomnamen in de reeks overeenkomende kolommen te herhalen.
Binnen deze geneste lus vullen we de cellen van de ontvangende tabel met de gegevens van de cel van de brontabel.

13. Hoe kolommen toevoegen aan de waardentabel "ValuesTable" met beperkingen per type?

Wanneer u een kolom toevoegt, kunt u eenvoudig de naam opgeven en de tweede parameter van de methode Toevoegen () ongewijzigd laten. In dit geval is het gegevenstype van de kolom willekeurig.

Een kolom toevoegen zonder een gegevenstype op te geven

// Voeg een kolom toe zonder typebeperkingen.
ValuesTable.Columns.Add ("Object");


U kunt de waarde van de tweede parameter invullen. De beschrijving van het type toegestaan ​​voor de kolom moet daar worden doorgegeven. De beschrijving zelf kan worden verkregen met behulp van de constructor, waarbij de laatste als parameter de naam van het tekenreekstype wordt doorgegeven (als er veel typen zijn, dan gescheiden door komma's) of een reeks toegestane typen.

Een kolom toevoegen die het gegevenstype aangeeft

// Beperkingen op kolomgegevenstypen:
// Alleen elementen van de zoekopdracht 'Aannemers'.
TableValues.Columns.Add ("Contractor", nieuwe beschrijving van typen ("ReferenceLink.Contractors"));


Als er een string is tussen de typen die zijn toegestaan ​​voor het vullen van de kolomgegevens, kunt u de bitdiepte (lengte) ervan beperken en het gebruik van een variabele of vaste lengte specificeren. Dit alles wordt bereikt door een object te maken met behulp van de constructor String Qualifiers. Verder zal dit object worden gebruikt als een van de parameters van de TypeDescription-constructor.

Kwalificaties gebruiken om het gegevenstype van een tabelkolom met waarden te kwalificeren

// Bereid en stel beperkingen in voor gegevens van het type String.
String-kwalificaties = NewString-kwalificaties (20, ValidLength.Variable);
AllowedTypes = NewTypeDescription ("String", StringQifiers);
ValuesTable.Columns.Add ("NoteStringShort", AllowedTypes);


U kunt hetzelfde doen voor de datum- en datumkwalificaties.
Let op: de typebeschrijving kan door de constructeur zowel "from scratch" worden opgebouwd, maar je kunt een bestaande typebeschrijving als basis gebruiken.

Bestaande typebeschrijvingen gebruiken om het gegevenstype van een tabel met waarden te specificeren

// Uitbreiding van de eerder gebruikte typebeschrijving.
QualifiersNumber = Nieuw QualifiersNumber (10, 2, ValidSign.Niet-negatief);
Datumkwalificaties = Nieuwe datumkwalificaties (DateParts.Date);
ExtendedAllowedTypes = NewTypeDescription (AllowedTypes, "Number, Date", Number Qualifiers, Date Qualifiers);

ValuesTable.Columns.Add ("Opmerking", ExtendedAllowedTypes);

Zoek in de tabel naar 1C-waarden

Welke methoden bestaan ​​er en hoe zoek je tegelijkertijd naar meerdere waarden.

Er zijn twee speciale methoden om waarden in een tabel op te zoeken:

1. Zoek

Horizon TV = Naslagwerken.Nomenclatuur.FindByName ("Horizon TV");
FoundString = TKNomenclature.Find (TV Horizon);
// we kunnen ook specificeren in welke kolommen moet worden gezocht om het zoeken te versnellen
FoundString = TKNomenclatuur.Find (TV Horizon, "Nomenclatuur");

Deze methode retourneert de eerst gevonden string met de gewenste waarde, of Undefined als dat niet het geval is. Daarom is het handig om het te gebruiken om unieke waarden te vinden, aangezien: anders, wanneer u een waarde vindt, verwijdert u deze uit de tabel om de volgende te vinden.

Om niet zo te lijden, is er de volgende methode, waarmee je een reeks overeenkomende strings kunt vinden:

2. Zoekstrings


StructureSelection.Insert ("Nomenclatuur", TV Horizon); // specificeer eerst de kolom waar u moet zoeken en vervolgens waarnaar u moet zoeken.

Deze methode retourneert altijd een array, maar deze kan leeg zijn als er niets is gevonden. En deze methode retourneert, net als de vorige, de rijen van de tabel met waarden zelf, en niet de waarden zelf in een aparte array. Daarom, door de waarden in de matrixrij te wijzigen of, zoals in de vorige methode, voor de gevonden rij, wijzigt u de waarde in de verwerkte waardentabel.

Een ander voordeel van deze methode is dat het meerdere kolommen van de tabel met waarden tegelijk kan doorzoeken:


Selectiekader = Nieuwe Structuur;
StructureSelection.Insert ("Nomenclatuur", TV Horizon);
Structuur van selectie Invoegen ("Aantal", 10);
FoundArrayStrings = TZNomenclature.FindStrings (SelectionStructure);

Het enige nadeel, zoals u kunt zien, kunt u geen andere soorten vergelijking gebruiken dan "gelijk"

Om geld en goederen te verantwoorden, worden in het bedrijfsleven veel verschillende tabellen gebruikt. Bijna elk document is een tabel.

In één tabel staan ​​de artikelen die vanuit het magazijn moeten worden verzonden. In een andere tabel staan ​​betalingsverplichtingen voor deze goederen.

Daarom wordt in 1C een prominente plaats ingenomen door het werken met tafels.

Tabellen in 1C worden ook wel "tabelsecties" genoemd. Naslagwerken, documenten en anderen hebben ze.

De query retourneert als resultaat van zijn uitvoering een tabel, waartoe toegang op twee verschillende manieren kan worden verkregen.

De eerste - snellere - selectie, het ophalen van rijen ervan is alleen mogelijk in volgorde. De tweede is om het zoekresultaat in een tabel met waarden te dumpen en er vervolgens willekeurige toegang toe te geven.

// Optie 1 - sequentiële toegang tot queryresultaten

// pak de tafel
Selectie = Query.Run (). Selecteer ();
// in volgorde doorlopen we alle rijen van het queryresultaat
While Fetch.Next () Loop
Rapport (voorbeeldnaam);
Einde van cyclus;

// Optie 2 - lossen in een tabel met waarden
Verzoek = Nieuw Verzoek ("SELECT Name FROM Directory.Nomenclature");
// pak de tafel
Tabel = Query.Run (). Unload ().
// dan kunnen we ook alle regels doornemen
Voor elke rij van Table Loop
Rapport (String.Name);
Einde van cyclus;
// of willekeurig toegang krijgen tot strings
Lijn = Tafel Zoek ("Schop", "Naam");

Een belangrijk kenmerk is dat in een tabel die wordt verkregen uit een queryresultaat, alle kolommen sterk worden getypt. Dit betekent dat u bij het opvragen van het veld Naam uit het Naslagwerk Nomenclatuur een kolom van het type String krijgt met een toegestane lengte van maximaal N karakters.

Tabel op formulier (fat client)

De gebruiker werkt met de tabel wanneer deze op het formulier wordt geplaatst.

De basisprincipes van het werken met formulieren hebben we besproken in de les over en in de les over

Dus laten we de tabel op het formulier plaatsen. Om dit te doen, kunt u de tabel vanuit het configuratiescherm slepen. Op dezelfde manier kunt u in het menu Form / Insert Control selecteren.

Gegevens kunnen worden opgeslagen in de configuratie - dan moet u het bestaande (eerder toegevoegde) tabelvormige gedeelte van het configuratieobject selecteren waarvan u de vorm aan het bewerken bent.

Klik op de knop "..." in de gegevenseigenschap. Om de lijst met secties in tabelvorm te zien, moet u de vertakking Object uitvouwen.

Bij het kiezen van een sectie in tabelvorm, zal 1C zelf kolommen toevoegen aan de tabel op het formulier. De regels die de gebruiker in zo'n tabel invoert, worden automatisch opgeslagen samen met de referentie / het document.

In dezelfde eigenschap Data kunt u een willekeurige naam invoeren en het type ValuesTable selecteren.

Dit betekent dat er een willekeurige tabel met waarden is geselecteerd. Het zal niet automatisch kolommen toevoegen, het wordt niet automatisch opgeslagen, maar je kunt ermee doen wat je wilt.

Door met de rechtermuisknop op de tabel te klikken, kunt u een kolom toevoegen. In de eigenschappen van een kolom kunt u de naam opgeven (ter referentie in de 1C-code), de kolomkop op het formulier, de link met het attribuut van de tabelsectie (de laatste - zo niet een willekeurige tabel, maar de tabel sectie is geselecteerd).

In de eigenschappen van de tabel op het formulier kunt u aangeven of de gebruiker rijen mag toevoegen/verwijderen. Meer geavanceerd formulier - selectievakje Alleen weergeven. Deze eigenschappen zijn handig voor het ordenen van tabellen voor het weergeven van informatie, maar niet voor het bewerken.

Om de tabel te beheren, moet u de opdrachtbalk op het formulier weergeven. Selecteer het menu-item Formulier / Bedieningspaneel invoegen / Commandopaneel.

Schakel in de eigenschappen van de opdrachtbalk het selectievakje Automatisch aanvullen in zodat de knoppen op de balk automatisch verschijnen.

Tabel op formulier (Thin / Managed Client)

In een beheerde vorm zien deze acties er iets anders uit. Als u een sectie in tabelvorm op het formulier moet plaatsen, opent u de vertakking Object en sleept u een van de secties in tabelvorm naar links. En dat is het!

Als u een tabel met waarden moet plaatsen, voegt u een nieuw attribuut van het formulier toe en specificeert u het type in zijn eigenschappen - tabel met waarden.

Om kolommen toe te voegen, gebruikt u het rechtsklikmenu op dit formulierattribuut, het item Attribuutkolom toevoegen.

Sleep vervolgens de tabel ook naar links.

Om de tabel een opdrachtbalk te geven, selecteert u in de tabeleigenschappen de waarden in het gedeelte Gebruik - Opdrachtbalkpositie.

Een tabel exporteren naar Excel

Elke 1C-tabel op het formulier kan worden afgedrukt of gedownload naar Excel.

Klik hiervoor met de rechtermuisknop op een lege ruimte in de tabel en selecteer Lijst.

In een beheerde (thin) client kunnen soortgelijke acties worden uitgevoerd met behulp van het menu-item Alle acties / Lijst weergeven.