Библиотека быстрой обработки коллекций.
Позволяет в "текучем" стиле обрабатывать коллекции - фильтровать, упорядочивать, выполнять операции над элементы, получать результат в виде заданного типа и др.
Поддержка строк, массивов, таблиц значений, деревьев значений.
Структуры и соответствия incoming
Конвейерные методы:
- Первые
- Пропустить
- Различные
- Обработать
- Развернуть
- Фильтровать
- Сортировать
- СортироватьПо
Терминальные методы:
- ПолучитьПервый
- ВМассив
- ВСтроку
- Количество
- ДляКаждого
- Минимум
- Максимум
- Сократить
- Получить
- ЛюбойСоответствует
- ВсеСоответствуют
- ВсеНеСоответствуют
Функции сравнения, фильтрации, обработки могут задаваться с помощью:
- Строк библиотека lambdas
- Действие
Библиотека помимо конструктора класса ПроцессорКоллекций содержит вспомогательный модуль, включающий:
- построитель процессора коллекций ИзКоллекции()
- построитель процессора коллекций ИзСтроки()
- построитель процессора коллекций ИзНабора()
- СтандартнаяФункцияСравненияПрямойПорядок()- типовой- comparator, возвращающий результат сравнения как- 1,- 0,- -1
Массив = Новый Массив;
Массив.Добавить(3);
Массив.Добавить(4);
Массив.Добавить(7);
Массив.Добавить(5);
Массив.Добавить(1);
Массив.Добавить(0);
Результат = ПроцессорыКоллекций.ИзКоллекции(Массив)
	.Пропустить(1)
	.Фильтровать("Элемент -> Элемент >= 5")
	.Первые(2)
	.Обработать("Элемент -> Элемент + 1")
	.Получить(Тип("Массив"));
// На выходе массив [8, 6]Тоже самое с помощью Действие:
Функция ОбработчикФильтрации(Элемент) Экспорт
	Возврат Элемент >= 5;
КонецФункции
Функция ОбработчикОбработки(Элемент) Экспорт
	Результат = Элемент + 1;
	Сообщить("Я - операция map, и это мое послание миру: элемент " + Элемент + " превратился в " + Результат);
	Возврат Результат;
КонецФункции
ФункцияФильтрации = Новый Действие(ЭтотОбъект, "ОбработчикФильтрации");
ФункцияОбработки = Новый Действие(ЭтотОбъект, "ОбработчикОбработки");
Результат = ПроцессорыКоллекций.ИзКоллекции(Массив)
	.Пропустить(1)
	.Фильтровать(ФункцияФильтрации)
	.Первые(2)
	.Обработать(ФункцияОбработки)
	.Получить(Тип("Массив"));Массив = Новый Массив;
Массив.Добавить(4);
Массив.Добавить(2);
Массив.Добавить(2);
Массив.Добавить(3);
Массив.Добавить(3);
Массив.Добавить(3);
ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Массив);
ПроцессорКоллекций
	.Различные()
	.Сортировать()
	.ДляКаждого("Элемент -> Сообщить(Элемент)");
// На выходе сообщения в консоль:
// 2
// 3
// 4Строка = "Я
|строка
|многострочная";
ПроцессорыКоллекций
	.ИзСтроки(Строка, Символы.ПС)
	.Фильтровать("Элемент -> СтрДлина(Элемент) > 1")
	.ДляКаждого("Элемент -> Сообщить(Элемент)");
// На выходе сообщения в консоль:
// многострочная
// строкаБольше примеров работы в каталогах examples и tests.
Общее API
// Устанавливает коллекцию для обработки Процессора коллекций.
//
// Параметры:
//   НоваяКоллекция - Массив, ТаблицаЗначений, ДеревоЗначений - Коллекция, устанавливаемая в процессор.
//
Процедура УстановитьКоллекцию(НоваяКоллекция) // Включает возможность отладки. Достигается сохранением текста модуля во временный файл.
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Ссылка на текущий инстанс ПроцессорКоллекций
//
Функция Отладка(Включена = Истина) Конвейерные методы
// Получить первые N элементов.
// Конвейерный метод.
//
// Параметры:
//   Количество - Число - Число отбираемых элементов.
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
Функция Первые(Количество) // Пропустить первые N элементов.
// Конвейерный метод.
//
// Параметры:
//   Количество - Число - Число пропускаемых элементов.
//
// Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
Функция Пропустить(Количество) // Выбрать различные элементы.
// Конвейерный метод.
//
// Параметры:
//   ФункцияРавенства - Строка - Лямбда выражение функция с двумя параметрами в которые будут переданы два элемента,
//    и которая возвращает Булево, Истина если элементы равны, Ложь в противном случае
//                    - Действие - Делегат на функцию с двумя параметрами, в которые будут переданы два элемента,
//    и которая возвращает Булево, Истина если элементы равны, Ложь в противном случае
//                    - Неопределено - см. ПроцессорыКоллекций.СтандартнаяФункцияРавенства(),
//    проверка "Элемент1 = Элемент2"
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
//  Примеры:
//
//   ПроцессорКоллекций = ПроцессорыКоллекций.ИзНабора(
//       Новый Структура("Имя, Возраст", "Вася", 25),
//       Новый Структура("Имя, Возраст", "Петя", 27),
//       Новый Структура("Имя, Возраст", "Ваня", 25)
//   );
//
//   // 1:
//   ПроцессорКоллекций.Различные("(ЧеловекПервый, ЧеловекВторой) -> ЧеловекПервый.Возраст = ЧеловекВторой.Возраст");
//
//   // В коллекции останутся: Вася(25) и Петя(27)
//
//   // 2:
//   Функция МояФункцияФункцияРавенства(ЭлементПервый, ЭлементВторой) Экспорт
//       Возврат ЧеловекПервый.Возраст = ЧеловекВторой.Возраст;
//   КонецФункции
//
//   ПроцессорКоллекций.Различные(Новый Действие(ЭтотОбъект, "МояФункцияФункцияРавенства"));
//
//   // В коллекции останутся: Вася(25) и Петя(27)
//
Функция Различные(Знач ФункцияРавенства = Неопределено, Знач ДополнительныеПараметры = Неопределено) // Обработать каждый элемент коллекции.
// Конвейерный метод.
//
// Параметры:
//   ФункцияОбработки - Строка - Лямбда выражение функция с одним параметром в который будет передан элемент,
//    и которая возвращает новый элемент
//                    - Действие - Делегат на функцию с одним параметром в который будет передан элемент,
//    и которая возвращает новый элемент
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
//  Примеры:
//		// 1:
//		ПроцессорКоллекций.Обработать("Элемент -> Элемент + 1");
//
//		// 2:
//		Функция МояФункцияОбработки(Элемент) Экспорт
//			Возврат Элемент + 1;
//		КонецФункции
//
//		ФункцияОбработки = Новый Действие(ЭтотОбъект, "МояФункцияОбработки");
//		ПроцессорКоллекций.Обработать(ФункцияОбработки);
//
Функция Обработать(Знач ФункцияОбработки, Знач ДополнительныеПараметры = Неопределено) // Развернуть каждый элемент коллекции в процессор коллекций.
// Позволяет расширить имеющуюся коллекцию.
// Например, разворачивание массива массивов сделает новый массив, содержащий все элементы всех массивов.
// Конвейерный метод.
//
// Параметры:
//   ФункцияРазворачивания - Строка - Лямбда выражение функция с одним параметром в который будет передан элемент,
//    и которая возвращает ПроцессорКоллекций из элемента
//                         - Действие - Делегат на функцию с одним параметром в который будет передан элемент,
//    и которая возвращает ПроцессорКоллекций из элемента
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
// Возвращаемое значение:
//	ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
// Примеры:
//	// 1:
//	ПроцессорКоллекций.Развернуть("Элемент -> ПроцессорыКоллекций.ИзСтроки(Элемент)");
//
//	// 2:
//	Функция МояФункцияРазворачивания(Элемент) Экспорт
//		Возврат ПроцессорыКоллекций.ИзСтроки(Элемент);
//	КонецФункции
//	
//	ФункцияРазворачивания = Новый Действие(ЭтотОбъект, "МояФункцияРазворачивания");
//	ПроцессорКоллекций.Развернуть(ФункцияРазворачивания);
//
Функция Развернуть(Знач ФункцияРазворачивания, Знач ДополнительныеПараметры = Неопределено) // Фильтровать коллекцию по условию.
// Конвейерный метод.
//
// Параметры:
//   ФункцияФильтрации - Строка - Лямбда выражение функция с одним параметром в который будет передан элемент,
//    и которая возвращает Булево, Истина если элемент проходит фильтр, ложь в противном случае
//                         - Действие - Делегат на функцию с одним параметром в который будет передан элемент,
//    и которая возвращает Булево, Истина если элемент проходит фильтр, ложь в противном случае
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
//  Примеры:
//		// 1:
//		ПроцессорКоллекций.Фильтровать("Элемент -> СтрДлина(Элемент) > 1");
//
//		// 2:
//		Функция МояФункцияФильтрации(Результат, ДополнительныеПараметры) Экспорт
//			Возврат СтрДлина(ДополнительныеПараметры.Элемент) > 1;
//		КонецФункции
//		
//		ФункцияФильтрации = Новый Действие(ЭтотОбъект, "МояФункцияФильтрации");
//		ПроцессорКоллекций.Фильтровать(ФункцияФильтрации);
//
Функция Фильтровать(Знач ФункцияФильтрации, Знач ДополнительныеПараметры = Неопределено) // Сортировать элементы коллекции.
// Конвейерный метод.
//
// Параметры:
//   ФункцияСравнения - Строка - Лямбда выражение функция с двумя параметрами в которые будут переданы два элемента,
//    и которая возвращает Число, 1 - если первый элемент больше, -1 если второй элемент больше, 0 - если элементы равны
//                    - Действие - Делегат на функцию с двумя параметрами, в которые будут переданы два элемента,
//    и которая возвращает Число, 1 - если первый элемент больше, -1 если второй элемент больше, 0 - если элементы равны
//                    - Неопределено - см. ПроцессорыКоллекций.СтандартнаяФункцияСравненияПрямойПорядок(),
//    проверка через ">", "<", "="
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
//  Примеры:
//		// 1:
//		ПроцессорКоллекций.Сортировать("(Первый, Второй) -> 
//          | Если Первый > Второй Тогда Возврат 1;
//          | ИначеЕсли Второй > Первый Тогда Возврат -1;
//          | Иначе Возврат 0;
//          | КонецЕсли;"
//      );
//
//		// 2:
//		Функция МояФункцияСравнения(Первый, Второй) Экспорт
//          Если Первый > Второй Тогда 
//              Возврат 1;
//          ИначеЕсли Второй > Первый Тогда
//              Возврат -1;
//          Иначе 
//              Возврат 0;
//          КонецЕсли;
//		КонецФункции
//		
//		ФункцияСравнения = Новый Действие(ЭтотОбъект, "МояФункцияСравнения");
//		ПроцессорКоллекций.Сортировать(ФункцияСравнения);
//
Функция Сортировать(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) // Сортировать элементы коллекции по выбранному полю.
// Конвейерный метод.
//
// Параметры:
//   ИмяПоля - Строка - Имя поля элемента коллекции, по которому необходимо осуществлять сортировку.
//
//   ФункцияСравнения - Строка - Лямбда выражение функция с двумя параметрами в которые будут переданы два элемента,
//    и которая возвращает Число, 1 - если первый элемент больше, -1 если второй элемент больше, 0 - если элементы равны
//                    - Действие - Делегат на функцию с двумя параметрами, в которые будут переданы два элемента,
//    и которая возвращает Число, 1 - если первый элемент больше, -1 если второй элемент больше, 0 - если элементы равны
//                    - Неопределено - см. ПроцессорыКоллекций.СтандартнаяФункцияСравненияПрямойПорядок(),
//    проверка через ">", "<", "="
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
//  Примеры:
//		// 1:
//		ПроцессорКоллекций.СортироватьПо("НомерСтроки", "(Первый, Второй) -> 
//          | Если Первый > Второй Тогда Возврат 1;
//          | ИначеЕсли Второй > Первый Тогда Возврат -1;
//          | Иначе Возврат 0;
//          | КонецЕсли;"
//      );
//
//		// 2:
//		Функция МояФункцияСравнения(Первый, Второй) Экспорт
//          Если Первый > Второй Тогда 
//              Возврат 1;
//          ИначеЕсли Второй > Первый Тогда
//              Возврат -1;
//          Иначе 
//              Возврат 0;
//          КонецЕсли;
//		КонецФункции
//		
//		ФункцияСравнения = Новый Действие(ЭтотОбъект, "МояФункцияСравнения");
//		ПроцессорКоллекций.СортироватьПо("НомерСтроки", ФункцияСравнения);
//
Функция СортироватьПо(Знач ИмяПоля, Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Терминальные методы
// Получить первый элемент.
// Терминальный метод.
//
//  Возвращаемое значение:
//   Произвольный - Первый элемент из коллекции. Если коллекция пуста, возвращает Неопределено.
//
Функция ПолучитьПервый() // Получить коллекцию в виде массива.
// Терминальный метод.
//
//  Возвращаемое значение:
//   Массив - Массив элементов коллекции.
//
Функция ВМассив() // Получить коллекцию в виде строки.
// Терминальный метод.
//
// Параметры:
//	РазделительСтрок - Строка - Используемый разделитель между элементами при конкатенации строк.
// 
//  Возвращаемое значение:
//   Строка - Элементы коллекции, соединенные в строку методом конкатенации.
//
Функция ВСтроку(РазделительСтрок = "") // Получить количество элементов коллекции.
// Терминальный метод.
//
//  Возвращаемое значение:
//   Число - Количество элементов коллекции.
//
Функция Количество() // Обработать каждый элемент коллекции и завершить работу процессора.
// Терминальный метод.
//
// Параметры:
//   ФункцияОбработки - Строка - Лямбда выражение процедура с одним параметром в который будет передан элемент
//                    - Действие - Делегат на процедуру с одним параметром в который будет передан элемент
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Примеры:
//		// 1:
//		ПроцессорКоллекций.ДляКаждого("Элемент -> Сообщить(Элемент);");
//
//		// 2:
//		Процедура МояПроцедураОбработки(Элемент) Экспорт
//			Сообщить(Элемент);
//		КонецПроцедуры
//		
//		ПроцедураОбработки = Новый Действие(ЭтотОбъект, "МояПроцедураОбработки");
//		ПроцессорКоллекций.ДляКаждого(ПроцедураОбработки);
//
Процедура ДляКаждого(Знач ФункцияОбработки, Знач ДополнительныеПараметры = Неопределено) // Получить минимальный элемент.
// Терминальный метод.
//
// Параметры:
//   ФункцияСравнения - Строка - Лямбда выражение функция с двумя параметрами в которые будут переданы два элемента,
//    и которая возвращает Число, 1 - если первый элемент больше, -1 если второй элемент больше, 0 - если элементы равны
//                    - Действие - Делегат на функцию с двумя параметрами, в которые будут переданы два элемента,
//    и которая возвращает Число, 1 - если первый элемент больше, -1 если второй элемент больше, 0 - если элементы равны
//                    - Неопределено - см. ПроцессорыКоллекций.СтандартнаяФункцияСравненияПрямойПорядок(),
//    проверка через ">", "<", "="
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   Произвольный - минимальный элемент коллекции.
//
//  Примеры:
//		// 1:
//		ПроцессорКоллекций.Минимум();
//
//		// 2:
//		ПроцессорКоллекций.Минимум("(Первый, Второй) -> 
//          | Если Первый > Второй Тогда Возврат 1;
//          | ИначеЕсли Второй > Первый Тогда Возврат -1;
//          | Иначе Возврат 0;
//          | КонецЕсли;"
//      );
//
//		// 3:
//		Функция МояФункцияСравнения(Первый, Второй) Экспорт
//          Если Первый > Второй Тогда 
//              Возврат 1;
//          ИначеЕсли Второй > Первый Тогда
//              Возврат -1;
//          Иначе 
//              Возврат 0;
//          КонецЕсли;
//		КонецФункции
//		
//		ФункцияСравнения = Новый Действие(ЭтотОбъект, "МояФункцияСравнения");
//		ПроцессорКоллекций.Минимум(ФункцияСравнения);
//
Функция Минимум(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) // Получить максимальный элемент.
// Терминальный метод.
//
// Параметры:
//   ФункцияСравнения - Строка - Лямбда выражение функция с двумя параметрами в которые будут переданы два элемента,
//    и которая возвращает Число, 1 - если первый элемент больше, -1 если второй элемент больше, 0 - если элементы равны
//                    - Действие - Делегат на функцию с двумя параметрами, в которые будут переданы два элемента,
//    и которая возвращает Число, 1 - если первый элемент больше, -1 если второй элемент больше, 0 - если элементы равны
//                    - Неопределено - см. ПроцессорыКоллекций.СтандартнаяФункцияСравненияПрямойПорядок(),
//    проверка через ">", "<", "="
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   Произвольный - максимальный элемент коллекции.
//
//  Примеры:
//		// 1:
//		ПроцессорКоллекций.Максимум();
//
//		// 2:
//		ПроцессорКоллекций.Максимум("(Первый, Второй) -> 
//          | Если Первый > Второй Тогда Возврат 1;
//          | ИначеЕсли Второй > Первый Тогда Возврат -1;
//          | Иначе Возврат 0;
//          | КонецЕсли;"
//      );
//
//		// 3:
//		Функция МояФункцияСравнения(Первый, Второй) Экспорт
//          Если Первый > Второй Тогда 
//              Возврат 1;
//          ИначеЕсли Второй > Первый Тогда
//              Возврат -1;
//          Иначе 
//              Возврат 0;
//          КонецЕсли;
//		КонецФункции
//		
//		ФункцияСравнения = Новый Действие(ЭтотОбъект, "МояФункцияСравнения");
//		ПроцессорКоллекций.Максимум(ФункцияСравнения);
//
Функция Максимум(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) // Выполнить агрегатную функцию над элементами коллекции.
// Терминальный метод.
//
// Параметры:
//   ФункцияСокращения - Строка - Лямбда выражение функция с двумя параметрами в которые будут переданы 
//    результат аккумулятор и очередной элемент коллекции, и которая возвращает новое значение результата
//                    - Действие - Делегат на функцию с двумя параметрами в которые будут переданы 
//    результат аккумулятор и очередной элемент коллекции, и которая возвращает новое значение результата
//
//   НачальноеЗначение - Произвольный - начальное значение, передаваемое в функцию сокращения в параметр "Результат"
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   Произвольный - результат работы агрегатной функции.
//
//  Примеры:
//		2:
//		ПроцессорКоллекций.Сократить("Результат, Элемент -> Результат + Элемент", 0);
//
//		2:
//		Функция МояФункцияСокращения(Результат, Элемент) Экспорт
//			Возврат Результат + Элемент;
//		КонецФункции
//		
//		ФункцияСокращения = Новый Действие(ЭтотОбъект, "МояФункцияСокращения");
//		ПроцессорКоллекций.Сократить(ФункцияСокращения);
//
Функция Сократить(Знач ФункцияСокращения, Знач НачальноеЗначение = Неопределено, Знач ДополнительныеПараметры = Неопределено) // Получить коллекцию в виде объекта заданного типа.
// Терминальный метод.
//
// Параметры:
//   ТипРезультата - Тип - Тип, в котором необходимо вернуть коллекцию.
//
//  Возвращаемое значение:
//   Произвольный - Коллекция в виде объекта нужного типа.
//
Функция Получить(ТипРезультата) // Проверить, что хотя бы один элемент коллекции удовлетворяет условию в функции сравнения.
// Терминальный метод.
//
// Параметры:
//   ФункцияСравнения - Строка - Лямбда выражение функция с одним параметром в который будет передан элемент,
//    и которая возвращает Булево, Истина если элемент проходит фильтр, ложь в противном случае
//                         - Действие - Делегат на функцию с одним параметром в который будет передан элемент,
//    и которая возвращает Булево, Истина если элемент проходит фильтр, ложь в противном случае
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   Булево - Истина, если минимум один из элементов коллекции удовлетворяет условию Функции сравнения.
//		В обратном случае возвращает Ложь.
//		Если коллекция пустая, возвращает Ложь.
//
Функция ЛюбойСоответствует(Знач ФункцияСравнения, Знач ДополнительныеПараметры = Неопределено) // Проверить, что все элементы коллекции удовлетворяют условию в функции сравнения.
// Терминальный метод.
//
// Параметры:
//   ФункцияСравнения - Строка - Лямбда выражение функция с одним параметром в который будет передан элемент,
//    и которая возвращает Булево, Истина если элемент проходит фильтр, ложь в противном случае
//                         - Действие - Делегат на функцию с одним параметром в который будет передан элемент,
//    и которая возвращает Булево, Истина если элемент проходит фильтр, ложь в противном случае
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   Булево - Истина, если все элементы коллекции удовлетворяют условию Функции сравнения.
//		В обратном случае возвращает Ложь.
//		Если коллекция пустая, возвращает Истина.
//
Функция ВсеСоответствуют(Знач ФункцияСравнения, Знач ДополнительныеПараметры = Неопределено) // Проверить, что все элементы коллекции не удовлетворяют условию в функции сравнения.
// Терминальный метод.
//
// Параметры:
//   ФункцияСравнения - Строка - Лямбда выражение функция с одним параметром в который будет передан элемент,
//    и которая возвращает Булево, Истина если элемент проходит фильтр, ложь в противном случае
//                         - Действие - Делегат на функцию с одним параметром в который будет передан элемент,
//    и которая возвращает Булево, Истина если элемент проходит фильтр, ложь в противном случае
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   Булево - Истина, если все элементы коллекции не удовлетворяют условию Функции сравнения.
//		В обратном случае возвращает Ложь.
//		Если коллекция пустая, возвращает Истина.
//
Функция ВсеНеСоответствуют(Знач ФункцияСравнения, Знач ДополнительныеПараметры = Неопределено) // Создать ПроцессорКоллекций на основании переданной коллекции.
//
// Параметры:
//   Коллекция - Произвольный - Коллекция (Массив, ТаблицаЗначений...), на основании которой нужно
//		сформировать ПроцессорКоллекций.
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций, заполненный переданной коллекцией.
//
Функция ИзКоллекции(Коллекция) Экспорт// Создать ПроцессорКоллекций на основании переданной строки.
// Переданная строка преобразуется в коллекцию путем разделения строк.
//
// Параметры:
//   Строка - Строка - Строка, на основании которой нужно сформировать ПроцессорКоллекций.
//   РазделительСтрок - Строка - Разделитель строк, применяемый к Строке для получения коллекции.
//		Если не передан, строка разделяется на элементы посимвольно.
//   ВключатьПустые - Булево - Указывает необходимость включать в коллекцию пустые строки,
//		которые могут образоваться в результате разделения исходной строки.
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций.
//
Функция ИзСтроки(Строка, РазделительСтрок = Неопределено, ВключатьПустые = Истина) Экспорт// Создать ПроцессорКоллекций на основании переданного набора значений.
// Добавляет элемент в ПроцессорКоллекций, если он не равен NULL.
//
// Параметры:
//	Элемент1 - Произвольный - Элемент для добавления в ПроцессорКоллекций.
//	Элемент2 - Произвольный - Элемент для добавления в ПроцессорКоллекций.
//	Элемент3 - Произвольный - Элемент для добавления в ПроцессорКоллекций.
//	... Всего 32 параметра ...
//
// Возвращаемое значение:
//	ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций, заполненный переданным набором.
//
Функция ИзНабора(Элемент1 = NULL, Элемент2 = NULL, Элемент3 = NULL, ...) Экспорт// Стандартная функция сравнения.
// Сравнивает значения элементов коллекции через операторы ">", "<" и "=".
//
//  Возвращаемое значение:
//   Действие - Делегат на стандартный метод сравнения
//
Функция СтандартнаяФункцияСравненияПрямойПорядок() // Стандартная функция сравнения в обратном порядке
// Сравнивает значения элементов коллекции через операторы ">", "<" и "=".
//
//  Возвращаемое значение:
//   Действие - Делегат на стандартный метод сравнения в обратном порядке
//
Функция СтандартнаяФункцияСравненияОбратныйПорядок() // Стандартная функция проверки на равенство
// Сравнивает значения элементов коллекции через "=".
//
//  Возвращаемое значение:
//   Действие - Делегат на стандартный метод проверки на равенство
//
Функция СтандартнаяФункцияРавенства() Для того, что бы работал отладчик и заходил в добавленные методы нужно: Либо установить любое значение переменной окружения с именем OSCRIPT_FLUENT_DEBUG. Либо вызвать метод Отладка()
Вдохновение черпалось из java8 stream-api.