itthon / ablakok áttekintése / 1c kezelt űrlap értéktáblázat hozzáadása oszlop. Fontos, hogy soha ne keverjük össze az objektumtulajdonságot egy objektum metódussal.

1c kezelt űrlap értéktáblázat hozzáadása oszlop. Fontos, hogy soha ne keverjük össze az objektumtulajdonságot 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 az összes előfordulást meg kell találnia 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 keresési struktúrához hozzáadjuk a keresett érték keresését például a Felelős oszlopban is, akkor a FindRows() metódus alkalmazása eredményeként minden olyan sort megkapunk, ahol mind az Employee, mind a Responsible 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 egy sor (vagy oszlop) törlése az értéktáblázat „középéről” a törlés „után” lévő sorok indexeinek valamelyikével való csökkenéshez 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, "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ö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 nem kell mentenie a korábbi oszlopait, akkor létrehozhatja teljes másolat eredeti

TableReceiver = TableOriginal.Copy();


Második lehetőség: létezik a 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ű oszlopnál 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.Columns.Insert(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

// Új sor hozzáadása a céltáblázathoz.
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. Utána 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?

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

// Típuskorlátozás nélküli oszlop hozzáadása.
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, az utóbbinak paraméterként átadva a karakterlánctípus nevé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, annak bitmélysége (hossza) korlátozható, változó vagy fix hosszúságú használat megadható. 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);

A pénz és az áruk figyelembevétele érdekében az üzleti életben széles körben használják a különböző táblázatokat. 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 előkelő helyet foglal el.

Az 1C táblázatait „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és eredményeihez

// 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 a Név mező lekérésével a Nomenclature keresésből egy String típusú oszlopot kap, amelynek megengedett hossza nem lehet hosszabb N karakternél.

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 táblázatos részek listájának megtekintéséhez ki kell bontani az Objektum ágat.

Táblázatos rész kiválasztásakor az 1C maga ad hozzá 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.

A táblázatra jobb gombbal kattintva hozzáadhat egy oszlopot. Az oszlop tulajdonságaiban megadhatja a nevét (az 1C kódban hivatkozásként), az űrlapon lévő oszlopfejlécet, a kapcsolatot a táblázatos rész attribútumaival (utóbbi - ha nem tetszőleges táblázat, de táblázat rész van kiválasztva).

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)

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á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 egy üres helyre a táblázatban, és válassza a Lista megjelenítése lehetőséget.

Felügyelt (vékony) kliensben az Összes művelet/Megjelenítési lista menüpont segítségével lehet hasonló műveleteket végrehajtani.

Az 1C 8.3 platform értéktáblázata (8.2) egy univerzális értékgyűjtemény, amelyet a fejlesztő használhat a szoftverfejlesztés során az algoritmusaik megvalósításához. 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 világos és egyszerű nyelven íródott - 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 a címre küldik email PDF formátumban. 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 tetszőleges összeg átutalásával támogathatod a projektemet:

kézzel is fizethető:

Yandex.Money — 410012882996301
Web Money - R955262494655

Csatlakozz a csoportjaimhoz.

Feladás dátuma: 2011. szeptember 21

1C értéktáblázat - 3. rész. metaadatokat. Iteráció 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)

Az anyag magyarázatához és ahhoz, hogy a programkód példáinkat "élőben" tudjuk futtatni, 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 mennyiségű adatot - akár 3 sort is. :)

Tehát készítsünk egy teszttáblázatot az 1C értékekből, és töltsük ki:

MyTR = új értéktábla; // hozzon létre egy új értéktáblázatot a "MyTR" változóban tárolt 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 = SajátТЗ.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 az 1C értéktábla oszlopainak gyűjteményként történő felsorolása.

// 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 megjeleníti az összes oszlopnevet 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 egy 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 MyTR.Columns Loop-ból" 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:

// a TK összes oszlopának nevének megjelenítése For Every CurrentColumn 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. ez az eset - 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-ból LoopColumnNumber = MyTR.Columns.Index(Oszlop); // 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ó 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 objektum metó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, é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 beszerzése az 1C értéktáblázatból oszlopszámok segítségével

Kezdésként 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 aktuális vonal a „0” számmal jelölt táblázatok. Ezt az értéket megjelenítettük a képernyőn, és ez a "Chapaev" karakterláncot jelenti.

Bonyolítsuk egy 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]; // megjeleníti a sorszámot, oszlopszámot és cellaértéket 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 neveit használtuk, hanem az oszlopokra, 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 neveket 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 Hurok // beágyazott ciklus az oszlopokon // a 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 az argumentumnak. szögletes zárójelek[...] 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 egyes aktuális sorhoz a MyTR ciklusból // léptesse át a karakterláncok gyűjteményét Report(" ======= # " sor + MyTR.Index(CurrentRow) + " ======="); Jelenteni(" "); Minden 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 = CurrentRow[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 a későbbiekben könnyebben érthető legyen a saját kódja. 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(Current Column.Name + ": " + CurrentRow[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 tanfolyamot e-mailben küldjük el. Legyen programozó lépésről lépésre végrehajtott feladatok végrehajtásával.

A részvételhez nem kell más, mint egy számítógép és internet.

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; háttér-ismétlés: nincs ismétlés; háttér-pozíció: középen; háttér-méret: automatikus;) .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öveg igazítása: középre; szélesség: automatikus;)