Thực thi mã định kỳ tại một khoảng thời gian xác định - Đang chờ xử lý(). Thực thi mã định kỳ tại một khoảng thời gian xác định - Đang chờ xử lý() Kết nối trình xử lý chờ 1s 8.3

Mã 1C v 8.2 UE ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Tùy chọn:
<ИмяПроцедуры>
<Интервал>(bắt buộc) Loại: Số. Khoảng thời gian tính bằng giây, chính xác đến 1/10 giây, sau đó thủ tục sẽ được gọi (số dương). Nếu chỉ định giá trị nhỏ hơn 1 thì giá trị của tham số thứ ba phải là True.
<Однократно>(tùy chọn) Loại: Boolean. Dấu hiệu thực hiện một lần của trình xử lý chờ.
Đúng - trình xử lý chờ đã chỉ định sẽ được thực thi một lần. Mặc định: Sai
Mô tả: Kết nối thủ tục đã chỉ định dưới dạng trình xử lý chờ. Quy trình sẽ được gọi trong khoảng thời gian chờ của hệ thống mỗi khi khoảng thời gian được chỉ định trôi qua.

Khả dụng:
Máy khách mỏng, máy khách web, máy khách dày.

Ghi chú:
Cuộc gọi đến trình xử lý chờ tiếp tục cho đến khi biểu mẫu được đóng hoặc cho đến khi phương thức DisableWaitHandler của biểu mẫu được gọi. Mã 1C v 8.2 UE Vô hiệu hóaWaitingHandler(<ИмяПроцедуры>)

Mã 1C v 8.2 LÊN
&Trên máy khách
Thủ tục ShellHandler()
Quá trình chờ đợi();
Kết thúc thủ tục

&Trên máy chủ
Quy trình thủ tụcĐang chờ()
// làm bất cứ điều gì được yêu cầu
Kết thúc thủ tục

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

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Thực hiện lệnh gọi đến quy trình đã chỉ định của mô-đun ứng dụng được quản lý (mô-đun ứng dụng thông thường) hoặc mô-đun chia sẻ toàn cầu tại một khoảng thời gian được chỉ định. Cuộc gọi sẽ chỉ được thực hiện ở “trạng thái nghỉ”, tức là tại thời điểm chương trình không thực hiện bất kỳ hành động nào. Việc gọi trình xử lý chờ tiếp tục cho đến khi hệ thống tắt hoặc phương thức DisableWaitHandler của ngữ cảnh chung được gọi.
Mã 1C v 8.x Thủ tục Báo cáo bán hàngNgày()
// ...
Kết thúc thủ tục

//...
ConnectWaitingHandler("DaySalesReport", 60); // mỗi phút
Mã 1C v 8.x // Trong kiểm tra động tiêu chuẩn. cập nhật cấu hình cứ sau 20 phút.
ConnectWaitingHandler("IB DynamicChangeCheckWaitingHandler", 20 * 60);
// kết nối bộ xử lý trao đổi dữ liệu
ConnectWaitingHandler("CheckingDataExchange", chValueVariable("chNumberofSecondsPollExchange"));
ConnectWaitingHandler("Kiểm tra phản hồi cho các ứng dụng kết nối", 86400); // = 24(h) * 60(phút) * 60(giây) = 1 ngày

Đối với biểu mẫu
Mã 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Tùy chọn:
<ИмяПроцедуры>(bắt buộc) Loại: Chuỗi. Tên của thủ tục được kết nối với tư cách là trình xử lý chờ.
<Интервал>(bắt buộc) Loại: Số. Khoảng thời gian tính bằng giây, chính xác đến 1/10 giây, sau đó thủ tục sẽ được gọi (số dương). Nếu giá trị nhỏ hơn 1 được chỉ định thì giá trị của tham số thứ ba phải là True.
<Однократно>(tùy chọn) Loại: Boolean. Dấu hiệu thực hiện một lần của trình xử lý chờ. 0True - trình xử lý chờ được chỉ định sẽ được thực thi một lần. Mặc định: Sai

Sự miêu tả:
Kết nối thủ tục đã chỉ định dưới dạng trình xử lý chờ. Quy trình sẽ được gọi trong khoảng thời gian chờ của hệ thống mỗi khi khoảng thời gian được chỉ định trôi qua.

Khả dụng:
Khách hàng béo.
Ghi chú:
Cuộc gọi đến trình xử lý chờ tiếp tục cho đến khi biểu mẫu được đóng hoặc cho đến khi phương thức DisableWaitHandler của biểu mẫu được gọi.
Ví dụ:
Mã 1C v 8.x ConnectWaitingHandler("WhenWaiting", 1);
Mã 1C v 8.x Form.mAutosave Khoảng thời gian = 300; // 5 phút
Nếu khoảng thời gian Form.mAutosave<>0 Sau đó
Form.ConnectWaitingHandler("TimerEventHandler", Int(Form.mAutoSaveInterval * 60));
endIf;

Đang chờ xử lý trong hệ thống 1C:Enterprise, như sau trong tài liệu, được dùng để thực hiện định kỳ quy trình mô-đun toàn cầu trong một khoảng thời gian nhất định. Mã để chạy sẽ trông như thế này:
Mã 1C v 7.x Đang chờ xử lý ("UpdateCounter_", 1);
Ở đâu "UpdateCounter_"- tên của quy trình mô-đun toàn cầu sẽ được khởi chạy sau mỗi 1 giây. (tham số thứ hai bằng 1)

Nhưng! Vấn đề là bạn chỉ có thể chạy xử lý chờ một lần. Việc khởi động lại sẽ hủy cái trước đó. Nói cách khác, nếu bạn muốn thực hiện, chẳng hạn như xử lý bộ hẹn giờ để đếm thời gian đã trôi qua, thì bạn chỉ có thể chạy một bộ hẹn giờ, bởi vì bắt đầu bộ hẹn giờ thứ hai sẽ dừng bộ hẹn giờ đầu tiên. Nhưng nếu bạn cần chạy 2, 3 hoặc nhiều bộ hẹn giờ này cùng lúc thì sao? Hay bạn vẫn cần quét định kỳ tình trạng tài liệu?

Có một lối ra! Quá trình xử lý chờ phải được chạy trong ngữ cảnh biểu mẫu để tách luồng này khỏi ngữ cảnh chung. Và sau đó sẽ có thể khởi chạy định kỳ quy trình mô-đun cục bộ, tức là. thủ tục nằm trong mô-đun của biểu mẫu xử lý của bạn.

Mã để chạy sẽ trông như thế này:
Mã 1C v 7.x Form.Đang chờ xử lý("UpdateCounter_",1);
Ở đâu "UpdateCounter_"- tên quy trình của mô-đun cục bộ của biểu mẫu xử lý, sẽ được khởi chạy trong khoảng thời gian 1 giây. (tham số thứ hai bằng 1)
Do đó, trong mỗi quá trình xử lý, bạn có thể chạy quá trình chờ đợi của riêng mình, quá trình này sẽ hoạt động miễn là biểu mẫu được mở.

Bạn có thể sử dụng nó trong các hình thức Mã 1C v 8.x Form.Waiting Treatment("ProcedureName",StartTime) ,
trong đó Tên thủ tục là tên của thủ tục chạy sau giây StartTime
Trong chính quy trình này, bạn cần chèn Mã 1C v 8.x Form.Waiting Treatment("ProcedureName",0) để dừng quá trình chờ xử lý (tất nhiên, sau khi đáp ứng các điều kiện cần thiết).
Nguồn

Mã 1C v 8.2 UE ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Tùy chọn:
<ИмяПроцедуры>
<Интервал>(bắt buộc) Loại: Số. Khoảng thời gian tính bằng giây, chính xác đến 1/10 giây, sau đó thủ tục sẽ được gọi (số dương). Nếu chỉ định giá trị nhỏ hơn 1 thì giá trị của tham số thứ ba phải là True.
<Однократно>(tùy chọn) Loại: Boolean. Dấu hiệu thực hiện một lần của trình xử lý chờ.
Đúng - trình xử lý chờ đã chỉ định sẽ được thực thi một lần. Mặc định: Sai
Mô tả: Kết nối thủ tục đã chỉ định dưới dạng trình xử lý chờ. Quy trình sẽ được gọi trong khoảng thời gian chờ của hệ thống mỗi khi khoảng thời gian được chỉ định trôi qua.

Khả dụng:
Máy khách mỏng, máy khách web, máy khách dày.

Ghi chú:
Cuộc gọi đến trình xử lý chờ tiếp tục cho đến khi biểu mẫu được đóng hoặc cho đến khi phương thức DisableWaitHandler của biểu mẫu được gọi. Mã 1C v 8.2 UE Vô hiệu hóaWaitingHandler(<ИмяПроцедуры>)

Mã 1C v 8.2 LÊN
&Trên máy khách
Thủ tục ShellHandler()
Quá trình chờ đợi();
Kết thúc thủ tục

&Trên máy chủ
Quy trình thủ tụcĐang chờ()
// làm bất cứ điều gì được yêu cầu
Kết thúc thủ tục

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

<ИмяПроцедуры>, <Интервал>, <Однократно>)
Thực hiện lệnh gọi đến quy trình đã chỉ định của mô-đun ứng dụng được quản lý (mô-đun ứng dụng thông thường) hoặc mô-đun chia sẻ toàn cầu tại một khoảng thời gian được chỉ định. Cuộc gọi sẽ chỉ được thực hiện ở “trạng thái nghỉ”, tức là tại thời điểm chương trình không thực hiện bất kỳ hành động nào. Việc gọi trình xử lý chờ tiếp tục cho đến khi hệ thống tắt hoặc phương thức DisableWaitHandler của ngữ cảnh chung được gọi.
Mã 1C v 8.x Thủ tục Báo cáo bán hàngNgày()
// ...
Kết thúc thủ tục

//...
ConnectWaitingHandler("DaySalesReport", 60); // mỗi phút
Mã 1C v 8.x // Trong kiểm tra động tiêu chuẩn. cập nhật cấu hình cứ sau 20 phút.
ConnectWaitingHandler("IB DynamicChangeCheckWaitingHandler", 20 * 60);
// kết nối bộ xử lý trao đổi dữ liệu
ConnectWaitingHandler("CheckingDataExchange", chValueVariable("chNumberofSecondsPollExchange"));
ConnectWaitingHandler("Kiểm tra phản hồi cho các ứng dụng kết nối", 86400); // = 24(h) * 60(phút) * 60(giây) = 1 ngày

Đối với biểu mẫu
Mã 1C v 8.x ConnectWaitingHandler(<ИмяПроцедуры>, <Интервал>, <Однократно>)
Tùy chọn:
<ИмяПроцедуры>(bắt buộc) Loại: Chuỗi. Tên của thủ tục được kết nối với tư cách là trình xử lý chờ.
<Интервал>(bắt buộc) Loại: Số. Khoảng thời gian tính bằng giây, chính xác đến 1/10 giây, sau đó thủ tục sẽ được gọi (số dương). Nếu giá trị nhỏ hơn 1 được chỉ định thì giá trị của tham số thứ ba phải là True.
<Однократно>(tùy chọn) Loại: Boolean. Dấu hiệu thực hiện một lần của trình xử lý chờ. 0True - trình xử lý chờ được chỉ định sẽ được thực thi một lần. Mặc định: Sai

Sự miêu tả:
Kết nối thủ tục đã chỉ định dưới dạng trình xử lý chờ. Quy trình sẽ được gọi trong khoảng thời gian chờ của hệ thống mỗi khi khoảng thời gian được chỉ định trôi qua.

