ตั้งค่าการเลือกในรูปแบบเปิด 1c จะเปิดแบบฟอร์มรายการโดยมีตัวเลือกได้อย่างไร? การเลือกการตั้งค่าในตัวกำหนดค่า
การเลือกแบบฟอร์มที่ได้รับการจัดการใน 1C 8.3
บทความนี้จะหารือเกี่ยวกับตัวเลือกสำหรับการติดตั้งการเลือกในแบบฟอร์มที่ได้รับการจัดการ 1C 8.3 การคัดเลือกสำหรับ รายการแบบไดนามิกสามารถตั้งค่าแบบคงที่หรือไดนามิกได้ในส่วนต่อประสานผู้ใช้หรือตัวกำหนดค่า เราจะพิจารณาตัวเลือกการเลือกทั้งหมดด้านล่าง
- การเลือกการตั้งค่าในตัวกำหนดค่า
การตั้งค่าการเลือกในโหมดผู้ใช้
รายการแบบไดนามิก ซึ่งตรงข้ามกับตารางหรือแผนภูมิค่า เป็นโซลูชันที่เหมาะสมกว่าสำหรับการนำแบบฟอร์มที่มีรายการใดๆ ไปใช้ เนื่องจาก รายการไดนามิกมีเครื่องมือที่หลากหลายที่สุดสำหรับการทำงานกับการเลือก การจัดกลุ่มฟิลด์ และการเรียงลำดับ การเลือกนี้สามารถตั้งค่าได้เมื่อทำงานในโหมดผู้ใช้หรือตัวกำหนดค่าซึ่งมีหลักการเหมือนกัน
หากต้องการตั้งค่าการเลือกในโหมดองค์กร คุณต้องเรียกคำสั่ง "ปรับแต่งรายการ"
หน้าต่างจะเปิดขึ้น
แท็บ "การเลือก" จะแสดงรายการฟิลด์ที่อยู่ในรายการปัจจุบัน เลือกฟิลด์รายการที่เราจะกรอง ซึ่งสามารถทำได้โดยการดับเบิลคลิกหรือใช้ ลากและหยด.
เราตั้งค่าประเภทการเปรียบเทียบและค่าคลิก "แก้ไขเสร็จสิ้น" การเลือกจะถูกตั้งค่า
เมื่อคุณตั้งค่าการเลือกในโหมดองค์กร สิ่งที่เรียกว่าฟิลด์การเลือกด่วนจะถูกสร้างขึ้นโดยอัตโนมัติในแบบฟอร์มรายการ
เพื่อให้แพลตฟอร์ม 1C สร้างฟิลด์การเลือกอย่างรวดเร็วโดยอัตโนมัติ เมื่อพัฒนาแบบฟอร์มในตัวกำหนดค่า คุณต้องระบุกลุ่มการตั้งค่าผู้ใช้
การเลือกนี้จะถูกบันทึกสำหรับผู้ใช้ปัจจุบันเท่านั้น ซึ่งช่วยให้ปรับแต่งรายการไดนามิกได้อย่างยืดหยุ่น อย่างไรก็ตาม หากงานคือทำการเลือกคงที่สำหรับรายการเฉพาะสำหรับผู้ใช้ทั้งหมดของระบบ เราสามารถแก้ไขได้ผ่านตัวกำหนดค่าเท่านั้น
การเลือกการตั้งค่าในตัวกำหนดค่า
การทำงานในตัวปรับแต่ง เราสามารถตั้งค่าการเลือกรายการไดนามิกได้สองประเภท – แบบคงที่และไดนามิก การเลือกคงที่สามารถกำหนดค่าได้เพียงครั้งเดียว การเลือกแบบไดนามิกหรือแบบโปรแกรมสามารถตั้งค่าได้ ขึ้นอยู่กับข้อมูลใดๆ ในระบบ
หลักการตั้งค่าการเลือกคงที่ในตัวกำหนดค่าไม่แตกต่างจากการตั้งค่าในโหมดผู้ใช้ที่อธิบายไว้ข้างต้น ในการตั้งค่าการเลือก เราต้องเปิดการตั้งค่ารายการไดนามิก
หน้าต่างจะเปิดขึ้น
การเลือกจะถูกตั้งค่าในลักษณะเดียวกับในโหมดผู้ใช้
ตัวเลือก "รวมใน" การตั้งค่าแบบกำหนดเอง" กำหนดว่าชุดการเลือกในตัวกำหนดค่าจะพร้อมใช้งานในโหมดผู้ใช้ผ่านรายการเมนู "ปรับแต่งรายการ" หรือไม่
การเลือกไดนามิก (ซอฟต์แวร์)
บ่อยครั้งมีความจำเป็นต้องตั้งค่าการเลือกโดยทางโปรแกรม เช่น เมื่อเปิดแบบฟอร์มการเลือก เมื่อเราต้องการเปิดแบบฟอร์มควบคุมด้วยการเลือก พารามิเตอร์ถูกส่งผ่านไปยังแบบฟอร์มและการเลือกจะถูกตั้งค่าตามพารามิเตอร์นี้ ตัวอย่างทั่วไปของสิ่งนี้คือการเลือกรายการไดเร็กทอรีตามเจ้าของ
วิธีการ
หากการกำหนดค่าที่กำลังพัฒนามีระบบย่อย "ฟังก์ชันพื้นฐาน" BSP การเลือกซอฟต์แวร์ในรายการไดนามิกสามารถติดตั้งได้โดยใช้วิธีการมาตรฐาน:
GeneralPurposeClientServer.SetDynamicListSelectionElement()ลายเซ็น วิธีนี้:
รายการไดนามิก ประเภท: DynamicList – รายการที่คุณต้องการตั้งค่าการเลือก
ชื่อฟิลด์ ประเภท: สตริง – ฟิลด์ที่คุณต้องการตั้งค่าการเลือก
ค่าขวา ประเภท: โดยพลการ – ค่าการเลือก (ไม่บังคับ ค่าเริ่มต้น: ไม่ได้กำหนด หมายเหตุ: หากคุณผ่าน Unknown ค่าจะไม่เปลี่ยนแปลง)
ดูการเปรียบเทียบ ประเภท: ประเภทการเปรียบเทียบ DataComposition – เงื่อนไขการเลือก
ผลงาน ประเภท: สตริง – การแสดงองค์ประกอบองค์ประกอบข้อมูล (ทางเลือก ค่าเริ่มต้น: ไม่ได้กำหนด หากระบุ เฉพาะแฟล็กการใช้งานที่มีการเป็นตัวแทนที่ระบุเท่านั้นที่จะถูกพิมพ์ (ไม่มีการพิมพ์ค่า) ต้องส่งสตริงว่างเพื่อล้างเพื่อให้พิมพ์ค่าอีกครั้ง)
การใช้งาน ประเภท: บูลีน – ตั้งค่าสถานะเพื่อใช้การเลือกนี้ (ไม่บังคับ ค่าเริ่มต้น: ไม่ได้กำหนด)
โหมดการแสดงผล ประเภท: ItemDisplayModeDataCompositionSettings – วิธีแสดงการเลือกนี้ให้ผู้ใช้เห็น ค่าที่เป็นไปได้:
- โหมดการแสดงผลองค์ประกอบ การตั้งค่าเค้าโครงข้อมูล การเข้าถึงด่วน - ในกลุ่ม การตั้งค่าด่วนเหนือรายการ
- การตั้งค่าเค้าโครงข้อมูลโหมดการแสดงผลองค์ประกอบ ปกติ – ในรายการ (ในเมนูย่อยเพิ่มเติม)
- ItemDisplayModeDataCompositionSettings.Inaccessible – ป้องกันไม่ให้ผู้ใช้เปลี่ยนการเลือกนี้
การตั้งค่าตัวระบุผู้ใช้ ประเภท: สตริง – ตัวระบุที่ไม่ซ้ำสำหรับการเลือกนี้ (ใช้เพื่อสื่อสารกับการตั้งค่าผู้ใช้)
หากต้องการลบค่าที่เลือก คุณต้องใช้วิธีการมาตรฐาน:
วัตถุประสงค์ทั่วไปไคลเอนต์เซิร์ฟเวอร์ RemoveGroupElementsSelectionDynamicList()ลายเซ็นของวิธีการนี้:
รายการไดนามิก ประเภท: DynamicList – แอตทริบิวต์แบบฟอร์มที่คุณต้องการตั้งค่าการเลือก
ชื่อฟิลด์ ประเภท: สตริง – ชื่อของฟิลด์โครงร่าง (ไม่ใช้สำหรับกลุ่ม)
ผลงาน ประเภท: สตริง – การแสดงฟิลด์โครงร่าง
หากไม่มี BSP ในระบบ คุณสามารถตั้งค่าการเลือกได้อย่างอิสระโดยใช้ออบเจ็กต์ DataComposition Field
องค์ประกอบการเลือก = List.Selection.Elements.Add (ประเภท ("องค์ประกอบการเลือก DataComposition"));Selection Element.LeftValue = NewDataCompositionField("ชื่อ");
Selection Element.Comparison Type = DataComposition Comparition Type.Equal;
Selection Element.DisplayMode = ElementDisplayModeDataCompositionSettings.QuickAccess; // องค์ประกอบการเลือกเพิ่มเติม RightValue = "Ivanov";การเลือกนี้จะเลือกแถวที่มีค่า "ชื่อเต็ม" = "Ivanov"
หากต้องการใช้ตรรกะ "AND", "OR", "NOT" ประเภทข้อมูล DataCompositionSelectionElementGroup ตั้งใจไว้
Selection Group = List.Selection.Elements.Add(Type("กลุ่มขององค์ประกอบการเลือก DataComposition"));
SelectionGroup.GroupType = DataCompositionSelectionElementGroupType.GroupOR;
องค์ประกอบการเลือก = กลุ่มการเลือก เพิ่ม (ประเภท ("องค์ประกอบการเลือกองค์ประกอบข้อมูล"));หากไม่คำนึงถึงสิ่งนี้ จะมีข้อผิดพลาดเกิดขึ้น แต่เพื่อหลีกเลี่ยงปัญหานี้ คุณสามารถเปลี่ยนเป็นการใช้งานอื่นได้ เราเพิ่มเงื่อนไขต่อไปนี้ในข้อความคำขอ:
โดยที่ (ไม่ใช่ &SelectionInstalled หรือ DirectoryUsers.Name IN (&PermissionName))
List.Parameters.SetParameterValue("SelectionSet", Full Name.Quantity() > 0);List.Parameters.SetParameterValue("ชื่อเต็มที่อนุญาต", ชื่อเต็ม);
ชื่อเต็มในที่นี้คืออาร์เรย์
อย่างที่คุณเห็น โค้ด 2 บรรทัดเทียบกับ 10 วิธีการเลือกขึ้นอยู่กับงานแอปพลิเคชันเฉพาะ
จะเปิดแบบฟอร์มรายการโดยมีตัวเลือกได้อย่างไร? มีหลายวิธีในการเปิดแบบฟอร์มรายการพร้อมข้อมูลบางอย่างล่วงหน้าการคัดเลือกที่จัดตั้งขึ้น
- ลองดูตามลำดับ: 1. วิธีแรกคือเมื่อเปิดแบบฟอร์ม คุณสามารถตั้งค่าพารามิเตอร์แบบฟอร์มการเลือก และเปิดแบบฟอร์มรายการด้วยพารามิเตอร์นี้ได้ พารามิเตอร์ Selection แสดงถึงโครงสร้าง ชื่อขององค์ประกอบสอดคล้องกับชื่อของฟิลด์ที่ทำการเลือกและค่าประกอบด้วยค่าที่เลือก นี่คือตัวเลือกส่วนขยายแบบฟอร์มควบคุม รายการแบบไดนามิก นั่นคือ มีอยู่สำหรับแบบฟอร์มที่มีคุณลักษณะหลักเป็นแอตทริบิวต์ประเภทรายการแบบไดนามิก
เช่นแบบฟอร์มรายการและแบบฟอร์มการคัดเลือก
เมื่อเปิดแบบฟอร์ม จะทำการเลือกตามฟิลด์ที่ระบุ ตัวอย่างเช่น ในตัวอย่างต่อไปนี้ รายการใบแจ้งหนี้จะถูกเปิดโดยเลือกตามฟิลด์ตัวเลข ซึ่งเท่ากับ 333
ค่าการเลือก = โครงสร้างใหม่ ("หมายเลข", "333");
SelectionParameters = โครงสร้างใหม่ ("การเลือก", SelectionValue);
OpenForm("เอกสาร. ใบกำกับสินค้า. แบบฟอร์มรายการ", ตัวเลือกการเลือก);
2. คุณสามารถเปิดแบบฟอร์มรายการโดยไม่มีพารามิเตอร์:
OpenForm("Document.Invoice.ListForm"); จากนั้นในตัวจัดการเหตุการณ์ของแบบฟอร์มรายการใบแจ้งหนี้เมื่อ CreateOnServer
เขียนโค้ดที่สร้างการเลือกในรายการไดนามิกซึ่งเป็นคุณลักษณะหลักของแบบฟอร์ม:
&บนเซิร์ฟเวอร์
ขั้นตอนเมื่อ CreateOnServer (ล้มเหลว, การประมวลผลมาตรฐาน)
องค์ประกอบการเลือก = List.Selection.Elements.Add (ประเภท ("องค์ประกอบการเลือก DataComposition"));
SelectionElement.LeftValue = NewDataCompositionField("หมายเลข");
SelectionElement.ComparisonView = DataCompositionComparisonView.More;
SelectionElement.Use = จริง;
SelectionElement.DisplayMode = ElementDisplayModeDataCompositionSettings.ไม่สามารถเข้าถึงได้;
SelectionElement.RightValue = "000000001";
สิ้นสุดขั้นตอน
แต่วิธีนี้ก็มีข้อเสียเปรียบที่สำคัญเช่นกัน: ด้วยการเลือกนี้ แบบฟอร์มจะเปิดอยู่เสมอ ไม่ว่าเธอจะถูกเรียกมาจากไหนก็ตาม ดังนั้นจึงไม่ควรกำหนดแบบฟอร์มนี้เป็นแบบฟอร์มหลัก และหากเป็นอันหลักก่อนที่จะติดตั้งส่วนที่เลือกจำเป็นต้องจัดทำการวิเคราะห์ว่าแบบฟอร์มนี้เปิดจากที่ใด ตัวอย่างเช่น การวิเคราะห์พารามิเตอร์แบบฟอร์ม
3. สุดท้ายนี้ เงื่อนไขการเลือกสามารถวางในการสืบค้นแบบกำหนดเองที่เลือกข้อมูลสำหรับรายการไดนามิก ตัวอย่างเช่น เราจำเป็นต้องเปิดรายการใบแจ้งหนี้ที่มีรายการที่เน้นไว้ในรายการสินค้า
เมื่อต้องการทำเช่นนี้ ในรูปแบบของรายการ ให้สร้างคำสั่งและปุ่มที่เกี่ยวข้อง ใบเสร็จรับเงิน.
มากรอกตัวจัดการการดำเนินการสำหรับคำสั่งนี้ดังนี้:
&บนไคลเอนต์
ขั้นตอนการรับใบแจ้งหนี้ (คำสั่ง)
ListForm = GetForm("Document.Invoice.ListForm");
ListForm.FilterByProduct = Elements.List.CurrentRow;
รายการแบบฟอร์ม.เปิด();
SelectionElement.RightValue = "000000001";
ในตัวจัดการนี้ เราได้รับแบบฟอร์มสำหรับรายการใบแจ้งหนี้และส่งลิงก์ไปยังรายการปัจจุบันในรายการรายการไปยังพารามิเตอร์แบบฟอร์ม FilterByProduct และเปิดแบบฟอร์มด้วยพารามิเตอร์นี้
จากนั้นเราจะสร้างแบบฟอร์มรายการเอกสาร ใบแจ้งหนี้และสร้างแอตทริบิวต์แบบฟอร์ม FilterByProduct ซึ่งเราจะใช้เป็นพารามิเตอร์แบบฟอร์มเมื่อเปิด ตอนนี้เรามาเปิดแผงคุณสมบัติของแอตทริบิวต์หลักของแบบฟอร์มรายการกันดีกว่า มาตั้งธงกันเถอะ คำขอแบบกำหนดเองและอยู่ในสาย การตั้งค่ารายการคลิกเปิด
ในฟิลด์คำขอ ให้ป้อนข้อความคำขอต่อไปนี้:
เลือก
หมายเลขใบเสร็จรับเงินเอกสาร
เอกสารใบเสร็จรับเงินวันที่
จาก
Document.ReceiptInvoice AS เอกสารใบเสร็จรับเงิน
ที่ไหน
เอกสารใบรับสินค้า Invoice.Products.Product = &Product
ในคำขอ เราใช้พารามิเตอร์ Item ซึ่งจะได้รับลิงก์ไปยังบรรทัดปัจจุบันในรายการสินค้า ซึ่งมีอยู่ในพารามิเตอร์แบบฟอร์มรายการใบแจ้งหนี้ FilterBy Item เมื่อต้องการทำเช่นนี้ ในตัวจัดการเหตุการณ์ฟอร์มรายการ OnOpen เราจะเขียนโค้ดเพื่อตั้งค่าของพารามิเตอร์คำขอผลิตภัณฑ์:
&บนไคลเอนต์
ขั้นตอนการเปิด (ล้มเหลว)
List.Parameters.SetParameterValue("ผลิตภัณฑ์", FilterByProduct);
SelectionElement.RightValue = "000000001";
ที่นี่ รายการตัวเลือกคือรายการพารามิเตอร์คำขอรายการแบบไดนามิกสำหรับแอตทริบิวต์รายการ ค่าของพารามิเตอร์ผลิตภัณฑ์ถูกตั้งค่าให้เท่ากับค่าของพารามิเตอร์ฟอร์ม FilterByProduct
เป็นผลให้เพียงคลิกปุ่มเดียว ใบเสร็จรับเงินในรูปแบบรายการสินค้า เราจะได้รับรายการเฉพาะใบแจ้งหนี้ที่มีรายการไฮไลท์ไว้ ในขณะนี้ในรายการระบบการตั้งชื่อ
ตัวอย่างการสาธิตสำหรับตัวเลือกที่ 3 อยู่ในไดเร็กทอรี 1CITS/EXE/FAQ/OpenFormWithSelection.dt ตัวอย่างนี้ดำเนินการบนแพลตฟอร์มเวอร์ชัน 8.2.9.356
รหัส 1C v 8.x DirectoryList.Selection.Reset();
DirectoryList.Selection.status.ComparisonType=ComparisonType.Contains;
DirectoryList.Selection.Status.Value = "ยอมรับแล้ว";
DirectoryList.Selection.Status.Set();
สำหรับ 1C 8.2:
มีหลายวิธีในการเปิดแบบฟอร์มรายการโดยมีตัวเลือกที่กำหนดไว้ล่วงหน้า ลองดูตามลำดับ:
1. วิธีแรกคือเมื่อเปิดแบบฟอร์ม คุณสามารถตั้งค่าพารามิเตอร์แบบฟอร์มการเลือก และเปิดแบบฟอร์มรายการด้วยพารามิเตอร์นี้ได้ พารามิเตอร์ Selection แสดงถึงโครงสร้าง ชื่อขององค์ประกอบสอดคล้องกับชื่อของฟิลด์ที่ทำการเลือกและค่าประกอบด้วยค่าที่เลือก นี่คือตัวเลือกส่วนขยายแบบฟอร์มที่มีการจัดการรายการแบบไดนามิก นั่นคือ มีอยู่สำหรับฟอร์มที่มีแอททริบิวต์หลักเป็นแอททริบิวต์ประเภทรายการไดนามิก เช่น แบบฟอร์มรายการและแบบฟอร์มการเลือก
เมื่อเปิดแบบฟอร์ม จะทำการเลือกตามฟิลด์ที่ระบุ
รหัส 1C v 8.2 UP // ตัวอย่างเช่นในตัวอย่างต่อไปนี้ รายการใบแจ้งหนี้จะถูกเปิดโดยเลือกตามฟิลด์ตัวเลขเท่ากับ 333
ค่าการเลือก = โครงสร้างใหม่ ("หมายเลข", "333");
SelectionParameters = โครงสร้างใหม่ ("การเลือก", SelectionValue);
OpenForm("เอกสาร. ใบกำกับสินค้า. แบบฟอร์มรายการ", ตัวเลือกการเลือก);
// ตัวอย่างเช่น ตัวอย่างต่อไปนี้จะเปิดรายการใบแจ้งหนี้
// โดยเลือกโดยฟิลด์ผู้รับเหมาเท่ากับ "OJSC Horns and Hooves"
ค่าการเลือก = โครงสร้างใหม่ ("คู่สัญญา", "เขาและกีบ OJSC");
SelectionParameters = โครงสร้างใหม่ ("การเลือก", SelectionValue);
OpenForm("เอกสาร. ใบกำกับสินค้า. แบบฟอร์มรายการ", ตัวเลือกการเลือก);
OpenForm("เอกสาร. ใบกำกับสินค้า. แบบฟอร์มรายการ", ตัวเลือกการเลือก);
รหัส 1C v 8.2 UP OpenForm ("เอกสาร ใบกำกับสินค้า ใบเสร็จรับเงิน แบบฟอร์มรายการ");
จากนั้นในตัวจัดการเหตุการณ์ของแบบฟอร์มสำหรับรายการใบแจ้งหนี้เมื่อ CreateOnServer ให้เขียนโค้ดที่สร้างการเลือกในรายการไดนามิกซึ่งเป็นแอตทริบิวต์หลักของแบบฟอร์ม:
รหัส 1C v 8.2 ขึ้น &OnServer
องค์ประกอบการเลือก = List.Selection.Elements.Add (ประเภท ("องค์ประกอบการเลือก DataComposition"));
SelectionElement.LeftValue = NewDataCompositionField("หมายเลข");
SelectionElement.DisplayMode = ElementDisplayModeDataCompositionSettings.ไม่สามารถเข้าถึงได้;
SelectionElement.RightValue = "000000001";
สิ้นสุดขั้นตอน
&บนเซิร์ฟเวอร์
ขั้นตอนเมื่อ CreateOnServer (ล้มเหลว, การประมวลผลมาตรฐาน)
องค์ประกอบการเลือก = List.Selection.Elements.Add(Type
(“องค์ประกอบการเลือกองค์ประกอบข้อมูล”));
SelectionElement.LeftValue = NewDataCompositionField("DocumentAmount");
SelectionElement.ComparisonView = DataCompositionComparisonView.More;
SelectionElement.Use = จริง;
SelectionElement.RightValue = 150000;
สิ้นสุดขั้นตอน
ข้อดีของวิธีนี้ก็คือ มุมมองแบบเปรียบเทียบสำหรับการเลือก คุณสามารถตั้งค่าได้ไม่เพียงแต่เท่ากับในกรณีแรก แต่ยังตั้งค่าเพิ่มเติม น้อยกว่า ฯลฯ ได้ด้วย
แต่วิธีนี้ก็มีข้อเสียเปรียบที่สำคัญเช่นกัน: ด้วยการเลือกนี้ แบบฟอร์มจะเปิดอยู่เสมอ ไม่ว่าเธอจะถูกเรียกมาจากไหนก็ตาม ดังนั้นจึงไม่ควรกำหนดแบบฟอร์มนี้เป็นแบบฟอร์มหลัก และหากเป็นอันหลักก่อนที่จะติดตั้งส่วนที่เลือกจำเป็นต้องจัดทำการวิเคราะห์ว่าแบบฟอร์มนี้เปิดจากที่ใด ตัวอย่างเช่น การวิเคราะห์พารามิเตอร์แบบฟอร์ม
3. สุดท้ายนี้ เงื่อนไขการเลือกสามารถวางในการสืบค้นแบบกำหนดเองที่เลือกข้อมูลสำหรับรายการไดนามิก ตัวอย่างเช่น เราจำเป็นต้องเปิดรายการใบแจ้งหนี้ที่มีรายการที่เน้นไว้ในรายการสินค้า
เมื่อต้องการทำเช่นนี้ ในรูปแบบของรายการ ให้สร้างคำสั่งและปุ่มที่เกี่ยวข้อง รับใบแจ้งหนี้
มากรอกตัวจัดการการดำเนินการสำหรับคำสั่งนี้ดังนี้:
รหัส 1C v 8.2 ขึ้น &OnClient
ขั้นตอนการรับใบแจ้งหนี้ (คำสั่ง)
ListForm = GetForm("Document.Invoice.ListForm");
ListForm.FilterByProduct = Elements.List.CurrentRow;
รายการแบบฟอร์ม.เปิด();
สิ้นสุดขั้นตอน
ในตัวจัดการนี้ เราได้รับแบบฟอร์มสำหรับรายการใบแจ้งหนี้และส่งลิงก์ไปยังรายการปัจจุบันในรายการรายการไปยังพารามิเตอร์แบบฟอร์ม FilterByProduct และเปิดแบบฟอร์มด้วยพารามิเตอร์นี้
จากนั้นเราจะสร้างแบบฟอร์มสำหรับรายการเอกสาร: รับใบแจ้งหนี้และสร้างแอตทริบิวต์แบบฟอร์ม FilterBy Product ซึ่งเราจะใช้เป็นพารามิเตอร์แบบฟอร์มเมื่อเปิด ตอนนี้เรามาเปิดแผงคุณสมบัติของแอตทริบิวต์หลักของแบบฟอร์มรายการกันดีกว่า ตั้งค่าสถานะ ArbitraryRequestและในบรรทัดการตั้งค่ารายการให้คลิก เปิด.
ในฟิลด์คำขอ ให้ป้อนข้อความคำขอต่อไปนี้:
รหัส 1C v 8.2 UP เลือก
หมายเลขใบเสร็จรับเงินเอกสาร
เอกสารใบเสร็จรับเงินวันที่
จาก
Document.ReceiptInvoice AS เอกสารใบเสร็จรับเงิน
ที่ไหน
เอกสารใบรับสินค้า Invoice.Products.Product = &Product
ในคำขอ เราใช้พารามิเตอร์ Item ซึ่งจะได้รับลิงก์ไปยังบรรทัดปัจจุบันในรายการสินค้า ซึ่งมีอยู่ในพารามิเตอร์แบบฟอร์มรายการใบแจ้งหนี้ FilterBy Item เมื่อต้องการทำเช่นนี้ ในตัวจัดการเหตุการณ์ฟอร์มรายการ OnOpen เราจะเขียนโค้ดเพื่อตั้งค่าของพารามิเตอร์คำขอผลิตภัณฑ์:
รหัส 1C v 8.2 ขึ้นไป
&บนไคลเอนต์
ขั้นตอนการเปิด (ล้มเหลว)
List.Parameters.SetParameterValue("ผลิตภัณฑ์", FilterByProduct);
สิ้นสุดขั้นตอน
ที่นี่ รายการตัวเลือกคือรายการพารามิเตอร์คำขอรายการแบบไดนามิกสำหรับแอตทริบิวต์รายการ ค่าของพารามิเตอร์ผลิตภัณฑ์ถูกตั้งค่าให้เท่ากับค่าของพารามิเตอร์ฟอร์ม FilterByProduct
ด้วยเหตุนี้ เมื่อคลิกปุ่มใบเสร็จรับเงินในแบบฟอร์มรายการสินค้า เราจะได้รับรายการเฉพาะใบแจ้งหนี้ที่มีรายการที่เลือกอยู่ในรายการรายการในปัจจุบันเท่านั้น
รหัส 1C v 8.x DirectoryList.Selection.Reset();
DirectoryList.Selection.status.ComparisonType=ComparisonType.Contains;
DirectoryList.Selection.Status.Value = "ยอมรับแล้ว";
DirectoryList.Selection.Status.Set();
สำหรับ 1C 8.2:
มีหลายวิธีในการเปิดแบบฟอร์มรายการโดยมีตัวเลือกที่กำหนดไว้ล่วงหน้า ลองดูตามลำดับ:
1. วิธีแรกคือเมื่อเปิดแบบฟอร์ม คุณสามารถตั้งค่าพารามิเตอร์แบบฟอร์มการเลือก และเปิดแบบฟอร์มรายการด้วยพารามิเตอร์นี้ได้ พารามิเตอร์ Selection แสดงถึงโครงสร้าง ชื่อขององค์ประกอบสอดคล้องกับชื่อของฟิลด์ที่ทำการเลือกและค่าประกอบด้วยค่าที่เลือก นี่คือตัวเลือกส่วนขยายแบบฟอร์มที่มีการจัดการรายการแบบไดนามิก นั่นคือ มีอยู่สำหรับฟอร์มที่มีแอททริบิวต์หลักเป็นแอททริบิวต์ประเภทรายการไดนามิก เช่น แบบฟอร์มรายการและแบบฟอร์มการเลือก
เมื่อเปิดแบบฟอร์ม จะทำการเลือกตามฟิลด์ที่ระบุ
รหัส 1C v 8.2 UP // ตัวอย่างเช่นในตัวอย่างต่อไปนี้ รายการใบแจ้งหนี้จะถูกเปิดโดยเลือกตามฟิลด์ตัวเลขเท่ากับ 333
ค่าการเลือก = โครงสร้างใหม่ ("หมายเลข", "333");
SelectionParameters = โครงสร้างใหม่ ("การเลือก", SelectionValue);
OpenForm("เอกสาร. ใบกำกับสินค้า. แบบฟอร์มรายการ", ตัวเลือกการเลือก);
// ตัวอย่างเช่น ตัวอย่างต่อไปนี้จะเปิดรายการใบแจ้งหนี้
// โดยเลือกโดยฟิลด์ผู้รับเหมาเท่ากับ "OJSC Horns and Hooves"
ค่าการเลือก = โครงสร้างใหม่ ("คู่สัญญา", "เขาและกีบ OJSC");
SelectionParameters = โครงสร้างใหม่ ("การเลือก", SelectionValue);
OpenForm("เอกสาร. ใบกำกับสินค้า. แบบฟอร์มรายการ", ตัวเลือกการเลือก);
2. คุณสามารถเปิดแบบฟอร์มรายการโดยไม่มีพารามิเตอร์:
รหัส 1C v 8.2 UE OpenForm ("เอกสาร แบบฟอร์มใบกำกับสินค้าใบเสร็จรับเงิน");
จากนั้นในตัวจัดการเหตุการณ์ของแบบฟอร์มสำหรับรายการใบแจ้งหนี้เมื่อ CreateOnServer ให้เขียนโค้ดที่สร้างการเลือกในรายการไดนามิกซึ่งเป็นแอตทริบิวต์หลักของแบบฟอร์ม:
รหัส 1C v 8.2 ขึ้น &OnServer
องค์ประกอบการเลือก = List.Selection.Elements.Add (ประเภท ("องค์ประกอบการเลือก DataComposition"));
SelectionElement.LeftValue = NewDataCompositionField("หมายเลข");
SelectionElement.DisplayMode = ElementDisplayModeDataCompositionSettings.ไม่สามารถเข้าถึงได้;
SelectionElement.RightValue = "000000001";
สิ้นสุดขั้นตอน
&บนเซิร์ฟเวอร์
ขั้นตอนเมื่อ CreateOnServer (ล้มเหลว, การประมวลผลมาตรฐาน)
องค์ประกอบการเลือก = List.Selection.Elements.Add(Type
(“องค์ประกอบการเลือกองค์ประกอบข้อมูล”));
SelectionElement.LeftValue = NewDataCompositionField("DocumentAmount");
SelectionElement.ComparisonView = DataCompositionComparisonView.More;
SelectionElement.Use = จริง;
SelectionElement.RightValue = 150000;
สิ้นสุดขั้นตอน
ข้อดีของวิธีนี้ก็คือ มุมมองแบบเปรียบเทียบสำหรับการเลือก คุณสามารถตั้งค่าได้ไม่เพียงแต่เท่ากับในกรณีแรก แต่ยังตั้งค่าเพิ่มเติม น้อยกว่า ฯลฯ ได้ด้วย
แต่วิธีนี้ก็มีข้อเสียเปรียบที่สำคัญเช่นกัน: ด้วยการเลือกนี้ แบบฟอร์มจะเปิดอยู่เสมอ ไม่ว่าเธอจะถูกเรียกมาจากไหนก็ตาม ดังนั้นจึงไม่ควรกำหนดแบบฟอร์มนี้เป็นแบบฟอร์มหลัก และหากเป็นอันหลักก่อนที่จะติดตั้งส่วนที่เลือกจำเป็นต้องจัดทำการวิเคราะห์ว่าแบบฟอร์มนี้เปิดจากที่ใด ตัวอย่างเช่น การวิเคราะห์พารามิเตอร์แบบฟอร์ม
3. สุดท้ายนี้ เงื่อนไขการเลือกสามารถวางในการสืบค้นแบบกำหนดเองที่เลือกข้อมูลสำหรับรายการไดนามิก ตัวอย่างเช่น เราจำเป็นต้องเปิดรายการใบแจ้งหนี้ที่มีรายการที่เน้นไว้ในรายการสินค้า
เมื่อต้องการทำเช่นนี้ ในรูปแบบของรายการ ให้สร้างคำสั่งและปุ่มที่เกี่ยวข้อง รับใบแจ้งหนี้
มากรอกตัวจัดการการดำเนินการสำหรับคำสั่งนี้ดังนี้:
รหัส 1C v 8.2 ขึ้น &OnClient
ขั้นตอนการรับใบแจ้งหนี้ (คำสั่ง)
ListForm = GetForm("Document.Invoice.ListForm");
ListForm.FilterByProduct = Elements.List.CurrentRow;
รายการแบบฟอร์ม.เปิด();
SelectionElement.RightValue = "000000001";
ในตัวจัดการนี้ เราได้รับแบบฟอร์มสำหรับรายการใบแจ้งหนี้และส่งลิงก์ไปยังรายการปัจจุบันในรายการรายการไปยังพารามิเตอร์แบบฟอร์ม FilterByProduct และเปิดแบบฟอร์มด้วยพารามิเตอร์นี้
จากนั้นเราจะสร้างแบบฟอร์มสำหรับรายการเอกสาร: รับใบแจ้งหนี้และสร้างแอตทริบิวต์แบบฟอร์ม FilterBy Product ซึ่งเราจะใช้เป็นพารามิเตอร์แบบฟอร์มเมื่อเปิด ตอนนี้เรามาเปิดแผงคุณสมบัติของแอตทริบิวต์หลักของแบบฟอร์มรายการกันดีกว่า ตั้งค่าสถานะ ArbitraryRequestและในบรรทัดการตั้งค่ารายการให้คลิก เปิด.
ในฟิลด์คำขอ ให้ป้อนข้อความคำขอต่อไปนี้:
รหัส 1C v 8.2 UP เลือก
หมายเลขใบเสร็จรับเงินเอกสาร
เอกสารใบเสร็จรับเงินวันที่
จาก
Document.ReceiptInvoice AS เอกสารใบเสร็จรับเงิน
ที่ไหน
เอกสารใบรับสินค้า Invoice.Products.Product = &Product
ในคำขอ เราใช้พารามิเตอร์ Item ซึ่งจะได้รับลิงก์ไปยังบรรทัดปัจจุบันในรายการสินค้า ซึ่งมีอยู่ในพารามิเตอร์แบบฟอร์มรายการใบแจ้งหนี้ FilterBy Item เมื่อต้องการทำเช่นนี้ ในตัวจัดการเหตุการณ์ฟอร์มรายการ OnOpen เราจะเขียนโค้ดเพื่อตั้งค่าของพารามิเตอร์คำขอผลิตภัณฑ์:
รหัส 1C v 8.2 ขึ้นไป
&บนไคลเอนต์
ขั้นตอนการเปิด (ล้มเหลว)
List.Parameters.SetParameterValue("ผลิตภัณฑ์", FilterByProduct);
สิ้นสุดขั้นตอน
ที่นี่ รายการตัวเลือกคือรายการพารามิเตอร์คำขอรายการแบบไดนามิกสำหรับแอตทริบิวต์รายการ ค่าของพารามิเตอร์ผลิตภัณฑ์ถูกตั้งค่าให้เท่ากับค่าของพารามิเตอร์ฟอร์ม FilterByProduct
ด้วยเหตุนี้ เมื่อคลิกปุ่มใบเสร็จรับเงินในแบบฟอร์มรายการสินค้า เราจะได้รับรายการเฉพาะใบแจ้งหนี้ที่มีรายการที่เลือกอยู่ในรายการรายการในปัจจุบันเท่านั้น
ข้อมูลที่นำมาจากเว็บไซต์
รหัสนี้ช่วยให้คุณสามารถเปิดรายการเอกสารโดยมีตัวเลือกที่ระบุ คุณยังสามารถเปิดรายการองค์ประกอบไดเร็กทอรีด้วยตัวเลือกที่ต้องการได้
รหัส 1C v 8.2 แบบฟอร์ม UP = OpenForm ("Document. Invoice.Form.ListForm"); //เปิดแบบฟอร์ม
SelectionOwner =Form.List.Selection.Elements.Add(Type("DataCompositionSelectionElement")); //เพิ่มการเลือก
SelectionOwner.ComparisonView = DataCompositionComparisonView.Equals; //จะเปรียบเทียบยังไงดี.
SelectOwner.Use = จริง; // ตั้งค่าช่องทำเครื่องหมายสำหรับการใช้ NewDataCompositionField("Nomenclature")
SelectionOwner.LeftValue = NewDataCompositionField("บัญชี"); //เราจะใช้รายละเอียดอะไรบ้างในการเลือก?
SelectionOwner.RightValue = Object.Account; // และความหมายของการเลือก
เพื่อ เปิดแบบฟอร์มรายการที่มีตัวเลือกที่กำหนดไว้ล่วงหน้าใช้วิธีการต่อไปนี้:
วิธีแรกคือเมื่อคุณเปิดแบบฟอร์ม คุณสามารถตั้งค่าพารามิเตอร์แบบฟอร์มการเลือก และเปิดแบบฟอร์มรายการด้วยพารามิเตอร์นี้ได้
พารามิเตอร์ Selection แสดงถึงโครงสร้าง ชื่อขององค์ประกอบสอดคล้องกับชื่อของฟิลด์ที่ทำการเลือกและค่าประกอบด้วยค่าที่เลือก นี่คือตัวเลือกส่วนขยายแบบฟอร์มที่มีการจัดการรายการแบบไดนามิก นั่นคือ มีอยู่สำหรับแบบฟอร์มที่มีคุณลักษณะหลักเป็นคุณลักษณะของประเภท DynamicList เช่น แบบฟอร์มรายการและแบบฟอร์มการเลือก
ตัวอย่างเช่น ในตัวอย่างต่อไปนี้ รายการใบแจ้งหนี้จะถูกเปิดโดยเลือกตามฟิลด์ตัวเลข ซึ่งเท่ากับ 333
รหัส 1C v 8.2 ค่าการเลือก UE = โครงสร้างใหม่ ("หมายเลข", "333");
SelectionParameters = โครงสร้างใหม่ ("การเลือก", SelectionValue);
OpenForm("เอกสาร. ใบกำกับสินค้า. แบบฟอร์มรายการ", ตัวเลือกการเลือก);
วิธีที่สอง
คุณสามารถเปิดแบบฟอร์มรายการโดยไม่มีพารามิเตอร์:
รหัส 1C v 8.2 UP OpenForm ("เอกสาร ใบกำกับสินค้า ใบเสร็จรับเงิน แบบฟอร์มรายการ");
จากนั้นในตัวจัดการเหตุการณ์ของแบบฟอร์มสำหรับรายการใบแจ้งหนี้เมื่อ CreateOnServer ให้เขียนโค้ดที่สร้างการเลือกในรายการไดนามิกซึ่งเป็นแอตทริบิวต์หลักของแบบฟอร์ม:
รหัส 1C v 8.2 ขึ้น &OnServer
ขั้นตอนเมื่อ CreateOnServer (ล้มเหลว, การประมวลผลมาตรฐาน)
องค์ประกอบการเลือก = List.Selection.Elements.Add (ประเภท ("องค์ประกอบการเลือก DataComposition"));
SelectionElement.LeftValue = NewDataCompositionField("หมายเลข");
SelectionElement.ComparisonView = DataCompositionComparisonView.More;
SelectionElement.Use = จริง;
SelectionElement.DisplayMode = ElementDisplayModeDataCompositionSettings.ไม่สามารถเข้าถึงได้;
SelectionElement.RightValue = "000000001";
สิ้นสุดขั้นตอน
ข้อดีของวิธีนี้คือสามารถตั้งค่าประเภทการเปรียบเทียบสำหรับการเลือกได้ไม่เพียงแต่เท่ากับเท่ากับในกรณีแรก แต่ยังตั้งค่าเป็นมากกว่า น้อยกว่า และอื่นๆ ได้ด้วย
แต่วิธีนี้ก็มีข้อเสียเปรียบที่สำคัญเช่นกัน: ด้วยการเลือกนี้ แบบฟอร์มจะเปิดอยู่เสมอ ไม่ว่าเธอจะถูกเรียกมาจากไหนก็ตาม ดังนั้นจึงไม่ควรกำหนดแบบฟอร์มนี้เป็นแบบฟอร์มหลัก และหากเป็นอันหลักก่อนที่จะทำการติดตั้งส่วนที่เลือกจำเป็นต้องจัดทำการวิเคราะห์ว่าแบบฟอร์มนี้เปิดจากที่ใด ตัวอย่างเช่น การวิเคราะห์พารามิเตอร์แบบฟอร์ม
วิธีที่สาม
สุดท้ายนี้ เงื่อนไขการเลือกสามารถวางในการสืบค้นแบบกำหนดเองที่เลือกข้อมูลสำหรับรายการไดนามิกได้
ตัวอย่างเช่น เราจำเป็นต้องเปิดรายการใบแจ้งหนี้ที่มีรายการที่เน้นไว้ในรายการสินค้า
เมื่อต้องการทำเช่นนี้ ในรูปแบบของรายการ ให้สร้างคำสั่งและปุ่มที่เกี่ยวข้อง รับใบแจ้งหนี้
มากรอกตัวจัดการการดำเนินการสำหรับคำสั่งนี้ดังนี้:
รหัส 1C v 8.2 ขึ้น &OnClient
ขั้นตอนการรับใบแจ้งหนี้ (คำสั่ง)
SelectionParameters = โครงสร้างใหม่ ("FilterByProduct", Elements.List.CurrentRow);
OpenForm("เอกสาร. ใบกำกับสินค้า. แบบฟอร์มรายการ", ตัวเลือกการเลือก);
สิ้นสุดขั้นตอน
ในตัวจัดการนี้ เราเปิดแบบฟอร์มสำหรับรายการใบแจ้งหนี้ โดยส่งลิงก์ไปยังรายการปัจจุบันในรายการรายการไปยังพารามิเตอร์แบบฟอร์ม FilterByProduct
จากนั้นเราจะสร้างแบบฟอร์มสำหรับรายการเอกสาร: Receipt Invoice และสร้างพารามิเตอร์แบบฟอร์ม FilterBy Product ซึ่งเราจะใช้เพื่อเปิดแบบฟอร์มที่มีตัวเลือกที่ต้องการ
ตอนนี้เรามาเปิดแผงคุณสมบัติของแอตทริบิวต์หลักของแบบฟอร์มรายการกันดีกว่า ตั้งค่าสถานะแบบสอบถามแบบกำหนดเองและในบรรทัดการตั้งค่ารายการให้คลิกเปิด
ในฟิลด์คำขอ ให้ป้อนข้อความคำขอต่อไปนี้:
รหัส 1C v 8.2 UP เลือก
หมายเลขใบเสร็จรับเงินเอกสาร
เอกสารใบเสร็จรับเงินวันที่
จาก
Document.ReceiptInvoice AS เอกสารใบเสร็จรับเงิน
ที่ไหน
เอกสารใบรับสินค้า Invoice.Products.Product = &Product
ในคำขอ เราใช้พารามิเตอร์ Item ซึ่งจะได้รับลิงก์ไปยังบรรทัดปัจจุบันในรายการสินค้า ซึ่งมีอยู่ในพารามิเตอร์แบบฟอร์มรายการใบแจ้งหนี้ FilterBy Item
เมื่อต้องการทำเช่นนี้ ในตัวจัดการเหตุการณ์แบบฟอร์มรายการ เมื่อ CreateOnServer เราจะเขียนโค้ดเพื่อตั้งค่าของพารามิเตอร์คำขอผลิตภัณฑ์:
รหัส 1C v 8.2 ขึ้น &OnClient
ขั้นตอนการเปิด (ล้มเหลว)
List.Parameters.SetParameterValue("ผลิตภัณฑ์", พารามิเตอร์.FilterByProduct);
สิ้นสุดขั้นตอน
ที่นี่ List.Parameters คือรายการพารามิเตอร์คำขอรายการแบบไดนามิกสำหรับแอตทริบิวต์รายการ ค่าของพารามิเตอร์ผลิตภัณฑ์ถูกตั้งค่าให้เท่ากับค่าของพารามิเตอร์ฟอร์ม FilterByProduct
ด้วยเหตุนี้ เมื่อคลิกปุ่มใบเสร็จรับเงินในแบบฟอร์มรายการสินค้า เราจะได้รับรายการเฉพาะใบแจ้งหนี้ที่มีรายการที่เลือกอยู่ในรายการรายการในปัจจุบันเท่านั้น