패키지 1 요청 8.3. 인형 일괄 요청. Run() 및 RunBatch() 메서드

1C GOODWILL 회사 블로그

1C Enterprise 플랫폼을 사용하면 한 번에 여러 쿼리를 순차적으로 실행할 수 있습니다. 1C에서는 이를 요청 패키지라고 합니다. 하나의 패키지 내에서 각 요청은 세미콜론으로 구분됩니다.

패키지에서 쿼리를 단계별로 실행하려면 일반적으로 임시 테이블을 먼저 만든 다음 필터, 조인, 조인 등 공유 조건을 형성합니다. 덕분에 최종 결과가 달성되었습니다. 일괄 처리의 쿼리 결과로 얻은 임시 테이블은 일괄 처리가 끝날 때까지 또는 임시 테이블을 삭제하는 쿼리가 실행될 때까지 계속 존재합니다.

또한 일괄 쿼리와 임시 테이블을 사용하면 이 코드 전체 세그먼트의 가독성이 크게 향상됩니다. 중첩된 쿼리도 포함하는 복잡한 쿼리는 이해하기 매우 어려울 수 있습니다. 그러나 길고 복잡한 쿼리를 여러 개로 나누고 임시 테이블을 사용한다면 인식이 향상될 뿐만 아니라 대부분의 경우 성능이 향상됩니다.

1C의 일괄 쿼리를 선호하는 또 다른 중요한 세부 사항은 중첩 쿼리와 달리 일괄 처리에서 각 쿼리의 결과를 별도로 얻을 수 있다는 것입니다.

1C 언어로 요청 패키지를 만드는 예

쿼리 패키지를 만드는 방법의 예를 보려면 명확성을 위해 쿼리 콘솔에서 호출할 쿼리 디자이너를 사용하겠습니다. 따라서 패키지 실행 결과를 바로 확인할 수 있습니다.

간단한 일괄 요청을 만들어 보겠습니다. 요청 텍스트를 즉시 콘솔에 붙여넣은 다음 생성자를 열고 요청 패키지가 어떻게 구성되는지 확인하는 것이 좋습니다. 콘솔에 새 요청을 추가하고 다음 텍스트를 붙여넣습니다.

자립.부모님,

자립형 코드,

자체 지원되는 빠른 선택 코드,

이름,

자립형.유형,

자립형.

자급자족.

계정과목표 자체 지원 AS 자체 지원

////////////////////////////////////////////////////////////////////////////////

자체 지원 유형Subconto.Line Number AS Line Number,

Subconto.ViewSubconto AS TypeSubconto의 자체 지원 유형,

자체 지원TypesSubconto.TypeSubconto.Name AS 이름,

자체 지원TypesSubconto.TypeSubconto.ValueType ASValueType,

Self-supportingTypesSubconto.OnlyTurnover AS OnlyTurnover,

자체 지원TypesSubconto.Summary AS 요약

계정과목표 자체 지원 유형. 하위 계정 유형.

주문 방법

자체 지원 유형Subconto.NumberLines

나에게는 다음과 같습니다.

이제 쿼리 디자이너로 이동해 보겠습니다. 여기서는 "패키지 요청" 탭에 관심이 있습니다.

보시다시피 두 가지 요청으로 구성된 패키지가 있습니다. 그 중 하나를 두 번 클릭하면 편집을 진행할 수 있습니다.

“확인” 버튼을 클릭하고 일괄 요청 결과를 확인해 보세요.

"계정" 매개변수를 설정해 보겠습니다. 계정과목표에서 원하는 계정을 선택할 수 있습니다. 이미 짐작하셨겠지만 이 요청 패키지는 계정 속성을 수신해야 합니다. “실행”을 클릭하고 결과를 확인하세요.

Run() 및 RunBatch() 메서드

모든 요청을 일괄적으로 실행하고 마지막 요청의 결과를 반환하는 Execute() 메서드 외에도 1C에는 ExecuteBatch() 메서드가 있습니다. 일괄 처리의 각 요청에 대한 샘플 배열을 반환합니다. 위의 예에서는 이 메서드가 실행됩니다.

ArrayResults = Query.ExecuteBatch();

Selection1 = ArrayResults.Select();

If Select1.Next() 그러면

//선택 항목 1에 대한 작업

endIf;

SelectionViewsSubconto = ArrayResults.Select();

1C 8.3 및 8.2에서 일괄 요청 작업 게시물은 1C GOODWILL 회사 블로그에 처음 등장했습니다.

1C 8.3 및 8.2의 쿼리 디자이너는 강력한 개발 도구입니다. 특별한 시각적 환경을 사용하여 요청 텍스트를 작성할 수 있습니다. 따라서 1C 요청을 생성하기 위해 내장된 쿼리 언어를 알 필요는 없으며 디자이너의 간단하고 직관적인 인터페이스를 탐색하는 것으로 충분합니다.

쿼리 빌더는 탭 집합으로, 각 탭은 쿼리의 해당 부분을 담당합니다. 따라서 탭을 작성하세요. 테이블 및 필드 1C 쿼리가 특정 문제를 해결하는 데 필요한 이러한 테이블의 데이터와 필드를 수신할 테이블을 선택합니다. 벽돌에 채우기 자귀우리는 필요한 데이터만 선택하기 위해 선택한 테이블에 조건을 부과합니다.

공식 1C 8 웹사이트 v8.1c.ru의 쿼리 디자이너에 대한 설명

테이블 및 필드 ; ; ; ; ; 중첩된 쿼리(개발 중)

프로그램 코드에서 1s 8 쿼리 디자이너를 호출하려면 다음을 수행해야 합니다.

  • 새 요청 만들기
요청 = 새 요청;
  • 빈 요청 텍스트 줄 설정
요청.텍스트 = "";
  • 따옴표 사이에 마우스 커서를 놓고 마우스 오른쪽 버튼을 누릅니다. 열리는 컨텍스트 메뉴에서 항목을 선택하십시오. 쿼리 생성자그리고 대답 새로운 요청 생성에 관한 질문입니다. 요청 텍스트가 이미 기록되어 있는 경우 해당 텍스트 안의 아무 곳이나 클릭하고 생성자를 호출해야 합니다. ;

복잡성이 증가하는 작은 예를 사용하여 쿼리 빌더의 모든 기본 탭을 살펴보겠습니다. 이 접근 방식을 사용하면 초보 1C 프로그래머가 생성자와 모든 기능을 보다 효과적으로 연구할 수 있습니다. 예를 들어 다음 구성을 사용하겠습니다. 회계 3.0.

레슨 #1. 쿼리 빌더는 가장 간단한 사용 사례입니다.

작업: 명명법 디렉터리에 요청을 작성하고 디렉터리의 전체 명명법을 선택합니다.

새 탭: 테이블과 필드.

새로운 메커니즘: "요청" 버튼을 사용하여 요청 텍스트를 보고 편집합니다.

요청 생성을 시작하려면 새 요청을 생성하고 생성자를 호출해 보겠습니다(위의 몇 단락에서 설명한 대로). 그 후 디자이너 창이 탭에 열립니다 테이블과 필드.

1과의 이론적인 부분

꼬리표 테이블 및 필드세 가지 섹션으로 구성됩니다.

데이터 베이스. 이 섹션에서는 쿼리를 작성하는 데 사용할 수 있는 모든 데이터베이스 테이블을 제공합니다.

테이블. 이 섹션에서는 이 쿼리에 필요한 테이블을 선택합니다. 그런 다음 섹션에서 이동하려면 데이터 베이스다음을 수행해야 합니다.

  • 또는 테이블을 두 번 클릭합니다.
  • 또는 “>” 또는 “>>” 버튼을 사용하십시오.

섹션 위 테이블여러 개의 버튼이 있습니다. 이들 중 대부분은 다음 강의에서 더 자세히 논의됩니다. 지금은 간단한 설명만 하겠습니다.

  • 하위 쿼리 만들기(빨간색 선). 새로운 하위 쿼리를 생성하도록 설계되었습니다.
  • 임시 테이블 설명 만들기(노란색 선). 이 쿼리 외부에 있는 임시 테이블의 이름을 지정할 수 있으며, 값 테이블을 쿼리에 전달하는 데에도 사용할 수 있습니다.
  • 현재 요소 변경(녹색 선). 선택한 하위 쿼리, 임시 테이블 또는 임시 테이블 설명으로 이동할 수 있습니다.
  • 현재 항목 제거(파란색 선). 선택한 테이블에서 선택한 테이블을 제거합니다.
  • 테이블 교체(파란색 선). 선택한 테이블을 바꾸기 위한 대화 상자를 엽니다. 목록에서 현재 선택한 테이블에서 위치 지정이 발생하므로 잘못된 레지스터 가상 테이블을 선택한 경우 유용합니다.
  • 가상 테이블 옵션(보라색 선). 가상 레지스터 테이블의 매개변수를 엽니다.

전지. 이 섹션에서는 이전 섹션의 테이블 필드를 선택합니다. 이러한 필드는 쿼리 결과로 얻은 테이블 또는 선택 항목의 열이 됩니다. 선택한 테이블에서 특정 경우에 필요한 정보만 얻으려면 주로 필요합니다. 섹션에서 이동하려면 필요한 테이블:

  • 또는 해당 필드를 두 번 클릭합니다.
  • 또는 “>” 또는 “>>” 버튼을 사용하십시오.
  • 선택한 테이블 및 쿼리 언어 함수의 필드에서 임의의 표현식을 사용하여 새 필드를 직접 추가할 수도 있습니다.

섹션 위 전지여러 개의 버튼이 있습니다. 임의의 표현식을 사용하여 필드를 생성하는 방법은 다음 단원에서 자세히 설명합니다. 지금은 간단한 설명만 하겠습니다.

  • 추가하다(녹색 선). 자유 표현 편집기를 사용하여 새 필드를 추가하도록 설계되었습니다.
  • 현재 요소 변경(빨간색 선). 편집기를 사용하여 선택한 필드를 변경할 수 있습니다.
  • 현재 삭제(파란색 선). 목록에서 선택한 필드를 제거합니다.

1과의 실제 부분

우리는 이 단원에서 제공되는 작업을 완료하는 데 필요한 이론을 다루었습니다. 어떻게 들리는지 상기시켜 드리겠습니다. 명명법 디렉터리에 요청을 작성하고 디렉터리의 전체 명명법을 선택하세요.

항목에 대한 요청 생성을 시작해 보겠습니다.

  • 새 요청을 생성하고 단원 시작 부분에서 지정한 방법을 사용하여 생성자를 열어 보겠습니다.
  • 섹션에서 데이터 베이스, 스레드를 열어 보겠습니다. 디렉토리그러면 우리는 그곳에서 가이드를 찾을 거예요 명명법;
  • 해당 항목을 선택하고 “>” 버튼을 이용하여 해당 섹션으로 이동하세요. 테이블;
  • 섹션에서 테이블"+" 아이콘을 사용하여 명명법 디렉토리를 엽니다.
  • 열리는 필드 목록에서 해당 필드를 찾습니다. 링크섹션으로 이동하세요. 전지">" 버튼을 사용하여
  • 아이템 요청이 준비되었습니다. 디자이너 창 하단의 “확인” 버튼을 클릭하세요.

일괄 쿼리는 임시 테이블의 기능을 논리적으로 보완하고 쿼리 작업 시 더 많은 옵션을 제공합니다.

