Имя: Пароль:
1C
1С v8
Работа с массивами
0 denpro
 
20.06.17
10:11
Док = Документы.ПоступлениеТоваровУслуг.Выбрать(НачалоДня(ТекДата),
КонецДня(ТекДата));
МассивВыводимыхОбластей = новый массив;
Пока Док.Следующий() Цикл
    ОбластьДок = Макет.ПолучитьОбласть("Док");
    ОбластьДок.Параметры.Отдел = Док;
    МассивВыводимыхОбластей.Добавить(ОбластьДок);
КонецЦикла;

МассивВыводимыхОбластей - используется для проверки вывода на страницу табличного документа.
Проблема в том, что когда в массив записывается очередной элемент ОбластьДок, все предыдущие элементы в массиве становятся идентичными ему. Как будто массив хранит не значения, а ссылки на переменную. Как от этого избавиться?
1 Неверный Параметр И
 
20.06.17
10:13
Понять отличие макета от формируемого документа.
2 Ёпрст
 
20.06.17
10:14
(0) как ты ЭТО проверил ?
3 Альбатрос
 
20.06.17
10:15
(2) +1
4 denpro
 
20.06.17
10:15
(2) вывел на печать, посмотрел в отладчике элементы массива после каждого присвоения.
5 h-sp
 
20.06.17
10:17
(4) а как вывел, если нет ТабДок.Вывести  ?
6 Неверный Параметр И
 
20.06.17
10:18
(4) Я бы удивился, если бы получая одну и ту же область одного и того же макета платформа возвращала мне разные области.
7 Мимохожий Однако
 
20.06.17
10:19
(0) Объяни эту строчку
ОбластьДок.Параметры.Отдел = Док;
8 sFAQer
 
20.06.17
10:23
(7) Им отделы поступают, они их в подвале складывают...
9 Ёпрст
 
20.06.17
10:24
(7) ты ввёл автора в когнитивный диссонанс
10 denpro
 
20.06.17
10:28
(6) Мысль понятна.
(7) ОбластьДок.Параметры.Документ = Док; так понятнее?
Тема закрыта:
Сформировал строчку ОбластьДок.Параметры.Документ = Строка(Док); все заработало нормально. получается он переприсваивал переменную Док в параметре области (что тоже не понятно почему), а не ОбластьДок.
11 Лефмихалыч
 
20.06.17
10:36
(0) нельзя лепить снеговиков с клюшками в голове (с)

ты в параметр области присваиваешь одно и то же значение - выборку.
12 h-sp
 
20.06.17
10:37
(10) Док у тебя - это не документ, это выборка.
13 denpro
 
20.06.17
10:41
(11) Выборка на каждом цикле разная. Почему параметр области хранит переменную, а не ее значение?
а =1;
ОбластьДок.Параметры.Переменная = а;
а =2;
ТабДок.Вывести(ОбластьДок);
На печать выйдет 2 - это странно?
14 igorPetrov
 
20.06.17
10:43
(13) нет.
15 h-sp
 
20.06.17
10:45
(13) нет. не выйдет 2. Потому что это два разных поля: 1 и 2. Сначала переменная а ссылается на поле 1. и в ОбластьДок.Параметры.Переменная вы запихиваете ссылку на число 1. А переменную а уже потом меняете на другое.
16 Лефмихалыч
 
20.06.17
10:45
(13) в восьмерке все не так, как в клюшках. Выборка одна и та же на каждой итерации цикла.
17 Лефмихалыч
 
20.06.17
10:46
Пока Док.Следующий() Цикл
    ОбластьДок = Макет.ПолучитьОбласть("Док");
    ОбластьДок.Параметры.Отдел = Док.Ссылка;
    МассивВыводимыхОбластей.Добавить(ОбластьДок);
КонецЦикла;
18 Лефмихалыч
 
20.06.17
10:48
+(17) это - раз
два, читай по буквам пост (1). У тебя в массиве не области, реально присутствующие в резултирующем табличном документе, а области макета. И вот они-то как раз одинаковые реально.
19 Лефмихалыч
 
20.06.17
10:49
одну и ту же область 100500 раз добавляешь и удивляешься, что они одинаковые
20 Лефмихалыч
 
20.06.17
10:50
Автор, а ты какую задачу этим массивом-то решаешь вообще?
Может есть работающий способ...
21 denpro
 
20.06.17
11:05
(13) не работает, значит проблема в том, что я действительно работал с выборкой.
(19) это не причем.
(20) задачу описал еще в (0)
Обсуждение можно не продолжать
22 Мимохожий Однако
 
20.06.17
11:12
(21) Наивный )) А поговорить?
23 НЕА123
 
20.06.17
12:05
РезДок = Новый ТабличныйДокумент;

Док = Документы.ПоступлениеТоваровУслуг.Выбрать(НачалоДня(ТекДата),
КонецДня(ТекДата));
МассивВыводимыхОбластей = новый массив;
ОбластьДок = Макет.ПолучитьОбласть("Док");
Пока Док.Следующий() Цикл
    ОбластьДок.Параметры.Отдел = Док;
    МассивВыводимыхОбластей.Добавить(РезДок.Вывести(ОбластьДок));
КонецЦикла;
24 h-sp
 
20.06.17
12:14
(23) нет, автор прав. Выводить нельзя пока. Сначала ПроверитьВывод, потом только РезДок.Вывести(ОбластьДок)