คำขอมีค่าเป็นโมฆะ ค่า Null (มี null และมี null()) การทำงานกับค่าว่างในแบบสอบถาม
เมื่อทำงานกับภาษาคิวรี บางครั้งสถานการณ์เกิดขึ้นเมื่อคุณต้องการแทนที่ค่า NULL ด้วยค่าอื่น ความจำเป็นในการดำเนินการดังกล่าวอาจเกิดขึ้น เช่น เมื่อได้รับยอดคงเหลือในสต็อคสำหรับกลุ่มผลิตภัณฑ์ทั้งหมด บทความนี้จะอธิบายการใช้ฟังก์ชันภาษาคิวรี ISNULL() เพื่อแก้ไขปัญหาดังกล่าว และยังกล่าวถึงตัวเลือกโซลูชันอื่นๆ ด้วย
ฟังก์ชัน ISNULL
ภาษาของคิวรีใช้ฟังก์ชัน ISNULL() ซึ่งมีวัตถุประสงค์เพื่อแทนที่นิพจน์ด้วยนิพจน์อื่นหากนิพจน์มีค่า NULL แผนภาพไวยากรณ์สำหรับฟังก์ชันนี้มีลักษณะดังนี้:
ไม่เป็นโมฆะ(<Проверяемое выражение>, <Выражение замены>)
ฟังก์ชันนี้จะส่งคืนค่าของพารามิเตอร์แรกหากไม่ใช่ NULL และจะส่งกลับค่าของนิพจน์ที่สอง มิฉะนั้น
เลือก
ISNULL (AccountingItemRemaining.QuantityRemaining, 0) AS VolumeRemaining
จาก
ที่ไหน
ในตัวอย่างนี้ องค์ประกอบทั้งหมดของไดเร็กทอรีรายการจะได้รับ หลังจากนั้นสำหรับแต่ละรายการ ยอดดุลปัจจุบันจะได้รับจากการลงทะเบียนการสะสม เพราะ สำหรับรายการที่ไม่มียอดคงเหลือ ตารางยอดคงเหลือเสมือนจะไม่ส่งคืนบันทึก จากนั้นผลจากการเชื่อมต่อในฟิลด์ "Item AccountingRemaining.QuantityRemaining" จะมีค่า NULL สำหรับรายการที่มี ไม่มียอดคงเหลือ เพื่อให้แน่ใจว่าแทนที่จะเป็นค่า NULL ผลลัพธ์ของคำขอมีค่า 0 เราจึงใช้ฟังก์ชัน ISNULL() ซึ่งจะดำเนินการแทนที่ที่ต้องการ
การใช้การดำเนินการ SELECT
เพื่อแก้ไขปัญหาที่อธิบายไว้ก่อนหน้านี้ คุณสามารถใช้การดำเนินการภาษาคิวรี SELECT ได้ ตัวอย่างของคำขอที่คล้ายกับคำขอก่อนหน้านี้จะมีลักษณะดังนี้:
เลือก
ไดเรกทอรีของการตั้งชื่อ
ทางเลือกเมื่อรายการบัญชีคงเหลือ ปริมาณคงเหลือเป็นโมฆะแล้ว 0
มิฉะนั้นการบัญชีสำหรับปริมาณที่เหลืออยู่
จาก
Directory.Nomenclature AS DirectoryNomenclatures
การเชื่อมต่อด้านซ้าย ลงทะเบียนการสะสมรายการ ยอดคงเหลือทางบัญชี
รายการซอฟต์แวร์ AccountingRemains.Nomenclature = Nomenclature Directory.Link
ที่ไหน
Directory.ThisGroup = FALSE
ผลลัพธ์ของแบบสอบถามนี้จะเหมือนกันกับผลลัพธ์ของแบบสอบถามที่ให้ไว้ในส่วนก่อนหน้า
การใช้ฟังก์ชัน ISNULL() ดีกว่าการใช้การดำเนินการ SELECT ด้วยเหตุผลต่อไปนี้: การเขียนโดยใช้ ISNULL() ค่อนข้างกะทัดรัดกว่า ซึ่งเพิ่มความสามารถในการอ่านแบบสอบถาม นอกจากนี้ ในกรณีที่นิพจน์ที่กำลังทดสอบเป็นฟังก์ชันที่ซับซ้อน รวมถึงฟังก์ชันรวม การคำนวณฟังก์ชัน ISNULL() สามารถทำได้เร็วกว่าฟังก์ชันที่เหมือนกันที่เขียนโดยใช้ฟังก์ชัน SELECT
คุณสมบัติของฟังก์ชัน ISNULL
ฟังก์ชัน ISNULL() แม้ว่าจะเป็นอะนาล็อกของการดำเนินการ SELECT ที่มีการตรวจสอบค่าเป็น NULL แต่ก็มีความแตกต่างกัน ความแตกต่างก็คือ ถ้านิพจน์ฟังก์ชันเป็นประเภทสตริงหรือตัวเลข นิพจน์การแทนที่จะถูกแปลงเป็นประเภทของนิพจน์ที่กำลังทดสอบ
ตัวอย่างเช่น ในกรณีที่นิพจน์ที่กำลังทดสอบเป็นประเภท String(5) และนิพจน์การแทนที่เป็นประเภท String(10) ประเภทผลลัพธ์จะถูกแปลงเป็นประเภท String(5) ด้วยเหตุนี้ เมื่อฟังก์ชันส่งคืนนิพจน์การแทนที่ ค่าจะถูกตัดทอนเหลืออักขระ 5 ตัว
ด้วยนิพจน์ตัวเลข สถานการณ์จะคล้ายกัน: ค่าของนิพจน์ที่ถูกแทนที่จะถูกแปลงเป็นประเภทของนิพจน์ที่กำลังตรวจสอบ เช่น นิพจน์ที่ถูกแทนที่อาจถูกตัดทอน หากไม่สามารถแปลงค่าได้ ภาษาของคิวรีจะล้มเหลวในการสืบค้น ตัวอย่างเช่น ความพยายามที่จะแปลงตัวเลข 1,000 เป็นประเภท Number(2) จะล้มเหลวโดยมีข้อผิดพลาด
ฟังก์ชัน ISNULL (คำพ้องความหมายภาษาอังกฤษ ISNULL) ใช้เพื่อแทนที่ค่าว่าง (หายไป) เมื่อเข้าร่วมตาราง ตารางสามารถกำหนดเองได้ (ช่องที่ตรงกัน)
Null ไม่ใช่เลข 0 แต่เป็นค่าที่หายไป
การใช้ฟังก์ชันนี้โดยทั่วไปคือการแทนที่พารามิเตอร์ของฟังก์ชัน Sum() ด้วย 0 การส่งค่าว่างอาจไม่ทำให้เกิดข้อผิดพลาดในการดำเนินการ แต่นำไปสู่ผลลัพธ์ที่ไม่ถูกต้อง โดยเฉพาะอย่างยิ่งเมื่อใช้ในแบบสอบถาม ACS
ผ่านอย่างรวดเร็ว
ผลลัพธ์ของการดำเนินการ:
- ค่าของประเภทเฉพาะ หากมีอยู่
- ค่าที่ระบุโดยพารามิเตอร์ตัวที่สอง (ประเภทใดก็ได้)
ไวยากรณ์ ISNULL
เป็นโมฆะ(<ПроверяемоеПоле>,<ЗначениеЗамены>)
อะนาล็อกของฟังก์ชันนี้อาจเป็นโครงสร้างต่อไปนี้:
ทางเลือก
เมื่อ Table.Field1 เป็นโมฆะแล้ว "ค่าบางอย่าง"
มิฉะนั้น
ตาราง.ฟิลด์1
จบ
NULL ถูกนำมาใช้ในทางปฏิบัติอย่างไร?
1. การแทนที่ค่าด้วยค่าคงที่
ISNULL(Table1.Field1,"ค่าบางค่า")
ISNULL(ตาราง1.ปริมาณ, 0)
2. การแทนที่ค่าด้วยพารามิเตอร์
ISNULL(Table1.Field1,&พารามิเตอร์)
3. การทดแทนค่าจากตารางอื่น
ISNULL (Table1.Field1,Table2.Field1)
4.การใช้ฟังก์ชันเพื่อรับค่าที่กำหนดไว้ล่วงหน้าหรือค่าว่าง
ISNULL(Table2.Field1,VALUE(Directory.Counterparties.EmptyLink))
ภาษาคิวรี 1C เป็นหนึ่งในความแตกต่างที่สำคัญระหว่างเวอร์ชัน 7.7 และ 8 หนึ่งในจุดที่สำคัญที่สุดในการเรียนรู้การเขียนโปรแกรม 1C คือภาษาคิวรี ใน 1C 8.3 แบบสอบถามเป็นเครื่องมือที่ทรงพลังและมีประสิทธิภาพมากที่สุดในการรับข้อมูล ภาษาคิวรีช่วยให้คุณรับข้อมูลจากฐานข้อมูลได้อย่างสะดวก
ไวยากรณ์นั้นชวนให้นึกถึง T-SQL แบบคลาสสิกอย่างมาก ยกเว้นว่าใน 1C เมื่อใช้ภาษาคิวรี คุณสามารถรับข้อมูลได้โดยใช้โครงสร้าง Select เท่านั้น ภาษายังรองรับโครงสร้างที่ซับซ้อนมากขึ้นด้วย เช่น (คำขอภายในคำขอ) ข้อความค้นหาใน 1C 8 สามารถเขียนได้ทั้งภาษาซีริลลิกและภาษาละติน
ในบทความนี้ฉันจะพยายามพูดถึงคำหลักในภาษาคิวรี 1C:
- เลือก
- อนุญาต
- หลากหลาย
- ด่วน
- อันดับแรก
- เพื่อการเปลี่ยนแปลง
- ความหมาย
- ประเภทค่า (และตัวดำเนินการอ้างอิง)
- ทางเลือก
- จัดกลุ่มตาม
- มี
- ไม่เป็นโมฆะ
- ใช่ เป็นโมฆะ
- การเชื่อมต่อ - ขวา, ซ้าย, ภายใน, เต็ม.
รวมถึงลูกเล่นเล็กๆ น้อยๆ ของภาษา 1C ซึ่งคุณสามารถสร้างข้อความคำขอได้อย่างเหมาะสมที่สุด
ในการดีบักแบบสอบถามในระบบ 1C 8.2 มีการจัดเตรียมเครื่องมือพิเศษ - คอนโซลแบบสอบถาม คุณสามารถดูคำอธิบายและดาวน์โหลดได้โดยใช้ลิงก์ -
มาดูตัวดำเนินการที่สำคัญและน่าสนใจที่สุดของภาษาคิวรี 1C
เลือก
ในภาษาคิวรี 1C Enterprise 8 คิวรีใด ๆ จะเริ่มต้นด้วยคีย์เวิร์ด เลือก- ในภาษา 1C ไม่มีโครงสร้าง UPDATE, DELETE, CREATE TABLE, INSERT; มีวัตถุประสงค์เพื่ออ่านข้อมูลเท่านั้น
ตัวอย่างเช่น:
เลือก
ไดเรกทอรีปัจจุบันชื่อ
จาก
Directory.Nomenclature AS ไดเรกทอรีปัจจุบัน
แบบสอบถามจะส่งกลับตารางที่มีชื่อรายการ
ใกล้โครงสร้าง เลือกคุณสามารถค้นหาคำหลักได้ เพื่อการเปลี่ยนแปลง, อนุญาต, หลากหลาย, อันดับแรก …
อนุญาต— เลือกเฉพาะบันทึกจากตารางที่ผู้ใช้ปัจจุบันมีสิทธิ์
หลากหลาย— หมายความว่าผลลัพธ์จะไม่มีบรรทัดที่ซ้ำกัน
การคัดเลือก (กรณี)
บ่อยครั้งที่การออกแบบนี้ถูกประเมินโดยโปรแกรมเมอร์ต่ำเกินไป ตัวอย่างการใช้งาน:
ไดเรกทอรีปัจจุบันชื่อ
เมื่อ Directory ปัจจุบันบริการแล้ว
"บริการ"
สิ้นสุดวิธีการดูระบบการตั้งชื่อ
Directory.Nomenclature AS ไดเรกทอรีปัจจุบัน
ตัวอย่างจะส่งคืนค่าข้อความในช่อง "ประเภทรายการ" - "ผลิตภัณฑ์" หรือ "บริการ"
ที่ไหน
การออกแบบภาษาคิวรี 1C ซึ่งช่วยให้คุณสามารถกำหนดการเลือกข้อมูลที่ได้รับได้ โปรดทราบว่าระบบจะรับข้อมูลทั้งหมดจากเซิร์ฟเวอร์ จากนั้นจึงเลือกตามพารามิเตอร์นี้เท่านั้น
เลือก
ไดเร็กทอรี.ชื่อ
จาก
ไดเรกทอรีปัจจุบัน ระบบการตั้งชื่อ AS ไดเรกทอรีปัจจุบัน
โดยที่ CurrentDirectory.Service = TRUE
ในตัวอย่าง เราเลือกเรกคอร์ดที่ค่าของแอตทริบิวต์ "บริการ" ถูกตั้งค่าเป็น "จริง" ในตัวอย่างนี้ เราอาจได้รับตามเงื่อนไขต่อไปนี้:
"บริการอยู่ที่ไหน"
โดยพื้นฐานแล้ว เรากำลังเลือกแถวที่มีนิพจน์หลังคีย์เวิร์ดเท่ากับ "True"
คุณสามารถใช้เงื่อนไขโดยตรงในนิพจน์:
รหัสที่ไหน = "005215"
การใช้ตัวดำเนินการ “VALUE()” ในเงื่อนไข ใช้การเข้าถึงองค์ประกอบและการแจงนับที่กำหนดไว้ล่วงหน้าในคำขอ 1C:
โดยที่ประเภทรายการ = ค่า (การแจงนับประเภทรายการผลิตภัณฑ์)
สามารถระบุค่าเวลาได้ดังนี้
WHERE วันที่รับ > DATETIME(2012,01,01):
ส่วนใหญ่แล้ว เงื่อนไขจะถูกระบุเป็นพารามิเตอร์ที่ส่งไปยังคำขอ:
รับบทเรียนวิดีโอ 267 บทเรียนบน 1C ฟรี:
โดยที่ NomenclatureGroup= &NomenclatureGroup
สามารถกำหนดเงื่อนไขให้กับประเภทแอตทริบิวต์ได้หากเป็นประเภทคอมโพสิต:
หากคุณต้องการจำกัดการเลือกจากรายการค่าหรืออาร์เรย์ คุณสามารถทำสิ่งต่อไปนี้:
ทะเบียนสะสมอยู่ที่ไหน (&รายการเอกสารสำหรับการคัดเลือก)
เงื่อนไขยังสามารถซับซ้อนได้ ซึ่งประกอบด้วยเงื่อนไขหลายประการ:
โดยที่วันที่รับ > DATETIME(2012,01,01) และ NomenclatureGroup= &NomenclatureGroup และไม่ใช่บริการ
จัดกลุ่มตาม
การออกแบบภาษาคิวรี 1C 8.2 ที่ใช้ในการจัดกลุ่มผลลัพธ์
ตัวอย่างเช่น:
เลือก
การรับสินค้าและบริการ
SUM (การรับสินค้าบริการสินค้าปริมาณ) AS ปริมาณ
SUM(การรับสินค้าบริการสินค้าจำนวน) AS จำนวนเงิน
จาก
เอกสารการรับสินค้าและบริการ วิธีการรับสินค้าและบริการจัดกลุ่มตาม
การรับสินค้าการบริการสินค้าสินค้า
คำขอนี้จะสรุปการรับทั้งหมดตามจำนวนและปริมาณตามรายการ
นอกจากคีย์เวิร์ดแล้ว ผลรวมคุณสามารถใช้ฟังก์ชันรวมอื่นๆ ได้: ปริมาณ, จำนวนที่แตกต่างกัน, ขีดสุด, ขั้นต่ำ, เฉลี่ย.
มี
การออกแบบที่มักถูกลืม แต่สำคัญและมีประโยชน์มาก ช่วยให้คุณสามารถระบุการเลือกในรูปแบบของฟังก์ชันรวม ซึ่งไม่สามารถทำได้ในการออกแบบ ที่ไหน.
ตัวอย่างการใช้ HAVING ในคำขอ 1C:
เลือก
การรับสินค้าและบริการ
SUM (การรับสินค้าบริการสินค้าปริมาณ) AS ปริมาณ
SUM(การรับสินค้าบริการสินค้าจำนวน) AS จำนวนเงิน
จาก
เอกสารการรับสินค้าและบริการ วิธีการรับสินค้าและบริการจัดกลุ่มตาม
การรับสินค้าและการบริการสินค้าSUM(การรับสินค้าบริการสินค้าปริมาณ) > 5
ดังนั้นเราจะเลือกจำนวนสินค้าที่มาถึงมากกว่า 5 ชิ้น
ความหมาย()
ตัวอย่างเช่น:
โดยที่ธนาคาร = มูลค่า (Directory.Banks.EmptyLink)
WHERE ประเภทระบบการตั้งชื่อ = ค่า (Directory.Nomenclature Types.Product)
โดยที่ประเภทรายการ = ค่า (การแจงนับประเภทรายการบริการ)
พิมพ์ตามคำขอ
สามารถตรวจสอบชนิดข้อมูลได้โดยใช้ฟังก์ชัน TYPE() และ VALUETYPE() หรือใช้ตัวดำเนินการ REFERENCE แบบลอจิคัล
ด่วน()
ตัวดำเนินการ Express ในแบบสอบถาม 1C ใช้เพื่อแปลงประเภทข้อมูล
ไวยากรณ์: ด่วน(<Выражение>ยังไง<Тип значения>)
เมื่อใช้มัน คุณสามารถแปลงค่าสตริงเป็นวันที่ หรือค่าอ้างอิงเป็นข้อมูลสตริง และอื่นๆ
ในการใช้งานจริง ตัวดำเนินการ Express() มักใช้ในการแปลงฟิลด์ที่มีความยาวไม่จำกัด เนื่องจากฟิลด์ที่มีความยาวไม่จำกัดไม่สามารถเลือก จัดกลุ่มได้ ฯลฯ หากไม่ได้แปลงฟิลด์ดังกล่าว คุณจะได้รับข้อผิดพลาด คุณไม่สามารถเปรียบเทียบฟิลด์ที่มีความยาวไม่จำกัดกับฟิลด์ประเภทที่เข้ากันไม่ได้.
เลือก
ข้อมูลการติดต่อวัตถุ
EXPRESS (ContactInfo.View AS ROW (150)) AS ดู
จาก
การลงทะเบียนข้อมูลการติดต่อ ข้อมูลการติดต่ออย่างไรจัดกลุ่มตาม
EXPRESS (ContactInfo.Representation AS ROW (150))
ข้อมูลการติดต่อวัตถุ
ISNULL (อิสโมล)
ค่อนข้างเป็นฟังก์ชันที่มีประโยชน์ของภาษาคิวรี 1C ที่ตรวจสอบค่าในบันทึกและมีค่าเท่ากันหรือไม่ โมฆะ,ซึ่งจะทำให้คุณสามารถแทนที่ด้วยค่าของคุณเองได้ ส่วนใหญ่มักใช้เมื่อได้รับตารางยอดคงเหลือและการหมุนเวียนเสมือนเพื่อซ่อน โมฆะและใส่ 0 ชัดเจน (ศูนย์)
ISNULL(ภาษีก่อนเดือน ผลประโยชน์ FSS ที่ประยุกต์ใช้ 0)
ฟังก์ชั่นของภาษาคิวรี 1C ISNULL จะส่งคืนค่าศูนย์หากไม่มีค่า ซึ่งจะหลีกเลี่ยงข้อผิดพลาด
เข้าร่วม
การเชื่อมต่อมี 4 ประเภท: ซ้าย, ขวา, สมบูรณ์ภายใน.
การเชื่อมต่อด้านซ้ายและขวา
การรวมใช้เพื่อเชื่อมโยงสองตารางตามเงื่อนไขเฉพาะ คุณลักษณะเมื่อ เข้าร่วมทางซ้ายคือเราใช้ตารางแรกที่ระบุอย่างครบถ้วนและผูกตารางที่สองอย่างมีเงื่อนไข เขตข้อมูลของตารางที่สองที่ไม่สามารถผูกตามเงื่อนไขได้จะถูกเติมด้วยค่า โมฆะ.
ตัวอย่างของการเข้าร่วมด้านซ้ายในคำขอ 1C:
มันจะส่งคืนทั้งตารางและกรอกข้อมูลในช่อง "ธนาคาร" เฉพาะในสถานที่ที่ตรงตามเงื่อนไข "Counterparties.Name = Banks.Name" ถ้าไม่ตรงตามเงื่อนไข ฟิลด์ธนาคารจะถูกตั้งค่าเป็น โมฆะ.
เข้าร่วมขวาในภาษา 1C 8.3คล้ายกันอย่างแน่นอน การเชื่อมต่อด้านซ้ายยกเว้นข้อแตกต่างประการหนึ่ง: ใน สิทธิ์ในการเชื่อมต่อตาราง "หลัก" เป็นตารางที่สอง ไม่ใช่ตารางแรก
การเชื่อมต่อเต็มรูปแบบ
การเชื่อมต่อเต็มรูปแบบแตกต่างจากซ้ายและขวาตรงที่จะแสดงบันทึกทั้งหมดจากสองตารางและเชื่อมต่อเฉพาะรายการที่เชื่อมต่อตามเงื่อนไขได้
ตัวอย่างเช่น:
การเชื่อมต่อเต็มรูปแบบ
Directory.Banks ธนาคารอย่างไรโดย
ภาษาคิวรีจะส่งกลับทั้งสองตารางโดยสมบูรณ์ก็ต่อเมื่อตรงตามเงื่อนไขบันทึกการรวมเท่านั้น ไม่เหมือนกับการรวมซ้าย/ขวา เป็นไปได้ที่ NULL จะปรากฏในสองฟิลด์
เข้าร่วมภายใน
เข้าร่วมภายในแตกต่างจากแบบเต็มตรงที่จะแสดงเฉพาะบันทึกที่สามารถเชื่อมต่อได้ตามเงื่อนไขที่กำหนด
ตัวอย่างเช่น:
จาก
สารบบ คู่ค้า AS ลูกค้าเข้าร่วมภายใน
Directory.Banks ธนาคารอย่างไรโดย
Clients.Name = ธนาคารชื่อ
แบบสอบถามนี้จะส่งกลับเฉพาะแถวที่ธนาคารและคู่สัญญามีชื่อเหมือนกัน
บทสรุป
นี่เป็นเพียงส่วนเล็ก ๆ ของไวยากรณ์จากภาษาคิวรี 1C 8 ในอนาคตฉันจะพยายามพิจารณารายละเอียดเพิ่มเติม แสดง และอื่นๆ อีกมากมาย!
โมฆะ- ค่าที่หายไป
อย่าสับสนกับค่าศูนย์! NULL ไม่ใช่ตัวเลข ไม่เท่ากับช่องว่าง การอ้างอิงว่างเปล่า หรือไม่ได้กำหนด
NULL คือค่าที่สร้างประเภท เช่น มีประเภท NULL และค่าเดียวของประเภทนี้
ค่า NULL ปรากฏในแบบสอบถามในสถานการณ์ต่อไปนี้:
ก) การรวมภายนอกซึ่งไม่พบบันทึกที่สอดคล้องกันในตารางอื่น (ถ้าซ้าย - ในตารางที่สอง ทางด้านขวา - ในตารางแรก ถ้าเต็ม - ในทั้งสอง)
b) การเข้าถึงรายละเอียดขององค์ประกอบสำหรับกลุ่มและในทางกลับกัน
c) NULL ในรายการเขตข้อมูลการเลือก (SELECT)
d) การเข้าถึงรายละเอียดของลิงก์ที่ใช้งานไม่ได้
เป็นโมฆะใช้ในโอเปอเรเตอร์ SELECT (เหมือนกับการตรวจสอบว่าค่าว่างเปล่า (ค่าเป็น NULL)):
รหัส 1C v 8.x
ทางเลือก
เมื่อค่าเป็นโมฆะแล้ว ResultIfNULL
ความหมายอื่น
จบ
ตัวอย่างอื่น:
รหัส 1C v 8.x เลือก
ทางเลือกเมื่อรายการบัญชีคงเหลือ ปริมาณคงเหลือเป็นโมฆะแล้ว 0
มิฉะนั้นการบัญชีสำหรับปริมาณที่เหลืออยู่
จาก
ที่ไหน
การทำงาน ISNULL(ค่า, ResultIfNULL)ส่งกลับค่าของพารามิเตอร์ตัวแรกหากไม่ใช่ NULL และจะส่งคืนค่าของพารามิเตอร์ตัวที่สองเป็นอย่างอื่น
ถูกยุบ SELECT...END แต่ควรใช้ ISNULL
รหัส 1C v 8.x
เลือก
ISNULL(Directory.Nomenclature.Article, "---") AS บทความ,
Directory.Nomenclature.Presentation AS Nomenclature
ตัวอย่างอื่น:
รหัส 1C v 8.x
เลือก
ไดเรกทอรีของการตั้งชื่อ
ISNULL (AccountingItemRemaining.QuantityRemaining, 0) AS VolumeRemaining
จาก
Directory.Nomenclature AS DirectoryNomenclatures
การเชื่อมต่อด้านซ้าย ลงทะเบียนการสะสมรายการ ยอดคงเหลือทางบัญชี
รายการซอฟต์แวร์ AccountingRemains.Nomenclature = Nomenclature Directory.Link
ที่ไหน
Directory.ThisGroup = FALSE
ในตัวอย่างนี้ องค์ประกอบทั้งหมดของไดเร็กทอรีรายการจะได้รับ หลังจากนั้นสำหรับแต่ละรายการ ยอดดุลปัจจุบันจะได้รับจากการลงทะเบียนการสะสม เพราะ สำหรับรายการที่ไม่มียอดคงเหลือ ตารางยอดคงเหลือเสมือนจะไม่ส่งคืนบันทึก จากนั้นผลจากการเชื่อมต่อในฟิลด์ "Item AccountingRemaining.QuantityRemaining" จะมีค่า NULL สำหรับรายการที่มี ไม่มียอดคงเหลือ เพื่อให้แน่ใจว่าแทนที่จะเป็นค่า NULL ผลลัพธ์ของคำขอมีค่า 0 เราจึงใช้ฟังก์ชัน ISNULL() ซึ่งจะดำเนินการแทนที่ที่ต้องการ
ไม่เป็นโมฆะแตกต่างจาก CHOICE ด้วยเหตุผลดังต่อไปนี้:
ก) ถ้า ISNULL ข้อความค้นหาจะอ่านได้ดีกว่า (ง่ายกว่า)
b) ถ้า ISNULL ถ้าเลือกนิพจน์ที่ซับซ้อน จะทำงานเร็วขึ้นเนื่องจากมีการคำนวณครั้งเดียว
c) ถ้า ISNULL นิพจน์การแทนที่จะถูกแปลงเป็นประเภทของนิพจน์ที่กำลังทดสอบว่าเป็นประเภท String (ความยาว) หรือ Number (ความลึกบิต)
คุณไม่สามารถตรวจสอบค่า NULL โดยใช้ความเท่าเทียมกันตามปกติได้เนื่องจาก SQL ใช้ตรรกะสามค่า - True, False, NULL และผลลัพธ์ของการเปรียบเทียบดังกล่าวจะเป็น UNKNOWN ซึ่งใน 1C 8.0 จะคล้ายกับ FALSE
โมฆะ<>0 ดังนั้นสำหรับการรวมภายนอกด้านซ้าย ให้อ้างอิง ระบบการตั้งชื่อพร้อมตารางยอดคงเหลือ ราคา คู่ค้าที่มีการชำระหนี้ร่วมกัน ในกรณีที่ไม่มีบันทึกดังกล่าว จะมีค่า NULL ซึ่งไม่เท่ากับ 0 ทางออกที่ดีที่สุดคือ ISNULL
โมฆะ– ค่าที่หายไป
อย่าสับสนกับค่าศูนย์! NULL ไม่ใช่ตัวเลข ไม่เท่ากับช่องว่าง การอ้างอิงว่างเปล่า หรือไม่ได้กำหนด
NULL คือค่าที่สร้างประเภท เช่น มีประเภท NULL และค่าเดียวของประเภทนี้
ค่า NULL ปรากฏในแบบสอบถามในสถานการณ์ต่อไปนี้:
ก) การรวมภายนอกซึ่งไม่พบบันทึกที่เกี่ยวข้องในตารางอื่น (โดยทางซ้าย - ในตารางที่สอง กับทางขวา - ในอันแรก พร้อมด้วยอันเต็ม - ทั้งสองอย่าง)
b) การเข้าถึงรายละเอียดขององค์ประกอบสำหรับกลุ่มและในทางกลับกัน
c) NULL ในรายการเขตข้อมูลการเลือก (SELECT)
d) การเข้าถึงรายละเอียดของลิงก์ที่ใช้งานไม่ได้
เป็นโมฆะใช้ในโอเปอเรเตอร์ SELECT (เหมือนกับการตรวจสอบว่าค่าว่างเปล่า (ค่าเป็น NULL)):
รหัส 1C v 8.x
ทางเลือก
เมื่อค่าเป็นโมฆะแล้ว ResultIfNULL
ความหมายอื่น
จบ
ตัวอย่างอื่น:
รหัส 1C v 8.x เลือก
ทางเลือกเมื่อรายการบัญชีคงเหลือ ปริมาณคงเหลือเป็นโมฆะแล้ว 0
มิฉะนั้นการบัญชีสำหรับปริมาณที่เหลืออยู่
จาก
ที่ไหน
การทำงาน ISNULL(ค่า, ResultIfNULL)ส่งกลับค่าของพารามิเตอร์ตัวแรกหากไม่ใช่ NULL และจะส่งคืนค่าของพารามิเตอร์ตัวที่สองเป็นอย่างอื่น
ถูกยุบ SELECT...END แต่ควรใช้ ISNULL
รหัส 1C v 8.x
เลือก
ISNULL(Directory.Nomenclature.Article, "---") AS บทความ,
Directory.Nomenclature.Presentation AS Nomenclature
ตัวอย่างอื่น:
รหัส 1C v 8.x
เลือก
ไดเรกทอรีของการตั้งชื่อ
ISNULL (AccountingItemRemaining.QuantityRemaining, 0) AS VolumeRemaining
จาก
Directory.Nomenclature AS DirectoryNomenclatures
การเชื่อมต่อด้านซ้าย ลงทะเบียนการสะสมรายการ ยอดคงเหลือทางบัญชี
รายการซอฟต์แวร์ AccountingRemains.Nomenclature = Nomenclature Directory.Link
ที่ไหน
Directory.ThisGroup = FALSE
ในตัวอย่างนี้ องค์ประกอบทั้งหมดของไดเร็กทอรีรายการจะได้รับ หลังจากนั้นสำหรับแต่ละรายการ ยอดดุลปัจจุบันจะได้รับจากการลงทะเบียนการสะสม เพราะ สำหรับรายการที่ไม่มียอดคงเหลือ ตารางยอดคงเหลือเสมือนจะไม่ส่งคืนบันทึก จากนั้นผลจากการเชื่อมต่อในฟิลด์ "Item AccountingRemaining.QuantityRemaining" จะมีค่า NULL สำหรับรายการที่มี ไม่มียอดคงเหลือ เพื่อให้แน่ใจว่าแทนที่จะเป็นค่า NULL ผลลัพธ์ของคำขอมีค่า 0 เราจึงใช้ฟังก์ชัน ISNULL() ซึ่งจะดำเนินการแทนที่ที่ต้องการ
ไม่เป็นโมฆะแตกต่างจาก CHOICE ด้วยเหตุผลดังต่อไปนี้:
ก) ถ้า ISNULL ข้อความค้นหาจะอ่านได้ดีกว่า (ง่ายกว่า)
b) ถ้า ISNULL ถ้าเลือกนิพจน์ที่ซับซ้อน จะทำงานเร็วขึ้นเนื่องจากมีการคำนวณเพียงครั้งเดียว
c) ถ้า ISNULL นิพจน์การแทนที่จะถูกแปลงเป็นประเภทของนิพจน์ที่กำลังทดสอบว่าเป็นประเภท String (ความยาว) หรือ Number (ความลึกบิต)
คุณไม่สามารถตรวจสอบค่า NULL โดยใช้ความเท่าเทียมกันตามปกติได้เนื่องจาก SQL ใช้ตรรกะสามค่า - True, False, NULL และผลลัพธ์ของการเปรียบเทียบดังกล่าวจะเป็น UNKNOWN ซึ่งใน 1C 8.0 จะคล้ายกับ FALSE
โมฆะ<>0 ดังนั้นสำหรับการรวมภายนอกด้านซ้าย ให้อ้างอิง ระบบการตั้งชื่อพร้อมตารางยอดคงเหลือ ราคา คู่ค้าที่มีการชำระหนี้ร่วมกัน ในกรณีที่ไม่มีบันทึกดังกล่าว จะมีค่า NULL ซึ่งไม่เท่ากับ 0 ทางออกที่ดีที่สุดคือ ISNULL