1c gerekli form öğesini yapın. Yönetilen Form Öğelerini Program Aracılığıyla Ekleme ve Değiştirme

1C:Enterprise platformu, yönetilen bir formun öğelerini programlı olarak eklemenize ve değiştirmenize olanak tanır. Buna neden ihtiyaç duyulabileceğini görelim.

Bazı durumlarda formun programatik olarak değiştirilmesi gerekebilir:

  • Sonraki güncelleme prosedürünü kolaylaştırmak için tipik konfigürasyonları sonlandırırken. Bu durumda sadece form modülü değiştirilecektir. Modüllerin güncellenmesi bir formdan çok daha kolaydır.
  • Bazı genel algoritmaları uygularken. Örneğin, alt sisteme bağlı tüm nesneler için "Nesnelerin ayrıntılarının düzenlenmesinin yasaklanması" alt sisteminde, ayrıntıları düzenleme olanağını etkinleştirmek için programlı olarak bir düğme oluşturulur.
  • Bazı özel algoritmaları uygularken. Örneğin, Adlandırma referans kitabında ek ayrıntıları düzenlemeye yönelik alanlar oluşturulur.

Yönetilen bir formda program aracılığıyla aşağıdakileri ekleyebilir, değiştirebilir ve kaldırabilirsiniz:

  • gereksinimler;
  • yerel komutlar;
  • elementler.

Tüm bu işlemler yalnızca sunucuda mümkündür.

Programatik yeniden şekillendirmenin sınırlamaları vardır:

  • Yalnızca program aracılığıyla eklenen nitelikleri/komutları/öğeleri silebilirsiniz. Yapılandırıcıda oluşturulan nesneleri programlı olarak silemezsiniz.
  • Özelliği ana özellik olarak atamak imkansızdır.

Form komutlarını değiştirme

Bir nesneye ilişkin komutların bileşimini yönetmek için YönetilenForm bir koleksiyona sahip olmak Takımlar

    Eklemek (< ИмяКоманды >)

    Miktar ()

    Bulmak (< ИмяКоманды >)

    Silmek (< Команда >)

Komutlar koleksiyonu hem istemcide hem de sunucuda mevcuttur. Koleksiyonun değiştirilmesi (Ekle () ve Kaldır () yöntemleri) yalnızca sunucuda mümkündür. Hem istemcide hem de sunucuda öğe sayısını (Find() ve Quantity() yöntemleri) arayabilir ve alabilirsiniz.

Form komutlarıyla çalışmaya örnek olarak, işleyiciyi çağıracak "Değişiklik Geçmişi ..." başlıklı yeni bir ChangeHistory komutu oluşturalım. Görüntüleme Geçmişi() . Form açıldığında oluşturma işlemi gerçekleştirilir.

&Sunucuda
Prosedür OnCreateOnServer(Arıza, Standart İşleme)
Takım = Komutlar. Eklemek( "Değişimlerin Tarihi");
Takım . Eylem = ;
Takım . Başlık = "Değişikliklerin geçmişi...";
Prosedürü Sonlandır
&İstemcide
Prosedür Connected_DisplayHistory(Komut)
// komut eylemleri
Prosedürü Sonlandır

Komut işleyicisi formda bulunmalı ve &AtClient derleme yönergesine sahip olmalıdır.

Form ayrıntılarını değiştirme

Form niteliklerinin bileşiminin okunması fonksiyon tarafından gerçekleştirilir Ayrıntıları Al(< Путь >) FormAttributes türünün bir dizisini döndürür. Function parametresi ana özniteliğin yolunu (bir dize olarak) belirtir. Parametre atlanırsa veya boş bir dize belirtilirse üst düzey kimlik bilgileri döndürülür.

Ayrıntıların değiştirilmesi yöntemle gerçekleştirilir DüzenleKoşullar(<Eklenen Ayrıntılar>, <Çıkarılabilir Detaylar>) nesne YönetilenForm. Seçenekler Eklenen Ayrıntılar Ve Çıkarılabilir Detaylar Form Gerekliliği türünün öğelerini içeren diziler iletilir.

Dikkat!

Ayrıntıların kompozisyonunu değiştirme süreci oldukça kaynak yoğundur. Aslında form yeniden yaratılıyor. Bu bağlamda formun detaylarıyla çalışma toplu modda gerçekleştirilir.

Buyer adında yeni bir form özelliği oluşturalım:


AddedAttributes = Yeni Dizi;
Ayrıntılar Eklendi. Ekle(Yeni Form Özelliği("Alıcı", New TypeDescription ("DirectoryReference.Counterparties"), "Müşteri");

// Niteliklerin bileşimindeki değişiklikler
);

Form Öğelerini Değiştirme

Bir nesnenin elemanlarının kompozisyonunu yönetmek YönetilenForm bir koleksiyona sahip olmak Elementler. Koleksiyonun birkaç yöntemi vardır:

    Sokmak (< Имя>, < ТипЭлемента>, < Родитель>, < Элемент >)

    Eklemek (< Имя>, < ТипЭлемента>, < Родитель >)

    Miktar ()

    Bulmak (< Имя >)

    Taşınmak(< Элемент>, < Родитель>, < МестоРасположения >)

    Silmek (< Элемент >)

Elements koleksiyonu hem istemcide hem de sunucuda mevcuttur. Koleksiyonu değiştirin (Yöntemleri ekleyin () , Ekle () , Taşı () ve Sil () ) yalnızca sunucuda kullanılabilir. Hem istemcide hem de sunucuda öğe sayısını (Find() ve Quantity() yöntemleri) arayabilir ve alabilirsiniz. Koleksiyon öğeleri şunlar olabilir:

  • Grup Formu;
  • Tablo Formları;
  • Form alanı;
  • ButtonForms.

Olay işleyicilerini program aracılığıyla form öğelerine atayabilirsiniz. Bu amaçla yöntem SetAction(< ИмяСобытия>, < Действие >) .

Komutlarla, niteliklerle ve form öğeleriyle çalışmanın en yaygın pratik örneklerinden bazılarına bakalım.

Bir komut ve onunla ilişkili düğme ekleme:

// Bir ekip oluştur
Takım = Komutlar. Eklemek( "Değişimlerin Tarihi");
Takım . Eylem = "Connected_DisplayHistory"; // Form belirtilen adda bir prosedür içermelidir
Takım . başlık = "Değişikliklerin geçmişi...";
// Bir buton oluşturup onu bir komutla ilişkilendiriyoruz
Öğe = Öğeler. Eklemek( "Değişimlerin Tarihi", Type("FormButton" ));
Element.CommandName = "Değişimlerin Tarihi";

Bir öznitelik ve onunla ilişkili giriş alanı ekleme:

// Eklenen detayların açıklaması
AddedAttributes = Yeni Dizi;
Ayrıntılar Eklendi. Eklemek(Yeni Form Özelliği ("Alıcı", Yeni Tür Açıklaması ( "Referans Bağlantısı. Karşı Taraflar"), "Müşteri" ));
// Niteliklerin bileşimini değiştirme
EditAttributes(AddedAttributes));
// Bir giriş alanı oluşturma ve bir özelliğe bağlantı verme
Öğe = Öğeler. Add("Müşteri", Type("FormField"));
Öğe . Görünüm = ViewFormFields. Giriş alanı;
Öğe . Veri Yolu= "Alıcı" ;

Bir form öğesine olay işleyicisi atama:

Öğe Alıcısı. Eylemi Ayarla("Değiştiğinde", "Plug-in_BuyerOnChange");

&İstemcide
Prosedür Plugin_BuyerOnChange(Öğe)
// Olay eylemleri
Prosedürü Sonlandır

Dikkat!

Yöntemi kullanarak koddan olay işleyicileri olarak yüklenen prosedürler SetAction() Connected_ önekinin kullanılması önerilir.

Dikkat!

Programatik arama örnekleri ve yönetilen bir formun ayrıntılarını, komutlarını ve öğelerini değiştirme örneklerini içeren işlemeyi indirebilirsiniz.

Ve Veri Aktarım Nesnesinden kod yapılanmasına, 1C 8.2 ortamında yönetilen form.

giriiş

"Yönetilen form" kavramının ve 1C platformunun ilgili kavramlarının kısa bir açıklamasıyla başlayalım. Platform uzmanları bu bölümü atlayabilir.

2008 yılında, arayüzle çalışmanın tüm katmanını tamamen değiştiren 1C: Enterprise 8.2 platformunun yeni bir sürümü (bundan sonra Yönetilen Uygulama olarak anılacaktır) kullanıma sunuldu. Buna komut arayüzü, formlar ve pencere sistemi dahildir. Bu sadece konfigürasyondaki kullanıcı arayüzü geliştirme modelini değiştirmekle kalmıyor, aynı zamanda istemci uygulaması ile sunucu arasındaki işlevsellik ayrımı için yeni bir mimari öneriyor.
Yönetilen uygulama aşağıdaki istemci türlerini destekler:

  • Kalın İstemci (Normal ve Yönetilen Başlatma Modu)
  • Zayıf müşteri
  • Web istemcisi
Yönetilen uygulama, yeni teknolojiye dayanan formları kullanır. Onlar aranmaktadır Yönetilen Formlar. Geçiş kolaylığı açısından eski formlar da (normal formlar olarak adlandırılır) desteklenir, ancak işlevleri geliştirilmemiştir ve yalnızca zengin istemci başlatma modunda kullanılabilirler.
Geliştirici için yönetilen formların temel farklılıkları:
  • Yapının "piksel bazında" değil, bildirimsel açıklaması. Form görüntülendiğinde elemanların spesifik yerleşimi sistem tarafından otomatik olarak yapılır.
  • Formun tüm işlevleri formda açıklanmıştır detaylar Ve komutlar. Ayrıntılar, formun birlikte çalıştığı verilerdir ve komutlar ise gerçekleştirilen eylemlerdir.
  • Form hem sunucuda hem de istemcide yürütülür.
  • İstemci bağlamında hemen hemen tüm uygulama türleri mevcut değildir ve dolayısıyla bilgi tabanındaki verileri değiştirmek imkansızdır.
  • Her yöntem veya form değişkeni için belirtilmelidir derleme direktifi Yürütme konumunun (istemci veya sunucu) ve formun içeriğine erişimin olup olmadığını belirten bir.
Form yöntemlerini derlemeye yönelik yönergeler şunlardır:
  • &İstemcide
  • &Sunucuda
  • &SunucudaBağlam Olmadan
  • &İstemcideSunucudaBağlam Olmadan
Yukarıdakileri örnekleyelim. Ekran görüntüsü, yönetilen bir formun ve onun modülünün geliştirme modundaki bir örneğini gösterir. Bildirime dayalı açıklama, destek, derleme yönergeleri vb. bulun.

Bundan sonraki tüm tartışmalar, şeklin sağ tarafı, modül kodunun nasıl yapılandırılacağı ve hangi ilkelerin etkili istemci-sunucu etkileşimini uygulamanıza izin vereceği hakkında olacaktır.

Sorunu tanımlayalım

1C platformunun yeni sürümünün aktif olarak kullanılmasının üzerinden birkaç yıl geçti ve hem 1C hem de birçok ortağı tarafından birçok çözüm (konfigürasyon) yayınlandı.
Geliştiriciler bu süre zarfında form oluştururken istemci-sunucu etkileşimi ilkelerine ilişkin ortak bir anlayış geliştirdiler mi ve yeni mimari gerçekliklerde program modüllerinin uygulanmasına yönelik yaklaşım değişti mi?

Kod yapısını (form modülü) aynı tipik konfigürasyonun çeşitli formlarında düşünün ve kalıpları bulmaya çalışın.
Yapı altında, geliştirici tarafından gruplandırma yöntemleri ve bu yöntemlerin derlenmesine yönelik yönergeler için seçilen kod bölümlerini (çoğunlukla bunlar yorum bloklarıdır) kastediyoruz.
Örnek 1:
Olay yöneticisi bölümü Yöntem - istemcide Yöntem - sunucuda Yöntem - istemcide Hizmet prosedürleri ve işlevleri bölümü Giriş kontrolü yardımcı işlevleri
Örnek 2:
Hizmet prosedürleri ve işlevleri Ödeme belgeleri Değerli eşyalar Olay yöneticileri
Örnek 3:
Sunucudaki hizmet yordamları İstemcideki hizmet yordamları Bağlam olmadan sunucudaki hizmet yordamları Başlık olay işleyicileri Komut olay işleyicileri
Örnek 4:
Genel amaçlı prosedürler Form olay yöneticileri "İletişim bilgileri" alt sisteminin prosedürleri
Aslında kod yapısı eksik veya en hafif tabirle form 8.1'dekine benziyor:

  • Bilgilendirici olmayan kelimeler "Genel, Hizmet, Yardımcı."
  • Timid, istemci ve sunucu yöntemlerini ayırmaya çalışır.
  • Genellikle yöntemler "Tablolu ürünlerle çalışma, İletişim bilgileri" arayüz öğelerine göre gruplandırılır.
  • Yöntemlerin ve kod gruplarının keyfi düzenlenmesi. Örneğin, Olay İşleyicileri bir formda en üstte, diğerinde en altta olabilir, üçüncü formda hiç vurgulanmamış olabilir vb.
  • Ve bunların hepsinin aynı konfigürasyon içerisinde olduğunu unutmayalım.
  • Evet, “Genel, Hizmet, Yardımcı” kelimelerinin her zaman aynı yerlerde olduğu konfigürasyonlar var ama ...
Neden bir kod yapısına ihtiyacınız var?
  • Bakımın basitleştirilmesi.
  • Öğrenmeyi basitleştirin.
  • Genel/önemli/başarılı ilkelerin belirlenmesi.
  • …sizin seçeneğiniz
1C'nin mevcut geliştirme standardı neden yardımcı olmuyor?
Yönetilen bir form yazarken önerilen, ITS disklerinde ve çeşitli "Geliştirici Kılavuzlarında ..." yayınlanan ilkelere bakalım.
  • Sunucu çağrılarının sayısını en aza indirin.
  • Sunucuda maksimum bilgi işlem.
  • Bağlam dışı sunucu çağrıları, bağlam çağrılarından daha hızlıdır.
  • İstemci-sunucu etkileşimini göz önünde bulunduran program.
  • ve benzeri.
Bunlar kesinlikle doğru sloganlar ama nasıl hayata geçirilebilir? Çağrı sayısı nasıl en aza indirilir, istemci-sunucu modunda programlama ne anlama gelir?

Tasarım kalıpları veya nesil bilgeliği

İstemci-sunucu etkileşimi onlarca yıldır çeşitli yazılım teknolojilerinde kullanılmaktadır. Önceki bölümde özetlenen soruların cevabı uzun zamandır bilinmektedir ve iki temel prensipte özetlenmiştir.
  • Uzak Cephe(bundan sonra Uzaktan Erişim Arayüzü olarak anılacaktır)
  • Veri Aktarım Nesnesi(bundan böyle Veri Aktarım Nesnesi olarak anılacaktır)
Martin Fowler'a bu ilkelere ilişkin açıklaması:
  • potansiyel olarak uzaktan erişime yönelik her nesnenin sahip olması gerekir düşük tanecikli arayüz Bu, belirli bir prosedürü gerçekleştirmek için gereken çağrı sayısını en aza indirecektir. … Faturayı ve tüm noktalarını ayrı ayrı istemek yerine, tek aramada faturanın tüm noktalarını okuyup güncellemek gerekiyor. Bu, nesnenin tüm yapısını etkiler...Unutmayın: uzaktan erişim arayüzü etki alanı mantığı içermiyor.
  • ... şefkatli bir anne olsaydım kesinlikle çocuğuma şunu söylerdim: "Asla veri aktarım nesneleri yazmayın!" Çoğu durumda, veri taşıma nesneleri yalnızca şişirilmiş alan kümesi… Bu iğrenç canavarın değeri yalnızca olasılıkta yatıyor tek bir çağrıda ağ üzerinden birden fazla bilgi iletin- Dağıtılmış sistemler için büyük önem taşıyan bir teknik.
1C platformundaki şablon örnekleri
Yönetilen bir form geliştirirken geliştiricinin kullanabileceği API, bu ilkelerin birçok örneğini içerir.
Örneğin, tipik bir "kaba" arayüz olan OpenForm() yöntemi.
OpenParameters = Yeni Yapı("Parametre1, Parametre2, Parametre3", Değer1, Değer2, Değer3); Form = OpenForm(FormAdı, OpenParameters);
V8.1 stiliyle karşılaştırın.
Form = GetForm(FormAdı); Form.Parametre1 = Değer1; Form.Parametre2 = Değer2; Form.Open();

Yönetilen bir form bağlamında, bir dizi "Veri Aktarım Nesnesi". Ayırt edilebilir sistemik Ve geliştirici tanımlı.
Sistem olanlar, istemci üzerinde bir uygulama nesnesini bir veya daha fazla form veri öğesi biçiminde modeller. Form ayrıntılarına bağlanma dışında bunları oluşturamazsınız.

  • VeriFormlarıYapısı
  • VeriFormlarıKoleksiyonu
  • DataFormStructureCollection
  • VeriFormlarıAğacı
Veri aktarım sistemi nesnelerinin uygulama türlerine ve uygulama türlerine dönüştürülmesi aşağıdaki yöntemlerle gerçekleştirilir:
  • ValueVDataForm()
  • FormDataToValue()
  • CopyFormData()
  • ValueVFormProps()
  • FormAttributeToValue()
Mevcut bir çözümü uyarlarken genellikle açık bir dönüşüm kullanılır. Yöntemler, FormDataCollection yerine ValueTable gibi giriş parametrelerini bekleyebilir (özellik) veya yöntem, bir uygulama nesnesi bağlamında tanımlanmış ve formdan doğrudan çağrı için kullanılamaz hale gelmiştir.
Örnek 1C v8.1:
// istemcide FillUsersCache(DepartmentReference) formunun bağlamında
Örnek 1C v8.2:
// sunucuda form bağlamında ProcessingObject = FormAttributeToValue("Object"); ProcessingObject.FillCacheUsers(DepartmentReference); ValueVFormAttribute(ProcessingObject, "Object");

Yapısı geliştirici tarafından tanımlanan veri taşıma nesneleri, hem istemcide hem de sunucuda kullanılabilen türlerin küçük bir alt kümesidir. Çoğu zaman, "kaba" bir arayüzün yöntemlerinin parametreleri ve sonuçları olarak aşağıdakiler kullanılır:

  • İlkel türler (dize, sayı, boolean)
  • Yapı
  • Yazışma
  • sıralamak
  • Uygulama nesnelerine bağlantılar (benzersiz tanımlayıcı ve metin gösterimi)
Örnek: Yöntem, durumu değiştirmek için bir sipariş listesini kabul eder ve istemciye hataların bir açıklamasını döndürür.
&OnServerWithoutContext İşlev ServerChangeOrderStatus(Orders, NewStatus) Hatalar = Yeni Eşleşme(); // [sipariş][hata açıklaması] Siparişlerden Her Sipariş İçin Loop StartTransaction(); DocOb girişimi = Order.GetObject(); …. muhtemelen yalnızca siparişle ilgili olmayan diğer eylemler... İstisna CancelTransaction(); Errors.Insert(Order, AçıklamaError()); Girişimin Sonu; EndCycle; Dönüş Hatası; EndFunction // ServerChangeOrderStatus()

Kodun yapılandırılması

Yönetilen form modülünün yansıtması gereken temel hedefler ve çözüme yaklaşımlar.
  • İstemci ve sunucu kodunun net bir şekilde ayrılması. Yürütme sırasında bunların, her birinde mevcut işlevselliğin önemli ölçüde farklılık gösterdiği, etkileşimli iki süreç olduğunu unutmayalım.
  • Uzaktan erişim arayüzünün net bir seçimi; istemciden hangi sunucu yöntemlerinin çağrılabileceği ve hangilerinin çağrılamayacağı? Uzak arayüz yöntemlerinin adları "Sunucu" önekiyle başlar. Bu, kodu okurken kontrolün sunucuya geçişini anında görmenize olanak tanır ve bağlamsal ipuçlarının kullanımını basitleştirir. Resmi önerinin (ITS), ChangeOrderStatusOnServer() gibi soneklerle adlandırma yöntemlerini önerdiğini unutmayın. Ancak tekrarlamak gerekirse, tüm sunucu yöntemleri istemciden çağrılamaz ve bu nedenle mantıksal erişilebilirlik, derleme konumundan daha önemlidir. Bu nedenle, “Sunucu” önekiyle yalnızca istemcinin kullanabileceği yöntemleri işaretliyoruz, örnek yöntem ServerChangeOrderStatus() olarak adlandırılacaktır.
  • Okunabilirlik. Zevk meselesi, sunucuda form oluşturma prosedürleri ve uzaktan erişim yöntemleri ile modül başladığında siparişi kabul ediyoruz.
  • Sürdürülebilirlik. Yeni kodun ekleneceği yer açıkça tanımlanmalıdır. Önemli bir nokta, yapılandırıcı tarafından otomatik olarak oluşturulan yöntem taslaklarının modülün sonuna eklenmesidir. Form öğesi olay işleyicileri çoğunlukla otomatik olarak oluşturulduğundan, her işleyiciyi modülde başka bir yere sürüklememek için karşılık gelen blok en sona yerleştirilir.
Aşağıda listelenen hedefleri uygulayan modülün temel yapısı verilmiştir.
  • Grafik seçeneği - ana yürütme akışını açıkça gösterir.
  • Metin seçeneği, yeni bir form modülüne hızlı bir şekilde bir yapı eklemek için kullanılan şablon tasarımının bir örneğidir.

//////////////////////////////////////////////////////////////////////////////// // <(c) Автор="" Tarih = ""/> // <Описание> // // /////////////////////////////////////////////////// ////////////////////////////// // MODÜL DEĞİŞKENLERİ //////////////// /////////////////////////////////////////////////// ////////////// // SUNUCUDA //****** SUNUCUDAKİ OLAYLAR ******* &Sunucuda Sunucuda Oluşturma Prosedürü(Arıza, StandardProcessing) //İşleyicinin içeriğini ekleyin EndProcedure //******* UZAKTAN ERİŞİM ARAYÜZÜ ******* //********* SUNUCUDA İŞ MANTIĞI ****** * ///////// //////////////////////////////////////// ////////// ///////////////////// // GENEL İSTEMCİ VE SUNUCU YÖNTEMLERİ //////////// //////////// ////////////////////////////////////// //////////// //////// // MÜŞTERİ ÜZERİNDE //******** İSTEMCİ ÜZERİNDE İŞ MANTIĞI ******* //** ***** KOMUTLAR ******* //******** İSTEMCİDEKİ OLAYLAR ****** ////////////////// ///////////// ///////////////////////////////////// //////////// / / ANA PROGRAM OPERATÖRLERİ

İlgili sorular
Sonuç olarak, bir istemci-sunucu etkileşimini programlarken dikkate alınması gereken birkaç alanın ana hatlarını çiziyoruz.
  • Uzaktan erişim arayüzünü uygulama seçenekleri. Eşzamansızlık, ayrıntı düzeyi...
  • Önbelleğe almak. 1C, önbelleğe almayı yalnızca ortak modüllerin çağrı yöntemleri düzeyinde getirerek ve kontrol seçenekleri (güncel zaman, isteğe bağlı sıfırlama) sağlamayarak talihsiz bir mimari karar verdi.
  • Örtülü sunucu çağrıları. Teknolojik özellikleri unutmayın; istemcideki birçok "zararsız" işlem, platformun sunucuya erişmesine neden olur.

1. Giriş alanı
2. Onay Kutusu
3. Anahtar

Giriş alanı

Kural olarak, giriş alanı nesnenin niteliğiyle ilişkilendirilir ve onun verilerini yansıtır. Bu belki de en yaygın unsurlardan biridir; bir değer seçmenin birkaç yolu vardır:

Listeden seçme (SelectFromListMode)

Başka bir formdan seçim (Seç düğmesi)

Kontrol düğmeleri

Yukarıdaki örneklerin uygulanması, geliştirici açısından önemli bir çaba gerektirmez. örneğin, liste modu için, öğenin listesini değerlerle doldurmak gerekir, başka bir formdan seçim yapmak için, kontrol öğesini sözlüğün verileriyle basitçe bağlamak yeterlidir. Ancak kontrol düğmeleri için, her düğmeye basmayı idare etmek için daha fazla kod yazmanız gerekecektir, ancak bu harika olmayacaktır:

Prosedür pvAdlandırma SeçimiYönetmelik(Öğe, Yön, Standart İşleme)
//Giriş alanı için verileri seç
// bu durumda referans İsimlendirme
Talep = Yeni Talep;
İstek.Text=
"SEÇMEK
| İsimlendirme. Öğe Olarak Referans
|
| Dizin.Adlandırma AS Adlandırma
|SİPARİŞ VEREN
| Adlandırma.Kod";
TZNomenclature = request.Execute().Upload();

//giriş alanında belirtilen dizinin geçerli öğesini arıyoruz
CurrentElement = TKNomenclature.Find(Element.value);

CurrentItem = Tanımsız ise O zaman
// eğer eleman bulunamazsa indeks numarasını ayarlayın
// değer tablosunun dışında çünkü içindeki ilk unsur
// değer tablosunun indeksi 0'dır
CurrentIndex = -1;
Aksi takdirde
// eğer eleman bulunursa indeksini al
TekIndex = T3Nomenclature.Index(TekElement);
EndIf;

// butona tıklamaya bağlı olarak yeni indeksi hesapla
// değişkenin önünde eksi Yön şu şekildedir:
// üst oka tıklamak yukarıdaki öğeyi gösterdi
// ve dolayısıyla daha düşük bir indeksle
NewIndex = CurrentIndex-Yön;

// dizindeki elemanların sayısını alıyoruz
// bir çıkar çünkü 8.1'deki tüm koleksiyonlar 0'dan başlar
Kalem Sayısı = TK İsimlendirmesi Adet () -1;

NewIndex ise< 0 Или НовИндекс >O halde Element Sayısı
// eğer indeks değiştirilirken değerler tablosunun dışındaysa
// yani numarası en büyük indeksten büyük veya 0'dan küçükse
// değeri değiştirmeyin ve kullanıcıyı bu konuda bilgilendirin
warning("Dizin sınırına ulaştınız");
Aksi takdirde
// yeni bir değer atayın, "Ürün" değer tablosu sütununun adıdır
Element.value = TKNomenclature.Get(NewIndex).Product;
EndIf;

Prosedürü Sonlandır

Onay kutusu

Çoğu programda onay kutusu iki durumu görüntülemek için kullanılır: işaretli, işaretsiz. 1'lerde onay kutusunun üç durumu vardır, üçüncü durumda onay kutusu ayarlanmış ve gölgeli olarak görüntülenir. Üç durum yalnızca bayrak verilerinin bir sayı olması ve durumların aşağıdaki anlamlara sahip olması durumunda kullanılabilir:

Anahtar

Anahtar, mümkün olan az sayıdaki (tercihen beşten fazla olmayan) bir değer seçmek için kullanılırken, değerler birleştirilmez, Örneğin: bir kişinin cinsiyetini seçmek için uygundur. Başka bir örnek: Diyelim ki bir şirket bir ürün için 3 indirimden birini veriyor, ancak indirimler birikimli değil:

Bu durumda, radyo düğmelerini kullanmanın rahatlığı, her birinin "Seçilebilir Değer" özelliğinde ayarlanan bir değere sahip olabilmesi gerçeğinde yatabilir. Daha sonra "%5 İndirim" 5 veya 0,05 değerini saklayabilir.

Radyo düğmelerini kullanırken akılda tutulması gereken üç önemli nokta vardır:

      İlk radyo düğmesinin "FirstInGroup" özelliğine sahip olması gerekir (bu örnekte "%5 İndirim" radyo düğmesidir).

      Anlam olarak bir grupla ilgili anahtarlar, bypass sırasını ayarlarken diğer form elemanları tarafından kesintiye uğramadan arka arkaya gitmelidir. Geçiş sırası "Form -> Geçiş sırası ayarları" menüsünden ayarlanır, bu örnekte şu şekilde görünür:

  1. Seçilen değerin türü "FirstInGroup" özelliğine sahip anahtar tarafından ayarlanır.

1C'de arayüz geliştirme iki bölümden oluşur: bir menünün veya masaüstünün geliştirilmesi ve 1C ekran formlarının geliştirilmesi. Kullanıcının 1C'de çalıştığı pencerelere 1C ekran formları veya kısaca 1C formları denir.

Programdaki kullanıcılar 1C formlarıyla çalışır. Üstelik kullanıcılar yalnızca 1C formlarını görüyor. Dolayısıyla programda çalışmanın rahatlığı açısından bu önemli unsurlardan biridir. Aynı zamanda, 1C formunu geliştirmek için en karmaşık algoritmayı programlamaktan daha fazla zaman harcayabilirsiniz.

Programcıların yaptığı yaygın bir hata, her şeyi kendi beğenilerine göre çizmeye çalışmaktır. Arka planı mavi, yazıları yeşil yapın. Veya siyah üzerine sarı. Veya başka bir favori programından nasıl hoşlandığını.

Ne yazık ki, kullanıcılar konfigürasyonda çoğunluk olan standart 1C formlarıyla çalışmaya alışkın oldukları için bu yaklaşım hatalıdır. Kendi bisikletinizi çizmek, onu “Telif Hakkı Vasya Pupkin” gibi Courier yazılarıyla işaretlemek kesinlikle kötü bir biçim.

Şimdi 1C formlarının çizimi konusunda kısa bir eğitim programından geçeceğiz.

Form 1C Nedir?

Form 1C kullanıcıya sunum yöntemidir. Tipik olarak form, doldurulması gereken bir dizi alan ve kontrol edilecek bir dizi düğmeden (menü komutları) oluşur. Form 1C çoğu 1C nesnesi için mevcuttur.

1C kalın istemci "normal" 1C formlarını kullanır. Bu, programcının tıpkı Visual Studio ve diğer çerçevelerde yapıldığı gibi fareyle 1C formunu basitçe çizdiği anlamına gelir.

1C ince istemci ve 1C web istemcisi, yönetilen 1C formlarını kullanır. Bu, boyutlarının, 1C formunun ve üzerlerindeki alanların konumunun fare ile değiştirilemeyeceği anlamına gelir. Ayarlara göre otomatik olarak oluşturulurlar. Sonraki derslerde 1C yönetilen formlardan bahsedeceğiz.

1C'deki 1C tipik konfigürasyonlarının çoğu biçiminin, kullanıcının aşina olduğu kendi tipik temsili vardır.

1C formları nasıl çalışır?

Kullanıcının 1C'deki çalışmasının mantığı (sıralaması) aşağıdaki gibidir:

Böylece kullanıcı her zaman 1C formlarıyla çalışır, 1C liste formundan başlayıp 1C eleman formuna geçer. Programcı formları çizmediyse, 1C varsayılan olarak formları oluşturur. Doğal olarak ideal güzellik ve mükemmellikten yoksundurlar, ancak çalışmalarına izin verirler.

Otomatik olarak oluşturulan 1C liste formu genellikle minimum sayıda alan içerir (sırasıyla kod / ad ve tarih / numara). Otomatik olarak oluşturulan öğe formu genellikle yukarıdan aşağıya doğru listelenen tüm alanları (gereklilikleri) içerir.

1C formunun görevi kullanıcı işlemlerini açmak ve beklemektir. Eylemde tepki verin. Böylece olay işleyicileri 1C form modülünün temelini oluşturur. Bunlar, kullanıcı 1C formunda bir işlem gerçekleştirdiğinde çağrılan işlevlerdir.

1C formları nerede

1C Kurumsal modunda, hemen hemen herhangi bir 1C nesnesini (referans kitabı, belge, rapor, işleme vb.) seçtiğinizde, bu nesne için bir form göreceksiniz.

Yapılandırıcıda, yapılandırma penceresinde ihtiyacınız olan nesneyi seçin, Form 1C alt dalını görmek için dalını genişletin.

Diğer bir seçenek de nesne düzenleyiciyi açmak (fareyle iki kez veya imleci ve Enter'u kullanarak) ve Form 1C sekmesine gitmektir.

İşte 1C formlarının bir listesi. Eklenen 1C formlarından biri varsayılan form olarak eklenebilir (1C liste formu, 1C öğe formu vb.).

1C formlarının oluşturulması

Yeni bir 1C formu eklemek için Ekle düğmesine (klavyedeki Ins) tıklamanız gerekir. Mevcut olanı girmek için fareyle üzerine çift tıklayın.

Yapıcı sizden 1C formunun türünü - 1C öğesinin formu, liste - seçmenizi isteyecektir. Burada ayrıca 1C formuna komut panelleri ekleyebilir veya kaldırabilirsiniz. Çoğu zaman bu ayarlar varsayılan olarak olduğu gibi bırakılır.

1C formu varsayılan olarak doldurulmuş olarak açılır - kendisine eklenen 1C nesnesinin tüm ayrıntıları. Yapıcının ikinci sekmesinde gerekli alanların belirli bir listesini işaretleyebilirsiniz.

Gereksiz ayrıntılar kaldırılabilir. Bunu yapmak için bir veya daha fazla alanı seçin ve Del tuşuna basın.

Diğer nitelikleri boşalan alana taşımak için aynı şekilde seçip fare ile sürükleyin.

1C formuna yeni ayrıntılar eklemek için Veri Yerleştirme panelindeki (Form / Veri Yerleştirme menüsü) düğmeye basın, eklemek istediğiniz öğelerin kutularını ve ayrıca “Etiket ekle” ve “Otomatik olarak yerleştir” onay kutularını işaretleyin. .

Alternatif olarak, aşağıdaki paneldeki ilgili düğmeye tıklayarak veya menüden Form/Ekle Kontrolü'nü seçerek bir kontrol ekleyebilirsiniz. Kontrole (alan) farenin sol tuşuyla çift tıklayın, özellikleri açılacaktır. "Veri" özelliği öznitelik adını içerir. Burada değiştirilebilir veya atanabilir.

Denetimin özellikleri ayrıca denetimin görünümünü denetlemek için onay kutuları da içerir. Onay kutularının yardımıyla seçme, açılır menü, temizleme, görünürlük ve erişilebilirlik düğmelerini etkinleştirebilir ve devre dışı bırakabilirsiniz.

Hemen hemen tüm belge formları yer imlerini kullanır. Bir yer imi başka bir kontrolle aynı şekilde eklenir (yukarıya bakın), yalnızca Panel kontrolü seçilmelidir. Bir panel sayfası eklemek için üzerine sağ tıklayın ve Sayfa Ekle'yi seçin. Panel sayfalarındaki diğer kontroller (alanlar) basitçe sürükleyip bırakılır.

1C formunu yeniden boyutlandırmak için imleci 1C formunun kenarına getirin, sol fare tuşuna basın ve 1C formunun kenarını sürükleyin.

1C formunun çalışması için - yani. kullanıcı eylemlerine yanıt olarak bir şey yaptım - işleyici işlevleri eklemeniz gerekir. Herhangi bir öğenin özelliklerini (farenin sol tuşuyla çift tıklayarak) veya 1C formunun kendisini (form başlığına benzer şekilde) girin. Özellikler penceresinin en altında bir "Olaylar" bölümü vardır. Uygun bir etkinlik seçin (tüm alanlar için genellikle "OnChange", "OnOpen" formu için ise) ve büyüteç düğmesini tıklayın. Olay işleyicisi açılacaktır.

Düğmeler için ekleme işlemi aynıdır. Bununla birlikte, isteğe bağlı işleyicilere ek olarak, bu form için standart işleyicilerden birini de seçebilirsiniz (referans formu için bunlar bazı standart eylemlerdir, belge formu için diğerleri). "Eylem" özelliğindeki standart eylemlerden birini seçmeniz veya kendi işleyicinizi oluşturmak istiyorsanız çarpı işaretine tıklamanız yeterlidir.

Muhtemelen hiçbir algoritma, veritabanını kullanıcılar veri girerken oluşan hatalardan koruyamaz. İnsanın dikkatsizliğiyle ilgili temel sorunlar aşağıdaki listede tanımlanabilir:

  • Yanlış nesne seçimi;
  • İsimde yanlış miktar veya yazım hatası;
  • Dizinlerin çift öğeleri, benzersiz olmamaları veya yeniden derecelendirilmeleri;
  • Programın doğru hesaplanması ve sorunsuz çalışması için kritik olan alanların doldurulmasının göz ardı edilmesi.

Son sorunun çözümü, 1C programının sekizinci versiyonu için form ayrıntılarının doldurulduğunun kontrol edilmesidir.

Normal bir formun tamamlanma kontrolü

Form kullanıcı tarafından açıldığında, başlatma modu "Normal uygulama" ise doldurulması gereken öğeler kırmızı noktalı çizgi ile vurgulanır (Şekil 1).

Yukarıdaki örnekte görüldüğü gibi "Mal ve hizmet satışı" belgesinde zorunlu alanlar "Numara" ve "Yüklenici"dir. Bu durumda "Numara" alanı düzenlemeye uygun değildir. Bu, bilgi tabanına bir belge yazıldığında, ilgili kuruluş için belirlenen numaralandırma kurallarına uygun olarak otomatik olarak doldurulacağı anlamına gelir.

Dizin öğelerinin kaydedilmesi veya doldurulmamış zorunlu alanlar içeren belgelerin yayınlanması bir istisnaya neden olacaktır (Şekil 2).

Pirinç. 2

Hangi alanın doldurulmadığına ilişkin daha detaylı bilgiyi servis mesaj penceresinden görebilirsiniz.

Alanın zorunlu olarak doldurulması hakkında bilgi veren işaretin kendisi, form öğesinin özelliklerinde ayarlanır. Bunun için:

  1. Formu Yapılandırıcıda açın;
  2. Form öğesine sağ tıklayıp "Özellikler" penceresini çağırıyoruz;
  3. "Kullanım" alt menüsünde AutoMarkUnfilled ve AutoSelectUnfilled kutularını işaretlemek gerekir (Şekil 3);

Doğrudan kontrol, kural olarak, nesne modülüne kaydedilir.

Dizinler ve devredilemeyen belgeler için, bir öğeyi kaydederken dolum kontrolü prosedürünün çağrılması tavsiye edilir. Eksik tamamlanan belgeler, eğer gerçekleştirilmişse, veri tabanına kaydedilebilir ve doğrulama prosedürünü hareketlerin oluşmasından önce, yani yürütme sırasında çağırmak daha iyidir. Check-in işlemlerinin ve zorunlu alanları içeren raporların doğrudan düğme tıklama işleminde gerçekleştirilmesi uygundur.

ValueFilled("Value") işlevini kullanarak alana iletilen değerin boş değerden (varsayılan değer) farklı olup olmadığını kontrol edebilirsiniz. Ancak alanın bileşik veri türünde olması durumunda bu işlevin yürütülmesinin bir istisna oluşturacağını unutmayın.

Yönetilen Formlarda Doğrulama

Platformun istemci-sunucu versiyonundaki özellikleri dolum kontrolünde iz bırakıyor.

Öncelikle bu çalışma modunda bir nesneye girerken hangi prosedürün takip edildiğini anlamanız gerekir.

Yani, "Kaydet", "Tamam", "Gönder" düğmesine bastıktan sonra:

  1. İstemciye "Yazmadan önce" prosedürü denir;
  2. Veriler sunucuya aktarılır ve sunucudaki form modülünde kayıtlı olaylar gerçekleşir (burada ProcessingFillCheckOnServer prosedürünü çalıştırabilirsiniz);
  3. Form verileri sunucudaki nesne modülüne aktarılır (FillCheckProcessing standart prosedürünü başlatmak mümkün hale gelir);
  4. Modülden gelen veriler sunucudaki form modülüne döndürülür ve BeforeWriteOnServer prosedürü gerçekleşir;
  5. Veriler nesne modülüne döndürülür ve başka bir BeforeWrite prosedürü gerçekleşir;
  6. Nesne doğrudan veritabanına yazılır.

Bu şemanın herhangi bir noktasına CheckFill() işlevini ekleyebilirsiniz. Ayrıntıları inceledikten sonra, "Doldurma kontrolü" niteliğinin "Hata ver" değerine sahip olduğu özelliklerde (Şekil 4), bu işlev, bunlardan en az biri doldurulmamışsa, "Yanlış" değerini döndürecektir.

HandleFillCheck() ve ProcessFillCheckOnServer() işleyicileri arasındaki farklar

Yönetilen bir uygulamanın arayüzünün hem nesne niteliklerini hem de doğrudan form niteliklerini içerebileceği gerçeği göz önüne alındığında, bu iki prosedür ayrılır. Aynı zamanda işleyicilere aktarılabilecek parametreler açısından da benzerler:

  1. Reddetme (burada, kontrolden sonra sonucu iletilir);
  2. CheckedAttributes (veri türü bir dizidir, doldurulmamışsa, özellikleri "Doldurmayı kontrol et" olarak ayarlanan tüm ayrıntılar kontrol edilecektir, aksi takdirde programlı olarak seçilen ayrıntılar işlenecektir).

ProcessingFillingCheckOnServer() prosedürü, düzenlenen nesneyle doğrudan ilgili olmayan nitelikleri kontrol etmenize olanak sağlar. Her programcı neyi ve ne ölçüde kontrol etmek istediğine kendisi karar verir.

ProcessingFillingCheck() prosedürü temel ayrıntıları kontrol eder.