Как разбить массив на порции по две строки для создания документов в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

Решение задачи через последовательный обход и очистку массива

Для решения поставленной задачи мы можем использовать один временный Массив, в который будем поочередно добавлять элементы исходного набора данных. Основная идея заключается в том, чтобы использовать цикл Для, проверять заполненность нашего «буферного» массива и, при достижении нужного количества элементов (в нашем случае — двух), выполнять бизнес-логику по созданию документа.

Рассмотрим по шагам, как это реализовать:

  1. Объявим пустой массив, который будет служить буфером для текущей порции данных.
  2. Запустим цикл обхода исходного массива.
  3. На каждой итерации будем добавлять элемент в наш буфер.
  4. Проверим, достигло ли количество элементов в буфере двух. Если да — вызываем процедуру создания документа.
  5. Очистим массив-буфер методом Очистить(), чтобы подготовить его для следующих двух элементов.

Посмотрим на пример реализации такого подхода:


// Предположим, ИсходныйМассив уже заполнен данными
ВременныйМассив = Новый Массив;

Для Каждого Элемент Из ИсходныйМассив Цикл
    ВременныйМассив.Добавить(Элемент);

    Если ВременныйМассив.Количество() = 2 Тогда
        // Вызываем функцию создания и заполнения документа
        СоздатьИЗаполнитьДокумент(ВременныйМассив);
        
        // Очищаем массив для следующей порции
        ВременныйМассив.Очистить();
    КонецЕсли;
КонецЦикла;

// Важно: если количество элементов нечетное, 
// в конце могут остаться необработанные данные
Если ВременныйМассив.Количество() > 0 Тогда
    СоздатьИЗаполнитьДокумент(ВременныйМассив);
КонецЕсли;

Альтернативный подход: использование цикла с шагом

Если мы заранее знаем, что массив всегда содержит четное количество строк, или мы хотим строго контролировать процесс взятия пар, можно использовать цикл с шагом. Этот метод позволяет нам сразу обращаться к индексам i и i + 1.

Этот способ позволяет избежать лишних проверок количества элементов внутри цикла:


Для Индекс = 0 По (ИсходныйМассив.Количество() - 1) Цикл
    Если Индекс % 2 = 0 Тогда
        ВременныйМассив = Новый Массив;
        ВременныйМассив.Добавить(ИсходныйМассив[Индекс]);
        
        Если (Индекс + 1) < ИсходныйМассив.Количество() Тогда
            ВременныйМассив.Добавить(ИсходныйМассив[Индекс + 1]);
        КонецЕсли;
        
        СоздатьИЗаполнитьДокумент(ВременныйМассив);
    КонецЕсли;
КонецЦикла;

Оптимизация работы с данными

При работе с большими объемами данных важно помнить об оптимизации. Создание документов внутри цикла — это тяжелая операция, которая может замедлить работу системы. Если данных очень много, рекомендуем придерживаться следующих правил:

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

← На главную