Məzmuna keç
Educora
Orta18 dəq7 / 14

Klient-server və idarə olunan formalar

Kodun harada icra olunduğunu kompilyasiya direktivləri ilə idarə et, idarə olunan formanın elementlərini, rekvizitlərini və əmrlərini öyrən, `ПриСозданииНаСервере` kimi hadisələri emal et və server çağırışlarını qənaətlə istifadə et.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • &НаКлиенте, &НаСервере, &НаСервереБезКонтекста direktivlərini düzgün seçmək
  • Formanın elementlərini, rekvizitlərini və əmrlərini fərqləndirmək
  • Forma hadisələrini emal etmək və modal olmayan dialoqlar qurmaq

Leyla Bakıdakı ofisdə brauzerdə sənəd açır, verilənlər bazası isə başqa şəhərdəki data-mərkəzdə yerləşən serverdədir. Leylanın kompüteri ilə server arasındakı hər «söhbət» vaxt aparır. Ona görə 1C-də hər prosedur üçün göstərmək lazımdır: o, klientdə (istifadəçinin kompüterində) işləyəcək, yoxsa serverdə?

Kompilyasiya direktivləri

DirektivİngiliscəHarada icra olunurForma məlumatları
&НаКлиенте&AtClientklientdəəlçatandır
&НаСервере&AtServerserverdə, forma ilə birlikdəəlçatandır, amma serverə göndərilir
&НаСервереБезКонтекста&AtServerNoContextserverdə, yalnız parametrlərləəlçatan deyil
&НаКлиентеНаСервереБезКонтекста&AtClientAtServerNoContexthəm klientdə, həm də serverdəəlçatan deyil

Klientdə yalnız interfeyslə işləmək olar. Sorğular, obyekt modeli (Справочники.Товары.СоздатьЭлемент()), ТаблицаЗначений və istinaddan nöqtə ilə rekvizit oxumaq (Товар.Цена) yalnız serverdə mümkündür. Bu qaydanı pozan kod ya kompilyasiya olunmur, ya da icra zamanı xəta verir.

İdarə olunan formanın quruluşu

  • Rekvizitlər (Реквизиты) — formanın məlumatları. Obyekt formasında əsas rekvizit Объект-dir: Объект.Дата, Объект.Товары.
  • Elementlər (Элементы) — ekranda görünənlər: sahələr, cədvəllər, qruplar, düymələr. Onlar rekvizitlərə bağlanır.
  • Əmrlər (Команды) — istifadəçinin hərəkətləri; hər əmrin Hərəkət (Действие) proseduru var.
  • Modul — formanın kodu: hadisə emalçıları və köməkçi prosedurlar, hər biri öz direktivi ilə.
  1. 1
    Formanı yarat

    ПриходТовара sənədini aç, Формы vərəqində Добавить bas, Форма документа seç və Готово bas. Forma redaktoru açılacaq.

  2. 2
    Əmr əlavə et

    Команды vərəqində yeni əmr yarat (məsələn, Очистить), Действие xassəsindəki lupa düyməsi ilə emalçını yarat, sonra əmri siçanla formanın əmr panelinə çək.

  3. 3
    Hadisəni bağla

    Cədvəldə Товар sütununu seç, xassələrdə ПриИзменении hadisəsinin lupasına bas — modulda ТоварыТоварПриИзменении proseduru yaranacaq.

Forma hadisələri və server çağırışları

Forma açılanda əvvəlcə serverdə ПриСозданииНаСервере işləyir (burada parametrlər oxunur və məlumatlar hazırlanır), sonra klientdə ПриОткрытии. Yazma zamanı ПередЗаписью (klient) və ПередЗаписьюНаСервере (server) çağırılır. Aşağıdakı nümunədə mal seçiləndə onun qiyməti serverdən alınır.

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

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

&НаСервереБезКонтекста
Функция ЦенаТовара(Товар)
    Возврат Товар.Цена;  // через точку от ссылки - только на сервере
КонецФункции
ЦенаТовара kontekstsiz çağırışdır: serverə yalnız bir istinad gedir, bütün forma yox.

Modal olmayan dialoqlar

Brauzerlər modal pəncərələri sevmir, ona görə müasir konfiqurasiyalarda köhnə Вопрос() əvəzinə ПоказатьВопрос() istifadə olunur. Cavab bildiriş emalçısına gəlir; onu ОписаниеОповещения (NotifyDescription) təsvir edir və emalçı prosedur Экспорт olmalıdır.

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

&НаКлиенте
Процедура ОчиститьЗавершение(Ответ, ДополнительныеПараметры) Экспорт
    Если Ответ = КодВозвратаДиалога.Да Тогда
        Объект.Товары.Очистить();
    КонецЕсли;
КонецПроцедуры
ЭтотОбъект (ThisObject) emalçının yerləşdiyi formadır. Yeni platforma versiyalarında eyni işi Асинх və Ждать sözləri ilə də yazmaq olar.

Əsas fikirlər

  • Hər forma prosedurunun direktivi var: &НаКлиенте, &НаСервере, &НаСервереБезКонтекста.
  • Sorğular, obyektlər, ТаблицаЗначений və istinaddan nöqtə ilə oxuma yalnız serverdə mümkündür.
  • Forma = rekvizitlər (məlumat) + elementlər (görünüş) + əmrlər (hərəkətlər) + modul.
  • ПриСозданииНаСервере serverdə birinci, ПриОткрытии klientdə sonra işləyir.
  • Server çağırışlarını azalt: heç vaxt dövrdə çağırma, kontekstsiz çağırışa üstünlük ver.

Özünü yoxla

10 sual. Hər düzgün cavab XP qazandırır.

1 / 10
Hansı direktiv kodu serverdə icra edir, amma forma məlumatlarını serverə göndərmir?