Ошибка при заполнении массива строками табличного документа.

1. julia-dev 17 26.06.17 11:22 Сейчас в теме
Здравствуйте, Уважаемые программисты!

Помогите пожалуйста разобраться в ошибке:

есть простенький макет в нем две области: Заголовок и Строка, Строка - параметр, Строка несколько раз заполняется в цикле с различными значениями параметра, при этом весь результат сохраняется в массив областей и далее массивы выводится на экран. НО! Те данные, которые попали в массив в цикле заполняются последним значением. Вся эта "беда" нужна для другой задачи (ТабДок.ПроверитьВывод(МассивОбластей)).

Вот код всего отчета (он создан для примера)


&НаСервере
Функция Команда1НаСервере()
    
    Массив1 = Новый Массив;
    
    ТабДок = Новый ТабличныйДокумент;
    
    Макет = РеквизитФормыВЗначение("Отчет").ПолучитьМакет("Макет");
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
    
    Массив1.Добавить(ОбластьЗаголовок);
    
    пСчетчик = 0;
    
    
    Пока пСчетчик < 6 Цикл
        
        ОбластьСтрока.Параметры.Строка = "Строка" + пСчетчик;
        
        Массив1.Добавить(ОбластьСтрока);
        
        пСчетчик = пСчетчик + 1;
        
    КонецЦикла;
    
    Для Каждого Стр из Массив1 Цикл
        
        ТабДок.Вывести(Стр);
        
        
    КонецЦикла;

     Возврат ТабДок;
    
КонецФункции

&НаКлиенте
Процедура Команда1(Команда)
    ТабДок = Команда1НаСервере();
    
    ТабДок.Показать();
КонецПроцедуры
Показать
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
2. spezc 782 26.06.17 11:30 Сейчас в теме
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Массив1.Добавить(ОбластьЗаголовок);
пСчетчик = 0;

Пока пСчетчик < 6 Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.Строка = "Строка" + пСчетчик;
Массив1.Добавить(ОбластьСтрока);
пСчетчик = пСчетчик + 1;
КонецЦикла;
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. zarucheisky 26.06.17 11:46 Сейчас в теме
(1) Собственно,
Те данные, которые попали в массив в цикле заполняются последним значением.

Естественное поведение для сериализованных значений.
Пока пСчетчик < 6 Цикл 

ОбластьСтрока.Параметры.Строка = "Строка" + пСчетчик;  // Вы каждый раз меняете значение параметра, но не сам табличный документ

Массив1.Добавить(ОбластьСтрока);  // Каждый раз добавляете своего рода ссылку на тот же самый  табличный документ

пСчетчик = пСчетчик + 1; 

КонецЦикла; 

Показать

Естественно, поскольку ОбластьСтрока не меняется, а меняется только значение параметра "Строка", в массиве будут одинаковые элементы.
2. spezc 782 26.06.17 11:30 Сейчас в теме
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Массив1.Добавить(ОбластьЗаголовок);
пСчетчик = 0;

Пока пСчетчик < 6 Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.Строка = "Строка" + пСчетчик;
Массив1.Добавить(ОбластьСтрока);
пСчетчик = пСчетчик + 1;
КонецЦикла;
6. julia-dev 17 27.06.17 08:13 Сейчас в теме
(2) Спасибо, сработало, я, кажется, так пыталась сделать, но видимо показалось))))
4. zarucheisky 26.06.17 11:50 Сейчас в теме
ПроверитьВывод - ИМХО, устаревший метод.
Доступность:
Сервер, толстый клиент, внешнее соединение.

Например, для тонкого клиента он уже не применим, т.к. сервер не в курсе, какой именно у Вас принтер :)
7. julia-dev 17 27.06.17 08:14 Сейчас в теме
(4) Что тогда использовать для проверки областей?
5. TerveRus 26.06.17 12:02 Сейчас в теме
Надо не в массив добавлять, а сразу выводить.

Пока пСчетчик < 6 Цикл 
ОбластьСтрока.Параметры.Строка = "Строка" + пСчетчик; 
ТабДок.Вывести(ОбластьСтрока); 
пСчетчик = пСчетчик + 1; 
КонецЦикла;
8. julia-dev 17 27.06.17 08:15 Сейчас в теме
(5) Мне сразу не нужно, мне необходимо было дальше массив использовать в другом методе.
Оставьте свое сообщение

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