คำขอมีค่าเป็นโมฆะ ค่า 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