|   |   | 
| 
 | Отличия программного записи элемента от интерактивного. | ☑ | ||
|---|---|---|---|---|
| 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 | 
        Тема закрыта.
 Получилось вот так. &НаКлиенте Процедура ОбновитьФорму() Экспорт ОповеститьОбИзменении(Объект.КатегорияПоступления); КонецПроцедуры | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |