คุณลักษณะในการรับภาพรวมของรายการล่าสุดในการลงทะเบียนข้อมูล คุณลักษณะของการได้รับส่วนแบ่งของรายการล่าสุดในการลงทะเบียนข้อมูล ส่วนของรายการล่าสุดจากเอกสารการลงทะเบียนข้อมูล 1c

/
การดำเนินการประมวลผลข้อมูล

การแก้ไขผลรวมสำหรับการลงทะเบียนข้อมูลเป็นระยะ

ขอบเขตการใช้งาน: แอปพลิเคชันที่ได้รับการจัดการ แอพมือถือแอปพลิเคชันทั่วไป

1.1. สำหรับการลงทะเบียนข้อมูลเป็นระยะ ขอแนะนำให้อนุญาตผลรวมหากตรงตามเงื่อนไขต่อไปนี้ทั้งหมด:

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

หากต้องการดูรายการเงื่อนไขทั้งหมดเมื่อคิวรีใช้ข้อมูลการลงทะเบียนผลรวม โปรดดูเอกสารประกอบสำหรับแพลตฟอร์ม 1C: Enterprise.

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

เลือกรายการ บทความ AS บทความ ระบบการตั้งชื่อราคา ราคาตามราคา, . . . จากไดเรกทอรี ระบบการตั้งชื่อ AS ระบบการตั้งชื่อการเชื่อมต่อด้านซ้าย การลงทะเบียนข้อมูล ราคาระบบการตั้งชื่อ SliceLast(, ราคาวิว = &ประเภทราคา) ราคาอย่างไรระบบการตั้งชื่อราคาซอฟต์แวร์ระบบการตั้งชื่อ ระบบการตั้งชื่อ = ระบบการตั้งชื่อ ลิงค์ . .

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

1.2. นอกจากนี้คุณควรคำนึงถึง ตัวเลือกอื่นเพื่อแก้ไขคำขอต่อทะเบียนเพื่อให้ตรงตามเงื่อนไขเหล่านี้

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

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

2. ในกรณีอื่นๆ ทั้งหมด ไม่ควรอนุญาตให้มีการลงทะเบียนข้อมูลเป็นระยะๆ ก่อนอื่นถ้า

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

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

: ชิ้นแรกและ ชิ้นสุดท้ายลองพิจารณาทำงานกับตารางเสมือนเหล่านี้โดยใช้ 1C ใช้บ่อยกว่ามาก ชิ้นสุดท้ายมาเริ่มกันเลย

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

ทะเบียนประกอบด้วยรายการต่อไปนี้

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

เลือก PriceSliceLast.Period AS ระยะเวลา, PriceSliceLast.Product AS สินค้า, PriceSliceLast.Supplier AS Supplier, PriceSliceLast.Amount AS Amount จากข้อมูลการลงทะเบียน Price.SliceLast AS PriceSliceLast

เนื่องจากไม่ได้ระบุพารามิเตอร์ การแบ่งส่วนจึงดำเนินการในวันที่ปัจจุบัน - 02/01/2017 เป็นผลให้เราได้รับตารางต่อไปนี้

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

สมมติว่าเราจำเป็นต้องทำสิ่งเดียวกัน แต่เราต้องการได้รับบันทึกที่มีวันที่น้อยกว่าหรือเท่ากับ 01/15/2017 ในการดำเนินการนี้ คุณจะต้องเปลี่ยนแถวที่มีตารางสไลซ์ล่าสุดในคำขอดังต่อไปนี้

จาก RegisterInformation.Price.SliceLast(&CutDate,) AS PriceSliceLast

แน่นอนว่าก่อนดำเนินการตามคำขอ คุณจะต้องส่งพารามิเตอร์ไปให้คำขอก่อน &วันที่ตัด. ตอนนี้ผลลัพธ์ของแบบสอบถามจะมีลักษณะเช่นนี้

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

จาก RegisterInformation.Price.Last Cut(&CutDate, Product = &Product AND Supplier = &Supplier) AS PriceLast Cut

เป็นผลให้เราได้รับเพียงหนึ่งระเบียนเท่านั้น

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

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

เดาได้ไม่ยากว่าสำหรับชิ้นแรกหลักการทำงานจะเหมือนกัน ยกเว้นว่าจะเลือกบันทึกแรกหลังจากวันที่ตัด

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

รูปภาพนี้ยังแสดงโครงสร้างของข้อมูลเมตาของรีจิสทรีด้วย ดังที่เราเห็น เครื่องบันทึกเงินสดประกอบด้วยมิติ "ผลิตภัณฑ์" พร้อมด้วยประเภทการอ้างอิง "ผลิตภัณฑ์" ตลอดจนทรัพยากรตัวเลข "ราคา" และแอตทริบิวต์ "ราคาเก่า"

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

สองตัวเลือกคำขอ

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

คำขอ = คำขอใหม่; ขอ. ข้อความ = " เลือก | | | | | จาก | ทะเบียนข้อมูล ราคาระบบการตั้งชื่อ ชิ้นส่วนของวิธีการกำหนดราคาล่าสุดชิ้นส่วนของล่าสุด|ที่ไหน | ราคาระบบการตั้งชื่อ Slice ใหม่ล่าสุด ราคาเก่า< = 50 " ;

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

ดังนั้นในตัวอย่างของเรา คำขอไม่ส่งคืนผลลัพธ์ ขั้นแรก เขาได้รับส่วนแบ่งของอย่างหลัง จากนั้นจึงกำหนดเงื่อนไขในแอตทริบิวต์ "ราคาเก่า" นี่คือลักษณะที่ปรากฏในแผนภาพ:

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

คำขอ = คำขอใหม่; ขอ. ข้อความ = " เลือก ราคาระบบการตั้งชื่อ Slice ใหม่ล่าสุด ระยะเวลา, ราคาระบบการตั้งชื่อ Slice ใหม่ล่าสุด ผลิตภัณฑ์, ราคาระบบการตั้งชื่อ Slice ใหม่ล่าสุด ราคา, ราคาระบบการตั้งชื่อ Slice ใหม่ล่าสุด ราคาเก่า จาก ทะเบียนข้อมูล ราคาระบบการตั้งชื่อ SliceLast(, ราคาเก่า< = 50 ) ราคาอย่างไรระบบการตั้งชื่อ Slice ล่าสุด"

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

ผลลัพธ์

ควรเข้าใจว่าสิ่งที่กล่าวข้างต้นใช้กับทุกกรณีของการใช้ตารางเสมือนในการสืบค้น (สำหรับการลงทะเบียนการสะสม การลงทะเบียนการบัญชี งาน ฯลฯ )

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

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

การกำหนดปัญหา

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

สารละลาย

เพื่อแก้ปัญหาเราจะใช้ข้อเท็จจริงที่ว่าตารางในแบบสอบถาม สามารถเชื่อมต่อได้ไม่เพียงแต่เพื่อความเท่าเทียมกันของฟิลด์เท่านั้น.

เลือกการขายสินค้าและบริการ ลิงค์ การขายสินค้าและบริการ สกุลเงิน สูงสุด (อัตราสกุลเงิน ระยะเวลา) AS ระยะเวลา สถานที่ในการตั้งค่าระยะเวลา อัตราจากเอกสาร การขายสินค้าและบริการ วิธีการขายสินค้าและบริการ การเชื่อมต่อด้านซ้าย การลงทะเบียนข้อมูล . อัตราสกุลเงิน AS อัตราสกุลเงินในการขายสินค้าและบริการ สกุลเงิน = อัตราสกุลเงิน สกุลเงินและการขายของ GoodsServices.Date >= อัตราสกุลเงิน ระยะเวลา GROUP ซอฟต์แวร์ การขายสินค้าและบริการ ลิงค์ การขายสินค้าและบริการ สกุลเงิน; //////////////////////////////////////////////// // /////////////////////////// เลือก VTPeriodsSetting Rates.Link, VTPeriodsSetting Rates.Currency, RatesCurrency.Rate จาก VTPeriodsSetting Rates AS VTPeriodsSetting Rates LEFT CONNECTION RegisterInformation . อัตราสกุลเงิน AS อัตราสกุลเงิน ON VTPeriodsRate Settings.Period = สกุลเงิน Rates.Period และ VTPeriodsRate Settings.Currency = อัตราสกุลเงิน สกุลเงิน

ขั้นตอนการขอ:

  1. ได้รับระยะเวลาในการกำหนดอัตราแลกเปลี่ยนของแต่ละเอกสารเอกสารเชื่อมต่อกับตารางทางกายภาพ "อัตราสกุลเงิน" ที่นี่คุณควรใส่ใจกับเงื่อนไขการเชื่อมต่อ สกุลเงินจะต้องเท่ากัน และวันที่ของเอกสาร >= ระยะเวลาของการลงทะเบียนข้อมูล
    จากผลของการเชื่อมต่อดังกล่าว แต่ละเอกสารจะได้รับชุดแถวที่ตรงตามเงื่อนไข: บันทึกอัตราแลกเปลี่ยนทั้งหมดสำหรับสกุลเงินของเอกสาร ซึ่งสร้างขึ้นไม่เกินวันที่ของเอกสาร
    ขั้นตอนสุดท้ายคือการจัดกลุ่มแถวเพื่อให้ได้ระยะเวลาอัตราสูงสุด เป็นผลให้สำหรับแต่ละเอกสารจะได้รับระยะเวลาที่จำเป็นสำหรับการตั้งค่าอัตราแลกเปลี่ยนสำหรับสกุลเงินที่ต้องการ (วันที่สูงสุดสำหรับการตั้งค่าอัตราแลกเปลี่ยน แต่ไม่เกินวันที่ของเอกสาร) ผลลัพธ์จะถูกวางไว้ในตารางชั่วคราว VTPeriodsSettingRates
  2. กำลังเรียนหลักสูตร.ตารางชั่วคราว VTPeriodsSetting Rates เชื่อมต่อกับตาราง PHYSICAL “Currency Rates” การเชื่อมต่อเกิดขึ้นตามสกุลเงินของเอกสารและระยะเวลาการตั้งค่าอัตราที่กำหนดไว้ในตารางชั่วคราวที่สอง