Podczas pracy z datami 1C typowa kolejność części dat to rok, miesiąc, dzień, godzina, minuty, sekundy. W takim przypadku można pominąć godziny, minuty, sekundy.
Tworząc datę na podstawie ciągu („rzut do daty”), można określić w zlokalizowanym formacie (dzień.miesiąc.rok godziny: minuty: sekundy), ale tylko w całości.
Na przykład:
// Praca z datami 1C - konwertuj datę na 1C z części - rok, miesiąc, dzień (plus opcjonalny czas)
Data \u003d Data (2012,10,30); // brak czasu
Data \u003d Data (2012,10,30,12,00,00); //z czasem
// Praca z datami 1C - konwertuj datę na 1C z łańcucha na różne sposoby
Data \u003d Data („20121030”); // rok miesiąc dzień
Data \u003d Data („30.10.2012 12:00:00”); // zlokalizowany format, tylko w całości
// Praca z datami 1C - bezpośrednie określanie wartości daty bez rzutowania
Data \u003d „20121030”; // brak czasu
Data \u003d "20121030120000"; //z czasem
Praca z datami 1C - Pusta data 1C
Aby sprawdzić pełną datę 1C - porównuje się ją z „pustą datą”. Jeśli w książce / dokumencie znajduje się atrybut typu daty, jeśli użytkownik nie wypełnił tego pola, jego wartością będzie również „pusta data”.
„Pusta data” to 01.01.0001 00:00:00.
Na przykład:
EmptyDate \u003d "00010101000000";
Jeśli RequiredDate \u003d "00010101000000" To
Raport („Nie wpisałeś bardzo potrzebnej daty”);
EndIf;
Praca z datami 1C - Data w szczegółach (podręczniki, dokumenty itp.)
Określając typ atrybutu, możesz określić zastosowanie:
- Tylko data (wtedy zawsze jest godzina 00:00:00)
- Tylko czas (data to zawsze 01.01.0001)
- Data i godzina
Randka
Aby uzyskać datę i godzinę, użyj funkcji 1C CurrentDate ().
Miejsce wywołania tej funkcji jest bardzo ważne - na kliencie lub na serwerze. Aby uzyskać szczegółowe informacje, zobacz temat „Tryb wydajności / wydajność”. Często zdarza się, że czas na maszynach klienckich jest nieco inny, dlatego starają się wykorzystać czas serwera wszędzie - nawet jeśli nie jest on poprawnie ustawiony na serwerze, to przynajmniej wszyscy klienci będą mieli ten sam zły czas.
Aby uzyskać datę serwera (datę ustawioną w systemie operacyjnym komputera serwera), zazwyczaj w konfiguracji tworzony jest wspólny moduł z zaznaczonym polem "Serwer" we właściwościach i tworzona jest w nim funkcja
// funkcja znajduje się we wspólnym module, na przykład o nazwie ServerFunctions
// we właściwościach wspólnego modułu pole wyboru „Serwer” jest zaznaczone, a pole wyboru „Klient” nie jest ustawione
Funkcja GetServerDate () Export
Return CurrentDate ();
EndFunction
// wywołanie tej funkcji w celu użycia z innego modułu wygląda następująco
DocumentObject.Date \u003d ServerFunctions.GetServerDate (); //ModuleName.FunctionName ()
Również w cienkim kliencie, bezpośrednio obok funkcji modułów, wskazuje się, gdzie zostanie wykonany:
Początek i koniec dnia
Na dzień „30.10.2012”:
- data rozpoczęcia dnia wygląda następująco: „10/30/2012 00:00:00”
- data zakończenia wygląda następująco: „10/30/2012 23:59:59”
Jest używany w raportach i zapytaniach, które wymagają danych za okres - dzień, miesiąc, rok.
Na przykład okres od 01/01/2012 00:00:00 do 01/31/2012 00:00:00 jest niepoprawny, ponieważ nie obejmuje jednego dnia miesiąca (ale obejmuje jedną sekundę ostatniego dnia miesiąca).
Praca z datami 1C - Porównanie dat
Data zawiera datę i godzinę. Porównując daty (z wyłączeniem czasu), zwykle przenosi się je na początek dnia (miesiąc, rok).
Na przykład:
Date1 \u003d Date („30.10.2012 12:00:00”);
Jeśli StartDay (Date1) \u003d StartDay (DocumentRef.Date) Then
Raport („Dokument został wprowadzony przed określoną datą”);
EndIf;
Na wszelki wypadek przykład porównania dat w okresie:
Jeśli DocumentRef.Date\u003e \u003d StartMonth (CurrentDate ()) i
DocumentRef.Date
Praca z datami 1C - Zmiana daty
Data to liczba sekund. Jeśli chcemy nie tylko dowiedzieć się, czy jedna data jest większa od drugiej, ale także o ile więcej, to różnicę otrzymujemy w sekundach.
Na przykład:
DayStart \u003d CurrentDate () - DayStart (CurrentDate ());
Raport („Od początku dnia minęło” + String (Od początku dnia) + „Sekundy”);
Raport („Od początku dnia minęło” + String (Od początku dnia / 60) + „Minuty”);
Raport („Od początku dnia minął” + Linia (Od początku dnia / 60/60) + „Godzina”);
Możemy też zmienić datę, zmieniając dodajemy lub odejmujemy ilość sekund:
StartThisDay \u003d StartDay (CurrentDate ());
StartPreviousDay \u003d StartDay (StartThisDay - 1); // usuń drugi - wykonując „wczoraj” i zacznij dzień od „wczoraj”
StartPreviousDay \u003d StartThisDay - 24 * 60 * 60; // w inny sposób - odejmujemy 24 godziny - 24 (godziny) * 60 (okazały się minuty) * 60 (sekundy)
Praca z datami 1C - Chwila czasu
Moment w czasie to rozszerzona data mająca zastosowanie do dokumentów (i odpowiednio rejestrów).
Porównywanie czasu dokumentów jest wymagane, jeśli data i godzina dokumentów są takie same. W związku z tym może być używany podczas filtrowania zapytań.
Chwilę można uzyskać z dokumentu w następujący sposób:
// metoda 1
DocumentMomentTime \u003d DocumentRef.MomentTime ();
Możesz także porównać punkt w czasie z datą / godziną:
Moment of TimeStatus \u003d Nowy moment czasu (początek dnia (CurrentDate ()));
Jeśli DocumentRef.MomentTime (). Compare (TimeTimeStandard) \u003d -1 Then
Raport („Dokument został wprowadzony wcześniej niż dzisiaj”);
EndIf;
// Jeśli dokument został wprowadzony do dzisiejszej daty o godzinie 00:00:00, to mimo to został wprowadzony - dzisiaj
Praca z datami 1C - Formatowanie daty
Typ „Data” w 1C jest jednym z 4 głównych typów danych, obok liczby, ciągu znaków i wartości logicznych. Daty są wszechobecne w konfiguracjach - nie da się uniknąć pracy z tym typem danych podczas programowania. Dlatego lepiej zacząć pisać zapytania, już rozumiejąc, jak obsługiwać daty, jakie są możliwości pracy z nimi, jak są przechowywane. Spójrzmy na przykłady wszystkich niuansów pisania wniosków z różnymi datami.
Przykłady pracy z datami w żądaniach 1C
Przede wszystkim należy pobrać datę we wniosku w wymaganym formacie - z czasem lub bez. Istnieje kilka sposobów wykonania tego zadania:
- Przekaż parametr. Aktualną datę sesji można uzyskać tylko tą metodą;
- Uzyskaj datę w żądaniu z pola wyboru;
- Konwertuj z wartości liczbowych za pomocą funkcji DATETIME ().
Najczęstszym zadaniem podczas pracy z dokumentami jest sprawdzenie pustej daty w żądaniu 1C. W takim przypadku najłatwiej jest porównać zmienną lub pole z pustą datą, którą uzyskuje się funkcją DATA CZAS (1,1,1):
DATA CZAS (1, 1, 1)Podobne polecenie może uzyskać w żądaniu dowolną datę i godzinę. Jednocześnie można je określić z dokładnością do sekundy, podając 6 liczb jako parametry. Jeśli zostaną użyte tylko 3 liczby, godziny, minuty i sekundy zostaną ustawione na 0 (początek dnia). Przykładowo we wniosku musimy wybrać dokumenty na pierwsze 10 dni stycznia 2018 roku:
WYBIERZ pokwitowanie do rachunku rozliczeniowego Odn. Jako łącze z dokumentu Wybierz rachunek rozliczeniowy jako pokwitowanie do rachunku rozliczeniowego GDZIE Odbiór do rachunku rozliczeniowego Data MIĘDZY DATĄ CZAS (2018, 1, 1, 0, 0, 0) I DATA, 1, 10, 23W zapytaniu w osadzonym języku 1C możesz nie tylko wybierać różne pola i pobierać parametry. Istnieje wiele funkcji, które ułatwiają formatowanie daty dla konkretnego zadania. Jeśli często pracujesz z datami w zapytaniu, powinieneś znać następujące polecenia:
- POCZĄTEK OKRESU. Jako parametry wskazano datę i przedział czasu, w kontekście których konieczne jest uzyskanie początku daty. Służy do konwersji daty na ponadczasowy format. W tym celu należy ustawić drugi parametr - „DZIEŃ”;
- KONIEC OKRESU. Podobna komenda, która zwraca ostatnią datę w postaci jednostek określonych w parametrach;
- ADDEDDATE. Pozwala uzyskać datę większą niż określona liczba określonych jednostek czasu. Data, jednostka czasu i liczba są określone jako parametry funkcji;
- RÓŻNICA Pobiera różnicę między datami w określonych jednostkach;
- DZIEŃ TYGODNIA. Zwraca liczbę porządkową jednego z dni tygodnia.
Stosując te funkcje poprawnie, programista może rozwiązać raczej nietrywialne zadania. Na przykład pobranie nazwy dnia tygodnia z bieżącej daty w zapytaniu w postaci ciągu:
WYBIERZ WHEN DAY WEEK (& CurrentDate) \u003d 1 THEN THEN "Monday" WHEN DAY WEEK (& CurrentDate) \u003d 2 THEN THEN "Tuesday" WHEN DAY WEEK (& CurrentDate) \u003d 3 THEN THEN "Wednesday" WHEN DAY WEEK Current (& CurrentDate) \u003d 4 THEN THEN "DAY" & Czwartek \u003d 5 TO "piątek" GDY DZIEŃ TYDZIEŃ (& CurrentDate) \u003d 6 TO "sobota" INNY "niedziela" KONIECKonwersja typów w zapytaniu 1C z liczby lub ciągu na datę jest pracochłonnym zadaniem. Z liczb można uzyskać datę za pomocą funkcji DATA GODZINA z łańcucha, łącząc funkcję PODŁAŃCUCH i konstrukcję SELECT WHEN THEN ELSE. Na tej podstawie programiści wolą pobrać datę z innych typów w module i przekazać ją do żądania za pomocą parametru. Niestety nie zawsze jest to wykonalne, więc musisz zmienić format daty w żądaniu.
Możliwe jest określenie daty w żądaniu 1C jako parametru do uzyskiwania danych z tabel rejestrów wirtualnych. Wszystkie powyższe funkcje można również wykorzystać w tej roli. Ale tutaj ważne jest, aby nie dopuścić, aby pusta data w żądaniu 1C wpłynęła na końcowy wynik wykonania kodu, dlatego konieczne jest sprawdzenie.
Podczas pracy z datami 1C typowa kolejność części dat to rok, miesiąc, dzień, godzina, minuty, sekundy. W takim przypadku można pominąć godziny, minuty, sekundy.
Tworząc datę na podstawie ciągu („rzut do daty”), można określić w zlokalizowanym formacie (dzień.miesiąc.rok godziny: minuty: sekundy), ale tylko w całości.
Na przykład:
// Praca z datami 1C - konwertuj datę na 1C z części - rok, miesiąc, dzień (plus opcjonalny czas) Data \u003d Data (2012,10,30); // bez czasu Data \u003d Data (2012,10,30,12,00,00); // z czasem // Praca z datami 1C - zamień datę na 1C z łańcucha, różne sposoby Date \u003d Date ("20121030"); // rok, miesiąc, dzień Data \u003d Data ("10/30/2012 12:00:00"); // zlokalizowany format, tylko w pełni // Praca z datami 1C - określanie wartości daty bez rzutowania, bezpośrednio Date \u003d "20121030"; // brak czasu Data \u003d "20121030120000"; //z czasem
Praca z datami 1C - Pusta data 1C
Aby sprawdzić pełną datę 1C - porównuje się ją z „pustą datą”. Jeśli w książce / dokumencie znajduje się atrybut typu daty, jeśli użytkownik nie wypełnił tego pola, jego wartością będzie również „pusta data”.
„Pusta data” to 01.01.0001 00:00:00.
Na przykład:
EmptyDate \u003d "00010101000000"; Jeśli RequiredDate \u003d "00010101000000" Następnie zgłoś ("Nie wpisałeś bardzo potrzebnej daty"); EndIf;
Praca z datami 1C - Data w szczegółach (podręczniki, dokumenty itp.)
Określając typ atrybutu, możesz określić zastosowanie:
Tylko data (wtedy zawsze jest godzina 00:00:00)
Tylko czas (data to zawsze 01.01.0001)
Data i godzina
Randka
Aby uzyskać datę i godzinę, użyj funkcji 1C CurrentDate ().
Miejsce wywołania tej funkcji jest bardzo ważne - na kliencie lub na serwerze. Aby uzyskać szczegółowe informacje, zobacz temat „Tryb wydajności / wydajność”. Często zdarza się, że czas na maszynach klienckich jest nieco inny, dlatego starają się wykorzystać czas serwera wszędzie - nawet jeśli nie jest on poprawnie ustawiony na serwerze, to przynajmniej wszyscy klienci będą mieli ten sam zły czas.
Aby uzyskać datę serwera (datę ustawioną w systemie operacyjnym komputera serwera), zazwyczaj w konfiguracji tworzony jest wspólny moduł z zaznaczonym polem "Serwer" we właściwościach i tworzona jest w nim funkcja
// funkcja znajduje się we wspólnym module, na przykład o nazwie ServerFunctions // we właściwościach wspólnego modułu pole wyboru „Server” jest zaznaczone, a pole wyboru „Client” nie jest zaznaczone. Function GetServerDate () Export Return CurrentDate (); EndFunction // wywołanie tej funkcji do użycia z innego modułu wygląda jak DocumentObject.Date \u003d ServerFunctions.GetServerDate (); //ModuleName.FunctionName ()
Również w cienkim kliencie, bezpośrednio obok funkcji modułów, wskazuje się, gdzie zostanie wykonany:
Początek i koniec dnia
Na dzień „30.10.2012”:
data rozpoczęcia dnia wygląda następująco: „10/30/2012 00:00:00”
data zakończenia wygląda następująco: „10/30/2012 23:59:59”
Jest używany w raportach i zapytaniach, które wymagają danych za okres - dzień, miesiąc, rok.
Na przykład okres od 01/01/2012 00:00:00 do 01/31/2012 00:00:00 jest niepoprawny, ponieważ nie obejmuje jednego dnia miesiąca (ale obejmuje jedną sekundę ostatniego dnia miesiąca).
Praca z datami 1C - Porównanie dat
Data zawiera datę i godzinę. Porównując daty (z wyłączeniem czasu), zwykle przenosi się je na początek dnia (miesiąc, rok).
Na przykład:
Date1 \u003d Date („30.10.2012 12:00:00”); Jeśli StartDay (Date1) \u003d StartDay (DocumentLink.Date) Then Inform ("Dokument wprowadzony przed określoną datą"); EndIf; Na wszelki wypadek przykład porównania daty w okresie: Jeśli DocumentRef.Date\u003e \u003d StartMonth (CurrentDate ()) i DocumentLink.Date<= КонецМесяца(ТекущаяДата()) Тогда Сообщить("Документ введен в текущем месяце"); КонецЕсли;
Praca z datami 1C - Zmiana daty
Data to liczba sekund. Jeśli chcemy nie tylko dowiedzieć się, czy jedna data jest większa od drugiej, ale także o ile więcej, to różnicę otrzymujemy w sekundach.
Na przykład:
DayStart \u003d CurrentDate () - DayStart (CurrentDate ()); Raport („Od początku dnia minęło” + String (Od początku dnia) + „Sekundy”); Raport („Od początku dnia minęło” + String (Od początku dnia / 60) + „Minuty”); Raport („Od początku dnia minął” + Linia (Od początku dnia / 60/60) + „Godzina”);
Możemy też zmienić datę, zmieniając dodajemy lub odejmujemy ilość sekund:
StartThisDay \u003d StartDay (CurrentDate ()); StartPreviousDay \u003d StartDay (StartThisDay - 1); // usuń drugi - robiąc „wczoraj” i weź początek dnia z „wczoraj” Początek poprzedniego dnia \u003d Początek tego dnia - 24 * 60 * 60; // w inny sposób - odejmujemy 24 godziny - 24 (godziny) * 60 (okazały się minuty) * 60 (sekundy)
Praca z datami 1C - Chwila czasu
Moment w czasie to rozszerzona data mająca zastosowanie do dokumentów (i odpowiednio rejestrów).
Porównywanie czasu dokumentów jest wymagane, jeśli data i godzina dokumentów są takie same. W związku z tym może być używany podczas filtrowania zapytań.
Moment w czasie można uzyskać z dokumentu w następujący sposób:
// metoda 1DocumentMomentTime \u003d DocumentRef.MomentTime (); Możesz także porównać moment w czasie z datą / godziną: MomentTimeStandard \u003d NewMomentTime (StartDay (CurrentDate ())); Jeśli DocumentLink.MomentTime (). Compare (MomentTimeStandard) \u003d -1 Then Report ("Dokument został wprowadzony wcześniej niż dzisiaj"); EndIf; // Jeśli dokument został wprowadzony do dzisiejszej daty o godzinie 00:00:00, to mimo to został wprowadzony - dzisiaj
W pewnym momencie zachodzi potrzeba pracy ze zmiennymi typu „Data”. W tym artykule rozważymy podstawowe techniki - przekazanie aktualnej daty, sprawdzenie pustej wartości, dowolna data.
Podczas pisania zapytań często konieczne jest porównanie danych z aktualną datą. Wbudowany język 1C ma funkcję CurrentDate (). Pozwala określić aktualną godzinę i datę na komputerze. Aby wykonać operacje z bieżącą datą, 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 z wydatków z aktualną datą utworzenia:
ExampleRequest \u003d Nowe żądanie;
ExampleRequest.Text \u003d "
| WYBIERZ
| Załączone pliki raportu zaawansowanego. Link
| OD
| Reference.AvailableReportAttachedFilesASAAAvailableReportAttachedFiles
| GDZIE
| Załączone pliki raportu wstępnego Data< &ТекДата»;
ExampleRequest.SetParameter ("CurrentDate", CurrentDate ());
Data niestandardowa
Powyższa funkcja pozwala na porównanie, a tym samym dokonanie wyboru dla dowolnego okresu. Ta metoda umożliwia określenie ścisłego wyboru w zapytaniu bez używania dodatkowych parametrów.
Zauważ, że używając tej funkcji w powyższym przykładzie, przekazaliśmy tylko trzy liczby (rok, miesiąc, dzień) jako parametry wejściowe. Ostatnie trzy (godzina, minuta, sekunda) są opcjonalne, a jeśli ich nie ma, zastępowane są przez „0”, czyli początek dnia.
W tym przykładzie otrzymasz wszystkie pliki załączone do raportów z wydatków do końca ostatniego 2016 roku. W związku z tym wskażemy godzinę, minutę i sekundę w celu porównania z punktem w czasie „31 grudnia 2016 23:59:59”.
WYBIERAĆ
Załączone pliki raportu zaawansowanego. Link
Z
Reference.AvailableReportAttachedFiles AS AdvanceReportAttachedFiles
GDZIE
Załączone pliki raportu wstępnego Data< ДАТАВРЕМЯ(2016, 12, 31, 23, 59, 59)
Pusta data
Najłatwiejszym sposobem sprawdzenia zmiennej, aby zobaczyć, czy zawiera ona pustą datę, jest proste porównanie. W tym przykładzie za pomocą zapytania wybierzemy wszystkie wpływy środków na rachunek bankowy, dla którego data wpłynięcia nie jest wypełniona.