Добрый день!
Подскажите пожалуйста,
отчёт без скд, запросом сделана выборка, после обработки данных получаем ТаблицаТЗ (таблица значений), циклом из ТЗ выбираем строки, выводим в табличное поле на форме, устанавливаем в строках расшифровку тип СписокЗначений(заполненный договором/договорами) - ? ВОПРОС ? почему при обработке расшифровки по двойному клику на ячейке обрабатывается значение (расшифровки-списка) последней строки(для всей выводимой таблицы), т.е. отладчиком просматриваю НА ВХОДЕ "Процедура ТабДокРезультатОбработкаРасшифровки(Элемент, Расшифровка...." Расшифровка= значению расшифровки последней выводимой строки - для всей таблицы! Причём при установке расшифровки в "Функция СформироватьОтчетНаСервере(КАК)" отладчик показывает именно нужные значения из текущей строки(

&НаСервере //Вариант 1 так расшифровка по значению последней выводимой строки
Функция СформироватьОтчетНаСервере(КАК)
////////////////////////////////////////////
   СписокДогов = Новый СписокЗначений;
   Для Каждого Стр Из ТаблицаТЗ Цикл

       СписокДогов.Очистить();

       СписокДогов.Добавить(Стр.Договор);
       ОбластьСтрока.Параметры.РасшифровкаКарточкаСубконто = СписокДогов;
       ТабДок.Вывести(ОбластьСтрока);
   КонецЦикла;
////////////////////////////////////////////
КонецФункции

ОДНАКО, если список значений создавать каждый раз НОВЫЙ, для каждой строки, то всё работает - ОК..... ЭТОТ вариант РАБОЧИЙ.

&НаСервере //Вариант 2
Функция СформироватьОтчетНаСервере(КАК)
////////////////////////////////////////////
   Для Каждого Стр Из ТаблицаТЗ Цикл

       СписокДогов = Новый СписокЗначений;

       СписокДогов.Добавить(Стр.Договор);
       ОбластьСтрока.Параметры.РасшифровкаКарточкаСубконто = СписокДогов;
       ТабДок.Вывести(ОбластьСтрока);
  КонецЦикла;
////////////////////////////////////////////
КонецФункции

&НаКлиенте
Процедура ТабДокРезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)
////////////////////////////////////////////
КонецПроцедуры

есть предположения поискать о передаче значений сервер-клиент/клиент-сервер, НО почему тогда расшифровка работает во втором варианте?, отличие только в том, что список значений устанавливаемый в расшифровку = 1-очистить-НЕ работает, 2-создать новый-всё ОК, в отладчике при установке значения в расшифровку всё одинаково в обеих случаях.
---
1-очистить-НЕ работает, 2-создать новый-всё ОКСписок значений - это объект. Если его очистить, то все ссылки на этот объект будут указывать на очищенный объект. При создании нового объекта создается новая ссылка на новый объект, а не чистится старый. Старые ссылки будут указывать на старые объекты.

Условно:
А = Новый Список;
А.Добавить(1);
Б = Новый Список;
Б.Добавить(1);
Ц = А;
Ц.Очистить();
=> А = Ц = (), Б = (1).
---
1-очистить-НЕ работает, 2-создать новый-всё ОКСписок значений - это объект. Если его очистить, то все ссылки на этот объект будут указывать на очищенный объект. При создании нового объекта создается новая ссылка на новый объект, а не чистится старый. Старые ссылки будут указывать на старые объекты.

Условно:
А = Новый Список;
А.Добавить(1);
Б = Новый Список;
Б.Добавить(1);
Ц = А;
Ц.Очистить();
=> А = Ц = (), Б = (1).
---
Старые ссылки будут указывать на старые объекты.

Хм... т.е. при выводе отчета в "Табличный Документ" построчно, все предыдущие значения расшифровки будут заменяться последним значением объекта ... т.е. несмотря на то, что при выводе строк в расшифровку подставлялось А = (1), А= (N) и т.д. ч/з Очистить() - эти присвоения заменятся на ссылку на старый объект, в итоге ВСЕ расшифровки будут равны, например А = (5) старому объекту (со значением, что будет в последнем присвоении) ?
---
все предыдущие значения расшифровки будут заменяться последним значением объектаА ты соображаешь...
---
Отчет (не СКД), скорее всего, выводится в "Табличный Документ" построчно. При выводе каждой строки, нужно указывать расшифровку (если указывать ОДИН ДОГОВОР, то при обработке "расшифровки", будем получать один договор, иначе список договоров). Зачем передавать в расшифровку список, не понял. Но в случае списка договоров - потребуется обработка своим алгоритмом.
---
выводится в "Табличный Документ" построчноЗачем передавать в расшифровку список
- Да - построчно,
- Список для удобства(условие "ВСписке" хоть по одному, хоть по нескольким) , т.к. по группе строк в расшифровку выводится именно список. С присвоением расшифровка = один договор вопроса нет.
- "в случае списка договоров - потребуется обработка своим алгоритмом" - алгоритм присвоения значения Расшифровка = СпискЗначений? подскажите, плиз, какой?
---
&НаКлиенте
Процедура ТабДокРезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)
СтандартнаяОбработка = Ложь;
Если ТипЗнч(Расшифровка)=Тип("СправочникСсылка.ДоговорКонтрагента") Тогда
// Открываем форму элемента справочника
ИначеЕсли ТипЗнч(Расшифровка)=Тип("СписокЗначений") Тогда
// Открываем список значений для выбора договора (потом открываем элемент выбранный)
Иначе
// Сообщить("Расшифровка: "+СокрЛП(Расшифровка));
КонецЕсли;
КонецПроцедуры
---
Нет, это уже пост обработка, проблема с заполнением расшифровки!

Как я в вопросе указал, проблема в том, что НА ВХОДЕ в эту процедуру значение параметра "Расшифровка" = ОДНО И ТОЖЕ для всех строк = список с договором/договорами из последней строки.

Как ответил starik-2005 3178 (я другого варианта не вижу) - причина в том, что если Список значений создан один раз - это один объект и при выводе Табличного документа все ссылки на него в расшифровках строк заменяются его последним значением. Т.е. не важно, что при выводе 1строки в Списке был Договор1, во второй Договор2, а в итоге во всех строках в расшифровках встанет Список например с Договор1022. Ч/з очистку одного и того же списка заполнение не работает

Как вариант решения я создаю Список значений, каждый раз заново....

Наверное кривоватое решение, буду рад подсказке, как это решить по другому.
---
Для каждой выводимой строки "ОбластьСтрока" на "Табличный документ":

```1c
    СписокДогов = Новый СписокЗначений;

    СписокДогов.Добавить(Договор1);
    СписокДогов.Добавить(Договор2);
    СписокДогов.Добавить(Договор3);
    .....
    СписокДогов.Добавить(ДоговорN);
    ОбластьСтрока.Параметры.РасшифровкаКарточкаСубконто = СписокДогов;
```
---
Ок, пасиб за поддержку, да пока так и заполняю.