1c როგორ უნდა მიუთითოთ მიმდინარე თარიღი მოთხოვნაში. გადაიყვანეთ თარიღად

1C შეკითხვებს, ისევე როგორც 1C:Enterprise პლატფორმის ჩაშენებულ ენას, აქვს თარიღებთან მუშაობის ფუნქციები. ისინი ხელს უწყობენ შეკითხვებში თარიღის კონვერტაციის გამარტივებას, გამოყენების თავიდან აცილებას დიდი რაოდენობითპარამეტრები. მოდით შევხედოთ ამ ფუნქციებს.

როგორ დავაყენოთ თარიღი 1C მოთხოვნებში, როგორც მუდმივი

DATETIME (წელი, თვე, დღე, საათი, წუთი, წამი). Პარამეტრები წელი, თვედა Დღესსავალდებულოა, სხვები არა. თუ არ მიუთითებთ დროს, სისტემა დაადგენს დღის დაწყებას.

მოთხოვნა. ტექსტი = "აირჩიე
DATETIME (2016,09,28,12,22,00)"
; // შედეგი: 2016 წლის 28 სექტემბერი 12:22:00

გარდა ამისა, ამ ფუნქციის პარამეტრებად მხოლოდ რიცხვები შეიძლება განისაზღვროს. თქვენ არ შეგიძლიათ მიუთითოთ სხვა ფუნქციების მნიშვნელობები, როგორც პარამეტრები. მაგალითად, ეს მშენებლობა არ იმუშავებს:

მოთხოვნა. ტექსტი = "აირჩიე
DATETIME (წელი (წყარო.თარიღი),09,28,12,22,00)
დირექტორიადან.წყარო AS წყარო"
;

როგორ მივიღოთ წლის დასაწყისი ან დასასრული, ნახევარი წელი, კვარტალი, თვე, ათწლეული, კვირა, დღე, საათი, წუთი 1C შეკითხვებში

ამისათვის გამოიყენება შემდეგი ფუნქციები:

  • საწყისი პერიოდი (თარიღი, პერიოდი)
  • ბოლო პერიოდი (თარიღი, პერიოდი)

როგორც პარამეტრი თარიღიგადაცემულია მნიშვნელობა ტიპის Თარიღი.Პარამეტრი პერიოდი .

მოთხოვნა. ტექსტი = "აირჩიე
საწყისი პერიოდი (DATETIME (2016,09,28,12,22,00), DECADE)"
; // შედეგი: 2016 წლის 21 სექტემბერი 0:00:00 საათი

მოთხოვნა. ტექსტი = "აირჩიე
ბოლო პერიოდი (DATETIME (2016,09,28,12,22,00), QUARTER)"
; // შედეგი: 30 სექტემბერი, 2016 23:59:59

როგორც მაგალითებიდან ხედავთ, ამ ფუნქციებში შეგიძლიათ გამოიყენოთ სხვა ჩადგმული ფუნქციები.

როგორ მივიღოთ წელი, წელიწადის დღე, კვარტალი, თვე, კვირა, კვირის დღე, დღე, საათი, წუთი, წამი თარიღიდან 1C შეკითხვებში

ამისათვის არის შესაბამისი ფუნქციები, რომლებზეც პარამეტრად უნდა ჩაწეროთ თარიღი.

  • ფუნქცია YEAR (თარიღი)— აბრუნებს წლის ნომერს;
  • ფუნქცია DAYYEAR (თარიღი)— ზრდის დღეების რაოდენობას წელიწადში;
  • ფუნქცია QUARTER (თარიღი)— აბრუნებს კვარტალის ნომერს;
  • ფუნქცია MONTH (თარიღი)— აბრუნებს თვის ნომერს;
  • ფუნქცია კვირა (თარიღი)— აბრუნებს კვირის რიცხვს წელიწადში;
  • ფუნქცია კვირის დღე (თარიღი)— აბრუნებს კვირის დღეების რაოდენობას (ორშაბათი — 1, კვირა — 7);
  • ფუნქცია DAY (თარიღი)— აბრუნებს თვის დღეების რიცხვს;
  • ფუნქცია HOUR (თარიღი)- აბრუნებს საათს;
  • ფუნქცია MINUTE (თარიღი)— აბრუნებს წუთებს;
  • ფუნქცია SECOND (თარიღი)- უბრუნდება წამში.

მოთხოვნა. ტექსტი = "აირჩიე
YEAR(DATETIME (2016,09,28,12,22,00))"
; // შედეგი: 2016 წ

მოთხოვნა. ტექსტი = "აირჩიე
WEEK(DATETIME (2016,09,28,12,22,00))"
; // შედეგი: 40

მოთხოვნა. ტექსტი = "აირჩიე
WEEKDAY(DATETIME (2016,09,28,12,22,00))"
; // შედეგი: 3

მოთხოვნა. ტექსტი = "აირჩიე
DAYYEAR(DATETIME (2016,09,28,12,22,00))"
; // შედეგი: 272

მოთხოვნა. ტექსტი = "აირჩიე
DAY(DATETIME (2016,09,28,12,22,00))"
; // შედეგი: 28

როგორ დავამატოთ ან გამოვაკლოთ თარიღს წელიწადი, ნახევარი წელი, კვარტალი, თვე, ათწლეული, კვირა, დღე, საათი, წუთი, წამი 1C შეკითხვებში

ამისათვის გამოიყენეთ ფუნქცია AddToDate (თარიღი, პერიოდი, მნიშვნელობა).

როგორც პარამეტრი თარიღიგადაცემულია მნიშვნელობა ტიპის Თარიღი.Პარამეტრი პერიოდიშეუძლია მიიღოს ერთ-ერთი შემდეგი მნიშვნელობა: მეორე, წუთი, საათი, დღე, კვირა, ათწლეული, თვე, მეოთხედი, ნახევარი წელი, წელი.

Პარამეტრი მნიშვნელობააჩვენებს დასამატებელი პერიოდების რაოდენობას. თუ პერიოდის გამოკლებაა საჭირო, მაშინ პარამეტრი მნიშვნელობაუარყოფითი უნდა იყოს.

მოთხოვნა. ტექსტი = "აირჩიე
AddToDate(DATETIME(2016, 9, 28, 12, 22, 0), HALF YEAR, 1)"
; // შედეგი: 28 მარტი, 2017 12:22:00

მოთხოვნა. ტექსტი = "აირჩიე
დამატებაKDate(DATETIME(2016, 9, 28, 12, 22, 0), DECADE, -1)"
; // შედეგი: 18 სექტემბერი, 2016 12:22:00

როგორ გამოვთვალოთ თარიღის სხვაობა 1C მოთხოვნებში

ამისათვის გამოიყენეთ ფუნქცია DifferenceDate (თარიღი1, თარიღი2, პერიოდი).

Პარამეტრი თარიღი 1- გამოკლების თარიღი.

Პარამეტრი თარიღი 2 -თარიღი, საიდანაც გამოკლდება.

Პარამეტრი პერიოდიშეუძლია მიიღოს ერთ-ერთი შემდეგი მნიშვნელობა: მეორე, წუთი, საათი, დღე, თვე, მეოთხედი, წელიწადი. ის გვიჩვენებს, თუ რა ერთეულებში გვინდა შედეგის მიღება

მოთხოვნა. ტექსტი = "აირჩიე
DifferenceDate(DATETIME(2016, 9, 28, 12, 22, 0), DATETIME(2017, 9, 28, 12, 22, 0), QUARTER)"
; // შედეგი: 4

მოთხოვნა. ტექსტი = "აირჩიე
DifferenceDate(DATETIME(2016, 9, 28, 12, 22, 0), DATETIME(2017, 9, 28, 12, 22, 0), მეორე)"
; // შედეგი: 31 536 000

ყველა ფუნქციაში გარდა ფუნქციისა თარიღი დრო, როგორც პარამეტრი თარიღიშეიძლება იყოს არა მხოლოდ კონკრეტული თარიღის მნიშვნელობა (მუდმივი ან მოთხოვნის პარამეტრი), არამედ წყაროს ცხრილის ველებიც.

1C კონფიგურაციებში არსებული ყველა დოკუმენტი და, შესაბამისად, თითქმის ყველა რეესტრს უნდა ჰქონდეს მინიმუმ ერთი ატრიბუტი Date ტიპის, რის გამოც ყველა დეველოპერმა უნდა იცოდეს და გაიგოს:

  • როგორ გადავიტანოთ სხვა ტიპის პარამეტრები განსახილველ ტიპად;
  • როგორ განვსაზღვროთ ცარიელი თარიღი 1C მოთხოვნაში;
  • რა განსხვავებაა თარიღსა და ვადას შორის?

სწორედ ამ კითხვებზე ვეცდებით ვუპასუხოთ ჩვენს სტატიაში.

რა არის თარიღი და როგორ განვსაზღვროთ იგი

მას შემდეგ, რაც მიიღოს უმრავლესობა მენეჯმენტის გადაწყვეტილებებიდა ჩანაწერების შენახვა არ საჭიროებს დროის სიზუსტეს, რომელიც აღემატება 1 წამს, 1C პლატფორმის დეველოპერებმა გადაწყვიტეს, რომ ეს მნიშვნელობა იქნება აბსოლუტური მინიმალური თარიღის ფორმატში. ამრიგად, პროგრამის თითოეული ატრიბუტი, რომელიც აღწერს მოვლენის დროს, უნდა შეიცავდეს:

  • მოვლენის ჩატარების წელი;
  • ამ მოვლენის თვე;
  • Დღეს.

არ არის საჭირო მითითება: საათი, წუთი და წამი. თუ ეს სამი პარამეტრი გამოტოვებულია და დამატებითი პირობები არ არის, პროგრამა ავტომატურად ადგენს დროს დღის დასაწყისში.

მსოფლიოში არსებულ თარიღის ფორმატებს მნიშვნელოვანი განსხვავებები აქვთ:

  1. რუსეთში ჩვენ მიჩვეულები ვართ, რომ ჯერ დღე, შემდეგ ღონისძიების თვე, ბოლოს კი წელი დავაყენოთ;
  2. აშშ-ს მაცხოვრებლები იწყებენ თარიღს თვეში;
  3. ჩეხები, პოლონელები და სლოვენიელები რეკორდულ პერიოდებს აფიქსირებენ წელი-თვე-დღე ფორმატში.

ეს არის უკანასკნელი ფორმატი, რომელსაც იყენებს 1C პლატფორმა.

გადაიყვანეთ თარიღად

იმისათვის, რომ მიიღოთ პარამეტრი თარიღის ტიპის რამდენიმე მნიშვნელობიდან ან სტრიქონიდან, უნდა გამოიყენოთ ნახ. 1

როგორც ზემოთ მოყვანილი ფიგურიდან ჩანს, თქვენ შეგიძლიათ განსაზღვროთ თარიღი ან ერთი ხაზის გამოყენებით, ან ამ ხაზის კომპონენტურ ნაწილებად გაყოფით მძიმით, შედეგი არ შეიცვლება.

მნიშვნელოვანია გვესმოდეს, რომ თარიღის წელი უნდა შეიცავდეს ოთხ ციფრს, მათ შორის მოვლენის ათასწლეულსა და საუკუნეს, თვე, დღე, საათები და წამები უნდა შედგებოდეს ორი სიმბოლოს ჩათვლით, წინა ნულების ჩათვლით.

პროგრამაში დროის ათვლა იწყება 0001 წლის 1 იანვრის დღის დასაწყისიდან. ზემოთ მოყვანილი კოდისთვის, ეს მნიშვნელობა შეიძლება განისაზღვროს ორიდან ერთი გზით (სურათი 2).

ბრინჯი. 2

მეორე სტრიქონში ჩვენ გამოვტოვეთ ღონისძიების საათები, წუთები და წამები, რამაც საერთოდ არ იმოქმედა ჩვენი კოდის შესრულებაზე.

თარიღის გამოყენების მახასიათებლები 1C შეკითხვებში

1C პლატფორმის მიერ გამოყენებული მონაცემთა ტიპების უმეტესობისთვის არის წინასწარ განსაზღვრული ბათილი მნიშვნელობები. რიცხვებისთვის ეს არის 0, ბმულებისთვის შეგიძლიათ განსაზღვროთ მნიშვნელობა EmptyLink(), თარიღისთვის ცარიელი მნიშვნელობა ჩვეულებრივ ითვლება დაწყების თარიღად და სწორედ ამით უნდა შევადაროთ შესაბამისი ტიპის დეტალები დაყენებისას. მოთხოვნის პარამეტრები.

მნიშვნელოვანია გვესმოდეს, რომ მაშინაც კი, თუ მოცემული ტიპის ფორმის ატრიბუტის მნიშვნელობა არ შეიცავს ციფრებს, ანუ ფანჯარა ასე გამოიყურება (ნახ. 3), ეს არ ნიშნავს, რომ მასში არაფერია მითითებული; შედარება. ამ პარამეტრის ცარიელი სტრიქონი არ იმუშავებს.

ბრინჯი. 3

ცარიელი თარიღის მიღების შემდეგ, ჩვენ შეგვიძლია მივუთითოთ ის, როგორც ჩვენი მოთხოვნის პარამეტრი, ანუ გამოვიყენოთ კონსტრუქცია (ნახ. 4)

თუმცა, არის დრო, როდესაც უმჯობესია შეამოწმოთ მოთხოვნის ორგანოს შიგნით, ცარიელი თარიღის პარამეტრად გადაცემის გარეშე. ამისათვის შეგიძლიათ შეიყვანოთ შესაბამისი პირობა მოთხოვნის კოდში (ნახ. 5) და გამოიყენოთ DateTime() მოთხოვნის ფუნქცია.

ბრინჯი. 5

ზემოთ მოთხოვნის ტექსტში ჩვენ გამოვტოვეთ წლის, თვის და დღის წამყვანი ნულები, ასევე არ მივუთითეთ საათები, წუთები და წამები და პროგრამამ, როგორც ამბობენ, შეჭამა ეს ვარაუდი.

თარიღი და დროის საზღვარი

სხვა საინტერესო ფაქტიმოთხოვნებსა და თარიღებს შორის ურთიერთობას უკავშირდება „დროის წერტილის“ ცნების გამოყენება მონაცემთა ბაზის სხვადასხვა ცხრილებზე წვდომისას.

ქვემილიწამიანი სიზუსტე მითითებულია ტექნიკური დოკუმენტაციაპრიმიტიული ტიპის აღწერისას, თარიღი ყველაზე მკაფიოდ ვლინდება დაგროვების რეესტრის ვირტუალური ცხრილებიდან ჩანაწერების არჩევისას: თუ დაგროვების რეესტრს, ბრუნვის ცხრილის გარდა, აქვს დარჩენილი და დარჩენილი და ბრუნვის ცხრილები, მაშინ მათგან ნიმუშის აღება ხდება. გარკვეული დროის განმავლობაში, შეუძლია სხვადასხვა შედეგის მოტანა.

იმის გასაგებად, თუ როგორ და რატომ ხდება ეს, განიხილეთ მარტივი მაგალითი:

  1. სანამ გაყიდვის დოკუმენტი განხორციელდებოდა 12 საათი 31 წუთი 36 წამი, ნაშთები შაქრის ნომენკლატურის მიხედვით იყო 30 კგ;
  2. დოკუმენტმა ჩამოწერა 10 კგ მითითებულ დროს;
  3. დოკუმენტის თარიღზე გენერირებული ანგარიში 12 საათი 31 წუთი 36 წამი დარჩენილი ცხრილის მიხედვით აჩვენებს ბალანსს 30 კგ;
  4. იგივე ანგარიში მაგიდაზე რჩება და ბრუნვა ერთსა და იმავე დროს აჩვენებს ბალანსს 20 კგ.

Რა არის მიზეზი მსგავსი ქცევადა როგორ ავიცილოთ თავიდან ეს?

პრობლემა ის არის, რომ დარჩენილ ცხრილში პერიოდი მითითებულია, როგორც ღია სეგმენტი, ანუ ანგარიშის გენერირების დროს განხორციელებული მოძრაობები მხედველობაში არ მიიღება, ანუ დრო მიიღება მითითებული მეორის დასაწყისში. პარამეტრი. ამავდროულად, ბრუნვის ცხრილისთვის და ცხრილისთვის ნარჩენები და ბრუნვები, გათვალისწინებულია დროის საზღვრები, ანუ დრო აღებულია მითითებული წამის ბოლოს.

ამ სიტუაციიდან რამდენიმე გზა არსებობს:

  1. Remains ცხრილის გამოყენებისას მიუთითეთ დროის წერტილი მითითებულზე 1 წამით მეტი;
  2. გამოიყენეთ მხოლოდ Remains და Turnvers ცხრილი (არ არის ყველაზე ოპტიმალური ვარიანტი შესრულების თვალსაზრისით);
  3. გამოიყენეთ საზღვრის კონცეფცია.

ბოლო ვარიანტი შეიძლება წარმოდგენილი იყოს ნახ. 6.

ჩვენი ობიექტის პირველ პარამეტრში ჩვენ მივუთითებთ თარიღს, რომლისთვისაც საჭიროა ანგარიშის გენერირება, მეორე პარამეტრი განსაზღვრავს საზღვრის ტიპს. ვინაიდან ჩვენთვის მნიშვნელოვანია, რომ მოცემული თარიღის მოძრაობები იყოს შერჩევისას, ჩვენ უნდა დავაყენოთ ეს პარამეტრი პოზიციაზე „შემსვლელი“.

ძალიან ხშირად 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-ს შეუძლია მიიღოს შემდეგი მნიშვნელობები: წუთი, საათი, დღე, კვირა, თვე, მეოთხედი, წელი, ათწლეული, ნახევარი წელი
    შეკითხვის კონსოლში შეიყვანეთ:

    აირჩიეთ პერიოდის დასაწყისი (DATETIME (2016, 1, 15), MONTH)

    მოთხოვნა დაბრუნდება - 01/01/2016
    და ახლა მაგალითი. მოგეხსენებათ, რეესტრის პერიოდულობა თანამშრომელთა ორგანიზაციებიერთი დღე. მოდით შევქმნათ მოთხოვნა, რომელშიც ნაჩვენები იქნება თვის დაწყების თარიღი რეალური ჩანაწერის პერიოდის ნაცვლად.

    SELECT BEGINNING OF PERIOD(Employees of Organizations.Period, MONTH) AS თვის დასაწყისი, ორგანიზაციის თანამშრომლები. თანამშრომელი, ორგანიზაციების თანამშრომლები. თანამდებობა, ორგანიზაციების თანამშრომლები.ორგანიზაციის განყოფილება რეესტრიდან ინფორმაცია. ორგანიზაციების თანამშრომლები, როგორც ორგანიზაციების თანამშრომლები.

  • პერიოდის დასასრული

    სინტაქსი იგივეა, რაც პერიოდის დასაწყისისთვის. და როგორც სახელი გულისხმობს, ის აბრუნებს პერიოდის დასასრულს თარიღისა და პერიოდის ტიპის მიხედვით. ჩვენ არ განვიხილავთ მას დეტალურად. მოდით შემოვიფარგლოთ მინი მაგალითით.
    მოთხოვნა:

    აირჩიეთ პერიოდის დასასრული (DATETIME (2016, 1, 15), MONTH)

    დაბრუნება 01/31/2016 23:59:59
    როგორც ხედავთ, მნიშვნელობა უბრუნდება ზუსტად მეორეს.

  • ADDKDATE

    ამატებს დროის ინტერვალების მითითებულ რაოდენობას თარიღს.
    Სინტაქსი:
    ADDKDATE (თარიღი, პერიოდის ტიპი, რაოდენობა)
    PeriodType იღებს იგივე მნიშვნელობებს, რაც ფუნქციისთვის პერიოდის დასაწყისი
    მაგალითად, ავირჩიოთ თებერვლის თარიღი:

    აირჩიეთ ADDKDATE(DATETIME(2016, 2, 15), MONTH, 2)

    ვიღებთ თარიღს 04/15/2016 0:00:00 მიუხედავად იმისა, რომ თებერვალი მოკლე თვეა, მიღების თარიღის დღე იგივეა რაც ორიგინალი. ძალიან მოსახერხებელია, რომ არ უნდა იფიქროთ თვეების დღეების რაოდენობაზე.
    რაოდენობა ასევე შეიძლება იყოს უარყოფითი. შემდეგ ინტერვალი ითვლება საპირისპირო მიმართულებით.

  • განსხვავება

    გამოთვალეთ განსხვავება ორ თარიღს შორის მითითებულ ერთეულებში.
    Სინტაქსი:
    თარიღის სხვაობა (დაწყების თარიღი, დასრულების თარიღი, პერიოდის ტიპი)
    პერიოდის ტიპს შეუძლია მიიღოს შემდეგი მნიშვნელობები: SECOND, MINUTE, HOUR, DAY, MONTH, QUARTER, YEAR
    Მაგალითად:

    აირჩიეთ DIFFERENCEDATE(DATETIME(2016, 2, 15), DATETIME(2016, 3, 1), DAY)

    აბრუნებს 15

აქ ჩვენ განვიხილეთ 1C შეკითხვის ენის ყველაზე ხშირად გამოყენებული ფუნქციები. დანარჩენები საკმაოდ იშვიათად გამოიყენება. საჭიროების შემთხვევაში, მათთან მუშაობის მაგალითები შეგიძლიათ იხილოთ 1C პლატფორმაში ჩაშენებულ დახმარებაში.

"თარიღი" ტიპი 1C-ში არის მონაცემთა ოთხი ძირითადი ტიპიდან ერთ-ერთი, რიცხვთან, სტრიქონთან და ლოგინთან ერთად. თარიღები ყველგან გვხვდება კონფიგურაციებში - შეუძლებელია ამ ტიპის მონაცემების მუშაობის თავიდან აცილება განვითარების პროცესში. ამიტომ, უმჯობესია დაიწყოთ მოთხოვნების წერა უკვე იმის გაგებით, თუ როგორ უნდა დამუშავდეს თარიღები, რა ვარიანტები არსებობს მათთან მუშაობისთვის და როგორ ინახება ისინი. მოდით შევხედოთ მაგალითებს სხვადასხვა თარიღით შეკითხვის წერის ყველა ნიუანსის შესახებ.

თარიღებთან მუშაობის მაგალითები 1C შეკითხვებში

უპირველეს ყოვლისა, თქვენ უნდა მიიღოთ მოთხოვნაში თარიღი საჭირო ფორმატში - დროით ან მის გარეშე. ამ დავალების შესრულების რამდენიმე გზა არსებობს:

  1. პარამეტრის გავლით. ამ მეთოდის გამოყენებით შეგიძლიათ მიიღოთ მხოლოდ მიმდინარე სესიის თარიღი;
  2. მიიღეთ თარიღი მოთხოვნაში შერჩევის ველიდან;
  3. გადაიყვანეთ რიცხვითი მნიშვნელობებიდან DATETIME() ფუნქციის გამოყენებით.

დოკუმენტებთან მუშაობისას ყველაზე გავრცელებული ამოცანაა 1C მოთხოვნაში ცარიელი თარიღის შემოწმება. ამ შემთხვევაში, ყველაზე ადვილია ცვლადის ან ველის შედარება ცარიელი თარიღით, რომელიც მიიღება DATETIME(1,1,1) ფუნქციის გამოყენებით:

DATETIME (1, 1, 1)

მსგავსი ბრძანების გამოყენებით, შეგიძლიათ მიიღოთ თვითნებური თარიღი და დრო მოთხოვნაში. უფრო მეტიც, მათი დაზუსტება შესაძლებელია წამის სიზუსტით, პარამეტრებად 6 ნომრის მითითებით. თუ გამოყენებულია მხოლოდ 3 რიცხვი, მაშინ საათები, წუთები და წამები დაყენდება 0-ზე (დღის დასაწყისი). მაგალითად, მოთხოვნაში უნდა შევარჩიოთ დოკუმენტები 2018 წლის იანვრის პირველი 10 დღისთვის:

აირჩიეთ ქვითარი მიმდინარე ანგარიშზე. მიბმა AS ბმული დოკუმენტიდან. ქვითარი მიმდინარე ანგარიშზე AS ქვითარი მიმდინარე ანგარიშზე WHERE მიღება მიმდინარე ანგარიშზე. თარიღი BETWEEN DATETIME(2018, 1, 0, 0, 0) AND DATETIME(2018, 10, 23, 59, 59)

ჩაშენებულ 1C ენაზე შეკითხვისას შეგიძლიათ არა მხოლოდ აირჩიოთ სხვადასხვა ველი და მიიღოთ პარამეტრები. არსებობს მრავალი ფუნქცია, რომელიც აადვილებს კონკრეტული ამოცანისთვის თარიღების ფორმატირებას. თუ თქვენ ხშირად მუშაობთ თარიღებთან შეკითხვაში, მაშინ უნდა იცოდეთ ეს ბრძანებები:

  • პერიოდის დასაწყისი.პარამეტრებში მითითებულია თარიღი და დრო, რომლის კონტექსტშიც აუცილებელია თარიღის დასაწყისის მიღება. გამოიყენება თარიღის დროულ ფორმატში გადასაყვანად. ამისათვის თქვენ უნდა დააყენოთ მეორე პარამეტრი - "DAY";
START OF PERIOD(,) START OF PERIOD(&თარიღი, DAY) პერიოდი>თარიღი>
  • პერიოდის დასასრული.მსგავსი ბრძანება, რომელიც აბრუნებს ბოლო თარიღს პარამეტრებში მითითებული ერთეულების მიხედვით;
  • ADDKDATE.საშუალებას გაძლევთ მიიღოთ თარიღი, რომელიც აღემატება განსაზღვრული დროის ერთეულების მითითებულ რაოდენობას. ფუნქციის პარამეტრებში შედის თარიღი, დროის ერთეული და ნომერი;
ADDKDATE(,) ADDKDATE(&თარიღი, დღე, 10) რაოდენობა>ტიპი>თარიღი>
  • განსხვავება.იღებს განსხვავებას თარიღებს შორის მითითებულ ერთეულებში;
DIFFERENCEDATE(,) DIFFERENCEDATE(&თარიღი1, &თარიღი2, DAY) ტიპი>თარიღი2>თარიღი1>
  • კვირის დღე.აბრუნებს კვირის ერთ-ერთი დღის სერიულ ნომერს.

ამ ფუნქციების სწორად გამოყენებით, დეველოპერს შეუძლია გადაჭრას საკმაოდ არატრივიალური პრობლემები. მაგალითად, მიმდინარე თარიღის კვირის დღის სახელის მიღება მოთხოვნაში სტრიქონის სახით:

კვირის ოთხშაბათის არჩევა (& ამჟამინდელი თარიღი) = 1 შემდეგ "ორშაბათი" WHENDAYDAY(&CurrentDate) = 2 შემდეგ "სამშაბათი" WHENDAYDAY(&CurrentDate) = 3 შემდეგ "ოთხშაბათი" DHENDAYDAY(&CurrentDateDHHIDEL)DHIDH4Date = 5, შემდეგ "პარასკევი" კვირის ოთხშაბათი (& აქტუალური თარიღი) = 6 შემდეგ "შაბათი" სხვა "კვირა" დასასრული

1C მოთხოვნაში ტიპების გადაქცევა რიცხვიდან ან სტრიქონიდან თარიღზე შრომატევადი ამოცანაა. შეგიძლიათ მიიღოთ თარიღი რიცხვებიდან DATETIME ფუნქციის გამოყენებით, სტრიქონიდან - SUBSTRING ფუნქციისა და SELECT WHEN THEN ELSE კონსტრუქციის კომბინაციით. ამის საფუძველზე, დეველოპერებს ურჩევნიათ მიიღონ თარიღი სხვა ტიპებიდან მოდულში და გადასცენ მას მოთხოვნაზე პარამეტრის გამოყენებით. სამწუხაროდ, ეს ყოველთვის არ არის შესაძლებელი, ასე რომ თქვენ უნდა შეცვალოთ თარიღის ფორმატი მოთხოვნაში.

შესაძლებელია 1C მოთხოვნაში თარიღის მითითება, როგორც პარამეტრი ვირტუალური რეესტრის ცხრილებიდან მონაცემების მისაღებად. ამ როლს ასევე შეუძლია გამოიყენოს ყველა ზემოთ ჩამოთვლილი ფუნქცია. მაგრამ აქ მნიშვნელოვანია, რომ არ დაუშვას ცარიელი თარიღი 1C მოთხოვნაში, გავლენა მოახდინოს კოდის შესრულების საბოლოო შედეგზე, ამიტომ შემოწმება უნდა გაკეთდეს.