Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Отличия программного записи элемента от интерактивного.

Отличия программного записи элемента от интерактивного.
Я
   antihacker
 
17.01.19 - 08:41
Всем привет !

Есть справочник Спр1 с  реквизитом справочника Рек1. И Рек1 ссылается на другой справочник Спр2. Вот. Когда программно меняешь наименование Спр2, то в Спр1 все еще видится старое наименование Спр2. Надо открыть интерактивно и перевыбарть. Что не так ?
 
 
   craxx
 
1 - 17.01.19 - 08:42
(0) Видимо обработка ПриИзменении в поле формы
   antihacker
 
2 - 17.01.19 - 08:45
В этой обработке ничего нету. Она вообще не создавалась
   catena
 
3 - 17.01.19 - 08:46
Где видится старое наименование? Если запросом до перевыбора выбрать, что будет в рек1? Формы о/у?
   zak555
 
4 - 17.01.19 - 08:47
Номер платформы?
Представление справочника какое?
   Лодырь
 
5 - 17.01.19 - 08:47
Надо перечитать данные однако. Потому что форма ничего не знает о факте изменения данных которые она отображает.
   antihacker
 
6 - 17.01.19 - 08:49
Платформа - 1С:Предприятие 8.3 (8.3.12.1469). Управляемая форма.
   antihacker
 
7 - 17.01.19 - 09:15
Пробовал вот так 

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    ЭтаФорма.Прочитать();
КонецПроцедуры


не работает
   antihacker
 
8 - 17.01.19 - 09:22
Даже пробовал ЭтаФорма.ОбновитьОтображениеДанных();

Не работает.
   МимохожийОднако
 
9 - 17.01.19 - 09:32
(0) Открываешь интерактивно Спр1, а меняешь программно Спр2.
Добавь изменение представления программно в этом реквизите.
   craxx
 
10 - 17.01.19 - 09:32
(7) В модуле объекта аналогичную функцию проверь
 
 Рекламное место пустует
   DrWatson
 
11 - 17.01.19 - 10:14
(0)
ОповеститьОбИзменении(<Ссылка>)
Также осуществляется очистка закэшированных данных на клиенте. В частности, очищается кэш представлений ссылок, кэш данных через точку, кэш данных быстрого выбора, кэш ограничений по типу, кэш форм выбора.
   DrWatson
 
12 - 17.01.19 - 10:16
+(11) Возможно даже сначала ОповеститьОбИзменении, потом ОбновитьОтображениеДанных. Потому что само ОповеститьОбИзменении обновляет только динамические списки.
   antihacker
 
13 - 17.01.19 - 10:39
DrWatson проблема не с динамическим списком
   МимохожийОднако
 
14 - 17.01.19 - 11:11
(13) Оповестить() есть
   DrWatson
 
15 - 17.01.19 - 11:19
(13) Я понял. Пост (11) дальше первого слова не читал? ОповеститьОбИзменении - это не только динамический список, но и очистка кэша. А откуда клиент берет представление ссылки?
   antihacker
 
16 - 17.01.19 - 13:19
Ребята. Проблема том что, элемент записывается программно. По этому никакие функции на форме само по себе не срабатывает.
   VladZ
 
17 - 17.01.19 - 13:23
(16) Пусть список обновляет обработчик ожидания.
   antihacker
 
18 - 17.01.19 - 13:24
Можно как то вызвать процедуру формы при записи или перед записью ?
   antihacker
 
19 - 17.01.19 - 13:24
VladZ. какой еще список ?
   mistеr
 
20 - 17.01.19 - 13:54
(16) Тут нужно еще уточнить, а как инииируется программное изменение Спр2? Из формы Спр1 или как-то иначе?
   ssh2006
 
21 - 17.01.19 - 13:57
(8)

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    
    Если Врег(ИмяСобытия) = Врег("Запись_ЕдиницыИзмерения") Тогда 

         ПодключитьОбработчикОжидания("ОбновитьДанныеНаФорме", 0.1, Истина);
        
    КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ОбновитьДанныеНаФорме()
    
    ОбновитьОтображениеДанных();    
    
КонецПроцедуры
   antihacker
 
22 - 17.01.19 - 13:58
Нет. С другого места. С документа.
   ssh2006
 
23 - 17.01.19 - 14:00
(22) там вызывай

Оповестить("Запись_ЕдиницыИзмерения");
   mistеr
 
24 - 17.01.19 - 14:10
(22) В документе реквизит типа Спр2 или Спр1?
   antihacker
 
25 - 17.01.19 - 14:15
ssh2006

А отловить как на справочнике ?


Вот так ?


&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)    
    
      Если ИмяСобытия = "НаименованиеСобытия" Тогда 
            // код выполняемых действий при возникновении события 

      КонецЕсли;     
        
КонецПроцедуры
   ssh2006
 
26 - 17.01.19 - 14:22
(25) да, только эту процедуру надо подцепить к форме в ее палитре свойств
   DrWatson
 
27 - 17.01.19 - 14:27
(22) С формы документы, с события модуля документы, с события менеджера документы? Другими словами, там вызов клиента есть?
   antihacker
 
28 - 17.01.19 - 14:39
Делаю так. Вот с формы документа

&НаКлиенте
Процедура Сопоставить(Команда)
 
     ссылканаспр = ссылканаспр();    
     ОповеститьОбИзменении(ссылканаспр);      

КонецПроцедуры

&НаСервере
Функция ссылканаспр()
        возврат Справочники.КлассификацияПоступлений.ПустаяСсылка();
КонецФункции    

А на форме справочника

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)    
    
      Если ИмяСобытия = "НаименованиеСобытия" Тогда 
            // код выполняемых действий при возникновении события 

      КонецЕсли;     
        
КонецПроцедуры
 
И не работает !
   antihacker
 
29 - 17.01.19 - 14:40
Пробовал даже так
ОповеститьОбИзменении(Тип("СправочникСсылка.КлассификацияПоступлений")); 

Все равно не работает.
   DrWatson
 
30 - 17.01.19 - 14:55
(29)
.Справку невнимательно читал. Решил сам проверить. 8.3.13.1513.
Достаточно только ОповеститьОбИзменении. Не надо передавать управление в форму обновляемого справочника, не надо обновлять отображение. Всё само работает.
Вот как выглядит изменение из документа:

&НаСервереБезКонтекста
Процедура УстановитьНовоеНаименованиеНаСервере(Спр2Ссылка)
    Спр2Объект = Спр2Ссылка.ПолучитьОбъект();
    Спр2Объект.Наименование = ТекущаяДата();
    Спр2Объект.Записать();
КонецПроцедуры

&НаКлиенте
Процедура УстановитьНовоеНаименование(Команда)
    УстановитьНовоеНаименованиеНаСервере(Объект.Реквизит1);
    ОповеститьОбИзменении(Объект.Реквизит1);
КонецПроцедуры
   DrWatson
 
31 - 17.01.19 - 15:00
+(30) Это если считать, что Спр2 ты меняешь из команды документа. Потому что на (27) так и не ответил.
   antihacker
 
32 - 17.01.19 - 15:02
DrWatson. сорри не заметил. Да так и есть.
   antihacker
 
33 - 17.01.19 - 15:04
Пытался вот так

&НаКлиенте
Процедура Сопоставить(Команда)
 

     Для Каждого ТекСтрока Из Объект.ТЧИмпортированныеДанные Цикл
         
         Форма1 = ТекСтрока.КПиКР.ПолучитьФорму();
         Форма1.ОбновитьФорму();
         
     КонецЦикла;     
 
КонецПроцедуры


пишет Метод объекта не обнаружен (ПолучитьФорму)
 
 
   antihacker
 
34 - 17.01.19 - 15:08
Пробовал вот так

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


Не реагирует.
   DrWatson
 
35 - 17.01.19 - 15:15
(34) Не знаю. Я сделал готовый пример - работает. Вероятно, в твоём случае есть ещё какие-нибудь детали, о которых ты не рассказал.
Вот работающий пример:
https://drive.google.com/open?id=11-9FqJaK2qiHtwnov5ammtPa3znXQJ9E
   antihacker
 
36 - 17.01.19 - 15:23
Вот так мне удалось запустить процедуру на форме


     Для Каждого ТекСтрока Из Объект.ТЧИмпортированныеДанные Цикл
         
         Форма1 = ПолучитьФорму("Справочник.КлассификацияПоступлений.Форма.ФормаЭлемента", новый Структура("Ключ",ТекСтрока.КПиКР)); 
         Форма1.ОбновитьФорму();   
              
     КонецЦикла;

Отладчиком вижу что ОбновитьФорму() срабатывает.

Вот код

&НаКлиенте
Процедура ОбновитьФорму() Экспорт
     
    ОбновитьОтображениеДанных();    
    
 КонецПроцедуры

Но ничего не меняется.
   antihacker
 
37 - 17.01.19 - 15:29
У тебя формат конфиши выше чем у меня ( У тя 8,3,13 у меня 8,3,12
   DrWatson
 
38 - 17.01.19 - 15:31
(39) Этот код ничего и не меняет.
ОбновитьОтображениеДанных
Полезен при изменении значений реквизитов формы вне формы, в тот момент, когда форма отображается на экране.

Твоя форма только что открыта, её реквизиты никто не менял. Ничего и не должно было измениться.
   antihacker
 
39 - 17.01.19 - 15:31
Тема закрыта.

Получилось вот так.

&НаКлиенте
Процедура ОбновитьФорму() Экспорт
 
    ОповеститьОбИзменении(Объект.КатегорияПоступления);
 КонецПроцедуры


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует