Имя: Пароль:
1C
1С v8
упр. формы - как получить значение из реквизита ХранилищеЗначения в новом объект
0 Trance_1C
 
17.04.14
10:57
Всем приветы! Подскажите пожалуйста по Хранилишу значения - Есть у меня документ с реквизитом типа ХранилищеЗначения, в нем хранятся структуры с настройкой СКД. все бы хорошо, но при открытии нового скопированного документа реквизит не читается, а после записи очищается.
Хотя до открытия в подписке на событие при копировании реквизит нового док-та заполнен содержимым документа источника, а в форме ПриСозданииНаСервере() там уже пусто.
Как его получить?
1 Trance_1C
 
17.04.14
10:59
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
        
    //+++ Получим настройку отбора статей.
    ЭтотОбъект = РеквизитФормыВЗначение("Объект");
    св = ЭтотОбъект.ХранилищеНабораСтатей.Получить();
    Если ТипЗнч(св) = Тип("Структура") Тогда
        св.Вставить("ФлагИзмененияНастройки",Ложь);
    Иначе
        св = Новый Структура;
        св.Вставить("ФлагИзмененияНастройки",Ложь);
    КонецЕсли;
    АдресАД = ПоместитьВоВременноеХранилище(св,вГуид);
    //+++
    
КонецПроцедуры // ПриСозданииНаСервере()
2 Trance_1C
 
17.04.14
11:00
ПриСозданииНаСервере читает реквизит уже записанных документов нормально, а если открывается новый, скопированный уже не читает :(
3 Trance_1C
 
17.04.14
11:01
Как с этим жить?! :(
4 Trance_1C
 
17.04.14
11:03
может это вообще нормально для платформы 8.2.19.83?
5 Trance_1C
 
17.04.14
11:06
Ну чтоже вы, такая интересная тема - как перекладывать из хранилища в хранилище, и никто не пишет...
6 SergeyKB
 
17.04.14
11:13
ПриЧтенииНаСервере
7 SergeyKB
 
17.04.14
11:16
(6) не то
только для записанных отрабатывает
8 Trance_1C
 
17.04.14
11:18
(7) да не подходит...
и как тут выкручиваться, через временное хранилище с постоянным адресом перед копированием туда ложить, а после копирования оттуда брать :)
9 SergeyKB
 
17.04.14
11:19
Параметры.ЗначениеКопирования
10 SergeyKB
 
17.04.14
11:19
в обработчике ПриСозданииНаСервере, содержит ссылку
11 SergeyKB
 
17.04.14
11:19
дальше дело техники
12 Trance_1C
 
17.04.14
11:22
(10) У нового объекта ссылки нет :)
13 SergeyKB
 
17.04.14
11:25
(12)
Если элемент создаётся копирование то в Параметры.ЗначениеКопирования заносится исходная ссылка на объект копирования
в противном случае элемент ЗначениеКопирования  не заполяется
14 Trance_1C
 
17.04.14
11:25
Мне кажется дело в платформе, если в подписке на событие при копировании, реквизит заполнен а следом в форме ПриСозданииНаСервере() там уже ничего нет, и записывается новый документ с пустым реквизитом - т.е. он просто не копируется...
15 H A D G E H O G s
 
17.04.14
11:26
счаст проверим
16 SergeyKB
 
17.04.14
11:26
реквизиты с Типом Хранилище значения не доступны в обработчике ПриСозданииНаСервере()
17 SergeyKB
 
17.04.14
11:27
для объекта
18 Trance_1C
 
17.04.14
11:29
ПриСозданииНаСервере ЭтаФорма.Параметры.ЗначениеКопирования
Там есть документ источник, и тут я конечно могу вытащить свою структуру, но все же, я скопировал документ а часть реквизитов придется переносить самому? :)
19 SergeyKB
 
17.04.14
11:31
(18) скопируй документ программно и проверь очистку значения реквизита типа ХранилищеЗначения
20 SergeyKB
 
17.04.14
11:32
(18) Если не очистится при программном создании, то видимо при интерактивной работе, через упр. форму реквизиты данного типа
- не переносятся
- затираются платформой

по вкусу
21 Trance_1C
 
17.04.14
11:33
у меня тоже было подозрение что это фича платформы, если в таком реквизите будет файл, то процесс копирования на клиенте может занять кучу времени...
22 H A D G E H O G s
 
17.04.14
11:36
(21) На клиенте файла нет
23 H A D G E H O G s
 
17.04.14
11:36
Это печальная фича
24 SergeyKB
 
17.04.14
11:36
УФ формально не работают с типом ХранилищеЗначения
так как :
-нельзя создать реквизит формы данного типа
-нельзя обратиться напрямую к реквизиту даного типа для данных фопма структура
25 SergeyKB
 
17.04.14
11:37
* форма
26 H A D G E H O G s
 
17.04.14
11:37
Процедура ПриКопировании(ОбъектКопирования)
    ЭтотОбъект.Двоичные=Новый ХранилищеЗначения(ОбъектКопирования.Двоичные.Получить());
КонецПроцедуры

Это в модуле объекта отрабатывается, а, затем
    ЭтотОбъект=РеквизитФормыВЗначение("Объект");
    Хранилище=ЭтотОбъект.Двоичные.Получить();
Хранилище - пустое.

Ну вот нахера так делать?
27 SergeyKB
 
17.04.14
11:37
(23) есть способы обхода, для решения задач
так что не совсем всё печально
28 Trance_1C
 
17.04.14
11:39
(24) да и зачем все это, можно все вытащить из объекта на сервере и вывалить на форму результат обработки ссылку на файл и прочее.
Клиенту вообще не обязательно перетаскивать все на форму.
29 Trance_1C
 
17.04.14
11:42
Проблема решена:
ПриСозданииНаСервере  получаю из хранилища источника его содержимое и перекладываю в новый документ
СодержимоеХранилища = ЭтаФорма.Параметры.ЗначениеКопирования.ПолучитьОбъект().РеквизитХранилища.Получить();
30 Trance_1C
 
17.04.14
11:48
(26) Я что-то вас не понял, уважаемый, так можно таким образом получить содержимое хранилища источника, или в этом кроется что-то ужасное, если ваш комментарий "Ну вот нахера так делать".
Вроде описан рабочий способ, хотя я оставлю свое решение.
31 SergeyKB
 
17.04.14
11:49
(29)
думаю обращение в контексте формы

ЭтаФорма.(код)

излишне

так как

- режет глаз
- Возможно сказывается на быстродействие, хотя не уверен
32 Trance_1C
 
17.04.14
11:51
(31) на вялом сервере может и скажется, хотя конечно скажется в любом случае, но что поделать...
Юзеру дольше будет забивать сложный отбор, чем лишние 0.05 сек. при открытии формы нового дока.
33 SergeyKB
 
17.04.14
11:52
(32)
я не про то

а то что

Параметры.ЗначениеКопирования.ПолучитьОбъект().РеквизитХранилища.Получить()

ЭтаФорма.Параметры.ЗначениеКопирования.ПолучитьОбъект().РеквизитХранилища.Получить();

равносильно в контексте формы
и вот зачем народ пишет обращение к ЭтаФорма ?
34 SergeyKB
 
17.04.14
11:55
(32)
>Юзеру дольше будет забивать сложный отбор, чем лишние 0.05 сек. при открытии формы нового дока.

юзеру без разницы, так как метод исполняется долго.
35 SergeyKB
 
17.04.14
11:55
тьфу на сервере
36 Trance_1C
 
17.04.14
11:58
(33) Все верно, Спасибо вам SergeyKB :)