Имя: Пароль:
1C
1С v8
Кэширование данных при отображении на форме. УФ, Такси
,
0 1Сергей
 
12.11.20
11:49
Приветствую вас, товарищи и господа.

Столкнулся с проблемой, что УФ(такси) не всегда отображает то, что есть на самом деле.
Внешняя обработка, табличная часть Номенклатура, есть реквизит ТЧ РесурснаяСпецификация (СправочникСсылка.РесурсныеСпецификации). У последнего есть реквизиты НачалоДействия и КонецДействия, которые вытащены на форму в табличную часть. Т.е. не являются реквизитами обработки, но отображаются.

Проблема в том, что при заполнении ТЧ одинесина запоминает эти реквизиты и при изменении их, это никак не отражается на форме обработки. Более того, не помогает переоткрытие обработки и даже (!) перезаполнение ТЧ. Упорно показывает данные которые были при первом заполнении.

Вот как это выглядит в конфигураторе
http://pics.rsh.ru/img/000_bjom8ihp.png

Вот реквизит КонецДействия, который отображается на форме обработки в режиме предприятия
http://pics.rsh.ru/img/001_65k9mqnp.png

А вот какое значение записано в БД (пустая дата):
http://pics.rsh.ru/img/002_dcdgd0ad.png

Как победить эту шнягу?
1 Василий Алибабаевич
 
12.11.20
11:53
(0) Оповестить + ОбновитьОтображениеДанных.
2 1Сергей
 
12.11.20
11:57
(1) а разве оповестить работает на сервере? как это поможет?
3 1Сергей
 
12.11.20
11:58
ОбновитьОтображениеДанных не обновляет то что я написал в (0)
4 Василий Алибабаевич
 
12.11.20
12:01
(2) "разве оповестить работает на сервере" А что и кому вы собрались показывать на сервере?
(3) "ОбновитьОтображениеДанных" обновляет то и так как вы ему скажете. А так оно берет данные из БД и показывает их на клиенте.
5 Василий Алибабаевич
 
12.11.20
12:07
+ (4) Обновлять данные из БД можно не только по Оповещению. Но и по (например) таймеру.
6 1Сергей
 
12.11.20
12:12
(4) Пользователь нажимает на кнопку, запускается процедура на клиенте, которая открывает диалог ввода значения, по завершению которого запускается серверная процедура заполнения ТЧ. После того как выполнилась серверная процедура как запустить оповещение?
7 1Сергей
 
12.11.20
12:15
&НаКлиенте
Процедура ОбновитьТаблицу(Команда)
    ЭтаФорма.ОбновитьОтображениеДанных(); // не помогает
    ЭтаФорма.ОбновитьОтображениеДанных(Элементы.Номенклатура); // не помогает
    ЭтаФорма.ОбновитьОтображениеДанных(Элементы.НоменклатураРесурснаяСпецификацияКонецДействия); // не помогает
    Элементы.Номенклатура.Обновить(); // не помогает
КонецПроцедуры
8 Василий Алибабаевич
 
12.11.20
12:16
(6) Если "серверная процедура" выполняется в фоновом задании - можно использовать "таймер" в виде "ПодключитьОбработчикОжидания". Если в контексте текущего сеанса - после завершения серверной процедуры и передачи управления на клиент.
9 1Сергей
 
12.11.20
12:16
Ещё раз обращаю внимание: не помогает даже закрытие и открытие обработки с перезаполнением табличной части. Оно где-то очень глубоко там кешируется
10 1Сергей
 
12.11.20
12:17
(8) не суть. Я сделал кнопку (7) не помогает
11 1Сергей
 
12.11.20
12:27
Помогло вот это:

    Для каждого СтрокаНоменклатура Из Объект.Номенклатура Цикл
        ОповеститьОбИзменении(СтрокаНоменклатура.РесурснаяСпецификация);
    КонецЦикла;