일괄 쿼리에서는 실제로 임시 테이블을 사용하여 상호 연결되고 관련되지 않은 여러 쿼리를 설명할 수 있습니다(가능하지만 이유가 명확하지 않습니까?). 결과적으로 모든 쿼리를 순차적으로 실행하고 결과로 각 쿼리의 결과가 포함된 배열이나 마지막 쿼리의 결과를 받을 수 있습니다. 쿼리 결과가 포함된 배열을 얻으려면 다음 메서드를 사용하세요. 일괄 실행()요청 객체, 그리고 마지막 요청의 결과를 얻기 위해 쿼리 실행().

요청 텍스트에서 패키지 요청은 ";" 기호로 구분됩니다. (세미콜론). 일괄 요청당 가상 테이블에 대한 네임스페이스는 하나만 있습니다. 임시 테이블 관리자를 사용할 필요는 없지만 한 일괄 쿼리에서 다른 일괄 쿼리로 임시 테이블을 전달하려는 경우 가능합니다.
코드 1C v 8.x 처리 절차(실패, 처리 모드)

요청 = 새 요청;
요청.텍스트 = "
|선택
| 명칭, SUM(수량) AS 수량
|DocTCH 배치
|발신
|어디
| 링크 = 링크(&L)
|명칭별 그룹
|;
|다양한 선택
| 명명법
|장소 제품 목록
|발신
| 문서.소모품.상품
|어디
| 링크 = 링크(&L)
|;
|선택
| 문서 명칭,
| Doc.Quantity AS Doc_Quantity,
| ISNULL(Reg.QuantityRemaining,0) AS Reg_Quantity
|발신
| DocTCH AS Doc
| 왼쪽 연결
| RegisterAccumulations.Remains of Goods.Remains(,
| 명칭 B(다양한 선택
| 명명법
| 에서
| 제품 목록 AS 제품 목록)) AS Reg
| 에 의해
| Doc.Nomenclature = 등록.명칭";

Select.Next() 루프 동안
//마이너스 잔액 확인
//레지스터를 통과
엔드사이클;
절차 종료

실제로 쿼리 개체의 정의를 제거하고 임시 테이블 관리자를 사용하여 쿼리 텍스트를 결합했습니다(텍스트 사이의 ";" 구분 기호 참고). 결과적으로 쿼리 텍스트의 가독성이 높아졌습니다(쿼리 빌더를 사용할 때 쿼리의 가독성이 크게 향상되었습니다).

변수에 대한 쿼리를 실행한 후 배열결과우리는 3가지 요소를 갖게 될 것입니다. 처음 두 개에는 임시 테이블 DocTCH 및 ListProducts에 배치된 레코드 수를 나타내는 숫자가 포함되고, 세 번째에는 Nomenclature, Doc_Quantity 및 Reg_Quantity 필드가 있는 선택 항목이 포함됩니다.

변수로 쿼리 결과샘플만 들어갈 거예요.

일괄 요청에 대해서는 이것이 전부입니다. 쿼리 작성 관점과 복잡한 쿼리 읽기 관점 모두에서 매우 편리한 메커니즘입니다.

사이트에서 가져온 정보

일괄 요청은 요청이 너무 복잡하여 공식화하고 효과적으로 작동할 수 없을 때 필요합니다. 일괄 요청이 무엇인지 이해하기 위해 다음 다이어그램을 사용할 수 있습니다.

그런데 일괄 쿼리 옵션은 솔루션 8.1.11.67.4에서만 사용할 수 있게 되었기 때문에 이것이 실제로 어떻게 작동하는지 아직 알지 못할 수도 있습니다. 간단히 말하면, 일련의 쿼리를 생성하고 ";" 기호를 통해 연결하면 충분합니다. 예를 들어:

결과는 마지막 것을 통해 반환됩니다. 그런데 일괄 쿼리는 모든 일반 콘솔에서 지원됩니다. 쿼리 콘솔을 통한 실행 예:

일괄 요청 없이는 왜 할 수 없나요?

중간 결과를 임시 테이블에 넣고 향후 일부 쿼리에 사용할 계획입니다. 임시 테이블 기능이 없으면 이러한 중간 쿼리를 다시 반복해야 합니다. 일괄 쿼리의 작동 방식과 사용 방법을 모르는 경우 중첩 테이블의 데이터를 사용하여 여러 쿼리를 차례로 실행할 수 있습니다. 이전에도 그랬지만 이제는 이에 시간을 낭비할 필요가 없습니다. 우리는 효과적이고 간단한 방법을 가지고 있기 때문에 1C의 일괄 요청. 편리합니다. 더 이상 임시 테이블이 어디에 있어야 하는지 기억할 필요가 없습니다. 최소화하고 속도를 높이려면 액세스 제어 시스템의 기능을 사용하십시오. 시스템이 선택하고, 정렬하고, 배치합니다. 이것이 바로 대중적이고 신뢰할 수 있는 솔루션 개발자들이 이 혁신을 포지셔닝하는 방식입니다.

1C 개발자의 일괄 요청 발표
  • 프로그램 전체의 상당한 최적화
  • 알려진 솔루션의 확장성을 높입니다.
  • 배치 배치 기능 도입으로 인한 효율적인 성능
  • 간단하고 간단한 시스템 관리;
  • 다른 솔루션과 통합할 수 있는 최고의 기회입니다.
8.1.11의 쿼리 기능은 무엇입니까?

임시 테이블 작업을 크게 향상시키는 쿼리입니다. 일괄 쿼리의 기능은 일괄 쿼리가 해당 작업을 완전히 완료하거나 삭제 명령에 도달할 때까지 일괄 처리에서 특정 쿼리에 대해 생성된 모든 테이블이 작동함을 의미합니다. 이제 가장 최근 요청의 결과(Execute() 명령)와 ExecutePackage() 메서드를 사용하는 전체 결과 배열을 모두 받을 수 있습니다.

일괄 요청을 적절하게 생성하기 위한 알고리즘

이제 우리는 일괄 요청이 하나의 일반 요청으로 설명되는 여러 요청이라는 것을 알고 있습니다. 그것들은 차례로 실행되어야 합니다. 포함된 쿼리의 전체 체인을 실행하는 동안의 중간 결과는 임시 테이블에 배치될 수 있습니다. 이 구조를 사용하면 모든 요청이 이 중간 데이터에 액세스할 수 있습니다. 임시 테이블에 있는 쿼리의 결과를 반복적으로 사용할 수 있다는 것이 중요합니다. 이 경우 더 이상 동일한 것을 여러 번 등록할 필요가 없습니다.

방법의 단점

일괄 쿼리 사용의 장점에 대해 말하면 명백한 단점도 언급할 가치가 있습니다. 사실 이러한 작업 알고리즘을 사용하면 시스템은 전체 데이터베이스를 저장하는 테이블을 지속적으로 생성해야 합니다. 각 테이블을 생성하고 나중에 삭제하는 데 시간이 걸립니다. 예는 다음과 같습니다.

결과적으로 다음과 같은 테이블이 생겼습니다.

이제 일괄 요청을 사용합니다. 이를 위해서는 세미콜론이 필요하다는 점을 기억하세요. 다음을 얻습니다.

세 번째 요청은 처음 두 요청의 결과를 결합한 것입니다. 무슨 일이 일어났는지 살펴보겠습니다.

이제 다음과 같이 아름다움을 추가하고 세 번째 요청의 텍스트를 약간 변경해 보겠습니다.

이제 우리는 이것을 얻었습니다:

남은 것은 열을 명명법과 결합하고 빈 셀에 0을 넣는 것입니다.



질문이 있으신가요?

오타 신고

편집자에게 전송될 텍스트: