Anahtarlar, düzenli uygulama, yönetilen formlar. Yönetilen formların öğelerinin programlı olarak eklenmesi ve değiştirilmesi 1c yönetilen, öğe formundaki anahtarı ayarlar

Pek çok forumu okudum ve hiçbir yerde "Switch" ile çalışmanın anlaşılır bir açıklamasını görmedim. Bu yüzden kendim yazmaya karar verdim.

Bana göre en sık yapılan hata “Switch” konusundaki yanılgıdır. Bir forma birden fazla “Switch” (örneğin 3) yerleştirdiğinizde, birçok kişi program mantığında bunların birbirini etkileyen 3 farklı nesne olduğuna inanır. Ancak aslında program 3 "Anahtarın" tamamını tek bir nesne olarak algılar. Ve bunlardan birini seçmek bu nesnenin durumunu değiştirir. Bir örneğe bakalım.

1. Formda üç radyo düğmesi oluşturun. Kolaylık olması açısından isimleri değiştirmeyeceğiz.
2. Anahtar1'i vurgulayın. Özelliklerinde, “TEMEL” bölümünde, gruptaki ilk kutuyu işaretleyin. “DEĞER TÜRÜ” bir sayı seçin. (Daha sonra tam olarak neden bu sayıya bakacağız). Uzunluk bire ayarlanabilir, ancak bu herhangi bir özel işlevsellik sağlamaz.
3. “SEÇİLEN DEĞER” sütununda “Anahtar2”yi seçin ve 1 yazın.
4. “SEÇİLEN DEĞER” sütununda “Anahtar3”ü seçin ve 2 koyun.
Temel olarak, 3. ve 4. eylemlerle, karşılık gelen "Anahtar" seçildiğinde değişecek olan bir bayrağı ayarlarsınız. “Anahtar1”de varsayılan “SEÇİLEN DEĞER” sıfırdır.
5. Anahtarların sırasıyla “YÜRÜYÜŞ SIRASI”nda olup olmadığını kontrol edin. (örneğin: 13,14,15)(Şek. 1). anahtarla sürekli bir geçiş sırası gereklidir. Otomatik bypass sırası etkindir (pozisyonlar 13, 15, 20 olarak numaralandırılmıştır) (Şek. 2) bu durumda üst üste bulunan anahtarlar çalışmayacaktır. Otomatik sıralama kullanımını formdan kaldırmalısınız. gerekiyorsa siparişi manuel olarak belirtin.

Ayrıntılar için geçiş sırası nasıl ayarlanır? Formdayken "Diyalog" menüsünde "Otomatik geçiş sırası" onay kutusunun işaretini kaldırmanız gerekir. Bundan sonra “Dialog” -> “Geçiş sırasını ayarlama” veya “Dialog” -> “Seyahat sırası” seçeneğini kullanabilirsiniz. İkinci yöntem bana en uygunu gibi görünüyor. Bu yöntemle her nesne için nesne numarasının yer aldığı bir resim görüntülenir. Tek yapmanız gereken sayıların üzerine tıklayıp ayrıntıları ihtiyacınız olan sıraya göre seçmek.

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

6. “Switch1”i seçin ve bunun için ihtiyacımız olan prosedürü yazın.
Örneğin:

EF=FormElemanları; Switch1=0 ise EF.Payment Status.Value = "Ödenmemiş"; Aksi takdirde Switch1=1 Then EF.Payment Status.Value = "Kısmen ödendi"; Aksi takdirde Switch1=2 ise EF.Payment Status.Value = "Ücretli"; endIf;

7. F7'ye basın. F5'e basın. Bakalım her şey yolunda gidiyor, harikayız. Ve büyük PATRON bize bir bonus veriyor.

KOD AÇIKLAMASI

Neden her yerde "Switch1" var? Daha önce de söylediğimiz gibi, program üç öğeyi de bir olarak algılıyor ve gruptaki ilk öğe "Switch1" olduğundan, gruptaki "Switch2" yi ana öğe yaparsanız program onu ​​tüm öğe olarak algılıyor. , bu durumda doğruluk kontrolünün "Switch2"ye göre yapılması gerekecektir.
Peki “0”, “1”, “2” nereden geliyor? Nesnenin "Anahtarlar" arasında geçiş yaparken aldığı değerleri 3. ve 4. paragraflarda ayarlıyoruz.

SON SÖZ:

Bu kod anahtarlarla çalışmaya örnek olarak verilmiştir. Bana göre bu daha açık ve anlaşılır. Ancak "Değer Türü"nde ihtiyacınız olanı hemen seçebileceğinizi belirtmekte fayda var - bir dizinden önceden tanımlanmış bir değer, örneğin bir numaralandırma veya bir dize değeri. Yani yukarıdaki örnekte anahtarları hemen 0,1,2 değil, hemen “Ödenmemiş”, “Kısmen ödenmiş”, “Ücretli” olarak atamak mümkündü. Ve sonra kod bir satıra indirgenecek:

Form Öğeleri.Ödeme Durumu.Değer = Switch1;

Sonuç aynı olacaktır.

//////////////////////////////////////////////////////////////////////////////////////////

Kontrollü formlardaki (UF) anahtarlar daha sezgisel hale getirildi.

Switch oluştururken Nitelikler, Form Öğesi ikilisini hatırlamanız gerekir.
Öncelikle Form Nitelikleri oluşturmanız gerekir. Özelliğin türünü, anahtarınızın hangi değerleri kabul edeceğine göre ayarlarsınız. String tipini seçtim. Burada iki seçeneğiniz var: Bir Object niteliği oluşturduysanız, anahtarınız tarafından kabul edilen değer veritabanına kaydedilecektir; yalnızca form ayrıntıları listesine ekleme yaparsanız, anahtarınız tarafından kabul edilen sonuç kaydedilmeyecektir.

Daha sonra ihtiyacımız olan Nitelikleri Form Öğelerine sürükleyip bırakın. Bir form öğesi oluştururken, "Görünüm" özelliklerindeki öğenin türü "Giriş Alanı" olacaktır. Listeden "Alan anahtarı" seçeneğini seçin. Sonuç olarak şöyle bir form elde edeceksiniz:


Form Elementinin başlığını, rengini, yazı tipini, konumunu ve diğer güzelliklerini zevkinize göre dolduruyoruz.
Form öğesinin özelliklerinde bir öğe var. “Seçim Listesi” - içinde bir veya başka bir öğeyi seçerken anahtarınızın alacağı Değerleri girersiniz. Örneğimde “Kayıt”, “Gönderiyi İptal Et”, “Gönder” değerlerine sahip satırlar ekledim.

Bundan sonra anahtarınız kullanıma hazırdır.

Anahtarınızın Object niteliği mi yoksa Form niteliği mi olduğuna bağlı olarak, içinde depolanan değeri almak için aşağıdaki kodu kullanırsınız:

SwitchFormElementFormElement // bu, Object formunun bir niteliği ise doğrudan erişim.SwitchInsideDB // Object öğesi aracılığıyla erişim. ayrıntılarınıza.

1C 7.7'deki anahtarlar (diğer adıyla RadioButtons) çok benzersiz bir şekilde uygulanmıştır. Dikkate alınması gereken ilk şey, her zaman bir grup oluşturdukları gerçeğidir (tek bir geçişin anlamı yoktur). 1C'de grup elemanları arasında belirgin bir bağlantı yoktur. Gruptaki bir tanımlayıcının belirtildiği ilk öğe seçilir (bu, meta veri nesnesinin sayısal bir özelliği olabilir). Diğer anahtarların gruba ait olup olmadığı geçiş sırasına göre belirlenir.

Formu açarken anahtarın değeri başlatılmalıdır çünkü aksi halde grup öğelerinin hiçbiri dahil edilmeyecektir; bu doğru değildir.

Tipik bir 1C konfigürasyonunda anahtarların başlatılması şu şekilde uygulanır: Prosedür Yenisini Girin (Kopyala) // diğer ayrıntıların başlatılması Para birimi = 1; EndProcedure //Yeni Giriş Oldukça basit görünüyor, ancak en popüler değerin genellikle bir anahtar grubunda ilk sırada yer aldığını düşünürseniz, platformun imkanlarını kullanarak başlatmayı otomatik olarak yapabiliriz.

Bana göre anahtarın ana dezavantajı, örneğin numaralandırmaların aksine, çıktıda kişisel olmayan bir sayısal değer elde etmemizdir. Ne yazık ki, 1C 7.7'de numaralandırmaları anahtarlarla temsil etmenin standart bir yolu yoktur. Ancak bunun bir alternatifi de var; önceden tanımlanmış değişkenlerin kullanılması (diğer programlama dillerindeki sabitlere benzer).

Bir anahtar değeri kullanma örneğine bakalım: Para Birimi = 2 ise Nakit Hesap = AccountByCode("50.11"); Aksi takdirde Nakit Hesap = AccountByCode("50.1"); endIf; Bu kodu anlayabilmek için forma gidip “Para Birimi” özelliğinin “Kasiyer” radyo butonu grubundaki ilk elemanın tanımlayıcısı olduğunu belirlemeniz gerekmektedir. Grubun kendisi 2 unsurdan oluşuyor: “ruble (Kt 50.1)” ve “para birimi (Kt 50.11)”. Ancak bundan sonra, alışılagelmiş mantığın aksine, "Para Birimi = 2"nin bir döviz bürosunun işareti olduğu ve "Para Birimi = 1 veya 0"ın bir ruble kutusunun işareti olduğu ortaya çıkıyor.

Form modülü değişkenlerini radyo düğmesi konumlarına karşılık gelen adlar ve değerlerle tanımlayarak kodunuzun anlaşılmasını kolaylaştırabilirsiniz. Bu örnek için bunlar değişkenler olacaktır: CashboxType_Ruble'dan CashboxType_Valutnaya'ya kadar değişken;

Modül başlatma bloğunda değerlerini tanımlıyoruz: kCashier_RublevayaType = 1; kCashierType_Currency = 2;

Sonuç olarak kaynak kodu şu forma dönüştürülür: Para Birimi = kCashierType_Currency ise Nakit Hesap = AccountByCode("50.11"); Aksi takdirde Para Birimi = kCashierType_Ruble Then Nakit Hesap = AccountByCode("50.1"); Aksi takdirde Warning("Yazar kasa tipi belirtilmemiş."); endIf;

Sonuç olarak, bence anahtar grupları oluşturmanın yalnızca grupta 4'ten (en fazla 5) fazla öğe olmadığı durumda anlamlı olduğunu belirtmek isterim. Aksi takdirde, birleşik giriş kutusu kullanmak mantıklıdır, çünkü... formda önemli ölçüde daha az yer kaplayacaktır.

Forma bir grup çerçevesi ekleyin ve Form -> Denetim ekle... menü öğesini kullanarak anahtarları bu çerçeveye yerleştirin ve açılan pencerede anahtarları seçin:

Pencerenin sağ tarafında ihtiyacımız olduğu kadar anahtar değerini ekleyin, “Promosyonlar - grupta ilk” kutusunu işaretleyin, böylece bu anahtar otomatik olarak seçilir.

Anahtarları ekledikten sonra ilk değer olan “Paylaşımlar” için veri türünü seçiyoruz, bizim durumumuzda “Menkul Kıymet Türü” değerini atadık:

Ve anahtar değerinin kendisi Veri -> Seçilen değere girilir. Hisseler için bu 0, Tahvil - 1, Bono - 2 ve Birim - 3'tür. Ancak bu verileri girmeden önce sıralamayı kontrol etmeniz gerekir.

Anahtarlar düzgün değilse anahtarlama yapılmayacaktır yani bağın değerini seçemeyeceğiz. Bu özelliği etkinleştirmek için Form -> Çapraz geçiş sırasının ayarlanması menüsünü seçip tüm anahtarları sırayla yerleştirmelisiniz.

Sırayı düzelttikten sonra anahtarların seçilebilir değerini kontrol edin.

Geriye kalan tek şey, program kodunu “Aksiyon” anahtar olayına “Değişiklik durumunda” yazmaktır:

CB Tipi = 0 ise O zaman

Aksi takdirdeIfCBTip = 1 O halde

ThisForm.FormElements.Receipt.Columns.NCD.Availability = 1; // yalnızca NKD'ye izin verdiğimiz tahviller için

Aksi takdirdeIfCBTip = 2 O halde

ThisForm.FormElements.Receipt.Columns.NCD.Availability = 0;

Aksi takdirdeIfCBTip = 3 O halde

ThisForm.FormElements.Receipt.Columns.NCD.Availability = 0;

endIf;

Artık “Tahviller” anahtarını seçtiğinizde varlık sütununun değerini düzenleyebilirsiniz.

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

Giriş alanı

Kural olarak, bir giriş alanı bir nesne 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 (Liste Seçim Modu)

Başka bir formdan seçme (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 bir öğenin listesini değerlerle doldurmak gerekir; başka bir formdan seçim yapmak için, kontrol öğesini dizin verileriyle basitçe ilişkilendirmek yeterlidir. Ancak kontrol düğmeleri için, her bir düğmedeki tıklamaları işlemek için daha fazla kod yazmanız gerekecektir, ancak bu kod çok büyük olmayacaktır:

Prosedür pvAdlandırma Yönetmeliğinin Seçimi (Element, Yön, Standart İşleme)
//Giriş alanı için verileri seç
// bu durumda İsimlendirme dizini
Talep = Yeni Talep;
İstek.Text=
"SEÇMEK
| İsimlendirme.Ürün Olarak Bağlantı
|DAN
| Dizin.Adlandırma AS Adlandırma
|SİPARİŞ VEREN
| Adlandırma.Kod";
TZNomenclature = request.Run().Upload();

//giriş alanında belirtilen geçerli dizin öğesini arayın
CurrentElement = TZNomenclature.Find(Element.value);

TechElement = 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
TechIndex = -1;
Aksi takdirde
// eğer eleman bulunursa indeksini alırız
TechIndex = TZNomenclature.Index(TechElement);
endIf;

// düğmeye basılmasına bağlı olarak yeni bir dizin hesapla
// değişkenin önüne eksi Yön öyle yerleştirilir ki
// üst oka tıklandığında üstündeki öğe gösteriliyordu
// ve dolayısıyla daha küçük bir indeksle
NewIndex = TechIndex-Yön;

// dizindeki elemanların sayısını alıyoruz
// bir çıkar çünkü 8.1'deki tüm koleksiyonlar 0'dan başlar
Öğe Sayısı = TZNomenclature.Quantity()-1;

NovIndex ise< 0 Или НовИндекс >O halde Element Sayısı
// indeksi değiştirirken değer 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
Notify("Dizin sınırına ulaştınız");
Aksi takdirde
// yeni bir değer atayın, “Ürün” değer tablosunun sütununun adıdır
Element.value = TZNomenclature.Get(NewIndex).Product;
endIf;

Prosedürü Sonlandır

Onay kutusu

Çoğu programda bir onay kutusu iki durumu görüntülemeye yarar: işaretli, işaretsiz. 1c'de onay kutusunun üç durumu vardır; üçüncü durumda, onay kutusu işaretli ve aynı zamanda gölgeli olarak görüntülenir. Üç durum yalnızca onay kutusu verileri bir sayıysa ve durumlar aşağıdaki anlamlara sahipse kullanılabilir:

Anahtar

Anahtar, az sayıda olası değer arasından (tercihen beşten fazla değil) bir değer seçmek için kullanılır ve değerler birleştirilemez. Örneğin: bir kişinin cinsiyetini seçmek için uygundur. Başka bir örnek: Diyelim ki bir şirket bir üründe 3 indirimden birini yapıyor ve indirimlerin toplamı olmuyor:

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

Anahtarları kullanırken üç şeyi hatırlamak önemlidir:

      İlk anahtarın "FirstInGroup" özelliğine sahip olması gerekir (bu örnekte "%5 İndirim" anahtarıdır).

      Bir grupla anlamlı bir şekilde ilişkili olan anahtarlar, geçiş sırasını ayarlarken diğer form öğeleri tarafından kesintiye uğramadan arka arkaya gitmelidir. Geçiş sırası "Form -> Geçiş sırasının ayarlanması" menüsünden ayarlanır, bu örnekte şu şekilde görünür:

  1. "FirstInGroup" özelliğine sahip anahtar için seçilen değerin türü ayarlanır.