Hvordan få nåværende dato 1s. Konverter til dato

💖 Liker du det? Del lenken med vennene dine

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 gitt tre tall (år, måned, dag) som inputparametere. 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.

Svært ofte i 1C-spørringer må du jobbe med datoer. Spesielt når forespørselen er gjort til metadataobjekter som inneholder periodisk informasjon. Som regel er dette registre (informasjon, akkumulering, beregning, regnskap). La oss se på de mest brukte funksjonene til 1C-spørringsspråket for å jobbe med datoer. Vi skal bygge eksempler basert på informasjonsregisteret Ansatte Organisasjoner ZUP-konfigurasjoner versjon 2.5.

  • DATETIME

    Lar deg få en dato i en forespørsel (med eller uten tid) ved å spesifisere år, måned, dag, time, minutt, sekund.
    Syntaks:
    DATETIME(År, Måned, Dag, Time, Minutt, Sekund)
    Vanligvis er ikke time, minutt og sekund angitt. La oss gi et minieksempel. Skriv inn følgende tekst i spørringskonsollen:

    VELG DATOTIME(2016, 1, 1)

    Som et resultat av å utføre forespørselen får vi datoen - 01/01/2016
    Faktisk er det vanskelig å forestille seg en situasjon der datoen vil bli angitt på denne måten i en forespørsel. Tross alt, når du trenger å spesifisere en periode, brukes parametere. Men det er et tilfelle når denne funksjonen er av spesiell verdi. Dette er når vi må angi en tom dato i feltene eller i forespørselsbetingelsene. La meg minne deg på at for 1C-språket har en tom dato formen - 0001.01.01. Derfor, for å få en tom dato i en forespørsel, bare spesifiser DATOTIME(1, 1, 1). La oss for eksempel velge fra informasjonsregisteret Ansatte Organisasjoner poster som ikke er fylt ut Gjennomføringsperiode:

    VELG Ansatte i organisasjoner.Periode, Ansatte i organisasjoner.Ansatte, Ansatte i organisasjoner.Posisjon, Ansatte i organisasjoner.Del i organisasjon FRA Registerinformasjon. Ansatte i organisasjoner AS Ansatte i organisasjoner HVOR Ansatte i organisasjoner.DatoTID, = DATETID(1) , 1)

  • BEGYNNELSEN AV PERIODEN

    For den angitte datoen returnerer begynnelsen av perioden den tilhører.
    Syntaks:
    START AV PERIODE(dato, periodetype)
    PeriodType kan ha følgende verdier: MINUTT, TIME, DAG, UKE, MÅNED, KVARTAL, ÅR, DEKADE, HALVÅR
    I spørringskonsollen skriver du inn:

    VELG START PÅ PERIODE(DATOTID(2016, 1, 15), MÅNED)

    Forespørselen kommer tilbake - 01.01.2016
    Og nå et eksempel. Som du vet, periodisiteten til registeret Ansatte Organisasjoner en dag. La oss lage en spørring der startdatoen for måneden vises i stedet for den faktiske rekordperioden.

    VELG BEGYNNELSE AV PERIODEN(Ansatte i organisasjoner.Periode, MÅNED) AS Begynnelsen av måneden, Ansatte i organisasjoner.Ansatte, Ansatte i organisasjoner.Posisjon, Ansatte i organisasjoner.Seksjon for organisasjon FRA Registerinformasjon. Ansatte i organisasjoner AS Ansatte

  • SLUT PÅ PERIODEN

    Syntaksen er den samme som for begynnelsen av perioden. Og som navnet tilsier, returnerer den slutten av perioden etter dato og periodetype. Vi vil ikke vurdere det i detalj. La oss begrense oss til et minieksempel.
    Forespørsel:

    VELG SLUT PÅ PERIODE(DATOTID(2016, 1, 15), MÅNED)

    Returnerer 31.01.2016 23:59:59
    Som du kan se, returneres verdien nøyaktig til sekundet.

  • ADDKDATE

    Legger til det angitte antallet tidsintervaller til datoen.
    Syntaks:
    ADDKDATE(Dato, PeriodeType, Quantity)
    PeriodType tar de samme verdiene som for funksjonen BEGYNNELSEN AV PERIODEN
    La oss for eksempel velge februardatoen:

    SELECT ADDKDATE(DATETIME(2016, 2, 15), MONTH, 2)

    Vi får datoen 04/15/2016 0:00:00 Til tross for at februar er en kort måned, er dagen for mottatt dato den samme som den opprinnelige. Det er veldig praktisk at du ikke trenger å tenke på antall dager i måneder.
    Mengden kan også være negativ. Deretter telles intervallet i motsatt retning.

  • FORSKJELL DATO

    Beregn forskjellen mellom to datoer i de angitte enhetene.
    Syntaks:
    DATODIFFERENCE (startdato, sluttdato, periodetype)
    Periodetypen kan ha følgende verdier: SEKUND, MINUTT, TIME, DAG, MÅNED, KVARTAL, ÅR
    For eksempel:

    VELG DIFERENCEDATE(DATETIME(2016; 2; 15); DATETIME(2016; 3; 1); DAY)

    returnerer 15

