논리적 작업(1s 엔터프라이즈). 논리적 연산(1s enterprise) 조건에서 논리적 OR 사용

다음과 같은 논리 연산:

NOT 논리적 NOT(부정); 그리고 논리적 AND;

또는 논리적 OR.

논리 연산의 피연산자는 논리 표현식이어야 합니다. 테이블에서. 2.5는 논리 연산의 결과를 보여줍니다. 논리적 표현 LP1 및 LP2, 값 사용 진실(나) 또는 거짓말하다(엘).

진리표

표 2.5

LV1 LV2 LV1 및 LV2 LV1 또는 LV2 LV1 아님
그리고 그리고 그리고 그리고
그리고 그리고
그리고 그리고 그리고
그리고

부정 연산자는 피연산자의 왼쪽에 배치되는 단항 연산자입니다. 다른 모든 고려 작업은 이진입니다.

2.6.5. 작업 우선 순위

모든 1C 작업은 우선 순위(seniority)에 따라 왼쪽에서 오른쪽으로 표현에서 수행됩니다. 즉, 연속된 두 작업의 우선 순위가 같으면 왼쪽 작업이 처음에 수행됩니다. 괄호로 묶인 하위 표현식이 먼저 평가됩니다. 테이블에서. 2.6 1C 작업은 우선 순위 내림차순으로 정렬됩니다.

작업 우선 순위

표 2.b

%*,/+, NOT AND OR<, <=, >, >=, =, <>

논평.각 테이블 셀에는 우선 순위가 같은 작업이 포함됩니다.

예:

8 % 2 * 3 // 0을 반환합니다
8 % (2 * 3) // 2를 반환합니다

논리 연산은 관계 연산보다 오래되었으므로 다음 논리 표현식은 오류가 있습니다.

3>2and4< 5 // Так неверно

2와 4의 논리 하위 표현식이 처음에 평가되기 때문에

존재하지 않는 피연산자 진실또는 거짓말하다.그리고 이것은 사실이 아닙니다.

그러나 논리적 표현은 참입니다

(3 > 2) 및 (4< 5) // Это 진정한 예.부울 표현식의 결과를 계산합니다.

(x/a=1) 또는 (b/(a+b)< 1) и не (б = а) или (х <>6) ~에서 엑스 = 6.0, = 2.0 및 b=3.0.

괄호로 묶인 하위 표현식의 연산 결과를 계산하면 다음과 같습니다.

거짓말하다또는 진실그리고 아니다 거짓말하다또는 거짓말하다.

거짓말하다또는 진실그리고 진실또는 거짓말하다.하고 나서 진실그리고 허위 사실또는 진실또는 거짓말하다.최종 결과: 진실.

2.7. 어레이

정렬숫자로 액세스할 수 있는 여러 값을 포함하는 데이터 개체입니다( 색인).

배열의 요소 수를 배열이라고 합니다. 크기.배열의 크기는 정수 리터럴 상수만 될 수 있습니다.

변수 연산자;

1차원 배열(벡터) 선언 다섯 가지 요소에서. 배열 요소의 이름은 다음과 같습니다. 아, 아, 아, 아그리고 ㅏ.이 이름에서 값 1-5는 배열 요소의 색인입니다.

모든 요소의 값이 주어지면 배열이 정의된 것으로 간주됩니다. 배열 요소의 초기 값을 설정하기 위해(배열 초기화) 다음 루프가 가능합니다.

in = 1 ~ 5 사이클

과제

배열의 두 번째 및 다섯 번째 요소의 값을 각각 변경하십시오. ㅏ.

일반적으로 숫자 표현식은 배열 인덱스로 사용할 수 있습니다. 색인 표현식.예를 들어:

a = 9.1; // 배열의 세 번째 요소 값을 변경합니다.

배열 인덱스 표현식이 정수가 아닌 값으로 평가되면 해당 값의 정수 부분이 인덱스로 사용됩니다. 예를 들어:

a = 9.1; // 배열의 첫 번째 요소 값을 변경합니다.

인덱스 값은 배열의 범위를 넘어서는 안 됩니다. 따라서 이전에 선언된 배열로 작업할 때 다섯 가지 요소 중 잘못된 연산자

동일한 배열의 요소는 다음과 같을 수 있습니다. 다른 유형. 예를 들어:

a = '25.11.01'; // 날짜 유형의 요소 배열 요소는 집계 유형일 수 있습니다. 예를 들어:

ctr = CreateObject("Directory.Employees");

table = CreateObject("테이블");

배열은 다른 배열을 요소로 포함할 수 없습니다.

배열은 프로그램 구성요소(프로시저 또는 함수)의 공식 매개변수가 될 수 있습니다. 이 경우 배열의 크기가 지정되지 않고 대괄호가 유지됩니다. 프로시저(함수)에 전달된 배열의 크기를 결정하기 위해 내장 함수 Size가 사용됩니다.

예:

절차 Array(s) 변수의 초기화, 크기;

sizeA = 크기(a); // 내장 함수 Size는 배열의 크기를 반환합니다.

zmA 사이클에 의해 yin = 1인 경우

a[in] = 1; // 이제 배열의 모든 요소는 루프의 한쪽 끝과 같습니다.

endProcedures // 초기화 배열

절차 실행() 변수;

// 배열 요소의 초기값을 설정하는 프로시저 호출

// 실제 매개변수는 배열의 이름입니다. InitializationArray(a);

endProcedures // 실행

쿼리의 조건은 1C infobase 테이블에서 모든 레코드를 선택하지 않고 하나 이상의 선택 기준에 해당하는 레코드만 선택해야 할 때 사용됩니다.

1C 요청의 조건을 설정할 수 있습니다. 다른 방법들요청 자체 및 데이터 소스의 특성에 따라 다릅니다.

키워드 "WHERE"

예어 어디정보베이스에서 선택한 레코드에 조건이 적용될 때 1C 쿼리에 사용됩니다. 이 경우 정보 베이스 테이블에서 선택하는 단계에서 레코드가 필터링됩니다.

예를 들어 테이블이 있습니다. 지불금, 직원 목록 및 직원에 대한 지불이 포함됩니다.

최소 10,000 금액의 지불을 선택해야 하는 경우 요청은 다음과 같습니다.

요구. 텍스트= "선택하다
| 결제.직원,
| 지불 급여
|에서
| 지불금
|어디
| 지불금.급여 >=10000"

쿼리 결과는 다음 테이블이 됩니다.

키워드 "HAVING"

예어 갖는 1C 쿼리에서는 이미 선택된 레코드 중에서 선택해야 할 때 사용됩니다. 예를 들어 이 키워드는 쿼리 결과에서 그룹화된 레코드를 필터링하려는 경우에 사용됩니다.

위의 예로 돌아가 보겠습니다. 테이블에서 선택해야 한다고 가정해 보겠습니다. 지불금총 20,000 이상을 받은 직원. 이렇게 하려면 먼저 그룹화 기준 필드를 입력해야 합니다. 직원, 필드별 합계 계산 샐러리각 직원에 대해 받은 레코드에서 조건을 만족하는 레코드를 선택합니다.

요청 텍스트는 다음과 같습니다.

요구. 텍스트= "선택하다
| 결제.직원,
| AMOUNT(Payments.Salary) AS 급여
|에서
| 지불금
|그룹화 기준
| 결제.직원
|가지고
| AMOUNT(결제.급여) > 20000"

이 쿼리의 결과는 다음과 같습니다.

이 예는 키워드 간의 차이점을 명확하게 보여줍니다. 어디그리고 갖는.단어를 사용했다면 어디대신에 갖는, 그런 다음 먼저 급여가 20,000 이상인 레코드를 선택한 다음 각 직원의 금액을 계산합니다. 결과적으로 빈 쿼리 결과를 얻게 됩니다. 한 번에 20,000달러 이상을 받은 직원은 없었습니다.

가상 레지스터 테이블의 선택 조건

1C:Enterprise 시스템의 모든 레지스터에는 가상 테이블이 있습니다. 누적 레지스터, 정보 레지스터, 회계 레지스터.가상 테이블에 대한 조건을 설정하는 방법에는 두 가지가 있습니다.

  1. 가상 테이블의 매개변수를 통해;
  2. 쿼리 섹션을 통해 어디또는 갖는.

섹션 간 차이점 어디그리고 갖는우리는 이미 고려했습니다. 이러한 쿼리 섹션의 조건이 가상 테이블 매개변수의 조건과 어떻게 다른지 이해하려면 다음이 무엇인지 이해해야 합니다. 가상 레지스터 테이블 1C에서. 중요한 기능은 정보베이스에 존재하지 않는다는 것입니다. 이것은 구성을 최적화하기 위해 1C: Enterprise 플랫폼에서 제공하는 도구입니다.

따라서 가상 테이블의 매개 변수에 조건이 지정되어 있으면 실제 레지스터 테이블의 레코드에서 형성 단계에서 적용됩니다. 그리고 섹션에 있는 경우 어디또는 갖는, 그런 다음-이미 형성된 가상 테이블의 레코드에.

예를 들어 보겠습니다. 주기적인 정보 등록 표가 주어짐 통화.

환율이 30 루블 미만인 가장 작은 날짜의 통화를 선택해야 합니다.

가상 테이블 매개변수에 조건이 있는 쿼리는 다음과 같습니다.

이 경우 하나의 항목을 얻습니다. 달러 28.3 2007년 2월 1일부터. 이것이 문제에 대한 올바른 해결책이 될 것입니다.

섹션에 조건을 배치하면 어디,그런 다음 쿼리 결과는 비어있을 것입니다. 처음에는 각 통화에 대한 첫 번째 컷이 만들어지기 때문입니다(결과적으로 2007년 1월 1일부터 두 개의 레코드를 얻게 됩니다) 달러 30.25그리고 유로 40.5), 그 중에서 조건을 만족하는 레코드가 선택됩니다. 그러나 둘 다 기록 상태를 받았습니다 잘< 30 만족하지 마십시오.

요청 필드 적용 가능 다양한 기능. 이 섹션에서는 가장 일반적으로 (나 자신이) 사용하는 것을 고려할 것입니다.

날짜 시간- 날짜 유형으로 상수 필드를 설정합니다. 통사론:

날짜 시간(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)
요청.텍스트 =
"선택하다
| DATETIME(2013, 1, 1) AS OMG";// 2013년 1월 1일

날짜 차이- 지정된 차원(년, 월, 일, 시, 분, 초)에서 두 날짜의 차이를 반환합니다. 통사론:

차이날짜(<Дата1>, <Дата2>, <Тип>)
요청.텍스트 =
"선택하다
| DATEDIFF(DATETIME(2013년 2월 28일), DATETIME(2013년 1월 1일), 요일)
| 겨울이 끝날 때까지 며칠";

의미- 데이터베이스 테이블 중 하나의 미리 정의된 레코드로 상수 필드를 설정하고 null 참조를 전달할 수도 있습니다. 통사론:

의미(<Имя>)
요청.텍스트 =
"선택하다
//미리 정의된 디렉토리 요소
| VALUE (참조. 통화. 루블) AS 루블,
// 빈 문서 링크
| VALUE(문서.고객 송장.NullReference) AS EmptyInvoice,
// 열거형 값
| VALUE(Enumeration.GenderPersons.Male) AS 남성,
//계정과목표에서 미리 정의된 계정
| VALUE(계정과목표. 자급자족. 물품) AS 계정_41";

선택- 1C 쿼리 언어에 대한 IF 구조의 아날로그. 통사론:

선택
언제<Выражение>그 다음에<Выражение>
그렇지 않으면<Выражение>

요청.텍스트 =
"선택하다
//가격이 100 미만이면 쿼리는 여전히 100을 반환합니다.
// 그렇지 않으면 요청이 실제 가격을 반환합니다.
| 선택
| WHEN 제품.가격 > 100
| THEN 상품.가격
| 다른 100
| 가격으로 종료
|에서

링크<Имя таблицы>
요청.텍스트 =
"선택하다
//등록자의 값 유형이 문서 수신인 경우,
//그러면 요청은 "상품 수령"을 반환하고, 그렇지 않으면 "상품 판매"를 반환합니다.
| 선택
| WHEN 남아 있음 등록 기관 링크 문서 영수증
| THEN ""물품 수령""
| ELSE ""상품 판매""
| 운동의 관점으로 끝
|에서
| 누적 레지스터. 그대로 남아 있음";

사이- 값이 범위에 있는지 확인합니다. 통사론:

사이<Выражение>그리고<Выражение>
요청.텍스트 =
//100에서 1000 사이의 가격 범위에 있는 모든 제품 가져오기
"선택하다
| 제품.제품
|에서
|어디
| 상품.100에서 1000 사이의 가격";

안에그리고 계층 구조에서- 전송된 목록에 값이 있는지 확인합니다. IN HIERARCHY는 또한 계층적 요소를 아래로 확장하고 하위 요소 중에서 값을 찾습니다. 통사론:

안에(<СписокЗначений>), 계층에서(<СписокЗначений>)
요청.텍스트 =
//41번째와 10번째 계정의 모든 하위 계정 가져오기
"선택하다
| 자체 지원. 참조 AS 송장
|에서
| 계정과목표 자활 AS 자활
|어디
| Self-supporting.Reference IN HIERARCHY (VALUE(Chart of Accounts.Self-supporting.Goods),
| VALUE(계정과목표. 자급자족. 자료))";

좋다- 검색 문자열이 하드 코딩되지 않은 경우 사용되는 패턴과 문자열을 비교할 수 있습니다. 템플릿 구축:

  • %(백분율): 임의의 수의 문자를 포함하는 시퀀스
  • _(밑줄): 임의의 문자 1개
  • [...] (대괄호 안에 하나 이상의 문자): 대괄호 안에 나열된 단일 문자. 열거형은 범위의 끝을 포함하여 범위 내의 모든 문자를 의미하는 a-z와 같은 범위를 포함할 수 있습니다.
  • [^...] (대괄호 안에 부정 기호 뒤에 하나 이상의 문자가 있음): 부정 기호 다음에 나열된 문자를 제외한 모든 단일 문자

통사론:

좋다"<ТекстШаблона>"
요청.텍스트 =
// 명명법 디렉토리에서 모든 의자 찾기
"선택하다
| 제품.제품
|에서
| 디렉토리 상품 AS 상품
|어디
| Goods.Name LIKE ""tool%""";
//이 쿼리는 Chair, chair, chair, office chair 등을 반환합니다.
//하지만 테이블은 이 목록에 없습니다.

NULL- 필드가 정의되지 않은 경우 지정된 표현식에서 정의합니다. 통사론:

ISNULL(<Выражение>, <Выражение>)
요청.텍스트 =
//필드가 정의되지 않은 경우(NULL)? 그런 다음 빈 참조를 제공하십시오
"선택하다
| ISNULL(Products.Reference, VALUE(Catalog.Products.EmptyReference)) AS 제품
|에서
| 핸드북. 물품 AS 물품";

NULL은 처리되어야 합니다. 왜냐하면 이것은 매우 "변덕스러운" 유형입니다(1C:Enterprise 8 시스템은 하나의 요소로 특수한 NULL 유형을 정의합니다). 값으로 비교를 해보면 이 유형의또는 할당하면 확실히 오류가 발생하므로 이 구성을 잊지 마십시오. NULL이 나타날 수 있는 경우:

  • 내부 테이블을 제외하고 테이블을 조인한 후(조인에 대한 다음 기사)
  • 디렉토리 그룹에 대해서만 정의된 속성을 선택한 후 또는 그 반대의 경우도 마찬가지입니다.
  • 문서 저널의 열을 선택한 후 현재 문서에는 이 열에 포함된 세부 정보가 없습니다.

이것은 멀리 전체 목록쿼리 언어 1C 8의 기능, 다른 작업에 관심이 있다면 의견을 작성하십시오.

일반적으로 프로그래밍 언어에 대한 연구는 첫 번째 작성 예에서 시작됩니다. 가장 간단한 프로그램("안녕하세요!"). 이는 기본 구문 구성으로 작업을 시각적으로 보여주기 위해 수행됩니다. 우리는 새로운 개발 환경을 배울 때 자료를 제시하는 이 일반적인 방법에 예외를 두지 않을 것이므로 첫 번째 기사도 같은 맥락에서 고려되어야 합니다. 여기에서 1C:Enterprise 8 플랫폼의 프로그래밍과 관련된 다음 질문에 대한 답변을 자세히 분석합니다.

  • 내장 1C 언어로 프로그램 코드를 작성하는 데 어떤 도움을 주나요?
  • 프로그램 모듈이란 무엇이며 작업 규칙은 무엇입니까?
  • 변수란 무엇이며 어떻게 사용하며 선언하는 방법과 위치는 무엇입니까?
  • 비교 연산자, 대입 연산자 및 조건 연산자는 무엇이며 어떻게 사용합니까?
  • 부울 연산 - 부울 연산이란 무엇이며 어떻게 사용합니까?
  • 루프가 필요한 이유와 사용 방법은 무엇입니까?

이 기사는 아직 1C:Enterprise 8 플랫폼 개발에 익숙하지 않지만 1C에서 프로그래밍하는 방법을 배우려는 모든 사람들에게 유용할 것입니다.

적용 가능성

이 자료는 플랫폼 "1C:Enterprise 8" 에디션 8.2와 관련이 있습니다. 8.3.

변수 및 연산자

이 기사에서는 내장 언어 1C:Enterprise 8을 연구하기 시작합니다. 실행 코드는 프로그램 모듈에 포함되어 있습니다.

다양한 이벤트를 처리하도록 설계된 상당히 많은 수의 모듈이 있습니다.

따라서 사용자 로그인은 하나의 모듈에서 처리되고 사용자가 특정 버튼을 클릭하는 처리는 완전히 다른 모듈에서 처리됩니다.

따라서 각 모듈은 특정 지점에서의 구성 동작을 설명합니다. 모듈에는 무엇보다도 변수 선언 섹션이 포함되어 있습니다. 저것들. 모듈에서 일부 변수를 선언할 수 있습니다.

앞으로는 이 모듈의 절차 및 기능에서 사용할 수 있습니다. 변수가 Export 키워드로 정의된 경우 이 모듈 외부에서 사용할 수 있습니다. 변수 선언 행 예:

Rem 창고, 사업부, 점주 수출;

변수 선언 후 프로시저 및 함수 섹션이 있습니다.

그 뒤에는 이 모듈에 액세스할 때 실행될 기본 프로그램 섹션이 있습니다.

예를 들어 메인 프로그램 섹션에서 변수를 초기화할 수 있습니다. 몇 가지 초기 값을 제공하십시오.

상태=1;
새 표현식=2;
결과=3;

모듈은 필요한 다양한 작업을 수행하는 다양한 연산자의 조합으로 생각할 수 있습니다.

연산자 구분 기호는 ";" 문자입니다. (세미콜론). 이 표시는 운영자 종료 표시입니다. 저것들. 연산자는 다음과 같이 작성할 수 있습니다.

결과=100x200
+400
-600;

명령문이 몇 줄에 있는지는 중요하지 않습니다.

물론 연산자를 한 줄에 배치하는 것이 더 편리하고 명확한 경우가 많지만 연산자가 상당히 긴 경우도 있습니다(줄 수가 합리적으로 수십 개에 달할 수 있음).

세미콜론은 예를 들어 프로시저와 같이 주어진 구문의 마지막 문에서 생략될 수 있습니다. 저것들. 다음 코드가 작동합니다.

프로시저 CalculateValue()

초기 값 = 100;
IntermediateValue = 초기값 / 5;
최종값 = 초기값+중간값

종료 절차

그러나 마지막 문장에는 세미콜론을 사용하는 것이 좋습니다. 시간이 지남에 따라 건설이 계속되고 최종 운영자가 더 이상 최종적이지 않을 수 있습니다. 이 상황을 구체적으로 모니터링해야 합니다.

변수는 모든 데이터 유형의 일부 값을 보유하도록 설계되었습니다. 처리를 위한 정보의 중간 저장에 사용됩니다.

일부 작업을 수행하는 거의 모든 소프트웨어 모듈에는 다양한 변수가 있습니다. Platform 1C:Enterprise 8의 값에 의한 변수 타이핑은 부드럽습니다.

예를 들어, 변수는 한 데이터 유형의 값을 포함하고 몇 줄 후에 다른 유형의 값을 포함할 수 있습니다.

생성됨 = 거짓;
생성됨 = 참;
생성됨 =100;

처음 두 문에서 변수 값은 부울이고 세 번째 문에서는 숫자 값으로 변경됩니다. 저것들. 입력은 이 변수에 할당된 값에 따라 다릅니다.
변수는 두 가지 방법으로 선언할 수 있습니다.

  • 암시적 방법(할당 연산자의 왼쪽에 있는 언급은 이 변수를 설명합니다. 변수라는 단어로 변수에 대한 예비 설명이 없습니다. 즉, 변수 선언의 특별한 섹션이 없습니다).
  • 변수의 명시적 선언(Variable ControlData;). 예를 들어 이 변수를 함수로의 후속 전송이 예상되는 경우 변수의 명시적 선언이 사용됩니다.

변수 이름의 경우 식별자에 대한 고전적인 설명이 사용됩니다. 식별자는 문자, 숫자 및 밑줄로 구성됩니다. 식별자는 문자나 밑줄로 시작해야 합니다.

이 경우 변수의 이름은 이 변수의 의미를 반영해야 합니다. 단일 문자 변수 이름(예: A, B, C)은 나쁜 예입니다. 변수의 본질을 반영하지 않습니다.

올바른 변수 이름의 예: Counter(루프에 대한 변수 증가), Contractor. 변수 이름에 여러 단어가 포함된 경우 각 새 단어는 명확성을 위해 대문자로 시작해야 합니다.

프로시저, 함수, 루프, EndCycle 등의 예약어는 변수 이름에 사용할 수 없습니다. (이 구성은 프로그램 모듈에서 빨간색으로 강조 표시됩니다).

예약어는 내장 언어 연산자이며 그 중 상당수가 있습니다. 그들 모두는 구문 도우미.

데이터 유형은 예약어가 아닙니다(예: Array, Boolean, True, False). 시스템은 이러한 변수 이름을 올바르게 인식합니다.

프로그램 코드를 작성할 때 대소문자는 중요하지 않습니다. 예를 들어 프로시저라는 단어는 대문자와 소문자로 모두 쓸 수 있습니다. 또한 대문자와 소문자를 단어 내에 삽입할 수 있습니다.

플랫폼에는 중요하지 않습니다. 단, 예의 범절에 따라 단어의 첫 글자는 대문자로 나머지 글자는 모두 소문자로 쓴다.

언어에 대해. 러시아어와 영어를 모두 사용할 수 있으며 두 가지 언어를 조합하여 사용할 수 있습니다. 누군가에게 편리하다면 안전하게 영어를 사용하여 프로그램 코드를 작성하고 러시아어와 영어를 결합할 수 있습니다. 플랫폼과는 상관없습니다.

많은 이름 영어꽤 기억하기 어렵습니다. 두 가지 언어를 조합하여 사용하면 프로그램 코드의 가독성이 떨어집니다.

부울 연산

비교 연산자는 True 또는 False를 반환하는 부울 논리를 자주 사용합니다.

예를 들어, 조건부 연산자에서 비교할 수 있습니다. If Event = Sale 그런 다음 알고리즘은 한 분기를 따라 이동하고(즉, 값이 True인 경우) False 조건에 따라 알고리즘의 다른 분기가 실행됩니다.

조건은 매우 복잡할 수 있으며 AND, OR 및 NOT 연산자를 사용하여 결합할 수 있습니다. 따라서 AND 연산자의 경우:

진실과 진실 = 참;
참과 거짓 = 거짓;
거짓 AND 참 = 거짓;
거짓 AND 거짓 = 거짓.

OR 연산자의 경우 피연산자 중 하나가 True이면 충분하며 조합 값은 True가 됩니다. 두 피연산자가 모두 False인 경우에만 값이 False입니다.

NOT 연산자는 단순히 현재 값을 반전시킵니다(False를 True로, True를 False로).

이러한 연산자의 조합을 사용하면 충분히 구축할 수 있습니다. 어려운 조건. 복잡한 조건문을 작성할 때 우선 순위를 고려하십시오.

NOT 연산자가 가장 높은 우선 순위를 가지며 AND 연산자, OR 연산자 순입니다. 괄호로 묶인 항목이 우선 순위가 가장 높고 먼저 실행됩니다.

예를 들어 위 식의 작업에 대해 우선 순위(실행 순서)를 지정해 보겠습니다.

NOT(조건1 OR 조건2) AND 조건3 OR ​​조건4
1.결과1 = (조건1 또는 조건2);
2. 결과2 = 결과1이 아님;
3. Result3 = Result2 AND 조건 1;
4. 결과 = 결과3 또는 조건4;

변환 규칙이 있습니다.

NOT(조건1 OR 조건2) = NOT 조건1 AND NOT 조건2.

그러나 종종 논리적으로 확장된 표현이 더 읽기 쉽기 때문에 항상 표현을 단순화하려고 노력해서는 안 됩니다.

할당 연산자

할당 연산자는 철자가 같더라도 같음과 혼동해서는 안 됩니다.

할당 연산자의 원리는 왼쪽 값(왼쪽 변수)에 등호 오른쪽에 있는 값을 할당하는 것입니다. 예를 들어 보겠습니다.

변수1 = 변수2 = 변수3;

Variable1에는 부울 논리에서 동일한 값이 할당됩니다. Variable2 = Variable3이면 True이고 그렇지 않으면 False입니다.

초보 프로그래머의 위치를 ​​테스트 할 때 두 변수의 값을 장소에서 교환하는 작업이 자주 사용됩니다.

이 문제는 할당 연산자를 사용하여 해결되며 두 가지 솔루션이 있습니다.

임시 변수를 사용하는 솔루션 #1:
TempVar = 변수1;
변수1 = 변수2;
변수2 = 임시 변수;

해결책 #2:
변수1 = 변수1 + 변수2;
변수2 = 변수1 – 변수2;
변수1 = 변수1 – 변수2;

조건 연산자

그러한 연산자 If가 있으며 그 후에 일부 조건을 설명해야 합니다(조건 자체가 상당히 클 수 있음). 조건 다음에는 Then이라는 단어와 실행할 명령문이 옵니다.

이것은 키워드 Else와 일련의 다른 명령문이 뒤따를 수 있습니다. 조건이 여러 개인 경우 일련의 키워드를 사용할 수 있습니다. 그렇지 않으면(아래 예 참조). 전체 구조는 키워드로 완성되어야 합니다. EndIf뒤에 세미콜론이 옵니다.

단순 및 복수 조건 외에도 축약형이 있습니다. 조건문: ?(조건, 식1, 식2);

조건이 참이면, 식1, 그렇지 않으면 - 식2. 코드 예시: ExpensiveItem = ?(Item.Price>100000, True, False);

실제로는 값을 가진 비교 레코드 대신 진실 (거짓말하다) 유형:

변수 = True인 경우 다음
그리고
변수 = False인 경우 다음

동등한 표기법이 실제로 사용됩니다.

변수인 경우
그리고
변수가 아니면

순환 연산자

모든 종류의 주기에 대해 키워드를 사용하여 이 주기의 끝을 명시적으로 표시해야 합니다. 종료주기. 주기에는 여러 가지 유형이 있습니다.

카운터별 순환- 반복 횟수가 고정된 사이클. 루프를 종료하기 위한 조건은 한계 값이 초과되었다는 것입니다. A의 값을 계산하기 위해 사용하는 예!

A = 5;
계승 = 1;
For Counter = 1 By A 루프
팩토리얼 = 팩토리얼 * 카운터;
사이클 종료;

조건별 루프– 이 주기의 조건이 참인 동안 실행됩니다. 예:

나머지 합계 = 1000;
추가 품목 가격 = 243;
수량 = 0;
RemainingAmount>0 주기 동안
수량 = 수량+1;
남은 금액 = 남은 금액 - 수량 * 추가 ​​상품 가격;
추가 품목 가격 = 추가 품목 가격 * 0.8;
종료주기
수량 = 수량-1;

이 루프는 제품의 각 단위를 구매한 후 이전 가격에 0.8의 계수를 곱한 경우 주어진 금액(1000 루블)으로 구매할 수 있는 제품의 단위 수를 계산합니다. 상품의 초기 가격은 243 루블입니다.

초보자가 이러한 유형의 루프를 사용할 때 실수의 예는 루프 조건이 처음에는 참이지만 루프 자체 내에서는 어떤 식으로든 변경되지 않는 영원한 루프입니다.

컬렉션을 반복합니다(다른 이름은 For each임).

플랫폼에는 상당히 많은 수의 컬렉션이 있습니다(특정 유형의 요소를 포함하는 컨테이너).

특별한 종류의 루프를 사용하여 컬렉션의 요소를 반복할 수 있습니다.

예를 들어 숫자 배열이 있는 경우 배열의 모든 요소의 합계를 계산해야 합니다.

합계 = 0;
배열 루프의 각 요소에 대해
합계=합계+항목;
사이클 종료;

루프에 대한 특수 연산자가 있습니다. 계속하다그리고 중단하다.

루프의 특정 지점에서 이 루프의 추가 명령문 실행이 무의미해지면 연산자를 사용하여 루프의 시작 부분으로 돌아가 다음 루프를 구성합니다. 계속하다.

운영자 중단하다루프 조건이 참인 경우에도 루프를 종료할 수 있습니다.

이것으로 1C의 내부 언어 개발에 대한 첫 번째 지인을 마칩니다.

Hello World는 어떻습니까? 아직 작성하지 않았습니까? 예, 하지만 당신이 스스로 하는 것을 방해하는 것은 없습니다. 왜냐하면. 지식은 이미 충분합니다. 그게 잘 안되면 여기를 보시면 됩니다.

이 기사에서 우리는 여러분 모두와 논의하고 싶습니다. 쿼리 언어 기능 1s, 그리고 쿼리 언어 구성. 함수와 구조의 차이점은 무엇입니까? 함수는 대괄호와 가능한 매개변수를 사용하여 호출되며 구성은 대괄호 없이 작성됩니다. 틀림없이 1s 쿼리 언어의 모든 구성 및 기능데이터 수집 프로세스를 유연하고 다기능으로 만듭니다. 이러한 함수 및 구문은 쿼리 필드에 적용되며 일부는 조건에도 적용됩니다.

쿼리 언어 기능 1s

명확한 설명부터 쿼리 언어 기능 1s구조에 대한 설명보다 훨씬 덜 일반적이므로 함수를 살펴보기로 결정했습니다. 이제 목적, 구문 및 사용 예를 설명하면서 각각을 개별적으로 분석해 보겠습니다.

1. 기능 날짜 시간- 이 함수는 "날짜" 유형의 상수 필드를 생성합니다.

통사론: 날짜 시간(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

사용 예:

2. 날짜 차이 기능- 차원(년, 월, 일, 시, 분, 초) 중 하나에서 두 날짜의 차이를 반환합니다. 측정값은 매개변수로 전달됩니다.

통사론: 차이날짜(<Дата1>, <Дата2>, <Тип>)

사용 예:

Query.Text = "SELECT | DATE DIFFERENCE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS 일수";

3. 기능 값- 데이터베이스에서 미리 정의된 항목으로 상수 필드를 설정하고 모든 유형의 null 참조를 얻을 수도 있습니다.

구문: 값(<Имя>)

사용 예:

Query.Text = "SELECT //미리 정의된 요소 | VALUE(Currency.Dollar.Catalog.Dollar) AS 달러, //빈 참조 | VALUE(Document.IncomingGoodsServices.EmptyReference) AS 영수증, //이체 값 | VALUE(Transfer.LegalIndividual . 개인) AS 개인, //미리 정의된 계정 | VALUE(계정과목표.자체 지원.자료) AS 계정_10" ;

4. 선택 기능-코드에 사용되는 IF 구성의 아날로그가 있으며 1C 쿼리에만 사용됩니다.

통사론: 선택 시기<Выражение>그 다음에<Выражение>그렇지 않으면<Выражение>끝

사용 예:

Request.Text = //금액이 7500을 초과하면 300 루블의 할인이 있어야 합니다. //따라서 조건이 트리거되면 함수는 //금액 - ​​300을 반환합니다. //그렇지 않으면 요청 단순히 금액을 반환합니다.

5. 익스프레스 기능- 특정 유형의 상수 필드를 표현할 수 있습니다.

통사론: EXPRESS(FieldName AS TypeName)

사용 예:

Query.Text = "다양한 선택 | Sales.Registrar.Number, | SELECT | WHEN Sales.Registrar REF Document.Expense | THEN EXPRESS(Sales.Registrar AS Document.Expense) | ELSE SELECT | WHEN Sales.Registrar REF Document.Implementation | THEN EXPRESS(Sales.Registrar AS Document.Release) | END | ... | END AS 번호 | FROM | 누적 등록.구매 AS 구매";

여전히 이러한 조건이 충족되는 혼합 유형의 필드에서 EXPRESS 함수를 사용하는 변형이 있습니까? 가장 간단한 예는 모든 레지스터에 대한 "Registrar"입니다. 그렇다면 등록 기관에서 유형을 검증해야 하는 이유는 무엇입니까? 등록 기관에서 "번호" 필드를 선택할 때 어떤 테이블에서 번호가 선택되는지 상황을 고려해 봅시다. 모두의 정답! 따라서 쿼리가 빠르게 작동하려면 EXPRESS 함수를 사용하여 명시적 유형을 지정해야 합니다.

사용 예:

Query.Text = "CHOOSE | EXPRESS(Nomenclature.Comment AS String(300)) AS Comment, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum | FROM | Reference.Nomenclature AS Nomenclature";

6. ISNULL 함수(대체 맞춤법 IS NULL) - 필드가 NULL 유형이면 함수의 두 번째 매개변수로 대체됩니다.

통사론: ISNULL(<Поле>, <ПодставляемоеЗначение>)

사용 예:

또한 항상 NULL 유형을 어떤 값으로 대체하는 것이 바람직하다는 점에 유의하십시오. NULL과의 비교는 NULL과 NULL을 비교하더라도 항상 FALSE로 평가됩니다. 대부분의 경우 NULL 값은 테이블 조인(내부를 제외한 모든 유형의 조인)의 결과로 형성됩니다.

Query.Text = //전체 항목과 잔액을 선택합니다. //일부 항목에 잔액이 없으면 필드가 //NULL이며 값 0으로 대체됩니다. "SELECT | No.Reference, | ISNULL(GoodsInWarehouseRemains.InStockRemaining, 0) HOW Remainder | FROM | Directory.Nomenclature AS Nom | LEFT JOIN 누적 레지스터.

7. 표현 기능- 요청 필드의 표현을 얻을 수 있습니다.

통사론: 성능(<НаименованиеПоля>)

사용 예:

Query.Text = "SELECT | REPRESENTATION(Free RemainsRemains.Nomenclature) AS 명명법, | REPRESENTATION(FreeRemainsRemains.Warehouse) AS 창고, | FreeRemainsRemains.AvailableRemains | FROM | Accumulation Register.FreeRemains.Remains AS FreeRemainsRemains";

쿼리 언어 1의 구조

위에서 우리는 당신과 논의했습니다 쿼리 언어 기능 1s, 이제 고려해야 할 때입니다 쿼리 언어 1의 구조, 덜 중요하고 유용합니다. 시작하겠습니다.

1. 건설 LINK-를 나타냅니다 논리 연산자참조 유형 검사. 특정 유형에 대한 복합 유형의 필드를 테스트할 때 가장 일반적으로 발생합니다. 통사론: 링크<Имя таблицы>

사용 예:

Query.Text = //등록자의 값 유형이 문서 수령인 경우 //쿼리는 "Incoming Goods"를 반환하고, 그렇지 않으면 "Sale of Goods" "SELECT | SELECT | WHEN Remains.Registrar LINK Document.Incoming GoodsServices | THEN ""수입" | ELSE "비용" | END AS 이동 유형 | FROM | 누적 레지스터. 창고에 남아 있는 상품 AS 남아 있음 ";

2. BETWEEN 건설- 이 연산자는 값이 지정된 범위 내에 있는지 확인합니다.

통사론: 사이<Выражение>그리고<Выражение>

사용 예:

Query.Text = //코드가 1에서 100 사이인 모든 명명법 가져오기 "SELECT | Nomenclature.Reference |FROM | Catalog.Nomenclature AS Nomenclature |WHERE | Nomenclature.Code BETWEEN 1 AND 100" ;

3. HIERARCHY 구성 B 및 B- 값이 전달된 목록에 있는지 확인합니다(배열, 값 테이블 등이 목록으로 전달될 수 있음). IN HIERARCHY 연산자를 사용하면 계층 구조를 볼 수 있습니다(PlanAccounts 사용 예).

통사론: 안에(<СписокЗначений>), 계층에서(<СписокЗначений>)

사용 예:

Query.Text = // 계정의 모든 하위 계정 선택 "SELECT | 자체 지원. AS 계정 연결 | FROM | 계정 계획. 자체 지원 AS 자체 지원 | WHERE | 자체 지원. 참조 IN HIERARCHY VALUE( 회계 일정. 자활. 상품)";

4. 시공 라이크- 이 함수를 사용하면 문자열을 문자열 패턴과 비교할 수 있습니다.

통사론: 좋다"<ТекстШаблона>"

라인 템플릿 옵션:

% - 임의의 수의 문자를 포함하는 시퀀스.

하나의 임의의 문자.

[...] - 단일 문자 또는 대괄호 안에 나열된 일련의 문자. 열거에는 범위의 끝을 포함하여 범위 내의 모든 문자를 의미하는 a-z와 같은 범위가 포함될 수 있습니다.

[^...] - 단일 문자 또는 대괄호 안에 나열된 일련의 문자(부정 기호 뒤에 나열된 문자는 제외).

사용 예:

Query.Text = //루트 TABUR을 포함하고 //소문자 또는 대문자로 시작하는 전체 명명법 찾기 t "SELECT | Nomenclature.Reference |FROM | Directory.Nomenclature AS Nomenclature |WHERE | Goods.Name LIKE ""[Т ]abur%""" ;

5. 디자인 허용- 이 문을 사용하면 호출자가 읽을 수 있는 권한이 있는 데이터베이스의 레코드만 선택할 수 있습니다. 이러한 권한은 레코드 수준(RLS)에서 구성됩니다.

통사론: ALLOWED는 키워드 SELECT 뒤에 작성됩니다.

사용 예:

Query.Text = "SELECT ALLOWED | Counterparties.Reference | FROM | Directory.Counterparties AS Counterparty";

6. 다양한 건설- 반복되는 레코드가 없는 레코드를 선택할 수 있습니다.

통사론: DIFFERENT는 키워드 SELECT 뒤에 작성됩니다.

사용 예:

Request.Text = //독자가 "SELECT DIFFERENT | Counterparties.Name |FROM | Directory.Counterparties AS Counterparties" 권한이 있는 레코드를 선택합니다.

DIFFERENT 구성은 ALLOWED 연산자 및 기타 연산자와 함께 사용할 수도 있습니다.

사용 예:

Query.Text = //독자가 "SELECT ALLOWED DIFFERENT | Contractors.Name | FROM | Directory.Contractors AS Contractors" 권한을 가진 다양한 레코드를 선택합니다.

7. 시공 우선- 쿼리 결과에서 매개변수에 지정된 레코드 수를 선택합니다.

구문: FIRST<число>

사용 예:

Query.Text = //"SELECT THE FIRST 4 | GTD Numbers.Reference |FROM | Catalog.GTE Numbers AS GTD Numbers" 디렉토리에서 처음 4개의 GTD 번호를 선택합니다.

8. 변화를 위한 디자인- 테이블을 잠글 수 있으며 트랜잭션에서만 작동합니다(자동 잠금에만 관련됨).

통사론: 변화를 위해<НаименованиеТаблицы>

사용 예:

Query.Text = "SELECT | FreeRemainsRemains.Nomenclature, | FreeRemainsRemains.Warehouse, | FreeRemainsRemains.AvailableRemains | FROM | 축적 Register.FreeRemains.Remains AS FreeRemainsRemains |FOR CHANGE |

9. 구조 ORDER BY- 특정 필드를 기준으로 데이터를 정렬합니다. 필드가 링크인 경우 플래그를 설정할 때 자동 주문링크 표시에 따라 정렬됩니다. 플래그가 꺼져 있으면 링크는 메모리에서 링크 주소의 선임 순서에 따라 정렬됩니다.

통사론: 정렬 기준<НаименованиеПоля>자동 주문

사용 예:

Query.Text = "SELECT | FreeRemainsRemains.Nomenclature AS Nomenclature, | FreeRemainsRemains.Warehouse AS Warehouse, | FreeRemainsRemains.In StockRemaining | FROM | Accumulation Register.FreeRemains.Remains AS FreeRemainsRemains | | ORDER BY | Nomenclature |AUTOORD CLEANSING";

10. 디자인 GROUP BY- 특정 필드별로 쿼리 문자열을 그룹화하는 데 사용됩니다. 숫자 필드는 집계 함수와 함께 사용해야 합니다.

통사론: 그룹화 기준<НаименованиеПоля1>, .... , <НаименованиеПоляN>

사용 예:

Query.Text = "선택 | ItemsInWarehouse.Nomenclature AS 명명법, | ItemsInWarehouse.Warehouse, | SUM(ItemsInWarehouse.InStock) AS InStock | FROM |

11. 디자인 해빙- WHERE 구성과 유사하게 데이터 선택 조건에 집계 함수를 적용할 수 있습니다.

통사론: 갖는<агрегатная функция с условием>

사용 예:

Query.Text = //InStock 필드가 3보다 큰 그룹화된 레코드를 선택합니다. |GROUP BY | 창고에 있는 상품.명칭, | 창고에 있는 상품.창고 | | HAVING | AMOUNT(창고에 있는 상품.재고 있음) > 3" ;

12. INDEX BY 구문- 쿼리 필드를 인덱싱하는 데 사용됩니다. 인덱싱된 쿼리는 완료하는 데 시간이 더 오래 걸리지만 인덱싱된 필드에서 검색 속도가 빨라집니다. 가상 테이블에서만 사용할 수 있습니다.

통사론: 인덱스 기준<Поле1, ... , ПолеN>

사용 예:

Query.Text = "SELECT | Tz.OS 이름, | Tz.폴더 번호, | Tz.CodeOS, | Tz.Term, | Tz.Type | PUT DataTz | FROM | &Tz HOW Tz | | INDEX BY | Tz.OS 이름 , | Tz .CodeOS";

13. 건설 WHERE- 선택 항목의 모든 필드에 조건을 부과할 수 있습니다. 조건을 충족하는 레코드만 결과에 포함됩니다.

통사론: 어디<Условие1 ОператорЛогСоединения УсловиеN>

사용 예:

Query.Text = //CompensationRemainder가 있는 모든 레코드 선택<>0 및 // AmountFor Calc.CompBalance > 100 "SELECT | 보상 RPO 잔액.상대방, | 보상 RPO 잔액.자식, | 보상 RPO 잔액. 보상 잔액, | 보상 RPO 잔액. AmountFor Calc.Comp 잔액 | PLACE DataTz | FROM | 누적 등록 보상 RP 잔액 AS 보상 R 잔액 | WHERE | 보상 RPO 잔액 보상 잔액<>0 | 보상 RPO 잔고. CalcComp 잔여 금액 > 100" ;

14. 설계 결과 ... 일반 사항- 총계를 계산하는 데 사용되며 디자인은 총계가 계산될 필드를 지정하고 집계 함수요약 필드에 적용됩니다. TOTALS 구성 다음에 각 필드에 대한 합계를 사용하면 데이터가 그룹화됩니다. 선택적 구문 GENERAL이 있으며 이를 사용하면 추가 그룹화도 제공됩니다. 아래에서 쿼리 결과의 예를 볼 수 있습니다.

통사론: 결과<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>에 의해<ОБЩИЕ> <Поле1, ... , ПолеN>

사용 예:

Query.Text = "선택 | 합의.상대방 계약.계약 유형 AS 계약 유형, | 합의.국가 계약 AS 계약, | 합의.상대방, | 합의.상호 합의 금액잔액 AS 잔액 | FROM | | 소프트웨어 | 일반, | 계약 유형";

요청을 실행하는 동안 형성된 그룹은 그림에서 원으로 표시되며, 맨 위는 GENERAL 섹션을 나타내고 두 번째는 ContractContractorTypeContract 필드를 나타냅니다.



관련 기사: