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

Копирование реквизита с типом ХранилищеЗначения в документе ПриКопировании()

Копирование реквизита с типом ХранилищеЗначения в документе ПриКопировании()
Я
   Leono27
 
19.03.21 - 09:25
Всем трямс.

Дано:
  Самописная конфа на УФ 8.3.х.
Требуется:
  При копировании документа скопировать реквизит ОбъектаКопирования с типом "ХранилищеЗначения". Реквизит хранит настройки различных элементов формы документа. Здесь важно уточнить, что форму нужно открыть в соответствии с этими настройками и оставить за пользователем выбор - записывать новый документ или нет.
Что пошло не так:

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

На этом этапе всё ОК, при отладке в конце этой процедуры видно, что РеквизитХЗ заполнен, внутри (после вызова "получить") лежат искомые данные.

Далее на форме создаваемого документа в процедуре "ПриОткрытии" вызываем функцию проверки заполненности этого реквизита:
&НаСервере
Функция РеквизитХЗзаполнен()
    Реквизиты = РеквизитФормыВЗначение("Объект");
    Хранилище = Реквизиты.РеквизитХЗ.Получить();
    Если Хранилище = Неопределено Тогда
        Возврат Ложь;
    Иначе
        Возврат Истина;
    КонецЕсли;
КонецФункции

И получаем "Ложь": РеквизитХЗ имеет значение "Неопределено".
Нужна помощь, чую, что ларчик просто открывается, но допетрить "как" - не могу.
   RomanYS
 
1 - 19.03.21 - 09:47
Проблема вероятно не в копировании. Хранилище кажется не поддерживается в данных формы. Его надо читать в ПриЧтенииНаСервере и писать в ПриЗаписиНаСервере
   Leono27
 
2 - 19.03.21 - 09:57
(1) Верно, Не поддерживается. Если обратиться по Объект.РеквизитХЗ - его не найдётся.
Но я же получаю значение реквизита на сервере. Если я всё правильно понимаю - это, фактически, ссылка. В ней всё должно быть. На форму планировал вернуть уже извлеченные из ХЗ данные.
   1Снеговик
 
3 - 19.03.21 - 10:04
Тоже помучился с этим.
В общем, есть реквизит объекта РасписаниеХранилище с типом ХранилищеЗначения и реквизит формы РасписаниеШаблона с типом Произвольный, где хранится РасписаниеРегламентногоЗадания.

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
  Если РасписаниеШаблона <> Неопределено Тогда
    ТекущийОбъект.РасписаниеХранилище = Новый ХранилищеЗначения(РасписаниеШаблона);
  КонецЕсли;    
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
  РасписаниеШаблонаХранилище = ТекущийОбъект.РасписаниеХранилище.Получить();
  Если РасписаниеШаблонаХранилище <> Неопределено Тогда
    РасписаниеШаблона = РасписаниеШаблонаХранилище;
  КонецЕсли;    
КонецПроцедуры


Чтобы при копировании справочника копировался и реквизит с расписанием, при создании на сервере пишу:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
  Если Параметры.Ключ.Пустая() Тогда
    Если ЗначениеЗаполнено(Параметры.ЗначениеКопирования) Тогда 
      РасписаниеШаблона = Параметры.ЗначениеКопирования.РасписаниеХранилище.Получить();
    КонецЕсли;    
  КонецЕсли;    

   RomanYS
 
4 - 19.03.21 - 10:13
(2) Не правильно понимаешь: РеквизитФормыВЗначение это конвертация данных формы в объект, в твоих данных формы уже нет ХЗ.
   Leono27
 
5 - 19.03.21 - 10:27
(4) Я безусловно вижу логику в вашем сообщении и понимаю её. Но для меня это оказалось крайне неочевидно и стало интересно как на самом деле отрабатывает платформа =)
При обращении через Объект.РеквизитХЗ будет ошибка, на форме вообще нет реквизита из-за типа ХЗ.
При обращении через РеквизитВЗначение реквизит уже существует. Т.е. он взят не из коллекции данных формы, где ему неоткуда взяться. И получаемое значение через "РеквизитВЗначение" имеет тип ДокументОбъект. И все реквизиты открытого документа есть (включая РеквизитХЗ) и заполнены согласно прописанной логике (кроме РеквизитаХЗ).
Попробовал перенести весь код из "ПриОткрытии" в "ПриСозданииНаСервере" - эффект тот же.
   Leono27
 
6 - 19.03.21 - 10:29
(3) выглядит как то, что нужно =)
Спасибо!
   RomanYS
 
7 - 19.03.21 - 10:30
(5) Реквизит-то есть только данным в реквизите взяться неоткуда при твоем раскладе.
   Leono27
 
8 - 19.03.21 - 10:37
(7) Понял, принял)

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.