Pieprasījumu veidošana un darbs ar tiem (iesācējiem). Pieprasījumu izveide un darbs ar tiem (iesācējiem) 1s 8.3 ja pieprasījumā

1C programmēšana sastāv no vairāk nekā tikai programmas rakstīšanas. 1C ir lietotāja darbību un datu lietnis, ar kuru viņš strādā.

Dati tiek glabāti datu bāzē. 1C vaicājumi ir veids, kā izgūt datus no datu bāzes, lai tos parādītu lietotājam formā vai apstrādātu.

Ziņojuma galvenā daļa ir 1C pieprasījums. Ziņojuma gadījumā ACS ir lielākā ziņojuma daļa.

Apsēdies. Ievelc elpu. Nomierinies. Tagad es jums pastāstīšu jaunumus.

Lai programmētu 1C, nepietiek ar 1C programmēšanas valodas zināšanu. Jums arī jāzina 1C vaicājumu valoda.

1C vaicājumu valoda ir pilnīgi atsevišķa valoda, kas ļauj mums norādīt, kādi dati mums ir jāiegūst no datu bāzes.

Viņš ir arī bilingvāls - tas ir, jūs varat rakstīt krievu vai angļu valodā. Tā ir ļoti līdzīga SQL vaicājumu valodai, un tie, kas to zina, var atpūsties.

Kā tiek izmantoti 1C pieprasījumi

Kad lietotājs palaiž 1C uzņēmuma režīmā, darbošajā klientā nav neviena grama datu. Tāpēc, kad jums ir jāatver direktorijs, 1C pieprasa datus no datu bāzes, tas ir, veic 1C pieprasījumu.

1C vaicājumi ir:

  • Automātiskie vaicājumi 1C
    Automātiski ģenerē sistēma. Jūs esat izveidojis dokumentu saraksta veidlapu. Pievienota kolonna. Tas nozīmē, ka, atverot šo veidlapu uzņēmuma režīmā, tiks parādīts vaicājums un tiks pieprasīti šīs kolonnas dati.
  • Pusautomātiskie vaicājumi 1C
    1C valodā ir daudz metožu (funkciju), piekļūstot datu bāzei, tiek veikts vaicājums. Piemēram.GetObject()
  • Manuālie 1C vaicājumi (kurus rakstījis programmētājs īpaši kā vaicājumu)
    Jūs varat pats uzrakstīt 1C pieprasījumu kodā un izpildīt to.

1C vaicājumu izveide un izpilde

1C pieprasījums ir pieprasījuma faktiskais teksts 1C pieprasījuma valodā.
Tekstu var rakstīt ar pildspalvām. Tas ir, ņemiet to un uzrakstiet to (ja zināt šo valodu).

Tā kā 1C popularizē vizuālās programmēšanas koncepciju, kur daudz vai gandrīz visu var izdarīt, nerakstot kodu ar roku, ir īpašs Query Constructor objekts, kas ļauj zīmēt vaicājuma tekstu, nezinot vaicājuma valodu. Tomēr brīnumi nenotiek – šim nolūkam ir jāprot strādāt ar konstruktoru.

Kad 1C pieprasījuma teksts ir gatavs, tas ir jāizpilda. Šim nolūkam ir objekts 1C kodā Request(). Šeit ir piemērs:

Pieprasījums = jauns pieprasījums();
Query.Text = "ATLASĪT
| Nomenklatūra.Saite
|NO
| Directory.Nomenclature AS Nomenklatūra
|KUR
| Nomenklatūra.Pakalpojums";
Select = Query.Run().Select();

Pārskats(Atlase.Saite);
EndCycle;

Kā redzat piemērā, pēc 1C pieprasījuma izpildes rezultāts nonāk pie mums, un mums tas ir jāapstrādā. Rezultāts ir viena vai vairākas tabulas rindas (īpašā formā).

Rezultātu var augšupielādēt parastā tabulā:
Atnest = Query.Run().Unload(); //Rezultāts – vērtību tabula

Vai vienkārši apejiet rindu pēc rindas.
Select = Query.Run().Select();
Kamēr Select.Next() Loop
//Dariet kaut ko ar vaicājuma rezultātiem
EndCycle;

Darbs ar 1C pieprasījumiem

1C vaicājumu pamatprincipi

1C pieprasījuma konstruēšanas pamatprincipi -
SELECT Lauku saraksts FROM Tabulas nosaukums WHERE Nosacījumi

Šāda 1C pieprasījuma izveides piemērs:

IZVĒLIES
//atlasāmo lauku saraksts
saite,
Vārds,
Kods
NO
//tabulas nosaukums, no kuras mēs atlasām datus
//tabulu saraksts ir objektu saraksts konfiguratora logā
Direktorija.Nomenklatūra
KUR
//norāda atlasi
Produkta veids = &Pakalpojums //atlase pēc ārējās vērtības
Vai Pakalpojums // Būla tipa atribūts “Service”, atlase pēc vērtības True
KĀRTOT PĒC
//Šķirošana
Vārds

1C tabulu saraksts

Tabulu nosaukumus var redzēt konfiguratora logā. Jums vienkārši jāraksta “Katalogis”, nevis “Katalogi”, piemēram, “Katalogs.Nomenklatūra” vai “Dokuments.Preču un pakalpojumu pārdošana” vai “Uzkrājumu reģistrs.Pārdošana”.

Reģistriem ir pieejamas papildu tabulas (virtuālās), kas ļauj iegūt galīgos skaitļus.

Informācijas reģistrs.RegisterName.Last Slice(&Date) – 1C pieprasījums no informācijas reģistra, ja tas ir periodisks, uz konkrētu datumu

Uzkrājumu reģistrs. Reģistra nosaukums. Atlikumi(&Datums) – 1C pieprasījums no atlikumu reģistra par konkrētu datumu

Uzkrāšanas reģistrs.Reģistra nosaukums.Apgrozījums (&Sākuma datums, &Beigu datums) – 1C pieprasījums no apgrozījuma reģistra par periodu no sākuma datuma līdz beigu datumam.

Papildu principi

Kad mēs pieprasām dažu datu sarakstu, darbojas pamatprincipi. Bet mēs varam arī pieprasīt numurus, un pieprasījums var tos mums saskaitīt (pievienot, piemēram).

IZVĒLIES
//Daudzums(FieldName) – skaita daudzumu
//Field AS OtherName – pārdēvē lauku
Daudzums (Saite) AS Ievietoto dokumentu daudzums
NO

KUR
Diriģēts

Šis 1C pieprasījums atgriezīs mums kopējo dokumentu skaitu. Tomēr katram dokumentam ir lauks Organizācija. Pieņemsim, ka mēs vēlamies saskaitīt katras organizācijas dokumentu skaitu, izmantojot 1C vaicājumu.

IZVĒLIES
//tikai dokumenta lauks
Organizācija,
//skaita daudzumu
Daudzums (Saite) AS Daudzums Pēc organizācijām
NO
Dokuments. Preču un pakalpojumu pārdošana
KUR
Diriģēts
GROUP BY

Organizācija

Šis 1C pieprasījums mums atgriezīs dokumentu skaitu katrai organizācijai (saukta arī par “pēc organizācijas”).

Ļaujiet mums papildus aprēķināt šo dokumentu apjomu, izmantojot 1C pieprasījumu:

IZVĒLIES
//tikai dokumenta lauks
Organizācija,
//skaita daudzumu

//uzskaiti summu

NO
Dokuments. Preču un pakalpojumu pārdošana
KUR
Diriģēts
GROUP BY
//jāizmanto, ja lauku sarakstā ir funkcija count() un viens vai vairāki lauki vienlaikus - tad jāgrupē pēc šiem laukiem
Organizācija

Šis 1C pieprasījums arī atdos mums dokumentu daudzumu.

IZVĒLIES
//tikai dokumenta lauks
Organizācija,
//skaita daudzumu
Daudzums (saite) AS Daudzums pēc organizācijām,
//uzskaiti summu
Summa(DokumentaSumma) AS Summa
NO
Dokuments. Preču un pakalpojumu pārdošana
KUR
Diriģēts
GROUP BY
//jāizmanto, ja lauku sarakstā ir funkcija count() un viens vai vairāki lauki vienlaikus - tad jāgrupē pēc šiem laukiem
Organizācija
PO REZULTĀTI Vispārīgi

1C vaicājumu valoda ir plaša un sarežģīta, un mēs neapskatīsim visas tās iespējas vienā nodarbībā - izlasiet mūsu nākamās nodarbības.

Īsi par 1C vaicājumu valodas papildu funkcijām:

  • Datu savienošana no vairākām tabulām
  • Ligzdotie vaicājumi
  • Partijas pieprasījums
  • Savu virtuālo tabulu izveide
  • Vaicājums no vērtību tabulas
  • Izmantojot iebūvētās funkcijas vērtību iegūšanai un manipulācijām ar tām.

1C vaicājumu veidotājs

Lai pieprasījuma tekstu nerakstītu ar roku, ir 1C pieprasījuma noformētājs. Vienkārši noklikšķiniet ar peles labo pogu jebkurā moduļa vietā un atlasiet 1C Query Designer.

Kreisajā pusē atlasiet vajadzīgo tabulu 1C vaicājumu noformētājā un velciet to pa labi.

1C vaicājumu noformētājā tabulā atlasiet vajadzīgos laukus un velciet pa labi. Ja vēlaties ne tikai atlasīt lauku, bet tam piemērot kādu summēšanas funkciju, pēc vilkšanas divreiz noklikšķiniet uz lauka ar peli. Pēc tam cilnē Grupēšana jums būs jāatlasa (velciet) grupēšanai nepieciešamie lauki.

1C vaicājumu noformētāja cilnē Nosacījumi varat atlasīt nepieciešamās atlases tādā pašā veidā (velkot laukus, pēc kuriem veiksiet atlasi). Noteikti izvēlieties pareizo nosacījumu.

Cilnē Pasūtījums ir norādīta kārtošana. Cilnē Rezultāti – rezultātu apkopošana.

Izmantojot 1C vaicājumu noformētāju, varat izpētīt jebkuru esošo vaicājumu. Lai to izdarītu, ar peles labo pogu noklikšķiniet uz esošā pieprasījuma teksta un atlasiet arī 1C vaicājumu noformētāju - un pieprasījums tiks atvērts 1C vaicājuma noformētājā.

1C 8 vaicājumu valoda ir neaizstājams rīks 1C programmētājam, tā ļauj rakstīt kodolīgāku, vienkāršāku, saprotamāku kodu un izmantot mazāk sistēmas resursu, strādājot ar datiem. Šis raksts atklāj nodarbību sēriju, kas veltīta vaicājumu valodai 1C 8. Pirmajā nodarbībā mēs apskatīsim šīs valodas galvenā operatora struktūru - IZVĒLIES. Izmantojot šo operatoru, jūs varat izveidot atlases no datu bāzes tabulām. Atlasītos tabulu datus var kārtot, ievietot tajā nosacījumus, saistīt un apvienot ar citu tabulu datiem, grupēt pēc dažādiem laukiem un daudz ko citu.

