1s 8.3 struktúra az értéktáblázathoz

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 programérték táblát, 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.

Í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(TáblázatÉrtékek[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(OszlopTörölve);


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” található sorok indexeinek 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ámviteli Flag oszlopot az Értéktáblázatban az értéktáblázatban 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áblaSor[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ázatban 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 oszlopnevek felett az egyező oszlopok tömbjében.
Ezen a beágyazott cikluson belül a céltábla celláit kitöltjük 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 kaphatjuk meg, paraméterként átadva neki a típus string nevét (ha sok típus van, vesszővel elválasztva) vagy é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 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. 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.
MinősítőSzámok = Új minősítőszámok(10, 2, ÉrvényesSign.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);

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ő”