1c izvēle kur pieprasījumā. Sarežģīta tipa lauka vērtības iegūšana, izmantojot punktu

1C vaicājumu valoda ir viena no galvenajām atšķirībām starp versijām 7.7 un 8. Viena no svarīgākie punkti 1C programmēšanas izpētē ir vaicājumu valoda. 1C 8.3 vaicājumi ir visspēcīgākie un efektīvs līdzeklis datu saņemšana. Vaicājumu valoda ļauj ērtā veidā iegūt informāciju no datu bāzes.

Pati sintakse ļoti atgādina klasisko T-SQL, izņemot to, ka 1C, izmantojot vaicājuma valodu, datus var saņemt tikai, izmantojot atlases konstrukciju. Valoda atbalsta arī sarežģītākas konstrukcijas, piemēram, (pieprasījums pieprasījumā). Vaicājumus 1C 8 var rakstīt gan kirilicā, gan latīņu valodā.

Šajā rakstā es mēģināšu runāt par galvenajiem atslēgvārdiem 1C vaicājumu valodā:

  • izvēlēties
  • atļauts
  • dažādi
  • izteikt
  • vispirms
  • mainīties
  • nozīmē
  • vērtības veids (un REFERENCE operators)
  • izvēle
  • grupēt pēc
  • kam
  • ISNULL
  • Jā NULL
  • savienojumi - labais, kreisais, iekšējais, pilns.

Kā arī daži nelieli 1C valodas triki, ar kuriem jūs varat optimāli izveidot pieprasījuma tekstu.

Lai atkļūdotu vaicājumus sistēmā 1C 8.2, tiek nodrošināts īpašs rīks - vaicājumu konsole. Jūs varat redzēt aprakstu un lejupielādēt to, izmantojot saiti -.

Apskatīsim svarīgākos un interesantākos 1C vaicājumu valodas operatorus.

ATLASĪT

1C Enterprise 8 vaicājumu valodā jebkurš vaicājums sākas ar atslēgvārdu IZVĒLIES. 1C valodā nav UPDATE, DELETE, CREATE TABLE, INSERT konstrukciju, šīs manipulācijas tiek veiktas objektu tehnoloģijā. Tās mērķis ir tikai nolasīt datus.

Piemēram:

IZVĒLIES
Pašreizējais direktorijs.Nosaukums
NO
Directory.Nomenclature AS Pašreizējais direktorijs

Vaicājums atgriezīs tabulu ar vienumu nosaukumiem.

Blakus struktūrai IZVĒLIES jūs varat atrast atslēgvārdus LAI MAINĪTIES, ATĻAUTA, DAŽĀDI, PIRMAIS

ATĻAUTA— no tabulas atlasa tikai tos ierakstus, uz kuriem pašreizējam lietotājam ir tiesības.

DAŽĀDI— nozīmē, ka rezultāts nesaturēs rindu dublikātus.

IZVĒLE (CASE)

Ļoti bieži programmētāji šo dizainu nenovērtē par zemu. Tās izmantošanas piemērs:

Pašreizējais direktorijs.Nosaukums,

KAD Pašreizējais direktorijs.Pakalpojums TAD

"Pakalpojums"

BEIGAS SKATĪT Nomenklatūru

Directory.Nomenclature AS Pašreizējais direktorijs

Piemērs tiks atgriezts laukā “Nomenklatūras veids”. teksta vērtība- “Produkts” vai “Pakalpojums”.

KUR

1C vaicājumu valodas dizains, kas ļauj veikt atlasi saņemtajiem datiem. Lūdzu, ņemiet vērā, ka sistēma saņem visus datus no servera, un tikai pēc tam tie tiek atlasīti, pamatojoties uz šo parametru.

IZVĒLIES
Katalogs.Vārds
NO
Current Directory.Nomenclature AS Pašreizējais direktorijs
WHERE CurrentDirectory.Service = TRUE

Piemērā mēs atlasām ierakstus, kuriem atribūta “Pakalpojums” vērtība ir iestatīta uz “True”. IN šajā piemērā Var iztikt ar šādu nosacījumu:

"KUR IR PAKALPOJUMS"

Būtībā mēs atlasām rindas, kurās izteiksme pēc atslēgvārda ir vienāda ar "True".

Izteiksmēs varat izmantot tiešos nosacījumus:

WHERE kods = "005215"

Izmantojot operatoru “VALUE()” nosacījumos, izmantojiet piekļuvi iepriekš definētiem elementiem un uzskaitījumiem 1C pieprasījumā:

WHERE preces veids = vērtība (uzskaitījums. vienumu veidi. produkts)

Laika vērtības var norādīt šādi:

KUR saņemšanas datums > DATETIME(2012,01,01):

Visbiežāk nosacījumi tiek norādīti kā parametri, kas tiek nodoti pieprasījumam:

Saņemiet 267 video nodarbības 1C bez maksas:

WHERE NomenclatureGroup= &NomenclatureGroup

Atribūta veidam var izvirzīt nosacījumu, ja tas ir salikts tips:

Ja jums ir jāierobežo atlase no vērtību saraksta vai masīva, varat rīkoties šādi:

KUR ir uzkrāšanas reģistrs B (&atlases dokumentu saraksts).

Nosacījums var būt arī sarežģīts, kas sastāv no vairākiem nosacījumiem:

WHERE Saņemšanas datums > DATETIME(2012,01,01) AND NomenclatureGroup= &NomenclatureGroup UN NOT Service

GROUP BY

Rezultāta grupēšanai izmantotās vaicājumu valodas 1C 8.2 dizains.

Piemēram:

IZVĒLIES
Preču un pakalpojumu saņemšana, preces.
SUM (Preču saņemšanaPakalpojumi Preces. Daudzums) AS Daudzums,
SUM(Preču saņemšanaPakalpojumiPreces.Summa) AS Summa
NO
Preču un pakalpojumu saņemšanas dokuments. KĀ Preču un pakalpojumu saņemšana

GROUP BY
Preču saņemšanaPakalpojumiPreces.Preces

Šajā pieprasījumā tiks apkopotas visas kvītis pēc summas un daudzuma pa vienībām.

Papildus atslēgvārdam SUMMA Varat izmantot citas apkopošanas funkcijas: DAUDZUMS, DAŽĀDU SKAITS, MAKSIMĀLS, MINIMUM, VIDĒJS.

ŅEMOT

Dizains, kas bieži tiek aizmirsts, bet tas ir ļoti svarīgs un noderīgs. Tas ļauj norādīt atlasi apkopotas funkcijas veidā, to nevar izdarīt dizainā KUR.

HAVING izmantošanas piemērs 1C pieprasījumā:

IZVĒLIES
Preču un pakalpojumu saņemšana, preces.
SUM (Preču saņemšanaPakalpojumi Preces. Daudzums) AS Daudzums,
SUM(Preču saņemšanaPakalpojumiPreces.Summa) AS Summa
NO
Preču un pakalpojumu saņemšanas dokuments. KĀ Preču un pakalpojumu saņemšana

GROUP BY
Preču un pakalpojumu preču saņemšana

SUM(Preču saņemšanaPakalpojumiPreces.Daudzums) > 5

Tāpēc mēs izvēlēsimies to produktu skaitu, kas saņēmuši vairāk nekā 5 gab.

NOZĪME()

Piemēram:

WHERE Bank = vērtība (Directory.Banks.EmptyLink)

WHERE nomenklatūras veids = vērtība (kataloga. Nomenklatūras veidi. Produkts)

WHERE preces veids = vērtība (uzskaitījums. vienumu veidi. pakalpojums)

Pieprasījums: TYPE

Datu tipu var pārbaudīt, izmantojot funkcijas TYPE() un VALUETYPE() vai izmantojot loģisko REFERENCE operatoru.

EXPRESS()

Ekspress operators 1C vaicājumos tiek izmantots datu tipu konvertēšanai.

Sintakse: EXPRESS(<Выражение>KĀ<Тип значения>)

Izmantojot to, jūs varat pārvērst virknes vērtības uz datumu vai atsauces vērtības virkņu datos utt.

IN praktisks pielietojums Operatoru Express() ļoti bieži izmanto, lai pārveidotu neierobežota garuma laukus, jo neierobežota garuma laukus nevar atlasīt, grupēt utt. Ja šādi lauki netiek konvertēti, tiks parādīts kļūdas ziņojums Nevar salīdzināt neierobežota garuma laukus un nesaderīgu tipu laukus.

IZVĒLIES
ContactInformation.Object,
EXPRESS(ContactInfo.View AS ROW(150)) AS View
NO
Informācijas reģistrs Kontaktinformācija KĀ Kontaktinformācija

GROUP BY
EXPRESS(ContactInfo.Representation AS ROW(150)),
ContactInformation.Object

ISNULL (ISNULL)

Diezgan noderīga 1C vaicājumu valodas funkcija, kas pārbauda ieraksta vērtību un ja tā ir vienāda NULL, Tas ļauj to aizstāt ar savu vērtību. Visbiežāk izmanto, lai iegūtu virtuālās atlikumu un apgrozījuma tabulas, lai paslēptu NULL un ielieciet skaidru 0 (nulle).

ISNULL(pirmsmēneša nodokļi.AppliedFSS Benefit, 0)

Šāda 1C vaicājumu valodas ISNULL funkcija atgriezīs nulli, ja nav vērtības, kas ļaus izvairīties no kļūdas.

PIEVIENOJIES

Ir 4 savienojumu veidi: PA kreisi, PAREIZI, PILNĪGS, IEKŠĒJS.

KREISAIS un LABAIS SAVIENOJUMS

Savienojumi tiek izmantoti, lai saistītu divas tabulas, pamatojoties uz konkrētu nosacījumu. Funkcija, kad PA kreisi PIEVIENOTIES ir tas, ka mēs ņemam pirmo norādīto tabulu kopumā un nosacīti saistām otro tabulu. Otrās tabulas lauki, kurus nevarēja saistīt ar nosacījumu, tiek aizpildīti ar vērtību NULL.

Kreisās pievienošanās piemērs 1C pieprasījumā:

Tas atgriezīs visu tabulu un aizpildīs lauku “Banka” tikai tajās vietās, kur ir izpildīts nosacījums “Darījumu partneri.Nosaukums = Banks.Name”. Ja nosacījums nav izpildīts, lauks Banka tiks iestatīts uz NULL.

RIGHT JOIN 1C 8.3 valodā absolūti līdzīgi KREISAIS savienojums, izņemot vienu atšķirību: in SAVIENOJUMA TIESĪBAS“Galvenā” tabula ir otrā, nevis pirmā.

PILNS SAVIENOJUMS

PILNS SAVIENOJUMS atšķiras no kreisās un labās puses ar to, ka parāda visus ierakstus no divām tabulām un savieno tikai tos, kurus var savienot pēc nosacījuma.

Piemēram:

PILNS SAVIENOJUMS
Katalogs.Bankas KĀ Bankas

BY

Vaicājuma valoda abas tabulas pilnībā atgriezīs tikai tad, ja ir izpildīts nosacījums Apvienot ierakstus. Atšķirībā no kreisā/labā savienojuma, NULL var parādīties divos laukos.

IEKŠĒJĀ PIEVIENOŠANĀS

IEKŠĒJĀ PIEVIENOŠANĀS atšķiras no pilns ar tēmām, kurā tiek parādīti tikai tie ieraksti, kurus varētu savienot atbilstoši konkrētajam nosacījumam.

Piemēram:

NO
Katalogs Darījumu partneri AS Klienti

IEKŠĒJĀ PIEVIENOŠANĀS
Katalogs.Bankas KĀ Bankas

BY
Clients.Name = Banks.Name

Šis vaicājums atgriezīs tikai tās rindas, kurās bankai un darījuma partnerim ir vienāds nosaukums.

Secinājums

Šī ir tikai neliela daļa no 1C 8 vaicājumu valodas sintakses, turpmāk es centīšos sīkāk apsvērt dažus punktus, parādīt un daudz ko citu!

NULL ir nekas cits kā vērtības neesamība. Daudzi cilvēki to sajauc ar tipa numura vērtību “0”, tukšu atsauci uz objektu vai tukšu virkni. Šī nepareizā priekšstata dēļ rodas daudz kļūdu.

Vērtība NULL tiks parādīta, ja pieprasījums attiecas uz neesošu lauku, rekvizītu vai bojātu saiti.

Pamatojoties uz SQL, kas neļauj veikt normālu vienlīdzības pārbaudi NULL. Tālāk ir norādīti divi veidi, kā pārbaudīt NULL 1C 8.3.

1C 8.3 vaicājumu valodas funkcijai ISNULL() ir divi ievades parametri:

  • pārbaudāmā izteiksme;
  • aizstāšanas izteiksme.

Ja pārbaudāmā vērtība ir NULL, šī funkcija atgriezīs aizstāšanas izteiksmes vērtību. Ja vērtība nav NULL, tiks atgriezta pārbaudāmā izteiksme.

Zemāk ir piemērs. Tas atlasa visas preces tabulas daļas preces no dokumenta “Preču un pakalpojumu saņemšana”. Izmantojot kreiso savienojumu, katrai precei tiek piešķirta pēdējā cena no informācijas reģistra “Preču cenas”.

Šajā gadījumā var izveidoties situācija, ka kādam amatam vienkārši var nebūt cenas reģistrā. Šajā gadījumā funkcija ISNULL atgriezīs mums parasto nulli. Ja jūs to neizmantojat, tad, mēģinot veikt aritmētiskās darbības laukā “Cena” ar NULL vērtību, mēs saņemsim kļūdu.

IZVĒLIES

ISNULL(Cenas.Cena, 0) AS PašreizējāCena
NO



KUR

SELECT priekšrakstā ir NULL

ISNULL() ekvivalents ir ISNULL, kas tiek izmantots priekšrakstā SELECT un pārbauda, ​​vai vērtība ir NULL. “IS” šajā gadījumā nozīmē vienlīdzību, un vaicājums iepriekšējā piemērā izskatītos šādi:

IZVĒLIES
Produkti Nomenclature AS Produkts,
IZVĒLE
KAD CENAS IR NULL
TAD 0
CITĀDI Cenas.Cena
END AS PašreizējāCena
NO
Preču un pakalpojumu saņemšanas dokuments
KREISAIS SAVIENOJUMS ReģistrētiesInformācija.CenasNomenklatūra.SliceLast AS Cenas
Programmatūras produkti.Nomenklatūra = Cenas.Nomenklatūra
KUR
Products.Link = &LinkToDocument

Atšķirības starp funkciju ISNULL() un IS NULL

Kā redzat no iepriekšējiem piemēriem, abos gadījumos pieprasījums atgriež tos pašus datus. Funkcija ISNULL() ir SELECTION WHEN... IS NULL... END saīsināta versija, taču tā joprojām ir ieteicama šādu iemeslu dēļ:

  1. Funkcija ISNULL() optimizē vaicājumu. Tas tiek nolasīts vienu reizi, tāpēc, pārbaudot sarežģītu izteiksmi, pieprasījums tiks apstrādāts ātrāk.
  2. Funkcija ISNULL() saīsina konstrukciju, padarot vaicājumu lasāmāku.
  3. Izpildot funkciju ISNULL(), aizstāšanas izteiksme tiek samazināta līdz izteiksmes veidam, kas tiek pārbaudīts virknes tipiem (virknes garums) un skaitļu tipiem (bitu dziļums).

Vaicājumu valoda 1C 8 ir vienkāršots labi zināmās “strukturētās programmēšanas valodas” (kā to biežāk sauc par SQL) analogs. Bet 1C to izmanto tikai datu nolasīšanai, lai mainītu datus.

Vēl viena interesanta atšķirība ir krievu sintakse. Lai gan patiesībā jūs varat izmantot angļu valodas konstrukcijas.

Pieprasījuma piemērs:

IZVĒLIES
Banks. Name,
Banks.CorrAccount
NO
Katalogs.Bankas KĀ Bankas

Šis pieprasījums ļaus mums redzēt informāciju par visu datubāzē esošo banku nosaukumiem un korespondentkontiem.

Vaicājuma valoda ir vienkāršākā un efektīvs veids informācijas iegūšana. Kā redzams no iepriekš minētā piemēra, vaicājuma valodā ir jāizmanto metadatu nosaukumi (šis ir sistēmas objektu saraksts, kas veido konfigurāciju, t.i., direktorijus, dokumentus, reģistrus utt.).

Vaicājumu valodas konstrukciju apraksts

Vaicājuma struktūra

Lai iegūtu datus, pietiek ar konstrukciju “SELECT” un “FROM” izmantošanu. Vienkāršākais pieprasījums izskatās šādi:

SELECT * FROM Directories.Nomenclature

Kur “*” nozīmē visu tabulas lauku atlasi, savukārt Directories.Nomenclature – tabulas nosaukums datu bāzē.

Apskatīsim sarežģītāku un vispārīgāku piemēru:

IZVĒLIES
<ИмяПоля1>KĀ<ПредставлениеПоля1>,
Sum(<ИмяПоля2>) KĀ<ПредставлениеПоля2>
NO
<ИмяТаблицы1>KĀ<ПредставлениеТаблицы1>
<ТипСоединения>SAVIENOTS<ИмяТаблицы2>KĀ<ПредставлениеТаблицы2>
BY<УсловиеСоединениеТаблиц>

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

GROUP BY
<ИмяПоля1>

PASŪTĪT PĒC
<ИмяПоля1>

REZULTĀTI
<ИмяПоля2>
BY
<ИмяПоля1>

IN šo pieprasījumu no tabulām “Tabulas nosaukums1” un “Tabulas nosaukums” atlasām lauku “FieldName1” un “FieldName1” datus, piešķiram laukiem sinonīmus, izmantojot operatoru “HOW”, un savienojam tos, izmantojot noteiktu nosacījumu “TableConnectionCondition”.

No saņemtajiem datiem atlasām tikai tos datus, kas atbilst nosacījumam no “KUR” “Datu atlases nosacījums” Tālāk grupējam pieprasījumu pēc lauka “Field Name2”, summējot “Lauka nosaukums2”. “Field Name1” un pēdējais lauks “Field Name2”.

Pēdējā darbība ir pieprasījuma kārtošana, izmantojot konstrukciju ORDER BY.

Vispārējie dizaini

Apskatīsim 1C 8.2 vaicājumu valodas vispārīgās struktūras.

PIRMAISn

Izmantojot šo operatoru, jūs varat iegūt n skaitu pirmo ierakstu. Ierakstu secību nosaka secība vaicājumā.

IZVĒLĒTIES PIRMIE 100
Banks. Name,
Bankas kods AS BIC
NO
Katalogs.Bankas KĀ Bankas
PASŪTĪT PĒC
Bankas.Vārds

Pieprasījums saņems pirmos 100 direktorijas “Bankas” ierakstus, sakārtotus alfabēta secībā.

ATĻAUTA

Šis dizains ir būtisks darbam ar mehānismu. Mehānisma būtība ir ierobežot datu lasīšanas (un citu darbību) lietotājiem konkrētu ierakstu datu bāzes tabulā, nevis tabulu kopumā.

Ja lietotājs mēģina izmantot vaicājumu, lai lasītu ierakstus, kas viņam nav pieejami, viņš saņems kļūdas ziņojumu. Lai no tā izvairītos, jāizmanto konstrukcija “ATĻAUTA”, t.i., pieprasījums nolasīs tikai tai atļautos ierakstus.

ATLASĪT ATĻAUTO
Papildu informācijas krātuve
NO
Katalogs.Papildinformācijas krātuve

DAŽĀDI

Izmantojot “DIFFERENT”, 1C vaicājuma rezultātā netiks ievadītas dublētās rindas. Dublēšana nozīmē, ka visi pieprasījuma lauki atbilst.

IZVĒLĒTIES PIRMIE 100
Banks. Name,
Bankas kods AS BIC
NO
Katalogs.Bankas KĀ Bankas

EmptyTable

Šī konstrukcija tiek izmantota ļoti reti, lai apvienotu vaicājumus. Pievienojoties, jums var būt nepieciešams norādīt tukšu ligzdotu tabulu kādā no tabulām. Operators “EmptyTable” ir tieši piemērots šim nolūkam.

Piemērs no 1C 8 palīdzības:

SELECT Saite.Numurs, EMPTY TABLE.(Nr., Prece, Daudzums) AS Sastāvs
NO Document.Expense Invoice
VISU APVIENOT
ATLASĪT Saite. Numurs, saturs. (Rindas numurs, prece, daudzums)
NO Dokuments.Rēķins Dokuments.Rēķins.Sastāvs.*

ISNULL

Ļoti noderīga funkcija, kas ļauj izvairīties no daudzām kļūdām. YesNULL() ļauj aizstāt NULL vērtību ar vēlamo. Ļoti bieži izmanto, lai pārbaudītu vērtību esamību savienotajās tabulās, piemēram:

IZVĒLIES
Nomenklatūras atsauce
IsNULL(Atlikušais vienums.Atlikušais daudzums,0) AS Atlikušais daudzums
NO


Var izmantot citos veidos. Piemēram, ja katrai rindai nav zināms, kurā tabulā šī vērtība pastāv:

ISNULL(RēķinsSaņemts.Datums, RēķinsIssued.Datums)

HOW ir operators, kas ļauj tabulai vai laukam piešķirt nosaukumu (sinonīmu). Iepriekš mēs redzējām lietošanas piemēru.

Šīs konstrukcijas ir ļoti līdzīgas – tās ļauj iegūt vēlamās vērtības virknes attēlojumu. Vienīgā atšķirība ir tā, ka REPRESENTATION pārvērš visas vērtības par virknes tipu, savukārt REPRESENTATIONREF pārvērš tikai atsauces vērtības. REFERENCE RERESENTATION ieteicams izmantot datu kompozīcijas sistēmas vaicājumos optimizācijai, ja vien, protams, atlasēs nav paredzēts izmantot atsauces datu lauku.

IZVĒLIES
View(Link), //string, piemēram, “Iepriekšējais pārskats Nr. 123, datēts ar 10.10.2015.
View(DeletionMark) AS DeleteMarkText, //string, "Jā" vai "Nē"
ViewReferences(DeletionMark) AS DeleteMarkBoolean //būla, patiess vai nepatiess
NO
Document.Advance Report

EXPRESS

Express ļauj konvertēt lauka vērtības uz vēlamo datu tipu. Varat pārvērst vērtību par primitīvu vai atsauces veidu.

Ekspresis atsauces tipam tiek izmantots, lai ierobežotu pieprasītos datu tipus kompleksa tipa laukos, ko bieži izmanto sistēmas veiktspējas optimizēšanai. Piemērs:

EXPRESS(Tabulas izmaksas.Subconto1 AS direktorijs.Izmaksu posteņi).Darbības veids nodokļu uzskaites izmaksām

Primitīvajiem tipiem šī funkcija bieži tiek izmantota, lai ierobežotu rakstzīmju skaitu neierobežota garuma laukos (šādus laukus nevar salīdzināt). Lai izvairītos no kļūdas " Nederīgi parametri salīdzināšanas darbībā. Jūs nevarat salīdzināt laukus
neierobežots garums un nesaderīgu veidu lauki
", jums ir jāizsaka šādi lauki:

EXPRESS (komentēt kā rindiņa (150))

ATŠĶIRĪBAS DATUMS

Saņemiet 267 video nodarbības 1C bez maksas:

IS NULL izmantošanas piemērs 1C pieprasījumā:

ATLASĪT * NO
Atsauce
KREISAIS SAVIENOJUMS Reģistrēties Uzkrājumi.ProduktiNoliktavās.Atlikušais AS Produkts Atlikušais
Programmatūras nomenklatūraRef.Link = Pārdotās precesCommitteesRemains.Nomenclature
KUR NAV atlikušie produkti. Atlikušais daudzums IR NULL

Datu veidu vaicājumā var noteikt, izmantojot funkcijas TYPE() un VALUETYPE() vai izmantojot loģisko REFERENCE operatoru. Abas funkcijas ir līdzīgas.

Iepriekš noteiktas vērtības

Papildus nodoto parametru izmantošanai vaicājumos 1C vaicājumu valodā varat izmantot iepriekš definētas vērtības vai . Piemēram, pārskaitījumi, iepriekš definēti direktoriji, kontu plāni un tā tālāk. Šim nolūkam tiek izmantota konstrukcija “Vērtība()”.

Lietošanas piemērs:

WHERE Nomenklatūra.Nomenklatūras veids = Vērtība(Kataloga.Nomenklatūras veidi.Produkts)

WHERE Darījuma partneri.Kontaktinformācijas veids = Vērtība(Uzskaitījums.Kontaktinformācijas veidi.Tālrunis)

KUR Konta atlikumi.Grāmatvedības konts = Vērtība(Kontu diagramma.Peļņa.PeļņaZudumi)

Savienojumi

Ir 4 savienojumu veidi: PA kreisi, PAREIZI, PILNĪGS, IEKŠĒJS.

KREISAIS un LABAIS SAVIENOJUMS

Savienojumi tiek izmantoti, lai saistītu divas tabulas, pamatojoties uz konkrētu nosacījumu. Funkcija, kad PA kreisi PIEVIENOTIES ir tas, ka mēs ņemam pirmo norādīto tabulu kopumā un nosacīti saistām otro tabulu. Otrās tabulas lauki, kurus nevarēja saistīt ar nosacījumu, tiek aizpildīti ar vērtību NULL.

Piemēram:

Tas atgriezīs visu Darījuma partneru tabulu un aizpildīs lauku “Banka” tikai tajās vietās, kur būs izpildīts nosacījums “Darījuma partneri.Nosaukums = Bankas.Nosaukums”. Ja nosacījums nav izpildīts, lauks Banka tiks iestatīts uz NULL.

RIGHT JOIN 1C valodā absolūti līdzīgi KREISAIS savienojums, izņemot vienu atšķirību - in SAVIENOJUMA TIESĪBAS“Galvenā” tabula ir otrā, nevis pirmā.

PILNS SAVIENOJUMS

PILNS SAVIENOJUMS atšķiras no kreisās un labās puses ar to, ka parāda visus ierakstus no divām tabulām un savieno tikai tos, kurus var savienot pēc nosacījuma.

Piemēram:

NO

PILNS SAVIENOJUMS
Katalogs.Bankas KĀ Bankas

BY

Vaicājuma valoda abas tabulas pilnībā atgriezīs tikai tad, ja ir izpildīts ierakstu pievienošanas nosacījums. Atšķirībā no kreisā/labā savienojuma, NULL var parādīties divos laukos.

IEKŠĒJĀ PIEVIENOŠANĀS

IEKŠĒJĀ PIEVIENOŠANĀS atšķiras no pilnā ar to, ka parāda tikai tos ierakstus, kurus varētu savienot atbilstoši konkrētajam nosacījumam.

Piemēram:

NO
Katalogs Darījumu partneri AS Klienti

IEKŠĒJĀ PIEVIENOŠANĀS
Katalogs.Bankas KĀ Bankas

BY
Clients.Name = Banks.Name

Šis vaicājums atgriezīs tikai tās rindas, kurās bankai un darījuma partnerim ir vienāds nosaukums.

Asociācijas

Konstrukcijas JOIN un JOIN ALL apvieno divus rezultātus vienā. Tie. divu izpildīšanas rezultāts tiks “sapludināts” vienā, kopējā.

Tas ir, sistēma darbojas tieši tāpat kā parastās, tikai pagaidu tabulai.

Kā lietot INDEX BY

Tomēr ir jāņem vērā viens punkts. Arī indeksa izveide pagaidu tabulā prasa laiku. Tāpēc konstrukciju “ ” ieteicams izmantot tikai tad, ja ir droši zināms, ka pagaidu tabulā būs vairāk par 1-2 ierakstiem. Pretējā gadījumā efekts var būt pretējs – indeksēto lauku veiktspēja nekompensē indeksa izveidei nepieciešamo laiku.

IZVĒLIES
Valūtu kursi Jaunākais šķērsgriezums Valūta AS Valūta,
Valūtu kursi Jaunākais šķērsgriezums.
PUT Valūtas kursi
NO
Informācijas reģistrs.Valūtu kursi.Last Slice(&Period,) AS Valūtu kursiPēdējā daļa
INDEX BY
Valūta
;
IZVĒLIES
CenasNomenklatūra.Nomenklatūra,
Cenas Nomenklatūras. Cena,
CenasNomenklatūras.Valūta,
Valūtas kursi. Kursi
NO
Informācija Reģistrs.Nomenklatūra Cenas.Pēdējā šķēle(&Periods,
Nomenklatūra B (&Nomenklatūra) UN PriceType = &PriceType) AS cenu nomenklatūra
LEFT JOIN Valūtu kursi AS Valūtu kursi
Programmatūras cenasNomenklatūras.Valūta = Valūtas kursi.Valūta

Grupēšana

1C vaicājumu valoda ļauj izmantot īpašas apkopošanas funkcijas, grupējot vaicājuma rezultātus. Grupēšanu var izmantot arī bez apkopojošām funkcijām, lai “likvidētu” dublikātus.

Pastāv šādas funkcijas:

Summa, Daudzums, Dažādu skaits, Maksimums, Minimums, Vidējais.

1. piemērs:

IZVĒLIES
Preču un pakalpojumu preču nomenklatūra,
SUM (Preču pārdošana, pakalpojumi, preces. daudzums) AS daudzums,
SUM(Preču pārdošanaPakalpojumiPreces.Summa) AS Summa
NO

GROUP BY
Preču un pakalpojumu preču nomenklatūra

Pieprasījums saņem visas rindas ar precēm un apkopo tās pēc daudzuma un summām pa vienībām.

Piemērs Nr.2

IZVĒLIES
Banks.Code,
DAUDZUMS (DAŽĀDAS bankas. Saite) KĀ dublikātu skaits
NO
Katalogs.Bankas KĀ Bankas
GROUP BY
Bankas.Kods

Šajā piemērā tiks parādīts BIC saraksts direktorijā “Bankas” un parādīts, cik daudz dublikātu pastāv katram no tiem.

Rezultāti

Rezultāti ir veids, kā iegūt datus no sistēmas ar hierarhisku struktūru. Apkopojošās funkcijas var izmantot kopsavilkuma laukiem, tāpat kā grupēšanai.

Viens no populārākajiem rezultātu izmantošanas veidiem praksē ir preču partiju norakstīšana.

IZVĒLIES




NO
Preču un pakalpojumu pārdošana. Kā pārdot preces un pakalpojumus
PASŪTĪT PĒC

REZULTĀTI
SUM (daudzums),
SUM(Summa)
BY
Nomenklatūra

Vaicājuma rezultāts būs šāds hierarhisks:

Vispārīgi rezultāti

Ja jums ir jāiegūst kopsummas visiem “kopējiem”, izmantojiet operatoru “GENERAL”.

IZVĒLIES
Preču un pakalpojumu preču pārdošana, AS Nomenklatūra,
Preču un pakalpojumu preču pārdošana Link AS dokuments,
Preču un pakalpojumu preču pārdošana Daudzums AS Daudzums,
Preču un pakalpojumu preču pārdošana Summa AS Summa
NO
Preču un pakalpojumu pārdošana. Kā pārdot preces un pakalpojumus
PASŪTĪT PĒC
Preču un pakalpojumu preču pārdošanas datums
REZULTĀTI
SUM (daudzums),
SUM(Summa)
BY
VISPĀRĪGI,
Nomenklatūra

Pieprasījuma izpildes rezultātā mēs iegūstam šādu rezultātu:

Kurā 1 grupēšanas līmenis ir visu nepieciešamo lauku apkopojums.

Sakārtošana

Operators ORDER BY tiek izmantots, lai kārtotu vaicājuma rezultātu.

Primitīvo tipu (virkne, skaitlis, Būla) kārtošana notiek pēc normāli noteikumi. Atsauces tipu laukiem kārtošana notiek atbilstoši atsauces iekšējai reprezentācijai ( unikāls identifikators), nevis pēc koda vai saites prezentācijas.

IZVĒLIES

NO
Directory.Nomenclature AS Nomenklatūra
PASŪTĪT PĒC
Vārds

Pieprasījumā tiks parādīts nosaukumu saraksts nomenklatūras direktorijā, sakārtots alfabētiskā secībā.

Automātiska pasūtīšana

Vaicājuma rezultāts bez šķirošanas ir haotiski uzrādīta rindu kopa. 1C platformas izstrādātāji negarantē, ka rindas tiks izvadītas tādā pašā secībā, izpildot tos pašus vaicājumus.

Ja tabulas ieraksti ir jāparāda nemainīgā secībā, ir jāizmanto konstrukcija Auto-Order.

IZVĒLIES
Nomenklatūra.Nosaukums AS Nosaukums
NO
Directory.Nomenclature AS Nomenklatūra
AUTO PASŪTĪJUMS

Virtuālie galdi

Virtuālās tabulas 1C ir unikāla iezīme 1C vaicājumu valoda, kas nav atrodama citās līdzīgās sintaksēs. Virtuālais galds - ātrs veids profila informācijas iegūšana no reģistriem.

Katram reģistra tipam ir savs virtuālo tabulu komplekts, kas var atšķirties atkarībā no reģistra iestatījumiem.

  • izgriezt no pirmā;
  • izgriezt no pēdējās.
  • pārpalikumi;
  • revolūcijas;
  • atlikumi un apgrozījums.
  • kustības no subkonto;
  • revolūcijas;
  • ātrums Dt Kt;
  • pārpalikumi;
  • atlikumi un apgrozījums
  • subconto.
  • bāze;
  • grafiskie dati;
  • faktiskais derīguma termiņš.

Risinājuma izstrādātājam dati tiek ņemti no vienas (virtuālās) tabulas, bet patiesībā 1C platforma tos ņem no daudzām tabulām, pārveidojot tās vajadzīgajā formā.

IZVĒLIES
Produkti noliktavās Atlikumi un apgrozījums, Nomenklatūra.
ProduktiNoliktavāsAtlikušaisUnApgrozījums.DaudzumsSākotnējaisAtlicis,
ProduktiNoliktavās AtlikumiUnApgrozījums.DaudzumsApgrozījums,
PrecesNoliktavās AtlikumiUnApgrozījums.Ienākošais daudzums,
PrecesNoliktavās Atlikumi Un Apgrozījums. Daudzums Patēriņš,
ProduktiNoliktavāsAtlikušumsUnApgrozījums.DaudzumsGalīgais Atlikums
NO
ReģistrētiesUzkrājumi.Preces noliktavās.AtliekasUn Apgrozījums AS PrecesNoliktavāsAtliekasUnApgrozījums

Šis pieprasījums ļauj ātri iegūt liels skaits datus.

Virtuālā galda opcijas

Ļoti svarīgs aspekts darbā ar virtuālajām tabulām ir parametru izmantošana. Virtuālās tabulas parametri ir specializēti parametri atlasei un konfigurēšanai.

Šādām tabulām tiek uzskatīts par nepareizu izmantot atlasi konstrukcijā “WHERE”. Papildus tam, ka vaicājums kļūst neoptimāls, ir iespējams saņemt nepareizus datus.

Šo parametru izmantošanas piemērs:

Preču reģistrs noliktavās (& Perioda sākums, Perioda beigas, Mēnesis, Perioda kustības un robežas, Nomenklatūra = & Nepieciešamā nomenklatūra).

Virtuālo tabulu algoritms

Piemēram, visvairāk izmantotā “Atliek” tipa virtuālā tabula glabā datus no divām fiziskām tabulām – atlikumiem un kustībām.

Izmantojot virtuālo tabulu, sistēma veic šādas manipulācijas:

  1. Mēs iegūstam tuvāko aprēķināto vērtību datuma un mērījumu izteiksmē kopsummu tabulā.
  2. Mēs “pievienojam” summu no kustības tabulas summai no kopsummas tabulas.


Šādas vienkāršas darbības var ievērojami uzlabot sistēmas darbību kopumā.

Vaicājumu veidotāja izmantošana

Vaicājumu veidotājs– 1C Enterprise sistēmā iebūvēts rīks, kas ievērojami atvieglo datu bāzes vaicājumu izstrādi.

Vaicājumu veidotājam ir diezgan vienkāršs, intuitīvs interfeiss. Tomēr aplūkosim vaicājuma konstruktora izmantošanu sīkāk.

Vaicājuma teksta konstruktors tiek palaists no konteksta izvēlnes (peles labā poga) vēlamajā programmas koda vietā.

1C pieprasījuma konstruktora apraksts

Apskatīsim katru dizainera cilni sīkāk. Izņēmums ir cilne Builder, kas ir citas diskusijas tēma.

Cilne Tabulas un lauki

Šajā cilnē ir norādīts datu avots un lauki, kas jāparāda pārskatā. Būtībā šeit ir aprakstītas konstrukcijas SELECT.. FROM.

Avots var būt fiziska datu bāzes tabula, virtuālā reģistra tabula, pagaidu tabulas, ligzdotie vaicājumi utt.

Virtuālo tabulu konteksta izvēlnē varat iestatīt virtuālās tabulas parametrus:

Cilne Savienojumi

Cilne tiek izmantota, lai aprakstītu vairāku tabulu savienojumus un izveidotu konstrukcijas ar vārdu CONNECTION.

Grupēšanas cilne

Šajā cilnē sistēma ļauj grupēt un apkopot tabulas rezultāta obligātos laukus. Apraksta konstrukciju GROUP BY, SUM, MINIMUM, VIDĒJI, MAKSIMĀLU, DAUDZUMS, DAŽĀDU SKAITS lietojumu.

Cilne Nosacījumi

Atbildīgs par visu, kas nonāk pieprasījuma tekstā pēc WHERE konstrukcijas, t.i., par visiem nosacījumiem, kas uzlikti saņemtajiem datiem.

Cilne Papildu

Tab Turklāt pilns ar visādiem parametriem, kas ir ļoti svarīgi. Apskatīsim katru no īpašībām.

Grupēšana Ierakstu atlase:

  • Vispirms N– parametrs, kas vaicājumā atgriež tikai N ierakstus (PIRMAIS operators)
  • Nav dublikātu– nodrošina saņemto ierakstu unikalitāti (DAŽĀDS operators)
  • Atļauts– ļauj atlasīt tikai tos ierakstus, kurus sistēma ļauj atlasīt, ņemot vērā (ATĻAUTA konstrukcija)

Grupēšana Pieprasījuma veids nosaka, kāda veida vaicājums būs: datu izgūšana, pagaidu tabulas izveide vai pagaidu tabulas iznīcināšana.

Zemāk ir karogs Bloķēt saņemtos datus vēlākai modificēšanai. Tas ļauj iespējot iespēju iestatīt datu bloķēšanu, kas nodrošina datu drošību no to nolasīšanas brīža līdz to maiņai (attiecas tikai uz Automātiskais režīms bloķētāji, dizains MAINĪT).

Savienojumi/aliases cilne

Šī vaicājumu noformētāja cilne iestata iespēju savienot dažādas tabulas un aizstājvārdus (konstrukcija HOW). Tabulas ir norādītas kreisajā pusē. Ja iestatīsiet karogus pretī tabulai, tiks izmantota UNITE konstrukcija, pretējā gadījumā - UNITE ALL (atšķirības starp abām metodēm). Labajā pusē ir norādīta lauku atbilstība dažādās tabulās, ja atbilstība nav norādīta, vaicājums atgriezīs NULL.

Cilne Pasūtījums

Tas norāda secību, kādā vērtības tiek kārtotas (ORDER BY) - dilstošā (DESC) vai augošā (ASC) secībā.

Ir arī interesants karogs - Automātiska pasūtīšana(pieprasījumā - AUTOPASŪTĪJUMS). Pēc noklusējuma 1C sistēma parāda datus “haotiskā” secībā. Ja iestatāt šo karogu, sistēma kārtos datus pēc iekšējiem datiem.

Cilne Vaicājumu grupa

Cilnē Vaicājumu noformētājs varat izveidot jaunus un arī izmantot to kā navigāciju. Pieprasījuma tekstā paketes ir atdalītas ar simbolu “;” (komats).

Poga “Vaicājums” vaicājumu noformētājā

Pieprasījuma noformētāja apakšējā kreisajā stūrī ir poga Pieprasīt, ar kuru jebkurā laikā varat apskatīt pieprasījuma tekstu:

Šajā logā varat veikt pieprasījuma korekcijas un izpildīt to.


Izmantojot vaicājumu konsoli

Vaicājumu konsole ir vienkārša un ērts veids sarežģītu vaicājumu atkļūdošanai un ātrai informācijas iegūšanai. Šajā rakstā es mēģināšu aprakstīt, kā lietot vaicājumu konsoli, un sniegšu saiti, lai lejupielādētu vaicājumu konsoli.

Apskatīsim šo rīku tuvāk.

Lejupielādēt 1C vaicājumu konsoli

Pirmkārt, lai sāktu strādāt ar vaicājumu konsoli, tā no kaut kurienes ir jālejupielādē. Ārstēšanas parasti iedala divos veidos - kontrolētās un konvencionālās (vai dažreiz tās sauc par 8.1 un 8.2/8.3).

Es mēģināju apvienot šos divus veidus vienā apstrādē - vēlamajā darbības režīmā tas atveras nepieciešamā forma(pārvaldītā režīmā konsole darbojas tikai biezajā režīmā).

1C vaicājumu konsoles apraksts

Sāksim apskatīt vaicājumu konsoli ar galvenā apstrādes paneļa aprakstu:

Vaicājumu konsoles galvenē ar milisekundes precizitāti var redzēt pēdējā vaicājuma izpildes laiku, tas ļauj salīdzināt dažādus dizainus veiktspējas ziņā.

Pirmā komandu joslas pogu grupa ir atbildīga par pašreizējo vaicājumu saglabāšanu ārējā failā. Tas ir ļoti ērti, jūs vienmēr varat atgriezties pie sarežģīta pieprasījuma rakstīšanas. Vai, piemēram, saglabājiet noteiktu dizainu tipisku piemēru sarakstu.

Kreisajā pusē esošajā laukā “Pieprasījums” varat izveidot jaunus pieprasījumus un saglabāt tos koka struktūrā. Otrā pogu grupa ir atbildīga par pieprasījumu saraksta pārvaldību. Izmantojot to, varat izveidot, kopēt, dzēst, pārvietot pieprasījumu.

  • Izpildītpieprasījumu– vienkārša izpilde un rezultāti
  • Izpildīt paketi– ļauj skatīt visus starpjautājumus vaicājumu grupā
  • Pagaidu tabulu apskate– ļauj tabulā skatīt rezultātus, ko pagaidu vaicājumi atgriež

Pieprasījuma parametri:

Ļauj iestatīt pašreizējos pieprasījuma parametrus.

Vaicājuma parametru logā ir interesanti:

  • Poga Saņemiet no pieprasījuma automātiski atrod visus parametrus pieprasījumā izstrādātāja ērtībām.
  • Karogs Kopīgi parametri visiem pieprasījumiem– ja tā ir instalēta, tā apstrāde nenotīra parametrus, pārejot no pieprasījuma uz pieprasījumu vispārējā pieprasījumu sarakstā.

Iestatiet parametru ar vērtību sarakstu Tas ir ļoti vienkārši, vienkārši izvēloties parametra vērtību, noklikšķiniet uz vērtības notīrīšanas pogas (krustiņa), sistēma liks jums izvēlēties datu tipu, kur jums jāizvēlas "Vērtību saraksts":

Augšējā panelī ir arī poga vaicājumu konsoles iestatījumu izsaukšanai:

Šeit varat norādīt automātiskās saglabāšanas vaicājumu un vaicājuma izpildes parametrus.

Pieprasījuma teksts tiek ievadīts konsoles pieprasījuma laukā. To var izdarīt, vienkārši ierakstot vaicājuma testu vai zvanot īpašs instruments- vaicājumu dizainers.

1C 8 pieprasījuma konstruktors tiek izsaukts no konteksta izvēlne(peles labā poga), noklikšķinot uz ievades lauka:

Šajā izvēlnē ir arī tādas noderīgas funkcijas kā pieprasījuma notīrīšana vai rindas pārtraukumu (“|”) pievienošana vai pieprasījuma koda saņemšana šajā ērtajā formā:

Pieprasījums = jauns pieprasījums;
Pieprasījums.Teksts = ”
|ATLASES
| Valūtas.Saite
|NO
| Katalogs.Currencies AS Valūtas”;
RequestResult = Request.Execute();

Vaicājumu konsoles apakšējā laukā tiek parādīts vaicājuma rezultāta lauks, tāpēc tika izveidota šī apstrāde:



Arī vaicājumu konsole papildus sarakstam var attēlot datus koka veidā - vaicājumiem, kas satur kopsummas.

Vaicājuma optimizācija

Viens no svarīgākajiem punktiem 1C uzņēmuma 8.3 produktivitātes palielināšanā ir optimizācijapieprasījumus. Šis punkts ir ļoti svarīgs arī tad, kad sertifikācijas nokārtošana. Tālāk mēs runāsim par tipiskiem neoptimālās vaicājumu veiktspējas iemesliem un optimizācijas metodēm.

Atlases virtuālajā tabulā, izmantojot WHERE konstrukciju

Ir nepieciešams lietot filtrus virtuālās tabulas detaļām tikai caur VT parametriem. Nekādā gadījumā neizmantojiet konstrukciju WHERE atlasei virtuālajā tabulā, tā ir rupja kļūda no optimizācijas viedokļa. Atlases gadījumā, izmantojot WHERE, faktiski sistēma saņems VISUS ierakstus un tikai pēc tam atlasīs nepieciešamos.

PAREIZI:

IZVĒLIES

NO
Uzkrājumu reģistrs Savstarpējie norēķini ar organizāciju dalībniekiem (.
,
Organizācija = &Organizācija
UN privātpersona = &indivīds) KĀ bilances notiek savstarpējie norēķini ar organizāciju dalībniekiem

NEPAREIZI:

IZVĒLIES
Savstarpēji norēķini ar Organizāciju dalībniekiem Summa Atlikums
NO
Uzkrājumu reģistrs Savstarpējie norēķini ar organizāciju dalībniekiem (,) KĀ Savstarpējie norēķini ar organizāciju dalībniekiem
KUR
Savstarpēji norēķini ar organizāciju dalībniekiem Bilances Organization = & Organization
UN Savstarpēji norēķini ar Organizāciju dalībniekiem Atlikumi Individuāli = & Individuāli

Sarežģīta tipa lauka vērtības iegūšana, izmantojot punktu

Saņemot kompleksa tipa datus vaicājumā caur punktu, sistēma ar kreiso savienojumu savieno tieši tik daudz tabulu, cik kompleksā tipa laukā ir iespējami veidi.

Piemēram, optimizācijai ir ļoti nevēlami piekļūt reģistra ieraksta laukam – reģistrators. Reģistratoram ir salikts datu tips, starp kuriem ir visi iespējamie dokumentu veidi, kas var ierakstīt datus reģistrā.

NEPAREIZI:

IZVĒLIES
Ieraksta komplekts.Ierakstītājs.Datums,
RecordSet.Quantity
NO
ReģistrētiesAccumulations.ProductsOrganizations AS SetRecords

Tas ir, faktiski šāds vaicājums piekļūs nevis vienai tabulai, bet 22 datu bāzes tabulām (šajā reģistrā ir 21 reģistratūras tips).

PA labi:

IZVĒLIES
IZVĒLE
WHEN ProductsOrg.Registrar LINK Document.Sales of Products and Services
THEN EXPRESS(ProduktuOrganizācija.Reģistrēt AS Dokuments.Preču pārdošanaPakalpojumi).Datums
WHEN GoodsOrg.Registrar LINK Dokuments. Preču pakalpojumu saņemšana
THEN EXPRESS(GoodsOrg.Registrar AS dokuments.Receipt of GoodsServices).Datums
BEIGAS DATUMS,
ProduktiOrg.Daudzums
NO
ReģistrētiesAccumulations.GoodsOrganizations AS PrecesOrganization

Vai arī otrs variants ir šādu informāciju pievienot detaļām, piemēram, mūsu gadījumā, pievienojot datumu.

PA labi:

IZVĒLIES
ProduktiOrganizācijas.Datums,
ProduktiOrganizācijas.Daudzums
NO
Organizāciju preču reģistrs AS Organizāciju preces

Apakšvaicājumi ir savienojuma stāvoklī

Optimizācijai ir nepieņemami izmantot apakšvaicājumus savienošanas apstākļos, tas ievērojami palēnina vaicājumu. Šādos gadījumos ieteicams izmantot VT. Lai izveidotu savienojumu, jums ir jāizmanto tikai metadati un VT objekti, iepriekš tos indeksējot pēc savienojuma laukiem.

NEPAREIZI:

IZVĒLIES…

LEFT JOIN (
SELECT NO RegisterInformation.Limits
KUR…
GRUPĒJUMS PĒC...
) PĒC…

PA labi:

IZVĒLIES…
PUT Limits
NO Informācijas Reģistrs.Limiti
KUR…
GRUPĒJUMS PĒC...
INDEKSS PĒC...;

IZVĒLIES…
NO Dokuments Preču un pakalpojumu pārdošana
LEFT JOIN Limits
PĒC …;

Ierakstu pievienošana virtuālajiem galdiem

Ir situācijas, kad, savienojot virtuālo tabulu ar citiem, sistēma nedarbojas optimāli. Šādā gadījumā, lai optimizētu vaicājuma veiktspēju, varat mēģināt ievietot virtuālo tabulu pagaidu tabulā, neaizmirstot indeksēt apvienotos laukus pagaidu tabulas vaicājumā. Tas ir saistīts ar faktu, ka VT bieži ir ietverti vairākos fiziskās tabulas DBVS rezultātā tiek apkopots apakšvaicājums, lai tos atlasītu, un problēma izrādās līdzīga iepriekšējā punktā.

Izmantojot atlases, kuru pamatā ir neindeksēti lauki

Viena no visbiežāk pieļautajām kļūdām, rakstot vaicājumus, ir nosacījumu izmantošana neindeksētos laukos, tas ir pretrunā vaicājuma optimizācijas noteikumi. DBVS nevar optimāli izpildīt vaicājumu, ja vaicājumā ir ietverta atlase neindeksējamos laukos. Ja paņemat pagaidu tabulu, jums ir jāindeksē arī savienojuma lauki.

Katram nosacījumam ir jābūt piemērotam indeksam. Piemērots indekss ir tāds, kas atbilst šādām prasībām:

  1. Indeksā ir visi nosacījumā uzskaitītie lauki.
  2. Šie lauki atrodas rādītāja pašā sākumā.
  3. Šīs atlases ir secīgas, tas ir, vērtības, kas nav iesaistītas vaicājuma nosacījumā, nav “ieķīlētas” starp tām.

Ja DBVS neatlasa pareizos indeksus, tiks skenēta visa tabula — tas ļoti negatīvi ietekmēs veiktspēju un var novest pie ilgstošas ​​visas ierakstu kopas bloķēšanas.

Loģiskā VAI izmantošana apstākļos

Tas arī viss, šajā rakstā tika apskatīti vaicājuma optimizācijas pamataspekti, kas būtu jāzina katram 1C ekspertam.

Ļoti noderīgs bezmaksas video kurss par vaicājumu izstrādi un optimizāciju, Es ļoti iesaku iesācējiem un citiem!

Pieprasīt . Teksts = "IZVĒLIES | StorageUnits.Link |NO | Directory.usStorageUnits KĀ touseStorageUnits // 1. piemērs: salīdzinājums ar tukšu Būla vērtību: |KUR | StorageUnits.AllowSelectionFromReserveZone = False // 2. piemērs, bet, ja šī Būla vērtība ir definēta, tad labāk ir šādi: // nosacījums negatīvam Būla vērtībai: |KUR | NAV glabāšanas vienības. Atļaut atlasi no rezerves zonas // 3. piemērs. atlase, pamatojoties uz tukša lauka nosacījumu, kura tips ir “konkrēta tipa direktorijs”. |KUR | StorageUnits.ActiveSelectionArea = VALUE(Directory.usSelectionArea.EmptyRef) // 3.a piemērs. atlase, pamatojoties uz tukša lauka nosacījumu, kura tips ir “konkrēta veida dokuments” |KUR | OurInformationRegister.Document = VALUE(Document.OurDocument.EmptyLink) // 3.b piemērs. atlase, pamatojoties uz nosacījumu, ka ir tukšs lauks, kura tips ir "dokumenti" dažādi veidi" (salikts lauks) |KUR | (MūsuInformācijasreģistrs.Dokuments = VALUE(Document.OurDocument1.EmptyLink) | VAI OurInformationRegister.Document = VALUE(Document.OurDocument2.EmptyLink) | VAI... (u.c. — mēs secīgi uzskaitām nosacījumus visiem iespējamajiem šī saliktā lauka veidiem) ) // 4. piemērs vai otrādi, ja jums ir jāizvēlas "virknes" tipa aizpildītā vērtība, tad nosacījums palīdzēs: |KUR | Uzglabāšanas vienības nosaukums > """" // Piemērs 5. Ja jums ir jāatlasa noteikta veida dokumenti ar saliktu datu tipu, piemēram, reģistrā "RunningTasks", resursam "Uzdevums" ir salikts tips, starp kura vērtībām iespējams dokuments "Atlase". |KUR | EXPRESS(Informācijas reģistrsIzpildītie uzdevumi.Uzdevums AS Document.Selection) LINK Dokuments.Atlase // 5.a piemērs. Vēl viens līdzīgs piemērs, kad jāizvēlas noteikta veida dokumenti | IZVĒLE | KAD IZTEIKT (ag Dokumentu sarakste. DocumentBU AS dokuments. Preču un pakalpojumu saņemšana) LINK Preču un pakalpojumu saņemšana | TAD ""Preču un pakalpojumu saņemšana"" | KAD IZTEIKT (ag. Dokumentu sarakste. DocumentBU AS dokuments. Preču un pakalpojumu pārdošana) LINK Preču un pakalpojumu pārdošana | TADĒJ ""Preču un pakalpojumu pārdošana"" | CITS """" | BEIGT KĀ dokumenta skats // 6. piemērs. atlase pēc nenoteiktas vērtības nosacījuma: |KUR | SavedSettings.User = NEDEFINĒTS // Piemērs 7. atlase pēc kustības veida uzkrāšanas reģistra "Ienākums", "Izdevumi" - līdzīgi): |KUR | RegProductsInRetail.MovementType = VALUE(MovementTypeAccumulation.Incoming) // Piemērs 8. Kā pieprasījumā norādīt, ka pieprasījums nav jāizpilda (piemēram, programmatiski, atkarībā no kāda nosacījuma, jāatgriež tukšs pieprasījuma rezultāts - Request.Text = StrReplace(Request.Text, "KUR Doc.Link = &DocumentLink" , "KUR IR MELI");). Lai to izdarītu, vienkārši pievienojiet nosacījumu “Kur ir nepatiess”. Starp citu, neatkarīgi no izlasē pieprasīto datu apjoma, šāds pieprasījums tiks izpildīts uzreiz. |KUR IR MELI // 9. piemērs. Pārbaude, vai vaicājuma rezultāts satur datus: Ja nēPieprasīt.Izpildīt().Tukšs() Tad // Piemērs 10. atlase, pamatojoties uz tukšu datumu: |KUR | tbStrings.CancellationDate = DATETIME(1, 1, 1)

Es nolēmu sniegt savu ieguldījumu un aprakstīt tās valodas iezīmes, kuras netika apspriestas iepriekš minētajos rakstos. Raksts ir paredzēts iesācējiem izstrādātājiem.

1. “IZ” dizains.

Lai iegūtu datus no datu bāzes, nemaz nav nepieciešams izmantot konstrukciju “NO”.
Piemērs: Mums ir jāatlasa visa informācija par bankām no banku kataloga.
Pieprasīt:

ATLASĪT direktoriju.Bankas.*

Atlasa visus laukus no direktorija Bankas. Un ir līdzīgs pieprasījumam:

SELECT Banks.* NO Directory.Banks AS Bankas

2. Datu pasūtīšana pēc atsauces lauka

Kad vaicājuma dati ir jāsakārto pēc primitīviem veidiem: "String", "Numurs", "Datums" utt., tad viss tiek atrisināts, izmantojot konstrukciju "ORDER BY", ja nepieciešams sakārtot datus pēc atsauces lauka? Atsauces lauks ir saite, unikāls identifikators, t.i. Aptuveni runājot, dažas patvaļīgas rakstzīmju kopas un parastā secība var radīt rezultātu, kas nav pilnībā gaidīts. Lai pasūtītu atsauces laukus, tiek izmantota konstrukcija "AUTO PASŪTĪJUMS". Lai to izdarītu, vispirms ir jāsakārto dati tieši pēc atsauces veida, izmantojot konstrukciju "ORDER BY" un pēc tam konstrukciju "AUTO ORDER".

Šajā gadījumā dokumentiem pasūtīšana notiks secībā "Datums->Numurs", uzziņu grāmatām - "Galvenajā skatā". Ja kārtošana nenotiek pēc atsauces laukiem, tad nav ieteicams izmantot konstrukciju "AUTO PASŪTĪJUMS".

Dažos gadījumos konstrukcija "AUTO PASŪTĪJUMS" var palēnināt atlases procesu. Tāpat varat pārrakstīt bez automātiskas dokumentu pasūtīšanas:

3.Atsauces veida teksta attēlojuma iegūšana. "PREZENTĀCIJA" dizains.

Ja jums ir jāparāda atsauces veida lauks, piemēram, lauks "Banka", kas ir saite uz direktorija "Bankas" elementu, jums ir jāsaprot, ka tad, kad tiek parādīts šis lauks, apakšvaicājums Katalogs "Bankas" tiks automātiski izpildīts, lai iegūtu direktoriju. Tas palēninās datu izvadi. Lai no tā izvairītos, pieprasījumā ir jāizmanto konstrukcija "PREZENTĀCIJA", lai uzreiz iegūtu objekta atveidojumu un pēc tam parādītu to apskatei.

Datu kompozīcijas sistēmā šis mehānisms tiek izmantots pēc noklusējuma, bet, veidojot izkārtojumus šūnās, jānorāda atsauces lauka attēlojums, un, piemēram, transkriptā jāievieto pati saite.

4. Nosacījums datu paraugu ņemšanai saskaņā ar veidni.

Piemēram, jums ir jāsaņem mobilie tālruņi tipa darbinieki (8 -123- 456-78-912). Lai to izdarītu, pieprasījumā ir jāiestata šāds nosacījums:

IZVĒLĒTIES Darbinieks.Vārds, Darbinieks.Tālrunis AS Tālrunis NO Kataloga.Darbinieki AS Darbinieki KUR Tālrunis LIKE "_-___-___-__-__"

Rakstzīme "_" ir pakalpojuma rakstzīme un aizstāj jebkuru rakstzīmi.

5. Kopējo summu un grupējumu vienlaicīga izmantošana.


Kopsummas bieži tiek izmantotas kopā ar grupējumiem, šajā gadījumā kopsummas var nebūt norādītas.

SELECT Pakalpojumu sniegšana.Organizācija AS Organizācija, Pakalpojumu sniegšana.Nomenklatūra AS Nomenklatūra, SUM(Pakalpojumu sniegšana.Dokumenta apjoms) AS Dokumenta summa NO dokumenta.Pakalpojumu sniegšana AS Pakalpojumu sniegšana GRUPA PĒC pakalpojumu sniegšanas.Organizācija, nodrošināšana. of Services.Nomenklatūras REZULTĀTI VISPĀRĪGI, Organizācija, nomenklatūra

Šajā gadījumā vaicājums atgriezīs gandrīz tādu pašu kā šāds vaicājums:

SELECT Pakalpojumu sniegšana.Organizācija AS Organizācija, Pakalpojumu sniegšana.Nomenklatūra AS Nomenklatūra,Pakalpojumu sniegšana.Dokumenta apjoms AS Dokumenta apjoms NO dokumenta.Pakalpojumu sniegšana AS Pakalpojumu sniegšana REZULTĀTI SUMMA (Dokumenta apjoms) PA VISPĀRĒJIEM, Organizācija, Nomenklatūra

Tikai pirmajā vaicājumā tiks sakļauti ieraksti ar tādu pašu nomenklatūru.

6. Atsauces atcelšana uz laukiem.

Atsauci uz laukiem, izmantojot punktu, sauc par atsauces lauka atsaukšanas darbību. Piemēram Maksājums.Organizācija.Administratīvā vienība. Šajā gadījumā dokumenta "Maksājums" atsauces laukā "Organizācija" tas attiecas uz citu tabulu "Organizācijas", kurā tiks iegūta atribūta "Administratīvā vienība" vērtība. Ir svarīgi saprast, ka, piekļūstot laukiem, izmantojot punktu, platforma netieši izveido apakšvaicājumu un pievienojas šīm tabulām.

Pieprasīt:

Var attēlot kā:

IZVĒLĒTIES Maksājums.Saite, Maksājums.Organizācija, Maksājums.Organizācija, Organizācijas. Administratīvā vienība NO Document.Payment AS Maksājums PA kreisi PIEVIENOTIES Directory.Organizations AS Organizations Programmatūra Payment.Organization = Organizations.Link

Atsaucot atsauces uz saliktā tipa atsauces laukiem, sistēma mēģina izveidot netiešus savienojumus ar visām tabulām, kas ir daļa no šī lauka veida. Šajā gadījumā vaicājums nebūs optimāls Ja ir skaidri zināms, kāda veida lauks tas ir, ir nepieciešams ierobežot šādus laukus pēc veida ar konstrukciju EXPRESS().

Piemēram, ir uzkrājumu reģistrs “Nesadalītie maksājumi”, kurā vairāki dokumenti var darboties kā reģistrators. Šajā gadījumā nav pareizi iegūt reģistratūras rekvizītu vērtības šādā veidā:

ATLASĪT UnallocatedPayments.Register.Date, ..... FROM RegisterAccumulation.UnallocatedPayments AS UnallocatedPayments

jums jāierobežo saliktā lauka veids ar reģistrētāju:

SELECT EXPRESS(UnallocatedPayments.Reģistrēties kā Dokuments.Maksājums).Datums, ..... NO reģistraUzkrāšana.UnallocatedPayments AS UnallocatedPayments

7. Būvniecība "KUR"

Ar kreiso divu tabulu savienojumu, uzliekot labajai tabulai nosacījumu “WHERE”, mēs iegūsim rezultātu, kas ir līdzīgs rezultātam ar tabulu iekšējo savienojumu.

Piemērs. Nepieciešams atlasīt visus Klientus no Klientu kataloga un tiem klientiem, kuriem ir maksājuma dokuments ar atribūta vērtību "Organizācija" = &Organizācija, attēlot dokumentu "Maksājums", tiem, kuriem nav, nerādīt.

Vaicājuma rezultāts atgriezīs ierakstus tikai tiem klientiem, kuriem parametrā bija norādīts maksājums pēc organizācijas, un filtrēs citus klientus. Tāpēc vispirms ir jāsaņem visi maksājumi par “šādu un tādu” organizāciju pagaidu tabulā un pēc tam jāsavieno ar direktoriju “Klienti”, izmantojot kreiso savienojumu.

IZVĒLĒTIES Payment.Link AS Maksājums, Maksājums.Akcionārs AS Klients PLACE to Payments FROM Document.Payment AS Payment WHERE Payment.Branch = &Branch; ////////////////////////////////////////////////// //////////////////////////// SELECT Clients.Link AS Client, ISNULL(tPayment.Payment, "") AS Maksājums NO direktorija .Clients AS Klienti LEFT SAVIENOJUMS topayments AS topayments PROGRAMMATŪRA Klienti.Saite = topayments.Client

Šo nosacījumu var apiet citā veidā. Ir nepieciešams uzlikt nosacījumu "WHERE" tieši attiecībām starp abām tabulām. Piemērs:

IZVĒLĒTIES Clients.Link, Payment.Link NO Directory.US_Subscribers AS US_Subscribers LEFT CONTECTION Document.Payment AS Maksājumu programmatūra (Clients.Link = Maksājums.Klients UN Maksājums.Klients.Nosaukums LIKE "Cukura pakete") GROUP BY Clients.Link, Payment. Saite

8. Pievienojas ar ligzdotajām un virtuālajām tabulām

Ligzdotie vaicājumi bieži vien ir nepieciešams izgūt datus, pamatojoties uz kādu nosacījumu. Ja pēc tam tās izmantojat kopā ar citām tabulām, tas var būtiski palēnināt vaicājuma izpildi.

Piemēram, dažiem klientiem mums ir jāsaņem bilances summa pašreizējā datumā.

SELECT UnallocatedPaymentsBalances.Customer, UnallocatedPaymentsBalances.AmountBalance FROM (SELECT Clients.Link AS Link FROM Directory.Clients AS Clients WHERE Clients.Link IN(&Clients)) AS NestedQuery LEFT JOIN RegisterAccumulations.AssociatedPayments.UnallocatedPayments = UnallocatedPaymentsBalances. Klients

Izpildot šādu vaicājumu, DBVS optimizētājs var pieļaut kļūdas, izvēloties plānu, kas novedīs pie neoptimālas vaicājuma izpildes. Savienojot divas tabulas, DBVS optimizētājs izvēlas tabulu savienošanas algoritmu, pamatojoties uz ierakstu skaitu abās tabulās. Ja ir ligzdots vaicājums, ir ārkārtīgi grūti noteikt ierakstu skaitu, ko ligzdotais vaicājums atgriezīs. Tāpēc vienmēr vajadzētu izmantot pagaidu tabulas, nevis ligzdotus vaicājumus. Tātad pārrakstīsim pieprasījumu.

ATLASĪT Clients.Link AS Saite VIETA tKlientus NO Directory.Clients AS Clients WHERE
Klienti.Saite B (&Klienti) ; ////////////////////////////////////////////////// //////////////////////////// ATLASĪT tClients.Link, UnallocatedPaymentsRemains.AmountRemaining, FROM tClients AS tClients LEFT JOIN RegisterUzrājumi.Nepiešķirtie maksājumi.Atlikumi (, Klients IN (SELECT tClients. Link FROM tClients)) AS UnallocatedPaymentsBalances tClients.Link = UnallocatedPaymentsBalces.Clients

Tādā gadījumā optimizētājs varēs noteikt, cik ierakstu izmanto pagaidu tabula tClients un varēs izvēlēties optimālo algoritmu tabulu savienošanai.

Virtuālie galdi , ļauj iegūt gandrīz gatavus datus par lielāko daļu lietoto uzdevumu (pirmā daļa, pēdējā daļa, atlikumi, apgrozījums, atlikumi un apgrozījums). Atslēgvārdsšeit ir virtuāli. Šīs tabulas nav fiziskas, bet tās sastāda sistēma lidojuma laikā, t.i. Saņemot datus no virtuālajām tabulām, sistēma apkopo datus no gala reģistra tabulām, komplektē, grupē un izsniedz lietotājam.

Tie. Pieslēdzoties virtuālajai tabulai, tiek izveidots savienojums ar apakšvaicājumu. Šajā gadījumā DBVS optimizētājs var izvēlēties arī neoptimālu savienojuma plānu. Ja vaicājums netiek ģenerēts pietiekami ātri un vaicājumā tiek izmantoti savienojumi virtuālajās tabulās, ieteicams pārvietot piekļuvi virtuālajām tabulām uz pagaidu tabulu un pēc tam izveidot savienojumu starp divām pagaidu tabulām. Pārrakstīsim iepriekšējo pieprasījumu.

IZVĒLĒTIES Clients.Link AS Saite VIETA tKlienti FROM Directory.Clients AS Clients INDEX BY Link WHERE
Klienti.Saite B (&Klienti) ; ////////////////////////////////////////////////// /////////////////////////// SELECT UnallocatedPayments.AmountBalance, UnallocatedPayments.Client AS Client PLACE atlikumi NO RegisterAccumulations.UnallocatedPayments.Balces(, Client B () SELECT tClients Saite FROM tClients)) AS UnallocatedPaymentsBalances; ////////////////////////////////////////////////// //////////////////////////// ATLASĪT tClients.Link, toRemainders.AmountRemaining AS SummaRemaining FROM tClients AS tClients LEFT JOIN to Remaining AS Remainder PO tClients.Link = tAtlikušais.Klients

9.Pieprasījuma rezultāta pārbaude.

Vaicājuma rezultāts var būt tukšs, lai pārbaudītu, vai nav tukšas vērtības, izmantojiet šādu konstrukciju:

ResRequest = Request.Execute(); Ja resQuery.Empty() then Return; endIf;

Metode Tukšs () jāizmanto pirms metodēm Izvēlēties () vai Izlādēt (), jo kolekcijas izgūšana prasa laiku.

Nevienam nav atklājums, ka ir ārkārtīgi nevēlami izmantot vaicājumus ciklā. Tas var būtiski ietekmēt konkrētas funkcijas darbības laiku. Ļoti vēlams saņemt visus pieprasījumā iekļautos datus un pēc tam apstrādāt datus ciklā. Bet dažreiz ir gadījumi, kad kļūst neiespējami pārvietot pieprasījumu ārpus cilpas. Tādā gadījumā optimizācijas nolūkos vaicājuma izveidi var pārvietot ārpus cilpas un ciklā aizstāt nepieciešamos parametrus un izpildīt vaicājumu.

Pieprasījums = jauns pieprasījums; Query.Text = "SELECT | Clients.Link, | Clients.BirthDate | FROM | Directory.Clients AS Klienti | WHERE | Clients.Link = &Klients"; Katrai rindai FROM TableClients Loop Query.SetParameter("Klients", Klients);

QueryResult = Query.Execute().Select(); EndCycle;

Tas pasargās sistēmu no sintakses pieprasījuma pārbaudes cilpā.

11. Būvniecība "HAVING".

IZVĒLĒTIES Maksājums.Klients, SUMMA(Maksājums.Summa) KĀ Summa NO dokumenta.Maksājums KĀ Maksājums WHERE MONTH(Maksājums.Datums) = 9 GRUPĀ PĒC maksājuma.Klientam IR SUMMA(Maksājums.Summa) > 13000

Lai to izdarītu, konstruktorā dodieties uz cilni “Nosacījumi”, pievienojiet jaunu nosacījumu un atzīmējiet izvēles rūtiņu “Pielāgots”. Tad vienkārši rakstiet Summa(Maksājums.Summa) > 13000


12. NULL vērtība

Es šeit neaprakstīšu trīsvērtību loģikas principus datu bāzē ir daudz rakstu par šo tēmu. Īsumā par to, kā NULL var ietekmēt vaicājuma rezultātu. Vērtība NULL faktiski nav vērtība, un fakts, ka vērtība nav definēta, nav zināms. Tāpēc jebkura darbība ar NULL atgriež NULL neatkarīgi no tā, vai tā ir saskaitīšana, atņemšana, dalīšana vai salīdzināšana. NULL vērtību nevar salīdzināt ar NULL vērtību, jo mēs nezinām, ko salīdzināt. Tie. abi šie salīdzinājumi ir: NULL = NULL, NULL<>NULL nav patiess vai nepatiess, tas nav zināms.

Apskatīsim piemēru.

Tiem klientiem, kuriem nav maksājumu, mums ir jāattēlo lauks “Parakstīties” ar vērtību “Nav maksājumu”. Turklāt mēs noteikti zinām, ka mums ir šādi klienti. Un, lai atspoguļotu iepriekš rakstītā būtību, darīsim to šādi.

IZVĒLĒTIES "Bez maksājumiem" AS Atribūts, NULL AS Dokumentēt PLACE maksājumus; ////////////////////////////////////////////////// /////////////////////////// IZVĒLĒTIES Clients.Link AS Klients, Payment.Link KĀ Maksājums IEVIETOT tClientPayment NO Directory.Clients AS Klienti LEFT SAVIENOJUMA dokuments. Payment AS Payment Software Clients.Link = Maksājums.Akcionārs; ////////////////////////////////////////////////// ////////////////////////// IZVĒLĒTIES tClientPayment.Client FROM tClientPayment AS tClientPayment INTERNAL JOIN tPayment AS tPay BY tClientPayment.Payment = Document

Pievērsiet uzmanību otrajai pagaidu tabulai tClientPayment. Ar kreiso savienojumu es atlasu visus klientus un visus maksājumus šiem klientiem. Tiem klientiem, kuriem nav maksājumu, lauks “Maksājums” būs NULL. Sekojot loģikai, pirmajā pagaidu tabulā “tPayments” iezīmēju 2 laukus, vienu no tiem NULL, otrajā rindā “Nav maksājumu”. Trešajā tabulā pievienojos iekšējais savienojums tabulas "tClientPayment" un "tPayment" laukiem "Maksājums" un "Dokuments". Mēs zinām, ka pirmajā tabulā lauks “Dokuments” ir NULL, bet otrajā tabulā tie, kuriem laukā “Maksājums” nav maksājumu, arī ir NULL. Ko šāda saikne mums atgriezīs? Bet tas neko neatgriezīs. Tā kā salīdzinājums NULL = NULL nenovērtē uz True.

Lai pieprasījums atgrieztu gaidīto rezultātu, pārrakstīsim to:

ATLASĪT "Nav maksājumu" AS atribūts, VALUE(Dokuments.Maksājums.EmptyLink) AS Dokuments PLACE to Payments; ////////////////////////////////////////////////// //////////////////////////// SELECT Clients.Link AS Client, ISNULL(Maksājums.Saite, VALUE(Dokuments.Maksājums.EmptyLink )) KĀ Maksājums PUT tClientPayment NO Directory.Clients AS Clients LEFT CONCECTION Document.Payment AS Maksājums BY Clients.Link = Maksājums.Akcionārs; ////////////////////////////////////////////////// ////////////////////////// IZVĒLĒTIES tClientPayment.Client FROM tClientPayment AS tClientPayment INTERNAL JOIN tPayment AS tPay BY tClientPayment.Payment = Document

Tagad otrajā pagaidu tabulā esam norādījuši, ka, ja lauks “Maksājums” ir NULL, tad šis lauks = tukša saite uz maksājuma dokumentu. Pirmajā tabulā mēs arī aizstājām NULL ar tukšu atsauci. Tagad savienojums ietver laukus, kas nav NULL, un pieprasījums atgriezīs gaidīto rezultātu.

Visi rakstā ietvertie pieprasījumi atspoguļo situācijas, kuras es vēlētos apsvērt, un nekas vairāk. PAR Tie var nebūt maldi vai neoptimāli, galvenais, lai tie atspoguļo piemēra būtību.

13. Nedokumentēta dizaina "IZVĒLE KAD...TAD...BEIGAS" iezīme.

Gadījumā, ja pieprasījumā ir nepieciešams aprakstīt konstrukciju “Nosacījumi”, mēs izmantojam standarta sintaksi:

ATLASĪT ATLASI, KAD Users.Name = "Vasya Pupkin" TAD "Mūsu iecienītākais darbinieks" CITI "Mēs to nezinām" END AS 1. lauks NO direktorija.Lietotāji KĀ lietotāji

Bet ko darīt, ja, piemēram, pieprasījumā ir jāiegūst mēneša nosaukums? Milzīgas konstrukcijas ierakstīšana pieprasījumā ir neglīta un laikietilpīga, tāpēc šī rakstīšanas forma var mums palīdzēt:

SELECT MONTH(US_CalculationConsumption_TurnoverSchedule.CalculationPeriod) WHEN 1 THEN "janvāris" WHEN 2 THEN "februāris" WHEN 3 THEN "Marts" WHEN 4 THEN "Jūnijs" WHEN 5 THEN "Jūnijs" WHEN "Jūnijs" THEN "7. THEN"6 8 TAD "Augusts" KAD 9 TAD "Septembris" KAD 10 TAD "oktobris" KAD 11 TAD "novembris" KAD 12 TAD "decembris" BEIGAS KĀ MĒNESI

Tagad dizains izskatās mazāk apgrūtinošs un ir viegli saprotams.

14. Pakešu vaicājuma izpilde.


Lai nevairotos pieprasījumus, varat izveidot vienu lielu pieprasījumu, sadalīt to paketēs un strādāt ar to.
Piemēram, man ir jāiegūst šādi lauki no direktorija "Lietotāji": "Dzimšanas datums" un katra lietotāja pieejamās lomas. augšupielādējiet to dažādās veidlapas tabulas daļās. Protams, varat to izdarīt vienā pieprasījumā, tad jums būs jāatkārto ieraksti vai tie jāsakļauj, vai arī varat rīkoties šādi:

SELECT Lietotāji.Saite AS Pilns vārds, Lietotāji.Dzimšanas datums, Lietotāji.Loma IEVIECIET vtLietotājus NO Kataloga.Lietotāji AS Lietotāji; ////////////////////////////////////////////////// /////////////////////////// SELECT tueUsers.Pilns vārds, tueUsers.Dzimšanas datums FROM tueUsers AS tueUsers GROUP BY tueUsers.full name, tueUsers Dzimšanas datums; ////////////////////////////////////////////////// ////////////////////////// SELECT wUsers.Full Name, wUsers.Role FROM wUsers AS wUsers GROUP BY wUsers.Full Name, wUsers dzimšanas

tPackage = Request.ExecutePackage();

TP_BirthDate = tPackage.Upload();
TP_Roles = tPackage.Unload();

Kā redzam, vaicājumu var izpildīt pakešu veidā, un rezultātu var apstrādāt kā masīvu. Dažos gadījumos tas ir ļoti ērti.

15. Nosacījumi partijas pieprasījumā

Piemēram, mums ir pakešu pieprasījums, kur vispirms mēs iegūstam laukus: “Vārds, dzimšanas datums, kods” no direktorija “Lietotāji” un vēlamies iegūt ierakstus ar nosacījumiem šiem laukiem no direktorija “Privātpersonas”.

SELECT Users.Individual.Name AS Name, Users.Individual.Date of Birth AS Dzimšanas datums, Users.Individual.Code AS Kods VIETA vtLietotāji NO Kataloga.Lietotāji AS Lietotāji; ////////////////////////////////////////////////// ///////////////////////// SELECT Individuals FROM Individuals AS Individuals

Jūs varat izvirzīt šādus nosacījumus:

WHERE Individuals.Code IN (SELECT tueUsers.Code FROM tueUsers) UN Individuals.Name IN (SELECT tueUsers.Code FROM tueUsers) UN Individuals.BirthDate IN (SELECT tueUsers.DateBirth FROM tueUsers)

Un jūs varat to izdarīt šādi:

WHERE (Individuals.Code, Individuals.Name, Individuals.Date of Birth) IN (SELECT tueUsers.Code, tueUsers.Name, tueUsers.Date of Birth of FROM tueUsers)

Turklāt ir nepieciešams uzturēt kārtību.

16. Vaicājumu veidotāja izsaukšana, lai noskaidrotu “stāvokli” pakešu pieprasījumā

Kad ir nepieciešams uzlikt nosacījumu, kā iepriekš minētajā piemērā, varat aizmirst, kā šis vai cits lauks tiek saukts virtuālajā tabulā.
Piemēram, laukā "Dzimšanas datums" ir jāievieto nosacījums, un virtuālajā tabulā šis lauks tiek saukts par "Parādnieka dzimšanas datums", un, ja aizmirstat vārdu, jums būs jāiziet no nosacījuma rediģēšanas bez saglabājot un apskatīt lauka nosaukumu. Lai no tā izvairītos, varat izmantot šādu paņēmienu.

Pēc konstrukcijas “B” ir jāliek iekavas un starp iekavām jāatstāj tukša vieta (atstarpe), jāizvēlas šī vieta un jāizsauc vaicājuma konstruktors. Noformētājam būs piekļuve visām pakešu vaicājuma tabulām. Tehnika darbojas gan virtuālo reģistru tabulās, gan cilnē “Nosacījumi”. Pēdējā gadījumā jums ir jāatzīmē lodziņš "P (patvaļīgs nosacījums)" un jāievada rediģēšanas režīms "F4".

Vaicājumi bieži tika izdomāti lidojuma laikā, un tie vienkārši kalpo, lai ilustrētu “metodes”, kuras es apsvēru.

Es gribēju apskatīt indeksu izmantošanu vaicājumos, bet šī ir ļoti plaša tēma. Es to ievietošu atsevišķā rakstā vai pievienošu šeit vēlāk.

upd1. Punkti 11,12
upd2. Punkti 13,14,15,16

Izmantotā literatūra:
Vaicājuma valoda "1C:Enterprise 8" - E.Yu. Hrustaļeva
Profesionālā attīstība 1C:Enterprise 8 sistēmā."