นิพจน์เขตข้อมูลจากการคำนวณ 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()
คำไม่กี่คำเกี่ยวกับหลัง นอกจากพารามิเตอร์แรกที่ระบุตัวระบุของอาร์เรย์ค่าหรือค่าแล้วยังสามารถตั้งค่าได้อีกสองตัว:
- ตัวแยกองค์ประกอบ – ระบุว่าอักขระตัวใดที่จะแยกองค์ประกอบอาร์เรย์หนึ่งหรือแถวหนึ่งของตารางค่าจากอีกแถวหนึ่ง (ในกรณีของเราเราละเว้นพารามิเตอร์นี้และกำหนดตัวแบ่งบรรทัดตามค่าเริ่มต้น)
- ตัวคั่นคอลัมน์ – อักขระที่ใช้แยกคอลัมน์ของตารางค่า (จะใช้เครื่องหมายอัฒภาคเป็นค่าเริ่มต้น)
การเข้าถึงฟังก์ชันการส่งออกของโมดูลทั่วไป
ฟังก์ชันของโมดูลทั่วไปสามารถทำหน้าที่เป็นแหล่งข้อมูลสำหรับการกรอกข้อมูลฟิลด์จากการคำนวณได้
ประเด็นสำคัญบางประการ:
- ฟังก์ชันจะต้องสามารถส่งออกได้
- หากฟังก์ชันอยู่ในโมดูลทั่วไปที่มีชุดคุณลักษณะ "Global" ฟังก์ชันดังกล่าวจะถูกเรียกโดยตรงด้วยชื่อ ไม่เช่นนั้นฟังก์ชันจะต้องถูกเรียกตามรูปแบบ "ชื่อโมดูลที่ใช้ร่วมกัน" "ชื่อของฟังก์ชันที่จะเรียกใช้"
เป็นตัวอย่างการใช้งาน เราจะรับคำขอเอกสารใบเสร็จเดียวกันและแสดงในคอลัมน์แยกต่างหาก เราจะไม่อธิบายคำขอโดยตรง เราจะย้ายไปยังฟิลด์ที่คำนวณโดยตรง:
ดังนั้นเราจึงเห็นว่าเกือบทุกตัวประมวลผลข้อมูลสามารถเริ่มต้นได้จากระบบควบคุมการเข้าถึงซึ่งจะขยายความเป็นไปได้ในการใช้โครงร่างอย่างมาก
สำนวนภาษาเค้าโครง
บ่อยครั้งในงานของนักพัฒนาสถานการณ์เกิดขึ้นเมื่อจำเป็นต้องแสดงผลการแบ่งในฟิลด์ ACS:
- คำนวณต้นทุนเฉลี่ยของสินค้า
- ความสนใจทุกประเภท
- การคำนวณรายได้เฉลี่ย ฯลฯ
เพื่อหลีกเลี่ยงปัญหา ในกรณีเหล่านี้ แนะนำให้ป้อนการทดสอบการหารด้วย 0 ลงในช่องที่คำนวณ
ซึ่งสามารถทำได้โดยใช้การก่อสร้าง “ทางเลือกเมื่อ….จากนั้น… มิฉะนั้น… สิ้นสุด”
สุดท้ายก็ขอกล่าวอีกสักหน่อยว่าเพียงพอแล้ว คุณลักษณะใหม่คำนวณนิพจน์() ด้วยความช่วยเหลือเป็นพิเศษ คุณสามารถคำนวณความเบี่ยงเบนของต้นทุนระหว่างบรรทัดปัจจุบันและก่อนหน้า ยอดคงเหลือสะสม ฯลฯ
สมมติว่าคุณสามารถรับผลรวมเอกสารจากบรรทัดก่อนหน้าของคำขอของเราโดยระบุค่า คำนวณนิพจน์ ("ผลรวมเอกสาร", "ผลรวมก่อนหน้า") ในช่อง "นิพจน์"
คุณ วิธีนี้สำหรับฉันดูเหมือนว่ามีเครื่องหมายลบ แต่ใช้งานได้ แต่เครื่องหมายลบนั้นใหญ่ ลองดูตัวอย่าง: ในการกำหนดค่ามีเอกสาร "การรับสินค้า" อยู่ด้วย ส่วนที่เป็นตาราง“ผลิตภัณฑ์” จำเป็นต้องแสดงในรายงานเอกสารและชื่อของสินค้าที่ได้รับสำหรับแต่ละเอกสารมาสร้างรายงาน เพิ่มรูปแบบโครงร่างข้อมูลพื้นฐาน เพิ่มชุดข้อมูลประเภท "แบบสอบถาม" ให้กับระบบควบคุมการเข้าถึง และสร้างคำของ่ายๆ (ดูรูปที่ 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 // รับรายการผลิตภัณฑ์สำหรับรายงาน ()
เข้าสู่เว็บไซต์ในฐานะนักเรียน
เข้าสู่ระบบในฐานะนักเรียนเพื่อเข้าถึงสื่อการสอนของโรงเรียน
ระบบการจัดองค์ประกอบข้อมูล 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)
พารามิเตอร์:
- ความหมาย— สำนวนที่ต้องรวมเป็นบรรทัดเดียว
หากเป็นอาร์เรย์ องค์ประกอบของอาร์เรย์จะรวมกันเป็นสตริง
หากเป็น ValueTable คอลัมน์และแถวทั้งหมดของตารางจะรวมกันเป็นแถว - ตัวแยกองค์ประกอบ- สตริงที่มีข้อความที่จะใช้เป็น
ตัวคั่นระหว่างองค์ประกอบอาร์เรย์และแถวตารางค่า ค่าเริ่มต้น – อักขระป้อนบรรทัด - ตัวแยกคอลัมน์-สตริงที่มีข้อความที่จะใช้เป็นตัวคั่น
ระหว่างคอลัมน์ของตารางค่า ค่าเริ่มต้นคือ ";"