Mainiet rindu 1s pieprasījumā. Funkcijas apakšstring() izpildes iezīme

Tagad apskatīsim pārējo.

Funkcijas darbam ar virknēm 1C vaicājumos

Ir maz funkciju un operatoru darbam ar virkņu datiem 1C vaicājumos.

Pirmkārt, vaicājumos var pievienot virknes. Lai to izdarītu, izmantojiet operatoru “+”:

Pieprasīt. Teksts = "ATLASĪT
" "Rinda: " " + Source.Name
;

Otrkārt, jūs varat izvēlēties daļu no līnijas. Lai to izdarītu, izmantojiet funkciju SUBSTRUKCIJA. Funkcija ir līdzīga iebūvētajai 1C valodai. Tam ir trīs parametri:

  1. Avota virkne.
  2. Rakstzīmes numurs, ar kuru jāsākas atlasītajai rindai.
  3. Rakstzīmju skaits.

Pieprasīt. Teksts= "IZVĒLIES
SUBSTRING("
"Rinda:" ", 4, 3) Rezultātā";

// Rezultāts: labi Funkcija

ISNULL NULL ir īpašs datu veids platformā 1C: Enterprise. Viņš ir vienīgais iespējamā nozīme

šis tips. NULL vaicājumos var parādīties vairākos gadījumos: savienojot vaicājuma avotus, ja nevienā no tabulām netika atrasta atbilstoša vērtība; piekļūstot neesoša objekta detaļām; ja vaicājuma lauku sarakstā tika norādīts NULL (piemēram, apvienojot atlases rezultātus no vairākām tabulām) utt. Tā kā NULL nav ne nulle, ne tukša virkne, ne pat vērtība nenoteikts, bieži vien ir lietderīgi to aizstāt ar kādu noderīgāku datu tipu. Šim nolūkam funkcija ir paredzēta.

ISNULL.

  1. Tam ir divi parametri:
  2. Vērtība tiek pārbaudīta.

Pieprasīt. Teksts= "IZVĒLIES
Vērtība, ar ko aizstāt pirmo parametru, ja izrādās, ka tā ir NULL.
; ISNULL(avots.atlikušais, 0) AS atlikums"
// Ja pieprasījuma rezultāts ir lauka atlikums = NULL,

// tad tas tiks aizstāts ar 0, un ar to var veikt matemātiskas darbības Funkcijas IZPILDE Un

IEVADSSAITES Šīs funkcijas ir paredzētas, lai iegūtu virknes attēlojumus dažādas nozīmes Funkcijas. Tas ir, tie pārvērš atsauces, skaitļus, Būla vērtības utt. vienkāršā tekstā. Atšķirība starp tām ir funkcija Un pārvērš visus datu tipus tekstā (virknē) un funkciju

Pieprasīt. Teksts= "IZVĒLIES
- tikai saites un atgriež atlikušās vērtības tādas, kādas tās ir, nevis konvertētas.
REPRENTĀCIJA (TRUE) KĀ Būla,
ATZĪMĒJUMS (4) KĀ numurs,
REPREZENTĀCIJA (Source.Link) AS saite,
;
REPREZENTĀCIJA(DATETIME(2016,10,07)) Kā datums" // Būla = "Jā", Skaitlis = "4", Saite = "Patērējams dokuments kases pasūtījums
Nē... no..."

Pieprasīt. Teksts= "IZVĒLIES
// Datums = "07.10.2016 0:00:00"
REPREZENTĀCIJAS ATSAUCES (TRUE) KĀ Būla,
PRESENTINGLINK(Source.Link) AS saite,
PĀRSTĀVĪBAS ATSAUCES(DATETIME(2016,10,07)) AS Datums"
;
// Būla = TRUE, Number = 4, Link = "Dokumentēt Kases ieņēmumu orderi Nr.... no..."
// Datums=07.10.2016 0:00:00

// tad tas tiks aizstāts ar 0, un ar to var veikt matemātiskas darbības VEIDS IZPILDE TIPA VĒRTĪBAS

// Rezultāts: labi VEIDS atgriež platformas datu tipu 1C: Enterprise.

Pieprasīt. Teksts= "IZVĒLIES
TYPE (numurs)
TYPE (virkne),
VEIDS (dokuments. Izdevumu skaidras naudas pārvedums)"
;

// Rezultāts: labi TIPA VĒRTĪBAS atgriež tam nodotās vērtības veidu.

Pieprasīt. Teksts= "IZVĒLIES
VĒRTĪBU VEIDS (5) AS Skaitlis,
TYPE ("
"Līnija" ") AS virkne,
TIPS (Source.Link) AS Atsauce
No Directory.Source AS Source"
;
//Number=Number, String=String, Directory = DirectoryLink.Source

Šīs funkcijas ir ērti lietojamas, piemēram, ja nepieciešams noskaidrot, vai pieprasījumā saņemtais lauks ir kāda veida vērtība. Piemēram, darījuma partneru kontaktinformāciju iegūsim no ContactInformation informācijas reģistra (ne tikai darījuma partneru, bet arī organizāciju kontaktus, privātpersonām utt.):

Pieprasīt. Teksts= "IZVĒLIES

NO

KUR
VĒRTĪBU VEIDS(Kontaktinformācija.Objekts) = VEIDS(Katalogs.Darījuma partneri)"
;

// Rezultāts: labi NOZĪME

// Rezultāts: labi Nozīmeļauj izmantot 1C konfigurācijas objektus tieši pieprasījumā, neizmantojot .

Iepriekšējam piemēram pievienosim vēl vienu nosacījumu. Jums jāiegūst tikai darījumu partneru tālruņu numuri.

Pieprasīt. Teksts= "IZVĒLIES
Kontaktinformācija.Ievads
NO
Informācijas reģistrs Kontaktinformācija KĀ Kontaktinformācija
KUR
VĒRTĪBU VEIDS(Kontaktinformācija.Objekts) = VEIDS(Katalogs.Darījuma partneri)
UN ContactInfo.Type = VALUE(Enum.ContactInfoTypes.Phone)"
;

Jāņem vērā, ka šo funkciju var izmantot tikai ar iepriekš definētām vērtībām, t.i. ar vērtībām, kurām var piekļūt tieši no konfiguratora. Tas ir, funkcija NOZĪME nevar izmantot ar lietotāju izveidotiem direktoriju elementiem, bet var darboties ar uzskaitījumiem, ar iepriekš definētiem direktorija elementiem, ar vērtībām EmptyLink.

Operators SAITE

Operators SAITE ir paredzēts, lai pārbaudītu ar pieprasījumu atgrieztās vērtības, lai noskaidrotu, vai tās pieder noteiktam atsauces veidam. To pašu uzdevumu var veikt, izmantojot funkcijas VEIDS IZPILDE TIPA VĒRTĪBAS(kuriem ir plašāka darbības joma un kas tika apspriesti iepriekš).

Piemēram, izvēles uzdevums kontaktinformāciju darījumu partnerus varētu atrisināt šādi:

Pieprasīt. Teksts= "IZVĒLIES
Kontaktinformācija.Ievads
NO
Informācijas reģistrs Kontaktinformācija KĀ Kontaktinformācija
KUR
ContactInformation.Object LINK Directory.Counterparties"
;

Operators EXPRESS

Operators EXPRESS izmanto 1C vaicājumos divos gadījumos:

  • kad jāmaina primitīvā tipa īpašības;
  • kad jums ir jāpārvērš lauks ar saliktu datu tipu par lauku ar vienu tipu.

Primitīvie datu veidi ietver: numurs, virkne, datums, Būla vērtība. Dažiem no šiem datu veidiem ir papildu īpašības. Tips Numurs ir garums un precizitāte, veids Līnija - garums vai neierobežots.

Operators EXPRESSļauj mainīt nevis datu tipu, bet gan papildu raksturlielumus. Piemēram, viņš var pārvērst neierobežota garuma virkni par virkni ar ierobežotu garumu. Tas var būt noderīgi, ja nepieciešams grupēt vaicājuma rezultātus pēc šāda lauka. Jūs nevarat grupēt pēc laukiem ar neierobežotu garumu, tāpēc mēs to pārvēršam par virkni, kuras garums ir 200 rakstzīmes.

Pieprasīt. Teksts= "IZVĒLIES
DAUDZUMS (ATŠĶIRĪGA Preču un pakalpojumu saņemšana. Saite) AS Saite
NO
Preču un pakalpojumu saņemšanas dokuments KĀ Preču un pakalpojumu saņemšana
GROUP BY
EXPRESS(Preču un pakalpojumu saņemšana. Komentēt KĀ RINDA (200)"
;

Dažos gadījumos vaicājumus laukiem ar saliktu datu tipu platforma 1C var neapstrādāt optimāli. Tas rada ilgāku vaicājuma laiku, tāpēc var būt noderīgi iepriekš pārveidot salikto tipu par vienu veidu.

Pieprasīt. Teksts= "IZVĒLIES
EXPRESS (Preču kustība, apgrozījums. Pasūtījums kā dokuments. Klienta pasūtījums). Datums AS Pasūtījuma datums,
Preču apriteApgrozījums. Nomenklatūra
NO
ReģistrētiesUzrājumi.Preču kustība.Apgrozījums AS Preču kustībaApgrozījums
KUR
Preču kustībaApgrozījums.Pasūtījums LINK Dokuments.Klienta pasūtījums"
;

Operatori IZVĒLE IZPILDE IR NULL

Operators IZVĒLE līdzīgi operatoram JA iebūvētajā 1C valodā, taču tam ir nedaudz samazināta funkcionalitāte.

Teiksim, vēlamies saņemt kontaktinformāciju no ContactInformation informācijas reģistra un vienlaikus atsevišķā pieprasījuma laukā norādīt, vai tā pieder darījuma partnerim vai fiziskai personai.

Pieprasīt. Teksts= "IZVĒLIES
Kontaktinformācija. Ievads,
IZVĒLE
KAD VĒRTĪBAS VEIDS(Kontaktinformācija.Objekts) = VEIDS(Katalogs.Darījuma partneri)
TAD "
Darījuma partneris "
CITA IZVĒLE
KAD VĒRTĪBAS VEIDS(Kontaktinformācija.Objekts) = VEIDS(Katalogs.Privātpersonas)
TAD "
Individuāls"
Cits "Kāds cits" "
BEIGAS
BEIGAS KĀ ĪPAŠNIEKS
NO
Informācijas reģistrs Kontaktinformācija AS Kontaktinformācija"
;

Kā redzams no piemēra, dizainā IZVĒLE aiz vārda vienmēr ir nosacījums KAD; vērtība tiek lietota, ja nosacījums ir patiess aiz vārda TAD un vērtība, kas tiek lietota, ja nosacījums nav izpildīts, aiz vārda CITĀDI. Visi trīs dizaina elementi IZVĒLE ir obligātas. Izlaist elementu CITĀDI, tāpat kā izmantojot operatoru JA iebūvētajā 1C valodā tas nav iespējams. Arī no operatora IZVĒLE dizainam nav analoga ELSEIF, bet jūs varat ieguldīt vienu IZVĒLE citā, kā tas tika darīts mūsu piemērā.

Operators IR NULL izmanto dizainā IZVĒLE lai salīdzinātu vaicājuma lauku ar tipu NULL.

Pieprasīt. Teksts= "IZVĒLIES
IZVĒLE
KAD VĒRTĪBA IR NULL, TAD 0
CITA Nozīme
BEIGAS"
;

Turklāt operators IR NULL var izmantot vaicājuma nosacījumos, piemēram, teikumā KUR.

Sadaļā ir aprakstītas vaicājumu valodas funkcijas SUBSTRING() izpildes īpatnības darba klient-servera versijā un no tā izrietošie ieteikumi vaicājumu konstruēšanai.

SUBSTRING() funkcija

1C:Enterprise vaicājumu valodā funkciju SUBSTRING() formātā SUBSTRING(,) var lietot virknes tipa datiem un ļauj atlasīt fragmentu, kas sākas ar rakstzīmes numuru (rakstzīmes virknē tiek numurētas, sākot ar 1). un rakstzīmju garums. Funkcijas SUBSTRING() rezultāts ir mainīga garuma virknes veids, un garums tiks uzskatīts par neierobežotu, ja tam ir neierobežots garums un parametrs nav konstante vai pārsniedz 1024.

Funkcijas SUBSTRING() aprēķināšana SQL serverī

Darba versijā klients-serveris funkcija SUBSTRING() ir realizēta, izmantojot atbilstošā SQL priekšraksta funkciju SUBSTRING(), kas tiek nodota SQL Server datu bāzes serverim, kas aprēķina funkcijas SUBSTRING() rezultāta tipu no plkst. sarežģīti noteikumi atkarībā no tā parametru veida un vērtībām, kā arī atkarībā no konteksta, kurā tas tiek izmantots.

Vairumā gadījumu šie noteikumi neietekmē 1C:Enterprise pieprasījuma izpildi, tomēr ir gadījumi, kad maksimālais garums SQL Server aprēķinātās rezultātu virknes. Ir svarīgi paturēt prātā, ka dažos kontekstos, izmantojot funkciju SUBSTRING(), tās rezultāta maksimālais garums var būt vienāds ar ierobežota garuma virknes maksimālo garumu, kas SQL Server ir 4000 rakstzīmes. Tas var izraisīt pieprasījuma negaidītu pārtraukšanu.

Piemēram, pieprasījums:

IZVĒLIES
IZVĒLE

CITĀ NULL
BEIGAS KĀ Prezentācija,
IZVĒLE
WHEN Tips = & Juridiskā adreseIndividuāls
TAD APAKŠSVĒTNE (attēlojums, 0 , 200 )
CITĀ NULL
END AS Prezentācija1
NO

PASŪTĪT PĒC
sniegums,
Izpildījums1

avarē ar ziņojumu:

DBVS kļūda:
Microsoft OLE DB nodrošinātājs SQL Server: Brīdinājums: vaicājumu procesors nevarēja izveidot vaicājuma plānu no optimizētāja, jo kopējais garums visi kolonnas klauzulā GROUP BY vai ORDER BY pārsniedz 8000 baitus.
HRESULT=80040E14, SQLSTATE=42000, native=8618

Tas notiek tāpēc, ka Microsoft SQL Server aprēķina maksimālo virknes garumu, kas izriet no izteiksmes:

IZVĒLE
WHEN Tips = & Juridiskā adreseIndividuāls
TAD APAKŠSVĒTNE (attēlojums, 0 , 200 )
CITĀ NULL
BEIGAS KĀ Prezentācija,

vienāds ar 4000 rakstzīmēm. Tāpēc ieraksta garums, kas sastāv no diviem šādiem laukiem, pārsniedz kārtošanas darbībai atļautos 8000 baitus.

Sakarā ar aprakstīto funkcijas SUBSTRING() izpildes īpatnību SQL Server, nav ieteicams izmantot funkciju SUBSTRING(), lai neierobežota garuma virknes pārveidotu par ierobežota garuma virknēm. Tā vietā labāk ir izmantot apraides operatoru EXPRESS(). Jo īpaši iepriekš minēto piemēru var pārrakstīt šādi:

IZVĒLIES
IZVĒLE
WHEN Tips = & Juridiskā adreseIndividuāls
CITĀ NULL
BEIGAS KĀ Prezentācija,
IZVĒLE
WHEN Tips = & Juridiskā adreseIndividuāls
THEN EXPRESS(atveidojums kā virkne(200))
CITĀ NULL
END AS Prezentācija1
NO
Informācijas reģistrs. Kontaktinformācija KĀ SASKAŅOTIES Kontaktinformācija
PASŪTĪT PĒC
sniegums,
Izpildījums1

Vaicājumu valoda ir viens no 1C 8.3 pamatmehānismiem izstrādātājiem. Izmantojot vaicājumus, varat ātri izgūt visus datubāzē saglabātos datus. Tās sintakse ir ļoti līdzīga SQL, taču ir dažas atšķirības.

1C 8.3 (8.2) vaicājumu valodas galvenās priekšrocības salīdzinājumā ar SQL:

  • atsauces lauku atsaukšana (viena vai vairāku punktu atsauce uz objekta detaļām);
  • strādāt ar rezultātiem ir ļoti ērti;
  • spēja izveidot virtuālās tabulas;
  • pieprasījumu var rakstīt gan angļu, gan krievu valodā;
  • iespēja bloķēt datus, lai izvairītos no strupceļa.

Vaicājumu valodas trūkumi 1C:

  • atšķirībā no SQL, 1C vaicājumi neļauj mainīt datus;
  • uzglabāto procedūru trūkums;
  • neiespējamība pārvērst virkni par skaitli.

Apskatīsim mūsu mini pamācību par 1C vaicājumu valodas pamata konstrukcijām.

Sakarā ar to, ka 1C vaicājumi ļauj saņemt tikai datus, jebkuram vaicājumam jāsākas ar vārdu “SELECT”. Pēc šīs komandas tiek norādīti lauki, no kuriem jāiegūst dati. Ja norādīsiet “*”, tiks atlasīti visi pieejamie lauki. Vieta, no kuras tiks atlasīti dati (dokumenti, reģistri, direktorijas utt.), ir norādīta aiz vārda “NO”.

Tālāk aplūkotajā piemērā visas nomenklatūras nosaukumi ir atlasīti no direktorija “Nomenklatūra”. Pēc vārda “HOW” ir norādīti tabulu un lauku aizstājvārdi (nosaukumi).

IZVĒLIES
Nomenklatūra Nosaukums AS Nomenklatūras nosaukums
NO
Directory.Nomenclature AS Nomenklatūra

Blakus komandai “SELECT” varat norādīt atslēgvārdus:

  • DAŽĀDI. Vaicājumā tiks atlasītas tikai rindas, kas atšķiras vismaz vienā laukā (bez dublikātiem).
  • PIRMĀ n, Kur n– rindu skaits no rezultāta sākuma, kas jāatlasa. Visbiežāk šī konstrukcija tiek izmantota kopā ar šķirošanu (ORDER BY). Piemēram, ja jums ir jāatlasa noteikts skaits dokumentu, kas ir jaunāki pēc datuma.
  • ATĻAUTA. Šis dizains ļauj atlasīt no datu bāzes tikai tos ierakstus, kas ir pieejami pašreizējam lietotājam. Pamati tā lietošanai atslēgvārds Mēģinot vaicāt ierakstus, kuriem viņam nav piekļuves, lietotājs saņems kļūdas ziņojumu.

Šos atslēgvārdus var izmantot kopā vai atsevišķi.

LAI MAINĪTIES

Šis priekšlikums bloķē datus, lai novērstu savstarpējus konfliktus. Bloķētie dati netiks nolasīti no cita savienojuma līdz darījuma beigām. Šajā klauzulā varat norādīt konkrētas tabulas, kuras ir jābloķē. Pretējā gadījumā visi tiks bloķēti. Dizains attiecas tikai uz automātisko bloķēšanas režīmu.

Visbiežāk, saņemot atlikumus, tiek izmantota klauzula “FOR CHANGE”. Galu galā, kad programmā vienlaikus strādā vairāki lietotāji, kamēr viens saņem atlikumus, cits var tos mainīt. Šajā gadījumā iegūtais atlikums vairs nebūs pareizs. Ja ar šo priekšlikumu bloķēsiet datus, tad līdz brīdim, kad pirmais darbinieks saņems pareizo bilanci un veiks ar to visas nepieciešamās manipulācijas, otrais darbinieks būs spiests gaidīt.

IZVĒLIES
Savstarpēji norēķini, darbinieks.
Savstarpējo norēķinu apjoms Bilance
NO
Uzkrājumu reģistrs Savstarpējie norēķini ar darbiniekiem
LAI MAINĪTIES

KUR

Dizains ir nepieciešams, lai augšupielādētajiem datiem uzliktu sava veida atlasi. Dažos gadījumos, kad tiek iegūti dati no reģistriem, saprātīgāk ir norādīt atlases nosacījumus virtuālo tabulu parametros. Izmantojot "WHERE", vispirms tiek izgūti visi ieraksti, un tikai pēc tam tiek piemērota atlase, kas būtiski palēnina vaicājumu.

Zemāk ir piemērs pieprasījumam iegūt kontaktpersonas konkrētam amatam. Atlases parametram ir šāds formāts: &ParameterName (parametra nosaukums ir patvaļīgs).

IZVĒLE (CASE)

Dizains ļauj norādīt nosacījumus tieši pieprasījuma pamattekstā.

Tālāk esošajā piemērā laukā “Papildu lauks” būs teksts atkarībā no tā, vai dokuments ir vai nav publicēts.

IZVĒLIES
Uzņemšanas T&U.Link,
IZVĒLE
KAD UzņemšanaT&U.Veikts
TAD "Dokuments ir pieņemts!"
CITS “Dokuments netika ievietots...”
BEIGAS kā papildu lauks
NO
Preču un pakalpojumu saņemšanas dokuments KĀ saņemšanas noteikumi un nosacījumi

PIEVIENOJIES

Savieno saiti divas tabulas, pamatojoties uz konkrētu attiecību nosacījumu.

KREISAIS/LABAIS SAVIENOJUMS

LEFT savienojuma būtība ir tāda, ka pirmā norādītā tabula tiek ņemta pilnībā un otrā tiek piesaistīta tai atbilstoši savienojuma nosacījumiem. Ja otrajā tabulā nav neviena ieraksta, kas atbilstu pirmajai tabulai, tad kā to vērtības tiek aizstātas ar NULL. Vienkārši sakot, galvenā tabula ir pirmā norādītā tabula, un otrās tabulas dati (ja tādi ir) jau ir aizstāti ar tās datiem.

Piemēram, preču preces nepieciešams iegūt no “Preču un pakalpojumu saņemšanas” dokumentiem un cenas no informācijas reģistra “Preču cenas”. Šādā gadījumā, ja cena nevienai pozīcijai nav atrasta, tā vietā aizstājiet NULL. Visas preces no dokumenta tiks atlasītas neatkarīgi no tā, vai tām ir cena vai nav.

IZVĒLIES
Kvīts un U. Nomenklatūra,
Cenas.Cena
NO
Preču un pakalpojumu saņemšanas dokuments
INTERNAL JOIN ReģistrētiesInformācija.CenasNomenklatūra.SliceLast AS Cenas
Programmatūras saņemšana&U.Nomenklatūra = Prices.Nomenclature

PAREIZI viss ir tieši otrādi.

PILNS SAVIENOJUMS

Šis savienojuma veids atšķiras no iepriekšējās tēmas, ka rezultātā tiks atgriezti visi gan pirmās, gan otrās tabulas ieraksti. Ja saskaņā ar dots nosacījums Ja pirmajā vai otrajā tabulā nav atrasts neviens ieraksts, tā vietā tiks atgriezta NULL.

Izmantojot pilnu pieslēgumu iepriekšējā piemērā, tiks atlasītas visas preces no dokumenta “Preču un pakalpojumu saņemšana” un visas jaunākās cenas no reģistra “Preču cenas”. Neatrasta ierakstu vērtības gan pirmajā, gan otrajā tabulā būs vienādas ar NULL.

IEKŠĒJĀ PIEVIENOŠANĀS

Atšķirība IEKŠĒJĀ PIEVIENOŠANĀS no FULL ir tas, ka, ja ieraksts nav atrasts vismaz vienā no tabulām, tad vaicājumā tas netiks parādīts vispār. Rezultātā no dokumenta “Preču un pakalpojumu saņemšana” tiks atlasītas tikai tās preču vienības, par kurām ir ieraksti informācijas reģistrā “Preču cenas”, ja iepriekšējā piemērā “PILNA” aizstājam ar “IEKŠĒJĀ”.

GROUP BY

Grupēšana 1C vaicājumos ļauj sakļaut tabulas rindas (grupēt laukus) atbilstoši noteiktai kopīga iezīme(grupēti lauki). Grupēšanas laukus var parādīt tikai, izmantojot apkopošanas funkcijas.

Sekojošā vaicājuma rezultāts būs produktu veidu saraksts ar to maksimālajām cenām.

IZVĒLIES
,
MAX(Price.Price) AS Cena
NO

GROUP BY
Cenas.Nomenklatūra.Nomenklatūras veids

REZULTĀTI

Atšķirībā no grupēšanas, izmantojot kopsummas, tiek parādīti visi ieraksti un tiem tiek pievienotas kopsummas rindas. Grupēšana parāda tikai vispārīgus ierakstus.

Rezultātus var apkopot visai tabulai (izmantojot atslēgvārdu “GENERAL”), vairākiem laukiem, laukiem ar hierarhisku struktūru (atslēgvārdi “HIERARHIJA”, “TIKAI HIERARHIJA”). Apkopojot rezultātus, nav nepieciešams izmantot apkopotās funkcijas.

Apskatīsim piemēru, kas ir līdzīgs iepriekšējam piemēram, izmantojot grupēšanu. Šajā gadījumā vaicājuma rezultāts atgriezīs ne tikai grupētus laukus, bet arī detalizētus ierakstus.

IZVĒLIES
Cenas.Nomenklatūra.Nomenklatūras veids AS Nomenklatūras veids,
Cenas.Cena AS Cena
NO
Nomenklatūras cenu reģistrs. Jaunāko AS cenu momentuzņēmums
REZULTĀTI
MAKSIMĀLA (cena)
BY
TipsNomenklatūra

ŅEMOT

Šis operators ir līdzīgs operatoram WHERE, taču tiek izmantots tikai apkopotām funkcijām. Pārējie lauki, izņemot tos, ko izmanto šis operators, ir jāgrupē. Operators WHERE nav piemērojams apkopotajām funkcijām.

Tālāk esošajā piemērā preces maksimālās cenas tiek atlasītas, ja tās pārsniedz 1000, grupējot pēc preču veida.

IZVĒLIES

MAX(Price.Price) AS Cena
NO
Nomenklatūras cenu reģistrs. Jaunāko AS cenu momentuzņēmums
GROUP BY
Cenas.Nomenklatūra.Nomenklatūras veids
ŅEMOT
MAKSIMĀLĀ(Cenas.Cena) > 1000

PASŪTĪT PĒC

Operators ORDER BY sakārto vaicājuma rezultātu. Lai nodrošinātu, ka ieraksti tiek parādīti konsekventā secībā, tiek izmantots AUTO ORDER. Primitīvie veidi tiek sakārtoti pēc normāli noteikumi. Atsauces veidi ir sakārtoti pēc GUID.

Piemērs, kā iegūt darbinieku sarakstu, kas sakārtots pēc vārda:

IZVĒLIES
Darbinieki.Nosaukums AS Nosaukums
NO
Direktorija.Darbinieki KĀ Darbinieki
PASŪTĪT PĒC
Vārds
AUTOPASŪTĪJUMS

Citas 1C vaicājumu valodas konstrukcijas

  • KOMBINĒT– divu vaicājumu rezultāti vienā.
  • VISU APVIENOT– līdzīgi kā COMBINE, bet bez identisku rindu grupēšanas.
  • TUKŠS GALDS– dažreiz tiek izmantots, savienojot vaicājumus, lai norādītu tukšu ligzdotu tabulu.
  • VIETA– izveido pagaidu tabulu, lai optimizētu sarežģītus 1C vaicājumus. Šādus pieprasījumus sauc par pakešu pieprasījumiem.

Vaicājumu valodas funkcijas

  • SUBSTRING saīsina virkni no noteiktas pozīcijas līdz noteiktam rakstzīmju skaitam.
  • GADS...OTRAISļauj iegūt atlasīto skaitliskā veida vērtību. Ievades parametrs ir datums.
  • PERIODA SĀKUMS un PERIODA BEIGAS izmanto, strādājot ar datumiem. Kā papildu parametrs norādīts perioda veids (DIENA, MĒNESIS, GADS utt.).
  • ADDKDATEļauj pievienot vai atņemt noteiktu laiku no datuma noteikta veida(OTRĀ, MINŪTE, DIENA utt.).
  • ATŠĶIRĪBAS DATUMS nosaka atšķirību starp diviem datumiem, norādot izvades vērtības veidu (DIENA, GADS, MĒNESIS utt.).
  • Funkcija aizstāj trūkstošo vērtību ar norādīto izteiksmi.
  • PĀRSTĀVNIECĪBA un REPREZENTĀCIJASSAITES iegūstiet norādītā lauka virknes attēlojumu. Attiecīgi attiecas uz jebkurām vērtībām un tikai atsauces vērtībām.
  • TIPS, TIPA VĒRTĪBAS tiek izmantoti, lai noteiktu ievades parametra veidu.
  • SAITE ir loģisks salīdzināšanas operators atribūta vērtības tipam.
  • EXPRESS izmanto, lai pārvērstu vērtību vajadzīgajā veidā.
  • DATETIME iegūst vērtību tipa "Datums" no skaitliskās vērtības(Gads, mēnesis, diena, stunda, minūte, sekunde).
  • NOZĪME 1C pieprasījumā to izmanto, lai norādītu iepriekš noteiktas vērtības - direktorijus, uzskaitījumus, raksturlielumu veidu plānus. Lietošanas piemērs: " Kur juridiska persona = vērtība (uzskaitījums. Juridiska persona. Persona)«.

Vaicājumu veidotājs

Lai izveidotu vaicājumus ar 1C, ir ļoti ērts iebūvēts mehānisms - vaicājumu noformētājs. Tajā ir šādas galvenās cilnes:

  • "Tabulas un lauki" - satur laukus, kas ir jāatlasa, un to avotus.
  • "Savienojumi" - apraksta struktūras CONNECTION nosacījumus.
  • “Grupēšana” — satur grupēšanas struktūru aprakstu un uz tām balstītus laukus.
  • “Nosacījumi” - atbild par datu atlasi pieprasījumā.
  • “Papildu” — papildu vaicājuma parametri, piemēram, atslēgvārdi komandai “SELECT” utt.
  • “Pievienojumi/Aliasi” - norādītas tabulu savienošanas iespējas un norādīti aizstājvārdi (konstrukcija “HOW”).
  • “Pasūtījums” ir atbildīgs par vaicājumu rezultātu kārtošanu.
  • “Kopā” — līdzīgi kā cilnē “Grupēšana”, bet izmanto konstrukcijai “TOTALS”.

Pašu pieprasījuma tekstu var apskatīt, noklikšķinot uz pogas “Pieprasīt” apakšējā kreisajā stūrī. Šajā formā to var labot manuāli vai kopēt.


Pieprasījuma konsole

Lai ātri skatītu vaicājuma rezultātu uzņēmuma režīmā vai atkļūdotu sarežģītus vaicājumus, izmantojiet . Tas satur pieprasījuma tekstu, nosaka parametrus un parāda rezultātu.

Varat lejupielādēt vaicājuma konsoli ITS diskā vai izmantojot .

Sveicināti, dārgie emuāra vietnes lasītāji! Šodien ar piemēru palīdzību apskatīsim, kā praksē var izmantot 1C vaicājuma funkciju SUBSTRING. Šīs funkcijas izmantošana ir noderīga ne tikai vienkāršos vaicājumos, kurus mēs šeit apskatīsim, bet arī vaicājumos un vaicājumos.

Uzdevums bija tas, kas bija vajadzīgs no dokumenta detaļām Atbilstība atlasiet divas rindas un kārtojiet pēc tām. Atbilstība šāda veida kontam: 779000/004599. Kā es varu sadalīt šo vērtību divās daļās?

Funkcijai SUBSTRING ir trīs parametri. Pirmā ir avota virkne, no kuras vēlaties iegūt daļu no rakstzīmēm - apakšvirkne. Ir skaidrs, ka šī parametra vērtības veids ir Līnija. Uzmanību, šī ir ļoti svarīga piezīme, ja izmantojat pirmā parametra veidu, kas nav virkne, funkcija nedarbosies, pieprasījums radīs kļūdu!

Otrais parametrs nosaka rakstzīmes pozīciju avota virknē, no kuras sākas virknes daļas atlase, bet trešais ir atlasītās apakšvirknes garums. Otrā un trešā parametra vērtības veids ir skaitlis.

Pārejam pie prakses: SUBSTRING SELECT Tipisks.Ierakstītāja AS nosaukums, SUBSTRING(Tipisks.Reģistrs.Saskaņā ar nosaukumu, 1, 6) AS izmaksu konts, SUBSTRING(Tipisks.Reģistrs.Pēc.Nosaukums, 8, 11) KĀ nodaļa, SUMMA(IZVĒLĒTIES KAD MĒNESIS(Tipisks.Periods) = 3 THEN EXPRESS(Tipisks.Summa KĀ SKAITS(15,2)) ELSE 0 END) AS Marts NO Reģistra Grāmatvedība .Tipisks KĀ tipisks WHERE Tipisks.AccountKt = &AccountKt UN tipisks.Periods starp &PeriodStart UN &PeriodEnGROUP BY SUBSTRING(Tipisks.Ierakstītājs.Saskaņā ar nosaukumu, 1, 6),

(Tipisks.Reģistrators.Saskaņā ar nosaukumu, 8, 11), Tipisks.Reģistra PASŪTĪJUMS PĒC nodaļas, izmaksu konts

Šī vaicājuma rezultāts ir šāds: Vārds Izmaksu konts nodaļa
marts 779000 004599 9 000
Izejošais maksājuma uzdevums 00000000319 no 03/01/2010 14:42:54 779000 004599 4 721,6
Izejošais maksājuma uzdevums 00000000320 no 03/02/2010 12:07:34 786500 004599 987 614,51
Izejošais maksājuma uzdevums 00000000203 no 03/01/2010 12:28:52 786500 004599 400 000
Izejošais maksājuma uzdevums 00000000227 no 03/03/2010 14:16:00 732000 004600 5 400
Izejošais maksājuma uzdevums 00000000238 no 03/05/2010 12:37:57 732500 004600 12 100
Izejošais maksājuma uzdevums 00000000197 no 03/01/2010 11:53:11 732500 004600 12 100
Izejošais maksājuma uzdevums 00000000198 no 03/01/2010 11:55:39 734100 004600 19 609
Izejošais maksājuma uzdevums 00000000279 no 26.03.2010 0:00:00 734100 004600 55 300
Izejošais maksājuma uzdevums 00000000287 no 29.03.2010 14:15:36 734100 004600 18 090
Izejošais maksājuma uzdevums 00000000291 no 30.03.2010 11:01:10 738000 004600 10 050
Izejošais maksājuma uzdevums 00000000268 no 18.03.2010 10:34:25 750400 004600 13 060,98
Izejošais maksājuma uzdevums 00000000276 no 18.03.2010 12:20:20 750400 004600 555 645,41
Izejošais maksājuma uzdevums 00000000281 no 29.03.2010 12:33:46 754450 004600 24 120
Izejošais maksājuma uzdevums 00000000234 no 03/04/2010 12:21:55 754450 004600 100 000
Izejošais maksājuma uzdevums 00000000290 no 30.03.2010 10:44:39 786300 004600 20 800
Izejošais maksājuma uzdevums 00000000240 no 03/09/2010 10:53:24 786300 004600 61 012
Izejošais maksājuma uzdevums 00000000269 no 18.03.2010 10:58:04 786300 004600 6 000
Izejošais maksājuma uzdevums 00000000289 no 30.03.2010 9:27:14 786500 004600 36 000
Izejošais maksājuma uzdevums 00000000228 no 03/04/2010 9:52:35 786500 004600 378 138,85
Izejošais maksājuma uzdevums 00000000229 no 03/04/2010 9:57:50 786503 004600 126 117,75
Izejošais maksājuma uzdevums 00000000200 no 03/01/2010 11:58:06 754422 004762 63 000
Izejošais maksājuma uzdevums 00000000286 no 29.03.2010 14:10:18 764422 004762 10 000
Izejošais maksājuma uzdevums 00000000267 no 17.03.2010 0:00:00 764423 004762 464 370
Izejošais maksājuma uzdevums 00000000261 no 15.03.2010 11:16:28 764522 004762 81 357

Tātad, ja mēs ņemam rindu 779000/004599, tad SUBSTRING(Tipisks.Ierakstītājs.Attiecīgais.Nosaukums, 1, 6) iezīmēs rindiņu “779000”. APAKŠSVĒTNE (Tipisks.Ierakstītājs.Attiecīgais.Nosaukums, 8, 11) izvadīs “004599”.

Tajā pašā vaicājumā tiek izmantota izteiksme:

SUMMA(IZVĒLE, KAD MĒNESIS(Tipisks.Periods) = 3 THEN EXPRESS(Tipiski.Summa KĀ SKAITS(15, 2)) ELSE 0 END) AS nodaļa

Tajā pašā uzdevumā bija jāpievieno jaunas kolonnas ar mēnešu nosaukumiem un summām tiem. Šis izteiciens atrisina šo problēmu. Ja jums ir jāizmanto citi mēneši, piemēram, janvāris, aizstājiet izteiksmi:

SUMMA(IZVĒLE, KAD MĒNESIS(Tipisks.Periods) = 1 THEN EXPRESS(Tipical.Sum AS NUMBER(15, 2)) ELSE 0 END) AS janvārī

Es došu piemēru pieprasījuma tekstam, kurā mēneša lauki (treknrakstā) tiek veidoti, izmantojot ciklu, sākot no marta līdz februārim.

Vaicājuma teksts = " | SELECT |Tipisks.Reģistrs.AS nosaukums, |APAKŠSVĒTNE(Tipisks.Reģistrs.Attiecīgais.Nosaukums, 1, 6) AS izmaksu konts, |APAKŠSVĒTNE(Tipisks.Reģistrs.Attiecīgais.Nosaukums, 8, 11) ) AS departaments,"; Ja Sch = 1 līdz 12 Cikls Ja Sch< 11 Тогда Мес = Сч + 2; Иначе Мес = Сч - 10; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " |СУММА(ВЫБОР | КОГДА МЕСЯЦ(Типовой.Период) = " + Мес + " | ТОГДА ВЫРАЗИТЬ(Типовой.Сумма КАК ЧИСЛО(15, 2)) | ИНАЧЕ 0 |КОНЕЦ) КАК Поле" + Мес + ?(Сч=12,"",","); КонецЦикла; Vaicājuma teksts = vaicājuma teksts + " | NO | Grāmatvedības reģistrs." + AccountingRegisterName + ".MovementsSSubconto(| &StartPeriod, | &EndPeriod,"; Line of Restrictions on Details = " (Activity = TRUE) AND (konts HIERARHJĀ (&Analīzes konts)"; Vaicājuma teksts = Pieprasījuma teksts + Limita līnija on Details + " |) AS Tipisks |";

Vaicājuma teksts = vaicājuma teksts + " | WHERE | Tipisks.KontsCt = &Analīzes konts | UN Tipisks.Periods STARP &SākumaPeriods UN &Beigu periods |GRUPĒT PĒC | APAKŠSVĒRDA(Tipisks.Ierakstītājs.Resp.Nosaukums, 1, 6), | APAKŠSVĒTNE(Tipisks.Reģistr. Resp., 8, 11), |. PASŪTĪJUMS |.

Ir daži mehānismi darbam ar virknēm 1C vaicājumos. Pirmkārt, rindas var pievienot. Otrkārt, jūs varat ņemt apakšvirkni no virknes. Treškārt, virknes var salīdzināt, tostarp pēc raksta. Tas, iespējams, ir viss, ko var izdarīt ar stīgām.

Stīgu pievienošana

Lai vaicājumam pievienotu rindas, tiek izmantota darbība “+”. Varat pievienot tikai ierobežota garuma virknes.

IZVĒLĒTIES "Nosaukums: " + Darījuma partneris Nosaukums AS 1. sleja FROM Darījuma partneri KUR Saite = &Saite

Apakšvirknes funkcija

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

Funkcijas Environment() analogs no objekta modeļa. Funkciju Apakšstring () var lietot virknes datiem, un tā ļauj atlasīt fragmentu <Строки> , sākot ar rakstzīmes numuru <НачальнаяПозиция> (rakstzīmes rindā ir numurētas, sākot no 1) un garumu <Длина> rakstzīmes. Funkcijas aprēķina rezultātam ir mainīga garuma virknes tips, un garums tiks uzskatīts par neierobežotu, ja <Строка> ir neierobežots garums un parametri <Длина> nav konstante vai lielāka par 1024.

Ja virknes garums ir mazāks nekā norādīts otrajā parametrā, funkcija atgriezīs tukšu virkni.

Uzmanību! Nav ieteicams izmantot funkciju SUBSTRING(), lai neierobežota garuma virknes pārveidotu par ierobežota garuma virknēm. Tā vietā labāk ir izmantot apraides operatoru EXPRESS().

Funkcija līdzīga

Ja mums ir jāpārliecinās, vai virknes atribūts atbilst noteiktiem kritērijiem, mēs to salīdzinām:

IZVĒLĒTIES Darījuma partneri Nosaukums AS 1. sleja FROM Darījuma partneri KUR Nosaukums = "Gazprom".

Bet ko darīt, ja jums ir nepieciešams smalkāks salīdzinājums? Ne tikai vienlīdzība vai nevienlīdzība, bet līdzība ar noteiktu modeli? Tieši šim nolūkam tika izveidota funkcija LĪDZĪGS.

LIKE — operators virknes līdzības ar paraugu pārbaudei. LIKE analogs SQL.

LĪDZĪGS operators ļauj salīdzināt izteiksmes vērtību, kas norādīta pa kreisi no tās, ar raksta virkni, kas norādīta labajā pusē. Izteiksmes vērtībai ir jābūt tipa virknei. Ja izteiksmes vērtība atbilst modelim, operatora rezultāts būs TRUE, pretējā gadījumā tas būs FALSE.

Šīs rakstzīmes raksta virknē ir pakalpojumu rakstzīmes, un to nozīme atšķiras no virknes rakstzīmes:

  • % (procenti): secība, kas satur jebkādu skaitu patvaļīgu rakstzīmju;
  • _ (pasvītrojums): viena patvaļīga rakstzīme;
  • […] (viena vai vairākas rakstzīmes kvadrātiekavās): jebkura atsevišķa rakstzīme kvadrātiekavās. Uzskaitījums var saturēt diapazonus, piemēram, a–z, kas nozīmē diapazonā iekļautu patvaļīgu rakstzīmi, ieskaitot diapazona galus;
  • [^...] (kvadrātiekavās nolieguma zīme, kam seko viena vai vairākas rakstzīmes): jebkura atsevišķa rakstzīme, kas nav norādīta aiz nolieguma zīmes.

Jebkurš cits simbols nozīmē sevi un nenes nekādu papildu slodzi. Ja kāda no uzskaitītajām rakstzīmēm ir jāraksta kā pati, tad pirms tās ir jāieraksta<Спецсимвол>. Es pats<Спецсимвол>(jebkura piemērota rakstzīme) ir definēts tajā pašā paziņojumā pēc atslēgvārda SPECIAL CHARACTER.