가상 테이블의 조건 1c. 쿼리 디자이너의 "쿼리" 단추

실제 문제에서 샘플을 구성할 때 대부분의 경우 특정 기준에 따라 데이터 선택이 구성됩니다.

실제 테이블에서 선택하는 경우에는 어려움이 발생하지 않습니다. 데이터는 아주 사소하게 처리됩니다.

쿼리의 소스가 가상 테이블인 경우 상황은 좀 더 복잡해집니다.


쿼리 언어를 사용하면 WHERE 절을 사용하거나 가상 테이블 매개변수를 사용하는 두 가지 방법으로 가상 테이블의 선택 항목에 조건을 적용할 수 있습니다. 두 가지 방법 모두 동일한 결과를 가져오지만(일부 특정 경우 제외) 그럼에도 불구하고 둘은 동일하지 않습니다.

우리는 가상 테이블이 실제로 데이터베이스에 없기 때문에 가상 테이블이라고 부른다는 것을 이미 알고 있습니다. 요청이 이루어지는 순간에만 형성됩니다. 그럼에도 불구하고 우리(즉, 쿼리를 작성하는 사람)에게는 가상 테이블을 실제 테이블로 간주하는 것이 편리합니다. 우리가 컴파일한 쿼리가 여전히 가상 테이블에 액세스하면 1C Enterprise 8 시스템에서는 어떤 일이 발생합니까?

첫 번째 단계에서 시스템은 가상 테이블을 구축합니다. 두 번째 단계에서는 WHERE 절에 지정된 조건을 충족하는 결과 테이블에서 레코드가 선택됩니다.
최종 샘플에는 가상 테이블(따라서 데이터베이스)의 모든 레코드가 포함되지 않고 주어진 조건을 충족하는 레코드만 포함된다는 점을 분명히 알 수 있습니다. 그리고 나머지 기록은 결과에서 제외됩니다.

따라서 시스템은 쓸모없는 작업이 아니라 두 배의 쓸모없는 작업을 수행하게 됩니다! 먼저, 불필요한 데이터(그림에서 "데이터 영역 A 및 B"로 표시됨)를 기반으로 가상 테이블을 구축하는 데 리소스가 소비된 다음 최종 결과에서 이 데이터를 필터링하는 작업이 수행됩니다.

가상 테이블을 구축하는 단계에서 불필요한 데이터 사용을 즉시 중단할 수 있나요? 가능하다는 것이 밝혀졌습니다. 이것이 바로 가상 테이블 매개변수가 설계된 목적입니다:

가상 테이블을 매개변수화함으로써 쿼리에서 처리할 데이터의 양을 즉시 제한합니다.

가상 테이블 매개변수 "추가 방법"의 값의 차이점은 무엇입니까?
추가 방법이 "이동"으로 설정된 경우 이동이 있었던 기간만 반환됩니다. "이동 및 기간 경계"가 설정되면 위의 이동에 2개의 레코드가 추가됩니다. 즉, VT 매개변수에 지정된 기간의 시작과 끝의 이동입니다. 이 2개의 레코드에 대한 "등록자" 필드는 비어 있습니다.

사이트에서 가져온 정보

1C 8의 쿼리 언어는 잘 알려진 "구조적 프로그래밍 언어"(더 자주 SQL이라고 함)의 단순화된 유사체입니다. 그러나 1C에서는 데이터를 읽는 데에만 사용되며 객체 데이터 모델은 데이터를 변경하는 데 사용됩니다.

또 다른 흥미로운 차이점은 러시아어 구문입니다. 실제로 영어 구성을 사용할 수 있습니다.

요청 예시:

선택하다
은행.이름,
Banks.Corr계정
에서
Directory.Banks HOW 은행

이 요청을 통해 우리는 데이터베이스에 존재하는 모든 은행의 이름과 거래 계좌에 대한 정보를 볼 수 있습니다.

쿼리 언어는 가장 간단하고 효과적인 방법정보를 얻는 중입니다. 위의 예에서 볼 수 있듯이 쿼리 언어에서는 메타데이터 이름(구성을 구성하는 시스템 개체 목록, 즉 디렉터리, 문서, 레지스터 등)을 사용해야 합니다.

쿼리 언어 구성에 대한 설명

쿼리 구조

데이터를 얻으려면 "SELECT" 및 "FROM" 구성을 사용하는 것으로 충분합니다. 가장 간단한 요청은 다음과 같습니다.

SELECT * FROM 디렉터리.명칭

여기서 "*"는 테이블의 모든 필드 선택을 의미하고 Directories.Nomenclature는 데이터베이스의 테이블 이름을 의미합니다.

좀 더 복잡하고 일반적인 예를 살펴보겠습니다.

선택하다
<ИмяПоля1>어떻게<ПредставлениеПоля1>,
합집합(<ИмяПоля2>) 어떻게<ПредставлениеПоля2>
에서
<ИмяТаблицы1>어떻게<ПредставлениеТаблицы1>
<ТипСоединения>화합물<ИмяТаблицы2>어떻게<ПредставлениеТаблицы2>
에 의해<УсловиеСоединениеТаблиц>

어디
<УсловиеОтбораДанных>

그룹 기준
<ИмяПоля1>

정렬 기준
<ИмяПоля1>

결과
<ИмяПоля2>
에 의해
<ИмяПоля1>

안에 이 요청"TableName1" 및 "TableName" 테이블에서 "FieldName1" 및 "FieldName1" 필드의 데이터를 선택하고 "HOW" 연산자를 사용하여 필드에 동의어를 할당한 다음 특정 조건 "TableConnectionCondition"을 사용하여 연결합니다.

수신된 데이터 중 “WHERE” “데이터 선택 조건”의 조건을 만족하는 데이터만 선택하고 “Field Name1” 필드별로 요청을 그룹화하고 “Field Name2”를 합산하여 해당 필드에 대한 합계를 생성합니다. "필드 이름1"과 마지막 필드 "필드 이름2"입니다.

마지막 단계는 ORDER BY 구문을 사용하여 요청을 정렬하는 것입니다.

일반 디자인

1C 8.2 쿼리 언어의 일반적인 구조를 살펴 보겠습니다.

첫 번째N

사용하여 이 연산자의 n개의 첫 번째 레코드를 얻을 수 있습니다. 레코드의 순서는 쿼리의 순서에 따라 결정됩니다.

처음 100개 선택
은행.이름,
은행. 코드 AS BIC
에서
Directory.Banks HOW 은행
정렬 기준
은행.이름

요청은 알파벳순으로 정렬된 "Banks" 디렉토리의 처음 100개 항목을 수신합니다.

허용된

이 디자인은 메커니즘 작업과 관련이 있습니다. 메커니즘의 핵심은 테이블 전체가 아닌 데이터베이스 테이블의 특정 레코드에 대한 사용자의 읽기(및 기타 작업)를 제한하는 것입니다.

사용자가 액세스할 수 없는 레코드를 읽기 위해 쿼리를 사용하려고 하면 오류 메시지가 표시됩니다. 이를 방지하려면 "ALLOWED" 구성을 사용해야 합니다. 즉, 요청은 허용된 레코드만 읽습니다.

허용됨 선택
추가 정보 저장소 링크
에서
디렉토리.추가 정보 저장소

다양한

"DIFFERENT"를 사용하면 중복된 줄이 1C 쿼리 결과에 입력되는 것을 방지할 수 있습니다. 중복은 모든 요청 필드가 일치함을 의미합니다.

처음 100개 선택
은행.이름,
은행. 코드 AS BIC
에서
Directory.Banks HOW 은행

빈 테이블

이 구성은 쿼리를 결합하는 데 거의 사용되지 않습니다. 조인 시 테이블 중 하나에 빈 중첩 테이블을 지정해야 할 수도 있습니다. 여기에는 "EmptyTable" 연산자가 적합합니다.

1C 8 도움말의 예:

SELECT Link.번호, EMPTY TABLE.(번호, 품목, 수량) AS 구성
FROM 문서.비용 청구서
모든 것을 결합하세요
SELECT 링크.번호, 내용.(라인번호, 제품, 수량)
FROM 문서.송장 문서.송장.구성.*

ISNULL

많은 실수를 방지할 수 있는 매우 유용한 기능입니다. YesNULL()을 사용하면 NULL 값을 원하는 값으로 바꿀 수 있습니다. 조인된 테이블에 값이 있는지 확인하는 데 매우 자주 사용됩니다. 예를 들면 다음과 같습니다.

선택하다
명명법 참조 링크,
IsNULL(남은 항목.QuantityRemaining,0) AS QuantityRemaining
에서


다른 방법으로 사용할 수 있습니다. 예를 들어, 각 행에 대해 어느 테이블에 값이 존재하는지 알 수 없는 경우:

ISNULL(InvoiceReceived.Date, InvoiceIssued.Date)

HOW는 테이블이나 필드에 이름(동의어)을 할당할 수 있는 연산자입니다. 위에서 사용 예를 보았습니다.

이러한 구성은 매우 유사합니다. 이를 통해 원하는 값의 문자열 표현을 얻을 수 있습니다. 유일한 차이점은 REPRESENTATION이 모든 값을 다음으로 변환한다는 것입니다. 문자열 유형및 REPRESENTATIONLINKS는 참조용일 뿐입니다. REFERENCE REPRESENTATION은 물론 참조 데이터 필드가 선택에 사용되도록 계획되지 않은 한 최적화를 위한 데이터 구성 시스템 쿼리에 사용하는 것이 좋습니다.

선택하다
View(Link), //string, 예를 들어 "2015년 10월 10일자 사전보고서 123호"
View(DeletionMark) AS DeleteMarkText, //문자열, "예" 또는 "아니요"
ViewReferences(DeletionMark) AS DeleteMarkBoolean //부울, True 또는 False
에서
문서.사전보고

표현하다

Express를 사용하면 필드 값을 다음으로 변환할 수 있습니다. 올바른 유형데이터. 값을 기본 유형이나 참조 유형으로 변환할 수 있습니다.

참조 유형에 대한 Express는 시스템 성능을 최적화하는 데 자주 사용되는 복잡한 유형의 필드에서 요청된 데이터 유형을 제한하는 데 사용됩니다. 예:

EXPRESS(TableCost.Subconto1 AS Directory.Cost Items).ActivityForTaxAccountingCosts 유형

기본 유형의 경우 이 함수는 길이가 무제한인 필드(이러한 필드는 비교할 수 없음)의 문자 수를 제한하는 데 자주 사용됩니다. 오류를 방지하려면 " 비교 작업의 매개변수가 잘못되었습니다. 필드를 비교할 수 없습니다.
무제한 길이 및 호환되지 않는 유형의 필드
"의 경우 해당 필드를 다음과 같이 표현해야 합니다.

EXPRESS(댓글 AS라인(150))

차이 날짜

1C에서 267개의 비디오 강의를 무료로 받으세요:

1C 요청에서 IS NULL을 사용하는 예:

다음에서 선택하세요
참조
왼쪽 연결 RegisterAccumulations.ProductsInWarehouses.Remaining AS 남은 제품
소프트웨어 NomenclatureRef.Link = Sold GoodsCommitteesRemains.Nomenclature
남은 상품이 없는 곳. QuantityRemaining IS NULL

쿼리의 데이터 유형은 TYPE() 및 VALUETYPE() 함수를 사용하거나 다음을 사용하여 결정할 수 있습니다. 논리 연산자링크. 두 기능은 비슷합니다.

사전 정의된 값

1C 쿼리 언어의 쿼리에 전달된 매개변수를 사용하는 것 외에도 사전 정의된 값 또는 . 예를 들어 이체, 사전 정의된 디렉토리, 계정과목표 등을 위해 "Value()" 구성이 사용됩니다.

사용 예:

WHERE Nomenclature.Type of Nomenclature = 값(디렉토리.Types of Nomenclature.Product)

WHERE 상대방.연락처 정보 유형 = 값(열거.연락처 정보 유형.전화)

WHERE 계정 잔액.회계 계정 = 값(계정 차트.Profit.ProfitsLoss)

사이

연결에는 4가지 유형이 있습니다. 왼쪽, 오른쪽, 전체, 내부.

왼쪽 및 오른쪽 연결

조인은 특정 조건에 따라 두 테이블을 연결하는 데 사용됩니다. 언제 기능 왼쪽 조인첫 번째 지정된 테이블 전체를 가져와 두 번째 테이블을 조건부로 바인딩하는 것입니다. 조건으로 바인딩할 수 없는 두 번째 테이블의 필드는 해당 값으로 채워집니다. 없는.

예를 들어:

거래 당사자의 전체 테이블을 반환하고 "상대방.이름 = 은행.이름" 조건이 충족되는 위치에만 "은행" 필드를 채웁니다. 조건이 충족되지 않으면 은행 필드가 다음으로 설정됩니다. 없는.

1C 언어로 RIGHT JOIN완전 비슷하다 왼쪽 연결, 한 가지 차이점을 제외하고는 연결 권리"기본" 테이블은 첫 번째가 아닌 두 번째 테이블입니다.

완전한 연결

완전한 연결두 테이블의 모든 레코드를 표시하고 조건에 따라 연결할 수 있는 레코드만 연결한다는 점에서 왼쪽과 오른쪽과 다릅니다.

예를 들어:

에서

완전한 연결
Directory.Banks HOW 은행

에 의해

쿼리 언어는 레코드 조인 조건이 충족되는 경우에만 두 테이블을 완전히 반환합니다. 왼쪽/오른쪽 조인과 달리 NULL이 두 필드에 나타날 수 있습니다.

내부 조인

내부 조인주어진 조건에 따라 연결될 수 있는 레코드만 표시한다는 점에서 전체 레코드와 다릅니다.

예를 들어:

에서
디렉터리. 상대방 AS 클라이언트

내부 조인
Directory.Banks HOW 은행

에 의해
클라이언트.이름 = 은행.이름

이 쿼리는 은행과 상대방의 이름이 동일한 행만 반환합니다.

협회

JOIN 및 JOIN ALL 구문은 두 결과를 하나로 결합합니다. 저것들. 두 가지를 수행한 결과는 하나의 공통된 결과로 "병합"됩니다.

즉, 시스템은 임시 테이블에 대해서만 일반 시스템과 동일하게 작동합니다.

INDEX BY 사용 방법

그러나 고려해야 할 점이 하나 있습니다. 임시 테이블에 인덱스를 구축하는 것도 완료하는 데 시간이 걸립니다. 따라서 임시 테이블에 1~2개 이상의 레코드가 있을 것이 확실하게 알려진 경우에만 “ ” 구성을 사용하는 것이 좋습니다. 그렇지 않으면 효과가 반대가 될 수 있습니다. 인덱스된 필드의 성능은 인덱스를 작성하는 데 걸리는 시간을 보상하지 않습니다.

선택하다
환율 최신 단면 통화 AS 통화,
환율 최신 단면.
PUT 환율
에서
정보 등록.통화 환율.마지막 조각(&기간,) AS 환율마지막 조각
인덱스 기준
통화
;
선택하다
가격명칭.명칭,
가격명칭. 가격,
가격명칭.통화,
환율.비율
에서
정보 등록.명목 가격.마지막 슬라이스(&기간,
명명법 B (&Nomenclature) AND PriceType = &PriceType) AS PriceNomenclature
LEFT JOIN 환율 AS 환율
소프트웨어 가격Nomenclatures.Currency = 환율.Currency

그룹화

1C 쿼리 언어를 사용하면 특수 기능을 사용할 수 있습니다 집계 함수쿼리 결과를 그룹화할 때. 중복을 "제거"하기 위해 집계 함수 없이 그룹화를 사용할 수도 있습니다.

다음과 같은 기능이 있습니다:

금액, 수량, 개수, 최대, 최소, 평균.

예시 #1:

선택하다
상품 및 서비스 상품 판매.
SUM(Sales of GoodsServicesGoods.Quantity) AS 수량,
SUM(Sales of GoodsServicesGoods.Amount) AS 금액
에서

그룹 기준
상품 및 서비스 상품 판매.

쿼리는 상품이 포함된 모든 라인을 수신하고 수량별로 요약하고 품목별로 금액을 요약합니다.

예 2

선택하다
은행.코드,
수량(다른 은행.링크) AS 중복 수
에서
Directory.Banks HOW 은행
그룹 기준
은행.코드

이 예에서는 "Banks" 디렉터리에 있는 BIC 목록을 표시하고 각 BIC에 존재하는 중복 항목 수를 보여줍니다.

결과

결과 - 시스템에서 데이터를 얻는 방법 계층적 구조. 집계 함수는 그룹화와 마찬가지로 요약 필드에도 사용할 수 있습니다.

실제로 결과를 사용하는 가장 인기 있는 방법 중 하나는 상품의 일괄 상각입니다.

선택하다




에서
문서 상품 및 서비스 판매 상품 상품 및 서비스 판매 방법 상품
정렬 기준

결과
합계(수량),
SUM(합계)
에 의해
명명법

쿼리 결과는 다음과 같은 계층 구조가 됩니다.

일반 결과

모든 "총계"에 대한 총계를 구하려면 "GENERAL" 연산자를 사용하세요.

선택하다
상품 및 서비스 상품 판매 명칭 AS 명칭,
상품 및 서비스 상품 판매 AS 문서 링크,
상품 및 서비스 상품 판매 수량 AS 수량,
상품 및 서비스 상품 판매 금액 AS 금액
에서
문서 상품 및 서비스 판매 상품 상품 및 서비스 판매 방법 상품
정렬 기준
상품 및 서비스 상품 판매 링크 날짜
결과
합계(수량),
SUM(합계)
에 의해
흔하다,
명명법

요청을 실행한 결과 다음과 같은 결과를 얻습니다.

1단계 그룹화는 필요한 모든 필드를 집계하는 것입니다.

정리

ORDER BY 연산자는 쿼리 결과를 정렬하는 데 사용됩니다.

기본 유형(문자열, 숫자, 부울) 정렬은 일반적인 규칙을 따릅니다. 참조 유형 필드의 경우 코드나 참조 표현이 아닌 링크의 내부 표현(고유 식별자)을 기준으로 정렬이 발생합니다.

선택하다

에서
디렉토리.명칭 AS 명명법
정렬 기준
이름

요청은 명명법 디렉터리의 이름 목록을 알파벳순으로 정렬하여 표시합니다.

자동주문

정렬하지 않은 쿼리의 결과는 혼란스럽게 표시된 행 집합입니다. 1C 플랫폼 개발자는 동일한 쿼리를 실행할 때 행이 동일한 순서로 출력된다는 것을 보장하지 않습니다.

테이블 레코드를 일정한 순서로 표시해야 하는 경우 자동 순서 구성을 사용해야 합니다.

선택하다
명명법.이름 AS 이름
에서
디렉토리.명칭 AS 명명법
자동 주문

가상 테이블

1C의 가상 테이블은 다른 유사한 구문에서는 찾을 수 없는 1C 쿼리 언어의 고유한 기능입니다. 가상 테이블 – 빠른 방법레지스터에서 프로필 정보를 얻습니다.

각 레지스터 유형에는 레지스터 설정에 따라 다를 수 있는 자체 가상 테이블 세트가 있습니다.

  • 첫 번째 컷;
  • 후자의 컷.
  • 나머지;
  • 혁명;
  • 잔액과 매출액.
  • subconto의 움직임;
  • 혁명;
  • 속도 Dt Kt;
  • 나머지;
  • 잔액 및 매출액
  • 하위 계속.
  • 베이스;
  • 그래프 데이터;
  • 실제 유효기간.

솔루션 개발자의 경우 데이터는 하나의 (가상) 테이블에서 가져오지만 실제로 1C 플랫폼은 여러 테이블에서 가져와 필요한 형식으로 변환합니다.

선택하다
창고에 남아있는 제품과 회전율.
제품InWarehousesRemainingAndTurnover.QuantityInitialRemaining,
제품창고유지및회전율.수량회전율,
GoodsInWarehousesRemainsAndTurnover.QuantityIncoming,
GoodsInWarehousesRemainsAndTurnover.Quantity소비,
제품창고남음및회전율.최종남은수량
에서
등록집적.창고에 있는 물품.잔고 및 회전율 AS 물품창고에 남아 있고 회전율

이 쿼리를 사용하면 많은 양의 데이터를 빠르게 검색할 수 있습니다.

가상 테이블 옵션

가상 테이블 작업에서 매우 중요한 측면은 매개변수 사용입니다. 가상 테이블 매개변수는 선택 및 구성을 위한 특수 매개변수입니다.

이러한 테이블의 경우 "WHERE" 구성에서 선택을 사용하는 것은 잘못된 것으로 간주됩니다. 쿼리가 최적이 아닐 뿐만 아니라 잘못된 데이터를 받을 수도 있습니다.

이러한 매개변수를 사용하는 예:

누적 등록, 창고의 상품, 잔액 및 회전율(& 기간 시작, 기간 종료, 월, 이동 및 경계, 명명법 = & 필수 명명법)

가상 테이블 알고리즘

예를 들어, 가장 많이 사용되는 "Remains" 유형의 가상 테이블은 균형과 이동이라는 두 가지 물리적 테이블의 데이터를 저장합니다.

가상 테이블을 사용할 때 시스템은 다음 조작을 수행합니다.

  1. 총계 표에는 날짜와 측정값 측면에서 가장 가까운 계산 값이 표시됩니다.
  2. 이동 테이블의 금액을 총계 테이블의 금액에 "추가"합니다.


이러한 간단한 조치는 시스템 전체의 성능을 크게 향상시킬 수 있습니다.

쿼리 빌더 사용

쿼리 빌더– 데이터베이스 쿼리 개발을 크게 촉진하는 1C Enterprise 시스템에 내장된 도구입니다.

쿼리 빌더는 매우 간단하고 직관적인 인터페이스를 가지고 있습니다. 그럼에도 불구하고 쿼리 생성자를 사용하는 방법을 좀 더 자세히 살펴보겠습니다.

쿼리 텍스트 생성자는 프로그램 코드의 원하는 위치에 있는 상황에 맞는 메뉴(마우스 오른쪽 버튼)에서 실행됩니다.

1C 요청 생성자에 대한 설명

디자이너의 각 탭을 좀 더 자세히 살펴보겠습니다. 다른 토론 주제인 Builder 탭은 예외입니다.

테이블 및 필드 탭

이 탭에서는 보고서에 표시해야 하는 데이터 소스와 필드를 지정합니다. 본질적으로 여기에는 SELECT.. FROM 구성이 설명되어 있습니다.

소스는 물리적 데이터베이스 테이블, 가상 레지스터 테이블, 임시 테이블, 중첩 쿼리 등이 될 수 있습니다.

가상 테이블의 컨텍스트 메뉴에서 가상 테이블 매개변수를 설정할 수 있습니다.

연결 탭

탭은 여러 테이블의 연결을 설명하는 데 사용되며 CONNECTION이라는 단어로 구성을 만듭니다.

그룹화 탭

이 탭에서는 테이블 결과의 필수 필드를 그룹화하고 요약할 수 있습니다. GROUP BY, SUM, MINIMUM, AVERAGE, MAXIMUM, QUANTITY, NUMBER OF DIFFERENT 구성의 사용을 설명합니다.

조건 탭

WHERE 구성 후 요청 텍스트에 포함되는 모든 항목, 즉 수신된 데이터에 적용되는 모든 조건을 담당합니다.

고급 탭

추가적으로매우 중요한 모든 종류의 매개변수로 가득 차 있습니다. 각각의 속성을 살펴보겠습니다.

그룹화 레코드 선택:

  • 첫 번째 N– 쿼리에 N개의 레코드만 반환하는 매개변수(FIRST 연산자)
  • 중복 없음– 수신된 레코드의 고유성을 보장합니다(DIFFERENT 연산자).
  • 허용된– 시스템에서 고려할 수 있는 레코드만 선택할 수 있습니다(허용된 구성).

그룹화 요청 유형데이터 검색, 임시 테이블 생성, 임시 테이블 삭제 등 요청 유형을 결정합니다.

아래에는 깃발이 있습니다 나중에 수정하기 위해 수신된 데이터를 잠급니다.. 이를 통해 데이터를 읽는 순간부터 변경될 때까지 데이터의 안전을 보장하는 데이터 잠금 설정 기능을 활성화할 수 있습니다. 자동 모드인터록, 디자인 변경).

조인/별칭 탭

쿼리 디자이너의 이 탭에서는 다양한 테이블과 별칭(HOW 구문)을 조인하는 기능을 설정할 수 있습니다. 테이블은 왼쪽에 표시되어 있습니다. 테이블 반대편에 플래그를 설정하면 UNITE 구성이 사용되고, 그렇지 않으면 UNITE ALL(두 방법 간의 차이점)이 사용됩니다. 오른쪽에는 서로 다른 테이블에 있는 필드의 대응이 표시되며, 대응이 지정되지 않은 경우 쿼리는 NULL을 반환합니다.

주문 탭

값이 정렬되는 순서(ORDER BY) - 내림차순(DESC) 또는 오름차순(ASC)을 지정합니다.

흥미로운 깃발도 있습니다 - 자동주문(요청에서 - 자동 주문). 기본적으로 1C 시스템은 데이터를 "혼란스러운"순서로 표시합니다. 이 플래그를 설정하면 시스템은 내부 데이터를 기준으로 데이터를 정렬합니다.

쿼리 배치 탭

쿼리 디자이너 탭에서 새 쿼리를 생성하고 탐색으로 사용할 수도 있습니다. 요청 텍스트에서 패킷은 ";"(쉼표) 기호로 구분됩니다.

쿼리 디자이너의 "쿼리" 단추

요청 디자이너의 왼쪽 하단에는 언제든지 요청 텍스트를 볼 수 있는 요청 버튼이 있습니다.

이 창에서 요청을 조정하고 실행할 수 있습니다.


쿼리 콘솔 사용

쿼리 콘솔은 복잡한 쿼리를 디버깅하고 신속하게 정보를 얻을 수 있는 간단하고 편리한 방법입니다. 이번 글에서는 Query Console 사용법을 설명하고, Query Console을 다운로드할 수 있는 링크를 제공하겠습니다.

이 도구를 자세히 살펴보겠습니다.

1C 쿼리 콘솔 다운로드

우선, 쿼리 콘솔 작업을 시작하려면 어딘가에서 다운로드해야 합니다. 치료는 일반적으로 두 가지 유형으로 나뉩니다. 제어된 양식일반(또는 8.1 및 8.2/8.3이라고도 함).

저는 이 두 가지 유형을 하나의 트리트먼트로 결합해 보았습니다. 원하는 모드작업을 수행하면 원하는 양식이 열립니다(관리 모드에서는 콘솔이 Thick 모드에서만 작동함).

1C 쿼리 콘솔에 대한 설명

기본 처리 패널에 대한 설명과 함께 쿼리 콘솔을 살펴보겠습니다.

쿼리 콘솔 헤더에서 마지막 쿼리의 실행 시간을 밀리초 단위의 정확도로 확인할 수 있으며, 이를 통해 성능 측면에서 다양한 디자인을 비교할 수 있습니다.

명령 모음의 첫 번째 버튼 그룹은 현재 쿼리를 외부 파일에 저장하는 역할을 합니다. 이는 매우 편리하며 언제든지 복잡한 요청 작성으로 돌아갈 수 있습니다. 또는 예를 들어 특정 디자인의 일반적인 예 목록을 저장합니다.

왼쪽의 '요청' 필드에서 새 요청을 생성하고 이를 트리 구조로 저장할 수 있습니다. 두 번째 버튼 그룹은 요청 목록을 관리하는 역할을 합니다. 이를 사용하여 요청을 생성, 복사, 삭제, 이동할 수 있습니다.

  • 실행하다요구– 간단한 실행 및 결과
  • 패키지 실행– 일괄 쿼리에서 모든 중간 쿼리를 볼 수 있습니다.
  • 임시 테이블 보기– 임시 쿼리가 테이블에 반환하는 결과를 볼 수 있습니다.

요청 매개변수:

요청에 대한 현재 매개변수를 설정할 수 있습니다.

쿼리 매개변수 창에서 다음이 흥미롭습니다.

  • 단추 요청에서 가져오기개발자의 편의를 위해 요청의 모든 매개변수를 자동으로 찾습니다.
  • 깃발 모든 요청에 ​​대한 공통 매개변수– 설치 시 일반 요청 목록에서 요청 간에 이동할 때 처리 과정에서 매개변수가 지워지지 않습니다.

값 목록으로 매개변수 설정매우 간단합니다. 매개변수 값을 선택할 때 값 지우기 버튼(십자)을 클릭하면 시스템에서 데이터 유형을 선택하라는 메시지를 표시하며 여기서 "값 목록"을 선택해야 합니다.

또한 상단 패널에는 쿼리 콘솔 설정을 불러오는 버튼이 있습니다.

여기서 자동 저장 쿼리 및 쿼리 실행 매개변수에 대한 매개변수를 지정할 수 있습니다.

요청 텍스트가 콘솔 요청 필드에 입력됩니다. 이는 단순히 쿼리 테스트를 입력하거나 특수 도구인 쿼리 디자이너를 호출하여 수행할 수 있습니다.

1C 8 쿼리 디자이너는 입력 필드를 클릭하면 상황에 맞는 메뉴(마우스 오른쪽 버튼)에서 호출됩니다.

이 메뉴에도 이런 것들이 있어요 유용한 기능, 요청에 줄 바꿈("|")을 지우거나 추가하거나 다음과 같은 편리한 형식으로 요청 코드를 가져오는 등의 작업이 가능합니다.

요청 = 새 요청;
요청.텍스트 = ”
|선택
| 통화.링크
|발신
| 디렉토리.통화 AS 통화”;
RequestResult = 요청.실행();

쿼리 콘솔의 아래쪽 필드에는 쿼리 결과 필드가 표시되며, 이것이 바로 이 처리가 생성된 이유입니다.



또한 쿼리 콘솔은 목록 외에도 합계가 포함된 쿼리의 경우 트리 형태로 데이터를 표시할 수 있습니다.

쿼리 최적화

1C Enterprise 8.3의 생산성을 높이는 데 가장 중요한 포인트 중 하나는 다음과 같습니다. 최적화요청. 이 점은 다음과 같은 경우에도 매우 중요합니다. 인증을 통과. 아래에서 우리는 전형적인 이유쿼리 및 최적화 방법의 최적 작동이 아닙니다.

WHERE 구문을 사용하여 가상 테이블에서 선택

VT 매개변수를 통해서만 가상 테이블 세부사항에 필터를 적용해야 합니다. 어떤 상황에서도 가상 테이블 선택을 위해 WHERE 구성을 사용해서는 안 됩니다. 이는 최적화 관점에서 볼 때 심각한 실수입니다. 실제로 WHERE를 사용하여 선택하는 경우 시스템은 모든 레코드를 수신한 다음 필요한 레코드만 선택합니다.

오른쪽:

선택하다

에서
누적 등록 조직 참가자와의 상호 정산 잔액 (
,
조직 = 조직(&Organization)
AND 개인 = &개인) 조직 잔액 참가자와의 상호 정산 방법

잘못된:

선택하다
조직 잔액 참가자와의 상호 정산 금액 잔액
에서
누적등록 기관참여자와의 상호정산 잔액(,) HOW 기관참여자와의 상호정산 잔액
어디
조직 잔액 참가자와의 상호 정산 조직 = & 조직
AND 조직 잔액 참여자와의 상호 정산. 개인 = &개인

점을 사용하여 복합 유형의 필드 값 가져오기

시스템은 쿼리에서 복합형 데이터를 도트를 통해 수신할 때 복합형 필드에 가능한 테이블 수만큼 정확하게 Left 조인으로 연결한다.

예를 들어, 등록 기록 필드(registrar)에 액세스하는 최적화는 매우 바람직하지 않습니다. 등록자는 복합 데이터 유형을 가지며, 그 중에는 레지스터에 데이터를 쓸 수 있는 가능한 모든 문서 유형이 있습니다.

잘못된:

선택하다
레코드 세트.녹음기.날짜,
RecordSet.Quantity
에서
RegisterAccumulations.ProductsOrganizations AS SetRecords

즉, 실제로 이러한 쿼리는 하나의 테이블이 아닌 22개의 데이터베이스 테이블에 액세스합니다(이 레지스터에는 21개의 등록자 유형이 있음).

오른쪽:

선택하다
선택
WHEN 제품조직.등록기관 LINK 문서.제품 및 서비스 판매
THEN EXPRESS(제품 조직.AS 문서 등록.상품 서비스 판매).날짜
언제 상품조직.등록기관 링크 문서.상품서비스 수령
THEN EXPRESS(GoodsOrg.Registrar AS Document.Receipt of GoodsServices).날짜
날짜로 종료,
제품조직.수량
에서
RegisterAccumulations.ProductsOrganizations AS 제품조직

또는 두 번째 옵션은 이러한 정보를 세부 정보에 추가하는 것입니다(예: 우리의 경우 날짜 추가).

오른쪽:

선택하다
제품조직.날짜,
제품조직.수량
에서
누적 등록부 조직 물품 AS 조직 물품

조인 조건의 하위 쿼리

최적화를 위해 조인 조건에서 하위 쿼리를 사용하는 것은 허용되지 않습니다. 이로 인해 쿼리 속도가 크게 느려집니다. 이러한 경우에는 VT를 사용하는 것이 좋습니다. 연결하려면 이전에 연결 필드별로 인덱싱한 메타데이터 및 VT 개체만 사용해야 합니다.

잘못된:

선택하다 …

왼쪽 조인(
RegisterInformation.Limits에서 선택
어디 …
그룹 기준...
) 에 의해 …

오른쪽:

선택하다 …
PUT 한도
FROM 정보 레지스터.한계
어디 …
그룹 기준...
색인 기준...;

선택하다 …
문서에서 상품 및 서비스 판매
LEFT JOIN 제한
에 의해 …;

가상 테이블로 레코드 결합

가상 테이블을 다른 테이블에 연결할 때 시스템이 최적으로 작동하지 않는 상황이 있습니다. 이 경우 쿼리 성능을 최적화하려면 임시 테이블 쿼리에서 조인된 필드를 인덱싱하는 것을 잊지 말고 임시 테이블에 가상 테이블을 배치해 보세요. 이는 VT가 여러 개의 물리적 DBMS 테이블에 포함되는 경우가 많기 때문에 이를 선택하기 위해 서브 쿼리를 컴파일하게 되는데, 문제는 앞선 지점과 유사한 것으로 나타났다.

색인화되지 않은 필드를 기반으로 선택 항목 사용

쿼리를 작성할 때 가장 흔히 저지르는 실수 중 하나는 인덱싱되지 않은 필드에 조건을 사용하는 것입니다. 이는 모순됩니다. 쿼리 최적화 규칙.쿼리에 인덱싱할 수 없는 필드에 대한 선택이 포함된 경우 DBMS는 쿼리를 최적으로 실행할 수 없습니다. 임시 테이블을 사용하는 경우 연결 필드도 인덱싱해야 합니다.

각 조건에 적합한 인덱스가 있어야 합니다. 적합한 인덱스는 다음 요구 사항을 충족하는 인덱스입니다.

  1. 인덱스에는 조건에 나열된 모든 필드가 포함됩니다.
  2. 이러한 필드는 인덱스의 맨 처음에 있습니다.
  3. 이러한 선택은 연속적입니다. 즉, 쿼리 조건에 포함되지 않은 값은 둘 사이에 "고정"되지 않습니다.

DBMS가 올바른 인덱스를 선택하지 않으면 전체 테이블이 스캔됩니다. 이는 성능에 매우 부정적인 영향을 미치고 전체 레코드 세트가 장기간 차단될 수 있습니다.

조건에 논리적 OR 사용

그게 전부입니다. 이 기사에서는 모든 1C 전문가가 알아야 할 쿼리 최적화의 기본 측면을 다루었습니다.

쿼리 개발 및 최적화에 대한 매우 유용한 무료 동영상 강좌입니다. 나는 강력히 추천한다초보자와 그 이상을 위한!

내 출판물이 도움이 되었다면 플러스를 주는 것을 잊지 마세요 :-)

컬렉션의 모든 작업에 대한 루브리케이터는 다음과 같습니다.(각 작업에 대한 포럼 스레드 링크가 포함된 페이지)
http://chistov.spb.ru/forum/16-969-1

자, 이제 준비 과정에서 작성한 개발 내용과 메모입니다.
위에서 언급한 두 가지를 가능한 한 적게 반복하려고 노력하겠습니다. 마지막출판물.

그럼 시작해 보겠습니다.


원격으로 응시하는 경우 시험이 끝날 때 데스크탑에 두 개의 개체가 있어야 합니다.

1. 최종 하역 정보 베이스(DT 파일)
2. 설명문

다른 것, 중간 복사본 등이 없어야 합니다.

설명 메모를 꼭 작성하세요!
모호하게 공식화 된 작업의 경우 정확히 그러한 솔루션 옵션을 선택했음을 기록하십시오.
또한 코드의 핵심 부분에는 광신적인 태도 없이 간단한 설명을 남기는 것이 좋지만, 심사관이 질문이 있을 수 있는 부분에는 작성하는 것이 좋습니다.

그러나 시험 전에 읽어야 할 지침에서 이에 대해 설명하게 될 것입니다.
미리 알아두시면 좋을 것 같아요)


쿼리에 앰퍼샌드 문자를 사용합니다.

때로는 레이아웃을 앞뒤로 전환하는 것보다 추가 키보드로 입력하는 것이 더 빠르므로 시간이 절약됩니다.
& = Alt+38

*************************************************************************************************
쿼리에 TimePoint() 사용

누적 및 회계 등록에 대한 쿼리에서는 문서 날짜를 가상 테이블(기간) 매개변수로 사용하는 것이 아니라 다음과 같이 코드에 정의된 Moment 매개변수를 사용해야 합니다.

순간 = ?(통과 모드 = 문서 게시 모드. 작동, 정의되지 않음, 순간());

*************************************************************************************************
등록부별 문서 이동을 생성하는 경우 전기 처리 절차 초기에 현재 문서의 등록부 이동을 삭제해야 합니다.

코드는 다음과 같습니다

Movement.RegisterName.Write = 참; Movements.RegisterName.Clear();

프로세스 중에 이 기록부의 기록을 분석해야 할 수도 있습니다.
따라서 현재 레코드(문서가 변경되기 전의 이전 레코드)를 분석할 때 확실히 샘플에 포함되지 않도록 위의 두 줄에 한 줄을 더 추가할 수 있습니다.

Movement.RegisterName.Write();

또는 기록을 분석할 때 현재 문서의 시점을 포함하지 않는 경계를 명시적으로 표시합니다.

그러나 나는 어디에서나 다음 세 줄의 구성을 간단히 표시했습니다.

Movement.RegisterName.Write = 참; Movements.RegisterName.Clear(); Movement.RegisterName.Write();

*************************************************************************************************
데이터를 차단하는 방법에는 두 가지가 있으며, 그 중 선택은 사용된 방법(이전 또는 새 방법)에 따라 다릅니다.

1) 정기적인 통제된 차단, 기존의 문서 처리 방식(Data Blocking 객체)

잔액을 먼저 확인한 후 상쇄할지 여부를 설정합니다.
움직임을 형성하기 위해 레지스터에서 일부 정보가 필요한 경우.


예:

문서 - 수량, 레지스터 - 수량 및 금액 (비용)
따라서 우리는 문서에서 상품의 수량을 알고 있습니다. 얼마나 많은 금액을 상쇄했는지는 알 수 있지만 비용은 아닙니다.
우리는 그것을 레지스터에서만 찾을 수 있지만, 잔액을 받는 순간과 움직임을 기록하는 순간 사이에 누구도 레지스터를 변경하지 못하도록 하기 위해 잔액을 읽기 전에도 레지스터를 잠가야 합니다.
따라서 이 경우에는 Data Locking 개체가 사용됩니다. 그리고 그것을 생성할 때 불필요한 잠금이 없고 다른 사용자가 다른 잠금을 판매할 수 있도록 레지스터를 차단하는 차원을 표시하는 것이 더 정확합니다(예: 우리의 경우 문서에 지정된 항목으로만). 안건.


1. Data Lock 개체를 사용하여 잠금 설정
2. 나머지 부분을 읽어보세요
3. 상각 가능성을 확인합니다.
4. 상품 상각 등의 움직임을 만듭니다.
5. 전표 전기 후 차단이 자동으로 제거됩니다. 차단은 전기 트랜잭션의 일부로 유효하며 시스템에 의해 자동으로 제거됩니다. 즉, 특별히 개체의 잠금을 해제할 필요가 없습니다.

2) 문서 처리를 위한 새로운 방법론 (LockForChange 속성 사용 = True)

움직임을 형성하기 위해 레지스터의 정보가 필요하지 않은 경우에 사용되며, 기록 후 레지스터의 잔액을 보고 음수가 있는지 확인하면 상각 시 음수가 되었는지 확인할 수 있습니다. . 이 경우, 너무 많은 금액이 상각되었음을 이해하고 상각 작업을 취소하겠습니다.

예:
제품 판매 작업을 고려해 봅시다.
문서 - 수량, 등록부 - 수량만
따라서 우리는 문서를 통해 상품 수량을 알 수 있습니다.
문서에 명시된 수량으로 동작을 형성하고 기록합니다. 다음으로 장부를 읽고, 잔액을 살펴보고, 마이너스 잔액이 있는지 분석합니다. 있는 경우 오류를 표시하고 Refusal = True로 설정합니다.

즉, 순서는 다음과 같습니다.
1. 레지스터를 통해 이동하려면 BlockForChange 속성을 True로 설정합니다.
2. 움직임을 만듭니다 - 상품을 상각합니다
3. 움직임을 기록하세요
4. 기록부를 읽고 마이너스 잔액이 없는지 확인하십시오. 있다면 초과분을 기록하고 그렇지 않다면 모든 것이 정상입니다.

따라서 이 경우 레지스터를 차단해야 하는 차원을 나타낼 필요가 없습니다.
움직임을 기록하고 움직임을 형성하고 기록하기 전에 BlockForChange 속성을 True로 설정하기만 하면 됩니다.
시스템 자체는 우리가 기록한 내용을 분석하여 필요한 측정에 따라 기록 시 레지스터를 차단합니다.
완료되면 차단이 제거됩니다.

이 옵션(두 번째)은 더 간단하며 "문서 처리를 위한 새로운 방법론"이라고 하며 1C는 가능하면 사용을 권장하고 첫 번째 옵션을 사용하면 포인트를 차감하지만 어떤 경우에는 단순히 적용할 수 없으며 첫 번째 옵션은 다음과 같습니다. 데이터 잠금 개체가 사용됩니다(위의 예 참조).

또한 선택한 방법에 관계없이 작업하기 전에 무브먼트를 세척해야 합니다(이전 조언 참조).

*************************************************************************************************
데이터 차단(위 설명 중 차단 방법 1번)

데이터를 읽고 이 데이터를 기반으로 이동하는 경우 제어된 잠금이 필요합니다.
관리되는 잠금 코드를 얻는 가장 빠른 방법은 "Data Locking"을 입력하고 Syntax Assistant를 호출한 후 거기에서 예제 코드를 복사하는 것입니다. 그런 다음 레지스터 이름과 차원으로 변경하기만 하면 됩니다.

다음과 같이 보입니다.

잠금 = NewDataLock; 잠금 요소 = Locking.Add("Accumulation Register.GoodsInWarehouses"); LockElement.Mode = DataLockMode.Exclusive; BlockingElement.DataSource = PM; Locking Element.UseFromDataSource("명명법", "명명법"); 잠금.잠금();

*************************************************************************************************
문서의 표 부분을 간단히 "TC"라고 부르는 것이 좋습니다.

99%의 문서에는 표 형식 부분이 하나만 있습니다. 이렇게 통일된 이름 표 부분다음과 같은 이유로 많은 시간을 절약하는 데 도움이 됩니다.
1) 매우 짧음 - 빠르게 작성
2) 모든 문서에 동일하므로 코드를 작성할 때 이름을 기억할 필요가 없습니다.

*************************************************************************************************
기술 사양을 가져오거나 업로드하기 전에 쿼리 결과가 비어 있는지 확인해야 합니다.

일반적으로 모든 작업에서 샘플링을 사용했습니다.

샘플링은 TK와 달리 데이터를 읽을 때만 "날카롭게" 수행되므로 성능 측면에서 시스템에 더 적합합니다.

그러나 어떤 경우에도 Select() 메서드를 사용하기 전에 쿼리 결과가 비어 있는지 확인하는 것이 더 낫습니다. 이렇게 하면 시스템의 부하가 더욱 줄어듭니다.

결과 = 쿼리.실행(); Result.Empty()가 아니면 Select = Result.Select(TravelQueryResult.ByGrouping); ... EndIf;

요청에서 하나의 값만 가져와야 하는 경우
(예를 들어, 올해 설정된 회계 정책에 따른 상각 방법만):

결과 = 쿼리.실행(); Result.Empty()가 아니면 Select = Result.Select(); 선택.다음(); 원가 상각 방법 = 샘플.원가 상각 방법; endIf;

*************************************************************************************************
회계 업무에 대한 "작업" 문서화

회계 업무를 위해서는 운영 문서를 작성해야 합니다.

게시를 완전히 비활성화하고("게시 = 거부" 속성에서) 회계 기록부에서 이동을 수행함을 표시한 다음 해당 이동을 양식으로 드래그합니다.

*************************************************************************************************
신속한 문서 처리:

반드시 포함됨:
운영 및 회계 분야. 문서 회계가 활성화되어야 합니다("작업" 문서 제외, 아래 참조).

반드시 껐다:
계산 작업에서는 급여 문서에는 적합하지 않습니다.

"작업" 문서의 경우 게시가 완전히 비활성화되어야 합니다(문서 속성 "게시 = 금지"에서).
그는 쓰기를 할 때 레지스터에 직접 데이터를 쓰기만 하기 때문입니다.

*************************************************************************************************
"지정된 명칭 또는 지정되지 않은 경우" 형식의 요청 조건

쿼리에서 다음 작업이 발생합니다. 예를 들어 지정된 명명법이 있는 문서를 선택해야 하거나 명명법이 지정되지 않은 경우 모든 문서를 선택해야 합니다.
요청 자체의 다음 조건으로 해결됩니다.

명명법 = 명명법 OR & 명명법 = 값(Directory.Nomenclature.EmptyLink)

하지만 이 조건을 변환하는 것이 더 최적이고 정확할 것입니다(yukon에게 감사드립니다).


Request.Text = Request.Text + "WHERE 명명법 = & 명명법";

endIf;

8.3.5의 쿼리 개체 모델의 출현으로 조건을 보다 안전하게 추가할 수 있게 되었습니다.

If ValueFilled(명칭) Then
Query1.Selection.Add("항목 = 명명법");
Request.SetParameter("명명법", 명명법);
endIf;

*************************************************************************************************
쿼리에서 테이블 조인:

총 레코드 수는 조인된 테이블의 필드 표시 여부에 따라 달라지지 않으며 구성된 관계에만 따라 달라집니다.
즉, 첨부된 테이블의 필드가 표시되지 않을 수 있습니다.

조건 없이 테이블을 첨부하려면 조건 탭에 "TRUE" 조건을 작성하면 됩니다.
이 경우 테이블은 정확하게 조인됩니다.

*************************************************************************************************
특성 유형 계획(PVC) 사용:

1. 객체의 특성을 설명하는 메커니즘으로 사용합니다.

1.1. 우리는 PVC를 만듭니다. 이는 특성 유형(예: 색상, 크기, 최대 속도 등)입니다. 설정에서 가능한 모든 유형의 특성 값을 선택하고 필요한 경우 1.2 지점에서 개체를 생성하고 설정에도 표시합니다.

1.2. PVC의 추가 값에 대해 추가 특성 값(또는 간단히 특성 값)이라는 하위 디렉터리를 만듭니다.
기존 디렉터리에 없는 경우 특성을 저장합니다. 필요한 모든 특성이 기존 디렉터리에 있거나 이러한 값이 기본 데이터 유형으로 표시될 수 있는 경우 생성하지 않을 수 있습니다. PVC 설정에서 이 디렉토리가 추가 목적으로 사용될 것임을 나타냅니다. 특성 값.

1.3. 실제로 세 가지 개체를 연결하는 정보 레지스터를 만듭니다.
- 특성 메커니즘을 연결하는 객체
- 유형특성 (PVC 유형)
- 특성값(유형 - 특성, PVC 생성 이후 시스템에 등장한 새로운 유형임)
특성 값이 취할 수 있는 모든 가능한 데이터 유형을 설명합니다.
정보 레지스터에서 우리는 특성 유형이 특성 값(선택 매개변수에 대한 링크)의 소유자일 뿐만 아니라 특성 유형의 특성 값에 대한 유형 연결임을 나타냅니다.

또 다른 특징은 생성된 각 특성 유형에 대해 이 특성의 값을 설명하는 데 가능한 모든 유형이 필요하지 않은 경우 특성 값의 유형을 지정할 수 있다는 것입니다.

2. PVC를 사용하여 회계 등록부에 대한 하위 연속 메커니즘 생성 .

2.1. 우리는 PVC TypesSubconto를 만듭니다.

2.2. 하위 디렉터리 ValuesSubConto를 만듭니다(특성과 마찬가지로 다른 디렉터리에 하위 디렉터리 값이 없으면 하위 디렉터리 값이 포함됩니다).

2.3. 의사소통은 계정과목표를 사용하여 이루어집니다.

*************************************************************************************************
회계 등록 자원:

금액 - 대차 대조표,
수량 - 부외 및 회계 특성과 관련됨

*************************************************************************************************
가상 회계 등록 테이블:

매출액: 단일 계좌의 매출액
TurnoverDtKt: 두 계좌 간의 매출액, 즉 해당 기간 동안의 모든 동일한 거래입니다.

*************************************************************************************************
회계 기록부의 통화 회계 - 구현 방법:

우리는 계정과목표에 회계 속성 "통화"를 생성합니다.
회계 기록부에서 다음을 추가로 생성합니다.
- 통화 차원(빈 값 금지, 부외 계정, 회계 속성 - 통화)
- 자원 통화 금액(부외, 회계 속성 - 통화, 금액을 통화로 저장합니다(예: $100))
모두.

따라서 레지스터 구조는 다음과 같습니다.

측정:
- 화폐
자원
- 수량
- 금액(루블 단위)
- 통화Amount(통화 금액)

따라서 통화 회계는 벨로루시 공화국의 기존 회계를 개선한 것일 뿐이며 예를 들어 자원 금액의 본질을 변경하지 않습니다.
(평소와 같이 계정이 외화인지 여부에 관계없이 금액은 루블로 표시됩니다).
그리고 계정에 대해 통화 회계 기능이 꺼진 경우 이는 벨로루시 공화국의 일반적인 구조입니다(자원 - 수량 및 금액만 해당).

*************************************************************************************************
후자의 조각을 얻기 위해 가상 테이블의 매개변수를 설정할 때 리소스가 아닌 차원에 조건을 부과합니다.

그렇지 않으면 우리는 후자의 조각을 얻지 못할 것입니다. 마지막 항목지정된 리소스 값 - 차원 세트의 마지막이 아닐 수 있음

*************************************************************************************************
계산 레지스터의 리소스 및 세부 사항의 의미

계산 레지스터에서 리소스를 생성하면 이 레지스터를 사용하여 베이스를 계산할 때 리소스를 받을 수 있습니다.
그리고 주어진 기간에 비례하여도 자원 값이 다시 계산됩니다(기본 기간이 레지스터의 주기성과 일치하지 않는 경우).

그리고 속성 값은 계산 레지스터의 실제 테이블에서만 사용할 수 있으며, 가상 테이블에서는 사용할 수 없습니다.

*************************************************************************************************
계산 레지스터 차원 속성의 "기본" 확인란
이 측정값이 향후 기반을 확보하는 데 사용될 것이며 다음 용도로 사용된다는 의미입니다. 추가 인덱싱이 필드의 값.

*************************************************************************************************
등록 항목을 기록할 때 휴가 유효 기간을 월별로 분류하고,
휴가가 한 줄에 한 번에 몇 달 동안 한 줄로 문서에 지정된 경우 :

CurrentMonth의 StartDate = 월 시작(TexLineMainAccruals.ActionPeriodStart); CurrentMonthEndDate = EndMonth(TexLineMainAccruals.ActionPeriodStart); 현재월 = 날짜; 동안날짜시작현재월<= НачалоМесяца(ТекСтрокаОсновныеНачисления.ПериодДействияКонец) Цикл Движение = Движения.ОсновныеНачисления.Добавить(); Движение.Сторно = Ложь; Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета; Движение.ПериодДействияНачало = Макс(ДатаНачалаТекМесяца, ТекСтрокаОсновныеНачисления.ПериодДействияНачало); Движение.ПериодДействияКонец = КонецДня(Мин(ДатаОкончанияТекМесяца, ТекСтрокаОсновныеНачисления.ПериодДействияКонец)); Движение.ПериодРегистрации = Дата; Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник; Движение.Подразделение = ТекСтрокаОсновныеНачисления.Подразделение; Движение.Сумма = 0; Движение.КоличествоДней = 0; Движение.График = ТекСтрокаОсновныеНачисления.График; Движение.Параметр = ТекСтрокаОсновныеНачисления.Параметр; Движение.БазовыйПериодНачало = НачалоМесяца(ДобавитьМесяц(Дата, -3)); Движение.БазовыйПериодКонец = КонецДня(КонецМесяца(ДобавитьМесяц(Дата, -1))); ДатаНачалаТекМесяца = НачалоМесяца(ДобавитьМесяц(ДатаНачалаТекМесяца, 1)); ДатаОкончанияТекМесяца = КонецМесяца(ДатаНачалаТекМесяца); КонецЦикла; КонецЕсли;

*************************************************************************************************
간트 차트 작성:

양식에 "간트 차트" 유형의 요소를 배치하고 DG라고 명명한 다음 "생성" 명령을 생성하고 양식 모듈에 다음을 작성합니다.

&OnClient 프로시저 생성(명령) 생성OnServer(); 프로시저 종료 서버 프로시저에서(&O) generateOn Server() DG.Clear(); DG.업데이트 = 거짓; 요청 = 새 요청("SELECT |BasicAccrualsActualActionPeriod.Employee, |BasicAccrualsActualActionPeriod.CalculationType, |BasicAccrualsActualActionPeriod.ActionPeriodStart AS ActionPeriodStart, |BasicAccrualsActualActionPeriod.Period ActionsEnd AS PeriodActionsEnd |FROM |계산 Register.BasicAccruals.ActualPeriod Actions AS BasicAccrualsActualPeriodActions |WHERE |BasicAccrualsActualPeriodActions.PeriodActions BETWEEN &StartDate AND &EndDate "); Query.SetParameter("StartDate", Period.StartDate); Request.SetParameter("EndDate", Period.EndDate); 선택 = Query.Run().Select(); While Selection.Next() 루프 포인트 = DG.SetPoint(Selection.Employee); 시리즈 = DG.SetSeries(Selection.CalculationType); Value = DG.GetValue(점, 계열); 간격 = Value.Add(); Interval.Start = Sample.PeriodActionStart; Interval.End = 샘플.ActionPeriodEnd; 엔드사이클; DG.업데이트 = 참; 절차 종료

실제로 여기서는 루프의 코드만 중요하고 나머지는 보조이므로 이 하위 작업의 전체 구현을 제공했습니다.
요청에는 직원, 지불 유형, 기간 시작 날짜 및 종료 날짜가 있다는 것이 중요합니다.
코드는 실제로 매우 간단하고 기억하기 쉽습니다. 번거로워 보이더라도 놀라지 마세요.

*************************************************************************************************
계산 작업에서 "역분할" 항목 처리:

트랜잭션 처리 절차(오브젝트 모듈)에서는 모든 움직임을 구성하고, 다른 기간의 기록이 있으면 다음과 같이 얻습니다.
(시스템이 자동으로 생성하여 우리에게 도움이 됩니다):

추가 레코드 = Movements.MainAccruals.GetAddition(); // 추가를 얻기 위해 움직임을 기록할 필요가 없습니다.

기록 추가 주기의 각 기술 라인에 대해
기록 = Movements.MainAccruals.Add();
FillPropertyValues(레코드, TechString);
Record.RegistrationPeriod = TechString.RegistrationPeriodReversal;
Record.ActionPeriodStart = TechString.ActionPeriodStartReverse;
Record.ActionPeriodEnd = TechString.ActionPeriodEndReversal;
사이클의 끝

그리고 레코드를 계산할 때 수표를 삽입하세요.

TechMotion.Reversal이면
CurrentMovement.Sum = - CurrentMovement.Amount;
endIf;

*************************************************************************************************
주요 발생액에 포함되는 내용과 계산 작업의 추가 발생액에 포함되는 내용을 결정하는 방법.

그러나 이것이 항상 100% 명확한 것은 아니며, 꽤 많은 경우에도 불구하고 더 복잡한 경우도 있습니다.
(예를 들어 한 달의 근무일 수에 따라 달라지는 보너스-HE입니다).

기본 요금:
계산 유형이 일정(달력 날짜가 포함된 정보 등록을 의미)에 따라 달라지는 경우 이는 주요 요금을 나타냅니다.

예 오:
- 샐러리
- 근무일 수로 계산되는 항목(이를 위해서는 일정을 사용해야 함): 유효 기간(예: 급여) 또는 기본 기간

추가 요금:
발생한 금액 또는 근무 시간 (표준이 아님)에서 고려되거나 전혀 의존하지 않는 것은 추가 사항입니다. 발생.

즉, 시간 표준이 사용되는 계산에 대한 발생액(사실일 수도 있음)은 OH이고 실제 데이터가 필요하지 않거나 전혀 필요하지 않은 발생액은 DN입니다.

또는 다른 말로 하면:

VR이 시간 기준을 사용하는 경우 VR에 대한 유효 기간이 포함되어야 합니다.

*************************************************************************************************
"명명법" 디렉토리의 목록 형식에 내장된 도움말 섹션 "참고 도서 작업"을 여는 기능을 추가합니다.

양식에서 명령을 실행하십시오.

&On클라이언트
절차 도움말(명령)
OpenHelp("v8help://1cv8/EnterprWorkingWithCatalogs");
절차 종료

단면선을 다음과 같이 정의합니다.
구성 개체의 도움말 정보로 이동하여(구성기에서) 단어를 작성하고 선택한 다음 요소/링크 메뉴로 이동하여 1C 도움말의 원하는 섹션을 선택하면 링크가 자동으로 삽입됩니다. 복잡해 보이지만 실제로는 쉽습니다.

*************************************************************************************************
선택 등 양식 간 상호 작용 구현:

1. 현재 양식에서 "OpenForm()" 메서드를 사용하여 원하는 양식을 열고 매개변수가 있는 구조를 두 번째 매개변수(필요한 경우)로 전달합니다. 세 번째 매개변수는 이 양식(ThisForm)에 대한 링크를 전달할 수 있습니다.

2. 열린 양식의 “When CreatedOnServer()” 핸들러에서 “Parameters.[ParameterName]”을 통해 1단계에서 전달된 매개변수를 잡을 수 있습니다. 이 양식 열기를 시작한 양식은 "소유자" 식별자를 통해 액세스할 수 있습니다(물론 1단계에서 지정된 경우).

그리고 가장 중요한 점은 소유자 양식의 내보내기 기능을 사용할 수 있다는 것입니다. 즉, 소스 양식의 내보내기 기능을 호출하고 거기에 무언가를 매개변수로 전달하여 선택을 처리할 수 있습니다. 그리고 이 기능은 원래 형식에서 필요한 것을 이미 채워줄 것입니다. 단 하나의 주의 사항이 있습니다. 클라이언트 프로시저 간에 값 테이블을 전달할 수는 없지만 이를 임시 저장소에 배치하고 간단히 VX 주소를 전달한 다음 VX에서 추출할 수 있습니다.

*************************************************************************************************
양식 매개변수의 수명주기

양식을 열 때 양식으로 전송된 모든 매개 변수는 "CreateOnServer 시" 프로시저에서만 볼 수 있습니다.
일단 생성되면 모든 매개변수가 삭제되며 더 이상 양식에서 사용할 수 없습니다.
“Key Parameter” 속성을 사용하여 양식 편집기에서 선언된 매개변수는 예외입니다.
그들은 양식의 고유성을 결정합니다.
이 매개변수는 양식 자체가 존재하는 한 존재합니다.

*************************************************************************************************
택시 인터페이스 사용

