Sorgu sonuçlarını birleştirin. Sorgu sonuçlarını birleştirin Sorgular nasıl bir 1'de birleştirilir

Sorgu dili, geliştiriciler için 1C 8.3'ün temel mekanizmalarından biridir. Sorguların yardımıyla, veritabanında depolanan herhangi bir veriyi hızlı bir şekilde alabilirsiniz. Sözdizimi SQL'e çok benzer, ancak bazı farklılıklar vardır.

1C 8.3 (8.2) sorgulama dilinin SQL'e göre başlıca avantajları:

  • referans alanlarının referanslarının kaldırılması (bir veya daha fazla noktanın nesne niteliklerine dönüştürülmesi);
  • sonuçlarla çalışmak çok uygundur;
  • sanal tablolar oluşturma yeteneği;
  • istek hem İngilizce hem de Rusça olarak yazılabilir;
  • kilitlenmeleri önlemek için verileri engelleme yeteneği.

1C'de sorgu dilinin dezavantajları:

  • SQL'den farklı olarak, 1C sorgularında verileri değiştirmenize izin verilmez;
  • saklı yordamların olmaması;
  • bir diziyi bir sayıya dönüştürmenin imkansızlığı.

1C sorgulama dilinin temel yapıları hakkındaki mini eğitimimizi inceleyin.

1C'deki isteklerin yalnızca veri almanıza izin vermesi nedeniyle, herhangi bir istek "SEÇ" kelimesiyle başlamalıdır. Bu komuttan sonra veri almak istediğiniz alanlar belirtilir. "*" belirtirseniz, mevcut tüm alanlar seçilecektir. "FROM" kelimesinden sonra verilerin seçileceği yer (belgeler, kayıtlar, dizinler vb.) belirtilir.

Aşağıdaki örnekte, tüm terminolojinin adları "The Nomenclature" referans kitabından seçilmiştir. “NASIL” kelimesinden sonra tablolar ve alanlar için takma adlar (isimler) belirtilir.

SEÇMEK
Terminoloji.Ad AS AdNomenklatür
İTİBAREN
Dizin İsimlendirme AS İsimlendirme

"SELECT" komutunun yanında anahtar kelimeler belirleyebilirsiniz:

  • ÇEŞİTLİ. Sorgu, yalnızca en az bir alanda farklılık gösteren (yinelenenler olmadan) satırları seçecektir.
  • İLK n, Nerede N– seçilecek sonucun başından itibaren satır sayısı. Çoğu zaman, bu yapı sıralama (ORDER BY) ile birlikte kullanılır. Örneğin, tarihe göre belirli sayıda en son belgeyi seçmeniz gerektiğinde.
  • İZİN VERİLMİŞ. Bu tasarım, veritabanından yalnızca geçerli kullanıcı tarafından kullanılabilen kayıtları seçmenize olanak tanır. Bu anahtar kelime kullanılırsa, kullanıcı erişimi olmayan kayıtları sorgulamaya çalıştığında bir hata mesajı alır.

Bu anahtar kelimeler hep birlikte veya ayrı ayrı kullanılabilir.

DEGİSİM İCİN

Bu madde, çakışmaları önlemek için verileri kilitler. Kilitli veriler, işlem bitene kadar başka bir bağlantıdan okunmayacaktır. Bu yan tümcede, kilitlemek istediğiniz belirli tabloları belirtebilirsiniz. Aksi takdirde, tümü engellenecektir. Tasarım yalnızca otomatik engelleme moduyla ilgilidir.

Çoğu zaman, bakiye alırken "DEĞİŞİM İÇİN" maddesi kullanılır. Nitekim programda aynı anda birkaç kullanıcı çalıştığında biri bakiyeleri alırken diğeri bunları değiştirebilir. Bu durumda, ortaya çıkan bakiye artık doğru olmayacaktır. Verileri bu teklifle bloke ederseniz, ilk çalışan doğru bakiyeyi alana ve onunla gerekli tüm manipülasyonları yapana kadar, ikinci çalışanın beklemesi gerekecektir.

SEÇMEK
Karşılıklı yerleşim Çalışan,
Karşılıklı ödemeler Tutar Karşılıklı ödemeler Bakiye
İTİBAREN
Birikim Kaydı Çalışanlar İLE Karşılıklı Yerleştirmeler Karşılıklı Yerleştirme OLARAK Bakiyeler
DEGİSİM İCİN

NEREDE

Yüklenmemiş verilere herhangi bir seçim uygulamak için yapılandırma gereklidir. Kayıtlardan veri almanın bazı durumlarında, sanal tabloların parametrelerinde seçim koşullarını belirtmek daha mantıklıdır. "WHERE" kullanılırken, önce tüm kayıtlar alınır ve ancak o zaman seçim uygulanır, bu da sorguyu önemli ölçüde yavaşlatır.

Aşağıda, belirli bir pozisyona sahip irtibat kişilerini bulma talebine bir örnek verilmiştir. Seçim parametresi şu formata sahiptir: &ParameterName (parametre adı isteğe bağlıdır).

SEÇİM (VAKA)

Yapı, koşulları doğrudan istek gövdesinde belirtmenize olanak tanır.

Aşağıdaki örnekte, "AdditionalField", belgenin gönderilip gönderilmemesine bağlı olarak metin içerecektir:

SEÇMEK
KabulT&U.Link,
SEÇENEK
NE ZAMAN
SONRA "Belge gönderildi!"
BAŞKA "Belge gönderilmedi..."
EkAlan OLARAK SONLANDIRIN
İTİBAREN
Belge.Malın FişiHizmet Olarak FişT&C

KATILMAK

Birleştirmeler, iki tabloyu belirli bir bağlantı koşuluyla bağlar.

SOL/SAĞ BİRLEŞTİRME

LEFT birleştirmenin özü, belirtilen ilk tablonun tamamen alınması ve ikincisinin bağlantının durumuna göre ona eklenmesidir. İkinci tablodaki ilk tabloya karşılık gelen kayıt yoksa, değerleri NULL ile değiştirilir. Basitçe söylemek gerekirse, ana tablo belirtilen ilk tablodur ve ikinci tablonun verileri (varsa) verilerinin yerine zaten konulmuştur.

Örneğin, kalem kalemlerini "Mal ve hizmet girişi" belgelerinden ve fiyatları bilgi kaydından "Ürün fiyatları" almanız gerekir. Bu durumda, herhangi bir pozisyonun fiyatı bulunamazsa, bunun yerine NULL yazın. Belgedeki tüm kalemler, fiyatları olup olmadığına bakılmaksızın seçilecektir.

SEÇMEK
T&U Nomenklatür makbuzu,
Fiyatlar.Fiyat
İTİBAREN
Belge.Malların FişiHizmetlerin.Malların Fiş Olarak KabulüT&C
İÇ BİRLEŞİM
ON Soru-Cevap Nomenklatürünün Alınması = Fiyatlar.Nomenklatür

RIGHT'ta her şey tam tersidir.

TAM BAĞLANTI

Bu tür birleştirme, sonuç olarak hem birinci tablonun hem de ikinci tablonun tüm kayıtlarının döndürülmesi bakımından öncekilerden farklıdır. Belirtilen bağlantı koşulu için birinci veya ikinci tabloda hiçbir kayıt bulunamazsa, bunun yerine NULL döndürülür.

Önceki örnekte tam birleştirme kullanılırken, Mal ve Hizmet Girişi belgesindeki tüm kalem kalemleri ve Kalem Fiyatları kaydındaki tüm son fiyatlar seçilecektir. Hem birinci hem de ikinci tablodaki bulunmayan kayıtların değerleri NULL olacaktır.

İÇ BİRLEŞİM

INNER birleştirme ile FULL birleştirme arasındaki fark, tablolardan en az birinde bir kayıt bulunmazsa, sorgunun onu hiç göstermemesidir. Sonuç olarak, önceki örnekte FULL'u DAHİLİ olarak değiştirirsek, yalnızca Mal ve Hizmet Girişi belgesindeki Kalem Fiyatları bilgi kaydında kendileri için girişler bulunan kalem kalemleri seçilecektir.

GRUPLANDIRMAYA GÖRE

1C sorgularında gruplandırma, tablo satırlarını (gruplandırma alanları) belirli bir ortak özelliğe (gruplandırma alanları) göre daraltmanıza olanak tanır. Gruplandırma alanları yalnızca toplama işlevleri kullanılarak görüntülenebilir.

Bir sonraki sorgunun sonucu, maksimum fiyatlarıyla birlikte öğe türlerinin bir listesi olacaktır.

SEÇMEK
,
MAKS(Fiyat.Fiyat) AS Fiyat
İTİBAREN

GRUPLANDIRMAYA GÖRE
Fiyatlar.Nomenclature.TypeNomenclature

SONUÇLAR

Gruplamadan farklı olarak, toplamları kullanırken tüm kayıtlar görüntülenir ve toplam satırları bunlara zaten eklenir. Gruplandırma yalnızca genelleştirilmiş kayıtları görüntüler.

