Ortak modüller oluşturma kuralları. Genel modüller 1C Enterprise'daki modüller

Platform modülleri 1C:Enterprise 8.3, 8.2

Ortak modüller

Böyle bir modülde "dışa aktarma" bayrağıyla bildirilen işlevler, yapılandırmanın herhangi bir yerinden çağrılabilir. Çağrı CommonModuleName.FunctionName() aracılığıyla yapılır.

Bu tür modüllerin değişken bölümü yoktur.

Ortak modüllerin yürütülmesi, özelliklerindeki ayarlara bağlıdır:

"Küresel" ile ilgili bayrak

Bu bayrak ayarlanırsa böyle bir modülün içeriği global hale gelir. Yani, dışa aktarma işlevlerine erişirken modül adını belirtmenize gerek yoktur. Ancak dışa aktarma işlevlerinin adlarının genel yapılandırma bağlamında benzersiz olması gerekir.

Sunucu bayrağı

Böyle bir modülün işlevleri sunucuda yürütülebilir.

"İstemci (normal uygulama)" bayrağı

Böyle bir modülün işlevleri istemcide normal uygulama modunda yürütülebilir.

"İstemci (yönetilen uygulama)" bayrağı

Böyle bir modülün işlevleri istemci üzerinde yönetilen uygulama modunda yürütülebilir.

"Sunucu Çağrısı" bayrağı

Bayrak, "Sunucu" bayrağı ayarlanmış modüller için mevcuttur. İstemcinin bu modülün (sunucuda yürütülecek) dışa aktarma işlevlerini çağırmasına izin verir.

Harici Katılma bayrağı

Böyle bir modülün dışa aktarma işlevleri, harici bir kaynaktan bağlanırken çağrılabilir.

"Ayrıcalıklı" ile ilgili bayrak

Bu bayrağa sahip bir modülde hak kontrolü devre dışı bırakılacaktır. Verimlilik veya idari faaliyetler için uygundur.

Yeniden kullanma seçeneği

Bu seçeneği etkinleştirirseniz, dışa aktarma işlevlerinin dönüş değerleri ilk çağrının hemen ardından önbelleğe alınacaktır. Önbelleğe alma, çağrı süresince (belirli bir prosedürün yürütülme süresi) veya kullanıcı oturumu süresince mümkündür.

Uygulama modülü

Uygulama başlatma ve sonlandırma olaylarını yönetmek için tasarlanmıştır. İki türü vardır: normal ve yönetilen uygulamalar için.

Uygulama başlatma süresini etkileyeceği için aşırı yüklememelisiniz.

Oturum modülü

Oturum parametrelerini başlatmak için kullanılan özel bir modül. Çeşitli uygulama modüllerinde kodun kopyalanmaması için gereklidir.

Modül birkaç kez çalıştırılabildiğinden ve veritabanını daha fazla başlatmadan da çalıştırılabildiğinden dikkatli kullanılmalıdır. Uygulama modüllerinden önce yürütülür.

Saygılarımla (öğretmen ve geliştirici).

Yazılım modülleri, görsel geliştirme araçları yeterli olmadığında sistemin veya kullanıcının eylemlerine belirli bir şekilde yanıt vermek için gerekli olan 1C dilinde çalıştırılabilir kod içerir. Yazılım modüllerinde kendi yöntemlerimizi (prosedürler ve işlevler) de tanımlayabiliriz.

Tipik olarak bir yazılım modülü üç bölümden oluşur:

  • değişken bildirim alanı;
  • prosedür ve fonksiyonların açıklama alanı;
  • programın ana metni.

Bir program modülü yapısına örnek:

//**************** DEĞİŞKEN BİLDİRİM ALANI **********************

Perem Soyadı İhracatı; / /bu global bir değişkendir
Adı Değiştir, Patronimik; //bu bir modül değişkenidir
Perem'in tam adı; //bu da bir modül değişkenidir ve erişilebilir

//modülümüzün herhangi bir prosedüründen ve fonksiyonundan

//**************** PROSEDÜR VE İŞLEVLERİN ALAN TANIMI ****************

Prosedür Prosedür1 ()
Değişken Toplam; / /Sonuç yerel bir değişkendir (prosedür değişkeni)

Toplam = Soyadı + " "+ Ad + " "+ İkinci ad;

Prosedürün Sonu

İşlev İşlev1()

// fonksiyon operatörleri

Return(Soyadı + " "+ Ad);

Son Fonksiyon

//******************** PROGRAM ANA METNİ ***********************

Soyadı = "İvanov";
İsim = "İvan";
Soyad = "İvanoviç";

//******************************************************************************

Belirli bir yazılım modülünde alanlardan herhangi biri eksik olabilir.
Değişken bildirim alanı modül metninin başlangıcından ilk Prosedür veya İşlev ifadesine veya herhangi bir yürütülebilir ifadeye yerleştirilir. Bu bölüm yalnızca Değişken değişken bildirim ifadelerini içerebilir.

Prosedürleri ve işlevleri açıklama alanıİlk Prosedür veya İşlev ifadesinden, prosedür veya işlev tanımının gövdesi dışındaki herhangi bir yürütülebilir ifadeye yerleştirilir.

Ana program metin alanı prosedürler veya işlevler gövdesi dışındaki ilk yürütülebilir ifadeden modülün sonuna kadar yerleştirilir. Bu bölüm yalnızca çalıştırılabilir ifadeler içerebilir. Ana program metin alanı, modülün başlatılması anında yürütülür. Genellikle, ana programın bir bölümünde, modülün prosedürlerine veya işlevlerine ilk çağrıdan önce atanması gereken belirli değerlerle değişkenleri başlatmak için operatörleri yerleştirmek mantıklıdır.

Yazılım modülleri, konfigürasyonda belirli işletim algoritmalarının açıklamasını gerektirebilecek yerlerde bulunur. Bu algoritmalar, önceden belirlenmiş durumlarda (örneğin, bir dizin formunu açarken, bir iletişim kutusunda bir düğmeye basarken, bir nesneyi değiştirirken vb.) sistemin kendisi tarafından çağrılacak prosedürler veya işlevler biçiminde resmileştirilmelidir. .

Her bir yazılım modülü sistem tarafından tek bir bütün olarak algılanır, böylece yazılım modülünün tüm işlem ve fonksiyonları tek bir bağlamda gerçekleştirilir.

Modül yürütme bağlamı istemci ve sunucuya bölünmüştür. Ayrıca bazı yazılım modülleri hem istemci tarafında hem de sunucu tarafında derlenebilmektedir.

Uygulama modülü (yönetilen veya normal)

Uygulama modülü, sistemin başında ve sonunda başlatılan olayların prosedürlerini (işleyicilerini) açıklar. Örneğin uygulama çalışmaya başladığında bazı konfigürasyon verilerini güncelleyebilir ve uygulamadan çıktığınızda programdan çıkmaya değip değmeyeceğini sorabilirsiniz. Ayrıca bu modül, ticari veya mali gibi harici ekipmanlardan gelen olayları da yakalar. Uygulama modülünün yalnızca uygulama etkileşimli olarak başlatıldığında, yani program penceresi başlatıldığında yürütüldüğünü belirtmekte fayda var. Uygulama com bağlantı modunda başlatıldığında bu durum gerçekleşmez.
1C 8 platformunda iki farklı uygulama modülü bulunmaktadır. Bunlar Düzenli Uygulama modülü ve Yönetilen Uygulama modülüdür. Farklı istemciler başlatıldığında tetiklenirler. Böylece Yönetilen Uygulama modülü, web istemcisi, ince istemci ve kalın istemci yönetilen uygulama modunda başlatıldığında tetiklenir. Kalın istemci normal uygulama modunda başlatıldığında normal uygulama modülü tetiklenir. Uygulama başlatma modu ayarı "Temel başlatma modu" yapılandırma özelliğinde belirtilir.

Bir uygulama modülü, programın ana metninin yanı sıra değişkenlerin bildirimleri, prosedür ve işlevlerin açıklamaları olmak üzere 3 bölümün tamamını içerebilir. Uygulama modülü istemci tarafında derlenir ve bu da birçok veri türünü kullanımımızı büyük ölçüde sınırlar. Uygulama modülü bağlamını, "Sunucu Çağrısı" özelliği ayarlanmış ortak modüllerin yöntemlerini kullanarak genişletebilirsiniz. Dışa aktarma olarak işaretlenen tüm uygulama modülü değişkenleri ve yöntemleri, istemci tarafında çalışan herhangi bir yapılandırma modülünde mevcut olacaktır. Ancak ne kadar cazip gelse de buraya çok sayıda prosedür ve işlevi yerleştirmemelisiniz. Belirli bir modülde ne kadar çok kod varsa, derleme süresi o kadar uzun olur ve dolayısıyla uygulamanın başlama süresi de o kadar uzun olur.

Yukarıda belirtildiği gibi uygulama modülü, uygulamanın başlatılması ve sonlandırılması olaylarını yönetir. Uygulama modülünde bu olayların her birini işlemek için, bir çift işleyici vardır Önce... ve Ne zaman... Aralarındaki farklar aşağıdaki gibidir: Önce... işleyicisinde kod yürütülürken, eylem henüz gerçekleşmemiştir. gerçekleşti ve biz bunu yürütmeyi reddedebiliriz. Reddet seçeneği bunun içindir. On.. işleyicilerinde eylem zaten gerçekleşmiştir ve uygulamayı başlatmayı veya uygulamadan çıkmayı reddedemeyiz.

Harici bağlantı modülü

  • 3 alanın tamamını içerebilir
  • konfigürasyonun kök bölümünde bulunur

Modülün amacı uygulama modülünün amacına benzer. Uygulamanın başlangıç ​​ve bitiş olaylarını işler. Uygulama com bağlantı modunda başlatıldığında harici bağlantı modülü tetiklenir. Dış birleştirme işleminin kendisi etkileşimli bir işlem değildir. Bu modda, bilgi tabanı ile programlı çalışma gerçekleşir ve uygulama penceresi açılmaz, bu da etkileşimli çalışmaya yönelik yöntemlerin kullanımına belirli kısıtlamalar getirir. Bu modda diyalog formlarına çağrı, kullanıcıya yönelik uyarı ve mesajlar vb. kullanılamaz. Kesinlikle idam edilmeyecekler.

Uygulama modülünde olduğu gibi burada da üç alanın tümü mevcuttur: değişken bildirimleri, prosedür ve işlevlerin açıklamaları ve programın ana metni. Uygulama modülünden temel farkı, com-bağlantı modunda bilgi tabanı ile yapılan tüm çalışmaların sunucu tarafında gerçekleşmesi, dolayısıyla harici bağlantı modülünün sunucu tarafında derlenmesidir. Buna göre, ortak istemci modüllerinin dışa aktarma değişkenleri ve yöntemleri mevcut değildir.

Oturum modülü

  • sunucu tarafında çalışır
  • konfigürasyonun kök bölümünde bulunur

Bu, yalnızca oturum parametrelerini başlatmak için tasarlanmış son derece uzmanlaşmış bir modüldür. Bunun için neden kendi modülünüzü oluşturmanız gerekti? Kullanımı, uygulamanın kendisinin farklı modlarda başlatılabilmesi (yönetilen uygulama modülünün, normal uygulama modülünün veya harici bağlantı modülünün yürütülmesiyle sonuçlanır) ve oturum parametrelerinin başlatılmasının ne olursa olsun yapılması gerektiği gerçeğinden kaynaklanmaktadır. başlatma modunu seçin. Bu modüllerin üçünde de aynı program kodunu yazmamak için uygulama başlatma modundan bağımsız olarak çalışan ek bir modüle ihtiyaç duyduk.

Oturum modülünde, uygulama modülü olayı BeforeSystemStartOperation'dan önce bile ilk olarak yürütülen tek bir "SettingSessionParameters" olayı vardır. Değişken bildirimi bölümü ve ana program bölümü mevcut değildir. Ayrıca dışa aktarma yöntemlerini de bildiremezsiniz. Modül sunucu tarafında derlenir.

Ortak modüller

  • prosedürleri ve işlevleri açıklayan bir alan içerebilir
  • sunucu veya istemci tarafında yürütülür (modül ayarlarına bağlı olarak)
  • “Genel” - “Genel modüller” yapılandırma nesnelerinin ağaç dalında bulunur

Ortak modüller, diğer yapılandırma modüllerinden çağrılacak bazı ortak algoritmaları tanımlamayı amaçlamaktadır. Genel modül değişken bildirim alanlarını ve ana program metnini içermez. Kullanılabilirliği modül ayarları tarafından belirlenecek olan dışa aktarma yöntemlerini burada bildirebilirsiniz (hangi tarafta yürütülür: sunucu veya istemci tarafında). Değişken açıklama bölümü bulunmadığından dolayı ortak modüllerde global değişkenler tanımlanamamaktadır. Bunun için bir uygulama modülü kullanabilirsiniz.

Ortak bir modülün davranışı ayarlanan parametrelere bağlıdır (genel veya değil, çeşitli derleme işaretleri, bir sunucu çağrısının mevcut olup olmadığı vb.). Ortak modüllerin kurulumuna ilişkin bazı ipuçları:

Global bayrağı her yerde kullanmamak iyi bir uygulamadır. Bu, uygulamanın başlama süresini kısaltacak ve aynı zamanda kodun okunabilirliğini artıracaktır (tabii ki ortak modülün tamamen anlamlı bir adı varsa);
- Birden fazla derleme bayrağının kullanılması tavsiye edilmez. Farklı bağlamlarda yürütülmesi gereken çok fazla yöntem yoktur ve eğer bu tür yöntemlere hala ihtiyaç duyuluyorsa, bunlar için ayrı bir ortak modül tahsis edilebilir;
- “Sunucuyu ara” bayrağı yalnızca modül “Sunucuda” derlenmişse anlamlıdır. Bu nedenle çeşitli sorunlardan kaçınmak için diğer tüm derleme bayraklarının kaldırılması gerekir;
- Modül yöntemleri büyük miktarda veri işlemeyi, veritabanına okuma ve yazmayı içeriyorsa, o zaman iş hızını artırmak için "Ayrıcalıklı" bayrağını ayarlayarak erişim kontrolünü devre dışı bırakmak daha iyidir. Bu mod yalnızca sunucuda derlenen paylaşılan modüller için kullanılabilir.

Form modülü

  • 3 alanın tamamını içerebilir
  • sunucu ve istemci tarafında yürütülür

Form modülü, bu formdaki kullanıcı eylemlerini (düğmeye tıklama olayını işlemek, form niteliklerini değiştirmek vb.) işlemek için tasarlanmıştır. Doğrudan formun kendisiyle ilişkili olaylar da vardır (örneğin, açılması veya kapanması). Yönetilen ve normal formların modülleri, her şeyden önce, yönetilen bir formun modülünün açıkça bağlama bölünmesi açısından farklılık gösterir. Her prosedür veya işlevin bir derleme yönergesi olması gerekir. Derleme yönergesi belirtilmemişse bu prosedür veya işlev sunucu tarafında yürütülür. Normal haliyle tüm kodlar istemci tarafında yürütülür.

Yönetilen bir formun yapısı, değişkenlerin bildirimleri, prosedür ve işlevlerin açıklamaları ve programın ana metni (formun başlatıldığı sırada yürütülen) için bir bölüm içerir. Formun beklenen prosedürleri ve işlevleri listesinden standart form olaylarına erişebiliriz. (Ctrl+Alt+P) veya formun özellikler paleti aracılığıyla.

Bir forma atanmış bir ana öznitelik varsa, ana öznitelik olarak kullanılan uygulama nesnesinin özellikleri ve yöntemleri form modülünde kullanılabilir hale gelir.

Nesne modülü

  • 3 alanın tamamını içerebilir
  • sunucu tarafında çalışır

Bu modül çoğu yapılandırma nesnesi için mevcuttur ve genellikle nesneyle doğrudan ilgili olayların işlenmesi için tasarlanmıştır. Örneğin, nesnelerin kaydedilmesi ve silinmesi, nesne ayrıntılarının tamamlanıp tamamlanmadığının kontrol edilmesi, bir belgenin yayınlanması vb. olaylar.

Bazı nesne modülü olayları, form modülü olaylarını kopyalar. Örneğin bir kayıtla ilişkili olaylar. Bununla birlikte, form modülünün olaylarının yalnızca nesnenin spesifik formunda, yani spesifik form açıldığında yürütüleceği anlaşılmalıdır. Ve nesne modülünün olayları, nesneyle programlı çalışma anında bile her durumda çağrılacaktır. Bu nedenle, nesnenin belirli bir biçimine bağlı kalmadan bir nesneyle ilişkili yöntemlere ihtiyacınız varsa, bunun için nesne modülünü kullanmak daha iyidir.

Nesne yöneticisi modülü

  • 3 alanın tamamını içerebilir
  • sunucu tarafında çalışır

Nesne yöneticisi modülü yalnızca 1C 8.2 sürümünden itibaren ortaya çıktı. Yönetici modülü tüm uygulama nesneleri için mevcuttur ve bu nesneyi bir yapılandırma nesnesi olarak yönetmek için tasarlanmıştır. Yönetici modülü, bir veritabanı nesnesinin belirli bir örneğiyle değil, yapılandırma nesnesinin kendisiyle ilgili prosedürler ve işlevler ekleyerek (yazarak) bir nesnenin işlevselliğini genişletmenize olanak tanır. Nesne yöneticisi modülü, belirli bir nesne için genel prosedürler ve işlevler yerleştirmenize ve bunlara dışarıdan, örneğin işleme yoluyla erişmenize olanak tanır (tabii ki, bu prosedür veya işlev, Dışa Aktarma anahtar sözcüğüne sahipse). Bu bize ne gibi yeni şeyler katıyor? Genel olarak, prosedürleri nesnelere göre düzenlemek ve bunları ayrı yerlerde - Nesne Yöneticisi Modülleri - depolamak dışında hiçbir şey yoktur. Bu prosedürleri ve işlevleri genel modüllere de başarılı bir şekilde yerleştirebiliriz, ancak 1C, nesnelerin genel prosedürlerini ve işlevlerini Nesne Yöneticisi Modülüne yerleştirmenizi önerir. Nesne Yöneticileri Modülünün prosedürlerini ve işlevlerini kullanma örnekleri: belirli koşullar altında bir dizinin veya belgenin bireysel ayrıntılarının ilk doldurulması, belirli koşullar altında bir dizinin veya belgenin ayrıntılarının tamamlandığının kontrol edilmesi, vb.

