Имя: Пароль:
1C
1С v8
8.2. Обновить дерево значений на форме
,
0 Tymoha
 
05.09.11
16:26
Коллеги, нужна помощь. Проблема в следующем:
Есть обработка, на ней есть дерево значений. При открытии формы, заполняем дерево на сервере (элементы справочника) передаем на клиента. Все ОК. Работаем с деревом (добавляем, удаляем элементы) - перезаполняем на сервере, возвращаем на клиента - все ОК. НО ЕСЛИ ПЕРЕИМЕНОВАТЬ элемент, то на сервере заполняется нормально, а вот на клиенте получаю старое (не переименованное) значение ...
В чем может быть загвоздка?
Обмен сервер-клиент ходит:
Дерево = РеквизитФормыВЗначение("ДеревоСборки");
//заполняем
ЗначениеВРеквизитФормы(Дерево, "ДеревоСборки");
1 acsent
 
05.09.11
16:28
ЗАЧЕМ переименовывать реквизит?
2 Tymoha
 
05.09.11
16:34
(1) не реквизит. элемент справочника ...
3 Tymoha
 
05.09.11
17:18
ап
4 mikecool
 
05.09.11
17:18
оповестить - обработкаоповещения?
5 Tymoha
 
05.09.11
17:21
(4) и что по ней делать? возможно я не совсем точно описал проблему: пользователь нажимает кнопку "Переименовать", вводит строку-новое наименование, на сервере я переименовываю, а вот при возврате дерева назад (на клиента) возвращается старое наименование ...
6 Tymoha
 
05.09.11
17:49
вверх
7 Tymoha
 
05.09.11
18:27
апну еще разочек. Прикольная вообще картина получается:
переименованный справочник обновляется только при выходе из 1С и снова заходе. Просто закрыть/открыть форму обработки недостаточно ....
8 kosts
 
05.09.11
18:37
(7) видимо клиент не знает про изменение. нужно как-то ему сообщить.
9 Tymoha
 
05.09.11
18:39
(8) использую:
   ЭтаФорма.ДеревоСборки.ПолучитьЭлементы().Очистить();
   Дерево = РеквизитФормыВЗначение("ДеревоСборки");
   Выборка = Справочники.КалкСборки.Выбрать(,НПК.Ссылка);
   Пока Выборка.Следующий() Цикл
       Сборка = Дерево.Строки.Добавить();
       Сборка.ТМЦ = Выборка.Ссылка;
       Для Каждого СтрЭС Из Выборка.СоставСборки Цикл
           ТМЦ = Сборка.Строки.Добавить();
           ТМЦ.ТМЦ = СтрЭС.ЭлементСборки;
           ТМЦ.Количество = СтрЭС.Количество;
       КонецЦикла;
   КонецЦикла;
   ЗначениеВРеквизитФормы(Дерево, "ДеревоСборки");    


знаешь другие способы?
10 Tymoha
 
05.09.11
18:40
+(9) причем: Сборка.ТМЦ получает ВЕРНОЕ значение (по отладчику)... почему в дереве старое?????????
11 nicxxx
 
06.09.11
03:12
а если попробовать обмен с сервером через ДанныеФормы?
вот так: ДеревоФорма = ДанныеФормыВЗначение(Дерево,Тип("ДеревоЗначений"));
...
ЗначениеВДанныеФормы(ДеревоФорма, Дерево);
12 Tymoha
 
06.09.11
07:00
(11) к сожалению, легче не стало ... насколько я смог разобраться: эта скотина (1С) производит сверку переданного дерева с тем что было раньше, и в случае совпадения (ид элементов справочника чтоль) дерево и не обновляет ... другого объяснения не вижу ... (((
13 nicxxx
 
06.09.11
07:08
(12) а что-то непонятно, как у тебя происходит процесс переименования?
я вот щас сделал такую же обработку, как у тебя, активирую элемент, в поле появляются 2 кнопки - для открытия списка и для открытия элемента, открываю элемент (сразу или через список, не важно), переименовываю его - он сразу в дереве отображается с новым названием, и при следующем открытии также показывается новое название
14 Tymoha
 
06.09.11
07:18
(13) у меня в дереве, не собсвтенно сам справочник, а сборная солянка ... то есть, источник данных не напрямую справочник
15 Tymoha
 
06.09.11
07:18
+(14) и не спрашивай почему я так сделал ... вчера казалось что так надо ... сейчас уже не могу придумать/вспомнить )))
16 nicxxx
 
06.09.11
07:21
да мне пофиг твои причины, сам так же делаю :) дай код, которым дерево заполняешь
17 Tymoha
 
06.09.11
07:24
(16) см в (9)
18 Tymoha
 
06.09.11
07:24
ну поменялось там:
Дерево = ДанныеФормыВЗначение(ЭтаФорма.ДеревоСборки,Тип("ДеревоЗначений"));
ЗначениеВДанныеФормы(Дерево, ЭтаФорма.ДеревоСборки);
19 nicxxx
 
06.09.11
07:28
элементСборки - это че? не ссылка?
20 Tymoha
 
06.09.11
07:30
структура справочника для дерева:
Спр "КалкСборки". Имеет табличную часть "Состав сборки". В ней: Элемент сборки = ссылка спр. "КалкТМЦ", кол-во
21 nicxxx
 
06.09.11
07:34
ну т.е. в колонке ТМЦ у тебя везде ссылки?
значит чтобы переименовать элемент, ты его открываешь и редактируешь наименование в форме? ( у меня это так происходит)
22 Tymoha
 
06.09.11
07:42
(21) неа. в том то и дело ... передаю наименование на сервер, и там переименовыаю, записываю, строю дерево и передаю взад. вот тут то и затык (с кешем сеанса получается?)
23 nicxxx
 
06.09.11
08:07
поведение, описанное в (0) подтверждаю. как решить щас поищу
24 nicxxx
 
06.09.11
09:10
даже программное создание реквизитов формы не помогает
25 Tymoha
 
06.09.11
09:16
(24) таки где-то хранится кеш?
26 nicxxx
 
06.09.11
09:18
да хер его знает.
экспериментальным путем выяснилось что помогает только метод ОбновитьИнтерфейс(), попробуй. правда дохрена вызово сервера делается, но кроме него ничто не работает, дажет ОбновитьОтображениеДанных()
27 Tymoha
 
06.09.11
09:38
(26) понял ... спасибо, буду пробовать :)