개발 중에 구성 속성에서 일반적인 관리 인터페이스 8.2를 설정할 수 있습니다. 이렇게 하면 모든 것이 눈에 띄게 더 컴팩트하고 친숙해집니다.
원격으로 임대하는 경우 특히 그렇습니다. 화면 해상도가 매우 낮고 "택시" 인터페이스로는 아무 것도 할 수 없습니다.
작업이 끝나면 다시 "택시"를 타는 것을 잊지 마세요!그렇지 않으면 시험관이 감점을 하게 됩니다!

*************************************************************************************************

PS: 이자형 모든 작업에 사용되는 별도의 표준 하위 작업이 있으며 이를 해결해야 합니다(예: 일괄 쓰기, PVC 사용(정말 드물지만) 등). 그리고 모든 작업에서는 단순히 반복됩니다(어딘가에 일부 하위 작업이 있고 다른 곳에는 다른 조합이 있음). 더욱이 그들은 훨씬 더 많은 문제가 있어야하는 새로운 컬렉션을 출시하겠다고 오랫동안 약속해 왔습니다. 즉, 개별 문제에 대한 해결책을 기억할 필요가 없습니다. 개별 표준 하위 작업을 해결하면 모든 문제가 해결됩니다.

PSS: 동료 여러분, 시험 준비 및 합격에 관한 다른 유용한 정보가 있는 경우 댓글에 적어주시면 기사에 추가하겠습니다.

누적 레지스터 1C:Enterprise 시스템에서는 누적 레지스터의 두 가지 유형으로 나뉩니다. 나머지및 누적 레지스터 rpm.

레지스터 유형은 구성기에서 생성할 때 선택됩니다.

이름에서 알 수 있듯이 일부는 특정 날짜의 잔액을 얻기 위한 것이고, 두 번째는 선택한 기간 동안의 매출을 얻기 위한 것입니다. 1C:Enterprise 플랫폼은 누적 레지스터 유형에 따라 다른 가상 테이블 세트를 생성합니다. 이 기사에서는 누적 레지스터의 가상 테이블 작업을 살펴보겠습니다. 이를 위해 잔액 축적을 위한 레지스터를 생성합니다. 제품유물그리고 회전 누적 레지스터 - 제품회전율.

이제 플랫폼이 이러한 각 레지스터에 대해 어떤 가상 테이블을 제공하는지 살펴보겠습니다.

회전수 누적 레지스터

명확성을 위해 어떤 테이블을 열어서 등록에 사용할 수 있는지 살펴보겠습니다. 제품회전율. 이것은 레지스터 자체의 테이블입니다. 제품회전율, 데이터베이스에 물리적으로 존재하는 하나의 가상 테이블 - 제품회전율.회전율

표준 테이블을 사용하면 모든 것이 명확합니다. 가상의 모습을 자세히 살펴보겠습니다.

가상 테이블 회전율

이 테이블을 사용하면 차원 측면에서 자원 회전율을 얻을 수 있습니다. 우리의 경우에는 두 가지 차원이 있습니다. 재고그리고 제품. 그리고 하나의 리소스 - 수량

우리의 등록부에 다음 항목이 있도록 하십시오.

쿼리 디자이너로 돌아가서 간단히 테이블에서 선택하여 시작하겠습니다. 제품회전율.회전율모든 분야

따라서 요청은 다음과 같습니다.

제품 선택 회전율회전율.창고, 제품회전율회전율.제품, 제품회전율회전율.수량등록기에서 회전율누적.제품 회전율.회전율(,) AS 제품회전율회전율

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

즉, 우리는 전체 기간 동안 상품 및 창고 측면에서 매출을 얻었습니다. 우리가 창고에는 관심이 없고 상품 측면에서만 매출을 얻고 싶다고 가정해 보겠습니다.

이를 위해 요청에서 측정기준을 제외합니다. 재고

SELECT 제품 회전율회전율.제품, 제품회전율회전율.수량등록 FROM 회전율Accumulation.Products회전율.회전율(,) AS 제품회전율회전율

결과적으로 두 줄만 남게 됩니다.

그러나 원칙적으로 등록부의 전체 존재에 대해 매출액을 얻을 필요는 없습니다. 기본적으로 월, 분기, 연도 등 특정 기간에 필요합니다. 또한 일반적으로 차원(제품, 창고)별 선택이 필요합니다. 이는 다음을 사용하여 달성됩니다. 가상 테이블 매개변수. 생성자에서 매개변수를 채우는 것이 편리합니다. 버튼으로 가상 테이블 옵션필요한 모든 항목을 입력할 수 있는 대화 상자가 열립니다.

이후 원래 요청은 다음 형식을 취합니다.

SELECT GoodsTurnoverTurnover.Warehouse, GoodsTurnoverTurnover.Product, GoodsTurnoverTurnover.QuantityTurnover FROM RegisterAccumulation.GoodsTurnover.Turnover(&기간 시작, &기간 종료, 창고 = &창고) AS GoodsTurnoverTurnover

보시다시피, 가상 테이블 이름 뒤의 괄호 안에는 쿼리를 실행하기 전에 채워야 하는 매개 변수가 있다는 점이 다릅니다.

이제 막 가상 테이블 작업을 시작한 사람들은 매개변수를 사용하는 대신 일반적인 방법으로 선택을 설정하려는 유혹을 받는 경우가 많습니다.

FROM RegisterAccumulations.ProductsTurnover.Turnover(,) HOW Products TurnoverTurnover WHERE Products TurnoverTurnover.Warehouse = &Warehouse

우리가 놓친 매개변수를 채울 때 주기성. 목록을 열고 가능한 다양한 옵션 중에서 선택해 보겠습니다. . 혼동하지 않도록 다른 모든 매개변수를 제거하겠습니다.

그 후, 테이블 필드에 필드가 나타나는 것을 관찰합니다. 기간.

선택한 필드에 추가하면 다음과 같은 요청 텍스트가 표시됩니다.

SELECT 제품회전율회전율.기간, 제품회전율회전율.창고, 제품회전율회전율.제품, 제품회전율회전율.수량등록기에서의 회전율누적.제품회전율.회전율(, 월,) AS 제품회전율회전율

요청을 실행합니다.

따라서 선택한 시간 간격 내에서 선택한 주파수에 따라 회전을 더 작은 간격으로 나눌 수 있습니다.

잔액 누적 등록

역방향 레지스터와 마찬가지로 잔액 누적 레지스터에 사용할 수 있는 가상 테이블을 쿼리 디자이너에서 살펴보겠습니다.

보시다시피 잔액 누적 레지스터에 세 개의 가상 테이블을 사용할 수 있습니다. 혁명, 나머지, 잔존 및 회전율. 각각을 개별적으로 고려해 봅시다.

가상 테이블 회전율

레지스터 유형이 다음과 같다는 사실에도 불구하고 나머지, 그럼에도 불구하고 우리는 그것으로부터 매출을 받을 수 있습니다. 또한 여기에는 두 가지 추가 리소스가 있습니다. 오는그리고 소비

잔액 기록부에 항목을 입력하면 누적 이동 유형(수입 또는 지출)이 표시되는 반면, 매출액 기록에는 이동 유형이 표시되지 않습니다. 따라서 여기에는 해당 기간의 전체 매출액뿐만 아니라 수입과 지출도 별도로 받을 수 있는 기회 형태의 추가 보너스가 있습니다. 그러나 물론 메타데이터에 유사한 측정 세트가 포함된 역 레지스터가 포함되어 있는 경우 이를 사용하여 매출을 얻는 것이 더 좋습니다. 일반적으로 이 가상 테이블 작업은 가상 테이블 작업과 유사합니다. 혁명위에서 논의한 협상 가능한 레지스터.

가상 테이블 잔액

이 테이블은 차원별 자원 잔량을 얻는 데 사용됩니다. 테이블 매개변수에서 잔액을 수신하고 선택 항목을 설정하는 날짜를 지정할 수 있습니다.

작은 예를 살펴보겠습니다. 다음과 같은 레지스터 항목이 있습니다.

사용 가능한 모든 필드를 선택하고 6월 말을 잔액 수령 날짜로 설정하겠습니다. 우리는 측정에 따라 선택하지 않습니다. 그러면 요청 텍스트는 다음과 같습니다.

SELECT ProductsRemainingsRemainings.Warehouse, ProductsRemainingsRemainings.Product, ProductsRemainingsRemainings.QuantityRemaining FROM RegisterAccumulations.ProductsRemainings.Remainings(&DateRemainings,) AS ProductsRemainingRemainings

그리고 그것을 실행한 후에 우리는 이런 결과를 얻습니다.

가상 테이블 잔액 및 회전율

이 테이블은 이전에 논의한 두 가지를 결합하여 선택한 기간 동안의 매출과 기간 시작 및 종료의 잔액을 얻을 수 있습니다. 선택 항목을 설정할 수도 있습니다.

하나의 보고서에서 기간의 시작과 끝의 매출액과 잔액을 동시에 가져와야 하는 경우 이 테이블을 사용하는 것이 타당할 수 있습니다. 다른 경우에는 그 사용을 남용해서는 안됩니다.