Chế độ phương thức 1c. Phải làm gì nếu "việc sử dụng cửa sổ phương thức ở chế độ này bị cấm." Hướng dẫn sửa lỗi cho người dùng thông thường

Trong thuộc tính cấu hình trên nền tảng 1C:Enterprise 8.3 có Chế độ sử dụng phương thức. Nếu giá trị của trường này là "Không sử dụng", thì khi bạn cố mở một cửa sổ phương thức, nền tảng sẽ hiển thị thông báo "Việc sử dụng các cửa sổ phương thức ở chế độ này bị cấm." Trong trường hợp này, việc thực thi mã chương trình sẽ dừng lại.

Bài viết này trình bày cơ chế thay đổi mã chương trình, sử dụng ví dụ về câu hỏi dành cho người dùng khi chế độ phương thức bị tắt.

Đôi khi, khi phát triển một sản phẩm phần mềm, cần phải hỏi người dùng về các hành động đang được thực hiện. Ví dụ: khi tự động điền các phần dạng bảng. Trước khi nạp lại PM, cần phải hỏi người dùng về sự cần thiết phải thực hiện việc này. Và tùy vào câu trả lời của anh ta mà PM sẽ được xóa và nạp lại hay không.

Phần câu hỏi của mã có thể trông giống như thế này:

Nếu PM. Số lượng()< >0 Sau đó trả lời = Câu hỏi(" // Dòng này sẽ hiển thị một cửa sổ phương thức với một câu hỏi và việc thực thi mã sẽ dừng cho đến khi người dùng trả lời Nếu trả lời = DialogReturnCode. Không Rồi Trở Lại; Kết thúc Nếu ; // Người dùng đồng ý tiếp tục BUỔI CHIỀU. Thông thoáng() ; Kết thúc Nếu ; // Thực hiện các hành động tiếp theo // Chương trình sẽ chuyển đến đây nếu PM trống hoặc người dùng trả lời tích cực cho câu hỏi về việc nạp tiền Thực hiện các hành động tiếp theo () ;

Khi chế độ phương thức bị tắt, sẽ xảy ra lỗi trong dòng câu hỏi của mã này và việc thực thi tiếp theo sẽ bị gián đoạn. Điều này sẽ xảy ra vì hàm Câu hỏi sử dụng cửa sổ phương thức.

Trong trường hợp này, bạn phải sử dụng thủ tục ShowQuestion. Quy trình này không đợi phản hồi của người dùng hoàn tất. Nhưng tham số đầu tiên của quy trình này là mô tả cảnh báo, được sử dụng để theo dõi phản hồi của người dùng.

Mã được viết trước đó sẽ thay đổi như thế nào:

// Cần điền dữ liệu PM // Kiểm tra PM đầy đủ chưa Nếu PM. Số lượng()< >0 Sau đó // PM không trống, bạn cần hỏi người dùng về việc nạp tiền ShowQuestion(Mô tả mớiAlerts(" Hoàn thành TC nạp lại" , ThisObject, ExtraParameters) , " PM sẽ được nạp lại. Tiếp tục ?", Chế độ đối thoạiCâu hỏi. YesNo) ; // Dòng này sẽ hiển thị cửa sổ câu hỏi nhưng code sẽ không ngừng thực thi Nếu không thì // Chương trình sẽ vào đây nếu PM trống Thực hiện các hành động tiếp theo() ; Kết thúc Nếu ; // Chương trình sẽ vào đây trong mọi trường hợp, dù PM có trống hay không // (tất nhiên trừ khi có lỗi ở mã trước đó) . . . // Thủ tục xuất trong cùng một mô-đun // Được gọi sau khi người dùng trả lời câu hỏi& Về thủ tục khách hàng Nạp lại TCCompletion (Kết quả phản hồi, tham số bổ sung) Xuất nếu kết quả phản hồi = Mã trả về hội thoại. Không thì // Người dùng từ chối tiếp tục Trở lại ; Kết thúc Nếu ; // Thực hiện các hành động tiếp theo // Chương trình sẽ chuyển đến đây nếu PM không trống và người dùng trả lời tích cực cho câu hỏi về việc nạp tiền BUỔI CHIỀU. Thông thoáng() ; Thực hiện các hành động tiếp theo() ; Kết thúc thủ tục

Vì vậy, vì chương trình sẽ không dừng khi thủ tục ShowQuestion được thực thi nên cần phải xử lý cẩn thận tất cả các sự kiện.
Khi giải quyết vấn đề này, các hành động tiếp theo có thể xảy ra khi xảy ra hai sự kiện:
1. Nếu PM trống
2. Nếu PM không trống và người dùng phản hồi tích cực cho câu hỏi, hãy nạp lại

Và theo đó, vì chương trình không ngừng chờ phản hồi của người dùng nên việc gọi các sự kiện này phải được phân bổ thành các phần khác nhau của mã.
Do đó, theo quy định, tất cả các phương pháp thực thi cần được thực hiện sau khi kiểm tra tính đầy đủ của PM đều được đặt trong một quy trình riêng.

Một cơ chế tương tự được sử dụng cho các chức năng tương tác người dùng tương tự (SelectValue, SelectFromList, v.v.)

14
Để buộc doanh nghiệp khởi chạy trong ứng dụng Thông thường hoặc Được quản lý, hãy sử dụng các phím sau: /RunModeOrdinaryApplication khởi chạy máy khách dày ở chế độ bình thường, bất chấp cài đặt cấu hình và... 3
Điều cần thiết là người dùng không thể thay đổi giao diện được cấu hình cho họ! Giải pháp: Để tắt tính năng này, bạn cần xóa quyền “Lưu dữ liệu người dùng” khỏi quyền truy cập của thành phần cấu hình gốc. ... 2
Trong công việc hiện tại, người dùng thường mở một số đối tượng. Đây có thể là một tài liệu, sách tham khảo, báo cáo, v.v. Trong giao diện trước đó, không gặp vấn đề gì khi nhanh chóng tìm thấy một đối tượng đang mở và cập nhật nó cho... 2
Trong bài viết trước: Cài đặt bộ phân loại địa chỉ (KLADR) trong 1C, tôi đã nói với bạn KLADR là gì và cách tải nó vào các dạng thông thường 1C (8.0-8.2). Trong bài viết này tôi sẽ hướng dẫn bạn cách tải Trình phân loại địa chỉ (KLADR) vào... 2
Thông thường khi phát triển một cấu hình nhất định, người dùng muốn đính kèm ảnh vào một thành phần thư mục và lưu trữ chúng trong cơ sở dữ liệu. Trong bài viết này tôi sẽ hướng dẫn bạn cách kết nối các đối tượng xây dựng với thư mục...

Được triển khai trong phiên bản 8.3.3.641.

1C:Enterprise sử dụng cửa sổ phương thức trong các tình huống mà người dùng được yêu cầu nhập thông tin mà không thể thực hiện thêm thuật toán. Trong trường hợp này, toàn bộ phần còn lại của giao diện chương trình bị chặn hoàn toàn và quá trình thực thi mã chương trình sẽ dừng lại cho đến khi người dùng đóng cửa sổ phương thức.

Với sự ra đời của ứng dụng khách web và quá trình chuyển đổi 1C:Enterprise sang nền tảng di động, các cửa sổ phương thức hóa ra là nguồn gốc của vô số bất tiện và vấn đề, thường không thể giải quyết được.

Theo quy định, các trình duyệt "máy tính để bàn", tốt hơn hoặc tệ hơn, đều hỗ trợ các cửa sổ phương thức và mở chúng trong cửa sổ trình duyệt mới dưới dạng "cửa sổ bật lên":

Nhưng do công nghệ cửa sổ bật lên được sử dụng ồ ạt trên Internet để quảng cáo nên hầu như tất cả các trình duyệt đều mặc định tắt cửa sổ bật lên. Trong phần lớn các trường hợp, nếu không thay đổi cài đặt trình duyệt này, ứng dụng khách web sẽ không hoạt động.

Một vấn đề khác là trình duyệt di động hoàn toàn không hỗ trợ cửa sổ phương thức. Và để 1C:Enterprise có thể hoạt động trong đó, một cơ chế đặc biệt đã được triển khai trong máy khách web. Đây là một cơ chế khá phức tạp và thật không may, không bao gồm tất cả các tình huống cần thiết. Kết quả là, chẳng hạn, cấu hình trên iPad rất khó duy trì.

Trong tình huống như vậy, tùy chọn vận hành giao diện 1C:Enterprise mà không sử dụng cửa sổ phương thức sẽ loại bỏ tất cả các vấn đề được liệt kê ở trên.

Đồng thời, không có việc từ bỏ chức năng được cung cấp trước đây bởi các cửa sổ phương thức. Tuy nhiên, chức năng này được triển khai bằng các công nghệ khác không can thiệp vào hoạt động của 1C:Enterprise trong trình duyệt.

Trong chế độ hoạt động mới của giao diện, cửa sổ, trước đây vốn là chế độ, được vẽ bên trong cửa sổ chính và chặn phần còn lại của giao diện máy khách web theo cách tương tự:

Kết quả là:

  • không có cửa sổ trình duyệt mới nào được mở, điều này giúp cải thiện hiệu suất và tính ổn định của máy khách web;
  • trong nhiều trường hợp, cài đặt trình duyệt bổ sung trở nên không cần thiết vì 1C:Enterprise không còn sử dụng cửa sổ bật lên nữa;
  • mọi cấu hình sử dụng ứng dụng khách web đều có thể hoạt động trên iPad và các thiết bị di động khác.

Đương nhiên, điều kỳ diệu không xảy ra và một chế độ vận hành mới không thể được kích hoạt “bằng một cái vẫy tay thần kỳ”. Cần phải thay đổi logic để làm việc với các cửa sổ chặn mới. Nhưng tin tốt là những thay đổi này không khó và có thể theo dõi tất cả những vị trí “đáng ngờ” trong chương trình. Nền tảng triển khai một cơ chế đặc biệt cho phép bạn kiểm tra ở giai đoạn phát triển xem toàn bộ cấu hình có sử dụng các cơ chế mới và sẽ hoạt động mà không cần cửa sổ phương thức hay không.

Nhu cầu thay đổi logic làm việc với các cửa sổ như vậy là do chế độ hoạt động mới của giao diện chỉ cung cấp phương thức cho người dùng. Tuy nhiên, đối với nhà phát triển, việc thực thi mã chương trình không dừng lại khi cửa sổ chặn hiển thị.

Điều này có nghĩa là thuật toán trước đây là một tổng thể, giờ đây sẽ phải chia thành hai phần. Một, kết thúc bằng việc mở một cửa sổ chặn và cái thứ hai, sẽ được thực thi khi người dùng đóng cửa sổ này. Để hệ thống biết nơi tiếp tục thực thi mã chương trình, cửa sổ chặn sẽ được cung cấp tên của quy trình sẽ được thực thi khi người dùng đóng cửa sổ này.

Bản chất của những thay đổi này có thể dễ dàng nhận thấy nhất bằng một ví dụ. Một quy trình cũ mở một cửa sổ phương thức và xử lý dữ liệu mà nó nhận được có thể trông như thế này:

Trong phiên bản mới cho biểu mẫu Biểu mẫuVăn bảnĐầu vào (sẽ mở trong cửa sổ chặn), bạn cần đặt thuộc tính Chế độ mở cửa sổ về mặt ý nghĩa ChặnTất CảGiao Diện . Điều này sẽ cung cấp một phương thức cho người dùng:

Và mã chương trình, thay vì một thủ tục như trước, sẽ chứa hai thủ tục:

Trong quy trình đầu tiên, hãy mở biểu mẫu. Trong trường hợp này, ở tham số cuối cùng, chúng tôi chuyển cho nó vị trí của thủ tục thứ hai, thủ tục này sẽ được thực thi sau khi người dùng đóng cửa sổ. Trong trường hợp này, quy trình này nằm trong cùng một mô-đun, nhưng nhìn chung nó có thể nằm trong một mô-đun khác.

Khi người dùng nhập dữ liệu và đóng biểu mẫu, nó sẽ được xử lý theo quy trình thứ hai mà chúng tôi đã chỉ định, trong đó chúng tôi chỉ cần chuyển mã “cũ” để xử lý dữ liệu nhận được.

Ngoài các biểu mẫu mà nhà phát triển có thể mở ở chế độ phương thức (theo ý muốn), còn có các phương thức ngôn ngữ tích hợp luôn mở các biểu mẫu phương thức để nhập hoặc chọn dữ liệu, bất kể mong muốn của nhà phát triển. Ví dụ, phương pháp EnterValue() .

Việc sử dụng các phương pháp như vậy ở chế độ không có chế độ thậm chí còn dễ dàng hơn. Đối với tất cả các phương thức như vậy, nền tảng có các phương thức trùng lặp, khi gọi chúng, bạn cũng phải cho biết vị trí của quy trình sẽ được thực thi sau khi người dùng đóng cửa sổ.

Ví dụ: bên dưới được hiển thị bằng phương pháp cũ EnterValue() và phương thức sao lưu mới của nó ShowInputValue() :

Phải nói rằng, ngoài những trường hợp được liệt kê, một số cơ chế nền tảng còn sử dụng modal windows để tương tác với người dùng. Và điều này không còn phụ thuộc vào hành động của nhà phát triển nữa.

Do đó, tất cả các hộp thoại hệ thống như vậy của nền tảng cũng đã được chuyển sang chế độ hoạt động không có chế độ.

Nó được lên kế hoạch để loại bỏ dần dần việc sử dụng các cửa sổ phương thức trong các giải pháp ứng dụng. Do đó, để tương thích với các giải pháp ứng dụng được viết trước đó, nền tảng vẫn duy trì khả năng hoạt động ở phiên bản giao diện cũ, sử dụng các cửa sổ modal.

Trong nền tảng 1C phiên bản 8.3, một chế độ hoạt động chương trình mới đã xuất hiện - không sử dụng phương thức. Chính xác hơn, 2 chế độ mới đã xuất hiện: không sử dụng phương thức và sử dụng phương thức nhưng có cảnh báo. Và phương thức hoạt động cũ được biểu thị là sử dụng phương thức.

Tất cả điều này có nghĩa là gì? Trong các phiên bản đầu tiên của nền tảng, chúng tôi đã sử dụng nhiều cửa sổ phương thức khác nhau và không nghĩ nhiều về nó. Ví dụ: bạn cần hiển thị cảnh báo cho người dùng hoặc bạn cần đặt câu hỏi hoặc nhập một số giá trị hoặc chọn một tệp. Đây là tất cả các cửa sổ phương thức.

modal nghĩa là gì?Điều này có nghĩa là khi cửa sổ này được gọi, nó sẽ chồng lên tất cả các cửa sổ khác, nghĩa là nó được hiển thị ở trên cùng và chặn hoạt động với các cửa sổ khác cho đến khi hoàn thành công việc với cửa sổ này. Ngoài việc chặn các cửa sổ, việc thực thi mã dừng chính xác tại thời điểm cửa sổ này được gọi và việc thực thi mã chỉ tiếp tục sau khi cửa sổ đó được đóng lại. Từ thời điểm việc thực thi dừng lại. Tôi sẽ minh họa lệnh gọi đến cửa sổ phương thức bằng ví dụ về cách gọi biểu mẫu lựa chọn khoảng thời gian:

&Trên máy khách

Xử lý tiêu chuẩn = Sai;




Nếu Dialog.Edit() Sau đó //Gọi biểu mẫu phương thức. Việc thực thi mã sẽ chỉ tiếp tục sau khi biểu mẫu được đóng.
Elements.Services.CurrentData.StartDate = Dialog.Period.StartDate;
Elements.Services.CurrentData.EndDate = Dialog.Period.EndDate;
endIf;

Kết thúc thủ tục


Như chúng ta có thể thấy, một thủ tục là đủ để xử lý cuộc gọi đến cửa sổ phương thức chọn khoảng thời gian.

Tại sao cửa sổ phương thức lại tệ? Bây giờ hãy tìm hiểu lý do tại sao 1C quyết định từ bỏ việc sử dụng cửa sổ phương thức. Trước hết, đây là hệ quả của việc nền tảng 1C không chỉ có thể được sử dụng ở dạng thông thường - như một ứng dụng dành cho máy tính để bàn mà còn có thể khởi chạy trên trình duyệt và có thể khởi chạy dưới dạng ứng dụng di động.

Vấn đề với trình duyệt là như sau. Phương thức cửa sổ trong chúng được triển khai bằng cách sử dụng các cửa sổ trình duyệt riêng biệt bật lên. Chúng được hầu hết các trình duyệt hỗ trợ, nhưng do việc sử dụng thường xuyên các cửa sổ như vậy để quảng cáo nên hầu hết tất cả các nhà phát triển trình duyệt đều gặp khó khăn với chúng và tắt việc sử dụng các cửa sổ đó theo mặc định. Do đó, để đảm bảo rằng người dùng 1C có thể làm việc trong trình duyệt, cần phải buộc anh ta cho phép các cửa sổ này, dành cho anh ta tất cả những công việc phức tạp của 1C và trình duyệt, và nói chung là khiến anh ta quá tải với những thứ không cần thiết. thông tin.

Một sắc thái riêng biệt với trình duyệt dành cho máy tính bảng và trình duyệt dành cho điện thoại. Trong hầu hết các trường hợp, những trình duyệt này không hỗ trợ cửa sổ bật lên. Giao diện (màn hình và thiết bị đầu vào) của các thiết bị có cửa sổ bật lên này không tương thích.

Và cuối cùng, ứng dụng di động 1C cũng không hoàn toàn thân thiện với các cửa sổ modal.

Do đó kết luận: Không sử dụng cửa sổ phương thức. Thay vào đó tôi nên sử dụng cái gì? Thay vào đó, bạn cần sử dụng cùng các cửa sổ nhưng không có chế độ phương thức. Trong nền tảng mới, 1C cũng đã phát triển chế độ như vậy cho từng cửa sổ. Nó được thực hiện như một phương pháp riêng biệt cho mỗi hộp thoại. Chế độ này cho phép bạn mở một cửa sổ nhưng không dừng việc thực thi mã chương trình. Về mặt kỹ thuật, các trình duyệt triển khai tính năng này dưới dạng một cửa sổ giả xuất hiện bên trong cửa sổ chính nhưng chồng lên nó. Việc mã tiếp tục được thực thi sau khi cửa sổ được mở có nghĩa là bạn sẽ không thể nhận ngay các giá trị đã chọn trong đó sau mã gọi cửa sổ. Họ vẫn chưa được chọn. Do đó, việc lấy và xử lý các giá trị này được thực hiện theo một quy trình riêng, được gọi khi đóng một cửa sổ như vậy và quy trình này được chỉ định khi gọi phương thức mở cửa sổ. Hãy xem cửa sổ lựa chọn khoảng thời gian tương tự làm ví dụ.

&Trên máy khách
Quy trình dịch vụStartDateStartSelection(Phần tử, Dữ liệu lựa chọn, Xử lý tiêu chuẩn)

Xử lý tiêu chuẩn = Sai;

Hộp thoại = NewEditingDialogStandardPeriod();
StandardPeriod = New StandardPeriod();

Ngày bắt đầu = Items.Services.CurrentData.StartDate;
Ngày kết thúc = Items.Services.CurrentData.EndDate;

StandardPeriod.StartDate = Ngày bắt đầu;
StandardPeriod.EndDate = Ngày kết thúc;
Dialog.Period = StandardPeriod;

Mô tả cảnh báo = Mô tả cảnh báo mới("Xử lý lựa chọn khoảng thời gian", ThisForm);

Dialog.Show(DescriptionAlerts)

Kết thúc thủ tục

&Trên máy khách
Xuất thủ tụcPeriodSelectionXử lý(Thời gian,Thông số)

Nếu kỳ<>Không xác định

Elements.Services.CurrentData.StartDate = Period.StartDate;
Elements.Services.CurrentData.EndDate = Period.EndDate;

endIf;

Kết thúc thủ tục


Như chúng ta có thể thấy, thay vì Edit(), Show() được gọi. Và việc xử lý sự kiện lựa chọn đã có trong một quy trình khác.

Vì vậy, chúng tôi đã tìm ra cách thực hiện mà không cần phương thức. Bây giờ hãy tìm hiểu lý do tại sao chúng ta cần chế độ sử dụng phương thức có cảnh báo. Về bản chất, đây là một chế độ chuyển tiếp. Khi bạn chưa quản lý được việc chuyển đổi toàn bộ cấu hình của mình sang một chế độ mà không sử dụng phương thức, nhưng đã phấn đấu cho việc này. Và mỗi khi bạn gọi một cửa sổ modal, chương trình sẽ đưa ra cảnh báo cho bạn rằng không nên gọi các cửa sổ modal ở chế độ này.

Chà, hãy từ bỏ phương thức và làm chủ các công nghệ mới để 1C hoạt động trên trình duyệt và máy tính di động.