İçeriğe geç
Educora
Orta18 dk7 / 14

İstemci-sunucu ve yönetilen formlar

Kodun nerede çalıştığını derleme yönergeleriyle yönet, yönetilen formun öğelerini, özniteliklerini ve komutlarını öğren, `ПриСозданииНаСервере` gibi olayları işle ve sunucu çağrılarını tutumlu kullan.

Kendini test et
Bu derste öğreneceklerin
  • &НаКлиенте, &НаСервере ve &НаСервереБезКонтекста arasında doğru seçim yapmak
  • Bir formun öğelerini, özniteliklerini ve komutlarını ayırt etmek
  • Form olaylarını işlemek ve kipsiz iletişim kutuları oluşturmak

Leyla, Bakü'deki ofiste tarayıcıda bir belge açıyor; veritabanı ise başka bir şehirdeki veri merkezinde, bir sunucuda duruyor. Leyla'nın bilgisayarı ile sunucu arasındaki her “konuşma” zaman alır. Bu yüzden 1C'de her prosedür için nerede çalışacağı belirtilmelidir: istemcide (kullanıcının bilgisayarında) mı, sunucuda mı?

Derleme yönergeleri

YönergeİngilizcesiNerede çalışırForm verileri
&НаКлиенте&AtClientistemcideerişilebilir
&НаСервере&AtServersunucuda, formla birlikteerişilebilir, ama sunucuya gönderilir
&НаСервереБезКонтекста&AtServerNoContextsunucuda, yalnızca parametrelerleerişilemez
&НаКлиентеНаСервереБезКонтекста&AtClientAtServerNoContexthem istemcide hem sunucudaerişilemez

İstemcide yalnızca arayüzle çalışılabilir. Sorgular, nesne modeli (Справочники.Товары.СоздатьЭлемент()), ТаблицаЗначений ve bir referanstan noktayla öznitelik okumak (Товар.Цена) yalnızca sunucuda mümkündür. Bu kuralı çiğneyen kod ya derlenmez ya da çalışırken hata verir.

Yönetilen formun yapısı

  • Öznitelikler (Реквизиты) — formun verileri. Nesne formunda ana öznitelik Объект'tir: Объект.Дата, Объект.Товары.
  • Öğeler (Элементы) — ekranda görünenler: alanlar, tablolar, gruplar, düğmeler. Özniteliklere bağlanırlar.
  • Komutlar (Команды) — kullanıcı eylemleri; her komutun bir Eylem (Действие) prosedürü vardır.
  • Modül — formun kodu: olay işleyicileri ve yardımcı prosedürler, her biri kendi yönergesiyle.
  1. 1
    Formu oluştur

    ПриходТовара belgesini aç, Формы sekmesinde Добавить'a tıkla, Форма документа (belge formu) seç ve Готово. Form düzenleyicisi açılır.

  2. 2
    Komut ekle

    Команды sekmesinde yeni bir komut oluştur (örneğin Очистить), Действие özelliğindeki büyüteç düğmesiyle işleyicisini oluştur, sonra komutu fareyle formun komut çubuğuna sürükle.

  3. 3
    Bir olayı bağla

    Tablodaki Товар sütununu seç ve özelliklerde ПриИзменении (OnChange) olayının büyütecine tıkla; modülde ТоварыТоварПриИзменении prosedürü oluşur.

Form olayları ve sunucu çağrıları

Form açılırken önce sunucuda ПриСозданииНаСервере (OnCreateAtServer) çalışır (parametreler burada okunur ve veriler hazırlanır), ardından istemcide ПриОткрытии (OnOpen). Kaydederken ПередЗаписью (istemci) ve ПередЗаписьюНаСервере (sunucu) çağrılır. Aşağıdaki örnekte bir ürün seçildiğinde fiyatı sunucudan alınır.

1C
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Объект.Ссылка.Пустая() Тогда
        Объект.Комментарий = "Создан из формы";
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ТоварыТоварПриИзменении(Элемент)
    ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
    ТекущиеДанные.Цена = ЦенаТовара(ТекущиеДанные.Товар);
    ТекущиеДанные.Сумма = ТекущиеДанные.Количество * ТекущиеДанные.Цена;
КонецПроцедуры

&НаСервереБезКонтекста
Функция ЦенаТовара(Товар)
    Возврат Товар.Цена;  // через точку от ссылки - только на сервере
КонецФункции
ЦенаТовара bağlamsız bir çağrıdır: sunucuya tüm form değil, yalnızca bir referans gider.

Kipsiz iletişim kutuları

Tarayıcılar kipli pencereleri sevmez; bu yüzden modern konfigürasyonlarda eski Вопрос() yerine ПоказатьВопрос() (ShowQueryBox) kullanılır. Yanıt bir bildirim işleyicisine gelir; bunu ОписаниеОповещения (NotifyDescription) tanımlar ve işleyici prosedür Экспорт olmalıdır.

1C
&НаКлиенте
Процедура Очистить(Команда)
    Оповещение = Новый ОписаниеОповещения("ОчиститьЗавершение", ЭтотОбъект);
    ПоказатьВопрос(Оповещение, "Очистить табличную часть?", РежимДиалогаВопрос.ДаНет);
КонецПроцедуры

&НаКлиенте
Процедура ОчиститьЗавершение(Ответ, ДополнительныеПараметры) Экспорт
    Если Ответ = КодВозвратаДиалога.Да Тогда
        Объект.Товары.Очистить();
    КонецЕсли;
КонецПроцедуры
ЭтотОбъект (ThisObject), işleyicinin bulunduğu formdur. Yeni platform sürümlerinde aynı şey Асинх (Async) ve Ждать (Await) sözcükleriyle de yazılabilir.

Önemli noktalar

  • Her form prosedürünün bir yönergesi vardır: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста.
  • Sorgular, nesneler, ТаблицаЗначений ve referanstan noktayla okuma yalnızca sunucudadır.
  • Form = öznitelikler (veri) + öğeler (görünüm) + komutlar (eylemler) + modül.
  • ПриСозданииНаСервере önce sunucuda, ПриОткрытии sonra istemcide çalışır.
  • Sunucu çağrılarını azalt: döngüde çağırma, bağlamsız çağrıları tercih et.

Kendini test et

10 soru. Her doğru cevap XP kazandırır.

1 / 10
Hangi yönerge kodu sunucuda çalıştırır ama form verilerini oraya göndermez?