1c pobierz aktualną datę w żądaniu. Jak określić pustą datę w żądaniu? Konwertuj na bieżąco

43
NULL – brakujące wartości. Nie mylić z wartością zerową! Wartość NULL nie jest liczbą, nie jest równa spacji, pustemu odwołaniu lub niezdefiniowanemu. NULL jest wartością tworzącą typ, tj. istnieje typ NULL i pojedyncza wartość tego typu. ZERO... 26
Do generowania i wykonywania zapytań do tabel bazy danych na platformie 1C używany jest specjalny obiekt języka programowania Query. Obiekt ten jest tworzony poprzez wywołanie konstrukcji New Request. Wygodna prośba... 18
W artykule przedstawiono przydatne techniki pracy z zapytaniami 1C v.8.2, a także informacje, które nie są zbyt dobrze znane na temat języka zapytań. Nie próbuję podać pełnego opisu języka zapytań, ale chcę się skupić tylko na... 13
LIKE - Operator sprawdzający podobieństwo łańcucha do wzorca. Analog LIKE w SQL. Operator PODOBNY umożliwia porównanie wartości wyrażenia określonego po jego lewej stronie z ciągiem wzorca określonym po prawej stronie. Znaczenie wyrażenia...

Wszystkie dokumenty istniejące w konfiguracjach 1C, a co za tym idzie prawie wszystkie rejestry, muszą mieć co najmniej jeden atrybut z typem daty, dlatego każdy programista musi wiedzieć i rozumieć:

  • Jak konwertować parametry innych typów na dany typ;
  • Jak określić pustą datę w żądaniu 1C;
  • Jaka jest różnica między datą a terminem?

Właśnie na te pytania postaramy się odpowiedzieć w naszym artykule.

Co to jest data i jak ją ustalić

Ponieważ podejmowanie większości decyzji zarządczych i prowadzenie dokumentacji nie wymaga dokładności czasu przekraczającej 1 sekundę, twórcy platformy 1C zdecydowali, że wartość ta będzie absolutnym minimum w formacie daty. Zatem każdy atrybut opisujący czas zdarzenia w programie musi zawierać:

  • Rok, w którym miało miejsce zdarzenie;
  • Miesiąc tego wydarzenia;
  • Dzień.

Nie ma potrzeby podawania: godziny, minuty i sekundy. Jeżeli te trzy parametry zostaną pominięte i nie zostaną spełnione żadne dodatkowe warunki, program automatycznie ustawi godzinę rozpoczęcia dnia.

Istniejące na świecie formaty daty różnią się znacznie:

  1. W Rosji jesteśmy przyzwyczajeni do umieszczania na pierwszym miejscu dnia, potem miesiąca wydarzenia, a na końcu roku;
  2. Mieszkańcy USA rozpoczynają datę od miesiąca;
  3. Czesi, Polacy i Słoweńcy rejestrują okresy w formacie Rok – Miesiąc – Dzień.

Z tego ostatniego formatu korzysta platforma 1C.

Konwertuj na bieżąco

Aby uzyskać parametr typu Date z kilku wartości lub z ciągu znaków, należy skorzystać z kodu pokazanego na rys. 1

Jak widać na powyższym rysunku, datę można określić za pomocą jednej linii lub dzieląc tę ​​linię na części składowe za pomocą przecinka, wynik się nie zmieni.

Ważne jest, aby zrozumieć, że rok daty musi zawierać cztery cyfry, w tym tysiąclecie i stulecie wydarzenia, miesiąc, dzień, godziny i sekundy muszą mieć długość dwóch znaków, łącznie z zerami wiodącymi.

Odliczanie czasu w programie rozpoczyna się od początku dnia 1 stycznia 0001. Dla powyższego kodu wartość tę można wyznaczyć na jeden z dwóch sposobów (rysunek 2).

Ryż. 2

W drugiej linijce pominęliśmy godziny, minuty i sekundy zdarzenia, co w żaden sposób nie wpłynęło na wydajność naszego kodu.

Funkcje używania daty w zapytaniach 1C

W przypadku większości typów danych używanych przez platformę 1C istnieją predefiniowane wartości puste. Dla liczb jest to 0, dla linków można zdefiniować wartość DesertLink(), dla daty pustą wartość uważa się zwykle za datę początkową i właśnie z nią należy porównać szczegóły odpowiedniego typu przy ustawianiu parametry żądania.

Ważne jest, aby zrozumieć, że nawet jeśli w wartości atrybutu formularza, który ma dany typ, nie podano liczb, czyli jak wygląda okno (ryc. 3), nie oznacza to, że nic w nim nie jest określone; porównanie tego parametru z pustym ciągiem znaków nie będzie działać.

Ryż. 3

Otrzymawszy pustą datę, możemy podać ją jako parametr naszego żądania, czyli skorzystać z konstrukcji (rys. 4)

Są jednak chwile, kiedy lepiej jest sprawdzić treść żądania, nie przekazując pustej daty jako parametru. Aby to zrobić, możesz wpisać odpowiedni warunek w kodzie żądania (rys. 5) i skorzystać z funkcji żądania DateTime().

Ryż. 5

W powyższym tekście żądania pominęliśmy zera wiodące roku, miesiąca i dnia, a także nie wskazaliśmy godzin, minut i sekund, a program, jak to się mówi, pochłonął to założenie.

Granica daty i czasu

Kolejnym interesującym faktem dotyczącym związku zapytań i dat jest użycie koncepcji „punktu w czasie” podczas uzyskiwania dostępu do różnych tabel bazy danych.

Dokładność „do milisekundy” podana w dokumentacji technicznej przy opisie pierwotnego typu Data najdobitniej objawia się przy wyborze rekordów z wirtualnych tablic rejestru akumulacji: jeżeli rejestr akumulacji, oprócz tabeli Obrót, posiada opcję Pozostałe oraz tabele Pozostała i Obrót, wówczas pobieranie z nich próbek przez pewien czas może dać różne wyniki.

Aby zrozumieć, jak i dlaczego tak się dzieje, rozważ prosty przykład:

  1. Przed wystawieniem dokumentu sprzedaży o godzinie 12 godzin 31 minut i 36 sekund salda według nomenklatury cukru wynosiły 30 kg;
  2. Dokument odpisał 10 kg w określonym czasie;
  3. Raport wygenerowany na dzień dokumentu o godzinie 12 godzin 31 minut 36 sekund zgodnie z tabelą Pozostałe pokaże saldo 30 kg;
  4. Ten sam raport na stole Pozostałości i Obroty w tym samym czasie pokaże saldo 20 kg.

Jaki jest powód takiego zachowania i jak go uniknąć?

Problem w tym, że w tabeli Pozostałe okres jest określony jako segment otwarty, czyli nie są uwzględniane ruchy wykonane w momencie generowania raportu, czyli przyjmowany jest czas na początku sekundy określonej w parametr. Jednocześnie dla tabeli Obroty oraz dla tabeli Pozostałości i Obroty uwzględniane są granice czasowe, to znaczy czas liczony jest na końcu określonej sekundy.

Istnieje kilka sposobów wyjścia z tej sytuacji:

  1. Korzystając z tabeli Remains, wskaż punkt czasowy o 1 sekundę większy niż określony;
  2. Używaj tylko tabeli Pozostałości i Obroty (nie jest to najbardziej optymalna opcja z punktu widzenia wydajności);
  3. Skorzystaj z koncepcji granicy.

Ostatnią opcję można przedstawić za pomocą kodu pokazanego na ryc. 6.

W pierwszym parametrze naszego obiektu wskazujemy datę, za którą ma zostać wygenerowany raport, drugi parametr określa rodzaj granicy. Ponieważ zależy nam na tym, aby w selekcji uwzględnione były ruchy w danym dniu, musimy ustawić ten parametr na pozycję „W tym”.

Dość często zachodzi potrzeba pracy ze zmiennymi typu „Data”. W tym artykule przyjrzymy się podstawowym technikom - przekazywaniu bieżącej daty, sprawdzaniu pustej wartości, dowolnej dacie.

Pisząc zapytania często zachodzi potrzeba porównania danych z datą bieżącą. Wbudowany język 1C ma funkcję CurrentDate(). Pozwala określić aktualną godzinę i datę na komputerze. Aby wykonać operacje na bieżącej dacie należy przekazać wartość tej funkcji jako parametr do żądania.

Poniżej znajduje się zapytanie, które wybiera wszystkie pliki załączone do raportów wydatków z dotychczasową datą utworzenia:

Przykładowe żądanie = Nowe żądanie;
Przykładowe żądanie.Text = "
|WYBIERZ
| AdvanceReportAttachedFiles.Link
|OD
| Directory.AdvanceReportAttachedFilesAS AdvanceReportAttachedFiles
|GDZIE
| AdvanceReportAttachedFiles.Date< &ТекДата»;
Przykładowe żądanie.SetParameter("CurrentDate", CurrentDate());

Niestandardowa data

Omówiona powyżej funkcja pozwala na porównanie, a co za tym idzie dokonanie selekcji dla dowolnego okresu. Ta metoda umożliwia określenie ścisłego wyboru w żądaniu bez użycia dodatkowych parametrów.

Należy pamiętać, że korzystając z tej funkcji w powyższym przykładzie, jako parametry wejściowe przekazaliśmy tylko trzy liczby (rok, miesiąc, dzień). Ostatnie trzy (godzina, minuta, sekunda) są opcjonalne i w przypadku ich braku zastępuje się je „0”, czyli początkiem dnia.

Ten przykład pobierze wszystkie pliki dołączone do raportów wydatków do końca ubiegłego roku 2016. W związku z tym wskażemy godzinę, minutę i sekundę, aby porównać punkt czasowy „31 grudnia 2016 r. 23:59:59”.

WYBIERAĆ
AdvanceReportAttachedFiles.Link
Z
Directory.AdvanceReportAttachedFiles AS AdvanceReportAttachedFiles
GDZIE
AdvanceReportAttachedFiles.Date< ДАТАВРЕМЯ(2016, 12, 31, 23, 59, 59)

Pusta data

Najłatwiejszym sposobem sprawdzenia zmiennej, czy zawiera pustą datę, jest użycie prostego porównania. W tym przykładzie za pomocą zapytania wybierzemy wszystkie wpływy gotówkowe na rachunek, dla którego nie jest wpisana data wpływu.

Bardzo często w zapytaniach 1C trzeba pracować z datami. Zwłaszcza gdy żądanie kierowane jest do obiektów metadanych zawierających informacje okresowe. Z reguły są to rejestry (informacje, akumulacja, obliczenia, księgowość). Przyjrzyjmy się najczęściej używanym funkcjom języka zapytań 1C do pracy z datami. Będziemy budować przykłady w oparciu o rejestr informacyjny Organizacje pracowników Konfiguracje ZUP wersja 2.5.

  • DATA CZAS

    Umożliwia uzyskanie daty w żądaniu (z godziną lub bez) poprzez określenie roku, miesiąca, dnia, godziny, minuty, sekundy.
    Składnia:
    DATETIME(rok, miesiąc, dzień, godzina, minuta, sekunda)
    Zwykle nie jest wskazana godzina, minuta i sekunda. Podajmy mini przykład. Wpisz następujący tekst w konsoli zapytań:

    WYBIERZ DATĘGODZINĘ(2016, 1, 1)

    W wyniku realizacji żądania otrzymujemy datę - 01.01.2016
    Właściwie trudno sobie wyobrazić sytuację, w której data byłaby w ten sposób wskazana we wniosku. W końcu, gdy trzeba określić okres, używane są parametry. Ale jest przypadek, gdy ta funkcja ma szczególną wartość. To wtedy musimy wskazać pustą datę w polach lub w warunkach zapytania. Przypomnę, że dla języka 1C pusta data ma postać - 0001.01.01. Zatem, aby otrzymać pustą datę w żądaniu, wystarczy podać DATACZAS(1, 1, 1). Jako przykład wybierzmy z rejestru informacyjnego Organizacje pracowników zapisy, które nie są wypełnione Okres realizacji:

    WYBIERZ Pracownicy organizacji.Okres, Pracownicy organizacji.Pracownik, Pracownicy organizacji.Stanowisko, Pracownicy organizacji.Pion organizacji Z Informacje rejestrowe.Pracownicy organizacji AS Pracownicy organizacji GDZIE Pracownicy organizacji.Okres zakończenia = DATETIME(1, 1, 1)

  • POCZĄTEK OKRESU

    Dla określonej daty zwraca początek okresu, do którego ona należy.
    Składnia:
    POCZĄTEK OKRESU(data, typ okresu)
    PeriodType może przyjmować następujące wartości: MINUTA, GODZINA, DZIEŃ, TYDZIEŃ, MIESIĄC, KWARTAŁ, ROK, DEKADA, PÓŁROKU
    W konsoli zapytań wpisz:

    WYBIERZ POCZĄTEK OKRESU(DATAGODZINA(2016, 1, 15), MIESIĄC)

    Zapytanie zostanie zwrócone - 01.01.2016
    A teraz przykład. Jak wiadomo, okresowość rejestru Organizacje pracowników pewnego dnia. Utwórzmy zapytanie, w którym zamiast faktycznego okresu rekordu wyświetli się data początkowa miesiąca.

    WYBIERZ POCZĄTEK OKRESU (Pracownicy organizacji. Okres, MIESIĄC) AS Początek miesiąca, Pracownicy organizacji. Pracownik, Pracownicy organizacji. Stanowisko, Pracownicy organizacji. Oddział organizacji Z Rejestru informacji. Pracownicy organizacji AS Pracownicy organizacji

  • KONIEC OKRESU

    Składnia jest taka sama jak dla początku kropki. Jak sama nazwa wskazuje, zwraca koniec okresu według daty i typu okresu. Nie będziemy tego szczegółowo rozważać. Ograniczmy się do mini przykładu.
    Wniosek:

    WYBIERZ KONIEC OKRESU(DATAGODZINA(2016, 1, 15), MIESIĄC)

    Zwraca 31.01.2016 23:59:59
    Jak widać, wartość jest zwracana z dokładnością do sekundy.

  • DODATK.DATA

    Dodaje określoną liczbę przedziałów czasu do daty.
    Składnia:
    ADDKDATE(data, typ okresu, ilość)
    PeriodType przyjmuje takie same wartości jak dla funkcji POCZĄTEK OKRESU
    Wybierzmy na przykład datę lutego:

    WYBIERZ DATĘ DODAWANIA(DATAGODZINA(2016, 2, 15), MIESIĄC, 2)

    Otrzymujemy datę 15.04.2016 0:00:00 Pomimo tego, że luty jest krótkim miesiącem, dzień otrzymanej daty jest taki sam jak pierwotny. To bardzo wygodne, że nie musisz myśleć o liczbie dni w miesiącach.
    Ilość może być również ujemna. Następnie odstęp jest liczony w przeciwnym kierunku.

  • RÓŻNICA DATA

    Oblicz różnicę między dwiema datami w określonych jednostkach.
    Składnia:
    RÓŻNICA DATY (data początkowa, data końcowa, typ okresu)
    Typ okresu może przyjmować następujące wartości: DRUGA, MINUTA, GODZINA, DZIEŃ, MIESIĄC, KWARTAŁ, ROK
    Na przykład:

    WYBIERZ RÓŻNICĘ DATA(DATAGODZINA(2016, 2, 15), DATAGODZINA(2016, 3, 1), DZIEŃ)

    zwraca 15

Tutaj sprawdziliśmy najczęściej używane funkcje języka zapytań 1C. Reszta używana dość rzadko. W razie potrzeby przykłady pracy z nimi można znaleźć w pomocy wbudowanej w platformę 1C.