1c tələb olunan forma elementini düzəldin. İdarə olunan forma elementlərinin proqramlı şəkildə əlavə edilməsi və dəyişdirilməsi

1C: Enterprise platforması idarə olunan formanın elementlərini proqramlı şəkildə əlavə etməyə və dəyişdirməyə imkan verir. Bunun nə üçün lazım ola biləcəyini görək.

Formanın proqram modifikasiyası bir neçə halda tələb oluna bilər:

  • Sonrakı yeniləmə prosedurunu asanlaşdırmaq üçün tipik konfiqurasiyaları yekunlaşdırarkən. Bu halda, yalnız forma modulu dəyişdiriləcək. Modulları yeniləmək formadan daha asandır.
  • Bəzi ümumi alqoritmləri həyata keçirərkən. Məsələn, alt sistemə qoşulmuş bütün obyektlər üçün “Obyektlərin təfərrüatlarının redaktə edilməsinin qadağan edilməsi” altsistemində detalların redaktə imkanını təmin etmək üçün proqramlı şəkildə düymə yaradılır.
  • Bəzi xüsusi alqoritmləri həyata keçirərkən. Məsələn, Nomenklatura arayış kitabında əlavə təfərrüatları redaktə etmək üçün sahələr yaradılır.

İdarə olunan formada siz proqramlı şəkildə əlavə edə, dəyişdirə və silə bilərsiniz:

  • rekvizitlər;
  • yerli əmrlər;
  • elementləri.

Bütün bu əməliyyatlar yalnız serverdə mümkündür.

Proqramlı yenidən formalaşdırmanın məhdudiyyətləri var:

  • Siz yalnız proqramla əlavə edilmiş atributları/əmrləri/elementləri silə bilərsiniz. Siz konfiquratorda yaradılmış obyektləri proqramlı şəkildə silə bilməzsiniz.
  • Atributu əsas kimi təyin etmək mümkün deyil.

Forma əmrlərinin dəyişdirilməsi

Obyekt üçün əmrlərin tərkibini idarə etmək İdarə olunan Forma kolleksiyası var Komandalar

    Əlavə et (< ИмяКоманды >)

    Kəmiyyət ()

    Tapın (< ИмяКоманды >)

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

Əmrlər kolleksiyası həm müştəridə, həm də serverdə mövcuddur. Kolleksiyanın dəyişdirilməsi (Əlavə et () və Sil () üsulları) yalnız serverdə mümkündür. Siz həm müştəridə, həm də serverdə elementlərin sayını (metodları Tap () və Miqdar ()) axtarıb əldə edə bilərsiniz.

Forma əmrləri ilə işləmək nümunəsi olaraq, işləyicini çağıracaq "Tarixi dəyişdirin ..." başlığı ilə yeni ChangeHistory əmri yaradaq. Görüntü Tarixi() . Yaratma forma açıldıqda həyata keçirilir.

&Serverdə
Prosedur OnCreateOnServer(Uğursuzluq, StandardProcessing)
Komanda = Əmrlər. əlavə et( "Dəyişikliklər tarixi");
Komanda . Fəaliyyət = ;
Komanda . Başlıq = "Dəyişikliklərin tarixi...";
EndProcedure
&AtClient
Prosedur Connected_Display History(Command)
// əmr hərəkətləri
EndProcedure

Komanda işləyicisi formada yerləşməlidir və tərtib direktivinə malik olmalıdır &AtClient .

Forma detallarının dəyişdirilməsi

Forma atributlarının tərkibinin oxunması funksiya tərəfindən yerinə yetirilir Təfərrüatları əldə edin(< Путь >) FormAttributes tipli massivi qaytarır. Funksiya parametri ana atributun yolunu müəyyən edir (sətir kimi). Parametr buraxılıbsa və ya boş sətir göstərilibsə, yuxarı səviyyəli etimadnamələr qaytarılır.

Detalların dəyişdirilməsi üsulla həyata keçirilir Redaktə tələbləri(<Təfərrüatlar əlavə edildi>, <Çıxarılan Detallar>) obyekt İdarə olunan Forma. Seçimlər Təfərrüatlar əlavə edildiÇıxarılan Detallar Form Requisite tipli elementləri olan massivlər ötürülür.

Diqqət!

Detalların tərkibinin dəyişdirilməsi prosesi kifayət qədər resurs tələb edir. Əslində, forma yenidən yaradılır. Bununla əlaqədar olaraq, formanın detalları ilə iş toplu rejimdə aparılır.

Gəlin Alıcı adlı yeni forma atributunu yaradaq:


AddedAttributes = Yeni Massiv;
Təfərrüatlar əlavə edildi. Əlavə et(Yeni Form Atributu("Alıcı", New TypeDescription ("DirectoryReference.Counterparties"), "Müştəri");

// Atributların tərkibində dəyişikliklər
);

Forma elementlərinin dəyişdirilməsi

Bir obyektin elementlərinin tərkibini idarə etmək İdarə olunan Forma kolleksiyası var Elementlər. Kolleksiyada bir neçə üsul var:

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

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

    Kəmiyyət ()

    Tapın (< Имя >)

    köçürün(< Элемент>, < Родитель>, < МестоРасположения >)

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

Elementlər kolleksiyası həm müştəridə, həm də serverdə mövcuddur. Kolleksiyanı dəyişdirin (metodları daxil edin () , Əlavə et () , Köçür () və Sil () ) yalnız serverdə mövcuddur. Siz həm müştəridə, həm də serverdə elementlərin sayını (metodları Tap () və Miqdar ()) axtarıb əldə edə bilərsiniz. Kolleksiya elementləri ola bilər:

  • GroupForm;
  • Cədvəl formaları;
  • FormField;
  • Düymə formaları.

Siz proqramlı şəkildə elementləri formalaşdırmaq üçün hadisə idarəçiləri təyin edə bilərsiniz. Bu məqsədlə üsul SetAction(< ИмяСобытия>, < Действие >) .

Əmrlər, atributlar və forma elementləri ilə işləməyin ən ümumi praktiki nümunələrinə nəzər salaq.

Komanda və onunla əlaqəli düymənin əlavə edilməsi:

// Komanda yaradın
Komanda = Əmrlər. əlavə et( "Dəyişikliklər tarixi");
Komanda . Fəaliyyət = "Connected_Display History"; // Formada göstərilən adla prosedur olmalıdır
Komanda . başlıq = "Dəyişikliklərin tarixi...";
// Düymə yaradın və onu komanda ilə əlaqələndirin
Element = Maddələr. əlavə et( "Dəyişikliklər tarixi", Type("FormButton" ));
Element.CommandName = "Dəyişikliklər tarixi";

Atribut və onunla əlaqəli giriş sahəsinin əlavə edilməsi:

// Əlavə edilmiş detalların təsviri
AddedAttributes = Yeni Massiv;
Təfərrüatlar əlavə edildi. Əlavə et(Yeni Forma Atributu ("Alıcı", Yeni Tip Təsviri ( "İstinad Linki. Qarşı tərəflər"), "Müştəri" ));
// Atributların tərkibinin dəyişdirilməsi
EditAttributes(AddedAttributes);
// Giriş sahəsinin yaradılması və atributla əlaqələndirilməsi
Element = Maddələr. Əlavə et("Müştəri" , Növ("FormField" ));
Element . Görünüş = ViewFormFields. Giriş sahəsi;
Element . PathToData= "Alıcı" ;

Forma elementinə hadisə idarəedicisinin təyin edilməsi:

Alıcı. SetAction("Dəyişəndə", "Plug-in_BuyerOnChange");

&AtClient
Prosedur Plugin_BuyerOnChange(Element)
// Hadisə hərəkətləri
EndProcedure

Diqqət!

Metoddan istifadə edərək koddan hadisə işləyiciləri kimi quraşdırılan prosedurlar SetAction(), Connected_ prefiksindən istifadə etmək tövsiyə olunur.

Diqqət!

Proqram axtarışı və detalların, əmrlərin və idarə olunan formanın elementlərinin dəyişdirilməsi nümunələri ilə emal yükləyə bilərsiniz.

Və 1C 8.2 mühitində idarə olunan formada kod quruluşuna Data Transfer Object.

Giriş

"İdarə olunan forma" anlayışının və 1C platformasının əlaqəli anlayışlarının qısa təsviri ilə başlayaq. Platforma mütəxəssisləri bu bölməni keçə bilər.

2008-ci ildə 1C: Enterprise 8.2 platformasının yeni versiyası (bundan sonra İdarə olunan Tətbiq adlandırılacaq) mövcud oldu, bu da interfeys ilə işin bütün təbəqəsini tamamilə dəyişdirir. Buraya komanda interfeysi, formalar və pəncərə sistemi daxildir. Bu, nəinki konfiqurasiyada istifadəçi interfeysinin inkişaf modelini dəyişdirir, həm də müştəri tətbiqi ilə server arasında funksionallığın ayrılması üçün yeni arxitektura təklif edir.
İdarə olunan proqram aşağıdakı müştəri növlərini dəstəkləyir:

  • Qalın Müştəri (Normal və İdarə olunan Başlama Rejimi)
  • Arıq müştəri
  • Veb müştəri
İdarə olunan proqram yeni texnologiya üzərində qurulmuş formalardan istifadə edir. Onlar çağırılır İdarə olunan formalar. Keçid asanlığı üçün köhnə formalar (sözdə müntəzəm formalar) da dəstəklənir, lakin onların funksionallığı inkişaf etdirilmir və onlar yalnız zəngin müştəri işə salma rejimində mövcuddur.
Tərtibatçı üçün idarə olunan formaların əsas fərqləri:
  • Deklarativ deyil, strukturun "piksellə" təsviri. Elementlərin xüsusi yerləşdirilməsi forma göstərildikdə sistem tərəfindən avtomatik olaraq həyata keçirilir.
  • Formanın bütün funksionallığı formada təsvir edilmişdir təfərrüatlarəmrlər. Detallar formanın işlədiyi verilənlər, əmrlər isə yerinə yetirilən hərəkətlərdir.
  • Forma həm serverdə, həm də müştəridə icra olunur.
  • Müştəri kontekstində demək olar ki, bütün proqram növləri mövcud deyil və müvafiq olaraq infobazadakı məlumatları dəyişdirmək mümkün deyil.
  • Hər bir metod və ya forma dəyişəni üçün müəyyən edilməlidir kompilyasiya direktiviİcra yerinin (müştəri və ya server) və formanın kontekstinə çıxışın olub-olmamasını müəyyən edən A.
Forma metodlarının tərtib edilməsi üçün təlimatlar bunlardır:
  • &AtClient
  • &Serverdə
  • &OnServerContextWithout
  • &Müştəridə Kontekstsiz Serverdə
Yuxarıdakıları təsvir edək. Ekran görüntüsü idarə olunan forma və onun modulunun inkişaf rejimində nümunəsini göstərir. Deklarativ təsviri, rekvizitləri, tərtib direktivlərini və s. tapın.

Bütün sonrakı müzakirələr illüstrasiyanın sağ tərəfi, modul kodunun necə qurulacağı və hansı prinsiplərin effektiv müştəri-server qarşılıqlı əlaqəsini həyata keçirməyə imkan verəcəyi barədə olacaq.

Problemi müəyyən edək

1C platformasının yeni versiyasının fəal şəkildə istifadə edilməsindən bir neçə il keçdi və həm 1C, həm də onun çoxsaylı tərəfdaşları tərəfindən bir çox həllər (konfiqurasiyalar) buraxıldı.
Tərtibatçılar bu müddət ərzində formalar yaratarkən müştəri-server qarşılıqlı əlaqəsi prinsipləri haqqında ümumi anlayışı inkişaf etdiriblərmi və yeni memarlıq reallıqlarında proqram modullarının həyata keçirilməsinə yanaşma dəyişibmi?

Kod strukturunu (forma modulu) eyni tipik konfiqurasiyanın bir neçə formasında nəzərdən keçirin və nümunələri tapmağa çalışın.
Struktur dedikdə, tərtibatçı tərəfindən qruplaşdırma metodları və bu metodların tərtibi üçün direktivlər üçün ayrılmış kod bölmələri (ən çox bunlar şərh bloklarıdır) nəzərdə tutulur.
Misal 1:
Hadisə idarəedici bölməsi Metod - müştəridə Metod - serverdə Metod - müştəridə Xidmət prosedurları və funksiyaları bölməsi Giriş nəzarəti köməkçi funksiyaları
Misal 2:
Xidmət prosedurları və funksiyaları Ödəniş sənədləri Qiymətli əşyalar Hadisə idarəçiləri
Misal 3:
Serverdə xidmət prosedurları Müştəridə xidmət prosedurları Kontekstsiz serverdə xidmət prosedurları Başlıq hadisə işləyiciləri Komanda hadisəsi işləyiciləri
Misal 4:
Ümumi təyinatlı prosedurlar Forma hadisə idarəçiləri "Əlaqə məlumatı" altsisteminin prosedurları
Əslində, kod strukturu yoxdur və ya yumşaq desək, 8.1 formalarında olana bənzəyir:

  • Qeyri-informativ sözlər "Ümumi, Xidmət, Köməkçi".
  • Utancaq müştəri və server üsullarını ayırmağa çalışır.
  • Tez-tez metodlar interfeys elementləri ilə qruplaşdırılır "Cədvəl hissəsi ilə işləmək Məhsullar, Əlaqə məlumatları".
  • Metodların və kod qruplarının özbaşına yerləşdirilməsi. Məsələn, Hadisə İşləyiciləri bir formada yuxarıda, digərində aşağıda, üçüncüdə isə ümumiyyətlə vurğulanmaya bilər və s.
  • Və unutmayaq ki, bunların hamısı eyni konfiqurasiya daxilindədir.
  • Bəli, "Ümumi, Xidmət, Köməkçi" sözlərinin həmişə eyni yerlərdə olduğu konfiqurasiyalar var, lakin ...
Niyə kod strukturuna ehtiyacınız var?
  • Baxımın sadələşdirilməsi.
  • Öyrənməni sadələşdirin.
  • Ümumi/vacib/uğurlu prinsiplərin müəyyən edilməsi.
  • …sizin seçiminiz
1C-dən mövcud inkişaf standartı niyə kömək etmir?
İdarə olunan bir forma yazarkən tövsiyə olunan ITS disklərində və müxtəlif "Tərtibatçıların Təlimatları ..." da dərc olunan prinsiplərə baxaq.
  • Server zənglərinin sayını minimuma endirin.
  • Serverdə maksimum hesablama.
  • Kontekstdən kənar server zəngləri kontekst zənglərindən daha sürətlidir.
  • Müştəri-server qarşılıqlı əlaqəsini nəzərə alan proqram.
  • və s.
Bunlar tamamilə doğru olan şüarlardır, bəs onları necə həyata keçirmək olar? Zənglərin sayını necə minimuma endirmək olar, klient-server rejimində proqramlaşdırma nə deməkdir?

Dizayn nümunələri və ya nəsil hikməti

Müştəri-server qarşılıqlı əlaqəsi onilliklər ərzində müxtəlif proqram texnologiyalarında istifadə olunur. Əvvəlki bölmədə qeyd olunan sualların cavabı çoxdan məlumdur və iki əsas prinsipdə ümumiləşdirilmişdir.
  • Uzaqdan Fasad(bundan sonra Uzaqdan Giriş İnterfeysi)
  • Məlumat ötürmə obyekti(bundan sonra Məlumat ötürmə obyekti adlandırılacaq)
Martin Fowlerə söz, bu prinsiplərin təsviri:
  • uzaqdan giriş üçün potensial olaraq nəzərdə tutulan hər bir obyekt olmalıdır aşağı qranulyarlıq interfeysi, bu, müəyyən proseduru yerinə yetirmək üçün tələb olunan zənglərin sayını minimuma endirəcək. … Faktura və onun bütün bəndlərini ayrıca tələb etmək əvəzinə, bir zəngdə fakturanın bütün bəndlərini oxumaq və yeniləmək lazımdır. Bu, obyektin bütün strukturuna təsir edir...Unutmayın: uzaqdan giriş interfeysi domen məntiqini ehtiva etmir.
  • ... qayğıkeş ana olsaydım, övladıma mütləq deyərdim: “Heç vaxt məlumat ötürmə obyektləri yazma!” Əksər hallarda məlumat köçürmə obyektləri bundan başqa bir şey deyil şişmiş sahə dəsti... Bu iyrənc canavarın dəyəri yalnız ehtimaldadır bir zəngdə birdən çox məlumatı şəbəkə üzərindən ötürmək- paylanmış sistemlər üçün böyük əhəmiyyət kəsb edən texnika.
1C platformasında şablon nümunələri
İdarə olunan formanı inkişaf etdirərkən tərtibatçı üçün mövcud olan API bu prinsiplərin bir çox nümunəsini ehtiva edir.
Məsələn, OpenForm() metodu, tipik "qaba" interfeys.
OpenParameters = Yeni Struktur("Parametr1, Parametr2, Parametr3", Dəyər1, Dəyər2, Dəyər3); Forma = OpenForm(FormName, OpenParameters);
v8.1 üslubu ilə müqayisə edin.
Form = GetForm (FormName); Form.Parameter1 = Dəyər1; Form.Parameter2 = Dəyər2; Form.Open();

İdarə olunan forma kontekstində "Məlumatların ötürülməsi obyektləri" dəsti. Fərqləndirmək olar sistemlitərtibatçı tərəfindən müəyyən edilmişdir.
Sistem olanlar bir və ya bir neçə forma məlumat elementi şəklində müştəridə tətbiq obyektini modelləşdirir. Siz onları forma təfərrüatları ilə bağlı xaricində yarada bilməzsiniz.

  • DataForms Structure
  • DataForms Collection
  • DataFormStructureCollection
  • DataFormsTree
Məlumat ötürmə sistemi obyektlərinin proqram tiplərinə və əksinə çevrilməsi aşağıdakı üsullarla həyata keçirilir:
  • ValueVDataForm()
  • FormDataToValue()
  • CopyFormData()
  • ValueVFormProps()
  • FormAttributeToValue()
Mövcud həlli uyğunlaşdırarkən çox vaxt açıq-aydın çevrilmə istifadə olunur. Metodlar FormDataCollection əvəzinə ValueTable kimi daxiletmə parametrlərini (xüsusiyyətini) gözləyə bilər və ya metod tətbiq obyektinin kontekstində müəyyən edilib və formadan birbaşa zəng üçün əlçatmaz olub.
Misal 1C v8.1:
// FillUsersCache(DepartmentReference) forması kontekstində müştəri üzərində
Nümunə 1C v8.2:
// forma kontekstində serverdə ProcessingObject = FormAttributeToValue("Obyekt"); ProcessingObject.FillCacheUsers(DepartmentReference); ValueVFormAttribute(ProcessingObject, "Obyekt");

Strukturu tərtibatçı tərəfindən müəyyən edilən məlumat ötürmə obyektləri həm müştəridə, həm də serverdə mövcud olan növlərin kiçik bir hissəsidir. Çox vaxt "kobud" interfeys metodlarının parametrləri və nəticələri kimi aşağıdakılar istifadə olunur:

  • İbtidai növlər (sətir, nömrə, boolean)
  • Struktur
  • Uyğunluq
  • massiv
  • Tətbiq obyektlərinə keçidlər (unikal identifikator və mətn təsviri)
Nümunə: metod statusu dəyişdirmək üçün sifarişlərin siyahısını qəbul edir və səhvlərin təsvirini müştəriyə qaytarır.
&OnServerWithoutContext Funksiyası ServerChangeOrderStatus(Sifarişlər, NewStatus) Səhvləri = Yeni Uyğunluq(); // [sifariş][xətanın təsviri] Sifarişlərdən Hər Sifariş üçün Döngü StartTransaction(); DocOb cəhdi = Order.GetObject(); …. digər hərəkətlər, ola bilsin ki, təkcə sifarişlə deyil... İstisna CancelTransaction(); Errors.Insert(Sifariş, TəsvirError()); Cəhdin sonu; EndCycle; Qaytarma xətası; EndFunction // ServerChangeOrderStatus()

Kodun strukturlaşdırılması

İdarə olunan forma modulunun əks etdirməli olduğu əsas məqsədlər və həllə yanaşmalar.
  • Müştəri və server kodunun aydın şəkildə ayrılması. Unutmayaq ki, icra zamanı bunlar hər birində mövcud funksionallıq əhəmiyyətli dərəcədə fərqlənən iki qarşılıqlı prosesdir.
  • Uzaqdan giriş interfeysinin aydın seçimi, hansı server metodlarını müştəridən çağırmaq olar, hansını çağırmaq olmaz? Uzaq interfeys metodlarının adları "Server" prefiksi ilə başlayır. Bu, kodu oxuyarkən idarəetmənin serverə keçidini dərhal görməyə imkan verir və kontekstli göstərişlərdən istifadəni asanlaşdırır. Qeyd edək ki, rəsmi tövsiyə (ITS) ChangeOrderStatusOnServer() kimi postfikslərlə adlandırma üsullarını təklif edir. Bununla belə, təkrar etmək lazımdır ki, bütün server üsulları müştəridən çağırıla bilməz və buna görə də məntiqi əlçatanlıq kompilyasiya yerindən daha vacibdir. Buna görə də, “Server” prefiksi ilə biz yalnız müştəri üçün mövcud olan metodları qeyd edirik, nümunə metodu ServerChangeOrderStatus() adlandırılacaq.
  • Oxuma qabiliyyəti. Zövq məsələsi, modul serverdə forma yaratmaq prosedurları və uzaqdan giriş üsulları ilə başlayanda sifarişi qəbul edirik.
  • Davamlılıq. Yeni kodun əlavə ediləcəyi yer dəqiq müəyyən edilməlidir. Əhəmiyyətli bir məqam, konfiqurator tərəfindən avtomatik olaraq yaradılan metod kötükləri modulun sonuna əlavə olunur. Forma elementi hadisə işləyiciləri ən çox avtomatik yaradıldığından, hər bir işləyicini modulda başqa yerə sürükləməmək üçün müvafiq blok sonuncu yerləşdirilir.
Aşağıda sadalanan məqsədləri həyata keçirən modulun əsas strukturu verilmişdir.
  • Qrafik seçim - icranın əsas axını aydın şəkildə göstərir.
  • Mətn seçimi strukturu yeni forma moduluna tez daxil etmək üçün şablon dizayn nümunəsidir.

//////////////////////////////////////////////////////////////////////////////// // <(c) Автор=""Tarix=""/> // <Описание> // // ////////////////////////////////////////////////////////// / //////////////////////////// // MODUL DƏYƏNİŞLƏRİ ////////////// / //////////////////////////////////////////////////////// // ///////////// // SERVERDƏ //******* SERVERDE HADİSƏLƏR ******* &Serverdə Serverdə Yaradılma Proseduru( Uğursuzluq, StandardProcessing) //EndProcedure işləyicisinin məzmununu daxil edin //******* UZAKTAN ACCESS INTERFACE ******* //********* SERVER ÜZRƏ BİZNES MƏNTİQİ **** *** ///////// //////////////////////////////////// ///////////// //////////////////// // ÜMUMİ MÜŞTƏRİ VƏ SERVER ÜSULLARI ///////// /////////////// /////////////////////////////////////////// //////////////// /////// // MÜŞTƏRİ HAQQINDA //********* BİZNES MƏNTİQİ MÜŞTƏRİDƏ ******* //********* ƏMRƏLƏR ******* //********* MÜŞTƏRİDƏ HADİSƏLƏR ****** ////////////// ///////////////////////////////////////////////// //////////////// / / ƏSAS PROQRAM OPERATORLARI

Əlaqədar suallar
Yekun olaraq, müştəri-server qarşılıqlı əlaqəsini proqramlaşdırarkən düşünmək üçün faydalı olan bir neçə sahəni təsvir edirik.
  • Uzaqdan giriş interfeysinin həyata keçirilməsi üçün seçimlər. Asinxroniya, dənəvərlik...
  • önbelleğe alma. 1C uğursuz bir memarlıq qərarı verdi, keşləməni yalnız ümumi modulların çağırış metodları səviyyəsində tətbiq etdi və idarəetmə seçimlərini təmin etmədi (yeni vaxt, tələb əsasında sıfırlama).
  • Gizli server zəngləri. Texnoloji xüsusiyyətləri unutma, müştəridə bir çox "zərərsiz" əməliyyatlar platformanı serverə daxil olmağa təhrik edir.

1. Daxiletmə sahəsi
2. Qeyd xanası
3. Keçid

Giriş sahəsi

Bir qayda olaraq, giriş sahəsi obyektin atributu ilə əlaqələndirilir və onun məlumatlarını əks etdirir. Bu, bəlkə də ən ümumi elementlərdən biridir, dəyəri seçmək üçün bir neçə yol var:

Siyahıdan seçim (SelectFromListMode)

Başqa formadan seçim (Seç düyməsini)

İdarəetmə düymələri

Yuxarıdakı nümunələrin həyata keçirilməsi tərtibatçıdan ciddi səy tələb etmir. məsələn, siyahı rejimi üçün elementin siyahısını dəyərlərlə doldurmaq, başqa formadan seçmək üçün sadəcə idarə elementini lüğətin məlumatları ilə bağlamaq kifayətdir. Ancaq idarəetmə düymələri üçün hər bir düyməni basmaq üçün daha çox kod yazmalısınız, baxmayaraq ki, bu əla olmayacaq:

Prosedur pvNomenklatura Seçim Reqlamenti(Element, İstiqamət, StandartEmal)
//Giriş sahəsi üçün məlumatları seçin
// bu halda istinad Nomenklatura
Sorğu = Yeni Sorğu;
Request.Text=
"SEÇİN
| Nomenklatura. Maddə kimi istinad
| FROM
| Kataloq.Nomenklatura AS Nomenklatura
|SİFARİŞ
| Nomenklatura.Kod";
TZNomenklatura = Request.Execute().Upload();

//biz giriş sahəsində göstərilən kataloqun cari elementini axtarırıq
CurrentElement = TKNomenclature.Find(Element.value);

Əgər CurrentItem = Müəyyən edilməmişsə
// əgər element tapılmazsa, indeks nömrəsini təyin edin
// dəyərlər cədvəlindən kənarda, çünki ən birinci element
// qiymət cədvəlində 0 indeksi var
CurrentIndex = -1;
Əks halda
// əgər element tapılarsa, onun indeksini alın
TekIndex = T3Nomenklatura.Index(TekElement);
EndIf;

// düymənin basılmasından asılı olaraq yeni indeksi hesablayın
// dəyişənin qarşısında minus İstiqamət in order to
// yuxarıdakı oka klikləməklə yuxarıdakı element göstərilir
// və buna görə də daha aşağı indekslə
NewIndex = CurrentIndex-Direction;

// kataloqdakı elementlərin sayını əldə edin
// bir çıxar, çünki 8.1-dəki bütün kolleksiyalar 0-dan başlayır
Maddələrin sayı = TK Nomenklaturası Kəmiyyət () -1;

Əgər NewIndex< 0 Или НовИндекс >Sonra Elementlərin sayı
// dəyişən zaman indeks dəyərlər cədvəlindən kənardadırsa
// yəni. onun sayı ən böyük indeksdən böyükdür və ya 0-dan azdır
// dəyəri dəyişdirməyin və bu barədə istifadəçiyə məlumat verməyin
alert("Siz kataloqun limitinə çatdınız");
Əks halda
// yeni dəyər təyin edin, "Məhsul" dəyər cədvəli sütununun adıdır
Element.dəyər = TKNomenklatura.Get(NewIndex).Məhsul;
EndIf;

EndProcedure

Yoxlama qutusu

Əksər proqramlarda qeyd qutusu iki vəziyyəti göstərmək üçün istifadə olunur: işarələnmiş, işarələnməmiş. 1s-də onay qutusunun üç vəziyyəti var, üçüncü vəziyyətdə qeyd qutusu göstərilir - təyin edilmiş və kölgələnmiş kimi. Üç ştat yalnız bayraq məlumatları rəqəm olduqda mövcuddur və dövlətlər aşağıdakı mənaları daşıyır:

Keçid

Keçid, az sayda mümkün (tercihen beşdən çox olmayan) bir dəyər seçmək üçün istifadə olunur, dəyərlər birləşdirilə bilməz, Məsələn: bir insanın cinsini seçmək üçün uyğundur. Başqa bir misal: deyək ki, şirkət bir məhsul üçün 3 endirimdən birini verir, endirimlər isə kümülatif deyil:

Bu halda, radio düymələrindən istifadənin rahatlığı ondan ibarətdir ki, onların hər biri "Seçilə bilən dəyər" xüsusiyyətində müəyyən edilmiş müəyyən dəyərə malik ola bilər. Və sonra "5% Endirim" 5 və ya 0.05 dəyərini saxlaya bilər.

Radio düymələrindən istifadə edərkən nəzərə alınmalı üç vacib şey var:

      Birinci radio düyməsi "FirstInGroup" xüsusiyyətinə malik olmalıdır (bu nümunədə "5% Endirim" radio düyməsidir).

      Mənasına görə bir qrupa aid olan keçidlər digər forma elementləri tərəfindən kəsilmədən yan keçid sırasının qəbulunda ardıcıl olaraq getməlidir. Keçmə qaydası "Forma -> Traversal sifariş parametrləri" menyusundan təyin edilir, bu misal üçün belə görünür:

  1. Seçilmiş dəyərin növü "FirstInGroup" xassəsinə malik keçid tərəfindən təyin edilir.

1C-də interfeysin inkişafı iki hissədən ibarətdir - menyunun və ya iş masasının hazırlanması və 1C ekran formalarının hazırlanması. İstifadəçinin 1C-də işlədiyi pəncərələrə 1C ekran formaları və ya sadəcə 1C formaları deyilir.

Proqramdakı istifadəçilər 1C formaları ilə işləyirlər. Üstəlik, istifadəçilər yalnız 1C formalarını görürlər. Buna görə də, proqramda işləməyin rahatlığı baxımından bu, vacib elementlərdən biridir. Eyni zamanda, ən mürəkkəb alqoritmi proqramlaşdırmaqdansa, 1C formasını inkişaf etdirmək üçün daha çox vaxt öldürə bilərsiniz.

Proqramçıların ümumi səhvi hər şeyi öz zövqünə uyğun çəkməyə çalışmaqdır. Fonu mavi və başlıqları yaşıl edin. Və ya qara üzərində sarı. Və ya digər sevimli proqramında bunu necə bəyənir.

Təəssüf ki, bu yanaşma səhvdir, çünki istifadəçilər konfiqurasiyada əksəriyyət təşkil edən standart 1C formaları ilə işləməyə alışmışlar. Öz velosipedinizi çəkmək, onu “Copyright Vasya Pupkin” kimi Kuryer yazıları ilə qeyd etmək açıq şəkildə pis formadır.

İndi 1C formalarının çəkilməsi ilə bağlı qısa bir təhsil proqramından keçəcəyik.

Formalar 1C nədir

Form 1C istifadəçiyə təqdimetmə üsuludur. Tipik olaraq, bir forma doldurulması lazım olan bir sıra sahələr və nəzarət etmək üçün düymələr dəsti (menyu əmrləri). Forma 1C əksər 1C obyektləri üçün mövcuddur.

1C qalın müştəri "müntəzəm" 1C formalarından istifadə edir. Bu o deməkdir ki, proqramçı sadəcə olaraq siçan ilə 1C formasını çəkir, necə ki, bu, Visual Studio və digər çərçivələrdə edilir.

1C nazik müştəri və 1C veb müştəri idarə olunan 1C formalarından istifadə edir. Bu o deməkdir ki, onların ölçüsü, forması 1C və onlarda sahələrin yeri siçan ilə dəyişdirilə bilməz. Onlar parametrlərə əsasən avtomatik olaraq yaradılır. Növbəti dərslərdə 1C idarə olunan formalar haqqında danışacağıq.

1C-də tipik 1C konfiqurasiyalarının əksər formaları istifadəçiyə tanış olan öz tipik təqdimatına malikdir.

1C formaları necə işləyir

1C-də istifadəçinin işinin məntiqi (sifarişi) aşağıdakı kimidir:

Beləliklə, istifadəçi həmişə 1C siyahı formasından başlayaraq 1C element formasına keçərək 1C formaları ilə işləyir. Proqramçı formaları çəkməyibsə, 1C standart olaraq formaları yaradır. Onlar təbii olaraq ideal gözəllik və mükəmməllikdən məhrumdurlar, lakin onlara işləməyə imkan verirlər.

Avtomatik yaradılan 1C siyahı forması adətən minimum sahələrdən ibarətdir (müvafiq olaraq kod / ad və tarix / nömrə). Avtomatik yaradılan element forması adətən yuxarıdan aşağıya sadalanan bütün sahələri (rekvizitləri) ehtiva edir.

1C formasının vəzifəsi istifadəçi hərəkətlərini açmaq və gözləməkdir. Fəaliyyətdə, reaksiya verin. Beləliklə, hadisə işləyiciləri 1C forma modulunun əsasını təşkil edir. Bunlar istifadəçi 1C formasında bəzi hərəkətlər etdikdə çağırılan funksiyalardır.

1c formaları haradadır

1C Enterprise rejimində, demək olar ki, hər hansı bir 1C obyektini (istinad kitabı, sənəd, hesabat, emal və s.) seçdiyiniz zaman bu obyekt üçün bir forma görəcəksiniz.

Konfiquratorda, konfiqurasiya pəncərəsində sizə lazım olan obyekti seçin, Form 1C alt filialını görmək üçün onun filialını genişləndirin.

Başqa bir seçim obyekt redaktorunu açmaqdır (siçan ilə iki dəfə və ya kursoru qoyun və Enter) və Form 1C sekmesine keçin.

Budur 1C formalarının siyahısı. Əlavə edilmiş 1C formalarından biri standart forma kimi əlavə edilə bilər (1C siyahı forması, 1C element forması və s.).

1C formalarının yaradılması

Yeni 1C forması əlavə etmək üçün Əlavə et düyməsini sıxmalısınız (klaviaturada daxillər). Mövcudunu daxil etmək üçün siçan ilə üzərinə iki dəfə klikləyin.

Konstruktor sizə 1C formasının növünü - 1C elementinin formasını, siyahı seçməyi təklif edəcək. Burada siz həmçinin 1C formasında komanda panellərini əlavə edə və ya silə bilərsiniz. Çox vaxt bu parametrlər standart olaraq olduğu kimi qalır.

1C forması açılır, standart olaraq doldurulur - ona əlavə olunan 1C obyektinin bütün təfərrüatları. Konstruktorun ikinci nişanında tələb olunan sahələrin xüsusi siyahısını işarələyə bilərsiniz.

Lazımsız detallar silinə bilər. Bunun üçün bir və ya bir neçə sahəni seçin və Del düyməsini basın.

Digər atributları boş yerə köçürmək üçün onları eyni şəkildə seçin və siçan ilə sürükləyin.

1C formasına yeni təfərrüatlar əlavə etmək üçün Məlumatların Yerləşdirilməsi panelindəki düyməni (menyu Forması / Məlumatların Yerləşdirilməsi) vurun, əlavə etmək istədiyiniz elementlər üçün xanaları, həmçinin "Etiketləri daxil edin" və "Avtomatik yerləşdir" onay qutularını yoxlayın. .

Alternativ olaraq, aşağıdakı paneldə müvafiq düyməni klikləməklə və ya menyudan Form/Daxiletmə İdarəsini seçməklə sadəcə nəzarət əlavə edə bilərsiniz. Mausun sol düyməsi ilə idarəetmə (sahə) üzərinə iki dəfə sıxılır və onun xassələri açılır. "Data" xüsusiyyəti atribut adını ehtiva edir. Burada dəyişdirilə və ya təyin edilə bilər.

İdarəetmənin xassələrində idarəetmənin görünüşünü idarə etmək üçün qeyd qutuları da var. Yoxlama qutularının köməyi ilə siz seçin, açılan, aydın, görünmə və əlçatanlıq düymələrini aktivləşdirə və söndürə bilərsiniz.

Demək olar ki, bütün sənəd formaları əlfəcinlərdən istifadə edir. Əlfəcin digər idarəetmə ilə eyni şəkildə əlavə olunur (yuxarıya baxın), yalnız Panel idarəetməsi seçilməlidir. Panel səhifəsi əlavə etmək üçün üzərinə sağ klikləyin və Səhifə əlavə et seçin. Panel səhifələrindəki digər idarəetmə elementləri (sahələr) sadəcə olaraq sürüklənir və salınır.

1C formasının ölçüsünü dəyişmək üçün kursoru 1C formasının kənarına aparın, siçanın sol düyməsini sıxın və sadəcə olaraq 1C formasının kənarını dartın.

1C formasının işləməsi üçün - yəni. istifadəçi hərəkətlərinə cavab olaraq bir şey etdi - işləyici funksiyaları əlavə etməlisiniz. İstənilən elementin xassələrini (siçanın sol düyməsi ilə üzərinə iki dəfə vurmaqla) və ya 1C formasının özünü (eyni şəkildə forma başlığında) daxil edin. Xüsusiyyətlər pəncərəsinin ən aşağı hissəsində "Tədbirlər" bölməsi var. Rahat bir hadisə seçin (bütün sahələr üçün adətən "OnChange", "OnOpen" forması üçün) və böyüdücü şüşə düyməsini basın. Onun hadisə idarəedicisi açılacaq.

Düymələr üçün əlavə etmək eynidir. Bununla birlikdə, ixtiyari işləyicilərə əlavə olaraq, bu forma üçün standart olanlardan birini seçə bilərsiniz (istinad forması üçün bunlar bəzi standart hərəkətlər, sənəd forması üçün, digərləri). Sadəcə olaraq "Fəaliyyət" xüsusiyyətində standart hərəkətlərdən birini seçin və ya öz işləyicinizi etmək istəyirsinizsə xaç üzərinə klikləyin.

Yəqin ki, heç bir alqoritm verilənlər bazasını istifadəçilərin məlumatları daxil edərkən baş verən xətalardan qoruya bilməz. İnsan diqqətsizliyi ilə bağlı əsas problemlər aşağıdakı siyahıda müəyyən edilə bilər:

  • Obyektin yanlış seçimi;
  • Adda səhv miqdar və ya yazı səhvi;
  • Kataloqların ikiqat elementləri, onların qeyri-adiliyi və ya yenidən qiymətləndirilməsi;
  • Proqramın düzgün hesablanması və düzgün işləməsi üçün vacib olan sahələrin doldurulmasına məhəl qoymamaq.

