คอมพิวเตอร์ Windows อินเทอร์เน็ต

ค่า Null (มีค่า null และมีค่า null ()) ค่า null (มีค่า null และมีค่า null ()) มี null ในคำขอ 1c

โมฆะ- ค่าที่หายไป
เพื่อไม่ให้สับสนกับโมฆะ! NULL ไม่ใช่ตัวเลข ไม่เท่ากับช่องว่าง การอ้างอิงที่ว่างเปล่า ไม่ได้กำหนด

NULL คือค่าที่สร้างประเภท เช่น มีประเภท NULL และค่าเดียวของประเภทนี้

ค่า NULL จะปรากฏในแบบสอบถามในสถานการณ์ต่อไปนี้:
ก) การรวมภายนอกซึ่งไม่พบระเบียนที่เกี่ยวข้องในตารางอื่น (โดยด้านซ้าย - ในที่สองโดยด้านขวา - ในครั้งแรกโดยมีรายการเต็ม - ในทั้งสอง)
b) อ้างถึงคุณลักษณะขององค์ประกอบสำหรับกลุ่มและในทางกลับกัน
c) NULL ในรายการฟิลด์การเลือก (SELECT)
ง) อ้างอิงถึงรายละเอียดของลิงค์เสีย

เป็นโมฆะใช้ในโอเปอเรเตอร์ SELECT (ราวกับว่ากำลังตรวจสอบว่าค่าว่าง (Value IS NULL)):
รหัส 1C v 8.x
ทางเลือก
เมื่อค่าเป็น NULL ผลลัพธ์จะเป็น NULL
ค่าอื่น
ตอนจบ

ตัวอย่างอื่น:
รหัส 1C v 8.x SELECT

เลือกเมื่อ Nomenclature การบัญชี ยอดดุลยอดเงินคงเหลือเป็น NULL แล้ว 0
ELSE Nomenclature การบัญชี Balances.Quantity Balance AS ปริมาณ Balance
จาก



ที่ไหน

การทำงาน ISNULL (ค่า, ResultIf NULL)ส่งกลับค่าของพารามิเตอร์ตัวแรกถ้าไม่ใช่ NULL และค่าของพารามิเตอร์ตัวที่สองเป็นอย่างอื่น
เป็น SELECT ... END ที่ยุบแล้ว แต่แนะนำให้ใช้ IS NULL
รหัส 1C v 8.x
เลือก
ISNULL (Directory.Nomenclature.Article, "---") AS Article,
Reference.Nomenclature.Presentation AS Nomenclature

ตัวอย่างอื่น:
รหัส 1C v 8.x
เลือก
ไดเรกทอรีของการตั้งชื่อ
เป็นโมฆะ (NomenclatureAccountingBalance.QuantityRemainment, 0) เป็นจำนวนที่เหลือ
จาก
Directory.Nomenclature AS Directory
ซ้ายเข้าร่วม สะสม Register.AccountingNomenclature.Balances AS AccountingNomenclatureBalance
ซอฟต์แวร์ NomenclatureAccountingBalances.Nomenclature = Nomenclature Directory.Link
ที่ไหน
DirectoryNomenclature.ThisGroup = FALSE
วี ตัวอย่างนี้ได้รับองค์ประกอบทั้งหมดของรายการหุ้น หลังจากนั้นสำหรับแต่ละหุ้น ยอดคงเหลือปัจจุบันจะได้รับจากการลงทะเบียนการสะสม เพราะ สำหรับรายการที่ไม่มียอดดุล ตารางเสมือนของยอดดุลจะไม่ส่งกลับรายการบันทึก จากนั้น การเชื่อมต่อในช่อง "NomenclatureAccountRemains.Quantity" จะมีค่า NULL สำหรับรายการที่มี ไม่มียอดคงเหลือ เพื่อให้มีค่า 0 แทนที่จะเป็นค่า NULL ในผลลัพธ์การสืบค้น เราใช้ฟังก์ชัน IS NULL () ซึ่งจะทำการเปลี่ยนค่าที่ต้องการ

เป็นโมฆะแตกต่างจาก CHOICE ด้วยเหตุผลดังต่อไปนี้:
ก) หากเป็นโมฆะ แบบสอบถามจะอ่านได้ดีกว่า (ง่ายกว่า)
b) ถ้า IS NULL ถ้าตรวจสอบนิพจน์ที่ซับซ้อน นิพจน์จะทำงานเร็วขึ้น เนื่องจากจะมีการประเมินหนึ่งครั้ง
c) ถ้า IS NULL นิพจน์แทนที่จะถูกแปลงเป็นประเภทของนิพจน์ที่ทดสอบ ถ้าเป็นประเภทสตริง (ความยาว) หรือตัวเลข (ความกว้างบิต)

คุณไม่สามารถตรวจสอบค่า NULL ด้วยความเท่าเทียมกันทั่วไปได้ เนื่องจากตรรกะสามค่าทำงานใน SQL - True, False, NULL และผลลัพธ์ของการเปรียบเทียบจะเป็น UNKNOWN ซึ่งใน 1C 8.0 จะคล้ายกับ FALSE
โมฆะ<>0 ดังนั้นสำหรับผู้อ้างอิงด้านซ้ายภายนอก ระบบการตั้งชื่อพร้อมตารางยอดคงเหลือ ราคา คู่สัญญาที่มีการตั้งถิ่นฐานร่วมกัน หากไม่มีบันทึกดังกล่าว จะมีค่า NULL ซึ่งไม่เท่ากับ 0 ทางออกที่ดีที่สุด- เป็นโมฆะ

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

ฟังก์ชัน ISNULL

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

ISNULL (<Проверяемое выражение>, <Выражение замены>)

ฟังก์ชั่นนี้จะคืนค่าของพารามิเตอร์ตัวแรกหากไม่ใช่ NULL และคืนค่าของนิพจน์ที่สอง


เลือก
เป็นโมฆะ (NomenclatureAccountingBalance.QuantityRemainment, 0) เป็นจำนวนที่เหลือ
จาก

ที่ไหน

ในตัวอย่างนี้ ได้รับองค์ประกอบทั้งหมดของแค็ตตาล็อกไอเท็ม หลังจากนั้นสำหรับแต่ละรายการ ยอดคงเหลือปัจจุบันจะได้รับจากการลงทะเบียนการสะสม เพราะ สำหรับรายการที่ไม่มียอดดุล ตารางเสมือนของยอดดุลจะไม่ส่งกลับรายการบันทึก จากนั้น การเชื่อมต่อในช่อง "NomenclatureAccountRemains.Quantity" จะมีค่า NULL สำหรับรายการที่มี ไม่มียอดคงเหลือ เพื่อให้มีค่า 0 แทนที่จะเป็นค่า NULL ในผลลัพธ์การสืบค้น เราใช้ฟังก์ชัน IS NULL () ซึ่งจะทำการเปลี่ยนค่าที่ต้องการ

การใช้การดำเนินการ SELECT

ในการแก้ปัญหาที่อธิบายไว้ก่อนหน้านี้ คุณสามารถใช้การดำเนินการภาษาแบบสอบถาม SELECT ตัวอย่างของข้อความค้นหาที่คล้ายกับก่อนหน้านี้จะมีลักษณะดังนี้:


เลือก
ไดเรกทอรีของการตั้งชื่อ
เลือกเมื่อ Nomenclature การบัญชี ยอดดุลยอดเงินคงเหลือเป็น NULL แล้ว 0
ELSE Nomenclature การบัญชี Balances.Quantity Balance AS ปริมาณ Balance
จาก
Directory.Nomenclature AS Directory
ซ้ายเข้าร่วม สะสม Register.AccountingNomenclature.Balances AS AccountingNomenclatureBalance
ซอฟต์แวร์ NomenclatureAccountingBalances.Nomenclature = Nomenclature Directory.Link
ที่ไหน
DirectoryNomenclature.ThisGroup = FALSE

ผลลัพธ์ของแบบสอบถามนี้จะเหมือนกับผลลัพธ์ของแบบสอบถามที่ให้ไว้ในส่วนก่อนหน้า

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

คุณสมบัติของฟังก์ชัน ISNULL

ฟังก์ชัน ISNULL () แม้ว่าจะคล้ายกับการดำเนินการ SELECT ด้วยการตรวจสอบค่า NULL แต่ก็มีความแตกต่างกัน ข้อแตกต่างคือ หากนิพจน์ฟังก์ชันมีสตริงหรือประเภทตัวเลข นิพจน์การแทนที่จะถูกแปลงเป็นประเภทของนิพจน์ที่ทดสอบ

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

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

สวัสดี.
ต่อเกี่ยวกับประเภทข้อมูลดั้งเดิม เราได้พิจารณาเมื่อเร็ว ๆ นี้ และวันนี้เราจะพูดถึง พิมพ์ NULL.

ประเภท NULL เป็นตัวอักษรที่สามารถมีค่าได้เพียงค่าเดียว ซึ่งก็คือค่า "NULL"
NULL - ไม่เท่ากับการอ้างอิงว่าง ช่องว่าง หรือประเภทที่ไม่ได้กำหนด

ใช้เมื่อทำงานกับฐานข้อมูล (เมื่อเข้าร่วมตาราง) ใช้เพื่อกำหนดค่าที่ขาดหายไปเมื่อทำงานกับฐานข้อมูล
ค่า NULL สามารถรับได้โดยการกำหนดค่านี้ให้กับตัวแปร:
ตัวแปร = NULL

ค่า NULL เกิดขึ้นจากการรวมเมื่อองค์ประกอบจากตารางหนึ่งไม่พบองค์ประกอบที่สอดคล้องกันจากอีกตารางหนึ่งตามเงื่อนไข ค่า NULL มีคุณสมบัติเฉพาะ:
- การเปรียบเทียบค่า NULL กับอาร์กิวเมนต์อื่นๆ จะคืนค่าเป็นเท็จเสมอ

ในการกำหนดค่า NULL ให้ใช้โครงสร้าง เป็นโมฆะ.
ในการแปลงประเภท NULL ให้ใช้ฟังก์ชัน ISNULL (เป็นโมฆะ).

เพื่อตัดฟิลด์ที่มีค่า NULL อันเป็นผลมาจากแบบสอบถาม มีการใช้โครงสร้างต่อไปนี้: - ไม่ใช่ NULL - ไม่ใช่ NULL

ตัวอย่างของ

ตัวอย่างการตรวจสอบค่า NULL

เลือกไดเร็กทอรี การตั้งชื่อ ชื่อ, อ้างอิง. การตั้งชื่อ ราคาซื้อ WHERE Directory การตั้งชื่อ ราคาซื้อเป็นโมฆะ

ตัวอย่างฟังก์ชัน ISNULL ()
ค่าที่ส่งกลับของฟังก์ชัน IS NULL (): ค่าของพารามิเตอร์ตัวแรก หากพารามิเตอร์แรกไม่มีค่า NULL มิฉะนั้น ค่าของพารามิเตอร์ตัวที่สอง พารามิเตอร์ที่สองจะถูกแปลงเป็นชนิดของพารามิเตอร์แรก ถ้าชนิดของพารามิเตอร์แรกเป็นสตริงหรือตัวเลข

// รับจำนวนเงินสำหรับฟิลด์ปริมาณ ในกรณีที่ไม่มีบันทึก รับ 0 SELECT IS NULL (SUM (Quantity), 0) AS จำนวนจากเอกสาร ฝากขาย องค์ประกอบ

ขอแสดงความนับถือ 1C โปรแกรมเมอร์
แสดงความคิดเห็นของคุณ ฉันสนใจความคิดเห็นของคุณ

โมฆะ- ค่าที่หายไป
เพื่อไม่ให้สับสนกับโมฆะ! NULL ไม่ใช่ตัวเลข ไม่เท่ากับช่องว่าง การอ้างอิงที่ว่างเปล่า ไม่ได้กำหนด

NULL คือค่าที่สร้างประเภท เช่น มีประเภท NULL และค่าเดียวของประเภทนี้

ค่า NULL จะปรากฏในแบบสอบถามในสถานการณ์ต่อไปนี้:
ก) การรวมภายนอกซึ่งไม่พบบันทึกที่สอดคล้องกันในตารางอื่น (โดยที่ด้านซ้าย - ในอันที่สอง ด้านขวา - ในอันแรก อันแบบเต็ม - ทั้งสองอัน)
b) อ้างถึงคุณลักษณะขององค์ประกอบสำหรับกลุ่มและในทางกลับกัน
c) NULL ในรายการฟิลด์การเลือก (SELECT)
ง) อ้างอิงถึงรายละเอียดของลิงค์เสีย

เป็นโมฆะใช้ในโอเปอเรเตอร์ SELECT (ราวกับว่ากำลังตรวจสอบว่าค่าว่าง (Value IS NULL)):
รหัส 1C v 8.x
ทางเลือก
เมื่อค่าเป็น NULL ผลลัพธ์จะเป็น NULL
ค่าอื่น
ตอนจบ

ตัวอย่างอื่น:
รหัส 1C v 8.x SELECT
เลือกเมื่อ Nomenclature การบัญชี ยอดดุลยอดเงินคงเหลือเป็น NULL แล้ว 0
ELSE Nomenclature การบัญชี Balances.Quantity Balance AS ปริมาณ Balance
จาก

ที่ไหน

การทำงาน ISNULL (ค่า, ResultIf NULL)ส่งกลับค่าของพารามิเตอร์ตัวแรกถ้าไม่ใช่ NULL และค่าของพารามิเตอร์ตัวที่สองเป็นอย่างอื่น
เป็น SELECT ... END ที่ยุบแล้ว แต่แนะนำให้ใช้ IS NULL
รหัส 1C v 8.x
เลือก
ISNULL (Directory.Nomenclature.Article, "---") AS Article,
Reference.Nomenclature.Presentation AS Nomenclature

ตัวอย่างอื่น:
รหัส 1C v 8.x
เลือก
ไดเรกทอรีของการตั้งชื่อ
เป็นโมฆะ (NomenclatureAccountingBalance.QuantityRemainment, 0) เป็นจำนวนที่เหลือ
จาก
Directory.Nomenclature AS Directory
ซ้ายเข้าร่วม สะสม Register.AccountingNomenclature.Balances AS AccountingNomenclatureBalance
ซอฟต์แวร์ NomenclatureAccountingBalances.Nomenclature = Nomenclature Directory.Link
ที่ไหน
DirectoryNomenclature.ThisGroup = FALSE
ในตัวอย่างนี้ ได้รับองค์ประกอบทั้งหมดของแค็ตตาล็อกไอเท็ม หลังจากนั้นสำหรับแต่ละรายการ ยอดคงเหลือปัจจุบันจะได้รับจากการลงทะเบียนการสะสม เพราะ สำหรับรายการที่ไม่มียอดดุล ตารางเสมือนของยอดดุลจะไม่ส่งกลับรายการบันทึก จากนั้น การเชื่อมต่อในช่อง "NomenclatureAccountRemains.Quantity" จะมีค่า NULL สำหรับรายการที่มี ไม่มียอดคงเหลือ เพื่อให้มีค่า 0 แทนที่จะเป็นค่า NULL ในผลลัพธ์การสืบค้น เราใช้ฟังก์ชัน IS NULL () ซึ่งจะทำการเปลี่ยนค่าที่ต้องการ

เป็นโมฆะแตกต่างจาก CHOICE ด้วยเหตุผลดังต่อไปนี้:
ก) หากเป็นโมฆะ แบบสอบถามจะอ่านได้ดีกว่า (ง่ายกว่า)
b) ถ้า IS NULL ถ้าตรวจสอบนิพจน์ที่ซับซ้อน นิพจน์จะทำงานเร็วขึ้น เนื่องจากมีการประเมินหนึ่งครั้ง
c) ถ้า IS NULL นิพจน์แทนที่จะถูกแปลงเป็นประเภทของนิพจน์ที่ทดสอบ ถ้าเป็นประเภทสตริง (ความยาว) หรือตัวเลข (ความกว้างบิต)

คุณไม่สามารถตรวจสอบค่า NULL ด้วยความเท่าเทียมกันทั่วไปได้ เนื่องจากตรรกะสามค่าทำงานใน SQL - True, False, NULL และผลลัพธ์ของการเปรียบเทียบจะเป็น UNKNOWN ซึ่งใน 1C 8.0 จะคล้ายกับ FALSE
โมฆะ<>0 ดังนั้นสำหรับผู้อ้างอิงด้านซ้ายภายนอก ระบบการตั้งชื่อพร้อมตารางยอดคงเหลือ ราคา คู่สัญญาที่มีการตั้งถิ่นฐานร่วมกัน หากไม่มีบันทึกดังกล่าว จะมีค่า NULL ซึ่งไม่เท่ากับ 0 ทางออกที่ดีที่สุดคือ IS NULL

27.06.2017

NULL, IS NULL () และ IS NULL ในคำขอ 1C

NULL .คืออะไร

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

NULL ไม่เท่ากับ NULL!

หากในแบบสอบถาม 1C คุณต้องการกำหนดการเลือก (เงื่อนไข) ด้วยการตรวจสอบ NULL การสร้างแบบฟอร์ม "WHERE VT. Field1 = NULL" จะส่งกลับเสมอ โกหก! ในการตรวจสอบ ให้ใช้ตัวดำเนินการพิเศษ

คำขอ 1C มีค่าเป็นโมฆะ

ในการตรวจสอบค่า (หรือทำงานกับค่า) สำหรับ NULL คุณต้องใช้โครงสร้างต่อไปนี้ "WHERE VT. Field1 IS NULL" หรือตัวอย่างอื่นใช้ในการก่อสร้าง ทางเลือก"CHOICE | WHEN VT.Field1 IS NULL | THEN" เป็นที่น่าสังเกตว่าฟังก์ชันการตรวจสอบฟิลด์สำหรับ NULL เป็นหนึ่งในการใช้ทรัพยากรมากในการสืบค้น 1C ดังนั้น หากคุณต้องการใช้ในเงื่อนไขการสืบค้น ลองคิดดูว่าสามารถแทนที่การตรวจสอบดังกล่าวได้หรือไม่ การเชื่อมต่อภายใน(ประเภทของการรวมแบบสอบถามซึ่งมีเพียงระเบียนที่มีอยู่ในทั้งสองตารางเท่านั้นที่ยังคงอยู่ในส่วนที่เลือก)

ฟังก์ชัน IS NULL () ในคำขอ 1C

การทำงาน ISNULL ()ให้คุณแทนที่ค่าที่ขาดหายไปในฟิลด์คำขอด้วยค่าที่ระบุ (ค่ามาตรฐาน, stub)
ตัวอย่างเช่น หากไม่มีข้อมูลเกี่ยวกับต้นทุนของผลิตภัณฑ์ เราจะระบุว่ามีค่าเท่ากับ 0 (ศูนย์) "SELECT | IS NULL (WT.Price, 0) AS Price | FROM Balance of Products AS WT"

บทสรุป

เขียนคำถามของคุณอย่างถูกต้องและเหมาะสมที่สุด เพราะคำขอที่ไม่ดีคือเบรกและรหัสอึ)