양식 요소의 프로그래밍 방식 추가 1s. 관리되는 양식 세부 정보(1Cv8). 응용 프로그램 개체 데이터를 양식 데이터로 변환하는 방법

양식 속성은 데이터와의 연결을 제공합니다. 이 경우 세부 정보 중 하나(그리고 하나만)를 기본 정보로 지정할 수 있습니다. 양식을 그리는 객체에 대한 데이터 유형일 필요는 없습니다. 그러나 양식의 동작은 기본 속성의 데이터 유형에 따라 다릅니다. 양식의 동작을 변경하는 것 외에도 양식 모듈의 컨텍스트에 변경 사항이 있습니다. 폼의 메소드와 속성과 함께 메인 속성의 값인 객체의 메소드와 속성을 사용할 수 있게 됩니다. "자유 형식" 유형의 양식에는 기본 속성이 없는 것이 중요합니다. 이 경우 양식의 동작은 사용자의 설정에 의해서만 결정됩니다. 기본 사항을 살펴보겠습니다.

시험 1C의 질문 10.05: 플랫폼 전문가. 기본 양식 속성은 무엇입니까?

  1. 전체 양식의 데이터 소스를 지정합니다.
  2. 양식이 기본 속성에 대해 지정된 유형의 데이터로 작업할 수 있도록 플랫폼의 표준 기능을 정의합니다.
  3. 양식의 로컬 컨텍스트에서 개체의 속성에 프로그래밍 방식으로 액세스하는 기능을 제공하려면
  4. 양식 대화 상자에서 개체 속성의 시각화 제공
  5. 2와 3 수정
  6. 1과 2 수정

정답은 여섯 번째입니다. 위 참조.


시험 1C의 질문 10.06: 플랫폼 전문가. 양식 세부 정보는 무엇입니까?
  1. 양식에 표시, 편집 또는 저장되는 데이터의 구성을 설명하려면
  2. 양식에서 데이터를 표시 및 편집하려면
  3. 1과 2 수정

정답은 세 번째입니다. 둘 다입니다.

시험 1C의 질문 10.07: 플랫폼 전문가. 임의의 관리되는 양식에 기본 속성을 할당하려면...

  1. 양식 속성의 속성에서 "기본 속성" 상자를 선택해야 합니다.
  2. 필수 양식 속성을 선택하여 양식의 "데이터" 속성을 채워야 합니다.

정답은 두 번째입니다.

시험 1C의 질문 10.08: 플랫폼 전문가. 임의의 일반 형식에 기본 속성을 할당하려면...
  1. 양식을 기본 양식으로 만들어야 하며 기본 속성은 자동으로 결정됩니다.
  2. 양식 속성의 속성에서 "기본 속성" 상자를 선택해야 합니다.
  3. "편집" 메뉴, "주 속성" 항목을 입력하고 원하는 값을 선택해야 합니다.
  4. 필수 양식 속성을 선택하여 양식의 "데이터" 속성을 채워야 합니다.

정답은 네 번째입니다.

주요 소품은 굵게 강조 표시됩니다.

시험 1C의 질문 10.09: 플랫폼 전문가. 하나의 기본 양식 속성이 있는 경우 다른 기본 양식 속성을 추가할 수 있습니까?
  1. 그것은 불가능
  2. form 속성의 속성에 적절한 값을 할당함으로써 가능하다.
  3. "Form" 개체에 액세스할 때만 프로그래밍 방식으로 수행할 수 있습니다.
  4. 양식의 해당 속성에 다른 값을 추가하여 가능합니다.

정답은 첫 번째이고 주요 속성은 엄격하게 하나입니다. 개체와의 연결이 명확해야 합니다.

시험 1C의 질문 10.113: 플랫폼 전문가. 그림에 표시된 양식의 세부 사항 중 주요 사항은 무엇입니까?

  1. ListCurrencyRates
  2. 디렉토리객체
  3. 디렉토리 양식에는 기본 속성이 없습니다.
  4. 디렉토리 형식에는 모든 기본 세부 정보가 있습니다.
정답은 두 번째 - 굵은 글씨체입니다.

양식 편집기응용 프로그램 솔루션 개체의 형태를 만들고 편집하는 데 사용됩니다. 개체 양식은 시스템에서 사용자가 작업하는 동안 데이터를 시각적으로 표시하는 데 사용됩니다.

모든 형식은 여러 구성 요소의 조합입니다.

  • 요소 - 양식의 시각적 표현을 정의하고 사용자와 상호 작용하는 개체,
  • 명령 인터페이스 - 양식에 표시되는 명령 세트.
  • 속성 - 양식이 작업에서 데이터를 사용하는 객체.
  • 명령 - 이 특정 형식으로 정의된 작업,
  • 매개 변수 - 값이 양식 자체를 특징 짓는 객체는 생성 중에 사용되며 양식의 "수명" 동안 일정하게 유지됩니다.
  • 모듈 - 요소 작업 및 이벤트 처리를 담당하는 내장 언어의 프로그램.

양식 편집기에는 모든 양식 구성 요소를 편집할 수 있는 여러 탭이 있습니다.

별도의 창에서 편집기 하단에 1C:Enterprise 모드의 양식 모양이 표시됩니다.

요소 편집

양식 편집기를 사용하면 개발자가 다양한 옵션을 사용하여 양식의 모양을 변경할 수 있습니다. 즉, 양식이 1C:Enterprise 모드에서 갖게 되는 모양입니다. 우리는 이러한 가능성의 주요 목록을 나열합니다.

페이지, 북마크

양식 편집기를 사용하면 양식에 고유한 인식 가능한 스타일을 부여하고, 데이터에 쉽게 액세스하고, 많은 정보를 제한된 영역에 맞추는 데 도움이 되는 사용자 정의 요소를 양식에 추가할 수 있습니다.

편집기를 사용하면 양식에 여러 요소를 추가할 수 있습니다. 그룹 - 페이지, 각각은 여러 요소를 포함할 수 있습니다. 그룹 - 페이지.

예를 들어 문서 양식에는 하나의 요소가 포함될 수 있습니다. 그룹 - 페이지, 여러 요소가 종속됨 그룹 - 페이지헤더 포함 영상, 형질그리고 설명:

그런 다음 1C:Enterprise 모드에서 다음과 같이 표시됩니다.

각 그룹의 제목 - 페이지는 별도의 탭에 표시됩니다. 개발자는 책갈피의 표시 모드를 아래 또는 위에서 설정할 수 있습니다.

예를 들어 책갈피는 맨 아래에 배치할 수 있습니다.

집단

편집기를 사용하면 양식에 다양한 요소를 추가할 수 있습니다. add 명령을 사용하거나 양식 속성을 요소 트리로 끌어서 요소를 추가할 수 있습니다.

모든 양식 요소는 계층 구조로 표현되며, 그 루트는 양식 자체입니다. 이를 통해 원하는 양식 요소로 빠르게 이동할 수 있습니다.

트리에서 요소를 위/아래에 배치하고 다른 요소에 종속시키고 그룹 요소의 속성을 설정하여 사용자가 데이터를 입력하고 편집할 때 양식 컨트롤을 무시하는 순서를 설정할 수 있습니다. 1C:Enterprise 모드에서 양식 요소는 계층의 순서와 그룹에 대해 선택된 그룹 유형(수직 또는 수평)에 따라 탐색됩니다.

구분자

디바이더는 크기를 변경하지 않고 양식의 공간을 재분배하는 데 사용할 수 있는 특수 요소입니다. 1C:Enterprise 모드의 플랫폼은 이러한 요소를 양식에 독립적으로 추가합니다. 구분 기호는 다른 요소의 배치 가능성과 구분 기호의 방향을 고려하여 마우스로 "캡처"되고 제한 내에서 양식 내에서 이동할 수 있는 기능이 있습니다.

구분선을 이동할 때 구분선과 연결된 모든 요소의 크기가 조정되거나 이동됩니다.

양식 모듈

양식 모듈을 편집하기 위해 구성자는 텍스트 및 모듈 편집기를 호출합니다. 이 편집기는 개발자에게 모듈 텍스트를 만들고 수정하기 위한 다양한 옵션을 제공합니다.

양식 세부정보

목록에서 양식 속성을 편집하여 새 속성을 생성하고 기존 속성을 변경하고 불필요한 속성을 삭제할 수 있습니다. 속성 속성은 속성 팔레트를 사용하여 설정됩니다.

양식에 일반 양식과 달리 양식의 동작을 결정하는 주요 속성이 있는 경우 굵게 강조 표시됩니다.

양식 명령 인터페이스

양식의 명령 인터페이스는 트리에서 편집됩니다. 트리의 주요 분기에는 양식이 표시될 창의 탐색 모음과 양식의 명령 모음에 추가된 명령이 포함됩니다. 이러한 각 분기 내에서 명령은 표준 그룹으로 나뉩니다.

플랫폼은 명령 인터페이스에 일부 명령을 자동으로 추가합니다. 이와 함께 개발자는 양식 명령 목록 또는 사용 가능한 전역 명령 목록에서 명령을 끌어 명령 인터페이스에 명령을 독립적으로 추가할 수 있습니다. 명령 인터페이스에 추가된 모든 명령에 대해 개발자는 구성에 정의된 다양한 역할에 대한 가시성을 설정할 수 있습니다.

모양 명령

양식 명령은 목록에서 편집됩니다. 개발자는 속성 팔레트를 사용하여 양식 명령을 추가, 제거하고 속성을 설정할 수 있습니다. 사용자가 이 명령을 호출할 때 실행될 명령에 프로시저를 할당하는 것을 포함합니다.

북마크 표준 명령그리고 글로벌 팀개발자는 플랫폼에서 생성하고 이 양식에서 사용할 수 있는 명령 목록을 제공합니다. 속성은 변경할 수 없으며 양식에만 추가할 수 있습니다.

개발자는 마우스를 사용하여 명령을 양식의 명령 인터페이스로 끌어다 놓을 수 있습니다. 예를 들어 이 명령을 양식에 있는 버튼으로 표시하려는 경우 명령을 요소 트리로 직접 끌어다 놓을 수도 있습니다.

양식 옵션

양식 매개변수는 목록에서 편집됩니다. 개발자는 속성 팔레트를 사용하여 양식 매개변수를 추가, 제거하고 해당 속성을 설정할 수 있습니다.

1C:Enterprise 플랫폼을 사용하면 관리되는 양식의 요소를 프로그래밍 방식으로 추가 및 수정할 수 있습니다. 이것이 왜 필요한지 봅시다.

다음과 같은 경우에 프로그램 방식으로 양식을 수정해야 할 수 있습니다.

  • 후속 업데이트 절차를 용이하게 하기 위해 일반적인 구성을 완료할 때. 이 경우 양식 모듈만 변경됩니다. 모듈은 양식보다 업데이트하기가 훨씬 쉽습니다.
  • 일부 일반 알고리즘을 구현할 때. 예를 들어, 하위 시스템에 연결된 모든 개체에 대한 "개체 세부 정보 편집 금지" 하위 시스템에서 세부 정보 편집 가능성을 활성화하기 위해 프로그래밍 방식으로 버튼이 생성됩니다.
  • 특정 알고리즘을 구현할 때. 예를 들어, 추가 세부 사항을 편집하기 위한 필드는 명명 참조 책에 생성됩니다.

관리되는 양식에서 프로그래밍 방식으로 다음을 추가, 수정 및 제거할 수 있습니다.

  • 요건;
  • 로컬 명령;
  • 집단.

이 모든 작업은 서버에서만 가능합니다.

프로그래밍 방식 재구성에는 다음과 같은 제한 사항이 있습니다.

  • 프로그래밍 방식으로 추가된 속성/명령/요소만 삭제할 수 있습니다. 구성자에서 생성된 개체는 프로그래밍 방식으로 삭제할 수 없습니다.
  • 속성을 기본 속성으로 할당하는 것은 불가능합니다.

양식 명령 변경

개체에 대한 명령 구성을 관리하려면 매니지드폼컬렉션이 있다

    추가하다 (< ИмяКоманды >)

    수량 ()

    찾다 (< ИмяКоманды >)

    삭제 (< Команда >)

Commands 컬렉션은 클라이언트와 서버 모두에서 사용할 수 있습니다. 컬렉션 수정(Add() 및 Remove() 메서드)은 서버에서만 가능합니다. 클라이언트와 서버 모두에서 요소 수(메소드 Find() 및 Quantity())를 검색하고 가져올 수 있습니다.

양식 명령 작업의 예로 "변경 기록 ..."이라는 제목의 새 ChangeHistory 명령을 만들어 처리기를 호출합니다. 디스플레이 기록() . 생성은 양식이 열릴 때 수행됩니다.

서버에서(&O)
절차 OnCreateOnServer(실패, StandardProcessing)
= 명령. 추가하다( "변화의 역사");
. 액션 = ;
. 제목 = "변화의 역사...";
종료 절차
클라이언트에서(&A)
절차 Connected_DisplayHistory(명령)
// 명령 동작
종료 절차

명령 처리기는 형식에 있어야 하며 컴파일 지시문 &AtClient 가 있어야 합니다.

양식 세부정보 변경

양식 속성의 구성 읽기는 함수에 의해 수행됩니다. 세부 정보 가져오기(< Путь >) FormAttributes 유형의 배열을 반환합니다. 함수 매개변수는 상위 속성에 대한 경로를 지정합니다(문자열로). 매개변수가 생략되거나 빈 문자열이 지정되면 최상위 자격 증명이 반환됩니다.

세부 사항 변경은 메소드로 수행됩니다. 편집요구사항(<추가된 세부 정보>, <이동식 세부 정보>) 물체 매니지드폼. 옵션 추가된 세부 정보그리고 이동식 세부 정보 Form Requisite 유형의 요소가 있는 배열이 전달됩니다.

주목!

세부 사항 구성을 변경하는 프로세스는 리소스 집약적입니다. 실제로 양식이 다시 만들어지고 있습니다. 이와 관련하여 양식의 세부 사항에 대한 작업은 배치 모드에서 수행됩니다.

