1s töltse ki az értéktáblázatot. Fontos, hogy soha ne keverjük össze az objektum tulajdonságokat egy objektum metódussal.

Kezdésnek egy kis tény egyszerű példák dolgozzon egy értéktáblázattal:

1. Készítsen értéktáblázatot

ValueTable = Új értéktábla;


2. Hozzon létre oszlopokat az értéktáblázatból:

ValueTable.Columns.Add("Név");
ValueTable.Columns.Add("Vezetéknév");


3. Új sorok hozzáadása oszlopnevek használatával:


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


4. Hogyan keressünk értéket az értéktáblázatban:
Meg kell találni a kívánt értéket tartalmazó táblázatsort.

FoundString = ValueTable.Find(LookupValue);


5. Keresse meg az értéktáblázat egyes oszlopaiban az első előfordulást!

FoundString = ValueTable.Find(LookupValue, "Beszállító, vevő");


6. Ha meg kell találnia az összes előfordulást az értéktáblázatban:
A keresési struktúrát használjuk.

SearchStructure = Structure("Alkalmazott", LookupValue);
ArrayFoundStrings = ValueTable.FindStrings(SearchStructure);


Hozzunk létre egy keresési struktúrát, melynek minden eleme kulcsként az oszlop nevét, értékként pedig az ebben az oszlopban keresett értéket fogja tartalmazni. A keresési struktúrát paraméterként adjuk át a FindStrings() metódusnak. Ennek eredményeként megkapjuk a táblázat sorait.
Ha a kívánt érték keresését hozzáadjuk a keresési struktúrához, például a Felelős oszlopban is, akkor a FindRows() metódus alkalmazása eredményeként minden olyan sort megkapunk, ahol a Munkavállaló és a Felelős is megegyezik a kívánt értékkel. érték.

7. Hogyan lehet véletlenszerű sorrendben végigpörgetni egy értéktáblázatot

Minden aktuális sorhoz az értéktábla hurokból
Jelentés(Aktuális sor.Név);
EndCycle;

Tegye ugyanezt az indexek használatával:

SeniorIndex = ValueTable.Count() - 1;
MF = 0 esetén a SeniorIndex ciklus szerint
Jelentés(Értéktábla[Szám].Név);
EndCycle;


8. Meglévő értéktábla-sor törlése

ValueTable.Delete(RemoveRow);

index szerint

ValueTable.Delete(0);


9. Az értéktáblázat egy meglévő oszlopának törlése

ValueTable.Columns.Delete(RemoveColumn);


index szerint

ValueTable.Columns.Delete(0);

Figyelembe kell venni, hogy az értéktáblázat egy sorának (vagy oszlopának) „középről” való törlése a törlés „után” lévő sorok indexeinek valamelyikének csökkenéséhez vezet.

10. Hogyan kell kitölteni az értéktáblázatot, ha az oszlopneveket változók tartalmazzák?

NewRow = ValueTable.Add();
ÚjSor[Oszlopnév] = Érték;


11. Hogyan lehet az értéktáblázat teljes oszlopát kitölteni a kívánt értékkel?
Az Értéktábla értéktáblázatának FiscalAccounting Flag oszlopát False értékkel kell kitölteni.

ValueTable.FillValue(False, "Fiscal Accounting Flag");


Az értéktáblázathoz a FillValues() metódust használjuk. Az első paraméter a kitöltendő érték. A második paraméter a kitöltött oszlop neve.

12. Hogyan lehet kitölteni a "TableRecipient" értéktáblázatot a "SourceTable" értéktáblázat adataival?

Ha a Receiver Table még nem létezik a művelet időpontjában, vagy a korábbi oszlopait nem kell menteni, akkor elkészítheti az eredeti teljes másolataként.

TableReceiver = TableOriginal.Copy();


Második lehetőség: létezik TableReceiver tábla, és kár elveszíteni az oszlopait és az oszlop adattípusokra vonatkozó korlátozásait. De ki kell töltenie azoknak az oszlopoknak az adatait, amelyek neve megegyezik a forrástábla nevével.

Részleges adatátvitel egyező nevű oszlopokhoz:

A SourceTable ciklusból származó forrástábla minden sorához
FillPropertyValues(NewString, SourceTableString);
EndCycle


A forrástábla minden sorához egy új sor kerül a céltáblázatba, és az értékek az új tábla azon oszlopaiba kerülnek kitöltésre, amelyek neve megegyezik a forrástábla oszlopainak nevével.

Ha a táblákban nincsenek azonos nevű oszlopok, akkor a céltáblázatban annyi sor lesz nullértékkel, mint ahány sor volt a forrástáblázatban.
Ha néhány azonos nevű oszlop esetében a forrástábla adatérték-típusa nem esik a céltábla oszlopának engedélyezett típusainak tömbjébe, akkor az ilyen mezőkben üres értékeket kapunk.
Nézzük a harmadik esetet. Azonos nevű oszlopok esetén a céltábla oszlopát teljes összhangba kell hozni a forrástábla oszlopával.

Teljes adatmásolat az egyező nevű oszlopokhoz

HasonlóColumns = Új tömb();

Forrástábla minden oszlopához.Oszlopok hurok
MatchingColumn = Táblázatfogadó.Oszlopok.Keresés(Oszlop.Név);

Ha MatchedColumn<>Undefined Akkor

// Oszloptulajdonságok lekérése.
Név = Oszlop.Név;
ValueType = Column.ValueType;
Cím = Column.Title;
Szélesség = Column.Width;

// Oszlopok cseréje a céltáblázatban.
Index = Táblázatfogadó.Oszlopok.Index(egybeeső oszlop);

TableReceiver.Columns.Delete(Index);
TableReceiver.Oszlopok.Beszúrás(Index, Név, Értéktípus, Cím, Szélesség);

// Adja hozzá a megfelelő oszlopok következő nevét a tömbhöz.
Azonos névOszlopok.Hozzáadás(Oszlop.Név);

EndIf;

EndCycle;

// Hurok a forrástábla sorai között.
A SourceTable minden sorához a SourceTable ciklusból

// Hozzáadás új sor a céltáblához.
NewString = TableReceiver.Add();

// Írja be az értékeket az egyező cellákba.
Minden NameColumns Of Same NameColumns ciklushoz
NewString[Oszlopnév] = ForrásTáblakarakterlánc[Oszlopnév];

EndCycle;

EndCycle;


A céltábla oszlopát le kell cserélnünk egy újra, amelynek tulajdonságai teljesen megegyeznek a forrástábla oszlopával.
Ezért, ha egy azonos nevű oszlop található a címzett táblában, akkor az új oszlop összes tulajdonságát változókba gyűjtjük. Ezután törölje a régit, és hozzon létre egy új oszlopot. Ezután a forrástábla sorai között hurkolunk.
A ciklusban egy új sort adunk a címzett táblázathoz, és megnyitunk egy hurkot az egyező oszlopok tömbjének oszlopainak nevei között.
Ezen a beágyazott hurkon belül a címzett tábla celláit töltjük fel a forrástábla cellájának adataival.

13. Hogyan lehet oszlopokat hozzáadni az "Értéktáblázat" értéktáblázathoz típuskorlátozásokkal?

Egy oszlop hozzáadásakor egyszerűen megadhatja a nevét, és ne érintse meg az Add() metódus második paraméterét. Ebben az esetben az oszlop adattípusa tetszőleges.

Oszlop hozzáadása adattípus megadása nélkül

// Oszlop hozzáadása típuskorlátozások nélkül.
ValueTable.Columns.Add("Object");


A második paraméter értékét töltheti ki. Ott át kell adni az oszlophoz engedélyezett típus leírását. Magát a leírást a konstruktor segítségével kaphatjuk meg, paraméterként átadva a típus karakterláncnevét (ha sok típus van, akkor vesszővel elválasztva), vagy érvényes típusok tömbjét.

Az adattípust meghatározó oszlop hozzáadása

// Az oszlop adattípusaira vonatkozó korlátozások:
// Csak a "Vállalkozók" könyvtár elemei.
ValueTable.Columns.Add("Account", New TypeDescription("ReferenceReference.Accounts"));


Ha az oszlopadatok kitöltésére engedélyezett típusok között van egy karakterlánc, akkor korlátozhatja annak bitmélységét (hosszát), megadhatja a változó vagy fix hosszúság használatát. Mindezt egy objektum létrehozása biztosítja a StringQualifers konstruktor segítségével. Továbbá ez az objektum a TypeDescription konstruktor egyik paramétereként lesz használva.

Minősítők használata az értéktábla oszlopának adattípusának megadására

// Karakterlánc típusú adatok előkészítése és korlátok beállítása.
String Qualifiers = New String Qualifiers(20, ValidLength.Variable);
AllowedTypes = NewTypeDescription("String",StringQalifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Ugyanezt megteheti a szám- és dátumminősítők esetében is.
Figyelem: a típusleírást a konstruktor "a semmiből" is felépítheti, és alapul vehet egy meglévő típusleírást.

Meglévő típusdeklarációk használata az értéktábla oszlopának adattípusának megadásához

// A korábban használt típusleírás kiterjesztése.
Számminősítők = New Number Qualifiers(10, 2, ValidSign.Non-negative);
DateQualifers = Új dátumminősítők(DátumParts.Dátum);
ExtendedValidTypes = NewTypeDescription(ÉrvényesTípusok, "Szám, Dátum",Számminősítők,Dátumminősítők);

ValueTable.Columns.Add("Megjegyzés", ExtendedAllowedTypes);

Feladás dátuma: 2011. szeptember 21

1C értéktáblázat - 3. rész. metaadatokat. Iterálás az értéktáblázat oszlopai felett

Ebben a cikkben elmondom, hogyan kell dolgozni egy „ismeretlen” struktúrájú értéktáblázattal, hogyan lehet áthaladni az értéktáblázat oszlopai között, hogyan lehet adatokat kinyerni oszlopokból és sorokból oszlopnevek használata nélkül. (Ez a cikk az 1C cikksorozatra hivatkozik a semmiből; az 1c programozás a semmiből; az 1c értéktáblázat)

Elmagyarázni az anyagot és futtatni a példáinkat programkód"élőben", szükségünk van néhányra 1C értékek teszttáblázata. Példáink egy része egy értéktáblázatból kinyeri az adatokat, ezért készítünk egy táblázatot három oszlopból: "Vezetéknév", "Keresztnév", "Patronymic" és beírunk egy kis adatmennyiséget - akár 3 sort is. :)

Tehát hozzunk létre egy teszttáblázatot az 1C értékekből, és töltsük ki:

MyTR = új értéktábla; // hozzon létre egy új, a "MyTR" változóban tárolt értékek táblázatát MyTR.Columns.Add("Vezetéknév"); // a "Vezetéknév" oszlop létrehozása MyTR.Columns.Add("Keresztnév"); // a "Név" oszlop létrehozása MyTM.Columns.Add("Patronymic"); // hozza létre a "Középső név" oszlopot // adja hozzá az első sort az értéktáblázatunkhoz.NewRow = MyТЗ.Add(); NewLine.Surname = "Chapaev"; NewString.Name = "Vaszilij"; NewString.Patronymic = "Ivanovich"; // a második sor hozzáadása NewLine = MyТЗ.Add(); NewLine.Lastname = "Dzerzsinszkij"; NewString.Name = "Félix"; NewLine.Patronymic = "Edmundovich"; // a harmadik sor hozzáadása NewLine = MyTR.Add(); NewRow.LastName = "Kotovsky"; NewString.Name = "Gregory"; NewString.Patronymic = "Ivanovich";

Teszttáblázatunk három oszlopból áll: Keresztnév, Vezetéknév, Apanév; és három befejezett sora van a polgárháború hőseinek neveivel.

Az első kódminta gyűjteményként iterálja az 1C értéktáblázat oszlopait.

// a TK összes oszlopának nevének megjelenítése a Saját TK-ból.Oszlopok minden oszlopához Notify loop("Oszlopnév: " + Oszlop.Név); EndCycle;

A hurkunk az összes oszlopnevet megjeleníti az 1C üzenetmezőben:

Oszlopnév: Vezetéknév Oszlopnév: Keresztnév Oszlopnév: Középső név

Látjuk, hogy egy speciális gyűjtési ciklust használnak az oszlopok iterálására, hasonlóan a soriterációs ciklushoz (az utolsó cikkben). SajátTM.Oszlopok- ez az 1C értéktáblázat oszlopainak gyűjteménye "MoyaTZ". A gyűjtemény típusú objektumokat tartalmaz "ColumnValueTable" Minden ilyen típusú objektum az értéktábla oszlopa, és tulajdonságokat és metódusokat tartalmaz. Ezekre a tulajdonságokra és metódusokra hivatkozva egy oszlopról megkapjuk a szükséges információkat, vagy más műveleteket hajtunk végre vele.

Például az ingatlanhoz való hozzáférés "Név" (Oszlop.Név) megkapjuk az aktuális oszlop nevét.

Szeretném felhívni a figyelmet a ciklus címére: „Mindenkinek Oszlop From MyTR.Columns Loop" A változó neve "Oszlop" mi találtuk ki. Nem szükséges ugyanazt a nevet használni. Ezt a változót például tetszés szerint nevezheti el "Aktuális oszlopom" Akkor a fenti példa így nézne ki:

// kinyomtatja a TK összes oszlopának nevét minden MyCurrentColumn-hoz From MyTK.Columns Notify Loop("Oszlop neve: " + SajátCurrentColumn.Name); EndCycle;

Amikor az 1C végrehajtási alrendszer találkozik egy ilyen típusú ciklussal, a ciklus minden egyes áthaladásakor hozzárendel egy elemet a gyűjteményünkből a megadott nevű változóhoz, ebben az esetben - a gyűjtemény egyik elemeértéktábla oszlopai SajátTM.Oszlopok Ezután hivatkozunk az aktuális oszlopot tartalmazó változóra, és használjuk a tulajdonságot "Név".

Azt javaslom, hogy az oszlopok neve mellett jelenítse meg az egyes oszlopok számát az oszlopgyűjteményben:

// megjeleníti az értéktáblázat összes oszlopának számát és nevét a MyTR.Columns minden oszlopához LoopColumnNumber = MyTR.Columns.Index(Column); // az oszlopszám lekérése ColumnName = Column.Name; // az oszlopnév lekérése Report("Oszlop száma:" + Oszlop száma + " Oszlopnév: " + Oszlopnév); EndCycle;

A szöveg megjelenik az 1C üzenetmezőben:

Oszlopszám:0 Oszlopnév: Vezetéknév Oszlopszám:1 Oszlopnév: Keresztnév Oszlopszám:2 Oszlopnév: Középső név

Figyeljünk arra, hogy az 1C értéktáblázat oszlopai nullától kezdődően vannak számozva, akárcsak az értéktáblázat sorai.

Az oszlopok száma az értéktáblázatban 1C

Az értéktáblázatban lévő oszlopok számának megállapításához az oszlopgyűjteményben a "Number()" metódust használjuk.

Oszlopok száma = SajátTM.Oszlopok.Szám(); Jelentés(Oszlopok száma);

A "3" szám jelenik meg a képernyőn. Valójában a táblázatunkban három oszlop található: "Vezetéknév", "Keresztnév", "Apanév"

Oszlopobjektum megszerzése annak száma (index) alapján és iteráció az oszlopok között az oszlopindex segítségével

Végezzünk kört az értéktáblázat összes oszlopán az oszlopindexek (számok) segítségével. Ne feledje, hogy az oszlopok számozása nullától kezdődik. Ezért az "Sh" ciklus számlálóját nulláról olyan számra kell növelnünk, amely egyenlő az oszlopok számával mínusz egy.

For SC = 0 By MyTM.Columns.Quantity() - 1 Loop CurrentColumn = SajátTM.Oszlopok[SC]; Értesítés(Jelenlegi oszlop.Név); EndCycle;

A képernyőn a következőket fogjuk látni

Teljes név

Szerintem ez a példa egyértelmű volt. Rátértünk a módszerre Mennyiség() oszlopgyűjtemények" MyTM.Columns.Quantity()", megkapta az oszlopok számát, és elindított egy ciklust egy számlálóval nulla előtt oszlopok száma mínusz egy. A cikluson belül minden oszlopot megkapunk az oszlopgyűjteményből, és hozzárendeljük az aktuális oszlopobjektumot egy változóhoz Aktuális oszlop Ezután a változó Aktuális oszlop bejutunk az ingatlanba Névés jelenítse meg ennek a tulajdonságnak az értékét a képernyőn: Értesítés(Jelenlegi oszlop.Név);

Fontos, hogy soha ne keverjük össze az objektumtulajdonságot egy objektummetódussal.

A tulajdonság egyfajta statikus érték, és a hozzáférés például zárójelek nélkül van írva CurrentColumn.Name. A metódus lényegében egy objektum eljárása vagy függvénye, és az eljárások és függvények hívásait mindig zárójelben írjuk (még akkor is, ha nincsenek bemeneti paraméterek). Például: MyTM.Columns.Quantity()

Ha a metódusra hivatkozunk, elfelejtve zárójelet írni, akkor az 1C interpreter hibaüzenetet ad nekünk, és nem futtatja le a kódot a végrehajtáshoz. Mivel az értelmező azt feltételezi, hogy nem metódushoz, hanem tulajdonsághoz férünk hozzá - mert nincsenek zárójelek. És nem fogja tudni megtalálni az ilyen nevű tulajdonságokat (mert csak ilyen nevű metódus van) - ami a hibaüzenetben fog megjelenni.

Ezt írja ki az értelmező, ha ilyen rosszul elfelejtem zárójelet tenni egy metódushívásba SajátTM.Oszlopok.Mennyiség(nincs zárójel a "Mennyiség()" után):

Az objektummező nem található (számlálás)

Ebben az esetben a "mező" és a "tulajdon" szinonimákként vagy pontatlanságként értendő az 1C fejlesztők terminológiájában. Mindkét szót ugyanarra a fogalomra utalják. Bár más programozási nyelvekben ezek a kifejezések különböző fogalmakat jelenthetnek.

Adatok kinyerése az 1C értéktáblázatból oszlopszámok segítségével

Kezdetnek kínálok egy egyszerű példát a táblázatunk első sorából származó adatok lekérésére. Felhívjuk figyelmét, hogy a cikk elejétől az előre kitöltött táblázatot használjuk. Biztosan tudjuk, hogy a táblázatban van az első sor és legalább egy oszlop. Ha ezt a példát egy üres táblára alkalmazzuk, hiba lép fel. Így:

FirstLine = MyTR; // az első sor lekérése (számozás nullától) ColumnFirstValue = RowFirst; // az első oszlop értékének lekérése (az oszlopok számozása is nullától van) Report(FirstColumnValue); // az első oszlop értékének megjelenítése a táblázat első sorában

A képernyőn megjelenik:

Chapaev

Először az értéktáblázat sorobjektumát kaptuk meg úgy, hogy elértük az értéktáblázatot a [...] operátor használatával. (ha elfelejtette, hogyan kell ezt megtenni, nézze meg a korábbi cikkeket) Az operátoron belül a "0" argumentumot adtuk át. Ez az értéktábla első sorának indexe. FirstLine = MyTR;

Továbbá jogunk van a karakterlánc objektumra a [...] operátor használatával hivatkozni. Ezen az utasításon belül az értéktáblázat oszlopszámát adtuk át, jelen esetben szintén "0"-t. Így megkaptuk a "0" számú oszlop értékét a "0" számú táblázat aktuális sorához. Ezt az értéket megjelenítettük a képernyőn, és ez a "Chapaev" karakterláncot jelenti.

Bonyolítsuk kicsit a példánkat:

FirstLine = MyTR; // az első sor lekérése (nullától számozva) Report(FirstLine); // az első oszlop értékének megjelenítése a tábla első sorában Report(FirstRow); // a második oszlop értékének megjelenítése a tábla első sorában Report(FirstRow); // a harmadik oszlop értékének megjelenítése a táblázat első sorában

Most megjelenítettük az értékeket az értéktáblázatunk első sorának mindhárom oszlopából:

Chapaev Vaszilij Ivanovics

Most tovább módosítom ezt a példát, hogy meg tudjuk csinálni változó nélkül "Első sor"

Értesítés (MyTM); // az első oszlop értékének megjelenítése a tábla első sorában Report(MyTR); // a második oszlop értékének megjelenítése a tábla első sorában Report(MyTR); // a harmadik oszlop értékének megjelenítése a táblázat első sorában

A képernyő ugyanaz lesz.

Chapaev Vaszilij Ivanovics

A fenti példában láttuk, hogy egy értéktáblázat adott sorában és oszlopában lévő érték eléréséhez használhatjuk két operátor egymást követő hívását [...] ebben a formában: Értéktábla[Indexsorok][Indexoszlopok]

Tehát készen állunk egy hurok létrehozására, és megkapjuk az összes sor és oszlop adatait sor- és oszlopindexek segítségével:

For RowCount = 0 By MyTM.Quantity() - 1 Loop // hurok a sorok között For ColumnCount = 0 By MyTM.Columns.Quantity() - 1 Loop // beágyazott ciklus oszlopokon keresztül // a cellaérték lekérése (az aktuális sorból és az aktuális oszlopok) CellValue = MyTR[RowCount][ColumnCount]; // a sorszám, oszlopszám és cellaérték megjelenítése Report("Line #" + RowCount + "column #" + ColumnCount + " = " + CellValue); EndCycle; EndCycle;

A képernyőn a következők jelennek meg:

0. sor 0. oszlop = Csapajev 0. sor 1. oszlop = Vaszilij 0. sor 2. oszlop = Ivanovics 1. sor #0. oszlop = Dzerzsinszkij 1. sor 1. oszlop = Félix 1. sor 2. oszlop = Edmundovics #. 2. 0. oszlop = Kotovszkij 2. sor 1. oszlop = Grigorij 2. sor 2. oszlop = Ivanovics

Két hurok segítségével, amelyek közül az egyik be van ágyazva a másikba, megjelenítettük az 1C értéktáblázat összes sorából az összes oszlop értékét. Ebben az esetben nem az oszlopok nevét használtuk, hanem az oszlopokra és a sorokra indexükkel hivatkoztunk. A jobb megértés érdekében ügyeljen a példán belüli megjegyzésekre.

Végezetül azt javaslom, hogy kissé módosítsuk a példánkat, hogy az oszlopszámok helyett a nevüket jelenítse meg a képernyőn. Ezen kívül készítek egy reprezentatívabb dizájnt a tartalom képernyőn való megjelenítéséhez.

For RowCount = 0 By MyTR.Quantity() - 1 Loop // ciklus a sorok között Report(" ======= Sor # " + RowCount + " ======="); Jelenteni(" "); // soremelés (üres sor beszúrása) For ColumnCount = 0 By MyTR.Columns.Quantity() - 1 Loop // beágyazott oszlop iterációs ciklus // cellaérték lekérése (az aktuális sorból és az aktuális oszlopból) CellValue = MyTR[RowCount][ ColumnCount]; // az oszlop nevének lekérése ColumnName = MyTR.Columns[Oszlopszám].Név; // az oszlopnév és a cellaérték megjelenítése Report(ColumnName + ": " + CellValue); EndCycle; Jelenteni(" "); // újsor (üres sor beszúrása) EndCycle;

Most, a képernyőn, az információ kezdett reprezentatívabbnak tűnni:

0. sor ======= Vezetéknév: Csapajev Keresztnév: Vaszilij Középső név: Ivanovics ======= 1. sor ======= Vezetéknév: Dzerzsinszkij Keresztnév: Közép Felix név: Edmundovics ===== == 2. sor ======= Vezetéknév: Kotovsky Keresztnév: Grigorij Apanév: Ivanovics

Igen, majdnem elfelejtettem. Ha két operátort [...][...] használunk egy sorban, az oszlopindex helyett ennek az oszlopnak a nevét adhatjuk át: Értéktábla[SorIndex][Oszlopnév]

For RowCount = 0 By MyTR.Quantity() - 1 Loop // ciklus a sorok között Report(" ======= Sor # " + RowCount + " ======="); Jelenteni(" "); // soremelés (üres sor beszúrása) For ColumnCount = 0 By MyTR.Columns.Quantity() - 1 Loop // beágyazott hurok oszlopokon keresztül ColumnName = MyTR.Columns[Oszlopszám].Név; // az oszlopnévCellÉrték lekérése = SajátTR[Sorszám][Oszlopnév]; //

Ügyeljen a nyíllal jelölt sorra ". Ebben a sorban az aktuális oszlop indexe helyett az aktuális oszlop nevét adjuk át a szögletes zárójelben lévő argumentumnak [...] Az eredmény ugyanaz lesz.

És most az utolsó ebben a cikkben.

Az 1C értéktáblázat összes adatának HELYES fogadása, ciklusok segítségével a sorok és az oszlopok gyűjteményének iterálásához

Minden aktuális sorhoz a MyTR ciklusból // léptesse át a karakterláncok gyűjteményét Report(" ======= # " sor " + MyTR.Index(CurrentRow) + " ======="); Jelenteni(" "); Minden egyes aktuális oszlophoz MyTR.Columns Loop // beágyazott ciklus az oszlopok gyűjteményén ColumnName = CurrentColumn.Name; // az oszlopnévCellÉrték lekérése = AktuálisSor[Oszlopnév]; // cellaérték lekérése BY oszlop NÉV szerint Report(Oszlopnév + ": " + CellValue); // az oszlopnév és a cellaérték megjelenítése EndCycle; Jelenteni(" "); EndCycle;

A példában két hurkot használtunk. Az oszlopgyűjtő hurok a sorhurokba van beágyazva. Ha foglalkozott a fenti példákkal, és elolvasta a korábbi cikkeket, akkor nem lesz nehéz megértenie, hogyan működik ez a példa.

Végül az utolsó példánkban szereplő kódsorok számát a lehető legrövidebbre fogom hagyni a köztes változók használatának megszüntetésével. Kapunk egy mintát a valós alkalmazásokban használt "ipari kódból".

Ezt csak akkor szabad megtenni, ha jól érti, mit csinál. Ha a kód nagyon összetett, akkor elfogadható a közbenső változók meghagyása, hogy később könnyebben megértse a saját kódját. Ezenkívül minden kódot legalább minimálisan kommentálni kell, hogy egy idő után könnyebben érthető legyen a program szövege.

Minden CurrentRow From MyTR Loop // ciklus a sorokon keresztül Report(" ======= Line # " + MyTR.Index(CurrentRow) + " =======" + Symbols.PS); Minden CurrentColumn From MyTr.Columns Loop // iterate over oszlopok Report(AktuálisOszlop.Név + ": " + AktuálisSor[AktuálisOszlop.Név]); EndCycle; Jelenteni(" "); EndCycle;

A képernyőn megjelenő kimenet nem változott, ugyanaz marad, mint az előző példában:

2 HETES TANFOLYAM

"PROGRAMOZÁS 1C-ben KEZDŐKNEK"

A tanfolyam el fog jönni email. Legyen programozó lépésről lépésre végrehajtott feladatok végrehajtásával.

A részvételhez csak számítógép és internet szükséges.

Ingyenes belépés a tanfolyamra:

sp-force-hide ( kijelző: nincs;).sp-form ( kijelző: blokk; háttér: #eff2f4; padding: 5px; szélesség: 270px; max-width: 100%; border-radius: 0px; -moz-border -radius: 0px; -webkit-border-radius: 0px; font-family: Arial, "Helvetica Neue", sans-serif; background-repeat: no-repeat; background-position: center; background-size: auto;) .sp-form bemenet ( kijelző: inline-block; átlátszatlanság: 1; láthatóság: látható;).sp-form .sp-form-fields-wrapper ( margó: 0 auto; szélesség: 260px;).sp-form .sp -form-control ( háttér: #ffffff; keretszín: #cccccc; keret stílusa: tömör; keret szélessége: 1 képpont; betűméret: 15 képpont; bal oldali padding: 8,75 képpont; jobb oldali padding: 8,75 képpont; szegély -sugár: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; magasság: 35px; szélesség: 100%;).sp-form .sp-field label ( szín: #444444; font- méret: 13px; betűstílus: normál; font súlya: félkövér;).sp-form .sp-button ( border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; háttérszín: #f4394c; szín: #ffffff; szélesség: 100%; font-weig ht: 700; betűstílus: normál font-család: Arial, "Helvetica Neue", sans-serif; doboz-árnyék: nincs -moz-box-shadow: nincs; -webkit-box-shadow: nincs; háttér: linear-gradient(to top, #e30d22 , #f77380);).sp-form .sp-button-container ( szövegigazítás: középre; szélesség: automatikus;)

A pénz és az áruk elszámolása érdekében az üzlet széles körben használja különböző táblázatok. Szinte minden dokumentum egy táblázat.

Az egyik táblázat felsorolja a raktárból kiszállítandó árukat. Egy másik táblázatban - ezen áruk fizetési kötelezettsége.

Ezért az 1C-ben az asztalokkal végzett munka kiemelkedő helyet foglal el.

Az 1C táblázatokat "asztalrészeknek" is nevezik. Referenciakönyvek, dokumentumok és mások rendelkeznek velük.

A lekérdezés a végrehajtása eredményeként egy táblát ad vissza, amely kétféle módon érhető el.

Az első - gyorsabb - kijelölés, sorok gyűjtése belőle csak sorrendben lehetséges. A második a lekérdezés eredményének kirakása egy értéktáblázatba, majd véletlenszerű hozzáférés hozzá.

//1. lehetőség – szekvenciális hozzáférés a lekérdezési eredményekhez

// asztal lekérése
Selection = Query.Execute().Select();
// sorrendben megkerüli a lekérdezés eredményének összes sorát
While Selection.Next() Loop
Jelentés(Kiválasztás.Név);
EndCycle;

//2. lehetőség - feltöltés az értéktáblázatba
Query = New Query("SELECT Name FROM Directory.Nomenclature");
// asztal lekérése
Table = Query.Execute().Feltöltés().
// akkor az összes sort is megkerülhetjük
A táblázathurok minden sorához
Report(String.Name);
EndCycle;
//vagy tetszőlegesen hozzáférhet a karakterláncokhoz
String = Table.Find("Shovel", "Name");

Fontos jellemzője, hogy a lekérdezés eredményéből kapott táblázatban minden oszlop erősen begépelt lesz. Ez azt jelenti, hogy ha lekéri a Név mezőt a Nomenclature keresésből, akkor egy String típusú oszlopot kap, amelynek megengedett hossza legfeljebb N karakter.

Táblázat az űrlapon (vastag kliens)

A felhasználó akkor dolgozik a táblázattal, amikor az az űrlapon van.

A leckében és a leckében megbeszéltük a formákkal való munka alapelveit

Tehát helyezzük el a táblázatot az űrlapon. Ehhez húzza a táblázatot a vezérlőpultról. Hasonlóképpen kiválaszthatja a menüből az Űrlap/Beszúrás vezérlőt.

Az adatok konfigurációban tárolhatók - ekkor ki kell választani a konfigurációs objektum egy meglévő (korábban hozzáadott) táblázatos részét, amelynek űrlapját szerkeszti.

Kattintson a "..." gombra az Adat tulajdonságban. A lista megtekintéséhez táblázatos részek, meg kell nyitnia az Objektum ágat.

Táblázatos rész kiválasztásakor az 1C maga is hozzáad oszlopokat az űrlapon lévő táblázathoz. A felhasználó által egy ilyen táblázatba beírt karakterláncok automatikusan mentésre kerülnek a könyvtárral/dokumentummal együtt.

Ugyanabban a Data tulajdonságban megadhat egy tetszőleges nevet, és kiválaszthatja a ValueTable típusát.

Ez azt jelenti, hogy egy tetszőleges értéktáblázat került kiválasztásra. Nem ad hozzá automatikusan oszlopokat, nem menti el automatikusan, de azt csinálhatsz vele, amit akarsz.

Kattintás Jobb klikk a táblázatra felvehet egy oszlopot. Az oszlop tulajdonságai között megadható a neve (az 1C kódban hivatkozásként), az űrlapon az oszlopfejléc, a kapcsolat a táblázatos rész attribútumaival (utóbbi - ha nem tetszőleges táblázat van kiválasztva, de táblázatos rész).

Az űrlapon a táblázat tulajdonságainál megadhatja, hogy a felhasználó hozzáadhat-e/törölhet-e sorokat. Egy fejlettebb űrlap a Csak megtekintése jelölőnégyzet. Ezek a tulajdonságok hasznosak az információ megjelenítésére szolgáló táblázatok rendszerezéséhez, de nem a szerkesztéshez.

A táblázat kezeléséhez meg kell jeleníteni a parancspanelt az űrlapon. Válassza ki a Form/Insert Control/Command Panel menüpontot.

A parancssor tulajdonságainál jelölje be az Automatikus kiegészítés jelölőnégyzetet, hogy az eszköztár gombjai automatikusan megjelenjenek.

Táblázat az űrlapon (vékony/felügyelt kliens)

Tovább kezelt formában ezek a műveletek kicsit másképp néznek ki. Ha táblázatos részt kell elhelyeznie az űrlapon, bontsa ki az Objektum ágat, és húzza balra az egyik táblázatszakaszt. És ez az!

Ha értéktáblázatot kell elhelyeznie, adjon hozzá egy új űrlapattribútumot, és adja meg a típust a tulajdonságaiban - egy értéktáblázatban.

Oszlopok hozzáadásához használja a jobb egérgomb menüjét ennél az űrlapattribútumnál, az Attribútum oszlop hozzáadása elemnél.

Ezután húzza a táblázatot is balra.

Annak érdekében, hogy a táblázatnak legyen parancssora, a táblázat tulajdonságainál válassza ki az értékeket a Használat - Parancssor pozíció szakaszban.

Táblázat exportálása Excelbe

Az űrlapon található bármely 1C táblázat kinyomtatható vagy feltölthető Excelbe.

Ehhez kattintson a jobb gombbal szabad hely a táblázatban, és válassza a Lista megjelenítése lehetőséget.

Felügyelt (vékony) kliensben a Minden művelet/Megjelenítési lista menüpont segítségével hasonló műveletek hajthatók végre.



Betöltés...
Top