Имеется вот такой кусок кода:
//лпТЗ = Таблица Значений в строках которой уже есть Списки Значений, которые должны быть еще обработаны и обратно помещены в эти строки, колонка - "Параметры"
//лпНовоеЗначение - Какое то там значение полученное в процессе обработки, тип любой
лпКолСтрок = лпТЗ.КоличествоСтрок();
Для лпСч = 1 По лпКолСтрок Цикл
лпТЗ.ПолучитьСтрокуПоНомеру(лпСч);
лпНовоеЗначение = ПолучитьКакоеТоТамЗначение(Парам1,Парам2);
лпЗначение = лпТЗ.ПолучитьЗначение(лпСч,"Параметры");
лпЗначение.Установить("Значение",лпНовоеЗначение);
лпТЗ.УстановитьЗначение(лпСч,"Параметры",лпЗначение);
КонецЦикла
лпКолСтрок = лпТЗ.КоличествоСтрок();
Для лпСч = 1 По лпКолСтрок Цикл
лпТЗ.ПолучитьСтрокуПоНомеру(лпСч);
лпНовоеЗначение = ПолучитьКакоеТоТамЗначение(Парам1,Парам2);
лпЗначение = лпТЗ.ПолучитьЗначение(лпСч,"Параметры");
лпСЗ = СоздатьОбъект("СписокЗначений");//Создал список поскольку переменная не помагает
лпЗначение.Выгрузить(лпСЗ);
лпСЗ.Установить("Значение",лпНовоеЗначение);
лпТЗ.УстановитьЗначение(лпСч,"Параметры",лпСЗ);
КонецЦикла
лпТЗ.Параметры.Установить("Значение",лпНовоеЗначение);
а так, наверное, тоже работает?
лпСЗ = СоздатьОбъект("СписокЗначений");
лпКолСтрок = лпТЗ.КоличествоСтрок();
Для лпСч = 1 По лпКолСтрок Цикл
лпТЗ.ПолучитьСтрокуПоНомеру(лпСч);
лпНовоеЗначение = ПолучитьКакоеТоТамЗначение(Парам1,Парам2);
лпЗначение = лпТЗ.ПолучитьЗначение(лпСч,"Параметры");
лпЗначение.Выгрузить(лпСЗ);
лпСЗ.Установить("Значение",лпНовоеЗначение);
лпТЗ.УстановитьЗначение(лпСч,"Параметры",лпСЗ);
КонецЦикла
Покажите код начального заполнения таблицы лпТЗ.
Похоже, что уже на этом этапе вы в столбец Параметр всех строк записываете один и тот-же список значений.
поняла.
список один и тот же, кот висит на всю таблицу.
вы когда строки в табзнач создавали, то список указывали одной и той же переменной.
добавьте еще одну строку, списокзначений задайте другой, с другой переменной и созданной отдельно через СоздатьОбъект().
и увидите, последнее значение будет отличаться.
понятия не имею, как только с этим работать.
хоть это и некрасиво, проще всего при создании строк, в цикле создавать объект список и заполнять - будет потом пересчитывать.
Нет, к сожалению, эта догадка мимо. Список в таблицу попадает в виде возврата из другой обработки
В доп обработке:
Форма.Параметр.Установить("Выполнить",1);
Выполнить = СписЗнач.Получить("Выполнить");
Если Выполнить = 1 Тогда
лпТЗ.НоваяСтрока()
лпТЗ.Параметры = СоздатьОбъект("СписокЗначений");
СписЗнач.Выгрузить(лпТЗ.Параметры);
лпКолСтрок = лпТЗ.КоличествоСтрок();
Для лпСч = 1 По лпКолСтрок Цикл
лпТЗ.ПолучитьСтрокуПоНомеру(лпСч);
лпНовоеЗначение = ПолучитьКакоеТоТамЗначение(Парам1,Парам2);
лпЗначение = лпТЗ.ПолучитьЗначение(лпСч,"Параметры");
лпЗначение.Установить("Значение",лпНовоеЗначение);
//лпТЗ.УстановитьЗначение(лпСч,"Параметры",лпЗначение); УБРАЛ СТРОКУ !
КонецЦикла
тестирую, у меня и этот ниже кусок работает. при условии, что изначально при создании строк и формир. списков в цикле СоздатьОбъект() используется.
(как и при схеме создания строк и заполнения списков Sharzem).
для Инд=1 по 4 цикл
текСписок=тз.ПолучитьЗначение(Инд,"Параметры");
текСписок.УстановитьЗначение(2, число(текСписок.ПолучитьЗначение(2))*инд);
КонецЦикла;
а что значит все варианты?
вот код, кот. пробовался. то что в комментариях - это второй вариант, он тоже рабочий.
когда не использовать СоздатьОъект() в первом куске, то последняя строка отлична. А первые три- одинаково меняются. Ссылка одна.
формиров. таблицы
[/code]для инд=1 по 3 цикл
тз.НоваяСтрока();
//список=создатьОБъект("СписокЗначений");
список.ДобавитьЗначение("1","1");
список.ДобавитьЗначение("11","11");
список.ДобавитьЗначение("111","111");
список.ДобавитьЗначение("1111","1111");
тз.Параметры=создатьОбъект("СписокЗначений");
список.Выгрузить(тз.Параметры);
//тз.УстановитьЗначение(Инд,"Параметры",список);
конецЦикла;
тз.НоваяСтрока();
тз.УстановитьЗначение(4,"Параметры",список1);
для Инд=1 по 4 цикл
//текСписок=тз.ПолучитьЗначение(Инд,"Параметры");
//текСписок.УстановитьЗначение(2, число(текСписок.ПолучитьЗначение(2))*инд);
лпЗначение = ТЗ.ПолучитьЗначение(Инд,"Параметры");
лпЗначение.Установить("11",5*Инд);
КонецЦикла;
Советую при отладке всяческих отчетов, обработок и т.д. смотреть содержимое СписковЗначений и ТаблицЗначений с помощью универсальной обработки Show.ert (надыбал давно где-то в инете, уже нигде не скачать...). Процедуру Показать() вставляете где-то в начало своей отлаживаемой обработки(отчета), а дальше по ходу своего кода где надо посмотреть содержимое сз или тз вставляете "Показать(тз)". Show.ert должна быть в папке ExtForms каталога базы.
//***************************************************************************
Процедура Показать(Значение, Заголовок = "")
Если ФС.СуществуетФайл(КаталогИБ()+"ExtForms\Show.ert") = 0 Тогда
Сообщить("Не найден внешний отчет: """+КаталогИБ()+"ExtForms\Show.ert""", "!");
Иначе
глФлагРасшифровки = 1;
глОбновить = 0;
глРасшифровка = СоздатьОбъект("СписокЗначений");
глРасшифровка.Установить("Значение", Значение);
глРасшифровка.Установить("Заголовок", Заголовок);
ОткрытьФорму("Отчет#",, КаталогИБ()+"ExtForms\Show.ert");
глФлагРасшифровки = 0;
глРасшифровка = 0;
глОбновить = 0;
КонецЕсли;
КонецПроцедуры //Показать()
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua