Sending messages via the VK API using PHP for the lazy. Personal messages for VKontakte communities

The article continues the series of articles “First steps in development on 1C”.

In it we will look at the methods of informing the user that are present in the 1C:Enterprise platform 8, and also focus your attention on some features of the operation of these mechanisms; these features are related to the mode of use of the modality.

Applicability

The article discusses the functionality:

  • Interface in the “Version 8.2” version for the configuration developed on the 1C:Enterprise platform 8.2.19.130
  • Taxi interface for configuration developed on the 1C:Enterprise platform 8.3.4.496 to 8.3.9+
  • Taxi interface for a configuration developed on the 1C:Enterprise platform 8.3.10-8.3.11

How to display a message to the user in 1C

Displaying messages in user mode solves a number of problems:

  • reflection of the progress of the current process (showing the stage of execution of the process; showing the calculated values ​​​​obtained during the operation of the algorithm);
  • displaying errors to the user for possible correction;
  • issuing recommendations;

Message types:

  • terminator, which stops the execution of the program and does not allow it to continue until the user reads this message and executes certain actions. For example, the user will be presented with a question on the screen that will need to be answered Yes or No. Until the user responds, the program does not execute further actions;
  • introductory messages that are simply displayed to the user and allow further work (i.e., used in alert mode).

Termination messages should be error messages, and introductory messages: recommendations, messages about the current stage of the process and display of calculated values ​​(debug print).

Introductory messages are intended to provide the user with some information.

It is necessary that the user familiarize himself with it and, possibly, take some actions that are described in this message.

It is very important that the user actually reads these messages, so they should only contain important information.

Test and debugging messages should not be issued to the user, because sooner or later he will begin to ignore absolutely all messages.

In the concept of a managed interface, the approach to issuing a message has changed somewhat. It is now tied to the form in which it originated. It can no longer be closed so that the text is completely invisible.

You cannot unpin a message box from a form.

Function syntax:

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

Those. the first parameter is the text itself.

The second parameter (message status) is optional. You can specify values ​​for the status: Normal, Important, Very important etc.

From given value depends on which icon will be located next to the message. However, this only works in the normal interface.

In the managed interface concept, the icon is always in the form exclamation point, it cannot be redefined.

The fact is that if a message is generated at the time of writing a directory element, the following situation may occur.

User clicks on a button Save and close, in this case the message is displayed in the corresponding window (on the right of the form).

But the form closes instantly, and the user will not see that any information was displayed for him.

Therefore, in the concept managed application It is recommended to display introductory messages using so-called alerts. An example of incorrect use of a function To report presented in the figure.

However, the function To report can be used to display information about certain errors, for example, at the time of document posting.

In this case, the system can be informed that the form does not need to be closed and show the user what errors occur when posting the document.

Function To report fully supported in Platform 8.3. It can be used, and it will work (both in the file version and in the client-server version).

But it should also be noted that the function To report There is further development– this is a message class for the user, which allows, in addition to displaying a message, to bind it contextually to any form elements.

For example, an error message can be tied to a form element, which is very clear to the user. We will return to consider this issue a little later. Function To report there is an interesting feature.

Thus, the program code in Platform 8.3 can be executed both on the Client side and on the Server side.

In this case, the client program code is responsible for interaction with the user, i.e. On the client side, forms are opened and reports are displayed.

Various dialog documents are also displayed only on the client. They cannot be executed on the server because the server does not have the ability to interact with users.

But the function To report can be executed both on the Client side and on the Server side. In this case, the use of the method To report on the Server does not mean at all that the message will be displayed on the Server, there is simply nowhere to display them.

This means that if we display a message in the server procedure using this method, they will accumulate in some buffer and they will be displayed on the screen only when the server procedure ends and returns to the Client.

At this point, the system will request data from the buffer and display it on the screen.

The same feature applies to the class Message to User. The figure shows an example of using the method To report on the Server side.

As a result of using the method To report on the Server side, messages were displayed on the screen on the Client side.

An alert mechanism is needed to inform the user that “something” has happened in the system and that “something” requires the user’s attention. Alerts are generated by two scenarios:

  1. By the platform itself when interactively recording or changing an object
  2. By the developer when calling a method in the code .

The notification itself is a small window that appears, as a rule, in the lower right corner and informs about the completed action. Within a few seconds it gradually fades and disappears. At the same time, if you hover your mouse cursor over the notification, it does not go away and you can read it carefully.

In addition, alerts can be accessed in the corresponding area of ​​the information panel (the “History” button at the bottom left of the application form in the “Version 8.2” interface option).

To create your own alerts, you must use the global context method ShowUserAlert(). Its syntax before version 8.3.10 is presented below:

ShowUser Alert (<Текст>, <НавигационнаяССылка>, <Пояснение>, <Картинка>)

The first parameter contains the text that will be displayed in the notification.

Then, as the second parameter, you can pass a certain navigation link to an element information base(the element that corresponds to the text of our message). When a user clicks on an alert, the link will be followed.

Using the third parameter, you can pass an explanation for the message, i.e. some extended description.

You can also assign a picture that displays the notification status.

It should be noted that all these parameters are optional. Below is an example of use this method(in the configurator and in user mode in the “Version 8.2” interface option).

In the version of the platform 8.3.10.216 for the “Taxi” interface, the notification mechanism was significantly improved in order to improve the usability of both the thin and web clients. For this reason, the parameters passed to the method have also changed ShowUserAlert(). Now the syntax looks like this:

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

It can be seen that the second parameter, previously called Navigational Link, got a new name ActionWhenClicked. This is due to the fact that now it has become possible to transfer not only a string with navigation link, but also a description of the alert. This is illustrated in the screenshot below:

As can be seen from the example, we now have the ability to programmatically process a click on a notification window, according to the logic that is necessary.

Next parameter User Alert Status appeared for the first time. It indicates the status of the alert (Information or Important).

In the case of the Important option, if the user has not responded to the message, then after it is hidden from the screen, it can be read through the Notification Center (more about it below). In the case of the Information option, the notification is deleted without being stored in this center. Let's rewrite the code from our example as below:

After executing the command, we get approximately this view of the application window:

A button with a bell icon has appeared in the toolbar, which calls up the above-mentioned Notification Center. It accumulates new important alerts to which the user has not yet responded.

If there are any alerts in the Center, a small orange dot appears next to it to attract the user's attention. The user can open the Notification Center, read the text and, if necessary, take some actions.

From the Center, the alert is cleared by clicking on the clear button, but if there is some action associated with the alert, then as soon as the user clicks on the text of the message, it will also disappear.

And finally, the last parameter added was Key of Uniqueness. You can use it to find the alert displayed on the screen and change it. If there is no alert with this parameter, a new alert will be shown.

As you can see, the possibilities provided by the corresponding method have become even greater! But these are not all the changes in the notification mechanism.

As you may have already noticed, their appearance. Alerts now look more modern and ergonomic, but they cannot be moved around the screen or resized. Please note that in our example, the notification text simply did not fit entirely in the window itself, and the user will be able to read it in full only by opening the Notification Center. Therefore, you should not write a large amount of text in the notification text.

New features also include the simultaneous display of up to three alerts on the screen.

This concludes our acquaintance with programmatic formation alerts. However, remember that alerts are generated not only by the developer programmatically, but also by the platform itself at the time of interactive recording or changing an object. And often this fact causes misunderstanding primarily among novice users: why are these service alerts needed, which, by the way, cannot be turned off?

Let's imagine this simple situation: The user has set a filter in some list for convenience. Let's say he did this in the form of a list in the Nomenclature directory. Then, after some time, I decided to introduce new element with the name “Chair”, which does not match the previously installed filter. Enters it, writes it down and...? And he doesn't see it on the list. What will the average user do? Of course, he will enter it a second time, but will not see it again. This may be followed by a third, fourth, fifth time. When he gets tired of entering the same thing over and over again, he will finally ask you: where does everything go?

This is precisely why the platform displays these service alerts, informing the user that their action has been completed. In our example, at the time of interactive recording, the user will see the following notification:

Termination messages

Termination messages are those messages that will not allow work until the user performs certain actions, i.e. until it processes the message.

We will talk about the possibility of using termination messages in Platform 8.3 a little later (in Lately They try not to use them, so the example considered is more relevant to Platform 8.2).

There are two methods for issuing termination messages Warning And Question. Warning differs from Question because it has a single button OK.

A question may specify different sets of answer options ( Not really, YesNoCancel, OK, OKCancel, RepeatCancel, AbortRepeatSkip), which are specified using the parameter.

Let's display some warning using the line (for example, in a managed application module):

Warning(“The base will now be open”);

To open a managed application module, select the object in the configuration tree Configuration, call context menu and select item Open a managed application module.

IN in this case, when the application starts, a window will be displayed that is modal. A modal window overlaps all windows that exist in the application. Until we process this window, no further actions are possible.

The function works in a similar way Question.

Syntax:
Question(<ТекстВопроса>,<Кнопки>,<Таймаут>,<КнопкаПоУмолчанию>,<Заголовок>,
<КнопкаТаймаута>);

Only the first two parameters are required. For the second parameter, the data type is composite ( Dialogue ModeQuestion or ListValues). Third parameter ( <Таймаут> ) characterizes the time interval in seconds during which the system will wait for a user response.

When the interval expires, the question window will be closed. Similar parameter( <Таймаут> ) is also present in the function Warning.

As an example of using the function Question You can use the following code, written in a managed application module:

Please note that these methods ( Warning And Question) are not available on the Server. And this is logical, because interface methods cannot be executed on a Server where there is no user.

Features of use modal windows in Platform 8.3

In platform 8.3, there are operating modes with and without modality. The default setting is Do not use modality mode.

In this case, the use of termination messages is impossible. If it is necessary to use termination messages (functions Warning And Question) you should change the value of the configuration property on Use.

The modal window is displayed at the very top and blocks work with other windows until the actions with the modal window are completed. In addition, execution stops program code at the place where this window is called. Code execution will continue only after the modal window is closed.

Firstly, problems with using modal windows arise for mobile application. Secondly, in the browser, window modality is implemented using separate pop-up windows.

Pop-up windows are often disabled by default browser settings. The user has to be forced to set the permission for these windows.

Browsers for tablet computers and for phones in most cases they do not support pop-ups at all.

To replace functions Question And Warning new methods have been developed: ShowQuestion, ShowWarning.

These methods allow you to call a window, but do not stop the execution of the program code. Technically, this is achieved by forming a pseudo-window inside the parent window. The pseudo-window does not overlap the parent window. After opening such a window, the code continues to execute.

Receiving and processing user-entered values ​​is carried out in a separate procedure, which is called when the dialog box is closed.

Function syntax ShowWarning:

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

Parameter <ОписаниеОповещенияОЗавершении> (optional)

Data type: DescriptionAlerts.

Contains a description of the procedure that will be called after the warning window is closed.

Function syntax ShowQuestion:

ShowQuestion(<ОписаниеОповещенияОЗавершении>, <ТекстВопроса>, <Кнопки>, <Таймаут>, <КнопкаПоУмолчанию>, <Заголовок>, <КнопкаТаймаута>)

The first three parameters are required.

Below is an example of using the function.

Class MessageToUser

Basic convenience of the message class Message to User is that this is a contextual message (unlike methods Warning And Question).

Messages can be tied to a specific screen element. This object is also available on the Server.

It should be noted that, firstly, this object needs to be created. For example: Message = New MessageToUser;

Thus we create an instance of this object.

Secondly, you need to specify the message text in a separate property.

Thirdly, in the property Field you can specify which form element this message must be tied.

Attention! To bind to the desired form field, pay attention to the initialization of properties PathToData And Data Key. For a document, when placing code in an object module, you can write:

Message.DataPath = “Object”;
Message.DataKey = ThisObject.Link;

To open the document module, in the object (document) editing window, go to the tab Other press the button Object module.

For the experiment, we will place the code in the object module of a document.

Below is the result obtained in user mode for Platform 8.3.

It should be noted that messages output using the new system object Message to User V general case are not terminating. Those. the system will allow the user to continue further actions without responding to the displayed messages.

But, firstly, these messages are quite noticeable. Secondly, messages are usually displayed to the user at the time of recording elements of directories or processing documents, i.e., when some checks are performed. And if errors were detected, the user will see these same messages.

Accordingly, when errors are detected, the transaction is canceled, i.e. recording of a directory element is prohibited, or posting of a document is prohibited.

Thus, a kind of emulation of the termination message occurs. Because the action is canceled until the user reacts to the entered message, it will be impossible to complete the action, for example, posting a document.

But, on the other hand, it is possible to close the document without conducting it, without reacting to the message in any way. Therefore, these messages to the user are not terminating.

Process status notification

Exists special function, with which you can display the approximate progress of a process.

Syntax: State(<ТекстСообщения>, <Прогресс>, <Пояснение>, <Картинка>)
Options:<ТекстСообщения>And<Пояснение>– optional, type – Line.
The text is displayed on a special status bar.
<Прогресс>The parameter is also optional, but visual.
Type: Number. Progress indicator value (from 1 to 100).
<Картинка>also an optional parameter.
When processing any event, periodic calls of a function like:

In this case, the labels may change, and the values ​​of the Progress parameter may change.

A function can be called from one procedure (function) or from several. This way you can track the execution status of the process.

If you want to take a closer look at the notification mechanism, stop right now and read our new article Displaying the progress of long-running operations in 8.3.10. It no longer explains at the beginner level all the subtleties and underwater rocks operation of this mechanism.

We are finishing our introduction to ways to inform the user. We hope that you have an understanding of in what situations one or another method should be used.

I would like to once again draw your attention to the fact that if your configuration (version 8.3.3+) involves working using a web client, then:

  • at the configuration level the modality mode setting must be set to “Do not use”
  • The code must use methods of the asynchronous user interaction model. Such methods begin with the words Show or Begin.

You can read more about refusing to use modal windows in the 1C:Enterprise 8.3 platform in the final article of the series. And we move on and, finally, begin to study the long-awaited Taxi interface, which has already been mentioned more than once in our materials.

Today I’ll tell you about a new one interesting feature"Messages for the VKontakte community." With its help, any user can write a message to the community administrator via private messages, and the administrator, in turn, will respond on behalf of the community.

To enable it, go to “Community Management”. Next, set the switch in the “Community Messages” block to “Enabled”. Additionally you can add separate link to the left column of your VKontakte menu using the "Add to" checkbox left menu". To save the changes, click the "Save" button below.

Now, having entered the community, the “Send message” button should appear in the right column. With its help, any user can send a message to the community.

All messages received in this way will be displayed in the community and in the left column.

In the future, communication occurs with the user through " Private messages", and from the community through "Community Messages".

When you hover over a dialogue, the correspondence can be added to important or completely deleted. You can also make a message important within a correspondence.

When deleting, you can mark the message as spam or block the user.

Another one important function- ability to mark messages as answered. Let's imagine a situation where a user wrote to you, but give an answer in this moment You can not. It’s okay, the community has 4 message tabs for this.

  • Important - those messages that you have marked in dialogues or within correspondence;
  • Unreplied - those messages that were read, but for some reason you did not give any response;
  • Unread - new messages that have not yet been read.

You can reply to a message within a conversation using a special icon above the dialogue. Here you can add a message to "Important".

That's all. I hope for you this opportunity will be useful.

In this lesson I will show you how download music from VKontakte using the browser extension from savefrom.net. The first step is to install " Savefrom.net assistant". Follow the link and follow the instructions to install the extension for your browser. Do not pay attention to what the instructions say about youtube. Our task is simply to install the assistant.

In this lesson I will tell you how to cancel a vote in VK if you accidentally put it in a poll. If you realized that you made a mistake and would like to re-vote, then there are several ways to solve this problem - using the VKontakte site itself or using third party service. It’s these methods that we’ll talk about today.

In this lesson I will tell you how to put an emoticon in VKontakte status.

Everyone makes mistakes. Errors also occur when people interact with user interfaces(user interfaces). Sometimes they occur due to human error, and sometimes the reason lies in the application itself. Whatever the reason, mistakes and how you deal with them have a huge impact on ( user experience). Unhelpful error messages can cause the user to become frustrated and find a replacement for your app.

In this article, we'll look at how you can optimize to avoid user errors and how to create effective error messages.

What is an error message?

An error message is a screen that appears when something goes wrong that prevents the user from completing the desired action. This could be anything: incompatible operations, incorrect data entry, the application's inability to connect to the server, etc.

Every error, regardless of the reason, becomes a stumbling block for your users and prevents them from further interacting with the application. Fortunately, the right approach to emerging problems will help reduce this obstacle.

It's easier to prevent than to fix

If you're developing an application, you should be aware of the most common interactions that can lead to errors. For example, it is common to find it difficult to complete a form on the first try, or unable to sync data due to a poor network connection. These cases must be taken into account to minimize errors. In other words, it is better to prevent them by offering advice to the user and being flexible.

For example, if you offer a service for finding and booking hotels, what's the point of making past dates available for selection and then displaying an error message?

A wise solution in this case is provided by Booking.com: their date range selector allows you to select only the current or subsequent dates, and thus there is no way for a person to make a mistake.

Error messages about incorrect data entry

Form validation is necessary to inform the user about any inaccuracies in the data he entered. Good form validation contains four important elements:

1. Correct time (built-in validation)

Users really don’t like to waste time filling out a long form and then only find out at the very end that they made some mistake somewhere.

Validation should immediately inform users that the information they entered is correct. Main principle good form validation is: Talk to users! Tell them what's going wrong! This will help them reduce the time it takes to correct errors.

2. Right place

Your messages should always be placed in the context of action. If you want to inform the user that an error has occurred in a specific field, display a message next to that field - preferably to the right of it, or, if this is not possible, directly below it.

Example on the left: The information entered was not verified in a timely manner, the error message is out of context and does not offer any guidance to the user
Example on the right: Messages inform the user about specific inaccuracies in the data they entered, presented in context and in real time

3. Right color (intuitive design)

Color is one of the best tools when developing error messages because it works on an instinctive level. Using red for error messages, yellow for warning messages, and green for success messages is incredibly powerful. However, make sure that your colors digital interface available to users. This important aspect high-quality visual design.

4. Clear message

Your error message should clearly tell the user what exactly is wrong and what they need to fix. That is, instead of displaying the message “invalid email”, you should clarify what exactly is wrong: there was a typo, this email already busy, etc. Then you need to offer the user options (login or recover password).

Application errors

Now we will talk about errors that occur without user intervention. For example, when the Internet connection is lost, and the user at that moment is on a screen that is only available in online mode. In these situations, you must again make it clear what happened and what steps need to be taken next.

You should never show messages like this:

1. “Encoded” message. Messages containing codes internal errors applications or incomprehensible abbreviations do not tell users anything, but rather only scare them.

This error message was written by a developer for a developer: "The operation could not be completed (WDGeneralNetworkError 500)"

2. Deadlock message. Such messages do not give any useful information for users.

3. Abstract message. The message in the example below gives users exactly the same amount of information as in the previous case. It is not clear what it means and what to do next.

Don't expect people to understand the context of the message or that they are technically savvy. Speak in simple language for them, avoiding jargon.

Your error message should clearly communicate in user-friendly language that:

  • What went wrong and for what possible reason
  • What should the user do to fix this error?

Error messages are a great opportunity to use icons and illustrations, as people respond better to visual information than plain text. This good way“humanize” your application and give it personality. In addition, humor will help distract the user from the discomfort caused by the error.

When an error occurs in the Basecamp app related to incorrect input information, the hero located on the left side of the screen has an expression of surprise on his face:

In Gmail, when creating a new account, you may encounter this error message.

1C Message to User displays a message to the user (after processing is completed) or saves it in a queue if the message cannot be displayed “right now”, for example:
Message = New MessageToUser();
Message.Text = "Hello, world!";
Message.Message();

In many cases, messages are generated in bulk during certain processing. For example, when checking large table, many error messages may appear in different rows of the table. Or when processing a transaction. In this case, processing can be carried out on the server or in regulatory task and it is difficult to display these messages.

1C Message to User writes messages to “some” queue, and, after processing is completed, displays them to the user, if possible. Otherwise, the entire list of messages can be obtained using the GetMessagesToUser() method.

To display a message to the user using 1C Message to User in a specific, already open form, you additionally need to set the form identifier:
Message.DestinationIdentifier = Form.UniqueIdentifier;

In order for the 1C Message to User message to be displayed in a pop-up window next to a specific field of the form in which the code is executed in the module, you need to specify the “path” to it:
Message.Field = "Name"; //where Name is a form attribute
Message.Field = "Object.Name"; //where Name is the attribute of the object (i.e. the directory whose form is being edited)
Message.Field = "Products.Price"; //where Products is the tabular part of the form, Price is the column of this tabular part

To do the same, but in a module of another object (general module), you need to additionally specify the object (DirectoryObject, DocumentObject, etc.):
Message.Field = "Name"; //where Name is the DirectoryObject attribute
Message.SetData(DirectoryObject);
//When you double-click on a message, the object form will open with a pop-up message for the required field

Another way to associate a 1C Message to User message with object data:
//for a reference book, document..
Message.DataKey = DirectoryLink;
Message.DataPath = "Object";

//for register entries
Message.DataKey = RegisterRecordManager.InitialRecordKey; //usually the main form attribute associated with the register
Message.DataPath = "Record";

In standard configurations on managed forms for thin client, for example, “Trade Management, Edition 11” and “Accounting, Edition 3”, in the general General Purpose module ClientServer there is a function NotifyUser(), which “universals” the work with this object. Function syntax in different configurations- different.

Since 1C Message to User generates a list of messages, in order to reset it (for example, before performing complex processing), you can call the function:
GetMessagesUser(True);

Good afternoon.

Today we will talk about such a simple thing as messages to the user.

IN 1C 8 method migrated from 7.7 - " To report(...)". This method is very simple, it opens a message window if it is not open, and adds the text of the message there. As in 1C 7.7, it has a second parameter that defines the icon opposite the message. This icon determines the importance of the message.

Time passed and we got our hands on managed forms. Managed forms do not have a single message box. However the method is still supported. In the new interface, messages are stuck to active window. When I switch to another window, the messages disappear from view, but when I return, they appear again. In some cases this is not convenient, but there is nothing you can do about it; a managed form implies the absence of a main window to which messages could be attached.

However, since the message is associated with a specific form, this allows platform authors to expand the functionality of a simple message. You may have already seen in typical configurations that messages are now integrative, clicking on a message positions us on a specific field, double clicking can open some other element of the database.

The fact is that it is now customary to use not the global context method "Report(...)", but the object " Message to User". This object is available everywhere, both on the client and on the server. It has several properties and a couple of methods.

In general, if you need to give the user just a message, without any interaction, then just write:



Message.Message();

These three lines are absolutely identical to the method we already know, and therefore using this object for such a message is pointless.

The main fields that expand the capabilities of the message are:

  • Data Key
  • Field

Data Key- a link to the infobase object to which this message relates, or a record key. That's what it says in the certificate. If we insert a link to a document or reference book here, then double-clicking will open this object, regardless of the form in which the message was displayed. Accordingly, if the message came out in the form of a document, and the data key contains a link to it, then new form won't open.

Nonsense can happen if we issue a message in the form of an object that has not yet been written down. In this case we have an empty link. But the platform is not lost, and simply does not open anything, i.e. You remain in the form you were.

Field- this is a line with the name of the field that needs to be activated. And it doesn’t matter whether the form of another object opens or we remain in the current form.

Here's an example of how it works:

Suppose, before writing a directory element in the form module, we check the uniqueness of the “Id” attribute and, if one already exists, display the message:


If select.Next() Then
Refuse = True;
Message = New MessageToUser;
Message.DataKey = Select.Link;
Message.Field = "id";
Message.Text = "A section with this Id already exists";
Message.Message();
endIf;

IN in this example By double click a directory element with the same Id will open, and the Id field will be active and there will be a hint in it:

It seems convenient, we can both change the Id of the new element and edit the old one, it’s easy to get into it by clicking on the message. But the field in the current element is not activated, which means large quantities fields may be more useful than opening another object's form. After all, another object has already been recorded and is being used, and the likelihood that there is an error in it is small. Most likely we need to edit the current element.

To do this, change your code as follows:

//if there are duplicates, the sample will contain data
If select.Next() Then
Refuse = True;
Message = New MessageToUser;
Message.DataKey = Object.Link;
Message.Field = "id";
Message.Text = "A section with this Id already exists";
Message.Message();
endIf;

The only difference is that in Data Key we pass a link to the element that we have open. Unfortunately, this code does not work: (Double-clicking will open a modal window.

For this to work, there is a nuance that you need to fill out the " PathToData". I can’t explain exactly why, I just need to remember this. Open another object - data path not needed, position ourselves inside the current one - needed. Conclusion - it’s better to always fill it out, you can’t go wrong. Add the line to the code:

Message.DataPath = "object";

And everything is beautiful:

There is one more nuance that I want to talk about. If the “field” is left empty, then positioning on the control element will not occur and a tooltip will not appear next to it. If the “field” is filled in incorrectly, then positioning will occur on the form as a whole and a tooltip will appear, but at the end of the form, without reference to the real input field.

The next nuance is that the message has a method - " SetData". Based on the object, it fills in the fields Data Key And PathToData. It is much more convenient to do everything in one line. Typically, in the form of an element/document, we have an object. The only thing that needs to be written on the server is this:

Message.SetData(FormAttributesValue("Object"));

But in the predefined procedure of the form Before Recording On Server in fact there is already a parameter CurrentObject. But on the client we won’t receive the object at all. Even in the object module (not in the form) you need to write this:

Message.SetData(ThisObject);

In conclusion, I want to say some nasty things about managed forms. This applies to both TAXI and regular UVs. The fact is that interface lists are transferred very poorly to UV. A table containing 1000 rows is drawn very slowly, and in web browser It may even take a few minutes for it to open. This also applies to the message list. For an experiment, display 1000 messages and try switching between windows. The system will die immediately. Moreover, it is clearly visible how the system thinks about the output of messages. Going to a window with a bunch of messages looks like this:

The contents of the window are displayed
-which flickers sharply and the message bar appears
-everything hangs and you watch how the scroll in the message window creeps down

Those. As before, it is impossible to display a long-term processing log in the message panel, which contains several thousand records. I would recommend limiting yourself to 10 messages. Logs must be output to a multi-line line; it is displayed almost instantly, regardless of the number of lines. Of course, if you are checking the completeness of the details of the tabular part, there are 1000 rows in it and there is an error in each, then yes, you will have to wait :) Although in this case you can think about your own way of displaying messages, for example in an HTML document field.