Имя: Пароль:
1C
 
Почему при добавлении элементов в массив заменяется пред элемент
0 gabd_marat
 
28.11.18
22:18
ВыборкаИсторияИзменений = Запрос.Выполнить().Выбрать();
    МассивСтруктурыИсторияИзменений = Новый Массив;
    СтруктураИсторияИзменений = Новый Структура;
    Индекс = 0;
    Пока ВыборкаИсторияИзменений.Следующий() Цикл
        
        СтруктураИсторияИзменений.Вставить("Дата",ВыборкаИсторияИзменений.Дата);
        СтруктураИсторияИзменений.Вставить("Сотрудник",ВыборкаИсторияИзменений.Сотрудник);
        СтруктураИсторияИзменений.Вставить("Участок",ВыборкаИсторияИзменений.Участок);
        СтруктураИсторияИзменений.Вставить("Ответственный",ВыборкаИсторияИзменений.Ответственный);
        СтруктураИсторияИзменений.Вставить("Допуск",ВыборкаИсторияИзменений.Допуск);
        СтруктураИсторияИзменений.Вставить("Комментарий",ВыборкаИсторияИзменений.Комментарий);
        //МассивСтруктурыИсторияИзменений.Добавить( В(Индекс,СтруктураИсторияИзменений);
        МассивСтруктурыИсторияИзменений.Добавить(СтруктураИсторияИзменений);

        Индекс = Индекс + 1;
        
    КонецЦикла;
1 RomanYS
 
28.11.18
22:21
Засунь в цикл
    СтруктураИсторияИзменений = Новый Структура;
2 gabd_marat
 
28.11.18
22:26
(1) Заработало, а не должна разве структура перезаписывать пред значения?
3 palsergeich
 
28.11.18
22:31
(2) Нет, Структура - объект, по факту  МассивСтруктурыИсторияИзменений.Добавить(СтруктураИсторияИзменений); Вы в массив добавляете ссылку на объект.
И если Вы не сделаете (1) объект и ссылка на \него будут те же, а значения там поменяются.
И в конце Вы получите массив элементов с одной и той же ссылкой в значении.
Делая (1) вы в переменную заставляете сделать новый объект и все становится хорошо.
4 palsergeich
 
28.11.18
22:34
Аналогия - ексли бы там была не Структура, а скажем
СтруктураИсторияИзменений = Справочник.ИмяСправочника.СоздатьЭлемент()
Поведение будет такое же
5 Конструктор1С
 
29.11.18
04:03
Переделай по-человечачи

    ВыборкаИсторияИзменений = Запрос.Выполнить().Выбрать();
    МассивСтруктурыИсторияИзменений = Новый Массив;
  
    Индекс = 0;
    Пока ВыборкаИсторияИзменений.Следующий() Цикл

        СтруктураИсторияИзменений = Новый Структура("Дата,Сотрудник,Участок,Ответственный,Допуск,Комментарий");

        ЗаполнитьЗначенияСвойств(СтруктураИсторияИзменений, ВыборкаИсторияИзменений);

        МассивСтруктурыИсторияИзменений.Добавить(СтруктураИсторияИзменений);

        Индекс = Индекс + 1;
        
    КонецЦикла;

чтобы твоему последователю меньше глаза ломать и проще было доработать/исправить
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.