Kapcsolatok

Töltse ki az 1c 8.2 adatlapon található értéktáblázatot. Milyen módszerek léteznek, és hogyan lehet egyszerre több értéket keresni

Az értéktábla egy speciális univerzális objektum, amelyet arra terveztek, hogy adatokat tároljon táblázatos ábrázolásban. A legfontosabb különbség a tábla és az alkalmazásobjektumok között a fizikai adatbázistáblákhoz való kötődés hiánya. Az értéktáblázat csak a RAM-ban létezik, ami egyrészt egyedi lehetőségeket biztosít, másrészt bizonyos korlátozásokat ír elő. Ennek ellenére a táblával való interakció lehetőségei hasonlóak az adatbázisban ténylegesen létező objektumokkal való interakcióhoz.

Történelmileg az 1C értéktáblázatának kettős célja van, mivel a meglévő táblázatok virtuális analógja, ugyanakkor egy vezérlőelem is. A felügyelt alkalmazásra való áttéréssel e funkciók nagy része elavult, de mostantól felhasználói felület eleme is lehet, de néhány jelentős korlátozással.

Értéktábla, mint objektum felépítése

Az értéktáblázat tulajdonságait két előre meghatározott gyűjtemény kombinációja határozza meg: az oszlopok és a sorok.

Értéktáblázat Oszlopok

Egy értéktáblázat oszlopa a meghatározó tulajdonsága. A táblázat oszlopainak halmaza határozza meg a szerkezetét. Az oszlopok a táblázatos szakaszok vagy dokumentumnaplók felhasználói felületéről ismert fizikai táblák vagy oszlopok mezőinek felelnek meg. Egy oszlopnak lehet belső neve, értéktípusa és címe, amely akkor jelenik meg, amikor interaktívan dolgozik a táblával.

Mivel az oszlopok objektumok gyűjteményét képezik, hozzáadhat, törölhet és szerkeszthet oszlopokat.

Értéktábla sora

A szoftveres interfész szemszögéből nézve a karakterláncok egy értéktáblázatba ágyazott külön gyűjtemény. Hasonlóak a fizikai táblák rekordjaihoz, vagyis a felhasználó számára ismerős sorokhoz egy táblázatos szakaszban vagy dokumentumnaplóban. Minden egyes sor egy objektum elnevezett tulajdonságokkal, amelyek neve megegyezik a táblázat oszlopainak nevével.

Így egy karakterlánccal való interakció nagyon hasonlít a más objektumokkal való interakcióhoz. Tulajdonságait olvashatja és írhatja, beleértve az előre meghatározott „FillPropertyValues()” függvényt is. Mivel a sorok az értéktábla fő gyűjteménye, a Clear() metódus a táblázat összes sorának törlésére szolgál.

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

Számos módja van az értéktáblázat használatra késznek. Nézzünk meg néhányat közülük. Minden példa kódlistaként jelenik meg megjegyzésekkel.

Táblázat készítése a konstruktor segítségével

A fő módszer, amely lehetővé teszi, hogy pontosan azt a táblát hozza létre, amelyre a fejlesztőnek szüksége van, sajnos a leginkább munkaigényes, mivel az összes szükséges táblatulajdonság manuális megadását igényli.

DemoTable = Új értéktábla; // Először is inicializáljuk a TK-t // Ezután meghatározzuk az új oszlopokhoz szükséges paramétereket és hozzáadjuk a gyűjteményhez // A "Nómenklatúra" oszlop létrehozása Name = "Nómenklatúra"; ValueType = New TypeDescription("DirectoryLink.Nomenclature"); Title = "Nómenklatúra (termék)"; DemoTable.Columns.Add(Name, ValueType, Header); // A "Mennyiség" oszlop létrehozása Name = "Quantity"; ValueType = New TypeDescription("Szám"); DemoTable.Columns.Add(Name, ValueType); // Ezen manipulációk eredményeként egy üres táblázatot hoztunk létre beírt oszlopokkal // Ha a primitív típusok pontosabb gépelésére van szükség, akkor a „Típusok leírása” konstruktor kiterjesztett szintaxisát használja.

Táblázat készítése másolással

Ha rendelkezik megfelelő szerkezetű és/vagy összetételű referenciával, akkor lemásolhatja vagy letöltheti a referencia értéktáblázatot. Ha a referenciatábla egy másik tábla, akkor a „Referenciatáblázatok másolása” módszert kell használnia. Ha táblázatos résszel vagy regiszterrekordok halmazával van dolgunk, akkor az „Értéktáblázat eltávolítása” módszert kell használnia. Ha csak a szerkezetre van szüksége, használhatja az „Oszlopok másolása” módszert.

// Lehetőség az összes sor átmásolásával a műszaki specifikáció szabványból, de csak a szabvány két megadott oszlopának megőrzésével = "Nómenklatúra, Mennyiség"; DemoTable = TableEtalon.Copy(, ColumnsEtalon); // Lehetőség az előre kiválasztott sorok másolásával a műszaki specifikáció szabványból, miközben megőrzi a szabvány két megadott oszlopát = SelectIntoArrayThe Rows We Need From the Table of the Standard(); ColumnsStandard = "Nómenklatúra, Mennyiség"; DemoTable = TableEtalon.Copy(RowsEtalon, ColumnsEtalon); // Lehetőség sorok másolására a specifikációs szabványból a megadott szűrő használatával, egy oszlop „Nómenklatúra” megőrzésével // Minden olyan sor ki lesz jelölve, ahol a Mennyiség oszlop értéke 0, csak a Nómenklatúra oszlop Sorválasztás = New Structure("Mennyiség " jelenik meg a kapott táblázatban , 0); ColumnsStandard = "Nómenklatúra"; DemoTable = TableEtalon.Copy(RowsEtalon, ColumnsEtalon); // Lehetőség a táblázat teljes másolásával és egy sor törlésével, amelynek a mennyiség mező értéke nulla, valamint a teljes „Mennyiség” oszlop törlése = Új szerkezet ("Mennyiség", 0); ColumnsStandard = "Nómenklatúra"; DemoTable = TableEtalon.Copy(RowsEtalon, ColumnsEtalon); TableRow = DemoTable.Find(0, "Mennyiség"); DemoTable.Delete(TableRow); DemoTable.Columns.Delete("Mennyiség"); // Hasonló opciók és azok módosításai alkalmazhatók a regiszterrekordok táblázatos részeire és halmazaira

Táblázat készítése lekérdezéssel

Ha a szükséges táblázat sablonja létezik az adatbázisban, akkor egy lekérdezéssel gyorsan létrehozhat egy táblát a kívánt szerkezettel.

// Példa üres tábla létrehozására a felhalmozási regiszter szerkezete alapján // Könnyen kitalálható, hogy így kitöltött táblát is kaphatunk Query = New Query("SELECT FIRST 0 * Felhalmozási regiszterből. Termékek a raktárban"); RequestResult = Request.Execute(); DemoTable = Lekérdezés eredménye.Unload(); // Példa egy üres tábla létrehozására kifejezetten meghatározott típusok és mezőnevek használatával Query = New Query; Query.Text = "SELECT TOP 0 | Value(Directory.Nomenclature.EmptyLink) AS Nómenklatúra, | EXPRESS(0 AS NUMBER(15, 3)) AS Mennyiség"; RequestResult = Request.Execute(); DemoTable = Lekérdezés eredménye.Unload(); // FONTOS! Ne felejtsük el, hogy a kérésből kapott oszlopértékek típusai mindig a Null típust tartalmazzák // Így a kérelem által létrehozott TK mindig összetett oszloptípusokkal rendelkezik

Következtetés

Ebben a rövid cikkben a megértéshez és a használat megkezdéséhez elegendő értéktáblázat készítésének alapvető tulajdonságait és gyakorlati technikáit tekintettük át. Maga az értéktábla objektum annyira sokrétű, hogy képességeinek részletes leírásához külön cikk megírása szükséges a technikákról és a munkamódszerekről.

A pénz és az áruk elszámolására különféle táblázatokat széles körben használnak az üzleti életben. 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ázat az ezen áruk fizetési kötelezettségeit mutatja.

Ezért az 1C-ben az asztalokkal való munka előkelő helyet foglal el.

Az 1C táblázatokat „táblázatos részeknek” is nevezik. A címtárak, dokumentumok és egyebek rendelkeznek velük.

A lekérdezés végrehajtásakor egy táblát ad vissza, amely két különböző módon érhető el.

Az első - gyorsabb - kijelölés, abból sorok gyűjtése csak sorrendben lehetséges. A második a lekérdezés eredményének feltöltése 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ések eredményeihez

//szerezd meg az asztalt
Select = Query.Run().Select();
// sorrendben végigmegyünk a lekérdezés eredményének minden során
Míg Select.Next() Loop
Jelentés(Kiválasztás.Név);
EndCycle;

//2. lehetőség – feltöltés értéktáblázatba
Request = New Request("SELECT Name FROM Directory.Nomenclature");
//szerezd meg az asztalt
Table = Query.Run().Unload().
//továbbá az összes vonalat bejárhatjuk
A táblázatciklus minden sorához
Report(String.Name);
EndCycle;
//vagy tetszőlegesen hozzáférhet a karakterláncokhoz
Row = Table.Find("Shovel", "Name");

Fontos jellemzője, hogy a lekérdezés eredményeként kapott táblázatban minden oszlop szigorúan be van írva. Ez azt jelenti, hogy a Név mező lekérésével a Nomenclature könyvtárból 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 Form/Insert Control menüpontot a menüből.

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

Kattintson a "..." gombra az Adat tulajdonságban. A táblázatos részek listájának megtekintéséhez ki kell bontani az Objektum ágat.

Amikor kiválasztja a táblázatos részt, 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 sorok automatikusan mentésre kerülnek a referenciakönyvvel/dokumentummal együtt.

Ugyanabban az Adat tulajdonságban megadhat egy tetszőleges nevet, és kiválaszthatja az Értéktábla típusát.

Ez azt jelenti, hogy egy tetszőleges értéktáblázat került kiválasztásra. Nem ad hozzá automatikusan oszlopokat, és nem is menti automatikusan, de bármit megtehetsz vele.

A táblázatra jobb gombbal kattintva hozzáadhat egy oszlopot. Egy oszlop tulajdonságainál megadhatjuk a nevét (az 1C kódban való hivatkozáshoz), az űrlapon az oszlopfejlécet, a kapcsolatot a táblázatos rész attribútumával (utóbbi - ha nem tetszőleges táblázat van kiválasztva, hanem egy 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 kényelmesek az információk megjelenítésére, de nem szerkesztésére szolgáló táblázatok rendszerezésére.

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

A parancssor tulajdonságainál jelölje be az Automatikus kitöltés jelölőnégyzetet, hogy a panelen lévő gombok automatikusan megjelenjenek.

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

Egy kezelt űrlapon 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ázatos részt. Ez minden!

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

Oszlopok hozzáadásához kattintson a jobb gombbal az űrlapattribútumra, és válassza az Attribútumoszlop hozzáadása lehetőséget.

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

Ahhoz, hogy egy táblázatnak legyen parancssora, a táblázat tulajdonságainál válassza ki az értékeket a Használat – Parancssor pozíciója részben.

Táblázat feltöltése Excelbe

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

Ehhez kattintson a jobb gombbal egy üres helyre a táblázatban, és válassza a Lista menüpontot.

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.

Keressen az 1C értékek táblázatában

Milyen módszerek léteznek, és hogyan lehet egyszerre több értéket keresni.

Két speciális módszer létezik az értéktáblázatban való keresésre:

1. Keresse meg

TVHorizon = Directories.Nomenclature.FindByName("TVHorizon");
FoundString = TZNomenclature.Find(TVHorizon);
//azt is megadhatjuk, hogy mely oszlopokban keressünk a keresés felgyorsítása érdekében
FoundString = TZNomenclature.Find(TVHorizon, "Nómenklatúra");

Ez a metódus az első talált sort adja vissza a kívánt értékkel, vagy Undefined értéket, ha nem találja. Ezért kényelmesen használható egyedi értékek keresésére, mert ellenkező esetben, ha egy értéket talál, el kell távolítania a táblázatból, hogy megtalálja a következőt.

A probléma elkerülése érdekében a következő módszerrel találhat egyező karakterláncokat:

2. FindStrings


Selection Structure.Insert("Nómenklatúra", TVHorizon); // először jelölje meg az oszlopot, ahol keresni kell, majd azt, hogy mit kell keresni.

Ez a metódus mindig egy tömböt ad vissza, de lehet üres is, ha nem talál semmit. És ez a módszer, az előzőhöz hasonlóan, magukat az értéktáblázat sorait adja vissza, nem pedig magukat az értékeket egy külön tömbben. Ezért a tömb karakterláncában vagy az előző módszerhez hasonlóan a talált karakterlánc értékeinek megváltoztatásával megváltoztatja az értéket a feldolgozott értéktáblázatban.

Egy másik jó dolog ebben a módszerben, hogy képes egyszerre keresni az értéktábla több oszlopában:


SelectionStructure = Új struktúra;
Selection Structure.Insert("Nómenklatúra", TVHorizon);
Selection Structure.Insert("Mennyiség", 10);
FoundArray of Rows = TZNomenclature.FindLines(SelectionStructure);

Az egyetlen negatívum, amint láthatja, hogy nem használhat más típusú összehasonlítást, mint az „egyenlő”

Íme egy kis tény kezdőknek – egyszerű példák az értéktáblázattal való munkavégzésre:

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

ValueTable = Új értéktábla;


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

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


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


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


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

FoundRow = ValueTable.Find(SearchValue);


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

FoundRow = ValueTable.Find(SearchValue, "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", SearchValue);
FoundRows tömb = ValueTable.FindRows(SearchStructure);


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

7. Hogyan iteráljunk véletlenszerű sorrendben egy értéktáblázatot

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

Ugyanez az indexekkel:

SeniorIndex = ValueTable.Quantity() - 1;
Fiók esetén = 0 a SeniorIndex ciklushoz
Jelentés(Értéktábla[Számla].Név);
EndCycle;


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

ValueTable.Delete(Törölendő sor);

index szerint

ValueTable.Delete(0);


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

ValueTable.Columns.Delete(ColumnToDelete);


index szerint

ValueTable.Columns.Delete(0);

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

10. Hogyan lehet kitölteni egy értéktáblázatot, ha az oszlopnevek változókban vannak?

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?
A Fiskális számvitel zászló oszlopát az Értéktáblázat értéktáblázatában a False értékkel kell kitölteni.

Értéktáblázat. Töltse ki az értékeket (hamis, "Fiskális számviteli zászló");


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öltendő oszlop neve.

12. Hogyan tölthetem ki a „Receiver Table” értéktáblázatot a „SourceTable” értéktáblázat adataival?

Ha a címzett táblázat még nem létezik a művelet időpontjában, vagy a korábbi oszlopait nem kell menteni, akkor létrehozhatja az eredeti teljes másolataként

Címzett táblázat = Forrástábla.Copy();


Második lehetőség: a ReceiverTable tábla létezik, és kár lenne 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(NewRow, SourceTableRow);
A ciklus vége


A forrástábla minden sorához egy új sor kerül hozzáadásra a fogadó táblához, é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ábla annyi nullértékű sort fog tartalmazni, 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 megengedett oszloptí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.

Az egyező nevű oszlopok adatainak teljes másolása

Ugyanazok az oszlopok = Új tömb();

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

Ha egyező oszlop<>Undefined Akkor

// Oszloptulajdonságok lekérése.
Név = Oszlop.Név;
ValueType = Column.ValueType;
Fejléc = Oszlop.Fejléc;
Szélesség = Column.Width;

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

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

// Adja hozzá az egyező oszlopok következő nevét a tömbhöz.
Ugyanazok az oszlopok.Hozzáadás(Oszlop.Név);

endIf;

EndCycle;

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

// Új sor hozzáadása a céltáblázathoz.
NewRow = Táblázatfogadó.Hozzáadás();

// Töltse ki az értékeket a megfelelő cellákba.
Minden névhez oszlopok azonos nevű oszlopokból Ciklus
ÚjSor[Oszlopnév] = ForrásTáblázatSor[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 a címzett táblában azonos nevű oszlop található, akkor az új oszlop összes tulajdonságát változókban gyűjtjük össze. 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 fogadó táblához, és megnyitunk egy hurkot az egyező oszlopok tömbjének oszlopnevei felett.
Ezen a beágyazott cikluson belül a céltábla celláit töltjük ki a forrástábla cellájának adataival.

13. Hogyan lehet oszlopokat hozzáadni a „ValueTable” értéktáblázathoz típuskorlátozással?

Egy oszlop hozzáadásakor egyszerűen megadhatja a nevét, és érintetlenül hagyhatja 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ás nélkül.
ValueTable.Columns.Add("Object");


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

Az adattípust jelző oszlop hozzáadása

// Az oszlop adattípusaira vonatkozó korlátozások:
// Csak a "Counterparties" könyvtár elemei.
Értéktáblázat.Columns.Add("Számla", Új típusleírás("DirectoryLink.Accounts"));


Ha az oszlopadatok kitöltésére engedélyezett típusok között van karakterlánc, akkor korlátozhatja annak bitmélységét (hosszát), megadhatja a változó vagy fix hosszúság használatát. Mindez egy objektum létrehozásával érhető el a String Qualifiers konstruktor segítségével. Ezután ezt az objektumot a TypeDescription konstruktor egyik paramétereként fogja használni.

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

// Korlátozások előkészítése és beállítása a String típusú adatokhoz.
String Qualifiers = New String Qualifiers(20, AllowedLength.Variable);
ValidTypes = NewTypeDescription("String", StringQualifers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


Hasonló műveletek hajthatók végre a szám- és dátumminősítők tekintetében.
Figyelem: a típusleírásokat a konstruktor akár „a semmiből” is megépítheti, vagy egy meglévő típusleírást lehet alapul venni.

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

// A korábban használt típusleírás kiterjesztése.
QualifiersNumbers = Új minősítőszámok(10, 2, ÉrvényesAláírás.Nem negatív);
DateQualifers = Új dátumminősítők(DátumParts.Dátum);
Extended ValidTypes = Új típusleírás(ÉrvényesTípusok, "Szám, Dátum", Számminősítők, Dátumminősítők);

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

Üdvözlöm az infostart minden olvasóját. Ez a cikk egy tetszőleges értéktáblázat létrehozásának kérdésével foglalkozik egy felügyelt alkalmazás formájában, programozottan.

A feladat jellemzői.

Bárki, aki egy normál alkalmazásban programozott, gyakran szembesült azzal a feladattal, hogy tetszőleges értéktáblázatot kapjon egy űrlapon. A tetszőleges értéktáblázat olyan táblázat, amelynek oszlopainak száma és típusa nem ismert előre. Vagyis lehet 3 oszlop, esetleg 6, esetleg 8. Egy normál alkalmazásban minden egyszerű: elhelyezheti az „Értéktáblázat” elemet a feldolgozó űrlapon, majd átviheti a létrehozott értéktáblázatot ​ehhez az elemhez programozottan. Ezután egy egyszerű paranccsal:

Form Elements.TableField.CreateColumns();

kap egy kész értéktáblázatot az űrlapon. Úgy tűnik, lehetne egyszerűbb is.

Ez mind benne volt a normál alkalmazásban. Egy felügyelt alkalmazásban minden megváltozott. Nem olyan egyszerű tetszőleges táblázatot létrehozni. Most vagy mereven paramétereznie kell az értéktáblázatot az űrlapon, vagy programozottan létre kell hoznia (leírja, nos, ez valójában magának a felügyelt alkalmazásnak a lényege). Ezt próbáljuk megtenni: programozottan létrehozni egy tetszőleges értéktáblázatot egy ellenőrzött űrlapon.

A probléma megoldása.

Az első dolog, amit meg kell tennünk, hogy meghatározzuk, hogyan fog megjelenni a táblázat az űrlapon. A lényeg az, hogy a feldolgozás során ne kelljen űrlapelemet létrehoznia. A teljes táblázathoz hasonlóan programozottan hozzuk létre. Vagyis a táblázat leírása és létrehozása az űrlap megnyitásának pillanatában vagy egy gomb segítségével történik - attól függően, hogy kinek van rá szüksége.

A táblázat létrehozása az űrlapon az értéktábla attribútumként való leírásán keresztül történik:
SelectionTypeArray = Új tömb; SelectionType tömbje.Add(Type("Értéktábla")); ChoiceTypeDescription = Új típusleírás(ChoiceTypeArray); Részletek tömbje = New Array; Attribútumok tömbje.Add(New Form Attributes("Ütemezési táblázat", SelectionType leírása, "", "TZN")); Most létre kell hoznunk egy programozott értéktáblázatot, amely tartalmazza az adatokat. Ha az értéktáblázatot egy lekérdezésből kapjuk, akkor többé-kevésbé minden rendben van. Ha a táblázatot manuálisan hozzuk létre, akkor a „Típusok leírása” segítségével létrehozható a számokat vagy dátumokat tartalmazó oszlopok jelentése. A lényeg az, hogy az értéktáblázat oszlopainak valamilyen típusúnak kell lenniük. Ha például elvárható, hogy a felhasználó interaktívan töltse ki az adatokat ezekben az oszlopokban, akkor az értéktábla oszlopát nem lehet egyszerűen névvel megadni. Ne feledje – ez nagyon fontos, mert... Ezeket a típusokat átvisszük az űrlapon lévő táblázatba.
Létrehozunk egy táblázatot, amely több oszlopot tartalmaz:
CD = NewDateQalifiers(DateParts.Time); ArrayKD = Új tömb; ArrayCD.Add(Típus("Dátum")); DescriptionTypesTime = Új leírástípusok(ArrayCD,CD); TZ = Új értéktábla;
TK.Columns.Add("With", DescriptionTypesTime);
TK.Columns.Add("Before", DescriptionTypesTime);
TK.Columns.Add("Név");
TK.Columns.Add("Megjegyzés"); // Teljes név és Megjegyzés - sorok Ezután a TK programtáblázatunkat töltjük ki a szükséges adatokkal. Kapunk egy TK táblát, amely tartalmazza a szükséges értékeket, és készen áll a létrehozott form attribútumba való átvitelre. A TK oszlopok minden oszlopához

Attribútumok tömbje.Add(New Form Attributes(Oszlop.Név, Oszlop.Értéktípus,"Ütemezési táblázat"));
EndCycle;
ChangeDetails(ArrayDetails);
SelectionFieldsTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldsTable.DataPath = "ScheduleTable";
SelectionFieldTable.Display = TableDisplay.List;

Ez egy egyszerű kombináció, és kész is az asztalunk.

A TK oszlopok minden oszlopához

NewElement = Elemek.Hozzáadás(Oszlop.Név, Típus("Űrlapmező"), SelectionFieldTable);
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "Ütemezési táblázat." + Oszlopnév;
ÚjElem.Szélesség = 10;
EndCycle;

Feltételes kialakítás, ha kell, manuálisan is írjuk, a parancsmenü - manuálisan. A táblázatkezelőket is kézzel írják. Például eseménykezelő hozzáadásához a „Kiválasztás” táblázathoz:

SelectionFields táblázat.SetAction("Kiválasztás","TZNSelection");

Ennek az eseménynek a feldolgozásához külön eljárást írnak elő eljárás formájában:

&OnClient
Eljárás TKNSelection (TK, Selected Row, Field, Standard Processing)
//kezelő parancsok EndProcedure

Ne feledje, hogy a táblakezelők aktiválják a klienst, ezért rendelkezniük kell egy fordítómutató-parancskal

&OnClient

Nos, az utolsó dolog, amit hozzá akartam tenni, az az, hogy mindezen lépések után ne felejtse el átadni a kész táblázatot a form attribútumnak:

ValueВFormAttributes(ToR, "ScheduleTable");

Eredményünk a következő:


És itt van a "Kiválasztás" esemény kezelése:



Utószó.

Remélem, hogy a cikk segít azoknak az 1C programozóknak, akik elkezdik programozottan táblákat létrehozni egy űrlapon.

Letölthet egy feldolgozást, amely programozottan létrehoz egy értéktáblázatot, és megjeleníti azt egy kezelhető űrlapon megjegyzésekkel, amelyek segítenek a saját táblázatok létrehozásában.



Tetszett a cikk? Oszd meg