Vaicājuma valoda 1C uzņēmums 8 — operatora struktūra SELECT

Apskatīsim operatora SELECT struktūru (operatora izvēles daļas ir norādītas kvadrātiekavās). 1C vaicājumu valoda nodrošina plašu rīku klāstu datu paraugu izveidei.

ATLASĪT [ATĻAUTO] [ATŠĶIRĪGU] [PIRMAIS A] [Lauks1] [AS Alias1], [Field2] [AS Alias2], ... [FieldM] [AS AliasB] [PUT TemporaryTableName] [FROM Table1 AS AliasTableTable1 [[INNER JOIN ][LEFT JOIN][FULL JOIN] Table2 AS Alias Table2 [[INNER JOIN][LEFT JOIN][FULL JOIN] TableC AS Alias TablesC BY Expression1 [Un Expression2]...[Un ExpressionD]] .. . ... PĒC Expression1 [Un Expression2]...[Un ExpressionE]] ... [TableF AS TableF Alias] ... ] [GROUP BY GroupingField1[,] ... [GroupingFieldG]] [WHERE Expression1 [UN Izteiksme2] ... [UN IzteiksmeH]] [VIENOT VISU...] [; ...] [INDEX BY Alias1 ... AliasB] [KOPĀS [Apkopošanas funkcija(Field1)][,] [AggregationFunction(Field2)][,] ... [AggregationFunction(FieldI)] PĒC [VISPĀRĪGI][,] [ GroupingField1][,] ... [GroupingFieldj]]

Atslēgvārdi un bloki darbam ar laukiem

  • IZVĒLIES— atslēgvārds, kas norāda operatora sākumu;
  • ATĻAUTA norāda, ka atlasē jāiekļauj tabulas ieraksti, kuriem ir lasīšanas piekļuve dotajam lietotājam;
  • DAŽĀDI norāda, ka izlasē jāiekļauj tikai dažādas (visos laukos) plūsmas. Citiem vārdiem sakot, rindas dublikāti tiks izslēgti no izlases;
  • PIRMAIS A ja norādāt šo atslēgvārdu, tad atlasē tiks iekļauta tikai pirmā A no vaicājumā atlasītajām rindām, kur A ir naturāls skaitlis;
  • Lauka bloks— šis bloks norāda laukus, kas jāiekļauj atlasē. Šie lauki būs atlasītās kolonnas. Vienkāršākajā gadījumā lauks izskatās šādi: Table Alias.TableFieldName AS Field Alias

    Tādā veidā mēs norādām, no kuras tabulas mēs ņemam šo lauku. 1C vaicājumu valoda ļauj norādīt jebkurus aizstājvārdus, taču tos nedrīkst atkārtot tajā pašā SELECT priekšrakstā. Lauks var būt sarežģītāks, jo tas sastāv no dažādām tabulas lauku, vaicājuma valodas funkciju un apkopošanas funkciju kombinācijām, taču šajā apmācībā mēs šos gadījumus neaplūkosim.

Atslēgvārdi un bloki darbam ar tabulām

  • PUT pagaidu tabulas nosaukums- atslēgvārds VIETA ir paredzēts, lai izveidotu pagaidu tabulu ar noteiktu nosaukumu, kas tiks saglabāta RAM noteiktā 1C 8 sesijā līdz tās beigām vai līdz pagaidu tabulas iznīcināšanai. Jāņem vērā, ka pagaidu tabulu nosaukumus vienā 1C 8 sesijā nevajadzētu atkārtot;
  • Tabulu un attiecību bloks— blokā ir norādītas visas šajā vaicājumā izmantotās tabulas, kā arī attiecības starp tām. Bloks sākas ar atslēgvārdu NO, kam seko pirmās tabulas nosaukums un aizstājvārds. Ja šī tabula ir saistīta ar citām tabulām, tad tiek norādītas attiecības. 1C vaicājumu valoda satur šādu savienojumu veidu kopu:
    • IEKŠĒJĀ PIEVIENOŠANĀS— ieraksts no kreisās tabulas tiks iekļauts atlasē tikai tad, ja būs izpildīts savienojuma nosacījums, ieraksts no labās tabulas tiks iekļauts atlasē tikai tad, ja būs izpildīts savienojuma nosacījums;
    • KREISAIS SAVIENOJUMS— ieraksts no kreisās tabulas tiks iekļauts izlasē jebkurā gadījumā, ieraksts no labās tabulas tiks iekļauts izlasē tikai tad, ja būs izpildīts savienojuma nosacījums;
    • PILNS SAVIENOJUMS— jebkurā gadījumā vispirms izlasē tiks iekļauts ieraksts no kreisās tabulas, tad tikai tad, ja ir izpildīts savienojuma nosacījums, ieraksts no labās tabulas vispirms tiks iekļauts atlasē jebkurā gadījumā, tad tikai tad, ja savienojuma nosacījums ir izpildīts. Šajā gadījumā iegūtās dublētās rindas tiek izslēgtas no izlases.

    Pēc savienojuma veida tiek norādīts otrās tabulas nosaukums un aizstājvārds. Tālāk seko atslēgvārds BY, kam seko saziņas nosacījumi, kas savstarpēji saistīti ar loģiskiem operatoriem UN, VAI. Katrai nosacījuma izteiksmei ir jāatgriež Būla vērtība (True, False). Ja pirmā tabula ir savienota ar citām tabulām, nevis otro, tad atkal tiek norādīts savienojuma veids utt. Katru no tabulām, kas piedalās savienojumā, savukārt var savienot ar citām tabulām, to parāda vaicājuma struktūras diagramma. Ja tabula nav saistīta ar pirmo, tad to norāda bez savienojuma veida, tad var sekot tās savienojumi utt.;

Atslēgvārdi un datu konvertēšanas bloki

  • Grupas bloks— šo bloku izmanto tabulas rindu grupēšanai. Rindas tiek apvienotas vienā, ja pēc atslēgvārda norādītas lauku vērtības GROUP BY izrādās tas pats. Šajā gadījumā visi pārējie lauki tiek summēti, aprēķināti vidēji, palielināti vai minimizēti, izmantojot apkopošanas funkcijas. Lauka blokā tiek izmantotas apkopotās funkcijas. Piemērs: Maksimums(Tabulas aizstājvārds.Tabulas lauka nosaukums) AS lauka aizstājvārds
  • Stāvokļa bloks- šajā blokā aiz atslēgvārda KUR ir norādītas nosacījuma izteiksmes, kas atdalītas ar loģiskiem operatoriem UN, VAI, lai izlasē tiktu iekļauta kāda no atlasītajām rindām, visiem apkopojuma nosacījumiem ir jābūt vērtībai Taisnība.
  • VISU APVIENOT— šis atslēgvārds tiek izmantots, lai apvienotu vaicājumus (operatorus IZVĒLĒTIES). 1C vaicājumu valoda ļauj apvienot vairākus vaicājumus vienā. Lai vaicājumus varētu apvienot, tiem ir jābūt vienādam lauku kopai;
  • «;» - semikolu izmanto, lai atdalītu vienu no otras neatkarīgus apgalvojumus IZVĒLĒTIES;
  • INDEX BY— atslēgvārds tiek izmantots aiz tā norādīto lauku indeksēšanai;
  • Kopsavilkuma bloks— izmanto kokam līdzīgu paraugu veidošanai. Katram grupēšanas laukam, kas norādīts aiz atslēgvārda PĒC, atlasē tiks izveidota atsevišķa rinda. Šajā rindā, izmantojot apkopotās funkcijas, tiks aprēķinātas pēc atslēgvārda norādīto lauku kopējās vērtības REZULTĀTI.

Vai vēlaties turpināt apgūt 1C 8 vaicājumu valodu? Pēc tam izlasiet nākamo rakstu.

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ļaujiet 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 tukša lauka nosacījumu, kura tips ir “dažādu veidu dokumenti” ( 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 (Dokumentu sarakste. DokumentsBU AS dokuments. Preču un pakalpojumu saņemšana) LINK Dokuments. Preču un pakalpojumu saņemšana | TAD ""Preču un pakalpojumu saņemšana"" | KAD IZTEIKT (Dokumentu sarakste. DocumentBU AS dokuments. Preču un pakalpojumu pārdošana) LINK Dokuments. 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 // 10. piemērs. atlase, pamatojoties uz tukšu datumu: |KUR | tbStrings.CancellationDate = DATETIME(1, 1, 1)

Šajā rakstā mēs vēlamies ar jums visu apspriest 1C vaicājumu valodas funkcijas, un vaicājumu valodas konstrukcijas. Kāda ir atšķirība starp funkciju un dizainu? Funkcija tiek izsaukta ar iekavām un iespējamajiem parametriem tajās, un konstrukcija tiek rakstīta bez iekavām. Neapšaubāmi visas 1C vaicājumu valodas struktūras un funkcijas padarīt datu iegūšanas procesu elastīgu un daudzfunkcionālu. Šīs funkcijas un konstrukcijas attiecas uz pieprasījuma laukiem, un dažas attiecas arī uz nosacījumiem.

1C vaicājumu valodas funkcijas

Jo skaidrs apraksts 1C vaicājumu valodas funkcijas ir daudz retāk nekā struktūru apraksti, mēs nolēmām sākt aplūkot funkcijas. Tagad apskatīsim katru atsevišķi, aprakstot tā mērķi, sintaksi un lietošanas piemēru, tātad:

1. Funkcija DATUMS LAIKS- šī funkcija izveido nemainīgu lauku ar veidu "Datums".

Sintakse: DATUMS LAIKS(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

Lietošanas piemērs:

2. Funkcija DATE DIFFERENCE- atgriež starpību starp diviem datumiem vienā no dimensijām (gads, mēnesis, diena, stunda, minūte, sekunde). Mērījums tiek nodots kā parametrs.

Sintakse: DIFFERENCEDATE(<Дата1>, <Дата2>, <Тип>)

Lietošanas piemērs:

Query.Text = "IZVĒLĒTIES | ATŠĶIRĪBAS DATUMS(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Qty.Days";

3. Funkcija VALUE- iestata nemainīgu lauku ar iepriekš definētu ierakstu no datu bāzes; jūs varat arī iegūt jebkura veida tukšu saiti.

Sintakse: VALUE(<Имя>)

Lietošanas piemērs:

Request.Text = "SELECT //iepriekš definēts elements | VĒRTĪBA(Directory.Currencies.Dollar) AS dolārs, //tukša saite | VĒRTĪBA(Dokuments.Preču un pakalpojumu saņemšana.EmptyLink) AS kvīts, //pārskaitījuma vērtība | VĒRTĪBA(Pārskaitījums . Juridiska persona. Privātpersona) AS fiziska persona, //iepriekš definēts konts | VĒRTĪBA (kontu plāns. Pašpietiekams. Materiāli) AS konts_10" ;

4. SELECT funkcija- mūsu priekšā ir IF konstrukcijas analogs, kas tiek izmantots kodā, tikai šis tiek izmantots 1C vaicājumos.

Sintakse: IZVĒLE, KAD<Выражение>TAD<Выражение>CITĀDI<Выражение>BEIGAS

Lietošanas piemērs:

Pieprasījums.Teksts = //ja summa ir lielāka par 7500, tad ir jābūt atlaidei 300 rubļu apmērā, //tātad, ja nosacījums tiek aktivizēts, tad funkcija //atgriež Summa - 300 //pretējā gadījumā pieprasījums atgriezīs vienkārši summu "SELECT | SELECT | WHEN TCRceipts.Summa > 7500 | THEN TKRkvītis.Summa - 300 | CITI TKRkvītis.Summa | BEIGAS KĀ SummaAr atlaidi |NO | Dokuments.Preču saņemšanaPakalpojumi.Preces KĀ TKR";

5. Funkcija EXPRESS- ļauj izteikt konstantu lauku ar noteiktu veidu.

Sintakse: EXPRESS (lauka nosaukums kā tipa nosaukums)

Lietošanas piemērs:

Query.Text = "ATLASĪT DAŽĀDU | Pārdošana.Reģistra numurs, | IZVĒLĒTIES | WHEN Pārdošana. Reģistratūras saites dokuments.Izdevumi | THEN EXPRESS(Pārdošana.Reģistrs kā dokuments.Izdevumi) | ELSE SELECT | WHEN Pārdošana.Reģistras saites dokuments.Ieviešana | THEN EXPRESS(Pārdošana.Reģistrs AS Dokuments.Ieviešana) | END | ... | END AS Numurs | NO | ReģistrētiesUzkrājumi.Pirkumi AS Pirkumi";

Vai ir vēl kāda iespēja izmantot funkciju EXPRESS jaukta tipa laukos, kur tās rodas? Vienkāršākais piemērs ir jebkura reģistra “reģistrators”. Tātad, kāpēc mums varētu būt nepieciešams kvalificēt veidu reģistratorā? Apskatīsim situāciju, kad no reģistratūras atlasām lauku "Numurs", no kuras tabulas tiks izvēlēts numurs? Pareizā atbilde visiem! Tāpēc, lai mūsu vaicājums darbotos ātri, mums ir jānorāda precīzs veids, izmantojot funkciju EXPRESS

Lietošanas piemērs:

Query.Text = "SELECT | EXPRESS(Nomenclature.Comment AS Line(300)) AS Comment, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum |FROM | Directory.Nomenclature AS Nomenclature";

6. ISNULL funkcija(alternatīvā pareizrakstība ISNULL) - ja laukam ir NULL tips, tas tiek aizstāts ar funkcijas otro parametru.

Sintakse: ISNULL(<Поле>, <ПодставляемоеЗначение>)

Lietošanas piemērs:

Ņemiet vērā arī to, ka ir ieteicams VIENMĒR aizstāt NULL tipu ar kādu vērtību, jo salīdzinājums ar tipu NULL vienmēr atgriež FALSE, pat ja jūs salīdzināt NULL ar NULL. Visbiežāk NULL vērtības veidojas tabulu savienošanas rezultātā (visu veidu savienojumi, izņemot iekšējos).

Query.Text = //Atlasīt visu preci un tās atlikumus //ja kādā vienībā nav bilances, tad būs lauks //NULL, kas tiks aizstāts ar vērtību 0 "SELECT | No. Link, | ISNULL (ProductsInStockRemains.InStockRemaining, 0) AS Atlikums | NO | Katalogs.Nomenklatūra AS Nr. | KREISAIS SAVIENOJUMS Reģistrēt Uzkrājumus. PrecesNoliktavās. Atlikums AS PrecesNoliktavāsAtliek | ON (GoodsInWarehouses)Saites"=Nr.

7. REPREZENTĀCIJAS funkcija- ļauj iegūt pieprasījuma lauka attēlojumu.

Sintakse: PERFORMANCE(<НаименованиеПоля>)

Lietošanas piemērs:

Query.Text = "SELECT | REPREZENTĀCIJA(FreeRemainingRemains.Nomenclature) AS Nomenklatūra, | REPREZENTĀCIJA(FreeRemaining.Warehouse) AS Noliktava, | FreeRemainingRemaining.InStockRemaining |FROM |Uzkrāšanas reģistrs.FreeRemainingAS FreeRemaining"

Konstrukcijas 1C vaicājumu valodā

Mēs ar jums apspriedām iepriekš 1C vaicājumu valodas funkcijas, tagad ir laiks apsvērt konstrukcijas 1C vaicājumu valodā, tie ir ne mazāk svarīgi un noderīgi, sāksim.

1. Būvniecība LINK- ir loģisks operators atsauces veida pārbaudei. Visbiežāk sastopams, pārbaudot kompleksa tipa lauku ar noteiktu tipu. Sintakse: SAITE<Имя таблицы>

Lietošanas piemērs:

Pieprasījums.Teksts = //ja ierakstītāja vērtības tips ir dokuments Kvīts, //tad vaicājums atgriezīs "Preču saņemšana", pretējā gadījumā "Preču pārdošana" "SELECT | SELECT | WHEN Remainings.Registrar LINK Dokuments.Preču saņemšana un Pakalpojumi | TAD ""Saņemšana"" | CITI ""Patērēšana"" | END AS Pārvietošanās veids | NO | Uzkrāšanas reģistrs. Atlikušie produkti noliktavās AS paliek" ;

2. Dizains STARP- šis operators pārbauda, ​​vai vērtība ir norādītajā diapazonā.

Sintakse: STARP<Выражение>UN<Выражение>

Lietošanas piemērs:

Request.Text = //iegūstiet visu nomenklatūru, kuras kods ir diapazonā no 1 līdz 100 "SELECT | Nomenclature.Link | FROM | Directory.Nomenclature AS Nomenclature | WHERE | Nomenclature.Code BETWEEN 1 UN 100" ;

3. Konstrukcijas B un B HIERARHIJA- pārbaudiet, vai vērtība ir pārsūtītajā sarakstā (masīvus, vērtību tabulas utt. var pārsūtīt kā sarakstu). Operators IN HIERARHIJA ļauj skatīt hierarhiju (kontu plāna izmantošanas piemērs).

Sintakse: IN(<СписокЗначений>), HIERARHJĀ(<СписокЗначений>)

Lietošanas piemērs:

Pieprasījums.Teksts = //atlasīt visus konta apakškontus "SELECT | Pašpietiekams. Saistīt AS kontu | No Konti. Pašpietiekams. Preces)";

4. Dizains LĪDZĪGS- Šī funkcija ļauj mums salīdzināt virkni ar virknes modeli.

Sintakse: PATĪK "<ТекстШаблона>"

Rindu raksta opcijas:

% — virkne, kas satur jebkādu skaitu patvaļīgu rakstzīmju.

Viens patvaļīgs raksturs.

[...] — jebkura atsevišķa rakstzīme vai rakstzīmju secība, kas norādīta kvadrātiekavās. Uzskaitījums var norādīt diapazonus, piemēram, a–z, kas nozīmē diapazonā iekļautu patvaļīgu rakstzīmi, tostarp diapazona beigas.

[^...] — jebkura atsevišķa rakstzīme vai rakstzīmju secība, kas norādīta kvadrātiekavās, izņemot tās, kas norādītas aiz nolieguma zīmes.

Lietošanas piemērs:

Query.Text = //atrodiet visu nomenklatūru, kas satur sakni TABUR un sākas //vai nu ar mazo vai lielo burtu t "SELECT | Nomenclature. Link | FROM | Directory. Nomenclature AS Nomenclature | WHERE | Products. Name LIKE "" [Tt ]abur%""" ;

5. Dizains ATĻAUTS- šis operators ļauj no datu bāzes atlasīt tikai tos ierakstus, kuriem zvanītājam ir lasīšanas atļauja. Šīs tiesības ir konfigurētas ieraksta līmenī (RLS).

Sintakse: ALOWED ir rakstīts aiz atslēgvārda SELECT

Lietošanas piemērs:

Request.Text = "ATLASĪT ATĻAUTO | Darījuma partneri. Saite | NO | Katalogs. Darījuma partneri KĀ darījuma partneri";

6. Dizains DAŽĀDI- ļauj atlasīt ierakstus, kuros nav ierakstu dublikātu.

Sintakse: DAŽĀDI ir rakstīts aiz atslēgvārda SELECT

Lietošanas piemērs:

Request.Text = //atlasa ierakstus, uz kuriem lasītājam ir tiesības "IZVĒLĒTIES DAŽĀDU | Counterparties.Name |FROM | Directory. Counterparties AS Counterparties" ;

Tāpat DAŽĀDU konstrukciju var izmantot ar ATĻAUTO operatoru un citiem operatoriem.

Lietošanas piemērs:

Request.Text = //atlasa dažādus ierakstus, uz kuriem lasītājam ir tiesības "ATLASĪT ATĻAUTOS DAŽĀDU | Counterpartities.Name |FROM | Directory. Counterparties AS Counterpartities";

7. Dizains PIRMAIS- no vaicājuma rezultāta izvēlas parametrā norādīto ierakstu skaitu.

Sintakse: FIRST<число>

Lietošanas piemērs:

Request.Text = //atlasiet pirmos 4 CCD numurus no direktorija "SELECT FIRST 4 | CCD Numbers. Link | FROM | Directory. CCD Numbers AS CCD Numbers";

8. Dizains PĀRMAIŅĀM- ļauj bloķēt galdu, darbojas tikai transakcijās (attiecas tikai uz automātiskajām slēdzenēm).

Sintakse: PĀRMAIŅĀM<НаименованиеТаблицы>

Lietošanas piemērs:

Query.Text = "SELECT | Bezmaksas atlikumi, atlikumi. Nomenklatūra, | Bezmaksas atlikumi. Noliktava, | Bezmaksas atlikumi. Noliktavā Atlikušie | NO | Uzkrājumu reģistrs. Bezmaksas atlikumi. Atlikumi KĀ bezmaksas atlikumi Atlikumi | MAINĪJUMU reģistrs | . Brīvās atliekas. Atlikumi";

9. Dizains PASŪTĪT PĒC- sakārto datus pēc noteikta lauka. Ja lauks ir saite, tad, uzstādot karogu AUTOPASŪTĪJUMS Kārtošana notiks pēc saites attēlojuma; ja karodziņš ir izslēgts, saites tiek kārtotas pēc saites adreses vecumposma atmiņā.

Sintakse: KĀRTOT PĒC<НаименованиеПоля>AUTOPASŪTĪJUMS

Lietošanas piemērs:

Query.Text = "SELECT | Free Remainings Remainings. Nomenclature AS Nomenclature, | Free Remainings Remainings. Warehouse AS Noliktava, | Free Remainings Remainings. Noliktavā Atlikušie | FROM | Reģistrēt Uzkrājumi. Bezmaksas Atlikumi. Atlikušie AS Free Remaining Remainings BY | | Nomenklatūra | AUTOMĀTISKĀ PASŪTĪJUMA ATGŪŠANA";

10. Dizains GROUP BY- izmanto, lai grupētu vaicājuma virknes pēc noteiktiem laukiem. Ciparu lauki ir jāizmanto ar jebkuru apkopošanas funkciju.

Sintakse: GROUP BY<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Lietošanas piemērs:

Query.Text = "SELECT | ProduktiNoliktavās.Nomenklatūra AS Nomenklatūra, | ProduktiNoliktavās.Noliktavā, | SUM(GoodsInWarehouses.Stock) KĀ KRĀJUMI |NO | ReģistrētiesUzkrājumi.ProduktiNoliktavās AS ProduktiNoliktavās |ProduktiGRUPA |Noliktavās |ProduktiNoliktavās |Noliktavās | Noliktavas. Noliktava" ;

11. Dizains HAVING- ļauj datu atlases nosacījumam lietot apkopošanas funkciju, līdzīgi kā WHERE konstrukcijai.

Sintakse: ŅEMOT<агрегатная функция с условием>

Lietošanas piemērs:

Query.Text = //atlasa grupētus ierakstus, kur InStock lauks ir lielāks par 3 "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccumuskumsstock | GROUP BY | ProduktiNoliktavās.Nomenklatūra, | ProduktiNoliktavās.Noliktavā | |PIEEJAMĀ | SUMMA(ProduktiNoliktavās.Noliktavās) > 3" ;

12. Būvniecības INDEX BY- izmanto vaicājuma lauka indeksēšanai. Vaicājuma ar indeksēšanu pabeigšana prasa ilgāku laiku, taču paātrina meklēšanu indeksētos laukos. Var izmantot tikai virtuālajās tabulās.

Sintakse: INDEX BY<Поле1, ... , ПолеN>

Lietošanas piemērs:

Query.Text = "SELECT | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | PLACE DataTs | FROM | &Ts AS Ts | | INDEX BY | Ts.NameOS, | Ts .CodeOS";

13. Dizains KUR- ļauj uzlikt nosacījumu jebkuram atlases laukam. Rezultātā tiks iekļauti tikai tie ieraksti, kas atbilst nosacījumam.

Sintakse: KUR<Условие1 ОператорЛогСоединения УсловиеN>

Lietošanas piemērs:

Query.Text = //ir atlasīti visi ieraksti ar CompensationRemaining<>0 un //AmountFor CalcCompRemaining > 100 "SELECT | KompensācijaRPORpalikumi.Darījuma partneris, |KompensācijaRPORpalikumi.Bērns, | KompensācijaRPORatlikums.Atlikuma atlīdzība, | KompensācijaRPORatlikums.Aprēķina summa AS KompensācijaRPOstat ki |KUR |AtlīdzībaRPORatlikums.Atlikušais kompensācija<>0 | Un CompensationRPORemains.AmountForCalcCompRemaining> 100" ;

14. Dizaina REZULTĀTI... VISPĀRĪGI- izmanto kopsummas aprēķināšanai; dizainā ir norādīti lauki, pēc kuriem tiks aprēķinātas kopsummas, un kopsummas laukiem tiek piemērotas apkopotās funkcijas. Izmantojot kopsummas katram laukam pēc konstrukcijas KOPĀ, dati tiek grupēti. Pēc izvēles ir GENERAL konstrukcija; tās izmantošana nodrošina arī papildu grupēšanu. Tālāk redzēsit pieprasījuma rezultāta piemēru.

Sintakse: REZULTĀTI<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>BY<ОБЩИЕ> <Поле1, ... , ПолеN>

Lietošanas piemērs:

Request.Text = "SELECT | Aprēķini. Darījuma partnera līgums. Līguma veids AS Līguma veids, | Aprēķini. Darījuma partnera līgums AS līgums, | Aprēķini. Darījuma partneris, | Aprēķini. Savstarpējo norēķinu bilances summa AS bilance | NO | Uzkrājumu reģistrs. Savstarpēja Norēķini AR darījuma partneriem. Atlikumi AS Aprēķini | KOPĀ | SUMMA (Atlikums) | Programmatūra | VISPĀRĪGI, | Līguma veids";

Attēlā ir norādīti grupējumi, kas tika izveidoti pieprasījuma izpildes laikā, augšējais attiecas uz sadaļu VISPĀRĪGI, bet otrais uz lauku Darījuma partnera līgumaLīguma veids.

Šajā rakstā mēs apskatīsim ligzdoto tabulu tēmu 1C vaicājumu valodā.

Vaicājuma atlases laukos varat izmantot ligzdotu vaicājuma avota tabulu. Piemēram, dokumentā “Pakalpojumu sniegšana” ir Pakalpojumu tabulas daļa, tāpēc šo tabulas daļu var parādīt arī atlases laukā. Tagad jūs redzēsit, kā to var īstenot.

Savā apmācību datubāzē es palaidīšu vaicājumu konsoli, atvēršu vaicājumu noformētāju un atlasīšu tabulu “Pakalpojumu sniegšana”.

Paplašināsim šo tabulu

Un tajā mēs redzam tabulas daļu “Pakalpojumi”.

Atlasīsim visu šo tabulas daļu.

Kā redzat, visa pakalpojuma tabulas daļa ir pilnībā nonākusi laukos.

Lūdzu, ņemiet vērā, ka tabulas daļa faktiski ir atsevišķs lauks ar nosaukumu “Pakalpojumi” un kura veids būs “Pieprasījuma rezultāts”. Uzzināsim, kā vaicājumā izmantot ligzdotu tabulu.

Atstāsim trīs ligzdotās tabulas laukus un pievienosim dažus laukus no dokumenta galvenes.

Noklikšķināsim uz Labi noformētājā un redzēsim, kā izskatīsies mūsu pieprasījums.

Kā redzat, pieprasījumā aiz lauka “Pakalpojumi” ir punkts, un atlasītie lauki ir norādīti aiz tā iekavās.

Izpildīsim lūgumu.

Attēlā redzams, ka visi atlasītie lauki dokumenta tabulas daļā ir uzskaitīti, atdalot tos ar komatiem laukā “Pakalpojumi”. Ne visām vaicājumu konsolēm ir tāds displejs kā attēlā iepriekš; dažreiz tas var vienkārši pateikt “”.

Vēl viens interesants punkts: ligzdotajā tabulā lauku vietā varat ievietot zvaigznīti, tad parādīsies visi tabulas daļas lauki. To nevar izdarīt konstruktorā, tikai manuāli pieprasījumā. Pieprasījums tiks iesniegts šādā formā:

Redzēsim, kā šāds pieprasījums tiks izpildīts.

Vienīgais ir tas, ka šī zvaigznīte netiks saglabāta, ja mēs atveram vaicājuma konstruktoru.

Mēs esam iemācījušies izveidot vaicājumu ar ligzdotu tabulu konsolē, tagad mēs iemācīsimies izmantot ligzdotu tabulu atlasē

Patiesībā, apstrādājot vaicājumu, piekļūt ligzdotai tabulai nav tik grūti. Jūs vienkārši piekļūstat atlasei pēc tabulas nosaukuma un iegūstat mainīgo ar tipu “Vaicājuma rezultāts”. Un tad jūs to apstrādājat kā parastu pieprasījuma rezultātu: ja vēlaties, iegūstiet paraugu, ja vēlaties, veiciet augšupielādi.

Tālāk ir sniegts neliels koda piemērs, kas darbojas ar ligzdotu tabulu.


&Serverī
Procedūra FillOnServer()
Pieprasījums = jauns pieprasījums;
Pieprasīt. Teksts = "IZVĒLIES
| Produkta pārdošana. Saite,
| Preču izpārdošana.Produkti.(
| produkts,
| Daudzums
|NO
| Dokuments. Preču pārdošana KĀ PĀRDOT produkciju"
;
Atnest = vaicājums. Palaist (). Izvēlieties ();
Ardievu atlase. Nākamais() cilpa
TopLine of the Tree = Produktu pārdošana. GetItems();
NewRow = TopRowTree. Pievienot();
Jauna līnija. Saite = Izlase. Saite;
TableProducts = Izlase. Preces;
SelectionProducts = TableProducts. Izvēlieties ();
Preču atlases laikā. Nākamais() cilpa
TreeChildRow = NewRow. GetItems();
ProductRow = ChildTreeRow. Pievienot();
ProductString. Saite = Produktu izvēle. Produkts;
ProductString. Daudzums = SampleItems. Daudzums ;
EndCycle;
EndCycle;
Procedūras beigas

Ļaujiet man paskaidrot iepriekš minēto kodu.

Pirmkārt, mēs saņēmām lineāru atlasi, un mēs ejam cauri šai atlasei cilpā, kurā izveidojam vērtību koka augšējo rindiņu (tā ir uz formas), un tajā ierakstām saiti uz mūsu dokumentu.

Un tad pats interesantākais, to pat vēlāk varēsiet apskatīties pats atkļūdotājs, mēs vēršamies pie Products atlases laukuma un ērtības labad ierakstiet šo lauku atsevišķā mainīgajā tabulāProdukti. Šis mainīgais ir “Vaicājuma rezultāta” tipa. Un jūs varat viegli iegūt šī rezultāta paraugu. Tā mēs darām. Atliek apiet šo atlasi, izmantojot nākamo funkciju un while cilpu.

Un šajā cilpā mēs atsauksimies uz atlases laukiem kā ligzdotas tabulas laukiem un ierakstīsim tos veidlapas koka pakārtotajās rindās.

Šis ir rezultāts, ko šis kods atgriezīs

Vai joprojām ir jautājumi?

Jūs pats uz tiem atbildēsit, kad studēsiet manu kursu “Vaicājumi 1C iesācējiem”. Kur šie un daudzi citi jautājumi tiek apspriesti sīkāk. Visa informācija ir sniegta vienkāršā un pieejamā veidā un ir saprotama pat tiem, kuri nav īpaši pazīstami ar programmēšanu 1C.

Reklāmas kods 20% atlaidei: hrW0rl9Nnx

Atbalstiet manu projektu, ziedojot jebkuru summu

Pievienojieties manām grupām.