İstekler oluşturma ve bunlarla çalışma (yeni başlayanlar için). İstek oluşturma ve bunlarla çalışma (yeni başlayanlar için) 1s 8.3 eğer bir istek varsa

1C programlama sadece bir program yazmaktan daha fazlasını içerir. 1C, üzerinde çalıştığı kullanıcı eylemleri ve verilerinin bir külçesidir.

Veriler bir veritabanında saklanır. 1C sorguları, kullanıcıya bir formda göstermek veya işlemek için veritabanından veri almanın bir yoludur.

Raporun temel kısmı 1C talebidir. Bir rapor söz konusu olduğunda ACS, raporun en büyük bölümünü oluşturur.

Oturmak. Nefes al. Sakin ol. Şimdi size haberleri anlatacağım.

1C'de programlama yapmak için 1C programlama dilini bilmek yeterli değildir. Ayrıca 1C sorgu dilini de bilmeniz gerekir.

1C sorgu dili, veritabanından hangi verileri almamız gerektiğini belirtmemize olanak tanıyan tamamen ayrı bir dildir.

Aynı zamanda iki dillidir - yani Rusça veya İngilizce yazabilirsiniz. SQL sorgu diline son derece benzemektedir ve bilenler için rahat olabilir.

1C İstekleri nasıl kullanılır?

Bir kullanıcı 1C'yi Kurumsal modda başlattığında, çalışan istemcide tek bir gram veri yoktur. Dolayısıyla bir dizini açmanız gerektiğinde 1C veritabanından veri ister, yani 1C isteği yapar.

1C sorguları şunlardır:

  • Otomatik sorgular 1C
    Sistem tarafından otomatik olarak oluşturulur. Bir belge listesi formu oluşturdunuz. Bir sütun eklendi. Bu, bu formu Enterprise modunda açtığınızda bir sorgu olacağı ve bu sütuna ait verilerin isteneceği anlamına gelir.
  • Yarı otomatik sorgular 1C
    1C dilinde birçok yöntem (işlev) vardır, erişildiğinde veritabanına sorgu yapılır. Örneğin.GetObject()
  • Manuel 1C sorguları (programcı tarafından özel olarak sorgu olarak yazılmıştır)
    Bir 1C isteğini kendiniz kodla yazabilir ve yürütebilirsiniz.

1C sorguları oluşturma ve yürütme

1C isteği, isteğin 1C istek dilindeki gerçek metnidir.
Metin kalemlerle yazılabilir. Yani alın ve yazın (eğer bu dili biliyorsanız).

1C, çoğu veya neredeyse her şeyin elle kod yazmadan yapılabileceği görsel programlama kavramını desteklediğinden, sorgu dilini bilmeden bir sorgu metnini çizmenize olanak tanıyan özel bir Sorgu Oluşturucu nesnesi vardır. Ancak mucizeler olmaz - bunun için yapıcıyla nasıl çalışacağınızı bilmeniz gerekir.

1C isteğinin metni hazır olduğunda yürütülmesi gerekir. Bu amaçla 1C kodu olan request()'da bir nesne bulunmaktadır. İşte bir örnek:

İstek = Yeni İstek();
Query.Text = "SEÇ
| İsimlendirme.Bağlantı
|DAN
| Dizin.Adlandırma AS Adlandırma
|NEREDE
| İsimlendirme.Hizmet";
Select = Query.Run().Select();

Rapor(Seçim.Bağlantı);
EndCycle;

Örnekte görebileceğiniz gibi 1C isteğini yürüttükten sonra sonuç bize geliyor ve onu işlememiz gerekiyor. Sonuç, tablonun bir veya birkaç satırıdır (özel bir biçimde).

Sonuç normal bir tabloya yüklenebilir:
Getir = Query.Run().Unload(); //Sonuç – değerler tablosu

Veya sadece satır satır dolaşın.
Select = Query.Run().Select();
Select.Next() Döngüsü sırasında
//Sorgu sonuçlarıyla ilgili bir şeyler yapın
EndCycle;

1C istekleriyle çalışma

1C sorgularının temel ilkeleri

1C isteği oluşturmanın temel ilkeleri –
Tablo Başlığından Alan Listesini SEÇİN NEREDE Koşullar

Böyle bir 1C isteği oluşturmanın bir örneği:

SEÇMEK
//seçilecek alanların listesi
Bağlantı,
İsim,
Kod
İTİBAREN
//veriyi seçeceğimiz tablonun adı
//tablo listesi yapılandırıcı penceresindeki nesnelerin listesidir
Dizin.Adlandırma
NEREDE
//seçimi belirtiyoruz
Ürün Tipi = &Hizmet //harici değere göre seçim
Veya Hizmet // Boolean türünde “Hizmet” niteliği, True değerine göre seçim
GÖRE SIRALA
//Sıralama
İsim

1C tablolarının listesi

Tablo adlarını yapılandırıcı penceresinde görebilirsiniz. “Rehberler” yerine “Rehber” yazmanız yeterli, örneğin “Rehber.Nomenklatür” veya “Belge.Mal ve Hizmet Satışı” veya “Birikim Kaydı.Satış”.

Kayıtlar için son sayıları almanızı sağlayan ek tablolar (sanal) vardır.

Bilgi Kaydı.RegisterName.Last Slice(&Date) – Belirli bir tarih için periyodikse, bilgi kaydından 1C isteği

Biriktirme Kaydı.Kayıt Adı.Bakiyeler(&Tarih) – Belirli bir tarih için bakiyeler kaydından 1C talebi

Biriktirme Kaydı.Kayıt Adı.Ciro (&Başlangıç ​​Tarihi, &Bitiş Tarihi) – Başlangıç ​​tarihinden bitiş tarihine kadar olan dönem için ciro kaydından 1C talebi.

Ek ilkeler

Bazı verilerin bir listesini talep ettiğimizde temel prensipler işe yarar. Ancak aynı zamanda numara talep edebiliriz ve istek bunları bizim için sayabilir (örneğin ekleyin).

SEÇMEK
//Quantity(FieldName) – miktarı sayar
//Field AS OtherName – alanı yeniden adlandırır
Miktar (Bağlantı) AS Gönderilen Belgelerin Miktarı
İTİBAREN

NEREDE
Yürütülen

Bu 1C talebi bize toplam belge sayısını döndürecektir. Ancak her belgenin bir Organizasyon alanı vardır. Diyelim ki 1C sorgusunu kullanarak her kuruluş için belge sayısını saymak istiyoruz.

SEÇMEK
//sadece bir belge alanı
Organizasyon,
//miktarı say
Adet(Link) AS AdetKuruluşlara Göre
İTİBAREN
Belge Mal ve Hizmet Satışı
NEREDE
Yürütülen
GRUPLANDIRMA ŞEKLİ

Organizasyon

Bu 1C talebi bize her kuruluş için ("kuruluş bazında" olarak da adlandırılır) belge sayısını döndürecektir.

1C talebini kullanarak bu belgelerin miktarını ek olarak hesaplayalım:

SEÇMEK
//sadece bir belge alanı
Organizasyon,
//miktarı say

//miktarı say

İTİBAREN
Belge Mal ve Hizmet Satışı
NEREDE
Yürütülen
GRUPLANDIRMA ŞEKLİ
//alan listesinde bir count() işlevi ve aynı anda bir veya daha fazla alan varsa kullanılmalıdır - o zaman bu alanlara göre gruplandırmanız gerekir
Organizasyon

Bu 1C talebi aynı zamanda belge miktarını da bize iade edecektir.

SEÇMEK
//sadece bir belge alanı
Organizasyon,
//miktarı say
Miktar(Link) AS MiktarKuruluşlar Tarafından,
//miktarı say
Tutar(BelgeTutarı) AS Tutar
İTİBAREN
Belge Mal ve Hizmet Satışı
NEREDE
Yürütülen
GRUPLANDIRMA ŞEKLİ
//alan listesinde bir count() işlevi ve aynı anda bir veya daha fazla alan varsa kullanılmalıdır - o zaman bu alanlara göre gruplandırmanız gerekir
Organizasyon
PO SONUÇLARI Genel

1C sorgu dili kapsamlı ve karmaşıktır ve tüm yeteneklerini tek bir derste ele almayacağız - sonraki derslerimizi okuyun.

1C sorgu dilinin ek özellikleri hakkında kısaca:

  • Birden çok tablodaki verileri birleştirme
  • İç İçe Sorgular
  • Toplu istek
  • Kendi sanal tablolarınızı oluşturma
  • Değer tablosundan sorgu
  • Değerleri almak ve değiştirmek için yerleşik işlevleri kullanma.

1C Sorgu Oluşturucu

İstek metninin elle yazılmaması için 1C istek tasarımcısı bulunmaktadır. Modülde herhangi bir yere sağ tıklayın ve 1C Sorgu Tasarımcısı'nı seçin.

1C sorgu tasarımcısında solda istediğiniz tabloyu seçin ve sağa sürükleyin.

1C sorgu tasarımcısındaki tablodan gerekli alanları seçin ve sağa sürükleyin. Yalnızca bir alan seçmek değil, aynı zamanda ona bir tür toplama işlevi uygulamak istiyorsanız, sürükledikten sonra alana fareyle iki kez tıklayın. Gruplandırma sekmesinde, gruplama için gerekli alanları seçmeniz (sürüklemeniz) gerekecektir.

1C sorgu tasarımcısındaki Koşullar sekmesinde, gerekli seçimleri aynı şekilde seçebilirsiniz (seçimi yapacağınız alanları sürükleyerek). Doğru koşulu seçtiğinizden emin olun.

Sipariş sekmesinde sıralama belirtilir. Sonuçlar sekmesinde – sonuçların özetlenmesi.

1C sorgu tasarımcısını kullanarak mevcut herhangi bir sorguyu inceleyebilirsiniz. Bunu yapmak için mevcut bir isteğin metnine sağ tıklayın ve ayrıca 1C sorgu tasarımcısını seçin; istek 1C sorgu tasarımcısında açılacaktır.

1C 8 sorgu dili, bir 1C programcısı için vazgeçilmez bir araçtır; daha kısa, basit, anlaşılır kod yazmanıza ve verilerle çalışırken daha az sistem kaynağı kullanmanıza olanak tanır. Bu makalede 1C 8 sorgu diline adanmış bir dizi ders açılıyor.İlk derste bu dilin ana operatörünün yapısına bakacağız - SEÇMEK. Bu operatörü kullanarak veritabanı tablolarından seçimler oluşturabilirsiniz. Seçilen tablo verileri sıralanabilir, üzerine koşullar yerleştirilebilir, diğer tablolardaki verilerle bağlantılandırılabilir ve birleştirilebilir, çeşitli alanlara göre gruplandırılabilir ve çok daha fazlası yapılabilir.

Sorgu dili 1C kurumsal 8 - Operatör yapısı SEÇ

SELECT operatörünün yapısına bakalım (operatörün isteğe bağlı kısımları köşeli parantez içinde gösterilmiştir). 1C sorgu dili, veri örnekleri oluşturmak için geniş bir araç yelpazesi sunar.

SELECT [İZİN VERİLMİŞTİR] [FARKLI] [İLK A] [Alan1] [AS Alias1], [Field2] [AS Alias2], ... [FieldM] [AS AliasB] [PUT TemporaryTableName] [FROM Table1 AS AliasTableTable1 [[INNER JOIN ][LEFT JOIN][FULL JOIN] Table2 AS Alias ​​​​Table2 [[INNER JOIN][LEFT JOIN][FULL JOIN] TableC AS Alias ​​​​TablesC BY Expression1 [And Expression2]...[And ExpressionD]] .. . ... BY Expression1 [And Expression2]...[And ExpressionE]] ... [TableF AS TableF Alias] ... ] [GROUP BY GroupingField1[,] ... [GroupingFieldG]] [WHERE Expression1 [AND İfade2] ... [AND İfadeH]] [TÜMÜNÜ BİRLEŞTİR...] [; ...] [DİZİN BY Alias1 ... AliasB] [TOTALS [ToplamaFonksiyonu(Alan1)][,] [ToplamaFonksiyonu(Alan2)][,] ... [ToplamaFonksiyonu(FieldI)] BY [GENEL][,] [ GroupingField1][,] ... [GroupingFieldj]]

Alanlarla çalışmaya yönelik anahtar kelimeler ve bloklar

  • SEÇMEK— operatörün başlangıcını belirten bir anahtar kelime;
  • İZİN VERİLMİŞ seçimin, belirtilen kullanıcı için okuma erişimine sahip tablo kayıtlarını içermesi gerektiğini belirtir;
  • ÇEŞİTLİ numunenin yalnızca farklı (tüm alanlarda) akışları içermesi gerektiğini belirtir. Başka bir deyişle, yinelenen satırlar örnekten hariç tutulacaktır;
  • İLK A bu anahtar kelimeyi belirtirseniz, sorgu tarafından seçilen satırların yalnızca ilk A'sı seçime dahil edilecektir; burada A bir doğal sayıdır;
  • Alan bloğu— bu blok, seçime dahil edilmesi gereken alanları gösterir. Bu alanlar seçili sütunlar olacaktır. En basit durumda alan şu şekilde görünür: Table Alias.TableFieldName AS Field Alias

    Bu şekilde bu alanı hangi tablodan aldığımızı belirtmiş oluyoruz. 1C sorgu dili herhangi bir takma adı belirtmenize olanak tanır, ancak bunlar aynı SELECT ifadesinde tekrarlanmamalıdır. Bir alan, tablo alanları, sorgu dili işlevleri ve toplama işlevlerinin çeşitli kombinasyonlarından oluşan daha karmaşık olabilir, ancak bu eğitimde bu durumları ele almayacağız;

Tablolarla çalışmaya yönelik anahtar kelimeler ve bloklar

  • PUT GeçiciTabloAdı- anahtar kelime YER belirli bir 1C 8 oturumunda sona erene veya geçici tablo yok edilene kadar RAM'de saklanacak belirli bir adla geçici bir tablo oluşturmayı amaçlamaktadır. Bir 1C 8 oturumundaki geçici tabloların adlarının tekrarlanmaması gerektiğine dikkat edilmelidir;
  • Tablolar ve ilişkiler bloğu— blok, bu sorguda kullanılan tüm tabloların yanı sıra aralarındaki ilişkileri de gösterir. Blok bir anahtar kelimeyle başlar İTİBAREN, ardından ilk tablonun adı ve takma adı gelir. Bu tablo diğer tablolarla ilişkiliyse ilişkiler belirtilir. 1C sorgu dili aşağıdaki bağlantı türlerini içerir:
    • İÇ BİRLEŞİM— soldaki tablodan bir kayıt yalnızca bağlantı koşulu karşılandığında seçime dahil edilecektir; sağ tablodan bir kayıt yalnızca bağlantı koşulu karşılandığında seçime dahil edilecektir;
    • SOL BAĞLANTI— soldaki tablodan bir kayıt her durumda seçime dahil edilecektir, sağdaki tablodan bir kayıt ise yalnızca bağlantı koşulu karşılandığı takdirde seçime dahil edilecektir;
    • TAM BAĞLANTI— her durumda ilk olarak sol tablodaki bir kayıt seçime dahil edilir, daha sonra yalnızca bağlantı koşulu karşılanırsa, her durumda ilk olarak sağ tablodaki bir kayıt seçime dahil edilir, ardından yalnızca bağlantı koşulu karşılanırsa seçime dahil edilir karşılanır. Bu durumda, ortaya çıkan yinelenen satırlar örnekten çıkarılır.

    Bağlantı türünden sonra ikinci tablonun adı ve takma adı belirtilir. Daha sonra anahtar kelime geliyor İLE, ardından mantıksal operatörler tarafından birbirine bağlanan iletişim koşulları gelir VE, VEYA. Koşuldaki her ifadenin bir Boolean değeri (Doğru, Yanlış) döndürmesi gerekir. Birinci tablo ikinci tablodan başka tablolara bağlıysa bağlantı türü yeniden belirtilir ve bu şekilde devam eder. Bağlantıya katılan tabloların her biri sırayla diğer tablolara bağlanabilir, bu sorgu yapısı şemasında gösterilir. Tablo ilkiyle ilgili değilse, bağlantı türü olmadan belirtilir, ardından bağlantıları takip edilebilir vb.;

Anahtar kelimeler ve veri dönüştürme blokları

  • Grup bloğu— bu blok tablo satırlarını gruplamak için kullanılır. Anahtar kelimeden sonra belirtilen alanların değerleri varsa satırlar bir araya getirilir GRUPLANDIRMA ŞEKLİ aynı olduğu ortaya çıktı. Bu durumda, diğer tüm alanlar toplama işlevleri kullanılarak toplanır, ortalaması alınır, büyütülür veya küçültülür. Toplama işlevleri bir alan bloğunda kullanılır. Örnek: Maksimum(TableAlias.TableFieldName) AS FieldAlias
  • Koşul bloğu- anahtar kelimeden sonraki bu blokta NEREDE mantıksal operatörlerle ayrılmış koşullu ifadeler gösterilir VE, VEYA, seçilen satırlardan herhangi birinin örneğe dahil edilebilmesi için toplamdaki tüm koşulların bir değere sahip olması gerekir Doğru.
  • HER ŞEYİ BİRLEŞTİRİN— bu anahtar kelime sorguları birleştirmek için kullanılır (operatörler SEÇMEK). 1C sorgu dili, birkaç sorguyu tek bir sorguda birleştirmenize olanak tanır. Sorguların birleştirilebilmesi için aynı alan grubuna sahip olmaları gerekir;
  • «;» - birbirinden bağımsız ifadeleri ayırmak için noktalı virgül kullanılır SEÇMEK;
  • DİZİN:— anahtar kelime, kendisinden sonra belirtilen alanları indekslemek için kullanılır;
  • Özet bloğu— ağaç benzeri örnekler oluşturmak için kullanılır. Anahtar kelimeden sonra belirtilen gruplandırma alanlarının her biri için İLE, seçimde ayrı bir satır oluşturulacaktır. Bu satırda toplama fonksiyonları kullanılarak anahtar kelimeden sonra belirtilen alanların toplam değerleri hesaplanacaktır. SONUÇLAR.

1C 8 sorgu dilini öğrenmeye devam etmek istiyor musunuz? Daha sonra bir sonraki makaleyi okuyun.

Rica etmek . Metin = "SEÇMEK | StorageUnits.Link |DAN | Directory.usStorageUnitsStorageUnits NASIL kullanılır? // Örnek 1: boş bir boole değeriyle karşılaştırma: |NEREDE | StorageUnits.AllowSelectionFromReserveZone = Yanlış // Örnek 2. ancak bu Boolean tanımlanmışsa, şu şekilde olması daha iyidir: // Negatif Boolean için koşul: |NEREDE | Depolama Birimleri DEĞİL Rezerv Bölgesinden Seçime İzin Ver // Örnek 3. “belirli bir türdeki dizin” tipine sahip boş bir alanın durumuna göre seçim |NEREDE | StorageUnits.ActiveSelectionArea = VALUE(Directory.usSelectionArea.EmptyRef) // Örnek 3a. “belirli bir türdeki belge” türüne sahip boş bir alanın durumuna göre seçim |NEREDE | BilgimizRegister.Document = VALUE(Document.OurDocument.EmptyLink) // Örnek 3b. “farklı türdeki belgeler” türüne sahip boş bir alanın durumuna göre seçim ( bileşik alan) |NEREDE | (OurInformationRegister.Document = VALUE(Document.OurDocument1.EmptyLink) | VEYA OurInformationRegister.Document = VALUE(Document.OurDocument2.EmptyLink) | VEYA... (vb. - bu bileşik alanın tüm olası türleri için koşulları sırayla listeliyoruz) ) // Örnek 4. veya tam tersi, "string" türünde doldurulmuş bir değer seçmeniz gerekiyorsa, koşul yardımcı olacaktır: |NEREDE | Depolama Birimi.Adı > """" // Örnek 5. Bileşik veri türüyle belirli bir türdeki belgeleri seçmeniz gerekiyorsa, örneğin "ÇalışanGörevler" kaydında, "Görev" kaynağının değerleri arasında bileşik bir türü vardır. "Seçim" belgesi mümkündür |NEREDE | EXPRESS(Bilgi KaydıYürütülen Görevler.Görev AS Belgesi.Seçim) LINK Belgesi.Seçim // Örnek 5a. Belirli bir türdeki belgeleri seçmeniz gerektiğinde başka bir benzer örnek | SEÇİM | NE ZAMAN İFADE EDİLMELİ (ag Evrakların Yazışmaları. DocumentBU AS Dokümanı. Mal ve Hizmetin Teslim Alınması) LINK Belgesi. Mal ve Hizmetin Teslim Alınması | SONRA ""Mal ve Hizmetin Teslim Alınması"" | NE ZAMAN İFADE EDİLMELİ (ag Dokümanların Yazışmaları. DocumentBU A.Ş. Dokümanı. Mal ve Hizmet Satışı) LINK Dokümanı. Mal ve Hizmet Satışı | THEN ""Mal ve Hizmet Satışı"" | BAŞKA """" | OLARAK SONLANDIR Belge Görünümü // Örnek 6. tanımsız bir değerin koşuluna göre seçim: |NEREDE | SavedSettings.User = TANIMLANMAMIŞ // Örnek 7. Birikim kaydının "Gelen" hareket türüne göre seçim, "Gider" - benzer şekilde): |NEREDE | RegProductsInRetail.MovementType = VALUE(MovementTypeAccumulation.Incoming) // Örnek 8. Bir istekte, isteğin yürütülmesine gerek olmadığı nasıl belirtilir (örneğin, bazı koşullara bağlı olarak programlı olarak boş bir istek sonucu döndürmeniz gerekir - request.Text = StrReplace(Request.Text, "NEREDE Doc.Link = &DocumentLink" , "YALAN NEREDE");). Bunu yapmak için “Nerede Yanlış” koşulunu eklemeniz yeterlidir. Bu arada, örnekte talep edilen verinin hacmi ne olursa olsun, böyle bir talep anında yerine getirilecektir. |YALAN NEREDE // Örnek 9. Sorgu sonucunun veri içerip içermediğinin kontrol edilmesi: DeğilseRica etmek.Uygulamak().Boş() Daha sonra // Örnek 10. boş bir tarihe göre seçim: |NEREDE | tbStrings.CancellationDate = DATETIME(1, 1, 1)

Bu yazımızda sizinle her şeyi tartışmak istiyoruz 1C sorgu dili işlevleri, Ve sorgu dili yapıları. İşlev ve tasarım arasındaki fark nedir? Fonksiyon parantezlerle ve olası parametrelerle çağrılır ve yapı parantezsiz yazılır. şüphesiz 1C sorgu dilinin tüm yapıları ve işlevleri Veri toplama sürecini esnek ve çok işlevli hale getirin. Bu işlevler ve yapılar istek alanları için geçerlidir ve bazıları koşullar için de geçerlidir.

1C Sorgu Dili İşlevleri

Çünkü net bir açıklama 1C sorgu dili işlevleri yapıların tanımlarından çok daha az yaygın olduğundan, işlevlere bakmaya karar verdik. Şimdi her birine ayrı ayrı bakalım, amacını, sözdizimini ve kullanım örneğini açıklayalım:

1. İşlev TARİH SAAT- bu işlev "Tarih" türünde sabit bir alan oluşturur.

Sözdizimi: TARİH SAAT(<Год>,<Месяц>,<День>,<Час>,<Минута>,<Секунда>)

Kullanım örneği:

2. TARİH FARKI işlevi- boyutlardan birinde (yıl, ay, gün, saat, dakika, saniye) iki tarih arasındaki farkı döndürür. Ölçüm parametre olarak iletilir.

Sözdizimi: FARKTARİH(<Дата1>, <Дата2>, <Тип>)

Kullanım örneği:

Query.Text = "SELECT | DIFFERENCEDATE(DATETIME(2015, 4, 17), DATETIME(2015, 2, 1), DAY) | AS Qty.Days";

3. İşlev VALUE- veritabanından önceden tanımlanmış bir kayıt içeren sabit bir alan ayarlar; ayrıca herhangi bir türden boş bir bağlantı da alabilirsiniz.

Sözdizimi: VALUE(<Имя>)

Kullanım örneği:

request.Text = "SELECT //önceden tanımlanmış öğe | VALUE(Directory.Curregency.Dollar) AS Dolar, //boş bağlantı | VALUE(Document.Mal ve Hizmetlerin Alınması.EmptyLink) AS Makbuzu, //transfer değeri | VALUE(Transfer) . Yasal Bireysel. Bireysel) AS Bireysel, //önceden tanımlanmış hesap | VALUE(Hesap Planı. Kendi kendini destekleyen. Malzemeler) AS Account_10" ;

4. SEÇ işlevi- önümüzde kodda kullanılan IF yapısının bir analogu var, yalnızca bu 1C sorgularında kullanılıyor.

Sözdizimi: SEÇİM NE ZAMAN<Выражение>DAHA SONRA<Выражение>AKSİ TAKDİRDE<Выражение>SON

Kullanım örneği:

request.Text = //eğer miktar 7500'den fazlaysa, o zaman 300 rublelik bir indirim olmalıdır, //yani eğer koşul tetiklenirse fonksiyon //Sum - 300 değerini döndürür //aksi halde istek sadece Sum değerini döndürür "SEÇ | SEÇ | NE ZAMAN TCRmakbuz.Tutar > 7500 | SONRA TCRmakbuz.Tutar - 300 | DİĞER TCRmakbuz.Tutar | TutarWithİndirim Olarak SON |FROM | Belge.MalHizmet Makbuzu.Mallar TCRmakbuzları OLARAK";

5. EKSPRES işlevi- sabit bir alanı belirli bir türle ifade etmenizi sağlar.

Sözdizimi: EXPRESS(AlanAdı AS TürAdı)

Kullanım örneği:

Query.Text = "ÇEŞİTLİ SEÇ | Satış.Kayıt Şirketi.Number, | SEÇ | NE ZAMAN Satış.Kayıt Şirketi BAĞLANTISI Document.Consumable | THEN EXPRESS(Sales.Registrar AS Document.Sarf Malzemesi) | BAŞKA SEÇ | NE ZAMAN Satış.Kayıt Şirketi BAĞLANTISI Document.Uygulama | THEN EXPRESS(Satış.Kayıt AS Belgesi.Uygulama) | SON | ... | SON AS Numarası | FROM | KayıtBirikimler.Satın Almalar AS Satın Almalar";

EXPRESS işlevini karma türlerin olduğu alanlarda kullanmak için başka bir seçenek var mı, bunlar nerede ortaya çıkıyor? En basit örnek, herhangi bir kayıt için “Kayıt Şirketi”dir. Peki neden türü kayıt şirketinde nitelendirmemiz gerekebilir? Kayıt şirketinden "Numara" alanını seçtiğimizde durumu ele alalım, numara hangi tablodan seçilecek? Hepsinin doğru cevabı! Bu nedenle sorgumuzun hızlı çalışması için EXPRESS fonksiyonunu kullanarak açık bir tür belirtmeliyiz.

Kullanım örneği:

Query.Text = "SELECT | EXPRESS(Nomenclature.Comment AS Line(300)) AS Yorum, | EXPRESS(Nomenclature.Sum AS Number(15,2)) AS Sum |FROM | Directory.Nomenclature AS Nomenclature";

6. ISNULL işlevi(alternatif yazım ISNULL) - alan NULL türündeyse, işlevin ikinci parametresiyle değiştirilir.

Sözdizimi: ISNULL(<Поле>, <ПодставляемоеЗначение>)

Kullanım örneği:

Ayrıca HER ZAMAN NULL tipini bir değerle değiştirmeniz tavsiye edilir, çünkü NULL türüyle karşılaştırma, NULL'u NULL ile karşılaştırsanız bile her zaman FALSE değerini döndürür. Çoğu zaman, NULL değerleri tabloların birleştirilmesi (dahili olanlar hariç her türlü birleştirme) sonucunda oluşur.

Query.Text = //Maddenin tamamını ve bakiyelerini seçin //eğer bazı eşyalarda bakiye yoksa, o zaman //NULL alanı olacaktır ve bu alan 0 "SELECT | No. Link, | ISNULL değeriyle değiştirilecektir. (ProductsInStockRemains.InStockRemaining, 0) AS Kalan | FROM | Directory.Nomenclature AS No. | SOL BAĞLANTI Birikimleri Kaydet. GoodsInWarehouses. Remainings AS GoodsInWarehousesRemains | ON (GoodsInWarehousesRemains. Nomenclature = No. Bağlantı)";

7. TEMSİL işlevi- istek alanının bir temsilini almanızı sağlar.

Sözdizimi: VERİM(<НаименованиеПоля>)

Kullanım örneği:

Query.Text = "SELECT | TEMSİL(FreeRemainingRemains.Nomenclature) AS Adlandırması, | TEMSİL(FreeRemainingRemaining.Warehouse) AS Warehouse, | FreeRemainingRemaining.InStockRemaining |FROM |Birikim Kaydı.FreeRemaining.Remaining AS FreeRemainingRemaining";

1C sorgu dilinde yapılar

Sizinle yukarıda tartıştık 1C sorgu dili işlevleri, şimdi düşünmenin zamanı geldi 1C sorgu dilindeki yapılar, daha az önemli ve faydalı değiller, hadi başlayalım.

1. İnşaat BAĞLANTISI- bir referans tipini kontrol etmek için kullanılan mantıksal bir operatördür. En sık, karmaşık türdeki bir alanı belirli bir türe göre kontrol ederken karşılaşılır. Sözdizimi: BAĞLANTI<Имя таблицы>

Kullanım örneği:

request.Text = //kayıt cihazının değer türü belge makbuzu ise, //bu durumda sorgu "Mal alımı", aksi takdirde "Mal satışı" "SELECT | SELECT | WHEN Remainings.Registrar LINK Document.Receipt of Mal ve Hizmetler | SONRA ""Makbuz"" | ELSE ""Tüketim"" | SON AS Hareket Türü | FROM | Biriktirme Kaydı. Depolarda Kalan Ürünler AS Kaldı" ;

2. ARASINDAKİ Tasarım- bu operatör değerin belirtilen aralıkta olup olmadığını kontrol eder.

Sözdizimi: ARASINDA<Выражение>VE<Выражение>

Kullanım örneği:

request.Text = //kodu 1 ila 100 aralığında olan terminolojinin tamamını alın "SELECT | Nomenclature.Link |FROM | Directory.Nomenclature AS Nomenclature |NEREDE | Nomenclature.Code 1 VE 100 ARASINDA" ;

3. Yapı B ve B HİYERARŞİSİ- değerin aktarılan listede olup olmadığını kontrol edin (diziler, değer tabloları vb. liste olarak aktarılabilir). IN HİYERARŞİ operatörü hiyerarşiyi görüntülemenize olanak tanır (Hesap Planının kullanımına bir örnek).

Sözdizimi: İÇİNDE(<СписокЗначений>), HİYERARŞİDE(<СписокЗначений>)

Kullanım örneği:

request.Text = //hesabın tüm alt hesaplarını seç "SELECT | Kendi kendini destekleyen. AS Hesabını Bağla | FROM | Hesap Planı. Kendi kendini destekleyen AS Kendi kendini destekleyen | NEREDE | Kendi kendini destekleyen. HİYERARŞİ DEĞERİNDE Bağlantı (Grafik) Hesaplar. Kendi kendine yeten. Mallar)";

4. BENZER Tasarım- Bu işlev bir dizeyi bir dize deseniyle karşılaştırmamıza olanak tanır.

Sözdizimi: BEĞENMEK "<ТекстШаблона>"

Satır deseni seçenekleri:

% - herhangi bir sayıda rastgele karakter içeren bir dizi.

Rastgele bir karakter.

[...] - köşeli parantez içinde listelenen herhangi bir tek karakter veya karakter dizisi. Numaralandırma, aralığın uçları da dahil olmak üzere aralığa dahil edilen isteğe bağlı bir karakter anlamına gelen a-z gibi aralıkları belirtebilir.

[^...] - olumsuzluk işaretinden sonra listelenenler hariç, köşeli parantez içinde listelenen herhangi bir tek karakter veya karakter dizisi.

Kullanım örneği:

Query.Text = //TABUR kökünü içeren ve //küçük veya büyük harfle başlayan isimlendirmenin tamamını bulun t "SELECT | İsimlendirme. Bağlantı | FROM | Dizin. İsimlendirme AS İsimlendirme | NEREDE | Ürünler. İsim GİBİ "" [Tt ]abur%""" ;

5. Tasarıma İZİN VERİLİR- bu operatör yalnızca arayanın okuma iznine sahip olduğu veritabanından kayıtları seçmenize olanak tanır. Bu haklar kayıt düzeyinde (RLS) yapılandırılır.

Sözdizimi: SELECT anahtar sözcüğünden sonra ALLOWED yazılır

Kullanım örneği:

request.Text = "İZİN VERİLENLERİ SEÇİN | Karşı Taraflar. Bağlantı | FROM | Dizin. Karşı Taraflar OLARAK Karşı Taraflar";

6. Tasarım ÇEŞİTLİ- yinelenen kayıt bulunmayan kayıtları seçmenize olanak tanır.

Sözdizimi: SELECT anahtar sözcüğünden sonra VARIOUS yazılır

Kullanım örneği:

request.Text = //okuyucunun haklarına sahip olduğu kayıtları seçer "ÇEŞİTLİ SEÇ | Karşı Taraflar.Ad |FROM | Dizin. Karşı Taraflar AS Karşı Taraflar" ;

Ayrıca, ÇEŞİTLİ yapı İZİN VERİLEN operatör ve diğer operatörlerle birlikte kullanılabilir.

Kullanım örneği:

request.Text = //okuyucunun haklarına sahip olduğu çeşitli kayıtları seçer "İZİN VERİLEN ÇEŞİTLİLERİ SEÇİN | Karşı Taraflar.Ad |FROM | Dizin. Karşı Taraflar Karşı Taraflar OLARAK";

7. İLK Tasarım- sorgu sonucundan parametrede belirtilen kayıt sayısını seçer.

Sözdizimi: İLK<число>

Kullanım örneği:

request.Text = //"İLK 4 | CCD Numaralarını SEÇİN. Bağlantı | FROM | Dizin. CCD Numaraları AS CCD Numaraları" dizininden ilk 4 CCD numarasını seçin;

8. DEĞİŞİM İÇİN TASARIM- bir tabloyu kilitlemenizi sağlar, yalnızca işlemlerde çalışır (yalnızca otomatik kilitlemelerle ilgilidir).

Sözdizimi: DEGİSİM İCİN<НаименованиеТаблицы>

Kullanım örneği:

Query.Text = "SELECT | Serbest Kalanlar. Adlandırma, | Serbest Kalanlar. Depo, | Serbest Kalanlar Kalanlar. Stokta Kalan | FROM | Biriktirme Kaydı. Serbest Kalanlar. Kalanlar Serbest Kalan Kalanlar OLARAK | DEĞİŞİM İÇİN | Biriktirmeler Kaydı . Serbest Kalanlar. Kalanlar";

9. Tasarım SİPARİŞ VEREN- verileri belirli bir alana göre düzenler. Alan bir bağlantı ise, bayrağı ayarlarken OTOMATİK SİPARİŞ Sıralama, bağlantı temsiline göre gerçekleşir; bayrak kapatılırsa bağlantılar, bağlantı adresinin bellekteki kıdemine göre sıralanır.

Sözdizimi: GÖRE SIRALA<НаименованиеПоля>OTOMATİK SİPARİŞ

Kullanım örneği:

Query.Text = "SELECT | Serbest Kalanlar. İsimlendirme AS Adlandırma, | Serbest Kalanlar. Depo AS Depo, | Serbest Kalanlar. Stokta Kalan | FROM | Birikimleri Kaydet. Serbest Kalanlar. Kalanlar AS Serbest Kalanlar | | SİPARİŞ VER | İsimlendirme | OTOMATİK SİPARİŞ KURTARMA";

10. GRUPLAMAYA GÖRE Tasarım- sorgu dizelerini belirli alanlara göre gruplandırmak için kullanılır. Sayısal alanlar herhangi bir toplama işleviyle kullanılmalıdır.

Sözdizimi: GRUPLANDIRMA ŞEKLİ<НаименованиеПоля1>, .... , <НаименованиеПоляN>

Kullanım örneği:

Query.Text = "SELECT | ProductsInWarehouses.Nomenclature AS Nomenclature, | ProductsInWarehouses.Warehouse, | SUM(GoodsInWarehouses.InStock) AS INSTOCK |FROM | RegisterAccumulations.ProductsInWarehouses AS ProductsInWarehouses | |GRUPLA | ProductsInWarehouses.Nomenclature, | Warehouses.Warehouse'daki Ürünler" ;

11. Tasarım- WHERE yapısına benzer şekilde bir veri seçim koşuluna bir toplama işlevi uygulamanıza olanak tanır.

Sözdizimi: SAHİP OLMAK<агрегатная функция с условием>

Kullanım örneği:

Query.Text = //InStock alanının 3'ten büyük olduğu gruplanmış kayıtları seçer "SELECT | ItemsInStocks.Nomenclature AS Nomenclature, | ItemsInWarehouses.Warehouse, | SUM(ItemsInStocks.InStock) AS INSTOCK |FROM | RegisterAccumulations.ItemsInStocks AS ItemsInStocks | | GRUPLAMAYA GÖRE | Depolardaki Ürünler.İsimlendirme, | Depolardaki Ürünler.Depo | |MEVCUT | AMOUNT(Depolardaki Ürünler.Stoktaki Ürünler) > 3" ;

12. İnşaat İNDEKSİ- sorgu alanını indekslemek için kullanılır. Dizin oluşturmalı bir sorgunun tamamlanması daha uzun sürer ancak dizine eklenen alanlarda aramayı hızlandırır. Yalnızca sanal tablolarda kullanılabilir.

Sözdizimi: DİZİN:<Поле1, ... , ПолеN>

Kullanım örneği:

Query.Text = "SELECT | Ts.NameOS, | Ts.FolderNumber, | Ts.CodeOS, | Ts.Term, | Ts.Type | PLACE DataTs | FROM | &Ts AS Ts | | INDEX BY | Ts.NameOS, | Ts .CodeOS";

13. Tasarım NEREDE- herhangi bir seçim alanına koşul uygulamanıza olanak tanır. Sonuç yalnızca koşulu karşılayan kayıtları içerecektir.

Sözdizimi: NEREDE<Условие1 ОператорЛогСоединения УсловиеN>

Kullanım örneği:

Query.Text = //CompensationRemaining olan tüm kayıtlar seçildi<>0 ve //AmountForCalcCompRemaining > 100 "SELECT | CompensationRPORemains.Counterparty, |CompensationRPORemains.Child, | CompensationRPORemains.CompensationRemaining, | CompensationRPORemains.AmountForCalcCompRemains |Verileri Yerleştir |FROM | Biriktirme Kaydı.CompensationRP.Rema ins AS TazminatRPOstat ki |WHERE |CompensationRPORemaining.CompensationRemaining<>0 | Ve TazminatRPORemains.AmountForCalcCompRemaining> 100" ;

14. Tasarım SONUÇLARI... GENEL- toplamları hesaplamak için kullanılır; tasarım, toplamların hesaplanacağı alanları ve toplam alanlara uygulanan toplama işlevlerini belirtir. TOPLAM yapısını takip eden her alan için toplamlar kullanıldığında veriler gruplanır. İsteğe bağlı bir GENERAL yapısı vardır; kullanımı ayrıca ek gruplama sağlar. Aşağıda istek sonucunun bir örneğini göreceksiniz.

Sözdizimi: SONUÇLAR<АгрегатнаяФункция1, ... , АгрегатнаяФункцияN>İLE<ОБЩИЕ> <Поле1, ... , ПолеN>

Kullanım örneği:

request.Text = "SELECT | Hesaplamalar. Karşı Taraf Anlaşması. Anlaşma Türü AS Sözleşme Türü, | Hesaplamalar. Karşı Taraf Anlaşması AS Sözleşmesi, | Hesaplamalar. Karşı Taraf, | Hesaplamalar. Karşılıklı Uzlaşma Tutarı Bakiye AS Bakiyesi | FROM | Birikim Kaydı. Karşılıklı Karşı Taraflarla Takas. AS Bakiyeleri Hesaplamaları | TOPLAM | AMOUNT (Bakiye) |Yazılım | GENEL, | Anlaşma Türü";

Şekilde talebin yerine getirilmesi sırasında oluşan gruplamalar özetlenmektedir; en üstteki gruplama GENEL bölümünü, ikincisi ise Karşı Taraf SözleşmesiSözleşme Türü alanını ifade etmektedir.

Bu yazımızda 1C sorgu dilinde iç içe tablolar konusunu inceleyeceğiz.

Sorgu seçme alanlarında iç içe geçmiş bir sorgu kaynağı tablosu kullanabilirsiniz. Örneğin, "Hizmetlerin sağlanması" belgesinde Hizmetler'in tablo şeklinde bir kısmı vardır ve dolayısıyla bu tablo şeklinde bölüm seçim alanında da görüntülenebilir. Şimdi bunun nasıl uygulanabileceğini göreceksiniz.

Eğitim veritabanımda sorgu konsolunu başlatacağım, sorgu tasarımcısını açacağım ve “Hizmetlerin Sağlanması” tablosunu seçeceğim.

Bu tabloyu genişletelim

Ve içinde “Hizmetler” tablo bölümünü görüyoruz.

Bu tablo kısmının tamamını seçelim.

Gördüğünüz gibi hizmetin tablolu kısmının tamamı tamamen alanlara girmiştir.

Tablo bölümünün aslında “Hizmetler” adı verilen ayrı bir alan olarak geldiğini ve türünün “İstek Sonucu” olacağını lütfen unutmayın. Bir sorguda iç içe tablonun nasıl kullanılacağını öğrenelim.

İç içe geçmiş tablonun üç alanını bırakalım ve belge başlığından bazı alanları ekleyelim.

Tasarımcıda Tamam'a tıklayalım ve isteğimizin nasıl görüneceğini görelim.

Gördüğünüz gibi talepte “Hizmetler” alanının yanında bir nokta var ve seçilen alanlar ondan sonra parantez içinde listeleniyor.

İsteği yerine getirelim.

Şekilde belgenin tablo kısmında seçilen tüm alanların “Hizmetler” alanında virgüllerle ayrılmış olarak listelendiğini görüyoruz. Tüm sorgu konsollarında yukarıdaki şekildeki gibi bir ekran bulunmaz; bazen sadece “ “ yazabilir.

Bir başka ilginç nokta: iç içe geçmiş bir tabloda alanlar yerine yıldız işareti koyabilirsiniz, ardından tablo bölümünün tüm alanları görünecektir. Bu yapıcıda yapılamaz, yalnızca istekte manuel olarak yapılabilir. Talep aşağıdaki biçimde olacaktır:

Böyle bir isteğin nasıl yerine getirileceğini görelim.

Tek şey, sorgu yapıcıyı açarsak bu yıldız işaretinin kaydedilmeyeceğidir.

Konsolda iç içe tablo ile sorgulama yapmayı öğrendik, şimdi de iç içe tablonun seçim içinde nasıl kullanılacağını öğreneceğiz

Gerçekte, bir sorguyu işlerken iç içe geçmiş bir tabloya erişmek o kadar da zor değildir. Seçime tablonuzun adına göre erişirsiniz ve “Sorgu Sonucu” tipinde bir değişken elde edersiniz. Daha sonra bunu normal bir istek sonucu olarak işlersiniz: İsterseniz örnek alın, isterseniz yükleme yapın.

Aşağıda iç içe geçmiş bir tabloyla çalışan küçük bir kod örneği verilmiştir:


&Sunucuda
Prosedür FillOnServer()
Talep = Yeni Talep;
Rica etmek. Metin = "SEÇMEK
| Ürün Satışı.Link,
| Ürün Satışı.Ürünler.(
| Ürün,
| Miktar
|DAN
| Belge. Ürün Satışı Ürün Satışı NASIL YAPILIR"
;
Getir = Sorgula. Koşmak(). Seçmek();
Güle güle Seçim. Sonraki() Döngüsü
Ağacın En Üst Çizgisi = Ürün Satışı. GetItems();
NewRow = TopRowTree. Eklemek();
Yeni hat. Bağlantı = Seçim. Bağlantı;
TabloÜrünleri = Seçim. Mal;
SeçimÜrünleri = TabloÜrünleri. Seçmek();
Ürün Seçimi Sırasında. Sonraki() Döngüsü
TreeChildRow = YeniSatır. GetItems();
ProductRow = ChildTreeRow. Eklemek();
ProductString. Bağlantı = Ürün Seçimi. Ürün;
ProductString. Miktar = Örnek Öğeler. Miktar ;
EndCycle;
EndCycle;
Prosedürün Sonu

Yukarıdaki kodu açıklayayım.

Öncelikle doğrusal bir seçimimiz var ve bu seçimi, değer ağacının en üst satırını oluşturduğumuz (formdadır) ve içine belgemize bir bağlantı yazdığımız bir döngüde gerçekleştiriyoruz.

Ve sonra en ilginç şey, buna daha sonra hata ayıklayıcıda kendiniz bile bakabilirsiniz, Ürünler seçim alanına dönüyoruz ve kolaylık sağlamak için bu alanı TableProducts'ta ayrı bir değişkene yazıyoruz. Bu değişken “Sorgu Sonucu” tipindedir. Ve bu sonucun bir örneğini kolayca alabilirsiniz. Yaptığımız bu. Bir sonraki işlevi ve while döngüsünü kullanarak bu seçimi atlamak kalır.

Ve bu döngünün içinde seçim alanlarını iç içe geçmiş bir tablonun alanları olarak adlandıracağız ve bunları formdan ağacın alt satırlarına yazacağız.

Bu kodun döndüreceği sonuç budur

Hala sorularınız mı var?

“Yeni Başlayanlar İçin 1C'de Sorgulamalar” kursumu incelediğinizde bunlara kendiniz cevap vereceksiniz. Bunların ve diğer birçok konunun daha ayrıntılı olarak tartışıldığı yer. Tüm bilgiler basit ve erişilebilir bir biçimde verilmiştir ve 1C'de programlamaya özellikle aşina olmayanlar için bile anlaşılırdır.

%20 indirim için promosyon kodu: hrW0rl9Nnx

İstediğiniz miktarda bağış yaparak projemi destekleyin

Gruplarıma katılın.