Как да определите при отваряне на формуляр, че се създава нов елемент?
По правило необходимостта да се определи, че се създава нов елемент възниква, когато нов елемент трябва да бъде предварително попълнен с някои данни. Затова първо ще разгледаме обща техника за попълване на нови обекти с данни.
Основното е, че всички действия, които разработчикът трябва да направи, когато създава нов обект, трябва да бъдат извършени на сървъра.
Освен това трябва да се разделят действията с данните на самия обект и действията с външния вид на неговата форма. Действията с данни трябва да се извършват в самия обект, а външният вид на формуляра трябва да се контролира вече във формуляра, но в сървърната процедура.
Освен това при отваряне на формуляра може да са необходими други действия, например отваряне на асоциирания формуляр, издаване на предупреждение и т.н., които не могат да бъдат извършени на сървъра - те трябва да бъдат извършени във формуляра, но вече в клиентската процедура.
Последователността от събития, които се случват при отваряне на нова форма на елемент, може да бъде представена чрез следната диаграма:
На първо място, когато попълвате нов обект с данни, можете да опитате да го направите без да пишете никакъв код. За да направите това, атрибутите на конфигурационните обекти имат свойствата FillValue и FillFromFillData. Тези свойства ви позволяват визуално (в конфигуратора) да зададете правилата, по които атрибутът ще се попълва с данни при създаване на нов обект.
Ако тези функции не са достатъчни, тогава трябва да използвате функциите на вградения език.
Действията с обектни данни трябва да се извършват в обектния модул, в манипулатора на събитието FillProcessing. Това събитие се предизвиква само когато се създават нови обекти; при отваряне на формулярите на съществуващи обекти това събитие не се задейства. Следователно не е необходимо да разбере дали този обект е нов или не. Трябва даописват само алгоритъма за попълване на обекта с данни. Имайте предвид, че това събитие ще се задейства в няколко случая:
- при интерактивно създаване на нов обект
- при въвеждане на база
- при изпълнение на метода Fill() на обекта
Въпреки това, параметърът FillData, предаден на този манипулатор, може да има различни стойности в зависимост от това как е създаден новият елемент. Например, може да е от препратка към тип, ако нов обект е въведен въз основа на. Или може да бъде от тип Struct, ако новият обект е създаден от интерактивната команда от списъка, където е зададен филтърът. В този случай структурата ще съдържа стойностите на елементите за избор на този списък. Този параметър може също да бъде от тип Undefined, ако новият елемент се създава чрез интерактивна команда от лентата с действия. Това означава, че е полезно да анализирате този параметър във вашия първоначален алгоритъм за попълване.
Процедура при CreationOnServer(Failure, StandardProcessing)
Ако Parameters.Key.Empty() Тогава
Alert("Създаване на нов обект");
И накрая, ако искате да извършите някои действия в манипулатора на събития на формуляра OnOpening, тогава ситуацията е подобна в него, трябва да анализирате параметъра на формата Key.