В процессе разработки часто возникает задача автоматизации заполнения или изменения табличных частей документов. Разработчики сталкиваются с тем, что после выполнения программной обработки на сервере, открытая форма документа не отображает актуальные изменения автоматически. В этой статье мы подробно разберем, как правильно реализовать обновление формы и какие методы платформы 1С:Предприятие 8 для этого существуют.
Когда вы выполняете код ДокументОбъект.Записать() на сервере, данные в базе данных обновляются. Однако клиентская часть формы, которая была открыта пользователем ранее, «не знает» о том, что данные в базе изменились. Чтобы пользователь увидел результаты своей работы, необходимо принудительно заставить форму «перечитать» объект из базы данных.
Если обработка открывает форму документа после выполнения действий, наиболее простым способом будет принудительный вызов метода Прочитать(). Рассмотрим, как это реализовать на клиенте:
При использовании ПолучитьФорму() мы получаем объект формы, который позволяет управлять её поведением перед тем, как она станет доступна пользователю:
&НаКлиенте
Процедура ВыделитьПоСчету(Команда)
ВыделитьПоСчетуНаСервере(); // Выполнение серверной логики
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", ДокументСсылка);
Форма = ПолучитьФорму("Документ.ВедомостьНаВыплатуЗарплатыПеречислением.ФормаОбъекта", ПараметрыФормы);
Форма.Прочитать(); // Принудительное обновление данных
Форма.Открыть();
Закрыть(); // Закрываем форму обработки
КонецПроцедуры
Этот метод эффективен, если форма документа открывается «с нуля» непосредственно из обработки. Использование Прочитать() гарантирует, что визуальные элементы формы получат самые актуальные данные из информационной базы.
В случаях, когда документ уже открыт у пользователя, а обработка запускается отдельно, правильнее использовать механизм оповещений. Это «чистый» способ взаимодействия между формами, исключающий прямые ссылки на объекты интерфейса.
Оповестить().ОбработкаОповещения().Пример кода в обработке:
// После успешного выполнения записи документа
Оповестить("ОбновитьТабличнуюЧасть", ДокументСсылка, ЭтотОбъект);
Пример кода в модуле формы документа:
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ОбновитьТабличнуюЧасть" И Параметр = Объект.Ссылка Тогда
Прочитать(); // Перечитываем данные объекта
КонецЕсли;
КонецПроцедуры
Для создания надежных механизмов взаимодействия между формами в управляемом приложении, придерживайтесь следующих правил:
&НаКлиенте.ПолучитьФорму() делают ваш код хрупким. При изменении конфигурации (например, переименовании реквизита в форме) такой код сломается.Надеемся, что эти советы помогут вам реализовать качественный интерфейс и обеспечить корректную работу с данными в ваших конфигурациях.