İstekte null var. Boş değerler (null var ve null var()) Bir sorguda boş değerlerle çalışma

Bir sorgu diliyle çalışırken bazen NULL değerini başka bir değerle değiştirmeniz gerektiğinde bir durum ortaya çıkar. Böyle bir işleme ihtiyaç, örneğin tüm ürün yelpazesi için stok bakiyeleri alınırken ortaya çıkabilir. Bu makalede, bu tür sorunları çözmek için ISNULL() sorgu dili işlevinin kullanımı açıklanmakta ve ayrıca diğer çözüm seçenekleri de tartışılmaktadır.

İşlev ISNULL

Sorgu dili ISNULL() işlevini uygular; bunun amacı, ifadenin NULL değerine sahip olması durumunda bir ifadeyi başka bir ifadeyle değiştirmektir. Bu işlevin sözdizimi şeması şuna benzer:

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

Bu işlev, NULL değilse ilk parametrenin değerini, aksi halde ikinci ifadenin değerini döndürür.


SEÇMEK
ISNULL(AccountingItemRemaining.QuantityRemaining, 0) AS QuantityRemaining
İTİBAREN

NEREDE

Bu örnekte, kalem dizininin tüm öğeleri elde edilir ve ardından her kalem için birikim kaydından mevcut bakiyeler elde edilir. Çünkü Bakiyesi olmayan bir kalem için, sanal bakiye tablosu bir kayıt döndürmeyecek, ardından "Item AccountingRemaining.QuantityRemaining" alanındaki bağlantı sonucunda, orada bulunan kalem için NULL değerler olacaktır. denge yoktu. İstek sonucunun NULL değeri yerine 0 değerini içermesini sağlamak için istenen değiştirmeyi gerçekleştirecek ISNULL() fonksiyonunu kullandık.

SEÇİM işleminin kullanılması

Daha önce açıklanan sorunu çözmek için sorgu dilini SEÇ işlemini kullanabilirsiniz. Öncekine benzer bir isteğin nasıl görüneceğine dair bir örnek şu şekilde görünecektir:


SEÇMEK
İsimlendirme Rehberi İsim,
Muhasebe KalemleriKalan.MiktarKalan NULL OLDUĞUNDA SEÇİM SONRA 0
AKSİ DURUMDA Kalan İsimlendirmenin Muhasebeleştirilmesi Kalan Miktar OLARAK Kalan Miktar
İTİBAREN
Dizin.Adlandırma AS DizinNomenklatürler
SOL BAĞLANTI Birikimleri Kaydet Kalem Muhasebesi Bakiyeler AS Kalem Muhasebe Bakiyeleri
Yazılım Öğesi AccountingRemains.Nomenclature = Nomenclature Directory.Link
NEREDE
Adlandırma Dizini.ThisGroup = YANLIŞ

Bu sorgunun sonucu bir önceki bölümde verilen sorgunun sonucuyla aynı olacaktır.

ISNULL() işlevinin kullanılması, aşağıdaki nedenlerden dolayı SELECT işleminin kullanılmasına tercih edilir: ISNULL() kullanılarak yazmak biraz daha kompakttır ve bu da sorgunun okunabilirliğini artırır. Ayrıca, test edilen ifadenin bir toplama işlevi de dahil olmak üzere karmaşık bir işlev olması durumunda, ISNULL() işlevinin hesaplanması, SELECT işlevi kullanılarak yazılan karşılığından daha hızlı gerçekleştirilebilir.

ISNULL işlevinin özellikleri

ISNULL() işlevi, NULL değerini kontrol eden SELECT işleminin bir benzeri olmasına rağmen yine de bir farkı vardır. Aradaki fark, eğer işlev ifadesi bir dize veya sayısal türdeyse, değiştirme ifadesinin test edilen ifadenin türüne dönüştürülmesidir.

Dolayısıyla, örneğin, test edilen ifadenin String(5) türünde olması ve değiştirme ifadesinin String(10) türünde olması durumunda, sonuç türü String(5) türüne dönüştürülecektir. Sonuç olarak, işlev bir değiştirme ifadesi döndürdüğünde değer beş karaktere kısaltılır.

Sayısal ifadelerde de durum benzerdir: değiştirilen ifadenin değeri, kontrol edilen ifadenin türüne dönüştürülecektir; değiştirilen ifade kesilebilir. Değer dönüştürülemezse sorgu dili sorguda başarısız olur. Örneğin, 1000 sayısını Number(2) türüne dönüştürme girişimi bir hatayla başarısız olacaktır.

ISNULL işlevi (İngilizce eşanlamlısı ISNULL), tabloları birleştirirken boş (eksik) bir değeri değiştirmek için kullanılır. Tablolar isteğe bağlı olabilir (eşleşen alanlar).

Null, 0 sayısı değil, eksik bir değerdir.

Bu işlevin en yaygın kullanımı Sum() işlevinin parametrelerini 0 ile değiştirmektir; boş bir değerin iletilmesi yürütme hatalarına neden olmayabilir ancak özellikle ACS sorgularında kullanıldığında yanlış sonuçlara yol açabilir.

Hızlı geçiş

Yürütülmesinin sonucu:

  • Varsa, belirli bir türün değeri.
  • İkinci parametre (herhangi bir türden) tarafından belirtilen değer.

Sözdizimi ISNULL

NULL(<ПроверяемоеПоле>,<ЗначениеЗамены>)

Bu fonksiyonun bir analogu aşağıdaki yapı olabilir:
SEÇENEK
NE ZAMAN Table.Field1 NULL OLDUĞUNDAN SONRA "Bazı değerler"
AKSİ TAKDİRDE
Tablo.Alan1
SON

NULL pratikte nasıl kullanılır?

1. Bir değeri bir sabitle değiştirmek
ISNULL(Table1.Field1,"Bazı değerler")

ISNULL(Tablo1.Miktar, 0)

2. Bir değeri bir parametreyle değiştirmek

ISNULL(Tablo1.Alan1,&Parametre)

3. Başka bir tablodan bir değerin değiştirilmesi

ISNULL (Tablo1.Alan1,Tablo2.Alan1)

4.Önceden tanımlanmış veya boş bir değer elde etmek için bir işlevi kullanma

ISNULL(Table2.Field1,VALUE(Directory.Counterparties.EmptyLink))

1C sorgu dili, 7.7 ve 8 sürümleri arasındaki temel farklardan biridir. 1C programlamayı öğrenmede en önemli noktalardan biri sorgu dilidir. 1C 8.3'te sorgular veri elde etmek için en güçlü ve etkili araçtır. Sorgu dili, veritabanından bilgileri uygun bir şekilde almanızı sağlar.

Sözdiziminin kendisi klasik T-SQL'i çok andırıyor, ancak 1C'de sorgu dilini kullanarak yalnızca Select yapısını kullanarak veri alabilirsiniz. Dil ayrıca daha karmaşık yapıları da destekler, örneğin (bir istek içinde istek). 1C 8'deki sorgular hem Kiril hem de Latince yazılabilir.

Bu yazıda 1C sorgu dilindeki ana anahtar kelimelerden bahsetmeye çalışacağım:

  • seçmek
  • izin verilmiş
  • çeşitli
  • ifade etmek
  • Birinci
  • Degisim icin
  • Anlam
  • değer türü (ve REFERANS operatörü)
  • seçenek
  • gruplama ölçütü
  • sahip olmak
  • BOŞ
  • Evet BOŞ
  • bağlantılar - sağ, sol, dahili, tam.

Ayrıca istek metnini en iyi şekilde oluşturabileceğiniz 1C dilinin bazı küçük püf noktaları.

1C 8.2 sistemindeki sorgularda hata ayıklamak için özel bir araç sağlanmıştır - sorgu konsolu. Açıklamayı görebilir ve - bağlantısını kullanarak indirebilirsiniz.

1C sorgu dilinin en önemli ve ilginç operatörlerine bakalım.

SEÇME

1C Enterprise 8 sorgu dilinde herhangi bir sorgu bir anahtar kelimeyle başlar SEÇMEK. 1C dilinde UPDATE, DELETE, CREATE TABLE, INSERT yapıları yoktur, bu manipülasyonlar nesne teknolojisinde gerçekleştirilir. Amacı yalnızca verileri okumaktır.

Örneğin:

SEÇMEK
Geçerli Dizin.Adı
İTİBAREN
Dizin.Adlandırma AS Güncel Dizin

Sorgu, öğe adlarını içeren bir tablo döndürecektir.

Yapının yakınında SEÇMEK anahtar kelimeleri bulabilirsiniz DEGİSİM İCİN, İZİN VERİLMİŞ, ÇEŞİTLİ, BİRİNCİ

İZİN VERİLMİŞ— tablodan yalnızca geçerli kullanıcının hak sahibi olduğu kayıtları seçer.

ÇEŞİTLİ- sonucun yinelenen satırlar içermeyeceği anlamına gelir.

SEÇİM (VAKA)

Çoğu zaman bu tasarım programcılar tarafından hafife alınır. Kullanımına bir örnek:

Geçerli Dizin.Adı,

NE ZAMAN Geçerli Dizin.Hizmet THEN

"Hizmet"

SON NASIL GÖRÜNTÜLENİR İsimlendirme

Dizin.Adlandırma AS Güncel Dizin

Örnek, "Öğe Türü" alanında - "Ürün" veya "Hizmet"te bir metin değeri döndürecektir.

NEREDE

Alınan verilere seçim yapmanızı sağlayan 1C sorgu dilinin tasarımı. Lütfen sistemin tüm verileri sunucudan aldığını ve ancak o zaman bu parametreye göre seçildiğini unutmayın.

SEÇMEK
Dizin.Adı
İTİBAREN
Güncel Dizin.Adlandırma AS Güncel Dizin
NEREDE CurrentDirectory.Service = DOĞRU

Örnekte “Servis” özelliğinin değeri “True” olarak ayarlanmış kayıtları seçiyoruz. Bu örnekte aşağıdaki koşulu sağlayabiliriz:

"HİZMET NEREDE"

Temel olarak anahtar kelimeden sonraki ifadenin "True" değerine eşit olduğu satırları seçiyoruz.

İfadelerde doğrudan koşulları kullanabilirsiniz:

NEREDE Kodu = "005215"

Koşullarda “VALUE()” operatörünü kullanarak, 1C isteğinde önceden tanımlanmış öğelere ve numaralandırmalara erişimi kullanın:

NEREDE Öğe Türü = Değer(Numaralandırma.Öğe Türleri.Ürün)

Zaman değerleri aşağıdaki gibi belirtilebilir:

NEREDE Alındı ​​Tarihi > DATETIME(2012,01,01):

Çoğu zaman koşullar, isteğe iletilen parametreler olarak belirtilir:

1C'de 267 video dersini ücretsiz alın:

NEREDE AdlandırmaGrubu= &AdlandırmaGrubu

Bileşik türdeyse öznitelik türüne bir koşul uygulanabilir:

Bir değer listesinden veya diziden seçimi sınırlamanız gerekiyorsa aşağıdakileri yapabilirsiniz:

Biriktirme Kaydı NEREDE Kayıt Memuru B (&Seçime Yönelik Belge Listesi)

Bu durum aynı zamanda çeşitli koşullardan oluşan karmaşık da olabilir:

WHERE Alınma Tarihi > DATETIME(2012,01,01) AND NomenclatureGroup= &NomenclatureGroup VE NOT Hizmet

GRUPLANDIRMA ŞEKLİ

Sonucu gruplamak için kullanılan 1C 8.2 sorgu dilinin tasarımı.

Örneğin:

SEÇMEK
Mal ve Hizmetin Teslim Alınması Mal, Mal,
SUM(MalHizmetMal.Miktarın Teslim Alınması) Miktar Olarak,
SUM(Mal AlımıHizmetMal.Tutar) OLARAK Tutar
İTİBAREN
Belge Mal ve Hizmetin Teslim Alınması Mallar NASIL Mal ve Hizmetin Teslim Alınması Mallar

GRUPLANDIRMA ŞEKLİ
Malların Teslim AlınmasıHizmetlerGoods.Goods

Bu istek, tüm girişleri miktara ve miktara göre özetleyecektir.

Anahtar kelimenin yanı sıra TOPLA Diğer toplama işlevlerini kullanabilirsiniz: MİKTAR, FARKLI SAYISI, MAKSİMUM, MİNİMUM, ORTALAMA.

SAHİP OLMAK

Çoğu zaman unutulan ama oldukça önemli ve kullanışlı bir tasarım. Seçimi bir toplama işlevi biçiminde belirtmenize olanak tanır, bu tasarımda yapılamaz NEREDE.

1C isteğinde HAVING kullanımına örnek:

SEÇMEK
Mal ve Hizmetin Teslim Alınması Mal, Mal,
SUM(MalHizmetMal.Miktarın Teslim Alınması) Miktar Olarak,
SUM(Mal AlımıHizmetMal.Tutar) OLARAK Tutar
İTİBAREN
Belge Mal ve Hizmetin Teslim Alınması Mallar NASIL Mal ve Hizmetin Teslim Alınması Mallar

GRUPLANDIRMA ŞEKLİ
Mal ve Hizmetin Kabulü Mallar.mallar

SUM(Mal AlımıHizmetMal.Miktar) > 5

Yani 5 adetten fazla gelen ürün sayısını seçeceğiz.

ANLAM()

Örneğin:

NEREDE Banka = Değer(Directory.Banks.EmptyLink)

NEREDE İsimlendirme Türü = Değer(Dizin.Adlandırma Türleri.Ürün)

NEREDE Öğe Türü = Değer(Numaralandırma.Öğe Türleri.Hizmet)

Talep edilen TYPE

Veri türü, TYPE() ve VALUETYPE() işlevleri veya mantıksal REFERENCE operatörü kullanılarak kontrol edilebilir.

İFADE ETMEK()

1C sorgularındaki Ekspres operatörü, veri türlerini dönüştürmek için kullanılır.

Sözdizimi: İFADE ETMEK(<Выражение>NASIL<Тип значения>)

Bunu kullanarak dize değerlerini tarihe veya referans değerlerini dize verilerine vb. dönüştürebilirsiniz.

Pratik uygulamalarda Express() operatörü, sınırsız uzunluktaki alanları dönüştürmek için sıklıkla kullanılır, çünkü sınırsız uzunluktaki alanlar seçilemez, gruplandırılamaz vb. Bu tür alanlar dönüştürülmezse bir hata alırsınız Sınırsız uzunluktaki alanlar ile uyumsuz türdeki alanları karşılaştıramazsınız.

SEÇMEK
ContactInformation.Object,
EXPRESS(ContactInfo.View AS ROW(150)) AS Görünümü
İTİBAREN
Bilgi Kaydı İletişim Bilgileri NASIL İletişim Bilgileri

GRUPLANDIRMA ŞEKLİ
EXPRESS(ContactInfo.Temsil AS SATIR(150)),
ContactInformation.Object

BOŞ (YOK)

Kayıttaki değeri kontrol eden ve eşit olup olmadığını kontrol eden 1C sorgu dilinin oldukça kullanışlı bir işlevi HÜKÜMSÜZ, Bu, onu kendi değerinizle değiştirmenize olanak tanır. Çoğu zaman, sanal bakiye ve ciro tablolarını gizlemek için alırken kullanılır. HÜKÜMSÜZ ve net bir 0 (sıfır) koyun.

ISNULL(Ay Öncesi Vergiler.UygulamalıFSS Avantajı, 0)

1C sorgu dili ISNULL'un böyle bir işlevi, herhangi bir değer yoksa sıfır döndürecektir; bu, bir hatayı önleyecektir.

KATILMAK

4 tür bağlantı vardır: SOL, SAĞ, KOMPLE, İÇ.

SOL ve SAĞ BAĞLANTI

Birleştirmeler, belirli bir koşula göre iki tabloyu birbirine bağlamak için kullanılır. Özellik ne zaman SOL YÖNDEN KATILIM belirtilen ilk tabloyu bütünüyle almamız ve ikinci tabloyu koşullu olarak bağlamamızdır. İkinci tablonun koşulla bağlanamayan alanları şu değerle doldurulur: HÜKÜMSÜZ.

1C isteğinde sol birleştirme örneği:

Tablonun tamamını döndürecek ve "Banka" alanını yalnızca "Karşı Taraflar.Adı = Bankalar.Adı" koşulunun karşılandığı yerlerde dolduracaktır. Koşul karşılanmazsa Banka alanı şu şekilde ayarlanacaktır: HÜKÜMSÜZ.

1C 8.3 dilinde SAĞDAN KATIL kesinlikle benzer SOL bağlantı tek bir fark dışında: BAĞLANTI HAKKI"Ana" tablo ikincidir, ilk değil.

TAM BAĞLANTI

TAM BAĞLANTI iki tablodaki tüm kayıtları göstermesi ve yalnızca koşula göre bağlanabildiği kayıtları bağlaması bakımından soldan ve sağdan farklıdır.

Örneğin:

TAM BAĞLANTI
Dizin.Bankalar NASIL Bankalar

İLE

Sorgu dili, yalnızca Kayıtları birleştir koşulu karşılandığında her iki tabloyu da tamamen döndürür. Sol/sağ birleşiminden farklı olarak NULL'un iki alanda görünmesi mümkündür.

İÇ BİRLEŞİM

İÇ BİRLEŞİM yalnızca belirli bir duruma göre bağlanabilecek kayıtları göstermesi bakımından tam olandan farklıdır.

Örneğin:

İTİBAREN
Dizin. Karşı Taraflar AS Müşteriler

İÇ BİRLEŞİM
Dizin.Bankalar NASIL Bankalar

İLE
Clients.Name = Banks.Name

Bu sorgu yalnızca bankanın ve karşı tarafın aynı ada sahip olduğu satırları döndürür.

Çözüm

Bu, 1C 8 sorgu dilinin sözdiziminin yalnızca küçük bir kısmı; gelecekte bazı noktaları daha ayrıntılı olarak ele almaya, göstermeye ve çok daha fazlasını yapmaya çalışacağım!

HÜKÜMSÜZ- kayıp değerler.
Sıfır değeriyle karıştırılmamalıdır! NULL bir sayı değildir, bir boşluğa, boş bir referansa veya Tanımsız'a eşit değildir.

NULL, tür oluşturan bir değerdir, yani. NULL türü ve bu türden tek bir değer vardır.

Aşağıdaki durumlarda sorguda NULL değerler görünür:
a) Başka bir tabloda karşılık gelen kaydın bulunmadığı bir dış birleştirme (soldaysa - ikincide, sağda - birincide, doluysa - her ikisinde de)
b) Bir grup için öğelerin ayrıntılarına erişim veya bunun tersi.
c) Seçim alanları listesinde NULL (SELECT)
d) Kırık bir bağlantının ayrıntılarına erişim

BOŞ SELECT operatöründe kullanılır (sanki değerin boş olduğu kontrol ediliyormuş gibi (Değer NULL)):
Kod 1C v 8.x
SEÇENEK
WEN Değer NULL OLDUĞUNDAN SONRA ResultIfNULL
BAŞKA Anlamı
SON

başka bir örnek:
Kod 1C v 8.x SEÇİM
Muhasebe KalemleriKalan.MiktarKalan NULL OLDUĞUNDA SEÇİM SONRA 0
AKSİ DURUMDA Kalan İsimlendirmenin Muhasebeleştirilmesi Kalan Miktar OLARAK Kalan Miktar
İTİBAREN

NEREDE

İşlev ISNULL(değer; SonuçIfNULL) NULL değilse ilk parametresinin değerini, aksi takdirde ikinci parametrenin değerini döndürür
SELECT...END daraltılır, ancak ISNULL tercih edilir.
Kod 1C v 8.x
SEÇMEK
ISNULL(Directory.Nomenclature.Article, "---") AS Makale,
Dizin.Adlandırma.Sunum AS Adlandırma

başka bir örnek:
Kod 1C v 8.x
SEÇMEK
İsimlendirme Rehberi İsim,
ISNULL(AccountingItemRemaining.QuantityRemaining, 0) AS QuantityRemaining
İTİBAREN
Dizin.Adlandırma AS DizinNomenklatürler
SOL BAĞLANTI Birikimleri Kaydet Kalem Muhasebesi Bakiyeler AS Kalem Muhasebe Bakiyeleri
Yazılım Öğesi AccountingRemains.Nomenclature = Nomenclature Directory.Link
NEREDE
Adlandırma Dizini.ThisGroup = YANLIŞ
Bu örnekte, kalem dizininin tüm öğeleri elde edilir ve ardından her kalem için birikim kaydından mevcut bakiyeler elde edilir. Çünkü Bakiyesi olmayan bir kalem için, sanal bakiye tablosu bir kayıt döndürmeyecek, ardından "Item AccountingRemaining.QuantityRemaining" alanındaki bağlantı sonucunda, orada bulunan kalem için NULL değerler olacaktır. denge yoktu. İstek sonucunun NULL değeri yerine 0 değerini içermesini sağlamak için istenen değiştirmeyi gerçekleştirecek ISNULL() fonksiyonunu kullandık.

BOŞ Aşağıdaki nedenlerden dolayı CHOICE'tan farklıdır:
a) ISNULL ise sorgu daha iyi okunur (daha basit)
b) ISNULL ise karmaşık bir ifade işaretlenirse bir kez hesaplandığı için daha hızlı çalışır.
c) ISNULL ise, değiştirme ifadesi, String (uzunluk) veya Number (bit derinliği) türündeyse, test edilen ifadenin türüne dönüştürülür.

Her zamanki eşitliği kullanarak NULL değerlerini kontrol edemezsiniz, çünkü SQL üç değerli mantığı kullanır - Doğru, Yanlış, NULL ve böyle bir karşılaştırmanın sonucu, 1C 8.0'da FALSE'a benzeyen BİLİNMEYEN olacaktır.
HÜKÜMSÜZ<>0, yani sol dış birleşimler için bkz. Bakiye tabloları, fiyatlar, karşılıklı uzlaşmalara sahip karşı taraflar, bu tür kayıtların yokluğunda 0'a eşit olmayan NULL olacaktır. En iyi çözüm ISNULL'dur.

HÜKÜMSÜZ- kayıp değerler.
Sıfır değeriyle karıştırılmamalıdır! NULL bir sayı değildir, bir boşluğa, boş bir referansa veya Tanımsız'a eşit değildir.

NULL, tür oluşturan bir değerdir, yani. NULL türü ve bu türden tek bir değer vardır.

Aşağıdaki durumlarda sorguda NULL değerler görünür:
a) Başka bir tabloda karşılık gelen bir kaydın bulunmadığı harici bir birleştirme (soldakiyle - ikinci tabloda, sağdakiyle - ilkinde, tam olanla - her ikisinde de)
b) Bir grup için öğelerin ayrıntılarına erişim veya bunun tersi.
c) Seçim alanları listesinde NULL (SELECT)
d) Kırık bir bağlantının ayrıntılarına erişim

BOŞ SELECT operatöründe kullanılır (sanki değerin boş olduğu kontrol ediliyormuş gibi (Değer NULL)):
Kod 1C v 8.x
SEÇENEK
WEN Değer NULL OLDUĞUNDAN SONRA ResultIfNULL
BAŞKA Anlamı
SON

başka bir örnek:
Kod 1C v 8.x SEÇİM

Muhasebe KalemleriKalan.MiktarKalan NULL OLDUĞUNDA SEÇİM SONRA 0
AKSİ DURUMDA Kalan İsimlendirmenin Muhasebeleştirilmesi Kalan Miktar OLARAK Kalan Miktar
İTİBAREN



NEREDE

İşlev ISNULL(değer; SonuçIfNULL) NULL değilse ilk parametresinin değerini, aksi takdirde ikinci parametrenin değerini döndürür
SELECT...END daraltılır, ancak ISNULL tercih edilir.
Kod 1C v 8.x
SEÇMEK
ISNULL(Directory.Nomenclature.Article, "---") AS Makale,
Dizin.Adlandırma.Sunum AS Adlandırma

başka bir örnek:
Kod 1C v 8.x
SEÇMEK
İsimlendirme Rehberi İsim,
ISNULL(AccountingItemRemaining.QuantityRemaining, 0) AS QuantityRemaining
İTİBAREN
Dizin.Adlandırma AS DizinNomenklatürler
SOL BAĞLANTI Birikimleri Kaydet Kalem Muhasebesi Bakiyeler AS Kalem Muhasebe Bakiyeleri
Yazılım Öğesi AccountingRemains.Nomenclature = Nomenclature Directory.Link
NEREDE
Adlandırma Dizini.ThisGroup = YANLIŞ
Bu örnekte, kalem dizininin tüm öğeleri elde edilir ve ardından her kalem için birikim kaydından mevcut bakiyeler elde edilir. Çünkü Bakiyesi olmayan bir kalem için, sanal bakiye tablosu bir kayıt döndürmeyecek, ardından "Item AccountingRemaining.QuantityRemaining" alanındaki bağlantı sonucunda, orada bulunan kalem için NULL değerler olacaktır. denge yoktu. İstek sonucunun NULL değeri yerine 0 değerini içermesini sağlamak için istenen değiştirmeyi gerçekleştirecek ISNULL() fonksiyonunu kullandık.

BOŞ Aşağıdaki nedenlerden dolayı CHOICE'tan farklıdır:
a) ISNULL ise sorgu daha iyi okunur (daha basit)
b) ISNULL ise karmaşık bir ifade işaretlenirse bir kez hesaplandığı için daha hızlı çalışır.
c) ISNULL ise, değiştirme ifadesi, String (uzunluk) veya Number (bit derinliği) türündeyse, test edilen ifadenin türüne dönüştürülür.

Her zamanki eşitliği kullanarak NULL değerlerini kontrol edemezsiniz, çünkü SQL üç değerli mantığı kullanır - Doğru, Yanlış, NULL ve böyle bir karşılaştırmanın sonucu, 1C 8.0'da FALSE'a benzeyen BİLİNMEYEN olacaktır.
HÜKÜMSÜZ<>0, yani sol dış birleşimler için bkz. Bakiye tabloları, fiyatlar, karşılıklı uzlaşmalara sahip karşı taraflar, bu tür kayıtların yokluğunda 0'a eşit olmayan NULL olacaktır. En iyi çözüm ISNULL'dur.