Sonuçlar tablonun tamamı için ("GENEL" anahtar kelimesi kullanılarak), birkaç alan için, hiyerarşik yapıya sahip alanlar için ("HİYERARŞİ", "YALNIZCA HİYERARŞİ" anahtar sözcükleri) özetlenebilir. Özetlerken, toplama işlevlerini kullanmak gerekli değildir.

Gruplamayı kullanarak yukarıdaki örneğe benzer bir örnek düşünün. Bu durumda, sorgu sonucu yalnızca gruplandırılmış alanları değil, aynı zamanda ayrıntılı kayıtları da döndürür.

SEÇMEK
Fiyatlar.Nomenklatür.Nomenklatür Tipi AS Nomenklatür Tipi,
Fiyatlar.Fiyat AS Fiyat
İTİBAREN
RegisterInformation.PricesNomenclature.SliceLast AS Fiyatlar
SONUÇLAR
MAKSİMUM(Fiyat)
İLE
Tip Terminolojisi

SAHİP OLMAK

Bu işleç, WHERE işlecine benzer, ancak yalnızca toplama işlevleri için kullanılır. Bu operatör tarafından kullanılanlar dışındaki diğer alanlar gruplandırılmalıdır. "WHERE" operatörü, toplama işlevleri için geçerli değildir.

Aşağıdaki örnekte, madde türüne göre gruplandırılmış olarak 1000'i geçerse maksimum madde fiyatları seçilir.

SEÇMEK

MAKS(Fiyat.Fiyat) AS Fiyat
İTİBAREN
RegisterInformation.PricesNomenclature.SliceLast AS Fiyatlar
GRUPLANDIRMAYA GÖRE
Fiyatlar.Nomenclature.TypeNomenclature
SAHİP OLMAK
MAKS(Fiyatlar.Fiyat) > 1000

GÖRE SIRALA

"ORDER BY" operatörü, sorgu sonucunu sıralar. Kayıtların tutarlı bir sırayla çıkarılmasını sağlamak için AUTO-ORDER kullanılır. İlkel türler olağan kurallara göre sıralanır. Başvuru türleri GUID'e göre sıralanır.

Ada göre sıralanmış bir çalışan listesi alma örneği:

SEÇMEK
Çalışanlar.Adı AS Adı
İTİBAREN
Directory.Çalışanlar AS Çalışanları
GÖRE SIRALA
İsim
OTO SİPARİŞ

1C sorgu dilinin diğer yapıları

  • BİRLEŞİN- birinde iki sorgunun sonuçları.
  • TÜMÜNÜ BİRLEŞTİRİN– JOIN'e benzer, ancak aynı satırları gruplamaz.
  • BOŞ MASA- bazen boş bir iç içe tablo belirtmek için sorguları birleştirirken kullanılır.
  • KOYMAK- karmaşık 1C sorgularını optimize etmek için geçici bir tablo oluşturur. Bu tür isteklere toplu istekler denir.

Sorgu dili özellikleri

  • SUBSTRING bir dizeyi belirtilen bir konumdan belirtilen karakter sayısı kadar keser.
  • YIL…İKİNCİ sayısal türün seçilen değerini almanıza izin verir. Giriş parametresi bir tarihtir.
  • DÖNEM BAŞI VE DÖNEM SONU tarihlerle çalışırken kullanılır. Dönem tipi (GÜN, AY, YIL vb.) ek parametre olarak belirtilir.
  • TARİH EKLE belirli bir türün (SANİYE, DAKİKA, GÜN vb.) belirtilen saatini tarihe eklemenizi veya tarihten çıkarmanızı sağlar.
  • TARİH FARKIçıkış değerinin türünü (GÜN, YIL, AY vb.) belirterek iki tarih arasındaki farkı belirler.
  • ISNULL eksik değeri belirtilen ifadeyle değiştirir.
  • SUNUM ve SUNUMBAĞLANTILARI belirtilen alanın dize gösterimini alın. Sırasıyla herhangi bir değer ve yalnızca referans değerleri için kullanılırlar.
  • TİP, DEĞER TİPİ giriş parametresinin türünü belirlemek için kullanılır.
  • BAĞLANTIöznitelik değer türü için mantıksal bir karşılaştırma işlecidir.
  • İFADE ETMEK değeri istenen türe dönüştürmek için kullanılır.
  • TARİH SAAT sayısal değerlerden (Yıl, Ay, Gün, Saat, Dakika, Saniye) "Tarih" türünde bir değer alır.
  • ANLAM 1C talebinde, önceden tanımlanmış değerleri - dizinler, numaralandırmalar, özellik türleri için planlar - belirtmek için kullanılır. Kullanım örneği: " Burada LegalIndividual = Value(Enumeration.LegalIndividual.Individual)«.

Sorgu oluşturucu

1C ile sorgu oluşturmak için çok uygun bir yerleşik mekanizma vardır - sorgu tasarımcısı. Aşağıdaki ana sekmeleri içerir:

  • "Tablolar ve alanlar" - seçilecek alanları ve bunların kaynaklarını içerir.
  • "Bağlantılar" - BAĞLANTI yapısı için koşulları açıklar.
  • "Gruplandırma" - gruplama yapılarının açıklamasını ve bunlar tarafından özetlenen alanları içerir.
  • "Koşullar" - talepteki verilerin seçiminden sorumludur.
  • "Gelişmiş" - "SELECT" komutunun anahtar sözcükleri vb. gibi ek sorgu parametreleri.
  • “Birleştirmeler / Takma Adlar” - tabloları birleştirme olasılıkları belirtilir ve takma adlar ayarlanır (“NASIL” yapısı).
  • "Sipariş" - sorguların sonucunu sıralamaktan sorumludur.
  • "Toplamlar" - "Gruplandırma" sekmesine benzer, ancak "TOPLAMLAR" yapısı için kullanılır.

İsteğin metni, sol alt köşedeki "İstek" düğmesine tıklayarak görüntülenebilir. Bu formda manuel olarak düzeltilebilir veya kopyalanabilir.


Sorgu Konsolu

"Kuruluş" modunda bir sorgunun sonucunu hızlı bir şekilde görüntülemek veya karmaşık sorgularda hata ayıklamak için . Sorgu metni içine yazılır, parametreler ayarlanır ve sonucu gösterilir.

Sorgu konsolunu ITS diskinde veya .

Tek bir tabloyla çalışıyorsanız, birleştirme kullanmanıza gerek yoktur. Birkaç tabloyla çalışırken tamamen farklı bir konudur ve örneğin, hem mal alımları hem de satışları hakkında veri almanız gerekir.

Cümle birleştirmek için kullanılır BİRLEŞİN. Aslında sorguların sonuçları birleştirilir, yani her sorgu birbirinden bağımsız olarak veri toplar ve daha sonra bu sonuçlar birleştirilir. Ve yalnızca son sorguda, örneğin sıralama ve toplamların hesaplanması gibi diğer işlemler gerçekleştirilir.

Sorguları birleştirirken, sonuçlar "dikey olarak yapıştırılır", yani önce ilk sorgunun sonuç satırları, ardından ikincisi gider.

Uygulamaya geçelim:
Kod 1C v 8.x SEÇ
isimlendirme,
Miktar,
toplam
İTİBAREN
Belge.Makbuz.Mallar

BİRLEŞİN

SEÇMEK
isimlendirme,
Miktar,
toplam
İTİBAREN
Belge.Makbuz.Mallar

Bu sorgunun sonucu aşağıdaki gibidir:
Adlandırma Miktar Tutar
Kağıt A4 25 14 500
Çıkartmalar 500 l 8 4 880
Dosya şeffaf 5 4 100
Ofis takımı 8 8 840

Sonuç olarak, birbirine bağlanacak iki tablo elde edeceğiz. Gelen evrakın nerede bitip Giden evrakın nerede başladığını görmek zordur. Ama bunu anlamak için bir şeyler yapacağız:
Kod 1C v 8.x
SEÇMEK
isimlendirme,
Miktar GİRİŞ GİBİ,
Toplam Gelir Olarak Tutar,
0 NASIL Adet Tüketim,
0 TOPLAM Gider olarak
İTİBAREN
Belge.Makbuz.Mallar

BİRLEŞİN

SEÇMEK
isimlendirme,
0 AS Numarası Gelen,
0 AS Toplam Gelir,
Miktar Olarak Adet Gider,
Toplam Gider Olarak Tutar
İTİBAREN
Belge.Sarf Malzemesi.Mallar

Talep metninden de görebileceğiniz gibi, her belge için miktar ve tutar için farklı takma adlar belirledik. Ayrıca miktar ve miktar değerlerini alacağımız alanların yerine sıfırlar koyacağız. Bu, miktar ve miktarın boş değerlerinin sıfırlarla değiştirilmesi için gereklidir.

Kağıt A4 25 14 500
Çıkartmalar 500 l 8 4 880
Dosya şeffaf 5 4 100
Ofis takımı 8 8 840
Ofis takımı 1 1 105
Şeffaf dosya 1 820
Çıkartmalar 500 l 1 610

Şimdi yinelenen öğeleri sorgu sonucundan kaldırmamız gerekiyor. İki sorgumuz var ve yinelenen öğeleri hariç tutmak için her birini ayrı ayrı daraltırsak başarılı olamayız. Bu nedenle, sorguyu aşağıdaki forma getireceğiz:
Kod 1C v 8.x
SEÇMEK
isimlendirme,
SUM(Gelir Sayısı) AS Gelir Sayısı,
TOPLAM(ToplamGelir) AS ToplamGelir,
SUM(gider sayısı) AS gider tutarı,
ToplamGider OLARAK TOPLAM(ToplamGider)
İTİBAREN

(SEÇMEK
isimlendirme,
Miktar GİRİŞ GİBİ,
Toplam Gelir Olarak Tutar,
0 NASIL Adet Tüketim,
0 TOPLAM Gider olarak
İTİBAREN
Belge.Makbuz.Mallar

BİRLEŞİN

SEÇMEK
isimlendirme,
0 AS Numarası Gelen,
0 AS Toplam Gelir,
Miktar Olarak Adet Gider,
Toplam Gider Olarak Tutar
İTİBAREN
Document.Consumable.Products) AS NestedRequest

İsimlendirmeye göre GRUP

Böylece tüm sorgumuzun parantez içinde olduğunu ve NestedQuery olarak adlandırıldığını görüyoruz. Bu, her iki alt sorgudaki kayıtları gruplayabilmemiz ve yinelenen öğeleri ortadan kaldırabilmemiz için yapılır. Böyle bir yapıya iç içe sorgu denir. Bu sorgunun sonucu aşağıdaki gibidir:
Terminoloji AdetGelen ToplamGelen AdetGider ToplamGider
Kağıt A4 25 14 500
Çıkartmalar 500 l 8 4 880 1 610
Ofis takımı 5 4 100 1 1 105
Dosya şeffaf 8 8 840 1 820

Sonuç olarak, iç içe alt sorgulardan gelen verilerin net bir forma indirgendiği gruplandırılmış bir tablo elde ederiz. İç içe sorgu sayısı 255'i geçmemelidir. Burada dört alt sorgu kullandık.

Gruplama kullanmadan sadece sorguda kayıtların benzersiz değerlerini bırakmak istiyorsak. JOIN cümlesini ALL anahtar sözcüğü olmadan yazmak gerekir.

Siteden alınan bilgiler

; Alt sorgular (geliştirme aşamasında).

Mal ve hizmetlerin alınması Ve Malların tedarikçiye iadesi belirtilen süre için.

Yeni sekmeler: Sendikalar/Takma adlar.

4 numaralı dersin teorik kısmı

Query Builder 1c, sorgu toplamaları oluşturmanıza olanak tanır. Onların yardımıyla, birkaç sorgudan elde edilen verileri, ilişkileri kullanmadan sonuca sıralı olarak çıkarabilirsiniz. Katılmak için tek koşul, her bir sorguda aynı alan kümesidir.

Yapıcıda sekmeye gidin Sendikalar/Takma Adlar. Sorgu birleştirmeleri oluşturmak ve sorgu alanları için takma adlar ayarlamak için tasarlanmıştır. Standart veritabanı alan adlarından memnun değilseniz, alan takma adları gerekir. Bir sorgu alanı yalnızca bir veritabanı tablosu alanından oluşuyorsa, bunun için takma ad gerekli değildir. Bir alan oluştururken sorgulama dili işlevlerini kullandıysanız, böyle bir alan için bir takma ad gereklidir. Bu tür alanlar için, sorgu oluşturucu standart takma adlar oluşturur. Alan1…AlanN, bu takma adlar sizin için uygun olanla değiştirilebilir.

Sekmenin bölümlerini göz önünde bulundurun Sendikalar / Takma Adlar:

  • İstekler(kırmızı çerçeve). Bu bölüm, tüm birleştirilmiş sorguları gösteren bir tablo içerir, bu bölümün yukarısında bulunan menüyü kullanarak yenilerini ekleyebilir, mevcutları kopyalayabilir, seçilenleri silebilir ve değiştirebilirsiniz. Bir sorgu eklerken veya kopyalarken, tasarımcı sekmeye gider. Tablolar ve alanlar, yeni sorgu için veritabanı tablolarını ve gerekli alanları ayarlayabileceğiniz yer. Yeni 1'ler istekleri eklendikçe yapıcının sağ tarafında görünecek sekmeleri kullanarak istekler arasında geçiş yapabilirsiniz;

  • Masa İstekler iki sütun:
    • İsim. Formatta otomatik olarak ayarla İstek 1 … İstek N;
    • Kopya yok. Önceki bir sorguyla birleştirirken yinelenen satırları hariç tutmanın gerekli olup olmadığını ayarlayın. Bu bayrağın, yalnızca içinde ayarlandığı isteğin önceki istekle birleşimini etkileyeceğini belirtmekte fayda var.

  • Takma adlar(mavi çerçeve). Bu bölümde, sorgu alanları için takma adlar ve birleştirilmiş sorgular için eşleştirme alanları ayarlayarak sorgu sonucunda aynı sütunda yer almalarını ve aynı takma ad altında görüntülenmelerini sağlayabilirsiniz. Birleştirilmiş sorgulardaki alanlar aynı şekilde adlandırılırsa, aralarındaki yazışmalar otomatik olarak ayarlanır. Alanların yazışmasını ayarlamak için, tabloda gerekli takma adın bulunduğu satırı bulmanız, sütunlarda gerekli sorguyu bulmanız ve açılır listeden alanı seçmeniz gerekir.

4 numaralı dersin pratik kısmı

Dersin başında verilen problemin çözümünü inceleyelim. Şartları hatırlatayım:

Görev: Gönderilen tüm belgeleri sorguya göre seçin Mal ve hizmetlerin alınması Ve Malların tedarikçiye iadesi belirtilen süre için.

  1. Yeni bir istek oluşturalım;
  2. Sorgu oluşturucuyu başlatalım;
  3. bir masa seçelim Gelen Mal Hizmetleri bir daldan Belgeler;
  4. masadan Gelen Mal Hizmetleri bir alan seçin Bağlantı;
  5. sekmeye gidelim Koşullar;
  6. Bölümde alanlar, şubeyi aç Gelen Mal Hizmetleri"+" düğmesini kullanarak;
  7. sahne bulalım tarih ve onu koşullar bölümüne sürükleyin, karşılaştırma operatörünü seçin Arasında ve dönemin başlangıcı ve bitişi için parametreleri belirtin, örneğin dönemin başlangıcı Ve Bitiş Dönemi;
  8. sekmeye gidelim Sendikalar / Takma Adlar.
  9. Yeni bir istek ekle, işaretle Kopya yok farklı türde belgeler kullandığımız için yükseltmeye gerek yok;

  10. Sorgu Oluşturucu 1'ler otomatik olarak sekmeye gider Tablolar ve alanlar. Pencerenin sağ tarafında ikinci katılma isteğinin aktif olduğunu göreceksiniz;


  11. Tablo için 1 - 7 arasındaki adımları tekrar edelim Malların Tedarikçiye İadesi;
  12. Sekmeye geri dönelim. Sendikalar / Takma Adlar. Takma ad tablosunda, alanların Bağlantı her iki tablo da aynı satırdadır, bu da sorgu sonucunda her iki belgeye olan bağlantıların aynı sütunda olacağı anlamına gelir;
  13. Sütun adını değiştirin Bağlantı Açık belge(alan takma adını ayarlayın). Bunun için farenin sol tuşu ile alan adına çift tıklayın. Sonra adınızı ayarlayabilir, oraya girebilirsiniz. belge;

  14. İstek hazır, tasarımcı penceresinin altındaki "Tamam" düğmesine tıklayın.

Sonuç olarak, aşağıdaki metinle bir istek alacağız.

Birkaç sorguyu tek bir sorguda birleştirmenin gerekli olduğu durumlar vardır ve tablo birleştirmeleri hiçbir şekilde yardımcı olamaz. Bir örnekle göstermek en kolayı.

Sistemimizde mal alım ve satımı olgularının sırasıyla Gelir ve Gider belgelerine göre kaydedildiğini varsayalım. Karşı taraf hem alıcı hem de tedarikçi olabilir. Malların teslimi ile borç mahsup edilebilir:

Bir karşı tarafın toplam borcunu hesaplamak için, bu karşı tarafa ait tüm giderlerin toplamını toplayıp aynı karşı taraftan gelen tüm gelirlerin toplamını çıkarmak gerekir, bunu yapmanın en kolay yolu UNITE ALL operatörünü kullanmaktır:

İstek.Metin =
"
//karşı taraflara ne kadar sevk ettiğimizi hesapla
|SEÇ
| Tüketim Karşı taraf,
| KİMDEN
| Belge.Gider AS Giderleri
|GRUPA GÖRE
| Tüketim Karşı taraf
|TÜMÜNE KATIL
//karşı taraf sayısını hesapla
//malları bize teslim etti
|SEÇ
| Varış.Yüklenici,
// eksi işaretli miktarı al,
//birleştirildiğinde gider tutarından düşüldüğünü
| TOPLA(-Gelen.Miktar)
| KİMDEN
| Document.Gelen AS Gelen
|GRUPA GÖRE
| Varış.Yüklenici";

İlk talepte, her karşı taraf için harcama tutarını, ikincisinde - karşı tarafların her birinin malları bize teslim ettiği tutarı hesaplıyoruz. İkinci sorgudaki tutar eksi işaretiyle alınır, böylece ortaya çıkan tablo çöktüğünde bu karşı tarafa yapılan sevkiyat tutarından düşülür. Sonuç olarak, formun bir tablosunu elde ederiz:

Tam istediğimiz gibi değil ama yakın. İstenilen sonucu elde etmek için, karşı tarafa göre gruplandırmak kalır. Bunu yapmak için, sorgu geçici bir tabloya yerleştirilmelidir (geçici tablolarla çalışmak, kursun kapalı kısmı ) ve alanları seçin ve gruplandırın:

İstek = Yeni İstek;
İstek.Metin =
"SEÇMEK
| Tüketim Karşı taraf,
| MİKTAR(Gider.Miktar) Borç Olarak
|PUT TU_Gelir Gideri
| KİMDEN
| Belge.Gider AS Giderleri
|GRUPA GÖRE
| Tüketim Karşı taraf
|TÜMÜNE KATIL
|SEÇ
| Varış.Yüklenici,
| TOPLA(-Gelen.Miktar)
| KİMDEN
| Document.Gelen AS Gelen
|GRUPA GÖRE
| Varış. Yüklenici
|;
|////////////////////////////////////////////////////////////////////////////////
|SEÇ
| Tue_IncomingExpense.Karşı Taraf,
| TOPLA(BT_GelirGider.Borç) Borç Olarak
| KİMDEN
| Sal_GelirGider AS Sal_GelirGider
|GRUPA GÖRE
| Tue_IncomingExpense.Counterparty";

Sorguları birleştirme gereksinimleri

İki sorgu birleştirildiğinde, içlerindeki alan sayısı aynı olmalıdır, sorgulardan herhangi birinde alan yoksa, bunlar sabit olarak eklenmelidir. Yukarıdaki örneğe bakalım, gider belgesinde de karşı tarafın borcunu azaltan bir indirim alanı olduğunu varsayalım ama gelir belgesinde indirim yok. Bu durumda nasıl olunur? Bu yüzden:

İstek = Yeni İstek;
İstek.Metin =
"SEÇMEK
| Tüketim Karşı taraf,

| KİMDEN
| Belge.Gider AS Giderleri
|GRUPA GÖRE
| Tüketim Karşı taraf
|TÜMÜNE KATIL
|SEÇ
| Varış.Yüklenici,
| TOPLA(-Gelen.Miktar),
// boş alan indirimi ekle
| 0
| KİMDEN
| Document.Gelen AS Gelen
|GRUPA GÖRE
| Varış.Yüklenici";

İndirimi ve grubu çıkarmak için kalır.

Sıralama da önemlidir. Alanlar, tam olarak her iki sorgunun SELECT bölümlerinde belirtilen sırayla birleştirilecektir. Bir önceki örnekle ilgili olarak, fiş seçiminde iskonto ve tutar alanlarını değiştirelim:

İstek = Yeni İstek;
İstek.Metin =
"SEÇMEK
| Tüketim Karşı taraf,
| MİKTAR(Gider.Miktar) Borç Olarak,
| SUM(Gider.İndirim) İndirim Olarak
| KİMDEN
| Belge.Gider AS Giderleri
|GRUPA GÖRE
| Tüketim Karşı taraf
|TÜMÜNE KATIL
|SEÇ
| Varış.Yüklenici,
//takas
| 0,
| TOPLA(-Gelen.Miktar)
| KİMDEN
| Document.Gelen AS Gelen
|GRUPA GÖRE
| Varış.Yüklenici";

İyi günler, blog sitesinin sevgili okuyucuları. Bugün ayrıntılı olarak konuşacağız istekleri 1C'de birleştirmek. Ayrıca tipik bir konfigürasyon için Business Management for Kazakistan, sürüm 1.0'ı da indirebilirsiniz.

Tek bir tabloyla çalışıyorsanız, birleştirme kullanmanıza gerek yoktur. Birkaç tabloyla çalışırken tamamen farklı bir konudur ve örneğin mal alım satımı ile ilgili verileri almanız gerekir.

Cümle birleştirmek için kullanılır BİRLİK / BİRLİK. gerçekten neler oluyor sorgu sonuçlarını birleştirme, yani her sorgu birbirinden bağımsız olarak veri toplar ve ardından bu sonuçlar bir araya getirilir. Ve yalnızca son sorguda, örneğin sıralama ve toplamların hesaplanması gibi diğer işlemler gerçekleştirilir.

Sorguları birleştirmenin aksine, sonuçlar "dikey olarak yapıştırılır", yani önce ilk sorgunun sonuç satırları, ardından ikincisi gider.

Uygulamaya geçelim:

Terminoloji, Miktar, Miktar SEÇİN BİRLEŞİN Document.Consumable.Goods'DAN Terminoloji, Miktar, Miktar SEÇİN

Bu sorgunun sonucu aşağıdaki gibidir:

Sonuç olarak, birbirine bağlanacak iki tablo elde edeceğiz. Gelen evrakın nerede bitip Giden evrakın nerede başladığını görmek zordur. Ama bunu anlamak için bir şeyler yapacağız:

Terminolojiyi SEÇİN, Miktar AS NumaraPrikhod, Toplam AS Sum Prikhod, 0 AS Adet Gideri, 0 AS Toplam Gider Document.Incoming.Mallardan BİRLEŞİN NumaraPrikhod, 0 AS Sum Prikhod, Numara AS Adet Gideri, Toplam AS Toplam Gider Document.Consumable.Goods'DAN

Talep metninden de görebileceğiniz gibi, her belge için miktar ve tutar için farklı takma adlar belirledik. Ayrıca miktar ve miktar değerlerini alacağımız alanların yerine sıfırlar koyacağız. Bu, miktar ve miktarın boş değerlerinin sıfırlarla değiştirilmesi için gereklidir.

terminoloji NumaraPrikhod Sum Prikhod Adet Gideri Toplam Gider
A4 kağıdı 25 14 500
Çıkartmalar 500l 8 4 880
dosya şeffaf 5 4 100
Ofis seti 8 8 840
Ofis seti 1 1 105
dosya şeffaf 1 820
Çıkartmalar 500l 1 610

Şimdi yinelenen öğeleri sorgu sonucundan kaldırmamız gerekiyor. İki sorgumuz var ve yinelenen öğeleri hariç tutmak için her birini ayrı ayrı daraltırsak başarılı olamayız. Bu nedenle, sorguyu aşağıdaki forma getireceğiz:

SEÇMEK
isimlendirme,
SUM(Gelir Sayısı) AS Gelir Sayısı,
TOPLAM(ToplamGelir) AS ToplamGelir,
SUM(gider sayısı) AS gider tutarı,
ToplamGider OLARAK TOPLAM(ToplamGider)
İTİBAREN
(
Terminolojiyi SEÇİN, Miktar AS NumaraPrikhod, Toplam AS Sum Prikhod, 0 AS Adet Gideri, 0 AS Toplam Gider Document.Incoming.Mallardan BİRLEŞİN Terminolojiyi SEÇİN, 0 AS NumaraPrikhod, 0 AS Sum Prikhod, Numara AS Adet Gideri, Toplam AS Toplam Gider Document.Consumable.Goods'DAN ) NestedQuery olarak
İsimlendirmeye göre GRUP

Böylece tüm sorgumuzun parantez içinde olduğunu ve NestedQuery olarak adlandırıldığını görüyoruz. Bu, her iki alt sorgudaki kayıtları gruplayabilmemiz ve yinelenen öğeleri ortadan kaldırabilmemiz için yapılır. Böyle bir yapıya iç içe sorgu denir. Bu sorgunun sonucu aşağıdaki gibidir:

terminoloji NumaraPrikhod Sum Prikhod Adet Gideri Toplam Gider
A4 kağıdı 25 14 500
Çıkartmalar 500l 8 4 880 1 610
Ofis seti 5 4 100 1 1 105
dosya şeffaf 8 8 840 1 820

Sonuç olarak, iç içe alt sorgulardan gelen verilerin net bir forma indirgendiği gruplandırılmış bir tablo elde ederiz.
İç içe sorgu sayısı 255'i geçmemelidir. Burada dört alt sorgu kullandık.