1c làm cho phần tử biểu mẫu được yêu cầu. Thêm và sửa đổi phần tử biểu mẫu được quản lý theo chương trình

Nền tảng 1C: Enterprise cho phép bạn thêm và sửa đổi các phần tử của biểu mẫu được quản lý theo chương trình. Hãy xem tại sao điều này có thể cần thiết.

Trong một số trường hợp, biểu mẫu có thể được yêu cầu sửa đổi theo chương trình:

  • Khi hoàn thiện các cấu hình điển hình để tạo điều kiện thuận lợi cho quy trình cập nhật tiếp theo. Trong trường hợp này, chỉ mô-đun biểu mẫu sẽ được thay đổi. Mô-đun dễ cập nhật hơn nhiều so với biểu mẫu.
  • Khi thực hiện một số thuật toán tổng quát. Ví dụ, trong hệ thống con "Cấm chỉnh sửa chi tiết của đối tượng" cho tất cả các đối tượng được kết nối với hệ thống con, một nút được tạo theo chương trình để cho phép khả năng chỉnh sửa chi tiết.
  • Khi thực hiện một số thuật toán cụ thể. Ví dụ, các trường để chỉnh sửa chi tiết bổ sung được tạo trong sách tham khảo Danh pháp.

Trong biểu mẫu được quản lý, bạn có thể thêm, sửa đổi và xóa theo chương trình:

  • điều kiện cần;
  • lệnh cục bộ;
  • các yếu tố.

Tất cả các hoạt động này chỉ có thể thực hiện được trên máy chủ.

Định hình lại có lập trình có những hạn chế:

  • Bạn chỉ có thể xóa các thuộc tính / lệnh / phần tử được thêm vào theo chương trình. Bạn không thể xóa theo chương trình các đối tượng được tạo trong trình cấu hình.
  • Không thể gán thuộc tính là chính.

Thay đổi lệnh biểu mẫu

Để quản lý thành phần các lệnh cho một đối tượng ManagedForm có một bộ sưu tập Đội

    cộng (< ИмяКоманды >)

    Định lượng ()

    Tìm thấy (< ИмяКоманды >)

    Xóa bỏ (< Команда >)

Bộ sưu tập Lệnh có sẵn trên cả máy khách và máy chủ. Chỉ có thể sửa đổi bộ sưu tập (các phương thức Add () và Remove ()) trên máy chủ. Bạn có thể tìm kiếm và lấy số phần tử (phương thức Find () và Quantity ()) cả trên máy khách và máy chủ.

Ví dụ về cách làm việc với các lệnh biểu mẫu, hãy tạo một lệnh ChangeHistory mới với tiêu đề "Lịch sử thay đổi ...", lệnh này sẽ gọi trình xử lý DisplayHistory(). Việc tạo được thực hiện khi biểu mẫu được mở.

& Trên máy chủ
Thủ tục OnCreateOnServer (Thất bại, Xử lý Chuẩn)
Đội = Các lệnh. Cộng( "Lịch sử thay đổi");
Đội . Hành động =;
Đội . Tiêu đề = "Lịch sử của những thay đổi...";
EndProcedure
& AtClient
Thủ tục Connected_DisplayHistory (Lệnh)
// hành động lệnh
EndProcedure

Trình xử lý lệnh phải được đặt trong biểu mẫu và có chỉ thị biên dịch & AtClient.

Thay đổi chi tiết biểu mẫu

Việc đọc thành phần của các thuộc tính biểu mẫu được thực hiện bởi hàm Nhận được chi tiết(< Путь >) trả về một mảng kiểu FormAttributes. Tham số hàm chỉ định đường dẫn đến thuộc tính cha (dưới dạng một chuỗi). Nếu tham số bị bỏ qua hoặc một chuỗi trống được chỉ định, thông tin đăng nhập cấp cao nhất sẽ được trả về.

Việc thay đổi các chi tiết được thực hiện bằng phương pháp EditRequisites(<Chi tiết đã thêm>, <Chi tiết có thể tháo rời>) sự vật ManagedForm. Các tùy chọn Chi tiết đã thêmChi tiết có thể tháo rời mảng có các phần tử của kiểu Tinh tế Biểu mẫu được chuyển.

Chú ý!

Quá trình thay đổi thành phần của chi tiết khá tốn nhiều tài nguyên. Trên thực tế, biểu mẫu đang được tạo lại. Về vấn đề này, công việc với các chi tiết của biểu mẫu được thực hiện ở chế độ hàng loạt.

Hãy tạo một thuộc tính biểu mẫu mới có tên là Người mua:


Đã thêmAttributes = Mảng mới;
Thêm chi tiết. Thêm (Thuộc tính biểu mẫu mới(“Người mua”, Mô tả kiểu mới (“DirectoryReference.Counterparties”), “Khách hàng”);

// Những thay đổi trong thành phần của các thuộc tính
);

Thay đổi phần tử biểu mẫu

Để quản lý thành phần của các phần tử của một đối tượng ManagedForm có một bộ sưu tập Các yếu tố. Bộ sưu tập có một số phương pháp:

    Chèn (< Имя>, < ТипЭлемента>, < Родитель>, < Элемент >)

    cộng (< Имя>, < ТипЭлемента>, < Родитель >)

    Định lượng ()

    Tìm thấy (< Имя >)

    Di chuyển(< Элемент>, < Родитель>, < МестоРасположения >)

    Xóa bỏ (< Элемент >)

Bộ sưu tập Elements có sẵn trên cả máy khách và máy chủ. Sửa đổi bộ sưu tập (Chèn phương thức () , Add (), Move () và Delete ()) chỉ khả dụng trên máy chủ. Bạn có thể tìm kiếm và lấy số phần tử (phương thức Find () và Quantity ()) cả trên máy khách và máy chủ. Các phần tử của bộ sưu tập có thể là:

  • GroupForm;
  • TableForms;
  • Đơn mẫu;
  • Hình dạng nút.

Bạn có thể chỉ định theo chương trình các trình xử lý sự kiện cho các phần tử của biểu mẫu. Với mục đích này, phương pháp SetAction (< ИмяСобытия>, < Действие >) .

Hãy xem xét một số ví dụ thực tế phổ biến nhất về cách làm việc với các lệnh, thuộc tính và phần tử biểu mẫu.

Thêm một lệnh và nút liên quan của nó:

// Tạo nhóm
Đội = Các lệnh. Cộng( "Lịch sử thay đổi");
Đội . Hành động = "Connected_DisplayHistory"; // Biểu mẫu phải chứa một thủ tục với tên được chỉ định
Đội . tiêu đề = "Lịch sử của những thay đổi...";
// Tạo một nút và liên kết nó với một lệnh
Thành phần = Vật phẩm. Cộng( "Lịch sử thay đổi", Loại ("FormButton"));
Element.CommandName = "Lịch sử thay đổi";

Thêm một thuộc tính và trường đầu vào liên quan của nó:

// Mô tả các chi tiết được thêm vào
Đã thêmAttributes = Mảng mới;
Thêm chi tiết. cộng(Thuộc tính biểu mẫu mới ("Người mua", Mô tả loại mới ( "Liên kết Tham chiếu. Đối tác"), "Khách hàng" ));
// Thay đổi thành phần của các thuộc tính
EditAttributes (Đã thêm);
// Tạo trường đầu vào và liên kết đến một thuộc tính
Thành phần = Vật phẩm. Thêm ("Khách hàng", Loại ("Trường mẫu"));
Thành phần . View = ViewFormFields. Nhập trường;
Thành phần . PathToData= "Người mua";

Gán một trình xử lý sự kiện cho một phần tử biểu mẫu:

Người mua hàng. SetAction("Khi nó thay đổi", "Plug-in_BuyerOnChange");

& AtClient
Thủ tục Plugin_BuyerOnChange(Thành phần )
// Hành động sự kiện
EndProcedure

Chú ý!

Các thủ tục được cài đặt dưới dạng trình xử lý sự kiện từ mã bằng phương pháp này SetAction (), bạn nên sử dụng tiền tố Connected_.

Chú ý!

Bạn có thể tải xuống quá trình xử lý với các ví dụ về tìm kiếm có lập trình và thay đổi các chi tiết, lệnh và phần tử của biểu mẫu được quản lý.

Và Đối tượng chuyển dữ liệu sang dạng cấu trúc mã, được quản lý trong môi trường 1C 8.2.

Giới thiệu

Hãy bắt đầu với mô tả ngắn gọn về khái niệm "biểu mẫu được quản lý" và các khái niệm liên quan của nền tảng 1C. Các chuyên gia nền tảng có thể bỏ qua phần này.

Vào năm 2008, phiên bản mới của nền tảng 1C: Enterprise 8.2 đã có sẵn (sau đây gọi là Ứng dụng được quản lý), phiên bản này thay đổi hoàn toàn toàn bộ lớp làm việc với giao diện. Điều này bao gồm giao diện lệnh, biểu mẫu và hệ thống cửa sổ. Điều này không chỉ thay đổi mô hình phát triển giao diện người dùng trong cấu hình mà còn đề xuất một kiến ​​trúc mới để tách chức năng giữa ứng dụng khách và máy chủ.
Ứng dụng được quản lý hỗ trợ các loại máy khách sau:

  • Khách hàng dày (Chế độ khởi chạy bình thường và được quản lý)
  • Khách hàng mỏng
  • Máy khách web
Ứng dụng được quản lý sử dụng các biểu mẫu được xây dựng trên công nghệ mới. Họ đã gọi Các biểu mẫu được quản lý. Để dễ dàng chuyển đổi, các biểu mẫu cũ hơn (được gọi là biểu mẫu thông thường) cũng được hỗ trợ, nhưng chức năng của chúng không được phát triển và chúng chỉ có sẵn trong chế độ khởi chạy ứng dụng khách phong phú.
Sự khác biệt chính của các biểu mẫu được quản lý cho nhà phát triển:
  • Mô tả cấu trúc mang tính khai báo, không phải "theo pixel". Vị trí cụ thể của các phần tử được hệ thống thực hiện tự động khi biểu mẫu được hiển thị.
  • Tất cả chức năng của biểu mẫu được mô tả trong biểu mẫu thông tin chi tiếtlệnh. Chi tiết là dữ liệu mà biểu mẫu làm việc với và các lệnh là các hành động được thực hiện.
  • Biểu mẫu được thực thi cả trên máy chủ và máy khách.
  • Trong bối cảnh của máy khách, hầu như tất cả các loại ứng dụng đều không khả dụng, và do đó không thể thay đổi dữ liệu trong infobase.
  • Đối với mỗi phương thức hoặc biến biểu mẫu, nó phải được chỉ định chỉ thị biên soạn A chỉ định xem vị trí thực thi (máy khách hoặc máy chủ) và quyền truy cập vào ngữ cảnh của biểu mẫu.
Dưới đây là các chỉ thị để biên dịch các phương thức biểu mẫu:
  • & AtClient
  • & Trên máy chủ
  • & OnServerWithoutContext
  • & At the ClientAt the ServerWithoutContext
Hãy minh họa điều trên. Ảnh chụp màn hình hiển thị một ví dụ về biểu mẫu được quản lý và mô-đun của nó ở chế độ phát triển. Tìm mô tả khai báo, đạo cụ, chỉ thị biên dịch, v.v.

Tất cả các cuộc thảo luận tiếp theo sẽ là về phía bên phải của hình minh họa, về cách cấu trúc mã mô-đun và những nguyên tắc nào sẽ cho phép bạn thực hiện tương tác giữa máy khách-máy chủ hiệu quả.

Hãy xác định vấn đề

Đã vài năm trôi qua kể từ khi phiên bản mới của nền tảng 1C được sử dụng tích cực và nhiều giải pháp (cấu hình) đã được phát hành bởi 1C và nhiều đối tác của nó.
Các nhà phát triển đã phát triển sự hiểu biết chung về các nguyên tắc tương tác giữa máy khách và máy chủ khi tạo biểu mẫu trong thời gian này và cách tiếp cận triển khai các mô-đun chương trình có thay đổi trong thực tế kiến ​​trúc mới không?

Hãy xem xét cấu trúc mã (mô-đun biểu mẫu) ở một số dạng của cùng một cấu hình điển hình và cố gắng tìm ra các mẫu.
Theo cấu trúc, chúng tôi muốn nói đến các phần mã (thường là các khối nhận xét) được nhà phát triển phân bổ cho các phương thức nhóm và chỉ thị để biên dịch các phương thức này.
Ví dụ 1:
Phần xử lý sự kiện Phương thức - trên máy khách Phương pháp - trên máy chủ Phương thức - trên máy khách Phần các thủ tục và chức năng dịch vụ Các chức năng phụ trợ kiểm soát đầu vào
Ví dụ 2:
Các thủ tục và chức năng của dịch vụ Chứng từ thanh toán Vật có giá trị Người xử lý sự kiện
Ví dụ 3:
Các thủ tục dịch vụ trên máy chủ Các thủ tục dịch vụ trên máy khách Các thủ tục dịch vụ trên máy chủ không có ngữ cảnh Bộ xử lý sự kiện Header Bộ xử lý sự kiện lệnh
Ví dụ 4:
Các thủ tục có mục đích chung Biểu mẫu xử lý sự kiện Các thủ tục của hệ thống con "thông tin liên hệ"
Trên thực tế, cấu trúc mã bị thiếu, hay nói một cách nhẹ nhàng, nó tương tự như những gì trong các biểu mẫu 8.1:

  • Các từ không mang tính thông tin "Chung, Dịch vụ, Phụ trợ."
  • Cố gắng tách biệt các phương thức máy khách và máy chủ.
  • Thông thường các phương pháp được nhóm theo các phần tử giao diện "Làm việc với phần dạng bảng Sản phẩm, Thông tin liên hệ".
  • Sự sắp xếp tùy ý của các phương pháp và nhóm mã. Ví dụ: Trình xử lý sự kiện có thể ở trên cùng trong một biểu mẫu, ở dưới cùng trong một biểu mẫu khác, hoàn toàn không được đánh dấu trong một biểu mẫu thứ ba, v.v.
  • Và đừng quên rằng đây là tất cả trong cùng một cấu hình.
  • Có, có những cấu hình trong đó các từ “Chung, Dịch vụ, Phụ trợ” luôn ở cùng một vị trí, nhưng ...
Tại sao bạn cần một cấu trúc mã?
  • Đơn giản hóa việc bảo trì.
  • Đơn giản hóa việc học.
  • Sửa chữa các nguyên tắc chung / quan trọng / thành công.
  • … Tùy chọn của bạn
Tại sao tiêu chuẩn phát triển hiện có từ 1C không giúp ích được gì?
Hãy xem xét các nguyên tắc được xuất bản trên đĩa ITS và trong nhiều "Hướng dẫn của nhà phát triển ...", được khuyến nghị khi viết biểu mẫu được quản lý.
  • Giảm thiểu số lượng cuộc gọi máy chủ.
  • Tính toán tối đa trên máy chủ.
  • Các cuộc gọi máy chủ không ngữ cảnh nhanh hơn các cuộc gọi ngữ cảnh.
  • Chương trình có lưu ý đến sự tương tác giữa máy khách và máy chủ.
  • Vân vân.
Đây là những khẩu hiệu hoàn toàn đúng, nhưng làm sao chúng có thể trở thành hiện thực được? Làm thế nào để giảm thiểu số lượng cuộc gọi, nó có ý nghĩa gì khi lập trình ở chế độ máy khách-máy chủ?

Mẫu thiết kế hoặc trí tuệ thế hệ

Tương tác giữa máy khách và máy chủ đã được sử dụng trong các công nghệ phần mềm khác nhau trong nhiều thập kỷ. Câu trả lời cho các câu hỏi nêu trong phần trước đã được biết đến từ lâu và được tóm tắt trong hai nguyên tắc cơ bản.
  • Mặt tiền từ xa(sau đây gọi là Giao diện truy cập từ xa)
  • Đối tượng truyền dữ liệu(sau đây được gọi là Đối tượng Truyền Dữ liệu)
Gửi lời tới Martin Fowler, mô tả của ông về những nguyên tắc này:
  • mỗi đối tượng có khả năng được thiết kế để truy cập từ xa phải có giao diện chi tiết thấp, điều này sẽ giảm thiểu số lượng cuộc gọi cần thiết để thực hiện một thủ tục cụ thể. … Thay vì yêu cầu một hóa đơn và tất cả các điểm của nó một cách riêng biệt, cần phải đọc và cập nhật tất cả các điểm của hóa đơn trong một lần gọi. Điều này ảnh hưởng đến toàn bộ cấu trúc của đối tượng ... Hãy nhớ: giao diện truy cập từ xa không chứa logic miền.
  • ... nếu tôi là một người mẹ chu đáo, tôi chắc chắn sẽ nói với con mình: "Đừng bao giờ viết các đối tượng truyền dữ liệu!" Trong hầu hết các trường hợp, các đối tượng di chuyển dữ liệu chỉ là bộ trường phồng lên… Giá trị của con quái vật kinh tởm này chỉ nằm ở khả năng truyền nhiều mục thông tin qua mạng trong một cuộc gọi- một kỹ thuật có tầm quan trọng lớn đối với các hệ thống phân tán.
Ví dụ về các mẫu trong nền tảng 1C
API có sẵn cho nhà phát triển khi phát triển biểu mẫu được quản lý chứa nhiều ví dụ về các nguyên tắc này.
Ví dụ, phương thức OpenForm (), một giao diện "thô" điển hình.
OpenParameters = Cấu trúc mới ("Tham số1, Tham số2, Tham số3", Giá trị1, Giá trị2, Giá trị3); Form = OpenForm (FormName, OpenParameters);
So sánh với phong cách v8.1.
Biểu mẫu = GetForm (Tên biểu mẫu); Form.Parameter1 = Value1; Form.Parameter2 = Value2; Form.Open ();

Trong ngữ cảnh của một biểu mẫu được quản lý, một tập hợp các "Đối tượng truyền dữ liệu". Có thể phân biệt có hệ thốngdo nhà phát triển xác định.
Hệ thống mô hình hóa một đối tượng ứng dụng trên máy khách, dưới dạng một hoặc nhiều phần tử dữ liệu biểu mẫu. Bạn không thể tạo chúng bên ngoài ràng buộc với chi tiết biểu mẫu.

  • DataFormsStructure
  • DataFormsCollection
  • DataFormStructureCollection
  • DataFormsTree
Việc chuyển đổi các đối tượng hệ thống truyền dữ liệu sang các loại ứng dụng và ngược lại được thực hiện theo các phương pháp sau:
  • ValueVDataForm ()
  • FormDataToValue ()
  • CopyFormData ()
  • ValueVFormProps ()
  • FormAttributeToValue ()
Thường thì chuyển đổi rõ ràng được sử dụng khi điều chỉnh một giải pháp hiện có. Các phương thức có thể mong đợi các tham số đầu vào (tính năng) như ValueTable thay vìFormDataCollection, hoặc phương thức được xác định trong ngữ cảnh của một đối tượng ứng dụng và không khả dụng cho lệnh gọi trực tiếp từ biểu mẫu.
Ví dụ 1C v8.1:
// trên máy khách trong ngữ cảnh của biểu mẫu FillUsersCache (DepartmentReference)
Ví dụ 1C v8.2:
// trên máy chủ trong ngữ cảnh có dạng ProcessingObject = FormAttributeToValue ("Đối tượng"); ProcessingObject.FillCacheUsers (DepartmentReference); ValueVFormAttribute (Đối tượng xử lý, "Đối tượng");

Các đối tượng di chuyển dữ liệu, có cấu trúc do nhà phát triển xác định, là một tập hợp con nhỏ của các loại có sẵn trên cả máy khách và máy chủ. Thông thường, với tư cách là các tham số và kết quả của các phương thức của giao diện "thô", những điều sau được sử dụng:

  • Các kiểu nguyên thủy (chuỗi, số, boolean)
  • Kết cấu
  • Sự phù hợp
  • mảng
  • Liên kết đến các đối tượng ứng dụng (mã định danh duy nhất và biểu diễn văn bản)
Ví dụ: phương thức chấp nhận một danh sách các đơn đặt hàng để thay đổi trạng thái và trả về mô tả các lỗi cho khách hàng.
& OnServerWithoutContext Chức năng ServerChangeOrderStatus (Đơn hàng, Trạng thái mới) Lỗi = Kết hợp Mới (); // [đơn đặt hàng] [mô tả lỗi] Đối với mỗi đơn hàng từ đơn hàng Vòng lặp StartTransaction (); Cố gắng DocOb = Order.GetObject (); …. các hành động khác, có thể không chỉ với lệnh ... Exception CancelTransaction (); Errors.Insert (Order, DescriptionError ()); Kết thúc Cố gắng; Chu kỳ cuối; Trả lại lỗi; EndFunction // ServerChangeOrderStatus ()

Cấu trúc mã

Các mục tiêu chính mà mô-đun biểu mẫu được quản lý phải phản ánh và cách tiếp cận giải pháp.
  • Phân tách rõ ràng mã máy khách và máy chủ.Đừng quên rằng tại thời điểm thực thi, đây là hai quy trình tương tác, trong đó mỗi quy trình có chức năng khác nhau đáng kể.
  • Lựa chọn rõ ràng về giao diện truy cập từ xa, phương thức máy chủ nào có thể được gọi từ máy khách và phương thức nào không thể? Tên của các phương thức giao diện từ xa bắt đầu bằng tiền tố "Máy chủ". Điều này cho phép bạn thấy ngay sự chuyển đổi quyền kiểm soát sang máy chủ khi đọc mã và đơn giản hóa việc sử dụng các gợi ý theo ngữ cảnh. Lưu ý rằng khuyến nghị chính thức (ITS) đề xuất các phương pháp đặt tên với các hậu tố, chẳng hạn như ChangeOrderStatusOnServer (). Tuy nhiên, để nhắc lại, không phải tất cả các phương thức máy chủ đều có thể được gọi từ máy khách, và do đó khả năng truy cập hợp lý quan trọng hơn vị trí biên dịch. Do đó, với tiền tố “Server”, chúng tôi chỉ đánh dấu các phương thức có sẵn cho máy khách, phương thức ví dụ sẽ được gọi là ServerChangeOrderStatus ().
  • Khả năng đọc. Vấn đề phù hợp, chúng tôi chấp nhận đơn đặt hàng khi mô-đun bắt đầu với các thủ tục để tạo biểu mẫu trên máy chủ và các phương pháp truy cập từ xa.
  • Khả năng bảo trì. Nơi để thêm mã mới phải được xác định rõ ràng. Một điểm quan trọng, các sơ khai phương thức được tạo tự động bởi trình cấu hình sẽ được thêm vào phần cuối của mô-đun. Vì các trình xử lý sự kiện phần tử biểu mẫu thường được tạo tự động nhất, nên khối tương ứng được đặt sau cùng để không kéo từng trình xử lý đến một vị trí khác trong mô-đun.
Dưới đây là cấu trúc cơ bản của mô-đun thực hiện các mục tiêu được liệt kê.
  • Tùy chọn đồ họa - hiển thị rõ ràng luồng thực thi chính.
  • Tùy chọn văn bản là một ví dụ về thiết kế mẫu để chèn nhanh cấu trúc vào mô-đun biểu mẫu mới.

//////////////////////////////////////////////////////////////////////////////// // <(c) Автор=""Ngày =""/> // <Описание> // // //////////////////////////////////////////////////////// / //////////////////////////////// // BIẾN ĐỔI MODULE ///////////////// // ////////////////////////////////////////////////////// /// //////////////// // TRÊN MÁY CHỦ // ******* SỰ KIỆN TRÊN MÁY CHỦ ******* & Quy trình trên máy chủ Khi tạo trên máy chủ (Failure, StandardProcessing) // Chèn nội dung của trình xử lý EndProcedure // ******* GIAO DIỆN TRUY CẬP TỪ XA ******* // ******* LOGIC DOANH NGHIỆP TRÊN MÁY CHỦ *** **** ///////// ///////////////////////////////////////// //////////////// /////////////////////// // PHƯƠNG THỨC KHÁCH HÀNG VÀ MÁY CHỦ CHUNG //////// ////////////////// //////////////////////////////////////// /////////////////// //////// // TRÊN KHÁCH HÀNG // ******* LOGIC DOANH NGHIỆP TRÊN KHÁCH HÀNG ****** * // ******* HÀNG ******* // ******* SỰ KIỆN VỀ KHÁCH HÀNG ****** /////////////// //////////////////// //////////////////////////////////// //////////////////// / ĐIỀU HÀNH CHƯƠNG TRÌNH CHÍNH

Câu hỏi liên quan
Tóm lại, chúng tôi phác thảo một vài lĩnh vực hữu ích cần nghĩ đến khi lập trình tương tác giữa máy khách-máy chủ.
  • Các tùy chọn để triển khai giao diện truy cập từ xa. Không đồng bộ, chi tiết ...
  • bộ nhớ đệm. 1C đã đưa ra một quyết định kiến ​​trúc đáng tiếc, chỉ giới thiệu bộ nhớ đệm ở cấp độ gọi các phương thức của các mô-đun phổ biến và không cung cấp các tùy chọn điều khiển (cập nhật thời gian, đặt lại theo yêu cầu).
  • Lệnh gọi máy chủ ngầm định. Đừng quên về các tính năng công nghệ, nhiều thao tác "vô hại" trên máy khách kích động nền tảng truy cập vào máy chủ.

1. Trường đầu vào
2. Hộp kiểm
3. Chuyển đổi

Trường nhập

Theo quy luật, trường đầu vào được liên kết với thuộc tính của đối tượng và phản ánh dữ liệu của nó. Đây có lẽ là một trong những yếu tố phổ biến nhất, nó có một số cách để chọn một giá trị:

Chọn từ danh sách (SelectFromListMode)

Lựa chọn từ một hình thức khác (nút Chọn)

Các nút điều khiển

Việc triển khai các ví dụ trên không đòi hỏi nỗ lực đáng kể từ phía nhà phát triển. Ví dụ, đối với chế độ danh sách, cần điền vào danh sách của phần tử với các giá trị, để chọn từ dạng khác, chỉ cần ràng buộc phần tử điều khiển với dữ liệu của từ điển là đủ. Nhưng đối với các nút điều khiển, bạn sẽ cần phải viết thêm mã để xử lý việc nhấn từng nút, mặc dù nó sẽ không tuyệt vời:

Quy trình pv Lựa chọn danh pháp Quy định (Phần tử, Hướng, Xử lý tiêu chuẩn)
// Chọn dữ liệu cho trường đầu vào
// trong trường hợp này là Danh pháp tham chiếu
Yêu cầu = Yêu cầu mới;
Request.Text =
"LỰA CHỌN
| Nomenclature.Reference As Item
| TỪ
| Thư mục. Danh pháp AS Danh mục
| ĐẶT HÀNG BỞI
| Nomenclature.Code ”;
TZNomenclature = Request.Execute (). Upload ();

// chúng tôi đang tìm kiếm phần tử hiện tại của thư mục được chỉ định trong trường đầu vào
CurrentElement = TKNomenclature.Find (Element.value);

Nếu CurrentItem = Không xác định thì
// nếu phần tử không được tìm thấy thì hãy đặt số chỉ mục
// bên ngoài bảng giá trị, bởi vì yếu tố đầu tiên trong
// bảng giá trị có chỉ số 0
CurrentIndex = -1;
Nếu không thì
// nếu phần tử được tìm thấy, hãy lấy chỉ mục của nó
TekIndex = T3Nomenclature.Index (TekElement);
EndIf;

// tính toán chỉ số mới tùy thuộc vào lần nhấp vào nút
// dấu trừ phía trước biến. Hướng là để
// nhấp vào mũi tên trên cùng sẽ hiển thị phần tử ở trên
// và do đó có chỉ số thấp hơn
NewIndex = CurrentIndex-Direction;

// lấy số phần tử trong thư mục
// trừ một vì tất cả các bộ sưu tập trong 8.1 bắt đầu từ 0
Số mục = TK Danh mục. Số lượng () -1;

Nếu NewIndex< 0 Или НовИндекс >Số phần tử Sau đó
// nếu chỉ mục nằm ngoài bảng giá trị khi thay đổi
// I E. số của nó lớn hơn chỉ số lớn nhất hoặc nhỏ hơn 0 thì
// không thay đổi giá trị và thông báo cho người dùng về nó
alert ("Bạn đã đạt đến giới hạn của thư mục");
Nếu không thì
// gán một giá trị mới, "Sản phẩm" là tên của cột bảng giá trị
Element.value = TKNomenclature.Get (NewIndex) .Product;
EndIf;

EndProcedure

Hộp kiểm

Trong hầu hết các chương trình, hộp kiểm được sử dụng để hiển thị hai trạng thái: đã chọn, đã bỏ chọn. Trong 1 giây, hộp kiểm có ba trạng thái, ở trạng thái thứ ba, hộp kiểm được hiển thị - như được đặt và được tô bóng. Ba trạng thái chỉ khả dụng nếu dữ liệu cờ là một số, với các trạng thái có ý nghĩa sau:

Công tắc điện

Công tắc được sử dụng để chọn một giá trị từ một số lượng nhỏ có thể (tốt nhất là không quá năm), trong khi các giá trị \ u200b \ u200b không thể được kết hợp, Ví dụ: phù hợp để chọn giới tính của một người. Một ví dụ khác: giả sử một công ty đưa ra một trong 3 mức chiết khấu cho một sản phẩm, trong khi các khoản chiết khấu không được cộng dồn:

Trong trường hợp này, sự tiện lợi của việc sử dụng các nút radio có thể nằm ở chỗ mỗi nút trong số chúng có thể có một số giá trị, được đặt trong thuộc tính "Giá trị có thể chọn". Và sau đó "Giảm giá 5%" có thể lưu trữ giá trị 5 hoặc 0,05.

Có ba điều quan trọng cần ghi nhớ khi sử dụng các nút radio:

      Nút radio đầu tiên phải có thuộc tính "FirstInGroup" (trong ví dụ này, nó là nút radio "Giảm giá 5%").

      Các công tắc liên quan theo ý nghĩa với một nhóm phải liên tiếp trong việc thiết lập thứ tự bỏ qua, không bị gián đoạn bởi các phần tử biểu mẫu khác. Thứ tự chuyển tải được đặt từ menu "Biểu mẫu -> Cài đặt đơn hàng truyền tải", ví dụ như sau:

  1. Loại giá trị đã chọn được đặt bởi công tắc có thuộc tính "FirstInGroup".

Sự phát triển giao diện trong 1C bao gồm hai phần - sự phát triển của menu hoặc màn hình nền và sự phát triển của các dạng màn hình 1C. Các cửa sổ mà người dùng làm việc trong 1C được gọi là biểu mẫu màn hình 1C hoặc đơn giản là biểu mẫu 1C.

Người dùng trong chương trình làm việc với các biểu mẫu 1C. Hơn nữa, người dùng chỉ thấy các biểu mẫu 1C. Vì vậy, trên quan điểm về sự thuận tiện khi làm việc trong chương trình, đây là một trong những yếu tố quan trọng. Đồng thời, bạn có thể giết nhiều thời gian hơn cho việc phát triển biểu mẫu 1C so với việc lập trình thuật toán phức tạp nhất.

Một sai lầm phổ biến của các lập trình viên là cố gắng vẽ mọi thứ theo ý thích của họ. Làm cho nền màu xanh lam và chú thích màu xanh lá cây. Hoặc màu vàng trên nền đen. Hoặc cách anh ấy thích nó trong một số chương trình yêu thích khác của anh ấy.

Thật không may, cách tiếp cận này là sai, vì người dùng đã quen làm việc với các biểu mẫu 1C tiêu chuẩn, chiếm đa số trong cấu hình. Tự vẽ chiếc xe đạp của bạn, đánh dấu nó bằng dòng chữ Courier như “Copyright Vasya Pupkin” rõ ràng là một hình thức tồi.

Bây giờ chúng ta sẽ đi qua một chương trình giáo dục ngắn gọn về vẽ các hình thức 1C.

Biểu mẫu 1C là gì

Biểu mẫu 1C là một phương pháp trình bày trước người dùng. Thông thường, biểu mẫu là một loạt các trường cần được điền và một tập hợp các nút (lệnh menu) để điều khiển. Biểu mẫu 1C có sẵn cho hầu hết các đối tượng 1C.

Khách hàng dày 1C sử dụng các hình thức 1C "thông thường". Điều này có nghĩa là lập trình viên chỉ cần vẽ biểu mẫu 1C bằng chuột, giống như nó được thực hiện trong Visual Studio và các khung công tác khác.

Ứng dụng khách mỏng 1C và ứng dụng khách web 1C sử dụng các biểu mẫu 1C được quản lý. Điều này có nghĩa là kích thước của chúng, dạng 1C và vị trí của các trường trên chúng không thể thay đổi bằng chuột. Chúng được tạo tự động dựa trên cài đặt. Chúng ta sẽ nói về các biểu mẫu được quản lý 1C trong các bài học tiếp theo.

Hầu hết các dạng cấu hình 1C điển hình trong 1C đều có đại diện riêng, điển hình, quen thuộc với người dùng.

Cách thức hoạt động của các biểu mẫu 1C

Logic (thứ tự) công việc của người dùng trong 1C như sau:

Do đó, người dùng luôn làm việc với các biểu mẫu 1C, bắt đầu với biểu mẫu danh sách 1C và chuyển sang biểu mẫu phần tử 1C. Nếu người lập trình không vẽ biểu mẫu, thì 1C sẽ tạo biểu mẫu theo mặc định. Họ tự nhiên không có vẻ đẹp lý tưởng và sự hoàn hảo, nhưng họ cho phép họ làm việc.

Biểu mẫu danh sách 1C được tạo tự động thường chứa tối thiểu các trường (mã / tên và ngày / số, tương ứng). Biểu mẫu phần tử được tạo tự động thường chứa tất cả các trường (điều kiện cần) được liệt kê từ trên xuống dưới.

Nhiệm vụ của biểu mẫu 1C là mở và chờ các thao tác của người dùng. Trong hành động, phản ứng. Do đó, trình xử lý sự kiện tạo thành cơ sở của mô-đun biểu mẫu 1C. Đây là những hàm được gọi khi người dùng thực hiện một số hành động trên biểu mẫu 1C.

Các biểu mẫu 1C ở đâu

Trong chế độ Doanh nghiệp 1C, khi bạn chọn hầu hết bất kỳ đối tượng 1C nào (sách tham khảo, tài liệu, báo cáo, xử lý, v.v.), bạn sẽ thấy một biểu mẫu cho đối tượng này.

Trong trình cấu hình, trong cửa sổ cấu hình, chọn đối tượng bạn cần, mở rộng nhánh của nó để xem nhánh con của Biểu mẫu 1C.

Một tùy chọn khác là mở trình chỉnh sửa đối tượng (hai lần bằng chuột hoặc đặt con trỏ và Enter) và chuyển đến tab Biểu mẫu 1C.

Đây là danh sách các biểu mẫu 1C. Một trong các biểu mẫu 1C đã thêm có thể được thêm làm biểu mẫu mặc định (biểu mẫu danh sách 1C, biểu mẫu phần tử 1C, v.v.).

Tạo biểu mẫu 1C

Để thêm biểu mẫu 1C mới, bạn cần nhấp vào nút Thêm (Trên bàn phím). Để nhập một cái hiện có, hãy nhấp đúp vào nó bằng chuột.

Hàm khởi tạo sẽ nhắc bạn chọn kiểu của biểu mẫu 1C - dạng của phần tử 1C, danh sách. Tại đây bạn cũng có thể thêm hoặc bớt các bảng lệnh trên biểu mẫu 1C. Thông thường, các cài đặt này được để nguyên theo mặc định.

Biểu mẫu 1C mở ra, được điền theo mặc định - tất cả các chi tiết của đối tượng 1C được thêm vào đó. Bạn có thể đánh dấu vào danh sách cụ thể các trường bắt buộc trên tab thứ hai của hàm tạo.

Những chi tiết không cần thiết có thể được loại bỏ. Để thực hiện việc này, hãy chọn một hoặc nhiều trường và nhấn Del.

Để di chuyển các thuộc tính khác đến không gian trống, hãy chọn chúng theo cách tương tự và kéo chúng bằng chuột.

Để thêm chi tiết mới vào biểu mẫu 1C, hãy nhấp vào nút trên bảng Vị trí Dữ liệu (menu Biểu mẫu / Vị trí Dữ liệu), chọn hộp cho các phần tử bạn muốn thêm, cũng như các hộp kiểm “Chèn nhãn” và “Đặt tự động” .

Ngoài ra, bạn có thể chỉ cần thêm điều khiển bằng cách nhấp vào nút tương ứng trên bảng bên dưới hoặc bằng cách chọn Biểu mẫu / Chèn Điều khiển từ menu. Bấm đúp vào điều khiển (trường) bằng nút chuột trái và các thuộc tính của nó sẽ mở ra. Thuộc tính "Dữ liệu" chứa tên thuộc tính. Ở đây nó có thể được thay đổi hoặc gán.

Thuộc tính của điều khiển cũng chứa các hộp kiểm để kiểm soát sự xuất hiện của điều khiển. Với sự trợ giúp của hộp kiểm, bạn có thể bật và tắt các nút chọn, thả xuống, xóa, hiển thị và trợ năng.

Hầu hết tất cả các biểu mẫu tài liệu đều sử dụng dấu trang. Dấu trang được thêm theo cách tương tự như một điều khiển khác (xem ở trên), chỉ điều khiển Bảng điều khiển phải được chọn. Để thêm trang bảng điều khiển, hãy nhấp chuột phải vào trang đó và chọn Thêm trang. Các điều khiển (trường) khác trên các trang bảng điều khiển chỉ được kéo và thả.

Để thay đổi kích thước của biểu mẫu 1C, chỉ cần di chuyển con trỏ đến cạnh của biểu mẫu 1C, nhấn phím trái chuột và chỉ cần kéo cạnh của biểu mẫu 1C.

Để biểu mẫu 1C hoạt động - tức là đã làm gì đó để phản hồi lại hành động của người dùng - bạn cần thêm các hàm xử lý. Nhập các thuộc tính của bất kỳ phần tử nào (bằng cách nhấp đúp vào nó bằng nút chuột trái) hoặc chính biểu mẫu 1C (tương tự trên tiêu đề biểu mẫu). Ở cuối cửa sổ thuộc tính có phần "Sự kiện". Chọn một sự kiện thuận tiện (đối với tất cả các trường thường là "OnChange", đối với dạng "OnOpen") và nhấp vào nút kính lúp. Trình xử lý sự kiện của nó sẽ mở.

Đối với các nút, việc thêm cũng giống như vậy. Tuy nhiên, ngoài các trình xử lý tùy ý, bạn có thể chọn một trong các trình xử lý tiêu chuẩn cho biểu mẫu này (đối với biểu mẫu tham chiếu, đây là một số hành động tiêu chuẩn, đối với biểu mẫu tài liệu, các hành động khác). Chỉ cần chọn một trong các hành động chuẩn trong thuộc tính "Hành động" hoặc nhấp vào dấu thập nếu bạn muốn tạo trình xử lý của riêng mình.

Có lẽ, không có thuật toán nào có thể bảo vệ cơ sở dữ liệu khỏi các lỗi xảy ra khi người dùng nhập dữ liệu. Các vấn đề chính liên quan đến sự thiếu chú ý của con người có thể được xác định trong danh sách sau:

  • Lựa chọn sai đối tượng;
  • Sai số lượng hoặc lỗi đánh máy trong tên;
  • Các yếu tố kép của thư mục, tính không duy nhất của chúng hoặc phân loại lại;
  • Bỏ qua việc điền vào các trường quan trọng để tính toán chính xác và hoạt động trơn tru của chương trình.

