ПоместитьВоВременноеХранилище работает не пойми как

1. leks88 25 06.12.17 00:48 Сейчас в теме
Добрый день господа знающие, подскажите где косяк!

Есть внешняя обработка где таблица значений (созданная программно) очищается, потом заполняется и помещается во временной хранилище в цикле, в момент записи в хранилище таблица значений заполнена верно, но (!) после окончания цикла все записи в хранилище принимают значение Последней записи.

Такого происходить категорически не должно, ведь каждая запись в хранилище под своим уникальным идентификатором и в цикле происходит только запись Нового значения.

Конфигурация УТ 11.1.10.193, Платформа 8.3.10.2580, база файловая, код обработки:

	Объект.ДанныеДокументов.Очистить();	
	Для каждого Направление Из Направления Цикл
		Перемещение.Очистить();
		Для каждого Стр Из Общая Цикл
			Если Стр.Откуда = Направление.Откуда
			И Стр.Куда 	     = Направление.Куда Тогда
				НСтр = Перемещение.Добавить();
				ЗаполнитьЗначенияСвойств(НСтр,Стр);
			КонецЕсли;
		КонецЦикла;
		Адрес = ПоместитьВоВременноеХранилище(Перемещение,Новый УникальныйИдентификатор);
		НСтрАдрес = Объект.ДанныеДокументов.Добавить();
		НСтрАдрес.АдресВХранилище = Адрес;
	КонецЦикла;

	//Тут же проверяю значения записанные в хранилище и они одинаковые (!), чего быть не должно
	Для каждого Данные Из Объект.ДанныеДокументов Цикл
		ТЗ = ПолучитьИзВременногоХранилища(Данные.АдресВХранилище);
	КонецЦикла;
Показать
По теме из базы знаний
Найденные решения
3. vadim1011985 100 06.12.17 01:11 Сейчас в теме
(1) Судя по описанному поведению во временное хранилище пишется ссылка на объект , грубо говоря это указатель на область памяти где лежит данная таблицу Объект у вас один эта таблица перемещения , а указателей много , но все они указывают на одну и ту же областью.

Мне кажется что бы исправить данное поведение необходимо помещать клоны этой таблицы в хранилище

Адрес = ПоместитьВоВременноеХранилище(Перемещение.Скопировать(),Новый УникальныйИдентификатор);
ediks; Yan_Malyakov; Xershi; +3 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. vadim1011985 100 06.12.17 01:11 Сейчас в теме
(1) Судя по описанному поведению во временное хранилище пишется ссылка на объект , грубо говоря это указатель на область памяти где лежит данная таблицу Объект у вас один эта таблица перемещения , а указателей много , но все они указывают на одну и ту же областью.

Мне кажется что бы исправить данное поведение необходимо помещать клоны этой таблицы в хранилище

Адрес = ПоместитьВоВременноеХранилище(Перемещение.Скопировать(),Новый УникальныйИдентификатор);
ediks; Yan_Malyakov; Xershi; +3 Ответить
4. leks88 25 06.12.17 01:51 Сейчас в теме
(3), Ура, заработало!!! Спасибо за подсказку огромное
6. Snouphruh 04.04.23 08:56 Сейчас в теме
(1) вместо
	Перемещение.Очистить ();

можно написать:
	ПеремещениеНовый = Перемещение.СкопироватьКолонки ();

или просто создавать новую ТЗ и новые колонки в ней, но так кода будет немного побольше.

и в строке
	Адрес = ПоместитьВоВременноеХранилище(Перемещение,Новый УникальныйИдентификатор);

имя переменной Перемещение заменить на ПеремещениеНовый.
2. artkor 278 06.12.17 01:09 Сейчас в теме
в строке
ПоместитьВоВременноеХранилище(Перемещение,Новый УникальныйИдентификатор)
попробуйте УИД самой формы поставить
5. leks88 25 06.12.17 01:52 Сейчас в теме
(2), Так не работает, пробовал..
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот