รับส่วนที่เป็นตาราง 1 วินาที จะรับข้อมูลจากส่วนตารางของเอกสารได้อย่างไร? วิธีรับและข้ามแถวที่เลือกของส่วนที่เป็นตาราง
หน้าแรก สำหรับนักพัฒนามือใหม่ การเรียนรู้การเขียนโปรแกรมจะรับข้อมูลจากส่วนตารางของเอกสารได้อย่างไร?
ตัวอย่างเช่น พิจารณาสถานการณ์ที่คุณต้องได้รับรายการสินค้าทั้งหมดที่ระบุไว้ในส่วนตาราง สินค้าเอกสาร การขายสินค้าและบริการ.
เมื่อต้องการทำเช่นนี้ คุณสามารถใช้คำขอกับข้อความต่อไปนี้:
เลือกการขายสินค้าและบริการต่างๆ ศัพท์ AS ศัพท์จากเอกสาร การขายสินค้าและบริการ
แหล่งที่มาเราระบุส่วนที่เป็นตารางของเอกสาร - ตาราง เอกสารการขายสินค้าและบริการ- เราประกาศฟิลด์เอาต์พุตให้เป็นฟิลด์ ศัพท์ซึ่งเป็นส่วนหนึ่งของตารางต้นฉบับ นอกจากนี้ เนื่องจากโดยปกติแล้วรายการผลิตภัณฑ์เดียวกันอาจมีอยู่ในเอกสารมากกว่าหนึ่งครั้ง เราจึงใช้ หลากหลายเพื่อรับเฉพาะแถวที่แตกต่างกันในตารางผลลัพธ์ของแบบสอบถาม
ตัวอย่างเช่น เรามาสร้างการประมวลผลกัน รายการสินค้าโดยที่เอกสารถูกเลือก การขายสินค้าและบริการและโดยการคลิกที่ปุ่มที่เกี่ยวข้อง รายการของรายการที่ไม่ซ้ำของระบบการตั้งชื่อที่มีอยู่ในส่วนที่เป็นตารางของเอกสารนี้จะแสดงในหน้าต่างข้อความ
เพื่อจำกัดการเลือกรายการเฉพาะรายการจากส่วนที่เป็นตารางของเอกสารเฉพาะ เราใช้พารามิเตอร์ ลิงค์ตามเงื่อนไขในคำขอ ( ที่ไหน...):
เลือกการขายสินค้าและบริการต่างๆ ตามระบบการตั้งชื่อจากเอกสาร การขายสินค้าและบริการ วิธีการขายสินค้า และบริการ ลิงค์ = &Link
ในการบัญชีเงินและสินค้ามีการใช้ตารางต่าง ๆ กันอย่างแพร่หลายในธุรกิจ เอกสารเกือบทุกฉบับจะเป็นตาราง
ตารางหนึ่งแสดงรายการสินค้าที่จะจัดส่งจากคลังสินค้า ตารางอื่นแสดงภาระผูกพันในการชำระค่าสินค้าเหล่านี้
ดังนั้นใน 1C การทำงานกับตารางจึงถือเป็นจุดเด่น
ตารางใน 1C เรียกอีกอย่างว่า "ส่วนตาราง" ไดเร็กทอรี เอกสาร และอื่นๆ มีสิ่งเหล่านี้
เมื่อดำเนินการแบบสอบถาม จะส่งกลับตารางที่สามารถเข้าถึงได้ในสองวิธีที่แตกต่างกัน
การเลือกครั้งแรก - เร็วกว่า - การรับแถวจากนั้นสามารถทำได้ตามลำดับเท่านั้น อย่างที่สองคือการอัปโหลดผลลัพธ์แบบสอบถามลงในตารางค่าแล้วเข้าถึงโดยสุ่ม
//ตัวเลือกที่ 1 – การเข้าถึงผลลัพธ์การสืบค้นตามลำดับ
//ไปเอาโต๊ะมา
เลือก = Query.Run().Select();
// เราดูทุกบรรทัดของผลลัพธ์การสืบค้นตามลำดับ
ในขณะที่ Select.Next() วนซ้ำ
รายงาน(ชื่อที่เลือก);
สิ้นสุดรอบ;
//ตัวเลือก 2 – การอัปโหลดไปยังตารางค่า
คำขอ = คำขอใหม่ ("เลือกชื่อจาก Directory.Nomenclature");
//ไปเอาโต๊ะมา
ตาราง = Query.Run().Unload()
//นอกจากนี้เรายังข้ามทุกบรรทัดได้ด้วย
สำหรับแต่ละแถวจากรอบตาราง
รายงาน (String.Name);
สิ้นสุดรอบ;
//หรือเข้าถึงสตริงโดยพลการ
Row = Table.Find("พลั่ว", "ชื่อ");
คุณลักษณะที่สำคัญคือในตารางที่ได้รับจากผลลัพธ์แบบสอบถาม คอลัมน์ทั้งหมดจะถูกพิมพ์อย่างเคร่งครัด ซึ่งหมายความว่าโดยการร้องขอฟิลด์ Name จากไดเร็กทอรี Nomenclature คุณจะได้รับคอลัมน์ของแบบฟอร์ม String ที่มีความยาวที่อนุญาตได้ไม่เกิน N ตัวอักษร
ตารางบนแบบฟอร์ม (ไคลเอ็นต์แบบหนา)
ผู้ใช้ทำงานกับตารางเมื่อวางบนแบบฟอร์ม
เราได้พูดคุยถึงหลักการพื้นฐานของการทำงานกับแบบฟอร์มในบทเรียนและในบทเรียนต่อไป
เรามาวางตารางบนแบบฟอร์มกันดีกว่า เมื่อต้องการทำเช่นนี้ คุณสามารถลากตารางจากแผงควบคุมได้ ในทำนองเดียวกัน คุณสามารถเลือกการควบคุมแบบฟอร์ม/การแทรกจากเมนูได้
ข้อมูลสามารถเก็บไว้ในการกำหนดค่าได้ - จากนั้นคุณจะต้องเลือกส่วนตารางที่มีอยู่ (เพิ่มไว้ก่อนหน้านี้) ของออบเจ็กต์การกำหนดค่าซึ่งมีแบบฟอร์มที่คุณกำลังแก้ไข
คลิกปุ่ม "..." ในคุณสมบัติข้อมูล หากต้องการดูรายการส่วนต่างๆ แบบตาราง คุณต้องขยายสาขา Object
เมื่อคุณเลือกส่วนที่เป็นตาราง 1C จะเพิ่มคอลัมน์ลงในตารางในแบบฟอร์ม แถวที่ผู้ใช้ป้อนลงในตารางดังกล่าวจะถูกบันทึกโดยอัตโนมัติพร้อมกับหนังสือ/เอกสารอ้างอิง
ในคุณสมบัติ Data เดียวกัน คุณสามารถป้อนชื่อที่กำหนดเองและเลือกประเภทตารางค่าได้
ซึ่งหมายความว่ามีการเลือกตารางค่าโดยพลการ จะไม่เพิ่มคอลัมน์โดยอัตโนมัติและจะไม่บันทึกโดยอัตโนมัติ แต่คุณสามารถทำสิ่งใดก็ได้ที่คุณต้องการ
คลิก คลิกขวาบนโต๊ะคุณสามารถเพิ่มคอลัมน์ได้ ในคุณสมบัติของคอลัมน์คุณสามารถระบุชื่อ (สำหรับการอ้างอิงในรหัส 1C) ส่วนหัวของคอลัมน์ในแบบฟอร์มการเชื่อมต่อกับแอตทริบิวต์ของส่วนที่เป็นตาราง (ส่วนหลัง - หากไม่ใช่ตารางที่กำหนดเองจะถูกเลือก แต่ ส่วนที่เป็นตาราง).
ในคุณสมบัติของตารางบนแบบฟอร์ม คุณสามารถระบุว่าผู้ใช้สามารถเพิ่ม/ลบแถวได้หรือไม่ แบบฟอร์มขั้นสูงเพิ่มเติมคือช่องทำเครื่องหมายดูอย่างเดียว คุณสมบัติเหล่านี้สะดวกในการใช้สำหรับการจัดระเบียบตารางที่มีไว้เพื่อแสดงข้อมูล แต่ไม่แก้ไข
ในการจัดการตาราง คุณต้องแสดงแผงคำสั่งในแบบฟอร์ม เลือกรายการเมนู แบบฟอร์ม/แทรกการควบคุม/แถบคำสั่ง
ในคุณสมบัติของแถบคำสั่ง ให้เลือกกล่องกาเครื่องหมายป้อนอัตโนมัติเพื่อให้ปุ่มบนแผงปรากฏขึ้นโดยอัตโนมัติ
ตารางบนฟอร์ม (ไคลเอ็นต์แบบบาง/ที่มีการจัดการ)
บน ในรูปแบบที่สามารถจัดการได้ขั้นตอนเหล่านี้ดูแตกต่างออกไปเล็กน้อย หากคุณต้องการวางส่วนที่เป็นตารางบนแบบฟอร์ม ให้ขยายสาขา Object แล้วลากส่วนหนึ่งที่เป็นตารางไปทางซ้าย นั่นคือทั้งหมด!
หากคุณต้องการวางตารางค่า ให้เพิ่มแอตทริบิวต์ของฟอร์มใหม่และระบุประเภท – ตารางค่าในคุณสมบัติ
หากต้องการเพิ่มคอลัมน์ ให้ใช้เมนูคลิกขวาบนแอตทริบิวต์แบบฟอร์มนี้ เลือกเพิ่มคอลัมน์แอตทริบิวต์
จากนั้นลากตารางไปทางซ้ายด้วย
เพื่อให้ตารางปรากฏขึ้น แผงคำสั่งในคุณสมบัติของตาราง ให้เลือกค่าในส่วนการใช้งาน – ตำแหน่งแถบคำสั่ง
การอัพโหลดตารางไปยัง Excel
ตาราง 1C ใดๆ ที่อยู่บนแบบฟอร์มสามารถพิมพ์หรืออัปโหลดไปยัง Excel ได้
โดยคลิกขวาที่พื้นที่ว่างในตารางแล้วเลือกรายการ
ในไคลเอนต์ที่ได้รับการจัดการ (ธิน) การดำเนินการที่คล้ายกันสามารถทำได้โดยใช้รายการเมนู การกระทำทั้งหมด/แสดงรายการ
มีชิ้นส่วนแบบตารางสำหรับวัตถุจำนวนมากใน 1C:
- ไดเรกทอรี
- เอกสาร
- รายงานและการประมวลผล
- ผังบัญชี
- แผนประเภทลักษณะเฉพาะ
- แผนประเภทการคำนวณ
- กระบวนการทางธุรกิจและงาน
ส่วนแบบตารางช่วยให้คุณสามารถจัดเก็บข้อมูลที่มีโครงสร้างที่เป็นของวัตถุเดียวได้ไม่จำกัดจำนวน
มาดูเทคนิคบางอย่างในการทำงานกับส่วนต่างๆ แบบตารางกัน
วิธีเลี่ยงส่วนที่เป็นตาราง
หากต้องการสำรวจส่วนของตาราง คุณสามารถใช้การวนซ้ำได้ สำหรับทุกคน
สำหรับแต่ละแถวจากส่วนตารางของวงจร
รายงาน (แอตทริบิวต์ String. TabularPart);
เอ็นด์ไซเคิล ;
ในการวนซ้ำแต่ละครั้งในตัวแปร เส้นแถวถัดไปของส่วนตารางจะถูกส่งไป ค่าของรายละเอียดแถวสามารถรับได้จากนิพจน์ บรรทัด. AttributeName.
วิธีรับและข้ามแถวที่เลือกของส่วนที่เป็นตาราง
หากต้องการแสดงข้อมูลจากส่วนที่เป็นตารางของวัตถุ ให้ใช้องค์ประกอบแบบฟอร์ม สนามตาราง- หากต้องการเปิดใช้งานความสามารถในการเลือกหลายแถวในเขตข้อมูลตาราง คุณต้องตั้งค่า หลายรายการที่ทรัพย์สินของเขา โหมดการเลือก.
หากต้องการดูรายการบรรทัดที่เลือก ให้ใช้รหัสต่อไปนี้:
การวนซ้ำจะใช้เพื่อวนซ้ำผ่านบรรทัดที่เลือก สำหรับทุกคน:
SelectedRows = FormElements ชื่อเขตข้อมูลตาราง แถวที่เลือก;
สำหรับแต่ละแถวจากแถวที่เลือก วนซ้ำ
//เนื้อหาวนซ้ำ
เอ็นด์ไซเคิล ;
วิธีเลือกแถวของส่วนตาราง (เขตข้อมูลตาราง) โดยทางโปรแกรมและยกเลิกการเลือก
หากต้องการยกเลิกการเลือกแถวของช่องตารางโดยทางโปรแกรม:
องค์ประกอบของแบบฟอร์ม ชื่อเขตข้อมูลตาราง แถวที่เลือก ชัดเจน() ;
หากต้องการเลือกแถวทั้งหมดของเขตข้อมูลตารางโดยทางโปรแกรม:
สำหรับแต่ละ CurrentRow จาก TabularPart Loop
องค์ประกอบของแบบฟอร์ม ชื่อเขตข้อมูลตาราง เส้นที่เลือก เพิ่ม(แถวปัจจุบัน);
เอ็นด์ไซเคิล ;
วิธีเคลียร์ส่วนของโต๊ะ
ตารางส่วนหนึ่ง ชัดเจน() ;
วิธีรับแถวปัจจุบันของส่วนของตาราง
บรรทัดปัจจุบันคือช่วงเวลาที่ผู้ใช้มี ในขณะนี้เคอร์เซอร์อยู่ หากต้องการรับสิ่งนี้ คุณต้องเข้าถึงองค์ประกอบการควบคุมบนแบบฟอร์มที่เกี่ยวข้องกับส่วนที่เป็นตาราง
สำหรับ รูปร่างปกติรหัสจะมีลักษณะดังนี้:
องค์ประกอบของแบบฟอร์ม ชื่อเขตข้อมูลตาราง ข้อมูลปัจจุบัน;
สำหรับแบบฟอร์มที่ได้รับการจัดการ:
องค์ประกอบ ชื่อเขตข้อมูลตาราง ข้อมูลปัจจุบัน;
วิธีเพิ่มแถวใหม่ในส่วนของตาราง
เพิ่มบรรทัดใหม่ต่อท้ายส่วนของตาราง:
NewRow = ส่วนของตาราง เพิ่ม() ;
เพิ่มบรรทัดใหม่ในส่วนใดก็ได้ของตาราง (บรรทัดถัดไปจะถูกเลื่อน):
NewRow = ส่วนของตาราง แทรก(ดัชนี)
//ดัชนี - จำนวนบรรทัดที่เพิ่ม การกำหนดหมายเลขบรรทัดเริ่มต้นจากศูนย์
ใหม่แถว. อุปกรณ์ประกอบฉาก1 = "มูลค่า" ;
วิธีกรอกรายละเอียดของแถวตารางโดยทางโปรแกรม
หากคุณต้องการกรอกรายละเอียดของแถวส่วนตารางที่ผู้ใช้เพิ่มโดยทางโปรแกรม คุณต้องใช้ตัวจัดการเหตุการณ์ส่วนตาราง เมื่อเริ่มแก้ไข.
ขั้นตอนที่สร้างโดยตัวจัดการมีพารามิเตอร์สามตัว:
- องค์ประกอบ- มีองค์ประกอบควบคุม ตารางฟิลด์.
- NewString- บูลีน มีคุณค่า จริงถ้ามีการเพิ่มแถวตารางใหม่ และ โกหก,หากผู้ใช้เริ่มแก้ไขบรรทัดที่มีอยู่แล้ว
- สำเนา- บูลีน มีคุณค่า จริงหากผู้ใช้คัดลอกบรรทัด และ โกหกในกรณีอื่น ๆ
ลองดูตัวอย่าง สมมติว่าเราต้องกรอกรายละเอียดของส่วนตาราง บัญชีบัญชีในกรณีที่มีการขึ้นบรรทัดใหม่ เมื่อแก้ไขบรรทัดที่มีอยู่ คุณไม่จำเป็นต้องเปลี่ยนบัญชีการบัญชี
ขั้นตอน TabularPartAtStartEditing (องค์ประกอบ, NewRow, คัดลอก)
//หากผู้ใช้แก้ไขบรรทัดที่มีอยู่ เราจะไม่ทำอะไรเลย
ถ้าไม่ใช่ NewRow แล้ว
กลับ;
สิ้นสุดถ้า ;
//หากเป็นบรรทัดใหม่ ให้ตั้งค่าบัญชีการบัญชี
TechString = รายการ ข้อมูลปัจจุบัน; // รับแถวปัจจุบันของส่วนตาราง
เทคสตริง การบัญชี = ผังบัญชี พึ่งตนเองได้. จำเป็นบัญชี;
สิ้นสุดขั้นตอน