Komut modülü

  • prosedürleri ve işlevleri açıklayan bir bölüm içerebilir
  • istemci tarafında yürütülür

Komutlar, uygulama nesnelerine veya bir bütün olarak konfigürasyona bağlı nesnelerdir. Her komutun, bu komutu yürütmek için önceden tanımlanmış bir CommandProcess() prosedürünün tanımlanabileceği bir komut modülü vardır.


Yönetilen Uygulama Modülü

Esas olarak uygulamanın başladığı ve kapandığı anı yakalamak için tasarlanmıştır. Burada ayrıca ekipmandan harici bir olayı yakalamanıza izin veren işleyiciler de vardır. Yönetilen uygulama modülünde izlenen, sistemin etkileşimli başlatılmasıdır.

Yönetilen uygulama modülü olayları, yönetilen uygulamanın ince istemcisi, web istemcisi ve kalın istemcisi başlatıldığında tetiklenir. Kontrol modülünde uygulamalara kök yapılandırma düğümünün özellikler paletinden veya kök yapılandırma düğümünde çağrılan içerik menüsünden erişilebilir.

Düzenli Başvuru Modülü

Normal uygulama modülü, yönetilen uygulama modülüyle aynı rolü oynar; normal uygulamanın kalın istemcisi başlatıldığında yalnızca normal uygulama modülünün olayları tetiklenir.

Normal uygulama modülü, "Genel" sekmesindeki yapılandırıcı parametrelerindeki "Başlatma modları için yapılandırmayı düzenle" seçeneğini "Yönetilen uygulama ve normal" olarak ayarladıktan sonra kök yapılandırma düğümünün özellikler paletinden kullanılabilir hale gelecektir.

Harici bağlantı modülü

Harici bağlantı modülü, oturum açma olayını (etkileşimli değil, COM bağlantı modunda) ve oturumu kapatmayı yönetmek üzere tasarlanmıştır. İlgili işleyiciler var. COM bağlantısıyla etkileşimli bir pencere açılmaz, dolayısıyla kullanıcıyla diyalog işlevleri çalışmaz. Modülde dışa aktarma değişkenlerini ve yöntemlerini tanımlamak mümkündür. Harici bağlantı modülü sunucuda derlenir. Onlar. dizinler gibi ilgili yapılandırma nesnelerine erişmek mümkündür.

Oturum modülü

“Oturum Parametreleri” diye genel bir yapılandırma nesnesi vardır. Oturum modülü, oturum parametrelerini başlatmak için oluşturulur (bunun için özel bir olay vardır; uygulama başladığında ilk önce kendisi başlar).

Ayrıcalıklı modda çalışır (veritabanına erişilirken erişim hakları kontrol edilmez). Oturum modülü sunucuda derlenir. Değişkenleri açıklayan bir bölüm ve ana program için bir bölüm yoktur, dışa aktarma yöntemleri tanımlanamaz, yalnızca oturum parametrelerini ayarlamak için kullanılır. Gördüğünüz gibi oturum modülünün çok dar bir amacı var.

Ortak modüller

Ortak modüller bazı ortak algoritmaları tanımlar ve çeşitli yerlerden çağrılabilecek işlevleri içerir. Ortak modüller hem istemcide hem de sunucuda derlenebilir.

Genel modüllerde YALNIZCA prosedürleri ve fonksiyonları açıklayan bölüm mevcuttur. Genel bir değişken kullanmanız gerekiyorsa, oturum parametrelerini veya yönetilen uygulama modülünün dışa aktarma değişkenini kullanabilirsiniz.

Genel modülde davranışını etkileyecek bazı parametreleri ayarlayabilirsiniz. Genel modülde “Global” onay kutusu işaretlenirse, dışa aktarma işlevleri küresel bağlamın oluşumuna katılacaktır. Ve bunlara doğrudan başka bir bağlamdan erişilebilir (ortak modülün adını belirtmeden): CommonModuleMethod();

Ortak modüllerin “Global” özelliğini her yerde kullanmamalısınız çünkü bu tür modüller sistem başlangıcında derlenir ve programın başlatılmasını yavaşlatır

Nesne modülü

Birçok yapılandırma nesnesinin (dizinler, belgeler vb.) bir nesne modülü vardır. Yeni bir dizin öğesi oluşturma, yeni bir nesneyi kaydetme, silme, bir belge gönderimini işleme koyma vb. gibi standart olayları buna girebilirsiniz. Kayıt olayı hem form modülünde (etkileşimli kayıt işlemi sırasında kullanıcı "kaydet" düğmesine tıkladığında gerçekleşir) hem de nesne modülünde bulunur.

Bir nesnenin birden fazla forma sahip olabileceği unutulmamalıdır. Bu nedenle kayıt olayının nesne modülünde işlenmesi gerekir. Kaydedilen verilerin doğruluğunun kontrol edildiği yer burasıdır.

Bir nesne modülü, belirli bir nesnenin özellikler paletinden veya içerik menüsünden çağrılabilir. Nesne modülünün yapısı form modülünden farklı değildir. Nesne modülü sunucuda derlendiğinden herhangi bir derleme yönergesine gerek yoktur.

Form modülü

Form modülü, kullanıcı eylemlerini (düğmeye tıklama olayını işleme vb.) işlemek için tasarlanmıştır. Doğrudan formun kendisiyle ilişkili olaylar da vardır (örneğin, açılması, kapanması olayı). Yönetilen ve normal form modülleri, öncelikle yönetilen form modülünün bağlama göre net bir şekilde ayrılması bakımından farklılık gösterir. Her prosedürün bir derleme yönergesi olması gerekir. Normal biçimde, tüm kod istemcide yürütülür.

Yönetilen bir formun yapısı, değişkenleri açıklayan bir bölüm, prosedürler ve işlevler için bir bölüm ve ana program için bir bölüm (form başlatıldığında çalıştırılır) içerir. Standart form olaylarına prosedürler ve işlevler listesinden (Ctrl+Alt+P) veya formun özellikler paletinden erişebiliriz. Öğe kaydetme olayını yönetilen bir biçimde de işleyebilirsiniz (bu olay yalnızca nesneler için mevcuttur: dizinler, belgeler).

Nesne yöneticisi modülü

Yönetici modülü yalnızca 1C 8.2'de göründü; birçok yapılandırma nesnesinde mevcuttur. Nesne yöneticisi modülünün temel amacı, "Seçim Verilerinin Alınması İşleme" standart olayını geçersiz kılmaktır ve bu olayda ayrıca şunları da yapabiliriz:

Değer yöneticisi modülü

Sabit konfigürasyon nesnesinin bir nesne modülü yoktur, ancak çok benzer bir modül vardır - değer yöneticisi modülü. Sabit değer yöneticisi modülünde, çeşitli prosedürleri (dışa aktarma işlemleri dahil) tanımlayabilir ve 3 olayı işleyebilirsiniz: BeforeWrite, OnWrite, ProcessingFillCheck. Bu modül sunucuda derlenmiştir.

Kayıt kümesi modülleri

Kayıt kümesi modülü nesne modülüne benzer ve kayıtların doğasında bulunur. Kayıt kümesi modülünde standart olaylar vardır:

  • Kayıttan önce
  • Kayıt yaparken
  • Dolgu kontrolü işleniyor

Kayıt kümesi modülünde değişkenlerin, prosedürlerin ve işlevlerin (dışa aktarma dahil) açıklamaları için bir bölüm, ana program için bir bölüm vardır.

Hemen hemen tüm konfigürasyon nesnelerinin bir yönetici modülü vardır ve çoğu nesne için de bir nesne modülü vardır. Çoğu zaman acemi programcılar bu iki modülün amacındaki farklılıkları anlamazlar.

Amaçlarındaki farkı anlamak, yapı olarak daha doğru program kodu yazmanıza ve bazı durumlarda 1C sunucu kaynaklarından tasarruf etmenize ve uygulama çözümünün performansını artırmanıza olanak tanır.

Makalede bu modüller arasındaki temel farklara hem teorik açıdan hem de belirli bir pratik örnek kullanarak bakacağız.

Teori

Nesne yönelimli programlamanın (OOP) temellerine dönelim ve örneğimizle bir benzetme yapalım. OOP'ta nesnelere yönelik yöntemler şu şekilde ayrılabilir: statik ve basit. Basit yöntemler yalnızca geçerli kod bağlamında erişebildiğimiz belirli bir nesne üzerinde çağrılabilir. Statik yöntemlerin nesne verilerine doğrudan erişimi yoktur. Bir nesneye erişmek için öncelikle onun bir örneğini oluşturmanız gerekir. Aynı durum 1C:Enterprise 8.x platformu için de geçerlidir.

Nesne modülünde platform, yalnızca belirli bir nesneyle, örneğin "Adlandırma" dizin öğesinin nesnesiyle çalışırken çağrılabilecek prosedürleri ve işlevleri saklar. Yönetici modülü, belirli bir türdeki tüm nesnelere uygulanabilecek, ancak bu nesnenin bir örneğinin başlangıçta oluşturulmasıyla uygulanabilecek prosedürler ve işlevler içerir. Yani, bu modüldeki bir terminoloji öğesini değiştirmek için, önce öğeye referans vermek amacıyla "GetObject()" yöntemini yürütün ve ardından onunla çalışın.

Teoriden pratiğe geçelim.

Pratik

Pratik bir örneğe geçelim. Bir ürün listesi yazdırma problemini çözmemiz gerektiğini varsayalım: Kullanıcı, bir ürünü doğrudan bir dizin öğesinden veya ürün listesi formundan yazdırır. Görevi tamamlamanın iki yolunu düşünelim.

Nesne modülünde yazdırma prosedürü

Dizin nesnesi modülüne aşağıdaki işlevi ekleyin:

// Fonksiyona bir dizin elemanına referans iletinİşlev PrintSelectedProducts(Link) Dışa Aktar TabDoc = Yeni TabularDocument; Düzen = Dizinler. Mal. GetLayout("Yerleşim"); Talep = Yeni Talep; Rica etmek. Metin = " SEÇ | Ürünler . Ürün AS Sunumu,| Mal . Silmeyi İşaretle,| Mal . satıcı kodu |İTİBAREN| Rehber . Ürünler AS Ürünler|NEREDE | Mal . Bağlantı B(&Ürün Dizisi)" ; request.SetParameter(" Ürün Dizisi ", Bağlantı); //Bağlantıya göre seç

Program kodu tamamen baskı tasarımcısı tarafından oluşturulur. Dikkate değer tek şey, istekteki "Ürünler" dizin öğesine referansla görüntülenmesidir. Referans, fonksiyona parametre olarak iletilir. "PrintSelectedProducts" işlevinin çağrılması sonucunda, tamamlanmış ürün konumunu içeren bir elektronik tablo belgesi döndürülecektir.

"Yazdır" form komutunu kullanarak "PrintSelectedProducts" nesne yöntemini çağırmaya yönelik program kodu aşağıdaki listede sunulmaktadır:

&OnClient Prosedürü Yazdır(Komut) // Oluşturulan elektronik tablo belgesini almak için sunucu prosedürüne başvurun TabDoc = YazdırmaSunucusu(); // Oluşturulan elektronik tablo belgesini göster TabDoc. Göstermek() ; EndProcedure ve OnServer İşlevi PrintServer() // Nesne modülünden bir işlev çağırmak için form nesnesini "Ürünler" dizin nesnesine dönüştürün ObjectItem = FormAttributeValue("Object" ) ; // Geçerli dizin öğesine bir bağlantı ileterek nesne modülü prosedürünü çağırın. Sonuç //istemci tarafına geri dönelim ObjectProduct'ı döndürün. PrintSelectedProducts(Object.Link) ; Son Fonksiyon

Böylece mevcut dizin elemanını nesnesi ile çalışarak yazdırdık. Ancak görev, kullanıcının kendisinin seçmesi gereken ürünlerin bir listesini yazdırmaktı. Bir nesneyle çalışırken kullanıcıya böyle bir fırsatı basit bir şekilde vermek mümkün değildir. En doğru yol, “Ürünler” dizinindeki öğeler listesinden yazdırmak olacaktır.

Yönetici modülünde yazdırma prosedürü

Dizin yöneticisi modülüne aşağıdaki dışa aktarma prosedürünü ekleyelim:

// Ürünlere bir dizi bağlantı iletinİşlev PrintSelectedProducts(ArrayProducts) Dışa Aktar TabDoc = Yeni TabularDocument; Düzen = Dizinler. Mal. GetLayout("Yerleşim"); Talep = Yeni Talep; Rica etmek. Metin = " SEÇ | Ürünler . Ürün AS Sunumu,| Mal . Silmeyi İşaretle,| Mal . satıcı kodu |İTİBAREN| Rehber . Ürünler AS Ürünler|NEREDE | Mal . Bağlantı B(&Ürün Dizisi)" ; request.SetParameter(" Ürün Dizisi ", Ürün Dizisi) ; // Seçimi diziye göre ayarla Sonuç = Talep. Koşmak(); HeaderArea = Düzen. GetArea("Başlık"); AreaFooter = Düzen. GetArea(" Bodrum "); TableHeadArea = Düzen. GetArea("Tablo Başlığı"); TableFooterArea = Düzen. GetArea("TableFooter"); DetailRecordsArea = Düzen . GetArea("Ayrıntılar"); TabDoc. Temizlemek() ; TabDoc. Çıktı(AreaTitle) ; TabDoc. Çıktı(TableHeadArea); TabDoc. StartAutoGroupingRows() ; SelectionDetailRecords = Sonuç. Seçmek() ; SelectionDetailedRecords sırasında. Sonraki() LoopDetailRecordArea. Seçenekler. Fill(SelectionDetailRecords) ; TabDoc. Output(DetailedRecordsArea, Ayrıntılı KayıtlarSelection.Level()) ; EndCycle; TabDoc. FinishAutoGroupingRows() ; TabDoc. Çıktı(TableFooterArea); TabDoc. Output(AreaFootground) ; TabDoc'u döndür; Son Fonksiyon

Bir nesne modülündeki bir fonksiyondan temel fark, fonksiyon parametresidir. Artık yazdırılması gereken ürünlere bağlantıların bulunduğu bir dizi parametre olarak iletilir.

“Yazdır” form komut modülünün program kodu şuna benzer:

& İstemci Prosedüründe Print(Command) TabDoc = PrintServer() ; TabDoc. Göstermek() ; EndProcedure ve OnServer İşlevi PrintServer() // Dizin listesinde seçilen ürünlerin bağlantılarının bir dizisini iletin // yönetici modülü fonksiyonuna "PrintSelectedProducts" Dönüş Dizinleri. Mal. PrintSelectedItems(Items.List.SelectedRows) ; Son Fonksiyon

Bu durumda, komutun 1C:Enterprise modunda yürütülmesinin sonucu aşağıdaki gibi olacaktır:

Manager modülündeki yöntemi kullanırsak her bağlantı için bir nesne almadan “Ürünler” dizinindeki verilere ulaşabiliriz. Bir nesneyi almak, bir dizin elemanına ait tüm verileri veri tabanından almak ve alınan verileri RAM'e yerleştirmek anlamına geldiğinden, görevin ikinci şekilde uygulanması performansa olumlu etki sağlayacaktır. Sonuçta, bu durumda sunucu makinesinin minimum kaynağını (RAM) kullanacağız.

Ne kullanmalı?

Her zaman olduğu gibi, her şey belirli göreve bağlıdır. Bir belge yazdırmanız gerekiyorsa en iyi seçenek yönetici modülünü kullanmaktır. Bir nesneyi, örneğin tablo halindeki kısımların doldurulmasının harici işlenmesiyle doldurmanız gerekiyorsa, bu durumda, özellikle nesneyle çalıştıkları için prosedürleri ve işlevleri nesne modülüne yerleştirmek daha iyidir.

"Ticaret Yönetimi" versiyon 11'in standart konfigürasyonunda, yönetici modülü belgelerin yazdırılması için her yerde kullanılır. “Üretim İşletme Yönetimi” konfigürasyonuna bakarsanız, konfigürasyon, bu mekanizma için tam desteğin bulunmadığı platformun eski sürümlerinde yazıldığı için yönetici modülü pratikte kullanılmaz.

Makaledeki örneklerle yapılandırma.

Modüller nedir ve tam olarak ne için tasarlanmıştır? Modül program kodunu içerir. Ayrıca, kodun form öğelerinin özelliklerinde ve düzen tablolarının hücrelerinde bulunabildiği 7.7 platformundan farklı olarak, 8.x platformunda herhangi bir kod satırının bazı modüllerde bulunması gerektiğini belirtmekte fayda var. . Tipik olarak bir modül üç bölümden oluşur; değişkenleri açıklayan bir bölüm, prosedürleri ve işlevleri açıklayan bir bölüm ve ana programa yönelik bir bölüm. Bu yapı, bazı istisnalar dışında hemen hemen tüm platform modülleri için tipiktir. Bazı modüllerin değişken açıklama bölümü veya ana program bölümü yoktur. Örneğin, Oturum Modülü ve herhangi bir Genel Modül.

Modüllerin yürütme bağlamı genellikle istemci ve sunucuya bölünmüştür. Ayrıca bazı modüller hem istemci tarafında hem de sunucu tarafında derlenebilmektedir. Bazıları ise yalnızca sunucu tarafında veya istemci tarafındadır. Bu yüzden:

Uygulama modülü

Modül, uygulamanın başlatılması (yapılandırmanın yüklenmesi) ve işleminin sona ermesi anlarını yakalamak için tasarlanmıştır. Ve doğrulama prosedürleri ilgili olaylara yerleştirilebilir. Örneğin, bir uygulamayı başlatırken, bazı referans yapılandırma verilerini güncelleyin ve işi bitirirken, onu bırakmaya değip değmeyeceğini sorun, belki iş günü henüz bitmemiştir. Ayrıca, ticari veya mali gibi harici ekipmanlardan gelen olayları da yakalar. Uygulama modülünün açıklanan olaylara yalnızca etkileşimli olarak başlatıldığında müdahale ettiğini belirtmekte fayda var. Onlar. program penceresinin kendisi oluşturulduğunda. Uygulama com bağlantı modunda başlatıldığında bu durum gerçekleşmez.

8.2 platformunda iki farklı uygulama modülü bulunmaktadır. Bunlar Düzenli Uygulama modülü ve Yönetilen Uygulama modülüdür. Farklı istemciler başlatıldığında tetiklenirler. Web istemcisi, ince istemci ve kalın istemci yönetilen uygulama modunda başlatıldığında, yönetilen uygulama modülü bu şekilde tetiklenir. Kalın istemci normal uygulama modunda başlatıldığında normal uygulama modülü tetiklenir.

Bir uygulama modülü tüm bölümleri (değişkenlerin, prosedürlerin ve fonksiyonların açıklamalarının yanı sıra ana programın açıklamalarını) içerebilir. Uygulama modülü istemci tarafında derlendiğinden bu, birçok veri türünün kullanılabilirliğini büyük ölçüde sınırlıyor. Uygulama modülü bağlamını, "Sunucu Çağrısı" özelliği ayarlanmış ortak modüllerin yöntemlerini kullanarak genişletebilirsiniz. Dışa aktarma olarak işaretlenen tüm değişkenler ve yöntemler, istemci tarafında çalışan herhangi bir yapılandırma modülünde mevcut olacaktır. Ancak, ne kadar cazip gelse de, burada çok sayıda yöntem yayınlamamalısınız. Ne kadar çok kod içerirse, derleme süresi de o kadar uzun olur ve dolayısıyla uygulama başlatma süresi de o kadar uzun olur ki bu da kullanıcılar için oldukça can sıkıcı bir durumdur.

Yukarıda belirtildiği gibi uygulama modülü, uygulamanın başlatılması ve sonlandırılması olaylarını yönetir. Uygulama modülünde bu olayların her birini işlemek için, bir çift işleyici vardır Önce... ve Ne Zaman... Aralarındaki farklar öyledir ki, Önce... işleyicisinde kod çalıştırıldığında, eylem henüz gerçekleşmemiştir. gerçekleşti ve biz bunu yürütmeyi reddedebiliriz. Reddet seçeneği bunun içindir. On.. işleyicilerinde eylem zaten gerçekleşmiştir ve uygulamayı başlatmayı veya uygulamadan çıkmayı reddedemeyiz.

Harici bağlantı modülü

Modülün amacı uygulama modülünün amacına benzer. Uygulamanın başlangıç ​​ve bitiş noktalarını işler. Uygulama com bağlantı modunda başlatıldığında harici bağlantı modülü tetiklenir. Dış birleştirme işleminin kendisi etkileşimli olmayan bir işlemdir. Bu modda, bilgi tabanı ile programlı çalışma gerçekleşir ve uygulama penceresi açılmaz, bu da etkileşimli çalışmaya yönelik yöntemlerin kullanımına belirli kısıtlamalar getirir. Bu modda diyalog formlarına yapılan çağrılar, uyarı mesajları vb. kullanılamaz. Sadece işe yaramayacaklar.

Uygulama modülünde olduğu gibi burada da değişkenleri, yöntemleri açıklayan bölümler ve ana programa yönelik bir bölüm bulunmaktadır. Ayrıca dışa aktarma değişkenlerini ve yöntemlerini de bildirebilirsiniz. Aradaki fark, iletişim bağlantı modunda bilgi tabanıyla yapılan tüm çalışmaların sunucu tarafında gerçekleşmesi, dolayısıyla harici bağlantı modülünün yalnızca sunucuda derlenmesidir. Buna göre, ortak istemci modüllerinin dışa aktarma değişkenleri ve yöntemleri mevcut değildir.

Oturum modülü

Bu son derece uzmanlaşmış bir modüldür ve yalnızca oturum parametrelerini başlatmak için tasarlanmıştır. Bunun için neden kendi modülünüzü oluşturmanız gerekti? Bunun nedeni, başlatma işleminin bazı kodların yürütülmesini gerektirebilmesi ve buna ek olarak uygulamanın farklı istemciler altında başlatılabilmesi (bu, farklı uygulama modüllerinin veya harici bir bağlantı modülünün yürütülmesine yol açar) ve oturum parametreleri herhangi bir başlatma modunda yapılmalıdır. Bu nedenle herhangi bir uygulama başlatma modunda çalışan ek bir modüle ihtiyaç duyuldu.

Oturum modülünde, uygulama modülü olayı BeforeSystemStartOperation'dan önce bile ilk olarak yürütülen tek bir "SettingSessionParameters" olayı vardır. Değişken bildirimi bölümü ve ana program bölümü mevcut değildir. Ayrıca dışa aktarma yöntemlerini de bildiremezsiniz. Modül sunucu tarafında derlenir.

Uygulama her başlatıldığında bu modülün çalıştırılması sizi cezbetmemeli ve içine oturum parametrelerinin başlatılmasıyla doğrudan ilgili olmayan kod yerleştirmemelisiniz. Bunun nedeni SetSessionParameters işleyicisinin sistem çalışması sırasında tekrar tekrar çağrılabilmesidir. Örneğin bu, başlatılmamış parametrelere eriştiğimiz durumlarda olur. Ve bu olayın ilk başlatılma anını yakalamak mümkün olsa da (RequiredParameters, UnDefinition türündedir), bu modülün ayrıcalıklı modda derlendiği, yani. erişim haklarını denetlemez. İkinci nokta ise sistemin devreye gireceğinden hâlâ yüzde yüz emin olamıyoruz. Aniden uygulama modülünde bir arıza meydana geliyor ve veritabanıyla bazı eylemler gerçekleştirmeye çalışıyoruz.

Ortak modüller

Modüller, diğer yapılandırma modüllerinden çağrılacak bazı ortak algoritmaları tanımlamayı amaçlamaktadır. Genel modül değişken açıklama bölümü ve ana program bölümü içermez. Erişilebilirlik bağlamı derleme bayraklarıyla belirlenecek olan dışa aktarma yöntemlerini burada bildirebilirsiniz. Değişken açıklama bölümü bulunmadığından dolayı ortak modüllerde global değişkenler tanımlanamamaktadır. Bunu yapmak için, dönüş değerlerinin önbelleğe alınmasıyla ortak modüllerin veya bir uygulama modülünün işlevlerini kullanmanız gerekir. Paylaşılan modülün yeniden kullanım özelliği "Oturum süresi boyunca" olarak ayarlanmış olsa bile, bu durumda önbelleğe alınan değerlerin ömrünün, son erişim anından itibaren 20 dakikayı geçmediğini akılda tutmakta fayda var. onlara.
Ortak bir modülün davranışı ayarlanan parametrelere bağlıdır (genel veya değil, çeşitli derleme işaretleri, bir sunucu çağrısının mevcut olup olmadığı vb.). Bu yazıda, mülk bayraklarını mantıksız bir şekilde ayarlarken ortaya çıkan her türlü ayarın yanı sıra davranışsal özellikleri ve tuzakları dikkate almayacağız. Bu ayrı bir makalenin konusu. Bayrak koyarken dikkat edilmesi gereken birkaç nokta üzerinde duralım:

  • Genel kural, Global bayrağı her yerde kullanmamaktır. Bu, uygulamanın başlama süresini kısaltacak ve aynı zamanda kodun okunabilirliğini de artıracaktır (tabii ki ortak modülün tamamen anlamlı bir adı varsa).
  • Birden fazla derleme bayrağının kullanılması tavsiye edilmez. Farklı bağlamlarda yürütülmesi gereken çok fazla yöntem yoktur ve eğer bu tür yöntemlere hala ihtiyaç duyuluyorsa, bunlara ayrı bir ortak modül tahsis edilebilir.
  • "Sunucu Çağrısı" bayrağı yalnızca modülün "Sunucuda" derlenmesi durumunda anlamlıdır. Bu nedenle çeşitli sorunlardan kaçınmak için diğer tüm derleme bayraklarının kaldırılması gerekir.
  • Modül yöntemleri büyük miktarda veri işlemeyi, veritabanına okuma ve yazmayı içeriyorsa, o zaman iş hızını artırmak için "Ayrıcalıklı" bayrağını ayarlayarak erişim hakları kontrolünü devre dışı bırakmak daha iyidir. Bu mod yalnızca sunucuda derlenen paylaşılan modüller için kullanılabilir.

Form modülü

Kullanıcı eylemlerini işlemek için tasarlanmıştır; veri girişi ve girişlerinin doğruluğunun işlenmesi ile ilgili çeşitli olaylar. Her zamanki formdaki bir modül tamamen istemcide derlenir. Yönetilen bir form modülü, yürütme bağlamına göre açıkça ayrılmıştır; bu nedenle tüm değişkenlerin ve yöntemlerin bir derleme yönergesi olması gerekir. Yönerge açıkça belirtilmemişse bu değişken veya yöntem sunucu tarafında derlenecektir. Form modülü, değişkenlerin ve yöntemlerin açıklamaları için bölümlerin yanı sıra ana program için bir bölüm içerir.

Nesne modülü

Bu modül birçok yapılandırma nesnesi için tipiktir ve genellikle nesne olaylarını işlemek için tasarlanmıştır. Örneğin, nesnelerin kaydedilmesi ve silinmesine ilişkin olaylar, belgelerin kaydedilmesine ilişkin olaylar vb.

Bazı nesne modülü olayları, form modülü olaylarını kopyalar. Örneğin bir kayıtla ilişkili olaylar. Ancak form modülü olaylarının yalnızca nesnenin belirli formunda yürütüleceğini unutmayın. Genel olarak bu formlardan birkaçı olabilir. Ve nesne modülünün olayları, nesneyle programlı çalışma anında bile her durumda çağrılacaktır. Bu nedenle, her durumda bazı kodları çalıştırmanız gerekiyorsa, bunun için bir nesne modülü olayı kullanmak daha iyidir.

Nesne modülü yalnızca sunucuda derlenir. İçinde, diğer yapılandırma modüllerinde mevcut olacak dışa aktarma değişkenlerini ve yöntemlerini tanımlayabilirsiniz. Bu özellikleri ve yöntemleri kullanarak nesnenin işlevselliğini önemli ölçüde genişletebiliriz.

Nesne yöneticisi modülü

Bu modül birçok yapılandırma nesnesi için mevcuttur. Bu modülün temel amacı, hatta girişte oluşan standart seçim olayını yeniden tanımlamak ve yöneticinin işlevselliğini genişletmektir. Modül sunucu tarafında derlenir. Dışa aktarma özelliklerini ve yöntemlerini tanımlamanıza olanak tanır. Yöneticinin dışa aktarma yöntemlerini çağırmak, nesnenin kendisinin oluşturulmasını gerektirmez.

Yukarıdakilerin tümüne, bazı yapılandırma modüllerinin bir resmini ve yönetilen uygulama modunda yöntemleri karşılıklı olarak çağırmanın yollarını ekleyebilirsiniz. Ok, karşılık gelen yöntemi çağırmak için dönebileceğiniz yönü gösterir. Diyagramdan görülebileceği gibi sunucu bağlamı tamamen kapalıdır. Ancak istemci bağlamından sunucu yöntemlerine erişmek mümkündür.

Diyagramdaki semboller: O.M. İstemci - İstemci ortak modülü; Ö.M. Sunucu - Sunucu paylaşımlı modülü; M.F. Form modülünün Client - Client prosedürleri; M.F. Sunucu - Form modülünün sunucu prosedürleri.