Veri Bileşim Sistemi İfade Dili (1Cv8). Veri düzeni diyagramı (1C SKD) Veri düzeni diyagramı hesaplanan alanlar

Merhaba sevgili okuyucu! Yerleşim sisteminin temelleri hakkında başka bir dersimiz daha var. SKD ifade dilinin işlevleriyle tanıştınız, düzen sisteminin özelliklerini gördünüz ve ayrıca düzen alanlarının temel ayarlarını anladınız. Şimdi yeni malzemeye bakacağız. Gitmek!

ACS alanları için ek ayarlar.

Kolon "Değer türü" Düzen alanı için veri türünü belirtmenizi sağlar. Hangi türün olduğunu zaten biliyorsanız, neden örneğin “Adlandırma” alanı için türü belirtmelisiniz? Düzen alanı kompozit tipteyse bu gereklidir. Belirli bir türü seçebilirsiniz, ardından bu alanla seçim yaparken bu türün değerleri seçilecektir.

Kolon "Mevcut değerler" seçim için mevcut değerleri belirtmenize ve kullanıcının seçimini belirli sınırlarla sınırlandırmanıza olanak tanır.

Kolon "Dekor" düzenleri kullanmadan bir düzen alanının tasarımını belirtmenize olanak tanır. Yazı tipi rengini, çerçeve rengini, metin yönünü vb. belirtebilirsiniz.

Kolon "Düzenleme Seçenekleri" Düzen alanının nasıl düzenleneceğini belirtmenizi sağlar. Örneğin, bir seçimdeki listeden öğelerin hızlı bir şekilde seçilmesini belirtebilirsiniz. Varsayılan olarak bir düzen alanı, tüm düzenleme seçeneklerini meta veri nesnesinden devralır.

Hesaplanan alanlar

Veri kompozisyonunun “Hesaplanan Alanlar” sekmesinde kendi hesaplanan alanlarınızı oluşturabilirsiniz.

Sorgu düzeyinde oluşturabileceğiniz hesaplanmış alanlara neden ihtiyacınız var? Tüm alanlar bir sorgu kullanılarak tanımlanamaz. Farklı veri kümelerinden, örneğin bir sorgu ve bir nesneden karmaşık bir alan oluşturmanız gerekiyorsa, hesaplanan alanlar olmadan yapamazsınız. Veri kaynağı bir sorguysa ve otomatik doldurma etkinse veri kompozisyonu alanı ekleyemezsiniz ancak hesaplanan alanları kullanarak istediğiniz kadar alan ekleyebilirsiniz.

Hesaplanan alanın "İfade" sütununda, veri kompozisyonu alanlarını kullanan, yollarına ("Veri Kümeleri" sekmesindeki "Yol" sütunu) erişen rastgele bir ifade yazmanız gerekir. İster matematiksel dönüşüm fonksiyonlarını kullanabilir, ister ortak modüllerin fonksiyonlarına ulaşabilirsiniz. Örneğin “Veri Yolu” sütununa hesaplanan alanın adını “Sapma”, “İfade” alanına ise aşağıdakini yazalım.

Yaklaşan 8.2.14 sürümünün ışığında, veri kompozisyon sisteminin bazı yeni fonksiyonlarını anlatmaya çalışacağım.

Düzenlemeyi kolaylaştırmak için veri düzeni diyagramını tercihen harici bir raporda açın.

Sorgu türünün bir veri kümesini ekliyoruz ve manuel olarak veya sorgu tasarımcısını kullanarak basit bir sorgu yazıyoruz:

1. Erişim kontrol sisteminde bir istek oluşturun.

2. Erişim kontrol sisteminde hesaplanan alanları ayarlayın

3. Ayarlar sekmesinde veri düzenini yapılandırın

4. 1C Enterprise 8.2.14'ü başlatın. Raporu açın. Biz oluştururuz, alırız.

Yeni işlevlerin açıklaması:

1. Geçerli tarih()

Sistem tarihini döndürür. Bir düzen düzeni oluştururken, düzende bulunan tüm ifadelerde CurrentDate() işlevi, geçerli tarihin değeriyle değiştirilir.

2. COMPUTEEXPRESSION()

Sözdizimi:

İfadeyi Hesapla(<Выражение>, <Группировка>, <ОбластьВычисления>, <Начало>, <Конец>, <Сортировка>, <ИерархическаяСортировка>, <ОбработкаОдинаковыхЗначенийПорядка>)

Tanım:

İşlev, bir ifadeyi bazı gruplandırma bağlamında değerlendirmek için tasarlanmıştır.

İşlev, gruplamaların seçimini hesaba katar ancak hiyerarşik seçimleri hesaba katmaz.

İşlev, bir gruplamaya ait grup seçiminde o gruplamaya uygulanamaz. Örneğin Nomenclature grubunun seçiminde CalculateExpression("Sum(SumTurnover)", "TotalTotal") > 1000 ifadesini kullanamazsınız. Ancak hiyerarşik seçimde böyle bir ifade kullanılabilir.

Bitiş kaydı başlangıç ​​kaydından önce geliyorsa, detaylı verilerin hesaplanmasına ve toplu fonksiyonların hesaplanmasına yönelik kayıtların olmadığı kabul edilir.

Genel toplam için aralık ifadelerini hesaplarken (Gruplandırma parametresi Genel Toplam olarak ayarlanmıştır), ayrıntılı verileri hesaplamak ve toplama işlevlerini hesaplamak için hiçbir kayıt olmadığı varsayılır.

CalculateExpression işlevi için bir ifade oluştururken, sıralama ifadesi gruplamada kullanılamayan alanlar içeriyorsa düzen oluşturucu, CalculateExpression işlevini NULL ile değiştirir.

Seçenekler

<Выражение>

Tür: Dize. Değerlendirilecek ifade.

<Группировка>

Tür: Dize. İfadenin değerlendirileceği bağlamdaki gruplamanın adını içerir. Gruplandırma adı olarak boş bir dize kullanılırsa hesaplama geçerli gruplandırma bağlamında gerçekleştirilecektir. Grup adı olarak Genel Toplam dizesi kullanılırsa hesaplama genel toplam bağlamında gerçekleştirilecektir. Aksi takdirde hesaplama aynı adı taşıyan üst gruplama bağlamında gerçekleştirilecektir.

Örneğin:

Sum(Sales.SumTurnover)/Calculate(“Sum(Sales.SumTurnover)”, “Toplam”)

Bu örnekte sonuç, gruplandırma kaydının Sales.SumTurnover alanı tutarının tüm düzendeki aynı alanın tutarına oranı olacaktır;

<ОбластьВычисления>

Tür: Dize. Parametre aşağıdaki değerleri alabilir:

  • GenelToplam - ifade tüm gruplama kayıtları için hesaplanacaktır.
  • Hiyerarşi - İfade, varsa üst hiyerarşik kayıt için, üst hiyerarşik kayıt yoksa tüm gruplandırma için değerlendirilecektir.
  • Gruplandırma - ifade, geçerli gruplandırma kaydı için değerlendirilecektir.
  • Kaynak Dışı Gruplandırma - kaynağa göre bir grup kaydı için bir işlev hesaplanırken ifade, orijinal gruplandırmanın ilk grup kaydı için değerlendirilecektir.

Bir fonksiyonu hesaplarken Hesaplamaİfadesi() Kaynak gruplaması olmayan grup kayıtları için Kaynak Dışı Gruplandırma değeriyle işlev, parametre değerinin Gruplandırma değerine eşit olması durumunda hesaplanacağı şekilde hesaplanır.

Veri kompozisyonu düzeni oluşturucusu, mizanpajda gruplandırmanın gerçekleştirildiği kaynak alanının çıktısını alırken bir veri kompozisyonu düzeni oluştururken, işlev kullanılarak hesaplanan mizanpaja bir ifade yerleştirir. Hesaplamaİfadesi(), Kaynak Dışı Gruplandırma parametresini gösterir. Diğer kaynaklar için olağan kaynak ifadeleri kaynak gruplamasına yerleştirilir.

<Начало>

Tür: Dize. Parçanın hangi kayıttan başlaması gerektiğini, hangi toplu ifade fonksiyonlarının hesaplanması gerektiğini ve toplama fonksiyonları dışındaki alan değerlerinin hangi kayıttan alınacağını belirtir. Değer aşağıdakilerden biri olabilir:

<Конец>

Tür: Dize. İfadenin toplu fonksiyonlarının hesaplanması gereken parçanın hangi kayda kadar devam etmesi gerektiğini belirtir. Değer aşağıdakilerden biri olabilir:

  • Birinci. İlk gruplama kaydını almak gerekir. Parantez içindeki kelimeden sonra, sonucu gruplamanın başlangıcından itibaren ofset olarak kullanılacak bir ifade belirleyebilirsiniz. Ortaya çıkan değer sıfırdan büyük bir tam sayı olmalıdır. Örneğin, İlk(3) – gruplandırmanın başlangıcından itibaren üçüncü kaydı alma.

İlk kayıt gruplamanın dışında ise kayıt olmadığı kabul edilir. Örneğin 3 kayıt varsa ve First(4) almak istiyorsanız bu durumda kayıt olmadığı kabul edilir.

  • Son. Son gruplandırma kaydını almanız gerekir. Parantez içindeki kelimeden sonra, sonucu gruplamanın sonundan itibaren sapma olarak kullanılacak bir ifade belirleyebilirsiniz. Ortaya çıkan değer sıfırdan büyük bir tam sayı olmalıdır. Örneğin, Son(3) – grubun sonundan üçüncü kaydın alınması.

Son kayıt gruplamanın dışında ise kayıt olmadığı kabul edilir. Örneğin 3 kayıt varsa ve Last(4) almak istiyorsanız bu durumda kayıt olmadığı kabul edilir.

  • Öncesi. Önceki gruplama kaydını almanız gerekir. Parantez içindeki sözcükten sonra, sonucu geçerli gruplama kaydından geriye doğru bir sapma olarak kullanılacak bir ifade belirleyebilirsiniz. Örneğin, Önceki(2) – önceki kayıttan öncekini almak.

Önceki kayıt gruplamanın dışına çıkıyorsa (örneğin ikinci gruplama kaydı için Önceki(3) almanız gerekir) ilk gruplama kaydı elde edilir.

Gruplandırma toplamı için önceki kayıt alınırken ilk kaydın elde edildiği kabul edilir.

  • Sonraki. Bir sonraki gruplama kaydını almanız gerekir. Parantez içindeki sözcükten sonra, sonucu geçerli gruplama girişinden ileriye doğru bir sapma olarak kullanılacak bir ifade belirtebilirsiniz. Örneğin, Sonraki(2) – sonraki kayıttan sonrakini almak.

Bir sonraki kaydın gruplamanın dışına çıkması durumunda kayıt olmadığı kabul edilir. Örneğin 3 kayıt varsa ve üçüncü kayıt için Next() alındıysa kayıt olmadığı kabul edilir.

Gruplandırma toplamı için bir sonraki kayıt alındığında kayıt olmadığı kabul edilir.

  • Akım. Güncel kaydı almanız gerekiyor.

Gruplandırma toplamı alınırken ilk kayıt elde edilir.

  • Sınır değeri. Belirtilen değere göre bir kayıt alma ihtiyacı. Parantez içindeki LimitingValues ​​kelimesinden sonra ilk sıralama alanı olan fragmenti başlatmak istediğiniz değeri olan ifadeyi belirtmeniz gerekiyor.

Sıralama alanı değeri belirtilen değerden büyük veya ona eşit olan ilk kayıt, kayıt olarak döndürülür. Örneğin, Dönem alanı sıralama alanı olarak kullanılıyorsa ve 01/01/2010, 02/01/2010, 03/01/2010 değerlerine sahipse ve LimitingValue(DateTime(2010) değerini almak istiyorsanız , 1, 15)), daha sonra 02/01 tarihli bir kayıt elde edilecektir. 2010.

<Сортировка>

Tür: Dize. Sıralama kurallarını açıklayan ifadeleri virgülle ayırarak listeler. Belirtilmezse sıralama, ifadenin değerlendirildiği gruplandırmayla aynı şekilde gerçekleştirilir. Her ifadeden sonra, Artan (artan düzende sıralama için), Azalan (azalan düzende sıralama için) ve Otomatik Sıralama (referans alanlarını, referans verilen nesneyi sıralamak istediğiniz alanlara göre sıralamak için) anahtar sözcüklerini belirtebilirsiniz. Otomatik Sıralama kelimesi hem Artan hem de Azalan kelimesiyle birlikte kullanılabilir.

<ИерархическаяСортировка>

Tür: Dize. Sırala seçeneğiyle aynıdır. Hiyerarşik kayıtları düzenlemek için kullanılır. Belirtilmediği takdirde düzen oluşturucu sıralamayı Sort parametresinde belirtilen sıralamaya göre oluşturur.

<ОбработкаОдинаковыхЗначенийПорядка>

Tür: Dize. Aynı sıralama değerine sahip birden fazla kaydın olması durumunda önceki veya sonraki kaydın belirlenmesine yönelik kuralı belirtir:

  • Ayrı olarak, önceki ve sonraki kayıtları belirlemek için sıralı kayıt dizisinin kullanıldığı anlamına gelir. Varsayılan değer.
  • Birlikte, önceki ve sonraki kayıtların sıralama ifadelerinin değerlerine göre belirlendiği anlamına gelir.

Örneğin, elde edilen sıra tarihe göre sıralanmışsa:

tarih Ad Soyad Anlam
1 01 Ocak 2001 İvanov M. 10
2 02 Ocak 2001 Petrov S. 20
3 03 Ocak 2001 Sidorov R. 30
4 04 Ocak 2001 Petrov S. 40

Parametre değeri Ayrı ise, o zaman:

§ Giriş 3'ten önceki giriş, giriş 2 olacaktır.

§ hesaplama parçası Geçerli, Geçerli (sırasıyla Başlangıç ​​ve Bitiş parametreleri) olarak tanımlanmışsa, o zaman kayıt 2 için bu parça bir kayıt 2'den oluşacaktır. CalculateExpression(“Sum (Value)”, Current, Current) ifadesi 20'ye eşit olsun.

Parametre değeri Birlikte ise, o zaman:

§ Giriş 3'ten önceki giriş, giriş 1 olacaktır.

§ hesaplama parçası Current, Current (sırasıyla Başlangıç ​​ve Bitiş parametreleri) olarak tanımlanmışsa, kayıt 2 için bu parça kayıt 2 ve 3'ten oluşacaktır. CalculateExpression(“Sum (Value)”, Current, Current) ifadesi 50'ye eşit olacaktır.

Birlikte'ye eşit bir parametre değeri belirlerken, Başlangıç ​​ve Bitiş parametrelerinde İlk, Son, Önceki, Sonraki konumları için bir ofset belirleyemezsiniz.

CalculateExpression(“Toplam(Toplam Ciro)”, “İlk”, “Geçerli”)

Bir önceki satırdaki gruplandırma değerini almak istiyorsanız aşağıdaki ifadeyi kullanabilirsiniz:

CalculateExpression(“Oran”, “Önceki”)

Liste yeni işlevler:

CalculateExpressionWithGroupArray(<Выражение>, <ВыражениеПолейГруппировки>, <ОтборЗаписей>, <ОтборГруппировок>) –

İşlev, her bir öğesi, bir ifadenin belirtilen alana göre gruplandırılması için değerlendirilmesinin sonucunu içeren bir dizi döndürür.

İfadeyiGrupValueTable ile Hesapla(<Выражения>, <ВыражениеПолейГруппировки>, <ОтборЗаписей>, <ОтборГруппировок>) –

İşlev, her satırı belirtilen alana göre gruplandırma için ifadelerin değerlendirilmesinin sonucunu içeren bir değerler tablosu döndürür.

DeğerDolu(<Выражение>) – Değer, bu türün varsayılan değerinden farklıysa (NULL dışında), boş bir başvuru dışında, Tanımsız dışındaysa True değerini döndürür. Boolean değerleri NULL için kontrol edilir. Dizeler, boşluk olmayan karakterlerin bulunmaması açısından kontrol edilir

Biçim(<Выражение>, <Форматная строка>) – Geçirilen değerin biçimlendirilmiş bir dizesini alın. Biçim dizesi, 1C:Enterprise sisteminin biçim dizesine uygun olarak ayarlanır.

Alt dize(<Выражение>, <Начальные символ>, <ДлинаПодстроки>) – Bu işlev bir dizeden bir alt dize çıkarmak için tasarlanmıştır.

Hat Uzunluğu(<Выражение>) – İşlev bir dizenin uzunluğunu belirlemek için tasarlanmıştır. Parametre - dize ifadesi

Astar(<Выражение>) – Bir dizi parametre olarak iletilirse, işlev tüm dizi öğelerinin dize temsillerini içeren ve “; karakterleriyle ayrılmış bir dize döndürür. “. Parametre olarak bir değerler tablosu iletilirse, işlev, değerler tablosunun tüm satırlarının dize temsillerini içeren ve her satırın hücre temsillerinin “; “ve çizgiler bir satır besleme sembolüdür. Herhangi bir öğenin boş bir dize temsili varsa, o zaman onun temsili yerine dize görüntülenir<Пустое значение>.

Veri düzeni şeması (1C SKD)- 1C:Enterprise yazılım ürünlerinde karmaşık raporlar oluşturmak için, üretim otomasyonunun geliştirilmesine ve izlenmesine katkıda bulunan, bunların minimum sürede mümkün olduğunca esnek ve güzel hale getirilmesine olanak tanıyan kullanışlı bir tasarımcı. Veri Kompozisyon Şemasının (1C SKD) ek bir avantajı, kontrollü bir rapor formunun otomatik olarak oluşturulmasıdır ve bu alanın daha da geliştirilmesiyle birlikte, bir rapor geliştirmek için bir yöntem seçerken bu önemli bir faktör haline gelir. Ancak Veri Bileşim Şemasının (1C SKD) yapısının karmaşıklığı ve çok sayıda ayar nedeniyle, genellikle raporun "çıktı formu tasarımcısı" aracılığıyla geliştirilmesinden daha uzun süre geliştirilmesine yol açar. Bu nedenle, bir 1C programcısının, rapor oluşturmaya yönelik geliştirme süresini daha da hızlandırmak için Veri Bileşim Şemasının (1C DCS) tüm inceliklerini anlaması gerekir.

Veri Bileşim Şemasının (1C SKD) ilk üç sekmesine bakalım - veri seti, veri seti bağlantıları ve hesaplanan alanlar.

1C SKD'de veri seti

Veri kümesi üç nesne (bir sorgu, bir nesne ve bir birleşim) oluşturma yeteneğini içerir; hadi bunların her birine daha yakından bakalım:

Bu, Sorgu Oluşturucu düğmesi kullanılarak oluşturulan normal bir sorgudur. Otomatik Doldurma bayrağı ayarlandıysa, seçilen tüm ayrıntılar otomatik olarak veri kümesinin alanlarına dahil edilecektir. Üç sekmenin bulunduğu Veri Bileşimi sekmesindeki istekteki alanların doldurulmasını da özelleştirmek mümkündür:

Tablolar, burada raporun oluşturulmasına katılacak tablolar seçilir, genellikle varsayılan veriler seçilir, çünkü Tablolar ve Alanlar sekmesinde ihtiyacımız olan belgeleri, dizinleri, kayıtları zaten seçtik...

Alanlar, burada rapora dahil edilmesi gereken nesneleri seçiyoruz, çocuk bayrağı nesne için erişilebilir alt öğelerin olup olmayacağını gösterir, dize, sayısal ve benzeri veriler için ayarlamanın mümkün olmayacağı mantıklıdır işareti True'ya getirin.

Koşullar, burada erişim kontrol sistemindeki koşullar altında kullanılabilecek nesneleri seçiyoruz.

İşin bir kısmı veri kompozisyon şemasında, bir kısmı ise programlı olarak yapılıyor; basit bir örneğe bakalım:

Öncelikle belgenin veri düzeni için bir düzen diyagramı oluşturacağız ve buna SKD adını vereceğiz (örneğin: 1C SKD), içinde bir veri kümesi nesnesi oluşturacağız, ardından alanları dolduracağız, örneğin bir belgemiz var ayrıntıları içeren malların tablo şeklinde bir kısmı ile - isimlendirme, miktar ve fiyat.

Üç alan ekleyelim ve her sütunu ayrıntıların adıyla dolduralım, kalan sütunlar otomatik olarak doldurulacaktır:

Belge formu üzerinde bir buton oluşturalım ve kontrollü formlarda işleyiş mekanizmasını anlatalım:

&İstemcide

Prosedür Yazdırma()

Raporumuz = PrintOnServer(); //sunucudaki fonksiyonu çağırıyoruz

Raporumuz.Show(); //oluşturulan raporu görüntüle

Prosedürün Sonu

&Sunucuda

İşlev PrintOnServer()

DocumentObject = FormAttributeValue(“Nesne”);

//Products tablo kısmını, SKD'nin kendisinde verileri içeren nesnenin adını belirttiğimiz gibi ProductsSKD adlı bir yapıya yerleştiririz.

DataSet = yeni Yapı;

DataSet.Insert(“ÜrünlerSKD”, DocumentObject.Products);

//düzenimizi alıyoruz ve tüm rapor çıktısı ayarlarının düzenimizden alınmasını sağlayacak şekilde varsayılan ayarları belirliyoruz

OurLayout = DocumentObject.GetLayout(“SKD”);

Ayarlar = OurLayout.DefaultSettings;

//ayarlarımızla bir veri düzeni düzeni oluşturun

LayoutLinker = newDataLayoutLayoutLinker;

LayoutLayout = LayoutComposer.Execute(OurLayout, Ayarlar);

//veri setimizle veri kompozisyonu gerçekleştirin

DataCompositionProcessor = yeniDataCompositionProcessor;

DataCompositionProcessor.Initialize(LayoutLayout, DataSet);

//Bir elektronik tablo belgesi oluşturuyoruz ve raporumuzu bu belgede gösteriyoruz

ReportDocument = Yeni TabularDocument;

OutputProcessor = Yeni OutputProcessorDataCompositionResultInTabularDocument;

OutputProcessor.SetDocument(ReportDocument);

OutputProcessor.Output(DataCompositionProcessor);

Belge Raporunu İade Et;

Son Fonksiyon

İsterseniz başka herhangi bir düzenin alanlarını alabilir ve bunları bu raporda görüntüleyebilirsiniz; örneğin, bir ödeme emri oluşturmak için standart bir düzenimiz var ve başlık bu düzende çok iyi oluşturulmuş, o halde, bunu yapmamak için gereksiz işler, önce düzeni alacağız, başlığı görüntüleyeceğiz, ardından erişim kontrol sistemi üzerinde raporumuzu oluşturup göstereceğiz.

HAKKINDA birleşme

İçine sorgularımızı ve nesnelerimizi yerleştirebiliyoruz ama bağlantıdan farklı olarak sadece tabloları birbirine ekliyor, yani iki özdeş tabloyu bağlarsak sonuçta bir tane elde ederiz ve birleştirildiğinde iki katına çıkar, bakalım basit bir örnekle:

Tablolarımız var:

İletişim kurulduğunda şunları alacağız:

Ve birleştirildiğinde:

Şimdi veri kümelerindeki sütunları doldurmayı düşünelim (diğer sekmelerle ilgili oldukları için bazılarını atlayacağız; bunlara gelecek makalelerde geri döneceğiz):

- alan, özelliğin genel adını belirtin;

­­- yol, erişim kontrol sisteminde kendisiyle iletişim kuracağımız ayrıntıların adını belirtin, örneğin Hesaplanan alanlar;

- başlık, raporda görüntülenecek özelliğin adını belirtin;

- alan sınırlaması, bu gereksinimin kullanılabilirliğini belirtin;

- ayrıntıların kısıtlanması, alt öğelerin kullanılabilirliğini belirtiyoruz, ayrıntıların kullanılabilirliği belirtilirse alanın kendisinin de kullanılabilir olması önemlidir, belki bu mekanizma gelecek sürümlerde değiştirilecektir;

- alan temsilinin hesaplandığı ifade, ayrıntıların çıktısını biraz değiştirmemiz gerektiğinde, örneğin addan sonra ihtiyacımız olduğunda kullanmak uygundur isimlendirme görüntülendi stoklamak, bulunduğu yere gidin ve ardından aşağıdakileri doldurun: Öğe + “depoda” + Depo. Ayrıntılara erişimin sütunda belirtilen ad aracılığıyla gerçekleştirildiğini tekrar ediyorum yol;

- ifade sıralaması, önceki noktaya benzer şekilde koşulun manuel olarak ayarlanabildiği rapor sıralamasını ayarlamak için uygun bir mekanizma, ancak uygulamanın gösterdiği gibi, bu mekanizma genellikle istediğimiz gibi çalışmıyor ve standart sıralamayı kullanmanızı tavsiye ederim;

- değer türü, özelliğin değer türünü belirtir; aşağıdaki alanı kullanıyorsanız bunun doldurulması gerekir;

- mevcut değerler, yalnızca dolu olduğunda çalışır değer türü, formu açın ve sütunda Anlam türüne göre değiştirilmesi gereken öğeyi belirtiriz, önceden tanımlanmış nesneler veya sayısal olabilir, örneğin ayrıntıların basit değerleri vardır, sunum Boolean tipine bir örnek olarak neyi değiştirmemiz gerektiğini belirtiyoruz:

- dekor– yönetilen formlardaki ayarlara benzer standart alan formatı ayarları, belirli ayrıntıların çıktısını daha doğru ve güzel bir şekilde özelleştirmenize olanak tanır.

1C SKD'deki veri seti bağlantıları

Burada yalnızca yüklü sol yönden katılım benzer bir prensiple bağlantılar isteklerde, içinde iletişim kaynağı bağlantı için ana tabloyu belirtin alıcı ek olarak. İÇİNDE ifade kaynağı Ve ifade alıcısıİletişimin hangi yolla gerçekleşeceğini ayrıntıları belirtiyoruz. Sekmeye baktığımızda kalan sütunlara daha detaylı bakacağız. Seçenekler. Parametrelerle ek bağlantı yoksa istekte bağlantı yapılması tavsiye edilir, bu raporu hızlandıracaktır.

Veri kompozisyon şemasının (DCS) doğru kullanımı şunları yapmanızı sağlar:

  • bir raporun geliştirilmesi için gereken süreyi önemli ölçüde azaltmak;
  • yönetilen form işleyicisi oluşturma ihtiyacını ortadan kaldırır;
  • Kullanıcı tarafından ek kişiselleştirme imkanı ile güzel bir sonuç elde edin.

Ancak tüm geliştiriciler programın yeteneklerinden en iyi şekilde yararlanamıyor çünkü tüm ayarları açık ve sezgisel değil. Özellikle birçok kişi 1C SKD'de hesaplanmış alanlar olduğunu biliyor, ancak bunların kullanım kapsamını ve onlarla çalışma yöntemlerini tam olarak anlamıyorlar.

Hesaplanan alan nedir

Çoğu durumda düzen diyagramındaki veri kaynağı bir sorgudur. Prensip olarak sorgunun kendisinde çeşitli formülleri, yapıları ve ifadeleri zaten kullanabilirsiniz. Doğal bir soru ortaya çıkıyor: neden yinelenen işlevselliğe ihtiyacımız var?

Gerçek şu ki, erişim kontrol sistemi sadece bir sorgunun sonucunu görüntülemekten daha fazlasıdır ve bu, diyagram oluşturma formundan açıkça görülebilmektedir (Şekil 1).

Hesaplanan alanlar, oluşturulan veri kümesiyle belirli eylemleri gerçekleştirmenize olanak tanır:

  • Bir istek tarafından alınan bir dizi veriyi, birkaç satırı bir satırda birleştirerek belirli bir hücreye aktarın;
  • Genel modülün dışa aktarma işlevlerine erişin;
  • Düzen dili için mevcut olan çeşitli ifadeleri yürütün ve özel EvaluateExpression işlevlerini kullanın.

Bu listenin üzerinden geçelim.

Bir hücredeki değerler dizisi

Karşı taraf için tüm makbuz belge numaralarının ayrı bir hücrede alınmasının gerekli olduğu bir durumu simüle edelim:


Böylece şemamızda ek bir hesaplama alanı oluşturduk;


Yukarıdaki örnekten de görebileceğiniz gibi hesaplanan alanların eklenmesi ve işlenmesinde herhangi bir zorluk yaşanmamaktadır. İki fonksiyon kullandık: Array() ve ConnectRows().

İkincisi hakkında birkaç söz. Dizinin tanımlayıcısını, değerlerini veya değerini gösteren ilk parametreye ek olarak, iki tane daha ayarlanabilir:

  1. Öğe Ayırıcı – hangi karakterin bir dizi öğesini veya değer tablosunun bir satırını diğerinden ayıracağını belirtir (bizim durumumuzda bu parametreyi atladık ve varsayılan olarak bir satır sonu atandı);
  2. Sütun Ayırıcı – bir değerler tablosunun sütunlarını ayırmak için kullanılan bir karakter (varsayılan olarak noktalı virgül kullanılır).

Ortak bir modülün dışa aktarma işlevlerine erişme

Ortak bir modülün işlevleri, hesaplanan bir alanı doldurmak için veri kaynağı görevi görebilir.

Birkaç önemli nokta:

  • İşlev dışa aktarılabilir olmalıdır;
  • Bir fonksiyon “Global” öznitelik seti ile ortak bir modülde yer alıyorsa doğrudan adıyla çağrılır, aksi halde fonksiyonun “Paylaşılan modül adı” şemasına göre çağrılması gerekir. "Çağrılacak işlevin adı."

Kullanım örneği olarak aynı talebi alındı ​​belgeleri için alıp ayrı bir sütunda göstereceğiz. İsteğin kendisini açıklamayacağız; doğrudan hesaplanan alanlara geçelim:


Böylece, hemen hemen her veri işlemcisinin erişim kontrol sisteminden başlatılabildiğini görüyoruz, bu da şemanın kullanım olanaklarını önemli ölçüde genişletiyor.

Düzen dili ifadeleri

Çoğu zaman, bir geliştiricinin çalışmasında, ACS alanında bölme sonucunun görüntülenmesi gerektiğinde bir durum ortaya çıkar:

  1. Öğenin ortalama maliyetini hesaplayın;
  2. Her türlü ilgi;
  3. Ortalama kazanç hesaplamaları vb.

Sorunları önlemek için, bu durumlarda hesaplanan alana 0'a bölme testinin girilmesi tavsiye edilir.

Bu, “Seçim Ne Zaman….Sonra… Aksi takdirde…Son” yapısı kullanılarak yapılabilir.

Son olarak oldukça yeni olan CalculateExpression() fonksiyonu hakkında birkaç söz söyleyeceğim. Onun yardımıyla, özellikle mevcut ve önceki satırlar arasındaki maliyet sapmalarını, kümülatif bakiyeyi vb. hesaplayabilirsiniz.

Diyelim ki "İfade" alanına Hesapla İfadesi ("Belge Tutarı", "Önceki Tutar") değerini belirterek talebimizin bir önceki satırından Belge Tutarını alabildiğinizi varsayalım.

  • 1C-Bitrix
  • İş 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.