1C-spørringer, samt det innebygde språket til 1C:Enterprise-plattformen, har funksjoner for å jobbe med datoer. De hjelper til med å forenkle datokonverteringer i spørringer og unngå å bruke et stort antall parametere. La oss se på disse funksjonene.

Hvordan sette en dato i 1C-spørringer som en konstant

DATETIME (år, måned, dag, time, minutt, sekund). Alternativer år, måned Og Dag er obligatoriske, andre er ikke. Hvis du ikke spesifiserer klokkeslettet, vil systemet angi begynnelsen av dagen.

Be om. Tekst= "VELGE
DATOTIME (2016,09,28,12,22,00)"
; // Resultat: 28. september 2016 12:22:00

I tillegg kan kun tall spesifiseres eksplisitt som parametere for denne funksjonen. Du kan ikke spesifisere verdiene til andre funksjoner som parametere. For eksempel vil denne konstruksjonen ikke fungere:

Be om. Tekst= "VELGE
DATETIME (År (Source.Date),09,28,12,22,00)
Fra Directory.Source AS Source"
;

Hvordan få begynnelsen eller slutten av et år, et halvt år, kvartal, måned, tiår, uke, dag, time, minutt i 1C-søk

Til dette brukes følgende funksjoner:

  • StartPeriode (dato, periode)
  • EndPeriod(dato, periode)

Som en parameter Dato en verdi med type sendes Dato. Parameter Periode .

Be om. Tekst= "VELGE
StartPeriode(DATOTIME (2016,09,28,12,22,00), DECADE)"
; // Resultat: 21. september 2016 0:00:00

Be om. Tekst= "VELGE
EndPeriod(DATETIME (2016,09,28,12,22,00), KVARTAL)"
; // Resultat: 30. september 2016 23:59:59

Som du kan se av eksemplene, kan du bruke andre nestede funksjoner i disse funksjonene.

Hvordan få år, dag i år, kvartal, måned, uke, ukedag, dag, time, minutt, sekund fra en dato i 1C-søk

For å gjøre dette er det tilsvarende funksjoner som du må sende datoen til som en parameter.

  • Funksjon YEAR (dato)— returnerer årstallet;
  • Funksjon DAGÅR (dato)— øker antall dager i året;
  • Funksjon KVARTAL (dato)— returnerer kvartalsnummeret;
  • Funksjon MÅNED (dato)— returnerer månedsnummeret;
  • Funksjon UKE (dato)— returnerer ukens nummer i året;
  • Funksjon UKEDAG (dato)— returnerer nummeret på dagen i uken (mandag — 1, søndag — 7);
  • Funksjon DAG (dato)— returnerer nummeret på dagen i måneden;
  • Funksjon HOUR (dato)— returnerer timen;
  • Funksjon MINUTT (dato)— returnerer minutter;
  • Funksjon SECOND (Dato)– returnerer sekunder.

Be om. Tekst= "VELGE
YEAR(DATETIME (2016,09,28,12,22,00))"
; // Resultat: 2016

Be om. Tekst= "VELGE
WEEK(DATETIME (2016,09,28,12,22,00))"
; // Resultat: 40

Be om. Tekst= "VELGE
WEEKDAY(DATETIME (2016,09,28,12,22,00))"
; // Resultat: 3

Be om. Tekst= "VELGE
DAGÅR(DATOTID (2016,09,28,12,22,00))"
; // Resultat: 272

Be om. Tekst= "VELGE
DAY(DATETIME (2016,09,28,12,22,00))"
; // Resultat: 28

Hvordan legge til eller trekke fra en dato et år, halvår, kvartal, måned, tiår, uke, dag, time, minutt, sekund i 1C-spørringer

For å gjøre dette, bruk funksjonen AddToDate(dato, periode, verdi).

Som en parameter Dato en verdi med type sendes Dato. Parameter Periode kan ta en av følgende verdier: SEKUND, MINUTT, TIME, DAG, UKE, DEKADE, MÅNED, KVARTAL, HALVÅR, ÅR.

Parameter Betydning viser antall perioder som skal legges til. Hvis perioden må trekkes fra, så parameteren Betydning må være negativ.

Be om. Tekst= "VELGE
AddToDate(DATETIME(2016, 9, 28, 12, 22, 0), HALVÅR, 1)"
; // Resultat: 28. mars 2017 12:22:00

Be om. Tekst= "VELGE
AddKDate(DATETIME(2016, 9, 28, 12, 22, 0), DECADE, -1)"
; // Resultat: 18. september 2016 12:22:00

Hvordan beregne datoforskjellen i 1C-spørringer

For å gjøre dette, bruk funksjonen DifferenceDate(Dato1, Date2, Periode).

Parameter Dato 1- datoen som skal trekkes fra.

Parameter Dato 2 - dato å trekke fra.

Parameter Periode kan ta en av følgende verdier: SEKUND, MINUTT, TIME, DAG, MÅNED, KVARTAL, ÅR. Det viser i hvilke enheter vi ønsker å få resultatet

Be om. Tekst= "VELGE
DifferenceDate(DATETIME(2016, 9, 28, 12, 22, 0), DATOTIME(2017, 9, 28, 12, 22, 0), KVARTAL)"
; // Resultat: 4

Be om. Tekst= "VELGE
DifferenceDate(DATETIME(2016, 9, 28, 12, 22, 0), DATETIME(2017, 9, 28, 12, 22, 0), Second)"
; // Resultat: 31 536 000

I alle funksjoner unntatt funksjonen DATO TID, som en parameter Dato kan ikke bare være en bestemt datoverdi (konstant eller spørringsparameter), men også kildetabellfelt.

I denne artikkelen ønsker vi å diskutere alt med deg 1C spørrespråkfunksjoner, og spørrespråkkonstruksjoner. Hva er forskjellen mellom funksjon og design? Funksjonen kalles med parenteser og mulige parametere i dem, og konstruksjonen skrives uten parentes. Utvilsomt alle strukturer og funksjoner i 1C spørrespråk gjør datainnsamlingsprosessen fleksibel og multifunksjonell. Disse funksjonene og konstruksjonene gjelder for forespørselsfelt, og noen gjelder også for betingelser.

1C Språkfunksjoner

Fordi en klar beskrivelse 1C spørrespråkfunksjoner er mye mindre vanlig enn beskrivelser av strukturer, bestemte vi oss for å begynne å se på funksjoner. La oss nå se på hver enkelt separat, og beskrive dens formål, syntaks og eksempel på bruk, så:

1. Funksjon DATO TID- denne funksjonen lager et konstant felt med "Dato"-typen.

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

Brukseksempel:

2. DATO DIFFERENCE funksjon- returnerer differansen mellom to datoer i en av dimensjonene (år, måned, dag, time, minutt, sekund). Målingen sendes som en parameter.

Syntaks: DIFERENCEDATE(<Дата1>, <Дата2>, <Тип>)

Brukseksempel:

Query.Text = "SELECT | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Qty.Days";

3. Funksjon VALUE- setter et konstant felt med en forhåndsdefinert post fra databasen; du kan også få en tom lenke av enhver type.

Syntaks: VALUE(<Имя>)

Brukseksempel:

Request.Text = "VELG //forhåndsdefinert element | VALUE(Directory.Currencies.Dollar) AS Dollar, //empty link | VALUE(Document.Receipt of Goods and Services.EmptyLink) AS Receipt, //transfer value | VALUE(Transfer . Legal Individual. Individual) AS Individual, //forhåndsdefinert konto | VERDI(Kontooversikt. Selvbærende. Materialer) AS Account_10" ;

4. VELG funksjon- vi har foran oss en analog av IF-konstruksjonen, som brukes i koden, bare denne brukes i 1C-spørringer.

Syntaks: VALG NÅR<Выражение>DERETTER<Выражение>ELLERS<Выражение>SLUTT

Brukseksempel:

Request.Text = //hvis beløpet er mer enn 7500, så bør det være en rabatt på 300 rubler, //så hvis betingelsen utløses så funksjonen //returnerer Beløp - 300 //ellers returnerer forespørselen ganske enkelt Beløp "VELG | VELG | NÅR TCReceipts.Beløp > 7500 | THEN TCReceipts.Amount - 300 | ELSE TCReceipts.Amount | END AS AmountWithRabatt |FROM | Document.Receipt of GoodsServices.Goods AS TCReceipts";

5. EXPRESS-funksjon- lar deg uttrykke et konstant felt med en bestemt type.

Syntaks: EXPRESS(Feltnavn AS Typenavn)

Brukseksempel:

Query.Text = "VELG DIVERSE | Sales.Registrar.Number, | SELECT | NÅR Sales.Registrar LINK Document.Expense | THEN EXPRESS(Sales.Registrar AS Document.Expense) | ELSE VELG | NÅR Sales.Registrar LINK Document.Implementation | THEN EXPRESS(Sales.Registrar AS Document.Implementation) | END | ... | END AS Number | FROM | RegisterAccumulations.Purchases AS Purchases";

Er det et annet alternativ for å bruke EXPRESS-funksjonen i felt med blandede typer, hvor forekommer de? Det enkleste eksemplet er "Registrar" for ethvert register. Så hvorfor må vi kanskje kvalifisere typen i registraren? La oss vurdere situasjonen når vi velger "Nummer"-feltet fra registraren, fra hvilken tabell vil nummeret bli valgt? Det riktige svaret av alle! Derfor, for at søket vårt skal fungere raskt, bør vi spesifisere en eksplisitt type ved å bruke EXPRESS-funksjonen

Brukseksempel:

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-funksjon(alternativ stavemåte ISNULL) - hvis feltet er av typen NULL, erstattes det med funksjonens andre parameter.

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

Brukseksempel:

Vær også oppmerksom på at det er tilrådelig å ALLTID erstatte NULL-typen med en eller annen verdi, fordi sammenligning med typen NULL returnerer alltid FALSE selv om du sammenligner NULL med NULL. Oftest dannes NULL-verdier som et resultat av sammenføyningstabeller (alle typer sammenføyninger unntatt interne).

Query.Text = //Velg hele elementet og dets saldo //hvis det ikke er noen saldo i en vare, vil det være et felt //NULL som vil bli erstattet med verdien 0 "SELECT | No. Link, | ISNULL (ProductsInStockRemains.InStockRemaining, 0) AS Remainder | FROM | Directory.Nomenclature AS No. | LEFT CONNECTION Register Akkumulasjoner. GoodsInWarehouses. Remains AS GoodsInWarehousesRemains | ON (GoodsInWarehousesRemains. Link)" = No. Nomenclature";

7. REPRESENTASJON funksjon- lar deg få en representasjon av forespørselsfeltet.

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

Brukseksempel:

Query.Text = "SELECT | REPRESENTATION(FreeRemainingRemains.Nomenclature) AS Nomenclature, | REPRESENTATION(FreeRemainingRemaining.Warehouse) AS Warehouse, | FreeRemainingRemaining.InStockRemaining |FROM |Accumulation Register.FreeRemainingRemaining.Freema

Konstruerer i 1C spørrespråk

Vi diskuterte med deg ovenfor 1C spørrespråkfunksjoner, nå er det på tide å vurdere konstruksjoner i 1C-spørringsspråket, de er ikke mindre viktige og nyttige, la oss komme i gang.

1. Bygg LINK- er en logisk operator for å sjekke en referansetype. Oppstår oftest når du sjekker et felt av en kompleks type mot en bestemt type. Syntaks: LINK<Имя таблицы>

Brukseksempel:

Request.Text = //hvis registreringsverditypen er dokumentmottak, //så vil spørringen returnere "Mottak av varer", ellers "Salg av varer" "VELG | VELG | NÅR Resterende.Registrator LINK Document.Receipt of GoodsServices | SÅ ""Kvittering"" | ELSE ""Forbruk"" | END AS Type flytting | FRA | Akkumuleringsregister. Resterende produkter i lager AS Rester" ;

2. Design MELLOM- denne operatøren sjekker om verdien er innenfor det angitte området.

Syntaks: MELLOM<Выражение>OG<Выражение>

Brukseksempel:

Request.Text = //hent hele nomenklaturen hvis kode ligger i området fra 1 til 100 "SELECT | Nomenclature.Link |FROM | Directory.Nomenclature AS Nomenclature |WHERE | Nomenclature.Code MELLOM 1 OG 100" ;

3. Konstruksjon B og B HIERARKI- sjekk om verdien er i den overførte listen (matriser, verditabeller osv. kan overføres som en liste). Operatoren IN HIERARKIET lar deg se hierarkiet (et eksempel på bruk av kontoplanen).

Syntaks: I(<СписокЗначений>), I HIERARKIET(<СписокЗначений>)

Brukseksempel:

Request.Text = //velg alle underkontoer til kontoen "VELG | Selvforsørgende. Koble AS-konto | FRA | Kontoplan. Selvforsørgende AS Selvforsørgende | HVOR | Selvforsørgende. Kobling I HIERARKIVERDI (Kart over Regnskap. Selvbærende. Varer)";

4. Design LIGNENDE- Denne funksjonen lar oss sammenligne en streng med et strengmønster.

Syntaks: SOM "<ТекстШаблона>"

Alternativer for radmønster:

% - en sekvens som inneholder et hvilket som helst antall vilkårlige tegn.

En vilkårlig karakter.

[...] - ethvert enkelt tegn eller sekvens av tegn oppført innenfor hakeparenteser. Oppregningen kan spesifisere områder, for eksempel a-z, som betyr et vilkårlig tegn inkludert i området, inkludert endene av området.

[^...] - ethvert enkelt tegn eller sekvens av tegn oppført innenfor hakeparenteser bortsett fra de som er oppført etter negasjonstegnet.

Brukseksempel:

Query.Text = //finn hele nomenklaturen som inneholder roten TABUR og begynner //enten med en liten eller stor bokstav t "SELECT | Nomenclature. Link | FROM | Directory. Nomenclature AS Nomenclature | WHERE | Products. Name LIKE "" [Tt ]abur%""" ;

5. Design TILLATT- denne operatøren lar deg velge bare de postene fra databasen som den som ringer har lesetillatelse til. Disse rettighetene er konfigurert på postnivå (RLS).

Syntaks: ALLOWED er skrevet etter nøkkelordet SELECT

Brukseksempel:

Request.Text = "VELG TILLATT | Motparter. Link | FRA | Katalog. Motparter AS Motparter";

6. Design DIVERSE- lar deg velge poster der det ikke er noen dupliserte poster.

Syntaks: VARIOUS skrives etter nøkkelordet SELECT

Brukseksempel:

Request.Text = //velger poster som leseren har rettigheter til "SELECT VARIOUS | Counterparties.Name |FROM | Directory. Counterparties AS Counterparties" ;

Dessuten kan VARIOUS-konstruksjonen brukes med den TILLATTE operatøren og andre operatører.

Brukseksempel:

Request.Text = //velger ulike poster som leseren har rettigheter til "SELECT ALLOWED VARIOUS | Counterparties.Name |FROM | Directory. Counterparties AS Counterparties";

7. Design FØRST- velger antall poster spesifisert i parameteren fra søkeresultatet.

Syntaks: FØRST<число>

Brukseksempel:

Request.Text = //velg de første 4 CCD-numrene fra katalogen "SELECT FIRST 4 | CCD Numbers. Link | FROM | Directory. CCD Numbers AS CCD Numbers";

8. Design FOR ENDRING- lar deg låse et bord, fungerer kun i transaksjoner (relevant kun for automatiske låser).

Syntaks: FOR ENDRING<НаименованиеТаблицы>

Brukseksempel:

Query.Text = "VELG | Frie rester Rester. Nomenklatur, | Gratis Rester Rester. Lager, | Gratis Rester Rester. På lager Resterende | FRA | Register over akkumulasjoner. Gratis Rester. Rester AS Gratis Rester Rester | FOR ENDRING | Register over akkumulasjoner . Gratis rester. Rester";

9. Design BESTILL ETTER- organiserer data etter et bestemt felt. Hvis feltet er en lenke, så når du setter flagget AUTO BESTILLING Sortering vil skje etter lenkerpresentasjon; hvis flagget er slått av, blir koblinger sortert etter ansienniteten til lenkeadressen i minnet.

Syntaks: SORTER ETTER<НаименованиеПоля>AUTO BESTILLING

Brukseksempel:

Query.Text = "VELG | Frie rester. Nomenklatur AS Nomenklatur, | Gratis gjenværende rester. Warehouse AS lager, | Gratis rester. På lager Gjenstående | FRA | Registrer akkumulasjoner. Gratis rester. Gjenstående AS Gratis gjenværende | | BESTILL ETTER | Nomenklatur | AUTO BESTILLING VANIE";

10. Design GROUP BY- brukes til å gruppere søkestrenger etter spesifikke felt. Numeriske felt må brukes med en hvilken som helst aggregert funksjon.

Syntaks: GRUPPE AV<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Brukseksempel:

Query.Text = "SELECT | ItemsInWarehouses.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInWarehouses.InStock) AS INSTOCK |FROM | RegisterAccumulations.ItemsInWarehouses AS ItemsInWarehouses |ItemsInWarehouses |Items.InWarehouse | ah.lager" ;

11. Design HAVING- lar deg bruke en aggregert funksjon på en datavalgbetingelse, lik WHERE-konstruksjonen.

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

Brukseksempel:

Query.Text = //velger grupperte poster der InStock-feltet er større enn 3 "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccumulations.ItemsInStocks.Items GROUP BY | ProductsInWarehouses.Nomenclature, | ProductsIWarehouses.Warehouse | |TILGJENGELIG | BELOPP(ProdukterILager.InStock) > 3" ;

12. Bygg INDEKS ETTER- brukes til å indeksere søkefeltet. Et søk med indeksering tar lengre tid å fullføre, men gjør søking gjennom indekserte felt raskere. Kan bare brukes i virtuelle tabeller.

Syntaks: INDEKSER ETTER<Поле1, ... , ПолеN>

Brukseksempel:

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

13. Design HVOR- lar deg pålegge en betingelse på alle valgfelt. Resultatet vil kun inkludere poster som tilfredsstiller betingelsen.

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

Brukseksempel:

Query.Text = //alle poster med CompensationRemaining er valgt<>0 og //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORmains.Counterparty, |CompensationRPORmains.Child, | CompensationRPORmains.CompensationRemaining, | CompensationRPORmains.AmountForCalcCompRemains |Place Dataccumulation |FROMRemainsHere.Compensation.Compensation.Compensation. KompensasjonRPORmaining.CompensationRemaining<>0 | And CompensationRPORmains.AmountForCalcCompRemaining> 100" ;

14. Design RESULTATER... GENERELT- brukes til å beregne totaler; designet spesifiserer feltene som totaler skal beregnes med og aggregerte funksjoner brukes på de totale feltene. Ved bruk av totaler for hvert felt etter TOTAL-konstruksjonen, grupperes data. Det er en valgfri GENERELL konstruksjon; bruken av den gir også ytterligere gruppering. Du vil se et eksempel på forespørselsresultatet nedenfor.

Syntaks: RESULTATER<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>AV<ОБЩИЕ> <Поле1, ... , ПолеN>

Brukseksempel:

Request.Text = "VELG | Beregninger. Motpartsavtale. Type avtale AS Kontraktstype, | Beregninger. Motpartsavtale AS Kontrakt, | Beregninger. Motpart, | Beregninger. Mengde av gjensidig oppgjørssaldo AS Saldo | FRA | Akkumuleringsregister. Gjensidig Oppgjør MED Motparter. Saldo AS Beregninger | TOTAL | BELØP (Saldo) |Programvare | GENERELT, | Type avtale";

Figuren skisserer grupperingene som ble dannet under utførelsen av forespørselen, den øverste refererer til GENERELT, og den andre til feltet MotpartsavtaleAvtaletype.

Ganske ofte er det behov for å jobbe med variabler av typen "Dato". I denne artikkelen vil vi se på de grunnleggende teknikkene - passere gjeldende dato, se etter en tom verdi, en vilkårlig dato.

Når du skriver spørringer, må du ofte sammenligne data med gjeldende dato. Det innebygde 1C-språket har CurrentDate()-funksjonen. Den lar deg bestemme gjeldende klokkeslett og dato på datamaskinen. For å utføre operasjoner med gjeldende dato, må du sende verdien av denne funksjonen som en parameter til forespørselen.

Nedenfor er en spørring som velger alle filer vedlagt utgiftsrapporter med en opprettelsesdato frem til nå:

ExampleRequest = Ny forespørsel;
Eksempel Request.Text = "
|VELG
| AdvanceReportAttachedFiles.Link
|FRA
| Directory.AdvanceReportAttachedFilesAS AdvanceReportAttachedFiles
|HVOR
| AdvanceReportAttachedFiles.Date< &ТекДата»;
Eksempel Request.SetParameter("CurrentDate", CurrentDate());

Egendefinert dato

Funksjonen diskutert ovenfor lar deg sammenligne og derfor gjøre et valg for en hvilken som helst periode. Denne metoden lar deg spesifisere et strengt utvalg i forespørselen uten å bruke ekstra parametere.

Vær oppmerksom på at når vi bruker denne funksjonen i eksemplet ovenfor, har vi bare sendt tre tall (år, måned, dag) som inndataparametere. De tre siste (time, minutt, sekund) er valgfrie og, hvis de er fraværende, erstattes de med "0", det vil si begynnelsen av dagen.

Dette eksemplet vil hente alle filer vedlagt utgiftsrapporter frem til slutten av fjoråret 2016. I denne forbindelse vil vi angi time, minutt og sekund for å sammenligne tidspunktet "31. desember 2016 23:59:59".

VELGE
AdvanceReportAttachedFiles.Link
FRA
Directory.AdvanceReportAttachedFiles AS AdvanceReportAttachedFiles
HVOR
AdvanceReportAttachedFiles.Date< ДАТАВРЕМЯ(2016, 12, 31, 23, 59, 59)

Tom dato

Den enkleste måten å sjekke en variabel for å se om den inneholder en tom dato, er å bruke en enkel sammenligning. I dette eksemplet, ved å bruke en spørring, vil vi velge alle kontantkvitteringer til kontoen der innkommende dato ikke er fylt inn.

"Dato"-typen i 1C er en av de 4 hoveddatatypene sammen med tall, streng og boolsk. Datoer er allestedsnærværende i konfigurasjoner – det er umulig å unngå å jobbe med denne datatypen under utvikling. Derfor er det bedre å begynne å skrive spørringer som allerede forstår hvordan du behandler datoer, hvilke alternativer det er for å jobbe med dem og hvordan de lagres. La oss se på eksempler på alle nyansene ved å skrive spørringer med forskjellige datoer.

Eksempler på arbeid med datoer i 1C-spørringer

Først av alt må du få datoen i forespørselen i ønsket format - med eller uten tid. Det er flere måter å utføre denne oppgaven på:

  1. Send via parameter. Du kan bare få gjeldende sesjonsdato ved å bruke denne metoden;
  2. Hent datoen i spørringen fra valgfeltet;
  3. Konverter fra numeriske verdier ved å bruke DATETIME()-funksjonen.

Den vanligste oppgaven når du arbeider med dokumenter er å se etter en tom dato i en 1C-forespørsel. I dette tilfellet er det enklest å sammenligne en variabel eller et felt med en tom dato, som oppnås ved å bruke funksjonen DATETIME(1,1,1):

DATOTIME (1, 1, 1)

Ved å bruke en lignende kommando kan du få en vilkårlig dato og klokkeslett i en forespørsel. Dessuten kan de spesifiseres med en nøyaktighet på opptil ett sekund ved å spesifisere 6 tall som parametere. Hvis bare 3 tall brukes, vil timer, minutter og sekunder settes til 0 (begynnelsen av dagen). For eksempel må vi velge dokumenter for de første 10 dagene av januar 2018 i forespørselen:

VELG Kvittering til Current Account. Link AS Link FROM Document. Kvittering til Current Account AS Kvittering til Current Account WHERE Kvittering til Current Account. Dato MELLOM DATETIME(2018, 1, 1, 0, 0, 0) OG DATETIME(2018, 1, 10, 23, 59, 59)

I en spørring i det innebygde 1C-språket kan du ikke bare velge ulike felt og motta parametere. Det er mange funksjoner som gjør det enklere å formatere datoer for en spesifikk oppgave. Hvis du ofte jobber med datoer i en spørring, bør du kjenne til disse kommandoene:

  • BEGYNNELSE AV PERIODEN. Parametrene indikerer datoen og tidsperioden som det er nødvendig å finne begynnelsen av datoen for. Brukes til å konvertere en dato til et tidløst format. For å gjøre dette, må du angi den andre parameteren - "DAG";
START OF PERIOD(,) START OF PERIOD(&Dato, DAY) period>date>
  • SLUT PÅ PERIODEN. En lignende kommando som returnerer siste dato i form av enhetene spesifisert i parameterne;
  • ADDKDATE. Lar deg få en dato som er større med et spesifisert antall spesifiserte tidsenheter. Funksjonsparametrene inkluderer dato, tidsenhet og nummer;
ADDKDATE(,) ADDKDATE(&Dato, DAG, 10) quantity>type>date>
  • FORSKJELL DATO. Henter forskjellen mellom datoer i de angitte enhetene;
DIFFERENCEDATE(,) DIFFERENCEDATE(&Dato1, &Dato2, DAG) type>date2>date1>
  • UKEDAGEN. Returnerer serienummeret til en av ukedagene.

Ved å bruke disse funksjonene riktig, kan utvikleren løse ganske ikke-trivielle problemer. For eksempel å få navnet på ukedagen for gjeldende dato i en forespørsel som en streng:

VELGER HVENDAG I UKEN(&CurrentDate) = 1 SÅ "Mandag" WHENDAYDAY(&CurrentDate) = 2 SÅ "Tuesday" WHENDAYDAY(&CurrentDate) = 3 SÅ "ONSDAG" WHENDAYDAY(&CurrentDAY DENNEDatoen "Torsdag) = 5 SÅ "Fredag" HÅNDAG I UKEN(&CurrentDate) = 6 SÅ "Lørdag" ELLER SLUTT "Søndag"

Konvertering av typer i en 1C-spørring fra et tall eller en streng til en dato er en arbeidskrevende oppgave. Du kan få en dato fra tall ved å bruke DATETIME-funksjonen, fra en streng - ved å kombinere SUBSTRING-funksjonen og SELECT WHEN THEN ELSE-konstruksjonen. Basert på dette foretrekker utviklere å hente datoen fra andre typer i modulen og sende den til forespørselen ved hjelp av en parameter. Dessverre er dette ikke alltid mulig, så du må endre datoformatet i forespørselen.

Det er mulig å spesifisere datoen i en 1C-forespørsel som en parameter for å hente data fra virtuelle registertabeller. Denne rollen kan også bruke alle funksjonene ovenfor. Men her er det viktig å ikke la en tom dato i en 1C-forespørsel påvirke det endelige resultatet av utføring av koden, så en sjekk må gjøres.

43
NULL – manglende verdier. For ikke å forveksle med null verdi! NULL er ikke et tall, tilsvarer ikke et mellomrom, en tom referanse eller Udefinert. NULL er en typedannende verdi, dvs. det er en type NULL og en enkelt verdi av denne typen. NULL... 26
For å generere og utføre spørringer til databasetabeller i 1C-plattformen, brukes et spesielt objekt for programmeringsspråket Query. Dette objektet opprettes ved å kalle opp New Request-konstruksjonen. Praktisk forespørsel... 18
Artikkelen gir nyttige teknikker når du arbeider med 1C v.8.2-spørringer, samt informasjon som ikke er så godt kjent om spørringsspråket. Jeg prøver ikke å gi en fullstendig beskrivelse av søkespråket, men vil bare dvele ved... 13
LIKE - Operator for å sjekke en streng for likhet med et mønster. Analog av LIKE i SQL. SIMILAR-operatoren lar deg sammenligne verdien av uttrykket som er spesifisert til venstre for det med mønsterstrengen som er spesifisert til høyre. Betydningen av uttrykket...