Khả dụng:
Khách hàng béo.
Ghi chú:
Cuộc gọi đến trình xử lý chờ tiếp tục cho đến khi biểu mẫu được đóng hoặc cho đến khi phương thức DisableWaitHandler của biểu mẫu được gọi.
Ví dụ:
Mã 1C v 8.x ConnectWaitingHandler("WhenWaiting", 1);
Mã 1C v 8.x Form.mAutosave Khoảng thời gian = 300; // 5 phút
Nếu khoảng thời gian Form.mAutosave<>0 Sau đó
Form.ConnectWaitingHandler("TimerEventHandler", Int(Form.mAutoSaveInterval * 60));
endIf;

Đang chờ xử lý trong hệ thống 1C:Enterprise, như sau trong tài liệu, được dùng để thực hiện định kỳ quy trình mô-đun toàn cầu trong một khoảng thời gian nhất định. Mã để chạy sẽ trông như thế này:
Mã 1C v 7.x Đang chờ xử lý ("UpdateCounter_", 1);
Ở đâu "UpdateCounter_"- tên của quy trình mô-đun toàn cầu sẽ được khởi chạy sau mỗi 1 giây. (tham số thứ hai bằng 1)

Nhưng! Vấn đề là bạn chỉ có thể chạy xử lý chờ một lần. Việc khởi động lại sẽ hủy cái trước đó. Nói cách khác, nếu bạn muốn thực hiện, chẳng hạn như xử lý bộ hẹn giờ để đếm thời gian đã trôi qua, thì bạn chỉ có thể chạy một bộ hẹn giờ, bởi vì bắt đầu bộ hẹn giờ thứ hai sẽ dừng bộ hẹn giờ đầu tiên. Nhưng nếu bạn cần chạy 2, 3 hoặc nhiều bộ hẹn giờ này cùng lúc thì sao? Hay bạn vẫn cần quét định kỳ tình trạng tài liệu?

Có một lối ra! Quá trình xử lý chờ phải được chạy trong ngữ cảnh biểu mẫu để tách luồng này khỏi ngữ cảnh chung. Và sau đó sẽ có thể khởi chạy định kỳ quy trình mô-đun cục bộ, tức là. thủ tục nằm trong mô-đun của biểu mẫu xử lý của bạn.

Mã để chạy sẽ trông như thế này:
Mã 1C v 7.x Form.Đang chờ xử lý("UpdateCounter_",1);
Ở đâu "UpdateCounter_"- tên quy trình của mô-đun cục bộ của biểu mẫu xử lý, sẽ được khởi chạy trong khoảng thời gian 1 giây. (tham số thứ hai bằng 1)
Do đó, trong mỗi quá trình xử lý, bạn có thể chạy quá trình chờ đợi của riêng mình, quá trình này sẽ hoạt động miễn là biểu mẫu được mở.

Bạn có thể sử dụng nó trong các hình thức Mã 1C v 8.x Form.Waiting Treatment("ProcedureName",StartTime) ,
trong đó Tên thủ tục là tên của thủ tục chạy sau giây StartTime
Trong chính quy trình này, bạn cần chèn Mã 1C v 8.x Form.Waiting Treatment("ProcedureName",0) để dừng quá trình chờ xử lý (tất nhiên, sau khi đáp ứng các điều kiện cần thiết).
Nguồn

Nền tảng 1C cung cấp cho chúng tôi khả năng gọi các thủ tục không đồng bộ, đôi khi có thể được sử dụng cho những việc đơn giản nhưng thú vị. Ví dụ: bạn có thể “chớp mắt” bất kỳ thứ gì có màu sắc hoặc bất kỳ khả năng nào có thể thay đổi hình thức trực quan. Hơn nữa, bạn có thể sử dụng cơ chế đơn giản hơn nhưng không được kiểm soát hoặc xây dựng một chuỗi lệnh gọi không đồng bộ thú vị và cung cấp cho nó hành vi ưa thích.

Tất nhiên, ở đây chúng ta đang nói về thủ tục ConnectWaitingHandler().

Hãy để tôi nhắc bạn về cú pháp của thủ tục:

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

Hơn nữa, nếu bạn chỉ định khoảng thời gian dưới một giây, quy trình phải được khởi chạy một lần. Đây là lúc chúng ta mất quyền kiểm soát luồng thực thi và mất khả năng “tùy chỉnh” nó (cấu hình linh hoạt, riêng lẻ).

Nhưng hạn chế này có thể dễ dàng khắc phục.

Để không để suy nghĩ lan man, tôi sẽ đưa ra ngay một ví dụ đơn giản và giải thích.

Giả sử chúng ta có một tài liệu bảng tính trên biểu mẫu và chúng ta muốn “chớp mắt” một khu vực nào đó trong đó 5 lần.

/////////////////// // // “Nhấp nháy” khu vực của tài liệu Bảng tính 5 lần, với khoảng thời gian là nửa giây ///// /////// ///////// &Trên quy trình khách hàng BlinkArea (Lệnh) mf Nhấp nháy bao nhiêu lần = 3; // Quầy tính tiền. Thuộc tính biểu mẫu, “hiển thị” trong quy trình xử lý chờ ConnectWaitHandler("ShowAreaSelection", 0.1, True); // Bạn cũng có thể gọi trực tiếp EndProcedure &On the Client Protocol ShowArea Selection() Area = Object.TD.Area(mfFirstDataLine, mfFirstDataColumn, mfLastDataLine, mfLastDataColumn); Đường viền = Dòng mới(TableDocumentCellLineType.Double); Area.Circle(Biên giới, Biên giới, Biên giới, Biên giới); // Phác thảo khu vực mfNháy mắt bao nhiêu lần = mfNháy mắt bao nhiêu lần - 1; // Giảm bộ đếm Connect WaitHandler("RemoveArea Allocation", 0.5, True); // Kết nối một chuỗi các lệnh gọi không đồng bộ Kết thúc thủ tục & Trên thủ tục máy khách Xóa vùng chọn() Area = Object.TD.Area(mfFirstDataLine, mfFirstDataColumn, mfLastDataLine, mfLastDataColumn); Đường viền = Dòng mới(TableDocumentCellLineType.NoLine); Area.Circle(Biên giới, Biên giới, Biên giới, Biên giới); // Xóa đường viền của vùng Nếu mf Nhấp nháy bao nhiêu lần > 0 thì kết nối WaitHandler("Show Area Selection", 0.5, True); // Lặp lại số lượng còn lại trên bộ đếm EndIf; Kết thúc thủ tục

Yêu cầu duy nhất là biến đếm mfHow Many Times Blink phải "hiển thị" từ các quy trình mà chúng tôi khởi chạy không đồng bộ. Trong trường hợp này, biến là thuộc tính biểu mẫu.

Một độc giả chú ý có thể nhận thấy rằng với việc hình thành những chuỗi như vậy, chúng ta đang giết hai con chim bằng một hòn đá:

  • Chúng tôi bỏ qua hạn chế lặp lại các cuộc gọi thủ tục với các giá trị khoảng thời gian dưới một giây;
  • Chúng ta có khả năng hình thành các chuỗi có độ dài và độ phức tạp khác nhau:
    • kết nối trình xử lý chờ trực tiếp trong chính quy trình xử lý chờ;
    • đảm bảo rằng các thủ tục đó kết nối với nhau;
    • tổ chức một cấu trúc phức tạp hơn của chuỗi cuộc gọi;
    • làm phức tạp vô tận tính biến đổi của việc quản lý cuộc gọi (ví dụ: thay đổi không chỉ bộ đếm bên trong cuộc gọi mà còn cả các giá trị khoảng thời gian, kiểu thiết kế (để 🌈 lấp lánh như cầu vồng).

Bất chấp sự đơn giản của phương pháp được mô tả, tiềm năng đáng kể vẫn ẩn chứa trong đó.

Năm 2017, việc quản lý hành vi chương trình linh hoạt hơn là hiện đại.