หน้าที่ของภาษานิพจน์ของระบบการจัดองค์ประกอบข้อมูล เอสเคดี
ในบันทึกสั้นๆ นี้ ฉันต้องการแสดงให้เห็นว่าคุณสามารถสรุปค่าในระดับต่างๆ ของการจัดกลุ่มในรายงานโดยใช้ระบบการจัดองค์ประกอบข้อมูลได้อย่างไร
ดังที่แสดงในรูปภาพ เฉพาะในระดับการจัดกลุ่ม "กลุ่มสินค้า" เท่านั้น ทรัพยากร "คำสั่งซื้อ" จะถูกคำนวณ โดยจะแสดงจำนวนที่ต้องสั่งซื้อสำหรับกลุ่มสินค้าปัจจุบันตามเงื่อนไขบางประการ:
ค่านี้สามารถคำนวณได้ในระดับการจัดกลุ่มนี้เท่านั้น เนื่องจากไม่มีค่าสูงหรือต่ำกว่าให้คำนวณ ตัวอย่างเช่น ในระดับบันทึกโดยละเอียด ไม่มีข้อมูลเกี่ยวกับปริมาณสูงสุดในกลุ่ม เนื่องจากข้อมูลนี้ใช้ได้สำหรับกลุ่มโดยรวมเท่านั้น ไม่ใช่สำหรับส่วนประกอบแต่ละส่วน
ดังนั้น ตอนนี้จึงจำเป็นต้องคำนวณผลรวมสำหรับการจัดกลุ่มข้างต้น (“คลังสินค้า”, “ประเภทคลังสินค้า”) และผลรวมโดยรวม
เมื่อต้องการทำเช่นนี้ ให้ใช้ฟังก์ชัน คำนวณ ExpressionWithGroupArray:
ประเมินการแสดงออกกับกลุ่มพันธมิตร (ประเมินผลกับกลุ่มพันธมิตร)
ไวยากรณ์:
ประเมิน ExpressionWithGroupArray(,)
คำอธิบาย:
ฟังก์ชันส่งคืนอาร์เรย์ ซึ่งแต่ละองค์ประกอบจะมีผลลัพธ์ของการประเมินนิพจน์สำหรับการจัดกลุ่มตามฟิลด์ที่ระบุ
เมื่อสร้างโครงร่าง เครื่องมือจัดวางโครงร่างจะแปลงพารามิเตอร์ฟังก์ชันเป็นเงื่อนไขของฟิลด์โครงร่างการจัดองค์ประกอบข้อมูล ตัวอย่างเช่น ฟิลด์บัญชีจะถูกแปลงเป็น DataSet.Account
เมื่อสร้างนิพจน์สำหรับเอาต์พุตของฟิลด์ที่กำหนดเองซึ่งนิพจน์ประกอบด้วยฟังก์ชัน CalculateArrayWithGroupArray() เท่านั้น ตัวสร้างเค้าโครงจะสร้างนิพจน์เอาต์พุตเพื่อให้ข้อมูลเอาต์พุตได้รับการสั่งซื้อ ตัวอย่างเช่น สำหรับฟิลด์แบบกำหนดเองที่มีนิพจน์:
CalculateExpressionWithGroupArray("จำนวน (จำนวนการหมุนเวียน)", "คู่สัญญา")
ตัวสร้างเค้าโครงจะสร้างนิพจน์ต่อไปนี้สำหรับเอาต์พุต:
ConnectRows(Array(Order(CalculateExpressionWithGroupingValueTable("View(Sum(DataSet.AmountTurnover)),Sum(DataSet.AmountTurnover)",,"DataSet.Account"),"2")))
ตัวเลือก:
ประเภท: สตริง. นิพจน์ที่จะประเมิน บรรทัด ตัวอย่างเช่น จำนวน(จำนวนเทิร์นโอเวอร์)
ประเภท: สตริง. การจัดกลุ่มนิพจน์ฟิลด์ – นิพจน์ของการจัดกลุ่มฟิลด์ คั่นด้วยเครื่องหมายจุลภาค เช่น ผู้รับเหมา, พรรค.
ประเภท: สตริง. นิพจน์ที่อธิบายการเลือกที่ใช้กับเรกคอร์ดรายละเอียด นิพจน์ไม่รองรับการใช้ฟังก์ชันการรวม ตัวอย่างเช่น DeleteFlag = False
ประเภท: สตริง. นิพจน์ที่อธิบายการเลือกที่ใช้กับเรกคอร์ดกลุ่ม ตัวอย่างเช่น จำนวน(จำนวนการหมุนเวียน) > &พารามิเตอร์1
ตัวอย่าง:
สูงสุด(CalculateExpressionWithGroupArray("จำนวน(จำนวนการหมุนเวียน)", "คู่สัญญา"));
คำอธิบายโดยละเอียดของไวยากรณ์ของฟังก์ชันสามารถดูได้ที่ http://its.1c.ru/db/v837doc#bookmark:dev:TI000000582
ตอนนี้สำหรับการคำนวณเราทำซ้ำฟิลด์ "คำสั่งซื้อ" ด้วยค่าที่แตกต่างกัน "คำนวณโดย ... " โดยใช้นิพจน์ต่อไปนี้ โปรดทราบว่าในแต่ละระดับที่สูงกว่าจะใช้ค่าของระดับที่ต่ำกว่าการจัดกลุ่ม .
เป็นผลให้เราได้รับการก่อสร้างดังต่อไปนี้:
ในแง่ของการเปิดตัว 8.2.14 ที่กำลังจะมาถึง ฉันจะพยายามอธิบายฟังก์ชันใหม่บางอย่างของระบบการจัดองค์ประกอบข้อมูล
เปิดไดอะแกรมเค้าโครงข้อมูล โดยเฉพาะอย่างยิ่งในรายงานภายนอก เพื่อให้การแก้ไขง่ายขึ้น
เราเพิ่มชุดข้อมูลของประเภทแบบสอบถามและเขียนแบบสอบถามแบบง่าย ๆ ด้วยตนเองหรือใช้ตัวออกแบบแบบสอบถาม:
1. ตั้งค่าคำขอในระบบควบคุมการเข้าออก
2. ตั้งค่าฟิลด์ที่คำนวณได้ในระบบควบคุมการเข้าออก
3. กำหนดโครงร่างข้อมูลบนแท็บการตั้งค่า
4. เปิดตัว 1C Enterprise 8.2.14 เปิดรายงาน เราสร้างเราได้รับ
คำอธิบายของฟังก์ชั่นใหม่:
1. วันที่ปัจจุบัน()
ส่งกลับวันที่ของระบบ เมื่อเขียนเค้าโครงเค้าโครง ในนิพจน์ทั้งหมดที่มีอยู่ในเค้าโครง ฟังก์ชัน CurrentDate() จะถูกแทนที่ด้วยค่าของวันที่ปัจจุบัน
2. การแสดงออกทางคอมพิวเตอร์()
ไวยากรณ์:
คำนวณนิพจน์(,)
คำอธิบาย:
ฟังก์ชันนี้ออกแบบมาเพื่อประเมินนิพจน์ในบริบทของการจัดกลุ่มบางกลุ่ม
ฟังก์ชันจะคำนึงถึงการเลือกการจัดกลุ่ม แต่ไม่คำนึงถึงการเลือกแบบลำดับชั้น
ฟังก์ชันนี้ไม่สามารถใช้กับการจัดกลุ่มในการเลือกกลุ่มของการจัดกลุ่มนั้นได้ ตัวอย่างเช่น ในการเลือกการจัดกลุ่มระบบการตั้งชื่อ คุณจะไม่สามารถใช้นิพจน์ได้ CalculateExpression("ผลรวม(ผลรวมมูลค่าการซื้อขาย)", "ผลรวมทั้งหมด") > 1,000- แต่นิพจน์ดังกล่าวสามารถใช้ในการเลือกแบบลำดับชั้นได้
หากบันทึกสิ้นสุดอยู่หน้าบันทึกเริ่มต้น จะถือว่าไม่มีบันทึกสำหรับการคำนวณข้อมูลโดยละเอียดและการคำนวณฟังก์ชันรวม
เมื่อคำนวณนิพจน์ช่วงเวลาสำหรับผลรวมทั้งหมด (พารามิเตอร์การจัดกลุ่มถูกตั้งค่าเป็น GrandTotal) จะถือว่าไม่มีบันทึกสำหรับการคำนวณข้อมูลโดยละเอียดและการคำนวณฟังก์ชันการรวม
ตัวเชื่อมโยงเค้าโครงเมื่อสร้างนิพจน์ฟังก์ชัน คำนวณนิพจน์ถ้านิพจน์การเรียงลำดับมีฟิลด์ที่ไม่สามารถใช้ในการจัดกลุ่มได้ ให้แทนที่ฟังก์ชัน คำนวณนิพจน์บน โมฆะ.
ตัวเลือก
พิมพ์: เส้น- นิพจน์ที่จะประเมิน
พิมพ์: เส้น- ประกอบด้วยชื่อของการจัดกลุ่มในบริบทที่จะประเมินนิพจน์ ถ้าใช้สตริงว่างเป็นชื่อการจัดกลุ่ม การคำนวณจะดำเนินการในบริบทของการจัดกลุ่มปัจจุบัน ถ้าใช้สตริง GeneralTotal เป็นชื่อกลุ่ม การคำนวณจะดำเนินการในบริบทของผลรวมทั้งหมด มิฉะนั้น การคำนวณจะดำเนินการในบริบทของการจัดกลุ่มหลักที่มีชื่อเดียวกัน
ตัวอย่างเช่น:
ผลรวม(Sales.SumTurnover)/คำนวณ("Sum(Sales.SumTurnover)", "ทั้งหมด")
ในตัวอย่างนี้ ผลลัพธ์จะเป็นอัตราส่วนของผลรวมตามฟิลด์ ยอดขายจำนวนการหมุนเวียนการจัดกลุ่มบันทึกเป็นผลรวมของฟิลด์เดียวกันในเค้าโครงทั้งหมด
พิมพ์: เส้น- พารามิเตอร์สามารถรับค่าต่อไปนี้:
· ผลรวมทั้งสิ้น— นิพจน์จะถูกคำนวณสำหรับบันทึกการจัดกลุ่มทั้งหมด
· ลำดับชั้น— นิพจน์จะถูกประเมินสำหรับเรกคอร์ดลำดับชั้นพาเรนต์ ถ้ามี และสำหรับทั้งกลุ่ม หากไม่มีเรกคอร์ดลำดับชั้นพาเรนต์
· การจัดกลุ่ม— นิพจน์จะได้รับการประเมินสำหรับบันทึกการจัดกลุ่มกลุ่มปัจจุบัน
· การจัดกลุ่มไม่ใช่ทรัพยากร— เมื่อคำนวณฟังก์ชันสำหรับบันทึกกลุ่มตามทรัพยากร นิพจน์จะถูกคำนวณสำหรับบันทึกกลุ่มแรกของการจัดกลุ่มดั้งเดิม
เมื่อคำนวณฟังก์ชัน คำนวณนิพจน์() ด้วยความหมาย การจัดกลุ่มไม่ใช่ทรัพยากรสำหรับบันทึกกลุ่มที่ไม่ได้จัดกลุ่มตามทรัพยากร ฟังก์ชันจะคำนวณในลักษณะเดียวกับที่จะคำนวณหากค่าพารามิเตอร์เท่ากับค่า การจัดกลุ่ม.
ตัวสร้างโครงร่างองค์ประกอบข้อมูล เมื่อสร้างโครงร่างองค์ประกอบข้อมูลเมื่อส่งออกฟิลด์ทรัพยากรที่ใช้จัดกลุ่มกับโครงร่าง ให้วางนิพจน์ในโครงร่างที่คำนวณโดยใช้ฟังก์ชัน คำนวณนิพจน์() ระบุพารามิเตอร์ การจัดกลุ่มไม่ใช่ทรัพยากร- สำหรับทรัพยากรอื่นๆ นิพจน์ทรัพยากรตามปกติจะถูกวางไว้ในการจัดกลุ่มทรัพยากร
พิมพ์: เส้น- ระบุว่าควรเริ่มต้นการบันทึกส่วนใด ควรคำนวณฟังก์ชันนิพจน์รวมใด และบันทึกใดที่จะได้รับค่าฟิลด์นอกฟังก์ชันรวม ค่าอาจเป็นค่าใดค่าหนึ่งต่อไปนี้:
· อันดับแรก
· สุดท้าย (สุดท้าย)
· ก่อนหน้า
· ถัดไป (ถัดไป)
· ปัจจุบัน
· การจำกัดมูลค่า(ค่าขอบเขต) การจำกัดมูลค่า
พิมพ์: เส้น- บ่งชี้ว่าบันทึกส่วนใดที่ควรดำเนินการต่อ ซึ่งฟังก์ชันรวมของนิพจน์ควรถูกคำนวณ ค่าอาจเป็นค่าใดค่าหนึ่งต่อไปนี้:
· อันดับแรก- จำเป็นต้องได้รับบันทึกการจัดกลุ่มครั้งแรก หลังจากคำในวงเล็บคุณสามารถระบุนิพจน์ได้ซึ่งผลลัพธ์จะถูกใช้เป็นค่าชดเชยตั้งแต่จุดเริ่มต้นของการจัดกลุ่ม ค่าผลลัพธ์ต้องเป็นจำนวนเต็มที่มากกว่าศูนย์ ตัวอย่างเช่น First(3) - รับบันทึกที่สามตั้งแต่เริ่มต้นการจัดกลุ่ม
หากเรกคอร์ดแรกอยู่นอกกลุ่ม จะถือว่าไม่มีเรกคอร์ด ตัวอย่างเช่น หากมี 3 เรคคอร์ด และคุณต้องการได้รับ First(4) ก็ถือว่าไม่มีเรคคอร์ด
· สุดท้าย (สุดท้าย)- คุณต้องได้รับบันทึกการจัดกลุ่มล่าสุด หลังจากคำในวงเล็บคุณสามารถระบุนิพจน์ได้ซึ่งผลลัพธ์จะถูกใช้เป็นค่าชดเชยเมื่อสิ้นสุดการจัดกลุ่ม ค่าผลลัพธ์ต้องเป็นจำนวนเต็มที่มากกว่าศูนย์ ตัวอย่างเช่น Last(3) - รับบันทึกที่สามจากท้ายกลุ่ม
หากบันทึกสุดท้ายอยู่นอกกลุ่มจะถือว่าไม่มีบันทึก ตัวอย่างเช่น หากมี 3 เรคคอร์ด และคุณต้องการรับ Last(4) ก็จะถือว่าไม่มีเรคคอร์ด
· ก่อนหน้า- คุณต้องได้รับบันทึกการจัดกลุ่มก่อนหน้า หลังคำในวงเล็บ คุณสามารถระบุนิพจน์ได้ ซึ่งผลลัพธ์จะถูกใช้เป็นค่าชดเชยกลับจากบันทึกการจัดกลุ่มปัจจุบัน ตัวอย่างเช่น Previous(2) - รับข้อมูลก่อนหน้าจากบันทึกก่อนหน้า
หากเรกคอร์ดก่อนหน้าอยู่นอกเหนือการจัดกลุ่ม (เช่น สำหรับเรกคอร์ดการจัดกลุ่มที่สอง คุณต้องได้รับ Previous(3)) ดังนั้นจะได้รับเรกคอร์ดการจัดกลุ่มแรก
เมื่อเรียกข้อมูลบันทึกก่อนหน้าสำหรับผลรวมการจัดกลุ่มจะถือว่าได้รับบันทึกแรก
· ถัดไป (ถัดไป)- คุณต้องได้รับเรกคอร์ดการจัดกลุ่มถัดไป หลังคำในวงเล็บ คุณสามารถระบุนิพจน์ได้ ซึ่งผลลัพธ์จะถูกใช้เป็นค่าชดเชยจากรายการการจัดกลุ่มปัจจุบัน ตัวอย่างเช่น Next(2) - รับรายการถัดไปจากบันทึกถัดไป
หากบันทึกถัดไปไปนอกเหนือการจัดกลุ่มจะถือว่าไม่มีบันทึก ตัวอย่างเช่น หากมี 3 รายการและรายการที่สามได้รับ Next() จะถือว่าไม่มีรายการ
เมื่อได้รับบันทึกถัดไปสำหรับยอดรวมกลุ่มถือว่าไม่มีบันทึก
· ปัจจุบัน- คุณต้องได้รับบันทึกปัจจุบัน
เมื่อดึงข้อมูลผลรวมการจัดกลุ่ม จะได้รับบันทึกแรก
· การจำกัดมูลค่า(ค่าขอบเขต)- ความจำเป็นในการได้รับบันทึกตามค่าที่ระบุ หลังคำว่า การจำกัดมูลค่าในวงเล็บคุณจะต้องระบุนิพจน์ด้วยค่าที่คุณต้องการเริ่มต้นแฟรกเมนต์ซึ่งเป็นฟิลด์ลำดับแรก
เรกคอร์ดแรกที่มีค่าฟิลด์การเรียงลำดับมากกว่าหรือเท่ากับค่าที่ระบุจะถูกส่งกลับเป็นเรกคอร์ด ตัวอย่างเช่น หากใช้ฟิลด์ระยะเวลาเป็นฟิลด์การสั่งซื้อ และมีค่า 01/01/2010, 02/01/2010, 03/01/2010 และคุณต้องการรับ การจำกัดมูลค่า(DateTime(2010, 1, 15))จากนั้นจะได้รับบันทึกวันที่ 02/01/2010
พิมพ์: เส้น- แสดงรายการนิพจน์ คั่นด้วยเครื่องหมายจุลภาค ซึ่งอธิบายกฎการเรียงลำดับ หากไม่ได้ระบุ การจัดลำดับจะดำเนินการในลักษณะเดียวกับการจัดกลุ่มที่มีการประเมินนิพจน์ หลังจากแต่ละนิพจน์ คุณสามารถระบุคำสำคัญได้ อายุ(สำหรับการเรียงลำดับจากน้อยไปหามาก) จากมากไปน้อย(สำหรับการสั่งซื้อจากมากไปน้อย) และ สั่งซื้ออัตโนมัติ(เพื่อเรียงลำดับฟิลด์อ้างอิงตามฟิลด์ที่คุณต้องการเรียงลำดับออบเจ็กต์ที่ถูกอ้างอิง) คำ สั่งซื้ออัตโนมัติสามารถใช้เหมือนกับคำว่า อายุดังนั้นด้วยคำว่า จากมากไปน้อย.
พิมพ์: เส้น- เช่นเดียวกับพารามิเตอร์ การเรียงลำดับ- ใช้เพื่อจัดระเบียบบันทึกแบบลำดับชั้น หากไม่ได้ระบุ ตัวสร้างโครงร่างจะสร้างการเรียงลำดับตามลำดับที่ระบุในพารามิเตอร์ การเรียงลำดับ.
พิมพ์: เส้น- ระบุกฎสำหรับกำหนดเรคคอร์ดก่อนหน้าหรือถัดไป ในกรณีที่มีหลายเรคคอร์ดที่มีมูลค่าการเรียงลำดับเหมือนกัน:
· แยกกันบ่งชี้ว่ามีการใช้ลำดับของบันทึกที่เรียงลำดับเพื่อกำหนดบันทึกก่อนหน้าและถัดไป ค่าเริ่มต้น
· ด้วยกันบ่งชี้ว่าบันทึกก่อนหน้าและถัดไปถูกกำหนดตามค่าของนิพจน์การเรียงลำดับ
ตัวอย่างเช่น หากลำดับผลลัพธ์เรียงลำดับตามวันที่:
№ | วันที่ | ชื่อเต็ม | ความหมาย |
1 | 1 มกราคม 2544 |
อีวานอฟ เอ็ม. |
10 |
2 | 02 มกราคม 2544 | เปตรอฟ เอส. | 20 |
3 | 03 มกราคม 2544 | ซิโดรอฟ อาร์. | 30 |
4 | 04 มกราคม 2544 | เปตรอฟ เอส. | 40 |
แยกกัน, ที่:
§ รายการก่อนหน้าของรายการ 3 จะเป็นรายการ 2
ปัจจุบันปัจจุบัน(ตามพารามิเตอร์ เริ่มและ จบ) จากนั้นสำหรับบันทึก 2 ส่วนนี้จะประกอบด้วยหนึ่งระเบียน 2 นิพจน์จะเท่ากับ 20
หากค่าพารามิเตอร์เป็น ด้วยกัน, ที่:
§ รายการก่อนหน้าของรายการ 3 จะเป็นรายการ 1
§ ถ้าส่วนการคำนวณถูกกำหนดเป็น ปัจจุบันปัจจุบัน(ตามพารามิเตอร์ เริ่มและ จบ) จากนั้นสำหรับบันทึก 2 ส่วนนี้จะประกอบด้วยบันทึก 2 และ 3 นิพจน์ CalculateExpression("ผลรวม(มูลค่า)", ปัจจุบัน, ปัจจุบัน)จะเท่ากับ 50
เมื่อระบุค่าพารามิเตอร์เท่ากับ ด้วยกันในพารามิเตอร์ เริ่มและ จบคุณไม่สามารถระบุออฟเซ็ตสำหรับตำแหน่งได้ อันดับแรก สุดท้าย ก่อนหน้า ถัดไป.
CalculateExpression("Sum(SumTurnover)", "First", "ปัจจุบัน")
หากคุณต้องการรับค่าการจัดกลุ่มในบรรทัดก่อนหน้า คุณสามารถใช้นิพจน์ต่อไปนี้:
CalculateExpression("อัตรา", "ก่อนหน้า")
รายการ ใหม่ฟังก์ชั่น:คำนวณ ExpressionWithGroupArray(,) -
ฟังก์ชันส่งคืนอาร์เรย์ ซึ่งแต่ละองค์ประกอบจะมีผลลัพธ์ของการประเมินนิพจน์สำหรับการจัดกลุ่มตามฟิลด์ที่ระบุ
คำนวณ ExpressionWithGroupValueTable(,) -
ฟังก์ชันส่งคืนตารางค่า แต่ละแถวประกอบด้วยผลลัพธ์ของการประเมินนิพจน์สำหรับการจัดกลุ่มตามฟิลด์ที่ระบุ
เติมมูลค่าแล้ว() - ส่งกลับค่า True หากค่าเป็นค่าอื่นที่ไม่ใช่ค่าเริ่มต้นของประเภทนี้ นอกเหนือจากค่า NULL นอกเหนือจากการอ้างอิงว่าง นอกเหนือจากที่ไม่ได้กำหนด ค่าบูลีนจะถูกตรวจสอบสำหรับค่า NULL ตรวจสอบสตริงว่าไม่มีอักขระที่ไม่ใช่ช่องว่างหรือไม่
รูปแบบ(, ) - รับสตริงที่จัดรูปแบบของค่าที่ส่งผ่าน สตริงรูปแบบถูกตั้งค่าตามสตริงรูปแบบของระบบ 1C:Enterprise
สตริงย่อย(, , ) - ฟังก์ชั่นนี้ออกแบบมาเพื่อแยกสตริงย่อยออกจากสตริง
ความยาวสาย() - ฟังก์ชันนี้ออกแบบมาเพื่อกำหนดความยาวของสตริง พารามิเตอร์คือนิพจน์สตริง
เส้น() - ถ้าอาร์เรย์ถูกส่งผ่านเป็นพารามิเตอร์ ฟังก์ชันจะส่งกลับสตริงที่มีการแทนค่าสตริงขององค์ประกอบอาร์เรย์ทั้งหมด โดยคั่นด้วยอักขระ "; " หากส่งตารางค่าเป็นพารามิเตอร์ ฟังก์ชันจะส่งกลับสตริงที่มีการแทนค่าสตริงของแถวทั้งหมดของตารางค่า โดยการแสดงเซลล์ของแต่ละแถวคั่นด้วยอักขระ ";" และแถวด้วยการขึ้นบรรทัดใหม่ อักขระ. หากการแสดงสตริงขององค์ประกอบว่างเปล่า สตริงจะแสดงแทนการแสดง
ขอให้เป็นวันที่ดีผู้อ่านบล็อกของเรา! วันนี้ผมอยากจะเล่าให้คุณฟังโดยใช้ตัวอย่างจริงว่าอย่างไร
ใช้ฟังก์ชัน ACS Array และ JoinStrings- ในบทความเกี่ยวกับ
มีการกล่าวถึงวิธีการทำงานด้วยเล็กน้อย
บนบุ๊กมาร์ก
ได้ถูกอธิบายไว้แล้วเช่นกันว่า
โดยใช้แท็บ "ทรัพยากร" วันนี้เราจะให้ความสนใจกับสิ่งเหล่านี้อีกครั้ง
บุ๊กมาร์กตามหัวข้อของเรา
ลักษณะที่ปรากฏของตัวอย่างรายงาน 1C โดยใช้ฟังก์ชัน ACS สองฟังก์ชัน อาร์เรย์และ เชื่อมต่อแถวต่อไป:
คำชี้แจงปัญหาในการใช้ฟังก์ชัน ACS Array และ JoinStrings
ภารกิจ: คุณต้องแทรกหมายเลขการขายทั้งหมดสำหรับผลิตภัณฑ์หนึ่งรายการลงในเซลล์เดียว
บางอย่างเช่น: ระบบการตั้งชื่อ | ปริมาณ | 001, 002 ฯลฯ -
เราจะใช้คำขอในการลงทะเบียนการสะสม "การรับรู้ของ TMZ"
เลือก
การนำ TMZ ไปใช้ นายทะเบียน. ตัวเลข,
การนำ TMZ ไปใช้ ศัพท์เฉพาะ
การนำ TMZ ไปใช้ นายทะเบียน
การนำ TMZ ไปใช้ ปริมาณการหมุนเวียน
จาก
ทะเบียนสะสม. การนำ TMZ ไปใช้ การปฏิวัติ
(, , นายทะเบียน, ) วิธีใช้ TMZ
การลงทะเบียนการสะสม "การรับรู้ของ TMZ" มีอยู่ทั้งในการกำหนดค่าการบัญชีและในการกำหนดค่าการจัดการองค์กรการค้า (UTP) ดูวิธีกำหนดค่า USP ในองค์ประกอบไดเรกทอรี "ระบบการตั้งชื่อ" ดังนั้น หลังจากดาวน์โหลด คุณสามารถเรียกใช้รายงานนี้ในการกำหนดค่าทั้งสองเพื่อตรวจสอบฟังก์ชันการทำงานได้
การดำเนินงานโดยใช้ฟังก์ชัน SKD Array และ ConnectRows
มีการใช้ขั้นตอนเดียวกันแต่มีการเพิ่มเติมบางอย่างเพื่อสร้าง
.
คำอธิบายของฟังก์ชัน JoinStrings
เข้าร่วม Strings
ใช้เพื่อเชื่อมสตริงให้เป็นสตริงเดียว
ไวยากรณ์:
ConnectRows(ค่า, ItemSeparator, ColumnSeparator)
ตัวเลือก:
- ความหมาย— สำนวนที่ต้องรวมเป็นบรรทัดเดียว
ถ้าเป็นอาร์เรย์ องค์ประกอบของอาร์เรย์จะรวมกันเป็นสตริง
หากเป็น ValueTable คอลัมน์และแถวทั้งหมดของตารางจะรวมกันเป็นแถว - ตัวแยกองค์ประกอบ- สตริงที่มีข้อความที่จะใช้เป็น
ตัวคั่นระหว่างองค์ประกอบอาร์เรย์และแถวตารางค่า ค่าเริ่มต้น – อักขระป้อนบรรทัด - ตัวแยกคอลัมน์-สตริงที่มีข้อความที่จะใช้เป็นตัวคั่น
ระหว่างคอลัมน์ของตารางค่า ค่าเริ่มต้น ";".
การใช้ Data Composition Scheme (DCS) อย่างเหมาะสมช่วยให้คุณ:
- ลดเวลาที่ต้องใช้ในการพัฒนารายงานลงอย่างมาก
- ไม่จำเป็นต้องสร้างตัวจัดการแบบฟอร์มที่ได้รับการจัดการ
- รับผลลัพธ์ที่สวยงามพร้อมความเป็นไปได้ในการปรับแต่งเพิ่มเติมโดยผู้ใช้
แต่ไม่ใช่นักพัฒนาทุกคนที่จะใช้ประโยชน์จากความสามารถของโครงการให้เกิดประโยชน์สูงสุด เนื่องจากการตั้งค่าทั้งหมดไม่ชัดเจนและใช้งานง่าย โดยเฉพาะอย่างยิ่ง หลายคนรู้ว่าใน 1C SKD มีเขตข้อมูลจากการคำนวณ แต่พวกเขาไม่เข้าใจขอบเขตการใช้งานและวิธีการทำงานกับเขตข้อมูลเหล่านั้นอย่างถ่องแท้
เขตข้อมูลจากการคำนวณคืออะไร
ในกรณีส่วนใหญ่ แหล่งที่มาของข้อมูลในไดอะแกรมโครงร่างจะเป็นแบบสอบถาม โดยหลักการแล้ว ภายในแบบสอบถามนั้น คุณสามารถใช้สูตร โครงสร้าง และนิพจน์ต่างๆ ได้แล้ว คำถามทั่วไปเกิดขึ้น: เหตุใดเราจึงต้องมีฟังก์ชันการทำงานที่ซ้ำกัน
ความจริงก็คือระบบควบคุมการเข้าใช้งานเป็นมากกว่าการแสดงผลลัพธ์ของแบบสอบถามและมองเห็นได้ชัดเจนจากแบบฟอร์มการสร้างไดอะแกรม (รูปที่ 1)
ฟิลด์ที่มีการคำนวณช่วยให้คุณสามารถดำเนินการบางอย่างกับชุดข้อมูลที่สร้างขึ้น:
- ส่งออกอาร์เรย์ของข้อมูลที่ได้รับจากการร้องขอไปยังเซลล์เฉพาะ โดยรวมหลายบรรทัดไว้ในเซลล์เดียว
- เข้าถึงฟังก์ชั่นการส่งออกของโมดูลทั่วไป
- ดำเนินการนิพจน์ต่างๆ ที่พร้อมใช้งานสำหรับภาษาเค้าโครง และใช้ฟังก์ชัน EvaluateExpression พิเศษ
มาดูรายการนี้กัน
อาร์เรย์ของค่าในเซลล์เดียว
มาจำลองสถานการณ์ที่จำเป็นต้องรับหมายเลขเอกสารการรับทั้งหมดสำหรับคู่สัญญาในเซลล์ที่แยกต่างหาก:
ดังนั้นเราจึงได้สร้างฟิลด์การคำนวณเพิ่มเติมในโครงการของเรา
ดังที่คุณเห็นจากตัวอย่างข้างต้น การเพิ่มและประมวลผลฟิลด์จากการคำนวณไม่มีปัญหา เราใช้สองฟังก์ชัน: Array() และ ConnectRows()
คำไม่กี่คำเกี่ยวกับหลัง นอกจากพารามิเตอร์ตัวแรกที่ระบุตัวระบุของอาร์เรย์ค่าหรือค่าแล้วยังสามารถตั้งค่าได้อีกสองตัว:
- ตัวแยกองค์ประกอบ – ระบุว่าอักขระตัวใดที่จะแยกองค์ประกอบอาร์เรย์หนึ่งหรือแถวหนึ่งของตารางค่าจากอีกแถวหนึ่ง (ในกรณีของเราเราละเว้นพารามิเตอร์นี้และกำหนดตัวแบ่งบรรทัดตามค่าเริ่มต้น)
- ตัวคั่นคอลัมน์ – อักขระที่ใช้แยกคอลัมน์ของตารางค่า (จะใช้เครื่องหมายอัฒภาคเป็นค่าเริ่มต้น)
การเข้าถึงฟังก์ชันการส่งออกของโมดูลทั่วไป
ฟังก์ชันของโมดูลทั่วไปสามารถทำหน้าที่เป็นแหล่งข้อมูลสำหรับการกรอกข้อมูลฟิลด์จากการคำนวณได้
ประเด็นสำคัญบางประการ:
- ฟังก์ชันจะต้องสามารถส่งออกได้
- หากฟังก์ชันอยู่ในโมดูลทั่วไปที่มีชุดคุณลักษณะ "Global" ฟังก์ชันดังกล่าวจะถูกเรียกโดยตรงด้วยชื่อ ไม่เช่นนั้นฟังก์ชันจะต้องถูกเรียกตามรูปแบบ "ชื่อโมดูลที่ใช้ร่วมกัน" "ชื่อของฟังก์ชันที่จะเรียกใช้"
เป็นตัวอย่างการใช้งาน เราจะรับคำขอเอกสารใบเสร็จเดียวกันและแสดงในคอลัมน์แยกต่างหาก เราจะไม่อธิบายคำขอโดยตรง เราจะย้ายไปยังฟิลด์ที่คำนวณโดยตรง:
ดังนั้นเราจึงเห็นว่าเกือบทุกตัวประมวลผลข้อมูลสามารถเริ่มต้นได้จากระบบควบคุมการเข้าถึงซึ่งจะขยายความเป็นไปได้ในการใช้โครงร่างอย่างมาก
สำนวนภาษาเค้าโครง
บ่อยครั้งในงานของนักพัฒนาสถานการณ์เกิดขึ้นเมื่อจำเป็นต้องแสดงผลการแบ่งในฟิลด์ ACS:
- คำนวณต้นทุนเฉลี่ยของสินค้า
- ความสนใจทุกประเภท
- การคำนวณรายได้เฉลี่ย ฯลฯ
เพื่อหลีกเลี่ยงปัญหา ในกรณีเหล่านี้ แนะนำให้ป้อนการทดสอบการหารด้วย 0 ลงในช่องที่คำนวณ
ซึ่งสามารถทำได้โดยใช้การก่อสร้าง “ทางเลือกเมื่อ….จากนั้น… มิฉะนั้น… สิ้นสุด”
ในตอนท้าย มีคำไม่กี่คำเกี่ยวกับฟังก์ชันที่ค่อนข้างใหม่ CalculateExpression() ด้วยความช่วยเหลือเป็นพิเศษ คุณสามารถคำนวณความเบี่ยงเบนของต้นทุนระหว่างบรรทัดปัจจุบันและก่อนหน้า ยอดคงเหลือสะสม ฯลฯ
สมมติว่าคุณสามารถรับผลรวมเอกสารจากบรรทัดก่อนหน้าของคำขอของเราโดยระบุค่า คำนวณนิพจน์ ("ผลรวมเอกสาร", "ผลรวมก่อนหน้า") ในช่อง "นิพจน์"
สำหรับฉันดูเหมือนว่าวิธีนี้จะมีค่าลบ แต่ใช้งานได้ แต่ค่าลบนั้นใหญ่ ลองดูตัวอย่าง: ในการกำหนดค่ามีเอกสาร "การรับสินค้า" โดยมีส่วนที่เป็นตาราง "สินค้า" จำเป็นต้องแสดงในรายงานเอกสารและชื่อของสินค้าที่ได้รับสำหรับแต่ละเอกสารมาสร้างรายงาน เพิ่มรูปแบบโครงร่างข้อมูลพื้นฐาน เพิ่มชุดข้อมูลประเภท "แบบสอบถาม" ให้กับระบบควบคุมการเข้าถึง และสร้างคำของ่ายๆ (ดูรูปที่ 1)
รูปที่ 1. แบบสอบถามชุดข้อมูล |
ฟิลด์จากการคำนวณของเราจะถูกใช้เป็นทรัพยากร ดังนั้นบนแท็บ "ทรัพยากร" เราจึงตั้งค่านิพจน์การจัดกลุ่ม: ConnectRows(Array(Products.Nomenclature),"") นอกจากนี้เรายังระบุว่าต้องคำนวณทรัพยากรนี้โดยใช้ฟิลด์ลิงก์ (ดูรูปที่ 3)
ผลลัพธ์ของรายงาน:
ข้อเสียคือการใช้การจัดกลุ่ม ในกรณีของเรา การจัดกลุ่มจะดำเนินการโดยแอตทริบิวต์ Link มิฉะนั้นจะไม่ทำงาน การมีกลุ่มทำให้เกิดข้อจำกัดบางประการในการตั้งค่าเอาต์พุตข้อมูล (ดูรูปที่ 4)
2) การเรียกใช้ฟังก์ชันของคุณเองจากโมดูลทั่วไป
วิธีที่ง่ายและชัดเจน ปัญหาเดียวคือการหาโมดูลทั่วไปที่เหมาะสมหรือสร้างโมดูลใหม่เพื่อเขียนฟังก์ชันของคุณเอง :) การใช้ลิงก์ที่ส่งผ่านไปยังเอกสาร "การรับสินค้า" ฟังก์ชันจะรับแถวจากส่วนที่เป็นตารางของเอกสารและสร้างแถวพร้อมข้อมูลเกี่ยวกับสินค้าที่ได้รับ มาเริ่มดำเนินการกันเลยมาสร้างรายงาน เพิ่มรูปแบบโครงร่างข้อมูลพื้นฐาน เพิ่มชุดข้อมูลประเภท "แบบสอบถาม" ให้กับระบบควบคุมการเข้าถึง และสร้างคำของ่ายๆ (ดูรูปที่ 6)
รูปที่ 6. แบบสอบถามชุดข้อมูล |
บนแท็บ "เขตข้อมูลจากการคำนวณ" เพิ่มเขตข้อมูลจากการคำนวณที่เรียกว่า TabularPart และในคอลัมน์ Expression เราจะระบุการเรียกใช้ฟังก์ชันจากโมดูลทั่วไป (ดูรูปที่ 2):
_การสาธิตการทำงานกับรายงาน รับรายการผลิตภัณฑ์สำหรับรายงาน (ลิงก์)
ไปที่แท็บ "การตั้งค่า" และสร้างการตั้งค่าสำหรับเอาต์พุตข้อมูลซึ่งจะเป็นบันทึกโดยละเอียด (ดูรูปที่ 8)
ผลลัพธ์ของรายงาน:
ดาวน์โหลดรายงานตัวอย่าง
สิ่งที่คุณต้องรู้เมื่อใช้วิธีนี้:
1) นิพจน์เอ็นจิ้นการจัดองค์ประกอบข้อมูลอาจมีการเรียกใช้ฟังก์ชันของโมดูลการกำหนดค่าทั่วไปทั่วโลก ตัวอย่างเช่น:
ชื่อย่อ(ลิงค์, วันที่, หมายเลข)
2) เมื่อสร้างรายงานโดยทางโปรแกรมจะอนุญาตให้ใช้ฟังก์ชันของโมดูลทั่วไปได้ก็ต่อเมื่อมีการระบุพารามิเตอร์ที่เกี่ยวข้องของตัวประมวลผลองค์ประกอบข้อมูล (พารามิเตอร์ที่ 4):
CompositionProcessor = ใหม่ DataCompositionProcessor;
LayoutProcessor.Initialize (LayoutLayout, DecryptionData, True);
3) ไม่สามารถใช้ฟังก์ชันของโมดูลทั่วไปในนิพจน์ฟิลด์แบบกำหนดเองได้
4) หากมีข้อยกเว้นเกิดขึ้นเมื่อสร้างรายงานที่ระบุฟังก์ชันของโมดูลทั่วไป ให้ตรวจสอบบริบทการดำเนินการของโมดูล (ดูรูปที่ 9)
คำอธิบายของฟังก์ชั่นที่ใช้
ConnectRows(ค่า, ItemSeparator, ColumnSeparator)- ออกแบบมาเพื่อรวมสายเป็นบรรทัดเดียว- ค่า - นิพจน์ที่ต้องรวมเป็นบรรทัดเดียว ถ้าเป็นอาร์เรย์ องค์ประกอบของอาร์เรย์จะรวมกันเป็นสตริง หากเป็น ValueTable คอลัมน์และแถวทั้งหมดของตารางจะรวมกันเป็นแถว
- ตัวแยกองค์ประกอบ - สตริงที่มีข้อความที่จะใช้เป็นตัวคั่นระหว่างองค์ประกอบอาร์เรย์และแถวของตารางค่า ค่าเริ่มต้น – อักขระป้อนบรรทัด
- ตัวคั่นคอลัมน์ - สตริงที่มีข้อความที่จะใช้เป็นตัวคั่นระหว่างคอลัมน์ของตารางค่า ค่าเริ่มต้น "; ".
รับรายการผลิตภัณฑ์สำหรับรายงาน (DocumentLink)- ฟังก์ชั่นสร้างบรรทัดพร้อมรายการสินค้าที่เข้ามา
// ตัวเลือก:
// DocumentLink - DocumentLink.การรับสินค้า - เอกสาร "การรับสินค้า"
// ส่งคืนค่า:
// String - สตริงที่มีรายการสินค้า
ฟังก์ชั่นรับรายการสินค้าเพื่อส่งออกรายงาน (DocumentLink)
รายการสินค้า = "";
สำหรับแต่ละบรรทัด PM จาก DocumentLink.Products Cycle
รายการผลิตภัณฑ์ = รายการผลิตภัณฑ์ + บรรทัด TC.Nomenclature;
รายการผลิตภัณฑ์ = รายการผลิตภัณฑ์ + Symbols.PS;
สิ้นสุดรอบ;
รายการสินค้าคืน;
EndFunction // รับรายการผลิตภัณฑ์สำหรับรายงาน ()