Предаване на резултат от заявката към таблица с управляван формуляр
Както винаги, задачата за разработване на проект за работа през http стана. Ръководството каза - има 8.2, има уеб клиент. Напред и с песен.
Докато динамичните списъци бяха хвърлени във формуляри или таблиците бяха свързани с регистри, всичко изглеждаше ясно и развитието вървеше добре, но на определен етап беше необходимо да се направят селекции и да се хвърли резултатът в таблици. И тогава се оказа, че е невъзможно да се направи това чрез разтоварване на резултата в таблица. В резултат на това в кода започнаха да се появяват много функции на &AtServer, които всъщност бяха идентични. Четимостта на кода не се увеличи от това.
В резултат на това моите колеги предложиха следния алгоритъм.
В общия модул, който е достъпен както за сървъра, така и за управляваната форма (моят модул се нарича General PurposeClientServer), създаваме функцията ExecuteQueryIntoTable. Той ще изпълни получената заявка, ще заобиколи резултата от заявката, ще формира структура от всеки ред на резултата и ще добави всяка завършена структура към масива.
&OnServer Функция ExecuteQueryToTable ( QueryText , ParameterStructure ) Export Z = Нова заявка ( QueryText ); За всеки параметър от ParameterStructure Loop З . SetParameter( Параметър. Ключ, Параметър. Стойност); Краен цикъл; Резултат = Z . Изпълни(). разтоварване(); StructString = "" ; ColumnArray = Нов масив; За всеки резултат от резултата. Цикъл на колони АКО НЕ StructString = "" Тогава StructString = StructString + ", " ; EndIf; StructureString = StructureString + Res. Име ; Масив Колони. Add(Res. Name); Краен цикъл; StringArray = Нов масив; За всяка резолюцияЦикъл на резултата StringStructure = Нова структура(StructureString); За всеки брой от ArrayColumns Loop StringStructure. вмъкване (col, res[col]); Краен цикъл; Масив от низове. Добавяне (StringStructure); Краен цикъл; Върнат масив от низове; Крайна функция
В управляван формуляр се нуждаем от една функция на &AtServer за целия формуляр, която ще извика функцията на общия модул и ще му предаде параметри, защото това не може да бъде направено от процедура или функция &AtClient на управляван формуляр.
След това се нуждаем от друга процедура на управляваната форма &OnClient, с помощта на която ще вмъкнем резултата в таблицата на формата.
Всичко. Подготвителната част приключи. След това, за да попълните таблицата със стойности в управлявания формуляр с резултата от заявката, трябва да въведете последното извикване на процедура в кода, както следва:
QueryText = "ИЗБЕРЕТЕ . след това текста на заявката. " ; ParameterStructure = Нова структура( "Параметър1, Параметър2, Параметър3" , ParameterValue1 , ParameterValue2 , ParameterValue3 ); // Да приемем, че формулярът има таблица със стойности с името OurTable Поставете QueryDataIntoTable ( QueryText, Parameters Structure, OurTable);
Важно: Заявката трябва да бъде съставена по такъв начин, че върнатият резултат да е структурно идентичен с нашата таблица със стойности, т.е. типовете стойности на колони в резултата от заявката трябва да съвпадат с типовете стойности на колони в нашата таблица със стойности, а имената на колоните в резултата от заявката трябва да съвпадат с имената на колоните в таблицата със стойности.
Ето такъв алгоритъм. Няма да дъвча кода, според мен всичко е ясно там. Мега-гуру, моля, не ритайте силно.