1 วินาที 8.3 เลือกจากตารางค่า มีวิธีการใดบ้างและวิธีค้นหาค่าหลายค่าพร้อมกัน
ตารางค่าในแพลตฟอร์ม 1C 8.3 (8.2) คือชุดค่าสากลที่นักพัฒนาสามารถใช้ในระหว่างการพัฒนาซอฟต์แวร์เพื่อใช้อัลกอริทึมของเขา โดยพื้นฐานแล้วตารางค่า 1C คือชุดค่าไดนามิกที่มีคอลัมน์และคอลัมน์
บทความเกี่ยวกับคอลเลกชันค่าสากลอื่น ๆ ใน 1C
เรียนรู้การเขียนโปรแกรมใน 1C ในหนังสือของฉัน “การเขียนโปรแกรมใน 1C ใน 11 ขั้นตอน”
- หนังสือเล่มนี้เขียนด้วยภาษาที่ชัดเจนและเรียบง่าย - สำหรับผู้เริ่มต้น
- เรียนรู้ที่จะเข้าใจสถาปัตยกรรม 1C
- คุณจะเริ่มเขียนโค้ดในภาษา 1C
- เชี่ยวชาญเทคนิคการเขียนโปรแกรมขั้นพื้นฐาน
- รวบรวมความรู้ของคุณด้วยความช่วยเหลือของหนังสือปัญหา
คำแนะนำที่ดีเยี่ยมในการพัฒนาแอปพลิเคชัน 1C ที่มีการจัดการ ทั้งสำหรับนักพัฒนามือใหม่และโปรแกรมเมอร์ที่มีประสบการณ์
- ภาษาการนำเสนอที่เข้าถึงได้และเข้าใจได้ดีมาก
- หนังสือจะถูกส่งทางอีเมลในรูปแบบ PDF สามารถเปิดบนอุปกรณ์ใดก็ได้!
- ทำความเข้าใจอุดมการณ์ของแอปพลิเคชัน 1C ที่ได้รับการจัดการ
- เรียนรู้วิธีพัฒนาแอปพลิเคชันที่ได้รับการจัดการ
- เรียนรู้การพัฒนาแบบฟอร์ม 1C ที่ได้รับการจัดการ
- คุณจะสามารถทำงานกับองค์ประกอบพื้นฐานและจำเป็นของแบบฟอร์มที่ได้รับการจัดการได้
- การเขียนโปรแกรมภายใต้แอปพลิเคชันที่ได้รับการจัดการจะชัดเจน
รหัสโปรโมชั่นเพื่อรับส่วนลด 15% - 48PVXHeYu
หากบทเรียนนี้ช่วยคุณแก้ปัญหาใดๆ คุณชอบหรือพบว่ามีประโยชน์ คุณสามารถสนับสนุนโครงการของฉันได้โดยการบริจาคจำนวนเท่าใดก็ได้:
คุณสามารถชำระเงินด้วยตนเอง:
Yandex.Money - 410012882996301
เว็บเงิน - R955262494655
เข้าร่วมกลุ่มของฉัน
สวัสดีผู้อ่าน infostart ทุกท่าน บทความนี้จะกล่าวถึงประเด็นของการสร้างตารางค่าตามอำเภอใจในรูปแบบของแอปพลิเคชันที่ได้รับการจัดการโดยทางโปรแกรม
คุณสมบัติของงาน
ใครก็ตามที่ได้ตั้งโปรแกรมในแอปพลิเคชันทั่วไปมักจะต้องเผชิญกับภารกิจในการรับตารางค่าตามอำเภอใจในแบบฟอร์ม ตารางค่าที่กำหนดเองคือตารางที่ไม่ทราบจำนวนและประเภทของคอลัมน์ล่วงหน้า นั่นคืออาจมี 3 คอลัมน์หรืออาจเป็น 6 หรืออาจเป็น 8 ในแอปพลิเคชันปกติทุกอย่างนั้นง่าย: คุณสามารถวางองค์ประกอบ "ตารางค่า" ลงในแบบฟอร์มการประมวลผลแล้วโอนตารางค่าที่สร้างขึ้น กับองค์ประกอบนี้โดยทางโปรแกรม จากนั้นใช้คำสั่งง่ายๆ ดังนี้
องค์ประกอบแบบฟอร์ม TableField.CreateColumns();
รับตารางค่าสำเร็จรูปในแบบฟอร์ม ดูเหมือนว่ามันจะง่ายกว่านี้
ทั้งหมดนี้อยู่ในแอปพลิเคชันปกติ ในแอปพลิเคชันที่ได้รับการจัดการ ทุกอย่างมีการเปลี่ยนแปลง การสร้างตารางที่กำหนดเองไม่ใช่เรื่องง่าย ตอนนี้คุณต้องกำหนดพารามิเตอร์ตารางค่าในแบบฟอร์มอย่างเข้มงวดหรือสร้างมันขึ้นมาโดยทางโปรแกรม (เพื่ออธิบายอันที่จริงนี่คือสาระสำคัญของแอปพลิเคชันที่ได้รับการจัดการเอง) นี่คือสิ่งที่เราจะพยายามทำ: สร้างตารางค่าตามอำเภอใจในรูปแบบควบคุมโดยทางโปรแกรม
การแก้ปัญหา
สิ่งแรกที่เราต้องทำคือกำหนดว่าตารางจะปรากฏบนแบบฟอร์มอย่างไร สิ่งสำคัญคือคุณไม่จำเป็นต้องสร้างองค์ประกอบแบบฟอร์มใดๆ ในการประมวลผล เราจะสร้างมันขึ้นมาโดยทางโปรแกรมเหมือนกับทั้งตาราง นั่นคือตารางจะถูกอธิบายและสร้างในขณะที่เปิดแบบฟอร์มหรือใช้ปุ่ม - ขึ้นอยู่กับว่าใครต้องการ
การสร้างตารางในแบบฟอร์มเกิดขึ้นผ่านคำอธิบายของตารางค่าเป็นแอตทริบิวต์:
SelectionTypeArray = อาร์เรย์ใหม่; อาร์เรย์ของ SelectionType.Add(Type("ตารางค่า")); ChoiceTypeDescription = TypeDescription ใหม่ (ChoiceTypeArray); อาร์เรย์ของรายละเอียด = อาร์เรย์ใหม่; อาร์เรย์ของแอตทริบิวต์เพิ่ม (แอตทริบิวต์แบบฟอร์มใหม่ ("ตารางกำหนดการ", คำอธิบายของ SelectionType, "", "TZN")); ตอนนี้เราต้องสร้างตารางค่าโปรแกรมที่มีข้อมูล หากได้รับตารางค่าจากการสืบค้นทุกอย่างจะมากหรือน้อยตามลำดับ หากสร้างตารางด้วยตนเอง ความหมายของคอลัมน์ที่จะมีตัวเลขหรือวันที่สามารถสร้างได้ผ่าน "คำอธิบายประเภท" ประเด็นก็คือคอลัมน์ในตารางค่าต้องมีประเภทใดประเภทหนึ่ง ตัวอย่างเช่น หากคาดว่าผู้ใช้จะกรอกข้อมูลในคอลัมน์เหล่านี้แบบโต้ตอบ คุณจะไม่สามารถเพิ่มคอลัมน์ของตารางค่าเพียงชื่อได้ โปรดทราบว่าสิ่งนี้สำคัญมากเพราะ... เราจะโอนประเภทเหล่านี้ไปที่ตารางในแบบฟอร์ม
เราสร้างตารางที่ประกอบด้วยหลายคอลัมน์:
CD = NewDateQualifiers (DateParts.Time); ArrayKD = อาร์เรย์ใหม่; ArrayCD.Add(ประเภท("วันที่")); DescriptionTypesTime = DescriptionTypes ใหม่ (ArrayCD, CD); TZ = ตารางมูลค่าใหม่;
TK.Columns.Add("ด้วย", DescriptionTypesTime);
TK.Columns.Add("ก่อน", DescriptionTypesTime);
TK.Columns.Add("ชื่อ");
TK.Columns.Add("Note"); // ชื่อเต็มและหมายเหตุ - แถว ต่อไปเราจะกรอกตารางโปรแกรม TK ของเราด้วยข้อมูลที่จำเป็น เราได้รับตาราง TK ที่มีค่าที่จำเป็นและพร้อมที่จะโอนไปยังแอตทริบิวต์แบบฟอร์มที่สร้างขึ้น สำหรับแต่ละคอลัมน์จากรอบคอลัมน์ TK
อาร์เรย์ของแอตทริบิวต์เพิ่ม (แอตทริบิวต์แบบฟอร์มใหม่ (Column.Name, Column.ValueType, "ScheduleTable"));สิ้นสุดรอบ;
รายละเอียดการเปลี่ยนแปลง (รายละเอียดอาร์เรย์);
SelectionFieldsTable = Elements.Add("TZN", ประเภท ("FormTable"));
SelectionFieldsTable.DataPath = "ScheduleTable";
SelectionFieldTable.Display = TableDisplay.List;
นี่เป็นการผสมผสานที่เรียบง่ายและโต๊ะของเราก็พร้อมแล้ว
สำหรับแต่ละคอลัมน์จากรอบคอลัมน์ TK
NewElement = Elements.Add(Column.Name, Type("FormField"), SelectionFieldTable);สิ้นสุดรอบ;
NewElement.View = FormFieldView.InputField;
NewElement.DataPath = "ตารางกำหนดการ" + คอลัมน์ชื่อ;
NewElement.Width = 10;
การออกแบบตามเงื่อนไข หากเราต้องการ เราก็เขียนมันด้วยตนเอง เมนูคำสั่ง - ด้วยตนเอง ตัวจัดการตารางก็เขียนด้วยมือเช่นกัน ตัวอย่างเช่น หากต้องการเพิ่มตัวจัดการเหตุการณ์สำหรับตาราง "การเลือก" ให้ทำดังนี้
ตาราง SelectionFields.SetAction("Selection", "TZNSelection");
ในการประมวลผลเหตุการณ์นี้ มีการกำหนดขั้นตอนแยกต่างหากในรูปแบบของขั้นตอน:
&บนไคลเอนต์
ขั้นตอน TKNSelection (TK, SelectedRow, Field, StandardProcessing)
//ตัวจัดการคำสั่ง EndProcedure
โปรดทราบว่าตัวจัดการตารางจะเริ่มทำงานบนไคลเอนต์ ดังนั้น ต้องมีคำสั่งตัวชี้คอมไพเลอร์
&บนไคลเอนต์
สิ่งสุดท้ายที่ฉันต้องการเพิ่มคือหลังจากขั้นตอนเหล่านี้ทั้งหมด อย่าลืมส่งตารางที่เสร็จแล้วไปยังแอตทริบิวต์ของฟอร์ม:
ValueFormAttributes(ToR, "ScheduleTable");
นี่คือสิ่งที่เราได้รับ:
และนี่คือการจัดการกิจกรรม "การคัดเลือก":
คำหลัง.
ฉันหวังว่าบทความนี้จะช่วยโปรแกรมเมอร์ 1C ที่กำลังเริ่มสร้างตารางในแบบฟอร์มโดยทางโปรแกรม
คุณสามารถดาวน์โหลดการประมวลผลที่สร้างตารางค่าโดยทางโปรแกรมและแสดงในรูปแบบที่จัดการได้พร้อมความคิดเห็นที่จะช่วยคุณสร้างตารางของคุณเอง
ค้นหาในตารางค่า 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);
อย่างที่คุณเห็นข้อเสียอย่างเดียวคือคุณไม่สามารถใช้การเปรียบเทียบประเภทอื่นนอกเหนือจาก "เท่ากับ"
ต่อไปนี้เป็นข้อเท็จจริงเล็กๆ น้อยๆ สำหรับผู้เริ่มต้น - ตัวอย่างง่ายๆ ของการทำงานกับตารางค่า:
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
รายงาน (ValueTable[บัญชี].ชื่อ);
สิ้นสุดรอบ;
8. การลบแถวตารางค่าที่มีอยู่
ValueTable.Delete(แถวที่ต้องการลบ);
โดยดัชนี
ValueTable.Delete(0);
9. การลบคอลัมน์ที่มีอยู่ในตารางค่า
ValueTable.Columns.Delete(ColumnToDelete);
โดยดัชนี
ValueTable.Columns.Delete(0);
มีความจำเป็นต้องคำนึงว่าการลบแถว (หรือคอลัมน์) "จากตรงกลาง" ของตารางค่าจะทำให้ดัชนีของแถวที่อยู่ "หลัง" ที่ถูกลบลดลงหนึ่งรายการ
10. จะเติมตารางค่าได้อย่างไรถ้าชื่อคอลัมน์อยู่ในตัวแปร?
NewRow = ValueTable.Add();
NewRow[ColumnName] = ค่า;
11. จะเติมค่าที่ต้องการให้เต็มคอลัมน์ของตารางค่าได้อย่างไร?
คอลัมน์ค่าสถานะการบัญชีการบัญชีในตารางค่าตารางค่าจะต้องกรอกด้วยค่าเท็จ
ตารางค่า กรอกค่า (False, "Fiscal Accounting Flag");
เราใช้เมธอด FillValues() สำหรับตารางค่า พารามิเตอร์แรกคือค่าที่จะกรอก พารามิเตอร์ที่สองคือชื่อของคอลัมน์ที่จะเติม
12. ฉันจะกรอกตารางค่า “Receiver Table” ด้วยข้อมูลจากตารางค่า “SourceTable” ได้อย่างไร?
หากยังไม่มีตารางผู้รับในขณะที่ดำเนินการหรือไม่จำเป็นต้องบันทึกคอลัมน์ก่อนหน้า คุณสามารถสร้างตารางดังกล่าวเป็นสำเนาต้นฉบับที่สมบูรณ์ได้
ตารางผู้รับ = Source table.Copy();
ตัวเลือกที่สอง: มีตาราง ReceiverTable อยู่ และน่าเสียดายที่ต้องสูญเสียคอลัมน์และข้อจำกัดเกี่ยวกับประเภทข้อมูลของคอลัมน์ แต่คุณต้องกรอกข้อมูลสำหรับคอลัมน์ที่มีชื่อตรงกับชื่อของตารางต้นฉบับ
การถ่ายโอนข้อมูลบางส่วนสำหรับคอลัมน์ที่มีชื่อตรงกัน:
สำหรับแต่ละแถวของ SourceTable จากวงจร SourceTable
FillPropertyValues (NewRow, SourceTableRow);
จุดสิ้นสุดของวงจร
สำหรับแต่ละแถวของตารางต้นฉบับ แถวใหม่จะถูกเพิ่มลงในตารางที่ได้รับ และค่าต่างๆ จะถูกกรอกลงในคอลัมน์ของตารางใหม่ที่มีชื่อตรงกับชื่อของคอลัมน์ในตารางต้นฉบับ
หากตารางไม่มีคอลัมน์ที่มีชื่อเหมือนกัน ตารางปลายทางจะมีแถวที่มีค่า Null มากเท่ากับแถวในตารางต้นฉบับ
หากบางคอลัมน์ที่มีชื่อเดียวกันประเภทค่าข้อมูลจากตารางต้นฉบับไม่อยู่ในอาร์เรย์ของประเภทคอลัมน์ที่อนุญาตของตารางปลายทาง เราจะได้ค่าว่างในฟิลด์ดังกล่าว
ลองพิจารณากรณีที่สาม ในกรณีของคอลัมน์ที่มีชื่อเดียวกัน คอลัมน์ของตารางปลายทางจะต้องสอดคล้องกับคอลัมน์ของตารางต้นฉบับอย่างสมบูรณ์
การคัดลอกข้อมูลแบบเต็มสำหรับคอลัมน์ที่มีชื่อตรงกัน
คอลัมน์เดียวกัน = อาร์เรย์ใหม่ ();
สำหรับแต่ละคอลัมน์จาก SourceTable.Columns Cycle
MatchingColumn = TableReceiver.Columns.Find(Column.Name);
หากคอลัมน์ที่ตรงกัน<>ไม่ได้กำหนดแล้ว
// รับคุณสมบัติคอลัมน์
ชื่อ = คอลัมน์ชื่อ;
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("วัตถุ");
คุณสามารถกรอกค่าของพารามิเตอร์ตัวที่สองได้ ที่นั่นคุณต้องส่งคำอธิบายประเภทที่อนุญาตสำหรับคอลัมน์ คำอธิบายสามารถรับได้โดยใช้ Constructor โดยส่งชื่อสตริงของประเภท (หากมีหลายประเภท คั่นด้วยเครื่องหมายจุลภาค) หรืออาร์เรย์ของประเภทที่ถูกต้องเป็นพารามิเตอร์
การเพิ่มคอลัมน์ที่ระบุประเภทข้อมูล
// ข้อจำกัดเกี่ยวกับประเภทข้อมูลคอลัมน์:
// เฉพาะองค์ประกอบของไดเร็กทอรี "คู่สัญญา"
ตารางค่า 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 การทำงานกับตารางจึงถือเป็นจุดเด่น
ตารางใน 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 ได้
โดยคลิกขวาที่พื้นที่ว่างในตารางแล้วเลือกรายการ
ในไคลเอนต์ที่ได้รับการจัดการ (ธิน) การดำเนินการที่คล้ายกันสามารถทำได้โดยใช้รายการเมนู การกระทำทั้งหมด/แสดงรายการ