|
Копирование реквизита с типом ХранилищеЗначения в документе ПриКопировании() | ☑ | ||
---|---|---|---|---|
0
Leono27
19.03.21
✎
09:25
|
Всем трямс.
Дано: Самописная конфа на УФ 8.3.х. Требуется: При копировании документа скопировать реквизит ОбъектаКопирования с типом "ХранилищеЗначения". Реквизит хранит настройки различных элементов формы документа. Здесь важно уточнить, что форму нужно открыть в соответствии с этими настройками и оставить за пользователем выбор - записывать новый документ или нет. Что пошло не так: В модуле объекта следующий код: &НаСервере Процедура ПриКопировании(ОбъектКопирования) ХранилищеОК = ОбъектКопирования.РеквизитХЗ.Получить(); РеквизитХЗ = Новый ХранилищеЗначения(ХранилищеОК, Новый СжатиеДанных()); КонецПроцедуры На этом этапе всё ОК, при отладке в конце этой процедуры видно, что РеквизитХЗ заполнен, внутри (после вызова "получить") лежат искомые данные. Далее на форме создаваемого документа в процедуре "ПриОткрытии" вызываем функцию проверки заполненности этого реквизита: &НаСервере Функция РеквизитХЗзаполнен() Реквизиты = РеквизитФормыВЗначение("Объект"); Хранилище = Реквизиты.РеквизитХЗ.Получить(); Если Хранилище = Неопределено Тогда Возврат Ложь; Иначе Возврат Истина; КонецЕсли; КонецФункции И получаем "Ложь": РеквизитХЗ имеет значение "Неопределено". Нужна помощь, чую, что ларчик просто открывается, но допетрить "как" - не могу. |
|||
1
RomanYS
19.03.21
✎
09:47
|
Проблема вероятно не в копировании. Хранилище кажется не поддерживается в данных формы. Его надо читать в ПриЧтенииНаСервере и писать в ПриЗаписиНаСервере
|
|||
2
Leono27
19.03.21
✎
09:57
|
(1) Верно, Не поддерживается. Если обратиться по Объект.РеквизитХЗ - его не найдётся.
Но я же получаю значение реквизита на сервере. Если я всё правильно понимаю - это, фактически, ссылка. В ней всё должно быть. На форму планировал вернуть уже извлеченные из ХЗ данные. |
|||
3
1Снеговик
гуру
19.03.21
✎
10:04
|
Тоже помучился с этим.
В общем, есть реквизит объекта РасписаниеХранилище с типом ХранилищеЗначения и реквизит формы РасписаниеШаблона с типом Произвольный, где хранится РасписаниеРегламентногоЗадания.
Чтобы при копировании справочника копировался и реквизит с расписанием, при создании на сервере пишу:
|
|||
4
RomanYS
19.03.21
✎
10:13
|
(2) Не правильно понимаешь: РеквизитФормыВЗначение это конвертация данных формы в объект, в твоих данных формы уже нет ХЗ.
|
|||
5
Leono27
19.03.21
✎
10:27
|
(4) Я безусловно вижу логику в вашем сообщении и понимаю её. Но для меня это оказалось крайне неочевидно и стало интересно как на самом деле отрабатывает платформа =)
При обращении через Объект.РеквизитХЗ будет ошибка, на форме вообще нет реквизита из-за типа ХЗ. При обращении через РеквизитВЗначение реквизит уже существует. Т.е. он взят не из коллекции данных формы, где ему неоткуда взяться. И получаемое значение через "РеквизитВЗначение" имеет тип ДокументОбъект. И все реквизиты открытого документа есть (включая РеквизитХЗ) и заполнены согласно прописанной логике (кроме РеквизитаХЗ). Попробовал перенести весь код из "ПриОткрытии" в "ПриСозданииНаСервере" - эффект тот же. |
|||
6
Leono27
19.03.21
✎
10:29
|
(3) выглядит как то, что нужно =)
Спасибо! |
|||
7
RomanYS
19.03.21
✎
10:30
|
(5) Реквизит-то есть только данным в реквизите взяться неоткуда при твоем раскладе.
|
|||
8
Leono27
19.03.21
✎
10:37
|
(7) Понял, принял)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |