1c 표준 양식 설정을 지정합니다. 보고서의 선택 사항입니다. 설정 빌더의 뉘앙스. 양식 설정 및 목록 작업

1C 8.3의 하위 시스템— 구성 명령 인터페이스 구축을 담당하는 메타데이터 트리 객체입니다.

아래 기사에서는 버전 8.2부터 시작하는 하위 시스템에 대해 설명합니다.

사실 버전 8.1(및 일반 8.2 응용 프로그램)에도 하위 시스템이 있었지만 완전히 다른 목적으로 사용되었으며 사용자보다는 개발자에게 더 적합했습니다. 8.1에서는 하위 시스템을 사용하여 일반적으로 다양한 기능이 분리되었습니다. 하위 시스템은 다양한 1C 구성을 결합할 때도 도움이 되었습니다. 전송할 시스템을 지정할 수 있었습니다.

1C 하위 시스템 및 프로그래머 인터페이스

버전 8.3 및 8.2에서 하위 시스템은 명령 사용자 인터페이스를 구축하기 위한 기본 도구입니다. 하위 시스템 메타데이터 개체에는 계층적 구조인터페이스에서 "하위 메뉴"를 구성하려면 하위 하위 시스템을 추가해야 합니다.

속성 및 설정

구성기에서 하위 시스템의 설정과 속성을 살펴보겠습니다.

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

명령 인터페이스에 포함— 이 플래그를 설정하는 것을 잊었다면, 하위 시스템이 표시되지 않습니다인터페이스에서.

버튼을 누르면 현재 사용자의 역할에 따라 인터페이스를 구성할 수 있는 인터페이스 설정 패널이 열립니다.

그림— 하위 시스템에 할당된 그림이 엔터프라이즈 모드로 표시됩니다. 표준 이미지를 선택하거나 먼저 구성 개체로 생성하여 자신만의 이미지를 추가할 수 있습니다. 그림:

탭에서 기능적 옵션이 하위 시스템이 사용되는 기능 옵션 목록을 나타냅니다.

화합물특정 하위 시스템에 참여하는 메타데이터 개체 집합을 정의합니다.

탭에서 다른하위 시스템에 대한 도움말을 설명하고 설정을 지정할 수 있습니다. 도움말 콘텐츠에 포함— 이 도움말 섹션을 일반 도움말 섹션에 포함할지 여부 배경 정보구성으로.

관리형 인터페이스에 보고서 또는 처리가 표시되지 않는 경우

이 문제는 초보 개발자 사이에서 매우 자주 발생합니다. 보고서나 처리가 하위 시스템에 추가된 것 같지만 표시되지 않습니다.

첫 번째 이유는 개체에 제어된 형식이 정의되어 있지 않기 때문일 수 있습니다.

두 번째 이유는 개체의 명령 탭에서 "표준 명령 사용" 확인란이 선택되어 있기 때문입니다. 이는 공개 처리를 위해 자체 절차를 설명하거나 표준 절차를 사용할 수 있기 때문입니다.

이 기사는 "1C 개발의 첫 번째 단계" 시리즈를 계속합니다.

1C:Enterprise 플랫폼 구성에서는 정보를 표시할 때 다양한 정보 목록을 표시하는 테이블이 가장 자주 사용됩니다. 이러한 목록 작업은 목록 형식과 요소(처리) 형식으로 모두 발생할 수 있습니다.

이 기사에서는 목록을 사용자 정의하기 위한 이러한 옵션에 대해 알아보고 사용자 측에서 양식을 사용자 정의하는 다른 기능도 살펴보겠습니다.

적용 가능성

이 기사에서는 1C 8.3.4.482 플랫폼에서 개발된 구성의 "버전 8.2" 버전의 관리 인터페이스에 대해 설명합니다.

이 인터페이스를 지원하는 구성으로 작업하는 경우 해당 정보는 귀하와 관련이 있습니다. 현재 버전플랫폼.

새로운 Taxi 인터페이스에서 작업하는 경우 일부 구성 명령의 이름과 일반적인 작업 순서가 약간 다를 수 있습니다.

또한 현재 버전의 플랫폼에는 목록에 새로운 검색 기능이 추가되었습니다.

양식 설정 및 목록 작업

관리되는 양식 요소의 경우 가시성 및 일부 기타 속성을 변경할 수 있습니다. 이러한 목적을 위해 관리 가능한 형태로메뉴에 모든 행동들아이템 역할을 한다 양식 변경.

이 명령을 클릭하면 “양식 설정” 창이 나타납니다.

표시되는 창에서 확인란을 사용하여 일부 세부정보의 공개 여부를 변경할 수 있습니다. 이 경우 양식의 크기가 자동으로 조정됩니다.

세부사항의 순서를 변경할 수 있습니다. 새 그룹을 추가하고 세부 사항(요소)을 여기에 배치하여 그룹화 옵션(수평, 수직)을 정의합니다.

그룹에 포함된 세부정보는 이에 따라 게시됩니다. 또한 요소의 너비, 높이, 헤더 데이터와 같은 속성을 구성할 수 있습니다.

