รายละเอียดแบบฟอร์ม

ชุดรายละเอียดแบบฟอร์มจะอธิบายองค์ประกอบของข้อมูลที่แสดง แก้ไข หรือจัดเก็บไว้ในแบบฟอร์ม อย่างไรก็ตาม รายละเอียดแบบฟอร์มนั้นไม่ได้ให้ความสามารถในการแสดงและแก้ไขข้อมูล องค์ประกอบของแบบฟอร์ม (ดูส่วน "องค์ประกอบของแบบฟอร์ม" ของบทนี้) ที่เกี่ยวข้องกับรายละเอียดแบบฟอร์มจะใช้สำหรับการแสดงและการแก้ไข ชุดรายละเอียดแบบฟอร์มทั้งหมดจะเรียกว่าข้อมูลแบบฟอร์ม

สำคัญ!ต้องจำไว้ว่าไม่เหมือนกับแบบฟอร์มทั่วไป ข้อมูลทั้งหมดในแบบฟอร์มที่ได้รับการจัดการจะต้องอธิบายในรูปแบบของรายละเอียด ไม่อนุญาตให้ใช้ตัวแปรโมดูลฟอร์มเป็นแหล่งข้อมูลสำหรับองค์ประกอบของฟอร์ม

ก็มอบหมายได้ รายละเอียดแบบฟอร์มเบื้องต้นนั่นคือแอตทริบิวต์ที่จะกำหนดการทำงานมาตรฐานของแบบฟอร์ม (ส่วนขยายของแบบฟอร์ม) ควรจำไว้ว่าแบบฟอร์มสามารถมีแอตทริบิวต์หลักได้เพียงรายการเดียวเท่านั้น

นามสกุลแบบฟอร์ม– สิ่งเหล่านี้เป็นคุณสมบัติเพิ่มเติม วิธีการ และพารามิเตอร์แบบฟอร์มของออบเจ็กต์ ManagedForm ซึ่งเป็นลักษณะของออบเจ็กต์ที่เป็นองค์ประกอบหลักของแบบฟอร์ม

ในระหว่างกระบวนการพัฒนาแบบฟอร์ม คุณสามารถตั้งค่าความสามารถในการดูและแก้ไขรายละเอียดแบบฟอร์มเฉพาะในแง่ของบทบาทได้อย่างชัดเจน โดยใช้คุณสมบัติดูและแก้ไข (สำหรับรายละเอียดเพิ่มเติม โปรดดูส่วน "การตั้งค่าแบบฟอร์มตามบทบาท" ของ "ผู้แก้ไข" ” บท) นอกจากนี้ ความพร้อมใช้งานของคุณลักษณะเฉพาะในแบบฟอร์มสามารถกำหนดค่าได้โดยใช้ตัวเลือกการทำงาน (รายละเอียดเพิ่มเติมเกี่ยวกับตัวเลือกการทำงานสามารถดูได้ในบท “การจัดการอินเทอร์เฟซการกำหนดค่า”)

คุณสมบัติแอตทริบิวต์แบบฟอร์ม ข้อมูลที่บันทึกไว้เป็นสัญญาณว่าการเปลี่ยนแปลงรายละเอียดเชิงโต้ตอบจะนำไปสู่การพยายามบล็อกข้อมูลแบบฟอร์มสำหรับการแก้ไขรวมถึงการตั้งค่าแฟล็กการแก้ไขแบบฟอร์มโดยอัตโนมัติ

ชนิดข้อมูลที่มีอยู่ในแบบฟอร์มที่ได้รับการจัดการ

แบบฟอร์มที่ได้รับการจัดการยังแตกต่างจากแบบฟอร์มทั่วไปในเรื่องประเภทของข้อมูลที่ใช้งานได้ หากแบบฟอร์มปกติใช้งานได้กับประเภทส่วนใหญ่ที่ 1C:Enterprise จัดเตรียมไว้ให้ (รวมถึงประเภท DirectoryObject, DocumentObject ฯลฯ) ดังนั้นในรูปแบบที่ได้รับการจัดการ จะสามารถแยกแยะประเภทประเภทต่อไปนี้ได้:

  • ประเภทที่ใช้โดยตรงในแบบฟอร์มคือประเภทที่มีอยู่ที่ด้านข้างของไคลเอ็นต์แบบบางและเว็บ (เช่น Number, DirectoryLink.Products, GraphicScheme, TabularDocument)
  • ประเภทที่จะถูกแปลงเป็นประเภทข้อมูลพิเศษ—ประเภทข้อมูลแบบฟอร์มที่ได้รับการจัดการ ประเภทดังกล่าวจะแสดงอยู่ในรายการรายละเอียดแบบฟอร์มในวงเล็บ เช่น (DirectoryObject.Products)
  • รายการไดนามิก (สำหรับรายละเอียดเพิ่มเติม โปรดดูส่วน "รายการไดนามิก" ของบทนี้)

การแปลงออบเจ็กต์แอปพลิเคชันเป็นข้อมูลฟอร์ม

แอปพลิเคชันบางประเภท (เช่น DirectoryObject ฯลฯ) ไม่มีอยู่ในฝั่งไคลเอ็นต์แบบบางและแบบเว็บ (ดูบทแนวคิดแอปพลิเคชันที่ได้รับการจัดการสำหรับรายละเอียดเพิ่มเติม) ดังนั้น เพื่อนำเสนอประเภทแอปพลิเคชันดังกล่าวในแบบฟอร์ม แพลตฟอร์มจึงได้แนะนำประเภทข้อมูลพิเศษที่ออกแบบมาเพื่อทำงานในรูปแบบที่มีการจัดการ คุณลักษณะของแอปพลิเคชันที่ได้รับการจัดการนี้ทำให้จำเป็นต้องแปลงออบเจ็กต์แอปพลิเคชันให้เป็นข้อมูลในรูปแบบ (และในทางกลับกัน)

มีการใช้ประเภทข้อมูลต่อไปนี้:

  • Form DataStructure – มีชุดคุณสมบัติประเภทใดก็ได้ คุณสมบัติอาจเป็นโครงสร้าง คอลเลกชัน หรือโครงสร้างอื่นที่มีคอลเลกชัน ประเภทนี้จะแสดงอยู่ในรูปแบบ DirectoryObject
  • FormDataCollection คือรายการของค่าที่พิมพ์ คล้ายกับอาร์เรย์ องค์ประกอบคอลเลกชันเข้าถึงได้โดยดัชนีหรือตัวระบุ การเข้าถึงด้วย ID อาจไม่สามารถใช้ได้ในบางกรณี นี่เป็นเพราะประเภทของออบเจ็กต์แอปพลิเคชันที่แสดงโดยคอลเลกชันนี้ ตัวระบุสามารถเป็นจำนวนเต็มใดก็ได้ ประเภทนี้จะแสดงในรูปแบบของส่วนที่เป็นตาราง
  • Form DataStructureWithCollection เป็นออบเจ็กต์ที่แสดงเป็นโครงสร้างและคอลเลกชันในเวลาเดียวกัน สามารถปฏิบัติได้เหมือนกับเอนทิตีเหล่านี้ ประเภทนี้แสดงถึงชุดของเรกคอร์ดในแบบฟอร์ม เป็นต้น
  • Form DataTree – วัตถุที่ออกแบบมาเพื่อจัดเก็บข้อมูลแบบลำดับชั้น

วัตถุแอปพลิเคชันถูกแสดงโดยองค์ประกอบข้อมูลแบบฟอร์มตั้งแต่หนึ่งองค์ประกอบขึ้นไป โดยทั่วไป ลำดับชั้นและองค์ประกอบของข้อมูลแบบฟอร์มขึ้นอยู่กับความซับซ้อนและการเชื่อมต่อระหว่างกันของออบเจ็กต์แอปพลิเคชันของแบบฟอร์มที่ได้รับการจัดการ

ตัวอย่างเช่น เอกสารที่มีส่วนที่เป็นตารางจะถูกแสดงโดยอ็อบเจ็กต์ประเภท FormDataStructure (ตัวเอกสารเอง) ซึ่งอ็อบเจ็กต์ประเภท FormDataCollection (ส่วนตารางของเอกสาร) อยู่ในลำดับรอง

สำคัญ!เมื่อพัฒนาการกำหนดค่า สิ่งสำคัญคือต้องจำไว้ว่าออบเจ็กต์แอปพลิเคชันจะพร้อมใช้งานบนเซิร์ฟเวอร์เท่านั้น ในขณะที่ออบเจ็กต์ข้อมูลแบบฟอร์มสามารถใช้ได้ทั้งบนเซิร์ฟเวอร์และไคลเอนต์

การส่งผ่านข้อมูลระหว่างไคลเอนต์และเซิร์ฟเวอร์ส่วนของแบบฟอร์มที่ได้รับการจัดการ

ในความเป็นจริง เราสามารถพูดได้ว่าข้อมูลแบบฟอร์มคือการแสดงข้อมูลที่รวมจากออบเจ็กต์แอปพลิเคชันต่างๆ ซึ่งฟอร์มทำงานเหมือนกันและมีปรากฏบนเซิร์ฟเวอร์และไคลเอนต์ นั่นคือแบบฟอร์มประกอบด้วย "การฉายภาพ" ของข้อมูลออบเจ็กต์แอปพลิเคชันในรูปแบบของประเภทข้อมูลของตัวเองและทำการแปลงระหว่างข้อมูลเหล่านั้นหากจำเป็น อย่างไรก็ตาม หากผู้พัฒนาการกำหนดค่าใช้อัลกอริธึมการประมวลผลข้อมูลของตนเอง เขาต้องทำการแปลงข้อมูล (จากประเภทพิเศษเป็นประเภทแอปพลิเคชัน และในทางกลับกัน) อย่างเป็นอิสระ

เมื่อแก้ไขรายละเอียดแบบฟอร์มในตัวแก้ไขพิเศษ (สำหรับรายละเอียดเพิ่มเติม โปรดดูส่วน "รายละเอียดแบบฟอร์ม" ของบท "ผู้แก้ไข") เป็นไปได้ที่จะมีอิทธิพลต่อการถ่ายโอนข้อมูลระหว่างไคลเอนต์และเซิร์ฟเวอร์ในขณะที่แบบฟอร์มกำลังทำงานอยู่ คอลัมน์ของตัวแก้ไขรายละเอียดใช้สำหรับสิ่งนี้ ใช้เสมอ- ผลกระทบของคุณสมบัตินี้แตกต่างกันสำหรับแอตทริบิวต์สามประเภท:

  • สำหรับแอ็ตทริบิวต์รองในรายการไดนามิก (คอลัมน์รายการไดนามิก):
    • เปิดใช้งานคุณสมบัติ - คุณลักษณะจะถูกอ่านจากฐานข้อมูลเสมอและรวมอยู่ในข้อมูลแบบฟอร์ม
    • คุณสมบัติถูกปิดใช้งาน - แอ็ตทริบิวต์ถูกอ่านจากฐานข้อมูลและรวมไว้ในข้อมูลฟอร์มเฉพาะเมื่อมีองค์ประกอบฟอร์มที่มองเห็นได้ในปัจจุบันซึ่งเชื่อมโยงกับแอ็ตทริบิวต์หรือแอ็ตทริบิวต์รอง
  • สำหรับอุปกรณ์ประกอบฉากรองจากคอลเลกชันการเคลื่อนไหว:
    • เปิดใช้งานคุณสมบัติ - การเคลื่อนไหวของเอกสารถูกอ่านจากฐานข้อมูลและจะปรากฏในข้อมูลแบบฟอร์ม
    • คุณสมบัติถูกปิดใช้งาน - การเคลื่อนไหวของเอกสารจะไม่ถูกอ่านจากฐานข้อมูล และจะไม่รวมอยู่ในข้อมูลแบบฟอร์ม (หากไม่มีองค์ประกอบแบบฟอร์มที่อ้างอิงถึงการเคลื่อนไหวของเอกสาร)
  • รายละเอียดแบบฟอร์มอื่นๆ:
    • เปิดใช้งานคุณสมบัติ - คุณลักษณะจะปรากฏในข้อมูลแบบฟอร์ม โดยไม่คำนึงว่าจะมีองค์ประกอบแบบฟอร์มอย่างน้อยหนึ่งองค์ประกอบที่เกี่ยวข้องกับแอตทริบิวต์หรือคุณลักษณะรองหรือไม่
    • คุณสมบัติถูกปิดใช้งาน - คุณลักษณะจะปรากฏในข้อมูลแบบฟอร์มเฉพาะในกรณีที่มีองค์ประกอบแบบฟอร์มที่เกี่ยวข้องกับแอตทริบิวต์หรือแอตทริบิวต์รอง ไม่เหมือนกับแอตทริบิวต์รายการไดนามิก การเปิดเผยองค์ประกอบที่เกี่ยวข้องกับแอตทริบิวต์ไม่สำคัญที่นี่

บันทึก. ควรจำไว้ว่าคุณสมบัติที่ตั้งค่าไว้ในแอตทริบิวต์พาเรนต์จะส่งผลต่อแอตทริบิวต์รองทั้งหมด ตัวอย่างเช่น หากคุณสมบัติ Use ถูกล้างเสมอสำหรับส่วนที่เป็นตารางของเอกสาร ระบบจะพิจารณาว่าคุณสมบัตินี้ถูกล้างสำหรับรายละเอียดรองทั้งหมดด้วย (แม้จะมีสถานะที่แท้จริงของคุณสมบัติก็ตาม)

วิธีการแปลงข้อมูลออบเจ็กต์ของแอปพลิเคชันเป็นข้อมูลในแบบฟอร์ม

หากต้องการแปลงออบเจ็กต์ของแอปพลิเคชันให้เป็นข้อมูลในฟอร์มและย้อนกลับ มีชุดของวิธีการแบบโกลบอล:

  • ค่าInFormData()
  • FormDataInValue(),
  • CopyFormData()

สำคัญ!วิธีการที่ทำงานกับออบเจ็กต์แอปพลิเคชันมีเฉพาะในขั้นตอนเซิร์ฟเวอร์เท่านั้น วิธีการคัดลอกค่าระหว่างข้อมูลแบบฟอร์มนั้นมีอยู่บนเซิร์ฟเวอร์และบนไคลเอนต์เนื่องจากไม่จำเป็นต้องใช้ออบเจ็กต์แอปพลิเคชันเป็นพารามิเตอร์

เมื่อแปลงข้อมูลแบบฟอร์มเป็นออบเจ็กต์แอปพลิเคชัน คุณต้องคำนึงถึงความเข้ากันได้ด้วย

  • ValueInFormData() – แปลงวัตถุประเภทแอปพลิเคชันเป็นข้อมูลแบบฟอร์ม
  • FormDataInValue() – แปลงข้อมูลแบบฟอร์มเป็นวัตถุประเภทแอปพลิเคชัน
  • CopyFormData() – คัดลอกข้อมูลแบบฟอร์มที่มีโครงสร้างที่เข้ากันได้ คืนค่า True หากการคัดลอกสำเร็จ หรือคืนค่า False หากโครงสร้างอ็อบเจ็กต์เข้ากันไม่ได้

บันทึก. เมื่อดำเนินการมาตรฐาน (การเปิดแบบฟอร์ม การดำเนินการคำสั่งเขียนมาตรฐาน ฯลฯ) ของแบบฟอร์มที่มีรายละเอียดหลัก การแปลงจะดำเนินการโดยอัตโนมัติ

มาดูตัวอย่างวิธีใช้การแปลงข้อมูลในอัลกอริทึมของคุณเอง

&OnServerProcedure เมื่อ CreateOnServer (ล้มเหลว, การประมวลผลมาตรฐาน)

ObjectProduct = Directories.Products.FindByName("Coffeepot").GetObject();

ValueInFormData(ObjectItem, วัตถุ);

สิ้นสุดขั้นตอน

&ขั้นตอน OnClient เขียน()

ValueInFormData(ObjectItem, วัตถุ);

WriteOnServer();

&ขั้นตอนบนเซิร์ฟเวอร์ WriteOnServer()

ObjectProduct = FormDataValue (วัตถุ ประเภท ("DirectoryObject.Products"));

ObjectItem.เขียน();

  • สิ้นสุดขั้นตอน
  • วัตถุ ManagedForm ยังมีวิธีการที่ใช้ได้บนเซิร์ฟเวอร์:

โดยปกติแล้วการใช้วิธีการเหล่านี้สะดวกกว่า เนื่องจากมีข้อมูลเกี่ยวกับประเภทของแอตทริบิวต์ของฟอร์ม เป็นต้น นอกจากนี้ เมธอด Form AttributesValue() ยังตั้งค่าความสอดคล้องระหว่างข้อมูลในฟอร์มและออบเจ็กต์ ซึ่งใช้เมื่อสร้างข้อความ คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเรื่องนี้ได้ในบท “ความสามารถในการนำทางบริการ”

เรามายกตัวอย่างการใช้วิธีการเหล่านี้กัน

&ขั้นตอนบนเซิร์ฟเวอร์ คำนวณใหม่บนเซิร์ฟเวอร์()

// แปลงแอตทริบิวต์ Object ให้เป็นวัตถุของแอปพลิเคชัน

ObjectProduct = FormDataValue (วัตถุ ประเภท ("DirectoryObject.Products"));

เอกสาร = แบบฟอร์ม AttributesValue ("วัตถุ");

// ทำการคำนวณใหม่โดยใช้วิธีที่กำหนดไว้ในโมดูลเอกสาร

  • เอกสารคำนวณใหม่();
  • // แปลงวัตถุแอปพลิเคชันกลับเป็นเสา

ValueFormAttributes(เอกสาร “วัตถุ”);

อินเตอร์เฟซซอฟต์แวร์

FormDataTree ค้นหา ByIdรับรายการ

คำอธิบาย:

ออกแบบมาเพื่อสร้างแบบจำลองต้นไม้ในข้อมูลแบบฟอร์มที่ได้รับการจัดการ

อ็อบเจ็กต์นี้สามารถซีเรียลไลซ์ถึง/จาก XDTO ประเภท XDTO ที่สอดคล้องกัน

วัตถุนี้

ถูกกำหนดไว้ในเนมสเปซ ชื่อประเภท XDTO:

ValueFormAttributes(เอกสาร “วัตถุ”);

รับรายการ

ไวยากรณ์: รับรายการ()ค่าส่งคืน:

ประเภท: แบบฟอร์ม DataCollection ขององค์ประกอบต้นไม้

ออกแบบมาเพื่อสร้างแบบจำลองต้นไม้ในข้อมูลแบบฟอร์มที่ได้รับการจัดการ

รับชุดองค์ประกอบต้นไม้ระดับบนสุด<Идентификатор>)

มีจำหน่าย: ไคลเอนต์, เซิร์ฟเวอร์,

<Идентификатор>ไคลเอนต์แบบบาง

, เว็บไคลเอ็นต์

วัตถุนี้

ค้นหา ById

ValueFormAttributes(เอกสาร “วัตถุ”);

FindById(

พารามิเตอร์:

(ที่จำเป็น)

ประเภท: หมายเลข. ตัวระบุองค์ประกอบต้นไม้

<Имя свойства> (<Имя свойства>)

  • ชนิด:FormDataTreeElement.
  • รับองค์ประกอบคอลเลกชันตาม ID
  • // แปลงวัตถุแอปพลิเคชันกลับเป็นเสา
  • ความพร้อมใช้งาน: ไคลเอนต์, เซิร์ฟเวอร์, ไคลเอนต์แบบบาง, เว็บไคลเอนต์

ValueFormAttributes(เอกสาร “วัตถุ”);

FormDataTreeItem

คุณสมบัติ:

GetId (เก็ตไอดี)

รับผู้ปกครอง

  • คุณสมบัติ
  • องค์ประกอบโครงสร้างข้อมูลแบบฟอร์ม
  • FormDataTreeItemCollection
  • องค์ประกอบคอลเลกชัน: DataFormTreeElement
  • สำหรับออบเจ็กต์ คุณสามารถสำรวจคอลเลกชันโดยใช้ตัวดำเนินการ For Each... From... Loop การข้ามผ่านจะเลือกองค์ประกอบของคอลเลกชัน คุณสามารถเข้าถึงองค์ประกอบการรวบรวมโดยใช้ตัวดำเนินการ [...] ดัชนีขององค์ประกอบถูกส่งผ่านเป็นอาร์กิวเมนต์
  • แทรก
  • เพิ่ม
  • ดัชนี (IndexOf)

ValueFormAttributes(เอกสาร “วัตถุ”);

นับ

พารามิเตอร์:

ชัดเจน

  • รับ
  • เคลื่อนไหว

ลบ

การรวมตัวกันของธาตุไม้

ดูเพิ่มเติมที่: FormDataTreeElement วิธีการ GetElements DataFormTree วิธีการ GetItems

หากมีการขยายโหนดใด ๆ ในแผนผังและเลือกโหนดรองแล้วเมื่อทำการอัพเดตแผนผังด้วยฟังก์ชัน ค่าInFormDataแพลตฟอร์มตก

วิธีแก้ไข: คุณต้องเคลียร์ทรีก่อนทำการอัพเดต

ตัวอย่างเช่น:

&บนเซิร์ฟเวอร์ขั้นตอน ClearTree(องค์ประกอบ) สำหรับแต่ละองค์ประกอบจากองค์ประกอบ Loop ClearTree(element.GetElements());

สิ้นสุดรอบ;

องค์ประกอบ.ชัดเจน(); สิ้นสุดขั้นตอน

&ในขั้นตอนเซิร์ฟเวอร์ กรอกแผนผังแนวคิด() dConcepts = srProperties.Build แผนผังแนวคิด(OnDate, Meta.CurrentIB());

ClearTree(ConceptTree.GetItems());

ValueInFormData(dConcepts, ConceptTree); สิ้นสุดขั้นตอน

&ขั้นตอน OnClient OnDateOnChange (องค์ประกอบ) กรอก ConceptTree (); สิ้นสุดขั้นตอน

วิธีเพิ่มรายละเอียดเพิ่มเติมให้กับองค์ประกอบไดเรกทอรีใน 1C Accounting 8.3 (การแก้ไข 3.0) 2016-12-07T18:20:33+00:00" ():

มันเกิดขึ้นที่เราขาดความสามารถที่มีอยู่ใน 1C และคุณไม่จำเป็นต้องติดต่อโปรแกรมเมอร์เสมอไป ฉันจะบอกคุณเกี่ยวกับหนึ่งในกรณีเหล่านี้ที่เกี่ยวข้องกับ 1C ใหม่: การบัญชี 8.3 (รุ่น 3.0)

ขอให้เรามีช่องไม่เพียงพอที่จะป้อนข้อมูลเกี่ยวกับคู่สัญญาของเรา และเราต้องการเพิ่มฟิลด์ใหม่ซึ่งจะเรียกว่า "สถานะ" และมีค่าหนึ่งในสามค่า ได้แก่ "สูง" "ปานกลาง" และ "ต่ำ" ฉันจะบอกคุณด้านล่างทีละขั้นตอนว่าจะเพิ่มฟิลด์ดังกล่าวได้อย่างไรโดยไม่ต้องเข้าไปในตัวกำหนดค่า

1. ไปที่ส่วน "การดูแลระบบ" และเลือก "

การตั้งค่าทั่วไป

2. ค้นหาและทำเครื่องหมายในช่อง "รายละเอียดและข้อมูลเพิ่มเติม" หากยังไม่ได้เลือก คลิกลิงก์ "รายละเอียดเพิ่มเติม":

7. ดังที่คุณเห็น ขณะนี้คู่สัญญามีแอตทริบิวต์สถานะอยู่ในรายการรายละเอียดเพิ่มเติม

8. ตอนนี้ถ้าเราไปที่องค์ประกอบใด ๆ ของไดเร็กทอรีคู่สัญญาเราจะเห็นที่ด้านล่างสุดของแบบฟอร์มฟิลด์สถานะใหม่ ( หากไม่เห็น ให้ขยายกลุ่ม "รายละเอียดเพิ่มเติม" ที่ยุบอยู่ในแบบฟอร์ม):

9. ในฟิลด์นี้เราสามารถทดแทนหนึ่งในสามค่าที่เราสร้างขึ้นได้ คุณสามารถเลือกโดยใช้ฟิลด์นี้ในรูปแบบของรายการ ซึ่งสามารถแสดงในรายงาน ฯลฯ

และ Data Transfer Object ไปยังโครงสร้างโค้ดรูปแบบควบคุมในสภาพแวดล้อม 1C 8.2

การแนะนำ

เริ่มต้นด้วยคำอธิบายสั้น ๆ เกี่ยวกับแนวคิดของ "แบบฟอร์มที่ได้รับการจัดการ" และแนวคิดที่เกี่ยวข้องของแพลตฟอร์ม 1C ผู้ที่ชื่นชอบแพลตฟอร์มอาจต้องการข้ามส่วนนี้

ในปีพ.ศ. 2551 ก็มีวางจำหน่ายแล้ว เวอร์ชันใหม่แพลตฟอร์ม 1C: Enterprise 8.2 (ต่อไปนี้จะเรียกว่าแอปพลิเคชันที่ได้รับการจัดการ) ซึ่งเปลี่ยนเลเยอร์การทำงานทั้งหมดด้วยอินเทอร์เฟซโดยสิ้นเชิง ซึ่งรวมถึงอินเทอร์เฟซคำสั่ง แบบฟอร์ม และระบบหน้าต่าง ในขณะเดียวกัน ไม่เพียงแต่รูปแบบการพัฒนาเท่านั้นที่เปลี่ยนแปลงไป ส่วนต่อประสานกับผู้ใช้ในการกำหนดค่า แต่ยังเสนอสถาปัตยกรรมใหม่สำหรับการแยกการทำงานระหว่างแอปพลิเคชันไคลเอนต์และเซิร์ฟเวอร์
แอปพลิเคชันที่ได้รับการจัดการรองรับไคลเอนต์ประเภทต่อไปนี้:

  • ไคลเอนต์หนา (โหมดการเปิดตัวปกติและที่ได้รับการจัดการ)
  • ไคลเอ็นต์แบบบาง
  • เว็บไคลเอ็นต์
แอปพลิเคชันที่ได้รับการจัดการจะใช้แบบฟอร์มที่สร้างขึ้นจากเทคโนโลยีใหม่ พวกเขาถูกเรียกว่า แบบฟอร์มที่ได้รับการจัดการ- เพื่อให้การเปลี่ยนแปลงง่ายขึ้น แบบฟอร์มก่อนหน้า (ที่เรียกว่าแบบฟอร์มปกติ) ก็ได้รับการสนับสนุนเช่นกัน แต่ฟังก์ชันการทำงานไม่ได้รับการพัฒนา และพร้อมใช้งานในโหมดเปิดใช้ไคลเอ็นต์แบบ Thick เท่านั้น
ความแตกต่างหลักระหว่างฟอร์มที่ได้รับการจัดการสำหรับนักพัฒนา:
  • คำอธิบายโครงสร้างที่ประกาศ ไม่ใช่ "พิกเซลต่อพิกเซล" การจัดวางองค์ประกอบเฉพาะจะดำเนินการโดยอัตโนมัติโดยระบบเมื่อมีการแสดงแบบฟอร์ม
  • ฟังก์ชั่นทั้งหมดของแบบฟอร์มอธิบายไว้ว่า รายละเอียดและ ทีม- รายละเอียดคือข้อมูลที่ฟอร์มใช้งานได้ และคำสั่งคือการดำเนินการที่จะดำเนินการ
  • แบบฟอร์มทำงานบนทั้งเซิร์ฟเวอร์และไคลเอนต์
  • ในบริบทของไคลเอนต์ แอปพลิเคชันเกือบทุกประเภทไม่พร้อมใช้งาน ดังนั้นจึงเป็นไปไม่ได้ที่จะเปลี่ยนแปลงข้อมูลในฐานข้อมูล
  • สำหรับแต่ละวิธีหรือ รูปร่างตัวแปรจะต้องระบุ คำสั่งการรวบรวมกำหนดตำแหน่งการดำเนินการ (ไคลเอนต์หรือเซิร์ฟเวอร์) และการเข้าถึงบริบทของแบบฟอร์ม
เรามาแสดงรายการคำสั่งสำหรับวิธีการรวบรวมแบบฟอร์ม:
  • &บนไคลเอนต์
  • &บนเซิร์ฟเวอร์
  • &บนเซิร์ฟเวอร์โดยไม่มีบริบท
  • &OnClientOnServer โดยไม่มีบริบท
ให้เราอธิบายข้างต้น ภาพหน้าจอแสดงตัวอย่างของแบบฟอร์มที่ได้รับการจัดการและโมดูลในโหมดการพัฒนา ค้นหาคำอธิบาย อุปกรณ์ประกอบฉาก คำสั่งในการคอมไพล์ ฯลฯ

การอภิปรายเพิ่มเติมทั้งหมดจะเกี่ยวกับด้านขวาของภาพประกอบ เกี่ยวกับวิธีการจัดโครงสร้างโค้ดโมดูล และหลักการใดที่จะช่วยให้คุณดำเนินการโต้ตอบระหว่างไคลเอนต์และเซิร์ฟเวอร์ได้อย่างมีประสิทธิภาพ

มากำหนดปัญหากันดีกว่า

หลายปีผ่านไปนับตั้งแต่มีการใช้งานแพลตฟอร์ม 1C เวอร์ชันใหม่และมีการเปิดตัวโซลูชัน (การกำหนดค่า) มากมายโดยทั้ง 1C และพันธมิตรหลายราย
ในช่วงเวลานี้ นักพัฒนาได้พัฒนาความเข้าใจร่วมกันเกี่ยวกับหลักการของการโต้ตอบระหว่างไคลเอนต์และเซิร์ฟเวอร์เมื่อสร้างแบบฟอร์ม และแนวทางในการใช้โมดูลซอฟต์แวร์มีการเปลี่ยนแปลงในความเป็นจริงทางสถาปัตยกรรมใหม่หรือไม่

ลองดูโครงสร้างโค้ด (form module) ในรูปแบบต่างๆ ของการกำหนดค่ามาตรฐานเดียวกัน แล้วลองค้นหารูปแบบ
ตามโครงสร้าง เราหมายถึงส่วนของโค้ด (ส่วนใหญ่มักจะเป็นบล็อกความคิดเห็น) ที่นักพัฒนาจัดสรรให้จัดกลุ่มวิธีการและคำสั่งการคอมไพล์สำหรับวิธีการเหล่านี้
ตัวอย่างที่ 1:
ส่วนของตัวจัดการเหตุการณ์ วิธีการ - บนไคลเอนต์ วิธีการ - บนเซิร์ฟเวอร์ วิธีการ - บนไคลเอนต์ ส่วนของขั้นตอนการบริการและฟังก์ชัน ฟังก์ชั่นการควบคุมอินพุตเสริม
ตัวอย่างที่ 2:
ขั้นตอนการบริการและฟังก์ชั่นเอกสารการชำระเงินค่าตัวจัดการเหตุการณ์
ตัวอย่างที่ 3:
ขั้นตอนการบริการบนเซิร์ฟเวอร์ ขั้นตอนการบริการบนไคลเอนต์ ขั้นตอนการบริการบนเซิร์ฟเวอร์โดยไม่มีบริบท ตัวจัดการเหตุการณ์ส่วนหัว ตัวจัดการเหตุการณ์คำสั่ง
ตัวอย่างที่ 4:
ขั้นตอนวัตถุประสงค์ทั่วไป ตัวจัดการเหตุการณ์แบบฟอร์ม ขั้นตอนของระบบย่อย "ข้อมูลการติดต่อ"
โดยพื้นฐานแล้ว โครงสร้างโค้ดหายไป หรือพูดง่ายๆ ก็คือ โครงสร้างคล้ายกับที่อยู่ใน Form 8.1:

  • คำที่ไม่ให้ข้อมูล "ทั่วไป บริการ เสริม"
  • พยายามอย่างขี้อายที่จะแยกวิธีไคลเอ็นต์และเซิร์ฟเวอร์ออกจากกัน
  • วิธีการมักถูกจัดกลุ่มตามองค์ประกอบอินเทอร์เฟซ "การทำงานกับชิ้นส่วนแบบตาราง ผลิตภัณฑ์ ข้อมูลการติดต่อ"
  • การจัดเรียงวิธีการและกลุ่มรหัสตามอำเภอใจ ตัวอย่างเช่น ตัวจัดการเหตุการณ์อาจอยู่ที่ด้านบนในรูปแบบหนึ่ง ที่ด้านล่างในอีกรูปแบบหนึ่ง โดยไม่ได้เน้นเลยในรูปแบบที่สาม เป็นต้น
  • และอย่าลืมว่าทั้งหมดนี้รวมอยู่ในการกำหนดค่าเดียว
  • ใช่ มีการกำหนดค่าที่คำว่า "ทั่วไป บริการ เสริม" อยู่ในที่เดียวกันเสมอ แต่...
ทำไมคุณถึงต้องการโครงสร้างรหัส?
  • ลดความซับซ้อนของการบำรุงรักษา
  • ลดความซับซ้อนในการเรียนรู้
  • บันทึกหลักการทั่วไป/สำคัญ/ความสำเร็จ
  • ...ทางเลือกของคุณ
เหตุใดมาตรฐานการพัฒนาที่มีอยู่จาก 1C จึงไม่ช่วย
มาดูหลักการที่เผยแพร่บนดิสก์ ITS และใน “คำแนะนำสำหรับนักพัฒนา...” ต่างๆ ที่แนะนำเมื่อเขียนฟอร์มที่ได้รับการจัดการ
  • ลดจำนวนการเรียกเซิร์ฟเวอร์ให้เหลือน้อยที่สุด
  • การประมวลผลสูงสุดบนเซิร์ฟเวอร์
  • การเรียกเซิร์ฟเวอร์ที่ไม่ใช่บริบทจะเร็วกว่าการเรียกตามบริบท
  • โปรแกรมที่คำนึงถึงการสื่อสารระหว่างไคลเอนต์และเซิร์ฟเวอร์
  • ฯลฯ
สโลแกนเหล่านี้เป็นเรื่องจริง แต่จะนำไปปฏิบัติได้อย่างไร? วิธีลดจำนวนการโทรให้เหลือน้อยที่สุดการเขียนโปรแกรมในโหมดไคลเอนต์ - เซิร์ฟเวอร์หมายความว่าอย่างไร?

รูปแบบการออกแบบหรือภูมิปัญญารุ่นต่อรุ่น

การโต้ตอบระหว่างไคลเอนต์และเซิร์ฟเวอร์ถูกนำมาใช้ในเทคโนโลยีซอฟต์แวร์ต่างๆ มานานหลายทศวรรษ คำตอบของคำถามที่สรุปไว้ในหัวข้อที่แล้วเป็นที่รู้กันมานานแล้วและสรุปไว้ในหลักการพื้นฐานสองข้อ
  • ซุ้มระยะไกล(ต่อไปนี้จะเรียกว่าอินเทอร์เฟซ การเข้าถึงระยะไกล)
  • ออบเจ็กต์การถ่ายโอนข้อมูล(ต่อไปนี้จะเรียกว่า Data Transfer Object)
ถ้อยคำจากมาร์ติน ฟาวเลอร์ คำบรรยายของเขาเกี่ยวกับหลักธรรมเหล่านี้:
  • แต่ละวัตถุที่อาจมีไว้สำหรับการเข้าถึงระยะไกลจะต้องมี อินเทอร์เฟซที่มีรายละเอียดต่ำซึ่งจะลดจำนวนการโทรที่จำเป็นในการดำเนินการตามขั้นตอนเฉพาะ ... แทนที่จะขอใบแจ้งหนี้และรายการทั้งหมดแยกกัน คุณต้องอ่านและอัปเดตรายการใบแจ้งหนี้ทั้งหมดในคำขอเดียว สิ่งนี้ส่งผลต่อโครงสร้างทั้งหมดของออบเจ็กต์...ข้อควรจำ: อินเทอร์เฟซการเข้าถึงระยะไกล ไม่มีตรรกะของโดเมน.
  • ...หากฉันเป็นแม่ที่เอาใจใส่ ฉันจะบอกลูกอย่างแน่นอนว่า “อย่าเขียนวัตถุการถ่ายโอนข้อมูล!” ในกรณีส่วนใหญ่ ออบเจ็กต์การถ่ายโอนข้อมูลจะไม่มีอะไรมากไปกว่า ชุดสนามป่อง... คุณค่าของสัตว์ประหลาดที่น่าขยะแขยงนี้อยู่ที่ความเป็นไปได้เท่านั้น ส่งข้อมูลหลายชิ้นผ่านเครือข่ายในการโทรครั้งเดียว- เทคนิคที่มีความสำคัญอย่างยิ่งสำหรับระบบแบบกระจาย
ตัวอย่างเทมเพลตในแพลตฟอร์ม 1C
อินเทอร์เฟซการเขียนโปรแกรมแอปพลิเคชันพร้อมใช้งานสำหรับนักพัฒนาเมื่อพัฒนาแบบฟอร์มที่ได้รับการจัดการประกอบด้วยตัวอย่างมากมายของหลักการเหล่านี้
ตัวอย่างเช่น วิธีการ OpenForm() ซึ่งเป็นอินเทอร์เฟซ "หยาบ" ทั่วไป
OpeningParameters = โครงสร้างใหม่ ("พารามิเตอร์1, พารามิเตอร์2, พารามิเตอร์3", ค่า1, ค่า2, ค่า3); แบบฟอร์ม = OpenForm (ชื่อแบบฟอร์ม, พารามิเตอร์การเปิด);
เปรียบเทียบกับสไตล์ที่ใช้ในเวอร์ชัน 8.1
แบบฟอร์ม = GetForm(ชื่อแบบฟอร์ม); Form.Parameter1 = ค่า1; Form.Parameter2 = ค่า2; แบบฟอร์มเปิด();

ในบริบทของแบบฟอร์มที่ได้รับการจัดการ มี "ออบเจ็กต์การถ่ายโอนข้อมูล" มากมาย คุณสามารถเลือกได้ เป็นระบบและ นักพัฒนากำหนด.
ระบบสร้างโมเดลออบเจ็กต์แอปพลิเคชันบนไคลเอนต์ ในรูปแบบขององค์ประกอบข้อมูลแบบฟอร์มตั้งแต่หนึ่งองค์ประกอบขึ้นไป ไม่สามารถสร้างได้โดยไม่ต้องอ้างอิงรายละเอียดแบบฟอร์ม

  • โครงสร้างรูปแบบข้อมูล
  • DataFormsCollection
  • DataFormStructureWithCollection
  • DataShapesTree
การแปลงออบเจ็กต์การถ่ายโอนข้อมูลระบบเป็นประเภทแอปพลิเคชันและด้านหลังทำได้โดยใช้วิธีการต่อไปนี้:
  • ค่าInFormData()
  • FormDataValue()
  • คัดลอกแบบฟอร์มข้อมูล()
  • ค่าInFormAttributes()
  • FormAttributesValue ()
การแปลงอย่างชัดเจนมักใช้ในการปรับตัว โซลูชันที่มีอยู่- วิธีการอาจคาดหวัง (ใช้คุณสมบัติ) พารามิเตอร์อินพุต เช่น ValueTable แทนที่จะเป็น FormDataCollection หรือวิธีการที่กำหนดไว้ในบริบทของวัตถุแอปพลิเคชัน และไม่พร้อมใช้งานสำหรับการโทรโดยตรงจากแบบฟอร์ม
ตัวอย่าง 1C v8.1:
// บนไคลเอนต์ในบริบทของแบบฟอร์ม FillUserCache(DepartmentLink)
ตัวอย่าง 1C v8.2:
// บนเซิร์ฟเวอร์ในบริบทของรูปแบบ ProcessingObject = Form AttributesValue("Object"); ProcessingObject.FillUserCache (DepartmentRef); ValueFormAttributes(ProcessingObject, "Object");

ออบเจ็กต์การถ่ายโอนข้อมูล ซึ่งโครงสร้างที่กำหนดโดยนักพัฒนา ถือเป็นชุดย่อยเล็กๆ ของประเภทที่มีให้ทั้งบนไคลเอนต์และเซิร์ฟเวอร์ ส่วนใหญ่แล้วสิ่งต่อไปนี้จะใช้เป็นพารามิเตอร์และผลลัพธ์ของวิธีการของอินเทอร์เฟซ "coarsened":

  • ประเภทดั้งเดิม (สตริง, ตัวเลข, บูลีน)
  • โครงสร้าง
  • การโต้ตอบ
  • อาร์เรย์
  • ลิงก์ไปยังออบเจ็กต์แอปพลิเคชัน (ตัวระบุที่ไม่ซ้ำและการแสดงข้อความ)
ตัวอย่าง: วิธีการยอมรับรายการคำสั่งซื้อเพื่อเปลี่ยนสถานะและส่งคำอธิบายข้อผิดพลาดไปยังไคลเอนต์
&OnServerWithoutContext ฟังก์ชัน ServerChangeOrderStatus (คำสั่งซื้อ, สถานะใหม่) ข้อผิดพลาด = การจับคู่ใหม่ (); // [คำสั่งซื้อ] [คำอธิบายข้อผิดพลาด] สำหรับแต่ละคำสั่งซื้อจากรอบคำสั่งซื้อ StartTransaction ();

ลอง DocOb = Order.GetObject();

- การดำเนินการอื่นๆ เป็นไปได้ไม่เพียงแต่กับคำสั่ง... ข้อยกเว้น CancelTransaction();
  • Errors.Insert(คำสั่งซื้อ, ErrorDescription());สิ้นสุดความพยายาม;
  • การระบุอินเทอร์เฟซการเข้าถึงระยะไกลที่ชัดเจน วิธีเซิร์ฟเวอร์ใดที่สามารถเรียกจากไคลเอนต์ได้ และวิธีใดไม่สามารถทำได้
  • ชื่อของวิธีอินเทอร์เฟซระยะไกลจะขึ้นต้นด้วยคำนำหน้า "Server" สิ่งนี้ช่วยให้คุณเห็นการถ่ายโอนการควบคุมไปยังเซิร์ฟเวอร์ทันทีในขณะที่อ่านโค้ด และลดความซับซ้อนในการใช้ความช่วยเหลือตามบริบท โปรดทราบว่าคำแนะนำอย่างเป็นทางการ (ITS) จะแนะนำวิธีการตั้งชื่อด้วย postfix เช่น ChangeOrderStatusOnServer() อย่างไรก็ตาม เราขอย้ำอีกครั้งว่าวิธีการเซิร์ฟเวอร์บางวิธีไม่สามารถเรียกจากไคลเอ็นต์ได้ ดังนั้นการเข้าถึงแบบลอจิคัลจึงมีความสำคัญมากกว่าตำแหน่งการคอมไพล์ ดังนั้น ด้วยคำนำหน้า "Server" เราจึงทำเครื่องหมายเฉพาะวิธีการที่ไคลเอ็นต์สามารถใช้ได้เท่านั้น เรามาเรียกวิธีการตัวอย่าง ServerChangeOrderStatus() กันความสามารถในการอ่าน
  • เรื่องของรสนิยมเรายอมรับคำสั่งซื้อเมื่อโมดูลเริ่มต้นด้วยขั้นตอนการสร้างแบบฟอร์มบนเซิร์ฟเวอร์และวิธีการเข้าถึงระยะไกลการบำรุงรักษา จะต้องมีตำแหน่งที่ชัดเจนในการเพิ่มรหัสใหม่จุดสำคัญ
เทมเพลตวิธีการที่สร้างขึ้นโดยอัตโนมัติโดยตัวกำหนดค่าจะถูกเพิ่มที่ส่วนท้ายของโมดูล เนื่องจากตัวจัดการเหตุการณ์สำหรับองค์ประกอบของฟอร์มมักถูกสร้างขึ้นโดยอัตโนมัติ บล็อกที่เกี่ยวข้องจึงอยู่อันดับสุดท้าย เพื่อไม่ให้ลากตัวจัดการแต่ละตัวไปยังตำแหน่งอื่นในโมดูล
  • ด้านล่างนี้เป็นโครงสร้างพื้นฐานของโมดูลที่ดำเนินการตามเป้าหมายที่ระบุไว้
  • ตัวเลือกกราฟิก – แสดงขั้นตอนหลักของการดำเนินการอย่างชัดเจน

//////////////////////////////////////////////////////////////////////////////// // <(c) Автор="ตัวเลือกข้อความเป็นตัวอย่างของการออกแบบเทมเพลตสำหรับการแทรกโครงสร้างลงในโมดูลฟอร์มใหม่อย่างรวดเร็ว"/> // <Описание> // // "วันที่="

//////////////////////////////////////////////// // /////////////////////////// // ตัวแปรโมดูล ///////////////// // ////////////////////////////////////////////////////////////////// ////////// // บนเซิร์ฟเวอร์ //******* เหตุการณ์บนเซิร์ฟเวอร์ ******* &ในขั้นตอนเซิร์ฟเวอร์เมื่อสร้างบนเซิร์ฟเวอร์ (ความล้มเหลว, การประมวลผลมาตรฐาน) / /แทรกเนื้อหาของตัวจัดการจุดสิ้นสุดของขั้นตอน //********* อินเทอร์เฟซการเข้าถึงระยะไกล ******* //******* ตรรกะทางธุรกิจบนเซิร์ฟเวอร์ ******* /////////////////////////////////////////////////// /////// //////////////////// // วิธีการทั่วไปของลูกค้าและเซิร์ฟเวอร์ /////////////// ////// /////////////////////////////////////////// ///// //////// // กับลูกค้า //********* ตรรกะทางธุรกิจกับลูกค้า ******* //******* ทีม * ****** //********* กิจกรรมของลูกค้า ******* ////////////////////////// //////////////////////////////////////////////// // / / ผู้ดำเนินการโปรแกรมหลัก
คำถามที่เกี่ยวข้อง
  • ตัวเลือกการใช้งานอินเทอร์เฟซการเข้าถึงระยะไกล- ไม่ซิงโครนัส ระดับรายละเอียด...
  • การแคช 1C ทำการตัดสินใจทางสถาปัตยกรรมที่ไม่ประสบความสำเร็จ โดยแนะนำแคชในระดับวิธีการเรียกของโมดูลทั่วไปเท่านั้น และไม่ได้ให้ความสามารถในการควบคุม (เวลาที่เกี่ยวข้อง รีเซ็ตตามความต้องการ)
  • การเรียกเซิร์ฟเวอร์โดยนัย- อย่าลืมเกี่ยวกับคุณสมบัติทางเทคโนโลยี การดำเนินการที่ "ไม่เป็นอันตราย" หลายอย่างบนไคลเอนต์กระตุ้นให้แพลตฟอร์มติดต่อกับเซิร์ฟเวอร์

แบบฟอร์มใน 1C:Enterprise มีไว้สำหรับการแสดงและแก้ไขข้อมูลที่มีอยู่ในฐานข้อมูล แบบฟอร์มอาจเป็นของออบเจ็กต์การกำหนดค่าเฉพาะหรือมีอยู่แยกจากกันและถูกใช้โดยโซลูชันแอปพลิเคชันทั้งหมด

ตัวอย่างเช่น ไดเร็กทอรี ศัพท์อาจมีหลายรูปแบบที่จะใช้เพื่อวัตถุประสงค์เฉพาะ - การแก้ไของค์ประกอบไดเร็กทอรี การแสดงรายการ ฯลฯ :

นอกจากนี้ อาจมีแบบฟอร์มทั่วไปที่ไม่อยู่ในออบเจ็กต์การกำหนดค่าเฉพาะ - แบบฟอร์มทั่วไป

แบบฟอร์มพื้นฐาน

แต่ละออบเจ็กต์การกำหนดค่าสามารถใช้เพื่อดำเนินการมาตรฐานบางอย่างได้ ตัวอย่างเช่น สำหรับไดเร็กทอรีใดๆ คุณอาจต้องแสดงรายการองค์ประกอบ แสดงแต่ละองค์ประกอบของไดเร็กทอรี แสดงกลุ่มของไดเร็กทอรี เลือกองค์ประกอบและกลุ่มขององค์ประกอบจากไดเร็กทอรี สำหรับเอกสารใดๆ รายการการดำเนินการดังกล่าวจะมีขนาดเล็กกว่ามาก เช่น การดูรายการเอกสาร การเลือกจากรายการเอกสาร และการดูเอกสารแยกต่างหาก

เพื่อให้แน่ใจว่าการดำเนินการมาตรฐานดังกล่าวจะดำเนินการกับข้อมูลของออบเจ็กต์โซลูชันแอปพลิเคชัน สำหรับแต่ละการดำเนินการจะมีชุดของรูปแบบพื้นฐานที่จะใช้เมื่อดำเนินการที่เกี่ยวข้อง แบบฟอร์มใด ๆ ที่อยู่ในสังกัดของวัตถุนี้สามารถกำหนดให้เป็นแบบฟอร์มหลักได้ ตัวอย่างเช่นในไดเร็กทอรี ศัพท์อาจมีแบบฟอร์มพื้นฐานต่อไปนี้:

และเอกสาร การรับสินค้าและบริการองค์ประกอบของแบบฟอร์มหลักจะแตกต่างกัน:

ดังนั้นหากผู้ใช้ต้องการดูรายการไดเร็กทอรี ศัพท์หรือรายการเอกสาร การรับสินค้าและบริการระบบจะเปิดแบบฟอร์มที่เกี่ยวข้องซึ่งกำหนดให้เป็นแบบฟอร์มรายการสำหรับออบเจ็กต์เหล่านี้

แบบฟอร์มที่สร้างขึ้นอัตโนมัติ

คุณสมบัติที่สำคัญของระบบ 1C:Enterprise 8 คือกลไกของแบบฟอร์มที่สร้างขึ้นอัตโนมัติ กลไกนี้ช่วยให้นักพัฒนาไม่ต้องสร้างแบบฟอร์มที่เป็นไปได้ทั้งหมดสำหรับแต่ละออบเจ็กต์การกำหนดค่า นักพัฒนาเพียงแค่ต้องเพิ่มออบเจ็กต์การกำหนดค่าใหม่ และระบบจะสร้างแบบฟอร์มที่จำเป็นในช่วงเวลาที่เหมาะสมของงานของผู้ใช้เพื่อแสดงข้อมูลที่มีอยู่ในออบเจ็กต์นี้

ดังนั้น นักพัฒนาจำเป็นต้องสร้างออบเจ็กต์โซลูชันแอปพลิเคชันในรูปแบบของตนเองเฉพาะในกรณีที่ต้องมีความแตกต่าง (การออกแบบที่แตกต่างกันหรือพฤติกรรมเฉพาะ) จากแบบฟอร์มที่สร้างขึ้นโดยอัตโนมัติโดยระบบ

การเชื่อมโยงแบบฟอร์มกับข้อมูล

ไม่ว่าแบบฟอร์มจะเป็นของวัตถุการกำหนดค่าเฉพาะหรือไม่นั้นไม่ได้กำหนดองค์ประกอบของข้อมูลที่แสดงในแบบฟอร์ม ความจริงที่ว่าฟอร์มเป็นของ ตัวอย่างเช่น ของไดเร็กทอรี ศัพท์ช่วยให้คุณสามารถกำหนดให้แบบฟอร์มนี้เป็นหนึ่งในรูปแบบหลักสำหรับไดเร็กทอรีนี้ แต่ไม่ได้กำหนดว่าแบบฟอร์มนี้จะแสดงข้อมูลใดและลักษณะการทำงานจะเป็นเช่นไร

ในการเชื่อมโยงแบบฟอร์มกับข้อมูล จะใช้รายละเอียดของแบบฟอร์ม ซึ่งระบุรายการข้อมูลที่แสดงโดยแบบฟอร์ม ทุกแบบฟอร์มมีพฤติกรรมเหมือนกันไม่ว่าจะแสดงข้อมูลใดก็ตาม อย่างไรก็ตาม หนึ่งในแอตทริบิวต์ของแบบฟอร์มสามารถกำหนดให้เป็นแอตทริบิวต์หลักได้ (โดยเน้นด้วยตัวหนา) ซึ่งในกรณีนี้พฤติกรรมมาตรฐานของแบบฟอร์มและคุณสมบัติของแบบฟอร์มจะถูกเสริม ขึ้นอยู่กับประเภทแอตทริบิวต์ของแบบฟอร์มหลัก:

ตัวอย่างเช่น หากเอกสารถูกกำหนดให้เป็นแอตทริบิวต์แบบฟอร์มหลัก การรับสินค้าและบริการจากนั้นเมื่อปิดแบบฟอร์มระบบจะขอยืนยันการบันทึกและโพสต์เอกสารนี้ หากคุณกำหนด เช่น ไดเร็กทอรีเป็นคุณลักษณะหลักของแบบฟอร์ม ศัพท์จากนั้นคำขอยืนยันดังกล่าวจะไม่ปรากฏขึ้นเมื่อปิดแบบฟอร์ม

โครงสร้างแบบฟอร์ม

คุณสมบัติหลักของแบบฟอร์มคือนักพัฒนาไม่ได้วาดรายละเอียดแบบ "พิกเซลต่อพิกเซล" แบบฟอร์มในการกำหนดค่าคือคำอธิบายเชิงตรรกะขององค์ประกอบของแบบฟอร์ม และการจัดวางองค์ประกอบเฉพาะจะดำเนินการโดยอัตโนมัติโดยระบบเมื่อมีการแสดงแบบฟอร์ม

ส่วนที่แสดงของแบบฟอร์ม (ผู้ใช้มองเห็นได้) อธิบายว่าเป็นแผนผังที่มีองค์ประกอบของแบบฟอร์ม

องค์ประกอบสามารถเป็นช่องป้อนข้อมูล กล่องกาเครื่องหมาย ปุ่มตัวเลือก ปุ่ม ฯลฯ นอกจากนี้ องค์ประกอบสามารถเป็นกลุ่มที่มีองค์ประกอบอื่นๆ ได้ด้วย กลุ่มสามารถแสดงเป็นแผงที่มีกรอบ แผงที่มีหน้า (บุ๊กมาร์ก) หน้าเอง หรือแผงคำสั่ง นอกจากนี้ องค์ประกอบอาจเป็นตารางซึ่งรวมถึงองค์ประกอบ (คอลัมน์) ด้วย โครงสร้างองค์ประกอบจะอธิบายว่าแบบฟอร์มจะมีลักษณะอย่างไร

ฟังก์ชันการทำงานทั้งหมดของแบบฟอร์มอธิบายไว้ในรูปแบบรายละเอียดและคำสั่ง รายละเอียดคือข้อมูลที่ฟอร์มใช้งานได้ และคำสั่งคือการดำเนินการที่จะดำเนินการ ดังนั้น นักพัฒนาในตัวแก้ไขแบบฟอร์มจะต้องรวมรายละเอียดและคำสั่งที่จำเป็นในแบบฟอร์ม สร้างองค์ประกอบของแบบฟอร์มที่แสดงข้อมูลเหล่านั้น และหากจำเป็น ให้จัดเรียงองค์ประกอบออกเป็นกลุ่ม

ตามคำอธิบายเชิงตรรกะนี้ ระบบจะสร้างรูปลักษณ์ของแบบฟอร์มโดยอัตโนมัติเพื่อแสดงให้ผู้ใช้เห็น ในกรณีนี้ ระบบจะพิจารณาคุณสมบัติต่างๆ ของข้อมูลที่แสดง (เช่น ประเภท) เพื่อจัดเรียงองค์ประกอบของฟอร์มให้สะดวกที่สุดสำหรับผู้ใช้

นักพัฒนาสามารถมีอิทธิพลต่อการจัดเรียงองค์ประกอบด้วยการตั้งค่าต่างๆ สามารถกำหนดลำดับขององค์ประกอบ ระบุความกว้าง และความสูงที่ต้องการได้ อย่างไรก็ตาม นี่เป็นเพียงข้อมูลเพิ่มเติมบางส่วนที่ช่วยให้ระบบแสดงแบบฟอร์มได้

ในแบบฟอร์ม นักพัฒนาสามารถใช้ไม่เพียงแต่คำสั่งของแบบฟอร์มเท่านั้น แต่ยังรวมถึงคำสั่งส่วนกลางที่ใช้ในอินเทอร์เฟซคำสั่งของการกำหนดค่าทั้งหมดอีกด้วย นอกจากนี้ยังสามารถสร้างคำสั่งที่สามารถกำหนดพารามิเตอร์ได้ซึ่งจะเปิดแบบฟอร์มอื่นโดยคำนึงถึงข้อมูลเฉพาะของแบบฟอร์มปัจจุบัน ตัวอย่างเช่น นี่อาจเป็นการเรียกรายงานยอดดุลที่คลังสินค้าซึ่งปัจจุบันเลือกไว้ในแบบฟอร์มใบแจ้งหนี้

รายละเอียดทั่วไปใน 1C 8.3 เป็นออบเจ็กต์ข้อมูลเมตาของแพลตฟอร์มที่อนุญาตให้คุณใช้แอตทริบิวต์เดียวสำหรับออบเจ็กต์การกำหนดค่าต่างๆ (ไดเร็กทอรี เอกสาร ผังบัญชี ฯลฯ) วัตถุถูกสร้างขึ้นเพื่อให้การทำงานของนักพัฒนาง่ายขึ้นและเพื่อแยกข้อมูลเป็นหลัก

รายละเอียดทั่วไปถูกนำมาใช้ครั้งแรกในเวอร์ชัน 1C 7.7 แต่นักพัฒนาไม่ได้รวมไว้ในแพลตฟอร์มเวอร์ชัน 8 ทันที กลไกของรายละเอียดทั่วไปได้รับการแนะนำโดยนักพัฒนา 1C ในรุ่น 8.2.14 เท่านั้น

สะดวกมากในการเพิ่มรายละเอียดทั่วไปเพื่อไม่ให้เปลี่ยนวัตถุมาตรฐานในการกำหนดค่า ฉันมักจะใช้มันร่วมกับ.

หลังจากเพิ่มแอตทริบิวต์ทั่วไปแล้ว ก็สามารถนำมาใช้ในการสืบค้นและแสดงบนแบบฟอร์มออบเจ็กต์ได้ - ภายนอกก็ไม่ต่างจากอุปกรณ์ประกอบฉากทั่วไป

ข้อจำกัดเพียงอย่างเดียวของรายละเอียดทั่วไปคือการไม่สามารถใช้รายละเอียดเหล่านั้นใน .

มาดูการตั้งค่าพื้นฐานและคุณสมบัติของรายละเอียดทั่วไปที่แตกต่างจากออบเจ็กต์การกำหนดค่าอื่นๆ:

สารประกอบ— รายการออบเจ็กต์ที่จะใช้รายละเอียดทั่วไป การตั้งค่านั้นชวนให้นึกถึงการจัดทำแผนการแลกเปลี่ยน

รับบทเรียนวิดีโอ 267 บทเรียนบน 1C ฟรี:

ใช้งานอัตโนมัติ— การตั้งค่าจะกำหนดว่าจะใช้อุปกรณ์ประกอบฉากทั่วไปสำหรับวัตถุเหล่านั้นที่มีการระบุโหมดการใช้งาน "อัตโนมัติ" หรือไม่

การแยกข้อมูล— เราจะพิจารณาการตั้งค่านี้แยกกัน

การแยกข้อมูลใน 1C โดยใช้รายละเอียดทั่วไป

การแยกข้อมูล- กลไกที่คล้ายกับกลไก อย่างไรก็ตาม ประสิทธิภาพของกลไกนี้จะมีประสิทธิภาพมากกว่าและกำหนดค่าได้ง่ายกว่า

กลไกนี้ช่วยให้คุณกำหนดค่าการแสดงเฉพาะองค์ประกอบที่ผู้ใช้สามารถเห็นได้ ตัวอย่างเช่น คุณสามารถแยกแยะระหว่างออบเจ็กต์ทั้งหมด (เอกสาร ไดเร็กทอรี ฯลฯ) ที่ติดตั้งองค์กรบางแห่งได้

การตั้งค่าการแยกข้อมูลโดยใช้รายละเอียด 1C ทั่วไป

ในการกำหนดค่ารายละเอียดทั่วไป คุณต้องระบุการแยกข้อมูล - แบ่ง- ทันทีหลังจากคลิก ระบบจะเสนอให้สร้างพารามิเตอร์การบัญชีเริ่มต้น:

ในกรณีนี้ จำเป็นต้องระบุพารามิเตอร์เซสชันเมื่อเริ่มระบบ โดยได้อธิบายวิธีการทำเช่นนี้พร้อมตัวอย่างในบทความ

เสร็จสิ้นการตั้งค่า - ผู้ใช้จะสามารถเข้าถึงข้อมูลที่ระบุไว้ในพารามิเตอร์เซสชันที่เลือกเท่านั้น

ตัวอย่างการใช้อุปกรณ์ประกอบฉากทั่วไป

มาดูการตั้งค่าอุปกรณ์ประกอบฉากทั่วไปใน 1C 8.3 โดยใช้ตัวอย่างการกำหนดค่าเฟรมและอุปกรณ์ประกอบฉาก องค์กร:

ระบบมีเอกสาร 3 ฉบับที่ต้องระบุรายละเอียดขององค์กร ได้แก่ ใบกำกับสินค้า ใบกำกับค่าใช้จ่าย และบัญชีเงินเดือน

การตั้งค่านั้นง่าย:

  1. เราสร้างแอตทริบิวต์ทั่วไปใหม่ระบุประเภท - DirectoryLink.Organization
  2. ในการจัดองค์ประกอบเราจัดเตรียมเอกสารของเรา - ใช้.

เพียงเท่านี้ การตั้งค่าก็เสร็จสมบูรณ์!

มาดูผลลัพธ์กัน:

ระบบจะแสดงรายละเอียดทั่วไป “เสมือนเป็นของคุณเอง” ทั้งในการร้องขอ ในรายละเอียดแบบฟอร์ม และที่อื่นๆ นี่เป็นเวทย์มนตร์!

ข้อกำหนดทั่วไป 1C 8.3 จะไม่ถูกเพิ่ม