Как обновить форму документа после изменения данных
Есть документ
После записи меняется документ - который реквизит документа
На форме он есть - но отображается старый пока не закроешь и не откроешь новый
как форму обновить?
не работает
тоже не работает
хотела обновить реквизит измененный
тоже нет
После записи меняется документ - который реквизит документа
На форме он есть - но отображается старый пока не закроешь и не откроешь новый
как форму обновить?
ЭтаФорма.Обновить();
не работает
П = Новый Структура("Ключ", ЭтотОбъект.Ссылка);
Форма = ПолучитьФорму("Документ._ЗаказПокупателя.ФормаЭлемента", П);
Форма.Прочитать();
тоже не работает
хотела обновить реквизит измененный
элементыформы.мойэлемент.обновить();
тоже нет
По теме из базы знаний
- Оповещение приложений 1С об изменении данных на сервере
- Особенности разделения объектной модели документа и базы данных в 1С 7.7. Забавный глюк
- Подсистема "Обмен данными. Конвертация 2.1". Автоматический обмен измененными данными. Управляемые и обычные формы. Включает отдельные подсистемы "Журнал событий", "Регламентные задания"
- [Расширение] Контроль печатных форм документов для УТ 11/КА 2
- Лайфхак. Как обновить форму документа программно после изменения данных через внешнюю печатную форму
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Используйте событие ОбработкаОповещения на той форме которую хотите обновить. Этот событие возникает в результате работы метода Оповестить().
Например: Вам нужно ПослеЗаписи изменяемого документа вызвать процедуру Оповестить(). И ловить это оповещение в той форме которую хотите обновить в событии ОбработкаОповещения
Например: Вам нужно ПослеЗаписи изменяемого документа вызвать процедуру Оповестить(). И ловить это оповещение в той форме которую хотите обновить в событии ОбработкаОповещения
Судя по всему, этот реквизит обновляется не через ОбновлениеОтображения(), а где-то в ПриОткрытии() и/или при изменении связанного с ним поля. Смотрите в коде как это происходит и добавляйте в ПослеЗаписи().
Форма.ОбновитьОтображениеДанных();
УправляемаяФорма (ManagedForm)
ОбновитьОтображениеДанных (RefreshDataRepresentation)
Синтаксис:
ОбновитьОтображениеДанных(<ОбновлятьЭлементы>)
Параметры:
<ОбновлятьЭлементы> (необязательный)
Тип: ГруппаФормы; ТаблицаФормы; ПолеФормы; Массив.
Если параметр задан, то установка значений (и обновление) будет выполняться только для тех элементов, которые заданы в параметре. Если в качестве значения передан пустой массив, то ни для каких элементов формы установка значений выполнена не будет.
После вызова метода признак необходимости установки значений и обновления для элементов формы сбрасывается: если после вызова метода никакие данные формы не меняются, то ни для никаких элементов, кроме указанных, текст обновлен не будет.
Если параметр имеет значение типа Массив, то элементами массива могут быть только значения типа ГруппаФормы, ТаблицаФормы, ПолеФормы.
Если массив содержит значение другого типа, то будет выдано исключение о неверном типе параметра.
Вызов метода ОбновитьОтображениеДанных с параметром <ОбновлятьЭлементы> имеет смысл только внутри обработчика ВнешнееСобытие, обработчиков ожидания формы и обработчика ОбработкаОповещения.
В обработчиках других событий вызов этого метода с параметром аналогичен вызову без параметра (при необходимости данные будут установлены всем элементам управления).
Описание:
В принудительном порядке обновляет содержание элементов управления.
Полезен при изменении значений реквизитов формы вне формы, в тот момент, когда форма отображается на экране.
Доступность:
Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент).
Примечание:
В веб-клиенте обновление элементов управления происходит не сразу, а после окончания выполнения кода на встроенном языке.
ПоказатьОбновитьОтображениеДанных (RefreshDataRepresentation)
Синтаксис:
ОбновитьОтображениеДанных(<ОбновлятьЭлементы>)
Параметры:
<ОбновлятьЭлементы> (необязательный)
Тип: ГруппаФормы; ТаблицаФормы; ПолеФормы; Массив.
Если параметр задан, то установка значений (и обновление) будет выполняться только для тех элементов, которые заданы в параметре. Если в качестве значения передан пустой массив, то ни для каких элементов формы установка значений выполнена не будет.
После вызова метода признак необходимости установки значений и обновления для элементов формы сбрасывается: если после вызова метода никакие данные формы не меняются, то ни для никаких элементов, кроме указанных, текст обновлен не будет.
Если параметр имеет значение типа Массив, то элементами массива могут быть только значения типа ГруппаФормы, ТаблицаФормы, ПолеФормы.
Если массив содержит значение другого типа, то будет выдано исключение о неверном типе параметра.
Вызов метода ОбновитьОтображениеДанных с параметром <ОбновлятьЭлементы> имеет смысл только внутри обработчика ВнешнееСобытие, обработчиков ожидания формы и обработчика ОбработкаОповещения.
В обработчиках других событий вызов этого метода с параметром аналогичен вызову без параметра (при необходимости данные будут установлены всем элементам управления).
Описание:
В принудительном порядке обновляет содержание элементов управления.
Полезен при изменении значений реквизитов формы вне формы, в тот момент, когда форма отображается на экране.
Доступность:
Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент).
Примечание:
В веб-клиенте обновление элементов управления происходит не сразу, а после окончания выполнения кода на встроенном языке.
(14)а вы точно в контексте формы?
Скрытый текст |
---|
Прочитать (Read)
Синтаксис: Прочитать() Описание: Обновляет объект формы клиентского приложения. Доступность: Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение (клиент), мобильное приложение (сервер). Использование в версии: Доступен, начиная с версии 8.2. |
(15) Да, в контексте формы...
Но, я понял, кажись, в чем прикол - метод "Прочитать" работает только для форм справочников, документов, регистров и констант
Для форм внешних обработок этот метод недоступен...
Во внешних обработках нужно юзать "ОповеститьОбИзменении()"
После внесения изменений на сервере когда вызов сервера вернулся на клиент
Но, я понял, кажись, в чем прикол - метод "Прочитать" работает только для форм справочников, документов, регистров и констант
Для форм внешних обработок этот метод недоступен...
Во внешних обработках нужно юзать "ОповеститьОбИзменении()"
ОповеститьОбИзменении(Тип("СправочникСсылка.Договоры"));
После внесения изменений на сервере когда вызов сервера вернулся на клиент
(16)
Не мог найти аналог ОбновитьИнтерфейс();.
Очень помогло. спасибо!
Причем в описании ОповеститьОбИзменении написано для динамический списков.
У меня была ТаблицаЗначений во внешней обработке. Т.е. и для таблицы значений работает..
Наверное и для других реквизитов формы внешней обработки будет справедливо.
ОповеститьОбИзменении(Тип("СправочникСсылка.Договоры"));
Не мог найти аналог ОбновитьИнтерфейс();.
Очень помогло. спасибо!
Причем в описании ОповеститьОбИзменении написано для динамический списков.
У меня была ТаблицаЗначений во внешней обработке. Т.е. и для таблицы значений работает..
Наверное и для других реквизитов формы внешней обработки будет справедливо.
для будущих поколений, возможно поможет, суть свойство ЭтаФорма.Модифицированность = Истина, в назначаемых обработках в БСП помогло, код ниже:
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыКоманды) Экспорт
КонтекстФормыВызова = ПараметрыКоманды.ЭтаФорма;
ДанныеОбъекта = КонтекстФормыВызова.Объект;
....
КонтекстФормыВызова.Модифицированность = Истина;
......
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения, ПараметрыКоманды) Экспорт
КонтекстФормыВызова = ПараметрыКоманды.ЭтаФорма;
ДанныеОбъекта = КонтекстФормыВызова.Объект;
....
КонтекстФормыВызова.Модифицированность = Истина;
......
(19) В некоторых случаях (выведен на форму подчиненный реквизит измененного справочника) срабатывает только Прочитать() и ТОЛЬКО при вызове НА СЕРВЕРЕ. Я так и не понял почему. Прочитать() на клиенте не дал никакого эффекта. Прочитать() на сервере обновляет реквизит.
Интересно, а как допустим обновить отображение строк документа после программного заполнения обработкой табчасти. я же код в обработке держу, доступа к форме документа нет, только ссыль. И имеено БСП.
(18) В БП 3.0 стандартный код модуля "ДополнительныеОтчетыИОбработкиКлиент" только для "ВызовСерверногоМетода" вызывает - Форма.Прочитать().
Переделал Заполняшку с "ВызовКлиентскогоМетода" и заработало нормально.
(18) В БП 3.0 стандартный код модуля "ДополнительныеОтчетыИОбработкиКлиент" только для "ВызовСерверногоМетода" вызывает - Форма.Прочитать().
Переделал Заполняшку с "ВызовКлиентскогоМетода" и заработало нормально.
Ситуация:
В форме документа программно меняем реквизит зависимого реквизита формы
Например
На форме ТЧ товары
В ней программно выведен в ТЧ товары реквизит "Номер" по данным серии
Путь к данным Объект.Товары.Серия.Номер
Изменили номер программно, без явного открытия формы серии
Нужно, что бы на форме номер по данным серии так же изменился.
Помогло
ОповеститьОбИзменении()
Не помогло
ОбновитьОтображениеДанных();
Прочитать();
В форме документа программно меняем реквизит зависимого реквизита формы
Например
На форме ТЧ товары
В ней программно выведен в ТЧ товары реквизит "Номер" по данным серии
Путь к данным Объект.Товары.Серия.Номер
Изменили номер программно, без явного открытия формы серии
Нужно, что бы на форме номер по данным серии так же изменился.
Помогло
ОповеститьОбИзменении()
Не помогло
ОбновитьОтображениеДанных();
Прочитать();
Если в документе конфигурации есть обработкаОповещения, например, как в БП 3.0, которая проверяет тип оповещения и тип источник и обновляет форму перезаписанного документа, то все будет работать с кодом типа:
ПараметрыОповещения = Новый Структура("ДокументСсылка",Объект.ЗаполняемыйДокумент); //здесь Объект.ЗаполняемыйДокумент это ссылка на обработанный документ
Оповестить("ВыполненаЗаписьДокумента",ПараметрыОповещения,Объект.ЗаполняемыйДокумент);
ПараметрыОповещения = Новый Структура("ДокументСсылка",Объект.ЗаполняемыйДокумент); //здесь Объект.ЗаполняемыйДокумент это ссылка на обработанный документ
Оповестить("ВыполненаЗаписьДокумента",ПараметрыОповещения,Объект.ЗаполняемыйДокумент);
//Отправляем
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Оповестить("ОбновитьИзменяемыеРеквизитыАвто");
КонецПроцедуры
//Ловим
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ОбновитьИзменяемыеРеквизитыАвто" Тогда
ЗаполнитьИзменяемыеРеквизитыФормы();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Оповестить("ОбновитьИзменяемыеРеквизитыАвто");
КонецПроцедуры
//Ловим
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ОбновитьИзменяемыеРеквизитыАвто" Тогда
ЗаполнитьИзменяемыеРеквизитыФормы();
КонецЕсли;
КонецПроцедуры
Может кто знает, а как в УТ 11, в форме ЧекККМ после добавления строки программно, обновить колонку Характеристика? Там остаётся надпись <характеристики не используются> даже в случае, когда характеристика есть (Эта надпись задаётся в УсловномОформлении).
После записи чека всё отображается верно. Что-то ничего из вышепредложенного мне не помогло, или я что-то не так делал...
После записи чека всё отображается верно. Что-то ничего из вышепредложенного мне не помогло, или я что-то не так делал...
В моём случае помог следующий алгоритм.
Имеем таблицу значений в реквизите формы. В элементы формы выведен реквизит "Справочник1.ФизЛицо" элемента справочника "Справочник1". После группового программного изменения элементов "ФизЛицо" в справочнике "Справочник1" элементы Справочник1.ФизЛицо на форме не перечитывались из базы.
Решение:
&НаКлиенте
ОповеститьОбИзменении(Тип("СправочникСсылка.Справочник1"));
Элементы."НазваниеТаблицыВЭлементахФормы".Обновить();
КонецПроцедуры
Без вызова оповещения об изменении данные на форме не перечитывались.
Имеем таблицу значений в реквизите формы. В элементы формы выведен реквизит "Справочник1.ФизЛицо" элемента справочника "Справочник1". После группового программного изменения элементов "ФизЛицо" в справочнике "Справочник1" элементы Справочник1.ФизЛицо на форме не перечитывались из базы.
Решение:
&НаКлиенте
ОповеститьОбИзменении(Тип("СправочникСсылка.Справочник1"));
Элементы."НазваниеТаблицыВЭлементахФормы".Обновить();
КонецПроцедуры
Без вызова оповещения об изменении данные на форме не перечитывались.
Для обновления данных в форме и заголовка следует выполнить в форме на сервере:
ЗначениеВДанныеФормы(ПрикладнойОбъект, Объект); // копирует данные из прикладного объекта в универсальный объект, с которым связана форма (смотрите наименование основного реквизита формы)
ЭтаФорма.Прочитать(); // обновляет данные самой формы из универсального объекта
ЗначениеВДанныеФормы(ПрикладнойОбъект, Объект); // копирует данные из прикладного объекта в универсальный объект, с которым связана форма (смотрите наименование основного реквизита формы)
ЭтаФорма.Прочитать(); // обновляет данные самой формы из универсального объекта
может кому пригодится в следующей ситуации, например какой то внешней обработкой заполняется содержимое документа, а документ в момент запуска обработки был открыт и нужно чтобы после обработки обновилось содержимое формы открытого документа, то следует сделать вот что: проверьте в модуле формы документа наличие процедуры ОбработкаОповещения (посмотрите в свойстве формы), если процедура есть то смотрите в ней ИмяСобытия, скорее всего в этой процедуре имеется что то похожее на "ОбновитьДокументИБПослеЗаполнения" и код примерно такой:
, в этом случае вам повезло и в своей обработке вы можете воспользоваться имеющейся процедурой модуля формы документа (ОбработкаОповещения), вызываете ее из клиентской процедуры обработки примерно таким образом через оповещение:
здесь ДокументКП это ссылка на документ обрабатываемый обработкой.
и все обновится
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
.
.
.
Если ИмяСобытия = "ОбновитьДокументИБПослеЗаполнения"
И Параметр.Найти(Объект.Ссылка) <> Неопределено Тогда
Прочитать();
КонецЕсли;
Показать МассивДляПараметра = Новый Массив;
МассивДляПараметра.Добавить(ДокументКП);
Оповестить("ОбновитьДокументИБПослеЗаполнения", МассивДляПараметра);
здесь ДокументКП это ссылка на документ обрабатываемый обработкой.
и все обновится
(38) это была описана ситуация, когда изменяемый документ записывается в базу данных, а для ситуации когда документ изменяется, но без записи, а нужно показать пользователю форму документа с измененными значениями, чтобы он принял решение сохранять их или нет, можно применить такой способ: в клиентской процедуре обработки получаем форму изменяемого документа (по ссылке на документ), в объекте формы меняем данные, присваиваем форме признак модифицированности и открываем форму документа.
В коде это выглядит примерно так:
ДокументКП - ссылка на изменяемый документ
ТаблицаЗагрузки - таблица значений из обработки
В коде это выглядит примерно так:
Ключ = Новый Структура("Ключ", ДокументКП);
ФормаКП = ПолучитьФорму("Документ.КоммерческоеПредложениеКлиенту.Форма.ФормаДокумента", Ключ);
ФормаКП.Объект.Товары.Очистить();
Для каждого СтрокаТаблицыЗагрузки Из ТаблицаЗагрузки Цикл
НоваяСтрокаТоваров = ФормаКП.Объект.Товары.Добавить();
НоваяСтрокаТоваров.Номенклатура = СтрокаТаблицыЗагрузки.Номенклатура;
НоваяСтрокаТоваров.Количество = СтрокаТаблицыЗагрузки.Количество;
КонецЦикла;
ФормаКП.Модифицированность = Истина;
ФормаКП.Открыть();
ПоказатьДокументКП - ссылка на изменяемый документ
ТаблицаЗагрузки - таблица значений из обработки
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот