Имя: Пароль:
1C
 
не запоминается дерево значений в управляемых фомах
,
0 hawksib
 
18.08.16
12:12
Всем привет.
У меня есть внешняя обработка с формой, которую я открываю программно, в обработку я добавил таблицу с тремя колонками и связал её с типом реквизитом ДеревоГруппировок типа дерево значений (в реквизитах формы у меня так же есть три колонки)
когда я программно открываю форму, понятное дело, таблица пустая, я заполняю своё дерево и закрываю форму.
когда я повторно открываю форму таблица снова пустая...
уже перепробовал много всего, подскажите, что я делаю не так, пока самостоятельно дошел до вот этого


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ЗначениеВРеквизитФормы(РеквизитФормыВЗначение("Объект").ДеревоГруппировок, "Объект.ДеревоГруппировок");
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии()
    ПриЗакрытииНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПриЗакрытииНаСервере()
    РеквизитФормыВЗначение("Объект").ДеревоГруппировок = РеквизитФормыВЗначение("Объект.ДеревоГруппировок", Тип("ДеревоЗначений"));
КонецПроцедуры
1 Горогуля
 
18.08.16
12:14
а откуда вообще мысли о сохранении дерева?
2 hawksib
 
18.08.16
12:16
(1) переделываю свою обработку на УФ, вот и мысли, в обычных формах такой проблемы у меня не возникло
3 hawksib
 
18.08.16
12:52
с помощью такой костыля:
в модуле формы, откуда производится открытие:

&НаКлиенте
Процедура НастройкаГруппировок(Команда)
    Форма = ПолучитьФорму("ВнешняяОбработка.ОтчетПоДокументам.Форма.ФормаНастройкиГруппировокУП");
    СообщитьНаСервере("До открытия формы строк: ");
    Форма.ОткрытьМодально();
    СообщитьНаСервере("После закрытия формы строк: ");
КонецПроцедуры

&НаСервере
Процедура СообщитьНаСервере(НачалоСообщения)
     Сообщить(НачалоСообщения + Строка(РеквизитФормыВЗначение("Объект").ДеревоГруппировок.Строки.Количество()));
КонецПроцедуры

в модуле формы, где не запоминается дерево
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ЗначениеВРеквизитФормы(РеквизитФормыВЗначение("Объект").ДеревоГруппировок, "Объект.ДеревоГруппировок");
    Сообщить("При создании на сервере строк строк: " + Строка(РеквизитФормыВЗначение("Объект").ДеревоГруппировок.Строки.Количество()))
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии()
    ПриЗакрытииНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПриЗакрытииНаСервере()
    Сообщить("До записи реквизита строк: " + Строка(РеквизитФормыВЗначение("Объект").ДеревоГруппировок.Строки.Количество()));
    РеквизитФормыВЗначение("Объект").ДеревоГруппировок = РеквизитФормыВЗначение("Объект.ДеревоГруппировок", Тип("ДеревоЗначений"));
    Сообщить("После записи реквизита строк: " + Строка(РеквизитФормыВЗначение("Объект").ДеревоГруппировок.Строки.Количество()));
КонецПроцедуры

вычислил, что
До открытия формы строк: 0
При создании на сервере строк строк: 0
До записи реквизита строк: 1
После записи реквизита строк: 1
После закрытия формы строк: 0

т.е. связь с данными-то есть, но почему дерево очищается после закрытия формы?
4 KulakoffAlex
 
18.08.16
13:50
я правильно понимаю, что ты каждый раз получаешь новый экземпляр формы и открываешь его?
тогда вполне логично, что дерево у тебя будет пустое.
Если данные куда то сохраняешь в какой то реквизит обработки (например в таблицу), то при открытии формы тебе надо заново заполнить дерево.
5 hawksib
 
18.08.16
14:36
(4)да, правильно понимаете. а нельзя разве сохранить данные в реквизит обработки? и как это правильно сделать, понять не могу. разве связь с данными в уф не предполагает изменение самих данных?
6 hawksib
 
19.08.16
05:06
!актуально
7 Генератор
 
19.08.16
05:14
реквизиты обработки не сохраняются в базе данных, они живут только пока обработка открыта или создана программно, до ее закрытия/уничтожения
8 hawksib
 
19.08.16
05:27
(7) не об этом речь, подскажите, что читать про УФ, чувствую знаний просто не хватаеттт..
почему при остановке в отладуке Объект.Организация имеет тип значение СправочникСсылка.Организации, а Объект.ДеревоГруппировок - ДанныеФормыДерево
(реквизиты обработки Организация с типом значения СправочникСсылка.Организации и ДеревоГруппировок с типом значения ДеревоЗначений, а не данныеФормыДерево)
9 DrZombi
 
гуру
19.08.16
07:08
(0) >>> когда я повторно открываю форму таблица снова пустая...

Это магия и шаманство, срочно сжечь серверную :)
10 DrZombi
 
гуру
19.08.16
07:09
(2) Как бы странно :)
11 DrZombi
 
гуру
19.08.16
07:10
(8) Потому, что Сервер, это сервер.
А Клиент, это клиент.

На сервере мы работаем, на клиенте показываем данные с минимальным функционалом обработок
12 hawksib
 
19.08.16
07:12
(11) ну допустим ссылочные данные я могу увидеть на клиенте, а таблицы и деревья не могу, но как мне их связать с данными на сервере?
13 DrZombi
 
гуру
19.08.16
07:16
(12) Ты как только окажешься на стороне сервера, отладчиком посмотри, что там будет :)
14 DrZombi
 
гуру
19.08.16
07:21
+(12) Тебе чего хочется?
Что бы при закрытии формы, все сохранялось автоматом?

Так настрой форму.
Выстави галочки Автоматическое сохранение данных формы в настройках "Использовать"
И Сохранение данных формы в настройках "Использовать список"

Затем выставить галочку в реквизитах Формы, не перепутай :)
15 hawksib
 
19.08.16
07:26
(13) на сервере ничего особо не поменялось
https://yadi.sk/i/FJpzNzzEuKh7y

(14) в свойствах формы у меня уже стоит авто сохранение настроек и использование списка, а вот в реквизите формы какому свойству нужно галочку поставить ?
16 hawksib
 
19.08.16
07:36
https://yadi.sk/i/i3TaGv-ruKhPH
на более удачном скрине, видно, что остановка на сервере стоит
17 DrZombi
 
гуру
19.08.16
07:40
(16) Что это?... Оно так не работает :)
18 DrZombi
 
гуру
19.08.16
07:41
(15) На форме, вкладка реквизиты, когда выставляешь эти параметры, появляется галочка "Сохранение".
Вот её выстави.

Код из (16) Удали
19 hawksib
 
19.08.16
07:51
(18) конечно удалю эту ерись, спасибо, вопросы ещё есть, но стало намного лучше
20 hawksib
 
19.08.16
07:53
она мне теперь сохраняет значения в реквизите формы, а я хочу эти значения использовать при работе в другой форме, в объекте она их не сохраняет, так что всё ещё недоумеваю
21 Fish
 
19.08.16
07:56
(20) Ну так сохраняй в объекте, кто не даёт?
22 hawksib
 
19.08.16
07:59
(21) вот я со вчера не могу понять, как это делается, перепробовал тучу вариантов, сейчас ещё чуток поганокожу
23 hawksib
 
19.08.16
08:02
нет, это ерунда
24 hawksib
 
19.08.16
08:04
как в УФ дерево передать с одной формы на другую используя реквизит обработки с типом значения дерево?
25 hawksib
 
19.08.16
08:22
либо не используя глобальные переменные, но суть одна
26 DrZombi
 
гуру
19.08.16
08:53
(24) Плохо там с деревьями :)
27 DrZombi
 
гуру
19.08.16
08:53
+ Циклом
28 DrZombi
 
гуру
19.08.16
08:53
+ Мож кто еще варианты знает :)
29 KulakoffAlex
 
19.08.16
09:57
как вариант можно попробовать создать структуру. в структуру вставить твое дерево. Только на сервере, чтобы там было именно "Дерево значений", а не ДанныеФормыКОллекция. эту структуру передаешь в открываемую форму и там при создании на сервере заполняешь твое дерево.
30 hawksib
 
19.08.16
18:37
(29) была примерно такая мысль: в модуле объекта объявил переменную Дерево, при закрытии формы в которой отредактировано дерево на сервере сказал Дерево = РеквизитФормыВКоллекцию("Объект").ДеревоГруппировок, когда форма закрыта, снова смотрю значение переменной в другой форме Неопределено. чувствую куда-то не туда копаем, да и гав..окода такого я никогда в жизни не видел, очень не нравится такое решение
31 hawksib
 
19.08.16
18:38
(30) Опечатка РеквизитФормыВЗначение надо было написать в предыдущем сообщении
Основная теорема систематики: Новые системы плодят новые проблемы.