1s értéktáblázat hozzáadása ehhez. Itt van a teljes példakód

Valószínűleg az univerzális értékgyűjtemények egyetlen objektuma sem olyan népszerű az 1-es fejlesztők körében, mint az értéktábla (TK). Az értéklisták nem bővíthetők részletekkel, az értékfa vizuálisan kényelmes, de a sorai értékének programozott leolvasásának felépítése nehezen kivitelezhető.

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

  • Képes közvetlenül kitölteni a dokumentumok, címtárak és feldolgozás táblázatos részeit;
  • Egy kérés végrehajtásának eredménye;
  • Könnyen olvasható és vizuálisan formálható;
  • és még sokan mások.

Ebben a cikkben megpróbáltunk általános képet adni egy ilyen összetett és sokoldalú objektumról, mint értéktáblázatról.

Mik azok 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 ezek használata lehetővé teszi számunkra, hogy nagymértékben felgyorsítsuk a keresési folyamatot a táblázatban, a kijelölések kialakítását, és komolyan javítsuk a teljesítményt.

De először a dolgok.

Az 1. ábra 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ázatban 5 oszlop van, nem számítva a sorszámot sorrendben.

A legtöbb esetben nem kell megadni az oszlop adattípusát és szélességét, elég megadni az oszlop nevét, de néhány esetben egyszerűen nem megy e nélkül (pl. táblázat egy fájlba dbf formátumban).

Ha a jövőben az értéktáblázatot tervezzük adatforrásként használni a lekérdezéshez, meg kell adni az adattípust (2. ábra).

Egy sor hozzáadása az Add() metódussal történik, új sornév hozzárendelésével.

Értéktábla indexei

Az értéktáblázatban a keresés kétféle módon történik:

  • Find (bizonyos paraméterek szerint 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).

Keresés a következő szerint nagy asztalok erősen "felfüggeszti" a rendszert, és időben hosszú lehet. Ezekben az esetekben az indexeket kell használni.

Az első esetben a keresés egy értéken és egy oszlopon történik, és ezt az oszlopot kell átadni az indexeknek (3. ábra)

A vesszővel elválasztott indexek azt jelzik, hogy a táblában a FindString metódussal lehet keresni, amely paraméterként egy meghatározott struktúrát ad át.

A példában bemutatott esetben a második sor a Nómenklatúra meghatározott értékét és jellemzőit tartalmazó sorok egyidejű keresését jelzi, a harmadik pedig azt, hogy a „Gyártásrendelé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 bizonyos műveleteket 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 ismét az értéktáblázat jön a segítségre. A TK-ban a módszer segítségével táblázatos részek Unload() lehet:

  1. Ismételje meg teljesen a dokumentumtábla szerkezetét, minden lehetséges információt megőrizve;
  2. Csak azokat az oszlopokat és sorokat határozza meg, amelyekhez szükséges további munka, és hozd ki őket.

A fordított műveletet (a táblázatos rész kitöltését) a Load() metódus hajtja végre, melynek egyetlen paramétere a kimeneti tábla neve.

Megjegyzendő, hogy a táblázatos rész és a TK oszlopainak ö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 Másolás () módszerrel.

4. ábra

Ebben az esetben a táblázat oszlopai elmentésre kerülnek, é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 eredménye kikerül a műszaki specifikációból, de a fejlesztőknek gyakran van kérdése: hogyan lehet egy értéktáblázatot lekérdezéssel feldolgozni, lehetséges-e, és milyen kód segít ebben.

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

5. ábra

Ha a „*”-t az oszlopok nevére cseréli (egy TK.Nomenclature típusú karakterlánc), csökkentheti a feltöltött információk mennyiségét.

Hiba a 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ékek és ciklusok táblázata

Amikor egy értéktáblázat sorai között iterálunk a 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 az „Index érték tartományon kívül” hibaüzenetnek.

6. ábra

Általában jobb, ha a TK sorait felsoroljuk a „Mindegyik ...-től” konstrukcióval, meghatározva az iterátor nevét.

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

A feladat jellemzői.

Mindenki, aki egy normál alkalmazásban programozott, gyakran szembesült azzal a feladattal, hogy tetszőleges értéktáblázatot kapjon egy űrlapon. Tetszőleges értéktáblázat alatt olyan táblázatot értünk, 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ábla” elemet a feldolgozási űrlapon, majd programozottan átviheti a létrehozott értéktáblázatot ​ehhez az elemhez. Ezután egy egyszerű paranccsal:

FormElements.TableField.CreateColumns();

hogy megkapja a kész értéktáblázatot az űrlapon. Úgy tűnik, könnyebb is lehetne.

Mindez egy normál alkalmazásban volt. A dolgok megváltoztak egy felügyelt alkalmazásban. Tehát csak egy tetszőleges tábla nem hozható létre. Most vagy mereven paramétereznie kell az értéktáblázatot az űrlapon, vagy programozottan létre kell hoznia (leírni, nos, ez tulajdonképpen magának a felügyelt alkalmazásnak a lényege). Ezt próbáljuk megtenni: szoftver eszközök hozzon létre egy tetszőleges értéktáblázatot egy kezelt ű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ásakor vagy egy gomb segítségével történik - így van rá szüksége.

A táblázat létrehozása az űrlapon az értéktáblázat attribútumként történő leírásával történik:
ArrayChoiceType = Új tömb; ArrayChoiceType.Add(Type("Értéktábla")); ChoiceTypeDescription = Új választástípus leírása(ChoiceTypeArray); ArrayAttributes = Új tömb; ArrayAttributes.Add(New FormAttribute("ScheduleTable", ChoiceTypeDescription, "", "TRN")); 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ó azoknak az oszlopoknak az értéke, amelyek számokat vagy dátumokat tartalmaznak. A lényeg az, hogy az értéktáblázat oszlopainak valamilyen típusúnak kell lenniük. Ha például feltételezzük, hogy a felhasználó interaktívan tölti ki az adatokat ezekben az oszlopokban, akkor nem lehet egyszerű névvel értéktáblázat oszlopot hozzáadni, annak típusnak kell lennie. Ne feledje – ez nagyon fontos. ezeket a típusokat átvisszük az űrlapon lévő táblázatba.
Hozzon létre egy táblázatot, amely több oszlopot tartalmaz:
CD = New DateQualifers(DateParts.Time); ArrayCD = Új tömb; ArrayKD.Add(Típus("Dátum")); TypeDescriptionTime = Új típusleírás(ArrayKD,KD); TK = Új értéktábla;
TK.Columns.Add("From", TypeDescriptionTime);
TK.Columns.Add("Before", TypeDescriptionTime);
TK.Columns.Add("Név");
TK.Columns.Add("Note");//Név és megjegyzés - strings 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.Oszlophurok

ArrayAttributes.Add(New FormAttribute(Oszlop.Név, Column.ValueType,"Ütemezési táblázat"));
EndCycle;
ChangeAttributes(ArrayAttributes);
SelectionFieldTable = Elements.Add("TZN", Type("FormTable"));
SelectionFieldTable.DataPath = "ScheduleTable";
SelectionFieldTable.Display = DisplayTable.List;

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

A TK minden oszlopához.Oszlophurok

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

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

ChoiceFieldTable.SetAction("Choice","TCChoice");

Ennek az eseménynek eljárás formájában történő kezeléséhez egy külön eljárást írnak:

&AtClient
Eljárás TSNSelect(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ó-paranccsal

&AtClient

Nos, az utolsó dolog, amit hozzá akartam tenni, az az, hogy mindezen műveletek után ne felejtsük el átvinni a kész táblát a form attribútumba:

ValueVFormAttribute(TK, "Ütemezési táblázat");

Íme az eredmény:


És itt van a "Select" 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 az űrlapon.

Letölthet egy feldolgozást, amely programozottan értéktáblázatot hoz létre, és egy felügyelt űrlapon kimeneteket ír ki megjegyzésekkel, amelyek segítenek a táblázatok létrehozásában.

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);

értéktáblázat 1C

Értéktáblázat 1C adattárolásra és -feldolgozásra használják. Nagy sorszám esetén az adatlekérési sebesség meredeken csökken. Sok programozó alábecsüli az indexek használatának fontosságát, amikor egy értéktáblázatban információt keres. Meg akarom mutatni, hogy az indexek használata felgyorsítja a munkát a TK ( értéktáblázat 1C) előtt 100 alkalommal.

Tehát tesztelés céljából készítettem egy kis kódot, ami így működik.

  • A „Megvalósítás” dokumentum táblázatos részéből 20 ezer sort vonunk ki az értéktáblázatba. T1-nek hívják.
  • Ugyanerről az értéktáblázatról készítettem egy másolatot, a második táblát, amelyet T2-nek hívtak. Így kaptunk 2 értéktáblázatot, T1 és T2, egyenként 20 ezer sorral.
  • Ezután egy hurokban 1-től 5-ig öt lépést hajtunk végre. A passzus a következő:
  • A hurok (amely az 1-től 5-ig terjedő hurokba van beágyazva) átmegy a T1 értéktáblázat összes során, mind a 20 ezer soron.
  • A T1 minden aktuális sorához kivonjuk az "Összeg" oszlopban lévő értéket a T1 értékek táblázatából - ez egy szám.
  • A T2 értékek táblázatában egy olyan sort keresünk, amely ugyanazt a számot tartalmazza az "Összeg" oszlopban, mint az előző lépésben.
  • Minden egyes lépés idejét ezredmásodpercben mérjük, és megjelenítjük a képernyőn.

Más szóval, ha végigmegyünk egy 1C értéktáblázat összes során, és emlékezünk az „Összeg” oszlop értékére, keresünk egy azonos összegű sort egy másik értéktáblázatban. A „Keresés” értéktábla módszert alkalmazzuk. Egy menetben 20 ezer alkalommal hajtják végre a keresési műveletet. Csak öt bérlet van. A kísérlet eredményeinek átlagolásához szükségesek.

Az alábbiakban a teszteredmények táblázatát láthatja. A második oszlop az öt lépés mindegyikének végrehajtási idejét mutatja normál, nem optimalizált futásban, az oszlop alatt pedig a teljes tesztvégrehajtási idő látható, amely 279641 ezredmásodpercnek felel meg, vagy hozzávetőlegesen. 279 másodperc. A harmadik oszlop ugyanazon teszt végrehajtási idejét mutatja, de optimalizált keresési opcióval, index használatával az értéktáblázatban. Az áttekinthetőség kedvéért a táblázathoz hozzáadtam az index elkészítésére fordított időt (első sor a címsor alatt), ez nagyon kicsi, mindössze 0,047 másodperc. A teljes tesztvégrehajtási idő a második változatban 2781 ezredmásodperc, ill 2,78 másodperc.

Tehát az első változatban - 279 másodperc, a második változatban - 2,78 másodperc. 100-szoros különbség! Sőt, egy ilyen gyorsulás érhető el, ha csak EGY KÓDSOR adunk hozzá!

Végrehajtási idő, ezredmásodperc
próbaüzem száma 1 lehetőség, normál A 2. lehetőség a legjobb
ideje létrehozni az indexet - 47
1 46531 563
2 55516 547
3 60969 531
4 58688 562
5 57937 531
Végső idő 279641 2781
Gyorsulás időnként: 100,5541172

Íme a teljes példakód:

Eljárás KnIndexValueTablePress(elem) // lekérdezés létrehozása az adatok lekéréséhez Request = Új kérés; Kérés. Szöveg = "SELECT FIRST 20000 | RealizationItems.Reference, | RealizationItems.LineNumber, | RealizationItems.Quantity, | RealizationItems.Amount, | RealizationItems.Item |FROM | Document.Realization.Goods AS RealizationGoods"; // a kiválasztott adatokat a T1 értéktáblázatba helyezzük T1 = Kérelem. Végrehajtás(). Unload() ; // hozzon létre egy T2 értéktáblázatot a T1 értéktáblázat tartalmának másolásával T2 = T1. Copy() ; AddIndexStart = GetTimeInMilliseconds() ; T2. Indexek. Add("Összeg" ); // EZ A LEGFONTOSABB SOR, INDEX BEADÁSA AZ „ÖSSZEG” OSZLOPBA AddIndexCon = GetTimeInMilliseconds() ; Jelenteni ( "Ideje hozzáadni az indexet"+ (EndIndexAddition - StartIndexAddition) + "ms" ) ; Jelenteni ( "Összes sor az értéktáblázatunkban: "+ T2. Mennyiség() ) ; // megszervezzünk egy öt sikeres ciklust, sőt - ötször futtatjuk le a tesztet For Count = 1 to 5 Loop Start = GetTimeInMilliseconds() ; // ne feledje a kezdési időpontot FoundTimes = 0 ; A T1 ciklus minden oldalához // ciklus a T1 tábla összes sorában HandlingUserInterrupt() ; // keress egy sort a T2 táblában, amiben az "Összeg" oszlop // megegyezik a T1 tábla aktuális "Sum" értékével Talált karakterlánc = T2. Find (P. Sum, "Sum" ) ; // Ha az egyezés rögzített (karakterlánc található), növelje a talált karakterláncok számlálóját Ha FoundString<>Undefined Akkor FoundTimes = FoundTimes + 1 ; EndIf ; EndCycle ; // megkapjuk a T1 tábla sorai feletti iteráció ciklusának befejezési idejét End = GetTimeInMilliseconds() ; // jelenti a teszt sikeres számát, a talált egyezések számát és a végrehajtási időt ezredmásodpercben Jelentés ("Pass number" + SCH); Report("Talált időpontok:" + FoundTimes) ; Jelenteni ( "átfutási idő"+ Karakterlánc (End-Start) + "ezredmásodperc" ) ; EndCycle ; // hagyjuk a következő lépéshez Vége eljárás


A példát kommentálják, és világosnak kell lennie. A lényeg a sorban van T2.Indexes.Add("Összeg"); Tájékoztatjuk az 1C-t, hogy keresési műveletet fogunk végrehajtani a T1 értéktáblázat "Összeg" oszlopában, és index létrehozását követeljük ezen az oszlopon. A rendszer létrehoz egy indexet, majd minden keresési művelethez az "Összeg" oszlopban automatikusan ezt használja. Megjegyzendő, hogy a létrehozott index csak az "Összeg" oszlopban való keresésre érvényes, mivel ehhez az oszlophoz készült. Ha más oszlopokra van szükségünk a kereséshez, akkor készítsük el a megfelelő indexeket, megadva a kívánt oszlopneveket.

Egy táblázathoz több indexet is létrehozhatunk, ha különböző oszlopokhoz szeretnénk értékeket keresni. Az indexeket az 1C értéktáblázat indexgyűjteménye tárolja, ami a kódból következik: TK.Indexes.Add(Oszlopnév)

Ha oszlopértékek kombinációja alapján kell keresnünk, például egyidejűleg az "Összeg" és "Összeg" oszlopok alapján, akkor hozzunk létre egy összetett indexet: T2.Indexes.Add("Mennyiség, Összeg") Ilyen indexet használunk, amikor a "FindRows()" metódussal keresünk egy értéket a táblázatban. Például:

Talált sorok tömbje = T2. Sorok keresése (új struktúra ("Mennyiség, Összeg", Keresett mennyiség, Keresett mennyiség));

a példaszövegben használt.
Üdvözlettel: Degtyarev Roman.

Hogyan lehet megtanulni a nulláról programozni 1C-ben?

Hogyan lehet 1C programozóként dolgozni, és havonta akár 150 000 rubelt is kaphat?

REGISZTRÁLJ INGYENESEN

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;)

Az 1C 8.3 platform értéktáblázata (8.2) egy univerzális értékgyűjtemény, amelyet a fejlesztő használhat, ha szoftverfejlesztés hogy megvalósítsák algoritmusaikat. Valójában az 1C értéktáblázat egy dinamikus értékkészlet, amely oszlopokkal és oszlopokkal rendelkezik.

Cikkek más univerzális értékgyűjteményekről az 1C-ben

Tanuljon programozni 1C-ben egy helyen a "Programozás 1C-ben 11 lépésben" című könyvemből

  1. A könyv érthető és egyszerű nyelv- kezdőknek.
  2. Tanuld meg megérteni az 1C architektúrát;
  3. Elkezdi írni a kódot 1C nyelven;
  4. Sajátítsa el a programozás alapvető technikáit;
  5. A megszerzett ismereteket feladatfüzet segítségével rögzítse;

Kiváló útmutató a menedzselt 1C alkalmazások fejlesztéséhez, kezdő fejlesztőknek és tapasztalt programozóknak egyaránt.

  1. Nagyon érthető és érthető nyelv
  2. A könyvet e-mailben küldjük el a címre PDF formátum. Bármilyen eszközön kinyitható!
  3. Ismerje meg a felügyelt 1C alkalmazás ideológiáját
  4. Ismerje meg, hogyan fejleszthet felügyelt alkalmazást;
  5. Tanulj meg tervezni kezelt űrlapok 1C;
  6. Képes lesz dolgozni a kezelt űrlapok alapvető és szükséges elemeivel
  7. A felügyelt alkalmazás alatti programozás egyértelművé válik

Promóciós kód 15% kedvezményért - 48PVXHeYu


Ha ez a lecke segített valamilyen probléma megoldásában, tetszett vagy hasznos volt, akkor bármilyen összeg átutalásával támogathatod a projektemet:

kézzel is fizethető:

Yandex.Money — 410012882996301
Web Money - R955262494655

Csatlakozz a csoportjaimhoz.



Betöltés...
Top