1 วินาที 8 แทรกแถวลงในตารางค่า มีวิธีการใดบ้างและวิธีค้นหาค่าหลายค่าพร้อมกัน

ในการบัญชีเงินและสินค้ามีการใช้ตารางต่าง ๆ กันอย่างแพร่หลายในธุรกิจ เอกสารเกือบทุกฉบับจะเป็นตาราง

ตารางหนึ่งแสดงรายการสินค้าที่จะจัดส่งจากคลังสินค้า ตารางอื่นแสดงภาระผูกพันในการชำระค่าสินค้าเหล่านี้

ดังนั้นใน 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

มีวิธีการใดบ้างและวิธีค้นหาค่าหลายค่าพร้อมกัน

มีสองวิธีพิเศษในการค้นหาตารางค่า:

1. ค้นหา

TVHorizon = Directories.Nomenclature.FindByName("TVHorizon");
FoundString = TZNomenclature.Find (TVHorizon);
//เรายังสามารถระบุได้ว่าคอลัมน์ใดที่จะค้นหาเพื่อเพิ่มความเร็วในการค้นหา
FoundString = TZNomenclature.Find (TVHorizon, "ระบบการตั้งชื่อ");

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

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

2. ค้นหาสตริง


โครงสร้างการเลือกแทรก("ระบบการตั้งชื่อ", TVHorizon); // ก่อนอื่นให้ระบุคอลัมน์ที่จะดู จากนั้นจึงระบุสิ่งที่ต้องค้นหา

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

ข้อดีอีกประการหนึ่งของวิธีนี้คือสามารถค้นหาผ่านหลายคอลัมน์ของตารางค่าได้พร้อมกัน:


SelectionStructure = โครงสร้างใหม่;
โครงสร้างการเลือกแทรก("ระบบการตั้งชื่อ", TVHorizon);
โครงสร้างการเลือก.Insert("ปริมาณ", 10);
FoundArray of Rows = TZNomenclature.FindLines (SelectionStructure);

อย่างที่คุณเห็นข้อเสียอย่างเดียวคือคุณไม่สามารถใช้การเปรียบเทียบประเภทอื่นนอกเหนือจาก "เท่ากับ"

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

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

โครงสร้างของตารางค่าที่เป็นวัตถุ

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

ตารางค่าคอลัมน์

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

เนื่องจากคอลัมน์เป็นคอลเลกชันของออบเจ็กต์ คุณจึงเพิ่ม ลบ และแก้ไขคอลัมน์ได้

แถวตารางค่า

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

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

สร้างตารางค่า

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

การสร้างตารางโดยใช้ตัวสร้าง

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

DemoTable = ตารางค่าใหม่; // ก่อนอื่นเราเริ่มต้น TK // ต่อไปเราจะกำหนดพารามิเตอร์ที่จำเป็นสำหรับคอลัมน์ใหม่และเพิ่มลงในคอลเลกชัน // การสร้างคอลัมน์ "ระบบการตั้งชื่อ" Name = "ระบบการตั้งชื่อ"; ValueType = TypeDescription ใหม่ ("DirectoryLink.Nomenclature"); Title = "ระบบการตั้งชื่อ (ผลิตภัณฑ์)"; DemoTable.Columns.Add(ชื่อ, ValueType, ส่วนหัว); // การสร้างคอลัมน์ "ปริมาณ" Name = "ปริมาณ"; ValueType = คำอธิบายประเภทใหม่ ("หมายเลข"); DemoTable.Columns.Add(ชื่อ, ValueType); // จากการปรับเปลี่ยนเหล่านี้เราได้สร้างตารางว่างที่มีคอลัมน์ที่พิมพ์ // หากคุณต้องการใช้การพิมพ์ประเภทดั้งเดิมที่แม่นยำยิ่งขึ้นคุณควรใช้ไวยากรณ์เพิ่มเติมของตัวสร้าง "คำอธิบายประเภท"

การสร้างตารางโดยการคัดลอก

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

// ตัวเลือกด้วยการคัดลอกแถวทั้งหมดจากมาตรฐานข้อกำหนดทางเทคนิคแต่สงวนไว้เพียงสองคอลัมน์ที่ระบุ คอลัมน์ของ Standard = "ระบบการตั้งชื่อ, ปริมาณ"; DemoTable = TableEtalon.Copy(, ColumnsEtalon); // ตัวเลือกที่มีการคัดลอกแถวที่เลือกไว้ล่วงหน้าจากมาตรฐานข้อกำหนดทางเทคนิคในขณะที่รักษาคอลัมน์ที่ระบุทั้งสองไว้ Rows of the Standard = SelectIntoArrayThe Rows We Need From the Table of the Standard(); ColumnsStandard = "ระบบการตั้งชื่อ, ปริมาณ"; DemoTable = TableEtalon.Copy (RowsEtalon, ColumnsEtalon); // ตัวเลือกสำหรับการคัดลอกแถวจากมาตรฐานข้อกำหนดทางเทคนิคโดยใช้ตัวกรองที่ระบุ โดยรักษาหนึ่งคอลัมน์ “ระบบการตั้งชื่อ” // แถวทั้งหมดที่มีค่าในคอลัมน์ปริมาณเป็น 0 จะถูกเลือก เฉพาะคอลัมน์ระบบการตั้งชื่อ การเลือกแถว = โครงสร้างใหม่(" ปริมาณ" จะปรากฏในตารางผลลัพธ์ 0); ColumnsStandard = "ระบบการตั้งชื่อ"; DemoTable = TableEtalon.Copy (RowsEtalon, ColumnsEtalon); // ตัวเลือกพร้อมสำเนาตารางที่สมบูรณ์และการลบหนึ่งแถวในภายหลังโดยมีค่าฟิลด์ปริมาณเท่ากับศูนย์และการลบคอลัมน์ "ปริมาณ" ทั้งหมด การเลือกแถว = โครงสร้างใหม่("ปริมาณ", 0); ColumnsStandard = "ระบบการตั้งชื่อ"; DemoTable = TableEtalon.Copy (RowsEtalon, ColumnsEtalon); TableRow = DemoTable.Find(0, "ปริมาณ"); DemoTable.Delete(แถวตาราง); DemoTable.Columns.Delete("ปริมาณ"); // ตัวเลือกที่คล้ายกันและการแก้ไขสามารถนำไปใช้กับส่วนที่เป็นตารางและชุดบันทึกการลงทะเบียนได้

การสร้างตารางด้วยแบบสอบถาม

หากมีเทมเพลตของตารางที่คุณต้องการอยู่ในฐานข้อมูล คุณสามารถใช้แบบสอบถามเพื่อสร้างตารางที่มีโครงสร้างที่ต้องการได้อย่างรวดเร็ว

// ตัวอย่างของการสร้างตารางว่างตามโครงสร้างของการลงทะเบียนการสะสม // มันง่ายที่จะเดาว่าด้วยวิธีนี้ คุณยังสามารถรับตารางที่กรอกข้อมูลแล้ว Query = New Query("SELECT FIRST 0 * From Accumulation Register. Products ในคลังสินค้า"); RequestResult = คำขอดำเนินการ (); DemoTable = ผลลัพธ์แบบสอบถาม Unload(); // ตัวอย่างของการสร้างตารางว่างโดยใช้ประเภทและชื่อฟิลด์ที่ระบุอย่างชัดเจน Query = New Query; Query.Text = "SELECT TOP 0 | Value(Directory.Nomenclature.EmptyLink) AS Nomenclature, | EXPRESS(0 AS NUMBER(15, 3)) AS Volume"; RequestResult = คำขอดำเนินการ (); DemoTable = ผลลัพธ์แบบสอบถาม Unload(); // สำคัญ! อย่าลืมว่าประเภทของค่าคอลัมน์ที่ได้รับจากคำขอจะเป็นประเภท Null เสมอ // ดังนั้น TK ที่สร้างโดยคำขอจะมีประเภทคอลัมน์ผสมเสมอ

บทสรุป

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

นี่เป็นข้อเท็จจริงเล็กน้อยสำหรับผู้เริ่มต้น - ตัวอย่างง่ายๆ ของการทำงานกับตารางค่า:

1. สร้างตารางค่า

ValueTable = ตารางค่าใหม่;


2. สร้างคอลัมน์สำหรับตารางค่า:

ValueTable.Columns.Add("ชื่อ");
Table.Columns.Add("นามสกุล");


3. เพิ่มแถวใหม่โดยใช้ชื่อคอลัมน์:


NewLine.Name = "วาซิลี";
NewLine.LastName = "ฟักทอง";


4. วิธีค้นหาค่าในตารางค่า:
จำเป็นต้องค้นหาแถวของตารางที่มีค่าที่ต้องการ

FoundRow = ValueTable.Find(SearchValue);


5. ค้นหาการเกิดขึ้นครั้งแรกในบางคอลัมน์ของตารางค่า

FoundRow = ValueTable.Find(SearchValue, "ซัพพลายเออร์, ผู้ซื้อ");


6. หากคุณต้องการค้นหาเหตุการณ์ทั้งหมดในตารางค่า:
เราใช้โครงสร้างการค้นหา

SearchStructure = โครงสร้าง ("พนักงาน", SearchValue);
อาร์เรย์ของ FoundRows = ValueTable.FindRows(SearchStructure);


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

7. วิธีวนซ้ำตารางค่าตามลำดับแบบสุ่ม

สำหรับแต่ละแถวปัจจุบันจาก Table of Values ​​Loop
รายงาน (CurrentRow.Name);
สิ้นสุดรอบ;

สิ่งเดียวกันโดยใช้ดัชนี:

SeniorIndex = ValueTable.Quantity() - 1;
สำหรับบัญชี = 0 ถึงรอบ SeniorIndex
รายงาน (TableValues[บัญชี].ชื่อ);
สิ้นสุดรอบ;


8. การลบแถวตารางค่าที่มีอยู่

ValueTable.Delete(แถวที่ต้องการลบ);

โดยดัชนี

ValueTable.Delete(0);


9. การลบคอลัมน์ที่มีอยู่ในตารางค่า

ValueTable.Columns.Delete(คอลัมน์ที่ถูกลบ);


โดยดัชนี

ValueTable.Columns.Delete(0);

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

10. จะเติมตารางค่าได้อย่างไรถ้าชื่อคอลัมน์อยู่ในตัวแปร?

NewRow = ตารางค่าเพิ่ม();
NewRow[ColumnName] = ค่า;


11. จะเติมค่าที่ต้องการให้เต็มคอลัมน์ของตารางค่าได้อย่างไร?
คอลัมน์ค่าสถานะการบัญชีการบัญชีในตารางค่าตารางค่าจะต้องกรอกด้วยค่าเท็จ

ตารางค่า กรอกค่า (False, "Fiscal Accounting Flag");


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

12. ฉันจะกรอกตารางค่า “Receiver Table” ด้วยข้อมูลจากตารางค่า “SourceTable” ได้อย่างไร?

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

ตารางผู้รับ = Source table.Copy();


ตัวเลือกที่สอง: มีตาราง ReceiverTable อยู่ และน่าเสียดายที่ต้องสูญเสียคอลัมน์และข้อจำกัดเกี่ยวกับประเภทข้อมูลของคอลัมน์ แต่คุณต้องกรอกข้อมูลสำหรับคอลัมน์ที่มีชื่อตรงกับชื่อของตารางต้นฉบับ

การถ่ายโอนข้อมูลบางส่วนสำหรับคอลัมน์ที่มีชื่อตรงกัน:

สำหรับแต่ละแถวของ SourceTable จากวงจร SourceTable
FillPropertyValues ​​(NewRow, SourceTableRow);
จุดสิ้นสุดของวงจร


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

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

การคัดลอกข้อมูลแบบเต็มสำหรับคอลัมน์ที่มีชื่อตรงกัน

คอลัมน์เดียวกัน = อาร์เรย์ใหม่ ();

สำหรับแต่ละคอลัมน์จาก SourceTable.Columns Cycle
MatchingColumn = TableReceiver.Columns.Find(Column.Name);

ถ้า MatchingColumn<>ไม่ได้กำหนดแล้ว

// รับคุณสมบัติคอลัมน์
ชื่อ = คอลัมน์ชื่อ;
ValueType = คอลัมน์ ValueType;
ส่วนหัว = คอลัมน์ส่วนหัว;
ความกว้าง = คอลัมน์ความกว้าง;

// แทนที่คอลัมน์ในตารางปลายทาง
ดัชนี = TableReceiver.Columns.Index (MatchingColumn);

TableReceiver.Columns.Delete (ดัชนี);
ReceiverTable.Columns.Insert (ดัชนี ชื่อ ประเภทค่า ส่วนหัว ความกว้าง);

// เพิ่มชื่อถัดไปของคอลัมน์ที่ตรงกันลงในอาร์เรย์
คอลัมน์เดียวกันเพิ่ม(Column.Name);

สิ้นสุดถ้า;

สิ้นสุดรอบ;

// วนไปตามแถวของตารางต้นฉบับ
สำหรับแต่ละแถวของ SourceTable จากวงจร SourceTable

// เพิ่มแถวใหม่ให้กับตารางปลายทาง
NewRow = TableReceiver.Add();

// กรอกค่าในเซลล์ที่ตรงกัน
สำหรับแต่ละคอลัมน์ชื่อจากคอลัมน์ที่มีชื่อเดียวกัน ไซเคิล
NewRow[ColumnName] = SourceTableRow[ColumnName];

สิ้นสุดรอบ;

สิ้นสุดรอบ;


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

13. จะเพิ่มคอลัมน์ลงในตารางค่า “ValueTable” โดยมีข้อ จำกัด ประเภทได้อย่างไร?

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

การเพิ่มคอลัมน์โดยไม่ระบุชนิดข้อมูล

// เพิ่มคอลัมน์โดยไม่มีข้อจำกัดเกี่ยวกับประเภท
ValueTable.Columns.Add("วัตถุ");


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

การเพิ่มคอลัมน์ที่ระบุประเภทข้อมูล

// ข้อจำกัดเกี่ยวกับประเภทข้อมูลคอลัมน์:
// เฉพาะองค์ประกอบของไดเร็กทอรี "คู่สัญญา"
ตารางค่า Values.Columns.Add("บัญชี", คำอธิบายใหม่ของประเภท ("DirectoryLink.Accounts"));


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

การใช้ตัวระบุเพื่อระบุชนิดข้อมูลของคอลัมน์ตารางค่า

// จัดเตรียมและกำหนดข้อจำกัดสำหรับข้อมูลประเภท String
ตัวระบุสตริง = ตัวระบุสตริงใหม่ (20, AllowedLength.Variable);
ValidTypes = NewTypeDescription("สตริง", StringQualifiers);
ValueTable.Columns.Add("NoteStringShort", ValidTypes);


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

การใช้การประกาศประเภทที่มีอยู่เพื่อระบุประเภทข้อมูลของคอลัมน์ตารางค่า

// ส่วนขยายของคำอธิบายประเภทที่ใช้ก่อนหน้านี้
QualifiersNumbers = QualifiersNumbers ใหม่ (10, 2, ValidSign.Non-negative);
DateQualifiers = DateQualifiers ใหม่ (DateParts.Date);
Extended ValidTypes = New TypeDescription (ValidTypes, "Number, Date", Number Qualifiers, Date Qualifiers);

ValueTable.Columns.Add("หมายเหตุ", ExtendedAcceptableTypes);

ตารางค่าในแพลตฟอร์ม 1C 8.3 (8.2) คือชุดค่าสากลที่นักพัฒนาสามารถใช้ในระหว่างการพัฒนาซอฟต์แวร์เพื่อใช้อัลกอริทึมของเขา โดยพื้นฐานแล้วตารางค่า 1C คือชุดค่าไดนามิกที่มีคอลัมน์และคอลัมน์

บทความเกี่ยวกับคอลเลกชันค่าสากลอื่น ๆ ใน 1C

เรียนรู้การเขียนโปรแกรมใน 1C ในหนังสือของฉัน “การเขียนโปรแกรมใน 1C ใน 11 ขั้นตอน”

  1. หนังสือเล่มนี้เขียนด้วยภาษาที่ชัดเจนและเรียบง่าย - สำหรับผู้เริ่มต้น
  2. เรียนรู้ที่จะเข้าใจสถาปัตยกรรม 1C
  3. คุณจะเริ่มเขียนโค้ดในภาษา 1C
  4. เชี่ยวชาญเทคนิคการเขียนโปรแกรมขั้นพื้นฐาน
  5. รวบรวมความรู้ของคุณด้วยความช่วยเหลือของหนังสือปัญหา

คำแนะนำที่ดีเยี่ยมในการพัฒนาแอปพลิเคชัน 1C ที่มีการจัดการ ทั้งสำหรับนักพัฒนามือใหม่และโปรแกรมเมอร์ที่มีประสบการณ์

  1. ภาษาการนำเสนอที่เข้าถึงได้และเข้าใจได้ดีมาก
  2. หนังสือจะถูกส่งทางอีเมลในรูปแบบ PDF สามารถเปิดบนอุปกรณ์ใดก็ได้!
  3. ทำความเข้าใจอุดมการณ์ของแอปพลิเคชัน 1C ที่ได้รับการจัดการ
  4. เรียนรู้วิธีพัฒนาแอปพลิเคชันที่ได้รับการจัดการ
  5. เรียนรู้การพัฒนาแบบฟอร์ม 1C ที่ได้รับการจัดการ
  6. คุณจะสามารถทำงานกับองค์ประกอบพื้นฐานและจำเป็นของแบบฟอร์มที่ได้รับการจัดการได้
  7. การเขียนโปรแกรมภายใต้แอปพลิเคชันที่ได้รับการจัดการจะชัดเจน

รหัสโปรโมชั่นเพื่อรับส่วนลด 15% - 48PVXHeYu


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

คุณสามารถชำระเงินด้วยตนเอง:

Yandex.Money - 410012882996301
เว็บเงิน - R955262494655

เข้าร่วมกลุ่มของฉัน