|
Отличия программного записи элемента от интерактивного. | ☑ | ||
---|---|---|---|---|
0
antihacker
17.01.19
✎
08:41
|
Всем привет !
Есть справочник Спр1 с реквизитом справочника Рек1. И Рек1 ссылается на другой справочник Спр2. Вот. Когда программно меняешь наименование Спр2, то в Спр1 все еще видится старое наименование Спр2. Надо открыть интерактивно и перевыбарть. Что не так ? |
|||
1
craxx
17.01.19
✎
08:42
|
(0) Видимо обработка ПриИзменении в поле формы
|
|||
2
antihacker
17.01.19
✎
08:45
|
В этой обработке ничего нету. Она вообще не создавалась
|
|||
3
catena
17.01.19
✎
08:46
|
Где видится старое наименование? Если запросом до перевыбора выбрать, что будет в рек1? Формы о/у?
|
|||
4
zak555
17.01.19
✎
08:47
|
Номер платформы?
Представление справочника какое? |
|||
5
Лодырь
17.01.19
✎
08:47
|
Надо перечитать данные однако. Потому что форма ничего не знает о факте изменения данных которые она отображает.
|
|||
6
antihacker
17.01.19
✎
08:49
|
Платформа - 1С:Предприятие 8.3 (8.3.12.1469). Управляемая форма.
|
|||
7
antihacker
17.01.19
✎
09:15
|
Пробовал вот так
&НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) ЭтаФорма.Прочитать(); КонецПроцедуры не работает |
|||
8
antihacker
17.01.19
✎
09:22
|
Даже пробовал ЭтаФорма.ОбновитьОтображениеДанных();
Не работает. |
|||
9
Мимохожий Однако
17.01.19
✎
09:32
|
(0) Открываешь интерактивно Спр1, а меняешь программно Спр2.
Добавь изменение представления программно в этом реквизите. |
|||
10
craxx
17.01.19
✎
09:32
|
(7) В модуле объекта аналогичную функцию проверь
|
|||
11
DrWatson
17.01.19
✎
10:14
|
(0)
ОповеститьОбИзменении(<Ссылка>) Также осуществляется очистка закэшированных данных на клиенте. В частности, очищается кэш представлений ссылок, кэш данных через точку, кэш данных быстрого выбора, кэш ограничений по типу, кэш форм выбора. |
|||
12
DrWatson
17.01.19
✎
10:16
|
+(11) Возможно даже сначала ОповеститьОбИзменении, потом ОбновитьОтображениеДанных. Потому что само ОповеститьОбИзменении обновляет только динамические списки.
|
|||
13
antihacker
17.01.19
✎
10:39
|
DrWatson проблема не с динамическим списком
|
|||
14
Мимохожий Однако
17.01.19
✎
11:11
|
(13) Оповестить() есть
|
|||
15
DrWatson
17.01.19
✎
11:19
|
(13) Я понял. Пост (11) дальше первого слова не читал? ОповеститьОбИзменении - это не только динамический список, но и очистка кэша. А откуда клиент берет представление ссылки?
|
|||
16
antihacker
17.01.19
✎
13:19
|
Ребята. Проблема том что, элемент записывается программно. По этому никакие функции на форме само по себе не срабатывает.
|
|||
17
VladZ
17.01.19
✎
13:23
|
(16) Пусть список обновляет обработчик ожидания.
|
|||
18
antihacker
17.01.19
✎
13:24
|
Можно как то вызвать процедуру формы при записи или перед записью ?
|
|||
19
antihacker
17.01.19
✎
13:24
|
VladZ. какой еще список ?
|
|||
20
mistеr
17.01.19
✎
13:54
|
(16) Тут нужно еще уточнить, а как инииируется программное изменение Спр2? Из формы Спр1 или как-то иначе?
|
|||
21
ssh2006
17.01.19
✎
13:57
|
(8)
&НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если Врег(ИмяСобытия) = Врег("Запись_ЕдиницыИзмерения") Тогда ПодключитьОбработчикОжидания("ОбновитьДанныеНаФорме", 0.1, Истина); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОбновитьДанныеНаФорме() ОбновитьОтображениеДанных(); КонецПроцедуры |
|||
22
antihacker
17.01.19
✎
13:58
|
Нет. С другого места. С документа.
|
|||
23
ssh2006
17.01.19
✎
14:00
|
(22) там вызывай
Оповестить("Запись_ЕдиницыИзмерения"); |
|||
24
mistеr
17.01.19
✎
14:10
|
(22) В документе реквизит типа Спр2 или Спр1?
|
|||
25
antihacker
17.01.19
✎
14:15
|
ssh2006
А отловить как на справочнике ? Вот так ? &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "НаименованиеСобытия" Тогда // код выполняемых действий при возникновении события КонецЕсли; КонецПроцедуры |
|||
26
ssh2006
17.01.19
✎
14:22
|
(25) да, только эту процедуру надо подцепить к форме в ее палитре свойств
|
|||
27
DrWatson
17.01.19
✎
14:27
|
(22) С формы документы, с события модуля документы, с события менеджера документы? Другими словами, там вызов клиента есть?
|
|||
28
antihacker
17.01.19
✎
14:39
|
Делаю так. Вот с формы документа
&НаКлиенте Процедура Сопоставить(Команда) ссылканаспр = ссылканаспр(); ОповеститьОбИзменении(ссылканаспр); КонецПроцедуры &НаСервере Функция ссылканаспр() возврат Справочники.КлассификацияПоступлений.ПустаяСсылка(); КонецФункции А на форме справочника &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "НаименованиеСобытия" Тогда // код выполняемых действий при возникновении события КонецЕсли; КонецПроцедуры И не работает ! |
|||
29
antihacker
17.01.19
✎
14:40
|
Пробовал даже так
ОповеститьОбИзменении(Тип("СправочникСсылка.КлассификацияПоступлений")); Все равно не работает. |
|||
30
DrWatson
17.01.19
✎
14:55
|
(29)
.Справку невнимательно читал. Решил сам проверить. 8.3.13.1513. Достаточно только ОповеститьОбИзменении. Не надо передавать управление в форму обновляемого справочника, не надо обновлять отображение. Всё само работает. Вот как выглядит изменение из документа: &НаСервереБезКонтекста Процедура УстановитьНовоеНаименованиеНаСервере(Спр2Ссылка) Спр2Объект = Спр2Ссылка.ПолучитьОбъект(); Спр2Объект.Наименование = ТекущаяДата(); Спр2Объект.Записать(); КонецПроцедуры &НаКлиенте Процедура УстановитьНовоеНаименование(Команда) УстановитьНовоеНаименованиеНаСервере(Объект.Реквизит1); ОповеститьОбИзменении(Объект.Реквизит1); КонецПроцедуры |
|||
31
DrWatson
17.01.19
✎
15:00
|
+(30) Это если считать, что Спр2 ты меняешь из команды документа. Потому что на (27) так и не ответил.
|
|||
32
antihacker
17.01.19
✎
15:02
|
DrWatson. сорри не заметил. Да так и есть.
|
|||
33
antihacker
17.01.19
✎
15:04
|
Пытался вот так
&НаКлиенте Процедура Сопоставить(Команда) Для Каждого ТекСтрока Из Объект.ТЧИмпортированныеДанные Цикл Форма1 = ТекСтрока.КПиКР.ПолучитьФорму(); Форма1.ОбновитьФорму(); КонецЦикла; КонецПроцедуры пишет Метод объекта не обнаружен (ПолучитьФорму) |
|||
34
antihacker
17.01.19
✎
15:08
|
Пробовал вот так
Для Каждого ТекСтрока Из Объект.ТЧИмпортированныеДанные Цикл ОповеститьОбИзменении(ТекСтрока.КПиКР); КонецЦикла; Не реагирует. |
|||
35
DrWatson
17.01.19
✎
15:15
|
(34) Не знаю. Я сделал готовый пример - работает. Вероятно, в твоём случае есть ещё какие-нибудь детали, о которых ты не рассказал.
Вот работающий пример: https://drive.google.com/open?id=11-9FqJaK2qiHtwnov5ammtPa3znXQJ9E |
|||
36
antihacker
17.01.19
✎
15:23
|
Вот так мне удалось запустить процедуру на форме
Для Каждого ТекСтрока Из Объект.ТЧИмпортированныеДанные Цикл Форма1 = ПолучитьФорму("Справочник.КлассификацияПоступлений.Форма.ФормаЭлемента", новый Структура("Ключ",ТекСтрока.КПиКР)); Форма1.ОбновитьФорму(); КонецЦикла; Отладчиком вижу что ОбновитьФорму() срабатывает. Вот код &НаКлиенте Процедура ОбновитьФорму() Экспорт ОбновитьОтображениеДанных(); КонецПроцедуры Но ничего не меняется. |
|||
37
antihacker
17.01.19
✎
15:29
|
У тебя формат конфиши выше чем у меня ( У тя 8,3,13 у меня 8,3,12
|
|||
38
DrWatson
17.01.19
✎
15:31
|
(39) Этот код ничего и не меняет.
ОбновитьОтображениеДанных Полезен при изменении значений реквизитов формы вне формы, в тот момент, когда форма отображается на экране. Твоя форма только что открыта, её реквизиты никто не менял. Ничего и не должно было измениться. |
|||
39
antihacker
17.01.19
✎
15:31
|
Тема закрыта.
Получилось вот так. &НаКлиенте Процедура ОбновитьФорму() Экспорт ОповеститьОбИзменении(Объект.КатегорияПоступления); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |