Часто в процессе разработки на платформе 1С возникает задача обработки данных, находящихся в Массив, порциями. Например, нам необходимо брать по две записи, создавать на их основе новый документ, записывать данные и переходить к следующей паре элементов. Рассмотрим, как реализовать такую логику наиболее эффективно.
Для решения поставленной задачи мы можем использовать один временный Массив, в который будем поочередно добавлять элементы исходного набора данных. Основная идея заключается в том, чтобы использовать цикл Для, проверять заполненность нашего «буферного» массива и, при достижении нужного количества элементов (в нашем случае — двух), выполнять бизнес-логику по созданию документа.
Рассмотрим по шагам, как это реализовать:
Очистить(), чтобы подготовить его для следующих двух элементов.Посмотрим на пример реализации такого подхода:
// Предположим, ИсходныйМассив уже заполнен данными
ВременныйМассив = Новый Массив;
Для Каждого Элемент Из ИсходныйМассив Цикл
ВременныйМассив.Добавить(Элемент);
Если ВременныйМассив.Количество() = 2 Тогда
// Вызываем функцию создания и заполнения документа
СоздатьИЗаполнитьДокумент(ВременныйМассив);
// Очищаем массив для следующей порции
ВременныйМассив.Очистить();
КонецЕсли;
КонецЦикла;
// Важно: если количество элементов нечетное,
// в конце могут остаться необработанные данные
Если ВременныйМассив.Количество() > 0 Тогда
СоздатьИЗаполнитьДокумент(ВременныйМассив);
КонецЕсли;
Если мы заранее знаем, что массив всегда содержит четное количество строк, или мы хотим строго контролировать процесс взятия пар, можно использовать цикл с шагом. Этот метод позволяет нам сразу обращаться к индексам i и i + 1.
Этот способ позволяет избежать лишних проверок количества элементов внутри цикла:
Для Индекс = 0 По (ИсходныйМассив.Количество() - 1) Цикл
Если Индекс % 2 = 0 Тогда
ВременныйМассив = Новый Массив;
ВременныйМассив.Добавить(ИсходныйМассив[Индекс]);
Если (Индекс + 1) < ИсходныйМассив.Количество() Тогда
ВременныйМассив.Добавить(ИсходныйМассив[Индекс + 1]);
КонецЕсли;
СоздатьИЗаполнитьДокумент(ВременныйМассив);
КонецЕсли;
КонецЦикла;
При работе с большими объемами данных важно помнить об оптимизации. Создание документов внутри цикла — это тяжелая операция, которая может замедлить работу системы. Если данных очень много, рекомендуем придерживаться следующих правил:
Количество(), чтобы избежать ошибки обращения к несуществующему индексу.Очистить() является ключевым для переиспользования переменных, что предотвращает утечки памяти и дублирование данных в документах.Проанализировав эти способы, вы сможете гибко настроить процесс обработки любого количества данных, будь то 4 строки или 1000, обеспечивая стабильную работу вашей конфигурации 1С.