1c 쿼리 디자이너 합계. 데이터 구성 스키마 쿼리 디자이너

이제 간단하게 시작하겠습니다. 구성자에서 새 처리를 만들고 원하는 대로 쿼리 콘솔 또는 쿼리 생성자의 이름을 지정합니다.

필요한 미래 매개변수에 대한 "데이터" 플레이트에 즉시 추가할 수 있으므로 콘솔에서 가장 원시적인 요청을 실행하지 않지만 매개변수와 링크를 사용하여 예를 들어 작업을 위해 요청을 생성합니다. 정기 레지스터에 있지만 여기에 매개변수 표시가 없으면 = & 날짜는 어디에도 없습니다.

매개변수 테이블을 생성하려면 "표 형식 부분"의 "데이터" 탭에서 새 테이블을 추가하고 QueryParameters라고 합니다. 여기에 이 ​​테이블의 열을 추가합니다. 1) ParameterName, 문자열 유형 = 25자; ParameterValue는 복합 데이터 유형입니다(그림 참조).

따라서 그림과 같이 매개변수 값 열에 대해 복합 유형을 선택합니다. 열리는 유형 메뉴에서 "복합 유형" 확인란을 선택하고 숫자, 라인(20자 지정), 날짜, 부울을 선택합니다. , 그리고 가장 낮은 확인란인 AnyLink를 넣으십시오. 이는 또한 요청의 매개변수를 지정할 때 구성의 모든 개체(예: 참조 서적 또는 문서)를 참조할 수 있음을 의미합니다.

이제 미래의 쿼리 콘솔을 위한 양식을 만들어야 합니다. 처리 중에 "양식" 탭으로 이동하여 새 양식을 추가합니다. 이 양식을 입력하면 이미 창의성을 위한 무제한 필드가 있습니다. 방금 만든 두 개의 소품과 매개변수가 있는 접시를 원하는 대로 정렬할 수 있습니다! 이렇게 하려면 그룹 또는 페이지가 있는 페이지(페이지 넘기기를 선호하는 경우)와 같은 표준 양식 요소를 사용할 수 있습니다.

여기서 가장 중요한 것은 "TextValues" 속성을 양식의 왼쪽 편집 필드로 끌어서 속성에서 "View" = 텍스트 문서 필드로 설정해야 합니다. 그림 참조:

"QueryTable" 변수의 속성에서 원하는 경우 "DisplayGrid" 및 "DisplayHeaders"를 지정할 수 있습니다.

그런 다음 양식 편집을 위한 오른쪽 창에서 "명령" 탭으로 이동하고 콘솔이 특정 작업을 수행할 새 버튼을 클릭하여 새 버튼을 추가합니다. "Query Constructor" 버튼을 만들어 보겠습니다. 원하는 경우 버튼에 아이콘을 추가할 수 있습니다. 가장 중요한 것은 버튼 자체를 왼쪽 양식 편집 창으로 이동하여 볼 수 있도록 하는 것입니다. 그런 다음 오른쪽에서 양식 편집 창에서 버튼을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다. 속성에서 "Action" 항목을 클릭하면 모달 창이 질문과 함께 나타납니다. 정확히 어디에서 프로그램 코드가 실행될 것이며 이를 버튼 - "클라이언트에서"를 선택합니다.

이미 만들어진 빈 프로시저 "Procedure QueryConstructor(Command)"가 있는 양식 모듈이 열립니다. 이 절차 내에서 표준 1c8 쿼리 생성자의 호출에 대해 설명합니다. 정말 쉬워요: 생성자 = 새 QueryConstructor;그러나 여기에는 함정이 있습니다. 플랫폼에 내장된 쿼리 생성자는 씩 클라이언트에서만 사용자 모드에서 작동합니다! 따라서 우리는 전처리기 명령의 조건을 삽입할 것입니다. # 하지만 여기에서 플랫폼을 기반으로 스스로 결정하거나 일반 형식이 있는 경우 " ThickClientNormalApplication"또는 관리되는 양식 플랫폼이 있는 경우" ThickClientManagedApp". 그림 참조.

이제 이 절차에 요청 텍스트를 작성하기 위한 조건을 추가해야 합니다. 이 조건은 "요청 텍스트" 양식의 필수 조건으로 쿼리 디자이너가 생성합니다.

Constructor.OpenModal() = True인 경우 Object.RequestText = Constructor.Text; EndIf;

그러나 쿼리 텍스트(사용자 모드에서 - "QueryText" props 창에서)에서 수동으로 무언가를 변경할 수 있으므로 다시 호출될 때 변경 사항이 QueryConstructor로 이동합니다. 여기에 간단한 조건을 추가합니다.

EmptyString(Object.RequestText)이 아니면 Constructor.Text = Object.RequestText; EndIf;

이제 1c8 플랫폼에 내장된 쿼리 생성자를 연결했습니다. 작업을 살펴보겠습니다. 이렇게 하려면 다음 방법 중 하나를 사용하여 씩 클라이언트 모드에서 1C: Enterprise를 시작합니다. 1) 구성 관리자의 기본 메뉴 - 디버그 - 디버깅 시작 - ThickClient; 2) 또는 구성기의 제어판에 이러한 키를 제공한 경우 - 두꺼운 점이 있는 노란색 원이 있는 버튼을 누르십시오. 그림 참조:

사용자 모드 1cEnterprise8이 시작되고 처리를 찾아 실행하고 "쿼리 생성자" 버튼을 클릭하고 플랫폼에 빌드된 생성자가 어떻게 열리는지 확인합니다. 그림 참조.

따라서 Query Constructor가 우리와 함께 시작되었습니다. 이미 미래 쿼리를 추가할 수 있지만 생성한 쿼리가 어떻게 처리되는지 확인하는 데 관심이 있습니다! 그리고 이를 위해 콘솔 형식을 편집할 때 구성자에서 또 다른 버튼을 생성해야 합니다. 이를 "요청 실행"이라고 부르겠습니다. "작업"에서 "요청 실행" 버튼의 속성을 클릭하면 프로그램 코드를 처리할 위치를 묻는 메뉴가 다시 나타납니다. 이 경우 "클라이언트와 서버 모두에서"를 선택합니다. ", 다시 Form Module로 들어갑니다.

클라이언트에 있는 ExecuteRequest() 프로시저에서 사용자가 요청 텍스트를 입력하지 않은 경우 조건을 기록하지만 실행을 요청합니다.

If EmptyString (Object.RequestText) then report("요청 텍스트를 입력하세요!"); EndIf;

시스템은 이미 ExecuteRequestOnServer 프로시저()에 대한 링크를 자동으로 생성했습니다. - 좋습니다. 서버에서 실행되는 이 절차로 이동하여 여기에 입력한 요청의 실행 코드를 작성하십시오.

여기에 옵션이 있습니다. 쿼리 작성과 관련된 모든 표현식을 독립적으로 작성할 수 있습니다. 수동으로, 그러나 더 간단한 옵션이 있습니다 - 프로시저 내에서 마우스 오른쪽 버튼을 누르고 드롭다운 메뉴에서 "결과를 처리하는 쿼리 생성자, 그림 참조" 항목을 선택하십시오.

"항목, 모달 창" 쿼리 텍스트를 찾을 수 없는 결과 처리가 있는 쿼리 생성자를 클릭한 경우 새로 생성하시겠습니까? " 확인 "버튼 - 모달 창이 드롭아웃됩니다." 요청에서 선택한 필드가 없으면 "확인"을 클릭하십시오.

그 후 RunRequestOnServer() 프로시저 내에서 다음과 같은 기성품 공백이 나타납니다.

생성자가 만든 표현식으로 넘어갑시다.

요청.텍스트 = "";

Request.Text = Object.Request 텍스트;

매우 간단합니다. 처리 양식의 "요청 실행" 버튼은 이미 실질적으로 작동하며 지금까지는 처리만 가능합니다. 간단한 쿼리매개 변수가 없지만 가장 중요한 것은 작동한다는 것입니다! 처리 양식의 "값 테이블"속성에 요청 결과를 시각적으로 표시하는 것만 남아 있습니다. "값 테이블" 속성은 "표 형식 문서" 유형이라는 것을 상기시켜 드리겠습니다. 그렇지 않으면 사용자 모드에서 결과를 볼 수 없기 때문입니다. 테이블 형식 문서 또는 레이아웃은 항상 사용자에게 테이블 형식 데이터를 표시하는 데 관여합니다. 값 테이블을 통해 데이터를 표시할 수 있기를 정말 원합니다. 사용이 매우 간단하고 친숙하지만 불행히도, 값 테이블은 개발자에게 필요한 도구 일뿐이며 그것을 사용하여 화면에 데이터를 표시 할 수 없습니다 ...

표 형식 문서가 무엇인지 자세히 살펴보겠습니다. Excel 시트와 비슷합니다. 표 셀을 통해서만 특정 셀의 레코드에 접근할 수 있습니다. 여기서는 영역이라고 하지만 우리가 직접 범위를 선택할 수 있습니다. 이 영역을 하나의 특정 셀로:

그래서 우리는 그것이 무엇인지 알아 냈습니다. 스프레드시트 문서, 이 스프레드시트 문서의 특정 셀에 있는 요청 데이터를 결정해야 한다고 스스로 결정했습니다. 그러나 생각해 봅시다. 생성자가 우리를 위해 그렇게 빨리 생성한 "QueryResult"는 무엇입니까? 도움말 열기 - 쿼리 결과는 해당 속성이 있는 테이블입니다! 그림 참조.

그리고 이제 QueryResult = Query.Run (); (생성자에 의해 생성됨) 표현식 뒤에 작성하면 이것은 Collections에 대한 간단한 루프입니다.

QueryResult.Columns 루프 보고서의 각 ColumnName에 대해(ColumnName.Name); 사이클 종료;

이 주기가 끝나면 지금은 생성자에 의해 자동으로 작성된 모든 표현식을 도킹합니다. 그리고 씩 클라이언트에서 1C: Enterprise8을 시작합니다. 간단한 쿼리를 만들고(쿼리 디자이너를 사용할 수 있습니다. 이미 작동합니다) "쿼리 실행" 버튼을 클릭합니다.

그러면 창 하단에 메시지가 표시됩니다. QueryResult 테이블은 간단한 쿼리를 생성하여 선택한 필드의 이름을 저장합니다.

이제 스프레드시트 문서에 고통의 필드 이름을 표시해 보겠습니다.

QueryResult.Columns 루프 셀의 각 ColumnName에 대해 = Object.InquiryTable.Area(1, QueryResult.Columns.Index(ColumnName) +1); 셀.텍스트 = 열 이름.이름; 사이클 종료;

쿼리 데이터로 세부 정보를 표시하기 위해 생성자에 의해 자동으로 생성된 표현식을 분리하고 쿼리 자체의 "SelectDetailedRecords" 루프 내부에 열 이름을 표시하는 데 사용한 것과 똑같은 주기를 삽입합니다. 이제야 "QueryResult" 테이블의 데이터를 셀 텍스트로 전송하고 선택 자체의 데이터를 전송해야 하는 경우 쿼리의 세부 선택 필드를 참조하는 방법을 도움말에서 살펴보겠습니다.

FetchDetailedRecords = QueryResult.Select(); 동안 FetchDetailRecords.Next () 루프 // 첫 번째 줄에는 이미 테이블 열의 이름이 있으므로 첫 번째 줄 아래에 데이터를 로드합니다.RowNumberDoc = Object.QuestTable.TableTable + 1; QueryResult.Columns 루프 셀의 각 ColumnName에 대해 = Object.QueryTable.Area(RowNumberDoc, QueryResult.Columns.Index(ColumnName) +1); Cell.Text = SelectionDetailedRecords [ColumnName.Name]; 사이클 종료; 사이클 종료;

모든 것을 확인하고 씩 클라이언트에서 엔터프라이즈를 로드하고 매개 변수 없이 간단한 쿼리를 입력하고 "쿼리 실행" 버튼을 클릭합니다(그림 참조).

만세, 모든 것이 작동합니다!!!

쿼리 콘솔을 열거나 닫을 때 다시 "QueryText" 필드에 콘솔을 닫기 전에 작업한 쿼리 텍스트가 작성되면 매우 편리합니다. 이렇게 하려면 양식 속성 = Autosave를 활성화하기만 하면 됩니다(그림 참조).

그게 다야, 우리 콘솔이 작동하고 있습니다. 매개변수가 지정된 더 복잡한 쿼리를 작성할 수 있도록 "FindParameters" 버튼과 "요청 실행" 버튼 코드를 생성해야 합니다. "FindParameters" 버튼 코드는 클라이언트와 서버에서. 추가로 서버 프로시저에서 "Request.FindParameters()" 표현식을 사용하여 "RequestText" 창에서 전달된 텍스트로 요청을 시작하고 전달된 매개변수를 찾아 루프에 입력하기만 하면 됩니다. "RequestParameters" 양식의 표 섹션으로. 채워진 매개변수 테이블에서 "ExecuteRequest" 프로시저로 전송하는 것을 잊지 마십시오.

사용자 모드에서 매개변수 창과 요청 텍스트 창을 지우는 몇 가지 버튼을 콘솔에 추가할 수도 있습니다.

쿼리 콘솔을 사용할 준비가 되었습니다. 쿼리 콘솔과 같은 간단하고 강력한 도구를 사용하여 창의적인 솔루션을 성공적으로 만드시기 바랍니다!

이 처리는 1c8.3 플랫폼(관리되는 형식)에 작성되었으며 씩 클라이언트에서 실행됩니다. 또한 일반적인 형식과 관리되는 형식 모두에서 1c8.2 플랫폼에 작성할 수 있습니다.

다운로드에는 방금 만든 쿼리 콘솔의 샘플이 포함되어 있습니다.

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

쿼리 콘솔 업그레이드:

1) 이제 쿼리 빌더가 내장된 자체 제작한 쿼리 콘솔이 일반 및 관리 양식의 씩 클라이언트와 씬 및 웹 클라이언트와 같은 모든 클라이언트에서 실행됩니다.

ps 내장된 쿼리 빌더의 형식과 보기는 콘솔을 실행한 클라이언트에 따라 다릅니다.(저는 개인적으로 일반 클라이언트에서 쿼리 빌더 형식을 선호합니다)

& OnClient 프로시저 QueryConstructor(Command) // 표준 QueryConstructor 호출은 팻 클라이언트에서만 가능 # If FatClientManagedApplication 또는 FatClientNormalApplication Then Constructor = New QueryConstructor; EmptyString(Object.RequestText)이 아니면 Constructor.Text = Object.RequestText; EndIf; Constructor.OpenModal() = True인 경우 Object.RequestText = Constructor.Text; EndIf; // # 그렇지 않으면 // Inform("쿼리 빌더 호출은 씩 클라이언트에서만 가능합니다"); // 반품; // # EndIf # 그렇지 않으면 Report("씬 클라이언트에서 쿼리 빌더를 실행 중입니다. 형식과 성능 속도가 약간 다릅니다!"); 생성자 = 새 QueryConstructor(); EmptyString(Object.RequestText)이 아니면 Constructor.Text = Object.RequestText; EndIf; 생성자 경고 = 새 AlertDescription("ExecuteAfter ConstructorClosed", ThisForm); Constructor.Show(생성자 경고); #EndIf EndProcedure & AtClient 프로시저 ExecuteAfterClosingConstructor(결과, ConstructorParameters) 내보내기 // 결과 = 확인을 클릭하여 콘솔을 닫은 경우 텍스트 Object.QueryText = ShortLP(결과); //공장!!! 절차 종료

2) 매개변수에 전달된 임시 테이블로 복잡한 쿼리를 입력하는 기능을 간단한 쿼리 콘솔에 추가했습니다 !!! 이 메커니즘은 전문 콘솔에서와 같이 XML 코드를 사용하지 않고 매우 간단하고 우아한 것으로 판명되었습니다.

코드 자체와 임시 테이블의 매개변수에 대한 전송 메커니즘에 대한 절차는 두 번째 첨부 파일에서 찾을 수 있습니다. 매개변수에서 임시 테이블의 자체 버전을 개발하기 시작한 방법은 https: //forum.site/forum9/topic183700/ 링크에서 볼 수 있습니다.

이제 임시 테이블이 매개변수에 전달될 때 복잡한 쿼리에 대해 콘솔을 사용하는 방법입니다. 예를 들어 여기에서 이 요청의 코드를 사용할 수 있습니다.

SELECT ExternalData.Product, ExternalData.Quantity PUT ExternalData FROM 및 ExternalData AS ExternalData; //////////////////////////////////////////////////// // //////////////////////////// SELECT ExternalData.Product, ExternalData.Quantity, THERE IS NULL(나머지 ItemsBalance.NumberRemainment, 0) AS Field1 , THERE IS NULL (나머지 항목 Balances.Quantity Balance, 0) - ExternalData.Quantity AS Remaining FROM ExternalData AS ExternalData LEFT JOIN 누적 레지스터.남은 항목.제품 남아

위의 요청 코드와 유사합니다. 직접 생성할 수 있습니다. 복잡한 쿼리, 데이터 개체를 고려합니다.

따라서 쿼리 디자이너에서 위의 쿼리를 만들고 디자이너를 닫습니다. 쿼리 텍스트는 "QueryText" 콘솔 필드로 이동하고 "FindParameters" 버튼을 클릭하면 행 = "ExternalData", ValueType = "ValuesTable"이 매개변수 테이블에 나타납니다(그림 참조).

이 매개변수 테이블에서 날짜 매개변수(예: 오늘 날짜)를 입력한 다음 "ExternalData" 임시 테이블의 매개변수를 편집하려면 클릭하고 세 개의 점에 대해 "값 테이블"이 있는 필드를 클릭 - 선택 유형의 유형이 나타나면 줄을 클릭하면 메커니즘이 양식의 페이지를 전환하고 이 임시 테이블을 수동으로 입력해야 합니다.

여기에서 "매개변수의 임시 테이블 이름" 필드 하단에 있는 "임시 테이블" 페이지와 동시에 임시 테이블의 이름이 나타납니다(매개변수 테이블에서 복사됨).

지금까지 "TimeTables" 페이지에서 우리는 하나의 빈 테이블을 보았습니다 - 이것은 우리의 미래 임시 테이블의 유형 테이블입니다. "추가" 버튼을 사용하여 변수의 이름과 미래 테이블의 유형을 추가하십시오. 주의하십시오. 이름과 유형은 & ExternalData에 대한 요청에서 지정한 것과 일치해야 합니다.

이제 "UpdateTemporaryTable" 버튼을 누르면 여기에 두 번째 테이블이 생깁니다. "추가" 버튼을 통해 임시 테이블의 데이터로 직접 채울 것입니다.

모든 것, 우리는 처리 첫 번째 페이지의 매개 변수 테이블에 쿼리 매개 변수의 기본 데이터를 입력했는지 여부를 다시 확인하고 "요청 실행"버튼을 클릭 할 수 있습니다. 모든 것이 고려되고 제한이 있습니다. 임시 테이블의 매개변수로 전송된 데이터에 대해

ps 속성의 이름과 유형(첫 번째 테이블에서)을 입력할 때 실수를 한 경우 - 콘솔을 닫았다가 다시 엽니다 - 임시 데이터 테이블이 지워집니다 - 유형 테이블을 다시 편집할 수 있고 새 데이터 테이블이 다시 생성되었습니다.

그게 다야, 우리는 우리 자신의 손으로 매우 강력한 작업 도구를 만들 수 있습니다. 또한 콘솔은 전문적인 콘솔에 비해 여전히 매우 민첩합니다. 이는 개발자에게 매우 큰 장점입니다! 물론 이제 콘솔은 모든 클라이언트에서 작동합니다! 당신의 창조적 인 발전에 행운을 빕니다 !!!

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

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

저는 쿼리 콘솔로 지속적으로 작업하고 있으며 최근에 임시 테이블이 첫 번째 요청 패킷에 있지 않고 다음 요청 패킷에 있는 매우 흥미로운 쿼리를 발견했습니다. 여기에서 내 콘솔이 약간 조롱을 받았습니다... 그녀는 또 다른 업그레이드를 하십시오.

따라서 쿼리에 있는 임시 테이블의 관리자가 자신과 함께 작업하고 있음을 항상 이해하는 것은 아닙니다.) 따라서 임시 테이블의 바로 이 관리자를 명시적으로 설정해야 합니다.

& AtServer 프로시저 ExecuteRequestAtServer() // upgrade2-TemporaryTables 관리자의 명시적 정의! 관리자 BT = 임시 테이블의 새 관리자; 요청 = 새 요청; // Upgrade2-TemporaryTables 관리자의 명시적 정의! Request.TemporaryTablesManager = VTManager; Request.Text = Object.Request 텍스트;

이 콘솔 버전은 세 번째 다운로드에 있습니다.

이제 간단하게 시작하겠습니다. 구성자에서 새 처리를 만들고 원하는 대로 쿼리 콘솔 또는 쿼리 생성자의 이름을 지정합니다.

필요한 미래 매개변수에 대한 "데이터" 플레이트에 즉시 추가할 수 있으므로 콘솔에는 가장 원시적인 요청이 없지만 매개변수와 링크를 사용하여 예를 들어 작업을 위해 요청을 생성합니다. 정기 레지스터에 있지만 여기에 매개변수 표시가 없으면 = & 날짜는 어디에도 없습니다.

매개변수 테이블을 생성하려면 "테이블 부분"의 "데이터" 탭에서 새 테이블을 추가하고 QueryParameters라고 합니다. 여기에 이 ​​테이블의 열을 추가합니다. 1) ParameterName, 유형 문자열 = 25자; ParameterValue는 복합 데이터 유형입니다(그림 참조).

따라서 그림과 같이 매개변수 값 열에 대해 복합 유형을 선택합니다. 열리는 유형 메뉴에서 "복합 유형" 체크 표시를 하고 숫자, 문자열(20자 지정), 날짜, 부울, 그리고 가장 낮은 확인란인 AnyLink를 넣으십시오. 이는 또한 요청의 매개변수를 지정할 때 구성의 모든 개체(예: 참조 서적 또는 문서)를 참조할 수 있음을 의미합니다.

이제 미래의 쿼리 콘솔을 위한 양식을 만들어야 합니다. 처리 중에 "양식" 탭으로 이동하여 새 양식을 추가합니다. 이 양식을 입력하면 이미 창의성을 위한 무제한 필드가 있습니다. 방금 만든 두 개의 소품과 매개변수가 있는 접시를 원하는 대로 정렬할 수 있습니다! 이렇게 하려면 그룹 또는 페이지가 있는 페이지(페이지 넘기기를 선호하는 경우)와 같은 표준 양식 요소를 사용할 수 있습니다.

여기서 가장 중요한 것은 "TextValues" 속성을 양식 편집의 왼쪽 필드로 끌어서 속성에서 "View" = 텍스트 문서의 필드로 설정해야 합니다. 그림 참조:

"QueryTable" 속성의 속성에서 원하는 경우 "DisplayGrid" 및 "DisplayHeaders"를 지정할 수 있습니다.

다음으로, 양식 편집을 위한 오른쪽 창에서 "명령" 탭으로 이동하여 콘솔이 특정 작업을 수행할 새 버튼을 클릭하면 새 버튼을 추가합니다. "쿼리 생성자" 버튼을 만들어 보겠습니다. 원하는 경우 버튼에 아이콘을 추가할 수 있습니다. 가장 중요한 것은 버튼 자체를 왼쪽 양식 편집 창으로 이동하여 볼 수 있도록 하는 것입니다. 그런 다음 오른쪽 양식에서 편집 창에서 버튼을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다. 속성에서 "Action" 항목을 클릭하면 모달 창이 질문과 함께 나타납니다. 정확히 어디에서 프로그램 코드가 실행될 것이며 버튼에 할당할 것입니다. - "클라이언트에서"를 선택합니다.

양식 모듈은 "Procedure QueryConstructor(Command)"라는 미리 만들어진 빈 프로시저와 함께 열립니다. 이 절차 내에서 표준 1c8 쿼리 생성자의 호출에 대해 설명합니다. 정말 쉬워요: 생성자 = 새 QueryConstructor;그러나 여기에는 함정이 있습니다. 플랫폼에 내장된 쿼리 생성자는 씩 클라이언트에서만 사용자 모드에서 작동합니다! 따라서 우리는 전처리기 명령의 조건을 삽입할 것입니다. # 그러나 여기에서 플랫폼을 기반으로 스스로 결정하거나 일반 형식이 있는 경우 " ThickClientNormalApplication"또는 관리되는 양식 플랫폼이 있는 경우" ThickClientManagedApp". 그림 참조.

이제 이 절차에 요청 텍스트를 작성하기 위한 조건을 추가하는 일만 남았습니다. 이 조건은 "요청 텍스트" 양식의 요구 사항에 대한 쿼리 생성자를 형성합니다.

Constructor.OpenModal() = True인 경우 Object.RequestText = Constructor.Text; EndIf;

그러나 요청 텍스트(사용자 모드에서 - "RequestText" props 창에서)에서 수동으로 무언가를 변경할 수 있으므로 다시 호출될 때 변경 사항이 QueryConstructor에 들어갑니다. 여기에 간단한 조건을 추가합니다.

EmptyString(Object.RequestText)이 아니면 Constructor.Text = Object.RequestText; EndIf;

이제 1c8 플랫폼에 내장된 쿼리 생성자를 연결했습니다. 작업을 살펴보겠습니다. 이렇게 하려면 다음 방법 중 하나를 사용하여 씩 클라이언트 모드에서 1C: Enterprise를 시작합니다. 1) 구성 관리자의 기본 메뉴 - 디버그 - 디버깅 시작 - ThickClient; 2) 또는 구성기의 제어판에 이러한 키를 제공한 경우 - 두꺼운 점이 있는 노란색 원이 있는 버튼을 누르십시오. 그림 참조:

사용자 모드 1cEnterprise8이 시작되고 처리를 찾고 시작하고 "쿼리 생성자" 버튼을 클릭하고 플랫폼에 빌드된 생성자가 어떻게 열리는지 확인합니다. 그림 참조.

따라서 Query Constructor가 우리와 함께 시작되었습니다. 이미 미래 쿼리를 추가할 수 있지만 생성한 쿼리가 어떻게 처리되는지 확인하는 데 관심이 있습니다! 그리고 이를 위해 콘솔 형식을 편집할 때 구성자에서 또 다른 버튼을 생성해야 합니다. 이를 "요청 실행"이라고 부르겠습니다. "작업"에서 "요청 실행"버튼의 속성을 클릭하면 프로그램 코드를 처리할 위치를 묻는 메뉴가 다시 나타납니다. 이 경우 "클라이언트와 서버 모두에서"를 선택합니다. ", 다시 양식 모듈로 이동합니다.

클라이언트에 있는 ExecuteRequest() 프로시저에서 사용자가 요청 텍스트를 입력하지 않은 경우 조건을 기록하지만 실행을 요청합니다.

If EmptyString (Object.RequestText) then report("요청 텍스트를 입력하세요!"); EndIf;

시스템은 이미 ExecuteRequestOnServer 프로시저()에 대한 링크를 자동으로 생성했습니다. - 좋습니다. 서버에서 실행되는 이 절차로 이동하여 여기에 입력한 요청의 실행 코드를 작성하십시오.

여기에 옵션이 있습니다. 쿼리 작성과 관련된 모든 표현식을 독립적으로 작성할 수 있습니다. 수동으로, 그러나 더 간단한 옵션이 있습니다. 절차 내에서 마우스 오른쪽 버튼을 누르고 드롭다운 메뉴에서 "결과를 처리하는 쿼리 생성자, 그림 참조" 항목을 선택합니다.

결과 처리가 있는 쿼리 생성자를 클릭한 경우 "항목, 모달 창" 쿼리 텍스트를 찾을 수 없습니다. 새로 생성하시겠습니까? " 결과 무시 ". 그게 다야,이 생성자에서 다른 것이 필요하지 않습니다. "확인"버튼을 클릭하십시오. 모달 창 "요청에서 선택된 필드가 없습니다. "확인"을 클릭하십시오.

그 후 RunRequestOnServer() 프로시저 내에서 다음과 같은 기성품 공백이 나타납니다.

생성자가 만든 표현식으로 넘어갑시다.

요청.텍스트 = "";

Request.Text = Object.Request 텍스트;

모든 것이 매우 간단합니다. 처리 양식의 "요청 실행" 버튼은 이미 실질적으로 작동하며 지금까지는 매개변수 없이 간단한 요청만 처리할 수 있지만 가장 중요한 것은 작동한다는 것입니다! 처리 양식의 "값 테이블"속성에 요청 결과를 시각적으로 표시하는 것만 남아 있습니다. "Value Table" 속성은 "Table Document" 유형이라는 것을 상기시켜 드리겠습니다. 그렇지 않으면 사용자 모드에서 결과를 볼 수 없기 때문입니다. 테이블 형식 문서 또는 레이아웃은 항상 사용자에게 테이블 형식 데이터를 표시하는 데 관여합니다. 값 테이블을 통해 데이터를 표시할 수 있기를 정말 원합니다. 사용이 매우 간단하고 친숙하지만 불행히도, 값 테이블은 개발자에게 필요한 도구 일뿐이며 그것을 사용하여 화면에 데이터를 표시 할 수 없습니다 ...

표 형식 문서가 무엇인지 자세히 살펴보겠습니다. Excel 시트와 비슷합니다. 표 셀을 통해서만 특정 셀의 레코드에 접근할 수 있습니다. 여기서는 영역이라고 하지만 우리가 직접 범위를 선택할 수 있습니다. 이 영역을 하나의 특정 셀로:

그래서 우리는 스프레드시트 문서가 무엇인지 알아냈고 이 스프레드시트 문서의 특정 셀에 있는 요청의 데이터를 결정해야 한다고 스스로 결정했습니다. 하지만 생각해 봅시다. 생성자가 우리를 위해 그렇게 빨리 생성한 "QueryResult"는 무엇입니까? 도움말 열기 - 쿼리 결과는 해당 속성이 있는 테이블입니다! 그림 참조.

그리고 이제 QueryResult = Query.Run (); (생성자에 의해 생성됨) 표현식 뒤에 작성하면 이것은 Collections에 대한 간단한 루프입니다.

QueryResult.Columns 루프 보고서의 각 ColumnName에 대해(ColumnName.Name); 사이클 종료;

이 주기가 끝나면 지금은 생성자에 의해 자동으로 작성된 모든 표현식을 도킹합니다. 그리고 씩 클라이언트에서 1C: Enterprise8을 시작합니다. 간단한 요청을 만들고(쿼리 디자이너를 사용할 수 있습니다. 이미 작동합니다) "요청 실행" 버튼을 클릭합니다.

그러면 창 하단에 메시지가 표시됩니다. QueryResult 테이블은 간단한 쿼리를 생성하여 선택한 필드의 이름을 저장합니다.

이제 스프레드시트 문서에 고통의 필드 이름을 표시해 보겠습니다.

QueryResult.Columns 루프 셀의 각 ColumnName에 대해 = Object.InquiryTable.Area(1, QueryResult.Columns.Index(ColumnName) +1); 셀.텍스트 = 열 이름.이름; 사이클 종료;

쿼리 데이터에 대한 세부 정보를 표시하기 위해 생성자에 의해 자동으로 생성된 표현식을 분리하고 쿼리 자체의 "SelectDetailRecords" 반복 주기 내부에 열 이름을 표시하는 데 사용한 것과 똑같은 주기를 삽입합니다. "QueryResult" 테이블의 데이터를 셀 텍스트로 전송하고 선택 자체의 데이터를 전송해야 합니다. 도움말에서 쿼리의 세부 선택 필드를 참조하는 방법을 살펴보겠습니다.

FetchDetailedRecords = QueryResult.Select(); 동안 FetchDetailRecords.Next () 루프 // 첫 번째 줄에는 이미 테이블 열의 이름이 있으므로 첫 번째 줄 아래에 데이터를 로드합니다.RowNumberDoc = Object.QuestTable.TableTable + 1; QueryResult.Columns 루프 셀의 각 ColumnName에 대해 = Object.QueryTable.Area(RowNumberDoc, QueryResult.Columns.Index(ColumnName) +1); Cell.Text = SelectionDetailedRecords [ColumnName.Name]; 사이클 종료; 사이클 종료;

모든 것을 확인하고 씩 클라이언트에서 엔터프라이즈를 로드하고 매개 변수 없이 간단한 쿼리를 입력하고 "쿼리 실행" 버튼을 클릭합니다(그림 참조).

만세, 모든 것이 작동합니다!!!

쿼리 콘솔을 열거나 닫을 때 다시 "QueryText" 필드에 콘솔을 닫기 전에 작업한 쿼리 텍스트가 작성될 때 매우 편리합니다. 이렇게 하려면 양식 속성 = Autosave를 활성화하기만 하면 됩니다(그림 참조).

그게 다야, 우리 콘솔이 작동하고 있습니다. 매개변수가 지정된 더 복잡한 쿼리를 작성할 수 있도록 "FindParameters" 버튼과 "ExecuteRequest" 버튼 코드를 만들어야 합니다. "FindParameters" 버튼 코드는 클라이언트에서 실행됩니다. 그리고 서버에서. 또한 서버 프로시저에서 동일한 방식으로 "Request Text" 창에서 전달된 텍스트로 요청을 시작합니다. "Request.FindParameters()" 표현식을 사용하여 전달된 매개변수를 찾고 간단히 입력합니다. "RequestParameters" 양식의 표 섹션으로 루프합니다. 채워진 매개변수 테이블에서 "ExecuteRequest" 프로시저로 전송하는 것을 잊지 마십시오.

사용자 모드에서 매개변수 창과 요청 텍스트 창을 지우는 몇 가지 버튼을 콘솔에 추가할 수도 있습니다.

쿼리 콘솔을 사용할 준비가 되었습니다. 쿼리 콘솔과 같은 간단하고 강력한 도구를 사용하여 창의적인 솔루션을 성공적으로 만드시기 바랍니다!

이 처리는 1c8.3 플랫폼(관리되는 형식)에 작성되었으며 씩 클라이언트에서 실행됩니다. 또한 일반적인 형식과 관리되는 형식 모두에서 1c8.2 플랫폼에 작성할 수 있습니다.

다운로드에는 방금 만든 쿼리 콘솔의 샘플이 포함되어 있습니다.

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

쿼리 콘솔 업그레이드:

1) 이제 쿼리 빌더가 내장된 자체 제작한 쿼리 콘솔이 일반 및 관리 양식의 씩 클라이언트와 씬 및 웹 클라이언트와 같은 모든 클라이언트에서 실행됩니다.

ps 내장된 쿼리 빌더의 형식과 보기는 콘솔을 실행한 클라이언트에 따라 다릅니다.(저는 개인적으로 일반 클라이언트에서 쿼리 빌더 형식을 선호합니다)

& OnClient 프로시저 QueryConstructor(Command) // 표준 QueryConstructor 호출은 팻 클라이언트에서만 가능 # If FatClientManagedApplication 또는 FatClientNormalApplication Then Constructor = New QueryConstructor; EmptyString(Object.RequestText)이 아니면 Constructor.Text = Object.RequestText; EndIf; Constructor.OpenModal() = True인 경우 Object.RequestText = Constructor.Text; EndIf; // # 그렇지 않으면 // Inform("쿼리 빌더 호출은 씩 클라이언트에서만 가능합니다"); // 반품; // # EndIf # 그렇지 않으면 Report("씬 클라이언트에서 쿼리 빌더를 실행 중입니다. 형식과 성능 속도가 약간 다릅니다!"); 생성자 = 새 QueryConstructor(); EmptyString(Object.RequestText)이 아니면 Constructor.Text = Object.RequestText; EndIf; 생성자 경고 = 새 AlertDescription("ExecuteAfter ConstructorClosed", ThisForm); Constructor.Show(생성자 경고); #EndIf EndProcedure & AtClient 프로시저 ExecuteAfterClosingConstructor(결과, ConstructorParameters) 내보내기 // 결과 = 확인을 클릭하여 콘솔을 닫은 경우 텍스트 Object.QueryText = ShortLP(결과); //공장!!! 절차 종료

2) 매개변수에 전달된 임시 테이블로 복잡한 쿼리를 입력하는 기능을 간단한 쿼리 콘솔에 추가했습니다 !!! 이 메커니즘은 전문 콘솔에서와 같이 XML 코드를 사용하지 않고 매우 간단하고 우아한 것으로 판명되었습니다.

코드 자체와 임시 테이블의 매개변수에 대한 전송 메커니즘에 대한 절차는 두 번째 첨부 파일에서 찾을 수 있습니다. 매개변수에서 임시 테이블의 나만의 버전을 개발하기 시작한 방법은 https://forum.infostart.ru/forum9/topic183700/ 링크에서 찾을 수 있습니다.

이제 임시 테이블이 매개변수에 전달될 때 복잡한 쿼리에 대해 콘솔을 사용하는 방법입니다. 예를 들어 여기에서 이 요청의 코드를 사용할 수 있습니다.

SELECT ExternalData.Product, ExternalData.Quantity PUT ExternalData FROM 및 ExternalData AS ExternalData; //////////////////////////////////////////////////// // //////////////////////////// SELECT ExternalData.Product, ExternalData.Quantity, THERE IS NULL(나머지 ItemsBalance.NumberRemainment, 0) AS Field1 , THERE IS NULL (나머지 항목 Balances.Quantity Balance, 0) - ExternalData.Quantity AS Remaining FROM ExternalData AS ExternalData LEFT JOIN 누적 레지스터.남은 항목.제품 남아

위의 쿼리 코드와 유사하게 데이터 개체를 고려하여 복잡한 쿼리를 생성할 수 있습니다.

따라서 쿼리 디자이너에서 생성자를 닫고 위의 쿼리를 만들었습니다. 쿼리 텍스트는 "QueryText" 콘솔 필드로 이동하고 "FindParameters" 버튼을 클릭하면 행 = "ExternalData", ValueType = "ValuesTable"이 매개변수 테이블에 나타납니다(그림 참조).

이 매개변수 테이블에서 날짜 매개변수(예: 오늘 날짜)를 입력한 다음 임시 테이블 "ExternalData"의 매개변수를 편집하려면 클릭하고 세 개의 점에 대해 "값 테이블"이 있는 필드를 클릭하십시오. 유형이 표시되고 줄을 클릭하면 메커니즘이 양식의 페이지를 전환하므로 이 임시 테이블을 수동으로 입력해야 합니다.

여기에서 "매개 변수의 임시 테이블 이름"필드 하단의 "임시 테이블"페이지에서 동시에 임시 테이블의 이름이 나타납니다 (매개 변수 테이블에서 복사 됨) .

지금까지 "TimeTables" 페이지에는 하나의 빈 테이블만 표시됩니다. 이것은 미래 임시 테이블의 유형 테이블입니다. "추가" 버튼을 사용하여 속성 이름과 미래 테이블 유형을 추가합니다. 주의하십시오. 이름과 유형은 & ExternalData에 대한 요청에서 지정한 것과 일치해야 합니다.

이제 "UpdateTemporaryTable" 버튼을 누르면 여기에 두 번째 테이블이 생깁니다. "추가" 버튼을 통해 임시 테이블의 데이터로 직접 채울 것입니다.

모든 것은 처리 첫 번째 페이지의 매개변수 테이블에 쿼리 매개변수의 기본 데이터를 입력했는지 여부를 다시 확인하고 "요청 실행" 버튼을 누를 수 있습니다. 모든 것이 고려되고 제한 사항에 따라 선택됩니다. 임시 테이블의 매개변수로 전송된 데이터

ps 속성의 이름과 유형(첫 번째 테이블에서)을 입력할 때 실수를 한 경우 - 콘솔을 닫았다가 다시 엽니다 - 임시 데이터 테이블이 지워집니다 - 유형 테이블을 다시 편집할 수 있고 새 데이터 테이블이 다시 생성되었습니다.

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

그게 다야, 우리는 우리 자신의 손으로 매우 강력한 작업 도구를 만들 수 있습니다. 또한 콘솔은 전문적인 콘솔에 비해 여전히 매우 민첩합니다. 이는 개발자에게 매우 큰 장점입니다! 물론 이제 콘솔은 모든 클라이언트에서 작동합니다! 당신의 창조적 인 발전에 행운을 빕니다 !!!

이제 간단하게 시작하겠습니다. 구성자에서 새 처리를 만들고 원하는 대로 쿼리 콘솔 또는 쿼리 생성자의 이름을 지정합니다.

필요한 미래 매개변수에 대한 "데이터" 플레이트에 즉시 추가할 수 있으므로 콘솔에서 가장 원시적인 요청을 실행하지 않지만 매개변수와 링크를 사용하여 예를 들어 작업을 위해 요청을 생성합니다. 정기 레지스터에 있지만 여기에 매개변수 표시가 없으면 = & 날짜는 어디에도 없습니다.

매개변수 테이블을 생성하려면 "표 형식 부분"의 "데이터" 탭에서 새 테이블을 추가하고 QueryParameters라고 합니다. 여기에 이 ​​테이블의 열을 추가합니다. 1) ParameterName, 문자열 유형 = 25자; ParameterValue는 복합 데이터 유형입니다(그림 참조).

따라서 그림과 같이 매개변수 값 열에 대해 복합 유형을 선택합니다. 열리는 유형 메뉴에서 "복합 유형" 확인란을 선택하고 숫자, 라인(20자 지정), 날짜, 부울을 선택합니다. , 그리고 가장 낮은 확인란인 AnyLink를 넣으십시오. 이는 또한 요청의 매개변수를 지정할 때 구성의 모든 개체(예: 참조 서적 또는 문서)를 참조할 수 있음을 의미합니다.

이제 미래의 쿼리 콘솔을 위한 양식을 만들어야 합니다. 처리 중에 "양식" 탭으로 이동하여 새 양식을 추가합니다. 이 양식을 입력하면 이미 창의성을 위한 무제한 필드가 있습니다. 방금 만든 두 개의 소품과 매개변수가 있는 접시를 원하는 대로 정렬할 수 있습니다! 이렇게 하려면 그룹 또는 페이지가 있는 페이지(페이지 넘기기를 선호하는 경우)와 같은 표준 양식 요소를 사용할 수 있습니다.

여기서 가장 중요한 것은 "TextValues" 속성을 양식의 왼쪽 편집 필드로 끌어서 속성에서 "View" = 텍스트 문서 필드로 설정해야 합니다. 그림 참조:

"QueryTable" 변수의 속성에서 원하는 경우 "DisplayGrid" 및 "DisplayHeaders"를 지정할 수 있습니다.

그런 다음 양식 편집을 위한 오른쪽 창에서 "명령" 탭으로 이동하고 콘솔이 특정 작업을 수행할 새 버튼을 클릭하여 새 버튼을 추가합니다. "Query Constructor" 버튼을 만들어 보겠습니다. 원하는 경우 버튼에 아이콘을 추가할 수 있습니다. 가장 중요한 것은 버튼 자체를 왼쪽 양식 편집 창으로 이동하여 볼 수 있도록 하는 것입니다. 그런 다음 오른쪽에서 양식 편집 창에서 버튼을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다. 속성에서 "Action" 항목을 클릭하면 모달 창이 질문과 함께 나타납니다. 정확히 어디에서 프로그램 코드가 실행될 것이며 이를 버튼 - "클라이언트에서"를 선택합니다.

이미 만들어진 빈 프로시저 "Procedure QueryConstructor(Command)"가 있는 양식 모듈이 열립니다. 이 절차 내에서 표준 1c8 쿼리 생성자의 호출에 대해 설명합니다. 정말 쉬워요: 생성자 = 새 QueryConstructor;그러나 여기에는 함정이 있습니다. 플랫폼에 내장된 쿼리 생성자는 씩 클라이언트에서만 사용자 모드에서 작동합니다! 따라서 우리는 전처리기 명령의 조건을 삽입할 것입니다. # 하지만 여기에서 플랫폼을 기반으로 스스로 결정하거나 일반 형식이 있는 경우 " ThickClientNormalApplication"또는 관리되는 양식 플랫폼이 있는 경우" ThickClientManagedApp". 그림 참조.

이제 이 절차에 요청 텍스트를 작성하기 위한 조건을 추가해야 합니다. 이 조건은 "요청 텍스트" 양식의 필수 조건으로 쿼리 디자이너가 생성합니다.

Constructor.OpenModal() = True인 경우 Object.RequestText = Constructor.Text; EndIf;

그러나 쿼리 텍스트(사용자 모드에서 - "QueryText" props 창에서)에서 수동으로 무언가를 변경할 수 있으므로 다시 호출될 때 변경 사항이 QueryConstructor로 이동합니다. 여기에 간단한 조건을 추가합니다.

EmptyString(Object.RequestText)이 아니면 Constructor.Text = Object.RequestText; EndIf;

이제 1c8 플랫폼에 내장된 쿼리 생성자를 연결했습니다. 작업을 살펴보겠습니다. 이렇게 하려면 다음 방법 중 하나를 사용하여 씩 클라이언트 모드에서 1C: Enterprise를 시작합니다. 1) 구성 관리자의 기본 메뉴 - 디버그 - 디버깅 시작 - ThickClient; 2) 또는 구성기의 제어판에 이러한 키를 제공한 경우 - 두꺼운 점이 있는 노란색 원이 있는 버튼을 누르십시오. 그림 참조:

사용자 모드 1cEnterprise8이 시작되고 처리를 찾아 실행하고 "쿼리 생성자" 버튼을 클릭하고 플랫폼에 빌드된 생성자가 어떻게 열리는지 확인합니다. 그림 참조.

따라서 Query Constructor가 우리와 함께 시작되었습니다. 이미 미래 쿼리를 추가할 수 있지만 생성한 쿼리가 어떻게 처리되는지 확인하는 데 관심이 있습니다! 그리고 이를 위해 콘솔 형식을 편집할 때 구성자에서 또 다른 버튼을 생성해야 합니다. 이를 "요청 실행"이라고 부르겠습니다. "작업"에서 "요청 실행" 버튼의 속성을 클릭하면 프로그램 코드를 처리할 위치를 묻는 메뉴가 다시 나타납니다. 이 경우 "클라이언트와 서버 모두에서"를 선택합니다. ", 다시 Form Module로 들어갑니다.

클라이언트에 있는 ExecuteRequest() 프로시저에서 사용자가 요청 텍스트를 입력하지 않은 경우 조건을 기록하지만 실행을 요청합니다.

If EmptyString (Object.RequestText) then report("요청 텍스트를 입력하세요!"); EndIf;

시스템은 이미 ExecuteRequestOnServer 프로시저()에 대한 링크를 자동으로 생성했습니다. - 좋습니다. 서버에서 실행되는 이 절차로 이동하여 여기에 입력한 요청의 실행 코드를 작성하십시오.

여기에 옵션이 있습니다. 쿼리 작성과 관련된 모든 표현식을 독립적으로 작성할 수 있습니다. 수동으로, 그러나 더 간단한 옵션이 있습니다 - 프로시저 내에서 마우스 오른쪽 버튼을 누르고 드롭다운 메뉴에서 "결과를 처리하는 쿼리 생성자, 그림 참조" 항목을 선택하십시오.

"항목, 모달 창" 쿼리 텍스트를 찾을 수 없는 결과 처리가 있는 쿼리 생성자를 클릭한 경우 새로 생성하시겠습니까? " 확인 "버튼 - 모달 창이 드롭아웃됩니다." 요청에서 선택한 필드가 없으면 "확인"을 클릭하십시오.

그 후 RunRequestOnServer() 프로시저 내에서 다음과 같은 기성품 공백이 나타납니다.

생성자가 만든 표현식으로 넘어갑시다.

요청.텍스트 = "";

Request.Text = Object.Request 텍스트;

모든 것이 매우 간단합니다. 처리 양식의 "요청 실행" 버튼은 이미 실제로 작동 중입니다. 지금까지는 매개변수 없이 간단한 요청만 처리할 수 있지만 가장 중요한 것은 작동한다는 것입니다! 처리 양식의 "값 테이블"속성에 요청 결과를 시각적으로 표시하는 것만 남아 있습니다. "값 테이블" 속성은 "표 형식 문서" 유형이라는 것을 상기시켜 드리겠습니다. 그렇지 않으면 사용자 모드에서 결과를 볼 수 없기 때문입니다. 테이블 형식 문서 또는 레이아웃은 항상 사용자에게 테이블 형식 데이터를 표시하는 데 관여합니다. 값 테이블을 통해 데이터를 표시할 수 있기를 정말 원합니다. 사용이 매우 간단하고 친숙하지만 불행히도, 값 테이블은 개발자에게 필요한 도구 일뿐이며 그것을 사용하여 화면에 데이터를 표시 할 수 없습니다 ...

표 형식 문서가 무엇인지 자세히 살펴보겠습니다. Excel 시트와 비슷합니다. 표 셀을 통해서만 특정 셀의 레코드에 접근할 수 있습니다. 여기서는 영역이라고 하지만 우리가 직접 범위를 선택할 수 있습니다. 이 영역을 하나의 특정 셀로:

그래서 우리는 스프레드시트 문서가 무엇인지 알아냈고 이 스프레드시트 문서의 특정 셀에 있는 요청 데이터를 결정해야 한다고 스스로 결정했습니다. 그러나 생각해 봅시다. 생성자가 우리를 위해 그렇게 빨리 생성한 "QueryResult"는 무엇입니까? 도움말 열기 - 쿼리 결과는 해당 속성이 있는 테이블입니다! 그림 참조.

그리고 이제 QueryResult = Query.Run (); (생성자에 의해 생성됨) 표현식 뒤에 작성하면 이것은 Collections에 대한 간단한 루프입니다.

QueryResult.Columns 루프 보고서의 각 ColumnName에 대해(ColumnName.Name); 사이클 종료;

이 주기가 끝나면 지금은 생성자에 의해 자동으로 작성된 모든 표현식을 도킹합니다. 그리고 씩 클라이언트에서 1C: Enterprise8을 시작합니다. 간단한 쿼리를 만들고(쿼리 디자이너를 사용할 수 있습니다. 이미 작동합니다) "쿼리 실행" 버튼을 클릭합니다.

그러면 창 하단에 메시지가 표시됩니다. QueryResult 테이블은 간단한 쿼리를 생성하여 선택한 필드의 이름을 저장합니다.

이제 스프레드시트 문서에 고통의 필드 이름을 표시해 보겠습니다.

QueryResult.Columns 루프 셀의 각 ColumnName에 대해 = Object.InquiryTable.Area(1, QueryResult.Columns.Index(ColumnName) +1); 셀.텍스트 = 열 이름.이름; 사이클 종료;

쿼리 데이터로 세부 정보를 표시하기 위해 생성자에 의해 자동으로 생성된 표현식을 분리하고 쿼리 자체의 "SelectDetailedRecords" 루프 내부에 열 이름을 표시하는 데 사용한 것과 똑같은 주기를 삽입합니다. 이제야 "QueryResult" 테이블의 데이터를 셀 텍스트로 전송하고 선택 자체의 데이터를 전송해야 하는 경우 쿼리의 세부 선택 필드를 참조하는 방법을 도움말에서 살펴보겠습니다.

FetchDetailedRecords = QueryResult.Select(); 동안 FetchDetailRecords.Next () 루프 // 첫 번째 줄에는 이미 테이블 열의 이름이 있으므로 첫 번째 줄 아래에 데이터를 로드합니다.RowNumberDoc = Object.QuestTable.TableTable + 1; QueryResult.Columns 루프 셀의 각 ColumnName에 대해 = Object.QueryTable.Area(RowNumberDoc, QueryResult.Columns.Index(ColumnName) +1); Cell.Text = SelectionDetailedRecords [ColumnName.Name]; 사이클 종료; 사이클 종료;

모든 것을 확인하고 씩 클라이언트에서 엔터프라이즈를 로드하고 매개 변수 없이 간단한 쿼리를 입력하고 "쿼리 실행" 버튼을 클릭합니다(그림 참조).

만세, 모든 것이 작동합니다!!!

쿼리 콘솔을 열거나 닫을 때 다시 "QueryText" 필드에 콘솔을 닫기 전에 작업한 쿼리 텍스트가 작성되면 매우 편리합니다. 이렇게 하려면 양식 속성 = Autosave를 활성화하기만 하면 됩니다(그림 참조).

그게 다야, 우리 콘솔이 작동하고 있습니다. 매개변수가 지정된 더 복잡한 쿼리를 작성할 수 있도록 "FindParameters" 버튼과 "요청 실행" 버튼 코드를 생성해야 합니다. "FindParameters" 버튼 코드는 클라이언트와 서버에서. 추가로 서버 프로시저에서 "Request.FindParameters()" 표현식을 사용하여 "RequestText" 창에서 전달된 텍스트로 요청을 시작하고 전달된 매개변수를 찾아 루프에 입력하기만 하면 됩니다. "RequestParameters" 양식의 표 섹션으로. 채워진 매개변수 테이블에서 "ExecuteRequest" 프로시저로 전송하는 것을 잊지 마십시오.

사용자 모드에서 매개변수 창과 요청 텍스트 창을 지우는 몇 가지 버튼을 콘솔에 추가할 수도 있습니다.

쿼리 콘솔을 사용할 준비가 되었습니다. 쿼리 콘솔과 같은 간단하고 강력한 도구를 사용하여 창의적인 솔루션을 성공적으로 만드시기 바랍니다!

이 처리는 1c8.3 플랫폼(관리되는 형식)에 작성되었으며 씩 클라이언트에서 실행됩니다. 또한 일반적인 형식과 관리되는 형식 모두에서 1c8.2 플랫폼에 작성할 수 있습니다.

다운로드에는 방금 만든 쿼리 콘솔의 샘플이 포함되어 있습니다.

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

쿼리 콘솔 업그레이드:

1) 이제 쿼리 빌더가 내장된 자체 제작한 쿼리 콘솔이 일반 및 관리 양식의 씩 클라이언트와 씬 및 웹 클라이언트와 같은 모든 클라이언트에서 실행됩니다.

ps 내장된 쿼리 빌더의 형식과 보기는 콘솔을 실행한 클라이언트에 따라 다릅니다.(저는 개인적으로 일반 클라이언트에서 쿼리 빌더 형식을 선호합니다)

& OnClient 프로시저 QueryConstructor(Command) // 표준 QueryConstructor 호출은 팻 클라이언트에서만 가능 # If FatClientManagedApplication 또는 FatClientNormalApplication Then Constructor = New QueryConstructor; EmptyString(Object.RequestText)이 아니면 Constructor.Text = Object.RequestText; EndIf; Constructor.OpenModal() = True인 경우 Object.RequestText = Constructor.Text; EndIf; // # 그렇지 않으면 // Inform("쿼리 빌더 호출은 씩 클라이언트에서만 가능합니다"); // 반품; // # EndIf # 그렇지 않으면 Report("씬 클라이언트에서 쿼리 빌더를 실행 중입니다. 형식과 성능 속도가 약간 다릅니다!"); 생성자 = 새 QueryConstructor(); EmptyString(Object.RequestText)이 아니면 Constructor.Text = Object.RequestText; EndIf; 생성자 경고 = 새 AlertDescription("ExecuteAfter ConstructorClosed", ThisForm); Constructor.Show(생성자 경고); #EndIf EndProcedure & AtClient 프로시저 ExecuteAfterClosingConstructor(결과, ConstructorParameters) 내보내기 // 결과 = 확인을 클릭하여 콘솔을 닫은 경우 텍스트 Object.QueryText = ShortLP(결과); //공장!!! 절차 종료

2) 매개변수에 전달된 임시 테이블로 복잡한 쿼리를 입력하는 기능을 간단한 쿼리 콘솔에 추가했습니다 !!! 이 메커니즘은 전문 콘솔에서와 같이 XML 코드를 사용하지 않고 매우 간단하고 우아한 것으로 판명되었습니다.

코드 자체와 임시 테이블의 매개변수에 대한 전송 메커니즘에 대한 절차는 두 번째 첨부 파일에서 찾을 수 있습니다. 매개변수에서 임시 테이블의 나만의 버전을 개발하기 시작한 방법은 https://forum.infostart.ru/forum9/topic183700/ 링크에서 찾을 수 있습니다.

이제 임시 테이블이 매개변수에 전달될 때 복잡한 쿼리에 대해 콘솔을 사용하는 방법입니다. 예를 들어 여기에서 이 요청의 코드를 사용할 수 있습니다.

SELECT ExternalData.Product, ExternalData.Quantity PUT ExternalData FROM 및 ExternalData AS ExternalData; //////////////////////////////////////////////////// // //////////////////////////// SELECT ExternalData.Product, ExternalData.Quantity, THERE IS NULL(나머지 ItemsBalance.NumberRemainment, 0) AS Field1 , THERE IS NULL (나머지 항목 Balances.Quantity Balance, 0) - ExternalData.Quantity AS Remaining FROM ExternalData AS ExternalData LEFT JOIN 누적 레지스터.남은 항목.제품 남아

위의 쿼리 코드와 유사하게 데이터 개체를 고려하여 복잡한 쿼리를 생성할 수 있습니다.

따라서 쿼리 디자이너에서 위의 쿼리를 만들고 디자이너를 닫습니다. 쿼리 텍스트는 "QueryText" 콘솔 필드로 이동하고 "FindParameters" 버튼을 클릭하면 행 = "ExternalData", ValueType = "ValuesTable"이 매개변수 테이블에 나타납니다(그림 참조).

이 매개변수 테이블에서 날짜 매개변수(예: 오늘 날짜)를 입력한 다음 "ExternalData" 임시 테이블의 매개변수를 편집하려면 클릭하고 세 개의 점에 대해 "값 테이블"이 있는 필드를 클릭 - 선택 유형의 유형이 나타나면 줄을 클릭하면 메커니즘이 양식의 페이지를 전환하고 이 임시 테이블을 수동으로 입력해야 합니다.

여기에서 "매개변수의 임시 테이블 이름" 필드 하단에 있는 "임시 테이블" 페이지와 동시에 임시 테이블의 이름이 나타납니다(매개변수 테이블에서 복사됨).

지금까지 "TimeTables" 페이지에서 우리는 하나의 빈 테이블을 보았습니다 - 이것은 우리의 미래 임시 테이블의 유형 테이블입니다. "추가" 버튼을 사용하여 변수의 이름과 미래 테이블의 유형을 추가하십시오. 주의하십시오. 이름과 유형은 & ExternalData에 대한 요청에서 지정한 것과 일치해야 합니다.

이제 "UpdateTemporaryTable" 버튼을 누르면 여기에 두 번째 테이블이 생깁니다. "추가" 버튼을 통해 임시 테이블의 데이터로 직접 채울 것입니다.

모든 것, 우리는 처리 첫 번째 페이지의 매개 변수 테이블에 쿼리 매개 변수의 기본 데이터를 입력했는지 여부를 다시 확인하고 "요청 실행"버튼을 클릭 할 수 있습니다. 모든 것이 고려되고 제한이 있습니다. 임시 테이블의 매개변수로 전송된 데이터에 대해

ps 속성의 이름과 유형(첫 번째 테이블에서)을 입력할 때 실수를 한 경우 - 콘솔을 닫았다가 다시 엽니다 - 임시 데이터 테이블이 지워집니다 - 유형 테이블을 다시 편집할 수 있고 새 데이터 테이블이 다시 생성되었습니다.

그게 다야, 우리는 우리 자신의 손으로 매우 강력한 작업 도구를 만들 수 있습니다. 또한 콘솔은 전문적인 콘솔에 비해 여전히 매우 민첩합니다. 이는 개발자에게 매우 큰 장점입니다! 물론 이제 콘솔은 모든 클라이언트에서 작동합니다! 당신의 창조적 인 발전에 행운을 빕니다 !!!

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

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

저는 쿼리 콘솔로 지속적으로 작업하고 있으며 최근에 임시 테이블이 첫 번째 요청 패킷에 있지 않고 다음 요청 패킷에 있는 매우 흥미로운 쿼리를 발견했습니다. 여기에서 내 콘솔이 약간 조롱을 받았습니다... 그녀는 또 다른 업그레이드를 하십시오.

따라서 쿼리에 있는 임시 테이블의 관리자가 자신과 함께 작업하고 있음을 항상 이해하는 것은 아닙니다.) 따라서 임시 테이블의 바로 이 관리자를 명시적으로 설정해야 합니다.

& AtServer 프로시저 ExecuteRequestAtServer() // upgrade2-TemporaryTables 관리자의 명시적 정의! 관리자 BT = 임시 테이블의 새 관리자; 요청 = 새 요청; // Upgrade2-TemporaryTables 관리자의 명시적 정의! Request.TemporaryTablesManager = VTManager; Request.Text = Object.Request 텍스트;

이 콘솔 버전은 세 번째 다운로드에 있습니다.

의심할 여지 없이 1C Enterprise 8의 가장 강력한 도구 중 하나는 쿼리 빌더입니다. 생성자는 1C 언어의 쿼리 작업을 위한 시각적 도구입니다. 그러나 생성자에는 한 가지 큰 단점이 있습니다. 쿼리 결과를 표시하지 않는다는 것입니다. 이 단점특히 1C: Enterprise 8.3 및 8.2 플랫폼에 적용된 솔루션의 초보 개발자가 느꼈습니다.

또한 숙련 된 1C 프로그래머조차도 다양한 섹션의 infobase 데이터에 대한 "일회성"분석을해야하는 상황에 종종 직면하지만, 나는 그것을 위해 본격적인 보고서를 쓰고 싶지 않습니다. 그러한 "일회성 결론".

이 모든 경우와 다른 많은 경우에 대해 외부 처리를 제공하게 된 것을 기쁘게 생각합니다. 1C 8.3 및 1C 8.2에 대한 결과를 처리할 수 있는 쿼리 콘솔!


1C 8.3 및 1C 8.2용 쿼리 콘솔의 주요 기능:

범용 처리, 플랫폼 1C: Enterprise 8.1 - 8.3의 모든 구성에서 실행
- 1C: 엔터프라이즈 모드에서 실행
- 요청을 수동으로 작성하거나 쿼리 생성자를 호출할 수 있습니다.
- 쿼리 결과를 보여줍니다.
- 쿼리 콘솔에서 직접 보고서 매개변수를 지정할 수 있습니다.
- 요청 파일을 저장하고 로드하는 방법을 알고 있습니다.

쿼리 콘솔을 시작하려면 1C: 엔터프라이즈 모드에서 구성을 실행하고 디스크에 저장된 다른 파일과 마찬가지로 쿼리 콘솔의 외부 처리를 열어야 합니다. 이러한 처리는 애플리케이션 솔루션의 일부인 것처럼 정확히 동일한 방식으로 작동합니다.


외부 처리 쿼리 콘솔은 친숙한 인터페이스와 대부분의 기능 1C: Enterprise 8.3 및 8.2의 쿼리를 작성하기 위한 표준 툴킷. 또한 쿼리, 일괄 쿼리 및 임시 테이블의 결과를 검색할 수 있습니다.

쿼리 콘솔은 씩 클라이언트와 씬 클라이언트 모두에서 시스템의 클라이언트-서버 및 파일-서버 모드에서 모두 실행됩니다! 쿼리 콘솔에는 쿼리 텍스트 필드의 상황에 맞는 메뉴를 통해 호출할 수 있는 통합 표준 쿼리 생성자가 있습니다.

중요한!쿼리 생성자는 씬 클라이언트에서 작동하지 않습니다. 생성자를 여는 메뉴 항목은 사용할 수 없습니다. 씩 클라이언트에서 쿼리 빌더를 사용할 수 있습니다!


씬 클라이언트에서는 수동으로만 요청을 작성할 수 있으며 다른 모든 기능은 변경 없이 작동합니다.

쿼리 텍스트를 "수동으로" 작성하는 기능은 "불필요한" 적이 없지만 쿼리 디자이너를 사용하는 것이 더 편리합니다.

논평.

안타깝게도 관리되는 응용 프로그램에서는 AcquaintanceWith 쿼리 처리에서 쿼리 생성자를 사용할 수 없습니다. 다음으로 이동하여 이 처리에 사용할 수 있습니다. 일반 모드, 하지만 우리는 이것을 하지 않을 것입니다.

QueryConstructor 처리를 만들고 ReportsAndProcessing 하위 시스템에서 정의해 보겠습니다.

처리 양식을 만들고 "테이블 문서" 유형의 "TabDok" 양식 속성과 "요청 실행" 작업과 함께 "요청 실행" 명령을 추가해 보겠습니다. 그런 다음 양식으로 끌어다 놓습니다.

명령이 작동하도록 양식 모듈에서 프로시저를 작성합니다.

& 온클라이언트

프로시저 실행 요청(명령)

실행요청서버();

절차 종료

서버에서(&O)

절차 종료

우리는 서버에서 호출된 프로시저 내부로 들어가고 컨텍스트 메뉴에서 "결과를 처리하는 쿼리 생성자"를 호출합니다(그림 2.65).

그림 2.65 결과 처리가 포함된 쿼리 생성자

처리 유형을 "스프레드시트 문서로 출력"으로 설정하고 "다음" 버튼 또는 "테이블 및 필드" 탭을 클릭합니다.

디자이너의 "테이블 및 필드" 탭에서 시스템에 현재 존재하는 테이블을 볼 수 있습니다(왼쪽 부분의 제목은 "데이터베이스"임)(그림 2.66).

그림 2.67 쿼리 생성자

쿼리에서 가져올 데이터인 테이블은 "테이블" 영역으로 전송되고 쿼리에 필요한 필드는 "필드" 영역으로 전송됩니다. 그림 2.68과 같이 해보자.

그림 2.68 쿼리 생성자

여기에서 기본 보기 필드인 "PRESENTATION(Good ReceiptProducts.Nomenclature)"을 제거했습니다.

생성자로 작업할 때 언제든지 수신된 요청 텍스트를 볼 수 있습니다. 이 작업을 완료하려면 디자이너 양식의 왼쪽 하단에 있는 "요청" 버튼을 클릭해야 합니다(그림 2.69).

"편집" 버튼을 클릭하여 요청 텍스트를 수동으로 편집할 수 있습니다.

관행. "OK"버튼을 누르고 사용자 모드에서 처리를 확인합니다. 요청을 실행하는 동안 얻은 데이터를 분석하면 명명 항목의 "반복"을 찾을 수 있습니다(성공하지 못한 경우 "영수증" 문서를 복사하여 게시할 수 있음).

QueryConstructor 처리에서 ExecuteRequestServer() 프로시저로 돌아가 컨텍스트 메뉴에서 결과 처리와 함께 Query 생성자를 다시 호출합니다.

쿼리 결과를 "축소"해야 하는 경우 이 용도로 쿼리 디자이너의 "그룹화" 탭을 사용할 수 있습니다.

그룹화를 정의할 때 다음 규칙을 준수해야 합니다. 모든 쿼리 선택 필드는 그룹화(접기)가 수행되는 필드, 중첩 테이블의 필드(그룹화가 수행되는 필드에 상대적인 합계 필드) 밖으로) 그리고 안으로 집계 함수... 그룹화를 정의합시다(그림 2.70).

그림 2.70 쿼리 생성자

어떤 조건에 따라 요청에 의해 수신된 데이터를 선택해야 하는 경우 이 경우 "조건" 탭을 사용해야 할 수 있습니다. Incoming of the Goods(수량 = 10)를 선택합시다(그림 2.71).

그림 2.71 쿼리 생성자 조건.

그림과 같은 방식으로 조건을 정의하면 요청이 실행되지 않는다는 점에 주의한다.

상황을 해결하는 두 가지 방법이 있습니다.

    "P ..." 플래그를 표시하여 조건을 재정의합니다.

    요청 자체의 텍스트를 변경하는 기능 활용("요청 편집" 버튼을 클릭하여 얻음).

수동 변경 자체는 숫자 "10" 앞의 "&" 기호를 제거해야 한다는 사실로 구성됩니다. 요청 텍스트의 이 기호는 요청 매개변수를 정의하며, 여기에는 요청을 실행하기 전에 추가로 모든 값이 작성되어야 합니다. "EditRequest" 버튼을 클릭하고 편집합니다(그림 2.72).

그림 2.73 쿼리 편집

"추가" 탭에서 여러 플래그(쿼리 언어의 "선택" 키워드 관련)를 표시하고 쿼리를 변경하기 위한 테이블 구성을 결정할 수 있습니다(그림 2.74).

그림 2.74 추가 쿼리 기능

"Unions / Aliases" 탭에서 "Aliases"를 지정하여 필드 이름을 변경할 수 있지만 우리는 그렇게 하지 않습니다.

"순서" 탭에서 쿼리 결과의 레코드 정렬 순서를 정의할 수 있습니다(그림 2.75).

그림 2.75 레코드 정렬 순서

"Autoordering" 플래그에 주의하십시오. 참조 유형 필드를 기준으로 정렬하는 데 사용할 수 있습니다.

"합계" 섹션을 정의할 때 쿼리 결과로 "추가" 합계를 준비하십시오. 이러한 레코드와 함께 쿼리 결과는 계층 구조가 됩니다(그림 2.76).

그림 2.76 쿼리 생성자의 결과.

여러 유형의 합계를 지정할 수 있습니다.

    요소(쿼리 결과 선택에 그룹화 합계 및 세부 레코드가 있음)

    계층 구조(질의 결과 선택 시 일반적으로 계층별 총계 레코드, 그룹화별 총계 레코드, 상세 레코드가 있음);

    계층만(쿼리 결과 선택 시, 일반적으로 계층에 대한 합계가 있음).

생성자의 "확인" 버튼을 클릭하면 "레이아웃"이 생성되고 ExecuteRequestServer() 프로시저의 코드가 양식 모듈에 작성됩니다.

서버에서(&O)

프로시저 ExecuteRequestServer()

// ((REQUEST_CONSTRUCTOR_With_RESULT_PROCESSING

// 이 프래그먼트는 생성자에 의해 빌드되었습니다.

// 생성자를 재사용하면 수동으로 변경한 내용이 손실됩니다 !!!

레이아웃 = Processing.RequestConstructor.Get 레이아웃("레이아웃");

요청 = 새 요청;

요청.텍스트 =

| 상품 수령상품. 명칭 AS 명칭,

| AMOUNT(상품 입고상품.수량) AS 수량,

| AMOUNT(입고상품.금액) AS 금액

| 문서.입고 상품.상품

| 어떻게 품목 제품

| 상품도착상품.수량> 1

| 로드 바이

| 상품도착상품명칭

| 주문하기

| 수량,

| 손실 금액

| SUM(수량),

| SUM(금액)

| 명명법 계층 구조 ";

결과 = Query.Run();

AreaHeader = Layout.GetArea("제목");

AreaFooter = Layout.GetArea("바닥글");

AreaTableHead = Layout.GetArea("TableHeat");

TableFooterArea = Layout.GetArea("TableFooter");

ScopeNomenclatureHierarchy = Layout.GetScope("명명 계층 구조");

ScopeNomenclature = Layout.GetScope("명명");

TabDoc.Clear();

TabDoc.Display(범위 헤더);

TabDoc.Display(ScopeTablesHap);

TabDoc.StartAutoGroupLines();

FetchNomenclature = Result.Choose(QueryResult Bypass.On 그룹화);

동안 SampleNomenclature.Next() 주기

IfSetupNomenclature.RecordType() = QueryRecordType.TotalBy Hierarchy 다음

범위 = ScopeNomenclatureHierarchy;

범위 = 범위 명명법;

EndIf;

Region.Parameters.Fill(선택 명명법);

TabDoc.Display(범위, SelectionNomenclature.Level());

사이클 종료;

TabDoc.FinishAutoGroupLines();

TabDoc.Display(AreaFooterTables);

TabDok.Display(지하 지역);

//)) REQUEST_CONSTRUCTOR WITH_RESULT_PROCESSING



관련 기사: