Kişiler

SCD'de özelliklerin kullanılması. Geçiş kontrol sisteminde karakteristikler mekanizmasını kullanmanın özellikleri Rapor sunum ayarlarını oluşturuyoruz.

“Üretim İşletme Yönetimi” konfigürasyonu sürüm 1.3'ü kullanarak bir örnek vereceğiz. Bilgi tabanında "Kuruluşlar" dizininin tüm unsurları için "Ana depo", "İlgili karşı taraf" ve "Konum ülkesi" özellikleri eklendi. Kuruluşların ek özelliklerine göre seçim uygulayabileceğimiz bir veri kompozisyon sisteminde (DCS) bir rapor oluşturmamız gerekiyor.

Bu durumda nesne özellikleriyle çalışmak için standart ACS işlevselliğini kullanacağız. Ayrıca bu tür raporların geliştirilmesinin bir özelliğini de ele alacağız, yani "Yapılandırıcı" modunda veri kompozisyon şeması tasarımcısında ek özelliklerin kullanılamaması. İkincisi, bir raporda görüntülenecek alanların ayarlanmasında, seçimlerde, rapor yapısında gruplandırmada vb. karakteristik alanların kullanılmasına izin vermez.

Rapor oluşturma ve özellikleri ayarlama

Basit bir rapor oluşturalım. Aşağıdaki sorguyu içeren bir veri kümesine sahip olacaktır:

QueryText = "SEÇ | Kuruluşlar . Link AS Organizasyonu,| Organizasyonlar . TENEKE,| Organizasyonlar . kontrol noktası |İTİBAREN Dizin";

Rapor yapısı yalnızca sorguda tüm alanların seçili olduğu ayrıntılı kayıtların çıktısını verecektir. Tasarımcıda rapor yapısını ayarlamak şu şekilde görünecektir:

Aşağıdaki ekran görüntüsü mevcut ayarlarla rapor çıktısını göstermektedir.

Harika. Şimdi özellikleri ayarlamaya geçelim, ancak ondan önce, yumuşak yolvericiler de dahil olmak üzere çoğu standart konfigürasyonda karakteristikler mekanizmasının çalışmasını genel anlamda hatırlatmama izin verin. Bunu yapmak için çeşitli yapılandırma nesneleri kullanılır.

  1. "Nesnelerin Özellikleri" karakteristik türlerinin planı.
  2. "Nesne Özelliklerinin Değerleri" bilgilerinin kaydı.

Grafiksel olarak, bir bilgi tabanı nesnesi ile onun özellikleri arasındaki ilişki aşağıdaki diyagram kullanılarak gösterilebilir:

Şemayı daha ayrıntılı olarak açıklayalım. "Object" boyutundaki "ObjectPropertyValues" bilgi kaydı, özelliğin kaydedildiği bilgi tabanı öğesine bir bağlantı içerir. Örneğimizde bu, “Kuruluşlar” dizin öğesine bir bağlantıdır. Bir nesnenin tüm olası özellikleri, karakteristik türleri (PVC) "Nesnelerin Özellikleri" cinsinden tanımlanır. Detay kaydında saklanan karakteristik değer, Özellik boyutunda kaydedilen karakteristik tip plan elemanı için mevcut veri tiplerine bağlıdır. Bu açıklama ek mekanizma hakkında yalnızca genel bir fikir vermelidir. özellikler. Pratikte durum daha karmaşıktır.

Şimdi veri kompozisyon şemasındaki özellikleri ayarlamaya geçelim. Bunu yapmak için sorgu tasarımcısını başlatın ve "Özellikler" sekmesine gidin. Burada bilgi tabanı nesnesini özellik tabloları ve özellik değerleri ile bağlamak için bir alan eklemeniz gerekir. Daha önce, ek depolama için yapılandırma nesneleri arasındaki iletişim şemasına bakmıştık. özellikler/özellikler. Bu bilgilere göre kurulum şu şekilde olacaktır:

Bundan sonra veri seti talebi, nesne özelliklerinin elde edilmesine yönelik talimatlarla desteklenecektir.

" SEÇ | Organizasyonlar . Link AS Organizasyonu,| Organizasyonlar . TENEKE,| Organizasyonlar . kontrol noktası |İTİBAREN| Rehber . Organizasyonlar AS Organizasyonlar | // Eklemek. özelliklerin elde edilmesine yönelik talimatlar |(ÖZELLİKLER| TİP (Dizin. Organizasyonlar) | ÖZELLİK TÜRLERİ Özellik Türlerinin Planı. Nesne Özellikleri | ALAN ANAHTARI Bağlantısı | ALAN ADI Ad | UÇUŞ TİPİ DEĞERLER TipDeğerler | ÖZELLİKLER DEĞERLER Bilgi Kaydı. Nesne Özellik Değerleri | ALAN NESNE Nesnesi | POLEVIDA Özellik | FAYDALI DEĞERLER Anlamı )"

Bu kadar. Rapor işlevi artık rapordaki ek özellikler için alanları (çıktı alanları, seçimler vb.) seçmenize olanak tanıyor. Ama bir AMA var. Rapor ayarlarında bu alanları yalnızca 1C:Enterprise modunda kullanabiliriz. Yapılandırıcıda karakteristik alanlarını göremiyoruz ki bu mantıklı çünkü karakteristikler kullanıcı tarafından giriliyor ve bilgi tabanında saklanıyor.

Ancak gerekirse seçime açmadan önce özellik alanları ekleyebiliriz. Küçük bir örneğe bakalım.

Özellikleriyle programatik çalışma

Rapor formunu açarken aşağıdaki program kodunu çalıştırın:

CurrentSettings = Besteci Ayarları. Ayarlar; CollectionCollection = CurrentSettings. Seçim. Elementler; // Seçimi ek olarak ekle. ürün ayrıntılarına git "Ana depo". [ Ana depo] // Seçimi ek olarak ekle. isimlendirme ayrıntılarına "Yerleşim ülkesi" NovEl = KoleksiyonSeçimleri. Ekle(Tür(" Seçim ÖğesiVeri Düzeni" ) ) ; NewEl.ComparisonType = DataCompositionComparisonType.Equals; NewEl.LeftValue = . [Gönderimin yapıldığı ülke]" ); NewEl. Kullanım = Yanlış ; // Seçimi ek olarak ekle. öğe ayrıntılarına git "İlgili karşı taraf" NovEl = KoleksiyonSeçimleri. Ekle(Tür(" Seçim ÖğesiVeri Düzeni" ) ); NewEl.ComparisonView = DataCompositionComparisonView.Equals; NewEl.LeftValue = NewDataCompositionField("Organizasyon . [İlgili Karşı Taraf]" ); NewEl. Kullanım = Yanlış ;

Daha sonra 1C:Enterprise modunda rapor seçimine bakarsak aşağıdaki resmi göreceğiz:

Böylece, bu alanların ACS tasarımcısında mevcut olmamasına rağmen, "Kuruluşlar" dizininin ek özelliklerine dayalı olarak programlı bir seçim ekledik. Veri kompozisyonu alanını tanımlamaya yönelik sözdizimine dikkat edin.

NewDataCompositionField(" Organizasyon . [İlgili Karşı Taraf]" ) ,

yani “[Bağlantılı karşı taraf]” metni. Eğer şu şekilde yazarsak:

NewDataCompositionField(" Organizasyon . İlgili Karşı Taraf" ) ,

daha sonra raporu çalıştırırken ACS, düzen alanlarını hatalı bir şekilde algılayacaktır. Ayarlarda seçim alanları yanlış olarak vurgulanacaktır:

ACS tasarımcısında bulunmayan ek özellikler ve ayrıntılar için programlı olarak erişirken aşağıdaki sözdizimini kullanmanız gerekir:

NewDataCompositionField(" . " )

Böylece ACS tasarımcısında alanlar mevcut olmasa bile rapor ayarlarını yapabiliyoruz.

Çözüm

ACS'de özellik ayarlarının kullanılması, karmaşık raporların geliştirilmesini önemli ölçüde basitleştirebilir. Ek olarak seçimi yapılandırma yeteneğinin olmayışı gibi çalışmadaki bazı eksikliklere rağmen. tasarımcıdaki özellikler vb., özellikler mekanizması, 1C:Enterprise sistemindeki raporların geliştirilmesini basitleştirmede önemli bir adım olarak düşünülebilir.

Makalede ACS'deki özelliklerin tüm yeteneklerini dikkate almadık. Makalenin kapsamının ötesinde, hem özellikler hem de karakteristik değerler için veri kaynaklarının keyfi tanımının yanı sıra bilgi tabanındaki mevcut tüm özellikler için sahibi tarafından seçim yapılması ve çok daha fazlası gibi olasılıklar da vardır. Konu büyük, bilgi çevrenizi genişletecek yer var.

Bir gruptaki önceki kaydın alanlarını ve daha fazlasını nasıl alabileceğinize dair bir örnek. Önceki fiyatın değerleri ile mevcut fiyat arasındaki farkı hesaplamak için uygundur.

Çözümün özü ACS ifade dili işlevini kullanmaktır. Hesaplamaİfadesi() aradığım eklenen hesaplanmış alanda Delta. Fonksiyon aşağıdaki parametrelere sahiptir:

Seçenekler:

  • İfade. Tip Astar;
  • Gruplandırma. Tip Astar;
  • Hesaplama türü. Tip Astar;
  • Başlangıç
  • Son. Seçeneklerden birini içeren bir dize;
  • Sıralama. Astar;
  • Hiyerarşik Sıralama;
  • Aynı Sıra Değerlerinin İşlenmesi

4 ve 5 numaralı parametrelerle ilgileniyoruz ( Başlangıç Ve Son). İfade şu şekilde görünecektir:

isNULL((İFADEYİ HESAPLA("Fiyat", "Önceki", "Önceki") - Fiyat), 0)

Burada alanın önceki değerini hesaplıyoruz Fiyat ve mevcut alan değerini bundan çıkarın Fiyat. Doğal olarak, ilk kayıt için önceki değer hesaplanmayacak ve geçerli alanın değeriyle çıkarma sonucu Null olacaktır, bu nedenle her şeyi "saf" tutmak için Null'u sıfır sayısına dönüştürmek için isNULL işlevini kullanırız.

Bir elektronik tablo belge hücresine bir değerler tablosu yerleştirin

Bazen bir belgenin tablolu bölümünü veya tablolu bölümün satırlarını temsil eden verileri tablolu belgenin bir hücresine yerleştirmek gerekir, örneğin şu şekilde:

Bunu yapmak için işlevi kullanmanız gerekir: İfadeyiGrupValueTable ile Hesapla() , parametreleri olan:

  • İfade- hesaplanacak ifade. Dize yazın. Bir satır virgülle ayrılmış birden fazla ifade içerebilir. Her ifadeden sonra isteğe bağlı bir AS anahtar sözcüğü ve değer tablosu sütununun adı bulunabilir. Örneğin: "Karşı Taraf, Satış Hacmi Olarak Tutar (Ciro Tutarı)."
  • Alan İfadeleriGrupları- virgülle ayrılmış olarak gruplandırma alanlarının ifadeleri. Örneğin "Karşı Taraf, Taraf";
  • Kayıtların Seçimi- detay kayıtlarına uygulanan bir ifade. Örneğin, "Bayrağı Sil = Yanlış";
  • Gruplamaların Seçimi- grup kayıtlarına uygulanan seçim. Örneğin: "Tutar(TutarCiro) > &Parametre1".

Bunu yapmak için sonuç tablosunu görüntüleyeceğimiz hesaplanmış bir alan oluşturuyoruz, ardından bu alanı şu ifadeyle kaynaklara yerleştiriyoruz: CalculateExpressionWithGroupValueTable("Adlandırma, Miktar")

Sütunları numaralandırın

Erişim kontrol sistemindeki sütunları nasıl numaralandırabileceğinize dair bir örnek.

Çözümün özü:

  1. Sorgu sonucunun satırlarını belirli bir sıralama dahilinde numaralandırdığımız bir sorgu oluşturuyoruz
  2. Sonucu çapraz tabloda görüntülüyoruz

ÖNEMLİ!

Talepteki satırlar numaralandırıldıktan sonra bir VT'ye yerleştirilmeli ve daha sonra bu VT'den seçilmelidir, aksi takdirde geçiş kontrol sistemi her şeyi kendi yöntemiyle yapacak ve yanlış alanlar gruplandırmaya dahil edilecektir.

Sonucu elde etmek için şu ifadeyle hesaplanmış bir alan oluşturmanız gerekir: "Çalışan" + Format(NPP,"CHTs=3; CHVN=") ve Çalışanı yerleştirebileceğiniz hesaplanan Tam Ad alanını, ardından alanı yerleştiririz Ad Soyad bir ifadeye sahip bir kaynağa Maksimum(tam ad) ya da sadece Ad Soyad- fark yok

Renkli vurgulamayla alternatif gruplar

Mist'te veya aynı 1Cskd.ru'da bir yerde, farklı renklere sahip gruplar oluşturan çizgilerin nasıl vurgulanacağına dair bir soru vardı

Bu, hesaplanmış bir alan oluşturularak elde edilir:

CalculateExpression("Miktar (Çeşitli Adlandırma)", "İlk", "Önceki", "Birlikte") % 2

İsimlendirme alanının farklı "gruplamalarının" sayısını sayarız; gruplamalar, İşleme Özdeş Sipariş Değerleri = "Birlikte" parametresinin değeri ayarlanarak sayılabilir.

İkiye bölmenin geri kalanı grubun çift olup olmadığını netleştirecektir; buna göre koşulu içeren bir koşullu tasarım öğesi oluşturuyoruz Alan = 1

Özelliklere göre kalır. Parantez içindeki miktarla birlikte bir satırdaki özellikler

Aynı 1CSkd.ru'da, yazarın bir rapor hazırlamak için yardım istediği bir konu vardı; burada sütunlardan birinde, miktarlarıyla birlikte bir özellik listesi (ayakkabı bedenleri) gerekliydi. http://1cskd.ru/2013/05/podskazhite-novichku-v-skd/

Bu, aynı işlev kullanılarak elde edilir CalculateExpressionWithGroupArray()

Bu örnekte fonksiyon şuna benzer:

CalculateExpressionWithGroupArray("Adlandırma Özelliği.Ad +
""("" + Format(Kalan Miktar,""CHG=0"") + "")""",
,
"DeğerDolu(Adlandırma Özelliği)")

Üçüncü parametre seçimdir, boş "" dizesini sunmaktan kaçınmanıza olanak tanır - buna göre, özellikleri olmayan kalıntıları görmezsiniz

İki tabloyu Row = Number anahtarıyla birleştirin

Veya sayı türü değerini SKD'de bir dizeye dönüştürme seçeneği

Zaman zaman forumlarda "Bir sorguda bir sayı dizeye nasıl dönüştürülür?" gibi bir konu görüyorum. Bir erişim kontrol sistemi üzerinde rapor yazıyorsanız ve benzer bir dönüşüm yapmanız gerekiyorsa, istekte herhangi bir hile yazmanıza gerek yoktur.

Bir sayıyı dizeye dönüştürmek için ACS veri kompozisyon sisteminin ifade dili işlevini kullanmanız yeterlidir. Astar() veya Biçim()

Bir dizeyi sayıya dönüştürmek için işlevi kullanabilirsiniz. Hesaplamak()

Sayıya göre dizeye göre sırala

Örneğimde, çalışan dizinini personel numarasına (kod) göre sıralayarak görüntüleyeceğim.

Sonuç şöyle görünecek:

Bu, hesaplanmış bir alan oluşturularak ve ACS ifade dili işlevi kullanılarak elde edilir. Hesaplamak()

  1. Hesaplanan alan oluşturma SekmeNumaraNumara, şu ifadeyle: Hesapla(Çalışan.Kodu)
  2. Bu alana göre sırala

esasen bu, SKD ifade dili işlevini kullanarak bir dizeyi sayıya dönüştürmektir Hesaplamak()

Ayrıca “ACS ile ilgili video eğitimlerini” izlemenizi tavsiye ederim (Google'da kolayca aranır)

Geliştirme sırasında dönüştürülmüş bir .

İş yazılımlarının en önemli alanlarından biri raporlamadır. Bir işletmenin kaderi, mevcut bir raporu işletmenin (ve mevzuatın) değişen ihtiyaçlarına göre özelleştirmenin veya vergi dairesi için bir rapor gibi yeni bir rapor oluşturmanın ne kadar kolay olduğuna bağlı olabilir (ve mecazi anlamda değil!) veya mallara olan talebin mevsime ve diğer faktörlere bağımlılığının bir diyagramı. Gerekli verilerin sistemden çıkarılmasını kolaylaştıran, bunları anlaşılır bir biçimde sunan, son kullanıcının verileri yeni bir ışıkta görecek şekilde standart bir raporu yeniden yapılandırmasına olanak tanıyan güçlü ve esnek bir raporlama sistemi; bu, her birinin sahip olması gereken idealdir. iş sistemi bunun için çabalamalıdır.

1C:Enterprise platformunda, raporların oluşturulmasından "Veri Kompozisyon Sistemi" (DCS olarak kısaltılır) adı verilen bir mekanizma sorumludur. Bu yazımızda ACS mekanizmasının fikri, mimarisi ve yetenekleri hakkında kısa bir açıklama yapmaya çalışacağız.


ACS, raporların bildirimsel açıklamasına dayanan bir mekanizmadır. Erişim kontrol sistemi, karmaşık bir yapıya sahip raporların oluşturulması ve bilgilerin görüntülenmesi için tasarlanmıştır. Bu arada, rapor geliştirmenin yanı sıra, ACS mekanizması dinamik bir listede 1C: Enterprise'da da kullanılıyor; liste bilgilerini zengin işlevselliğe sahip görüntülemek için bir araç (düz ve hiyerarşik listeleri görüntüleme, satırların koşullu tasarımı, gruplamalar vb.) ).

Biraz tarih

1C:Enterprise 8 platformunun ilk sürümü olan 8.0 sürümünde raporlar şu şekilde yapıldı:
  1. 1C sorgu dilinde (SQL benzeri dil, bunun hakkında daha fazla bilgi aşağıda) bir veya daha fazla sorgu yazılmıştır.
  2. Yürütülen sorguların sonuçlarını bir elektronik tablo belgesine veya grafiğe aktaran kod yazılmıştır. Kod ayrıca bir sorguda yapılamayan işleri de yapabilir; örneğin, yerleşik 1C dilini kullanarak değerleri hesaplayabilir.
Yaklaşım basittir, ancak en uygunu değildir - minimum görsel ayarlar vardır, her şeyin "el ele" programlanması gerekir. Ve tamamen yeni olan “1C:Enterprise 8” platformunun o zamanki kozlarından biri, uygulama çözümünde, özellikle görsel tasarım yoluyla manuel olarak yazılması gereken kod miktarının en aza indirilmesiydi. Raporlama mekanizmasında da aynı yolu izlemek mantıklı olacaktır. Bu, yeni bir mekanizma olan Veri Kompozisyon Sistemi geliştirilerek yapıldı.

Erişim kontrol sisteminin temelini oluşturan fikirlerden biri, hem geliştiricinin hem de son kullanıcının erişebileceği raporların esnekliği ve özelleştirilmesiydi. İdeal olarak, son kullanıcıya geliştiriciyle aynı rapor tasarım araçları setine erişim hakkı vermek isterim. Herkesin kullanabileceği tek bir araç seti oluşturmak mantıklı olacaktır. Araçlar son kullanıcının katılımını gerektirdiğinden, bu, bunlardaki programlama kullanımının en aza indirilmesi gerektiği (en iyisi tamamen ortadan kaldırmaktır) ve görsel ayarların maksimumda kullanılması gerektiği anlamına gelir.

Sorunun formülasyonu

Geliştirme ekibinin önündeki görev, algoritmik (yani kod yazma yoluyla) değil, rapor oluşturma konusunda bildirimsel bir yaklaşıma dayalı bir raporlama sistemi oluşturmaktı. Ve sorunun başarıyla çözüldüğüne inanıyoruz. Deneyimlerimize göre, gerekli raporlamanın yaklaşık %80'i ACS kullanılarak tek satır kod gerektirmeden (hesaplanan alanlar için formül yazmak hariç), çoğunlukla görsel ayarlar aracılığıyla gerçekleştirilebilmektedir.
SDS'nin ilk versiyonunun geliştirilmesi yaklaşık 5 kişi-yıl sürdü.

İki dil

Rapor oluşturmada iki dil kullanılır. Bunlardan biri, verileri almak için kullanılan bir sorgu dilidir. İkincisi, kullanıcı alanlarının ifadelerini tanımlamak için sistemin çeşitli kısımlarında, örneğin veri kompozisyonu ayarlarında kullanılan ifadeleri yazmaya yönelik veri kompozisyonu ifade dilidir.

Sorgu dili

Sorgu dili SQL tabanlıdır ve SQL konusunda bilgili olanlar için öğrenmesi kolaydır. Örnek istek:

SQL sorguları için standart bölümlerin analoglarını görmek kolaydır - SELECT, FROM, GROUP BY, ORDER BY.

Aynı zamanda sorgulama dili, finansal ve ekonomik sorunların özelliklerini yansıtmayı ve uygulama çözümleri geliştirme çabalarının azaltılmasını en üst düzeye çıkarmayı amaçlayan önemli sayıda uzantı içerir:

  • Nokta kullanarak alanlara erişme. Bir tablonun alanları referans türündeyse (başka bir tablonun nesnelerine olan bağlantıları saklıyorlarsa), geliştirici istek metninde bunlara “.” aracılığıyla başvurabilir ve sistem, iç içe geçme düzeylerinin sayısını sınırlamaz. bu tür bağlantıların (örneğin, Müşteri Siparişi. Sözleşme. Organizasyon. Telefon).
  • Sonuçların çok boyutlu ve çok düzeyli oluşumu. Gruplama ve hiyerarşi dikkate alınarak toplamlar ve alt toplamlar oluşturulmakta, toplama ile seviyeler istenilen sırayla geçilebilmekte ve toplamların zaman boyutlarına göre doğru oluşturulması sağlanmaktadır.
  • Sanal tablolar için destek. Sistem tarafından sağlanan sanal tablolar, karmaşık sorgular oluşturmaya gerek kalmadan çoğu uygulama görevi için neredeyse hazır veriler elde etmenize olanak tanır. Böylece sanal bir tablo, belirli bir zaman dilimindeki ürün bakiyeleri hakkında veri sağlayabilir. Aynı zamanda sanal tablolar, önceden hesaplanan toplamlar vb. gibi depolanan bilgilerden maksimum düzeyde yararlanır.
  • Geçici tablolar. Sorgu dili, sorgularda geçici tabloları kullanmanıza olanak tanır. Bunların yardımıyla sorgu performansını artırabilir, bazı durumlarda engelleme sayısını azaltabilir ve sorgu metninin okunmasını kolaylaştırabilirsiniz.
  • Toplu istekler. Geçici tablolarla çalışmayı daha kolay hale getirmek için sorgu dili toplu sorgularla çalışmayı destekler; böylece geçici tablonun oluşturulması ve kullanımı tek bir sorguya yerleştirilir. Toplu istek, noktalı virgülle (";") ayrılmış bir istek dizisidir. Toplu işteki istekler birbiri ardına yürütülür. Bir toplu isteğin yürütülmesinin sonucu, kullanılan yönteme bağlı olarak, ya toplu işteki son istek tarafından döndürülen sonuç ya da toplu işteki sorguların takip ettiği sırayla toplu işteki tüm sorgulardan elde edilen sonuçların bir dizisi olacaktır. .
  • Referans alanlarının temsillerini alma. Her nesne tablosunun (içinde bir referans kitabının veya belgenin saklandığı) bir sanal alanı vardır - “Görünüm”. Bu alan nesnenin metinsel temsilini içerir ve rapor oluşturucunun işini kolaylaştırır. Dolayısıyla, bir belge için bu alan tüm önemli bilgileri içerir - belge türünün adı, numarası ve tarihi (örneğin, "07/06/2017 17:49:14 tarihinden itibaren 000000003 Satışı"), geliştiriciyi hesaplanmış bir alan yazma.
  • ve benzeri.
Talep mekanizması, adına talebin yürütüldüğü kullanıcının ait olduğu rolleri (yani kullanıcı yalnızca görme hakkına sahip olduğu verileri görecektir) ve işlevsel seçenekleri (yani, uygun şekilde) dikkate alarak talebi otomatik olarak değiştirir. uygulama çözümü işlevinde yapılandırılmış olanlarla).

Erişim kontrol sistemleri için özel sorgulama dili uzantıları da bulunmaktadır. Genişletme, küme parantezleri içine alınmış ve doğrudan istek gövdesine yerleştirilen özel sözdizimsel talimatlar kullanılarak gerçekleştirilir. Geliştirici, uzantıları kullanarak, raporu özelleştirirken son kullanıcının hangi işlemleri gerçekleştirebileceğini belirler.

Örneğin:

  • SEÇMEK. Bu cümle, kullanıcının çıktı için seçebileceği alanları açıklamaktadır. Bu anahtar kelimeden sonra, ana sorgu seçim listesindeki yapılandırma için kullanılabilecek alanların takma adları virgülle ayrılmış olarak listelenir. Örnek: (Ürün SEÇ, Depo)
  • NEREDE. Kullanıcının seçimi uygulayabileceği alanlar açıklanmaktadır. Bu teklif tablo alanlarını kullanıyor. Seçim listesi alanı takma adlarının kullanımına izin verilmez. Birliğin her parçası kendi WHERE öğesini içerebilir. Örnekler: (NEREDE Öğe.*, Depo), (NERE Belge.Tarih >= &BaşlangıçTarihi, Belge.Tarih)<= &ДатаКонца}
  • ve benzeri.
Uzantıları kullanma örneği:

Veri Bileşimi İfade Dili

Veri Bileşimi İfade Dili, özellikle özel alan ifadelerini tanımlamak için kullanılan ifadeleri yazmak üzere tasarlanmıştır. SKD, kendi ifadelerinizi veya seçim koşullarıyla birlikte seçenek kümelerini kullanarak bir raporda özel alanlar tanımlamanıza olanak tanır (SQL'deki CASE'e benzer). Özel alanlar hesaplanan alanlara benzer. Hem yapılandırıcıda hem de 1C:Enterprise modunda ayarlanabilirler ancak ortak modüllerin işlevleri özel alan ifadelerinde kullanılamaz. Bu nedenle özel alanlar geliştiriciden ziyade kullanıcıya yöneliktir.

Örnek:

Erişim kontrol sistemi hakkında rapor oluşturma süreci

Rapor oluştururken verilerin raporda nasıl görüntüleneceğini tanımlayan bir düzen oluşturmamız gerekir. Veri düzeni diyagramını temel alan bir düzen oluşturabilirsiniz. Veri düzeni diyagramı, rapora sağlanan verilerin özünü açıklar (verilerin nereden alınacağı ve düzenini nasıl kontrol edebileceğiniz). Veri kompozisyon şeması her türlü raporun oluşturulabilmesinin temelini oluşturur. Veri kompozisyon şeması şunları içerebilir:
  • veri kompozisyon sistemi talimatlarını içeren talep metni;
  • çoklu veri setlerinin açıklaması;
  • mevcut alanların ayrıntılı açıklaması;
  • birden fazla veri kümesi arasındaki ilişkilerin tanımlanması;
  • veri toplama parametrelerinin açıklaması;
  • saha düzenlerinin ve gruplamalarının açıklaması;
  • ve benzeri.

Örneğin, veri kompozisyon şemasına bir veri kümesi olarak bir sorgu ekleyebilir ve sorgu oluşturucuyu çağırabilirsiniz; bu, grafiksel olarak isteğe bağlı karmaşıklıkta bir sorgu oluşturmanıza olanak tanır:

Sorgu tasarımcısını başlatmanın sonucu sorgu metni olacaktır (1C:Enterprise sorgu dilinde). Bu metin gerekirse manuel olarak ayarlanabilir:

Bir veri düzeni şemasında birden fazla veri seti olabilir, veri setleri herhangi bir şekilde düzene bağlanabilir, hesaplanan alanlar eklenebilir, rapor parametreleri belirtilebilir vb. 1C:Enterprise'daki sorgu mekanizmasının ilginç bir özelliğinden bahsetmeye değer. Sorgular sonuçta uygulamanın doğrudan çalıştığı DBMS'ye özgü bir SQL lehçesine çevrilir. Genel olarak, DBMS sunucularının yeteneklerini maksimumda kullanmaya çalışıyoruz (yalnızca 1C:Enterprise platformu - MS SQL, Oracle, IBM DB2 tarafından desteklenen tüm DBMS'lerde aynı anda mevcut olan yetenekleri kullanmamızla sınırlıdır) , PostgreSQL). Böylece hesaplanan alanlarda sorgu düzeyinde yalnızca SQL'e çevrilmiş işlevleri kullanabiliriz.

Ancak veri kompozisyon şeması düzeyinde, yerleşik 1C geliştirme dilinde (bizim tarafımızdan yazılanlar dahil) zaten özel alanlar ekleyebilir ve bunların içindeki işlevleri kullanabiliriz, bu da raporların yeteneklerini büyük ölçüde genişletir. Teknik olarak şöyle görünüyor - SQL'e çevrilebilecek her şey SQL'e çevrilir, sorgu DBMS düzeyinde yürütülür, sorgu sonuçları 1C uygulama sunucusunun belleğine yerleştirilir ve SKD her kayıt için değerleri hesaplar. Formülleri 1C dilinde yazılmış hesaplanmış alanların sayısı.


Özel Alanlar Ekleme

Rapora dilediğiniz sayıda tablo ve grafik ekleyebilirsiniz:


Rapor tasarımcısı


Çalışma zamanı raporu

Kullanıcı, SKD'yi kullanarak rapora karmaşık seçimler (isteğe doğru yerlere eklenecek), koşullu tasarım (görüntülenen alanların değerlerine bağlı olarak yazı tipi, renk vb. ile farklı biçimlendirilmesine izin veren) ekleyebilir. ) ve çok daha fazlası. .

Raporun oluşturulması ve üretilmesi süreci kısaca şu şekilde açıklanabilir:

  • Geliştirici, tasarım zamanında bir tasarımcının yardımıyla (veya çalışma zamanında kod kullanarak) veri düzeni şemasını belirler:
    • Talep/talep metni
    • Hesaplanan alanların açıklaması
    • İstekler arasındaki ilişkiler (birkaç tane varsa)
    • Rapor Seçenekleri
    • Varsayılan ayarları
    • Vesaire.
  • Yukarıdaki ayarlar düzende kaydedilir
  • Kullanıcı raporu açar
    • Muhtemelen ek ayarlar yapar (örneğin parametre değerlerini değiştirir)
    • “Oluştur” düğmesine tıklar
  • Kullanıcı ayarları, geliştirici tarafından tanımlanan veri kompozisyon şemasına uygulanır.
  • Verilerin nereden alınacağına ilişkin talimatları içeren bir ara veri kompozisyon düzeni oluşturulur. Özellikle düzende belirtilen sorgular ayarlanır. Böylece raporda kullanılmayan alanlar istekten çıkarılır (bu, alınan veri miktarını en aza indirmek için yapılır). Hesaplanan alan formüllerine katılan tüm alanlar sorguya eklenir.
  • Veri kompozisyon işlemcisi devreye giriyor. Düzen işlemcisi sorguları yürütür, veri kümelerini bağlar, hesaplanan alanlar ve kaynaklar için değerleri hesaplar ve gruplandırmayı gerçekleştirir. Kısaca DBMS düzeyinde yapılmayan tüm hesaplamaları yapar.
  • Veri çıkış işlemcisi, yürütme talebini başlatır ve alınan verileri bir elektronik tablo belgesinde, grafikte vb. görüntüler.


ACS mekanizmasını kullanarak rapor oluşturma süreci

Sunucudan istemci uygulamasına aktarılan rapor verilerinin miktarını en aza indirmeye çalışıyoruz. Verileri bir elektronik tablo belgesinde görüntülerken, bir elektronik tablo belgesini açarken, sunucudan yalnızca kullanıcının belgenin başında gördüğü satırları aktarırız. Kullanıcı belgenin satırları boyunca ilerledikçe eksik veriler sunucudan istemciye indirilir.

Özel ayarlar

Tüm ACS araçları hem geliştiricinin hem de son kullanıcının kullanımına açıktır. Ancak uygulama, son kullanıcının genellikle araç özelliklerinin çokluğundan korktuğunu göstermiştir. Üstelik çoğu durumda, son kullanıcının tüm ayarların gücüne ihtiyacı yoktur - bir veya iki rapor parametresini (örneğin, dönem ve karşı taraf) ayarlamaya hızlı erişime sahip olması yeterlidir. Rapor geliştirici, platformun belirli bir sürümünden başlayarak kullanıcıya hangi rapor ayarlarının sunulduğunu işaretleme olanağına sahiptir. Bu, “Kullanıcı ayarlarına dahil et” onay kutusu kullanılarak yapılır. Ayrıca rapor ayarlarında artık üç değerden birini alan bir "Görüntüleme Modu" bayrağı bulunmaktadır:
  • Hızlı erişim. Ayar doğrudan rapor penceresinin üst kısmında görüntülenecektir.
  • Sıradan. Ayar, “Ayarlar” düğmesi aracılığıyla kullanılabilir.
  • Müsait değil. Ayar son kullanıcıya sunulmayacaktır.


Tasarım zamanında ekran modunu ayarlama


Ayarı çalışma zamanında Hızlı Erişim modunda görüntüleyin (Oluştur düğmesinin altında)

Kalkınma planları

Geçiş kontrol sistemlerinin geliştirilmesinde öncelikli alanlarımızdan biri kullanıcı ayarlarının basitleştirilmesidir. Deneyimlerimiz, bazı son kullanıcılar için kullanıcı ayarlarıyla çalışmanın hâlâ büyük bir sorumluluk olduğunu gösteriyor. Biz bunu dikkate alıyoruz ve bu yönde çalışıyoruz. Buna göre geliştiricilerin erişim kontrol sistemleriyle çalışması da kolaylaşacak çünkü Daha önce olduğu gibi hem geliştirici hem de son kullanıcı için raporların ayarlanmasına yönelik tek bir araç sunmak istiyoruz.

İyi günler, blog sitesinin sevgili okuyucuları! Geçen sefer fonksiyonun kullanımından bahseden bir konuya değinmiştik. Ve bugün, bu makale serisinin ilkinde şunu öğreneceğiz: Veri kompozisyonu alanı rolleri ne için kullanılır? ve ayrıca bu rollerin doldurulmasına ilişkin örnekleri de göz önünde bulundurun.

ACS alanının rolü şunları gösterir: bu alan nedir. Her alan rolü kendi özelliğini içerebilir. Örneğin sayısal bir değeri vardır ve alan nokta ise dönem numarasını içerir. “Nokta” özelliğinin değeri 0 (sıfır) ise bu alanın nokta olmadığı anlamına gelir. Veya "Boyut" özelliği alanın bir boyut olduğuna dair bir gösterge içerir. Alan bir boyutsa bu bilgi, denge alanlarının toplamları hesaplanırken kullanılır.

Veri kompozisyon şemasındaki her alan için bir rol belirtebilirsiniz. Roller bakiye hesaplamalarının doğruluğunu etkiler. Özellikle bazı tablolara göre başlangıç ​​ve son bakiye. Sorguda "Bakiyeler ve Cirolar" sanal tablosu seçilirse, özellikle döneme göre ek spreadler kullanırsak, ilk ve son bakiyeler karmaşık bir algoritma kullanılarak hesaplanır.

Ancak sorgularda tüm bunlar bir dizi çıktı alanına dayalı olarak doğru çalışıyorsa, veri kompozisyonunda işler biraz daha kötüdür. Sonuçta kullanıcının gerçekte hangi alanları seçeceğini bilmiyoruz. Her şey, istediği zaman değiştirebileceği rapor sürümünün ayarlarına bağlı olacaktır. Dolayısıyla veri kompozisyon sisteminin belirli bir veri kümesine ait açılış ve kapanış bakiyelerini hesaplamak için kendi mekanizması vardır ve buna göre roller kullanılmaktadır. Şimdi açalım ve her alan için roller ayarlayabildiğinizi görelim.

Bir sorgu veri kümesi ekleyelim. Bunun için “Query Builder” kök elemanını aktif hale getirmemiz gerekiyor. Birikim kaydının sanal “Bakiyeler ve Cirolar” tablosuna dönelim. Ne görüyoruz?

Yukarıdaki illüstrasyondan da görebileceğiniz gibi bazı alanlar için rolün doldurulduğunu görüyoruz. Bunun nedeni Otomatik Tamamlama bayrağını ayarlamamızdır. Ancak bu her zaman mümkün olmadığından bazen rolü manuel olarak girmeniz gerekir. Birkaç örneğe bakalım.

Örneğin kullandığımız bir sorguda “SELECT” sorgu dili operatörünü kullandığımızı varsayalım. Aşağıdaki durumu açıklayalım:

SEÇİM NE ZAMAN Kalan ÜrünRemainingAndTurnover.Nomenclature = Değer(Directory.Nomenclature.EmptyLink) THEN Value(Directory.Nomenclature.Shampoo) ELSE Product RemainingRemainingAndTurnover.Nomenclature SON

Bu giriş, eğer öğe boş bir bağlantıya karşılık geliyorsa ("Nomenclature" işlev değeri dizinine, boş bağlantıya atıfta bulunuyoruz), önceden tanımlanmış öğenin değerinin döndürüleceği anlamına gelir. Konfigürasyonumuzda önceden tanımlanmış böyle bir öğenin olduğunu ve buna “Şampuan” adını verdiğini varsayalım. Aksi takdirde öğenin değerini döndürürüz. Aşağıdakileri alıyoruz:

Gördüğünüz gibi “Adlandırma” alanı için rol doldurulmamıştır. Fakat görselde gördüğünüz gibi gerçekte “Field1” alanına girilmiş bir rolümüz yok ve bu durumda kalan doğru hesaplanmayacaktır.

Rolün bağımsız olarak atanamadığı başka örnekler de vardır. Örneğin, bu, örneğin başka bir veritabanından yüklenen girdi olarak belirli bir değer tablosu sağlanır ve bakiyelerin bundan hesaplanması gerekir. Bu durumda rolleri kendimiz atamamız gerekir. Bunun nasıl yapıldığına bakacağız.

Makalenin sonunda size Anatoly Sotnikov'dan ücretsiz bir tane önermek istiyorum. Bu deneyimli bir programcının vereceği bir kurstur. Erişim kontrol sisteminde raporların nasıl oluşturulacağını ayrı ayrı gösterecektir. Sadece dikkatlice dinlemeniz ve hatırlamanız gerekiyor! Aşağıdaki soruların yanıtlarını alacaksınız:
  • Basit bir liste raporu nasıl oluşturulur?
  • "Alanlar" sekmesindeki Alan, Yol ve Başlık sütunları ne işe yarar?
  • Düzen alanlarının sınırlamaları nelerdir?
  • Roller nasıl doğru şekilde yapılandırılır?
  • Düzen alanlarının rolleri nelerdir?
  • Bir sorguda veri kompozisyonu sekmesini nerede bulabilirim?
  • Erişim kontrol sistemindeki parametreler nasıl yapılandırılır?
  • Daha da ilginçleşiyor...
Belki de gerekli bilgiyi bulmak için internette kendi başınıza gezinmeye çalışmamalısınız? Üstelik her şey kullanıma hazır. Sadece başlayın! Ücretsiz video derslerinde neler olduğuna dair tüm ayrıntılar

Öğrenci olarak siteye giriş yapın

Okul materyallerine erişmek için öğrenci olarak oturum açın

Yeni başlayanlar için veri kompozisyon sistemi 1C 8.3: sonuçların sayılması (kaynaklar)

Bu dersin amacı şu olacaktır:

  • Ürünlerin listesini (Gıda dizini), kalori içeriğini ve tadını görüntüleyen bir rapor yazın.
  • Ürünleri renklerine göre gruplandırın.
  • Özetleme (kaynaklar) ve hesaplanan alanlar hakkında bilgi edinin.

Yeni bir rapor oluştur

Önceki derslerde olduğu gibi veritabanını açıyoruz " Şarküteri"Yapılandırıcıda ve menü aracılığıyla yeni bir rapor oluştur" Dosya"->"Yeni...":

Belge Türü - harici rapor:

Rapor kurulum formuna " adını yazın Ders3"ve düğmeye basın" Veri kompozisyon diyagramını aç":

Varsayılan şema adını bırakın ve " Hazır":

Yapıcı aracılığıyla istek ekleme

"sekmesinde Veri seti" tıklamak yeşil artı işaretini seçin ve " Veri Kümesi Ekle - Sorgu":

İstek metnini manuel olarak yazmak yerine tekrar çalıştırıyoruz sorgu oluşturucu:

"Sekme"de Tablolar"tabloyu sürükle" Yiyecek" birinci sütundan ikinciye:

Tablodan seçin " Yiyecek"İsteyeceğimiz alanlar. Bunun için alanları sürükleyip bırakın" İsim", "Tatmak", "Renk" Ve " Kalori içeriği" ikinci sütundan üçüncüye:

Şöyle ortaya çıktı:

Düğmesine basın " TAMAM" - istek metni otomatik olarak oluşturuldu:

Rapor sunum ayarlarını oluşturma

Sekmeye git " Ayarlar"ve tıklayın sihirli değnek, aramak ayar tasarımcısı:

Rapor türünü seçin " Liste..." ve " düğmesine basın Daha öte":

Listede görüntülenecek alanları sol sütundan sağa sürükleyin ve " Daha öte":

Sol sütundan sağ alana sürükleyin " Renk" - o olacak gruplama rapordaki satırlar. Tıklamak " TAMAM":

Ve işte tasarımcının çalışmasının sonucu. Raporumuzun hiyerarşisi:

  • raporun tamamı
  • "Renk" gruplandırma
  • ayrıntılı girişler - yiyecek adlarının bulunduğu satırlar

Raporu kaydedin (düğme disket) Ve kapanmadan Yapılandırıcıyı hemen kullanıcı modunda açacağız. Şöyle ortaya çıktı:

Sütunların sırasını değiştirme

Ama hadi sırayı değiştirelim sütunlarını (yukarı ve aşağı oklar) aşağıdaki şekilde görünecek şekilde ayarlayın:

Raporu kaydedip kullanıcı modunda tekrar açalım:

Harika, bu çok daha iyi.

Kalori içeriğini özetleyelim

Besinlerin kalori içeriğini gruplara göre özetlemek güzel olurdu. Beyaz veya sarı gibi tüm ürünlerin kalori içeriğinin toplamını görmek için. Veya veritabanındaki tüm ürünlerin toplam kalori içeriğini öğrenin.

Bu amaçla kaynakların hesaplanmasına yönelik bir mekanizma bulunmaktadır.

Sekmeye git " Kaynaklar"ve alanı sürükleyin" Kalori içeriği"(Özetleyeceğiz) sol sütundan sağa.

Bu durumda, alanda açılır listeden ifadeyi seçin " Miktar(Kalori)", toplam, toplamda yer alan tüm unsurların toplamı olacağından:

Bir rapor kaydedip oluşturuyoruz:

Artık her bir grup için ve bir bütün olarak rapor için sonuçlara sahibiz.

Kalori açısından (ortalama) özetleyelim

Şimdi bunu başka bir sütunda görünmesini sağlayalım ortalamaÜrünlerin kalori içeriği gruplara göre ve bir bütün olarak raporda.

Mevcut "Kalori" sütununa dokunamazsınız - toplam zaten içinde görüntülenmektedir, dolayısıyla hadi başka bir alan oluşturalım"Kalori" alanının tam bir kopyası olacaktır.

Böyle bir "sanal" alan oluşturmak için mekanizmayı kullanacağız hesaplanan alanlar.

Sekmeye git " Hesaplanan alanlar" ve bas yeşil artı işareti:

Bir sütunda " Veri yolu"yeni alanın adını yazıyoruz ( sorunsuzca, boşluksuz). Adı "olsun" Ortalama Kalori İçeriği"ve sütunda" İfade"Yeni alanın hesaplanacağı mevcut alanın adını yazıyoruz. Oraya yazıyoruz " Kalori içeriği". Kolon " Başlık" otomatik olarak doldurulacaktır.

Yeni bir alan ekledik (" Ortalama Kalori İçeriği"), ancak raporda tek başına görünmeyecek - tekrar aramanız gerekiyor ayar tasarımcısı("sihirli değnek") veya bu alanı ekleyin manuel olarak.

Hadi yapalım ikinci yol. Bunu yapmak için sekmeye gidin " Ayarlar", seçme " Rapor"(sonuçta alanı bütün olarak rapora eklemek istiyoruz), alttaki sekmeyi seçin" Seçilen alanlar"ve alanı sürükleyin" Ortalama Kalori İçeriği"sol sütundan sağa:

Şöyle ortaya çıktı:

Bir rapor kaydedip oluşturuyoruz:

Alanı ortaya çıktı ve değerlerinin "Kalori" alanının değerleri olduğunu görüyoruz. Harika!

Bunu yapmak için zaten bize tanıdık gelen mekanizmayı tekrar kullanacağız. kaynaklar(özetleme). Sekmeye git " Kaynaklar"ve alanı sürükleyin" Ortalama Kalori İçeriği"sol sütundan sağa:

Üstelik "sütununda" İfade"seçmek" Ortalama(OrtalamaKalori)":

Bir rapor kaydedip oluşturuyoruz:

Gruplar için yani her renk için ve raporun tamamı için ortalama değerin kesinlikle doğru hesaplandığını görüyoruz. Ama onlar mevcut ekstra girişler rapordan kaldırmak istediğim tek tek ürünler (gruplar değil) için.

Neden ortaya çıktıklarını biliyor musunuz (değerler gruba göre değil)? Çünkü alanı eklediğimizde " Ortalama Kalori İçeriği"rapor ayarlarında ikinci adımda seçtik raporun tamamı ve bu yeni alan " öğesinde sona erdi" Detaylı kayıtlar".

Hatayı düzeltelim. Bunu yapmak için sekmeye geri dönün " Ayarlar", seçme " Ayrıntılı girişler" önce yukarıdan (adım 2) ve sonra " Ayrıntılı girişler"aşağıdan (3. adım), yer imine gidin" Seçildi alanlar" ve sağ sütununda öğeyi göreceğiz " Oto".

Öğe " Oto" - bu tek bir alan değil. Bunlar, üst düzey ayarlara göre otomatik olarak buraya düşen birkaç alandır.

Bu alanların ne olduğunu görmek için " öğesine tıklayın Oto" Sağ düğmesine basın ve " Genişletmek":

Öğe " Oto" aşağıdaki alanlara genişletildi:

Ve işte bizim alanımız" Ortalama Kalori İçeriği"bu noktadan buraya geldi" Rapor" Onu oraya sürüklediğimizde. hadi kaldıralımÇıktısını kaldırmak için bu alanın yanındaki kutuyu işaretleyin.



Makaleyi beğendin mi? Paylaş