การสมัครสมาชิกกิจกรรม 1c 8.2 การประมวลผล การกำหนดตัวจัดการเหตุการณ์โดยใช้การสมัครสมาชิกเหตุการณ์ คำแนะนำการใช้โปรแกรม Event Study

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

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

พฤติกรรมมาตรฐาน

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

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

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

เมื่อเขียนองค์ประกอบไดเร็กทอรี ไม่ว่าจะเป็นองค์ประกอบใหม่หรือองค์ประกอบที่มีอยู่ ตัวจัดการสามตัวจะถูกเรียกว่า: "ProcessingFillCheck" (ในขั้นตอนนี้ตัวจัดการสามารถตรวจสอบความถูกต้องของข้อมูลที่ป้อนและหากมีข้อผิดพลาด ปฏิเสธที่จะเขียน) “BeforeWrite” (จนกว่าจะเขียนออบเจ็กต์ลงในฐานข้อมูลคุณสามารถปรับค่าของรายละเอียดและตรวจสอบเงื่อนไขเพิ่มเติมได้) จากนั้น “OnRecord” (บันทึกลงในฐานข้อมูลแล้ว แต่ธุรกรรมไม่ถูกปิด นักพัฒนาสามารถตรวจสอบข้อมูลหลังจากบันทึกและยกเลิกธุรกรรมหากจำเป็น)

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

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

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

ด้านที่ไม่มีเอกสาร

ตอนนี้เรามาดูสถานการณ์ที่น่าสนใจกัน สมมติว่าสำหรับไดเร็กทอรีของเรา "SimpleDirectory" มีการกำหนดการสมัครรับข้อมูลเหตุการณ์ "BeforeRecord" สามรายการ:

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

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

ล่าถอย

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

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

ใช้งานใน EDT เวอร์ชัน 1.7.0.567

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

การสมัครสมาชิกกิจกรรม

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

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

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


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

การสมัครรับข้อมูลกิจกรรมทั้งหมด

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


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


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

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


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


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


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


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

ด้วยการค้นหาด้วยสตริง คุณสามารถค้นหาเฉพาะการสมัครสมาชิกที่เกี่ยวข้องกับกลไกที่คุณสนใจได้อย่างรวดเร็ว


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


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


เพิ่มเบรกพอยต์โดยอัตโนมัติ

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

ก่อนอื่น คุณสามารถเรียกใช้เครื่องมือนี้ได้โดยตรงในตัวแก้ไข


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


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


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


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

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

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

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

ตัวอย่างเช่น มีงานเกิดขึ้น - จำเป็นต้องบันทึกข้อมูลบางอย่าง (ข้อมูลเกี่ยวกับกิจกรรมของบริษัท) ในเอกสารการชำระเงินหลังจากการก่อตัวของการเคลื่อนไหวหลักของเอกสาร (สร้างขึ้นในเหตุการณ์ "การประมวลผลการประมวลผล") เราจะดำเนินงานโดยใช้การกำหนดค่า "การจัดการองค์กรด้านการผลิต" ed. 1.3.

มาดูวิธีแก้ปัญหาโดยละเอียดเพิ่มเติม:

มาสร้างการสมัครรับข้อมูลใหม่ให้กับกิจกรรม "บันทึกเส้นทางสู่การชำระเงิน" การสมัครสมาชิกมีคุณสมบัติจำนวนหนึ่งที่จะกำหนดลักษณะการทำงาน:

แหล่งที่มา- นี่คือวัตถุ (เช่น เอกสารหรือรายการเอกสาร) ที่จะเรียกใช้การดำเนินการ สำหรับกรณีของเราเราจะเลือก ใบสั่งชำระเงินขาออกและใบสั่งการชำระเงินขาเข้า

กิจกรรม- การกระทำนั้นเอง หลังจากนั้นโค้ดของเราจะถูกดำเนินการ ตามเงื่อนไขของปัญหาเราเลือก กำลังดำเนินการ

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

หลังจากเป้าหมายข้างต้นแล้ว ขั้นตอนจะถูกสร้างขึ้นโดยจำเป็นต้องวางรหัสเพื่อกรอกข้อมูลทิศทาง (สมมติว่าข้อมูลดังกล่าวมีอยู่ในการชำระเงินแล้ว)

พิจารณาพารามิเตอร์ของมัน:

แหล่งที่มา- ออบเจ็กต์ประเภทนี้ DirectoryObject หรือ DocumentObject ที่เกิดการดำเนินการ

การปฏิเสธ- พารามิเตอร์ที่อนุญาตให้คุณยกเลิกการผ่านรายการเอกสารภายใต้เงื่อนไขบางประการ

โหมด- ตัวเลือกการใช้งาน (แบบปฏิบัติการหรือไม่ปฏิบัติการ) ซึ่งช่วยให้คุณสร้างอัลกอริธึมการประมวลผลในรูปแบบต่างๆ

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

คอลเลกชันนี้ประกอบด้วยชุดของบันทึก การชำระบัญชีกับคู่สัญญาที่เราสนใจ สมมติว่ามิติทิศทางถูกสร้างขึ้นในรีจิสเตอร์ ซึ่งเราต้องกรอกจากเอกสาร

มาเขียนโค้ดต่อไปนี้:

ชุด = แหล่งที่มา การเคลื่อนไหว; การคำนวณ = ชุด การตั้งถิ่นฐานกับคู่สัญญา; สำหรับหน้ารอบการคำนวณแต่ละหน้า ทิศทาง = แหล่งที่มา ทิศทาง; สิ้นสุดถ้า ;

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

ข้อดีของแนวทางนี้:ประมวลผลข้อมูลนอกอัลกอริธึมมาตรฐาน ลดปริมาณงานในการค้นหาและถ่ายโอนการเปลี่ยนแปลงเมื่ออัปเดต มองเห็นได้มากขึ้น - รหัสทั้งหมดในขั้นตอนเดียว

ข้อเสียของวิธีนี้:เพิ่มเวลาที่ใช้ในการจัดทำเอกสารและบันทึกองค์ประกอบของไดเร็กทอรี

ฉันหวังว่าข้อมูลนี้จะเป็นประโยชน์สำหรับทั้งโปรแกรมเมอร์มือใหม่และเพื่อนร่วมงานที่มีประสบการณ์มากกว่าเพื่อเป็นช่องทางในการขยายขอบเขตอันไกลโพ้น

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

สามารถสร้างเหตุการณ์ได้ในรูปแบบที่มีการควบคุม: บน ReadingOnServer, OnCreatingOnServer, OnOpening เป็นต้น

เหตุการณ์ในรูปแบบควบคุมจะถูกสร้างขึ้นบนไคลเอนต์และบนเซิร์ฟเวอร์: BeforeRecord, BeforeRecordOnServer

เหตุการณ์ถูกเรียกในโมดูลที่แตกต่างกัน: ElementForm, ObjectModule, ManagerModule

เหตุการณ์บางอย่างสามารถเรียกได้หลายครั้งหากมีองค์ประกอบไดเร็กทอรีหลายรายการในรายการ เช่น ProcessingGetView

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

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

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

คำแนะนำการใช้โปรแกรม Event Study

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

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

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

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

เหตุการณ์ที่บันทึกไว้ทั้งหมดสามารถดูได้ผ่าน "รายงานเหตุการณ์" ซึ่งอยู่ในส่วน "บริการ"

หากต้องการล้างการกระทำและเหตุการณ์ที่บันทึกไว้ทั้งหมดอย่างรวดเร็ว ในส่วน "บริการ" ให้เลือก "ล้างเหตุการณ์และการกระทำ"

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

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

การบังคับใช้

บทความนี้กล่าวถึงแพลตฟอร์ม 1C:Enterprise เวอร์ชัน 8.3 ข้อมูลที่นำเสนอเกี่ยวข้องกับการเปิดตัวแพลตฟอร์มในปัจจุบัน

การสมัครสมาชิกกิจกรรม

บทความนี้กล่าวถึงตัวอย่างต่างๆ ของการใช้หนึ่งในออบเจ็กต์เสริมของแพลตฟอร์ม 1C:Enterprise 8 - การสมัครสมาชิกกิจกรรม.

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

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

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

หากมีการสร้างการสมัครสมาชิกเหตุการณ์ของออบเจ็กต์บางอย่างในการกำหนดค่า เช่น เหตุการณ์ ก่อนเขียน() document object จากนั้นเมื่อเหตุการณ์นี้เกิดขึ้น แพลตฟอร์มจะดำเนินการตามลำดับการดำเนินการต่อไปนี้

  1. ตัวจัดการเหตุการณ์ทำงานอยู่ ก่อนเขียน()ในโมดูลวัตถุเอกสาร
  2. หากในระหว่างการดำเนินการของตัวจัดการพารามิเตอร์ การปฏิเสธคำนึงถึงคุณค่า จริงหรือมีข้อยกเว้นเกิดขึ้น การประมวลผลเหตุการณ์ถูกขัดจังหวะ
  3. หากการประมวลผลเหตุการณ์ไม่ถูกขัดจังหวะในขั้นตอนที่สอง ตัวจัดการภายนอก (การสมัครสมาชิกเหตุการณ์) ที่กำหนดไว้สำหรับเหตุการณ์จะถูกดำเนินการ ก่อนเขียน().
  4. หากในระหว่างการดำเนินการของตัวจัดการภายนอกพารามิเตอร์ การปฏิเสธคำนึงถึงคุณค่า จริงหรือมีข้อยกเว้นเกิดขึ้น การดำเนินการของตัวจัดการภายนอกจะถูกขัดจังหวะ

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

ปัญหาที่ 1

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

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

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

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

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

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

รายการขั้นตอน การตรวจสอบ DirectoryNameBeforeWriting()

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

ปัญหาที่ 2

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

สร้างทะเบียนต่อรองใหม่พร้อมชื่อ การกำจัดเงินสด. เลือกนายทะเบียน "ใบสั่งจ่ายเงินสด" เพิ่มมิติการลงทะเบียน:

สร้างทรัพยากรรีจิสทรี:

ผลรวม, พิมพ์ ตัวเลข, ความยาว – 15, ความแม่นยำ – 2.

ในเอกสาร “ใบสั่งจ่ายเงินสด” ให้สร้างรายละเอียด บทความการเคลื่อนไหวด้วยประเภทข้อมูล DirectoryLink.ArticlesMoneyการเคลื่อนไหว.

ชื่อ - ความเคลื่อนไหวเกี่ยวกับการขายเงินสด;
แหล่งที่มา - DocumentObject.RKO;
เหตุการณ์ - กำลังดำเนินการ.

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

รายการขั้นตอน ความเคลื่อนไหวในการกำจัด CashProcessingProcessing()

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

ปัญหา 3

ตรวจสอบการเปลี่ยนรูปแบบหลักของเอกสาร “ใบสั่งจ่ายเงินสด”

สร้างเอกสารใหม่ในรูปแบบ “ใบสั่งรับเงินสด” พร้อมชื่อ DocumentFormClient. ทำการเปลี่ยนแปลงแบบฟอร์มตามอำเภอใจ เช่น เปลี่ยนลำดับการควบคุม หากต้องการเรียกแบบฟอร์มนี้คุณต้องใช้การสมัครสมาชิกกิจกรรม กระบวนการรับแบบฟอร์ม()ในโมดูลตัวจัดการเอกสาร "ใบสั่งรับเงินสด"

สร้างการสมัครสมาชิกกิจกรรมใหม่:

ชื่อ - แบบฟอร์มหลักRKO;
แหล่งที่มา - DocumentManager.RKO;
เหตุการณ์ - กำลังประมวลผลแบบฟอร์มการรับ

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

รายการขั้นตอน MainFormRKOForm การประมวลผลการรับ ()

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

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

  • เพิ่มความซับซ้อนของอัลกอริทึม
  • คุณสามารถสมัครสมาชิกเหตุการณ์ของอ็อบเจ็กต์และตัวจัดการอ็อบเจ็กต์เท่านั้น

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



มีคำถามหรือไม่?

แจ้งการพิมพ์ผิด

ข้อความที่จะส่งถึงบรรณาธิการของเรา: