1c ամսաթվերի համեմատություն հարցումում: Ինչպե՞ս նշել դատարկ ամսաթիվ հարցման մեջ: Փոխակերպել ամսաթվի

Հաճախ անհրաժեշտություն է առաջանում աշխատել «Ամսաթիվ» տիպի փոփոխականների հետ։ Այս հոդվածում մենք կդիտարկենք հիմնական տեխնիկան՝ փոխանցել ընթացիկ ամսաթիվը, ստուգել դատարկ արժեք, կամայական ամսաթիվ:

Հարցումներ գրելիս հաճախ պետք է տվյալները համեմատել ընթացիկ ամսաթվի հետ: Ներկառուցված 1C լեզուն ունի CurrentDate() ֆունկցիան: Այն թույլ է տալիս որոշել ձեր համակարգչի ընթացիկ ժամը և ամսաթիվը: Ընթացիկ ամսաթվով գործողություններ կատարելու համար դուք պետք է այս ֆունկցիայի արժեքը որպես պարամետր փոխանցեք հարցումին:

Ստորև ներկայացված է հարցում, որն ընտրում է ծախսերի հաշվետվություններին կցված բոլոր ֆայլերը՝ մինչ այժմ ստեղծման ամսաթվով.

ExampleRequest = Նոր հարցում;
Օրինակ Request.Text = "
|ԸՆՏՐԵԼ
| AdvanceReportAttachedFiles.Link
|ԻՑ
| Directory.AdvanceReportAttachedFilesAS AdvanceReportAttachedFiles
|ՈՐՏԵՂ
| AdvanceReportAttachedFiles.Date< &ТекДата»;
Օրինակ Request.SetParameter ("CurrentDate", CurrentDate());

Պատվերով ամսաթիվ

Վերևում քննարկված գործառույթը թույլ է տալիս համեմատել և, հետևաբար, ընտրություն կատարել ցանկացած ժամանակաշրջանի համար: Այս մեթոդը թույլ է տալիս հարցումում նշել խիստ ընտրություն՝ առանց լրացուցիչ պարամետրեր օգտագործելու:

Խնդրում ենք նկատի ունենալ, որ վերը նշված օրինակում այս ֆունկցիան օգտագործելիս մենք ընդամենը երեք թիվ ենք փոխանցել (տարի, ամիս, օր) որպես մուտքային պարամետրեր: Վերջին երեքը (ժամ, րոպե, վայրկյան) կամընտիր են և բացակայելու դեպքում փոխարինվում են «0»-ով, այսինքն՝ օրվա սկիզբ:

Այս օրինակը կվերցնի բոլոր ֆայլերը, որոնք կցված են ծախսերի հաշվետվություններին մինչև անցյալ տարվա վերջ 2016 թ. Այս առումով կնշենք ժամը, րոպեն և վայրկյանը՝ համեմատելու «Դեկտեմբերի 31, 2016թ. 23:59:59» ժամանակային կետը:

ԸՆՏՐԵԼ
AdvanceReportAttachedFiles.Link
ԻՑ
Directory.AdvanceReportAttachedFiles AS AdvanceReportAttachedFiles
ՈՐՏԵՂ
AdvanceReportAttachedFiles.Date< ДАТАВРЕМЯ(2016, 12, 31, 23, 59, 59)

Դատարկ ամսաթիվ

Փոփոխականը ստուգելու ամենահեշտ ձևը պարզ համեմատություն օգտագործելն է, թե արդյոք այն պարունակում է դատարկ ամսաթիվ: Այս օրինակում, օգտագործելով հարցում, մենք կընտրենք բոլոր դրամական մուտքերը այն հաշվին, որի մուտքային ամսաթիվը լրացված չէ:

43
NULL – բացակայող արժեքներ: Չպետք է շփոթել զրոյական արժեքի հետ: NULL-ը թիվ չէ, չի հավասարվում բացատին, դատարկ հղումին կամ Չսահմանվածին: NULL-ը տիպի ձևավորող արժեք է, այսինքն. կա NULL տեսակ և այս տեսակի մեկ արժեք: ԴԱՏԱՐԿ... 26
1C հարթակում տվյալների բազայի աղյուսակներում հարցումներ ստեղծելու և գործարկելու համար օգտագործվում է Query ծրագրավորման լեզվի հատուկ օբյեկտ: Այս օբյեկտը ստեղծվում է՝ կանչելով New Request կառուցվածքը: Հարմար խնդրանք... 18
Հոդվածում ներկայացված են օգտակար տեխնիկա 1C v.8.2 հարցումների հետ աշխատելիս, ինչպես նաև տեղեկություններ, որոնք այնքան էլ հայտնի չեն հարցումների լեզվի մասին: Ես չեմ փորձում տալ Ամբողջական նկարագրությունհարցման լեզուն, բայց ես պարզապես ուզում եմ կանգ առնել... 13
LIKE - Օպերատոր, որը ստուգում է տողը օրինաչափության նմանության համար: LIKE-ի անալոգը SQL-ում: SIMILAR օպերատորը թույլ է տալիս համեմատել դրա ձախ կողմում նշված արտահայտության արժեքը աջ կողմում նշված օրինաչափության տողի հետ: Արտահայտության իմաստը...

«Ամսաթիվ» տեսակը 1C-ում տվյալների 4 հիմնական տեսակներից մեկն է՝ թվով, տողով և բուլյանով: Ամսաթվերը համատարած են կոնֆիգուրացիաներում. անհնար է խուսափել այս տվյալների տեսակի հետ աշխատելուց մշակման ընթացքում: Հետևաբար, ավելի լավ է սկսել հարցումներ գրել՝ արդեն հասկանալով, թե ինչպես մշակել ամսաթվերը, ինչ տարբերակներ կան դրանց հետ աշխատելու համար և ինչպես են դրանք պահվում: Դիտարկենք տարբեր տարեթվերով հարցումներ գրելու բոլոր նրբությունների օրինակները:

1C հարցումներում ամսաթվերի հետ աշխատելու օրինակներ

Նախևառաջ պետք է հայտում ամսաթիվը ստանալ անհրաժեշտ ձևաչափով՝ ժամանակով կամ առանց ժամանակի: Այս առաջադրանքը կատարելու մի քանի եղանակ կա.

  1. Անցում պարամետրով: Դուք կարող եք ստանալ ընթացիկ նստաշրջանի ամսաթիվը միայն այս մեթոդով.
  2. Ստացեք հարցման ամսաթիվը ընտրության դաշտից;
  3. Փոխակերպեք թվային արժեքներից՝ օգտագործելով DATETIME() ֆունկցիան:

Փաստաթղթերի հետ աշխատելիս ամենատարածված խնդիրը 1C հարցումում դատարկ ամսաթվի ստուգումն է: Այս դեպքում ամենահեշտն է համեմատել փոփոխականը կամ դաշտը դատարկ ամսաթվի հետ, որը ստացվում է DATETIME(1,1,1) ֆունկցիայի միջոցով.

DATETIME (1, 1, 1)

Օգտագործելով նմանատիպ հրաման, դուք կարող եք ստանալ կամայական ամսաթիվ և ժամ հարցումում: Ավելին, դրանք կարող են ճշգրտվել մինչև վայրկյանի ճշգրտությամբ՝ որպես պարամետր նշելով 6 թիվ։ Եթե ​​օգտագործվում է ընդամենը 3 թիվ, ապա ժամերը, րոպեները և վայրկյանները կսահմանվեն 0 (օրվա սկիզբ): Օրինակ, մենք պետք է ընտրենք փաստաթղթեր 2018 թվականի հունվարի առաջին 10 օրվա համար հարցումում.

ԸՆՏՐԵՔ անդորրագիրը ընթացիկ հաշվին: Հղեք AS Հղում փաստաթղթից: Անդորրագիր ընթացիկ հաշվին AS անդորրագիր ընթացիկ հաշվին WHERE ստացականը ընթացիկ հաշվին: Ամսաթիվ DATETIME (2018, 1, 1, 0, 0, 0) ԵՎ DATETIME (2018, 10, 23, 59, 59)

Ներկառուցված 1C լեզվով հարցումով դուք կարող եք ոչ միայն ընտրել տարբեր դաշտեր և ստանալ պարամետրեր: Կան բազմաթիվ գործառույթներ, որոնք հեշտացնում են կոնկրետ առաջադրանքի համար ամսաթվերի ձևաչափումը: Եթե ​​դուք հաճախ եք աշխատում ամսաթվերի հետ հարցման մեջ, ապա դուք պետք է իմանաք այս հրամանները.

  • ԺԱՄԱՆԱԿԻ ՍԿԶԲԸ.Պարամետրերը նշում են ամսաթիվը և ժամանակաշրջանը, որի համատեքստում անհրաժեշտ է ստանալ ամսաթվի սկիզբը: Օգտագործվում է ամսաթիվը անժամկետ ձևաչափի փոխարկելու համար: Դա անելու համար անհրաժեշտ է սահմանել երկրորդ պարամետրը՝ «ՕՐ»;
START OF PERIOD(,) START OF PERIOD(&Date, DAY) period>date>
  • ԺԱՄԱՆԱԿԻ ՎԵՐՋ.Նմանատիպ հրաման, որը վերադարձնում է վերջին ամսաթիվը պարամետրերում նշված միավորների առումով.
  • ADDKDATE:Թույլ է տալիս Ձեզ ստանալ ամսաթիվ, որն ավելի մեծ է նշված ժամանակային միավորների որոշակի քանակով: Գործառույթի պարամետրերը ներառում են ամսաթիվը, ժամանակի միավորը և համարը.
ADDKDATE(,) ADDKDATE(&Date, DAY, 10) քանակ>տեսակ>ամսաթիվ>
  • ՏԱՐԲԵՐՎԵԼ.Ստանում է նշված միավորների ամսաթվերի տարբերությունը.
DIFFERENCEDATE(,) DIFFERENCEDATE(&Date1, &Date2, DAY) type>date2>date1>
  • ՇԱԲԱԹՎԱ ՕՐ.Վերադարձնում է շաբաթվա օրերից մեկի հերթական համարը:

Այս գործառույթները ճիշտ օգտագործելով՝ ծրագրավորողը կարող է լուծել բավականին ոչ տրիվիալ խնդիրներ։ Օրինակ՝ ստանալով ընթացիկ ամսաթվի շաբաթվա օրվա անվանումը հարցումում՝ որպես տող.

ԸՆՏՐԵՔ ՇԱԲԱԹԻ ՈՒՐԱՇԱԲԱԹ (&Ընթացիկ Ամսաթիվ) = 1 ՀԵՏՈ «Երկուշաբթի» ՇԱԲԱԹՕՐ (&Ընթացիկ Ամսաթիվ) = 2 ՀԵՏՈ «Երեքշաբթի» ՇԱԲԱԹԻ ԿԱԶՄԱԿԵՐՊՈՒՄ (&Ընթացիկ ամսաթիվ) = 3 ՀԵՏՈ «Չորեքշաբթի» Շաբաթ օրը (&Ընթացիկ 4ՇԱԲԱԹՕՐ) (&CurrentDate) = 5 ՀԵՏՈ «Ուրբաթ» ՇԱԲԱԹԻ ՈՒՐԲԱԹ (&CurrentDate) = 6 ՀԵՏՈ «Շաբաթ» ԱՅԼ «Կիրակի» ՎԵՐՋ

1C հարցումում տիպերը թվից կամ տողից ամսաթվի փոխակերպելը աշխատատար խնդիր է: Դուք կարող եք ամսաթիվ ստանալ թվերից՝ օգտագործելով DATETIME ֆունկցիան, տողից՝ համատեղելով SUBSTRING ֆունկցիան և SELECT WHEN THEN ELSE կառուցվածքը: Ելնելով դրանից՝ մշակողները նախընտրում են ստանալ ամսաթիվը մոդուլի այլ տեսակներից և այն փոխանցել հարցումին՝ օգտագործելով պարամետր: Ցավոք, դա միշտ չէ, որ հնարավոր է, այնպես որ դուք պետք է փոխեք ամսաթվի ձևաչափը հարցումում:

Հնարավոր է նշել ամսաթիվը 1C հարցումում որպես պարամետր՝ վիրտուալ ռեգիստրի աղյուսակներից տվյալներ ստանալու համար: Այս դերը կարող է նաև օգտագործել վերը նշված բոլոր գործառույթները: Բայց այստեղ կարեւոր է թույլ չտալ դատարկ ամսաթիվ 1C հարցումը կարող է ազդել կոդի կատարման վերջնական արդյունքի վրա, ուստի պետք է ստուգել:

Շատ հաճախ 1C հարցումներում դուք պետք է աշխատեք ամսաթվերի հետ: Հատկապես, երբ հարցումը կատարվում է մետատվյալների օբյեկտներին, որոնք պարունակում են պարբերական տեղեկատվություն: Որպես կանոն, դրանք ռեգիստրներ են (տեղեկատվություն, կուտակում, հաշվարկ, հաշվառում): Դիտարկենք 1C հարցումների լեզվի ամենատարածված գործառույթները՝ ամսաթվերի հետ աշխատելու համար: Մենք օրինակներ կկառուցենք տեղեկատվական ռեգիստրի հիման վրա ԱշխատակիցներԿազմակերպություններ ZUP կոնֆիգուրացիաների տարբերակ 2.5.

  • Ամսաթիվ ԺԱՄԱՆԱԿ

    Թույլ է տալիս Ձեզ ստանալ հայտի ամսաթիվ (ժամանակով կամ առանց ժամանակի)՝ նշելով տարին, ամիսը, օրը, ժամը, րոպեն, վայրկյանը:
    Շարահյուսություն:
    DATETIME (տարի, ամիս, օր, ժամ, րոպե, վայրկյան)
    Սովորաբար ժամը, րոպեն և վայրկյանը նշված չեն: Եկեք մի մինի օրինակ բերենք. Հարցման վահանակում մուտքագրեք հետևյալ տեքստը.

    SELECT DATETIME (2016, 1, 1)

    Հարցման կատարման արդյունքում ստանում ենք ամսաթիվ՝ 01.01.2016թ
    Իրականում դժվար է պատկերացնել մի իրավիճակ, երբ խնդրանքում ամսաթիվն այսպես նշվի։ Ի վերջո, երբ դուք պետք է նշեք ժամկետ, օգտագործվում են պարամետրեր: Բայց կա դեպք, երբ այս ֆունկցիան առանձնահատուկ արժեք ունի։ Սա այն դեպքում, երբ մենք պետք է դաշտերում կամ հարցումների պայմաններում նշենք դատարկ ամսաթիվ: Հիշեցնեմ, որ 1C լեզվի համար դատարկ ամսաթիվ ունի 0001.01.01 ձևը: Այսպիսով, հարցումում դատարկ ամսաթիվ ստանալու համար պարզապես նշեք DATETIME (1, 1, 1). Որպես օրինակ՝ ընտրենք տեղեկատվական ռեգիստրից ԱշխատակիցներԿազմակերպություններգրառումներ, որոնք չեն լրացվում Ավարտման ժամկետը:

    SELECT Organizational Employees.Period, Organizational Employees.Employee, Organizational Employees.Position, Organizational Employees.Organization Division FROM Register Information.Organizational Employees AS Organizational Employees WHERE Organizational Employees.Ավարտման ժամանակաշրջան = DATETIME(1, 1)

  • ԺԱՄԱՆԱԿԻ ՍԿԶԲԸ

    Համար նշված ամսաթիվըվերադարձնում է այն ժամանակաշրջանի սկիզբը, որի մեջ մտնում է:
    Շարահյուսություն:
    ԺԱՄԱՆԱԿԱՇՐՋԱՆԻ ՄԵԿՆԱՐԿ (ամսաթիվ, ժամանակաշրջանի տեսակ)
    PeriodType-ը կարող է ընդունել հետևյալ արժեքները. ՐՈՊԵ, ԺԱՄ, ՕՐ, ՇԱԲԱԹ, ԱՄԻՍ, ԵՌԱՄՍՅԱԿ, ՏԱՐԻ, Տասնամյակ, ԿԵՍ ՏԱՐԻ
    Հարցման վահանակում մուտքագրեք.

    ԸՆՏՐԵՔ ԺԱՄԱՆԱԿԱՀԱՏՎԱԾԻ ՍԿՍԻԶԲ (ԱՄՍՎԱԾ ԺԱՄԱՆԱԿ(2016, 1, 15), ԱՄԻՍ)

    Հարցումը կվերադառնա - 01/01/2016
    Իսկ հիմա օրինակ. Ինչպես գիտեք, ռեգիստրի պարբերականությունը ԱշխատակիցներԿազմակերպություններմի օր. Եկեք ստեղծենք հարցում, որում փաստացի ռեկորդային ժամանակահատվածի փոխարեն կցուցադրվի ամսվա սկզբի ամսաթիվը:

    SELECT BEGINNING OF PERIOD(Employees of Organizations.Period, MONTH) AS Սկիզբը, Employees of Organizations.Employee, Employee of Organizations.Position, Employees of Organizations.Organization of Division FROM Register Information.Employees of Organizations AS Employees of Organizations.

  • ԺԱՄԱՆԱԿԻ ՎԵՐՋ

    Շարահյուսությունը նույնն է, ինչ ժամանակաշրջանի սկզբի համար: Եվ ինչպես ենթադրում է անունը, այն վերադարձնում է ժամանակաշրջանի ավարտը ըստ ամսաթվի և ժամանակաշրջանի տեսակի: Մենք դա մանրամասն չենք դիտարկի։ Սահմանափակվենք մինի օրինակով.
    Հայց.

    ԸՆՏՐԵՔ ԺԱՄԱՆԱԿԱՇՐՋԱՆԻ ԱՎԱՐՏԸ (DATETIME (2016, 1, 15), ԱՄԻՍ)

    Վերադարձ 31.01.2016 23:59:59
    Ինչպես տեսնում եք, արժեքը ճշգրիտ վերադարձվում է երկրորդին:

  • ADDKDATE

    Ամսաթվին ավելացնում է նշված թվով ժամանակային ընդմիջումներ:
    Շարահյուսություն:
    ADDKDATE (ամսաթիվ, ժամանակաշրջանի տեսակ, քանակ)
    PeriodType-ն ընդունում է նույն արժեքները, ինչ ֆունկցիայի համար ԺԱՄԱՆԱԿԻ ՍԿԶԲԸ
    Օրինակ՝ ընտրենք փետրվարի ամսաթիվը.

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

    Մենք ստանում ենք ամսաթիվ 04/15/2016 0:00:00 Չնայած այն հանգամանքին, որ փետրվարը կարճ ամիս է, ստացված ամսաթվի օրը նույնն է, ինչ սկզբնականը: Շատ հարմար է, որ դուք ստիպված չեք լինի մտածել ամիսների օրերի քանակի մասին:
    Քանակը կարող է լինել նաև բացասական։ Այնուհետեւ միջակայքը հաշվում են հակառակ ուղղությամբ։

  • ՏԱՐԲԵՐՎԵԼ

    Հաշվեք նշված միավորներում երկու ամսաթվերի տարբերությունը:
    Շարահյուսություն:
    ԱՄՍԹՎԱՅԻ ՏԱՐԲԵՐՈՒԹՅՈՒՆ (Սկիզբի ամսաթիվ, ավարտի ամսաթիվ, ժամանակաշրջանի տեսակ)
    Ժամանակահատվածի տեսակը կարող է վերցնել հետևյալ արժեքները. ԵՐԿՐՈՐԴ, ՐՈՊԵ, ԺԱՄ, ՕՐ, ԱՄԻՍ, ԵՌԱՄՍՅԱԿ, ՏԱՐԻ
    Օրինակ:

    ԸՆՏՐԵԼ ՏԱՐԲԵՐՈՒԹՅՈՒՆԸ (DATETIME (2016, 2, 15), DATETIME (2016, 3, 1), DAY)

    վերադարձնում է 15

Այստեղ մենք վերանայեցինք 1C հարցումների լեզվի առավել հաճախ օգտագործվող գործառույթները: Մնացածները բավականին հազվադեպ են օգտագործվում։ Անհրաժեշտության դեպքում նրանց հետ աշխատելու օրինակները կարելի է գտնել 1C հարթակում ներկառուցված օգնության մեջ:



սխալ:Բովանդակությունը պաշտպանված է!!