인터페이스 또는 비동기 호출 체인을 "깜박임"합니다. 인터페이스 또는 비동기 호출 체인을 "깜빡임" 대기 처리기 연결 1s 8.3

코드 1C v 8.2 UE ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
옵션:
<ИмяПроцедуры>
<Интервал>(필수) 유형: 숫자. 초 단위의 시간 간격(정확도는 1/10초이며 그 이후에는 프로시저가 호출됩니다(양수). 1보다 작은 값이 지정된 경우 세 번째 매개변수의 값은 True여야 합니다.
<Однократно>(선택 사항) 유형: 부울. 대기 핸들러의 일회성 실행에 대한 서명입니다.
True - 지정된 대기 처리기가 한 번 실행됩니다. 기본값: 거짓
설명: 지정된 프로시저를 대기 처리기로 연결합니다. 지정된 시간 간격이 경과할 때마다 시스템 시간 초과 기간 동안 프로시저가 호출됩니다.

유효성:
씬 클라이언트, 웹 클라이언트, 씩 클라이언트.

메모:
대기 처리기에 대한 호출은 양식이 닫힐 때까지 또는 양식의 비활성화WaitHandler 메서드가 호출될 때까지 계속됩니다. 코드 1C v 8.2 UE 비활성화 대기 핸들러(<ИмяПроцедуры>)

코드 1C v 8.2 UP
&클라이언트에서
프로시저 ShellHandler()
프로세스대기();
절차 종료

&서버에서
절차 프로세스대기 중()
// 필요한 것은 무엇이든 수행
절차 종료

//....
ConnectWaitHandler("HandlerWrapper", 3, True);

<ИмяПроцедуры>, <Интервал>, <Однократно>)
지정된 시간 간격으로 관리되는 애플리케이션 모듈(일반 애플리케이션 모듈) 또는 전역 공유 모듈의 지정된 프로시저를 호출합니다. 호출은 "휴식 상태", 즉 프로그램이 어떤 작업도 수행하지 않는 시간에만 이루어집니다. 시스템이 종료되거나 전역 컨텍스트의 비활성화WaitHandler 메서드가 호출될 때까지 대기 처리기 호출이 계속됩니다.
코드 1C v 8.x 절차 Sales ReportDay()
// ...
절차 종료

//...
ConnectWaitingHandler("DaySalesReport", 60); // 매 순간
코드 1C v 8.x // 표준 역동성 검사에서. 20분마다 구성이 업데이트됩니다.
ConnectWaitingHandler("IB DynamicChangeCheckWaitingHandler", 20 * 60);
// 데이터 교환 핸들러 연결
ConnectWaitingHandler("CheckingDataExchange", chValueVariable("chNumberofSecondsPollExchange"));
ConnectWaitingHandler("연결 응용 프로그램에 대한 응답 확인", 86400); // = 24(h) * 60(분) * 60(초) = 1일

양식용
코드 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
옵션:
<ИмяПроцедуры>(필수) 유형: 문자열. 대기 핸들러로 연결될 프로시저의 이름입니다.
<Интервал>(필수) 유형: 숫자. 시간 간격은 초 단위이며 1/10초까지 정확하며 이후 프로시저가 호출됩니다(양수). 1보다 작은 값이 지정되면 세 번째 매개변수의 값은 True여야 합니다.
<Однократно>(선택 사항) 유형: 부울. 대기 핸들러의 일회성 실행에 대한 서명입니다. 0True - 지정된 대기 처리기가 한 번 실행됩니다. 기본값: 거짓

설명:
지정된 프로시저를 대기 처리기로 연결합니다. 지정된 시간 간격이 경과할 때마다 시스템 시간 초과 기간 동안 프로시저가 호출됩니다.

유효성:
뚱뚱한 고객.
메모:
대기 처리기에 대한 호출은 양식이 닫힐 때까지 또는 양식의 비활성화WaitHandler 메서드가 호출될 때까지 계속됩니다.
예:
코드 1C v 8.x ConnectWaitingHandler("WhenWaiting", 1);
코드 1C v 8.x Form.mAutosave 간격 = 300; // 5 분
Form.m자동 저장 간격인 경우<>0 그런 다음
Form.ConnectWaitingHandler("TimerEventHandler", Int(Form.mAutoSaveInterval * 60));
endIf;

1C:Enterprise 시스템에서 처리 대기 중, 문서에서 다음과 같이 주어진 시간 간격으로 전역 모듈 프로시저를 주기적으로 실행하기 위한 것입니다. 실행할 코드는 다음과 같습니다.
코드 1C v 7.x 처리 대기 중("UpdateCounter_",1);
어디 "업데이트카운터_"- 1초마다 실행되는 전역 모듈 프로시저의 이름입니다. (두 번째 매개변수는 1과 같음)

하지만! 문제는 대기 처리를 한 번만 실행할 수 있다는 것입니다. 다시 시작하면 이전 작업이 취소됩니다. 즉, 예를 들어 경과 시간을 계산하는 타이머 처리를 수행하려는 경우 하나의 타이머만 실행할 수 있습니다. 두 번째 타이머를 시작하면 첫 번째 타이머가 중지됩니다. 하지만 동시에 2개, 3개 이상의 타이머를 실행해야 한다면 어떻게 될까요? 아니면 여전히 문서 상태를 주기적으로 스캔해야 합니까?

출구가 있습니다! 이 스레드를 전역 컨텍스트에서 분리하려면 양식 컨텍스트에서 대기 처리를 실행해야 합니다. 그러면 로컬 모듈 절차를 주기적으로 시작할 수 있게 됩니다. 처리 양식의 모듈에 있는 절차.

실행할 코드는 다음과 같습니다.
코드 1C v 7.x Form.Waiting Process("UpdateCounter_",1);
어디 "업데이트카운터_"- 1초 간격으로 실행되는 처리 양식의 로컬 모듈 프로시저 이름입니다. (두 번째 매개변수는 1과 같음)
따라서 각 처리에서 양식이 열려 있는 한 작동하는 자체 대기 처리를 실행할 수 있습니다.

양식으로 사용할 수 있습니다.코드 1C v 8.x Form.Waiting Process("ProcedureName",StartTime) ,
여기서 ProcedureName은 StartTime 초 후에 실행되는 프로시저의 이름입니다.
프로시저 자체에서 Code 1C v 8.x Form.Waiting Process("ProcedureName",0)을 삽입하여 대기 처리를 중지해야 합니다(물론 필요한 조건이 충족된 후).
원천

코드 1C v 8.2 UE ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
옵션:
<ИмяПроцедуры>
<Интервал>(필수) 유형: 숫자. 초 단위의 시간 간격(정확도는 1/10초이며 그 이후에는 프로시저가 호출됩니다(양수). 1보다 작은 값이 지정된 경우 세 번째 매개변수의 값은 True여야 합니다.
<Однократно>(선택 사항) 유형: 부울. 대기 핸들러의 일회성 실행에 대한 서명입니다.
True - 지정된 대기 처리기가 한 번 실행됩니다. 기본값: 거짓
설명: 지정된 프로시저를 대기 처리기로 연결합니다. 지정된 시간 간격이 경과할 때마다 시스템 시간 초과 기간 동안 프로시저가 호출됩니다.

유효성:
씬 클라이언트, 웹 클라이언트, 씩 클라이언트.

메모:
대기 처리기에 대한 호출은 양식이 닫힐 때까지 또는 양식의 비활성화WaitHandler 메서드가 호출될 때까지 계속됩니다. 코드 1C v 8.2 UE 비활성화 대기 핸들러(<ИмяПроцедуры>)

코드 1C v 8.2 UP
&클라이언트에서
프로시저 ShellHandler()
프로세스대기();
절차 종료

&서버에서
절차 프로세스대기 중()
// 필요한 것은 무엇이든 수행
절차 종료

//....
ConnectWaitHandler("HandlerWrapper", 3, True);

<ИмяПроцедуры>, <Интервал>, <Однократно>)
지정된 시간 간격으로 관리되는 애플리케이션 모듈(일반 애플리케이션 모듈) 또는 전역 공유 모듈의 지정된 프로시저를 호출합니다. 호출은 "휴식 상태", 즉 프로그램이 어떤 작업도 수행하지 않는 시간에만 이루어집니다. 시스템이 종료되거나 전역 컨텍스트의 비활성화WaitHandler 메서드가 호출될 때까지 대기 처리기 호출이 계속됩니다.
코드 1C v 8.x 절차 Sales ReportDay()
// ...
절차 종료

//...
ConnectWaitingHandler("DaySalesReport", 60); // 매 순간
코드 1C v 8.x // 표준 역동성 검사에서. 20분마다 구성이 업데이트됩니다.
ConnectWaitingHandler("IB DynamicChangeCheckWaitingHandler", 20 * 60);
// 데이터 교환 핸들러 연결
ConnectWaitingHandler("CheckingDataExchange", chValueVariable("chNumberofSecondsPollExchange"));
ConnectWaitingHandler("연결 응용 프로그램에 대한 응답 확인", 86400); // = 24(h) * 60(분) * 60(초) = 1일

양식용
코드 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
옵션:
<ИмяПроцедуры>(필수) 유형: 문자열. 대기 핸들러로 연결될 프로시저의 이름입니다.
<Интервал>(필수) 유형: 숫자. 시간 간격은 초 단위이며 1/10초까지 정확하며 이후 프로시저가 호출됩니다(양수). 1보다 작은 값이 지정되면 세 번째 매개변수의 값은 True여야 합니다.
<Однократно>(선택 사항) 유형: 부울. 대기 핸들러의 일회성 실행에 대한 서명입니다. 0True - 지정된 대기 처리기가 한 번 실행됩니다. 기본값: 거짓

설명:
지정된 프로시저를 대기 처리기로 연결합니다. 지정된 시간 간격이 경과할 때마다 시스템 시간 초과 기간 동안 프로시저가 호출됩니다.

유효성:
뚱뚱한 고객.
메모:
대기 처리기에 대한 호출은 양식이 닫힐 때까지 또는 양식의 비활성화WaitHandler 메서드가 호출될 때까지 계속됩니다.
예:
코드 1C v 8.x ConnectWaitingHandler("WhenWaiting", 1);
코드 1C v 8.x Form.mAutosave 간격 = 300; // 5 분
Form.m자동 저장 간격인 경우<>0 그런 다음
Form.ConnectWaitingHandler("TimerEventHandler", Int(Form.mAutoSaveInterval * 60));
endIf;

1C:Enterprise 시스템에서 처리 대기 중, 문서에서 다음과 같이 주어진 시간 간격으로 전역 모듈 프로시저를 주기적으로 실행하기 위한 것입니다. 실행할 코드는 다음과 같습니다.
코드 1C v 7.x 처리 대기 중("UpdateCounter_",1);
어디 "업데이트카운터_"- 1초마다 실행되는 전역 모듈 프로시저의 이름입니다. (두 번째 매개변수는 1과 같음)

하지만! 문제는 대기 처리를 한 번만 실행할 수 있다는 것입니다. 다시 시작하면 이전 작업이 취소됩니다. 즉, 예를 들어 경과 시간을 계산하는 타이머 처리를 수행하려는 경우 하나의 타이머만 실행할 수 있습니다. 두 번째 타이머를 시작하면 첫 번째 타이머가 중지됩니다. 하지만 동시에 2개, 3개 이상의 타이머를 실행해야 한다면 어떻게 될까요? 아니면 여전히 문서 상태를 주기적으로 스캔해야 합니까?

출구가 있습니다! 이 스레드를 전역 컨텍스트에서 분리하려면 양식 컨텍스트에서 대기 처리를 실행해야 합니다. 그러면 로컬 모듈 절차를 주기적으로 시작할 수 있게 됩니다. 처리 양식의 모듈에 있는 절차.

실행할 코드는 다음과 같습니다.
코드 1C v 7.x Form.Waiting Process("UpdateCounter_",1);
어디 "업데이트카운터_"- 1초 간격으로 실행되는 처리 양식의 로컬 모듈 프로시저 이름입니다. (두 번째 매개변수는 1과 같음)
따라서 각 처리에서 양식이 열려 있는 한 작동하는 자체 대기 처리를 실행할 수 있습니다.

양식으로 사용할 수 있습니다.코드 1C v 8.x Form.Waiting Process("ProcedureName",StartTime) ,
여기서 ProcedureName은 StartTime 초 후에 실행되는 프로시저의 이름입니다.
프로시저 자체에서 Code 1C v 8.x Form.Waiting Process("ProcedureName",0)을 삽입하여 대기 처리를 중지해야 합니다(물론 필요한 조건이 충족된 후).
원천

1C 플랫폼은 비동기적으로 프로시저를 호출하는 기능을 제공하는데, 이는 때때로 간단하지만 재미있는 작업에 사용될 수 있습니다. 예를 들어, 색상이 있거나 시각적 모양을 변경할 수 있는 기능이 있는 모든 것을 "깜박임"할 수 있습니다. 또한 더 간단하지만 제어되지 않는 메커니즘을 사용하거나 흥미로운 비동기 호출 체인을 구성하고 선호하는 동작을 제공할 수 있습니다.

물론 여기서는 ConnectWaitingHandler() 프로시저에 대해 이야기하고 있습니다.

절차의 구문을 상기시켜 드리겠습니다.

ConnectWaitHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)

또한 1초 미만의 간격을 지정하는 경우 프로시저를 한 번 실행해야 합니다. 여기서는 실행 흐름에 대한 제어력을 상실하고 이를 "사용자 정의"(유연하고 개별적으로 구성)하는 기능을 상실합니다.

그러나 이 한계는 쉽게 극복된다.

생각이 흩어지지 않도록 즉시 간단한 예를 들어 설명하겠습니다.

양식에 스프레드시트 문서가 있고 그 일부 영역을 5번 "깜빡"하고 싶다고 가정해 보겠습니다.

////////////////// // // 스프레드시트 문서 영역을 0.5초 간격으로 5번 "깜박임" // //// /////// ///////// 클라이언트 프로시저에서 BlinkArea(명령) mf 깜박일 횟수 = 3; // 카운터. 대기 처리기 프로시저의 양식 속성 "표시" ConnectWaitHandler("ShowAreaSelection", 0.1, True); // 클라이언트 프로시저에서 EndProcedure를 직접 호출할 수도 있습니다(&On) ShowArea Selection() Area = Object.TD.Area(mfFirstDataLine, mfFirstDataColumn, mfLastDataLine, mfLastDataColumn); Border = New Line(TableDocumentCellLineType.Double); Area.Circle(테두리, 테두리, 테두리, 테두리); // 영역 개요 mf깜박이는 횟수 = mf깜박이는 횟수 - 1; // 카운터 감소 Connect WaitHandler("RemoveArea Allocation", 0.5, True); // 비동기 호출 체인 연결 프로시저 끝 & 클라이언트 프로시저에서 Remove Area Selection() Area = Object.TD.Area(mfFirstDataLine, mfFirstDataColumn, mfLastDataLine, mfLastDataColumn); 테두리 = 새 줄(TableDocumentCellLineType.NoLine); Area.Circle(테두리, 테두리, 테두리, 테두리); // 영역의 외곽선을 제거합니다. If mf 깜박이는 횟수 > 0 Then Connect WaitHandler("Show Area Selection", 0.5, True); // 카운터에 남은 만큼 반복합니다. EndIf; 절차 종료

유일한 요구 사항은 카운터 변수 mfHow Many Times Blink가 비동기적으로 실행되는 프로시저에서 "표시"되어야 한다는 것입니다. 이 경우 변수는 양식 속성입니다.

주의 깊은 독자라면 그러한 사슬이 형성되면 일석이조라는 사실을 알아차렸을 것입니다.

  • 1초 미만의 간격 값을 사용하여 프로시저 호출 반복에 대한 제한을 우회합니다.
  • 우리는 다양한 길이와 복잡성의 사슬을 형성할 수 있는 능력을 가지고 있습니다.
    • 대기 처리기 프로시저 자체에서 대기 처리기를 직접 연결합니다.
    • 그러한 절차가 서로 연결되어 있는지 확인하십시오.
    • 보다 복잡한 호출 체인 구조를 구성합니다.
    • 통화 관리의 가변성을 끝없이 복잡하게 만듭니다(예를 들어 통화 내부 카운터뿐만 아니라 간격 값, 디자인 스타일도 변경하여 🌈가 무지개처럼 반짝입니다).

설명된 방법의 단순성에도 불구하고 상당한 잠재력이 숨겨져 있습니다.

2017년에는 프로그램 동작을 보다 유연하게 관리하는 것이 현대적입니다.