확장 및 외부 구성 요소에 대한 비동기 호출. "클라이언트에서 동기 메서드 사용이 금지되었습니다"라는 오류가 발생하는 이유는 무엇입니까?

버전 8.3.5.1383, 8.3.6.1977에서 구현되었습니다.

현대적 경향

브라우저 개발 추세로 인해 플랫폼에서 "비동기성" 비율이 점점 증가하고 있습니다. 첫 번째 단계는 다음과 같습니다. 이제 암호화 확장 작업, 파일 및 외부 구성 요소 작업을 위한 비동기 호출이 있습니다.

비동기화를 향한 다음 움직임의 이유는 Google Chrome 브라우저 개발자가 이전 NPAPI(Netscape Plugin Application 프로그래밍 인터페이스) 기술에 대한 지원을 포기했기 때문입니다. 이 기술은 외부 모듈(확장)을 브라우저에 연결하는 데 사용되었습니다.

이러한 확장은 정확히 1C:Enterprise가 암호화 작업, 파일 작업 및 외부 구성 요소 연결에 사용하는 것입니다. 상당히 중요한 기능입니다. 암호화는 전자 문서 관리에 사용되며 외부 구성 요소 덕분에 응용 프로그램은 바코드 스캐너 및 기타 소매 장비와 함께 작동할 수 있습니다.

이제 이전의 동기식 NPAPI 기술 대신 Google Chrome 개발자는 새로운 기본 메시징 기술을 만들었습니다. 동시에 그들은 모든 확장 개발자들이 이전 기술을 지원하지 않을 것이기 때문에 사용하지 말 것을 강력히 권고했습니다.

자세히 설명하지 않고도 신기술은 더 좋고 안전합니다. 이것은 좋다. 그러나 중요한 차이점 중 하나는 브라우저 확장과의 비동기식 상호 작용만 제공한다는 것입니다. 그리고 이를 위해서는 1C:Enterprise에서 확장 기능 및 외부 구성 요소를 사용하는 기존의 모든 방법에 급격한 변화가 필요합니다. 왜냐하면 그것들은 모두 동기식 상호작용을 기반으로 하기 때문입니다.

비동기식 방법

우리는 모달 호출 문제를 해결한 것과 같은 방식으로 이 문제를 해결했습니다. NPAPI 기술을 사용하는 모든 동기식 메서드에 대해 비동기식 메서드를 만들었습니다. 주로 접두사가 있는지에 따라 다릅니다. 시작하다첫 번째 매개변수가 전달된다는 사실 설명경고, 호출된 작업이 완료된 후에도 프로그램 코드 실행이 계속됩니다.

예를 들어, 메소드 대신 암호화()이제 다음 방법을 사용하는 것이 좋습니다. 암호화 시작():

CryptographyManager.암호화(<ИсходныеДанные>, <Получатели>) 암호화 관리자.암호화 시작(<ОписаниеОповещения>, <ИсходныеДанные>, <Получатели>)

메소드 대신 파일 가져오기() - 파일 가져오기 시작():

파일 가져오기(<ПолучаемыеФайлы>, <ПолученныеФайлы>, <РасположениеФайлов>, <Интерактивно>) 파일 수신 시작 ((<ОписаниеОповещения>, <ПолучаемыеФайлы>, <РасположениеФайлов>, <Интерактивно>)

대신에 SetExternalComponent()- 외부 구성 요소 설치 시작():

SetExternalComponent(<Местоположение>) 외부 구성 요소 설치 시작 (<ОписаниеОповещенияОЗавершении>, <Местоположение>)

사실, 전반적으로 모든 것은 이전에 양식을 제거했을 때 했던 것과 매우 유사합니다. 그러나 새로운 비동기 메서드의 기능에는 비모달 대화 상자를 발생시키는 메서드에는 없는 필수 기능이 있습니다.

모덜리스 대화 상자를 비동기식으로 호출할 때 우리는 일부 사용자 반응만 예상하고 그 이상은 기대하지 않습니다. 예상치 못한 일이 일어날 수 없다는 의미에서.

그리고 확장 및 구성 요소를 사용하는 비동기 메서드를 호출하는 과정에서 예외적인 상황이 발생할 수 있습니다. 확장 프로그램이 설치되지 않았거나 구성 요소가 로드되지 않았습니다.

일반적으로 애플리케이션 코드에서 이러한 예외 처리를 제공합니다. 연산자 사용 시도 중... 예외. 그러나 이제는 비동기 호출 시 애플리케이션 코드가 실행되지 않기 때문에 이것이 불가능해졌습니다. 따라서 운영자는 일을 하지 않습니다. 시도 중... 예외.

  • 이름ProcedureProcessingErrors;
  • 오류 처리 모듈.

비동기 호출 중에 문제가 발생하여 예외가 발생하면 이러한 속성이 가리키는 프로시저가 실행됩니다. 확장 작업을 위한 비동기식 방법에서만 이 두 속성을 사용하는 것이 합리적입니다. 모덜리스 대화 상자를 호출할 때는 이러한 속성이 필요하지 않습니다.

구성 속성

양식 거부의 경우와 마찬가지로 전체 애플리케이션 솔루션은 전체적으로 "그것이 무엇인지"를 알아야 합니다. 모달이거나 넌모달입니다. 동기식이거나 비동기식입니다.

이전에는 모달리티 문제를 해결하기 위해 특수 구성 속성을 추가했습니다. 양식을 사용하는 모드. 이제 동시성 문제를 해결하기 위해 의미가 유사한 속성을 추가했습니다. 확장 및 외부 구성 요소에 대한 동기 호출을 사용하는 모드.

사용의 본질은 다음과 같습니다.

  • 사용하지 마세요- 이것은 새로운 비동기식 작업 모드입니다. 새로운 구성의 경우 이는 표준 모드입니다. 오래된 동기식 방법을 사용하는 것은 금지됩니다. 구문 제어를 통과하지 못하며 문맥 단서에도 없습니다. 동기 메서드를 실행하려고 하면 예외가 발생합니다.
  • 경고와 함께 사용- 이 모드는 개발자를 위한 것입니다. 이전 동기식 메서드의 사용을 방해하지 않습니다. 그러나 클라이언트에서 동기 메서드가 호출될 때마다 경고 메시지가 생성됩니다. "재활용" 구성에서는 이 모드를 사용하는 것이 좋습니다. 개정 과정에서 동기 호출을 시각적으로 검색하고 모니터링하는 데 편리합니다.
  • 사용- 확장 및 외부 구성 요소 작업에 동기식 방법을 사용하는 이전 구성과 새 버전의 플랫폼의 호환성을 보장하는 모드입니다.

지금까지 이야기한 모든 메소드와 속성은 버전에서 구현됩니다. 8.3.5.1383 . 귀하의 애플리케이션 솔루션에서 이를 사용할 수 있습니다. 예를 들어 개발자는 암호화 도구를 사용하고 파일 및 외부 구성 요소를 사용하는 비동기 작업 하위 시스템으로 전환합니다.

당연히 모달 호출과 마찬가지로 질문이 있을 수 있습니다. 애플리케이션 솔루션을 다시 실행해야 합니까? 그리고 일반적으로 새 애플리케이션 솔루션에서 이러한 비동기 메서드를 사용해야 합니까?

언제 필요합니까?

이 질문에 대한 대답은 본질적으로 이전에 제시한 것과 동일합니다. 양식을 포기하는 것에 대해 이야기했을 때.

첫째, 기술 플랫폼의 모든 버전이 확장 및 외부 구성 요소에 대한 비동기 호출 모드를 지원하는 것은 아닙니다. 이 작동 모드는 버전 8.3.5.1383부터 존재합니다. 따라서 낮은 버전의 플랫폼에서 작업하는 경우 지금은 동기식 메서드를 포기하는 것에 대해 걱정할 필요가 없습니다.

둘째, 모든 애플리케이션 솔루션이 반드시 이 모드를 사용해야 하는 것은 아닙니다. 중요한 애플리케이션은 Google Chrome 브라우저에서 웹 클라이언트를 사용하여 작동하는 애플리케이션입니다. 이러한 애플리케이션은 대부분 실행 중인 애플리케이션입니다. 귀하의 애플리케이션 솔루션이 이 모드에서 확실히 사용되지 않는다면 지금은 동기식 방법을 포기할 수 없습니다.

그러나 첫 번째와 두 번째 사항에도 불구하고 귀하의 계획에 영향을 미칠 수 있는 세계적인 추세가 있습니다. 우리 1C 회사는 사용 가능한 모든 방식으로 사용할 수 있다는 사실을 기반으로 모든 표준 솔루션을 개발합니다. 따라서 우리는 동기 호출을 사용하지 않는 모드에서 새로운 애플리케이션 솔루션과 이에 사용되는 모든 라이브러리를 구현할 것입니다.

이는 지금 이 작동 모드를 마스터하는 것이 더 낫다는 것을 의미합니다. 귀하의 애플리케이션이 아직 이를 사용하지 않더라도 가능하다면 지금 번역을 시작하는 것이 좋습니다. 하지만 이 프로세스에 창의적으로 접근하는 것이 좋습니다. 양식을 포기할 때와 같은 맥락입니다. 즉, 동기식 메서드를 비동기식 메서드로 기계적으로 교체할 필요가 없습니다. 첫째, 이 시점에서 동기식 방법의 사용을 완전히 포기하도록 알고리즘이나 스크립트를 변경하는 것이 가능한지 생각해 보는 것이 유용합니다.

리팩토링

한편, 구성이 크고 동기 호출이 많은 경우 이러한 구성을 "수동"으로 재작업하는 것은 매우 시간이 많이 걸리는 작업이 될 수 있습니다.

반면, 버전 8.3.5.1068부터 플랫폼에는 동기 호출을 비동기 호출로 변환할 수 있는 기능이 있습니다.

따라서 우리는 이러한 기존 도구를 확장하여 "모달리티에서 벗어나는 것"에서 "비동시성으로 전환하는 것"으로 방향을 바꾸었습니다. 기본적으로 비동기식 메서드로의 전환은 양식을 포기할 때 수행되는 작업과 유사합니다. 오래된 "유행에 뒤떨어진" 동기(모달) 호출은 다음을 사용하는 새로운 "유행" 비동기 호출로 대체되어야 합니다. 경고 처리.

이 업데이트된 양식에서는 리팩토링 도구를 버전에서 사용할 수 있게 되었습니다. 8.3.6.1977 .

이러한 도구의 "강점"이 비동기식으로 바뀌었기 때문에 일부 명령의 이름을 변경했습니다. 이제 "비모달" 대신 "더 이상 사용되지 않는 동기"라는 문구가 사용됩니다.

또한 구성기 설정에 새 탭을 추가했습니다. 리팩토링. 기본적으로 두 변환이 모두 활성화되어 있습니다. 그러나 필요한 경우 자동 리팩토링 중에 변환 유형 중 하나만 수행할 수 있습니다.

05.12.2014

버전 8.3.5.1383, 8.3.6.1977에서 구현되었습니다.

현대적 경향

브라우저 개발 추세로 인해 플랫폼에서 "비동기성" 비율이 점점 증가하고 있습니다. 첫 번째 단계는 양식을 포기하는 것이었습니다. 이제 암호화 확장 작업, 파일 및 외부 구성 요소 작업을 위한 비동기 호출이 있습니다.

비동기화를 향한 다음 움직임의 이유는 Google Chrome 브라우저 개발자가 이전 NPAPI(Netscape Plugin Application 프로그래밍 인터페이스) 기술에 대한 지원을 포기했기 때문입니다. 이 기술은 외부 모듈(확장)을 브라우저에 연결하는 데 사용되었습니다.

이러한 확장은 정확히 1C:Enterprise가 암호화 작업, 파일 작업 및 외부 구성 요소 연결에 사용하는 것입니다. 상당히 중요한 기능입니다. 암호화는 전자 문서 관리에 사용되며 외부 구성 요소 덕분에 응용 프로그램은 바코드 스캐너 및 기타 소매 장비와 함께 작동할 수 있습니다.

이제 이전의 동기식 NPAPI 기술 대신 Google Chrome 개발자는 새로운 기본 메시징 기술을 만들었습니다. 동시에 그들은 모든 확장 개발자들이 이전 기술을 지원하지 않을 것이기 때문에 사용하지 말 것을 강력히 권고했습니다.

자세히 설명하지 않고도 신기술은 더 좋고 안전합니다. 이것은 좋다. 그러나 중요한 차이점 중 하나는 브라우저 확장과의 비동기식 상호 작용만 제공한다는 것입니다. 그리고 이를 위해서는 1C:Enterprise에서 확장 기능 및 외부 구성 요소를 사용하는 기존의 모든 방법에 급격한 변화가 필요합니다. 왜냐하면 그것들은 모두 동기식 상호작용을 기반으로 하기 때문입니다.

비동기식 방법

우리는 이 문제를 모달 호출 문제와 같은 방식으로 해결했습니다. NPAPI 기술을 사용하는 모든 동기식 메서드에 대해 비동기식 메서드를 만들었습니다. 주로 시작 접두어가 있다는 점과 첫 번째 매개변수가 호출된 작업이 완료된 후에도 프로그램 코드 실행이 계속되는 경고 설명이라는 점에서 다릅니다.

예를 들어 Encrypt() 메서드 대신 이제 StartEncrypt() 메서드를 사용하는 것이 좋습니다.

CryptographyManager.암호화(<ИсходныеДанные>, <Получатели>) 암호화 관리자.암호화 시작(<ОписаниеОповещения>, <ИсходныеДанные>, <Получатели>)

GetFiles() 메서드 대신 - StartGettingFiles():

파일 가져오기(<ПолучаемыеФайлы>, <ПолученныеФайлы>, <РасположениеФайлов>, <Интерактивно>) 파일 수신 시작 ((<ОписаниеОповещения>, <ПолучаемыеФайлы>, <РасположениеФайлов>, <Интерактивно>)

InstallExternalComponent() - StartInstallingExternalComponent() 대신:

SetExternalComponent(<Местоположение>) 외부 구성 요소 설치 시작 (<ОписаниеОповещенияОЗавершении>, <Местоположение>)

사실, 전반적으로 모든 것은 이전에 양식을 제거했을 때 했던 것과 매우 유사합니다. 그러나 새로운 비동기 메서드의 기능에는 비모달 대화 상자를 발생시키는 메서드에는 없는 필수 기능이 있습니다.

모덜리스 대화 상자를 비동기식으로 호출할 때 우리는 일부 사용자 반응만 예상하고 그 이상은 기대하지 않습니다. 예상치 못한 일이 일어날 수 없다는 의미에서.

그리고 확장 및 구성 요소를 사용하는 비동기 메서드를 호출하는 과정에서 예외적인 상황이 발생할 수 있습니다. 확장 프로그램이 설치되지 않았거나 구성 요소가 로드되지 않았습니다.

일반적으로 애플리케이션 코드에서 이러한 예외 처리를 제공합니다. Try... 예외 연산자를 사용합니다. 그러나 이제는 비동기 호출 시 애플리케이션 코드가 실행되지 않기 때문에 이것이 불가능해졌습니다. 따라서 Attempt... 예외 연산자가 작동하지 않습니다.

  • 오류프로시저이름;
  • 오류 처리 모듈.

비동기 호출 중에 문제가 발생하여 예외가 발생하면 이러한 속성이 가리키는 프로시저가 실행됩니다. 확장 작업을 위한 비동기식 방법에서만 이 두 속성을 사용하는 것이 합리적입니다. 모덜리스 대화 상자를 호출할 때는 이러한 속성이 필요하지 않습니다.

구성 속성

양식 거부의 경우와 마찬가지로 전체 애플리케이션 솔루션은 전체적으로 "그것이 무엇인지"를 알아야 합니다. 모달이거나 넌모달입니다. 동기식이거나 비동기식입니다.

이전에는 모달리티 문제를 해결하기 위해 모달리티 사용 모드라는 특수 속성을 구성에 추가했습니다. 이제 동기화 문제를 해결하기 위해 의미가 유사한 속성인 확장 및 외부 구성 요소의 동기 호출을 사용하는 모드를 추가했습니다.

사용의 본질은 다음과 같습니다.

  • 사용하지 않음은 새로운 비동기식 작업 모드입니다. 새로운 구성의 경우 이는 표준 모드입니다. 오래된 동기식 방법을 사용하는 것은 금지됩니다. 구문 제어를 통과하지 못하며 문맥 단서에도 없습니다. 동기 메서드를 실행하려고 하면 예외가 발생합니다.
  • 경고와 함께 사용 - 이 모드는 개발자를 위한 것입니다. 이전 동기 메서드의 사용을 방해하지 않습니다. 그러나 클라이언트에서 동기 메서드가 호출될 때마다 경고 메시지가 생성됩니다. "재활용" 구성에서는 이 모드를 사용하는 것이 좋습니다. 개정 과정에서 동기 호출을 시각적으로 검색하고 모니터링하는 데 편리합니다.
  • 사용 - 확장 및 외부 구성 요소 작업을 위해 동기식 방법을 사용하는 이전 구성과 새 버전의 플랫폼의 호환성을 보장하는 모드입니다.

지금까지 설명한 모든 메서드와 속성은 버전 8.3.5.1383에서 구현되었습니다. 귀하의 애플리케이션 솔루션에서 이를 사용할 수 있습니다. 예를 들어 BSP 개발자는 암호화 도구를 사용하고 파일 및 외부 구성 요소를 사용하는 비동기 작업 하위 시스템으로 전환합니다.

당연히 모달 호출과 마찬가지로 질문이 있을 수 있습니다. 애플리케이션 솔루션을 다시 실행해야 합니까? 그리고 일반적으로 새 애플리케이션 솔루션에서 이러한 비동기 메서드를 사용해야 합니까?

언제 필요합니까?

이 질문에 대한 대답은 본질적으로 이전에 제시한 것과 동일합니다. 양식을 포기하는 것에 대해 이야기했을 때.

첫째, 기술 플랫폼의 모든 버전이 확장 및 외부 구성 요소에 대한 비동기 호출 모드를 지원하는 것은 아닙니다. 이 작동 모드는 버전 8.3.5.1383부터 존재합니다. 따라서 낮은 버전의 플랫폼에서 작업하는 경우 지금은 동기식 메서드를 포기하는 것에 대해 걱정할 필요가 없습니다.

둘째, 모든 애플리케이션 솔루션이 반드시 이 모드를 사용해야 하는 것은 아닙니다. 중요한 애플리케이션은 Google Chrome 브라우저에서 웹 클라이언트를 사용하여 작동하는 애플리케이션입니다. 이러한 애플리케이션은 대부분 서비스 모델에서 작동하는 애플리케이션입니다. 귀하의 애플리케이션 솔루션이 이 모드에서 확실히 사용되지 않는다면 지금은 동기식 방법을 포기할 수 없습니다.

그러나 첫 번째와 두 번째 사항에도 불구하고 귀하의 계획에 영향을 미칠 수 있는 세계적인 추세가 있습니다. 우리 1C 회사는 사용 가능한 모든 방식으로 사용할 수 있다는 사실을 기반으로 모든 표준 솔루션을 개발합니다. 따라서 우리는 동기 호출을 사용하지 않는 모드에서 새로운 애플리케이션 솔루션과 이에 사용되는 모든 라이브러리를 구현할 것입니다.

이는 지금 이 작동 모드를 마스터하는 것이 더 낫다는 것을 의미합니다. 귀하의 애플리케이션이 아직 이를 사용하지 않더라도 가능하다면 지금 번역을 시작하는 것이 좋습니다. 하지만 이 프로세스에 창의적으로 접근하는 것이 좋습니다. 양식을 포기할 때와 같은 맥락입니다. 즉, 동기식 메서드를 비동기식 메서드로 기계적으로 교체할 필요가 없습니다. 첫째, 이 시점에서 동기식 방법의 사용을 완전히 포기하도록 알고리즘이나 스크립트를 변경하는 것이 가능한지 생각해 보는 것이 유용합니다.

리팩토링

한편, 구성이 크고 동기 호출이 많은 경우 이러한 구성을 "수동"으로 재작업하는 것은 매우 시간이 많이 걸리는 작업이 될 수 있습니다.

반면, 버전 8.3.5.1068부터 플랫폼에는 동기 호출을 비동기 호출로 변환할 수 있는 도구가 있습니다.

따라서 우리는 이러한 기존 도구를 확장하고 "모달리티에서 벗어나는 것"에서 "비동시성으로 전환하는 것"으로 방향을 바꾸었습니다. 기본적으로 비동기식 메서드로의 전환은 양식을 포기할 때 수행되는 작업과 유사합니다. 오래된 "유행에 뒤떨어진" 동기(모달) 호출은 알림 처리를 사용하는 새로운 "유행" 비동기 호출로 대체되어야 합니다.

이 업데이트된 양식에서 리팩토링 도구는 버전 8.3.6.1977에서 사용할 수 있게 되었습니다.

이러한 도구의 "강점"이 비동기식으로 바뀌었기 때문에 일부 명령의 이름을 변경했습니다. 이제 "비모달" 대신 "더 이상 사용되지 않는 동기"라는 문구가 사용됩니다.

또한 구성기 설정에 새로운 리팩토링 탭을 추가했습니다. 기본적으로 두 변환이 모두 활성화되어 있습니다. 그러나 필요한 경우 자동 리팩토링 중에 변환 유형 중 하나만 수행할 수 있습니다.

이 기사에서는 1C:Enterprise 플랫폼에서 양식을 포기하는 주요 이유와 코드 섹션을 새로운 비동기 모델로 변환하는 주요 방법에 대해 설명합니다.

적용 가능성

이 기사에서는 추가된 플랫폼 “1C:Enterprise” 버전 8.3인 비즈니스 로직을 구성하기 위한 비동기 모델에 대해 설명합니다. 제시된 정보는 현재 플랫폼 릴리스와 관련이 있습니다.

1C:Enterprise 8.3 플랫폼에서 모달 창 사용 거부

1C:Enterprise 8 플랫폼에서 구성을 개발할 때 사용자가 결정을 내리거나 일부 작업을 수행할 때까지 프로그램을 일시 중지해야 하는 필요성이 주기적으로 발생합니다.

예를 들어 표 섹션 채우기 버튼을 클릭하면 이전에 입력한 데이터가 손실되지 않도록 표 섹션을 지워야 하는지 사용자에게 묻는 메시지가 표시됩니다.

이 동작은 예를 들어 다음 코드를 통해 달성할 수 있습니다.

&On클라이언트
절차 제품을 입력하세요(팀 )
답변 = 질문("테이블 부분이 지워집니다. 계속할까요?", 대화 모드질문.예아니요);
답변 = 대화 반환 코드.예그 다음에
//채우기 알고리즘
종료If ;
절차 종료

이 코드 조각으로 인해 프로그램 코드의 실행이 일시 중지되고, 질문이 화면에 표시되고, 질문이 있는 대화 상자를 제외한 애플리케이션 인터페이스를 사용할 수 없게 되며, 시스템은 사용자가 결정을 내리고, 질문에 답한 후에만 코드 실행이 계속됩니다.

OpenModal() 메서드를 호출하여 모달 창을 열면 코드 실행이 일시 중지되고 인터페이스가 차단됩니다.

브라우저를 통해 웹 클라이언트 모드에서 구성 작업을 할 때 이 경우 새 창이 열립니다. 이 팝업 창은 현재 탭뿐만 아니라 열려 있는 다른 창과 탭을 포함한 전체 브라우저 인터페이스도 차단합니다.

인터넷의 팝업 창은 원치 않는 광고를 악의적으로 배포하는 데 사용되는 경우가 많으며, 이것이 바로 브라우저에 팝업 차단 기능이 포함되어 있는 이유입니다.

이 경우 브라우저를 통해 1C:Enterprise 8 구성을 사용하려면 팝업 차단을 비활성화해야 합니다.

모바일 장치에서 작업할 때도 문제가 발생합니다. 예를 들어 모달 창은 iPad에서 지원되지 않습니다.

이러한 문제를 해결하려면 모달 창 대신 차단 창을 사용해야 합니다. 사용자에게는 시각적으로 모든 것이 동일하게 보입니다. 창은 웹 클라이언트 인터페이스를 차단합니다.

하지만 차단창은 메인창 상단에 '그려져' 있으며, 모달 브라우저 창을 사용하지 않기 때문에 구성이 열려 있는 현재 브라우저 탭만 차단되어 다른 탭으로 전환이 가능합니다.

따라서 팝업 창이 브라우저에서 열리지 않으며 모바일 장치에서 웹 클라이언트를 통한 작업이 보장됩니다.

구성의 루트 요소에는 구성에서 모달 창을 열 수 있는지 여부를 결정하는 "모달리티 모드" 속성이 있습니다.

"사용" 옵션을 선택하면 모달 창을 열 수 있습니다. "사용 안 함" 옵션을 선택하면 모달 창이 허용되지 않습니다. 모달 창을 여는 메서드를 호출하려고 하면 시스템에 다음과 같은 오류 메시지가 표시됩니다.

이 "모달리티 사용 모드" 속성 값을 사용하면 차단 창만 허용됩니다.

"경고와 함께 사용" 옵션을 선택한 경우 모달 창이 열리면 메시지 창에 다음 텍스트가 표시됩니다.

이 작업 옵션은 모달 창 사용을 ​​중단하기 위해 구성을 재작업할 때 중간 옵션으로 사용할 수 있습니다.

차단 창과 모달 창의 주요 차이점은 차단 창을 열어도 코드 실행이 일시 중지되지 않는다는 것입니다.

따라서 개발자는 이 기능을 고려하기 위해 모달 창을 사용하는 프로그램 코드를 다시 작성해야 합니다.

코드는 두 부분으로 나누어져야 합니다:

  • 차단 창을 여는 단계;
  • 사용자 선택을 처리 중입니다.

기사 시작 부분에 제공된 코드 조각을 다음과 같이 다시 작성해야 합니다.

&On클라이언트
절차 제품을 입력하세요(팀 )
경고 = 신규 설명경고(, ThisObject );

대화 모드질문.예아니요);
절차 종료
&On클라이언트
절차(결과, 추가 옵션) 내보내다
결과 = 대화 반환 코드.예그 다음에
//채우기 알고리즘
종료If ;
절차 종료

ShowQuestion() 프로시저를 실행한 후에도 시스템은 멈추지 않고 사용자의 응답을 기다리며 코드 실행이 계속됩니다.

사용자는 전체 절차가 완료된 후에만 선택할 수 있습니다. 이 경우 내보내기 프로시저 FillItemsQuestionComplete()가 호출됩니다. DescriptionAlerts 개체의 생성자에 해당 이름을 전달했습니다.

선택 후 호출되는 프로시저는 양식 모듈, 명령 모듈 또는 일반 비전역 모듈에 위치할 수 있습니다.

고려된 예에서는 호출된 프로시저가 관리되는 양식 모듈에 있으므로 ThisObject 매개 변수를 전달했습니다.

일반 모듈에 있는 프로시저를 호출하는 것을 고려해 보겠습니다. 이를 수행하려면 새 공통 모듈 알림 처리를 추가하고 이에 대해 "클라이언트(관리되는 애플리케이션)" 플래그를 설정하고 "글로벌" 플래그는 설정하지 마십시오. 이 모듈에 제품 질문 완료() 채우기 절차를 배치하겠습니다.

그런 다음 채우기 명령 처리기는 다음과 같습니다.

&On클라이언트
절차 제품을 입력하세요(팀 )
경고 = 신규 설명경고(“제품 질문 작성 완료”,
경고 처리 중);
질문 텍스트 = “표 형식의 부분이 지워집니다. 계속하다?" ;
ShowQuestion(경고, 질문 텍스트, 대화 모드질문.예아니요);
절차 종료

차단 창을 여는 메서드를 호출한 후에는 프로시저가 종료되어야 하며 다음에 실행되는 코드는 창이 닫힌 후 호출될 프로시저에 배치되어야 합니다.

모달 창을 여는 프로시저에서 닫힐 때 호출되는 프로시저로 컨텍스트(보조 데이터, 특정 매개 변수, 변수 값)를 전송하기 위해 개체 생성자의 세 번째 선택적 매개 변수인 DescriptionAlerts – 추가 매개 변수가 제공됩니다.

모든 유형의 이 개체는 경고 설명에 설명된 프로시저에 마지막 매개 변수로 전달됩니다.

위에서 설명한 코드 섹션의 예를 사용하면 다음과 같이 수행할 수 있습니다.

&On클라이언트
절차 제품을 입력하세요(팀 )
매개변수1 = 0 ;
매개변수2 = 0 ;
매개변수 목록= 새 구조("매개변수1, 매개변수2", 매개변수1, 매개변수2);
경고 = 신규 설명경고(“제품 질문 작성 완료”, ThisObject ,
매개변수 목록);
ShowQuestion(Alert, "테이블 부분이 지워집니다. 계속하시겠습니까?",
대화 모드질문.예아니요);
절차 종료
&On클라이언트
절차 제품질문완료(결과 , 추가 옵션) 내보내다
결과 = 대화 반환 코드.예그 다음에
//추가 매개변수를 분석합니다.Parameter1
//추가 매개변수를 분석합니다.Parameter2
종료If ;
절차 종료

하나의 값만 전달해야 하는 경우 구조를 사용할 수 없지만 이 값을 DescriptionAlerts 개체 생성자의 추가 매개 변수 매개 변수에 할당합니다.

차단 창 작업에 대한 몇 가지 예를 살펴보겠습니다.

작업 1: 다른 양식 열기

문서 양식에서 "매개변수 열기" 버튼을 클릭하면 사용자가 설정해야 하는 두 개의 확인란 Parameter1 및 Parameter2가 있는 양식을 열어야 합니다. 양식을 닫은 후 메시지 라인에 매개변수 값을 표시합니다.

Parameter1 및 Parameter2 세부 정보와 CloseForm 명령을 배치하는 일반 양식 "ParametersForm"을 만듭니다.

명령 처리기는 다음과 같습니다.

명령 처리기는 다음과 같습니다. &OnClient
프로시저 CloseForm(명령)
매개변수 목록= 새 구조( “매개변수1, 매개변수2”, 매개변수1 , 매개변수2 );
닫다 ( 매개변수 목록); 절차 종료

양식의 경우 WindowOpenMode 속성을 "전체 인터페이스 차단"으로 설정합니다.

문서 양식에 OpenParameters 명령을 배치합니다. 해당 명령의 처리기는 다음과 같습니다.

&On클라이언트
절차 오픈옵션(팀 )
경고 = 신규 설명경고(“오픈 옵션 완료”, ThisObject );
오픈폼( "일반Form.FormParameters", , , , , , 알림);
절차 종료
&On클라이언트
절차 OpenOptions완료(결과 , 추가 옵션) 내보내다
TypeValue(결과) = Type(“구조”)인 경우
결과 루프의 각 KeyValue에 대해
메시지 = 신규 사용자에게 보내는 메시지;
Message.Text = “키: “” " + KeyValue.Key + """, 값 = ”
+ 키값.값;
메시지.신고();
엔드사이클 ;
종료If ;
절차 종료

사용자 모드에서 웹 클라이언트 아래 구성을 실행하면 다음과 같은 결과를 얻습니다.

확대하려면 이미지를 클릭하세요.

창 열기 모드는 OpenForm 프로시저의 마지막 매개변수에서도 지정할 수 있습니다.

&On클라이언트
절차 오픈옵션(팀 )
경고 = 신규 설명경고(“오픈 옵션 완료”, ThisObject );
오픈폼( "일반Form.FormParameters", , , , , , 알리다
FormWindowOpenMode.LockEntireInterface
);
절차 종료

작업 2. 양식을 닫을 때 질문

처리 창을 닫을 때 사용자에게 정말로 창을 닫고 싶은지 물어보세요.

이 문제는 처리 양식 모듈에 있는 다음 코드를 사용하여 해결할 수 있습니다.

&On클라이언트
페렘 양식을 닫아야 합니다;
&On클라이언트
종료 전 절차(실패, 표준처리)
그렇지 않은 경우 양식을 닫아야 합니다= 사실이라면
거부 = 사실 ;
경고 = 신규 설명경고(“마감 전”, ThisObject );
ShowQuestion(경고, "창을 닫으시겠습니까?",
대화 모드질문.예아니요
);
종료If ;
절차 종료
&On클라이언트
절차 완료를 닫기 전에(결과 , 추가 옵션) 내보내다
결과 = 대화 반환 코드.예그 다음에
양식을 닫아야 합니다= 사실 ;
닫다();
그렇지 않으면
양식을 닫아야 합니다= 정의되지 않음 ;
종료If ;
절차 종료

BeforeClosing 양식 절차에서는 사용자에게 질문을 하고 Refusal 플래그가 True로 설정되며 양식 닫기가 취소됩니다.

질문에 대한 긍정적인 대답 후에 Need toCloseForm 변수가 True로 설정되고 양식이 다시 닫힙니다.

작업 3: 숫자 값 입력

처리 양식의 버튼을 클릭하면 표준 번호 입력 대화 상자가 열립니다.

이렇게 하려면 모달 창 대신 차단 창을 여는 EnterNumber() 대신 ShowNumberInput() 메서드를 사용해야 합니다.

&On클라이언트
절차 번호 입력(명령어)
경고 = 신규 설명경고("번호 입력 완료", ThisObject );
표시입력번호(경고, 0, “수량 입력”, 15, 3);
절차 종료
&On클라이언트
절차 숫자입력완료(결과 , 추가 옵션) 내보내다

메시지 = 신규 사용자에게 보내는 메시지;
Message.Text = “수량을 입력하셨습니다” + 결과;
메시지.신고();
종료If ;
절차 종료

번호 입력 창을 닫은 후 프로시저가 호출되며, 첫 번째 매개변수는 입력된 번호이거나 사용자가 입력을 거부한 경우 정의되지 않은 값이 됩니다.

작업 4. 색상 선택

처리 양식에서 버튼을 클릭하면 표준 색상 선택 대화 상자를 사용하여 사용자가 필요한 색상을 지정합니다. 클릭한 버튼의 배경색으로 이 색상을 설정합니다.

다음 처리기를 사용하여 양식에 SelectColor 명령을 추가합니다.

&On클라이언트
절차 색상 선택(명령)
색상 선택 대화 상자= 신규 색상 선택 대화 상자;
경고 = 신규 설명경고("색상선택완료", ThisObject );
색상 선택 대화 상자.표시(경고);
절차 종료
&On클라이언트
절차 선택색상완성(결과 , 추가 옵션) 내보내다
결과가 아닌 경우 = 정의되지 않음
요소.색상 선택.배경색= 결과 ;
종료If ;
절차 종료

색상 선택 대화 상자 개체(표준 기간 편집 대화 상자, 형식 선 생성자, 일반 작업 일정 대화 상자, 글꼴 선택 대화 상자 포함)의 경우 Show() 메서드는 차단 창을 엽니다.

창을 닫은 후 프로시저가 호출되고 첫 번째 매개변수에 선택한 값(색상, 글꼴 등)이 전달되고 사용자가 선택을 거부한 경우 정의되지 않은 값이 전달됩니다.

FileSelectionDialog 개체에는 색상이나 글꼴 선택 대화 상자와 달리 Show() 메서드가 없다는 점에 유의해야 합니다. 이러한 대화 상자의 구현이 상당히 다르기 때문입니다.

웹 클라이언트에서 파일 선택 대화 상자를 사용하려면 먼저 파일 확장자를 활성화해야 합니다.

파일 확장자를 통해 구현된 대화 상자는 모달 브라우저 창과 동일한 작동 문제를 일으키지 않으므로 FileSelectionDialog 개체에 대한 차단 창 열기가 구현되지 않았습니다.

결론적으로, 릴리스 8.3.10부터 웹 클라이언트에서 모달 창에 대한 지원이 중단되었습니다. 이 경우 구성에서 모달 메서드를 호출하면 예외가 생성됩니다. 또한 웹 클라이언트에서 인터페이스 모드 지원이 중단되었습니다. 별도의 창에서. 또한 씬 클라이언트와 웹 클라이언트 모두에서 더 이상 별도의 창에서 양식을 열 수 없습니다(책갈피 인터페이스 모드에서 작업할 때). 이러한 과감한 조치로 인해 모든 최신 브라우저에서 더 이상 지원되지 않는 인터페이스 모드를 포기할 수 있게 되었습니다.

이 정보로부터 어떤 실질적인 결론을 도출할 수 있습니까? 결론은 매우 간단합니다. 어떤 이유로 구성에 여전히 모달 호출이 있는 경우 웹 클라이언트의 해당 위치에 오류 메시지가 있는 창이 표시됩니다. 이 문제에 대한 빠른 해결책을 "Google"에 시도하지 말 것을 경고하고 싶습니다. 왜냐하면... 대부분의 조언은 다음 레시피로 귀결됩니다. 구성 수준의 구성기에서 "Modality use mode" 속성을 "Use"로 설정합니다. 당연히 현재로서는 최신 브라우저 자체가 더 이상 모달 호출을 지원하지 않기 때문에 이 기능이 작동하지 않습니다.

위에서 설명한 문제를 해결하는 방법은 두 가지뿐입니다.

  1. 플랫폼을 8.3.10+(8.3.11) 릴리스로 업데이트하고 "호환성 모드" 구성 속성을 "사용 안 함"으로 설정하고 모달 메서드를 사용하는 코드 조각을 비동기 비즈니스 논리 모델로 다시 작성합니다.
  2. 클라이언트에게 여전히 모달 호출을 지원하는 이전 브라우저(Mozilla Firefox 버전 37 이하, Chrome 버전 37 이하 등)를 사용하도록 권장하십시오.

그런데 릴리스 8.3.11부터 Microsoft Internet Explorer 웹 브라우저 버전 8 및 9는 더 이상 지원되지 않습니다.

우리는 양상의 관점에서 웹 브라우저를 다루었습니다. 이제는 다른 클라이언트와 함께 상황을 명확히 할 때입니다.

버전 8.3.5부터 씬 및 씩 클라이언트의 Modality 사용 모드 속성은 /EnableCheckModal 명령줄 옵션이 지정된 경우에만 적용됩니다. 이 매개변수는 구성 프로그램에서 애플리케이션을 시작할 때만 명령줄에 자동으로 삽입됩니다. 이 매개변수를 지정하지 않으면 예외가 생성되지 않으며 해당 경고가 표시되지 않습니다. 저것들. 실제로 씩 클라이언트와 씬 클라이언트를 사용할 때 모달 모드를 사용할 때 작동에 근본적인 변화가 관찰되지 않습니다. 모달 호출은 웹 클라이언트에서처럼 경고를 생성하지 않고 이전과 동일하게 작동합니다.

모든 "i"에 점을 찍기 위해 버전 8.3.9부터 "플랫폼 확장 및 외부 구성 요소의 동기 호출을 사용하는 모드" 구성 속성이 씩 클라이언트에서 무시되는 반면 해당 동기 메서드는 생성하지 않고 작동합니다. 예외 및 경고 표시. 지정된 무시 속성은 Google Chrome 웹 브라우저에서 파일 작업을 위한 외부 구성 요소, 암호화 및 확장 기능을 사용한 비동기 작업을 지원하기 위해 버전 8.3.5에 추가되었습니다. 이는 씩(thick) 클라이언트와 아무 관련이 없다는 것이 분명하므로 이 속성을 "조용히" 무시하면 구성을 사용할 때 동기 방법 사용에 대한 불필요한 검사가 제거됩니다.

그런데! 플랫폼이 자신 있게 웹으로 이동하고 있다는 사실 때문에 개발자는 버전 8.3.8을 사용하여 씩(thick) 클라이언트와 씬(thin) 클라이언트에서 실행되는 양식 또는 응용 프로그램을 닫는 논리와 관련된 프로그램 코드에 특정 제한 사항을 도입했습니다. 이 뉘앙스를 자세히 다루는 기사를 꼭 읽어보세요. 또한 "1C: Enterprise 8.3의 인터페이스 및 양식 전문 개발" 과정에는 양식 포기에 관한 장이 있으며 이 주제에 대해 유용하고 관련성 높은 정보를 많이 수집할 수 있습니다.

동료 여러분, 끝없이 읽을 수 있는 두 가지가 있습니다: VKontakte 피드와 다음 플랫폼 릴리스의 변경 사항 목록이므로 최종 결과를 요약해 보겠습니다.)

동기 모델의 요소에서 비동기 모델로 이동할 수 있는 예제를 고려하는 과정에서 일반적인 경우에 더 많은 프로그램 코드가 있다는 것을 이미 알아차렸을 것입니다. 코드가 많을수록 추가 유지 관리 및 디버깅이 더 복잡해집니다.

또한 개발 과정에서 더 많은 대화 상자를 사용하면 코드의 양이 더욱 늘어납니다. 따라서 웹 클라이언트 작업에 초점을 맞춘 애플리케이션 솔루션을 개발하는 과정에서는 현재 최신 웹 애플리케이션에서 사용되는 작업 패러다임을 기억해야 합니다. 따라서 구성에 사용자 및 경고와의 대화형 대화 상자가 많이 있는 경우 사용자 상호 작용을 구성하는 다른 접근 방식을 선호하여 이 기능을 다시 고려하는 것이 좋습니다.

결론 대신

"1C 개발의 첫 번째 단계"주기가 끝났습니다. 전체적으로 읽으면 최근 플랫폼이 어떻게 비약적으로 발전하고 있는지 이미 눈치 채셨을 것입니다. 이 시리즈의 자료는 비교적 최근에 작성되었지만 진지하게 업데이트할 수밖에 없었습니다. 이렇게 짧은 시간에도 불구하고 새롭고 중요한 기능과 변화가 많이 나타났습니다. 이러한 주요 변경 사항은 1C 프로그래머가 항상 플랫폼을 통해 전문적으로 성장하고 개발하지 않은 경우 다소 당황스러울 수 있습니다.

전문 인터넷 리소스에서는 초보 프로그래머와 성숙한 동료의 요청을 읽고 1C 플랫폼의 광범위하고 때로는 끝이 없어 보이는 기능을 이해하는 데 도움이 되는 자료를 추천하는 경우가 많습니다. 우리는 전통적으로 프로그래밍 과정에 주의를 기울이는 것을 권장합니다.

"클라이언트에서 동기 메서드 사용이 금지되었습니다"라는 오류가 발생하는 이유는 무엇입니까?

수업을 완료하는 동안 이러한 오류가 발생하면 수정하는 것은 매우 쉽습니다.

구성기로 돌아가서 "구성" -> "구성 열기" 메뉴 항목을 선택합니다.

열리는 창에서 "구성" 항목을 마우스 오른쪽 버튼으로 클릭하고 열리는 메뉴에서 "속성"을 선택합니다.

구성 속성이 있는 창이 열립니다(오른쪽):

맨 아래로 스크롤하여 "양식 모드" 항목을 찾으세요.

값을 다음으로 설정하십시오. "사용":

주목!첫 번째 강의(이후 버전)에서 다운로드한 것과 다른 1C 플랫폼을 사용하는 경우 "동기 호출 사용 모드..." 필드도 표시됩니다. 또한 "사용"으로 설정해야 합니다.

마지막으로 "구성" -> "구성 저장" 메뉴 항목을 선택합니다.

준비가 된! 이제 더 이상 오류가 발생하지 않습니다.

아래 설명 - 우리가 한 일에 관심이 있는 사람들을 위한 설명입니다.

구성에서 양식 모드를 활성화했습니다. 기본적으로 이 모드는 비활성화되어 있으며 EnterNumber, EnterString, EnterDate, OpenValue와 같은 명령을 사용할 수 없습니다.

사실 이러한 명령은 모달입니다. 이를 호출하면 사용자 앞에 창이 나타나며(예: 정보 입력) 창이 닫힐 때까지 프로그램 작업 기능이 차단됩니다.

그리고 웹 브라우저를 통해 1C로 작업할 때 이러한 창이 존재하는 것은 매우 바람직하지 않기 때문에 새로운 구성을 개발할 때 모달리티 모드는 기본적으로 꺼집니다.