นิพจน์เขตข้อมูลจากการคำนวณ SKD 1 วินาที หน้าที่ของภาษานิพจน์ของระบบการจัดองค์ประกอบข้อมูล การเปลี่ยนลำดับของคอลัมน์

ในแง่ของการเปิดตัว 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 01 มกราคม 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

สตริงย่อย(, , ) - ฟังก์ชั่นนี้ออกแบบมาเพื่อแยกสตริงย่อยออกจากสตริง

ความยาวสาย() - ฟังก์ชันนี้ออกแบบมาเพื่อกำหนดความยาวของสตริง พารามิเตอร์คือนิพจน์สตริง

เส้น() - ถ้าอาร์เรย์ถูกส่งผ่านเป็นพารามิเตอร์ ฟังก์ชันจะส่งกลับสตริงที่มีการแทนค่าสตริงขององค์ประกอบอาร์เรย์ทั้งหมด โดยคั่นด้วยอักขระ "; " หากส่งตารางค่าเป็นพารามิเตอร์ ฟังก์ชันจะส่งกลับสตริงที่มีการแทนค่าสตริงของแถวทั้งหมดของตารางค่า โดยการแสดงเซลล์ของแต่ละแถวคั่นด้วยอักขระ ";" และแถวด้วยการขึ้นบรรทัดใหม่ อักขระ. หากการแสดงสตริงขององค์ประกอบว่างเปล่า สตริงจะแสดงแทนการแสดง

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

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

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

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

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

มาสร้างรายงาน เพิ่มรูปแบบโครงร่างข้อมูลพื้นฐาน เพิ่มชุดข้อมูลประเภท "แบบสอบถาม" ให้กับระบบควบคุมการเข้าถึง และสร้างคำของ่ายๆ (ดูรูปที่ 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 // รับรายการผลิตภัณฑ์สำหรับรายงาน ()

เข้าสู่เว็บไซต์ในฐานะนักเรียน

เข้าสู่ระบบในฐานะนักเรียนเพื่อเข้าถึงสื่อการสอนของโรงเรียน

ระบบการจัดองค์ประกอบข้อมูล 1C 8.3 สำหรับผู้เริ่มต้น: การนับผลลัพธ์ (แหล่งข้อมูล)

จุดประสงค์ของบทเรียนนี้คือ:

  • เขียนรายงานที่แสดงรายการผลิตภัณฑ์ (สารบบอาหาร) ปริมาณแคลอรี่และรสชาติ
  • จัดกลุ่มผลิตภัณฑ์ตามสี
  • เรียนรู้เกี่ยวกับการสรุป (ทรัพยากร) และฟิลด์ที่มีการคำนวณ

สร้างรายงานใหม่

เช่นเดียวกับบทเรียนก่อนหน้านี้เราเปิดฐานข้อมูล " อาหารสำเร็จรูป"ในตัวปรับแต่งและสร้างรายงานใหม่ผ่านเมนู" ไฟล์"->"ใหม่...":

ประเภทเอกสาร - รายงานภายนอก:

ในแบบฟอร์มตั้งค่ารายงานให้เขียนชื่อ " บทเรียนที่ 3" และกดปุ่ม " เปิดแผนภาพองค์ประกอบข้อมูล":

ปล่อยชื่อสคีมาเริ่มต้นไว้แล้วคลิกปุ่ม " พร้อม":

การเพิ่มคำขอผ่านตัวสร้าง

บนแท็บ " ชุดข้อมูล" คลิก สีเขียวเครื่องหมายบวก และเลือก " เพิ่มชุดข้อมูล - แบบสอบถาม":

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

บน "แท็บ" ตาราง"ลากโต๊ะ" อาหาร" จากคอลัมน์แรกถึงคอลัมน์ที่สอง:

เลือกจากตาราง " อาหาร“ช่องที่เราจะขอ ทำได้โดยลากและวางช่อง” ชื่อ", "รสชาติ", "สี" และ " ปริมาณแคลอรี่" จากคอลัมน์ที่สองถึงคอลัมน์ที่สาม:

มันกลับกลายเป็นเช่นนี้:

กดปุ่ม " ตกลง" - ข้อความคำขอถูกสร้างขึ้นโดยอัตโนมัติ:

การสร้างการตั้งค่าการนำเสนอรายงาน

ไปที่แท็บ " การตั้งค่า" และคลิกที่ ไม้กายสิทธิ์ที่จะโทร ผู้ออกแบบการตั้งค่า:

เลือกประเภทรายงาน " รายการ..." และกดปุ่ม " ต่อไป":

ลากจากคอลัมน์ด้านซ้ายไปทางขวาฟิลด์ที่จะแสดงในรายการแล้วคลิก " ต่อไป":

ลากจากคอลัมน์ด้านซ้ายไปยังฟิลด์ด้านขวา " สี" - มันจะเกิดขึ้น การจัดกลุ่มบรรทัดในรายงาน คลิก " ตกลง":

และนี่คือผลงานของนักออกแบบ ลำดับชั้นของรายงานของเรา:

  • รายงานโดยรวม
  • การจัดกลุ่ม "สี"
  • รายการโดยละเอียด - บรรทัดพร้อมชื่ออาหาร

บันทึกรายงาน (ปุ่ม ดิสเก็ตต์) และ โดยไม่ต้องปิดเราจะเปิดตัวกำหนดค่าในโหมดผู้ใช้ทันที มันกลับกลายเป็นเช่นนี้:

การเปลี่ยนลำดับของคอลัมน์

แต่ขอเถอะ มาเปลี่ยนลำดับกันเถอะคอลัมน์ (ลูกศรขึ้นและลง) เพื่อให้มีลักษณะดังรูปด้านล่าง:

มาบันทึกรายงานและเปิดอีกครั้งในโหมดผู้ใช้:

เยี่ยมเลย ดีขึ้นมาก

มาสรุปเนื้อหาแคลอรี่กันดีกว่า

เป็นการดีที่จะสรุปปริมาณแคลอรี่ของอาหารตามกลุ่ม หากต้องการดูผลรวมแคลอรี่ของผลิตภัณฑ์ทั้งหมด เช่น สีขาวหรือสีเหลือง หรือค้นหาปริมาณแคลอรี่รวมของผลิตภัณฑ์ทั้งหมดในฐานข้อมูล

เพื่อการนี้มีกลไกในการคำนวณทรัพยากร

ไปที่แท็บ " ทรัพยากร“แล้วลากสนาม” ปริมาณแคลอรี่“(เราจะสรุปให้ฟัง) จากคอลัมน์ซ้ายไปขวา

ในกรณีนี้ ในฟิลด์ ให้เลือกนิพจน์จากรายการแบบเลื่อนลง " ปริมาณ(แคลอรี่)" เนื่องจากผลรวมจะเป็นผลรวมขององค์ประกอบทั้งหมดที่รวมอยู่ในผลรวม:

เราบันทึกและสร้างรายงาน:

ตอนนี้เรามีผลลัพธ์สำหรับแต่ละกลุ่มและสำหรับรายงานโดยรวมแล้ว

ลองสรุป (เฉลี่ย) ในรูปแคลอรี่กัน

ตอนนี้เรามาทำให้มันปรากฏในคอลัมน์อื่นกันดีกว่า เฉลี่ยปริมาณแคลอรี่ของผลิตภัณฑ์ตามกลุ่มและในรายงานโดยรวม

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

ในการสร้างฟิลด์ "เสมือน" เราจะใช้กลไกนี้ เขตข้อมูลจากการคำนวณ.

ไปที่แท็บ " เขตข้อมูลจากการคำนวณ" และกด สีเขียวเครื่องหมายบวก:

ในคอลัมน์ " เส้นทางข้อมูล"เราเขียนชื่อของฟิลด์ใหม่ ( ได้อย่างลงตัว, ไม่มีช่องว่าง- ให้เรียกว่า " ปริมาณแคลอรี่เฉลี่ย"และในคอลัมน์" การแสดงออก"เราเขียนชื่อของฟิลด์ที่มีอยู่โดยอิงจากการคำนวณฟิลด์ใหม่ เราเขียนที่นั่น " ปริมาณแคลอรี่".คอลัมน์" หัวเรื่อง" จะถูกกรอกโดยอัตโนมัติ

เราได้เพิ่มฟิลด์ใหม่ (" ปริมาณแคลอรี่เฉลี่ย") แต่จะไม่ปรากฏในรายงานด้วยตัวเอง - คุณต้องโทรอีกครั้ง ผู้ออกแบบการตั้งค่า("ไม้กายสิทธิ์") หรือเพิ่มช่องนี้ ด้วยตนเอง.

มาทำกัน ที่สองทาง. หากต้องการทำสิ่งนี้ให้ไปที่แท็บ " การตั้งค่า", เลือก " รายงาน"(ท้ายที่สุด เราต้องการเพิ่มฟิลด์โดยรวมลงในรายงาน) เลือกแท็บที่ด้านล่าง" ฟิลด์ที่เลือก“แล้วลากสนาม” ปริมาณแคลอรี่เฉลี่ย"จากคอลัมน์ซ้ายไปขวา:

มันกลับกลายเป็นเช่นนี้:

เราบันทึกและสร้างรายงาน:

ฟิลด์ปรากฏขึ้นและเราเห็นว่าค่าของมันคือค่าของฟิลด์ "แคลอรี่" ยอดเยี่ยม!

ในการทำเช่นนี้เราจะใช้กลไกที่เราคุ้นเคยอยู่แล้วอีกครั้ง ทรัพยากร(โดยสรุป). ไปที่แท็บ " ทรัพยากร“แล้วลากสนาม” ปริมาณแคลอรี่เฉลี่ย"จากคอลัมน์ซ้ายไปขวา:

นอกจากนี้ในคอลัมน์ " การแสดงออก"เลือก" เฉลี่ย(เฉลี่ยแคลอรี่)":

เราบันทึกและสร้างรายงาน:

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

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

มาแก้ไขข้อผิดพลาดกัน หากต้องการทำสิ่งนี้ ให้กลับไปที่แท็บ " การตั้งค่า", เลือก " รายการโดยละเอียด" อันดับแรกจากด้านบน (ขั้นตอนที่ 2) จากนั้น " รายการโดยละเอียด“จากด้านล่าง (ขั้นตอนที่ 3) ไปที่บุ๊กมาร์ก” เลือกแล้ว สาขา" และเราจะเห็นองค์ประกอบในคอลัมน์ด้านขวาของมัน " อัตโนมัติ".

องค์ประกอบ " อัตโนมัติ" - นี่ไม่ใช่ฟิลด์เดียว เหล่านี้เป็นหลายฟิลด์ที่จะอยู่ที่นี่โดยอัตโนมัติตามการตั้งค่าระดับที่สูงกว่า

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

องค์ประกอบ " อัตโนมัติ" ขยายออกไปในสาขาต่อไปนี้:

และนี่คือสนามของเรา" ปริมาณแคลอรี่เฉลี่ย“ซึ่งมาจากจุดนั้น” รายงาน“ตอนเราลากเขาไปนั่น. เอาออกเถอะทำเครื่องหมายที่ช่องถัดจากช่องนี้เพื่อลบเอาต์พุต

ขอให้เป็นวันที่ดีผู้อ่านบล็อกของเรา! วันนี้ผมอยากจะเล่าให้ฟังเกี่ยวกับ ตัวอย่างจริง, ยังไง
ใช้ฟังก์ชัน 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. ตัวแยกคอลัมน์-สตริงที่มีข้อความที่จะใช้เป็นตัวคั่น
    ระหว่างคอลัมน์ของตารางค่า ค่าเริ่มต้นคือ ";"