Son problemin həlli 1C proqramının səkkizinci versiyası üçün forma detallarının doldurulmasını yoxlamaqdır.

Adi forma üçün tamamlama yoxlanışı

Forma istifadəçi tərəfindən açıldıqda, işə salma rejimi "Normal proqram" olarsa, doldurulmalı olan elementlər qırmızı nöqtəli xətt ilə vurğulanır (şək. 1).

Yuxarıdakı nümunədən göründüyü kimi, "Malların və xidmətlərin satışı" sənədinin məcburi sahələri "Nömrə" və "Podratçı"dır. Bu halda, "Nömrə" sahəsi redaktə üçün mövcud deyil. Bu o deməkdir ki, infobazaya sənəd yazılan zaman həmin təşkilat üçün müəyyən edilmiş nömrələmə qaydalarına uyğun olaraq avtomatik olaraq doldurulacaq.

Kataloq elementlərinin qeyd edilməsi və ya doldurulmamış tələb olunan sahələri ehtiva edən sənədlərin yerləşdirilməsi istisnaya səbəb olacaq (Şəkil 2).

düyü. 2

Hansı sahənin doldurulmadığı barədə daha ətraflı məlumatı xidmət mesajı pəncərəsində görmək olar.

Sahənin məcburi doldurulması barədə məlumat verən işarənin özü forma elementinin xüsusiyyətlərində təyin olunur. Bunun üçün:

  1. Konfiquratorda formanı açın;
  2. Forma elementinə sağ klikləyirik və "Xüsusiyyətlər" pəncərəsini çağırırıq;
  3. "İstifadə" alt menyusunda AutoMarkUnfilled və AutoSelectUnfilled qutularını yoxlamaq lazımdır (şək. 3);

Birbaşa yoxlama, bir qayda olaraq, obyektin modulunda qeyd olunur.

Kataloqlar və ötürülməyən sənədlər üçün elementi qeyd edərkən doldurulma yoxlama prosedurunu çağırmaq məsləhətdir. Natamam doldurulmuş sənədlər, əgər həyata keçirilirsə, məlumat bazasında qeyd edilə bilər və hərəkətlərin formalaşmasından əvvəl, yəni davranış zamanı yoxlama prosedurunu çağırmaq daha yaxşıdır. Məcburi xanaları ehtiva edən emal və hesabatlarda yoxlamanın birbaşa düyməyə basma emalında aparılması məqsədəuyğundur.

Siz ValueFilled("Dəyər") funksiyasından istifadə edərək sahəyə ötürülən dəyərin boş (standart dəyər) ilə fərqləndiyini yoxlaya bilərsiniz. Nəzərə alın ki, əgər sahə kompozit məlumat növüdürsə, bu funksiyanın yerinə yetirilməsi istisna yaradır.

İdarə olunan Formalarda Doğrulama

Müştəri-server versiyasında platformanın xüsusiyyətləri doldurma çekində öz izini buraxır.

Əvvəlcə bu iş rejimində bir obyektə girərkən hansı prosedurun həyata keçirildiyini başa düşməlisiniz.

Beləliklə, "Qeyd et", "OK", "Göndər" düyməsini basdıqdan sonra:

  1. Müştəridə "Yazmadan əvvəl" proseduru adlanır;
  2. Məlumatlar serverə ötürülür və serverdə forma modulunda qeydə alınan hadisələr baş verir (burada ProcessingFillCheckOnServer prosedurunu yerinə yetirmək olar);
  3. Forma məlumatları serverdəki obyekt moduluna ötürülür (standart ProcessingCheckFilling prosedurunu işə salmaq imkanı var);
  4. Moduldan verilənlər serverdə forma moduluna qaytarılır və BeforeWriteOnServer proseduru baş verir;
  5. Məlumat obyekt moduluna qaytarılır və başqa bir BeforeWrite proseduru baş verir;
  6. Obyekt birbaşa verilənlər bazasına yazılır.

Bu sxemin istənilən nöqtəsində CheckFill() funksiyasını daxil edə bilərsiniz. Xassələrində “Yoxlamanı doldur” atributunun “Səhv verin” (Şəkil 4) dəyərinə malik olan təfərrüatları nəzərdən keçirdikdən sonra bu funksiya, əgər onlardan ən azı biri doldurulmayıbsa, “Yanlış” qaytaracaq.

HandleFillCheck() və ProcessFillCheckOnServer() işləyiciləri arasındakı fərqlər

İdarə olunan proqramın interfeysinin həm obyekt atributlarını, həm də birbaşa forma atributlarını ehtiva edə biləcəyini nəzərə alaraq, bu iki prosedur ayrılır. Eyni zamanda, işləyicilərə ötürülə bilən parametrlər baxımından oxşardırlar:

  1. İmtina (burada, yoxlamadan sonra onun nəticəsi ötürülür);
  2. CheckedAttributes (məlumat növü massivdir, əgər doldurulmayıbsa, o zaman xassələrin "Doldurulmasını yoxla" olaraq təyin edilmiş bütün detallar yoxlanılacaq, əks halda proqramla seçilmiş detallar işlənəcək).

ProcessingFillingCheckOnServer() proseduru redaktə olunan obyektlə birbaşa əlaqəsi olmayan atributları yoxlamağa imkan verir. Hər bir proqramçı nəyi və nə dərəcədə yoxlamaq istədiyinə özü qərar verir.

ProcessingFillingCheck() proseduru əsas detalları yoxlayır.