Съобщение до потребителя 1c 8 2. Съобщения до потребителя в управлявани форми (отново)

Но някои аспекти на работата с обекта „Съобщение до потребителя“ останаха непокрити в него. Например, какво да напишете в полето "Поле", ако името

props се различава от името на полето във формуляра. Какво да напишете в полето "Път към данните". И накрая, най-вкусното е как се работи с табличната част.

Всички изследвания се събират в тестова база данни. Съдържа няколко справочника и документ. Формата на документа има няколко бутона, при натискане върху които се показват различни видове съобщения. Е, сега за всеки момент по ред, давай!!!

Всичко, което пиша по-долу, е тествано на 1C:Enterprise 8.3 (8.3.7.1860). Не е най-новото до момента, но го пиша така, както е.

1. Просто съобщение.

Нека започнем с нещо просто: просто покажете съобщение във формуляра, без препратка към полета, данни и т.н.

Говорих за това по-рано, но за целостта на статията ще я напиша отново. Особено с някои допълнения.

Message1 = ново MessageToUser;
Message1.Text = "1. просто съобщение без никакви обвързвания";
Съобщение1.Съобщение();

Този код може да бъде изпълнен както на клиента, така и на сървъра. Това е почти пълен аналог на линията:

Доклад("1. просто съобщение без никакви обвързвания");

Защо е по-правилно да се общува не с процедура, а с обект. Факт е, че съобщенията, издадени в фонова работа(например при извършване на рутинна процедура по график) не се показват никъде. Но това, което се съобщава от обекта, може да бъде

получаване на сървъра в клиентска сесия с помощта на метода "GetMessagesToUser(...)", докато фоновото задание е активно.

Тук малко те излъгах, никога не съм го проверявал. Напълно възможно е съобщенията, издадени от процедурата „Отчет(...)“ също да бъдат получени от фоново задание, но може би не. Документацията не казва за това, което означава ние

няма да го направим.

И така, заключение: сега винаги правете съобщенията обект, това е добра форма нова платформа, и забравете процедурата. Ако не ви харесва да пишете съобщение в три реда, напишете процедурата си в общ модул и бъдете щастливи. Дори ще стане

много добър тон, защото Ще получите редица предимства:

1. Разширена функционалност на новия обект (повече подробности по-долу)

2. Способността да показвате съобщения по ваш собствен начин. Например в текстово поле или файл, а не в прозорец на съобщение.

3. Възможност за сеч. Например, можете да запазите всички съобщения в база данни или файл или да ги дублирате в дневника, за да направите това, просто настройте процедурата си общ модул. И тогава дебатът е, че програмата не е нищо за потребителя

не информира ще спре завинаги.

2. Съобщение, свързано с атрибут на обект.

Както писах в предишната статия, за да обвържете трябва да попълните полетата „Field“ и „PathKData“. Но не съм разгледал подробно темата в статията.

Така че в пример 2 в документа има заглавен атрибут „Клиент“, трябва да се позиционирате върху него и да докладвате нещо в клиентската процедура. Ето кода, който прави това:

Message2 = ново MessageToUser;
Message2.Text = "2. Съобщение, свързано с атрибута на заглавката на клиента";
Message2.Field = "Клиент";
Message2.DataPath = "обект";
Съобщение2.Съобщение();

И тук са нюансите:

1. Нивата не е нива, т.к в моя пример контролата се нарича "FieldClient", а обектът е "Клиент". Редът Message2.Field = "FieldClient" не работи.

2. Пътят към данните не е “Object.Client”, а просто “Object”, защото Трябва да покажем съобщението не под формата на контрагента, а под формата на текущия документ. "Object.Client" - не работи.

3. Това е пример за работа по клиент. При сървърните процедури е малко по-различно. Това е ВАЖНО, не бъркайте обвързването на съобщенията на сървъра и на клиента.

Ще дам още един пример, за да усетите разликата между клиент и сървър. Факт е, че имаме на разположение обектния метод “SetData(...)”. Помощникът за синтаксис казва „Обектът, с който трябва да има

съобщението е свързано." Това е важно. Например, нека напишем следния код:

Message3 = ново MessageToUser;
Message3.SetData(Object);
Message3.Text = "3. Съобщение, свързано с атрибута на заглавката Number, но няма да бъде свързано, защото обектът не е обект";
Message3.Field = "Номер";
Съобщение3.Съобщение();

Този код няма да работи, защото... на клиента, атрибутът на формуляра „Object“ изобщо не е обект, а някакво гадно нещо, това е, което ни казва дебъгерът за променливата на обекта:

По-точно, потребителят разбира се ще види съобщението, но двойното пляскане върху него няма да доведе до нищо.

Сега нека опитаме същото, но на сървъра. Нека създадем сървърна процедура "Report4OnServer()" и да я извикаме от клиента

&На сървъра
Процедура Report4OnServer()
Message4 = ново MessageToUser;
Message4.SetData(FormAttributesValue("Object"));
Message4.Text = "4. Съобщение, свързано с атрибута на заглавката на организацията";
Message4.Field = "Организация";
Съобщение4.Съобщение();
Край на процедурата

Тук всичко ще бъде наред, единствената забележка към кода е, че променливата „object“ трябва да бъде преобразувана от „FormDataStructure“ в реален обект чрез извикване на процедурата „FormAttributesValue(...)“.

Заключение: методът "SetData(...)" може да се използва само на сървъра, т.к Само на сървъра е възможно получаване на обект.

3. Съобщения, свързани с атрибута на табличната част на обекта

Пропуснах тази тема в предишната статия. Познавайки описаните по-горе нюанси, тук не би трябвало да има проблеми. Ето работния клиентски код:

Message5 = ново MessageToUser;
Message5.Text = "5. Количество на полето за ред 1";
Message5.Field = "Продукти.Количество";
Message5.DataPath = "обект";
Съобщение5.Съобщение();

Въпреки че нюансите са почти еднакви, повторението е майчин урок:

1. Полето не е името на контролата; моята контрола е наречена „Количество на продуктите“, а не само „Количество“. „Продукти“ е името на табличната част, а не контролният елемент, свързан с табличната част.

2. Пътят до данните е обект, просто обект.

3. Номер на ред в квадратни скоби - номериране от нулата и това е номерът на реда, а не идентификаторът на реда в събирането на данни на формуляра. Когато редовете се преместват или изтриват, идентификаторът, зададен при отваряне на формуляра, се запазва и номерата на редовете се преизчисляват.

Това е за този път. Веднага ще спомена неразкрити теми, за които ще пиша по-късно:

1. Как да обвържете съобщения не към текущия обект, а към който и да е обект, така че при двойно щракване да се отвори друга форма

2. Как да обвържете съобщения към формуляр, където няма обекти

3. Как да получавате съобщения за състоянието на изпълнение на дълга фонова работа

4. Какво е „ключ за данни“ и кога трябва да го използвате?

По-долу има база данни с пример, в нея отидете на документа и натиснете три бутона на свой ред. Код в модула формуляр за документи.

1C Съобщение до потребителя показва съобщение на потребителя (след приключване на обработката) или го записва в опашка, ако съобщението не може да бъде показано „точно сега“, например:
Съобщение = Ново съобщение до потребителя();
Message.Text = "Здравей, свят!";
Съобщение.Съобщение();

В много случаи съобщенията се генерират групово по време на определена обработка. Например, когато проверявате голяма таблица, много съобщения за грешка могат да се появят в различни редове на таблицата. Или при обработка на транзакция. В този случай обработката може да се извърши на сървъра или в нормативна задачаи е трудно да се покажат тези съобщения.

1C Съобщение до потребителя записва съобщения в „някаква“ опашка и след приключване на обработката ги показва на потребителя, ако е възможно. В противен случай целият списък със съобщения може да бъде получен с помощта на метода GetMessagesToUser().

За да покажете съобщение на потребителя с помощта на 1C Съобщение до потребителя в конкретен, вече отворена форма, трябва допълнително да зададете идентификатора на формуляра:
Message.DestinationIdentifier = Form.UniqueIdentifier;

За да се покаже съобщението 1C Message to User в изскачащ прозорец до конкретно поле на формуляра, в който кодът се изпълнява в модула, трябва да посочите „пътя“ към него:
Message.Field = "Име"; // където Име е атрибут на формуляр
Message.Field = "Object.Name"; // където Name е атрибутът на обекта (т.е. директорията, чиято форма се редактира)
Message.Field = "Products.Price"; //където Продукти е табличната част на формуляра, Цена е колоната на тази таблична част

За да направите същото, но в модул на друг обект (общ модул), трябва допълнително да посочите обекта (DirectoryObject, DocumentObject и т.н.):
Message.Field = "Име"; //където Name е атрибутът DirectoryObject
Message.SetData(DirectoryObject);
//При щракнете двукратноВ отговор на съобщението формулярът на обекта ще се отвори с изскачащо съобщение за задължителното поле

Друг начин за свързване на съобщение 1C Message to User с обектни данни:
//за справочник, документ..
Message.DataKey = DirectoryLink;
Message.DataPath = "Обект";

//за записи в регистъра
Message.DataKey = RegisterRecordManager.InitialRecordKey; //обикновено атрибутът на главния формуляр, свързан с регистъра
Message.DataPath = "Запис";

В стандартни конфигурации на контролирани формиза тънък клиент, например „Управление на търговията, издание 11“ и „Счетоводство, издание 3“, в общия модул General PurposeClientServer има функция NotifyUser(), която „универсализира“ работата с този обект. Синтаксисът на функциите в различните конфигурации е различен.

Тъй като 1C Message to User генерира списък със съобщения, за да го нулирате (например, преди да извършите сложна обработка), можете да извикате функцията:
GetMessagesUser(True);

В програмите на платформата 1C:Enterprise едно съобщение може да се покаже на потребителя по различни начини.

1. Метод ShowWarning.

ShowWarning(< ОписаниеОповещенияОЗавершении> , < ТекстПредупреждения> , < Таймаут> , < Заголовок> )

Когато използвате този дизайн, в центъра на интерфейса на програмата се появява прозорец с предупреждение.

Параметри:

ОписаниеПълни сигнали(по избор)
Тип: Описание Сигнали. Съдържа описание на процедурата, която ще бъде извикана след затваряне на прозореца за предупреждение със следните параметри: Допълнителни параметри - стойността, която е зададена при създаването на обекта Описание на предупреждението. Ако параметърът не е зададен, след завършване няма да бъде извикана процедура.

TextWarning(задължително)
Тип: Струна; FormattedString. Предупредителен текст.

Изчакване (по избор)
Тип: Номер. Времевият интервал в секунди, през който системата ще чака отговор на потребителя. Когато интервалът изтече, предупредителният прозорец ще се затвори. Ако параметърът не е зададен, тогава времето за изчакване е неограничено. Ако параметърът е отрицателен, ще бъде хвърлено изключение. Стойност по подразбиране: 0.

Заглавие (по избор)
Тип: низ. Съдържа заглавието на предупредителния прозорец. Описание: Показва предупредителен прозорец, но не изчаква да се затвори.

Наличност: Тънък клиент, уеб клиент, дебел клиент, мобилно приложение (клиент).

Забележка: Ако трябва да се изпълни някакъв код, след като потребителят затвори предупредителния прозорец, той трябва да бъде поставен в процедура на отделен модул и описан в параметър.

2. Метод Предупреждение.

В центъра на интерфейса на програмата се появява прозорец с предупреждение. Въпреки това, ако свойството конфигурация Начин на използване Начиние настроен на Не използвайте, тогава методът не работи.

Наличност: Тънък клиент, уеб клиент, мобилен клиент, дебел клиент, мобилно приложение (клиент).

3. Метод ShowUserAlert.

ShowUserAlert(< Текст> , < ДействиеПриНажатии> , < Пояснение> , < Картинка> , < СтатусОповещенияПользователя> , < КлючУникальности> )

Когато използвате този метод, в долния десен ъгъл на интерфейса се появява съобщение.

Наличност: Тънък клиент, уеб клиент, дебел клиент.

4. Докладен метод.

доклад(< ТекстСообщения> , < Статус> )

Наличност: Тънък клиент, уеб клиент, мобилен клиент, сървър, дебел клиент, външна връзка, мобилно приложение (клиент), мобилно приложение (сървър).

5. Обект Съобщение до потребителя.

Проектиран да съхранява параметри на съобщението, които трябва да бъдат показани на потребителя. Ако съобщението все още не е показано на потребителя (това може да се случи, когато работите от страната на сървъра, във фонова работа, външна връзка или уеб услуги), можете да получите натрупаните съобщения, като използвате метода Получаване на съобщения до потребителя.

Свойства: ID на дестинация(TargetID); DataKey; поле; DataPath(DataPath); Текст.

Методи: Съобщение; SetData(SetData).

Съобщението се появява в долната част на интерфейса, в ред.

Съобщение = Ново съобщение до потребителя(); Съобщение. Текст =„Няма достатъчно номенклатура“ ;Съобщение. Поле =

;