1'lerde Karmanov basit mantıksal ifadeler. Mantıksal işlemler (1s kurumsal)

1'lerde Karmanov basit mantıksal ifadeler.  Mantıksal işlemler (1s kurumsal)
1'lerde Karmanov basit mantıksal ifadeler. Mantıksal işlemler (1s kurumsal)

Kural olarak, herhangi bir programlama dilinin incelenmesi, ilk yazma örneğiyle başlar. en basit program("Selam Dünya!"). Bu, işi temel sözdizimsel yapılarla görsel olarak göstermek için yapılır. Yeni bir geliştirme ortamı öğrenirken materyali sunmanın bu yaygın yoluna bir istisna yapmayacağız ve bu nedenle ilk makalemiz de aynı şekilde değerlendirilmelidir. İçinde, 1C:Enterprise 8 platformunda programlama ile ilgili aşağıdaki soruların cevaplarını ayrıntılı olarak analiz edeceğiz:

  • Yerleşik 1C dilinde program kodunu yazmak için nerede ve hangi yardımla?
  • Ne oldu yazılım modülleri Onlarla çalışmanın kuralları nelerdir?
  • Değişken nedir, onunla nasıl çalışılır, nasıl ve nerede ilan edilir?
  • Karşılaştırma, atama ve koşul işleçleri nelerdir ve bunları nasıl kullanıyorsunuz?
  • Boole işlemleri - bunlar nedir ve onlarla nasıl çalışılır?
  • Döngülere neden ihtiyaç duyulur ve nasıl kullanılır?

Makale, henüz 1C:Enterprise 8 platformunda geliştirmeye aşina olmayan, ancak 1C'de programlamayı öğrenmek isteyenler için faydalı olacaktır.

uygulanabilirlik

Materyal, platform "1C:Enterprise 8" sürümleri 8.2 ile ilgilidir. ve 8.3.

Değişkenler ve Operatörler

Bu yazıda yerleşik dil 1C:Enterprise 8'i incelemeye başlıyoruz. Yürütülebilir kod yazılım modüllerinde bulunur.

Bu kadarı yeterli çok sayıdaçeşitli olayları işlemek için tasarlanmış modüller.

Böylece, kullanıcı girişi tek bir modülde işlenir ve kullanıcının belirli bir düğmeyi tıklaması tamamen farklı bir modülde işlenir.

Böylece her modül, yapılandırmanın belirli bir noktadaki davranışını açıklar. Modül, her şeyden önce bir değişken bildirimi bölümü içerir. Onlar. bir modülde bazı değişkenler bildirebiliriz.

Gelecekte, bu modülün prosedürlerinde ve işlevlerinde kullanılabilirler. Bir değişken, Export anahtar kelimesiyle tanımlanırsa, o zaman dışarıda kullanılabilir olacaktır. bu modül. Değişken bildirim satırı örneği:

Rem Antrepo, Bölüm, Depocu İhracat;

Değişkenlerin bildiriminden sonra prosedürler ve fonksiyonlar bölümü vardır.

Bunların arkasında, bu modüle erişim sırasında yürütülecek olan ana programın bölümü bulunur.

Örneğin, ana program bölümünde değişkenleri başlatabilirsiniz, örn. onlara bazı başlangıç ​​değerleri verin:

Durum=1;
Yeni İfade=2;
sonuç=3;

Bir modül, ihtiyaç duyduğumuz farklı eylemleri gerçekleştiren farklı operatörlerin bir kombinasyonu olarak düşünülebilir.

Operatör ayırıcı ";" karakteridir. (noktalı virgül). Bu işaret, operatörün sonunun bir işaretidir. Onlar. operatör şu şekilde yazılabilir:

Sonuç=100X200
+400
-600;

İfadenin kaç satır olduğu önemli değil.

Tabii ki, operatörü tek bir hatta yerleştirmek genellikle daha uygun ve daha nettir, ancak bazen operatörler oldukça uzundur (hat sayısı makul bir şekilde birkaç onluğa ulaşabilir).

Belirli bir yapının, örneğin bir prosedürün son ifadesinde noktalı virgül atlanabilir. Onlar. aşağıdaki kod çalışacaktır:

Prosedür CalculateValue()

Başlangıç ​​Değeri = 100;
Ara Değer = Başlangıç ​​Değeri / 5;
FinalValue = BaşlangıçDeğeri+AraDeğer

Prosedürü Bitir

Ancak, son ifadede noktalı virgül kullanmak daha iyidir. Zamanla inşaatın devam etmesi ve nihai operatörün artık nihai olmaması mümkündür. Bu durumu özel olarak izlememiz gerekecek.

Değişkenler, herhangi bir veri türünün bazı değerlerini tutacak şekilde tasarlanmıştır. İşleme için bilgilerin ara depolanması için kullanılırlar.

Bazı eylemleri gerçekleştiren hemen hemen her yazılım modülünde çeşitli değişkenler vardır. Platform 1C:Enterprise 8'de değerlere göre değişken yazma yumuşaktır.

Örneğin, bir değişken bir veri türünün değerini ve birkaç satır sonra başka bir türü içerebilir:

Oluşturuldu = yanlış;
Oluşturuldu = doğru;
Oluşturuldu = 100;

İlk iki ifadede değişkenlerin değeri boolean olup, üçüncü ifadede sayısal bir değere dönüştürülmüştür. Onlar. yazma, bu değişkene atanan değere bağlıdır.
Değişkenler iki şekilde bildirilebilir:

  • örtük yol (atama operatörünün sol tarafında bahsedilen değişken verilen değişkeni tanımlar, hayır ön açıklama Değişken kelimesiyle değişken, yani özel değişken bildirimi bölümü yoktur);
  • değişkenlerin açık bildirimi (Variable ControlData;). Örneğin, bu değişkenin daha sonra bir işleve aktarılması bekleniyorsa, açık bir değişken bildirimi kullanılır.

Değişken adları için tanımlayıcının klasik açıklaması kullanılır. Tanımlayıcı harfler, sayılar ve alt çizgilerden oluşur. Tanımlayıcı bir harf veya alt çizgi ile başlamalıdır.

Bu durumda değişkenin adı, bu değişkenin anlamını yansıtmalıdır. Tek harfli değişken adları (A, B, C gibi) kötü örneklerdir. Değişkenlerin özünü yansıtmazlar.

Doğru değişken adlarına örnekler: Sayaç (döngü için artan değişken), Yüklenici. Değişken adı birkaç kelime içeriyorsa, netlik için her yeni kelime büyük harfle başlamalıdır.

Yordam, İşlev, Döngü, EndCycle vb. ayrılmış sözcükler değişken adlarında kullanılamaz. (bu yapılar program modülünde kırmızıyla vurgulanmıştır).

Ayrılmış kelimeler yerleşik dil operatörleridir ve bunlardan epeyce vardır. Hepsi içinde sunulmuştur Sözdizimi Yardımcısı.

Veri türlerinin ayrılmış sözcükler olmadığına dikkat edilmelidir (örneğin, Array, Boolean, True, False). Sistem bu tür değişken isimlerini doğru algılayacaktır.

Program kodu yazmak için büyük/küçük harf farketmez. Örneğin, Prosedür kelimesi hem büyük hem de küçük harflerle yazılabilir. Ayrıca, bir kelime içinde büyük ve küçük harfler serpiştirilebilir.

Platform için fark etmez. Ancak görgü kurallarına göre kelime başı büyük, diğer tüm harfler küçük harfle yazılmalıdır.

Dil hakkında. Hem Rusça hem de İngilizce ve iki dilin bir kombinasyonunu kullanabilirsiniz. Birisi için uygunsa, program kodu yazmak için İngilizce'yi güvenle kullanabilir, ayrıca Rusça ve İngilizce'yi birleştirebilirsiniz. Platform için önemli değil.

için birçok isim ingilizce dili hatırlaması oldukça zor. İki dilin birleşimi kullanıldığında, program kodunun okunabilirliği bozulur.

Boole işlemleri

Karşılaştırma işleçleri sıklıkla True veya False döndüren Boole mantığını kullanır.

Örneğin, koşullu bir işleçte şunları karşılaştırabilirsiniz: Olay = Satış ise Algoritma bir kol boyunca gider (yani, değer Doğru ise), Yanlış koşula göre, algoritmanın başka bir kolu yürütülür.

Koşullar oldukça karmaşık olabilir, şu işleçler kullanılarak birleştirilebilirler: AND, OR ve NOT. Yani AND operatörü için:

Gerçek VE Gerçek = Doğru;
Doğru VE Yanlış = Yanlış;
Yanlış VE Doğru = Yanlış;
Yanlış VE Yanlış = Yanlış.

OR operatörü için işlenenlerden birinin True olması yeterlidir, o zaman kombinasyonun değeri True olacaktır. Değer, yalnızca her iki işlenen de False ise False olur.

DEĞİL operatörü basitçe tersine çevirir bugünkü değeri(Yanlıştan Gerçeğe, Doğrudan Yanlışa).

Bu operatörlerin bir kombinasyonunu kullanarak oldukça karmaşık koşullar oluşturabilirsiniz. Karmaşık koşullu ifadeler oluştururken önceliği dikkate alın.

NOT operatörü en yüksek önceliğe sahiptir, ardından AND operatörü ve ardından OR operatörü gelir. Parantez içindeki her şey en yüksek önceliğe sahiptir ve önce yürütülür.

Örneğin, yukarıdaki ifadedeki işlemler için önceliklendirme (yürütme sırası) yapalım:

DEĞİL(Koşul1 VEYA Koşul2) VE Koşul3 VEYA Koşul4
1.Sonuç1 = (Koşul1 VEYA Koşul2);
2. Sonuç2 = Sonuç1 DEĞİL;
3. Sonuç3 = Sonuç2 VE Koşul1;
4. Sonuç = Sonuç3 VEYA Koşul4;

Bir dönüştürme kuralı vardır:

NOT (Koşul1 VEYA Koşul2) = Koşul1 DEĞİL VE Koşul2 DEĞİL.

Bununla birlikte, ifadeyi basitleştirmek için her zaman çaba sarf edilmemelidir, çünkü genellikle mantıksal olarak genişletilmiş ifadenin okunması daha kolaydır.

atama operatörü

Atama operatörü, aynı yazıma sahip olsalar bile eşitlik ile karıştırılmamalıdır.

Atama operatörünün prensibi, soldaki değere (sol taraftaki değişkene), eşittir işaretinin sağındaki değerin atanmasıdır. Bir örnek verelim:

Değişken1 = Değişken2 = Değişken3;

Değişken1'e Boole mantığından eşitlik değeri atanır, yani Değişken2 = Değişken3 ise Doğru, aksi halde Yanlış.

Acemi bir programcının konumunu test ederken, görev genellikle kullanılır: iki değişkenin değerlerini yerlerinde değiştirmek.

Bu problem atama operatörü kullanılarak çözülür ve iki çözümü vardır.

Geçici değişkeni kullanan 1. Çözüm:
TempVar = Değişken1;
Değişken1 = Değişken2;
Değişken2 = TempVariable;

2. Çözüm:
Değişken1 = Değişken1 + Değişken2;
Değişken2 = Değişken1 – Değişken2;
Değişken1 = Değişken1 – Değişken2;

koşullu operatör

Böyle bir If operatörü vardır, bundan sonra bazı koşulları tanımlamak gerekir (koşulun kendisi oldukça büyük olabilir). Koşulu, Then sözcüğü ve yürütülecek ifadeler takip eder.

Bunu Else anahtar kelimesi ve bir dizi başka ifade takip edebilir. Birkaç farklı koşul varsa, bir dizi anahtar kelime kullanabilirsiniz. Başka(aşağıdaki örneğe bakın). Tüm yapı anahtar kelime ile tamamlanmalıdır. EndIf ardından noktalı virgül gelir.

Basit ve çoklu koşullara ek olarak, koşul işlecinin kısaltılmış bir biçimi vardır: ?(Koşul, İfade1, İfade2);

Koşul doğruysa, o zaman İfade1, aksi takdirde - İfade2. Kod örneği: ExpensiveItem = ?(Item.Price>100000, True, False);

Uygulamada değer ile karşılaştırma kayıtları yerine Doğru (Yalan) tip:

Değişken = Doğru ise
Ve
Değişken = Yanlış ise

eşdeğer gösterim aslında kullanılır:

Değişken ise
Ve
Değişken DEĞİLSE

Döngüsel Operatörler

Herhangi bir döngü türü için, bu döngünün sonunun açık bir şekilde belirtilmesi gerekir. anahtar kelime SonDöngü. Birkaç döngü türü vardır.

Sayaca göre döngü- sabit sayıda tekrar içeren bir döngü. Döngüden çıkmanın koşulu ise limit değerin aşılmış olmasıdır. A'nın değerini hesaplamak için kullanmaya bir örnek!

bir = 5;
faktöriyel = 1;
Sayaç için = Bir Döngüyle 1
Faktöriyel = Faktöriyel * Sayaç;
Döngü Sonu;

Koşula göre döngü- koşul doğruyken yürütülür bu döngü. Örnek:

Kalan Toplam = 1000;
Ek Ürün Fiyatı = 243;
Miktar = 0;
Kalan Miktar>0 Döngü iken
Miktar = Miktar+1;
Kalan Tutar = Kalan Tutar - Miktar * Ek Malların Fiyatı;
Ekstra Ürün Fiyatı = Ekstra Ürün Fiyatı * 0.8;
SonDöngü
Miktar = Miktar-1;

Bu döngü, bir ürünün her bir birimini satın aldıktan sonra, önceki fiyatı 0,8 ile çarpılırsa, belirli bir miktar (1000 ruble) için bir ürünün kaç biriminin satın alınabileceğini hesaplar. Malların ilk fiyatı 243 ruble.

Yeni başlayanlar tarafından bu tür bir döngüyü kullanırken yapılan bir hata örneği, döngü koşulu başlangıçta doğru olduğunda, ancak döngünün kendi içinde hiçbir şekilde değişmediği sonsuz bir döngüdür.

Koleksiyonlar arasında geçiş yapın (başka bir ad Her biri için'dir).

Platform oldukça fazla sayıda koleksiyona sahiptir (bunlar, belirli bir türden öğeler içeren kaplardır).

Özel bir tür döngü kullanarak bir koleksiyonun öğeleri üzerinde yineleme yapabilirsiniz.

Örneğin, bir sayı dizisi var, dizinin tüm öğelerinin toplamını hesaplamanız gerekiyor:

Toplam = 0;
Dizi Döngüsünden Her Eleman İçin
Toplam=Toplam+Öğe;
Döngü Sonu;

Döngüler için özel operatörler vardır: Devam etmek Ve iptal etmek.

Döngünün bir noktasında, bu döngünün diğer ifadelerinin yürütülmesi anlamsız hale gelirse, operatör döngünün başına dönmek ve bir sonraki döngüyü düzenlemek için kullanılır. Devam etmek.

Şebeke iptal etmek döngü koşulu doğru olsa bile döngünün bitmesine izin verir.

Bu, 1C'nin dahili dilindeki gelişme ile ilk tanışmamızı tamamlıyor.

Peki Merhaba Dünya? Henüz yazmadık, değil mi? Evet, ama hiçbir şey bunu kendin yapmanı engellemiyor, çünkü. bilgi zaten yeterli. Bu işe yaramazsa, buraya bakabilirsiniz.

Bu makale, "1C neden kötü ve 1C programcıları neden bu kadar beğenilmiyor" yayınına bir tür yanıttır. Uzun yıllardır 1C programlama yapıyorum ve tam da bu tür makale yazarları yüzünden bize şüpheyle baktıklarını söylemek istiyorum. Şimdi sahip olduklarımıza bir göz atalım.

platformu

Bunun için yazılmış bir platform ve konfigürasyonlarımız var.

Platform güncellemesi ek işlevler getiriyor, bazı hataları ortadan kaldırıyor ve doğal olarak bazılarını getiriyor. Prensip olarak, kişisel görüşüme göre, platformu güncelledikten sonra ofiste çalışmanın ayağa kalkması konusunda sızlanmak doğru değil. İlk olarak, güncellemeden önce veritabanı yedeklemeleri sizi veritabanlarıyla ilgili sorunlardan kurtarmalıdır. Eh, kimse eski platforma dönme fırsatını iptal etmedi. Bu, yama / güncelleme yayınlandıktan sonra her şeyin ters gittiği ve verilerin bir kopyasını alma düşüncesinin aklınıza gelmediği için Microsoft'u veya özgür yazılım yazarlarını suçlamak gibi bir şey. evet sorunlar var yazılım tuşları. Ancak donanım olanları kullanabilirsiniz (biraz daha pahalıdırlar) veya ofisi yeniden çalışır duruma getirmek için bakım çalışmaları süresince Ortodoks olmayan yamalar yükleyebilirsiniz; anahtar. 30-40 kişilik bir ofisin işi daha önemlidir.

Yapılandırmalar

Burada eleştirmenlerin dolaşacağı yer var ama sırayla gidelim.

Diyelim ki sıradan bir ticaret organizasyonumuz var ve Ticaret Yönetimi 10.3/11 konfigürasyonunun işlevselliği bizim için yeterli.

Burada bu yazılım ürününü kullanmak için iki seçeneğimiz var:

1. Yalnızca temel işlevleri kullanın ve yapılandırmanın yeni sürümleri çıktığında aylık olarak güncelleyin.
2. Hiç güncelleme yapmayın ve gerekirse ihtiyacımız olan işlevselliği ekleyin.

Aslında, ikinci seçenek en sık kullanılır. Yapılandırma ayarlanır, yapılandırılır ve kuruluşun ömrü boyunca pratik olarak güncellenmez. Maksimum - yazdırılan formlar yönetmeliklere uygun olarak düzeltilir. Temelde bu. Neden sürekli acı çekiyor ve sürümden sürüme geçiş değişiklikleri açık değil.

Elbette itiraz edilebilir ve kuruluşun örneğin muhasebesi olduğu söylenebilir. Bu seçeneği ele alalım.

Mevzuat, vergi oranları ve vergi oranlarındaki değişiklikler nedeniyle muhasebenin sürekli olarak güncellenmesi gerekmektedir. emeklilik fonları ve muhasebecilerin diğer günlük sıkı çalışmaları.

Ticaret ve muhasebe arasında veri aktarmak için genellikle takas kuralları kullanılır. Bu, hangi veri nesnelerinin boşaltıldığını, nasıl yüklendiğini açıklayan, xml ile yazılmış bir tür kuraldır; boşaltma / yükleme anından önce, sonra ek işlemler de belirleyebilirsiniz. Alım satım yapılandırmamız değişmediyse, yükleme kurallarına dokunmayız (nadir istisnalar dışında, aniden önemli değişiklikler olduysa). Yükleme kurallarını da çok sık değiştirmeyeceğiz. Malların alındığı / satıldığı gerçeği her zaman aktarılacaktır. Ancak vergileri ve diğer şeyleri hesaplama prosedürü, güncellenmiş muhasebede zaten hesaplanacak ve bu, ticaret yapılandırmasını hiçbir şekilde etkilemeyecektir.

Hatırlatmanın aptalca olduğunu düşünüyorum ama yine de cüret ediyorum. Güncellemeler ve değişikliklerden önce her zaman yedekleme yapmaya değer. Pekala, kabul etmelisiniz ki, güncellemeden sonra her şey bozuldu ve tüm şirket bir hisseye değer diye mızmızlanmak aptalca. Çünkü satmanın, yazmanın, aramanın bir yolu yok. Veritabanındaki tüm kişiler, hesaplar ve bilgiler.

1C'yi çeşitli iş alanlarında kullanmak

Evet, 1C piyasada bir tekeldir yazılım muhasebe ve teslimatı otomatikleştirmek için tasarlanmıştır finansal tablolar.

Küçük işletme segmentinden bahsediyorsak, çoğu firmada muhasebe için biraz daha karmaşık olan hemen hemen her program kullanılabilir. pivot tablolar Excel'de. Parça mal / hizmet muhasebesi, borç / borç hesaplarının muhasebesi, bordro. üzerinden raporlama yapılabilir. üçüncü taraf programları, içine son sayıların basitçe sürüldüğü.
İşletme daha büyükse, 1C rakipleri Navision, Oracle'dır, çok büyük örneklerde SAP'dir.

Ancak burada başka bir özgünlükle karşı karşıyayız. Mevzuatımız oldukça sık değişiyor. Ve yabancı olanlar, eğer zaten ilgilerini desteklemekle meşgullerse yazılım ürünleri, değişikliklere her zaman ayak uyduramazlar. "NOT 1C programlarının" uygulama sayısı az olduğundan, sahip olma maliyeti yüksek olur. Mevcut bir yazılım ürününü hızlı bir şekilde güncelleyebilecek (bir güncellemenin mevcudiyetine bağlı olarak) veya kurabilecek / yapılandırabilecek bir uzman bulmak zordur.

1C, ticari ekipmanın (tartılar, tarayıcılar, terminaller, puan tabloları) bağlanmasıyla şüphesiz avantajlara sahiptir. Ayrıca, standart konfigürasyonlarda bu, kullanıcı düzeyinde yapılır. Bağlantı ekle harici işleme Ve basılı formlar işlevselliği genişletmek için yapılandırmada değişiklik yapmadan ek raporlar alın. Sonuç olarak, doğru yaklaşırsanız, konfigürasyonun "içine" tırmanmanın bir anlamı yoktur.

Başka bir şey de, yükseltmeden sonra düşecek bir koltuk değneği takmanın ve müşteriyi iğneye koymanın daha kolay ve ucuz olmasıdır. Sonra sürekli olarak 1C'yi sulayın ve bu kadar sıklıkta serbest bıraktıklarını söyleyin ve aynı sıklıkta müşteriye gelip ondan biraz para alın.

Bana öyle geliyor ki, 1C'ye yönelik olumsuz tutumun ana nedeni kodun açık olmasıdır. Hiç kimse Word veya Navision'ın nasıl yazıldığını görmedi ve hiç kimse oraya tırmanıp geliştiricilerin amaçladığından tamamen farklı davranacak kendi düğmelerini ekleyemez. Kullanmadıklarım bile her şeyin güncellendiğini yazmak aptalca. Tarayıcıda yer imlerinden sorumlu olan modülü güncellemeyin, kullanmıyorum. Veya Word'deki üstbilgilere ve altbilgilere hiç gerek yoktur, bunları güncellemeden kaldırın. Beğenmediyseniz güncellemeyin veya güncellerken nelerin değiştiğini okuyun.

Franchisee firmaların temsilcisi veya ortağı olmadığımı da kendi adıma ekleyeceğim. 7 yıldan fazla bir süredir 1C için muhasebe otomasyonu ile uğraşıyorum. Eğer ilgileniyorsanız, size zamanımızın gerçeklerinde muhasebenin incelikleri hakkında daha fazla bilgi verebilirim.

1C 8'deki sorgu dili, iyi bilinenin basitleştirilmiş bir analoğudur " yapılandırılmış dil programlama" (daha sık olarak adlandırıldığı gibi, SQL). Ancak 1C'de yalnızca verileri okumak için kullanılır, verileri değiştirmek için bir nesne veri modeli kullanılır.

Bir başka ilginç fark da Rusça sözdizimidir. Aslında İngilizce yapıları kullanabilirsiniz.

Örnek talep:

SEÇMEK
Bankalar.Adı,
Bankalar.DoğruHesap
İTİBAREN
Dizin Bankalar AS Bankalar

Bu talep, veri tabanında bulunan tüm bankaların isim ve muhabir hesap bilgilerini görmemizi sağlayacaktır.

Sorgu dili en basit ve etkili yöntem bilgi almak. Yukarıdaki örnekten de görebileceğiniz gibi, sorgu dilinde, metadata adlarıyla ( yapılandırmayı oluşturan sistem nesnelerinin bir listesidir, yani dizinler, belgeler, kayıtlar vb.) İtiraz etmeniz gerekir.

Sorgu dili yapılarının açıklaması

İstek yapısı

Veri elde etmek için SELECT (select) ve FROM (from) yapılarını kullanmak yeterlidir. En basit sorgu aşağıdaki gibi:

SELECT * FROM Directorys.

Burada "*", tablonun tüm alanlarının seçimi anlamına gelir ve References.Nomenclature - veritabanındaki tablonun adı.

Daha karmaşık ve genel bir örnek düşünün:

SEÇMEK
<ИмяПоля1>NASIL<ПредставлениеПоля1>,
toplam(<ИмяПоля2>) NASIL<ПредставлениеПоля2>
İTİBAREN
<ИмяТаблицы1>NASIL<ПредставлениеТаблицы1>
<ТипСоединения>BİRLEŞTİRMEK<ИмяТаблицы2>NASIL<ПредставлениеТаблицы2>
İLE<УсловиеСоединениеТаблиц>

NEREDE
<УсловиеОтбораДанных>

GRUPLANDIRMAYA GÖRE
<ИмяПоля1>

GÖRE SIRALA
<ИмяПоля1>

SONUÇLAR
<ИмяПоля2>
İLE
<ИмяПоля1>

İÇİNDE verilen istek“TableName1” ve “TableName” tablolarından “FieldName1” ve “FieldName1” alanlarının verilerini seçiyoruz, “HOW” operatörünü kullanarak alanlara eş anlamlılar atayıp, “TableConnection Condition” belirli bir koşula göre birleştiriyoruz.

Gelen datalardan sadece “WHERE” “Data Selection Condition” koşulunu sağlayan datayı seçiyoruz.Ardından “FieldName2”yi toplarken “FieldName1” alanına göre sorguyu gruplandırıyoruz.“ için total oluşturuyoruz. AlanAdı1” alanı ve son alan “AlanAdı2”.

Son adım, "ORDER BY" yapısını kullanarak sorguyu sıralamaktır.

Genel tasarımlar

Sorgu dilinin genel yapılarını düşünün 1C 8.2.

BİRİNCİN

Kullanarak verilen operatör n sayıda ilk kayıt alabilirsiniz. Kayıtların sırası, sorgudaki sıraya göre belirlenir.

İLK 100 SEÇ
Bankalar.Adı,
Bankalar.Kod AS BIC
İTİBAREN
Dizin Bankalar AS Bankalar
GÖRE SIRALA
Bankalar.Adı

İstek, "Bankalar" dizininin alfabetik olarak sıralanmış ilk 100 girişini alacaktır.

İZİN VERİLMİŞ

Bu tasarım, mekanizma ile çalışmak için uygundur. Mekanizmanın özü, bir bütün olarak tabloyu değil, veritabanı tablosundaki belirli kayıtlar için kullanıcılara okumayı (ve diğer eylemleri) kısıtlamaktır.

Kullanıcı kendisine ulaşamayan kayıtları bir sorgu ile okumaya çalışırsa bir hata mesajı alır. Bundan kaçınmak için "İZİN VERİLDİ" yapısını kullanmalısınız, yani istek yalnızca kendisine izin verilen kayıtları okuyacaktır.

İZİN VERİLDİĞİNİ SEÇİN
DepoEk Bilgiler.Link
İTİBAREN
Directory.Ek Bilgilerin Saklanması

ÇEŞİTLİ

"FARKLI" kullanımı, yinelenen satırların bir 1C sorgusunun sonucuna girmesini engellemeyi mümkün kılacaktır. Çoğaltma, isteğin tüm alanlarının eşleştiği anlamına gelir.

İLK 100 SEÇ
Bankalar.Adı,
Bankalar.Kod AS BIC
İTİBAREN
Dizin Bankalar AS Bankalar

Boş Tablo

Bu yapı, sorguları birleştirmek için çok nadiren kullanılır. Birleştirirken, tablolardan birinde boş bir iç içe tablo belirtmek gerekebilir. "EmptyTable" operatörü tam da bunun için doğru.

Yardım 1C 8'den örnek:

KOMPOZİSYON OLARAK Reference.Number, EMPTYTABLE.(Nom, Tov, Adet) SEÇİN
Document.Invoice'dan
TÜMÜNÜ BİRLEŞTİRİN
SEÇ Bağlantı.Numarası, Kompozisyon.(SatırNumarası, Ürün, Miktar)
Document.Invoice Document.Invoice.Composition.* FROM

ISNULL

Birçok hatadan kaçınmanızı sağlayan çok kullanışlı bir özellik. IsNULL(), NULL değerini istediğiniz değerle değiştirmenize izin verir. Birleştirilmiş tablolarda bir değerin varlığına yönelik kontrollerde sıklıkla kullanılır, örneğin:

SEÇMEK
AdlandırmaRef.Referans,
IsNULL(Kalan Ürün.Kalan Miktar,0) AS MiktarKalan
İTİBAREN


Başka şekillerde de kullanılabilir. Örneğin, her satır için değerin hangi tabloda olduğu bilinmiyorsa:

ISNULL(FaturaFaturaAlındı.Tarihi, FaturaVerildi.Tarihi)

AS, bir tabloya veya alana bir ad (eş anlamlı) atamamızı sağlayan bir operatördür. Yukarıda bir kullanım örneğini gördük.

Bu yapılar çok benzerdir - bir dizi gösterimi elde etmenize izin verirler istenen değer. Tek fark, VIEW herhangi bir değeri bir dize türüne dönüştürürken, REF VIEW yalnızca referans değerleri dönüştürür. Referans veri alanının filtrelerde kullanılması planlanmadığı sürece, optimizasyon için veri birleştirme sistemi sorgularında REFERANS GÖSTERİMİNİN kullanılması önerilir.

SEÇMEK
Görünüm(Bağlantı), //dize, örneğin "10/10/2015 tarihli 123 numaralı ön rapor
Temsil(DeletionMark) AS DeleteMarkText, //string, "Evet" veya "Hayır"
ReferenceRepresentation(DeletionMark) AS DeletionMarkBoolean //boolean, True veya False
İTİBAREN
Document.AdvanceReport

İFADE ETMEK

Express, alan değerlerini istediğiniz veri türüne dönüştürmenizi sağlar. Bir değeri ilkel bir türe veya bir referans türüne dönüştürebilirsiniz.

Başvuru türü için ifade, alanlarda istenen veri türlerini kısıtlamak için kullanılır. bileşik tip, genellikle sistem performansını optimize etmek için kullanılır. Örnek:

EXPRESS(Maliyet Tablosu.Subconto1 AS Dizini.Maliyet Kalemleri).Faaliyet TürüMaliyetlerin Vergi Muhasebesi İçin

İlkel türler için, bu işlev genellikle sınırsız uzunluktaki alanlardaki karakter sayısını sınırlamak için kullanılır (bu tür alanlarla karşılaştırılamaz). Hatayı önlemek için" Karşılaştırma işleminde geçersiz parametreler. Alanlar karşılaştırılamaz
sınırsız uzunluk ve uyumsuz tür alanları
”, bu tür alanları aşağıdaki gibi ifade etmek gerekir:

EXPRESS(Dize OLARAK Yorum(150))

TARİH FARKI

267 1C video dersini ücretsiz alın:

1C sorgusunda IS NULL kullanımına bir örnek:

İÇİNDEN SEÇMEK
referans
SOL YÖNDEN KATILIM
Yazılım
NEREDE MAL KALINTI OLMAZ.MAL KALAN MİKTARI NULL IS

Bir sorgudaki veri türü şu şekilde belirlenebilir: TYPE() ve VALUETYPE() işlevleri kullanılarak veya mantıksal REFERENCE işleci kullanılarak. Bu iki işlev benzerdir.

Önceden tanımlanmış değerler

1C sorgu dilindeki sorgularda geçirilen parametreleri kullanmanın yanı sıra, önceden tanımlanmış değerleri veya . Örneğin, numaralandırmalar, önceden tanımlanmış dizinler, hesap çizelgeleri vb.Bunun için “Değer ()” yapısı kullanılır.

Kullanım örneği:

NEREDE

WHERE Karşı taraflar.KindofContactInformation = Value(Enumeration.Types ofContactInformation.Phone)

NEREDE Hesap Bakiyeleri.Muhasebe Hesabı = Değer(Hesap Planı.Kendini Destekleyen.Kar-Zarar)

Bağlantılar

Bağlantılar 4 tiptir: SOL, SAĞ, KOMPLE, İÇ.

SOL VE SAĞ BİRLEŞTİRME

Birleştirmeler, iki tabloyu belirli bir koşulla bağlamak için kullanılır. özelliği SOL YÖNDEN KATILIM ilk belirtilen tabloyu tamamen alıp ikinci tabloyu koşula göre bağlarız. İkinci tablonun koşulla ilişkilendirilemeyen alanları değerle doldurulur. HÜKÜMSÜZ.

Örneğin:

Karşı Taraf tablosunun tamamını döndürecek ve sadece “Karşı Taraf.Ad = Banka.Adı” koşulunun sağlanacağı yerlerde “Banka” alanını dolduracaktır. Koşul karşılanmazsa Banka alanı şu şekilde ayarlanır: HÜKÜMSÜZ.

1C dilinde RIGHT JOIN kesinlikle benzer Sol yönden katılım bir fark dışında - içinde SAĞ KATIL"ana" tablo birinci değil, ikinci tablodur.

TAM BAĞLANTI

TAM BAĞLANTI iki tablodaki tüm kayıtları göstermesi, yalnızca koşulla birleştirilebilenleri birleştirmesiyle soldan ve sağdan farklıdır.

Örneğin:

İTİBAREN

TAM BAĞLANTI
Dizin Bankalar AS Bankalar

İLE

Sorgu dili, yalnızca kayıtları birleştirme koşulu karşılandığında her iki tabloyu da tam olarak döndürür. Sol/sağ birleşiminden farklı olarak, NULL'ların iki alanda oluşması mümkündür.

İÇ BİRLEŞİM

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

Örneğin:

İTİBAREN
Directory.Karşı Taraflar AS İstemcileri

İÇ BİRLEŞİM
Dizin Bankalar AS Bankalar

İLE
Clients.Name = Banks.Name

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

Dernekler

UNION ve UNION ALL yapısı, iki sonucu bir araya getirir. Onlar. ikisini yürütmenin sonucu, ortak bir "birleştirilecektir".

Yani sistem, yalnızca geçici bir tablo için normal olanlarla tamamen aynı şekilde çalışır.

INDEX BY nasıl kullanılır?

Ancak, bir nokta dikkate alınmalıdır. Geçici bir tablo üzerinde bir dizin oluşturmak da zaman alır. Bu nedenle, yalnızca geçici tabloda 1-2'den fazla kayıt olacağı kesin olarak biliniyorsa " " yapısının kullanılması tavsiye edilir. Aksi takdirde, etki tam tersi olabilir - dizinlenmiş alanların performansı, dizin oluşturma süresini telafi etmez.

SEÇMEK
Para BirimleriPara BirimiSliceLast.Currency AS Para Birimi,
Para BirimleriPara BirimiSliceLast.Course
PUT Döviz Kurları
İTİBAREN
DataRegister.Currency Rates.SliceLast(&Period,) AS Döviz KurlarıSliceLast
DİZİN TARAFINDAN
Para birimi
;
SEÇMEK
FiyatlarTerminoloji.Terminatlandırma,
FiyatlarTerminoloji.Fiyat,
Fiyatlarİsimler.Para Birimi,
FiyatlarPara Birimi.Kurs
İTİBAREN
RegisterInformation.PricesNomenclature.SliceLast(&Nokta,
Öğe B (&Adlandırma) VE FiyatTürü = &FiyatTürü) AS Ürün Fiyatları
LEFT JOIN Döviz Kurları AS Döviz Kurları
Yazılım FiyatlarıNomenclature.Currency = RatesCurrency.Currency

gruplama

1C sorgu dili, özel kullanmanıza izin verir toplama işlevleri sorgu sonuçlarını gruplandırırken. Gruplandırma, kopyaları "ortadan kaldırmak" için toplama işlevleri olmadan da kullanılabilir.

Aşağıdaki işlevler vardır:

Toplam, Miktar, Farklı sayısı, Maksimum, Minimum, Ortalama.

Örnek 1:

SEÇMEK
Malların, Hizmetlerin Gerçekleştirilmesi, Malların Adlandırılması,
SUM(Mal, Hizmet, Mal Satışı. Miktar) Miktar Olarak,
TOPLAM(Mal, Hizmet, Mal Satışı. Tutar) AS Tutarı
İTİBAREN

GRUPLANDIRMAYA GÖRE
Malların, Hizmetlerin, Malların Gerçekleştirilmesi.

Sorgu, malları içeren tüm satırları alır ve bunları kalem bağlamında miktar ve tutarlara göre özetler.

Örnek 2

SEÇMEK
Bankalar.Kod,
NUMBER(FARKLI Bankalar.Referans) AS Yinelenenlerin Sayısı
İTİBAREN
Dizin Bankalar AS Bankalar
GRUPLANDIRMAYA GÖRE
Bankalar.Kodu

Bu örnek, "Bankalar" dizininde BIC'lerin bir listesini gösterecek ve her biri için kaç kopya olduğunu gösterecektir.

Sonuçlar

Toplamlar, hiyerarşik bir yapıya sahip bir sistemden veri almanın bir yoludur. Toplama işlevleri, gruplamalarda olduğu gibi özet alanları için de kullanılabilir.

Toplamları pratikte kullanmanın en popüler yollarından biri, malların toplu olarak silinmesidir.

SEÇMEK




İTİBAREN
Belge.Malların SatışıHizmetler.Mallar MallarınHizmetMalların Gerçekleşmesi OLARAK
GÖRE SIRALA

SONUÇLAR
TOPLA(Sayı),
TOPLA(Tutar)
İLE
terminoloji

Sorgu aşağıdaki hiyerarşi ile sonuçlanacaktır:

Genel sonuçlar

Tüm "toplamlar" için toplam almanız gerekiyorsa, "TOTAL" operatörünü kullanın.

SEÇMEK
Malların, Hizmetlerin, Malların Gerçekleştirilmesi, İsimlendirme AS İsimlendirme,
Gerçekleşme Malları Hizmet Malları Referans AS Belgesi,
Mal Satışı, Hizmet, Mal Miktarı AS Miktarı,
Malların Hizmet Mallarının Gerçekleşmesi Tutar AS Tutar
İTİBAREN
Belge.Malların SatışıHizmetler.Mallar MallarınHizmetMalların Gerçekleşmesi OLARAK
GÖRE SIRALA
Mal ve Hizmet Mallarının Gerçekleşmesi Referans Tarih
SONUÇLAR
TOPLA(Sayı),
TOPLA(Tutar)
İLE
ORTAKTIR,
terminoloji

Sorguyu çalıştırmanın bir sonucu olarak, aşağıdaki sonucu elde ederiz:

Hangi 1 seviye gruplandırma, gerekli tüm alanların toplanmasıdır.

sipariş vermek

ORDER BY operatörü, bir sorgunun sonucunu sıralamak için kullanılır.

İlkel türler (dize, sayı, boolean) için sıralama olağan kurallara göre yapılır. Referans türlerinin alanları için sıralama, referansın koduna veya gösterimine göre değil, referansın dahili temsiline (benzersiz tanımlayıcı) göre yapılır.

SEÇMEK

İTİBAREN
Dizin İsimlendirme AS İsimlendirme
GÖRE SIRALA
İsim

Sorgu, terminoloji referans kitabının adlarının alfabetik olarak sıralanmış bir listesini görüntüler.

otomatik düzenleme

Sıralanmamış bir sorgunun sonucu, rastgele temsil edilen bir satır kümesidir. 1C platformunun geliştiricileri, aynı sorguları yürütürken aynı sıradaki satırların çıktısını garanti etmez.

Tablo kayıtlarını sabit bir sırayla görüntülemeniz gerekiyorsa, "Otomatik Sıralama" yapısını kullanmanız gerekir.

SEÇMEK
Terminoloji İsim AS İsim
İTİBAREN
Dizin İsimlendirme AS İsimlendirme
OTO SİPARİŞ

Sanal Tablolar

1C'deki sanal tablolar, diğer benzer sözdizimlerinde bulunmayan, 1C sorgulama dilinin benzersiz bir özelliğidir. sanal tablo - hızlı yol kayıtlardan profil bilgilerinin alınması.

Her kayıt tipinin, kayıt ayarlarına bağlı olarak farklılık gösterebilen kendi sanal tabloları vardır.

  • önce kes;
  • ikinci dilim.
  • kalanlar;
  • cirolar;
  • bakiyeler ve cirolar.
  • alt sözleşmeden hareketler;
  • cirolar;
  • devirler Dt Kt;
  • kalanlar;
  • bakiyeler ve cirolar
  • alt sözleşme
  • temel;
  • grafik verileri;
  • gerçek geçerlilik süresi

Çözüm geliştirici için veriler bir (sanal) tablodan alınır, ancak aslında 1C platformu birçok tablodan alır ve bunları istenen forma dönüştürür.

SEÇMEK
Depolardaki MallarKalıntılar Ve Cirolar.
Depolardaki MallarKalıntılar Ve Cirolar.Miktar
Depolardaki MallarKalıntılar Ve Cirolar. Miktar Ciro,
Depolardaki MallarKalıntılar Ve Cirolar.MiktarGelen,
Depolardaki MallarKalıntılar Ve Cirolar.MiktarTüketim
Mallar Depolarda Kalanlar ve Cirolar Miktar
İTİBAREN
Birikim Kaydı Depolardaki Mallar Kalanlar ve Cirolar AS Depolardaki Mallar Kalanlar Ve Cirolar

Böyle bir sorgu, büyük miktarda veriyi hızlı bir şekilde almanızı sağlar.

Sanal Masa Seçenekleri

Sanal tablolarla çalışmanın çok önemli bir yönü, parametrelerin kullanılmasıdır. Sanal tablo seçenekleri, seçim ve özelleştirme için özel seçeneklerdir.

Bu tür tablolar için, WHERE yan tümcesinde seçimi kullanmak yanlış kabul edilir. Sorgunun yetersiz hale gelmesine ek olarak, yanlış veriler almak da mümkündür.

Bu tür parametrelerin kullanımına bir örnek:

Birikim Kaydı.DepolardakiMallar.KalanlarVeCirolar(&BaşlangıçDönemi, &BitişDönemi, Ay, Hareketler VEDönemSınırlar, Sınıflandırma = &Gerekli Adlandırma)

Sanal tablolar için algoritma

Örneğin, "Kalanlar" türündeki en çok kullanılan sanal tablo, iki fiziksel tablodan - dengeler ve hareketler - verileri depolar.

Sanal bir tablo kullanırken, sistem aşağıdaki işlemleri gerçekleştirir:

  1. Toplamlar tablosunda tarihe ve boyutlara göre en yakın hesaplanan değeri alıyoruz.
  2. Hareket tablosundaki tutarı toplamlar tablosundaki tutara “ekleyin”.


Çok basit adımlar bir bütün olarak sistemin performansını önemli ölçüde artırabilir.

Sorgu Oluşturucuyu Kullanma

Sorgu oluşturucu- veritabanı sorgularının geliştirilmesini büyük ölçüde kolaylaştıran, 1C Enterprise sistemine yerleşik bir araç.

Sorgu oluşturucunun oldukça basit, sezgisel bir net arayüz. Yine de, sorgu oluşturucunun kullanımını daha ayrıntılı olarak ele alalım.

Sorgu metni oluşturucu, program kodunda doğru yerde bağlam menüsü (sağ tıklama) ile başlatılır.

1C sorgu oluşturucusunun açıklaması

Tasarımcının her sekmesini daha ayrıntılı olarak ele alalım. İstisna Oluşturucu sekmesidir, bu ayrı bir tartışma konusu.

Tablolar ve alanlar sekmesi

Bu sekme, raporda görüntülenecek veri kaynağını ve alanları belirtir. Aslında burada SELECT.FROM yapıları açıklanmaktadır.

Kaynak, fiziksel bir veritabanı tablosu, sanal kayıt tablosu, geçici tablolar, iç içe geçmiş sorgular vb. olabilir.

Sanal tabloların içerik menüsünde, sanal tablonun parametrelerini ayarlayabilirsiniz:

Bağlantılar sekmesi

Sekme, birkaç tablonun bağlantılarını tanımlamak için kullanılır, JOIN kelimesiyle yapılar oluşturur.

Gruplandırma sekmesi

Bu sekmede sistem, tablo sonucunun istenen alanlarını gruplandırmanıza ve özetlemenize olanak tanır. GROUP BY, SUM, MINIMUM, AVERAGE, MAXIMUM, NUMBER, NUMBER OF FARKLI yapılarının kullanımı açıklanmıştır.

Koşullar sekmesi

WHERE yapısından sonra istek metnine giren her şeyden, yani alınan verilere uygulanan tüm koşullardan sorumludur.

Gelişmiş sekme

sekme bunlara ek olarakçok önemli olan her türlü parametreyle dolu. Özelliklerin her birine bakalım.

gruplama Kayıtları Seçmek:

  • İlk N– sorguda yalnızca N kaydı döndüren bir parametre (İLK operatörü)
  • Yinelenen yok– alınan kayıtların benzersizliğini sağlar (FARKLI operatör)
  • İzin verilmiş– yalnızca sistemin dikkate alarak seçmenize izin verdiği kayıtları seçmenize izin verir (İZİN VERİLEN yapı)

gruplama İstek Türü ne tür bir sorgu olacağını belirler: veri getirme, geçici bir tablo oluşturma veya geçici bir tabloyu yok etme.

Aşağıda bir bayrak var Daha sonra değişiklik için alınan verileri kilitleyin. Verilerin okunduğu andan değiştirildiği andan itibaren güvenliğini sağlayan veri kilidini ayarlama özelliğini etkinleştirmenizi sağlar (yalnızca Otomatik mod kilitler, DEĞİŞİM İÇİN inşa edin).

Birleştirmeler/Takma Adlar sekmesi

Sorgu tasarımcısının bu sekmesinde, farklı tabloları ve takma adları (AS yapısı) birleştirme özelliğini ayarlayabilirsiniz. Tablolar sol tarafta listelenmiştir. İşaretleri tablonun önüne ayarlarsanız, JOIN yapısı kullanılacaktır, aksi takdirde - JOIN ALL (iki yöntem arasındaki farklar). Sağ tarafta farklı tablolardaki alan karşılıkları belirtilir, karşılık belirtilmezse sorgu NULL döndürür.

Sipariş sekmesi

Burada değerlerin sıralama düzenini (ORDER BY) - azalan (DESC) veya artan (ASC) belirlersiniz.

Ayrıca ilginç bir bayrak var - otomatik düzenleme(sorguda - AUTOORDER). Varsayılan olarak, 1C sistemi verileri "kaotik" bir sırayla görüntüler. Bu bayrağı ayarlarsanız, sistem verileri dahili verilere göre sıralar.

Toplu Sorgu sekmesi

Sorgu Tasarımı sekmesinde yenilerini oluşturabilir ve aynı zamanda gezinme olarak da kullanabilirsiniz. İstek metninde paketler “;” (noktalı virgül) sembolü ile ayrılır.

Sorgu oluşturucudaki sorgu düğmesi

Sorgu oluşturucunun sol alt köşesinde, sorgunun metnini istediğiniz zaman görüntüleyebileceğiniz bir İstek düğmesi vardır:

Bu pencerede, istekte ayarlamalar yapabilir ve yürütebilirsiniz.


Sorgu Konsolunu Kullanma

Sorgu Konsolu - basit ve uygun yol karmaşık sorgularda hata ayıklamak ve hızla bilgi almak için. Bu yazıda, Query Console'un nasıl kullanılacağını anlatmaya ve Query Console'u indirmek için bir bağlantı sağlamaya çalışacağım.

Bu araca daha yakından bakalım.

İndirme isteği konsolu 1C

Öncelikle sorgulama konsolunu kullanmaya başlamak için onu bir yerden indirmeniz gerekiyor. İşlemler genellikle iki türe ayrılır - yönetilen formlar ve geleneksel olanlar (veya bazen 8.1 ve 8.2 / 8.3 olarak adlandırılırlar).

Bu iki görünümü tek bir işlemde birleştirmeye çalıştım - istenen çalışma modunda açılıyor istenilen şekil(yönetilen modda, konsol yalnızca kalın modda çalışır).

1C sorgu konsolunun açıklaması

Sorgu konsolunu incelememize ana işleme panelinin bir açıklamasıyla başlayalım:

Sorgu konsolunun başlığında, son sorgunun yürütme süresini milisaniye doğrulukla görebilir, bu, farklı tasarımları performans açısından karşılaştırmanıza olanak tanır.

Komut çubuğundaki ilk buton grubu, mevcut isteklerin kaydedilmesinden sorumludur. harici dosya. Bu çok uygundur, her zaman karmaşık bir sorgu yazmaya geri dönebilirsiniz. Veya, örneğin, bir listeyi saklayın tipik örnekler bir yapı veya diğeri.

Sol tarafta bulunan "Talep" alanından yeni talepler oluşturabilir ve bunları ağaç yapısında kaydedebilirsiniz. İkinci düğme grubu, yalnızca istek listesini yönetmekten sorumludur. Bununla bir istek oluşturabilir, kopyalayabilir, silebilir, taşıyabilirsiniz.

  • Koşmakrica etmek– basit yürütme ve sonuç alma
  • Paketi yürüt- bir grup istekteki tüm ara istekleri görüntülemenizi sağlar
  • Geçici tabloları görüntüleme- geçici sorguların döndürdüğü sonuçları bir tabloda görmenizi sağlar

İstek parametreleri:

İstek için geçerli parametreleri ayarlamanıza izin verir.

Sorgu parametreleri penceresinde aşağıdakiler ilginçtir:

  • Düğme İstekten al geliştiricinin rahatlığı için istekteki tüm parametreleri otomatik olarak bulur.
  • bayrak Tüm istekler için tek parametreler– ayarlandığında, genel istek listesindeki istekten isteğe geçerken işlenmesi parametreleri temizlemez.

Bir parametreyi bir değerler listesi olarak ayarlamaçok basit, bir parametre değeri seçerken değeri sil düğmesine (çapraz) tıklamanız yeterlidir, sistem sizden veri tipini seçmenizi ister, burada “Değer listesi”ni seçmeniz gerekir:

Ayrıca üst panelde sorgu konsolu ayarlarını çağırmak için bir düğme vardır:

Burada sorgu otomatik kaydetme seçeneklerini ve sorgu yürütme seçeneklerini belirleyebilirsiniz.

Konsol istek alanına istek metni girilir. Bu, basit bir sorgu test seti ile veya özel bir araç olan sorgu oluşturucuyu çağırarak yapılabilir.

İstek oluşturucu 1C 8 şu adresten çağrılır: bağlam menüsü (sağ düğme fare) giriş alanına tıkladığınızda:

Ayrıca bu menüde kullanışlı özellikler, temizleme veya isteğe yeni satır karakterleri ("|") ekleme veya istek kodunu şu uygun biçimde alma gibi:

İstek = Yeni İstek;
Sorgu.Metin = ”
|SEÇ
| Para Birimleri.Bağlantı
| KİMDEN
| El Kitabı Para Birimleri Olarak Para Birimleri”;
QueryResult = Query.Execute();

Sorgu konsolunun alt alanı, bu işlemin kendisi için yaratıldığı sorgu sonucu alanını görüntüler:



Ayrıca sorgu konsolu, listeye ek olarak, toplamları içeren sorgular için verileri bir ağaç biçiminde görüntüleyebilir.

Sorgu Optimizasyonu

1C kurumsal 8.3'ün üretkenliğini artırmanın en önemli noktalarından biri optimizasyonistekler. Bu nokta bizim için de çok önemli. geçen sertifika. Aşağıda tipik nedenlerin bir tartışması yer almaktadır. optimum performans sorgular ve optimizasyon yöntemleri.

WHERE yapısını kullanan sanal bir tablodaki seçimler

Sadece VT parametreleri aracılığıyla bir sanal tablonun detaylarına filtre uygulamak gerekir. Hiçbir durumda sanal bir tabloda seçim için WHERE yapısını kullanmamalısınız, bu optimizasyon açısından büyük bir hatadır. WHERE kullanılarak seçim yapılması durumunda, aslında sistem TÜM kayıtları alacak ve ancak o zaman gerekli olanları seçecektir.

SAĞ:

SEÇMEK

İTİBAREN
Birikim kaydı.Kuruluşların Mevduat Sahipleri ile karşılıklı yerleşimler.Bakiyeler(
,
Kuruluş = &Kuruluş
VE Bireysel = &Bireysel) NASIL Mevduat Sahipleri ile Karşılıklı ÖdemelerKuruluşlarBakiyeler

YANLIŞ:

SEÇMEK
Mevduat SahipleriKuruluşlarBakiyeler ile karşılıklı ödemeler.MiktarBakiyesi
İTİBAREN
Birikim Defteri Kuruluşların Mudileri ile Karşılıklı Takaslar Bakiye(,)
NEREDE
DepositorsOrganizationsBalances.Organization = &Organization ile karşılıklı ödemeler
VE Mevduat SahipleriOrganizasyonlarBakiyeler ile karşılıklı ödemeler.Bireysel = &Bireysel

Bileşik türdeki bir alanın değerini nokta aracılığıyla alma

Noktalı bir sorguda bileşik türdeki verileri alırken, sistem tam olarak bileşik tür alanında mümkün olan tür sayısı kadar tabloyu sola birleştirir.

Örneğin, optimizasyon için kayıt girişi - kayıt şirketi alanına atıfta bulunmak son derece istenmeyen bir durumdur. Kayıt şirketi, aralarında kayda veri yazabilen tüm olası belge türlerinin bulunduğu bileşik bir veri türüne sahiptir.

YANLIŞ:

SEÇMEK
RecordSet.Registrator.Date,
Kayıt Kümesi.Sayı
İTİBAREN
Biriktirme Register.GoodsOrganization Bir Kayıtlar Dizisi OLARAK

Yani, aslında, böyle bir sorgu bir tabloya değil, 22 veritabanı tablosuna atıfta bulunacaktır (bu kayıtta 21 kayıt şirketi türü vardır).

SAĞ:

SEÇMEK
SEÇENEK
WHEN GoodsOrg.Registrar LINK Document.Sale of GoodsServices
SONRA EXPRESS(GoodsOrg.Registrar AS Document.Sale of GoodsServices).Tarih
WHEN GoodsOrg.Registrar LINK Document.Receipt of GoodsServices
SONRA EXPRESS(Mal Kuruluşu Sicil Memuru AS Belgesi Mal/Hizmet Alımı). Tarih
BİTİŞ TARİHİ,
MalOrg.Miktar
İTİBAREN
RegisterAccumulation.GoodsOrganizations AS GoodsOrg

Veya ikinci seçenek - örneğin bizim durumumuzda bu tür bilgileri aksesuarlara eklemek - bir tarih eklemek.

SAĞ:

SEÇMEK
MalOrganizasyonları.Tarih,
ÜrünlerOrganizasyonlar.Miktar
İTİBAREN
RegisterAccumulation.GoodsOrganizations AS GoodsOrganizations

Birleştirme koşulundaki alt sorgular

Optimizasyon için, birleştirme koşullarında alt sorguların kullanılması kabul edilemez, bu, sorguyu önemli ölçüde yavaşlatır. Bu gibi durumlarda VT kullanılması tavsiye edilir. Bağlanmak için, yalnızca meta verileri ve BT nesnelerini, bunları daha önce bağlantı alanlarına göre dizine eklemiş olmanız gerekir.

YANLIŞ:

SEÇMEK …

SOL YÖNDEN KATILIM (
Bilgi kaydından SEÇİN.Sınırlar
NEREDE …
GRUPLANDIRMAYA GÖRE…
) İLE …

SAĞ:

SEÇMEK …
PUT Limitleri
FROM Bilgi kaydı.Sınırlar
NEREDE …
GRUPLANDIRMAYA GÖRE…
ENDEKS TARAFINDAN…;

SEÇMEK …
İLE Belge.Malların GerçekleştirilmesiHizmetler
LEFT JOIN Limitleri
İLE …;

Kayıtları Sanal Tablolara Bağlama

Sanal bir tabloyu başkalarına bağlarken sistemin en iyi şekilde çalışmadığı durumlar vardır. Bu durumda, sorgunun performansını optimize etmek için şunu koymayı deneyebilirsiniz: sanal masa geçici tablo sorgusunda birleştirilmiş alanları dizine eklemeyi hatırlayarak geçici bir tabloya dönüştürün. Bunun nedeni, VT'lerin genellikle DBMS'nin birkaç fiziksel tablosunda yer almasıdır, sonuç olarak, seçimleri için bir alt sorgu derlenir ve sorun önceki paragrafa benzer.

Dizine eklenmemiş alanlarda filtre kullanma

Sorguları derlerken en yaygın hatalardan biri, dizinlenmemiş alanlarda koşulların kullanılmasıdır, bu durum sorgu optimizasyon kuralları. Sorgu, dizine eklenmemiş alanlar tarafından filtrelenirse, DBMS sorguyu en iyi şekilde gerçekleştiremez. Geçici bir tablo alınmışsa, bağlantı alanlarının da indekslenmesi gerekir.

Her koşul için uygun bir indeks bulunmalıdır. Uygun bir dizin, aşağıdaki gereksinimleri karşılayan bir dizindir:

  1. Dizin, koşulda listelenen tüm alanları içerir.
  2. Bu alanlar dizinin en başındadır.
  3. Bu seçimler arka arkaya gider, yani sorgu koşulunda yer almayan değerler aralarına “sıkışmaz”.

DBMS doğru dizinleri almazsa, tablonun tamamı taranacaktır - bu, performans üzerinde çok olumsuz bir etkiye sahip olacak ve tüm kayıt kümesinde uzun süreli bir kilitlenmeye neden olabilir.

Koşullarda mantıksal VEYA kullanma

Hepsi bu kadar, bu makale, her 1C uzmanının bilmesi gereken sorgu optimizasyonunun temel yönlerini ele aldı.

Sorguları geliştirme ve optimize etme konusunda çok faydalı ücretsiz bir video kursu, şiddetle tavsiye ederim yeni başlayanlar ve ötesi!

27.06.2017

1C sorgularında NULL, ISNULL() ve IS NULL

NULL nedir

HÜKÜMSÜZ bir sorgunun sonucu olarak, değer olmadığı anlamına gelir (değil boş değer, boş değil, boş referans değil).
Örneğin sorgu tablolarının birleştirilmesi sonucunda birleştirme alanları ile bağlantı yapıldığında tabloların hiçbirinde değer bulunamadı. Veya istek, var olmayan bir özniteliğe (özelliğe) atıfta bulunur.

NULL, NULL'a eşit değil!

1C sorgusunda NULL kontrolü ile bir seçim (koşul) uygulamak istiyorsanız, "WHERE VT.Field1 = NULL" gibi bir yapı her zaman geri döner YALAN! Kontrol etmek için özel bir operatör kullanmalısınız.

1C isteğinde NULL VAR

NULL için bir değeri test etmek (veya değerlerle çalışmak) için aşağıdaki "WHERE VT.Field1 IS NULL" yapısını kullanmalısınız. Veya başka bir örnek, yapıda kullanın SEÇENEK"SEÇİM | VT.Field1 OLDUĞUNDA NULL | SONRA" Bir alanı NULL için kontrol etme işlevinin, 1C sorgularında en yoğun kaynak tüketen işlevlerden biri olduğunu belirtmekte fayda var. Bu nedenle, bir sorgu koşulunda kullanmak istiyorsanız, böyle bir kontrolü değiştirmenin mümkün olup olmadığını düşünün. iç bağlantı(yalnızca her iki tabloda da bulunan kayıtların seçimde kaldığı sorgularda birleştirme türü).

1C sorgusunda ISNULL() işlevi

İşlev ISNULL() istek alanındaki eksik değeri belirtilen değerle (standart değer, saplama) değiştirmenizi sağlar.
Örneğin, malların maliyeti hakkında bir bilgi yoksa, o zaman 0 (sıfır) olarak belirtiriz "SEÇ | SAHİP OL(T.Fiyat, 0) OLARAK Fiyat | Kalan Mallardan VT OLARAK"

Çözüm

Sorguları doğru ve en iyi şekilde yazın. Çünkü kötü bir istek bir fren ve bok kodudur)

Herhangi bir programlama dilinde, şube ifadeleri (koşullu ifadeler). Belirli bir koşulun doğruluğuna bağlı olarak, bir veya daha fazla komut dizisi yürütüldüğünde.

1C programlama dilinde, bu amaca inşaat tarafından hizmet edilir.

Eğer< Логическое выражение>Sonra //Komut kümesi 1 ElseIf< Логическое выражение>Sonra //Komut seti 2 Else //Komut seti 3 EndIf ;

İşin algoritması oldukça basittir. Operatörleri takip eden mantıksal ifadeler sırayla kontrol edilir. Eğer Ve Başka. Bir sonraki mantıksal ifade bir değer alır almaz Doğru bu mantıksal ifadeyi izleyen komut dizisi yürütülür. Artık kontrol yapılmaz ve yürütme engellenir Eğer…EndIf; bu biter Tüm mantıksal ifadelerin bir değeri varsa Yalan, ifadeyi takip eden komut dizisi yürütülecektir. Aksi takdirde.
Tasarım Başka<Логическое выражение>Daha sonra gerektiği kadar tekrar edilebilir. Ancak operatör gibi hiç kullanılmayabilir. Aksi takdirde. Yani, en basit durumda elimizde:

Eğer< Логическое выражение>Ardından //Komut EndIf ;

Boole ifadeleri kullanabilir matematiksel operatörler karşılaştırmalar (=, >,<, >=, <=, <>) ve mantıksal işlemler (AND, OR, NOT). Bir boolean ifadesinin geri dönmesi gerektiğini anlamak önemlidir. Yalan veya Doğru.

Ve sonra, Boolean değişkenlerinin ve hatta fonksiyonların onun gibi kullanılabileceği anlaşılır hale gelir. Burada bir çift örnek var:

&AtClient İşlevi CheckPermissions() Return True ; EndFunction &AtClient GetWhatNumber() Return 1 ; EndFunction &AtClient Prosedürü BooleanExpressions() Failure = False ; If NOT Failure Then //Komut Seti EndIf ; GetWhatNumber() = 1 ise O zaman //Komut EndIf ; If CheckPermissions() Sonra //Komut kümesi EndIf ; Prosedürü Bitir

Şimdi Boole işlemlerinin kullanımıyla ilgili bir özelliği ele alalım. Diyelim ki şöyle bir şeyimiz var:

Eğer< ЛогическоеВыражение_1>VEYA< ЛогическоеВыражение_2>Daha sonra

Açıktır ki, eğer biz BooleanExpression_1 = Doğru, ardından gerçeği kontrol edin BooleanExpression_2 anlamı yok çünkü neyse bu durumda BooleanExpression_1 VEYA BooleanExpression_2 = True. Ve 8.0 sürümünden başlayarak, platform tam da bunu yapıyor, yani. sonraki mantıksal ifadeler, yalnızca önceden değerlendirilmiş olanlar sonucun bir bütün olarak kesin olarak belirlenmesine izin vermiyorsa değerlendirilecektir. Bu gerçeği bilmek, hatalardan kaçınmanıza ve kod miktarını azaltmanıza olanak tanır.
Örnek olarak, bileşik tipte bir niteliğe sahip olduğumuz ve doluluk açısından kontrol etmemiz gereken yaygın bir duruma bakalım. Diyelim ki kompozit tip bir pervanemiz var. karşı taraf, türü alabilir Dizin.Bireyler veya Directory.Organizations. Bu örneğin zamanı için, işlevi unutun ValueFilled(). Bildiğiniz gibi, bileşik özniteliğin türünü henüz seçmediğimizde, değeri şuna eşittir: Tanımsız. Bu nedenle, değeri tanımsız olduğunda veya boş bir başvuru olduğunda öznitelik boştur. Durumumuzu iki şekilde yazabiliriz:

// Option_1 Yüklenici = Tanımsız ise VEYA Yüklenici. Empty() Sonra Mesaj = New MessageToUser; İleti. Metin = "Karşı taraf seçilmedi"; İleti. Rapor etmek() ; EndIf ; // Option_2 Karşı Taraf ise. Empty() OR Yüklenici = Tanımsız Sonra Mesaj = New MessageToUser; İleti. Metin = "Karşı taraf seçilmedi"; İleti. Rapor etmek() ; EndIf ;

Bu nedenle, yalnızca ilk seçenek doğru şekilde çalışacaktır, çünkü tür henüz seçilmediğinde ve niteliğin değeri şuna eşittir: Tanımsız bunun bir yöntemi yok boş() ve bu durumda ikinci seçenek başarısız olur ve ilk seçenekte platform, tür tanımlanmamışsa boş referans için değeri kontrol etmez, çünkü ilk şart onun için yeterli olacaktır. Gördüğünüz gibi, bazen sonuç, terimlerin yeniden düzenlenmesinden çok fazla değişiyor.

Bazı durumlarda, koşullu bir yapının kısaltılmış gösterimini kullanabilirsiniz. Sözdizimi aşağıdaki gibidir:

? (< Логическое выражение> , < ВыражениеЕслиИстина> , < ВыражениеЕслиЛожь> )

Kural olarak, bir değişken atamak gerektiğinde kullanılır. Farklı anlamlar bazı şartların gerçekleşmesine bağlıdır. Şekil verirken de kullanımı uygundur. Yardımı ile örneğin aşağıdaki kodu yapabiliriz:

Başarısız Olursa, Mesaj Metni = "Hata"; Aksi takdirde Mesaj Metni = "Operasyon tamamlandı"; EndIf ;

sadece bir satıra yazın:

Mesaj Metni = ? (Reddetme, "Hata", "Operasyon tamamlandı") ;