Вход | Регистрация


Почему при добавлении элементов в массив заменяется пред элемент

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

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

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

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

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

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

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

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

чтобы твоему последователю меньше глаза ломать и проще было доработать/исправить

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует