Funkcijos substring() funkcija. Funkcijos substring() vykdymo funkcija 1c eilutės funkcijos užklausoje


Sveiki, mieli tinklaraščio svetainės skaitytojai! Šiandien, naudodamiesi pavyzdžiais, apžvelgsime, kaip praktiškai galite naudoti 1C užklausos funkciją SUBSTRING. Naudoti šią funkciją naudinga ne tik atliekant paprastas užklausas, kurias čia apžvelgsime, bet ir atliekant užklausas bei užklausas.

Užduotis buvo tai, ko reikėjo iš dokumento detalių Laikymasis pasirinkite dvi eilutes ir rūšiuokite pagal jas. Šio tipo sąskaitos laikymasis: 779000/004599. Kaip padalyti šią vertę į dvi dalis?

Funkcija SUBSTRING turi tris parametrus. Pirmoji yra šaltinio eilutė, iš kurios norite išgauti dalį simbolių – poeilutė. Akivaizdu, kad šio parametro vertės tipas yra Linija. Dėmesio, tai labai svarbi pastaba, jei naudosite ne eilutę, o pirmojo parametro tipą, funkcija neveiks, užklausa sugeneruos klaidą! Antrasis parametras nustato simbolio vietą šaltinio eilutėje, nuo kurios prasideda eilutės dalies pasirinkimas, o trečiasis yra pasirinktos eilutės ilgis. Antrojo ir trečiojo parametrų reikšmės tipas yra skaičius.

Pereikime prie praktikos:

PASIRINKITE Tipišką. Įrašymo priemonės AS pavadinimas, SUBSTRING(Tipinis.Registras.Pagal pavadinimą, 1, 6) AS išlaidų sąskaita, SUBSTRING(Tipinis.Regitras.Pagal.Pavadinimas, 8, 11) AS Skyrius, SUMMA(SELECT WHEN MONTH(Tipical.Period) = 3 THEN EXPRESS(Tipical.Suma KAIP SKAIČIUS(15,2)) ELSE 0 END) AS kovo mėn. .Tipical AS Tipical WHERE Tipinis.AccountKt = &AccountKt IR tipiškas.Laikotarpis TARP &Laikotarpio pradžia IR &LaikotarpisEnGROUP BY SUBSTRING(Tipiškas. Įrašytojas. Pagal pavadinimą, 1, 6), SUBSTRING(Tipinis.Regitras.Pagal pavadinimą, 8, 11), Tipinis.Regitros UŽSAKYMAS PAGAL skyrių, išlaidų sąskaita

Šios užklausos rezultatas yra toks:

vardas Išlaidų sąskaita skyrius Kovas
Išeinantis mokėjimo nurodymas 00000000319 nuo 2010-03-01 14:42:54 779000 004599 9 000
Išeinantis mokėjimo nurodymas 00000000320 nuo 2010-02-03 12:07:34 779000 004599 4 721,6
Išeinantis mokėjimo nurodymas 00000000203 nuo 2010-03-01 12:28:52 786500 004599 987 614,51
Išeinantis mokėjimo nurodymas 00000000227 nuo 2010-03-03 14:16 val. 786500 004599 400 000
Išeinantis mokėjimo nurodymas 00000000238 nuo 2010-03-05 12:37:57 732000 004600 5 400
Išeinantis mokėjimo nurodymas 00000000197 nuo 2010-01-03 11:53:11 732500 004600 12 100
Išeinantis mokėjimo nurodymas 00000000198 nuo 2010-01-03 11:55:39 732500 004600 12 100
Išeinantis mokėjimo nurodymas 00000000279 nuo 2010-03-26 0:00:00 734100 004600 19 609
Išeinantis mokėjimo nurodymas 00000000287 nuo 2010-03-29 14:15:36 734100 004600 55 300
Išeinantis mokėjimo nurodymas 00000000291 nuo 2010-03-30 11:01:10 734100 004600 18 090
Išeinantis mokėjimo nurodymas 00000000268 nuo 2010-03-18 10:34:25 738000 004600 10 050
Išeinantis mokėjimo nurodymas 00000000276 nuo 2010-03-18 12:20:20 750400 004600 13 060,98
Išeinantis mokėjimo nurodymas 00000000281 nuo 2010-03-29 12:33:46 750400 004600 555 645,41
Išeinantis mokėjimo nurodymas 00000000234 nuo 2010-03-04 12:21:55 754450 004600 24 120
Išeinantis mokėjimo nurodymas 00000000290 nuo 2010-03-30 10:44:39 754450 004600 100 000
Išeinantis mokėjimo nurodymas 00000000240 nuo 2010-09-03 10:53:24 786300 004600 20 800
Išeinantis mokėjimo nurodymas 00000000269 nuo 2010-03-18 10:58:04 786300 004600 61 012
Išeinantis mokėjimo nurodymas 00000000289 nuo 2010-03-30 9:27:14 786300 004600 6 000
Išeinantis mokėjimo nurodymas 00000000223 nuo 2010-03-03 12:13:38 786500 004600 36 000
Išeinantis mokėjimo nurodymas 00000000228 nuo 2010-04-03 9:52:35 786500 004600 378 138,85
Išeinantis mokėjimo nurodymas 00000000229 nuo 2010-03-04 9:57:50 786503 004600 126 117,75
Išeinantis mokėjimo nurodymas 00000000200 nuo 2010-03-01 11:58:06 754422 004762 63 000
Išeinantis mokėjimo nurodymas 00000000286 nuo 2010-03-29 14:10:18 764422 004762 10 000
Išeinantis mokėjimo nurodymas 00000000267 nuo 2010-03-17 0:00:00 764423 004762 464 370
Išeinantis mokėjimo nurodymas 00000000261 nuo 2010-03-15 11:16:28 764522 004762 81 357

Taigi, jei paimsime eilutę 779000/004599, tada SUBSTRING(Typical.Recorder.Respective.Name, 1, 6) paryškins eilutę "779000". SUBSTRING (Tipical.Recorder.Respective.Name, 8, 11) išves „004599“.

Toje pačioje užklausoje naudojama išraiška:

SUMA(PASIRINKIMAS, KAI MĖNESIS(Įprastas.Laikotarpis) = 3 THEN EXPRESS(Įprasta.Suma KAIP SKAIČIUS(15,2)) ELSE 0 END) AS Kovas

Toje pačioje užduotyje reikėjo pridėti naujų stulpelių su mėnesių pavadinimais ir sumomis jiems. Ši išraiška išsprendžia šią problemą. Jei reikia naudoti kitus mėnesius, pavyzdžiui, sausį, pakeiskite išraišką:

SUMMA(PASIRINKITE KAI MĖNESIS(Įprastas.Laikotarpis) = 1 THEN EXPRESS(Tipical.Sum AS SKAIČIUS(15, 2)) ELSE 0 END) AS sausio mėn

Pateiksiu užklausos teksto pavyzdį, kuriame mėnesio laukai (paryškinti) formuojami naudojant ciklą, pradedant nuo kovo iki vasario.

Užklausos tekstas = " | PASIRINKITE |Tipinis.Registr.AS pavadinimas, |SUB-STRING(Tipinis.Registr.Atitinkamas.Pavadinimas, 1, 6) AS išlaidų sąskaita, |SUB-STRING(Tipinis.Regitras.Atitinkamas.Pavadinimas, 8, 11) ) AS departamentas“,; Jei Sch = 1-12 Ciklas Jei Sch< 11 Тогда Мес = Сч + 2; Иначе Мес = Сч - 10; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " |СУММА(ВЫБОР | КОГДА МЕСЯЦ(Типовой.Период) = " + Мес + " | ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2)) | ИНАЧЕ 0 |КОНЕЦ) КАК Поле" + Мес + ?(Сч=12,"",","); КонецЦикла; Užklausos tekstas = užklausos tekstas + " | IŠ | Apskaitos registras." + Pavadinimas -registrabirals + ". Moviationsubaconto (| & nucleus, | & gunsiod,"; stroki kraštinės formos žvalgytojams = "(veikla = tiesa) ir (sąskaita hierarchijoje (& skaičiuojama))"; apžvalgos tekstas = apžvalgos tekstas + kartų strokacija + "|) kaip tipiškas |"; Užklausos tekstas = užklausos tekstas + " | WHERE | Tipiškas.PaskyraCt = &AnalizėPaskyra | IR Tipinis.Laikotarpis TARP &Pradinio laikotarpio IR &Pabaigos periodo |GRUPUOTI PAGAL | SUBSTRING(Tipiškas.Įrašytojas.Ats.Pavadinimas, 1, 6), | SUBSTRING(Tipiškas.Registr. Pavadinimas, 8, 11), | Tipinis.Regitras | UŽSAKYMAS PAGAL | Skyrius, | Išlaidų sąskaita";

Taigi, naudojant aukščiau pateiktą kodą (paryškintu šriftu), rodomos užklausos dalys su mėnesiais. Taigi pridedami nauji stulpeliai su mėnesių pavadinimais ir sumomis jiems.

Yra keletas mechanizmų, kaip dirbti su eilutėmis 1C užklausose. Pirma, galima pridėti eilutes. Antra, galite paimti eilutę iš eilutės. Trečia, stygas galima palyginti, taip pat ir pagal šabloną. Tikriausiai tai viskas, ką galima padaryti su stygomis.

Stygos papildymas

Norėdami pridėti eilučių į užklausą, naudojama operacija „+“. Galite pridėti tik riboto ilgio eilutes.

PASIRINKITE "Vardas: " + Sandorio šalys. Pavadinimas AS 1 stulpelis FROM Katalogas. Sandorio šalys AS Sandorio šalys WHERE Sandorio šalys. Nuoroda = &Nuoroda

Poeilutės funkcija

SUBSTRING(<Строка>, <НачальнаяПозиция>, <Длина>)

Funkcijos Environment() analogas iš objekto modelio. Funkcija Substring() gali būti taikoma eilutės duomenims ir leidžia pasirinkti fragmentą <Строки> , pradedant simbolio numeriu <НачальнаяПозиция> (simboliai eilutėje numeruojami pradedant nuo 1) ir ilgis <Длина> personažai. Funkcijos skaičiavimo rezultatas turi kintamo ilgio eilutės tipą, o ilgis bus laikomas neribotu, jei <Строка> turi neribotą ilgį ir parametrus <Длина> nėra konstanta arba didesnis nei 1024.

Jei eilutės ilgis yra mažesnis nei nurodyta antrajame parametre, funkcija grąžins tuščią eilutę.

Dėmesio! Nerekomenduojama naudoti funkcijos SUBSTRING() norint konvertuoti neriboto ilgio eilutes į riboto ilgio eilutes. Vietoj to geriau naudoti perdavimo operatorių EXPRESS().

Funkcija panaši

Jei turime įsitikinti, kad eilutės atributas atitinka tam tikrus kriterijus, palyginame jį:

PASIRINKITE sandorio šalis. Pavadinimas AS 1 stulpelis FROM Katalogas. Sandorio šalys AS Sandorio šalys WHERE Sandorio šalys. Pavadinimas = "Gazprom"

Bet ką daryti, jei jums reikia subtilesnio palyginimo? Ne tik lygybė ar nelygybė, bet ir panašumas į tam tikrą modelį? Būtent tam buvo sukurta funkcija PANAŠAS.

LIKE – operatorius, skirtas patikrinti, ar eilutė yra panaši į šabloną. LIKE analogas SQL.

Panašus operatorius leidžia palyginti išraiškos, nurodytos jo kairėje, reikšmę su šablono eilute, nurodyta dešinėje. Išraiškos vertė turi būti eilutės tipo. Jei išraiškos reikšmė atitinka šabloną, operatoriaus rezultatas bus TRUE, kitu atveju jis bus FALSE.

Šie simboliai šablono eilutėje yra paslaugų simboliai ir jų reikšmė skiriasi nuo eilutės simbolio:

  • % (procentai): seka, turinti bet kokį skaičių savavališkų simbolių;
  • _ (pabraukimas): vienas savavališkas simbolis;
  • […] (vienas ar daugiau simbolių laužtiniuose skliaustuose): bet koks atskiras simbolis, esantis laužtiniuose skliaustuose. Sąraše gali būti diapazonų, pavyzdžiui, nuo a iki z, reiškiančių savavališką simbolį, įtrauktą į diapazoną, įskaitant diapazono galus;
  • [^...] (laužtiniuose skliaustuose neigimo ženklas, po kurio yra vienas ar daugiau simbolių): bet koks atskiras simbolis, išskyrus tuos, kurie išvardyti po neigimo ženklo.

Bet koks kitas simbolis reiškia save ir nekelia jokios papildomos apkrovos. Jei vieną iš išvardytų simbolių reikia parašyti kaip save patį, tada prieš jį reikia įrašyti<Спецсимвол>. Aš pats<Спецсимвол>(bet koks tinkamas simbolis) apibrėžiamas tame pačiame teiginyje po raktinio žodžio SPECIAL CHARACTER.

1C:Enterprise užklausos kalboje funkcija SUBSTRING() V formatas SUBSTRING(<Исходная строка>, <Начало>, <Длина>) gali būti taikomas eilutės duomenims ir leidžia pasirinkti fragmentą<Исходной строки>, pradedant simbolio numeriu<Начало>(simboliai eilutėje numeruojami pradedant nuo 1) ir ilgis<Длина>personažai. Funkcijos SUBSTRING() skaičiavimo rezultatas turi kintamo ilgio eilutės tipą ir ilgis bus laikomas neribotu, jei<Исходная строка>turi neribotą ilgį ir parametrus<Длина>nėra konstanta arba didesnis nei 1024.

Funkcijos SUBSTRING() apskaičiavimas SQL serveryje:
Darbo kliento-serverio versijoje funkcija SUBSTRING() įgyvendinta naudojant atitinkamo SQL sakinio funkciją SUBSTRING(), perduodamą SQL serverio duomenų bazės serveriui, kuris apskaičiuoja funkcijos SUBSTRING() rezultato tipą. naudojant sudėtingas taisykles, atsižvelgiant į jo parametrų tipą ir vertes, taip pat atsižvelgiant į kontekstą, kuriame jis naudojamas.

Daugeliu atvejų šios taisyklės neturi įtakos 1C:Enterprise užklausos vykdymui, tačiau pasitaiko atvejų, kai užklausai vykdyti būtinas maksimalus SQL serverio apskaičiuotas rezultatų eilutės ilgis. Svarbu nepamiršti, kad kai kuriais atvejais naudojant funkciją SUBSTRING() maksimalus jos rezultato ilgis gali būti lygus maksimaliam riboto ilgio eilutės ilgiui, kuris SQL Server yra 4000 simbolių. Dėl to užklausa gali netikėtai pasibaigti.

Pavyzdžiui, prašymas:
Kodas 1C v 8.x SELECT
PASIRINKIMAS

KITAIP NULL
PABAIGA KAIP pristatymas,
PASIRINKIMAS
WHEN Tipas = &Teisinis AdresasIndividualus
TAD SUBSTRING (pateikimas, 0, 200)
KITAIP NULL
END AS Pristatymas1
NUO
RŪŠIUOTI PAGAL
Spektaklis,
Spektaklis1
Nenormaliai baigiasi pranešimu DBMS klaida:
Microsoft OLE DB teikėjas, skirtas SQL serveriui: Įspėjimas: užklausų procesorius negalėjo sukurti užklausos plano iš optimizavimo priemonės, nes bendras GROUP BY arba ORDER BY sąlygos stulpelių ilgis viršija 8000 baitų.
HRESULT=80040E14, SQLSTATE=42000, gimtoji=8618

Taip nutinka todėl, kad Microsoft SQL Server apskaičiuoja maksimalų eilutės ilgį, gaunamą iš išraiškos:
Kodas 1C v 8.x PASIRINKIMAS
WHEN Tipas = &Teisinis AdresasIndividualus
TAD SUBSTRING (pateikimas, 0, 200)
KITAIP NULL
PABAIGA KAIP pristatymas,
lygus 4000 simbolių. Todėl įrašo, kurį sudaro du tokie laukai, ilgis viršija 8000 baitų, leidžiamų rūšiavimo operacijai.

Dėl aprašyto funkcijos SUBSTRING() vykdymo SQL serveryje ypatumų nerekomenduojama naudoti funkcijos SUBSTRING() konvertuoti neriboto ilgio eilutes į riboto ilgio eilutes. Vietoj to geriau naudoti perdavimo operatorių EXPRESS(). Visų pirma, aukščiau pateiktas pavyzdys gali būti perrašytas taip:
Kodas 1C v 8.x SELECT
PASIRINKIMAS
WHEN Tipas = &Teisinis AdresasIndividualus
KITAIP NULL
PABAIGA KAIP pristatymas,
PASIRINKIMAS
WHEN Tipas = &Teisinis AdresasIndividualus
THEN EXPRESS (pateikimas kaip eilutė (200))
KITAIP NULL
END AS Pristatymas1
NUO
Informacijos registras Kontaktinė informacija KAIP Kontaktinė informacija
RŪŠIUOTI PAGAL
Spektaklis,
Spektaklis1

