Имя: Пароль:
1C
1С v8
8.3 проблемы с ПоместитьВоВременноеХранилище
, , ,
0 lucifer
 
12.08.13
11:09
на 8.2 работало!
Помещаю ДокументОбъект во временное хранилище, выдает:
"Переданное значение не может быть помещено во временное хранилище"

НовыйДок = Документы.ДокументИсполнения.СоздатьДокумент();
........
пар = ПоместитьВоВременноеХранилище(НовыйДок, Новый УникальныйИдентификатор());


как обойти?
1 Defender aka LINN
 
12.08.13
11:11
Не помещай Объект в Хранилище.
Следующий!
2 lucifer
 
12.08.13
11:15
(1) не подходит, следующий
3 Defender aka LINN
 
12.08.13
11:18
(2) Что не подходит? Или ты где-то в (0) невидимым шрифтом задачу описал?
4 Omskdizel
 
12.08.13
11:20
А ссылку на этот объект получается поместить?

Ну и вообще, какой смысл объект туда помещать??
5 lucifer
 
12.08.13
11:22
(3) предложенный тобой вариант не подходит, моя задача тебя волновать не должна!
Вопрос простой, какого ... перелопалили ф-ю а в справке ничего не написала, судя по справке не должно быть ограничений на помещаемый объект
6 lucifer
 
12.08.13
11:22
(4) ну не было б смысла не помещал бы
7 Omskdizel
 
12.08.13
11:24
(5) "моя задача тебя волновать не должна!"
Вы, батенька, мало того, что хам, ибо вопрос вполне себе культурно был задан, так еще и малость идиотизмом страдаете похоже. В общем флаг вам в руки с вашей проблемой, занимайтесь любовью с ней самостоятельно.
8 ИсчадиеADO
 
12.08.13
11:29
(0) вот такие они, 1с-ники

сделай так: создай структуру с помощью метаданных и работай с ней как с документом, а потом заполняй документ
9 lucifer
 
12.08.13
11:30
(7) нууу давайте срач разведем на тему хамства.
Какая разница какая задача передо мной стоит? Я что попросил совета как сделать задачу лучше, или как обойти эту проблему, или как сделать по другому? Я задал вполне конкретный вопрос, с чего это вдруг перестала работать ф-я ПоместитьВоВременноеХранилище?
С надеждой на то что может кто-то уже сталкивался, и есть решение
10 lucifer
 
12.08.13
11:31
(8) ну вот, хоть что-то дельное
11 banco
 
12.08.13
11:31
(0) В "1С:Предприятии 8.3" при помещении во временное хранилище значений, сериализация которых не поддерживается (например, ДокументОбъект.<Имя документа>, СправочникОбъект.<Имя справочника> и пр.), возникает ошибка "Переданное значение не может быть помещено во временное хранилище".

Для устранения несовместимости необходимо:

Выявить все места помещения значений во временное хранилище (поиском метода глобального контекста ПоместитьВоВременноеХранилище);
Проверить, что возможна сериализация типов значений объектов, помещаемых во временное хранилище. Для этого необходимо свериться с синтакс-помощником, убедившись, что в группе "Доступность" явно указана фраза "Сериализуется". При этом следует отличать сериализацию от XDTO-сериализации и XML-сериализации. Например, для типов СправочникОбъект.<Имя справочника> сериализация не поддерживается, хотя поддерживается XDTO-сериализация и XML-сериализация.
Если во временное хранилище значений помещается несериализуемое значение, следует пересмотреть проектное решение.
12 lucifer
 
12.08.13
11:38
(11) ДокументОбъект может быть сериализован как в XML так и в XDTO
13 lucifer
 
12.08.13
11:39
(11) этого я не понял:
"Например, для типов СправочникОбъект.<Имя справочника> сериализация не поддерживается, хотя поддерживается XDTO-сериализация и XML-сериализация."

Что значит сериализация не поддерживается, если поддерживается XDTO-сериализация и XML-сериализация
14 Defender aka LINN
 
12.08.13
11:42
(9) "Какая разница какая задача передо мной стоит?" - большая. Есть стойкое подозрение, что тобой сочинен костыль из отходов жизнедеятельности.
Вообще, если хочешь какой-то помощи - описывай ЗАДАЧУ.
15 serffer
 
12.08.13
11:42
(13) вроде вторым параметром ты неправильно передаеш:
Новый УникальныйИдентификатор()

Надо передавать переменную у которой продолжительное время жизни. Например айди формы, так во всех конфах в основном делается. или заведи строковый реквизит на форме ИД, или глобальную переменную.

как только ты выходиш из процедуры сборщик мусора удаляет ИДшник который ты передаеш вторым параметром. и следовательно удаляет твой оъект который хранится в хранилище.

вроде так) но могу ошибаться
16 banco
 
12.08.13
11:45
(13) читай внимательно. убедившись, что в группе "Доступность" явно указана фраза "Сериализуется"
17 lucifer
 
12.08.13
11:45
(15) не не в этом проблема, повторюсь в 8.2 все работало

Из справки:
<Адрес> (необязательный)
Тип: УникальныйИдентификатор; Строка.
18 lucifer
 
12.08.13
11:46
(16) не стоит, а инфа (11) откуда?
19 banco
 
12.08.13
11:47
(18) ИТС Перевод конфигураций на платформу "1С:Предприятие 8.3" без режима совместимости с версией 8.2.
20 lucifer
 
12.08.13
11:48
(19) так так так, а где режим совместимости включается?
21 Defender aka LINN
 
12.08.13
11:54
(20) Под стулом, где же еще.
22 lucifer
 
12.08.13
11:54
(14) (14) ок, задача:
Из одной формы открыть другую форму (форму документа) с частично заполненными полями из первой формы, но так что бы документ не был сохранен в базе, т.е. показать пользователю, если надо он нажмет сохранить, если нет то и не надо )

Раньше делал так:
НовыйДок = Документы.ДокументИсполнения.СоздатьДокумент();
// заполнял нужные реквизиты объекта
пар = ПоместитьВоВременноеХранилище(НовыйДок, Новый УникальныйИдентификатор());

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

И все работала и все были довольны.

Когда наткнулся на проблему пробовал  так:
 ФормаДока = ПолучитьФорму("Документ.ДокументИсполнения.ФормаОбъекта");
 ЗаполнитьОбъектФормыДокИсполнения(ФормаДока.Объект); // заполняются значения
 ОткрытьФорму(ФормаДока);

ошибка:
Нельзя изменять поле, содержащее объект данных формы
23 lucifer
 
12.08.13
11:57
P.S.
режим совместимости включен
24 lucifer
 
12.08.13
12:00
(21) нууу, вот тебе задача, давай решение )
или мозг вскипел?
25 lucifer
 
12.08.13
12:01
пока только вижу выход только такой (8)
26 Defender aka LINN
 
12.08.13
12:10
(22) ППЦ.

ФормаОбъекта = ПолучитьФорму("Документ.ИмяДокумента.ФормаДокумента");
ФормаОбъекта.Реквизит = Значение;
...
ФормаОбъекта.Открыть();
27 Defender aka LINN
 
12.08.13
12:11
(25) Вот и я о том жеж. В общем, надейся, что следующий программист не узнает твой адрес. А то, я так подозреваю, его ждет множество сюрпризов
28 lucifer
 
12.08.13
12:13
(26) -> (22)
"Когда наткнулся на проблему пробовал  так: "......


P.S.
ты хоть до конца дочитывай
29 Defender aka LINN
 
12.08.13
12:20
(28) Ты неправильно пробовал. Заметь, что в (26) код несколько отличается от твоего. И работает при этом.
Ну а если ты такой эстет, что тебе этот вариант не нравится - всегда есть обработка заполнения.
30 lucifer
 
12.08.13
12:25
(29) код в (26) заполняет реквизиты формы, а ты попробуй так:
ФормаОбъекта.Объект.Реквизит = значение
31 Defender aka LINN
 
12.08.13
12:28
(30) Так нельзя. Да и нахрена мне так пробовать, если заполнить документ, что и является целью, можно кодом из (26)?
Опять-таки, если тебя такой вариант не устраивает - всегда есть обработка заполнения.
32 lucifer
 
12.08.13
12:32
(31) в том-то и дело что нельзя, а что ж ты мне предлагаешь код (26) если там заполнение реквизитов формы, или мне все реквизиты объекта в реквизиты формы добавить ))

Что значит обработка заполнения?
33 lucifer
 
12.08.13
12:32
я остановился на варианте (8)
34 banco
 
12.08.13
12:50
(32) реквизиты формы правильнее заполнять в самой форме. передай в форму параметры, а в самой форме присозданиинасервере заполняй реквизиты формы.
35 lucifer
 
12.08.13
12:59
(34) мне не надо заполнять реквизиты формы
37 Defender aka LINN
 
12.08.13
13:43
(35) Кля. Ладно, персонально для тебя:

ФормаДокумента.Объект.Реквизит = Значение;

Так дошло?