Her har vi gjennomgått de mest brukte funksjonene til 1C-spørringsspråket. Resten brukes ganske sjelden. Eksempler på arbeid med dem kan om nødvendig finnes i hjelpen som er innebygd i 1C-plattformen.

"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 et 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 gjeldende konto. Koble FRA Dokument til gjeldende konto HVOR Kvittering til gjeldende konto. 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:

  • BEGYNNELSEN AV PERIODEN. Parametrene angir 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:

UTVALG NÅR UKEDAG(&GjeldendeDato) = 1 SÅ "MANDAG" NÅR UKEDAG(&Gjeldendedato) = 2 SÅ "Tirsdag" NÅR UKEDAG(&Gjeldendedato) = 3 SÅ "ONSDAG" NÅR UKEDAG(&GjeldendeDato DEN 4.WEGDato) 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.

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 sette starten på dagen.

Forespørsel. 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:

Forespørsel. 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 .

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

Forespørsel. 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.

Forespørsel. Tekst= "VELGE
YEAR(DATETIME (2016,09,28,12,22,00))"
;

Forespørsel. Tekst= "VELGE
// Resultat: 2016
WEEK(DATETIME (2016,09,28,12,22,00))"

Forespørsel. Tekst= "VELGE
;
// Resultat: 40

Forespørsel. Tekst= "VELGE
WEEKDAY(DATETIME (2016,09,28,12,22,00))"
;

Forespørsel. Tekst= "VELGE
// Resultat: 3
YEARDAY(DATETIME (2016,09,28,12,22,00))"

;

// Resultat: 272 DAY(DATETIME (2016,09,28,12,22,00))"

Som en parameter Dato en verdi med type sendes Dato. Parameter Periode; // 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). kan ta en av følgende verdier: AddToDate(dato, periode, verdi). SEKUND

Forespørsel. Tekst= "VELGE
MINUTT, TIME, DAG, UKE, DEKADE, MÅNED, KVARTAL, HALVÅR, ÅR
; Parameter

Forespørsel. Tekst= "VELGE
Betydning
; viser antall perioder som skal legges til. Hvis perioden må trekkes fra, så parameteren

må være negativ.

// Resultat: 272 AddTODate(DATETIME(2016, 9, 28, 12, 22, 0), HALVÅR, 1)"

For å gjøre dette, bruk funksjonen // Resultat: 28. mars 2017 12:22:00 AddKDate(DATETIME(2016, 9, 28, 12, 22, 0), DECADE, -1)"

For å gjøre dette, bruk funksjonen // Resultat: 18. september 2016 12:22:00 Hvordan beregne datoforskjellen i 1C-spørringer

For å gjøre dette, bruk funksjonen Periode; // Resultat: 28, DifferenceDate(Dato1, Dato2, Periode). Dato 1

Forespørsel. Tekst= "VELGE
- datoen som skal trekkes fra.
Dato 2 -

Forespørsel. Tekst= "VELGE
dato å trekke fra.
; MINUTT, TIME, DAG, MÅNED, KVARTAL, ÅR

. Det viser i hvilke enheter vi ønsker å få resultatet DifferenceDate(DATETIME(2016, 9, 28, 12, 22, 0), DATOTIME(2017, 9, 28, 12, 22, 0), KVARTAL)"; Dato// Resultat: 4

DifferenceDate(DATETIME(2016, 9, 28, 12, 22, 0), DATETIME(2017, 9, 28, 12, 22, 0), Second)"
Fortell venner
Twitter
2024-01-31 08:58:56
Med advent...
2024-01-30 07:30:31
Neste artikkel
2024-01-28 07:36:03