1C Yönetilen Formlarda Komutlar ve Düğmeler: Arayüzde Karmaşa Olmadan Ekleme
1C'nin yönetilen formlarında düğmeler ve komutlar oluşturmak için eylemi bir form komutu olarak tanımlayın, görünürlüğünü ise bu komuta bağlı bir düğme/menü öğesi ile sağlayın. Böylece mantık tek bir yerde tutulur ve arayüz düzenli kalır.
Kısaca: komut = eylem, düğme = eylemi gösterme yolu. Tek bir komut; panelde bir düğme olarak, "Diğer/Tüm Eylemler" menüsünde bir öğe olarak ve tablo bölümünün yanında görüntülenebilir.
İçindekiler
Komut ve düğme: Önce neyi oluşturmalı?
Form komutu şunları belirler:
- Ad ve başlık (kullanıcının göreceği şekilde),
- İşleyici (ne çalıştırılacak),
- Yönetilebilirlik (görünürlük/erişilebilirlik, bağlam).
Form düğmesi genellikle yalnızca şunu içerir:
ИмяКоманды— komuta referans.
Pratik kural: İşleyiciyi doğrudan "düğmeye" yazdıysanız, neredeyse her zaman bakımı zorlaştırırsınız. Mantığı komuta taşıyıp arayüzdeki tüm öğeleri buna bağlamak daha iyidir.
Form düzenleyicisinde komut ve düğme oluşturma (önerilen)
- Yönetilen formun "Komutlar" sekmesinde bir komut oluşturun:
- Ad:
МоеДействие - Başlık: "Benim Eylemim"
- Eylem:
ВыполнитьМоеДействие
- İşleyiciyi form modülünde uygulayın:
&НаКлиенте
Процедура ВыполнитьМоеДействие(Команда)
// UI ve kullanıcı etkileşimi - istemcide
// Yoğun mantığı sunucuya taşımak daha iyidir:
ВыполнитьМоеДействиеНаСервере();
КонецПроцедуры
&НаСервере
Процедура ВыполнитьМоеДействиеНаСервере()
// Sorgular, nesne kaydı, hesaplamalar - sunucuda
КонецПроцедуры
- Bir düğme ekleyin (örneğin formun komut paneline) ve şunu belirtin:
ИмяКоманды = "МоеДействие"
Komut "çalışmıyorsa", vakaların %80'inde sorun, Eylem özelliğindeki yordam adının form modülündeki gerçek işleyici adı ile eşleşmemesinden kaynaklanır.
Komutların yerleşimi: Panel, "Diğer", tablo bölümü
Formun öngörülebilir görünmesi için şu şemaya sadık kalın:
- Sık kullanılan eylemler → ana komut paneli (görünür düğmeler).
- Nadir/hizmet eylemleri → "Diğer/Tüm Eylemler" (gürültü yapmamak için).
- Tablo bölümü satırları üzerindeki eylemler → formun üst kısmında değil, tablonun yanındaki panelde.
Tablo bölümünün seçimine/mevcut satırına bağlı olan komutlar için önceden şunları planlayın:
- Komutun ne zaman erişilebilir olduğu (satır var mı? seçim var mı? belge doğru durumda mı?),
- Seçim yokken ne yapılacağı (mesaj, otomatik seçim, yürütmeyi reddetme).
Standart komutları her ne pahasına olursa olsun "yeniden yapılandırmaya" çalışmayın. Platform, kaynağa ait komutların sırasını/görüntülenmesini kısıtlıyorsa, genellikle ya standardı kabul etmek ya da bilinçli olarak kendi komut grubunuzu manuel olarak oluşturmak daha kolaydır.
Programlı olarak komut ve düğme ekleme (uzantılar dahil)
Tipik formu değiştirmek istemediğinizde ancak düğmeyi noktasal olarak eklemeniz gerektiğinde uygundur. Mantık aynıdır: komut eklendi → düğme eklendi → ilişkilendirildi.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// 1) Komut (tekrar eklemeye karşı koruma)
Если ЭтаФорма.Команды.Найти("КомандаМоя") = Неопределено Тогда
КомандаМоя = ЭтаФорма.Команды.Добавить("КомандаМоя");
КомандаМоя.Заголовок = "Моё действие";
КомандаМоя.Действие = "ВыполнитьКомандуМоя";
КонецЕсли;
// 2) Düğme (üst öğe - gerekli komut paneli/grubu)
Если ЭтаФорма.Элементы.Найти("КнопкаМоя") = Неопределено Тогда
КнопкаМоя = ЭтаФорма.Элементы.Добавить(
"КнопкаМоя",
Тип("КнопкаФормы"),
ЭтаФорма.Элементы.ФормаКоманднаяПанель
);
КнопкаМоя.Заголовок = "Моё действие";
КнопкаМоя.ИмяКоманды = "КомандаМоя";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьКомандуМоя(Команда)
// Senaryonuz
КонецПроцедуры
Arayüzün programlı olarak "inşa edilmesi" test etmeyi zorlaştırır ve tipik formdaki kapsayıcı adlarının değişmesi durumunda bozulabilir. Belirli öğe adlarına bağımlılığı en aza indirin ve yalnızca gerektiğinde ekleyin.
Hangi yöntemi seçmeli?
Komut ve düğme ekleme yaklaşımlarının karşılaştırılması
| Yaklaşım | Ne zaman kullanılır? | Avantajlar | Dezavantajlar |
|---|---|---|---|
| Form düzenleyicisi aracılığıyla | Kendi formunuz/yapılandırma özelleştirmesi | Güvenilir, bakımı daha kolay | Form değişikliği gerekir |
| Komut + arayüzde akıllı yerleşim | Eylemi UX'e "temiz" bir şekilde entegre etmek gerekiyor | Daha az görsel gürültü, kullanıcılar için mantıklı | Komutun nerede yaşaması gerektiğini anlamak gerekir (panel/"Diğer"/tablo) |
| Programlı (uzantılar dahil) | Tipik form, değişiklikler istenmiyor | Esnek ve noktasal | Güncellemelerde riskler, daha fazla koşul ve kontrol |
Sık yapılan hatalar
- Komutun Eyleminde olmayan bir yordam belirtilmiş (veya büyük/küçük harf/sembol farklılığı var).
- İşleyici
&НаСервереolarak işaretlenmiş ancak içinde diyaloglar/UI etkileşimi var — başlangıcı&НаКлиентеkonumuna taşıyın. - Düğme oluşturulmuş ancak
ИмяКомандыdoldurulmamış. - Komut var ancak erişilebilirlik/görünürlük koşulları nedeniyle arayüzden "kaybolmuş" (açma mantığını kontrol edin).
- Tablo bölümüne ait bir komut, formun üst paneline çıkarılmış — kullanıcılar onu "yerinde" bulamıyor.
SSS
Tek bir komutla birden fazla düğmeyi/menü öğesini yönetebilir miyim? Evet. Komut tektir, ancak görüntülemeler birden fazla olabilir — ayrımın amacı budur.
İş mantığını nereye yazmalıyım: istemcide mi yoksa sunucuda mı?
Genellikle: Başlatma ve UI — &НаКлиенте, veri işleme/sorgular/kayıt — ayrı bir &НаСервере yordamında.
Bir komutu yalnızca koşullar yerine getirildiğinde nasıl erişilebilir yapabilirim? İşleyicide kontrol yapın (ve mesajla çıkın), ayrıca kullanım kolaylığı için komutu/düğmeyi erişilebilirlik üzerinden devre dışı bırakın (form mimarinize bağlı olarak).
Tablo bölümü için ne daha iyi: ayrı bir komut mu yoksa tablo olay işleyicileri mi? Açık kullanıcı eylemi için neredeyse her zaman komut daha iyidir (anlaşılır düğme/öğe), tablo olaylarını ise arayüz tepkileri için bırakın (vurgulama, özellikleri doldurma vb.).