Как заполнить двумерный массив в 1с

Как заполнить двумерный массив в 1с

В конфигурациях на платформе 1С:Предприятие разработчику нередко требуется создавать и заполнять двумерные массивы для хранения структурированных данных. Типичным примером может быть таблица значений, формируемая вручную без использования объекта «ТаблицаЗначений». В таких случаях удобно использовать массив массивов – структура, в которой каждая строка представлена отдельным вложенным массивом.

Для создания двумерного массива в 1С применяется следующий подход: сначала инициализируется внешний массив, затем в него поочерёдно добавляются внутренние массивы, каждый из которых соответствует строке. Никакой отдельной конструкции для двумерных массивов в платформе не предусмотрено, что делает важным чёткое понимание структуры вложенности и правил доступа к элементам.

Пример базовой инициализации:

Массив = Новый Массив;
Для Счетчик = 1 По 5 Цикл
  Строка = Новый Массив;
  Для Колонка = 1 По 3 Цикл
    Строка.Добавить(0);
  КонецЦикла;
  Массив.Добавить(Строка);
КонецЦикла;

При заполнении массива данными следует учитывать, что индексация элементов начинается с 0. Обращение к элементу осуществляется через двойной индекс, например: Массив[2][1]. Для изменения конкретного значения используется такой же синтаксис с присваиванием.

Рекомендуется использовать вложенные циклы для работы с каждым элементом. При этом важно избегать попыток обращения к неинициализированным подмассивам. Перед добавлением элементов всегда следует проверять существование вложенной структуры или инициализировать её в момент создания.

Инициализация пустого двумерного массива в 1С:Предприятие

Инициализация пустого двумерного массива в 1С:Предприятие

В 1С:Предприятие отсутствует тип «двумерный массив» в привычном понимании. Для создания аналогичной структуры используют массив массивов. Чтобы задать пустой двумерный массив, достаточно создать внешний массив и заполнить его вложенными пустыми массивами.

  • Создание пустого массива: Массив = Новый Массив;
  • Добавление пустых строк (вложенных массивов):
Для Сч = 1 По КоличествоСтрок Цикл
Массив.Добавить(Новый Массив);
КонецЦикла;

После выполнения цикла переменная Массив содержит необходимое количество строк, каждая из которых может использоваться как строка таблицы с заданным числом элементов (столбцов). Для последующего добавления данных:

Массив[0].Добавить(0);
Массив[0].Добавить("Текст");

Чтобы инициализировать фиксированное число столбцов в каждой строке сразу:

Для Сч = 1 По КоличествоСтрок Цикл
Строка = Новый Массив;
Для Кол = 1 По КоличествоСтолбцов Цикл
Строка.Добавить(Неопределено);
КонецЦикла;
Массив.Добавить(Строка);
КонецЦикла;

Такой подход позволяет избежать ошибок при доступе к несуществующим элементам и упрощает последующую обработку данных.

Заполнение массива значениями из таблицы значений

Заполнение массива значениями из таблицы значений

Для переноса данных из ТаблицыЗначений в двумерный массив в 1С следует учитывать структуру таблицы и точный порядок колонок. Ниже приведён способ, позволяющий выполнить это с минимальными затратами по времени.

Сначала нужно определить размеры массива. Количество строк соответствует ЧислоСтрок(), а количество столбцов – КоличествоКолонок(). Например:

Массив = Новый Массив(ТаблицаЗначений.ЧислоСтрок());

Для Каждого Строка Из ТаблицаЗначений Цикл

    ВнутреннийМассив = Новый Массив(ТаблицаЗначений.Колонки.Количество());

    Для Ном = 0 По ТаблицаЗначений.Колонки.Количество() — 1 Цикл

        ВнутреннийМассив[Ном] = Строка[ТаблицаЗначений.Колонки[Ном].Имя];

    КонецЦикла;

    Массив.Добавить(ВнутреннийМассив);

КонецЦикла;

Если известно, какие поля требуются, можно сократить количество колонок вручную, задав имена явно:

ИменаКолонок = Новый Массив;

ИменаКолонок.Добавить(«Код»);

ИменаКолонок.Добавить(«Наименование»);

Для Каждого Строка Из ТаблицаЗначений Цикл

    ВнутреннийМассив = Новый Массив(ИменаКолонок.Количество());

    Для Ном = 0 По ИменаКолонок.Количество() — 1 Цикл

        ВнутреннийМассив[Ном] = Строка[ИменаКолонок[Ном]];

    КонецЦикла;

    Массив.Добавить(ВнутреннийМассив);

КонецЦикла;

Такой способ удобен при передаче данных в внешние компоненты или при последующей сериализации. Исключение лишних колонок уменьшает объём памяти и ускоряет обработку.

Чтение данных из регистра и перенос в двумерный массив

Чтение данных из регистра и перенос в двумерный массив

Для чтения данных из регистра сведений и переноса их в двумерный массив используется запрос и цикл по результату. Пример на платформе 1С:Предприятие 8.3:

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
Ресурс1,
Ресурс2,
Измерение1,
Измерение2
ИЗ
РегистрСведений.ПримерРегистр.СрезПоследних()";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Массив = Новый Массив;

Цикл по выборке добавляет каждую строку как вложенный массив:

Пока Выборка.Следующий() Цикл
Строка = Новый Массив;
Строка.Добавить(Выборка.Ресурс1);
Строка.Добавить(Выборка.Ресурс2);
Строка.Добавить(Выборка.Измерение1);
Строка.Добавить(Выборка.Измерение2);
Массив.Добавить(Строка);
КонецЦикла;

В результате Массив представляет собой двумерную структуру, где каждая строка соответствует одной записи регистра. Порядок столбцов должен соответствовать порядку добавления в массив. Избегайте пропуска реквизитов, чтобы сохранить целостность структуры.

Заполнение массива через цикл по строкам и столбцам

Заполнение массива через цикл по строкам и столбцам

Для создания двумерного массива в 1С используется объект типа Массив, содержащий вложенные массивы. Такой способ позволяет точно задать структуру «строки-столбцы».

Инициализация начинается с внешнего массива, представляющего строки. Затем в каждой итерации по строкам создаются вложенные массивы для столбцов. Пример:


МассивДанных = Новый Массив;
КоличествоСтрок = 5;
КоличествоСтолбцов = 3;
Для НомерСтроки = 0 По КоличествоСтрок - 1 Цикл
Строка = Новый Массив;
Для НомерСтолбца = 0 По КоличествоСтолбцов - 1 Цикл
Строка.Добавить("Ячейка_" + Строка(НомерСтроки) + "_" + Строка(НомерСтолбца));
КонецЦикла;
МассивДанных.Добавить(Строка);
КонецЦикла;

В результате МассивДанных[2][1] вернёт строку "Ячейка_2_1". Количество строк и столбцов может задаваться переменными или вычисляться динамически. Тип данных внутри массива может быть любым.

Изменение значений осуществляется напрямую: МассивДанных[1][2] = "Новое значение";

Такая структура удобна для обработки табличных данных, импорта из внешних источников и последующего преобразования в ТаблицуЗначений или другие объекты 1С.

Использование методов объекта Массив для работы с двумерными структурами

Использование методов объекта Массив для работы с двумерными структурами

В 1С объект Массив не имеет встроенной поддержки двумерных структур, однако можно организовать работу с такими данными через массив массивов. Каждый элемент основного массива должен быть отдельным массивом, представляющим строку.

Для создания двумерной структуры используется цикл добавления вложенных массивов. Пример:

ДвумерныйМассив = Новый Массив;
Для Строка = 0 По 4 Цикл
НоваяСтрока = Новый Массив;
Для Колонка = 0 По 2 Цикл
НоваяСтрока.Добавить(Строка * 10 + Колонка);
КонецЦикла;
ДвумерныйМассив.Добавить(НоваяСтрока);
КонецЦикла;

Для обращения к элементам используется двойной индекс:

Значение = ДвумерныйМассив[2][1]; // Получение элемента из третьей строки, второй колонки

Метод Количество() позволяет определить число строк, а для количества колонок – метод Количество() применяется к вложенному массиву:

ЧислоСтрок = ДвумерныйМассив.Количество();
ЧислоКолонок = ДвумерныйМассив[0].Количество();

Для перебора всех значений удобно использовать вложенные циклы:

Для Строка = 0 По ДвумерныйМассив.Количество() - 1 Цикл
Для Колонка = 0 По ДвумерныйМассив[Строка].Количество() - 1 Цикл
Значение = ДвумерныйМассив[Строка][Колонка];
// Обработка значения
КонецЦикла;
КонецЦикла;

Изменение значения происходит напрямую через индексацию:

ДвумерныйМассив[1][2] = 99; // Присваивание значения элементу

Для удаления строки используется метод Удалить() основного массива. Для удаления элемента из строки – метод Удалить() вложенного массива:

ДвумерныйМассив[3].Удалить(1); // Удаление второго элемента в четвёртой строке
ДвумерныйМассив.Удалить(3);    // Удаление четвёртой строки

Метод Очистить() очищает как основную структуру, так и вложенные при необходимости:

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

Для копирования строк или всего массива следует использовать Копировать(), иначе копия будет ссылкой на исходные данные:

КопияСтроки = ДвумерныйМассив[0].Копировать();

Преобразование однострочного массива в двумерный формат

Преобразование однострочного массива в двумерный формат

Для преобразования одномерного массива в двумерный в 1С необходимо определить количество столбцов в будущей структуре. Если элементов в исходном массиве, например, 12, а количество столбцов – 4, итоговая матрица будет содержать 3 строки.

Пример алгоритма:

1. Создаётся исходный массив:

ОдномерныйМассив = Новый Массив;

Для И = 1 По 12 Цикл

    ОдномерныйМассив.Добавить(И);

КонецЦикла;

2. Указывается количество столбцов:

ЧислоСтолбцов = 4;

3. Вычисляется количество строк:

ЧислоСтрок = Цел(ОдномерныйМассив.Количество() / ЧислоСтолбцов);

4. Создаётся двумерный массив:

ДвумерныйМассив = Новый Массив;

5. Заполнение:

Сч = 0;

Для Стр = 0 По ЧислоСтрок — 1 Цикл

    Строка = Новый Массив;

    Для Стлб = 0 По ЧислоСтолбцов — 1 Цикл

        Если Сч < ОдномерныйМассив.Количество() Тогда

            Строка.Добавить(ОдномерныйМассив[Сч]);

        Иначе

            Строка.Добавить(Неопределено);

        КонецЕсли;

        Сч = Сч + 1;

    КонецЦикла;

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

КонецЦикла;

При необходимости можно заменить Неопределено на любое значение-заполнитель. Структура остаётся стабильной даже при нехватке элементов для последней строки.

Рекомендация: использовать фиксированное количество столбцов и проверку границ массива для предотвращения ошибок доступа к несуществующим индексам.

Обработка пустых и неинициализированных элементов в двумерном массиве

Обработка пустых и неинициализированных элементов в двумерном массиве

В 1С:Предприятие при работе с двумерными массивами необходимо учитывать возможность наличия пустых или неинициализированных элементов. Это особенно важно при переборе, заполнении и анализе данных.

  • При создании массива с фиксированными размерами, но без явного заполнения, элементы будут содержать значение Неопределено.
  • Если массив создается вложенными циклами без предварительной инициализации внутренних массивов, попытка обращения по индексу вызовет исключение.
  • Для проверки значения используйте конструкцию: Если ЗначениеЗаполнено(Массив[Индекс1][Индекс2]) Тогда.
  • Для безопасного обращения к элементам рекомендуется предварительно проверять наличие подмассива: Если ТипЗнч(Массив[Индекс1]) = Тип("Массив") Тогда.
  1. Перед добавлением элемента по индексу убедитесь, что подмассив существует. При необходимости создайте его: Если Массив[Индекс1] = Неопределено Тогда Массив[Индекс1] = Новый Массив;
  2. Для заполнения пустых ячеек используйте цикл с проверкой: Если Массив[И][J] = Неопределено Тогда Массив[И][J] = ЗначениеПоУмолчанию;
  3. Для удаления неинициализированных строк используйте Удалить(Массив, Индекс) только после проверки: Если НЕ ЗначениеЗаполнено(Массив[Индекс]).

Явное управление заполнением и проверкой значений снижает вероятность ошибок при последующей обработке данных и повышает читаемость кода.

Вопрос-ответ:

Ссылка на основную публикацию