v7: Таблица значений, содержащая списки. Ссылки. Значения. #208215


#0 by twilight5023
Собственно вопрос возник у меня в ходе решения другой задачи, но смысл остается тем же. Допустим имеется таблица значений (ТЗ1), состоящая из двух колонок "Описание списка", "Список элементов". Элементами второй колонки, как нетрудно догадаться из названия являются списки значений. Необходимо скопировать в другую таблицу (ТЗ2) значений все строки первой, плюс в получившейся таблице изменить кое-какие элементы в списках и описания. Как правильно это сделать? И в каких случаях элементы передаются ссылками, а в каких значениями? Ниже я сделал собственные выводы, хочется чтобы вы подтвердили или опровергли их... 1. Присвоение. ТЗ2 = ТЗ1. Ну здесь понятно, при таком присвоении в ТЗ2 оказывается ссылка на первую таблицу. Соответсвенно при редактировании описаний и списков в ТЗ2 аналогичные изменения получаются и в исходной таблице. Т.к. это просто ссылка. 2. Выгрузка / Загрузка. ТЗ1.Выгрузить(ТЗ2) или же ТЗ2.Загрузить(ТЗ1). Здесь поля описания передаются как значения, т.е. если отредактировать в первой строке ТЗ2 поле описания, то в ТЗ1 оно не изменится. А вот списки значений, содержащиеся во втором поле передаются по ссылке. Соответствено, если мы спозиционируемся на первой строке ТЗ2, полученной выгрузкой / загрузкой и добавим элемент к списку значений, то он добавится и к "списку значений, хранящемся в первой таблице", т.к. списки передались ссылками. 3. Копирование. Вот тут я задумался... можно конечно выгрузить ТЗ1 в ТЗ2, как в варианте 2, затем для каждой строки создавать новый объект список значений, выгружать в него список на который ссылается соответствующее поле первой таблицы, а потом делать присвоение ко второй. Это как один вариант... второй вариант, до которого я дошел, это использование такого кода: стр = ЗначениеВСтрокуВнутр(ТЗ1); Тогда значения, в том числе и списки значений передаются действительно значениями. Но насколько это корректно? Как правильнее получить копию таблицы значений элементами, которой являются списки значений?
#1 by ТелепатБот
#2 by Стрелок
ИМХО сам себя запутал. во всех случая будет значение а никакие не ссылки. попробуй перед тем как умозаключениями заниматься.....
#3 by FreeFin
Не смог прочесть ник...с пяти раз... А в таблицах... можно "параллельно" по-строкам пробежать в одном цикле и проставить ЧтоТамНуна.
#4 by twilight5023
Попробовал... даже обработку специально написал тестовую. Я сначала привык пробовать, а потом вопросы задавать...
#5 by Стрелок
и чего? ты хочешь сказать что если я напишу ТЗ1=ТЗ2 а потом то и в ТЗ1 добавится строка? плохо ты тестил... неправильно....
#6 by Стрелок
ТвиЛайтПятьдесятДвадцатьТри
#7 by twilight5023
+4 Поясни, что ты имеешь ввиду под "во всех случая будет значение". Смотри, выгружаем ТЗ1 в ТЗ2. Позиционируемся в ТЗ2 на первую строку. Берем ТЗ2.СписокЭлементов.ДобавитьЗначение("что-то там") ... потом лезем в ТЗ1.СписокЭлементов ... смотрим, и размер списка изменился на 1. Последний элемент добавился и в него.
#8 by Стрелок
бред сивой кобылы
#9 by Стрелок
ты неверено написал обработку тестовую там есть отнкости обращения к вложенным спискам и ТЗ. нужно при каждом перепозиционировании на следующую строку основной ТЗ пересоздавать обхект, в который ты потом передаёшь ссылку на вложенную ТЗ. иначе у тебя всё время одна и та же ТЗ вложеная
#10 by Terv
может 8,0 ?
#11 by Каанкереде
не...все правильно....у него в таблицах ссылки на списки значений.
#12 by Стрелок
в обоих? а сами списки где? и что значит "ссылки"? растолкуй... сколько работаю с вложенными списками и ТЗ а такого чуда не видел... может чего не знаю и всё проще?
#13 by twilight5023
Вот обработка... , там все наглядно можно посмотреть. Кто хочет - может скачать, попробовать, она небольшая.
#14 by Каанкереде
Попробуй так-
#15 by Стрелок
ну ты хитрован... списки то на форме и ты не заполняешь их вложенными а просто ссылаешься на них..... это совсем не то что я имел в виду и подумал... пойду покушаю надо предупреждать что списки у тебя на форме как и ТЗ
#16 by Стрелок
И чего? всё верно - до пересоздания объекта ссылка существует, но это бессмысленно для нескольких строк в ТЗ.
#17 by twilight5023
Я не говорил что заполняю их вложенными... изначально вопрос звучал так, есть уже заполненная ТЗ, не важно где и как она заполняется. Мне нужно ее полностью скопировать во вторую, чтобы можно было работать со списками и со всеми колонками и при этом умудриться не затереть содержимое исходной ТЗ, из-за того что где-то есть ссылки.
#18 by twilight5023
Здесь я хотел сказать что при изменении значения во второй таблице оно поменяется и в первой... простой пример: 2All: Я не любитель поспорить, просто хочу понять...
#19 by twilight5023
+18: Меняется ведь... про это я и говорил в под первым пунктом.
#20 by twilight5023
Как правильнее скопировать таблицу, содержащую ссылки на списки значений (вместе со списками естественно). Так можно? Или лучше создавать новый список, выгружать в него элементы из исходного (который в ТЗ1) и присваивать значение ТЗ2.СписокЭлементов = ВновьСозданныйСписок?
#21 by Terv
вот так будет копироваться, а не передоваться по ссылке Процедура НачальноеЗаполнение ...... КонецПроцедуры
#22 by Terv
+ 21 описался, вот так ...... КонецПроцедуры
#23 by twilight5023
Угу... вообщем-то то же самое, что я описал в конце только в коде ;)
#24 by Terv
похоже, только разница  в том что сразу при заполнении 1й ТЗ, списки не передаются а копируется, а дальше делай с ТЗ что хочешь
#25 by twilight5023
Ну 1-я ТЗ по-условию у нас исходная... или что ты имел ввиду?
#26 by twilight5023
+25 Чтобы сразу уточнить в я говорил про 2 варианта:
#27 by twilight5023
Ап... комментарии приветствуются. Ну и по-поводу , на ваш взгляд, как лучше копировать? Целесообразно ли для этих целей использовать ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр?
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С