itthon / Online szolgáltatások / Az 1c. ábra egy értéktáblázatot mutat. És most: az anyag ismétlése

Az 1c. ábra egy értéktáblázatot mutat. És most: az anyag ismétlése

Valószínűleg az univerzális értékgyűjtemények egyetlen objektuma sem olyan népszerű az 1C fejlesztők körében, mint az értéktáblázat (TV). Az értéklisták nem bővíthetők részletekkel, az értékfa vizuálisan jól érzékelhető, de a sorok értékeinek programozott leolvasását nehéz megvalósítani.

És csak az értéktáblázat:

  • Képes közvetlenül kitölteni a dokumentumok táblázatos részeit, kézikönyveket és feldolgozni;
  • Egy kérés végrehajtásának eredménye;
  • Könnyen olvasható és vizuálisan megfogalmazott;
  • és még sokan mások.

Ebben a cikkben megpróbáltunk általános képet adni egy ilyen összetett és univerzális tárgyról, mint értéktáblázatról.

Miből állnak az értéktáblázatok?

Minden kezdő fejlesztő egyértelműen tudja, hogy az értéktáblázat a következőket tartalmazza:

  1. A táblázat szerkezetét leíró oszlopok;
  2. A táblázatot információval feltöltő sorok.

Azonban nagyon gyakran megfeledkezünk a tábla egy fontos tulajdonságáról - az indexeiről, nevezetesen, hogy használatuk lehetővé teszi, hogy nagymértékben felgyorsítsuk a táblában való keresést, a kijelölések kialakítását, és komolyan javítja a teljesítményt.

De először a dolgok.

Az 1. ábra azt mutatja, hogyan néz ki a legegyszerűbb eljárással kinyomtatott értéktáblázat, amely bemutatja azok szerkezetét és tartalmát.

Amint a példából látható, a táblázat 5 oszlopos, nem számítva a sorszámot sorrendben.

A legtöbb esetben nem kell megadni egy oszlop adattípusát és szélességét, elég megadni az oszlop nevét, de néhány esetben ez egyszerűen nem kerülhető el (pl. táblázat feltöltésekor egy dbf fájl).

Ha a jövőben egy lekérdezéshez adatforrásként kívánja használni az értéktáblázatot, akkor szükséges az adattípus megadása (2. ábra).

A sor hozzáadása az Add() metódussal történik, hozzárendelve az új sor nevét.

Értéktábla indexei

Az értéktáblázatban való keresés két módszerrel történik:

  • Find (bizonyos paraméterek alapján az első talált elemet adja vissza, ellenkező esetben az érték Undefined);
  • FindRows (bizonyos feltételeknek megfelelő táblázatsorok tömbjét adja vissza).

A nagy táblák közötti keresés nagymértékben lelassítja a rendszert, és sokáig tarthat. Ezekben az esetekben az indexeket kell használni.

Az első esetben a keresés egy érték és egy oszlop használatával történik, amit át kell vinni az indexekbe (3. ábra)

A vesszővel elválasztott indexek azt jelzik, hogy a táblában a FindRows metódussal lehet keresni, amelyhez paraméterként egy bizonyos struktúra kerül át.

A példában megadott esetben a második sor egy adott Nómenklatúra értéket és annak jellemzőit tartalmazó sorok egyidejű keresését jelöli, a harmadik pedig azt, hogy a „Gyártási rendelés” bizonylat hozzáadható a keresési paraméterekhez.

Különféle konfigurációs metaadat-objektumokkal, valamint jelentésekkel és feldolgozásokkal végzett munka során gyakran adódik olyan helyzet, amikor néhány műveletet kell végrehajtani a táblázatos részeikkel. Az űrlapelemekkel vagy a dokumentumok táblázatos részeivel való közvetlen munkavégzés nem mindig kényelmes.

Itt jön újra az értéktáblázat. A műszaki specifikációban a táblázatos alkatrészek Unload() módszerével a következőket teheti:

  1. Ismételje meg teljesen a dokumentumtábla szerkezetét, megőrizve minden lehetséges információt;
  2. Csak azokat az oszlopokat és sorokat határozza meg, amelyek a további munkához szükségesek, és jelenítse meg azokat.

A fordított művelet (a táblázatrész kitöltése) a Load() metódussal történik, melynek egyetlen paramétere a megjelenítendő tábla neve.

Megjegyzendő, hogy a táblázatos rész oszlopainak és a műszaki hozzárendelésnek az összehasonlítása név szerint történik.

Teljesen átmásolhatja az egyik TK-t a másikba, valamint meghatározhatja, hogy mely sorok és oszlopok kerüljenek átvitelre a Copy() metódussal.

4. ábra

Ebben az esetben a táblázat oszlopai megmaradnak, és a duplikációból származó információk és sorok törlődnek.

Értéktábla és lekérdezés

Amint fentebb említettük, a lekérdezés végrehajtásának eredménye feltöltésre kerül a műszaki specifikációban, de a fejlesztőknek gyakran van kérdése: hogyan lehet egy értéktáblázatot lekérdezéssel feldolgozni, lehetséges-e ez, és milyen kód segít ebben.

Az 1C lekérdezési technológiája nem jelenti a műszaki specifikációk adatforrásként történő használatát, de ez a korlátozás könnyen megkerülhető. Az 5. ábrán látható kód bemutatja, hogyan történik ez.

5. ábra

Ha a „*” karaktert az oszlopok nevére cseréli (TZ.Nomenclature formátumú sor), csökkentheti a feltöltött információk mennyiségét.

Hiba kérés végrehajtásakor (5. ábra) „A típus nem dolgozható fel a kérésben” azt jelzi, hogy a fejlesztő elfelejtette végrehajtani a 2. ábra kódjának egy részét, és nem írta be az oszlopokat.

Értéktábla és hurkok

Amikor egy értéktáblázat sorain iterálunk egy számlálót tartalmazó módszerrel (6. ábra), fontos megjegyezni, hogy a sorindex kezdeti értéke 0, az iterátor végső értékének pedig 1-nek kell lennie. kevesebb, mint a táblázat sorainak száma. Ellenkező esetben 100% az esélye a hibaüzenetnek: „Az index értéke a tartományon kívül van”

6. ábra

Általában jobb, ha felsoroljuk a műszaki specifikációk sorait a „Minden...-től” konstrukcióval, meghatározva az iterátor nevét.

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ázatait „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, sorok beszerzése belőle 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 sort is iterálhatjuk
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 űrlapjá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 lévő 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)

A 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.

Annak érdekében, hogy egy táblának 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 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.

Ü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ív módon töltse ki az adatokat ezekbe az oszlopokba, akkor az értéktáblázat oszlopát nem lehet egyszerűen névvel hozzáadni, annak típusnak kell lennie. 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("Note"); // 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 minden oszlopához. Oszlopok ciklusa

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 minden oszlopához. Oszlopok ciklusa

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 elkezdenek 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.

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 azt 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, hogy hol kell keresni, majd 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ának 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 egyszerre tud 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ő”