Buyer라는 새 양식 속성을 만들어 보겠습니다.


addedAttributes = 새 배열;
세부 정보를 추가했습니다. 추가(새 양식 속성("구매자", 새 TypeDescription("DirectoryReference.Counterparties"), "클라이언트");

// 속성 구성 변경
);

양식 요소 변경

개체의 요소 구성을 관리하려면 매니지드폼컬렉션이 있다 집단. 컬렉션에는 여러 가지 방법이 있습니다.

    끼워 넣다 (< Имя>, < ТипЭлемента>, < Родитель>, < Элемент >)

    추가하다 (< Имя>, < ТипЭлемента>, < Родитель >)

    수량 ()

    찾다 (< Имя >)

    이동하다(< Элемент>, < Родитель>, < МестоРасположения >)

    삭제 (< Элемент >)

Elements 컬렉션은 클라이언트와 서버 모두에서 사용할 수 있습니다. 컬렉션 수정(Insert 메서드 () , 추가(), 이동(), 삭제()는 서버에서만 가능합니다. 클라이언트와 서버 모두에서 요소 수(메소드 Find() 및 Quantity())를 검색하고 가져올 수 있습니다. 컬렉션 요소는 다음과 같습니다.

  • 그룹폼;
  • 테이블폼;
  • 폼필드;
  • 버튼폼.

프로그래밍 방식으로 이벤트 핸들러를 양식 요소에 할당할 수 있습니다. 이를 위해 방법은 세트액션(< ИмяСобытия>, < Действие >) .

명령, 속성 및 양식 요소로 작업하는 가장 일반적인 실제 예를 살펴보겠습니다.

명령 및 관련 버튼 추가:

// 팀 생성
= 명령. 추가하다( "변화의 역사");
. 액션 = "연결된_디스플레이 기록"; // 양식에는 지정된 이름의 프로시저가 포함되어야 합니다.
. 헤더 = "변화의 역사...";
// 버튼을 생성하고 명령과 연결
요소 = 아이템. 추가하다( "변화의 역사", 유형("폼 버튼" ));
요소.명령 이름 = "변화의 역사";

속성 및 관련 입력 필드 추가:

// 추가된 내용에 대한 설명
addedAttributes = 새 배열;
세부 정보를 추가했습니다. 추가하다(새 양식 속성("구매자", 새 유형 설명( "참조 링크. 상대방"), "고객" ));
// 속성의 구성 변경
EditAttributes(AddedAttributes);
// 입력 필드 생성 및 속성 연결
요소 = 아이템. Add("고객" , Type("FormField" ));
요소 . 보기 = ViewFormFields. 입력 필드;
요소 . PathToData= "구매자" ;

폼 요소에 이벤트 핸들러 할당:

아이템 구매자. 세트액션("변경될 때", "플러그인_구매자 변경");

클라이언트에서(&A)
절차 Plugin_BuyerOnChange(요소 )
// 이벤트 액션
종료 절차

주목!

메소드를 사용하여 코드에서 이벤트 핸들러로 설치된 프로시저 세트액션(), Connected_ 접두사를 사용하는 것이 좋습니다.

주목!

관리되는 양식의 세부사항, 명령 및 요소에 대한 프로그래밍 방식 검색 및 변경의 예와 함께 처리를 다운로드할 수 있습니다.

양식은 탭에 계층적으로 위치한 다양한 양식 요소를 통해 제어됩니다. 집단양식 생성자. 가장 중요한 요소는 요소 계층의 맨 위에 있는 양식 자체이며 나머지 요소는 이에 종속됩니다.

모든 양식 요소는 필드, 그룹화 요소, 버튼, 장식 및 테이블의 5개 그룹으로 나눌 수 있습니다. 내 기사에서 각 그룹을 분석합니다. 이 기사에서는 필드 요소 유형 중 하나를 탐색하기 시작할 것입니다. 입력 필드, 하지만 그 전에 양식에 요소를 추가하는 방법을 알아보겠습니다.

양식에 요소 추가

이것은 매우 간단하게 수행됩니다. 요소를 선택해야 합니다. 양식양식 디자인 요소 창에서 추가 버튼을 클릭합니다. 그런 다음 원하는 요소 유형을 선택해야 하는 창이 열립니다.

선택 후 원하는 항목이 창에 나타납니다. 집단.

관리되는 양식 요소 필드

관리되는 양식 요소를 살펴보겠습니다. 필드. 이 요소는 양식에 정보를 입력하는 데 필요합니다. 또한 모든 정보를 표시합니다. 이 요소를 양식에 추가하면 오른쪽에 양식 요소 속성 팔레트가 열립니다. 지금은 DataPath와 View라는 두 가지 속성에 관심이 있어야 합니다.

DataPath 속성에서 개발자는 form 요소를 원하는 form 속성과 연결할 수 있습니다. 요소가 추가된 후 입력 필드양식 자체에는 표시되지 않았습니다. 이것은 우리의 새로운 요소가 와 관련이 없기 때문입니다. 예를 들어, 처리 양식에서 서로 다른 기본 유형이 있는 여러 속성과 참조 유형이 있는 하나의 속성을 만들었습니다.

이제 새로 추가된 양식 요소를 속성 중 하나와 연결해 보겠습니다. 이를 위해 요소의 DataPath 속성에서 필요한 속성을 선택합니다.

그런 다음 DataPath 및 View 속성이 채워지고 요소 자체가 양식 보기에 표시됩니다.

요소 속성에 주의 보다. 이 속성은 입력 필드의 기능을 정의합니다. 이 속성에 대해 다른 값을 선택할 수 있습니다.

선택한 값에 따라 기능이 결정됩니다. 위 그림에서 값이 선택되었습니다. 입력 필드, 즉. 이 입력 필드에 모든 값을 입력할 수 있으며 값을 선택하면 비문 필드, 그러면 아무것도 입력할 수 없습니다.

이 속성 값 보다입력 필드는 사용자에게 도움말 정보를 표시해야 할 때 선택하는 것이 편리합니다.

이제 유형이 있는 새 양식 요소를 추가해 보겠습니다. 입력 필드그리고 소품에 연결 세부정보날짜이미 친숙한 DataPath 속성을 통해

보시다시피 입력 필드의 모양이 변경되었으며 View 속성에 대한 가능한 값 선택도 변경됩니다.

따라서 우리는 입력 필드의 기능이 속성 유형에 따라 다르다는 결론을 내립니다.

유형이 있는 소품의 경우 부울 View 속성의 다음 값을 사용할 수 있습니다.

그리고 참조 유형이 있는 속성의 경우 Kind 속성의 다른 값을 사용할 수 있습니다.

실용적인 예를 사용하여 양식 요소에 대한 자세한 작업은 "1C의 개발 기본 사항: 택시"에 나와 있습니다. 12단계로 관리되는 애플리케이션 개발.

때로는 1C에서 프로그래밍 언어를 배우는 것이 어렵고 어려운 것처럼 보입니다. 사실, 1C로 프로그래밍하는 것은 쉽습니다. 내 책은 1C의 프로그래밍을 쉽고 빠르게 마스터하는 데 도움이 될 것입니다. 및 "1C의 개발 기본 사항: 택시"

내 책 "11단계의 1C 프로그래밍"을 통해 1C 프로그래밍 배우기

  1. 복잡한 기술 용어가 없습니다.
  2. 700페이지가 넘는 실용적인 자료.
  3. 각 작업에는 사진(스크린샷)이 함께 제공됩니다.
  4. 가정 학습을 위한 작업 모음입니다.
  5. 이 책은 초보자를 위해 명확하고 간단한 언어로 작성되었습니다.

이 책은 이미 프로그래밍을 시작했고 이 주제에 대해 특정 어려움을 겪고 있는 사람들과 오랫동안 프로그래밍을 해왔지만 1C 관리 양식으로 작업한 적이 없는 사람들에게 적합합니다.

  1. 복잡한 기술 용어가 없습니다.
  2. 600페이지가 넘는 실용적인 자료;
  3. 각 예에는 사진(스크린샷)이 함께 제공됩니다.
  4. 책은 PDF 형식으로 이메일로 보내드립니다. 모든 장치에서 열 수 있습니다!

15% 할인을 위한 프로모션 코드 - 48PVX헤유


이 수업이 문제를 해결하는 데 도움이 되거나, 마음에 들었거나, 유용했다면 금액을 이체하여 내 프로젝트를 지원할 수 있습니다.

수동으로 지불할 수 있습니다:

Yandex.Money — 410012882996301
웹머니 - R955262494655

내 그룹에 가입하세요.

그리고 1C 8.2 환경에서 코드 구조화, 관리되는 형태에 대한 데이터 전송 객체.

소개

"관리되는 형식"의 개념과 1C 플랫폼의 관련 개념에 대한 간단한 설명으로 시작하겠습니다. 플랫폼 전문가는 이 섹션을 건너뛸 수 있습니다.

2008년 1C: Enterprise 8.2 플랫폼의 새 버전(이하 Managed Application이라고 함)이 출시되어 인터페이스 작업의 전체 계층을 완전히 변경합니다. 여기에는 명령 인터페이스, 양식 및 창 시스템이 포함됩니다. 이는 구성에서 사용자 인터페이스 개발 모델을 변경할 뿐만 아니라 클라이언트 애플리케이션과 서버 간의 기능 분리를 위한 새로운 아키텍처를 제안합니다.
관리되는 애플리케이션은 다음 유형의 클라이언트를 지원합니다.

  • 씩 클라이언트(일반 및 관리 실행 모드)
  • 씬 클라이언트
  • 웹 클라이언트
관리되는 응용 프로그램은 새로운 기술을 기반으로 구축된 양식을 사용합니다. 그들은 불려 관리되는 양식. 쉽게 전환할 수 있도록 이전 양식(일명 일반 양식)도 지원되지만 해당 기능은 개발되지 않았으며 리치 클라이언트 시작 모드에서만 사용할 수 있습니다.
개발자를 위한 관리되는 양식의 주요 차이점:
  • 구조에 대한 "픽셀별" 설명이 아닌 선언적입니다. 요소의 특정 배치는 양식이 표시될 때 시스템에 의해 자동으로 수행됩니다.
  • 양식의 모든 기능은 양식에 설명되어 있습니다. 세부그리고 명령. 세부 정보는 양식이 작동하는 데이터이고 명령은 수행되는 작업입니다.
  • 양식은 서버와 클라이언트 모두에서 실행됩니다.
  • 클라이언트의 컨텍스트에서 거의 모든 응용 프로그램 유형을 사용할 수 없으므로 정보 베이스의 데이터를 변경하는 것이 불가능합니다.
  • 각 메소드 또는 양식 변수에 대해 지정해야 합니다. 컴파일 지시문실행 위치(클라이언트 또는 서버) 및 양식 컨텍스트에 대한 액세스 여부를 지정하는 A.
다음은 양식 메서드를 컴파일하기 위한 지시문입니다.
  • 클라이언트에서(&A)
  • 서버에서(&O)
  • &OnServerWithoutContext
  • 클라이언트에서(&A)서버에서(컨텍스트 없음)
위의 내용을 설명하겠습니다. 스크린샷은 개발 모드에서 관리되는 양식과 해당 모듈의 예를 보여줍니다. 선언적 설명, 소품, 컴파일 지시문 등을 찾습니다.

모든 추가 논의는 그림의 오른쪽, 모듈 코드를 구조화하는 방법 및 효과적인 클라이언트-서버 상호 작용을 구현하는 데 사용할 수 있는 원칙에 대한 것입니다.

문제를 정의하자

1C 플랫폼의 새 버전이 활발히 사용되어 1C와 수많은 파트너가 많은 솔루션(구성)을 출시한 지 몇 년이 지났습니다.
개발자들은 이 기간 동안 양식을 작성할 때 클라이언트-서버 상호 작용의 원칙에 대한 공통된 이해를 발전시켰으며 새로운 아키텍처 현실에서 프로그램 모듈 구현에 대한 접근 방식이 변경되었습니까?

동일한 전형적인 구성의 여러 형태의 코드 구조(form module)를 고려하고 패턴을 찾아보십시오.
구조에서 우리는 개발자가 메서드를 그룹화하기 위해 할당한 코드 섹션(대부분 주석 블록임)과 이러한 메서드를 컴파일하기 위한 지시문을 의미합니다.
예 1:
이벤트 처리기 섹션 방법 - 클라이언트에서 방법 - 서버에서 방법 - 클라이언트에서 서비스 절차 및 기능 섹션 입력 제어 보조 기능
예 2:
서비스 절차 및 기능 지불 문서 귀중품 이벤트 핸들러
예 3:
서버의 서비스 프로시저 클라이언트의 서비스 프로시저 컨텍스트가 없는 서버의 서비스 프로시저 헤더 이벤트 핸들러 명령 이벤트 핸들러
예 4:
범용 절차 양식 이벤트 처리기 "연락처 정보" 하위 시스템의 절차
실제로 코드 구조가 누락되었거나 간단히 말해서 양식 8.1에 있던 것과 유사합니다.

  • 정보가 없는 단어 "일반, 서비스, 보조".
  • Timid는 클라이언트와 서버 메소드를 분리하려고 시도합니다.
  • 종종 방법은 "표 형식의 제품으로 작업, 연락처 정보" 인터페이스 요소로 그룹화됩니다.
  • 메소드 및 코드 그룹의 임의 배열. 예를 들어 이벤트 핸들러는 한 형식에서는 맨 위에 있고 다른 형식에서는 맨 아래에 있고 세 번째 형식에서는 전혀 강조 표시되지 않는 식입니다.
  • 그리고 이것이 모두 동일한 구성 내에 있다는 것을 잊지 마십시오.
  • 예, "일반, 서비스, 보조"라는 단어가 항상 같은 위치에 있는 구성이 있지만 ...
코드 구조가 필요한 이유는 무엇입니까?
  • 유지 보수의 단순화.
  • 학습을 단순화합니다.
  • 일반/중요/성공 원칙을 수정합니다.
  • ...당신의 선택
1C의 기존 개발 표준이 도움이 되지 않는 이유는 무엇입니까?
관리되는 양식을 작성할 때 권장되는 다양한 "개발자 가이드..."와 ITS 디스크에 게시된 원칙을 살펴보겠습니다.
  • 서버 호출 횟수를 최소화합니다.
  • 서버의 최대 컴퓨팅.
  • 컨텍스트가 아닌 서버 호출은 컨텍스트 호출보다 빠릅니다.
  • 클라이언트-서버 상호 작용을 염두에 두고 프로그래밍하십시오.
  • 등.
이것은 절대적으로 사실인 슬로건이지만 어떻게 실현될 수 있습니까? 호출 수를 최소화하는 방법, 클라이언트-서버 모드에서 프로그래밍한다는 것은 무엇을 의미합니까?

디자인 패턴 또는 세대의 지혜

클라이언트-서버 상호 작용은 수십 년 동안 다양한 소프트웨어 기술에서 사용되었습니다. 이전 섹션에서 설명한 질문에 대한 답변은 오랫동안 알려져 왔으며 두 가지 기본 원칙으로 요약됩니다.
  • 원격 외관(이하 원격 접속 인터페이스)
  • 데이터 전송 개체(이하 데이터 전송 대상이라고 함)
Martin Fowler에게 이러한 원칙에 대한 설명은 다음과 같습니다.
  • 원격 액세스를 위해 잠재적으로 의도된 각 개체는 낮은 세분성 인터페이스, 특정 절차를 수행하는 데 필요한 호출 수를 최소화합니다. … 인보이스와 모든 포인트를 별도로 요청하는 대신 한 번의 호출로 인보이스의 모든 포인트를 읽고 업데이트해야 합니다. 이것은 개체의 전체 구조에 영향을 미칩니다...기억: 원격 액세스 인터페이스 도메인 논리를 포함하지 않음.
  • ... 내가 돌보는 어머니라면 나는 분명히 내 아이에게 "절대 데이터 전송 개체를 작성하지 마십시오!"라고 말할 것입니다. 대부분의 경우 데이터 마이그레이션 개체는 부풀려진 필드셋… 이 역겨운 괴물의 가치는 오로지 가능성에 있다 한 번의 호출로 네트워크를 통해 여러 항목의 정보 전송- 분산 시스템에 매우 중요한 기술입니다.
1C 플랫폼의 템플릿 예
관리되는 양식을 개발할 때 개발자가 사용할 수 있는 API에는 이러한 원칙의 많은 예가 포함되어 있습니다.
예를 들어, OpenForm() 메서드는 일반적인 "거친" 인터페이스입니다.
OpenParameters = New Structure("매개변수1, 매개변수2, 매개변수3", 값1, 값2, 값3); 양식 = OpenForm(FormName, OpenParameters);
v8.1 스타일과 비교하십시오.
양식 = GetForm(양식 이름); Form.Parameter1 = 값1; Form.Parameter2 = 값2; Form.Open();

관리되는 양식의 컨텍스트에서 "데이터 전송 개체" 집합입니다. 구별 가능 전신그리고 개발자 정의.
시스템 객체는 하나 이상의 양식 데이터 요소의 형태로 클라이언트의 애플리케이션 객체를 모델링합니다. 양식 세부 정보에 대한 바인딩 외부에서 만들 수 없습니다.

  • DataForms 구조
  • DataFormsCollection
  • DataFormStructureCollection
  • 데이터폼 트리
데이터 전송 시스템 개체를 응용 프로그램 유형으로 또는 그 반대로 변환하는 작업은 다음과 같은 방법으로 수행됩니다.
  • 값VDataForm()
  • FormDataToValue()
  • 복사폼데이터()
  • ValueVFormProps()
  • FormAttributeToValue()
기존 솔루션을 적용할 때 명시적 변환이 사용되는 경우가 많습니다. 메서드는 FormDataCollection이 아닌 ValueTable과 같은 입력 매개 변수를 예상할 수 있습니다. 또는 메서드가 응용 프로그램 개체의 컨텍스트에서 정의되어 양식에서 직접 호출할 수 없게 되었습니다.
예 1C v8.1:
// FillUsersCache(DepartmentReference) 형식의 컨텍스트에서 클라이언트에서
예 1C v8.2:
// 서버에서 ProcessingObject = FormAttributeToValue("Object"); ProcessingObject.FillCacheUsers(DepartmentReference); ValueVFormAttribute(ProcessingObject, "객체");

개발자가 구조를 정의한 데이터 마이그레이션 개체는 클라이언트와 서버 모두에서 사용할 수 있는 유형의 작은 하위 집합입니다. 가장 자주 "거친"인터페이스 방법의 매개 변수 및 결과로 다음이 사용됩니다.

  • 기본 유형(문자열, 숫자, 부울)
  • 구조
  • 적합성
  • 정렬
  • 응용 프로그램 개체에 대한 링크(고유 식별자 및 텍스트 표현)
예: 이 메서드는 상태를 변경하기 위한 주문 목록을 수락하고 오류에 대한 설명을 클라이언트에 반환합니다.
&OnServerWithoutContext 함수 ServerChangeOrderStatus(Orders, NewStatus) 오류 = New Match(); // [주문][오류 설명] For Each Order From Orders 루프 StartTransaction(); 시도 DocOb = Order.GetObject(); …. 다른 작업, 아마도 주문뿐만 아니라... Exception CancelTransaction(); Errors.Insert(주문, 설명오류()); 시도 종료; 종료 주기; 반환 오류; EndFunction // ServerChangeOrderStatus()

코드 구조화

관리되는 양식 모듈이 반영해야 하는 주요 목표와 솔루션에 대한 접근 방식.
  • 클라이언트와 서버 코드의 명확한 분리.실행 시 두 개의 상호 작용 프로세스가 있으며 각각 사용 가능한 기능이 크게 다르다는 것을 잊지 마십시오.
  • 클라이언트에서 호출할 수 있는 서버 메서드와 호출할 수 없는 원격 액세스 인터페이스의 명확한 선택 원격 인터페이스 메서드의 이름은 접두사 "Server"로 시작합니다. 이렇게 하면 코드를 읽을 때 서버로의 제어 전환을 즉시 확인할 수 있으며 컨텍스트 힌트 사용이 간소화됩니다. 공식 권장 사항(ITS)은 ChangeOrderStatusOnServer()와 같은 접미사가 있는 명명 방법을 제안합니다. 그러나 반복해서 말하지만 클라이언트에서 모든 서버 메서드를 호출할 수 있는 것은 아니므로 논리적 접근성이 컴파일 위치보다 더 중요합니다. 따라서 "Server" 접두사를 사용하여 클라이언트에서 사용할 수 있는 메서드만 표시하고 예제 메서드는 ServerChangeOrderStatus()라고 합니다.
  • 가독성.취향에 따라 서버 및 원격 액세스 방법에서 양식을 만드는 절차로 모듈이 시작될 때 순서를 수락합니다.
  • 유지보수성.새 코드를 추가할 위치를 명확하게 정의해야 합니다. 중요한 점은 구성자에 의해 자동으로 생성된 메소드 스텁이 모듈의 끝에 추가된다는 것입니다. 폼 요소 이벤트 핸들러는 대부분 자동으로 생성되기 때문에 각 핸들러를 모듈의 다른 위치로 드래그하지 않도록 해당 블록이 마지막에 배치됩니다.
다음은 나열된 목표를 구현하는 모듈의 기본 구조입니다.
  • 그래픽 옵션 - 주요 실행 흐름을 명확하게 보여줍니다.
  • 텍스트 옵션은 새 양식 모듈에 구조를 빠르게 삽입하기 위한 템플릿 디자인의 예입니다.

//////////////////////////////////////////////////////////////////////////////// // <(c) Автор="" 날짜=""/> // <Описание> // // ///////////////////////////////////////////////////// / ////////////////////////////// // 모듈 변수 /////////////// / //////////////////////////////////////////////////// // ////////////// // 서버에서 //********* 서버에서 이벤트 ******* 서버에서 프로시저 On CreationOn The Server( 실패, StandardProcessing) //처리기의 내용을 삽입합니다. EndProcedure //******* 원격 액세스 인터페이스 ******* //********* 서버의 비즈니스 로직 **** *** ///////// ///////////////////////////////////////// ////////////// ///////////////////// // 공통 클라이언트 및 서버 메서드 ///////// //////////////// ///////////////////////////////////// //////////////// //////// // 클라이언트에서 //********* 클라이언트에서 비즈니스 로직 ******* //******** 명령 ******* //******** 클라이언트의 이벤트 ****** /////////////// ////////////////// ////////////////////////////////// ///////////////// / / 주요 프로그램 운영자

관련 질문
결론적으로, 우리는 클라이언트-서버 상호 작용을 프로그래밍할 때 생각하는 데 유용한 몇 가지 영역을 간략하게 설명합니다.
  • 원격 액세스 인터페이스를 구현하기 위한 옵션. 비동기, 세분성...
  • 캐싱. 1C는 공통 모듈의 메서드를 호출하는 수준에서만 캐싱을 도입하고 제어 옵션(최신 시간, 요청 시 재설정)을 제공하지 않는 불행한 아키텍처 결정을 내렸습니다.
  • 암시적 서버 호출. 기술적 기능을 잊지 마십시오. 클라이언트의 많은 "무해한"작업은 플랫폼이 서버에 액세스하도록 유발합니다.