1c lägga till en kolumn till värdetabellen.

1c lägga till en kolumn till värdetabellen.
1c lägga till en kolumn till värdetabellen.

Värdetabellen i 1C 8.3 (8.2)-plattformen är en universell samling av värden som en utvecklare kan använda under mjukvaruutveckling för att implementera sina algoritmer. I huvudsak är en 1C-värdestabell en dynamisk uppsättning värden som har kolumner och kolumner.

Artiklar om andra universella samlingar av värden i 1C

Lär dig programmering i 1C i min bok "Programmering i 1C i 11 steg"

  1. Boken är skriven på ett tydligt och enkelt språk – för en nybörjare.
  2. Lär dig att förstå 1C-arkitektur;
  3. Du kommer att börja skriva kod på 1C-språk;
  4. Behärska grundläggande programmeringstekniker;
  5. Befästa dina kunskaper med hjälp av en problembok;

En utmärkt guide till utveckling i en hanterad 1C-applikation, både för nybörjare och erfarna programmerare.

  1. Mycket lättillgängligt och begripligt presentationsspråk
  2. Boken skickas med e-post i PDF-format. Kan öppnas på vilken enhet som helst!
  3. Förstå ideologin för en hanterad 1C-applikation
  4. Lär dig hur du utvecklar en hanterad applikation;
  5. Lär dig att utveckla hanterade 1C-formulär;
  6. Du kommer att kunna arbeta med de grundläggande och nödvändiga delarna av hanterade formulär
  7. Programmering under en hanterad applikation kommer att bli tydlig

Kampanjkod för 15% rabatt - 48PVXHeYu


Om den här lektionen hjälpte dig att lösa något problem, du gillade det eller tyckte att det var användbart, så kan du stödja mitt projekt genom att donera valfritt belopp:

Du kan betala manuellt:

Yandex.Money - 410012882996301
Web Money - R955262494655

Gå med i mina grupper.

Här är lite fakta till att börja med - enkla exempel på att arbeta med en värdetabell:

1. Skapa en värdetabell

ValueTable = Ny värdetabell;


2. Skapa kolumner för värdetabellen:

ValueTable.Columns.Add("Namn");
Value Table.Columns.Add("Efternamn");


3. Lägg till nya rader med kolumnnamn:


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


4. Så här slår du upp ett värde i värdetabellen:
Det är nödvändigt att hitta en tabellrad som innehåller det önskade värdet.

FoundRow = ValueTable.Find(SearchValue);


5. Hitta den första förekomsten i vissa kolumner i värdetabellen

FoundRow = ValueTable.Find(SearchValue, "Leverantör, Köpare");


6. Om du behöver hitta alla förekomster i värdetabellen:
Vi använder sökstrukturen.

SearchStructure = Structure("Anställd", SearchValue);
Array of FoundRows = ValueTable.FindRows(SearchStructure);


Låt oss skapa en sökstruktur, där varje element kommer att innehålla namnet på kolumnen som en nyckel och det önskade värdet i denna kolumn som ett värde. Vi skickar sökstrukturen som en parameter till metoden FindLines(). Som ett resultat får vi tabellrader.
Om du lägger till en sökning efter det önskade värdet i sökstrukturen, till exempel även i kolumnen Ansvarig, kommer vi som ett resultat av att använda metoden FindLines() att få alla rader där både Anställd och Ansvarig är lika med sökt värde.

7. Hur man itererar genom en värdetabell i slumpmässig ordning

För varje aktuell rad från värdetabellslingan
Report(CurrentRow.Name);
EndCycle;

Samma sak med index:

SeniorIndex = ValueTable.Quantity() - 1;
För konto = 0 till SeniorIndex-cykel
Report(TabellValues[Konto].Namn);
EndCycle;


8. Ta bort en befintlig värdetabellrad

ValueTable.Delete(rad som ska raderas);

efter index

ValueTable.Delete(0);


9. Ta bort en befintlig kolumn i värdetabellen

ValueTable.Columns.Delete(ColumnDeleted);


efter index

ValueTable.Columns.Delete(0);

Det är nödvändigt att ta hänsyn till att radering av en rad (eller kolumn) "från mitten" av värdetabellen kommer att leda till en minskning med en i indexen för raderna som ligger "efter" den raderade

10. Hur fyller man i en värdetabell om kolumnnamnen finns i variabler?

NewRow = ValueTable.Add();
NewRow[ColumnName] = Värde;


11. Hur fyller man hela kolumnen i värdetabellen med önskat värde?
Kolumnen Fiscal Accounting Flag i värdetabellen måste fyllas i med värdet False

Värdetabell Fyll i värden (False, "Fiscal Accounting Flag");


Vi använder metoden FillValues() för värdetabellen. Den första parametern är värdet som ska fyllas i. Den andra parametern är namnet på kolumnen som ska fyllas.

12. Hur kan jag fylla värdetabellen "Receiver Table" med data från värdetabellen "SourceTable"?

Om mottagartabellen inte finns ännu vid tidpunkten för åtgärden eller dess tidigare kolumner inte behöver sparas, kan du skapa den som en komplett kopia av originalet

Mottagaretabell = Källtabell.Copy();


Alternativ två: ReceiverTable-tabellen finns, och det skulle vara synd att förlora sina kolumner och begränsningar för kolumndatatyperna. Men du måste fylla i uppgifterna för de kolumner vars namn matchar källtabellens namn.

Partiell dataöverföring för kolumner med matchande namn:

För varje rad i källtabellen från källtabellcykeln
FillPropertyValues(NewRow, SourceTableRow);
Slutet på cykeln


För varje rad i källtabellen läggs en ny rad till i den mottagande tabellen och värdena fylls i de kolumner i den nya tabellen vars namn matchar namnen på kolumnerna i källtabellen

Om tabellerna inte har kolumner med samma namn kommer destinationstabellen att innehålla lika många rader med nollvärden som det fanns rader i källtabellen.
Om för vissa kolumner med samma namn datavärdetypen från källtabellen inte faller in i arrayen av tillåtna kolumntyper i destinationstabellen, kommer vi att få tomma värden i sådana fält.
Låt oss överväga det tredje fallet. I fallet med kolumner med samma namn, måste kolumnen i destinationstabellen bringas i full överensstämmelse med kolumnen i källtabellen.

Fullständig kopiering av data för kolumner med matchande namn

Samma kolumner = New Array();

För varje kolumn från SourceTable.Columns Cykel
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

Om matchande kolumn<>Odefinierat då

// Få kolumnegenskaper.
Namn = Kolumn.Namn;
ValueType = Column.ValueType;
Header = Column.Header;
Width = Column.Width;

// Ersätt kolumner i måltabellen.
Index = TableReceiver.Columns.Index(MatchingColumn);

TableReceiver.Columns.Delete(Index);
ReceiverTable.Columns.Insert(Index, Namn, ValueType, Header, Width);

// Lägg till nästa namn på matchande kolumner i arrayen.
Samma Columns.Add(Column.Name);

endIf;

EndCycle;

// Bläddra igenom raderna i källtabellen.
För varje rad i källtabellen från källtabellcykeln

// Lägg till en ny rad i måltabellen.
NewRow = TableReceiver.Add();

// Fyll i värdena i de matchande cellerna.
För varje namnkolumn Från kolumner med samma namn Cykel
NewRow[ColumnName] = SourceTableRow[ColumnName];

EndCycle;

EndCycle;


Vi måste ersätta kolumnen i måltabellen med en ny, vars egenskaper helt matchar kolumnen i källtabellen.
Därför, om en kolumn med samma namn hittas i mottagartabellen, samlar vi alla egenskaper för den nya kolumnen i variabler. Ta sedan bort den gamla och skapa en ny kolumn. Sedan går vi igenom raderna i källtabellen.
I loopen lägger vi till en ny rad i mottagningstabellen och öppnar en loop över kolumnnamnen i arrayen av matchande kolumner.
Inuti denna kapslade loop fyller vi cellerna i måltabellen med data från källtabellcellen.

13. Hur lägger man till kolumner i värdetabellen "ValueTable" med typbegränsningar?

När du lägger till en kolumn kan du helt enkelt ange dess namn och lämna den andra parametern i Add()-metoden orörd. I det här fallet är kolumndatatypen godtycklig.

Lägga till en kolumn utan att ange en datatyp

// Lägg till en kolumn utan begränsningar för typ.
ValueTable.Columns.Add("Objekt");


Du kan fylla i värdet för den andra parametern. Där måste du skicka en beskrivning av den typ som tillåts för kolumnen. Själva beskrivningen kan erhållas med hjälp av konstruktorn, och skicka till den som en parameter strängnamnet för typen (om det finns många typer, separerade med kommatecken) eller en uppsättning giltiga typer.

Lägger till en kolumn som anger datatypen

// Begränsningar för kolumndatatyper:
// Endast delar av katalogen "Motparter".
Table of Values.Columns.Add("Konto", Ny beskrivning av typer("DirectoryLink.Accounts"));


Om bland de typer som tillåts för att fylla kolumndata finns en sträng, kan du begränsa dess bitdjup (längd), ange användningen av en variabel eller fast längd. Allt detta uppnås genom att skapa ett objekt med konstruktorn String Qualifiers. Därefter kommer detta objekt att användas som en av parametrarna för TypeDescription-konstruktorn.

Använda kvalificerare för att ange datatypen för en värdetabellskolumn

// Förbered och ställ in begränsningar för data av typen String.
String Qualifiers = New String Qualifiers(20, AllowedLength.Variable);
ValidTypes = NewTypeDescription("String", StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Liknande åtgärder kan utföras med avseende på nummer- och datumkvalificering.
Observera: typbeskrivningar kan byggas av konstruktören antingen "från grunden" eller så kan en befintlig typbeskrivning användas som grund.

Använda befintliga typdeklarationer för att ange datatypen för en värdetabellskolumn

// Förlängning av den tidigare använda typbeskrivningen.
QualifiersNumbers = New QualifiersNumbers(10, 2, ValidSign.Non-negative);
DateQualifiers = New DateQualifiers(DateParts.Date);
Extended ValidTypes = New TypeDescription(ValidTypes, "Number, Date", Number Qualifiers, Date Qualifiers);

ValueTable.Columns.Add("Note", ExtendedAcceptableTypes);

För att redogöra för pengar och varor används olika tabeller i stor utsträckning i näringslivet. Nästan varje dokument är ett bord.

En tabell visar varorna som ska skickas från lagret. En annan tabell visar skyldigheterna att betala för dessa varor.

Därför, i 1C, upptar arbetet med bord en framträdande plats.

Tabeller i 1C kallas även "tabelldelar". Kataloger, dokument och andra har dem.

Frågan, när den körs, returnerar en tabell som kan nås på två olika sätt.

Det första - snabbare - urvalet, att få rader från det är endast möjligt i ordning. Det andra är att ladda upp frågeresultatet till en värdetabell och sedan slumpmässig tillgång till det.

//Alternativ 1 – sekventiell åtkomst till frågeresultat

//få bordet
Select = Query.Run().Select();
// vi går igenom alla rader i frågeresultatet i ordning
Medan Select.Next() Loop
Rapport(Utval.Namn);
EndCycle;

//Alternativ 2 – ladda upp till en värdetabell
Request = New Request("SELECT Name FROM Directory.Nomenclature");
//få bordet
Tabell = Query.Run().Unload().
//vidare kan vi också iterera genom alla raderna
För varje rad från tabellcykel
Report(String.Name);
EndCycle;
//eller godtyckligt åtkomst till strängar
Row = Table.Find("Skovel", "Namn");

En viktig funktion är att i tabellen som erhålls från frågeresultatet kommer alla kolumner att vara strikt skrivna. Detta innebär att genom att begära fältet Namn från nomenklaturkatalogen får du en kolumn av typen String med en tillåten längd på högst N tecken.

Tabell på formuläret (tjock klient)

Användaren arbetar med tabellen när den placeras i formuläret.

Vi diskuterade de grundläggande principerna för att arbeta med formulär i lektionen om och i lektionen om

Så låt oss placera tabellen på formuläret. För att göra detta kan du dra tabellen från kontrollpanelen. På samma sätt kan du välja Form/Infoga kontroll från menyn.

Data kan lagras i konfigurationen - då måste du välja den befintliga (tidigare tillagda) tabelldelen av konfigurationsobjektet vars formulär du redigerar.

Klicka på knappen "..." i egenskapen Data. För att se listan med tabelldelar måste du expandera objektgrenen.

När du väljer tabelldelen lägger 1C själv till kolumner i tabellen på formuläret. Rader som användaren matat in i en sådan tabell sparas automatiskt tillsammans med referensboken/dokumentet.

I samma dataegenskap kan du ange ett godtyckligt namn och välja typen Värdetabell.

Det betyder att en godtycklig värdetabell har valts. Det kommer inte automatiskt att lägga till kolumner, inte heller kommer det att sparas automatiskt, men du kan göra vad du vill med det.

Genom att högerklicka på tabellen kan du lägga till en kolumn. I egenskaperna för en kolumn kan du ange dess namn (för referens i 1C-kod), kolumnrubriken på formuläret, kopplingen till attributet för den tabellformade delen (den senare - om inte en godtycklig tabell väljs, men en tabelldel).

I tabellegenskaperna på formuläret kan du ange om användaren kan lägga till/ta bort rader. Ett mer avancerat formulär är kryssrutan Visa Endast. Dessa egenskaper är bekväma att använda för att organisera tabeller avsedda för att visa information, men inte för redigering.

För att hantera tabellen måste du visa en kommandopanel i formuläret. Välj menyalternativet Formulär/Infoga kontroll/Kommandofält.

I kommandoradens egenskaper markerar du kryssrutan Autofyll så att knapparna på panelen visas automatiskt.

Tabell på formulär (tunn/hanterad klient)

På ett hanterat formulär ser dessa åtgärder lite annorlunda ut. Om du behöver placera en tabelldel på formuläret expanderar du grenen Objekt och drar en av tabelldelarna till vänster. Det är allt!

Om du behöver placera en värdetabell, lägg till ett nytt formulärattribut och ange typen – värdetabell i dess egenskaper.

För att lägga till kolumner, använd högerklicksmenyn på detta formulärattribut, välj Lägg till attributkolumn.

Dra sedan även tabellen åt vänster.

För att en tabell ska ha ett kommandofält, i tabellegenskaperna, välj värdena i avsnittet Användning – Kommandofältsposition.

Ladda upp en tabell till Excel

Alla 1C-tabeller som finns på formuläret kan skrivas ut eller laddas upp till Excel.

För att göra detta, högerklicka på ett tomt utrymme i tabellen och välj Lista.

I en hanterad (tunn) klient kan liknande åtgärder utföras med hjälp av menyalternativet Alla åtgärder/Visa lista.