Часто приходится писать с нуля конфигурации, или обработки и очень удобно иметь с собой уже готовый набор функций для работы с массивами.
Пока в нем немного функций, но будет расширяться по мере появления новых доработок и потребностей.
Можно использовать модуль в котором будут хранить уже привычные и готовые функции, а также можно брать некоторые их них в создаваемые обработки.
1. ДополнитьМассив - дополняем массив другими значениями
2. ДополнитьТаблицуИзМассива - добавим строки в коллекцию значений по значениям в массиве.
3. РазбитьМассивНаНесколькоМассивов - разбиваем большой массив на несколько более меньших массивов
4. ВыгрузитьКолонку - выгружаем массив из коллекции значений (взят из БСП ОбщегоНазначения.ВыгрузитьКолонку)
5. УдалитьДублиИзМассива - пересобираем массив без дублей.
6 .ЗначениеВМассив = преобразуем значение в массив
7. ПервоеЗначениеИзМассива - получаем первое значение из массива
Подключение:
Добавляем общий модуль, даем ему название и ставим галки Клиент и Сервер.
Далее пользуемся на клиенте и на сервер
МодульМассив.РазбитьМассивНаНесколькоМассивов(.....
Код модуля ниже, копировать и вставить.
Работал код на платформе 1С:Предприятие 8.3 (8.3.23.1912)
------------------------------------------------------------------------------------
// Дополняет массив МассивПриемник значениями из массива МассивИсточник.
//
// Параметры:
// МассивПриемник - Массив - массив, в который необходимо добавить значения.
// МассивИсточник - Массив - массив значений для заполнения.
// ТолькоУникальныеЗначения - Булево - если истина, то в массив будут включены только уникальные значения.
//
Процедура ДополнитьМассив(МассивПриемник, МассивИсточник, ТолькоУникальныеЗначения = Ложь) Экспорт
Если ТолькоУникальныеЗначения Тогда
УникальныеЗначения = Новый Соответствие;
Для Каждого Значение Из МассивПриемник Цикл
УникальныеЗначения.Вставить(Значение, Истина);
КонецЦикла;
Для Каждого Значение Из МассивИсточник Цикл
Если УникальныеЗначения[Значение] = Неопределено Тогда
МассивПриемник.Добавить(Значение);
УникальныеЗначения.Вставить(Значение, Истина);
КонецЕсли;
КонецЦикла;
Иначе
Для Каждого Значение Из МассивИсточник Цикл
МассивПриемник.Добавить(Значение);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
// Дополняет таблицу значений Таблица значениями из массива Массив.
//
// Параметры:
// Таблица - ТаблицаЗначений - таблица, которую необходимо заполнить значениями из массива;
// Массив - Массив - массив значений для заполнения таблицы;
// ИмяПоля - Строка - имя поля таблицы значений, в которое необходимо загрузить значения из массива.
//
Процедура ДополнитьТаблицуИзМассива(Таблица, Массив, ИмяПоля) Экспорт
Для каждого Значение Из Массив Цикл
Таблица.Добавить()[ИмяПоля] = Значение;
КонецЦикла;
КонецПроцедуры
// Разбивае массив на несколько массивов с заданным количеством элементов.
// (заполнят массивый поочередно из основного)
//
// Параметры:
// Массив - Массив - массив значений для заполнения таблицы;
// КоличествоПодмассивов - Число - Количество подмассивов которые нужно создать;
// УдалятьПустые - Булево - Признак что нужно возвращать только заполненные массивы.
Функция РазбитьМассивНаНесколькоМассивов(ИсходныйМассив,КоличествоПодмассивов,УдалятьПустые = Истина) Экспорт
МассивМассивов = Новый массив;
// готовим массивы
Для НомерМассива = 1 По КоличествоПодмассивов Цикл
МассивМассивов.Добавить(Новый массив);
КонецЦикла;
/// переносим массивы
ТекНомерМассива = 0; // индексы, не забываем
Для каждого ТекЭл Из ИсходныйМассив Цикл
МассивМассивов[ТекНомерМассива].Добавить(ТекЭл);
// говорим в какой поток дальше вставлять данные.
ТекНомерМассива = ?(ТекНомерМассива=(КоличествоПодмассивов-1),0,ТекНомерМассива+1);
КонецЦикла;
//удаляем пустые
Если УдалятьПустые Тогда
мУдаляемых = Новый массив;
Для каждого ТекМассив Из МассивМассивов Цикл
Если ТекМассив.Количество() = 0 Тогда
мУдаляемых.Добавить(ТекМассив);
КонецЕсли;
КонецЦикла;
Для каждого ТекУдМассив Из мУдаляемых Цикл
Инд = МассивМассивов.Найти(ТекУдМассив);
МассивМассивов.Удалить(Инд);
КонецЦикла;
КонецЕсли;
Возврат МассивМассивов;
КонецФункции
// из БСП общегоназначения
// Создает массив и копирует в него значения, содержащиеся в колонке объекта, для
// которого доступен обход посредством оператора Для каждого … Из.
//
// Параметры:
// КоллекцияСтрок - ТаблицаЗначений
// - ДеревоЗначений
// - СписокЗначений
// - ТабличнаяЧасть
// - Соответствие
// - Структура - коллекция, колонку которой нужно выгрузить в массив.
// А так же другие объекты, для которых доступен обход
// посредством оператора Для каждого … Из … Цикл.
// ИмяКолонки - Строка - имя поля коллекции, значения которого нужно выгрузить.
// ТолькоУникальныеЗначения - Булево - если Истина, то в массив будут включены
// только различающиеся значения.
//
// Возвращаемое значение:
// Массив - значения колонки.
//
Функция ВыгрузитьКолонку(КоллекцияСтрок, ИмяКолонки, ТолькоУникальныеЗначения = Ложь) Экспорт
МассивЗначений = Новый Массив;
УникальныеЗначения = Новый Соответствие;
Для каждого СтрокаКоллекции Из КоллекцияСтрок Цикл
Значение = СтрокаКоллекции[ИмяКолонки];
Если ТолькоУникальныеЗначения И УникальныеЗначения[Значение] <> Неопределено Тогда
Продолжить;
КонецЕсли;
МассивЗначений.Добавить(Значение);
УникальныеЗначения.Вставить(Значение, Истина);
КонецЦикла;
Возврат МассивЗначений;
КонецФункции
// пересобирает массив без дублей значений
//
// Параметры:
// Массив - Массив - массив значений для заполнения таблицы;
Функция УдалитьДублиИзМассива(Массив) Экспорт
ВозвращаемыйМассив = Новый массив;
ДополнитьМассив(ВозвращаемыйМассив,Массив,Истина);
Возврат Массив;
КонецФункции
// Преобразуем значение в массив с одним значеним
//
// Параметры:
// Значение - любое Значение - значение на основе которого будет создан массив;
Функция ЗначениеВМассив(Значение) Экспорт
ВозвращаемыйМассив = Новый массив;
ВозвращаемыйМассив.Добавить(Значение);
Возврат ВозвращаемыйМассив ;
КонецФункции
// Возвращает первое значение из массив
//
// Параметры:
// Массив - Массив - массив значений;
Функция ПервоеЗначениеИзМассива(Массив) Экспорт
Если Массив.Количество() = 0 Тогда
Возврат Неопределено;
Иначе
Возврат Массив[0];
КонецЕсли;
КонецФункции