1C 8 užklausos kalba yra supaprastintas gerai žinomos „struktūrinės programavimo kalbos“ (kaip ji dažniau vadinama SQL) analogas. Tačiau 1C jis naudojamas tik duomenims skaityti; objekto duomenų modelis naudojamas duomenims pakeisti.

Kitas įdomus skirtumas yra rusiška sintaksė. Nors iš tikrųjų galite naudoti anglų kalbos konstrukcijas.

Prašymo pavyzdys:

PASIRINKTI
Bankai.Vardas,
Bankai. CorrAccount
NUO
Katalogas.Bankai KAIP Bankai

Ši užklausa leis mums matyti informaciją apie visų duomenų bazėje esančių bankų pavadinimus ir korespondentinę sąskaitą.

Užklausos kalba yra paprasčiausias ir efektyviausias būdas gauti informaciją. Kaip matyti iš aukščiau pateikto pavyzdžio, užklausos kalboje turite naudoti metaduomenų pavadinimus (tai yra sistemos objektų, sudarančių konfigūraciją, sąrašas, t. y. katalogai, dokumentai, registrai ir kt.).

Užklausos kalbos konstrukcijų aprašymas

Užklausos struktūra

Norint gauti duomenis, pakanka naudoti „SELECT“ ir „FROM“ konstrukcijas. Paprasčiausias prašymas atrodo taip:

SELECT * FROM Katalogai. Nomenklatūra

Kur „*“ reiškia visų lentelės laukelių pasirinkimą, o Directories.Nomenclature – lentelės pavadinimą duomenų bazėje.

Pažvelkime į sudėtingesnį ir bendresnį pavyzdį:

PASIRINKTI
<ИмяПоля1>KAIP<ПредставлениеПоля1>,
Suma(<ИмяПоля2>) KAIP<ПредставлениеПоля2>
NUO
<ИмяТаблицы1>KAIP<ПредставлениеТаблицы1>
<ТипСоединения>JUNGINIS<ИмяТаблицы2>KAIP<ПредставлениеТаблицы2>
BY<УсловиеСоединениеТаблиц>

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

GRUPUOTI PAGAL
<ИмяПоля1>

RŪŠIUOTI PAGAL
<ИмяПоля1>

REZULTATAI
<ИмяПоля2>
BY
<ИмяПоля1>

Šioje užklausoje iš lentelių „LentelėsPavadinimas1“ ir „LentelėsPavadinimas“ pasirenkame laukų „LaukoPavadinimas1“ ir „LaukoPavadinimas1“ duomenis, laukams „HOW“ operatoriumi priskiriame sinonimus ir sujungiame naudojant tam tikrą sąlygą „TableConnectionCondition“. “.

Iš gautų duomenų atrenkame tik sąlygą atitinkančius duomenis iš „KUR“ „Duomenų atrankos sąlyga“ Toliau užklausą sugrupuojame pagal lauką „Lauko pavadinimas1“, sumuojant „Lauko pavadinimas2“ Sudarome lauko sumas. „Field Name1“ ir galutinis laukas „Field Name2“.

Paskutinis veiksmas yra surūšiuoti užklausą naudojant ORDER BY konstrukciją.

Bendrieji dizainai

Pažvelkime į bendrąsias 1C 8.2 užklausų kalbos struktūras.

PIRMASn

Naudodami šį operatorių galite gauti n pirmųjų įrašų skaičių. Įrašų eiliškumas nustatomas pagal eiliškumą užklausoje.

PASIRINKITE PIRMUS 100
Bankai.Vardas,
Bankai Kodas AS BIC
NUO
Katalogas.Bankai KAIP Bankai
RŪŠIUOTI PAGAL
Bankai.Vardas

Užklausa gaus pirmuosius 100 „Bankų“ katalogo įrašų, surūšiuotų abėcėlės tvarka.

LEIDŽIAMAS

Ši konstrukcija yra svarbi dirbant su mechanizmu. Mechanizmo esmė yra apriboti konkrečių duomenų bazės lentelės įrašų skaitymą (ir kitus veiksmus) vartotojams, o ne visai lentelei.

Jei vartotojas bandys naudoti užklausą, kad perskaitytų jam nepasiekiamus įrašus, jis gaus klaidos pranešimą. Norėdami to išvengti, turėtumėte naudoti „LEIDŽIAMA“ konstrukciją, t. y. užklausa skaitys tik jai leidžiamus įrašus.

PASIRINKTI LEIDŽIAMĄ
Papildomos informacijos saugykla Nuoroda
NUO
Katalogas. Papildomos informacijos saugykla

ĮVAIRUS

Naudodami „DIFFERENT“ neleisite pasikartojančioms eilutėms patekti į 1C užklausos rezultatą. Dubliavimas reiškia, kad visi užklausos laukai atitinka.

PASIRINKITE PIRMUS 100
Bankai.Vardas,
Bankai Kodas AS BIC
NUO
Katalogas.Bankai KAIP Bankai

EmptyTable

Ši konstrukcija labai retai naudojama užklausoms derinti. Kai prisijungiate, vienoje iš lentelių gali tekti nurodyti tuščią įdėtą lentelę. Operatorius „EmptyTable“ yra tinkamas šiam tikslui.

Pavyzdys iš 1C 8 pagalbos:

PASIRINKTI Nuoroda.Numeris, TUŠČIA LENTELĖ.(Nr., Prekė, Kiekis) AS Sudėtis
IŠ Dokumentas.Išlaidų sąskaita faktūra
VISKĄ DERINTI
PASIRINKITE Nuorodos numerį, turinį. (Eilutės numeris, produktas, kiekis)
IŠ dokumentas. sąskaita faktūra Dokumentas. sąskaita faktūra. sudėtis.*

ISNULL

Labai naudinga funkcija, leidžianti išvengti daugybės klaidų. YesNULL() leidžia pakeisti NULL reikšmę norima. Labai dažnai naudojamas tikrinant, ar sujungtose lentelėse yra reikšmės, pavyzdžiui:

PASIRINKTI
Nomenklatūros nuoroda, nuoroda
IsNULL(Item Remaining.Kiekis,0) AS Likęs kiekis
NUO


Galima naudoti ir kitais būdais. Pavyzdžiui, jei kiekvienoje eilutėje nežinoma, kurioje lentelėje yra reikšmė:

ISNULL(sąskaitos faktūros gavimo data, sąskaitos išdavimo. data)

HOW yra operatorius, leidžiantis priskirti pavadinimą (sinonimą) lentelei ar laukui. Naudojimo pavyzdį matėme aukščiau.

Šios konstrukcijos yra labai panašios – leidžia gauti norimos reikšmės stygos atvaizdavimą. Vienintelis skirtumas yra tas, kad REPRESENTATION konvertuoja bet kokias reikšmes į eilutės tipą, o REPRESENTATIONREF konvertuoja tik nuorodas. REFERENCE RERESENTATION rekomenduojama naudoti duomenų kompozicijos sistemos užklausose optimizavimui, nebent, žinoma, atrankose planuojama naudoti atskaitos duomenų lauką.

PASIRINKTI
View(Link), //string, pvz., „Išankstinė ataskaita Nr. 123, 2015-10-10
View(DeletionMark) AS DeleteMarkText, //string, "Taip" arba "Ne"
ViewReferences(DeletionMark) AS DeleteMarkBoolean //bulio reikšmė, teisinga arba klaidinga
NUO
Dokumentas.Išankstinė ataskaita

EXPRESS

„Express“ leidžia konvertuoti lauko reikšmes į norimą duomenų tipą. Galite konvertuoti reikšmę į primityvų tipą arba nuorodos tipą.

Nuorodos tipo ekspresas naudojamas apriboti reikalaujamus duomenų tipus sudėtingo tipo laukuose, dažnai naudojamas sistemos našumui optimizuoti. Pavyzdys:

EXPRESS(Table Cost.Subconto1 AS Directory.Cost Items).Mokesčių apskaitos mokesčių veiklos tipas

Primityviųjų tipų atveju ši funkcija dažnai naudojama simbolių skaičiui apriboti neriboto ilgio laukuose (su tokiais laukais negalima lyginti). Norėdami išvengti klaidos " Netinkami palyginimo operacijos parametrai. Jūs negalite palyginti laukų
neribotas ilgis ir nesuderinamų tipų laukai
“, tokius laukus turite išreikšti taip:

EXPRESS (komentuoti kaip eilutė (150))

SKIRTUMAS

Gaukite 267 vaizdo įrašų pamokas 1C nemokamai:

IS NULL naudojimo 1C užklausoje pavyzdys:

RINKTIS IŠ
Nuorod
KAIRIS RYŠYS RegistruokisSandėliuose.Produktai.Likęs kaip produktas Likęs
Programinės įrangos nomenklatūraRef.Link = Parduotų prekių komitetaiRemains.Nomenclature
KUR NĖRA LIKUSIŲ Prekių. Likusių prekių kiekis yra NULIS

Duomenų tipas užklausoje gali būti nustatytas naudojant TYPE() ir VALUETYPE() funkcijas arba naudojant loginį REFERENCE operatorių. Abi funkcijos yra panašios.

Iš anksto nustatytos reikšmės

Be perduodamų parametrų naudojimo užklausose 1C užklausų kalba, galite naudoti iš anksto nustatytas reikšmes arba . Pavyzdžiui, pervedimai, iš anksto nustatyti katalogai, sąskaitų planai ir tt Tam naudojama konstrukcija „Value()“.

Naudojimo pavyzdys:

WHERE Nomenklatūra. Nomenklatūros tipas = vertė (Katalogas. Nomenklatūros tipai. Produktas)

WHERE sandorio šalys.Kontaktinės informacijos tipas = vertė (Sąrašas. Kontaktinės informacijos tipai. Telefonas)

WHERE Sąskaitų likučiai. Apskaitos sąskaita = vertė (sąskaitų planas. Pelnas.PelnasNuostoliai)

Jungtys

Yra 4 jungčių tipai: KAIRĖ, TEISINGAI, PILNAS, VIDINIS.

KAIRĖS ir DEŠINĖS PRIJUNGIMAS

Sujungimai naudojami susieti dvi lenteles pagal konkrečias sąlygas. Funkcija kada KAIRĖ PRISIJUNGTI yra tai, kad imame visą pirmąją nurodytą lentelę ir sąlyginai susiejame antrąją lentelę. Antrosios lentelės laukai, kurių negalima susieti su sąlyga, užpildomi reikšme NULL.

Pavyzdžiui:

Ji grąžins visą Sandorio šalių lentelę ir užpildys lauką „Bankas“ tik tose vietose, kur bus įvykdyta sąlyga „Sąlygos šalys.Pavadinimas = Bankai.Pavadinimas“. Jei sąlyga neįvykdyta, laukas Bankas bus nustatytas į NULL.

RIGHT JOIN 1C kalba absoliučiai panašus KAIRĖS jungtis, išskyrus vieną skirtumą – in PRIJUNGIMO TEISĖ„Pagrindinė“ lentelė yra antra, o ne pirmoji.

PILNAS PRIJUNGIMAS

PILNAS PRIJUNGIMAS skiriasi nuo kairės ir dešinės tuo, kad rodo visus įrašus iš dviejų lentelių ir jungia tik tuos, kuriuos gali sujungti pagal sąlygą.

Pavyzdžiui:

NUO

PILNAS PRIJUNGIMAS
Katalogas.Bankai KAIP Bankai

BY

Užklausos kalba abi lenteles pateiks visiškai tik tuo atveju, jei bus įvykdyta sąlyga prisijungti prie įrašų. Skirtingai nuo kairiojo / dešiniojo sujungimo, NULL gali būti rodomas dviejuose laukuose.

VIDINIS PRISIJUNGIMAS

VIDINIS PRISIJUNGIMAS skiriasi nuo pilno tuo, kad rodo tik tuos įrašus, kuriuos būtų galima prijungti pagal tam tikrą sąlygą.

Pavyzdžiui:

NUO
Katalogas Sandorio šalys AS Klientai

VIDINIS PRISIJUNGIMAS
Katalogas.Bankai KAIP Bankai

BY
Klientai.Vardas = Bankai.Vardas

Ši užklausa pateiks tik tas eilutes, kuriose bankas ir sandorio šalis turi tą patį pavadinimą.

Asociacijos

Konstrukcijos JOIN ir JOIN ALL sujungia du rezultatus į vieną. Tie. dviejų atlikimo rezultatas bus „sujungtas“ į vieną, bendrą.

Tai yra, sistema veikia lygiai taip pat, kaip ir įprastos, tik laikinajai lentelei.

Kaip naudoti INDEX BY

Tačiau reikėtų atsižvelgti į vieną dalyką. Indekso kūrimas laikinoje lentelėje taip pat užtrunka. Todėl patartina naudoti „ ” konstrukciją tik tuo atveju, jei tiksliai žinoma, kad laikinojoje lentelėje bus daugiau nei 1-2 įrašai. Priešingu atveju poveikis gali būti priešingas – indeksuotų laukų našumas nekompensuoja laiko, kurio reikia indeksui sukurti.

PASIRINKTI
Valiutų kursai Naujausias skerspjūvis Valiuta AS Valiuta,
Valiutų kursai Naujausias skerspjūvis.
PUT valiutų kursai
NUO
Informacija Registras. Valiutų kursai. Paskutinė dalis(& Laikotarpis,) AS Valiutų kursai Paskutinė dalis
INDEKSO PAGAL
Valiuta
;
PASIRINKTI
Kainos Nomenklatūra. Nomenklatūra,
Kainos Nomenklatūros. Kaina,
Kainos Nomenklatūros. Valiuta,
Valiutų kursai. Kursas
NUO
Informacija Registras. Nomenklatūros kainos. Paskutinė dalis (& laikotarpis,
B nomenklatūra (&nomenklatūra) IR PriceType = &PriceType) AS kainų nomenklatūra
KAIRĖ PRISIJUNGTI Valiutų kursai AS Valiutų kursai
Programinės įrangos kainosNomenklatūros. Valiuta = Valiutų kursai. Valiuta

Grupavimas

1C užklausos kalba leidžia naudoti specialias agregavimo funkcijas grupuojant užklausos rezultatus. Grupavimas taip pat gali būti naudojamas be apibendrinančių funkcijų, siekiant „pašalinti“ pasikartojančius duomenis.

Yra šios funkcijos:

Kiekis, Kiekis, Skirtingų skaičius, Maksimalus, Minimalus, Vidutinis.

1 pavyzdys:

PASIRINKTI
Prekių ir paslaugų pardavimas Prekės. Nomenklatūra,
SUM (Prekių pardavimasPaslaugųPrekės.Kiekis) AS Kiekis,
SUM (Prekių pardavimasPaslaugųPrekės.Suma) AS Suma
NUO

GRUPUOTI PAGAL
Prekių ir paslaugų pardavimas Prekės Nomenklatūra

Užklausa gauna visas eilutes su prekėmis ir jas apibendrina pagal kiekį ir sumas pagal prekes.

2 pavyzdys

PASIRINKTI
Bankai.Kodas,
KIEKIS (SKIRTINGI bankai.Nuoroda) KAIP dublikatų skaičius
NUO
Katalogas.Bankai KAIP Bankai
GRUPUOTI PAGAL
Bankai.Kodas

Šiame pavyzdyje bus rodomas BIC sąrašas kataloge „Bankai“ ir parodyta, kiek kiekvienam iš jų yra dublikatų.

Rezultatai

Rezultatai yra būdas gauti duomenis iš sistemos su hierarchine struktūra. Suvestinės funkcijos gali būti naudojamos suvestinės laukams, kaip ir grupavimui.

Vienas iš populiariausių rezultatų panaudojimo praktikoje būdų – prekių partijų nurašymas.

PASIRINKTI




NUO
Dokumentas. Prekių ir paslaugų pardavimas Prekės KAIP parduoti prekes ir paslaugas Prekės
RŪŠIUOTI PAGAL

REZULTATAI
SUM (kiekis),
SUM (Suma)
BY
Nomenklatūra

Užklausos rezultatas bus toks hierarchinis:

Bendrieji rezultatai

Jei reikia gauti visų „sumų“ sumas, naudokite operatorių „GENERAL“.

PASIRINKTI
Prekių ir paslaugų pardavimas Prekės. Nomenklatūra AS Nomenklatūra,
Prekių ir paslaugų prekių pardavimas. Nuoroda AS dokumentas,
Prekių ir paslaugų pardavimas Prekės Kiekis AS Kiekis,
Prekių ir paslaugų pardavimas Prekės Suma AS Suma
NUO
Dokumentas. Prekių ir paslaugų pardavimas Prekės KAIP parduoti prekes ir paslaugas Prekės
RŪŠIUOTI PAGAL
Prekių ir paslaugų pardavimas Prekės Nuoroda Data
REZULTATAI
SUM (kiekis),
SUM (Suma)
BY
YRA BENDRI,
Nomenklatūra

Vykdydami užklausą gauname tokį rezultatą:

Kuriame 1 grupavimo lygyje yra visų būtinų laukų apibendrinimas.

Sutvarkymas

Operatorius ORDER BY naudojamas rūšiuoti užklausos rezultatą.

Primityvių tipų (eilutės, skaičiaus, loginio) rūšiavimas vyksta pagal įprastas taisykles. Nuorodos tipo laukuose rūšiavimas atliekamas pagal vidinį nuorodos atvaizdą (unikalus identifikatorius), o ne pagal kodą ar nuorodos atvaizdavimą.

PASIRINKTI

NUO
Katalogas.Nomenklatūra AS Nomenklatūra
RŪŠIUOTI PAGAL
vardas

Užklausoje bus rodomas vardų sąrašas nomenklatūros kataloge, surūšiuotas abėcėlės tvarka.

Automatinis užsakymas

Užklausos be rūšiavimo rezultatas yra chaotiškai pateiktas eilučių rinkinys. 1C platformos kūrėjai negarantuoja, kad vykdant identiškas užklausas eilutės bus išvestos ta pačia seka.

Jei reikia rodyti lentelės įrašus pastovia tvarka, turite naudoti automatinio užsakymo konstrukciją.

PASIRINKTI
Nomenklatūra.Pavadinimas AS Pavadinimas
NUO
Katalogas.Nomenklatūra AS Nomenklatūra
AUTOMATINIS UŽSAKYMAS

Virtualūs stalai

Virtualios lentelės 1C yra unikali 1C užklausų kalbos savybė, kurios nėra kitose panašiose sintaksėse. Virtuali lentelė yra greitas būdas gauti profilio informaciją iš registrų.

Kiekvienas registro tipas turi savo virtualių lentelių rinkinį, kuris gali skirtis priklausomai nuo registro nustatymų.

  • iškirpti pirmąjį;
  • iškirpti iš pastarųjų.
  • likučiai;
  • revoliucijos;
  • likučiai ir apyvarta.
  • judesiai iš subkonto;
  • revoliucijos;
  • greitis Dt Kt;
  • likučiai;
  • likučiai ir apyvarta
  • subconto.
  • bazė;
  • grafiko duomenys;
  • faktinis galiojimo laikas.

Sprendimo kūrėjui duomenys paimami iš vienos (virtualios) lentelės, tačiau iš tikrųjų 1C platforma juos paima iš daugelio lentelių, transformuodama jas į reikiamą formą.

PASIRINKTI
Produktai sandėliuose Likučiai ir apyvarta. Nomenklatūra,
ProduktaiSandėliuoseLikęsIrApyvarta.KiekisPradinisLikęs,
ProduktaiSandėliuose LikučiaiIrApyvarta.KiekisApyvarta,
Prekės Sandėliuose LikučiaiIr apyvarta.Gaunamas kiekis,
Prekės Sandėliuose LikučiaiIr apyvarta.KiekisSunaudojimas,
ProduktaiSandėliuoseLikučiaiIrApyvarta.KiekisGalutinisLikusis
NUO
RegistruotiSandėliuose esančios prekės.LikučiaiIrApyvarta AS PrekėsSandėliuoseLikučiaiIApyvarta

Ši užklausa leidžia greitai gauti didelį duomenų kiekį.

Virtualios lentelės parinktys

Labai svarbus darbo su virtualiosiomis lentelėmis aspektas yra parametrų naudojimas. Virtualios lentelės parametrai yra specializuoti pasirinkimo ir konfigūravimo parametrai.

Laikoma, kad tokioms lentelėms nekorektiška naudoti pasirinkimą „KUR“ konstrukcijoje. Be to, kad užklausa tampa neoptimali, galima gauti neteisingus duomenis.

Šių parametrų naudojimo pavyzdys:

Kaupimų registras. Prekės sandėliuose. Likučiai ir apyvartos (ir laikotarpio pradžia, ir laikotarpio pabaiga, mėnuo, laikotarpio judėjimai ir ribos, nomenklatūra = & reikalinga nomenklatūra)

Virtualių lentelių algoritmas

Pavyzdžiui, dažniausiai naudojama virtuali „Likučių“ tipo lentelė saugo duomenis iš dviejų fizinių lentelių – likučių ir judesių.

Naudojant virtualią lentelę, sistema atlieka šias manipuliacijas:

  1. Artimiausią apskaičiuotą vertę pagal datą ir matavimus gauname sumų lentelėje.
  2. Sumą iš judėjimo lentelės „pridedame“ ​​prie sumos lentelės sumos.


Tokie paprasti veiksmai gali žymiai pagerinti visos sistemos veikimą.

Užklausų kūrimo priemonės naudojimas

Užklausų kūrimo priemonė– „1C Enterprise“ sistemoje įmontuotas įrankis, kuris labai palengvina duomenų bazių užklausų kūrimą.

Užklausų kūrimo priemonė turi gana paprastą, intuityvią sąsają. Nepaisant to, pažvelkime į užklausos konstruktoriaus naudojimą išsamiau.

Užklausos teksto konstruktorius paleidžiamas iš kontekstinio meniu (dešiniuoju pelės mygtuku) norimoje programos kodo vietoje.

1C užklausos konstruktoriaus aprašymas

Pažvelkime į kiekvieną dizainerio skirtuką išsamiau. Išimtis yra skirtukas „Kūrėjas“, kuris yra kitos diskusijos tema.

Skirtukas Lentelės ir laukai

Šiame skirtuke nurodomas duomenų šaltinis ir laukai, kurie turi būti rodomi ataskaitoje. Iš esmės čia aprašytos konstrukcijos SELECT.. FROM.

Šaltinis gali būti fizinės duomenų bazės lentelė, virtualaus registro lentelė, laikinos lentelės, įdėtos užklausos ir kt.

Virtualiųjų lentelių kontekstiniame meniu galite nustatyti virtualios lentelės parametrus:

Ryšių skirtukas

Skirtukas naudojamas kelių lentelių jungtims apibūdinti ir sukuriamos konstrukcijos su žodžiu CONNECTION.

Grupavimo skirtukas

Šiame skirtuke sistema leidžia sugrupuoti ir apibendrinti reikiamus lentelės rezultato laukus. Aprašomas konstrukcijų GRUPĖ PAGAL, ​​SUMMA, MINIMALUMAS, VIDUTINIS, MAKSIMALAS, KIEKIS, SKIRTINGŲ SKAIČIUS, panaudojimas.

Sąlygų skirtukas

Atsakingas už viską, kas pateikiama užklausos tekste po WHERE konstrukcijos, t.y. už visas gautų duomenų keliamas sąlygas.

Išplėstinis skirtukas

Skirtukas Papildomai gausu įvairiausių parametrų, kurie yra labai svarbūs. Pažvelkime į kiekvieną iš savybių.

Grupavimas Įrašų pasirinkimas:

  • Pirmiausia N– parametras, kuris į užklausą grąžina tik N įrašų (FIRST operatorius)
  • Jokių dublikatų– užtikrina gaunamų įrašų unikalumą (KITOKIS operatorius)
  • Leidžiama– leidžia pasirinkti tik tuos įrašus, į kuriuos sistema leidžia pasirinkti atsižvelgdama (Leidžiama konstrukcija)

Grupavimas Prašymo tipas nustato, kokio tipo užklausa bus: duomenų gavimas, laikinos lentelės sukūrimas ar laikinosios lentelės sunaikinimas.

Apačioje yra vėliava Užrakinkite gautus duomenis, kad galėtumėte juos vėliau pakeisti. Tai leidžia įjungti galimybę nustatyti duomenų užrakinimą, kuris užtikrina duomenų saugumą nuo jų nuskaitymo iki pakeitimo (aktualu tik Automatinio užrakinimo režimui, dizainas FOR CHANGE).

Prisijungimų / slapyvardžių skirtukas

Šiame užklausų kūrėjo skirtuke galite nustatyti galimybę sujungti skirtingas lenteles ir slapyvardžius (konstrukciją KAIP). Lentelės nurodytos kairėje pusėje. Jei nustatysite vėliavėles priešais lentelę, bus naudojama UNITE konstrukcija, kitu atveju - UNITE ALL (skirtumai tarp dviejų metodų). Dešinėje pusėje nurodomas skirtingų lentelių laukų atitikimas, jei atitikimas nenurodytas, užklausa grąžins NULL.

Užsakymo skirtukas

Tai nurodo, kokia tvarka reikšmės rūšiuojamos (ORDER BY) - mažėjančia (DESC) arba didėjančia (ASC) tvarka.

Taip pat yra įdomi vėliava - Automatinis užsakymas(užklausoje - AUTOMATINIS UŽSAKYMAS). Pagal numatytuosius nustatymus 1C sistema rodo duomenis „chaotiška“ tvarka. Jei nustatysite šią vėliavėlę, sistema rūšiuos duomenis pagal vidinius duomenis.

Užklausų paketo skirtukas

Užklausų kūrėjo skirtuke galite sukurti naujų ir naudoti juos kaip naršymą. Prašymo tekste paketai atskiriami simboliu „;“ (kableliu).

Mygtukas „Užklausa“ užklausų kūrimo priemonėje

Apatiniame kairiajame užklausos dizainerio kampe yra mygtukas Prašymas, su kuriuo bet kuriuo metu galite peržiūrėti užklausos tekstą:

Šiame lange galite koreguoti užklausą ir ją vykdyti.


Užklausų konsolės naudojimas

Užklausų konsolė yra paprastas ir patogus būdas derinti sudėtingas užklausas ir greitai gauti informaciją. Šiame straipsnyje pabandysiu aprašyti, kaip naudoti užklausų pultą, ir pateikti nuorodą, kaip atsisiųsti užklausų pultą.

Pažvelkime į šį įrankį atidžiau.

Parsisiųsti 1c užklausų konsolę

Visų pirma, norint pradėti dirbti su užklausų konsole, reikia ją iš kažkur atsisiųsti. Gydymas paprastai skirstomas į du tipus – kontroliuojamas formas ir įprastines (arba kartais jos vadinamos 8.1 ir 8.2/8.3).

Šiuos du vaizdus bandžiau sujungti viename apdorojime – norima forma atsidaro norimu darbo režimu (valdomu režimu konsolė veikia tik storu režimu).

1C užklausų konsolės aprašymas

Pradėkime žiūrėti užklausų konsolę su pagrindinio apdorojimo skydelio aprašymu:

Užklausos konsolės antraštėje milisekundžių tikslumu galite matyti paskutinės užklausos vykdymo laiką, tai leidžia palyginti skirtingus dizainus našumo požiūriu.

Pirmoji komandų juostos mygtukų grupė yra atsakinga už dabartinių užklausų išsaugojimą išoriniame faile. Tai labai patogu; visada galite grįžti prie sudėtingos užklausos rašymo. Arba, pavyzdžiui, išsaugokite tipiškų tam tikro dizaino pavyzdžių sąrašą.

Kairėje esančiame lauke „Užklausa“ galite sukurti naujas užklausas ir išsaugoti jas medžio struktūroje. Antroji mygtukų grupė yra atsakinga už užklausų sąrašo tvarkymą. Naudodami jį galite kurti, kopijuoti, ištrinti, perkelti užklausą.

  • Vykdytiprašymas– paprastas vykdymas ir rezultatai
  • Vykdyti paketą– leidžia peržiūrėti visas tarpines užklausas užklausų pakete
  • Laikinų lentelių peržiūra– leidžia lentelėje matyti rezultatus, kuriuos pateikia laikinos užklausos

Prašymo parametrai:

Leidžia nustatyti esamus užklausos parametrus.

Užklausos parametrų lange įdomūs šie dalykai:

  • Mygtukas Gaukite iš prašymo automatiškai suranda visus parametrus užklausoje kūrėjo patogumui.
  • Vėliava Bendri parametrai visoms užklausoms– įdiegus, jo apdorojimas neišvalo parametrų pereinant nuo užklausos prie užklausos bendrame užklausų sąraše.

Nustatykite parametrą su reikšmių sąrašu Tai labai paprasta, tereikia renkantis parametro reikšmę, spustelėjus reikšmės išvalymo mygtuką (kryžius), sistema paragins pasirinkti duomenų tipą, kur reikia pasirinkti „Verčių sąrašas“:

Taip pat viršutiniame skydelyje yra mygtukas, skirtas iškviesti užklausų konsolės nustatymus:

Čia galite nurodyti automatinio užklausų įrašymo ir užklausos vykdymo parametrus.

Užklausos tekstas įvedamas į konsolės užklausos lauką. Tai galima padaryti tiesiog įvedus užklausos testą arba iškvietus specialų įrankį – užklausų dizainerį.

1C 8 užklausų dizaineris iškviečiamas iš kontekstinio meniu (dešiniuoju pelės mygtuku), kai spustelėsite įvesties lauką:

Taip pat šiame meniu yra tokių naudingų funkcijų, kaip užklausos išvalymas arba eilučių pertraukų (“|”) pridėjimas arba užklausos kodo gavimas šia patogia forma:

Užklausa = nauja užklausa;
Užklausa.Tekstas = ”
|PASIRINKITE
| Valiutos.Nuoroda
|NUO
| Katalogas.Currencies AS Valiutos“;
RequestResult = Request.Execute();

Apatiniame užklausos pulto lauke rodomas užklausos rezultato laukas, todėl buvo sukurtas šis apdorojimas:



Be to, užklausų konsolė, be sąrašo, gali rodyti duomenis medžio pavidalu - užklausoms, kuriose yra sumos.

Užklausos optimizavimas

Vienas iš svarbiausių punktų didinant 1C įmonės 8.3 produktyvumą yra optimizavimasprašymus. Šis punktas taip pat labai svarbus, kai išlaikęs sertifikatą. Toliau kalbėsime apie tipines neoptimalaus užklausos našumo priežastis ir optimizavimo metodus.

Pasirinkimai virtualioje lentelėje naudojant WHERE konstrukciją

Virtualios lentelės detalėms filtrus taikyti būtina tik per VT parametrus. Jokiu būdu nenaudokite WHERE konstrukcijos pasirinkimui virtualioje lentelėje; tai rimta klaida optimizavimo požiūriu. Atrankos naudojant WHERE atveju iš tikrųjų sistema gaus VISUS įrašus ir tik tada atrinks reikiamus.

TEISINGAI:

PASIRINKTI

NUO
Kaupimų registras. Tarpusavio atsiskaitymai su organizacijų dalyviais. Likučiai (
,
Organizacija = &Organization
IR Asmuo = &Individualus) KAIP balansuoja tarpusavio atsiskaitymai su organizacijų dalyviais

NETEISINGAI:

PASIRINKTI
Tarpusavio atsiskaitymai su organizacijų dalyviais Likučiai Sumos likutis
NUO
Kaupimų registras Tarpusavio atsiskaitymai su organizacijų dalyviais Likutai (,) KAIP Tarpusavio atsiskaitymai su organizacijų dalyviais likučiai
KUR
Abipusiai atsiskaitymai su Organizacijų Dalyviais Balansai Organizacija = & Organizacija
IR Tarpusavio atsiskaitymai su organizacijų likučių dalyviais. Asmuo = &Individualus

Sudėtingo tipo lauko vertės gavimas naudojant tašką

Gaudama kompleksinio tipo duomenis užklausoje per tašką, sistema kairiuoju sujungimu jungiasi tiksliai tiek lentelių, kiek galima tipų kompleksinio tipo lauke.

Pavyzdžiui, optimizavimui labai nepageidautina prieiti prie registro įrašo lauko – registratorius. Registratorius turi sudėtinį duomenų tipą, tarp kurių yra visi galimi dokumentų tipai, galintys įrašyti duomenis į registrą.

NETEISINGAI:

PASIRINKTI
Įrašo rinkinys. Įrašymo data,
RecordSet.Quantity
NUO
RegistruotisAccumulations.ProductsOrganizations AS SetRecords

Tai yra, iš tikrųjų tokia užklausa pasieks ne vieną lentelę, o 22 duomenų bazių lenteles (šiame registre yra 21 registratoriaus tipas).

DEŠINĖJE:

PASIRINKTI
PASIRINKIMAS
WHEN ProductsOrg.Registrar LINK Dokumentas. Produktų ir paslaugų pardavimas
THEN EXPRESS(ProduktaiOrganizacija.Registruoti AS dokumentą.Prekių pardavimasPaslaugų).Data
WHEN GoodsOrg.Registrar LINK Dokumentas.Prekių paslaugų gavimas
THEN EXPRESS(GoodsOrg.Registrar AS Document.Ceipt of GoodsServices).Data
PABAIGA DATA,
ProduktaiOrg.Kiekis
NUO
RegistruotisAccumulations.ProductsOrganizations AS ProductsOrganization

Arba antras variantas – tokią informaciją įtraukti į detales, pavyzdžiui, mūsų atveju, pridedant datą.

DEŠINĖJE:

PASIRINKTI
ProduktaiOrganizacijos.Data,
ProduktaiOrganizacijos.Kiekis
NUO
Kaupimų registras Organizacijų prekės AS Organizacijų prekės

Papildomos užklausos sujungimo sąlygomis

Norint optimizuoti, nepriimtina naudoti antrines užklausas sujungimo sąlygomis; tai žymiai sulėtina užklausą. Tokiais atvejais patartina naudoti VT. Norėdami prisijungti, turite naudoti tik metaduomenis ir VT objektus, prieš tai juos indeksavus pagal ryšio laukus.

NETEISINGAI:

PASIRINKTI…

LEFT JOIN (
PASIRINKITE IŠ RegistroInformacija.Ribos
KUR…
GRUPUOTI PAGAL...
) PAGAL…

DEŠINĖJE:

PASIRINKTI…
Įdėkite ribas
IŠ informacijos Registras.Limitai
KUR…
GRUPUOTI PAGAL...
RODYKLĖ PAGAL...;

PASIRINKTI…
IŠ dokumento Prekių ir paslaugų pardavimas
LEFT JOIN Limits
PAGAL …;

Įrašų sujungimas su virtualiomis lentelėmis

Būna situacijų, kai virtualią lentelę jungiant prie kitų, sistema neveikia optimaliai. Tokiu atveju, norėdami optimizuoti užklausos našumą, galite pabandyti įdėti virtualią lentelę į laikiną lentelę, nepamirštant indeksuoti sujungtų laukų laikinojoje lentelės užklausoje. Taip yra dėl to, kad VT dažnai yra keliose fizinėse DBVS lentelėse; dėl to jiems pasirinkti sudaroma antrinė užklausa, o problema pasirodo panaši į ankstesnį tašką.

Pasirinkimų naudojimas pagal neindeksuotus laukus

Viena iš dažniausiai pasitaikančių klaidų rašant užklausas yra sąlygų naudojimas neindeksuotiems laukams, tai prieštarauja užklausos optimizavimo taisyklės. DBVS negali optimaliai vykdyti užklausos, jei užklausa apima neindeksuojamų laukų pasirinkimą. Jei naudojate laikiną lentelę, taip pat turite indeksuoti ryšio laukus.

Kiekvienai sąlygai turi būti tinkamas indeksas. Tinkamas indeksas yra tas, kuris atitinka šiuos reikalavimus:

  1. Rodyklėje yra visi sąlygose nurodyti laukai.
  2. Šie laukai yra pačioje indekso pradžioje.
  3. Šie pasirinkimai yra nuoseklūs, ty reikšmės, kurios nėra įtrauktos į užklausos sąlygą, nėra tarp jų „įspraustos“.

Jei DBVS nepasirinks teisingų indeksų, bus nuskaityta visa lentelė – tai labai neigiamai paveiks našumą ir gali užsitęsti viso įrašų rinkinio blokavimu.

Naudojant loginį ARBA sąlygomis

Tai viskas, šiame straipsnyje aptariami pagrindiniai užklausų optimizavimo aspektai, kuriuos turėtų žinoti kiekvienas 1C ekspertas.

Labai naudingas nemokamas vaizdo įrašų kursas apie užklausų kūrimą ir optimizavimą, Labai rekomenduoju pradedantiesiems ir ne tik!

Dabar pažiūrėkime į likusius.

Funkcijos, skirtos darbui su eilutėmis 1C užklausose

Yra keletas funkcijų ir operatorių, skirtų darbui su eilutės duomenimis 1C užklausose.

Pirma, užklausose galima pridėti eilutes. Norėdami tai padaryti, naudokite operatorių „+“:

Prašymas. Tekstas = „PASIRINKTI
" "Eilutė: " " + Šaltinis.Pavadinimas
;

Antra, galite pasirinkti dalį eilutės. Norėdami tai padaryti, naudokite funkciją PAKEITIMAS. Funkcija panaši į įmontuotą 1C kalbą. Jis turi tris parametrus:

  1. Šaltinio eilutė.
  2. Simbolio, kuriuo turėtų prasidėti pasirinkta eilutė, skaičius.
  3. Personažai.

Prašymas. Tekstas = "PASIRINKITE
SUBSTRING("
"Eilutė:" ", 4, 3) kaip rezultatas"; // Rezultatas: gerai

Funkcija ISNULL

NULL yra specialus duomenų tipas 1C:Enterprise platformoje. Tai taip pat yra vienintelė galima tokio tipo vertė. NULL užklausose gali atsirasti keliais atvejais: jungiant užklausos šaltinius, jei vienoje iš lentelių nerasta atitinkama reikšmė; kai pasiekiami neegzistuojančio objekto duomenys; jei užklausos laukų sąraše buvo nurodytas NULL (pvz., derinant atrankos rezultatus iš kelių lentelių) ir pan.

Kadangi NULL nėra nei nulis, nei tuščia eilutė, nei net reikšmė Neapibrėžtas, dažnai naudinga jį pakeisti kokiu nors naudingesniu duomenų tipu. Tam ir skirta funkcija. ISNULL.

Jis turi du parametrus:

  1. Tikrinama vertė.
  2. Reikšmė, kuria pirmasis parametras pakeičiamas, jei pasirodo, kad jis yra NULL.

Prašymas. Tekstas = "PASIRINKITE
ISNULL(Šaltinis.Likutis, 0) AS likutis"
; // Jei užklausos rezultatas yra lauko likutis = NULL,
// tada jis bus pakeistas 0 ir su juo galėsite atlikti matematinius veiksmus

Funkcijos SPEKTAKLIS Ir ĮVADAS NUORODOS

Šios funkcijos skirtos gauti įvairių reikšmių eilučių reprezentacijas. Tai yra, jie konvertuoja nuorodas, skaičius, loginius ir kt. į paprastą tekstą. Skirtumas tarp jų yra tas, kad funkcija SPEKTAKLIS konvertuoja bet kokius duomenų tipus į tekstą (eilelę) ir funkciją ĮVADAS NUORODOS- tik nuorodos ir grąžina likusias reikšmes tokias, kokios yra, o ne konvertuotos.

Prašymas. Tekstas = "PASIRINKITE
ATTEIKIMAS (TRUE) KAIP Būlio,
ATVEŽIMAS (4) KAIP SKAIČIUS,
ATSTOVAVIMAS (Šaltinis.Nuoroda) AS nuoroda,
ATSTOVYMAS(DATETIME(2016,10,07)) kaip data"
;
// Būlio = "Taip", Skaičius = "4", Nuoroda = "Dokumentas Kasos pajamų orderis Nr.... nuo..."
// Data="07.10.2016 0:00:00"

Prašymas. Tekstas = "PASIRINKITE
RERESENTATION REFERENCE (TRUE) KAIP Būlio,
ATSTOVYBĖS NUORODOS(4) KAIP SKAIČIUS
PRESENTINGLINK(Source.Link) AS nuoroda,
ATSTOVYBĖS NUORODOS(DATETIME(2016,10,07)) kaip data"
;
// Būlio reikšmė = TRUE, Skaičius = 4, Nuoroda = "Dokumentuokite Kasos pajamų orderio Nr.... nuo..."
// Data=07.10.2016 0:00:00

Funkcijos TIPAS Ir TIPO VERTĖS

Funkcija TIPAS grąžina 1C:Enterprise platformos duomenų tipą.

Prašymas. Tekstas = "PASIRINKITE
TYPE (numeris)
TYPE (eilutė),
TIPAS (dokumentas. Išlaidų grynųjų pinigų pavedimas)"
;

Funkcija TIPO VERTĖS grąžina jam perduotos reikšmės tipą.

Prašymas. Tekstas = "PASIRINKITE
VERČIŲ TIPAS (5) AS Skaičius,
TYPE ("
"Line" ") AS eilutė,
TIPAS (Source.Link) AS nuoroda
Iš Directory.Source AS Šaltinis"
;
//Skaičius=Skaičius, String=Eilutė, Katalogas = DirectoryLink.Source

Šias funkcijas patogu naudoti, pavyzdžiui, kai reikia išsiaiškinti, ar užklausoje gautas laukas yra tam tikro tipo reikšmė. Pavyzdžiui, iš ContactInformation informacijos registro gaukime sandorio šalių kontaktinę informaciją (ten saugomi ne tik sandorio šalių, bet ir organizacijų, asmenų ir kt. kontaktai):

Prašymas. Tekstas = "PASIRINKITE

NUO

KUR
VERČIŲ TIPAS (Kontaktinė informacija. Objektas) = ​​TIPAS (Katalogas. Sandorio šalys)"
;

Funkcija PRASMĖ

Funkcija Reikšmė leidžia naudoti 1C konfigūracijos objektus tiesiogiai užklausoje, nenaudojant .

Prie ankstesnio pavyzdžio pridėkime dar vieną sąlygą. Jums tereikia gauti savo sandorio šalių telefono numerius.

Prašymas. Tekstas = "PASIRINKITE
Kontaktinė informacija. Įvadas
NUO
Informacijos registras Kontaktinė informacija KAIP Kontaktinė informacija
KUR
VERČIŲ TIPAS (Kontaktinė informacija. Objektas) = ​​TIPAS (Katalogas. Sandorio šalys)
IR ContactInfo.Type = VALUE(Enum.ContactInfoTypes.Phone)"
;

Pažymėtina, kad šią funkciją galima naudoti tik su iš anksto nustatytomis reikšmėmis, t.y. su reikšmėmis, kurias galima pasiekti tiesiai iš konfigūratoriaus. Tai yra, funkcija PRASMĖ negali būti naudojamas su vartotojų sukurtais katalogo elementais, bet gali veikti su išvardinimais, su iš anksto nustatytais katalogo elementais, su reikšmėmis EmptyLink.

operatorius LINK

operatorius LINK yra skirtas patikrinti užklausos grąžintas reikšmes ir išsiaiškinti, ar jos priklauso konkrečiam nuorodos tipui. Tą pačią užduotį galima atlikti naudojant funkcijas TIPAS Ir TIPO VERTĖS(kurie turi platesnę taikymo sritį ir buvo aptarti aukščiau).

Pavyzdžiui, sandorio šalių kontaktinės informacijos parinkimo užduotį būtų galima išspręsti taip:

Prašymas. Tekstas = "PASIRINKITE
Kontaktinė informacija. Įvadas
NUO
Informacijos registras Kontaktinė informacija KAIP Kontaktinė informacija
KUR
ContactInformation.Object LINK Directory.Counterparties"
;

operatorius EXPRESS

operatorius EXPRESS naudojamas 1C užklausose dviem atvejais:

  • kai reikia pakeisti primityvaus tipo savybes;
  • kai reikia paversti lauką su sudėtiniu duomenų tipu į vieno tipo lauką.

Primityvūs duomenų tipai apima: skaičius, eilutė, data, loginė vertė. Kai kurie iš šių duomenų tipų turi papildomų savybių. Tipas Skaičius turi ilgį ir tikslumą, tipą eilutė - ilgis arba neribotas.

operatorius EXPRESS leidžia keisti ne duomenų tipą, o papildomas charakteristikas. Pavyzdžiui, jis gali neriboto ilgio eilutę paversti riboto ilgio eilute. Tai gali būti naudinga, jei reikia sugrupuoti užklausos rezultatus pagal tokį lauką. Negalite grupuoti pagal neriboto ilgio laukus, todėl konvertuojame į 200 simbolių ilgio eilutę.

Prašymas. Tekstas = "PASIRINKITE
KIEKIS (SKIRTINGAS Prekių ir paslaugų atgabenimas. Nuoroda) AS Nuoroda
NUO
Dokumentas.Prekių ir paslaugų gavimas KAIP Prekių ir paslaugų gavimas
GRUPUOTI PAGAL
EXPRESS(Prekių ir paslaugų gavimas. Komentuoti KAIP EILUTĖ (200)"
;

Kai kuriais atvejais 1C platforma gali netinkamai apdoroti užklausas į laukus su sudėtiniu duomenų tipu. Dėl to užklausos laikas ilgesnis, todėl gali būti naudinga iš anksto konvertuoti sudėtinį tipą į vieną tipą.

Prašymas. Tekstas = "PASIRINKITE
EXPRESS (Prekių judėjimo apyvarta. Užsakymas kaip dokumentas. Kliento užsakymas). Data AS užsakymo data,
Prekių judėjimasApyvarta.Nomenklatūra
NUO
RegistruokisAccumulations.Movement of Goods.Turnover AS Prekių judėjimasApyvarta
KUR
Prekių judėjimasApyvarta.Užsakymas LINK Dokumentas.Kliento užsakymas"
;

Operatoriai PASIRINKIMAS Ir YRA NULL

operatorius PASIRINKIMAS panašus į operatorių JEI integruota 1C kalba, tačiau turi šiek tiek sumažintą funkcionalumą.

Tarkime, norime gauti kontaktinę informaciją iš ContactInformation informacijos registro ir tuo pačiu atskirame užklausos laukelyje nurodyti, ar ji priklauso sandorio šaliai, ar fiziniam asmeniui.

Prašymas. Tekstas = "PASIRINKITE
Kontaktinė informacija. Įvadas,
PASIRINKIMAS
KAI VERTĖS TIPAS (Kontaktinė informacija. Objektas) = ​​TIPAS (Katalogas. Sandorio šalys)
TADA "
Sandorio šalis "
KITAS PASIRINKIMAS
KAI VERTĖS TIPAS (Kontaktinė informacija. Objektas) = ​​TIPAS (Katalogas. Asmenys)
TADA "
Individualus“
KITA „Kažkas kitas“ "
GALAS
PABAIGTI KAIP SAVININKAS
NUO
Informacijos registras. Kontaktinė informacija AS Kontaktinė informacija"
;

Kaip matyti iš pavyzdžio, projekte PASIRINKIMAS po žodžio visada yra sąlyga KADA; reikšmė taikoma, jei sąlyga teisinga po žodžio TADA ir reikšmė, taikoma, jei sąlyga neįvykdyta, po žodžio KITAIP. Visi trys dizaino elementai PASIRINKIMAS yra privalomi. Praleisti elementą KITAIP, taip pat kaip ir naudojant operatorių JEI Integruotoje 1C kalba tai neįmanoma. Taip pat iš operatoriaus PASIRINKIMAS dizaino analogo nėra ELSEIF, bet jūs galite investuoti vieną PASIRINKIMAS kitoje, kaip buvo padaryta mūsų pavyzdyje.

operatorius YRA NULL naudojamas projektuojant PASIRINKIMAS norėdami palyginti užklausos lauką su tipu NULL.

Prašymas. Tekstas = "PASIRINKITE
PASIRINKIMAS
KAI VERTĖ YRA NULIS, TAI 0
KITA Reikšmė
GALAS"
;

Be to, operatorius YRA NULL gali būti naudojamas užklausos sąlygose, pavyzdžiui, sakinyje KUR.

Redaktoriaus pasirinkimas
Gimdos kaklelio biopsijos procedūrą skiria gydantis ginekologas, atsižvelgdamas į pacientės nusiskundimus ir nustatytas moters lytinių organų problemas...

Skydliaukė yra svarbus mūsų kūno organas. Jos ligas geriausia pradėti gydyti laiku....

Skydliaukė yra svarbus mūsų kūno organas. Jos ligas geriausia pradėti gydyti laiku....

Ascorutin yra vitaminų preparatas, turintis ryškų antioksidacinį poveikį. Nėštumo metu Ascorutin skiriamas pagerinti...
Svetainėje pateikiama informacinė informacija tik informaciniais tikslais. Ligų diagnostika ir gydymas turi būti atliekami pagal...
Kiti jos pavadinimai: Auksinė žolė, Geltona žolė, Valanti žolė, Velnio pienas, Švari žolė, Nuryti žolė, Raganos žolė,...
Vaistas parduodamas indeliuose po 10-25 g.Farmakologinis poveikis Šis vaistas turi priešuždegiminį, antivirusinį...
Sveiki, mieli skaitytojai! Straipsnyje aptariame dietines tabletes, apsvarstysime veikimo principą, privalumus ir trūkumus...
Apsinuodijimas ugniažolėmis atsiranda dėl netinkamo šio augalo naudojimo. Apsinuodijimą galima išprovokuoti ir...