Kapcsolatok

Stringek kezelése lekérdezésben 1c 8.2. Az alsztring () függvény sajátossága. Logikai VAGY használata feltételekben

Az 1C: Enterprise lekérdezési nyelvben a függvény SZUBSZTRÁT () v formátum SUBSTRING (<Исходная строка>, <Начало>, <Длина>) karakterlánc típusú adatokra alkalmazható, és lehetővé teszi a töredék kiemelését<Исходной строки>karakterszámmal kezdve<Начало>(a karakterlánc karakterei 1-től vannak számozva) és hossza<Длина>karakterek. A SUBSTRING () függvény kiértékelésének eredménye változó hosszúságú karakterlánc típusú, és a hossz korlátlannak tekinthető, ha<Исходная строка>korlátlan hossza és paramétere van<Длина>nem állandó, vagy meghaladja az 1024-et.

A SUBSTRATE () függvény kiértékelése SQL szerveren:
Kliens-szerver üzemmódban az SUBSTRING () függvény a megfelelő SUBSTRING () függvényével valósul meg. SQL utasítás továbbítják az adatbázis-kiszolgálóhoz SQL adatok Szerver, amely összetett szabályok szerint számítja ki a SUBSTRING () függvény eredményének típusát, paraméterei típusától és értékétől, valamint attól függően, hogy milyen környezetben használják.

A legtöbb esetben ezek a szabályok nem befolyásolják az 1C: Enterprise lekérdezés végrehajtását, de vannak esetek, amikor az eredmény karakterlánc maximális hossza számítva SQL szerver... Fontos szem előtt tartani, hogy bizonyos kontextusokban, ahol az SUBSTRING () függvényt használják, az eredmény maximális hossza egy korlátos karakterlánc maximális hossza lehet, ami 4000 karakter az SQL Serverben. Ez a kérés váratlan rendellenes leállásához vezethet.

Például a kérés:
Kód 1C v 8.x SELECT
VÁLASZTÁS

ELSE NULL
VÉGE LIKE Megtekintés,
VÁLASZTÁS
WHEN Kind = & LegalAddressPhysPersons
MAJD SUBSTRING (Megtekintés, 0, 200)
ELSE NULL
VÉGE LIKE Megtekintés1
TÓL TŐL

RENDEZÉS
Teljesítmény,
Teljesítmény 1
rendellenesen véget ér a DBMS hiba üzenettel:
Microsoft OLE DB Provider for SQL Server: Figyelmeztetés: A lekérdezésfeldolgozó nem tudott lekérdezési tervet előállítani az optimalizálóból, mert a GROUP BY vagy ORDER BY záradék összes oszlopának teljes hossza meghaladja a 8000 bájtot.
HRESULT = 80040E14, SQLSTATE = 42000, natív = 8618

Ennek az az oka, hogy a Microsoft SQL Server kiszámította a maximális karakterlánchosszt, amely a kifejezés eredménye:
Code 1C v 8.x CHOICE
WHEN Kind = & LegalAddressPhysPersons
MAJD SUBSTRING (Megtekintés, 0, 200)
ELSE NULL
VÉGE LIKE Megtekintés,
4000 karakternek felel meg. Ezért a két ilyen mezőből álló rekord hossza meghaladja a rendezési művelethez megengedett 8000 bájtot.

A SUBSTRING () függvény SQL Serveren történő végrehajtásának ismertetett jellemzője miatt nem javasolt a SUBSTRING () függvény használata a korlátlan hosszúságú karakterláncok korlátozott hosszúságú karakterláncokká való átalakítására. Inkább egy öntési műveletet használjon, például EXPRESS () helyett. Konkrétan a fenti példa átírható így:
Kód 1C v 8.x SELECT
VÁLASZTÁS
WHEN Kind = & LegalAddressPhysPersons
ELSE NULL
VÉGE LIKE Megtekintés,
VÁLASZTÁS
WHEN Kind = & LegalAddressPhysPersons
THEN EXPRESS (AS String (200))
ELSE NULL
VÉGE LIKE Megtekintés1
TÓL TŐL
Információk Regisztráció.Kapcsolattartási információk AS Kapcsolattartási adatok
RENDEZÉS
Teljesítmény,
Teljesítmény 1

A "String" típus minden programozási nyelvben megtalálható. Primitív, és az 1C-ben sok funkció van a vele való munkához. Ebben a cikkben közelebbről megvizsgáljuk különböző utak az 1C 8.3 és 8.2 szövegtípusokkal való munkavégzés példákon keresztül.

Vonal

Annak érdekében, hogy bármilyen típusú változót karaktersorozattá alakítsunk, van egy azonos nevű függvény: "String ()". A bemeneti paraméter maga a változó lesz, amelynek karakterlánc-reprezentációját kell megkapni.

String (hamis) // "Nem"-et ad vissza
String (12345) // „12 345” értéket ad vissza
Karakterlánc (CurrentDate ()) // 07/21/2017 11:55:36 ″

Nemcsak a primitív típusokat lehet karakterláncra konvertálni, hanem másokat is, például segédkönyvek, dokumentumok elemeit.

SocrLP, SocrL, SocrP

Ezeknek a függvényeknek a bemeneti paraméterei karakterlánc típusú változók. A funkciók eltávolítják a jelentéktelen karaktereket (szóközök, kocsivisszaadások és egyebek): bal és jobb oldalról, csak balról és csak jobbról.

AbbrLP ("A szóközök mindkét oldalon el lesznek távolítva") // "A kétoldali szóközök el lesznek távolítva"
Rövidítve ("A kétoldali szóközök el lesznek távolítva") // "A bal oldali szóközök el lesznek távolítva"
Rövidítés ("A szóközök mindkét oldalon el lesznek távolítva") // "A jobb oldali szóközök el lesznek távolítva"

Leo, igaz, szerda

Ezek a funkciók lehetővé teszik egy karakterlánc egy részének levágását. Az "Oroszlán ()" függvény a karakterlánc bal oldaláról adja vissza a megadott hosszúságú részt. A "Jobb ()" funkció ugyanaz, de a kivágás a jobb oldalon történik. Az "Átl. ()" funkció lehetővé teszi annak a karakternek a számát, amelyből a karakterláncot kiválasztja, és annak hosszát.

Lion ("String változó", 4) // a "Stro" értéket adja vissza
Jobb ("String változó", 7) // a "változót" adja vissza
Wed ("String változó", 2, 5) // a "troco" értéket adja vissza

Str Hossz

A függvény határozza meg a karakterlánc változóban található karakterek számát.

StrLength ("Word") // a végrehajtás eredménye 5 lesz

megtalálja

A függvény lehetővé teszi egy karakterlánc egy részének keresését bármely karakterlánc-változóban. A visszatérési érték egy szám lesz, amely a talált karakterlánc elejének pozícióját mutatja. Ha nem található egyezés, nullát ad vissza.

Felhívjuk figyelmét, hogy a keresések megkülönböztetik a kis- és nagybetűket. Ha az eredeti karakterlánc a keresési részkarakterlánc egynél több előfordulását tartalmazza, a függvény az első előfordulás elejét adja vissza.

Find ("egy, kettő, egy, kettő, három", "kettő") // a függvény a 6-os számot adja vissza

Üres sor

Ennek a függvénynek a használata lehetővé teszi annak meghatározását, hogy egy karakterlánc üres-e. A jelentéktelen karaktereket, például a szóközt, a kocsivisszatérítést és másokat figyelmen kívül hagyja.

EmptyString ("Pupkin Vaszilij Ivanovics") // a függvény a False értéket adja vissza
Az EmptyString ("") // függvény True értéket ad vissza

VReg, NReg, Treg

Ezek a függvények nagyon hasznosak a karakterlánc-változók összehasonlításához és konvertálásához. A Breg () az eredeti karakterláncot nagybetűvel, a HPreg () kisbetűvel adja vissza, a TPreg () pedig úgy formázza azt, hogy minden egyes szó első karaktere nagybetűs legyen, a következő karakter pedig kisbetűs legyen.

Vreg ("GENERAL DIRECTOR") // visszatérési érték - "GENERAL DIRECTOR"
НReg ("GENERAL DIRECTOR") // visszatérési érték - "főigazgató"
TREG ("GENERAL IRECTOR") // visszatérési érték - "General Director"

Oldalcsere

Ez a funkció analóg a behelyettesítéssel szövegszerkesztők... Lehetővé teszi, hogy egy karaktert vagy karakterkészletet helyettesítsen egy másikkal a karakterlánc-változókban.

StrReplace ("piros, fehér, sárga", ",", ";") // visszaadja a "pirost; Fehér; sárga"

StrNumberStrings

A függvény lehetővé teszi, hogy meghatározza a kocsivisszaadásokkal elválasztott sorok számát egy szöveges változóban.

Az alábbi példában a hurok három körön megy keresztül, mivel a Sorok száma függvény 3-as értéket ad vissza:

Ind = 1 esetén StrNumberStrings ("String1" + Symbols.PS + "String2" + Symbols.PS + "String3") ciklus
<тело цикла>
Ciklus vége;

StrGetString

Ez a funkció ugyanúgy működik többsoros szöveggel, mint az előző. Lehetővé teszi egy adott karakterlánc lekérését egy szöveges változóból.

StrGetString ("String1" + Symbols.PS + "String2" + Symbols.PS + "String3", 2) // "String2"-t adja vissza

Str. Előfordulások száma

A függvény megszámolja egy karakter vagy részkarakterlánc előfordulásának számát a keresési karakterláncban.

Mellékletek sora ("a; b; c; d;", ​​";") // a függvény a 4-es számot adja vissza

Szimbólum és szimbólumkód

Ezek a függvények lehetővé teszik, hogy egy karaktert a Unicode kódja alapján kapjon meg, valamint a kódot maga a karakter határozza meg.

SymbolCode ("A") // a függvény az 1 040 számot adja vissza
SymbolCode (1040) // a függvény "A"-t ad vissza

Gyakori feladatok a húrokkal végzett munka során

A karakterláncok összefűzése

Több karakterlánc összefűzéséhez (összefűzés végrehajtásához) elegendő az összeadás operátort használni.

"Line 1 ″ +" Line 2 ″ // két sor hozzáadásának eredménye "1. sor 2. sor"

Típus konverzió

Ahhoz, hogy egy típust karakterláncsá alakítsunk, például egy szótári tételre való hivatkozást, egy számot stb., elegendő a „String ()” függvény használata. Az olyan függvények, mint a "Rövidítés ()" szintén karakterláncokká alakítják a változókat, de azonnal a jelentéktelen karakterek csonkolásával.

A karakterlánc (1000) // az „1000” értéket adja vissza

Kérjük, vegye figyelembe, hogy egy szám karakterláncsá alakításakor a program automatikusan hozzáad egy ezrest elválasztó szóközt. Ennek elkerülése érdekében a következő konstrukciókat használhatja:

Az StrReplace (String (1000), Characters.NPP, "") // az "1000" értéket adja vissza

Karakterlánc (Formátum (1000, "CHG =")) // az "1000" értéket adja vissza

Idézetek egy karakterláncban

Elég gyakran szembe kell néznie azzal, hogy egy karakterlánc-változóban idézőjeleket kell megadnia. Ez lehet a konfigurátorban írt kérés szövege, vagy csak egy változó. A probléma megoldásához csak két idézőjelet kell beállítania.

Title = String ("Horns and Hooves LLC" - mi vagyunk! ") // visszatér a" Horns and Hooves LLC - mi vagyunk!"

Több sor, sortörés

Többsoros szöveg létrehozásához elegendő sortörés karaktereket (Symbols.PS) hozzáadni.

MultilineText = "Első sor" + Szimbólumok.PS + "Második sor"

Hogyan távolítsuk el a szóközöket

A jobb vagy bal oldali szóközök eltávolításához használhatja a "Rövidítés ()" funkciót (valamint a "Rövidítés ()" és a "Rövidítés ()"):

StringNoSpaces = AbbreviatedLP ("Sok betű") // a függvény a "Sok betű" értéket adja vissza

Ha egy szám karakterláncsá alakítása után el kell távolítania a nem törő szóközöket, használja a következő konstrukciót:

StringNoSpaces = StrReplace (String (99999), Characters.NPP, "") // a következőt adja vissza: "99999"

Ezenkívül a programozók gyakran használják a következő konstrukciót, amely lehetővé teszi a szöveges változó összes szóközének eltávolítását vagy helyettesítését egy másik karakterrel:

StringNoSpaces = StrReplace ("üdvözöljük", "", "") // a "hello"-t adja vissza

A húrok összehasonlítása egymással

A kifejezések összehasonlíthatók a szokásos egyenlőségjellel. Az összehasonlítás megkülönbözteti a kis- és nagybetűket.

A "Hello" = "hello" // False értéket ad vissza
"Hello" = "Hello" // True értékkel tér vissza
"Hello" = "Viszlát" // a False értéket adja vissza

Az 1C 8.3 karakterláncai az 1c beépített nyelvben primitív típusú értékeket képviselnek Vonal... Az értékek ebből a típusból tetszőleges hosszúságú Unicode karakterláncot tartalmaznak. A karakterlánc típusú változók idézőjelbe zárt karakterkészletek.

Példa 1. Hozzunk létre egy karakterlánc-változót szöveggel.

StringVariable = "Szia világ!";

Függvények a húrokkal való munkavégzéshez az 1c-ben 8.3

Ebben a részben megadjuk azokat a fő funkciókat, amelyek lehetővé teszik az 1c sorok megváltoztatását, vagy a bennük lévő információk elemzését.

Str Hossz

Erősség (<Строка>) ... A paraméterben átadott karakterláncban található karakterek számát adja vissza.

2. példa. Számoljuk meg a karakterek számát a "Hello world!"

String = "Helló világ!"; Karakterek száma = StrLength (String); Jelentés (karakterek száma);

A kód végrehajtásának eredményeként megjelenik a karakterláncban lévő karakterek száma: 11.

Rövidítés

AbbrL (<Строка>) ... A jelentéktelen karaktereket a karakterlánc első jelentős karakterétől balra csonkolja.
Kisebb karakterek:

  • tér;
  • nem törő tér;
  • táblázatosítás;
  • kocsi vissza;
  • soros fordítás;
  • az űrlap (oldal) fordítása.

3. példa: Távolítson el minden szóközt a "világ!" sor bal oldaláról. és csatolja hozzá a "Hello" zsinórt.

String = rövidítve ("béke!"); String = "Hello" + Karakterlánc; Jelentés (String);

A kód végrehajtásának eredménye a "Hello world!" sor kimenete lesz.

Rövidítés

Rövidítés (<Строка>) ... Levágja a jelentéktelen karaktereket a karakterlánc első jelentős karakterétől jobbra.

4. példa: Űzze ki a "Hello" és a "World!" a "Hello világ!"

String = rövidítve ("Hello") + "" + rövidítve ("világ!"); Jelentés (String);

SokrLP

SocrLP (<Строка>) ... Levágja a jelentéktelen karaktereket a karakterlánc első jelentős karakterétől jobbra, és a jelentéktelen karaktereket is levágja a karakterlánc első jelentős karakterétől balra. Ezt a funkciót gyakrabban használják, mint az előző kettőt, mivel sokoldalúbb.

5. példa: Távolítsa el a jelentéktelen karaktereket a partner nevéből a bal és a jobb oldalon.

Counterparty = Directories.Contractors.NaytiPoRequisite ("INN", "0777121211"); CounterpartyObject = Counterparty.GetObject (); CounterpartyObject.Name = SokrLP (CounterpartyObject.Name); CounterpartyObject.Write ();

egy oroszlán

Egy oroszlán(<Строка>, <ЧислоСимволов>) ... Egy karakterlánc első karaktereit fogadja, a karakterek száma a paraméterben van megadva Karakterek száma.

6. példa Engedjük be a szerkezetet Munkavállaló tartalmazza a munkavállaló nevét, vezetéknevét és családnevét. Szerezzen be egy karakterláncot a vezetéknévvel és a kezdőbetűkkel.

InitialName = Oroszlán (Alkalmazott.Név, 1); Apanév kezdőbetűje = Oroszlán (alkalmazott, apanév, 1); FullName = Alkalmazott.Vezetéknév + "" + Kezdeti név + "." + Apanév kezdőbetűje + ".";

Jobb

Jobb (<Строка>, <ЧислоСимволов>) ... Lekéri egy karakterlánc utolsó karaktereit, a karakterek száma a paraméterben van megadva Karakterek száma. Ha a megadott számú karakter meghaladja a karakterlánc hosszát, akkor a teljes karakterláncot a rendszer visszaadja.

7. példa. Tegyük fel, hogy egy karakterlánc-változó vége dátumot tartalmaz "ééééhhnn" formátumban, szerezzen be egy dátumot tartalmazó karakterláncot, és alakítsa át a típusra dátum.

Karakterlánc = " Az aktuális dátum: 20170910 "; StringDate = jobb (karakterlánc, 8); Date = dátum (StringDate);

szerda

Szerda (<Строка>, <НачальныйНомер>, <ЧислоСимволов>) ... A paraméterként átadott karakterláncból részkarakterláncot kap Vonal, attól a karaktertől kezdve, amelynek száma a paraméterben meg van adva Kezdőszámés a paraméternek átadott hossz Karakterek száma. A sorban lévő karakterek számozása 1-től kezdődik. Ha a paraméterben Kezdőszám olyan értéket adunk meg, amely kisebb vagy egyenlő nullával, akkor a paraméter 1 értéket vesz fel. Ha a paraméter Szimbólumok száma nincs megadva, akkor a sor végéig tartó karakterek kerülnek kiválasztásra.

Példa 8. Tegyük fel, hogy a kilencedik pozíciótól induló karakterlánc változó tartalmazza a régiókódot, akkor azt kapjuk meg és írjuk egy külön sorba.

Sor = "Régió: 99 Moszkva"; Régió = Sze (9. sor, 2.);

Keresés

Megtalálja (<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) ... Megkeresi a megadott részkarakterláncot egy karakterláncban, visszaadja a talált részstring első karakterének pozíciószámát. Tekintsük ennek a függvénynek a paramétereit:

  • Vonal... Forrás karakterlánc;
  • Alkarakterlánc... A keresendő részkarakterlánc;
  • Keresési irány... Megadja a karakterláncban lévő részkarakterlánc keresésének irányát. Értékeket vehet fel:
    • Keresési irány. Kezdettől;
    • Keresési irány.;
  • Kezdő pozíció... Megadja a pozíciót a karakterláncban, ahonnan a keresés kezdődik;
  • Bejáratok száma... Megadja a kívánt részkarakterlánc előfordulásának számát az eredeti karakterláncban.

9. példa A "Hello world!" sorban. határozza meg az „és” szimbólum utolsó előfordulásának helyét.

PositionNumber = StrNayti ("Hello world!", "And", DirectionSearch.End); Jelentés (pozíciószám);

A kód végrehajtásának eredménye az "és" szimbólum utolsó előfordulásának száma lesz: 9.

VReg

BReg (<Строка>) ... A megadott karakterlánc összes karakterét 1s 8-ban nagybetűvé alakítja.

10. példa Konvertálja a "hello world!" karakterláncot. nagybetűre.

StringBreg = BReg ("helló világ!"); Jelentés (StringVreg);

A kód végrehajtásának eredményeként megjelenik a "HELLO WORLD!"

Nreg

HPreg (<Строка>) ... Az 1s 8-ban megadott karakterlánc összes karakterét kisbetűvé alakítja.

11. példa Konvertálja a "HELLO WORLD!" kisbetűsre.

StringNreg = НReg ("HELLO WORLD!"); Jelentés (StringVreg);

A kód végrehajtásának eredménye a "hello world!" sor kimenete lesz.

Treg

Treg (<Строка>) ... A karakterláncot a következőképpen alakítja át: minden szó első karaktere nagybetűvé, a szó többi karaktere kisbetűvé alakul.

12. példa: Írd nagybetűvel a "hello world!" karakterlánc szavainak kezdőbetűit.

StringTreg = Treg ("hello világ!"); Jelentés (StringTreg);

A kód végrehajtásának eredménye a képernyőn a "Hello World!" sor kimenete lesz.

Szimbólum

Szimbólum(<КодСимвола>) ... Unicod kódja alapján kap egy karaktert.

Példa 13. Adjuk hozzá a bal és jobb oldali sort a "Hello World!" szimbólum ★

StringWithStars = Szimbólum ("9733") + "Hello World!" + Szimbólum ("9733"); Jelentés (StringWithStars);

A kód végrehajtásának eredményeként megjelenik a „★ Hello World! ★” sor.

Szimbólum kód

Szimbólumkód (<Строка>, <НомерСимвола>) ... A Unicode karakterkódot az első paraméterben megadott karakterláncból kéri le, amely a második paraméterben megadott helyen található.

14. példa: Keresse meg az utolsó karakter kódját a "Hello World!"

String = "Hello World!"; CharacterCode = Karakterkód (String, StrLength (String)); Jelentés (SymbolCode);

A kód végrehajtásának eredményeként megjelenik a "!" - 33.

Üres sor

Üres sor (<Строка>) ... Ellenőrzi, hogy egy karakterlánc csak jelentéktelen karaktereket tartalmaz-e, azaz üres-e.

15. példa Ellenőrizze, hogy egy három szóközből álló karakterlánc üres-e.

Üres = EmptyString (""); Jelentés (Üres);

A kód végrehajtásának eredményeként megjelenik az "Igen" szó (a logikai érték karakterlánc kifejezése Igaz).

Oldalcsere

PRReplace (<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) ... Megkeresi a keresési részkarakterlánc összes előfordulását az eredeti karakterláncban, és lecseréli a helyettesítő karakterláncra.

16. példa A "Hello World!" sorban. cserélje ki a „béke” szót a „barátok” szóra.

String = StrReplace ("Hello World!", "World", "Friends"); Jelentés (String);

A kód végrehajtásának eredménye a "Hello Friends!" sor jelenik meg.

StrNumberStrings

Sorok száma (<Строка>) ... Megszámolja a többsoros karakterlánc sorainak számát. Menni új sor 1s 8-ban a szimbólumot használják PS(soremelés karakter).

17. példa Határozza meg a sorok számát a szövegben:
"Első sor
Második sor
Harmadik sor"

Number = StrNumberStrings ("Első sor" + Symbols.PS + "Second line" + Symbols.PS + "Third line"); Jelentés (szám);

A kód végrehajtásának eredménye a sorok számának megjelenítése a szövegben: 3

StrGetString

StrGetString (<Строка>, <НомерСтроки>) ... A többsoros karakterláncban lévő karakterláncot a száma alapján kapja meg. A sorszámozás 1-től kezdődik.

18. példa: Szerezze be a szöveg utolsó sorát:
"Első sor
Második sor
Harmadik sor"

Szöveg = "Első sor" + Szimbólumok.PS + "Második sor" + Szimbólumok.PS + "Harmadik sor"; LastRow = StrGetString (Szöveg, StrNumberLines (Szöveg)); Jelentés (LastLine);

A kód végrehajtásának eredménye a „Harmadik sor” sor megjelenítése lesz.

Str. Előfordulások száma

Az előfordulások száma (<Строка>, <ПодстрокаПоиска>) ... A megadott részkarakterlánc előfordulásának számát adja vissza egy karakterláncban. A funkció megkülönbözteti a kis- és nagybetűket.

19. példa Határozza meg, hányszor jelenik meg a "c" betű a "Lines in 1s 8.3 and 8.2" sorban, függetlenül a kis- és nagybetűtől.

Line = "Sorok az 1s 8.3-ban és 8.2-ben"; Előfordulások száma = StrNumber of Előfordulások (Vreg (karakterlánc), "S"); Jelentés (Előfordulások száma);

A kód végrehajtásának eredménye az előfordulások számának kijelzése lesz: 2.

PageStarts with

Az oldal ezzel kezdődik (<Строка>, <СтрокаПоиска>) ... Ellenőrzi, hogy az első paraméterben átadott karakterlánc a második paraméterben szereplő karakterlánccal kezdődik-e.

20. példa Határozza meg, hogy a kiválasztott partner INN-je 1-gyel kezdődik-e. Hagyja be a változót Ügyfél Vállalkozók.

TIN = Partner.INN; Kezdődik egységekkel = StrInd az (INN, "1"); If BeginsUnits Then // Az Ön kódja EndIf;

Az oldal ezzel fejeződik be

Oldalvégek ezzel (<Строка>, <СтрокаПоиска>) ... Ellenőrzi, hogy az első paraméterben átadott karakterlánc a második paraméterben lévő karakterláncra végződik-e.

21. példa Határozza meg, hogy a kiválasztott partner TIN-je 2-es számjegyre végződjön-e. Engedje meg a változót Ügyfél egy címtárelemre mutató hivatkozás tárolódik Vállalkozók.

TIN = Partner.INN; Kettővel végződik = Str A következővel végződik (INN, "2"); If Ends WithDouble Then // Az Ön kódja EndIf;

PageSplit

StrSplit (<Строка>, <Разделитель>, <ВключатьПустые>) ... Egy karakterláncot részekre bont a megadott határoló karakterek használatával, és a kapott karakterláncokat egy tömbbe írja. Az első paraméter az eredeti karakterláncot tárolja, a második az elválasztót tartalmazó karakterláncot, a harmadik pedig azt jelzi, hogy kell-e írni a tömbbe üres sorok(alapértelmezett Igaz).

22. példa. Tegyük fel, hogy van egy karakterláncunk, amely ";"-vel elválasztott számokat tartalmaz, kapjunk egy számtömböt a karakterláncból.

Karakterlánc = "1; 2; 3"; Tömb = StrSplit (karakterlánc, ";"); For Rd = 0 By Array.Quantity () - 1 Cycle Attempt Array [Rd] = Szám (SqrLP (Array [Rd])); Kivételtömb [Сч] = 0; End of Attempts End of Loop;

A végrehajtás eredményeként egy 1-től 3-ig terjedő számokat tartalmazó tömb keletkezik.

StrConnect

StrConnect (<Строки>, <Разделитель>) ... Az első paraméterből álló karakterláncok tömbjét olyan karakterláncsá alakítja, amely a tömb összes elemét tartalmazza, a második paraméterben megadott határolóval elválasztva.

23. példa: Az előző példa számtömbjének felhasználásával kapja meg az eredeti karakterláncot.

For Ref = 0 By Array.Quantity () - 1 Cycle Array [Ref] = String (Tömb [Ref]); Ciklus vége; String = StrConnect (tömb, ";");

A karakterlánc az egyik primitív adattípus az 1C: Enterprise 8-ban. A típussal rendelkező változók vonal szöveget tartalmaznak.

A típusváltozók értékei vonal idézőjelek közé vannak zárva. Több ilyen típusú változó is hozzáadható.

Per1 = "1. szó";
Per2 = "2. szó";
Per3 = Per1 + "" + Per2;

Végül is Per3 azt fogja jelenteni, hogy " 1. szó 2. szó ″.

Ezenkívül az 1C: Enterprise 8 rendszerek funkciókat biztosítanak a karakterláncokkal való munkavégzéshez. Tekintsük a főbbeket:

Írja be a karakterláncot (<Строка>, <Подсказка>, <Длина>, <Многострочность>) — a függvény célja egy párbeszédpanel megjelenítése, amelyben a felhasználó megadhat egy értéket változó típusú Vonal... Paraméter <Строка> kötelező, és tartalmazza annak a változónak a nevét, amelyre a beírt karakterláncot írjuk. Paraméter <Подсказка> opcionális a párbeszédpanel címe. Paraméter <Длина> opcionális, műsorok maximális hossza a bemeneti karakterlánc. Az alapértelmezett nulla, ami korlátlan hosszúságot jelent. Paraméter <Многострочность> választható. Meghatározza a többsoros szöveg beviteli módját: Igaz - többsoros szöveg bevitele sorelválasztókkal; False - egyszerű karakterlánc bevitele.

A karakterlánc beírható, és megadható a Unicode karakterkód:

Szimbólum(<КодСимвола>) — a kód számként kerül beírásra.

Betű = Szimbólum (1103); // ÉN VAGYOK

Van egy inverz függvény is, amely lehetővé teszi egy karakter kódjának megtudását.

Szimbólumkód (<Строка>, <НомерСимвола>) — számként adja vissza a megadott Unicode karakterszámot.

Tokkonverziós funkciók:

BReg (<Строка>) - a karakterlánc összes karakterét nagybetűvé alakítja.

HPreg (<Строка>) - a karakterlánc összes karakterét kisbetűvé alakítja.

Treg (<Строка>) - a karakterlánc összes karakterét nagybetűvé alakítja. Vagyis az összes szó első betűit nagybetűvé, a többi betűt kisbetűvé alakítja.

Karakterek keresésének és cseréjének függvényei egy karakterláncban:

Megtalálja(<Строка>, <ПодстрокаПоиска>) - megkeresi a keresési részstring előfordulásának karakterszámát. Például:

Find ("String", "Oka"); 4

Megtalálja (<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) - megkeresi a keresési részstring előfordulásának karakterszámát, az előfordulási számot a megfelelő paraméter jelzi. Ebben az esetben a keresés egy karakterrel kezdődik, amelynek száma a paraméterben van megadva Kezdő pozíció. A keresés a karakterlánc elejétől vagy a végétől lehetséges. Például:

4. számú előfordulások = StrFind ( "Védelmi képesség", "o", Keresési irány. Kezdettől fogva, 1, 4); 7

PRReplace (<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) - megkeresi a keresési részkarakterlánc összes előfordulását az eredeti karakterláncban, és lecseréli a helyettesítő karakterláncra.

StrReplace ("String", "Oka", ""); // Oldal

Üres sor (<Строка>) - ellenőrzi, hogy egy karakterláncban vannak-e jelentős karakterek. Ha nincsenek jelentős karakterek, vagy egyáltalán nincsenek karakterek, akkor a rendszer az értéket adja vissza Igaz... Másképp - Hazugság.

Az előfordulások száma (<Строка>, <ПодстрокаПоиска>) - kiszámítja a keresési részkarakterlánc előfordulásának számát az eredeti karakterláncban.

Az előfordulások száma ( "Tanulj, tanulj és tanulj újra", "tanulmány" , "" ) ; 3

StrPattern (<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — számmal helyettesíti a paramétereket a karakterláncban. A karakterláncnak tartalmaznia kell a következő formájú helyettesítési jelzőket: "% 1 ..% N". A jelölők számozása 1-től kezdődően történik. Ha a paraméter értéke Határozatlan, egy üres karakterlánc kerül behelyettesítésre.

StrPattern ( "1. paraméter =% 1, 2. paraméter =% 2", "1" , "2" ) ; // 1. paraméter = 1, 2. paraméter = 2

String konverziós függvények:

Egy oroszlán(<Строка>, <ЧислоСимволов>) - először a karakterlánc első karaktereit adja vissza.

Jobb (<Строка>, <ЧислоСимволов>) - a karakterlánc utolsó karaktereit adja vissza.

Szerda (<Строка>, <НачальныйНомер>, <ЧислоСимволов>) - egy hosszúságú karakterláncot ad vissza<ЧислоСимволов>a karakterrel kezdve<НачальныйНомер>.

AbbrL (<Строка>) a jelentéktelen karaktereket a karakterlánc első jelentős karakterétől balra csonkolja.

Rövidítés (<Строка>) - levágja a jelentéktelen karaktereket a karakterlánc utolsó jelentős karakterétől jobbra.

SocrLP (<Строка>) - levágja a jelentéktelen karaktereket a sor első jelentős karakterétől balra és a sor utolsó jelentős karakterétől jobbra.

StrGetString (<Строка>, <НомерСтроки>) - egy többsoros karakterláncot kap szám szerint.

Egyéb funkciók:

Erősség (<Строка>) - a karakterláncban lévő karakterek számát adja vissza.

Sorok száma (<Строка>) - egy többsoros karakterlánc sorainak számát adja vissza. Egy sor akkor tekinthető újnak, ha újsor karakter választja el az előző sortól.

Összehasonlítás (<Строка1>, <Строка2> ) - összehasonlít két karakterláncot, nem érzékeny a kis- és nagybetűkre. A függvény ugyanúgy működik, mint egy objektum Értékek összehasonlítása... Visszaküldés:

  • 1 - ha az első sor nagyobb, mint a második
  • -1 - ha a második sor nagyobb, mint az első
  • 0 - ha a karakterláncok egyenlőek

StrCompare ("Első sor", "Második sor"); 1

Az 1C 8 lekérdezési nyelve a jól ismert "strukturált programozási nyelv" (ahogyan gyakran nevezik, SQL) egyszerűsített analógja. De 1C-ben csak adatok olvasására használják, adatok megváltoztatására használják tárgymodell adat.

Egy másik érdekes különbség az orosz szintaxis. Bár valójában használhat angol nyelvű konstrukciókat.

Példa kérés:

KIVÁLASZTÁS
Bankok. Név,
Bankok.CorrSzámla
TÓL TŐL
Címtár Banks AS Banks

Ez a kérés lehetővé teszi számunkra, hogy információkat lássunk az adatbázisban szereplő összes bank nevéről és levelező számlájáról.

A lekérdező nyelv a legegyszerűbb és hatékony módszer információszerzés. Amint a fenti példából is látható, a lekérdezési nyelvben a metaadatok neveivel kell fellebbezni (ez a konfigurációt alkotó rendszerobjektumok listája, azaz könyvtárak, dokumentumok, regiszterek stb.).

A lekérdező nyelvi konstrukciók leírása

Lekérdezés szerkezete

Az adatok megszerzéséhez elegendő a "SELECT" (kiválasztás) és a "FROM" (from) konstrukciókat használni. A legegyszerűbb kérés alábbiak szerint:

SELECT * FROM Könyvtárak.Nómenklatúra

Ahol a "*" a táblázat összes mezőjének kiválasztását jelenti, a References.Nomenclature pedig a táblázat neve az adatbázisban.

Nézzünk egy összetettebb és általánosabb példát:

KIVÁLASZTÁS
<ИмяПоля1>HOGYAN<ПредставлениеПоля1>,
Összeg(<ИмяПоля2>) HOGYAN<ПредставлениеПоля2>
TÓL TŐL
<ИмяТаблицы1>HOGYAN<ПредставлениеТаблицы1>
<ТипСоединения>ÖSSZETETT<ИмяТаблицы2>HOGYAN<ПредставлениеТаблицы2>
TOVÁBB<УсловиеСоединениеТаблиц>

AHOL
<УсловиеОтбораДанных>

BETÖLTÉS
<ИмяПоля1>

RENDEZÉS
<ИмяПоля1>

EREDMÉNYEK
<ИмяПоля2>
TOVÁBB
<ИмяПоля1>

V ez a kérés a „Táblázatnév1” és „Táblázatnév” táblákból kiválasztjuk a „Mezőnév1” és „Mezőnév1” mezők adatait, a mezőkhöz az „AS” operátor segítségével szinonimákat rendelünk, bizonyos „Táblázatfeltétel” feltétel szerint egyesítjük.

A beérkezett adatok közül csak a „WHERE” „Adatvisszacsatolási feltétel” feltételnek megfelelő adatokat választjuk ki. Ezután a „MezőNév1” mező alapján csoportosítjuk a lekérdezést, miközben összegezzük a „Mezőnév2” mezőt. A „MezőnévMező1” mezőhöz összesítést készítünk. és az utolsó mező a „FieldName2”.

Az utolsó lépés a kérés rendezése az ORDER BY konstrukcióval.

Általános konstrukciók

Tekintsük az 1C 8.2 lekérdezési nyelv általános konstrukcióit.

ELSŐn

Használva ezt az operátort megkaphatja n az első rekordok számát. A bejegyzések sorrendjét a kérelemben szereplő sorrend határozza meg.

ELSŐ 100 KIVÁLASZTÁSA
Bankok. Név,
Bankok Kód AS BIK
TÓL TŐL
Címtár Banks AS Banks
RENDEZÉS
Bankok.

A kérelem megkapja a "Bankok" könyvtár első 100 bejegyzését, ábécé sorrendben.

ENGEDÉLYEZETT

Ez a kialakítás a mechanizmussal való munkavégzés szempontjából releváns. A mechanizmus lényege, hogy az adatbázistábla egyes rekordjainak olvasását (és egyéb műveleteit) a felhasználókra korlátozza, nem pedig a tábla egészét.

Ha egy felhasználó egy kéréssel olyan rekordokat próbál beolvasni, amelyek számára elérhetetlen, hibaüzenetet kap. Ennek elkerülésére érdemes az "ALOWED" konstrukciót használni, vagyis a kérés csak a számára engedélyezett rekordokat olvassa be.

ENGEDÉLYEZETT KIVÁLASZTÁS
További információk Store.Link
TÓL TŐL
Referencia.További információk tárolása

KÜLÖNFÉLE

A „KÜLÖNBÖZŐ” használata lehetővé teszi, hogy kizárja az ismétlődő karakterláncokat az 1C lekérdezés eredményének beviteléből. A duplikáció azt jelenti, hogy a kérelem minden mezője megegyezik.

ELSŐ 100 KIVÁLASZTÁSA
Bankok. Név,
Bankok Kód AS BIK
TÓL TŐL
Címtár Banks AS Banks

EmptyTable

Ezt a konstrukciót ritkán használják lekérdezések kombinálására. Csatlakozáskor szükség lehet egy üres beágyazott tábla megadására az egyik táblában. Az "EmptyTable" operátor éppen erre alkalmas.

Példa az 1C 8 súgóból:

SELECT Hivatkozási szám, ÜRES TÁBLÁZAT (Nv, Tov, Menny.) AS Összetétel
FROM Dokumentum.Költség
ÖSSZE ÖSSZETÉTEL
SELECT Hivatkozási szám, Összetétel. (sorszám, cikk, mennyiség)
FROM Dokumentum.Számla bizonylat.Számla.Tartalom. *

NULLA

Nagyon hasznos funkció, amely sok hibát elkerül. A YesNULL () lehetővé teszi a NULL érték lecserélését a kívánt értékre. Nagyon gyakran használják az egyesített táblákban lévő értékek jelenlétének tesztelésére, például:

KIVÁLASZTÁS
NomenclatureRef.Ref.
Van NULL (Tételegyenleg.Mennyiségegyenleg, 0) AS Mennyiségi egyenleg
TÓL TŐL


Használhatja más módon is. Például, ha az egyes soroknál nem ismert, hogy melyik táblázatban található az érték:

IS NULL (InvoiceInvoiceReceived.Date, InvoiceInvoiced.Date)

Az AS egy olyan operátor, amely lehetővé teszi, hogy nevet (szinonimát) rendeljünk egy táblához vagy mezőhöz. A fenti felhasználási példát láttuk.

Ezek a konstrukciók nagyon hasonlóak - lehetővé teszik a kívánt érték karakterlánc-ábrázolását. Az egyetlen különbség az, hogy a REPRESENTATION bármilyen értéket karakterlánctípussá alakít, a REFERENCE REPRESENTATION pedig csak referenciaértékeket. A REFERENCIA ÁBRÁZOLÁS használata javasolt az adatösszeállítási rendszer optimalizálási lekérdezéseinél, kivéve, ha természetesen a referencia adatmezőt tervezzük használni a szűrőkben.

KIVÁLASZTÁS
Nézet (Link), // sor, például „123. sz. előzetes jelentés, 2015.10.10.
Ábrázolás (törlésjel) AS Törlési jel szövege, // karakterlánc, "Igen" vagy "Nem"
ReferenceRepresentation (törlési jel) AS Törlési jel Boolean // Logikai, igaz vagy hamis
TÓL TŐL
Document.Advance Report

EXPRESSZ

Az Express lehetővé teszi a mezőértékek konvertálását a kívánt adattípusra. Az értékeket primitív vagy referenciatípussá alakíthatja.

Az Express for referenciatípus a kért adattípusok korlátozására szolgál összetett típusú mezőkben, gyakran a rendszer teljesítményének optimalizálására. Példa:

EXPRESS (Költség.Subconto1 táblázat, mint referencia.Költségcikk) .Tevékenységtípus Adóköltség-elszámoláshoz

Primitív típusoknál ezt a függvényt gyakran használják a karakterek számának korlátozására a korlátlan hosszúságú mezőkben (az ilyen mezőkkel nem lehet összehasonlítani). A hiba elkerülése érdekében Érvénytelen paraméterek az összehasonlítási műveletben. A mezőket nem lehet összehasonlítani
korlátlan hosszúság és nem kompatibilis típusú mezők
", Az ilyen mezőket a következőképpen kell kifejezni:

EXPRESS (Megjegyzés AS sor (150))

KÜLÖNBSÉG

Ingyenes 267 1C videós oktatóanyagok:

Példa az IS NULL használatára egy 1C kérésben:

VÁLASSZ
Spr
LEFT CSATLAKOZÁS Felhalmozási nyilvántartás.Termékek a raktárokban.Left AS RemainingGoods
Software NomenclatureRef.Ref = ImplementedCommentsComponentsRemains.Nomenclature
HOL VAN AZ ÁRUK EGYENLEGE. Mennyiség Az egyenleg NULLA

A lekérdezésben az adattípust a következőképpen határozhatja meg: a TYPE () és TYPE () függvényekkel, vagy a logikai operátor LINK. A két funkció hasonló.

Előre meghatározott értékek

Amellett, hogy az átadott paramétereket a kérésekben az 1C lekérdezési nyelven használja, használhat előre meghatározott értékeket, ill. Például felsorolások, előre meghatározott keresések, számlatáblázatok stb. Ehhez az "Érték ()" konstrukciót használjuk.

Használati példa:

WHERE Nomenclature.NomenclatureType = Érték (Directory.NomenclatureType.Product)

WHERE Counterparties.Contact Information Type = Érték (Enumeration.Contact Information.Type.Phone)

WHERE Számlaegyenlegek.Számla = Érték (Számlaterv. Önfenntartó.Nyereség)

Kapcsolatok

4 típusú kapcsolat létezik: BAL, JOBB, TELJES, BELSŐ.

BAL és JOBB CSATLAKOZÁS

Az összekapcsolások két tábla összekapcsolására szolgálnak egy adott feltétel szerint. Funkció itt: BAL ÍZÜLET abban, hogy az első megadott táblát teljes egészében vesszük és a második táblát feltétel szerint kötjük. A második tábla mezői, amelyeket nem lehetett feltételhez kötni, az értékkel töltődnek ki NULLA.

Például:

A Partnerek teljes táblázatát visszaadja, és csak azokon a helyeken tölti ki a „Bank” mezőt, ahol a „Counterparts.Name = Banks.Name” feltétel teljesül. Ha a feltétel nem teljesül, a Bank mező kerül beállításra NULLA.

JOBB ÍZÜLET 1C nyelven teljesen ugyanaz BAL kapcsolat, egy különbség kivételével - in HELYES CSATLAKOZTATÁS A „fő” táblázat a második, nem az első.

TELJES KAPCSOLAT

TELJES KAPCSOLAT abban különbözik a bal és a jobb oldaltól, hogy két táblából jeleníti meg az összes rekordot, csak azokat kapcsolja össze, amelyeket feltétel alapján tud összekapcsolni.

Például:

TÓL TŐL

TELJES KAPCSOLAT
Címtár Banks AS Banks

TOVÁBB

A lekérdezési nyelv csak akkor adja vissza mindkét táblát teljes egészében, ha a rekordok összekapcsolásának feltétele teljesül. A bal/jobb összekapcsolással ellentétben a NULL-ok két mezőben jelenhetnek meg.

BELSŐ CSATLAKOZTATÁS

BELSŐ CSATLAKOZTATÁS abban különbözik a teljestől, hogy csak azokat a rekordokat jeleníti meg, amelyeket a megadott feltétel összekapcsolhat.

Például:

TÓL TŐL
Címtár Vállalkozók AS ügyfelek

BELSŐ CSATLAKOZTATÁS
Címtár Banks AS Banks

TOVÁBB
Clients.Name = Banks.Name

Ez a kérés csak azokat a sorokat adja vissza, amelyekben a bank és a partner neve megegyezik.

Egyesületek

A COMBINE and COMBINE ALL konstrukció két eredményt egyesít egybe. Azok. a kettő előadásának eredménye „összeolvad” egy, közös.

Vagyis a rendszer a megszokott módon működik, csak ideiglenes tábla esetén.

Az INDEX SZOFTVER használata

Egy dolgot azonban szem előtt kell tartani. Az index létrehozása egy ideiglenes táblán szintén időt vesz igénybe. Ezért csak akkor célszerű a "" konstrukciót használni, ha biztosan tudjuk, hogy nem lesz 1-2 rekord az ideiglenes táblában. Ellenkező esetben a hatás ellentétes lehet – az indexelt mezők teljesítménye nem kompenzálja az index felépítési idejét.

KIVÁLASZTÁS
Currency RatesSliceLast.Currency AS pénznem,
ValutaárfolyamokSliceLast.Course
POST valutaárfolyamok
TÓL TŐL
Information Register.Currency Rates.SliceLast (& Period,) AS Currency RatesSliceLast
INDEX BY
Valuta
;
KIVÁLASZTÁS
Árak
ÁrakNómenklatúrák .Ár,
ÁrakNómenklatúrák. Pénznem,
Valuta árfolyamok.
TÓL TŐL
Információk Register.NomenclaturePrices.SliceLast (& időszak,
B nómenklatúra (& nómenklatúra) ÉS PriceType = & PriceType) AS árak
LEFT UNION valutaárfolyamok AS valutaárfolyamok
BY RatesNomenclature.Currency = RatesCurrency.Currency

Csoportosítás

Az 1C lekérdezési nyelv lehetővé teszi a speciális összesített függvények a lekérdezési eredmények csoportosítása során. A csoportosítás összesítő függvények nélkül is használható a duplikációk "kiküszöbölésére".

A következő funkciók érhetők el:

Összeg, Szám, Különböző darabok száma, Maximum, Minimum, Átlag.

1. példa:

KIVÁLASZTÁS
Áruk értékesítése, szolgáltatások, áruk, nómenklatúra,
ÖSSZEG (Áruk, szolgáltatások, áruk értékesítése. Mennyiség) AS Mennyiség,
ÖSSZEG (Sale of GoodsServicesGoods.Amount) AS Amount
TÓL TŐL

BETÖLTÉS
Realization of GoodsSzolgáltatásokGoods.Nómenklatúra

A kérés megkapja az összes árut tartalmazó sort, és összegzi azokat mennyiségek és összegek szerint a cikk összefüggésében.

2. példa

KIVÁLASZTÁS
Bankok. Kód,
MENNYISÉG (KÜLÖNBÖZŐ Banks.Link) AS QuantityDoubles
TÓL TŐL
Címtár Banks AS Banks
BETÖLTÉS
Banki kód

Ez a példa megjeleníti a BIC-ek listáját a „Bankok” könyvtárban, és megmutatja, hogy mindegyikhez hány ismétlődés létezik.

Eredmények

Az összegzések egy módja annak, hogy adatokat kapjunk egy hierarchikus rendszerből. Összefoglaló mezőkhöz az összesítő függvények használhatók, mint a csoportosításoknál.

A végösszegek gyakorlati felhasználásának egyik legnépszerűbb módja az áruk kötegelt leírása.

KIVÁLASZTÁS




TÓL TŐL
Document.Realization of GoodsServices.Goods AS Sale ofGoodsServicesGoods
RENDEZÉS

EREDMÉNYEK
SUM (mennyiség),
SUM (összeg)
TOVÁBB
Elnevezéstan

A lekérdezés eredménye a következő hierarchikus lesz:

Általános összefoglaló

Ha az összes "összeg" összegét szeretné megkapni, használja az "Általános" operátort.

KIVÁLASZTÁS
GoodsServicesGoods. Nómenklatúra AS Nómenklatúra,
A GoodsServicesGoods.Link AS dokumentum megvalósítása,
Áruk, szolgáltatások, áruk realizálása. Mennyiség AS Mennyiség,
Áruk értékesítéseSzolgáltatásokGoods.Amount AS Amount
TÓL TŐL
Document.Realization of GoodsServices.Goods AS Sale ofGoodsServicesGoods
RENDEZÉS
A GoodsServicesGoods.Link.Date megvalósítása
EREDMÉNYEK
SUM (mennyiség),
SUM (összeg)
TOVÁBB
TÁBORNOK,
Elnevezéstan

A lekérdezés végrehajtása eredményeként a következő eredményt kapjuk:

Amelyben a csoportosítás 1. szintje az összes kötelező mező összesítése.

Rendelés

Az ORDER BY operátor a lekérdezés eredményének rendezésére szolgál.

A primitív típusok (karakterlánc, szám, logikai érték) rendezése úgy történik, hogy a szokásos szabályokat... A hivatkozástípusok mezőinél a rendezés a hivatkozás belső reprezentációja (egyedi azonosító) alapján történik, nem pedig kód vagy a hivatkozás reprezentációja alapján.

KIVÁLASZTÁS

TÓL TŐL
Hivatkozás.Nómenklatúra AS Nómenklatúra
RENDEZÉS
Név

A lekérdezés megjeleníti a készletlista katalógus nevét tartalmazó listát, ábécé sorrendben.

Automatikus rendelés

A rendezés nélküli lekérdezés eredménye egy kaotikusan bemutatott sorhalmaz. Az 1C platform fejlesztői nem garantálják a karakterláncok ugyanabban a sorrendben történő kimenetét, amikor ugyanazokat a lekérdezéseket hajtják végre.

Ha konzisztens sorrendben kell megjelenítenie a táblázat rekordjait, akkor az "Autoorder" konstrukciót kell használnia.

KIVÁLASZTÁS
Nomenklatúra Név AS Név
TÓL TŐL
Hivatkozás.Nómenklatúra AS Nómenklatúra
AUTOMATIKUS RENDELÉS

Virtuális asztalok

Az 1C virtuális táblái az 1C lekérdezési nyelv egyedi jellemzői, amely más hasonló szintaxisokban nem található meg. Virtuális asztal - gyors út profilinformációk beszerzése a nyilvántartásokból.

Mindegyik regisztertípusnak saját virtuális táblakészlete van, amelyek a regiszterbeállításoktól függően eltérőek lehetnek.

  • az első vágása;
  • az utóbbi vágása.
  • maradék;
  • forradalmak;
  • egyenlegek és forgalom.
  • mozgások az alkontóból;
  • forradalmak;
  • RPM Dt Kt;
  • maradék;
  • egyenlegek és forgalom
  • subconto.
  • bázis;
  • grafikon adatok;
  • a tényleges érvényességi idő.

Egy megoldásfejlesztő számára az adatokat egy (virtuális) táblából veszik, de valójában az 1C platform sok táblát vesz át, átalakítva azokat a kívánt formába.

KIVÁLASZTÁS
TermékekRaktárban Egyenlegek és Forgások.Nómenklatúra,
Termékek Raktárban Egyenlegek és Forgalom. Mennyiség Kezdő egyenleg,
Áruk Raktárban Egyenlegek és Forgások. Mennyiség Forgalom,
Áruk raktárban Egyenlegek és forgalom. Számbevétel,
Áruk Raktárban Egyenlegek és Forgások. Mennyiségi fogyasztás,
Termékek Raktárban Egyenlegek és Forgások. MennyiségVégső egyenleg
TÓL TŐL
Felhalmozási nyilvántartás. Áruk raktárban. Egyenlegek és forgalom, mint áruk raktárban Egyenlegek és forgalom

Egy ilyen kérés lehetővé teszi a gyors fogadást nagyszámú adat.

Virtuális tábla paraméterei

Magasan fontos szempont virtuális táblákkal való munkavégzés - paraméterek használatával. Virtuális tábla paraméterei - speciális paraméterek a kiválasztáshoz és hangoláshoz.

Az ilyen táblák esetében helytelennek tekinthető a "WHERE" konstrukcióban történő kijelölés használata. Amellett, hogy a kérés nem válik optimálissá, lehetőség van hibás adatok fogadására.

Példa az ilyen paraméterek használatára:

Felhalmozási nyilvántartás.Termékek a raktárokban.Maradványok és forgások (& kezdeti időszak, és végi időszak, hónap, mozgások és időszakhatárok, nómenklatúra = & kívánt nómenklatúra)

Virtuális táblák algoritmusa

Például a leggyakrabban használt "Residuals" típusú virtuális tábla két fizikai tábla - egyenlegek és mozgások - adatait tárolja.

Virtuális tábla használatakor a rendszer a következő műveleteket hajtja végre:

  1. A dátum és a méretek tekintetében a legközelebbi számított értéket kapjuk az összegtáblázatban.
  2. „Adja hozzá” a mozgástáblázatból származó összeget az összesítési táblázat összegéhez.


Ilyen egyszerű műveletek jelentősen javíthatja a rendszer egészének teljesítményét.

A Lekérdezéskészítő használata

Lekérdezés konstruktor- az 1C vállalati rendszerbe épített eszköz, amely nagyban megkönnyíti az adatbázis lekérdezésének fejlesztését.

A lekérdezéskonstruktor meglehetősen egyszerű, intuitív tiszta felület... Nézzük azonban meg közelebbről a lekérdezéskonstruktor használatát.

A lekérdező szöveg konstruktort a helyi menü (jobb egérgombbal) indítja el a programkód megfelelő helyén.

Az 1C lekérdezés konstruktor leírása

Nézzük meg közelebbről az egyes tervezési lapot. A kivétel a Builder lap, amely egy másik beszélgetés témája.

Tab táblázatok és mezők

Ez a lap határozza meg a jelentésben megjeleníteni kívánt adatforrást és mezőket. Ami azt illeti, a CHOOSE .. FROM konstrukciók leírása itt található.

A forrás lehet fizikai adatbázistábla, virtuális regisztertábla, ideiglenes táblák, beágyazott lekérdezések stb.

A virtuális táblák helyi menüjében beállíthatja a virtuális tábla paramétereit:

Linkek lap

A fül több tábla kapcsolatainak leírására szolgál, konstrukciókat hoz létre a CONNECTION szóval.

Csoportosítás lap

Ezen a lapon a rendszer lehetővé teszi a táblázat eredményének kötelező mezőinek csoportosítását és összesítését. Leírja a GROUP BY, SUM, MINIMUM, AVERAGE, MAXIMUM, MENNYISÉG, KÜLÖNBÖZŐ SZÁMA konstrukciók használatát.

Feltételek fül

Felelős mindazért, ami a WHERE konstrukció után a kérés szövegében szerepel, vagyis a kapott adatokkal kapcsolatos minden feltételért.

Speciális lap

Tab Továbbá tele van mindenféle paraméterrel, ami nagyon fontos. Tekintsük az egyes tulajdonságokat.

Csoportosítás Rekordok lekérése:

  • Először N- egy paraméter, amely csak N rekordot ad vissza a lekérdezéshez (FIRST operátor)
  • Nincs ismétlés- biztosítja a fogadott rekordok egyediségét (operátor MÁS)
  • Engedélyezett- lehetővé teszi, hogy csak azokat a rekordokat válasszuk ki, amelyek figyelembevételével a rendszer lehetővé teszi a kiválasztást (konstrukció ENGEDÉLYEZVE)

Csoportosítás Kérelem típusa meghatározza, hogy milyen típusú lekérdezés lesz: adatok lekérése, ideiglenes tábla létrehozása vagy ideiglenes tábla megsemmisítése.

Alul van egy zászló A fogadott adatok blokkolása a későbbi módosításhoz... Lehetővé teszi az adatzár beállításának lehetőségét, amely biztosítja az adatok biztonságát a beolvasás pillanatától a módosításig (csak Automata üzemmód zárak, design FOR CHANGE).

Szakszervezetek / Fedőnevek Tab

A lekérdezéstervező ezen a lapján beállíthatja a különböző táblák és álnevek kombinálásának lehetőségét (HOGYAN szerkesztés). A táblázatok a bal oldalon láthatók. Ha a zászlókat a táblázat elé állítja, akkor az UNION konstrukció kerül felhasználásra, ellenkező esetben - UNION ALL (a két módszer különbözik). A jobb oldal a különböző táblák mezőinek megfelelőségét jelzi, ha nincs megadva egyezés, a lekérdezés NULL-t ad vissza.

Rendelés fül

Itt adhatja meg az értékek rendezési sorrendjét (ORDER BY) - csökkenő (DESCENT) vagy növekvő (RETURN).

Van egy érdekes zászló is - Automatikus rendelés(a kérésben - AUTOMATIKUS RENDELÉS). Alapértelmezés szerint az 1C rendszer "kaotikus" sorrendben jeleníti meg az adatokat. Ha beállítja ezt a jelzőt, a rendszer belső adatok szerint rendezi az adatokat.

Lekérdezési csomag lap

A lekérdezéstervező lapján újakat hozhat létre, és navigációként is használhatja. A kérés szövegében a csomagokat „;” (vessző) szimbólum választja el.

Lekérdezés gomb a Lekérdezéskészítőben

A lekérdezéskonstruktor bal alsó sarkában található a Lekérdezés gomb, amellyel bármikor megtekintheti a lekérdezés szövegét:

Ebben az ablakban módosíthatja a kérést, és végrehajthatja azt.


A Query Console használata

A Query Console egy egyszerű és kényelmes módja az összetett lekérdezések hibakeresésének és gyors információszerzésnek. Ebben a cikkben megpróbálom leírni a Query Console használatát, és hivatkozást adok a Query Console letöltéséhez.

Nézzük meg közelebbről ezt az eszközt.

Töltse le az 1C Query Console-t

Először is, a Query Console használatának megkezdéséhez le kell töltenie valahonnan. A kezeléseket általában két típusra osztják - a kezelt űrlapokés közönséges (vagy néha 8.1-en és 8.2-n / 8.3-on hívják).

Ezt a két típust megpróbáltam kombinálni egy feldolgozásban - a kívánt üzemmódban megnyílik a kívánt űrlap (in szabályozott mód a konzol csak félkövér módban működik).

Az 1C lekérdező konzol leírása

Kezdjük a lekérdezési konzol nézegetésével a fő feldolgozó panel leírásával:

A lekérdezési konzol fejlécében ezredmásodperces pontossággal láthatjuk az utolsó lekérdezés végrehajtási idejét, ez lehetővé teszi a különböző konstrukciók teljesítménybeli összehasonlítását.

A parancssor első gombcsoportja felelős az aktuális kérések külső fájlba mentéséért. Ez nagyon kényelmes, mindig visszatérhet egy összetett lekérdezés írásához. Vagy például vezessen listát bizonyos konstrukciók tipikus példáiról.

A bal oldalon a Lekérdezés mezőben új lekérdezéseket hozhat létre, és elmentheti őket egy fastruktúrába. A gombok második csoportja csak a kérések listájának kezeléséért felelős. Ezzel kérést hozhat létre, másolhat, törölhet, áthelyezhet.

  • Végrehajtásvizsgálat- egyszerű végrehajtás és az eredmény elérése
  • Csomag futtatása- lehetővé teszi az összes köztes kérés megtekintését a kérelemkötegben
  • Ideiglenes táblázatok megtekintése- lehetővé teszi az ideiglenes lekérdezések által visszaadott eredmények megtekintését a táblázatban

Kérelem paraméterei:

Lehetővé teszi a kérés aktuális paramétereinek beállítását.

A lekérdezési paraméterek ablakában a következők érdekesek:

  • Gomb Kérésre automatikusan megtalálja az összes paramétert a kérésben a fejlesztő kényelme érdekében.
  • Zászló Egységes paraméterek minden kéréshez- telepítéskor a feldolgozása nem törli a paramétereket a kérésről a kérésre való váltáskor általános lista kéréseket.

Állítsa be a paramétert értéklistaként nagyon egyszerű, amikor kiválaszt egy paraméterértéket, nyomja meg a gombot az érték törléséhez (kereszt), a rendszer felajánlja az adattípus kiválasztását, ahol ki kell választania az „Értékek listája” lehetőséget:

Szintén a felső panelen található egy gomb a lekérdezési konzol beállításainak meghívására:

Itt adhatja meg az automatikus mentési lekérdezések és a lekérdezések végrehajtásának beállításait.

A lekérdezés szövege a konzol lekérdezési mezőjébe kerül. Ezt megteheti egy egyszerű lekérdezési tesztkészlettel vagy egy speciális eszköz - a lekérdezéstervező - hívásával.

Az 1C 8 lekérdezés konstruktor a helyi menüből (jobb egérgombbal) hívható meg, amikor a beviteli mezőre kattintunk:

Ebben a menüben is vannak ilyenek hasznos funkciókat sortörés karakterek ("|") törlése vagy hozzáadása a kérelemhez, vagy a kérés kódjának megfelelő formában történő lekérése:

Request = Új kérés;
Request.Text = "
| VÁLASSZ
| Pénznemek.Link
| FROM
| Címtár. Pénznemek AS Pénznemek ”;
QueryResult = Query.Run ();

A lekérdezési konzol alsó mezőjében megjelenik a lekérdezés eredménymezője, amelyhez ez a feldolgozás létrejött:



Ezenkívül a lekérdezési konzol a listán kívül adatokat is tud megjeleníteni fa formájában - az összegeket tartalmazó lekérdezésekhez.

Lekérdezések optimalizálása

Az 1C Enterprise 8.3 termelékenységének növelésének egyik legfontosabb pontja az optimalizáláskéréseket... Ez a pont akkor is nagyon fontos, amikor bizonyítvány átadása... Az alábbiakban a nem tipikus okairól fogunk beszélni optimális teljesítmény lekérdezések és optimalizálási módszerek.

Kijelölések a virtuális táblában a WHERE konstrukcióval

A virtuális tábla részleteire csak a BT paramétereken keresztül szükséges szűrőket alkalmazni. Semmi esetre se használja a WHERE konstrukciót a virtuális táblában történő kijelöléshez, ez optimalizálási szempontból durva hiba. A WHERE segítségével történő kiválasztás esetén ugyanis a rendszer MINDEN rekordot megkap, és csak ezután választja ki a szükségeseket.

JOBB:

KIVÁLASZTÁS

TÓL TŐL
Felhalmozási nyilvántartás.Kölcsönös elszámolások Deponensekkel Szervezetekkel. Egyenlegek (
,
Szervezet = & Szervezet
And Individual = & Individual) HOGYAN Kölcsönös elszámolások Deponensekkel Szervezetekkel

NEM JÓ:

KIVÁLASZTÁS
Kölcsönös elszámolások Deponensekkel Szervezetekkel Egyenlegek.ÖsszegEgyenleg
TÓL TŐL
Felhalmozási nyilvántartás. Kölcsönös elszámolások Deponensekkel Szervezetekkel. Egyenlegek (,) AS Kölcsönös elszámolások Deponensekkel Szervezetekkel Egyenlegek
AHOL
SettlementsWith DeponentsOrganizationsBalances.Organization = & Szervezet
És kölcsönös elszámolások képviselőkkel Szervezetek Egyenlegek. Személyes = & Magánszemélyek

Összetett típusú mező értékének lekérése ponton keresztül

Ha egy lekérdezésben összetett típusú adatokat kapunk ponton keresztül, akkor a rendszer bal oldali csatlakozással pontosan annyi táblát kapcsol össze, ahány típus lehetséges az összetett típus mezőjében.

Például nagyon nem kívánatos, hogy az optimalizálás a regiszter rekordmezőjére – a regisztrátorra – hivatkozzon. Az anyakönyvvezető összetett adattípussal rendelkezik, amely tartalmazza az összes lehetséges dokumentumtípust, amely adatokat írhat a nyilvántartásba.

NEM JÓ:

KIVÁLASZTÁS
Record Set.Recorder.Date,
Rekordok halmaza. Szám
TÓL TŐL
Felhalmozási regiszter.ProductsOrganizations AS SetRecords

Azaz valójában egy ilyen kérés nem egy táblára, hanem 22 adatbázistáblára vonatkozik (ebben a regiszterben 21 féle regisztrátor van).

JOBB:

KIVÁLASZTÁS
VÁLASZTÁS
WHEN GoodsOrg.Registrar LINK Document.Realization of GoodsServices
THEN EXPRESS (GoodsOrg.Registrar AS Document.Realization of GoodsServices) .Date
WHEN GoodsOrg.Registrar LINK Document.Arrival of GoodsServices
THEN EXPRESS (GoodsOrg.Registrar AS Document.Arrival of GoodsServices) .Date
VÉGE AS Dátum,
ProductsOrg.Quantity
TÓL TŐL
Felhalmozási nyilvántartás.ProductsOrg

Vagy a második lehetőség az, hogy ilyen információkat adunk a kellékekhez, például esetünkben a dátumot.

JOBB:

KIVÁLASZTÁS
ProductsOrganizations.Date,
TermékekSzervezetek.Szám
TÓL TŐL
Felhalmozási nyilvántartás. Szervezetek árui AS Szervezetek árui

Allekérdezések csatlakozási állapotban

Az optimalizálás érdekében elfogadhatatlan az allekérdezések használata összekapcsolási feltételek mellett, ez jelentősen lelassítja a lekérdezést. Ilyen esetekben célszerű a VT-t használni. A csatlakozáshoz csak metaadatokat és BT-objektumokat kell használnia, miután azokat előzőleg indexelte a kapcsolati mezők szerint.

NEM JÓ:

KIVÁLASZTÁS…

BAL ÍZÜLET (
VÁLASZTÁS AZ INFORMÁCIÓBÓL REGISTER.Limits
AHOL …
BETÖLTÉS...
) TOVÁBB …

JOBB:

KIVÁLASZTÁS…
POST limitek
FROM Információk Nyilvántartás.Limits
AHOL …
BETÖLTÉS...
INDEX…;

KIVÁLASZTÁS…
FROM Dokumentum.Realization of GoodsSzolgáltatások
LEFT JOIN Limits
TOVÁBB …;

Rekordok összekapcsolása virtuális táblákkal

Vannak helyzetek, amikor a rendszer nem működik optimálisan, amikor egy virtuális asztalhoz csatlakozik másokkal. Ebben az esetben a lekérdezés teljesítményének optimalizálása érdekében megpróbálhatja elhelyezni a virtuális táblát az ideiglenes táblába, ne felejtse el indexelni az összekapcsolt mezőket az ideiglenes táblalekérdezésben. Ennek az az oka, hogy a VT-ket gyakran a DBMS több fizikai táblája is tartalmazza, ennek eredményeként a kijelölésükhöz egy részlekérdezés történik, és a probléma hasonló az előző ponthoz.

Szűrők használata nem indexelt mezőkön

Az egyik leggyakoribb hiba a lekérdezések írásakor a feltételek használata nem indexelt mezőkre, ennek ellentmond lekérdezés optimalizálási szabályok. A DBMS nem tudja optimálisan végrehajtani a lekérdezést, ha nem indexelt mezők szerinti szűrést ír elő a lekérdezésben. Ha ideiglenes táblát veszünk, akkor az összekapcsolási mezőket is indexelni kell.

Minden feltételhez megfelelő indexnek kell lennie. Az alábbi követelményeknek megfelelő index megfelelő:

  1. Az index a feltételben felsorolt ​​összes mezőt tartalmazza.
  2. Ezek a mezők az index legelején találhatók.
  3. Ezek a kijelölések sorban vannak, vagyis azok az értékek, amelyek nem vesznek részt a lekérdezési feltételben, nincsenek "beékelve" közéjük.

Ha a DBMS nem találja meg a megfelelő indexeket, akkor a teljes tábla vizsgálata megtörténik – ez nagyon negatív hatással lesz a teljesítményre, és a teljes rekordkészlet hosszan tartó blokkolásához vezethet.

Logikai VAGY használata feltételekben

Ez minden, ez a cikk a lekérdezésoptimalizálási szempontok alapjaival foglalkozott, amelyeket minden 1C szakértőnek tudnia kell.

Nagyon hasznos ingyenes videotanfolyam a lekérdezésfejlesztésről és -optimalizálásról, erősen ajánlott kezdőknek és nem csak!



Tetszett a cikk? Oszd meg