Giải pháp cho vấn đề cuối cùng là, đối với phiên bản thứ tám của chương trình 1C, kiểm tra việc hoàn thành chi tiết biểu mẫu.

Kiểm tra hoàn thành cho một biểu mẫu thông thường

Khi người dùng mở biểu mẫu, nếu chế độ khởi chạy là "Ứng dụng bình thường", các phần tử phải được điền vào sẽ được đánh dấu bằng một đường chấm màu đỏ (Hình 1).

Như có thể thấy từ ví dụ trên, các trường bắt buộc của tài liệu "Bán hàng hóa và dịch vụ" là "Số lượng" và "Nhà thầu". Trong trường hợp này, trường "Số" không có sẵn để chỉnh sửa. Điều này có nghĩa là khi một tài liệu được ghi vào infobase, nó sẽ được tự động điền theo các quy tắc đánh số được đặt ra cho tổ chức nhất định.

Việc ghi các phần tử thư mục hoặc đăng tài liệu có chứa các trường bắt buộc chưa được điền sẽ gây ra ngoại lệ (Hình 2).

Cơm. 2

Thông tin chi tiết hơn về trường cụ thể không được điền có thể được xem trong cửa sổ thông báo dịch vụ.

Bản thân dấu, thông báo về việc điền bắt buộc vào trường, được đặt trong các thuộc tính của phần tử biểu mẫu. Đối với điều này:

  1. Mở biểu mẫu trong Trình cấu hình;
  2. Chúng tôi nhấp chuột phải vào phần tử biểu mẫu và gọi cửa sổ "Thuộc tính";
  3. Cần phải chọn các hộp AutoMarkUnfilled và AutoSelectUnfilled trong menu con "Usage" (Hình 3);

Kiểm tra trực tiếp, như một quy tắc, đăng ký trong mô-đun của đối tượng.

Đối với các thư mục và tài liệu không thể chuyển nhượng, nên gọi thủ tục kiểm tra điền khi ghi một phần tử. Các tài liệu đã hoàn thành chưa hoàn chỉnh, nếu chúng được thực hiện, có thể được ghi lại trong cơ sở dữ liệu, và tốt hơn là bạn nên gọi thủ tục xác minh trước khi hình thành các chuyển động, nghĩa là trong quá trình tiến hành. Có thể thực hiện quy trình kiểm tra và báo cáo có chứa các trường bắt buộc trực tiếp trong quá trình xử lý nhấp vào nút.

Bạn có thể kiểm tra xem giá trị được truyền vào trường có khác với giá trị trống (giá trị mặc định) hay không bằng cách sử dụng hàm ValueFilled ("Giá trị"). Hãy nhớ rằng nếu trường thuộc kiểu dữ liệu tổng hợp, thì việc thực thi hàm này sẽ ném ra một ngoại lệ.

Xác thực trong các biểu mẫu được quản lý

Các tính năng của nền tảng trong phiên bản máy khách-máy chủ để lại dấu ấn của chúng trong việc kiểm tra điền.

Trước tiên, bạn cần hiểu quy trình nào theo sau khi nhập một đối tượng trong chế độ hoạt động này.

Vì vậy, sau khi nhấn nút "Ghi", "OK", "Gửi":

  1. Thủ tục "Trước khi viết" trên máy khách được gọi;
  2. Dữ liệu được chuyển đến máy chủ và các sự kiện đã đăng ký trong mô-đun biểu mẫu trên máy chủ xảy ra (ở đây bạn có thể chạy quy trình ProcessingFillCheckOnServer);
  3. Dữ liệu biểu mẫu được chuyển đến mô-đun đối tượng trên máy chủ (có cơ hội để khởi chạy quy trình chuẩn ProcessingCheckFilling);
  4. Dữ liệu từ mô-đun được trả về mô-đun biểu mẫu trên máy chủ và quy trình BeforeWriteOnServer xảy ra;
  5. Dữ liệu được trả về mô-đun đối tượng và một thủ tục BeforeWrite khác xảy ra;
  6. Đối tượng được ghi trực tiếp vào cơ sở dữ liệu.

Tại bất kỳ điểm nào trong lược đồ này, bạn có thể chèn hàm CheckFill (). Sau khi chạy qua các chi tiết, trong các thuộc tính của thuộc tính “Kiểm tra điền” có giá trị “Đưa ra lỗi” (Hình 4), hàm này, nếu ít nhất một trong số chúng không được điền, sẽ trả về “Sai”.

Sự khác biệt giữa các trình xử lý HandleFillCheck () và ProcessFillCheckOnServer ()

Theo quan điểm của thực tế là giao diện của một ứng dụng được quản lý có thể chứa cả thuộc tính đối tượng và thuộc tính hình thức trực tiếp, hai thủ tục này được tách biệt. Đồng thời, chúng giống nhau về các tham số có thể được chuyển cho các trình xử lý:

  1. Từ chối (ở đây, sau khi kiểm tra, kết quả của nó được truyền đi);
  2. CheckedAttributes (kiểu dữ liệu là một mảng, nếu nó không được điền vào, thì tất cả các chi tiết mà các thuộc tính được đặt thành "Kiểm tra điền" sẽ được kiểm tra, nếu không, các chi tiết được chọn theo chương trình sẽ được xử lý).

Thủ tục ProcessingFillingCheckOnServer () cho phép bạn kiểm tra các thuộc tính không liên quan trực tiếp đến đối tượng đang được chỉnh sửa. Mỗi lập trình viên tự quyết định xem mình muốn kiểm tra những gì và ở mức độ nào.

Thủ tục ProcessingFillingCheck () kiểm tra các chi tiết cơ bản.