양식이 열릴 때 활성화될 속성을 정의할 수 있습니다.

중요한 기능은 양식에 새 필드를 추가하는 기능입니다. 이는 참조 유형 속성을 통해 가능해집니다.

예를 들어, 양식에 참조 유형 속성이 있는 경우 상대방, 추가 가능 연락 담당자, 만약에 이 소품"상대방" 디렉토리에 있습니다.

필요한 경우 추가 필드를 제거할 수 있습니다. 구성자에서 생성된 필드는 삭제할 수 없습니다. 사용자가 설정한 모든 설정이 저장됩니다.

메뉴의 양식 설정 창에서 표준 설정으로 돌아가려면 모든 행동들항목을 선택해야 합니다 설치하다 표준 설정 .

관리되는 인터페이스에서 양식을 사용자 정의하는 것 외에도 목록(디렉터리 요소, 문서)을 사용자 정의할 수 있습니다.

메뉴에 목록 형태로 있음 모든 행동들특수 명령이 포함되어 있습니다 목록 사용자 정의.

“목록 설정” 창이 열립니다. 이 창에서는 조건부 서식 및 그룹화를 선택, 정렬, 정의할 수 있습니다.

그림은 선택 항목을 편집하기 위한 양식을 보여줍니다.

여러 필드를 사용하여 선택할 수 있습니다. 이 경우 기본적으로 AND 조건에 따라 선택이 이루어지며 OR 및 NOT 조건을 사용할 수도 있습니다.

OR(NOT) 조건을 사용하려면 그룹 조건 명령을 사용하여 적절한 그룹(OR 그룹, NOT 그룹)을 추가해야 합니다.

그림은 정렬 필드를 정의하는 양식을 보여줍니다.

그룹화를 구성할 수 있습니다. 그림에서는 그룹화할 필드가 선택되었습니다. 상대방.

다음 그림은 그룹화가 수행되는 방법을 보여줍니다.

목록에 자유롭게 색상을 지정하거나 주어진 조건에 따라 조건부 디자인의 다른 요소(글꼴 선택, 특정 서식)를 적용할 수 있을 뿐만 아니라 서식을 지정할 필드 목록을 선택할 수 있습니다.

그림은 필드 배경의 조건부 디자인 결과를 보여줍니다. 합집합.
금액이 100,000을 초과하는 경우.

계층 구조 모드에서 디렉터리를 볼 수 있다는 점에 유의해야 합니다.

항목을 통해 디렉터리의 계층적 보기를 구성할 수 있습니다. 보기 모드메뉴에 모든 행동들. 다음 옵션 중 하나를 선택할 수 있습니다. 계층적 목록, 목록, 나무.

특정 세부 사항을 기준으로 디렉터리 요소를 그룹화하도록 구성할 수도 있습니다.

예를 들어 공급업체별로 항목을 그룹화할 수 있습니다. 이 예는 "상품 및 서비스 판매" 문서를 거래상대방별로 그룹화한 것과 유사합니다.

편리한 기능은 목록에서 다중 선택 및 후속 그룹 작업 실행(게시, 취소, 삭제 선택 취소)입니다.

키를 누르고 있으면 목록의 개체가 선택됩니다. 옮기다또는 Ctrl 키.

목록에서 특정 값을 검색하는 데에는 고유한 특성이 있습니다. 검색은 선택 모드에서 작동합니다. 검색 조건을 만족하는 행만 남습니다.

현재 열의 값으로 검색하려면 원하는 열에 커서를 놓고 버튼을 클릭하세요. 찾다명령 패널에서. 버튼을 클릭해야 하는 창이 나타납니다. 찾다.

보다 구체적으로 검색하려면 확인란을 사용하세요. 찾은 항목에서 검색.

참조 유형(예: 측정 단위)의 데이터 행을 검색할 때 적절한 검색 옵션을 선택해야 합니다. ...(라인별).

목록과 이를 구성하는 방법으로 마무리됩니다. 다음 기사에서는 계속해서 인터페이스에 대해 알아보고 이전에 이야기하지 않았던 사용자에게 알리는 편리한 도구를 살펴볼 것입니다. 이것은 어떤 종류의 악기인가요? :)

액세스 제어 시스템, 설정 구성자 및 일반적으로 액세스 제어 시스템과 함께 작동하도록 설계된 전체 개체 세트가 무엇인지 말할 필요가 없다고 생각합니다. 코드의 까다로운 작업을 제외하고 주요 사용 영역은 동적 목록과 보고서이며, 두 경우 모두 매우 중요한 기능이 이면에 남아 있습니다. 우리는 프로세스에 참여하는 모든 참가자의 행동 논리와 관계에 대해 생각조차 하지 않는 경우가 많습니다. 우리는 일반적으로 매우 간단한 문제를 해결하거나 플랫폼의 기본값에 의존합니다. 그러나 침묵이 있는 곳에는 내부 논리, 즉 1C의 일종의 "불행"도 있으며, 그 결과는 때로는 원하는 효과를 달성하기 위해 극복하기 어렵고 명확하지 않으며 동시에 충분합니다. 도구를 올바르게 사용하는 것.

관심이 있는 분은 1~4부를 건너뛰고 바로 예제로 넘어가셔도 됩니다.

보고서에 사용되는 경우 ACS 선택 작업에 ​​대해 좀 더 자세히 설명하겠습니다. 내 생각에 행동은 동적 목록, 예약이 많아 마감됩니다. 따라서 보고서의 선택, 약간의 이론 및 구체적인 예가 있습니다.

SP 8.3.6 이상, ITS 섹션(10.3.7.5 절 등), "1C-Enterprise 8 시스템의 전문 개발"(Kazan, 2012, 2권) 책이 사용됩니다. E. Khrustaleva의 책에는 이 주제에 대해 전혀 이해할 수 있는 내용이 전혀 없습니다.

1 부

아시다시피 설정 빌더에는 "설정", "고정 설정"(이하 "FN") 및 "사용자 정의 설정"(이하 "CU") 컬렉션이 있습니다. 보고서에는 여러 옵션이 있을 수 있으며 옵션 N, PN 및 FN 간의 연결은 매우 독특합니다. 그리고, 출처도 잊지 말자 사용 가능한 설정, 그리고 일반적으로 회로 자체인 "조상"은 자체 기본 설정도 가지고 있습니다.

* 설정 – 구성자 모드에서 생성되고 보고서 버전 편집 모드에서 변경된 설정입니다.

* UserSettings – 사용자가 "1C:Enterprise" 모드에서 순전히 인터페이스를 통해 변경하는 설정입니다.

* FixSettings – 내장 언어에서 설정된 설정입니다. 시스템에 의해 암시적으로 설정됩니다. 이 속성에는 해당 매개변수("선택" 구조)를 사용하여 양식으로 전송되는 선택 값이 포함되어 있습니다.

설정과 FN은 디자인이 유사하며 보고서가 존재하는 동안 언제든지 구성을 변경할 수 있는 "데이터 구성 선택" 유형의 "선택" 컬렉션이 있습니다. 동시에 변형 편집을 통해 인터페이스를 변경할 수 있는 설정이 제공되지만 FN에는 전혀 액세스할 수 없습니다. PN은 동일한 요소가 "선택" 자체일 수도 있고 "데이터 구성 선택 요소" 유형의 개별 개체(소위 중첩 개체)일 수도 있는 "죽"입니다. 적절한 방법이 있음에도 불구하고 보고서 자체의 PN이고 디자이너가 "처음부터" 만들지 않은 경우 PN 요소 컬렉션의 구성을 프로그래밍 방식으로 변경하는 것은 불가능합니다. 1C는 "사용자 컬렉션 설정은 레이아웃 설정 데이터와 연결되어 있으므로 구성을 변경할 수 없습니다." ITS는 "내장 언어를 사용하여 속성을 쓸 수 없습니다."라고 말하지만 나중에 살펴보겠지만 PN에 영향을 미칠 수 있습니다. 사물의 "죽"은 내부 커뮤니케이션– 보고서 생성 시, 구성 변경 시 조건의 일관성을 확인합니다. ITS에서는 다음과 같이 읽었습니다. “자체적으로 사용자 정의로 표시된 요소는 추가되지 않습니다. 예를 들어 사용자 정의 선택에는 사용자 정의로 표시된 선택 요소가 포함되지 않습니다. 맞춤 요소가 포함된 요소는 추가되지 않습니다. 예를 들어, 그룹에 사용자 정의로 표시된 요소가 포함되어 있으면 조건 그룹이 추가되지 않습니다. 중첩된 요소의 경우 DisplayMode 속성이 분석되지 않습니다. 함께 추가되거나 추가되지 않습니다. 상위 요소." 따라서 객체의 "선순위"는 배후에서 작동합니다. 이 경우 인터페이스를 통해 변형 및 해당 PN뿐만 아니라 PN 내에서도 모순되는 선택을 지정할 수 있으면 효과를 얻을 수 있습니다.

"선배"가 옵션인 것 같습니다. 그러나 "추가"/"옵션 변경"을 클릭하고 열린 양식의 변경 사항을 확인하면 양식 이벤트 핸들러가 호출됩니다. , 이 경우 선택 사항은 "설정..."에서 호출된 양식의 "기본" 패널에 나타나고 보고서 양식에는 나타나지만 "선택" 탭에는 표시되지 않습니다. 또한 기본 보고서 양식과 "설정..." 양식("사용자 설정에 포함" 플래그가 있는 경우)에 즉시 표시되거나 거기에도 표시되지 않습니다. 그러나 어떤 경우에도 "설정..." 양식의 "선택" 탭에는 없습니다. "기본" 탭, "설정..." 양식 및 기본 보고서 양식 간의 차이점은 "편집 모드" 필드에 의해 결정됩니다(일반 - "설정"에서만, 빠름 - 보고서 양식 자체에서도 마찬가지). 하지만 이건 모두가 알고 있을 것 같아요. 그런데 "Selection"과 "Fast"의 값은 어떤 방식으로든 동기화되지 않고 서로 모순될 수 있지만 보고서 양식과 설정 양식의 "Fast"는 엄격하게 동기화됩니다. 따라서 변형을 편집하면 변형 자체가 변경되지만(ID와 이름은 변경되지 않음) PN은 수정되지 않은 상태로 유지됩니다(즉, 변형에 대해 이야기하는 경우에도, 즉 이를 포함하는 플래그에 대해) PN의 요소).

"옵션 선택..."을 클릭하고 열리는 양식의 변경 사항을 확인하면 다음 순서로 이벤트가 트리거됩니다.

OptionOn 서버 업로드 시

서버의 사용자 설정 구성을 업데이트하는 경우

이 경우 옵션이나 PN은 어떤 식으로든 변경되지 않습니다. 여기에서 옵션과 설정이 연결된 경우 결코 직접 연결되지 않는다는 것이 분명합니다.

"설정..."을 클릭하고 열린 양식에서 변경 사항을 확인하면 이벤트만 트리거됩니다. 서버의 사용자 설정 구성을 업데이트하는 경우(이 경우 PN은 변경되지만 보기와 키(없는 경우)는 수신되지 않습니다. "선택" PN 개체의 요소에 대해 "빠른"이 활성화된 경우 "선택" 외에도 실제 요소는 필드로 나타납니다. 즉, 중첩된 요소와 유사하게 동작합니다. 이러한 설정은 닫을 때 저장되고 다음에 양식을 입력할 때 복원됩니다. 옵션을 건드리거나 변경하지 않습니다.

설정 양식에서 "추가"/"표준 설정 설정"(옵션 편집의 "표준 설정" 항목 포함)을 클릭하면 이벤트만 트리거됩니다. 서버의 사용자 설정 구성을 업데이트하는 경우. 이 경우 옵션은 변경되지만 PN은 변경됩니다. 이전에 옵션이 변경된 경우 변경된 상태로 유지됩니다(변경된 플래그가 재설정되거나 실제 설정이 재설정되지 않음).

변형 편집 양식의 구조 트리에서 "사용자 정의 설정 요소의 속성"을 클릭하면 "선택" 개체가 추가되고 이는 비어 있으며 기존 변형 선택 및 기존 중첩 선택 요소와 어떤 방식으로든 동기화되지 않습니다. 변형은 어떤 식으로든 변경되지 않습니다.

따라서 권장 사항: 코드를 수정하지 않고 옵션이 아닌 보고서 인터페이스에 있도록 "구성자" 모드에서 특정 선택 항목을 설정해야 하는 경우 선택 항목을 조작해서는 안 됩니다. 옵션의 요소는 속성을 변경하지만 "요소 속성..." 및 "사용자 정의 설정" 버튼을 사용하여 선택 자체를 변경합니다.

설정에 나타나는 항목을 PN에 추가하려면 코드나 인터페이스의 작업이 필요하지만 설정을 삭제하고 지우면 업데이트 없이 즉시 PN에 영향을 줍니다. 예를 들면 다음과 같습니다.

Report.SettingsLitter.Settings.Selection.Items.Clear();

보고서 양식을 닫기 전에 시스템에서는 변형이 변경되었는지 여부만 묻습니다. PN에 변경 사항이 있는 경우 질문 없이 자동으로 저장되며 다음 보고서 작업 세션에도 자동으로 적용됩니다.

노트:

설정 적용에 여러 가지 오류가 발생한 경우 먼저 문제에 대한 메시지가 표시된 후 구성이 계속 발생하며 이벤트가 호출됩니다. 그리고 보고서 생성. 이 경우 FN이 존재하더라도 무시되고 설정만 역할을 수행합니다.

"옵션 변경" 양식에 선택 항목을 추가하면 "PN에 포함" 플래그가 설정된 상태로 즉시 수행되지만, 내장 언어의 관점에서 보면 PN은 변경되지 않고 그대로 유지됩니다.

변형 변형 설정과 PN 변형 설정은 직접적인 관련이 없으며 두 가지 다른 변경 방향입니다.

PN에는 무엇보다도 "추가 설정"이 있습니다. 나는 그것이 무엇으로, 언제 채워지는지 결코 이해할 수 없었습니다. 보고서에는 (합작 투자에 따라) 사용자 정의로 "선택 및 조건부 디자인에 표시된" 설정이 포함되어 있지만 추가 세팅모든 경우에 그들은 비어 있었습니다. ITS에는 이에 대한 내용이 없습니다.

합작 투자의 성명에도 불구하고 PN은 xml로 완벽하게 직렬화됩니다.

독립적인 선택 요소와 선택 자체가 모두 포함되어 사용되는 경우 보고서는 올바르게 컴파일되지만 표시되면 최종 레이아웃에 설정된 선택에 대한 정보가 복제됩니다.

보고서 버전 편집을 위한 기본 양식에는 흥미로운 내용이 많이 포함되어 있지만 FN 및 PN에서는 작동하지 않으며 기본 설정을 사용해도 읽기에 더 적합합니다(선택, 순서, 규칙 지우기 제외).

2 부

컬렉션을 통해 설정 및 FN으로 작업하는 것은 거의 항상 허용되지만 "3단계"의 본질이 변하고 있다는 점을 기억하는 것이 중요합니다. 첫 번째 수준에는 항상 액세스 제어 시스템 자체의 기본 설정이 포함되어 있으며 사용 가능한 설정 소스에도 암시적으로 나타납니다. 두 번째 수준 – 사용된 옵션 설정. 그러나 여기서 논리를 사용하면 기본 명령어를 "덮어쓰거나" 무시할 수 있습니다. 그러나 PN으로 작업하면 더 이상 자유가 허용되지 않으며 특별한 방법과 때로는 임시 보조 중간 개체를 사용하여 미묘한 조작을 수행해야 합니다. 예를 들면 다음과 같습니다.

Comp=NewDataCompositionSettingsComposer; // 시작할 수도 있습니다. // comp.Initialize(SomeSettingsComposer.GetSourceofAvailableSettings()); comp.LoadSettings(SomeSettingsComposer.Settings); SomeSettingsComposer.LoadCustomSettings(comp.CustomSettings);

설정 빌더에는 다음과 같은 방법이 있습니다. (), 메소드에 매개변수로 전달된 사용자 설정 값을 로드합니다. 방법 설정 가져오기()를 사용하면 현재 설정의 복사본을 얻을 수 있습니다(사용자 설정을 고려). 방법 다운로드설정()는 전달된 설정을 설정 빌더에 로드합니다(사용자 설정도 키의 존재를 고려하여 전달된 데이터를 기반으로 다시 채워집니다. 아래 예 참조).

기본 설정에 사용자 정의 설정을 적용하는 방법은 다음과 같습니다. 설정 가져오기() 설정 빌더. 다음 작업이 수행됩니다.

* DataCompositionSelectionElement 유형의 경우 요소의 내용이 해당 사용자 정의 설정 요소에 복사됩니다.

* 데이터 레이아웃 선택 유형의 경우 기본 설정에 있고 접근 불가능으로 표시된 요소는 변경되지 않습니다. PN의 요소가 기본 요소로 전송됩니다. 선택 항목 컬렉션의 끝에 추가됩니다.

* DataCompositionSelectionElementGroup 유형의 경우 기본 설정의 해당 요소에 Usage 속성이 설정됩니다(PN 요소 사용 부호에 따라).

3부

최종 설정을 구성할 때 ITS를 인용하면 다양한 설정이 다음과 같이 결합됩니다.

* 모든 유형의 설정이 완전히 사용자 정의로 표시되면 결과 설정에 PN이 포함됩니다. 이 경우 설정 요소가 사용할 수 없는 것으로 표시되면 이러한 설정은 설정 작성기.설정 속성의 결과 설정에 배치됩니다.

* 모든 유형의 설정이 전체가 아닌 요소별로 사용자 지정으로 표시되는 경우 사용자 지정으로 표시된 요소는 설정 Composer.CustomSettings 속성의 결과 설정으로 가져오고 사용할 수 없는 것으로 표시된 요소는 설정 Composer.Settings 속성의 결과 설정입니다.

* 고정 설정은 "있는 그대로" 결과 설정에 추가됩니다. 이 경우 FN과 PN에 동일한 이름의 설정이 있는 경우(예: 조건의 왼쪽 값이 동일한 선택) 상황은 허용되지 않습니다. 나는 이러한 조건의 모든 속성이 완전히 일치하는 것조차 금지된다는 점에 주목합니다. 솔직히 말하면 조금 비논리적이다.

설정의 일부 조각이 기능 옵션의 적용을 받고 제한되어야 하는 경우 시스템은 "조용히" 작동합니다. 시스템은 이 조각을 모든 곳에서 제거하고 아무 것도 보고하지 않으며 해당 조각과 관련된 프로그램 조작 중에 , "유휴" 오류를 처리합니다. 생성되지 않지만 코드에도 아무런 영향이 없습니다. 그러나 릴리스마다 다르게 동작할 수도 있습니다.

4부.

보고서 양식 확장은 "FN" 및 "PN" 매개변수를 제공하지만 이를 양식에 전달하여 직접 작성하는 것은 권장되지 않습니다. 실험에서 알 수 있듯이 탬버린을 사용하여 추가로 춤을 추지 않으면 이러한 매개 변수의 내용이 무시됩니다. 열기 프로세스 중에 링커가 초기화될 때와 이전에 저장된 PN이 수신될 때 덮어쓰여집니다. PN 키를 사용하여 작업하는 것이 좋습니다. 이를 통해 설정 저장소에서 키를 검색한 다음 열고 사용할 수 있습니다. 이 작업은 호출 양식이 아닌 보고서 양식 측면에서 자동으로 수행됩니다.

"사용 가능한 설정 소스" 매개변수는 양식이 서버에서 생성될 때 빌더 정보로 자동 변환되며 재정의될 수 없습니다. 또는 오히려 가능하지만 관련 객체의 전체 체인을 완전히 재정의한 후에만 효과가 있습니다. 여기서 GetSourceAvailableSettings()는 모든 양식 열기 이벤트가 끝날 때까지 정의되지 않음을 반환합니다.

본질적으로 핵심 매개변수가 아닌 양식 매개변수는 열 때 구성 플래그가 설정된 경우 여러 이벤트에 걸쳐 효과를 "확장"합니다. 네, 이벤트에 처리 중CheckFillOnServer, 열기 및 형성 중에 호출되는 "선택" 매개변수를 사용할 수 있지만 이를 사용하면 사용자가 "생성" 버튼을 클릭하기만 하면 더 이상 사용할 수 없습니다. 이는 열 때 구성이 활성화되어 있고 이벤트가 끝날 때만 제어가 클라이언트로 전송되어 호출되는 경우 이러한 모든 이벤트가 서버에 대한 한 번의 "방문"으로 처리된다는 사실 때문입니다. 열 때. 이 경우 키가 아닌 매개변수는 자연스럽게 손실됩니다.

열 때 보고서를 생성하기 위해 플래그가 있는 양식을 열 때 이벤트를 실행하는 일반적인 순서("전문 개발"에 설명된 것보다 약간 더 큼):

서버에서 생성될 때

서버에 옵션을 업로드하기 전

OptionOn 서버 업로드 시

사용자 설정을 서버에 업로드하기 전에

서버에서 사용자 설정을 로드하는 경우

서버의 사용자 설정 구성을 업데이트하는 경우

처리 중CheckFillOnServer

열 때

이 경우 특별한 노력을 하지 않는 한 옵션이나 PN이 변경되지 않습니다.

5부.

이제 구성 및 사전 지정된 선택 사항을 사용하여 보고서 양식을 여는 작업을 더 자세히 살펴보겠습니다. 간략한 정보이에 대한 정보는 ITS와 방법론적 권장사항, 그러나 거기에는 원리 자체만 다루고 미묘한 부분은 드러나지 않습니다. 따라서 상황에 맞게 보고서를 호출하려면 해당 양식에 True와 동일한 "GenerateOnOpen" 매개 변수를 전달해야 합니다. 및 구조를 포함하는 Selection 매개변수입니다. 구조 키는 ACS 필드 또는 ACS 매개변수의 이름이고 값은 해당 값입니다. SP를 인용하면 구조 키의 이름에 해당하는 이름을 가진 ACS 매개변수가 있는 경우 값이 해당 매개변수로 설정됩니다. 매개변수는 없지만 필드가 있는 경우 선택 항목이 이 필드에 추가됩니다. 동시에 동일한 이름의 매개변수와 필드가 있는 경우 시스템은 이를 조용히 무시하고 아무것도 설치하지 않습니다.

"전문적 개발"은 이벤트에서 "즉시" PN을 변경(예: 가로채기 및 재구성)하는 예를 제공합니다. 사용자 설정을 서버에 업로드하기 전에, 현재 PN을 포함하는 인수가 전달됩니다. 실제로 항상 그런 것은 아닙니다. 예를 들어 이전 세션에서 PN을 저장할 때 오류가 발생하거나 설정, FN 및 PN 간의 불일치로 인해 "설정" 인수가 비어 있는 경우가 있을 수 있습니다. 그리고 가장 흥미로운 점은 이번 이벤트에서 완전히 재구성하는 것이 불가능하다는 것입니다. 이는 이벤트 시퀀스의 "마지막"에만 수행할 수 있습니다. 처리 중CheckFillOnServer.

서버에 PN을 로드하기 전에 무엇이 있는지 살펴보겠습니다.

간단한 경우, ACS에 사전 설정된 항목이 없고 PN에 요소가 포함되지 않은 경우 상황은 다음과 같습니다. 설정 – 비어 있습니다. FN – 올바른 선택을 포함합니다. Mon에는 빈 선택 항목이 포함되어 있습니다. 모양은 올바르게 작동하지만 사용자의 관점에서 인터페이스는 내부와 모순되며 실망스럽습니다. 선택이 작동하지만 표시되지 않습니다. 마찬가지로 옵션 구조 설정에서 PN에서 선택을 활성화하면 보고서도 선택 사항을 고려하여 작성되지만 사용자에게는 선택 사항이 표시되지 않습니다.

구성기의 ACS 설정에서 사전 선택(빈 값과 동일)을 설정하고 이를 PN에 포함해 보겠습니다. 이론적으로 FN은 설정을 작성해야 하며 이는 PN을 채워야 하지만 실제로는 설정 - 필수 요소가 있는 선택 항목이 있지만 오른쪽 값이 비어 있고 FN에 올바른 선택 항목이 포함되어 있으며 PN에는 아직 아무것도 포함되어 있지 않습니다. 또한 이 경우 보고서가 작성되지 않습니다. Select 매개변수에 전달된 값에도 불구하고 오른쪽 선택 값은 비어 있습니다.

PN 요소를 사용해도 결과가 나오지 않습니다. PN 요소의 경우 "사용" 플래그와 "빠른" 참여만 변경할 수 있습니다. 인터페이스의 선택 값은 비어 있으며 시스템에서는 오류가 생성되지 않습니다. 마찬가지로 PN 선택 작업 시도도 작동합니다. 디버거에서는 올바른 값이 올바르게 채워진 것으로 표시되지만 인터페이스에는 아무 것도 표시되지 않습니다. PN의 구성을 변경하는 것은 불가능하다는 점을 상기시켜 드리겠습니다. 따라서 추가적인 트릭이 필요합니다. 예를 들어:

서버 프로시저에서 &On SetPresetSelections(UserSettings) 매개변수가 아닌 경우 Properties.Property("Selection") 그런 다음 EndIf를 반환합니다. 매개변수.Selection.Quantity()=0인 경우 EndIf를 반환합니다. rTypeEO=Type("데이터구성 선택 요소"); 각 키에 대해 FromParameters.Selection Loop pField=NewDataCompositionField(key.Key); // If (ValueType(kiz.Value)=Type("Array") orValueType(kiz.Value)=Type("ValueList")) and kiz.Value.Quantity()>1 Then pViewComparison=DataCompositionComparisonType.InList; 그렇지 않은 경우 pComparisonType=DataCompositionComparisonType.Equals; endIf; // pNecessarySelection = 정의되지 않음; // 사용자 설정에 Selection이 있는지 확인합니다. pNecessaryEO=Undefound; // 사용자 설정에 별도의 DataComposition 선택 요소가 있는지 확인합니다. 각 elnastr에 대해 UserSettings.Elements 사이클에서 TypeValue(elnastr) = Type("DataComposition Selection") 및 pNecessarySelection=Un Defined Then // pNecessarySelection= 하나만 있을 수 있습니다. 엘나스트르; // 이는 루프 외부에서 수행될 수 있지만 요소를 위해 사용자 설정을 정렬해야 합니다... 그렇지 않은 경우 TypeZnch(elnastr) = pTypeEO Then // 이것은 선택 요소이므로 여러 개가 있을 수 있습니다. 그 중 초기화되지 않았거나 필수 필드가 있는 항목에 관심이 있습니다. If elstr.LeftValue=pField 또는 elstr.LeftValue=Undefound and rNeedEO=Un Define Then pNeedEO=elstr; endIf; endIf; 엔드사이클; // pRequiredSelection인 경우<>정의되지 않음 그러면 // 우선순위로 적용됩니다. pNecessaryEOFromSelection = 정의되지 않음; 각 elotb에 대해 pNecessarySelection.Elements 주기에서 elotb.LeftValue=pField이면 pNecessaryEOfromSelection=elotb; 중단 EndIf; 엔드사이클; 선택의 pNecessary EO = 정의되지 않은 경우 선택의 pNecessary EO = pNecessary Selection.Elements.Add(pType of EO); pNeedEOFromSelection.LeftValue=pField; endIf; pNecessaryEOfromSelection.ComparisonType=pComparisonType; pNecessaryEOFromSelection.RightValue=kiz.Value; pNecessaryEOFromSelection.Use=True; // rNeededEO.Use=False; 그렇지 않은 경우 pNecessarySelection=정의되지 않음 및 pNecessaryEO<>정의되지 않음 그런 다음 // pNecessaryEO.LeftValue=pField 요소를 추가합니다. pNecessaryEO.ComparisonType=pComparisonType; pNeedEO.RightValue=kiz.Value; pNeedEO.Use=참; endIf; pNeed=정의되지 않음; Report.ComposerSettings.Settings.Selection.Elements 루프에서 // 우호적인 방식으로 각 elotb에 대해 재귀 검색이 있어야 합니다! TypeValue(elotb)=pTypeEO이고 elotb.LeftValue=pField인 경우 pNeed=elotb; 중단 EndIf; 엔드사이클; pNeed = 정의되지 않은 경우 pNeed = Report.Settings Composer.Settings.Selection.Elements.Add(pEOType); pNeed.LeftValue=pMargin; endIf; pNecessary.ComparisonType=pComparisonType; pNeed.RightValue=kiz.Value; pNeed.Use=참; //엔드사이클; Report.Settings Composer.FixedSettings.Selection.Items.Clear(); // 그렇지 않으면 요소가 교차/모순된다고 말할 것입니다. 절차 끝

이것을 호출하는 가장 정확한 방법은 다음과 같습니다.

서버 프로시저에서 채우기 확인 처리(실패, 세부 정보 확인) 사전 정의된 선택 사항 설정(보고서. 설정 링커. 사용자 설정); 절차 종료

그러면 디렉터리 형식 등의 컨텍스트 호출은 다음과 같습니다.

&OnClient 프로시저 OpenReport(Command) If ValueFilled(Object.Link) Then ot=New Structure("LinkToDirectory",Object.Link); // SDS 보고서에서 필드 이름이 지정되는 방식입니다. FormParameter = New Structure ("Selection, generateWhen opening", select, True); OpenForm("Report.Report1.Form.ReportForm",FormParameters,ThisForm); endIf; 절차 종료

6부.

필요한 경우 작업하는 동안 보고서 설정을 변경하십시오. 시작할 때와 연 후에 가장 올바른 방법은 "처음부터" 변경하는 것입니다. ACS 설정에서. ACS 체계 변경은 양식 데이터가 아닌 보고서 개체(또는 외부 보고서)를 통해서만 수행되며 그 자체로는 아무 것도 변경되지 않습니다. 설정 및 PN에서는 이전과 동일하게 유지되고 FN은 그대로 유지될 수 있습니다. 비어 있는. 따라서 우리의 업무에 따라:

실행 후

보고서.설정 Composer.LoadSettings(SKD.DefaultSettings)

옵션만 변경되며 그 이상은 없습니다.

2항에 제시된 기술을 수행한 후(“중개자” 및 방법 사용) 사용자 정의 설정 로드()

인터페이스를 사용하여 현재 PN을 재설정하는 경우에만 작동합니다. 옵션 자체는 변경되어도 변경되지 않습니다. 이 경우 Selection이 변경되지만 새로운 Selection Element가 추가되지는 않습니다.

실행 후

ThisForm.CreateFormElementsUserSettings(,DisplayModeDataCompositionSettings.All)

플랫폼은 조용히 무너집니다. 여러 다른 릴리스에서 테스트되었습니다. 그리고 빠른 설정에 대해서만 설정 표시 모드를 호출하는 것은 의미가 없습니다. 구성에 영향을 미치지 않았으므로 어쨌든 아무것도 변경되지 않습니다.

그리고 내부 선택 사항뿐만 아니라 보고서 양식 및 관련 양식의 표시도 완전히 변경해야 하므로 선택 사항만 변경하거나 다음과 같이 진행해야 합니다.

&서버 프로시저에서 ChangeSKD() pObject = Form AttributesValue("Report"); 선택=pObject.DataCompositionScheme.SettingsOptions.Get(0).Settings.Selection; eo = Selection.Elements.Add(Type("DataCompositionSelectionElement")); eo.LeftValue=NewDataCompositionField("LinkToDirectory.Field1"); eo.ComparisonType=DataCompositionComparisonType.Equals; eo.RightValue=참; eo.Use=True; ValueВFormAttributes(pObject,"보고서"); Report.SettingsLitter.LoadSettings(pObject.DataCompositionSchema.DefaultSettings); Report.SettingsComposer.Restore(); // 바람직하지만 여전히 FN에는 영향을 미치지 않습니다. // 사실 이것은 정확히 각 이메일에 대한 PN 구성의 변경이라고 할 수 있는 것입니다. From Report.ComponentSettings.Settings.Selection.Elements Cycle email.DisplayMode=ElementDisplayModeDataCompositionSettings.QuickAccess; 빈 문자열(el.UserSettingsIdentifier) ​​​​그런 다음 // PN 요소에 대해 electronicSetIdentifier 메서드를 사용할 수 있습니다. SP의 도움말을 참조하세요. 모든 것이 매우 명확합니다. e.UserSettingsIdentifier="ID123"; // 중요 - 식별자는 UUID나 GUID가 아닌 무엇이든 가능합니다! el.ViewUserSettings="테스트"; endIf; 엔드사이클; comp=NewDataCompositionSettingsComposer; comp.LoadSettings(pObject.DataCompositionScheme.DefaultSettings); Report.SettingsComposer.LoadCustomSettings(comp.CustomSettings); 각 이메일에 대해 From Report.Settings Composer.CustomSettings.Elements Cycle email.DisplayMode=ItemDisplayModeDataLayoutSettings.QuickAccess; // EndCycle을 보고서 양식으로 가져옵니다. // 이제 다음과 같은 효과가 발생합니다. ThisForm.CreateFormElementsUserSettings(,DisplayModeDataCompositionSettings.QuickAccess); 절차 종료

실제로 이 역학을 오랫동안 연구할 수 있습니다. 이 출판물은 하나의 특정한 문제를 해결하는 방법을 연구하는 것에서 출발했기 때문에 매우 일방적입니다. 그러나 나는 설정의 내부 논리, 특히 Khrstalev보다 더 미묘하지 않은 사용자 논리에 대해 별도의 책을 쓸 수 있다고 생각합니다. 불행하게도 나에게는 그럴 에너지나 시간이 없다. 특정 개발이 ​​유용하다고 생각하는 사람은 이미 좋은 사람입니다.

일부 사항은 실험적으로 명확해졌으므로 논란의 여지가 있습니다. 더 많은 것을 아는 사람들은 비판과 논평을 요청합니다.