1c sanal tablo parametrelerini sorgulayın. Standart parametre &Dönem ve kullanımdaki sorunlar

Gerçek problemlerde örnekleri düzenlerken çoğu durumda veri seçimi belirli kriterlere göre düzenlenir.

Seçimin gerçek bir tablodan yapılması durumunda herhangi bir zorluk ortaya çıkmaz. Veriler kesinlikle önemsiz bir şekilde işlenir:

Sorgudaki kaynağın sanal bir tablo olması durumunda durum biraz daha karmaşık hale gelir.

Sorgu dili, sanal tablolardan yapılan bir seçime iki şekilde koşul uygulamanıza olanak tanır: WHERE yan tümcesinde ve sanal tablo parametrelerini kullanarak. Her iki yöntem de aynı sonuca yol açacaktır (bazı özel durumlar hariç), ancak yine de eşdeğer olmaktan uzaktırlar.

Sanal tablolara aslında veritabanında yer almadıkları için sanal denildiğini zaten biliyoruz. Yalnızca kendilerine bir talepte bulunulduğu anda oluşturulurlar. Buna rağmen sanal tabloları gerçek tablolar olarak kabul etmek bizim için (yani sorguyu yazanlar için) uygundur. Derlediğimiz sorgu hala sanal tabloya eriştiğinde 1C Enterprise 8 sisteminde ne olacak?

İlk adımda sistem sanal bir tablo oluşturacaktır. İkinci adımda, ortaya çıkan tablodan WHERE deyiminde belirtilen koşulu sağlayan kayıtlar seçilecektir:


Nihai örneğin sanal tablodaki (ve dolayısıyla veritabanındaki) tüm kayıtları içermeyeceği, yalnızca verilen koşulu karşılayan kayıtları içereceği açıkça görülmektedir. Ve kalan kayıtlar sonuçtan hariç tutulacak.

Böylece sistem sadece faydasız iş değil, çifte işe yaramaz iş yapacak! Öncelikle gereksiz verilere dayalı sanal bir tablo oluşturmak için kaynaklar harcanacak (şekilde bunlar “A ve B veri alanları” olarak işaretlenmiştir) ve ardından bu verilerin nihai sonuçtan filtrelenmesi için çalışmalar yapılacaktır.

Sanal bir tablo oluşturma aşamasında gereksiz verileri kullanmayı hemen bırakmak mümkün müdür? Bunun mümkün olduğu ortaya çıktı. Sanal tablo parametreleri tam olarak bunun için tasarlanmıştır:


Bir sanal tabloyu parametrelendirerek sorgu tarafından işlenecek veri miktarını anında sınırlandırırız.

Sanal tablo parametresi "Ekleme Yöntemi" değerleri arasındaki fark nedir?
Ekleme Yöntemi "hareketler" olarak ayarlandığında yalnızca hareketlerin olduğu dönemler döndürülecektir. "Hareketler ve Periyot Sınırları" ayarlandığında yukarıdaki hareketlere 2 kayıt eklenecektir: VT parametrelerinde belirtilen periyodun başındaki ve sonundaki hareketler. Bu 2 kayıt için “Kayıt Sorumlusu” alanı boş olacaktır.

Gerçek problemlerde örnekleri düzenlerken çoğu durumda veri seçimi belirli kriterlere göre düzenlenir.

Seçimin gerçek bir tablodan yapılması durumunda herhangi bir zorluk ortaya çıkmaz. Veriler kesinlikle önemsiz bir şekilde işlenir:

Sorgudaki kaynağın sanal bir tablo olması durumunda durum biraz daha karmaşık hale gelir.


Sorgu dili, sanal tablolardan yapılan bir seçime iki şekilde koşul uygulamanıza olanak tanır: WHERE yan tümcesinde ve sanal tablo parametrelerini kullanarak. Her iki yöntem de aynı sonuca yol açacaktır (bazı özel durumlar hariç), ancak yine de eşdeğer olmaktan uzaktırlar.

Sanal tablolara aslında veritabanında yer almadıkları için sanal denildiğini zaten biliyoruz. Yalnızca kendilerine bir talepte bulunulduğu anda oluşturulurlar. Buna rağmen sanal tabloları gerçek tablolar olarak kabul etmek bizim için (yani sorguyu yazanlar için) uygundur. Derlediğimiz sorgu hala sanal tabloya eriştiğinde 1C Enterprise 8 sisteminde ne olacak?

İlk adımda sistem sanal bir tablo oluşturacaktır. İkinci adımda, ortaya çıkan tablodan WHERE deyiminde belirtilen koşulu sağlayan kayıtlar seçilecektir:
Nihai örneğin sanal tablodaki (ve dolayısıyla veritabanındaki) tüm kayıtları içermeyeceği, yalnızca verilen koşulu karşılayan kayıtları içereceği açıkça görülmektedir. Ve kalan kayıtlar sonuçtan hariç tutulacak.

Böylece sistem sadece faydasız iş değil, çifte işe yaramaz iş yapacak! Öncelikle gereksiz verilere dayalı sanal bir tablo oluşturmak için kaynaklar harcanacak (şekilde bunlar “A ve B veri alanları” olarak işaretlenmiştir) ve ardından bu verilerin nihai sonuçtan filtrelenmesi için çalışmalar yapılacaktır.

Sanal bir tablo oluşturma aşamasında gereksiz verileri kullanmayı hemen bırakmak mümkün müdür? Bunun mümkün olduğu ortaya çıktı. Sanal tablo parametreleri tam olarak bunun için tasarlanmıştır:

Bir sanal tabloyu parametrelendirerek sorgu tarafından işlenecek veri miktarını anında sınırlandırırız.

Sanal tablo parametresi "Ekleme Yöntemi" değerleri arasındaki fark nedir?
Ekleme Yöntemi "hareketler" olarak ayarlandığında yalnızca hareketlerin olduğu dönemler döndürülecektir. "Hareketler ve Periyot Sınırları" ayarlandığında yukarıdaki hareketlere 2 kayıt eklenecektir: VT parametrelerinde belirtilen periyodun başındaki ve sonundaki hareketler. Bu 2 kayıt için “Kayıt Sorumlusu” alanı boş olacaktır.

Siteden alınan bilgiler

Makale, MS DBMS kullanma örneğini kullanarak istemci-sunucu modunda çalışan sanal bir yapılandırma bakiyeleri tablosunun fiziksel uygulamasını açıklamaktadır. SQL Server.

Uygulanabilirlik

Makalede 1C:Enterprise platformunun 8.3.5.1383 sürümü tartışılmaktadır. İÇİNDE şimdiki versiyonu platformda, materyalde açıklanan metinde bazı değişiklikler mümkündür, T-SQL sorguları DBMS sunucusu tarafında yürütülür.

Sanal denge tablosu cihazı

Biriktirme kayıt bakiyelerinin sanal tablosunu kullanarak ne tür bir DBMS sorgusunun dönüştürüldüğünü düşünelim. Örneğin aşağıdaki istek metni dikkate alınacaktır:

SEÇMEK
EmtiaEnvanteriKalanlar.Ürün,
EmtiaStoklarKalanlar.Depo,
Emtia EnvanteriKalan.MiktarKalan
İTİBAREN
KaydetBirikimler.Envanterler.Kalanlar(&Tarih , Depo = &Depo ) NASIL
EmtiaStoklarKalanlar

İlk olarak, küresel bağlam yöntemini kullanarak GetDatabaseStorageStructure()“Emtia Envanterleri” birikim kaydının verilerinin saklandığı veritabanı tablolarının bir listesini alıyoruz:

Birikim kaydı ana tablosunda ve toplamlar tablosunda yer alan alanların kompozisyonu aşağıda verilmiştir:

Bu kayıt için toplamların saklanması “1C:Enterprise 8” modunda aşağıdaki gibi yapılandırılır:

Söz konusu requestteki parametreleri şu şekilde dolduralım:


Platform, istek metnini DBMS sunucusunda yürütülecek olan aşağıdaki isteğe dönüştürür:

SEÇME
Q_000_T_001.Fld82 ,
Q_000_T_001.Fld83 ,
Q_000_T_001.Fld84Bakiye
İTİBAREN
(Fld82'yi SEÇİN,
Fld83,

İTİBAREN
(Fld82'yi SEÇİN,
Fld83,
TOPLAM (Fld84) AS Fld84Bakiye
AccumRgT85'TEN
WHERE Dönemi = DATETIME (3999, 11, 1)
VE ((Fld83 = ))
VE(Fld84<>0 ) VE (Fld84<> 0 )
GRUPLANDIRMA Fld82 , Fld83
Fld84Balance'a SAHİP<> 0
BİRLİK TÜMÜ
Fld82'yi SEÇİN,
Fld83,
TOPLAM (VAKA NE ZAMAN RecordKind = 0 THEN – Fld84 ELSE Fld84 END ) AS Fld84Balance
AccumRg81'DEN
WHERE Dönemi >= DATETIME (2012, 9, 1)
VE Dönemi< DATETIME (3999 , 11 , 1 )
VE Aktif
VE ((Fld83 = 9:))
GRUPLANDIRMA Fld82 , Fld83
Fld84Balance'a SAHİP<>0) T
GRUPLANDIRMA Fld82 , Fld83
Fld84Balance'a SAHİP<>0 ) Q_000_T_001

Gelen talebi daha detaylı inceleyelim.

İlk olarak birleştirmedeki ilk sorgu, ortaya çıkan AccumRgT85 tablosundan verileri seçer. Toplamlar, mevcut toplamların depolanma tarihinde (01.11.3999) elde edilir, Depo alanına ek bir koşul uygulanır (sanal tablonun parametrelerinde böyle bir koşul kullanıldığı için). Ayrıca sonucun sıfır kalan satır içermediğinden emin olmak için bir kontrol gerçekleştirilir.

Gruplandırmanın istek metninde seçilen boyutlara göre yapıldığını lütfen unutmayın. Bu nedenle, 1C:Enterprise sorgu dilinde metinde ayrıca boyutlara göre gruplandırmaya gerek yoktur.

İkinci birleştirme sorgusu AccumRg81 kayıt hareket tablosunu kullanır. Hareketin türüne göre (RecordKind 0 ise Gelir, değilse Gider) ifadeye işaret eklenir. Platform, sanal tablonun parametresi olarak belirtilen tarihten mevcut toplamların depolandığı tarihe (11/01/3999) kadar olan süreye ait verileri seçer.

Ayrıca yalnızca aktif kayıtlar seçilir; Ambar alanının belirtilen değere eşit olması gerekir. İlk birleştirme sorgusunda olduğu gibi, bu da seçilen boyutlara göre gruplandırır ve sıfır kaynak değerine sahip kayıtları atar.

MS SQL Server DBMS kullanılıyorsa ve veritabanı için tarih farkı 2000 olarak ayarlanmışsa, tüm tarihler belirtilen farkla saklanacaktır; 01.11.3999 yerine 01.11.5999'u göreceksiniz.

Biriktirme kaydı için geçerli toplamları devre dışı bırakırsanız platform ilk olarak Sanal tablo Dönemi parametresinde belirtilenden daha önceki bir tarihte hesaplanan en son toplamları alacaktır.

Daha sonra, benzer şekilde, bu veriler hareket tablosundan desteklenecektir, ancak yalnızca son sonuçların tarihinden sanal tablonun dönemine kadar olan süre için.

SEÇME
Q_000_T_001.Fld82 ,
Q_000_T_001.Fld83 ,
Q_000_T_001.Fld84Bakiye
İTİBAREN
(Fld82'yi SEÇİN,
Fld83,
TOPLA (Fld84Bakiye) AS Fld84Bakiye
İTİBAREN
(Fld82'yi SEÇİN,
Fld83,
TOPLAM (Fld84) AS Fld84Bakiye
AccumRgT85'TEN
WHERE Dönemi = DATETIME (2012, 4, 1)
VE ((Fld83 = 9:))
VE(Fld84<> 0 )
VE(Fld84<> 0 )
GRUPLANDIRMA Fld82 , Fld83
Fld84Balance'a SAHİP<> 0
BİRLİK TÜMÜ
Fld82'yi SEÇİN,
Fld83,
TOPLAM (RecordKind = 0 DURUMDA Fld84 DİĞER – Fld84 END ) Fld84Balance OLARAK
AccumRg81'DEN
WHERE Dönemi >= DATETIME (2012, 4, 1)
VE Dönemi< DATETIME (2012 , 9 , 1 )
VE Aktif
VE ((Fld83 = 9:))
GRUPLANDIRMA Fld82 , Fld83
Fld84Balance'a SAHİP<>0) T
GRUPLANDIRMA Fld82 , Fld83
Fld84Balance'a SAHİP<>0 ) Q_000_T_001

Lütfen istek metninde aşağıdaki duruma dikkat edin.

Birikim kayıtları 1C:Enterprise sisteminde iki türe ayrılır: birikim kayıtları kalanlar ve birikim kayıtları devir/dakika.

Kayıt türü yapılandırıcıda oluşturulurken seçilir

Adından da anlaşılacağı üzere bazıları belirli bir tarih itibariyle bakiye elde etmeye, bazıları ise seçilen bir döneme ait ciro elde etmeye yöneliktir. Biriktirme kaydının türüne bağlı olarak 1C:Enterprise platformu farklı bir dizi sanal tablo oluşturur. Bu makalede birikim kayıtlarının sanal tablolarıyla çalışmaya bakacağız. Bunu yapmak için bakiye biriktirmek için bir kayıt oluşturacağız - ÜrünlerKalanlar ve devrim birikim kaydı - ÜrünlerCiro.

Şimdi platformun bu kayıtların her biri için hangi sanal tabloları sağladığına bakalım.

Devrim birikim kaydı

Anlaşılır olması açısından, kayıt için hangi tabloların mevcut olduğunu açıp görelim. ÜrünlerCiro. Bu, kaydın kendi tablosudur - ÜrünlerCiro Veritabanında fiziksel olarak bulunan ve bir sanal tablo - ÜrünlerCiro.Ciro

Standart tabloyla her şey açıktır. Sanal olana daha yakından bakalım.

Sanal masa Ciro

Bu tablo boyutlar açısından kaynak cirosunu elde etmenizi sağlar. Bizim durumumuzda iki boyutumuz var: Stoklamak Ve Ürün. Ve bir kaynak - Miktar

Kayıt defterimizde aşağıdaki girişler olsun

Sorgu tasarımcısına geri dönelim ve tablodan seçim yaparak başlayalım ÜrünlerCiro.Ciro tüm alanlar

Buna göre talep şu şekilde görünecektir:

ÜrünlerCiroCiro.Depo, ÜrünlerCiroCiro.Ürün, ÜrünlerCiroCiro.MiktarCiro KayıttanBirikim.ÜrünlerCiro.Ciro(,) AS ÜrünlerCiroCiro

Sorgunun sonucu şöyle görünür:

Yani tüm zaman boyunca mal ve depo bazında ciro elde ettik. Depolarla ilgilenmediğimizi ve sadece mal bazında ciro elde etmek istediğimizi varsayalım.

Bunu yapmak için boyutu istekten hariç tutuyoruz Stoklamak

ÜrünlerCiroCiro.Ürün, ÜrünCiroCiro.MiktarCiro KayıttanBirikim.ÜrünlerCiro.Ciro(,) AS ÜrünlerCiroCiro SEÇİN

ve sonuç olarak sadece iki satırımız kalacak

Ancak kural olarak, sicilin tüm varlığı boyunca ciro almaya gerek yoktur. Temel olarak belirli bir süre için ihtiyaç duyulur: ay, çeyrek, yıl vb. Ayrıca boyutlara (Ürün, Depo) göre seçim yapılmasına genellikle ihtiyaç duyulur. Bu kullanılarak elde edilir sanal tablo parametreleri. Yapıcıdan parametreleri doldurmak uygundur. Düğmeye göre Sanal Tablo Seçenekleriİhtiyacımız olan her şeyi girebileceğiniz bir iletişim kutusu açılır:

Bundan sonra orijinal isteğimiz aşağıdaki formu alacaktır.

Mal Cirosu.Depo, Mal Cirosu.Ürün, Mal Cirosu.Mal Cirosu.KayıtBirikimi.Mal Cirosu.Ciro(&Dönem Başı, &Dönem Sonu, Depo = &Depo) Mal Cirosu OLARAK SEÇİN

Görebildiğimiz gibi fark, sanal tablo adından sonra parantez içinde sorguyu yürütmeden önce doldurulması gereken parametrelerin bulunmasıdır.

Sanal tablolarla yeni çalışmaya başlayanlar genellikle parametreleri kullanmak yerine seçimi her zamanki gibi ayarlama eğilimindedir:

KİMDEN KayıtBirikimler.ÜrünlerCiro.Ciro(,) NASIL ÜrünlerCiroCiro NEREDE ÜrünlerCiroTurnover.Warehouse = &Depo

Kaçırdığımız parametreleri doldururken Periyodiklik. Listeyi kitlelerden açıklayalım olası seçenekler hadi seçelim Ay. Kafanızın karışmaması için diğer tüm parametreleri kaldıracağız.

Bundan sonra tablo alanlarında bir alanın oluştuğunu gözlemliyoruz. Dönem.

Seçilen alanlara ekleyerek aşağıdaki istek metnini elde ediyoruz:

ÜrünlerCiroCiro.Dönem, ÜrünlerCiroCiro.Depo, ÜrünlerCiroCiro.Ürün, ÜrünlerCiroCiro.MiktarCiro KayıttanBirikim.ÜrünlerCiro.Ciro(, Ay,) AS ÜrünlerCiroCiro

İsteği yerine getiriyoruz:

Böylece seçilen zaman aralığında devirleri seçilen frekansa göre daha küçük aralıklara bölebiliyoruz.

Bakiye birikim kaydı

Tıpkı ters kayıtta olduğu gibi, sorgu tasarımcısında bakiye biriktirme kaydı için hangi sanal tabloların mevcut olduğuna bakalım

Gördüğünüz gibi bakiye birikim kaydı için üç sanal tablo mevcuttur: Devrimler, Kalanlar, Kalanlar ve Cirolar. Her birini ayrı ayrı ele alalım.

Sanal masa Ciro

Kayıt tipi olmasına rağmen Kalanlar yine de ondan ciro alabiliriz. Ayrıca burada iki ek kaynağımız daha var: Gelen Ve Tüketim

Bilanço defterine giriş yapıldığında birikim hareketinin türü (gelir veya gider) belirtilirken, ciro defterinde hareketin türü belirtilmediğini hatırlatayım. Bu nedenle buradayız ek bonus sadece döneme ait toplam ciroyu değil, gelir ve giderleri ayrı ayrı alma fırsatı şeklindedir. Ancak elbette, eğer meta veriler benzer ölçümlere sahip bir ters kayıt içeriyorsa, bunu ciro elde etmek için kullanmak daha iyidir. Genel olarak bu sanal tabloyla çalışmak, sanal tabloyla çalışmaya benzer Devrimler Yukarıda tartışılan dolaşımdaki kayıt.

Sanal tablo Bakiyeleri

Bu tablo, boyuta göre kaynak bakiyelerini elde etmek için kullanılır. Tablo parametrelerinde, bakiyeleri aldığımız ve seçimleri ayarladığımız tarihi belirtebiliriz:

Küçük bir örneğe bakalım. Aşağıdaki kayıt girişlerimiz var:

Mevcut tüm alanları seçip, bakiye alma tarihi olarak Haziran sonunu ayarlayalım. Ölçümlere dayalı seçim yapmayacağız. Daha sonra istek metni şöyle görünecektir:

ÜrünlerKalanlarRemainings.Depo, ÜrünlerRemainingsRemainings.Ürün, ÜrünlerRemainingsRemainings.MiktarKalanKalanKayıtBirikimler.ÜrünlerRemainings.Remainings(&TarihRemainings,) AS ÜrünlerRemainingRemainings

Ve bunu uyguladıktan sonra bu sonucu elde ediyoruz

Sanal masa Bakiyeleri ve Cirolar

Bu tablo daha önce tartışılan iki tabloyu birleştirir ve seçilen dönem için cironun yanı sıra dönemin başındaki ve sonundaki bakiyeleri elde etmenize olanak tanır. Seçimi de ayarlayabilirsiniz.

Bu tablonun kullanımı, dönemin başında ve sonunda hem ciro hem de bakiyeleri aynı anda tek bir raporda almanız gerektiğinde haklı gösterilebilir. Diğer durumlarda kullanımını kötüye kullanmamalısınız.