1c 요청에 현재 날짜를 지정하는 방법. 날짜로 변환

1C 쿼리와 1C:Enterprise 플랫폼의 내장 언어에는 날짜 작업 기능이 있습니다. 쿼리에서 날짜 변환을 단순화하고 사용을 피하는 데 도움이 됩니다. 많은 분량매개변수. 이러한 기능을 살펴보겠습니다.

1C 쿼리에서 날짜를 상수로 설정하는 방법

DATETIME(년, 월, 일, 시, 분, 초). 옵션 년, 월그리고 필수 사항이지만 다른 사항은 그렇지 않습니다. 시간을 지정하지 않으면 시스템이 하루의 시작 시간을 설정합니다.

요구. 텍스트= "선택하다
날짜시간(2016,09,28,12,22,00)"
; // 결과: 2016년 9월 28일 12:22:00

또한 이 함수에 대한 매개변수로 숫자만 명시적으로 지정할 수 있습니다. 다른 함수의 값을 매개변수로 지정할 수 없습니다. 예를 들어 다음 구성은 작동하지 않습니다.

요구. 텍스트= "선택하다
DATETIME(연도(출처.날짜),09,28,12,22,00)
Directory.Source AS 소스에서"
;

1C 쿼리에서 연도, 반년, 분기, 월, 10년, 주, 일, 시간, 분의 시작 또는 끝을 얻는 방법

이를 위해 다음 기능이 사용됩니다.

  • StartPeriod(날짜, 기간)
  • EndPeriod(날짜, 기간)

매개변수로 날짜유형이 있는 값이 전달되었습니다. 날짜.매개변수 기간 .

요구. 텍스트= "선택하다
시작 기간(DATETIME(2016,09,28,12,22,00), DECADE)"
; // 결과: 2016년 9월 21일 0:00:00

요구. 텍스트= "선택하다
EndPeriod(DATETIME(2016,09,28,12,22,00), QUARTER)"
; // 결과: 2016년 9월 30일 23:59:59

예제에서 볼 수 있듯이 이러한 함수에는 다른 중첩 함수를 사용할 수 있습니다.

1C 쿼리의 날짜에서 연도, 일, 분기, 월, 주, 요일, 일, 시간, 분, 초를 얻는 방법

이를 위해 날짜를 매개변수로 전달해야 하는 해당 함수가 있습니다.

  • 기능 연도(날짜)— 연도를 반환합니다.
  • 기능 DAYYEAR(날짜)— 해당 연도의 날짜 수를 늘립니다.
  • 기능 분기(날짜)— 분기 번호를 반환합니다.
  • 기능 월(날짜)— 월 번호를 반환합니다.
  • 기능 주(날짜)— 해당 연도의 주 수를 반환합니다.
  • 기능 요일(날짜)— 해당 주의 요일 수를 반환합니다(월요일 — 1, 일요일 — 7).
  • 기능 요일(날짜)— 해당 월의 일수를 반환합니다.
  • 기능 시간(날짜)— 시간을 반환합니다.
  • 기능 MINUTE(날짜)— 분을 반환합니다.
  • 기능 SECOND(날짜)— 초를 반환합니다.

요구. 텍스트= "선택하다
연도(날짜/시간(2016,09,28,12,22,00))"
; // 결과: 2016

요구. 텍스트= "선택하다
주(날짜/시간(2016,09,28,12,22,00))"
; // 결과: 40

요구. 텍스트= "선택하다
평일(날짜/시간(2016,09,28,12,22,00))"
; // 결과: 3

요구. 텍스트= "선택하다
연도(날짜/시간(2016,09,28,12,22,00))"
; // 결과: 272

요구. 텍스트= "선택하다
일(날짜/시간(2016,09,28,12,22,00))"
; // 결과: 28

1C 쿼리에서 연, 반년, 분기, 월, 10년, 주, 일, 시간, 분, 초를 더하거나 빼는 방법

이렇게하려면 다음 기능을 사용하십시오. AddToDate(날짜, 기간, 값).

매개변수로 날짜유형이 있는 값이 전달되었습니다. 날짜.매개변수 기간다음 값 중 하나를 사용할 수 있습니다. 두번째, 분, 시간, 일, 주, 십년, 월, 분기, 반년, 연도.

매개변수 의미추가할 기간 수를 표시합니다. 기간을 빼야 하는 경우 매개변수 의미음수여야 합니다.

요구. 텍스트= "선택하다
AddTODate(DATETIME(2016, 9, 28, 12, 22, 0), HALF YEAR, 1)"
; // 결과: 2017년 3월 28일 12:22:00

요구. 텍스트= "선택하다
AddKDate(DATETIME(2016, 9, 28, 12, 22, 0), DECADE, -1)"
; // 결과: 2016년 9월 18일 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 구성에 존재하는 모든 문서와 결과적으로 거의 모든 레지스터에는 날짜 유형의 속성이 하나 이상 있어야 하므로 모든 개발자는 다음을 알고 이해해야 합니다.

  • 다른 유형의 매개변수를 해당 유형으로 변환하는 방법
  • 1C 요청에서 빈 날짜를 결정하는 방법
  • 날짜와 시간 제한의 차이점은 무엇입니까?

우리 기사에서 답하려고 노력할 것은 바로 이러한 질문입니다.

날짜란 무엇이며 어떻게 결정하나요?

다수를 받아들이기 때문에 경영 결정기록 유지에는 1초를 초과하는 시간 정확도가 필요하지 않으므로 1C 플랫폼 개발자는 이 값이 날짜 형식의 절대 최소값이 될 것이라고 결정했습니다. 따라서 프로그램의 이벤트 시간을 설명하는 각 속성에는 다음이 포함되어야 합니다.

  • 사건이 발생한 연도
  • 이 행사의 달입니다.
  • 낮.

시, 분, 초를 표시할 필요는 없습니다. 이 세 가지 매개 변수를 생략하고 추가 조건이 없으면 프로그램은 자동으로 시간을 하루의 시작 부분으로 설정합니다.

전 세계에 존재하는 날짜 형식에는 상당한 차이가 있습니다.

  1. 러시아에서는 날짜를 먼저 입력하고 그다음에 행사가 열리는 달을 입력하고 연도를 마지막에 입력하는 데 익숙합니다.
  2. 미국 거주자는 월로 날짜를 시작합니다.
  3. 체코인, 폴란드인 및 슬로베니아인은 연도 – 월 – 일 형식으로 기간을 기록합니다.

1C 플랫폼이 사용하는 후자 형식입니다.

날짜로 변환

여러 값이나 문자열에서 Date 유형의 매개변수를 얻으려면 그림 1에 표시된 코드를 사용해야 합니다. 1

위 그림에서 볼 수 있듯이 한 줄을 사용하거나 이 줄을 쉼표를 사용하여 구성 요소로 분할하여 날짜를 확인할 수 있으며 결과는 변경되지 않습니다.

날짜의 연도는 사건의 밀레니엄과 세기를 포함하여 4자리 숫자를 포함해야 하며, 월, 일, 시간, 초는 앞에 오는 0을 포함하여 2자여야 한다는 점을 이해하는 것이 중요합니다.

프로그램의 시간 카운트다운은 0001년 1월 1일부터 시작됩니다. 위 코드의 경우 이 값은 두 가지 방법 중 하나로 결정될 수 있습니다(그림 2).

쌀. 2

두 번째 줄에서는 이벤트의 시, 분, 초를 생략했는데 이는 코드 성능에 전혀 영향을 미치지 않았습니다.

1C 쿼리에서 날짜를 사용하는 기능

1C 플랫폼에서 사용되는 대부분의 데이터 유형에는 사전 정의된 void 값이 있습니다. 숫자의 경우 0이고, 링크의 경우 빈 링크() 값을 정의할 수 있으며, 날짜의 경우 빈 값은 일반적으로 시작 날짜로 간주되며, 이를 설정할 때 해당 유형의 세부 정보를 비교해야 합니다. 요청 매개변수.

문제의 유형이 있는 양식 속성의 값에 숫자가 지정되지 않았더라도, 즉 창이 다음과 같이 보이더라도(그림 3), 이것이 아무것도 지정되지 않았다는 의미는 아니라는 점을 이해하는 것이 중요합니다. 이 매개변수를 빈 문자열과 비교하면 작동하지 않습니다.

쌀. 삼

빈 날짜를 수신하면 이를 요청에 대한 매개변수로 지정할 수 있습니다. 즉, 구성을 사용할 수 있습니다(그림 4).

그러나 빈 날짜를 매개변수로 전달하지 않고 요청 본문 내부를 확인하는 것이 더 나은 경우도 있습니다. 이를 위해 요청 코드(그림 5)에 적절한 조건을 입력하고 DateTime() 요청 함수를 사용할 수 있습니다.

쌀. 5

위의 요청 텍스트에서 우리는 연도, 월, 일의 앞에 오는 0을 생략했으며 시간, 분, 초도 표시하지 않았으며 프로그램은 그들이 말하는 것처럼 이 가정을 먹었습니다.

날짜 및 시간 경계

또 다른 흥미로운 사실쿼리와 날짜 간의 관계와 관련된 것은 다양한 데이터베이스 테이블에 액세스할 때 "시점" 개념을 사용하는 것입니다.

밀리초 미만의 정확도는 다음에 지정됩니다. 기술 문서기본 유형을 설명할 때 날짜는 누적 레지스터의 가상 테이블에서 레코드를 선택할 때 가장 명확하게 나타납니다. 누적 레지스터에 회전율 테이블 외에 잔여 및 잔여 및 회전율 테이블이 있는 경우 그로부터 샘플링이 수행됩니다. 특정 시간 동안 나가면 다른 결과가 나올 수 있습니다.

이런 일이 발생하는 방법과 이유를 이해하려면 간단한 예를 고려하십시오.

  1. 판매 문서가 12시 31분 36초에 실행되기 전에 설탕 명명법에 따른 잔액은 30kg이었습니다.
  2. 문서는 지정된 시간에 10kg을 기록했습니다.
  3. 남은 테이블에 따라 문서 날짜 12시 31분 36초에 생성된 보고서에는 30kg의 잔량이 표시됩니다.
  4. 동시에 Remains and Turnovers 테이블에 대한 동일한 보고서에는 20kg의 잔액이 표시됩니다.

이유는 무엇입니까? 비슷한 행동그리고 이것을 피하는 방법은 무엇입니까?

문제는 Remaining 테이블에서 기간이 열린 세그먼트로 지정된다는 것입니다. 즉, 보고서가 생성될 때 이루어진 움직임은 고려되지 않습니다. 즉, 시간이 지정된 초의 시작 부분에 적용됩니다. 매개변수. 동시에 회전율 테이블과 잔여 및 회전율 테이블의 경우 시간 경계가 고려됩니다. 즉, 시간은 지정된 초가 끝날 때 사용됩니다.

이 상황에서 벗어나는 방법에는 여러 가지가 있습니다.

  1. Remains 테이블을 사용할 때 지정된 것보다 1초 큰 시점을 나타냅니다.
  2. 잔여 및 회전율 테이블만 사용하십시오(성능 관점에서 볼 때 가장 최적의 옵션은 아님).
  3. 경계의 개념을 사용하십시오.

마지막 옵션은 그림 1에 표시된 코드로 표현될 수 있습니다. 6.

개체의 첫 번째 매개변수에서는 보고서를 생성해야 하는 날짜를 나타내고, 두 번째 매개변수는 국경 유형을 결정합니다. 특정 날짜의 움직임이 선택 항목에 포함되는 것이 중요하므로 이 매개변수를 "포함" 위치로 설정해야 합니다.

1C 쿼리에서는 날짜를 다루어야 하는 경우가 매우 많습니다. 특히 정기적인 정보가 포함된 메타데이터 개체에 대한 요청이 이루어진 경우에는 더욱 그렇습니다. 일반적으로 이는 레지스터(정보, 축적, 계산, 회계)입니다. 날짜 작업을 위해 1C 쿼리 언어에서 가장 일반적으로 사용되는 기능을 살펴 보겠습니다. 정보 레지스터를 기반으로 예제를 구축하겠습니다. 직원조직 ZUP 구성 버전 2.5.

  • 날짜 시간

    연도, 월, 일, 시, 분, 초를 지정하여 요청에서 날짜(시간 포함 또는 제외)를 얻을 수 있습니다.
    통사론:
    DATETIME(년, 월, 일, 시, 분, 초)
    일반적으로 시, 분, 초는 표시되지 않습니다. 작은 예를 들어 보겠습니다. 쿼리 콘솔에 다음 텍스트를 입력합니다.

    날짜/시간 선택(2016, 1, 1)

    요청을 실행한 결과 날짜는 2016년 1월 1일입니다.
    실제로 요청에 날짜가 이렇게 표시되는 상황은 상상하기 어렵습니다. 결국 기간을 지정해야 할 때는 매개변수가 사용됩니다. 그러나 이 기능이 특별한 가치를 갖는 경우가 있습니다. 이는 필드나 요청 조건에 빈 날짜를 표시해야 하는 경우입니다. 1C 언어의 경우 빈 날짜 형식은 0001.01.01입니다. 따라서 요청에서 빈 날짜를 얻으려면 다음을 지정하십시오. 날짜시간(1, 1, 1). 예를 들어 정보 레지스터에서 선택해 보겠습니다. 직원조직채워지지 않은 기록 수료기간:

    SELECT 조직 직원.기간, 조직 직원.직원, 조직 직원.직위, 조직 직원.조직 부서 FROM 등록 정보.조직 직원 AS 조직 직원 WHERE 조직 직원.완료 기간 = DATETIME(1, 1, 1)

  • 기간의 시작

    지정된 날짜에 대해 해당 날짜가 속한 기간의 시작을 반환합니다.
    통사론:
    기간 시작(날짜, 기간 유형)
    PeriodType은 다음 값을 사용할 수 있습니다. 분, 시, 일, 주, 월, 분기, 연도, 10년, 반년
    쿼리 콘솔에 다음을 입력합니다.

    기간 시작(날짜/시간(2016년 1월 15일), 월) 선택

    요청이 반환됩니다 - 2016년 1월 1일
    이제 예를 들어보겠습니다. 아시다시피, 등록의 주기성은 직원조직어느 날. 실제 기록기간이 아닌 해당 월의 시작일을 출력하는 쿼리를 만들어 보겠습니다.

    SELECT BEGINING OF PERIOD(조직의 직원.기간,월) AS 월초, 조직의 직원.직원, 조직의 직원.직위, 조직의 직원.조직 구분 FROM 등록 정보.조직의 직원 AS 조직의 직원

  • 기간 종료

    구문은 마침표 시작과 동일합니다. 그리고 이름에서 알 수 있듯이 날짜와 기간 유형별로 기간의 끝을 반환합니다. 우리는 그것을 자세히 고려하지 않을 것입니다. 작은 예로만 제한해 보겠습니다.
    요구:

    기간 종료(날짜/시간(2016년 1월 15일), 월) 선택

    2016년 1월 31일 23:59:59 반환
    보시다시피 값은 초 단위까지 정확하게 반환됩니다.

  • ADDKDATE

    날짜에 지정된 시간 간격 수를 추가합니다.
    통사론:
    ADDKDATE(날짜, 기간 유형, 수량)
    PeriodType은 함수와 동일한 값을 사용합니다. 기간의 시작
    예를 들어 2월 날짜를 선택해 보겠습니다.

    ADDKDATE(날짜/시간(2016, 2, 15), 월, 2) 선택

    날짜는 04/15/2016 0:00:00 입니다. 2월은 짧은 달임에도 불구하고, 수신된 날짜는 원래 날짜와 동일합니다. 개월수를 계산할 필요가 없어 매우 편리합니다.
    수량은 음수일 수도 있습니다. 그런 다음 간격은 반대 방향으로 계산됩니다.

  • 차이 날짜

    지정된 단위로 두 날짜의 차이를 계산합니다.
    통사론:
    날짜 차이(시작 날짜, 종료 날짜, 기간 유형)
    기간 유형은 다음 값을 사용할 수 있습니다. 초, 분, 시, 일, 월, 분기, 연도
    예를 들어:

    DIFFERENCEDATE(DATETIME(2016, 2, 15), DATETIME(2016, 3, 1), DAY) 선택

    15를 반환합니다.

여기서는 1C 쿼리 언어에서 가장 자주 사용되는 기능을 검토했습니다. 나머지는 거의 사용되지 않습니다. 필요한 경우 1C 플랫폼에 내장된 도움말에서 해당 작업의 예를 찾을 수 있습니다.

1C의 "날짜" 유형은 숫자, 문자열 및 부울과 함께 4가지 주요 데이터 유형 중 하나입니다. 날짜는 구성 어디에나 존재합니다. 개발 중에 이 데이터 유형을 사용하는 것을 피하는 것은 불가능합니다. 따라서 날짜 처리 방법, 날짜 작업에 사용할 수 있는 옵션, 날짜 저장 방법을 이미 이해하고 쿼리 작성을 시작하는 것이 좋습니다. 날짜가 다른 쿼리 작성의 모든 뉘앙스에 대한 예를 살펴보겠습니다.

1C 쿼리에서 날짜 작업의 예

우선, 시간 유무에 관계없이 필요한 형식으로 요청 날짜를 가져와야 합니다. 이 작업을 수행하는 방법에는 여러 가지가 있습니다.

  1. 매개변수를 통해 전달합니다. 이 방법을 사용하면 현재 세션 날짜만 얻을 수 있습니다.
  2. 선택 필드에서 쿼리의 날짜를 가져옵니다.
  3. DATETIME() 함수를 사용하여 숫자 값을 변환합니다.

문서 작업 시 가장 일반적인 작업은 1C 요청에서 빈 날짜를 확인하는 것입니다. 이 경우 변수나 필드를 DATETIME(1,1,1) 함수를 사용하여 얻은 빈 날짜와 비교하는 것이 가장 쉽습니다.

날짜/시간(1, 1, 1)

비슷한 명령을 사용하면 요청에서 임의의 날짜와 시간을 얻을 수 있습니다. 또한 6개의 숫자를 매개변수로 지정하면 최대 1초의 정확도로 지정할 수 있습니다. 숫자 3개만 사용하는 경우 시, 분, 초는 0(하루의 시작)으로 설정됩니다. 예를 들어 요청에서 2018년 1월 첫 10일에 대한 문서를 선택해야 합니다.

현재 계정에 대한 영수증을 선택합니다. 현재 계정에 대한 영수증을 현재 계정에 대한 영수증으로 연결합니다. 날짜 BETWEEN DATETIME(2018, 1, 0, 0, 0) AND DATETIME(2018, 1, 10, 23, 59, 59)

내장된 1C 언어의 쿼리에서는 다양한 필드를 선택하고 매개변수를 받을 수 있을 뿐만 아니라 특정 작업의 날짜 형식을 더 쉽게 지정할 수 있는 많은 기능이 있습니다. 쿼리에서 날짜를 자주 사용하는 경우 다음 명령을 알아야 합니다.

  • 기간의 시작.매개변수는 날짜의 시작을 가져오는 데 필요한 날짜 및 기간을 나타냅니다. 날짜를 시간을 초월한 형식으로 변환하는 데 사용됩니다. 이렇게 하려면 두 번째 매개변수인 "DAY"를 설정해야 합니다.
기간 시작(,) 기간 시작(&날짜, 요일) 기간>날짜>
  • 기간 종료.매개변수에 지정된 단위로 마지막 날짜를 반환하는 유사한 명령입니다.
  • ADDKDATE.지정된 시간 단위 수만큼 큰 날짜를 가져올 수 있습니다. 함수 매개변수에는 날짜, 시간 단위 및 숫자가 포함됩니다.
ADDKDATE(,) ADDKDATE(&날짜, DAY, 10) 수량>유형>날짜>
  • DIFFERENCEDATE.지정된 단위로 날짜 간의 차이를 가져옵니다.
DIFFERENCEDATE(,) DIFFERENCEDATE(&Date1, &Date2, DAY) 유형>날짜2>날짜1>
  • 요일.요일 중 하나의 일련 번호를 반환합니다.

이러한 기능을 올바르게 사용하면 개발자는 매우 사소하지 않은 문제를 해결할 수 있습니다. 예를 들어 요청에서 현재 날짜의 요일 이름을 문자열로 가져옵니다.

SELECTION WHENWEEKDAY(&CurrentDate) = 1 THEN "월요일" WHENWEEKDAY(&CurrentDate) = 2 THEN "화요일" WHENWEEKDAY(&CurrentDate) = 3 THEN "수요일" WHENWEEKDAY(&CurrentDate) = 4 THEN "목요일" WHEN WEEKDAY(&CurrentDate) = 5 THEN "금요일" 주의 요일(&CurrentDate) = 6 THEN "토요일" ELSE "일요일" END

1C 쿼리의 유형을 숫자 또는 문자열에서 날짜로 변환하는 것은 노동 집약적인 작업입니다. SUBSTRING 함수와 SELECT WHEN THEN ELSE 구성을 결합하여 문자열에서 DATETIME 함수를 사용하여 숫자에서 날짜를 가져올 수 있습니다. 이를 기반으로 개발자는 모듈의 다른 유형에서 날짜를 가져와 매개변수를 사용하여 요청에 전달하는 것을 선호합니다. 안타깝게도 이것이 항상 가능한 것은 아니므로 요청에서 날짜 형식을 변경해야 합니다.

가상 레지스터 테이블에서 데이터를 얻기 위해 1C 요청의 날짜를 매개변수로 지정할 수 있습니다. 이 역할은 위의 모든 기능을 사용할 수도 있습니다. 그러나 여기서는 1C 요청의 빈 날짜가 코드 실행의 최종 결과에 영향을 미치지 않도록 하는 것이 중요하므로 이를 확인하는 것이 필수적입니다.