หน้าที่ของภาษานิพจน์ของระบบการจัดองค์ประกอบข้อมูล เอสเคดี

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


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

ดังนั้น ตอนนี้จึงจำเป็นต้องคำนวณผลรวมสำหรับการจัดกลุ่มข้างต้น (“คลังสินค้า”, “ประเภทคลังสินค้า”) และผลรวมโดยรวม
เมื่อต้องการทำเช่นนี้ ให้ใช้ฟังก์ชัน คำนวณ 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)

ตัวเลือก:

  1. ความหมาย— สำนวนที่ต้องรวมเป็นบรรทัดเดียว
    ถ้าเป็นอาร์เรย์ องค์ประกอบของอาร์เรย์จะรวมกันเป็นสตริง
    หากเป็น ValueTable คอลัมน์และแถวทั้งหมดของตารางจะรวมกันเป็นแถว
  2. ตัวแยกองค์ประกอบ- สตริงที่มีข้อความที่จะใช้เป็น
    ตัวคั่นระหว่างองค์ประกอบอาร์เรย์และแถวตารางค่า ค่าเริ่มต้น – อักขระป้อนบรรทัด
  3. ตัวแยกคอลัมน์-สตริงที่มีข้อความที่จะใช้เป็นตัวคั่น
    ระหว่างคอลัมน์ของตารางค่า ค่าเริ่มต้น ";".

การใช้ Data Composition Scheme (DCS) อย่างเหมาะสมช่วยให้คุณ:

  • ลดเวลาที่ต้องใช้ในการพัฒนารายงานลงอย่างมาก
  • ไม่จำเป็นต้องสร้างตัวจัดการแบบฟอร์มที่ได้รับการจัดการ
  • รับผลลัพธ์ที่สวยงามพร้อมความเป็นไปได้ในการปรับแต่งเพิ่มเติมโดยผู้ใช้

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

เขตข้อมูลจากการคำนวณคืออะไร

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

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

ฟิลด์ที่มีการคำนวณช่วยให้คุณสามารถดำเนินการบางอย่างกับชุดข้อมูลที่สร้างขึ้น:

  • ส่งออกอาร์เรย์ของข้อมูลที่ได้รับจากการร้องขอไปยังเซลล์เฉพาะ โดยรวมหลายบรรทัดไว้ในเซลล์เดียว
  • เข้าถึงฟังก์ชั่นการส่งออกของโมดูลทั่วไป
  • ดำเนินการนิพจน์ต่างๆ ที่พร้อมใช้งานสำหรับภาษาเค้าโครง และใช้ฟังก์ชัน EvaluateExpression พิเศษ

มาดูรายการนี้กัน

อาร์เรย์ของค่าในเซลล์เดียว

มาจำลองสถานการณ์ที่จำเป็นต้องรับหมายเลขเอกสารการรับทั้งหมดสำหรับคู่สัญญาในเซลล์ที่แยกต่างหาก:


ดังนั้นเราจึงได้สร้างฟิลด์การคำนวณเพิ่มเติมในโครงการของเรา


ดังที่คุณเห็นจากตัวอย่างข้างต้น การเพิ่มและประมวลผลฟิลด์จากการคำนวณไม่มีปัญหา เราใช้สองฟังก์ชัน: Array() และ ConnectRows()

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

  1. ตัวแยกองค์ประกอบ – ระบุว่าอักขระตัวใดที่จะแยกองค์ประกอบอาร์เรย์หนึ่งหรือแถวหนึ่งของตารางค่าจากอีกแถวหนึ่ง (ในกรณีของเราเราละเว้นพารามิเตอร์นี้และกำหนดตัวแบ่งบรรทัดตามค่าเริ่มต้น)
  2. ตัวคั่นคอลัมน์ – อักขระที่ใช้แยกคอลัมน์ของตารางค่า (จะใช้เครื่องหมายอัฒภาคเป็นค่าเริ่มต้น)

การเข้าถึงฟังก์ชันการส่งออกของโมดูลทั่วไป

ฟังก์ชันของโมดูลทั่วไปสามารถทำหน้าที่เป็นแหล่งข้อมูลสำหรับการกรอกข้อมูลฟิลด์จากการคำนวณได้

ประเด็นสำคัญบางประการ:

  • ฟังก์ชันจะต้องสามารถส่งออกได้
  • หากฟังก์ชันอยู่ในโมดูลทั่วไปที่มีชุดคุณลักษณะ "Global" ฟังก์ชันดังกล่าวจะถูกเรียกโดยตรงด้วยชื่อ ไม่เช่นนั้นฟังก์ชันจะต้องถูกเรียกตามรูปแบบ "ชื่อโมดูลที่ใช้ร่วมกัน" "ชื่อของฟังก์ชันที่จะเรียกใช้"

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


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

สำนวนภาษาเค้าโครง

บ่อยครั้งในงานของนักพัฒนาสถานการณ์เกิดขึ้นเมื่อจำเป็นต้องแสดงผลการแบ่งในฟิลด์ ACS:

  1. คำนวณต้นทุนเฉลี่ยของสินค้า
  2. ความสนใจทุกประเภท
  3. การคำนวณรายได้เฉลี่ย ฯลฯ

เพื่อหลีกเลี่ยงปัญหา ในกรณีเหล่านี้ แนะนำให้ป้อนการทดสอบการหารด้วย 0 ลงในช่องที่คำนวณ

ซึ่งสามารถทำได้โดยใช้การก่อสร้าง “ทางเลือกเมื่อ….จากนั้น… มิฉะนั้น… สิ้นสุด”

ในตอนท้าย มีคำไม่กี่คำเกี่ยวกับฟังก์ชันที่ค่อนข้างใหม่ CalculateExpression() ด้วยความช่วยเหลือเป็นพิเศษ คุณสามารถคำนวณความเบี่ยงเบนของต้นทุนระหว่างบรรทัดปัจจุบันและก่อนหน้า ยอดคงเหลือสะสม ฯลฯ

สมมติว่าคุณสามารถรับผลรวมเอกสารจากบรรทัดก่อนหน้าของคำขอของเราโดยระบุค่า คำนวณนิพจน์ ("ผลรวมเอกสาร", "ผลรวมก่อนหน้า") ในช่อง "นิพจน์"

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

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

รูปที่ 1. แบบสอบถามชุดข้อมูล
บนแท็บ "ช่องจากการคำนวณ" ให้เพิ่มช่องจากการคำนวณที่เรียกว่า TabularPart และระบุสตริงว่างในคอลัมน์ Expression (ดูรูปที่ 2)
ฟิลด์จากการคำนวณของเราจะถูกใช้เป็นทรัพยากร ดังนั้นบนแท็บ "ทรัพยากร" เราจึงตั้งค่านิพจน์การจัดกลุ่ม: ConnectRows(Array(Products.Nomenclature),"") นอกจากนี้เรายังระบุว่าต้องคำนวณทรัพยากรนี้โดยใช้ฟิลด์ลิงก์ (ดูรูปที่ 3)
ผลลัพธ์ของรายงาน:
ข้อเสียคือการใช้การจัดกลุ่ม ในกรณีของเรา การจัดกลุ่มจะดำเนินการโดยแอตทริบิวต์ Link มิฉะนั้นจะไม่ทำงาน การมีกลุ่มทำให้เกิดข้อจำกัดบางประการในการตั้งค่าเอาต์พุตข้อมูล (ดูรูปที่ 4)

2) การเรียกใช้ฟังก์ชันของคุณเองจากโมดูลทั่วไป

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

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


รูปที่ 6. แบบสอบถามชุดข้อมูล
มาสร้างโมดูลทั่วไป _Demo Work WITH Reports และเขียนฟังก์ชันส่งออก รับรายการผลิตภัณฑ์สำหรับรายงาน() ดูโค้ดฟังก์ชันด้านล่าง
บนแท็บ "เขตข้อมูลจากการคำนวณ" เพิ่มเขตข้อมูลจากการคำนวณที่เรียกว่า TabularPart และในคอลัมน์ Expression เราจะระบุการเรียกใช้ฟังก์ชันจากโมดูลทั่วไป (ดูรูปที่ 2):
_การสาธิตการทำงานกับรายงาน รับรายการผลิตภัณฑ์สำหรับรายงาน (ลิงก์)

ไปที่แท็บ "การตั้งค่า" และสร้างการตั้งค่าสำหรับเอาต์พุตข้อมูลซึ่งจะเป็นบันทึกโดยละเอียด (ดูรูปที่ 8)
ผลลัพธ์ของรายงาน:

ดาวน์โหลดรายงานตัวอย่าง

สิ่งที่คุณต้องรู้เมื่อใช้วิธีนี้:
1) นิพจน์เอ็นจิ้นการจัดองค์ประกอบข้อมูลอาจมีการเรียกใช้ฟังก์ชันของโมดูลการกำหนดค่าทั่วไปทั่วโลก ตัวอย่างเช่น:
ชื่อย่อ(ลิงค์, วันที่, หมายเลข)
2) เมื่อสร้างรายงานโดยทางโปรแกรมจะอนุญาตให้ใช้ฟังก์ชันของโมดูลทั่วไปได้ก็ต่อเมื่อมีการระบุพารามิเตอร์ที่เกี่ยวข้องของตัวประมวลผลองค์ประกอบข้อมูล (พารามิเตอร์ที่ 4):
CompositionProcessor = ใหม่ DataCompositionProcessor;
LayoutProcessor.Initialize (LayoutLayout, DecryptionData, True);
3) ไม่สามารถใช้ฟังก์ชันของโมดูลทั่วไปในนิพจน์ฟิลด์แบบกำหนดเองได้
4) หากมีข้อยกเว้นเกิดขึ้นเมื่อสร้างรายงานที่ระบุฟังก์ชันของโมดูลทั่วไป ให้ตรวจสอบบริบทการดำเนินการของโมดูล (ดูรูปที่ 9)

คำอธิบายของฟังก์ชั่นที่ใช้

ConnectRows(ค่า, ItemSeparator, ColumnSeparator)- ออกแบบมาเพื่อรวมสายเป็นบรรทัดเดียว
  • ค่า - นิพจน์ที่ต้องรวมเป็นบรรทัดเดียว ถ้าเป็นอาร์เรย์ องค์ประกอบของอาร์เรย์จะรวมกันเป็นสตริง หากเป็น ValueTable คอลัมน์และแถวทั้งหมดของตารางจะรวมกันเป็นแถว
  • ตัวแยกองค์ประกอบ - สตริงที่มีข้อความที่จะใช้เป็นตัวคั่นระหว่างองค์ประกอบอาร์เรย์และแถวของตารางค่า ค่าเริ่มต้น – อักขระป้อนบรรทัด
  • ตัวคั่นคอลัมน์ - สตริงที่มีข้อความที่จะใช้เป็นตัวคั่นระหว่างคอลัมน์ของตารางค่า ค่าเริ่มต้น "; ".
อาร์เรย์ (นิพจน์ [หลากหลาย])- คุณสามารถใช้ตารางค่าเป็นพารามิเตอร์ได้ ในกรณีนี้ ผลลัพธ์ของฟังก์ชันจะเป็นอาร์เรย์ที่มีค่าของคอลัมน์แรกของตารางค่าที่ส่งผ่านเป็นพารามิเตอร์ หากนิพจน์มีฟังก์ชัน Array นิพจน์นั้นจะถือเป็นนิพจน์รวม หากมีการระบุคีย์เวิร์ดต่างๆ อาร์เรย์ผลลัพธ์จะไม่มีค่าที่ซ้ำกัน

รับรายการผลิตภัณฑ์สำหรับรายงาน (DocumentLink)- ฟังก์ชั่นสร้างบรรทัดพร้อมรายการสินค้าที่เข้ามา
// ตัวเลือก:
// DocumentLink - DocumentLink.การรับสินค้า - เอกสาร "การรับสินค้า"
// ส่งคืนค่า:
// String - สตริงที่มีรายการสินค้า
ฟังก์ชั่นรับรายการสินค้าเพื่อส่งออกรายงาน (DocumentLink)

รายการสินค้า = "";

สำหรับแต่ละบรรทัด PM จาก DocumentLink.Products Cycle
รายการผลิตภัณฑ์ = รายการผลิตภัณฑ์ + บรรทัด TC.Nomenclature;
รายการผลิตภัณฑ์ = รายการผลิตภัณฑ์ + Symbols.PS;
สิ้นสุดรอบ;

รายการสินค้าคืน;

EndFunction // รับรายการผลิตภัณฑ์สำหรับรายงาน ()