From 7eb3660bbc1db797c27587f1f1620e2750212756 Mon Sep 17 00:00:00 2001 From: Nadulich Vladimir Date: Wed, 8 Jul 2020 14:47:13 +0300 Subject: [PATCH 1/6] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=82=D0=B5=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...20\271\320\242\320\265\321\201\321\202.os" | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git "a/tests/\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\276\320\275\320\275\321\213\320\271\320\242\320\265\321\201\321\202.os" "b/tests/\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\276\320\275\320\275\321\213\320\271\320\242\320\265\321\201\321\202.os" index 6fd942a..7c8541d 100644 --- "a/tests/\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\276\320\275\320\275\321\213\320\271\320\242\320\265\321\201\321\202.os" +++ "b/tests/\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\276\320\275\320\275\321\213\320\271\320\242\320\265\321\201\321\202.os" @@ -19,6 +19,7 @@ ВсеТесты.Добавить("ТестДолжен_6"); ВсеТесты.Добавить("ТестДолжен_7"); ВсеТесты.Добавить("ТестДолжен_8"); + ВсеТесты.Добавить("ТестДолжен_9"); Возврат ВсеТесты; @@ -149,9 +150,9 @@ .Сортировать() .ВСтроку(Символы.ПС); - Ожидаем.Что(Результат).Равно("многострочная - |строка - |Я"); + Ожидаем.Что(Результат).Равно("Я + |многострочная + |строка"); КонецПроцедуры @@ -171,6 +172,23 @@ КонецПроцедуры +Процедура ТестДолжен_9() Экспорт + + Строка = "Я + |строка + |многострочная"; + + Результат = ПроцессорыКоллекций + .ИзСтроки(Строка, Символы.ПС) + .Сортировать("Результат = ВРЕГ(Элемент1) > ВРЕГ(Элемент2)") + .ВСтроку(Символы.ПС); + + Ожидаем.Что(Результат).Равно("многострочная + |строка + |Я"); + +КонецПроцедуры + ФункцияФильтрации = Новый ОписаниеОповещения("ОбработчикФильтрации", ЭтотОбъект); ФункцияОбработки = Новый ОписаниеОповещения("ОбработчикОбработки", ЭтотОбъект); ФункцияСокращения = Новый ОписаниеОповещения("ОбработчикСокращения", ЭтотОбъект); From 57f32f63ae787e09bf3ae267410ed1a8892125be Mon Sep 17 00:00:00 2001 From: Nikita Gryzlov Date: Tue, 13 Oct 2020 13:43:52 +0300 Subject: [PATCH 2/6] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 699992d..cf56215 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@ # fluent [![Build Status](https://travis-ci.org/nixel2007/oscript-fluent.svg?branch=develop)](https://travis-ci.org/nixel2007/oscript-fluent) -[![Quality Gate](https://sonar.oscript.ru/api/project_badges/measure?project=oscript-fluent&metric=alert_status)](https://sonar.oscript.ru/dashboard?id=oscript-fluent) -[![Maintainability](https://sonar.oscript.ru/api/project_badges/measure?project=oscript-fluent&metric=sqale_rating)](https://sonar.oscript.ru/dashboard?id=oscript-fluent) -[![Coverage](https://sonar.oscript.ru/api/project_badges/measure?project=oscript-fluent&metric=coverage)](https://sonar.oscript.ru/dashboard?id=oscript-fluent) +[![Quality Gate](https://sonar.openbsl.ru/api/project_badges/measure?project=oscript-fluent&metric=alert_status)](https://sonar.openbsl.ru/dashboard?id=oscript-fluent) +[![Maintainability](https://sonar.openbsl.ru/api/project_badges/measure?project=oscript-fluent&metric=sqale_rating)](https://sonar.openbsl.ru/dashboard?id=oscript-fluent) +[![Coverage](https://sonar.openbsl.ru/api/project_badges/measure?project=oscript-fluent&metric=coverage)](https://sonar.openbsl.ru/dashboard?id=oscript-fluent) Библиотека быстрой обработки коллекций. From 1aed00335d3510485227813a4c778d4979570940 Mon Sep 17 00:00:00 2001 From: Nikita Gryzlov Date: Fri, 8 Oct 2021 22:14:53 +0300 Subject: [PATCH 3/6] Fix QF --- .bsl-language-server.json | 9 +++++ ...20\265\320\261\320\275\321\213\320\271.os" | 34 +++++++++---------- ...20\265\320\272\321\206\320\270\320\271.os" | 22 ++++++------ ...20\265\320\272\321\206\320\270\320\271.os" | 9 +++-- 4 files changed, 41 insertions(+), 33 deletions(-) create mode 100644 .bsl-language-server.json diff --git a/.bsl-language-server.json b/.bsl-language-server.json new file mode 100644 index 0000000..d1beb25 --- /dev/null +++ b/.bsl-language-server.json @@ -0,0 +1,9 @@ +{ + "diagnostics": { + "parameters": { + "IncorrectLineBreak": { + "listOfIncorrectFirstSymbol": ";" + } + } + } +} \ No newline at end of file diff --git "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\321\213\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\321\213\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" index 726b084..f46caf4 100644 --- "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\321\213\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" +++ "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\321\213\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" @@ -1,17 +1,17 @@ -Процедура ФункцияСравнения(РезультатСортировки, ДополнительныеПараметры) Экспорт - Элемент1 = ДополнительныеПараметры.Элемент1; - Элемент2 = ДополнительныеПараметры.Элемент2; - - Если Элемент1 = Элемент2 Тогда - РезультатСортировки = 0; - ИначеЕсли Элемент1 > Элемент2 Тогда - РезультатСортировки = 1; - Иначе - РезультатСортировки = -1; - КонецЕсли; -КонецПроцедуры - -Процедура ФункцияОбработки_Сообщить(Результат, ДополнительныеПараметры) Экспорт - Элемент = ДополнительныеПараметры.Элемент; - Сообщить(Элемент); -КонецПроцедуры +Процедура ФункцияСравнения(РезультатСортировки, ДополнительныеПараметры) Экспорт + Элемент1 = ДополнительныеПараметры.Элемент1; + Элемент2 = ДополнительныеПараметры.Элемент2; + + Если Элемент1 = Элемент2 Тогда + РезультатСортировки = 0; + ИначеЕсли Элемент1 > Элемент2 Тогда + РезультатСортировки = 1; + Иначе + РезультатСортировки = -1; + КонецЕсли; +КонецПроцедуры + +Процедура ФункцияОбработки_Сообщить(Результат, ДополнительныеПараметры) Экспорт // BSLLS:UnusedParameters-off + Элемент = ДополнительныеПараметры.Элемент; + Сообщить(Элемент); +КонецПроцедуры diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" index 2090ef1..b80a6c1 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" @@ -16,7 +16,7 @@ // Устанавливает коллекцию для обработки Процессора коллекций. // // Параметры: -// НоваяКоллекция - Массив, ТаблицаЗначений, ДеревоЗначений... - Коллекция, устанавливаемая в процессор. +// НоваяКоллекция - Массив, ТаблицаЗначений, ДеревоЗначений - Коллекция, устанавливаемая в процессор. // Процедура УстановитьКоллекцию(НоваяКоллекция) Экспорт ПроцессорКоллекцийСлужебный.УстановитьКоллекцию(НоваяКоллекция); @@ -157,7 +157,7 @@ // Развернуть каждый элемент коллекции в процессор коллекций. // Позволяет расширить имеющуюся коллекцию. -// Например, разворачивание массива массивов сделает новый массив, содерщщий все элементы всех массивов. +// Например, разворачивание массива массивов сделает новый массив, содержащий все элементы всех массивов. // Конвейерный метод. // // Параметры: @@ -166,9 +166,9 @@ // "Результат", "ДополнительныеПараметры", "Элемент". // В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра // (имена произвольные): -// Результат - ПроцессорКоллекций - Переменная, в которую должен быть -// помещен результат работы функции в виде ПроцессораКоллекций. -// ДополнительныеПараметры - Структура - Структура параметров, передаваемая функции разворачивания. +// * Результат - ПроцессорКоллекций - Переменная, в которую должен быть +// помещен результат работы функции в виде ПроцессораКоллекций. +// * ДополнительныеПараметры - Структура - Структура параметров, передаваемая функции разворачивания. // // ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции разворачивания. // Служит для передачи дополнительных данных из прикладного кода в функцию разворачивания. @@ -1015,9 +1015,9 @@ // Приемник - Структура - коллекция, в которую будут добавляться новые значения. // Источник - Структура - коллекция, из которой будут считываться пары Ключ и Значение для заполнения. // Заменять - Булево, Неопределено - что делать в местах пересечения ключей источника и приемника: -// Истина - заменять значения приемника (самый быстрый способ), -// Ложь - не заменять значения приемника (пропускать), -// Неопределено - значение по умолчанию. Бросать исключение. +// - Истина - заменять значения приемника (самый быстрый способ), +// - Ложь - не заменять значения приемника (пропускать), +// - Неопределено - значение по умолчанию. Бросать исключение. // // Функция скопирована из "Библиотеки Стандартных Подсистем" на следующих условиях: // @@ -1028,8 +1028,8 @@ // https://creativecommons.org/licenses/by/4.0/legalcode // // В функцию внесены следующие изменения: -// * использование СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку заменено на СтрШаблон; -// * добавлена инициализиация структур приемника и источника +// - использование СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку заменено на СтрШаблон; +// - добавлена инициализиация структур приемника и источника // Процедура ДополнитьСтруктуру(Приемник, Источник, Заменять = Неопределено) Экспорт @@ -1047,7 +1047,7 @@ Продолжить; Иначе ВызватьИсключение СтрШаблон(НСтр("ru = 'Пересечение ключей источника и приемника: ""%1"".'"), Элемент.Ключ); - КонецЕсли + КонецЕсли; КонецЕсли; Приемник.Вставить(Элемент.Ключ, Элемент.Значение); КонецЦикла; diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\321\213\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\321\213\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" index 3b05c23..15130c0 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\321\213\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\321\213\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" @@ -62,7 +62,6 @@ // Элемент6 - Произвольный - Элемент для добавления в ПроцессорКоллекций. // Элемент7 - Произвольный - Элемент для добавления в ПроцессорКоллекций. // Элемент8 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент8 - Произвольный - Элемент для добавления в ПроцессорКоллекций. // Элемент9 - Произвольный - Элемент для добавления в ПроцессорКоллекций. // Элемент10 - Произвольный - Элемент для добавления в ПроцессорКоллекций. // Элемент11 - Произвольный - Элемент для добавления в ПроцессорКоллекций. @@ -73,7 +72,6 @@ // Элемент16 - Произвольный - Элемент для добавления в ПроцессорКоллекций. // Элемент17 - Произвольный - Элемент для добавления в ПроцессорКоллекций. // Элемент18 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент18 - Произвольный - Элемент для добавления в ПроцессорКоллекций. // Элемент19 - Произвольный - Элемент для добавления в ПроцессорКоллекций. // Элемент20 - Произвольный - Элемент для добавления в ПроцессорКоллекций. // Элемент21 - Произвольный - Элемент для добавления в ПроцессорКоллекций. @@ -84,7 +82,6 @@ // Элемент26 - Произвольный - Элемент для добавления в ПроцессорКоллекций. // Элемент27 - Произвольный - Элемент для добавления в ПроцессорКоллекций. // Элемент28 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент28 - Произвольный - Элемент для добавления в ПроцессорКоллекций. // Элемент29 - Произвольный - Элемент для добавления в ПроцессорКоллекций. // Элемент30 - Произвольный - Элемент для добавления в ПроцессорКоллекций. // Элемент31 - Произвольный - Элемент для добавления в ПроцессорКоллекций. @@ -93,9 +90,10 @@ // Возвращаемое значение: // ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций, заполненный переданным набором. // -Функция ИзНабора( +Функция ИзНабора( // BSLLS:NumberOfParams-off // BSLLS:NumberOfOptionalParams-off + // BSLLS:UnusedParameters-off Элемент1 = NULL, Элемент2 = NULL, Элемент3 = NULL, Элемент4 = NULL, Элемент5 = NULL, Элемент6 = NULL, Элемент7 = NULL, Элемент8 = NULL, Элемент9 = NULL, Элемент10 = NULL, Элемент11 = NULL, Элемент12 = NULL, Элемент13 = NULL, Элемент14 = NULL, Элемент15 = NULL, @@ -104,7 +102,8 @@ Элемент26 = NULL, Элемент27 = NULL, Элемент28 = NULL, Элемент29 = NULL, Элемент30 = NULL, Элемент31 = NULL, Элемент32 = NULL // BSLLS:NumberOfParams-on - // BSLLS:NumberOfOptionalParams-on + // BSLLS:NumberOfOptionalParams-on + // BSLLS:UnusedParameters-on ) Экспорт Коллекция = Новый Массив; From 3ead98c3bbdfaea2a12bd65dfa99f15a08e7ef8f Mon Sep 17 00:00:00 2001 From: Ivanchenko Nikita Date: Thu, 15 Sep 2022 02:03:55 +0300 Subject: [PATCH 4/6] =?UTF-8?q?=D0=94=D0=B5=D0=B1=D0=B0=D0=B3=20=D0=B4?= =?UTF-8?q?=D0=B8=D0=BD=D0=B0=D0=BC=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8?= =?UTF-8?q?=D1=85=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++ packagedef | 1 + ...20\265\320\272\321\206\320\270\320\271.os" | 34 +++++++++++++++++-- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cf56215..583aea3 100644 --- a/README.md +++ b/README.md @@ -811,5 +811,9 @@ Функция СтандартнаяФункцияОбработки_Сообщить() Экспорт ``` +### Отладка методов + +Для того, что бы работал отладчик и заходил в добавленные методы нужно: Либо установить любое значение переменной окружения с именем ```OSCRIPT_FLUENT_DEBUG```. Либо вызвать метод ```Отладка()``` + --- Вдохновение черпалось из java8 stream-api. diff --git a/packagedef b/packagedef index 444e1be..12e19d5 100644 --- a/packagedef +++ b/packagedef @@ -8,6 +8,7 @@ .ЗависитОт("logos") .ЗависитОт("notify", "0.2.0") .ЗависитОт("strings") + .ЗависитОт("tempfiles") .ВключитьФайл("examples") .ВключитьФайл("src") .ВключитьФайл("tasks") diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" index b80a6c1..eaf9019 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" @@ -1,6 +1,7 @@ #Использовать notify #Использовать logos #Использовать strings +#Использовать tempfiles #Использовать "../internal" @@ -11,6 +12,13 @@ Перем ВременныеОписанияОповещений; Перем ТекстШаблонаИзолированногоКласса; +// Флаг поддержки возможности отладки добавленных методов +Перем Отладка; + +Процедура ПриСозданииОбъекта() + Отладка = ЗначениеЗаполнено(ПолучитьПеременнуюСреды("OSCRIPT_FLUENT_DEBUG")); +КонецПроцедуры + // Общее API // Устанавливает коллекцию для обработки Процессора коллекций. @@ -23,6 +31,19 @@ Лог.Отладка("Установлена коллекция размером %1", ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию().Количество()); КонецПроцедуры +// Включает возможность отладки. Достигается сохранением текста модуля во временный файл. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Ссылка на текущий инстанс ПроцессорКоллекций +// +Функция Отладка(Включена = Истина) Экспорт + + Отладка = Включена; + + Возврат ЭтотОбъект; + +КонецФункции + // Конвейерные методы // Получить первые N элементов. @@ -962,8 +983,17 @@ "А = 0;", ПользовательскоеВыражение ); - - ВременныйСценарий = ЗагрузитьСценарийИзСтроки(ТекстИзолированногоКласса); + + Если Отладка = Истина Тогда + ИмяВременногоФайла = ВременныеФайлы.НовоеИмяФайла("os"); + ЗаписьТекста = Новый ЗаписьТекста(); + ЗаписьТекста.Открыть(ИмяВременногоФайла); + ЗаписьТекста.Записать(ТекстИзолированногоКласса); + ЗаписьТекста.Закрыть(); + ВременныйСценарий = ЗагрузитьСценарий(ИмяВременногоФайла); + Иначе + ВременныйСценарий = ЗагрузитьСценарийИзСтроки(ТекстИзолированногоКласса); + КонецЕсли; ОписаниеОповещения = Новый ОписаниеОповещения( "ОбработкаОповещения", From d59f9449cf86e00a5b3928ea3c8d3d3ab87ca21d Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 17 Oct 2022 19:55:27 +0400 Subject: [PATCH 5/6] lf --- .bsl-language-server.json | 16 +- .gitattributes | 3 + CHANGELOG.md | 80 +- README.md | 1638 ++++++------- examples/github.os | 146 +- examples/test.os | 224 +- ...20\265\320\261\320\275\321\213\320\271.os" | 34 +- ...20\265\320\272\321\206\320\270\320\271.os" | 2174 ++++++++--------- ...20\265\320\272\321\206\320\270\320\271.os" | 302 +-- tasks/test.os | 16 +- ...20\267\320\260\321\206\320\270\321\217.os" | 72 +- ...20\271\320\242\320\265\321\201\321\202.os" | 388 +-- ...20\265\321\202\320\276\320\264\321\213.os" | 274 +-- ...21\202\321\200\320\276\320\272\320\270.os" | 84 +- ...20\265\321\202\320\276\320\264\321\213.os" | 458 ++-- 15 files changed, 2956 insertions(+), 2953 deletions(-) create mode 100644 .gitattributes diff --git a/.bsl-language-server.json b/.bsl-language-server.json index d1beb25..2870a4e 100644 --- a/.bsl-language-server.json +++ b/.bsl-language-server.json @@ -1,9 +1,9 @@ -{ - "diagnostics": { - "parameters": { - "IncorrectLineBreak": { - "listOfIncorrectFirstSymbol": ";" - } - } - } +{ + "diagnostics": { + "parameters": { + "IncorrectLineBreak": { + "listOfIncorrectFirstSymbol": ";" + } + } + } } \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..5e03efd --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +*.os text eol=lf +*.md text eol=lf +*.json text eol=lf diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c1c61e..9524661 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,40 +1,40 @@ -## 0.4.0 - -* Добавлен конвейерный метод Развернуть/flatMap -* Добавлено создание процессора коллекций из набора параметров (varargs...) - -## 0.3.1 - -* Реальный переезд на использование API `Новый ОписаниеОповещения()` - -## 0.3.0 - -* Обновление `notify` до версии `0.2.0` -* Отказ от создания временных файлов в пользу создания описания оповещения через `ЗагрузитьСценарийИзСтроки` -* Переезд на движок версии `1.0.18` - -## 0.2.2 - -* Исправлена ошибка неудаления временных файлов при вызове некоторых терминальных методов - -## 0.2.1 - -* Оптимизация создания временного описания оповещения - -## 0.2.0 - -* В метод `ВСтроку` добавлен параметр `РазделительСтрок` для управлением конкатенацией -* Более аккуратная работа с памятью при использовании временных описаний оповещений -* Переименование: `СтандартныйОбработчик_Сообщить` -> `СтандартнаяФункцияОбработки_Сообщить` -* Переименование: `СтандартныйОбработчикСравнения` -> `СтандартнаяФункцияСравнения` -* Зависимость от движка снижена до 1.0.15.211 -* Добавлены тесты :) -* Добавлено README и CHANGELOG - -## 0.1.1 - -* Возможность использовать сокращенный вариант обращения к параметрам обработчиков -> `Элемент` вместо `ДополнительныеПараметры.Элемент` - -## 0.1.0 - -* Первый релиз +## 0.4.0 + +* Добавлен конвейерный метод Развернуть/flatMap +* Добавлено создание процессора коллекций из набора параметров (varargs...) + +## 0.3.1 + +* Реальный переезд на использование API `Новый ОписаниеОповещения()` + +## 0.3.0 + +* Обновление `notify` до версии `0.2.0` +* Отказ от создания временных файлов в пользу создания описания оповещения через `ЗагрузитьСценарийИзСтроки` +* Переезд на движок версии `1.0.18` + +## 0.2.2 + +* Исправлена ошибка неудаления временных файлов при вызове некоторых терминальных методов + +## 0.2.1 + +* Оптимизация создания временного описания оповещения + +## 0.2.0 + +* В метод `ВСтроку` добавлен параметр `РазделительСтрок` для управлением конкатенацией +* Более аккуратная работа с памятью при использовании временных описаний оповещений +* Переименование: `СтандартныйОбработчик_Сообщить` -> `СтандартнаяФункцияОбработки_Сообщить` +* Переименование: `СтандартныйОбработчикСравнения` -> `СтандартнаяФункцияСравнения` +* Зависимость от движка снижена до 1.0.15.211 +* Добавлены тесты :) +* Добавлено README и CHANGELOG + +## 0.1.1 + +* Возможность использовать сокращенный вариант обращения к параметрам обработчиков -> `Элемент` вместо `ДополнительныеПараметры.Элемент` + +## 0.1.0 + +* Первый релиз diff --git a/README.md b/README.md index 583aea3..755dcd8 100644 --- a/README.md +++ b/README.md @@ -1,819 +1,819 @@ -# fluent - -[![Build Status](https://travis-ci.org/nixel2007/oscript-fluent.svg?branch=develop)](https://travis-ci.org/nixel2007/oscript-fluent) -[![Quality Gate](https://sonar.openbsl.ru/api/project_badges/measure?project=oscript-fluent&metric=alert_status)](https://sonar.openbsl.ru/dashboard?id=oscript-fluent) -[![Maintainability](https://sonar.openbsl.ru/api/project_badges/measure?project=oscript-fluent&metric=sqale_rating)](https://sonar.openbsl.ru/dashboard?id=oscript-fluent) -[![Coverage](https://sonar.openbsl.ru/api/project_badges/measure?project=oscript-fluent&metric=coverage)](https://sonar.openbsl.ru/dashboard?id=oscript-fluent) - -Библиотека быстрой обработки коллекций. - -Позволяет в "текучем" стиле обрабатывать коллекции - фильтровать, упорядочивать, выполнять операции над элементы, получать результат в виде заданного типа и др. - -## Возможности - -Поддержка строк, массивов, таблиц значений, деревьев значений. -> Структуры и соответствия incoming - -Конвейерные методы: - -* Первые -* Пропустить -* Различные -* Обработать -* Развернуть -* Фильтровать -* Сортировать -* СортироватьПо - -Терминальные методы: - -* ПолучитьПервый -* ВМассив -* ВСтроку -* Количество -* ДляКаждого -* Минимум -* Максимум -* Сократить -* Получить -* ЛюбойСоответствует -* ВсеСоответствуют -* ВсеНеСоответствуют - -Функции сравнения, фильтрации, обработки могут задаваться с помощью: - -* Строк -* Описаний оповещения (библиотека [notify](https://github.com/oscript-library/notify)) - -Библиотека помимо конструктора класса `ПроцессорКоллекций` содержит вспомогательный модуль, включающий: - -* построитель процессора коллекций `ИзКоллекции()` -* построитель процессора коллекций `ИзСтроки()` -* построитель процессора коллекций `ИзНабора()` -* `СтандартнаяФункцияСравнения()` - типовой `comparator`, возвращающий результат сравнения как `1`, `0`, `-1` -* `СтандартнаяФункцияОбработки_Сообщить()` - функция сообщения каждого элемента в консоль - -## Примеры работы - -```bsl -Массив = Новый Массив; -Массив.Добавить(3); -Массив.Добавить(4); -Массив.Добавить(7); -Массив.Добавить(5); -Массив.Добавить(1); -Массив.Добавить(0); - -Результат = ПроцессорыКоллекций.ИзКоллекции(Массив) - .Пропустить(1) - .Фильтровать("Элемент >= 5") - .Первые(2) - .Обработать("Результат = Элемент + 1") - .Получить(Тип("Массив")); - -// На выходе массив [8, 6] -``` - -Тоже самое с помощью `notify`: - -```bsl -Процедура ОбработчикФильтрации(Результат, ДополнительныеПараметры) Экспорт - Результат = ДополнительныеПараметры.Элемент >= 5; -КонецПроцедуры - -Процедура ОбработчикОбработки(Результат, ДополнительныеПараметры) Экспорт - Элемент = ДополнительныеПараметры.Элемент; - Результат = Элемент + 1; - Сообщить("Я - операция map, и это мое послание миру: элемент " + Элемент + " превратился в " + Результат); -КонецПроцедуры - -ФункцияФильтрации = Новый ОписаниеОповещения("ОбработчикФильтрации", ЭтотОбъект); -ФункцияОбработки = Новый ОписаниеОповещения("ОбработчикОбработки", ЭтотОбъект); - -Результат = ПроцессорыКоллекций.ИзКоллекции(Массив) - .Пропустить(1) - .Фильтровать(ФункцияФильтрации) - .Первые(2) - .Обработать(ФункцияОбработки) - .Получить(Тип("Массив")); -``` - -```bsl -Массив = Новый Массив; -Массив.Добавить(4); -Массив.Добавить(2); -Массив.Добавить(2); -Массив.Добавить(3); -Массив.Добавить(3); -Массив.Добавить(3); - -ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Массив); -ПроцессорКоллекций - .Различные() - .Сортировать() - .ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); - -// На выходе сообщения в консоль: -// 2 -// 3 -// 4 -``` - -```bsl -Строка = "Я -|строка -|многострочная"; - -ПроцессорыКоллекций - .ИзСтроки(Строка, Символы.ПС) - .Фильтровать("Результат = СтрДлина(Элемент) > 1") - .ДляКаждого("Сообщить(Элемент)"); - -// На выходе сообщения в консоль: -// многострочная -// строка -``` - -Больше примеров работы в каталогах `examples` и `tests`. - -## Публичный интерфейс - -### Класс ПроцессорКоллекций - -> Общее API - -#### УстановитьКоллекцию - -```bsl -// Устанавливает коллекцию для обработки Процессора коллекций. -// -// Параметры: -// НоваяКоллекция - Массив, ТаблицаЗначений, ДеревоЗначений... - Коллекция, устанавливаемая в процессор. -// -Процедура УстановитьКоллекцию(НоваяКоллекция) Экспорт -``` - -> Конвейерные методы - -#### Первые - -```bsl -// Получить первые N элементов. -// Конвейерный метод. -// -// Параметры: -// Количество - Число - Число отбираемых элементов. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". -// -Функция Первые(Количество) Экспорт -``` - -#### Пропустить - -```bsl -// Пропустить первые N элементов. -// Конвейерный метод. -// -// Параметры: -// Количество - Число - Число пропускаемых элементов. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". -// -Функция Пропустить(Количество) Экспорт -``` - -#### Различные - -```bsl -// Выбрать различные элементы. -// Конвейерный метод. -// -// Параметры: -// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// Если параметр не передан, выполняется стандартная функция сравнения: -// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. -// По умолчанию содержит два значения - Элемент1 и Элемент2. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". -// -// Примеры: -// 1: -// ПроцессорКоллекций.Различные("Результат = Элемент1 > Элемент2"); -// -// 2: -// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт -// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; -// КонецПроцедуры -// -// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); -// ПроцессорКоллекций.Различные(ФункцияСравнения); -// -Функция Различные(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт -``` - -#### Обработать - -```bsl -// Обработать каждый элемент коллекции. -// Конвейерный метод. -// -// Параметры: -// ФункцияОбработки - Строка, ОписаниеОповещения - функция обработки. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Произвольный - Переменная, в которой возвращается значение работы обработчика. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая обработчику. -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции обработки. -// Служит для передачи дополнительных данных из прикладного кода в функцию обработки. -// По умолчанию содержит одно значение - Элемент. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". -// -// Примеры: -// 1: -// ПроцессорКоллекций.Обработать("Результат = Элемент + 1;"); -// -// 2: -// Процедура МояФункцияОбработки(Результат, ДополнительныеПараметры) Экспорт -// Результат = ДополнительныеПараметры.Элемент + 1; -// КонецПроцедуры -// -// ФункцияОбработки = Новый ОписаниеОповещения("МояФункцияОбработки", ЭтотОбъект); -// ПроцессорКоллекций.Обработать(ФункцияОбработки); -// -Функция Обработать(Знач ФункцияОбработки, Знач ДополнительныеПараметры = Неопределено) Экспорт -``` - -#### Развернуть - -```bsl -// Развернуть каждый элемент коллекции в процессор коллекций. -// Позволяет расширить имеющуюся коллекцию. -// Например, разворачивание массива массивов сделает новый массив, содерщщий все элементы всех массивов. -// Конвейерный метод. -// -// Параметры: -// ФункцияРазворачивания - Строка, ОписаниеОповещения - функция разворачивания. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// Результат - ПроцессорКоллекций - Переменная, в которую должен быть -// помещен результат работы функции в виде ПроцессораКоллекций. -// ДополнительныеПараметры - Структура - Структура параметров, передаваемая функции разворачивания. -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции разворачивания. -// Служит для передачи дополнительных данных из прикладного кода в функцию разворачивания. -// По умолчанию содержит одно значение - Элемент. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". -// -// Примеры: -// 1: -// ПроцессорКоллекций.Развернуть("Результат = ПроцессорыКоллекций.ИзСтроки(Элемент);"); -// -// 2: -// Процедура МояФункцияРазворачивания(Результат, ДополнительныеПараметры) Экспорт -// Результат = ПроцессорыКоллекций.ИзСтроки(ДополнительныеПараметры.Элемент); -// КонецПроцедуры -// -// ФункцияРазворачивания = Новый ОписаниеОповещения("МояФункцияРазворачивания", ЭтотОбъект); -// ПроцессорКоллекций.Развернуть(ФункцияРазворачивания); -// -Функция Развернуть(Знач ФункцияРазворачивания, Знач ДополнительныеПараметры = Неопределено) Экспорт -``` - -#### Фильтровать - -```bsl -// Фильтровать коллекцию по условию. -// Конвейерный метод. -// -// Параметры: -// ФункцияФильтрации - Строка, ОписаниеОповещения - Функция фильтрации. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции фильтрации. -// Служит для передачи дополнительных данных из прикладного кода в функцию фильтрации. -// По умолчанию содержит одно значение - Элемент. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". -// -// Примеры: -// 1: -// ПроцессорКоллекций.Фильтровать("Результат = СтрДлина(Элемент) > 1"); -// -// 2: -// Процедура МояПроцедураФильтрации(Результат, ДополнительныеПараметры) Экспорт -// Результат = СтрДлина(ДополнительныеПараметры.Элемент) > 1; -// КонецПроцедуры -// -// ФункцияФильтрации = Новый ОписаниеОповещения("МояПроцедураФильтрации", ЭтотОбъект); -// ПроцессорКоллекций.Фильтровать(ФункцияФильтрации); -// -Функция Фильтровать(Знач ФункцияФильтрации, Знач ДополнительныеПараметры = Неопределено) Экспорт -``` - -#### Сортировать - -```bsl -// Сортировать элементы коллекции. -// Конвейерный метод. -// -// Параметры: -// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// Если параметр не передан, выполняется стандартная функция сравнения: -// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. -// По умолчанию содержит два значения - Элемент1 и Элемент2. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". -// -// Примеры: -// 1: -// ПроцессорКоллекций.Сортировать("Результат = Элемент1 > Элемент2"); -// -// 2: -// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт -// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; -// КонецПроцедуры -// -// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); -// ПроцессорКоллекций.Сортировать(ФункцияСравнения); -// -Функция Сортировать(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт -``` - -#### СортироватьПо - -```bsl -// Сортировать элементы коллекции по выбранному полю. -// Конвейерный метод. -// -// Параметры: -// ИмяПоля - Строка - Имя поля элемента коллекции, по которому необходимо осуществлять сортировку. -// -// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// Если параметр не передан, выполняется стандартная функция сравнения: -// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. -// По умолчанию содержит два значения - Элемент1 и Элемент2. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". -// -// Примеры: -// 1: -// ПроцессорКоллекций.СортироватьПо("НомерСтроки", "Результат = Элемент1 > Элемент2"); -// -// 2: -// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт -// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; -// КонецПроцедуры -// -// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); -// ПроцессорКоллекций.СортироватьПо("НомерСтроки", ФункцияСравнения); -// -Функция СортироватьПо(Знач ИмяПоля, Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт -``` - -> Терминальные методы - -#### ПолучитьПервый - -```bsl -// Терминальные методы - -// Получить первый элемент. -// Терминальный метод. -// -// Возвращаемое значение: -// Произвольный - Первый элемент из коллекции. Если коллекция пуста, возвращает Неопределено. -// -Функция ПолучитьПервый() Экспорт -``` - -#### ВМассив - -```bsl -// Получить коллекцию в виде массива. -// Терминальный метод. -// -// Возвращаемое значение: -// Массив - Массив элементов коллекции. -// -Функция ВМассив() Экспорт -``` - -#### ВСтроку - -```bsl -// Получить коллекцию в виде строки. -// Терминальный метод. -// -// Параметры: -// РазделительСтрок - Строка - Используемый разделитель между элементами при конкатенации строк. -// -// Возвращаемое значение: -// Строка - Элементы коллекции, соединенные в строку методом конкатенации. -// -Функция ВСтроку(РазделительСтрок = "") Экспорт -``` - -#### Количество - -```bsl -// Получить количество элементов коллекции. -// Терминальный метод. -// -// Возвращаемое значение: -// Число - Количество элементов коллекции. -// -Функция Количество() Экспорт - -``` - -#### ДляКаждого - -```bsl -// Обработать каждый элемент коллекции и завершить работу процессора. -// Терминальный метод. -// -// Параметры: -// ФункцияОбработки - Строка, ОписаниеОповещения - функция обработки. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Произвольный - Игнорируется. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая обработчику. -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции обработки. -// Служит для передачи дополнительных данных из прикладного кода в функцию обработки. -// По умолчанию содержит одно значение - Элемент. -// -// Примеры: -// 1: -// ПроцессорКоллекций.ДляКаждого("Сообщить(Элемент);"); -// -// 2: -// ПроцессорКоллекций.ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); -// -// 3: -// Процедура МояФункцияОбработки(Результат, ДополнительныеПараметры) Экспорт -// Сообщить(ДополнительныеПараметры.Элемент); -// КонецПроцедуры -// -// ФункцияОбработки = Новый ОписаниеОповещения("МояФункцияОбработки", ЭтотОбъект); -// ПроцессорКоллекций.ДляКаждого(ФункцияОбработки); -// -Процедура ДляКаждого(Знач ФункцияОбработки, Знач ДополнительныеПараметры = Неопределено) Экспорт -``` - -#### Минимум - -```bsl -// Получить минимальный элемент. -// Терминальный метод. -// -// Параметры: -// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// Если параметр не передан, выполняется стандартная функция сравнения: -// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. -// По умолчанию содержит два значения - Элемент1 и Элемент2. -// -// Возвращаемое значение: -// Произвольный - минимальный элемент коллекции. -// -// Примеры: -// 1: -// ПроцессорКоллекций.Минимум(); -// -// 2: -// ПроцессорКоллекций.Минимум("Результат = Элемент1 > Элемент2"); -// -// 3: -// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт -// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; -// КонецПроцедуры -// -// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); -// ПроцессорКоллекций.Минимум(ФункцияСравнения); -// -Функция Минимум(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт -``` - -#### Максимум - -```bsl -// Получить максимальный элемент. -// Терминальный метод. -// -// Параметры: -// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// Если параметр не передан, выполняется стандартная функция сравнения: -// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. -// По умолчанию содержит два значения - Элемент1 и Элемент2. -// -// Возвращаемое значение: -// Произвольный - максимальный элемент коллекции. -// -// Примеры: -// 1: -// ПроцессорКоллекций.Максимум(); -// -// 2: -// ПроцессорКоллекций.Максимум("Результат = Элемент1 > Элемент2"); -// -// 3: -// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт -// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; -// КонецПроцедуры -// -// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); -// ПроцессорКоллекций.Максимум(ФункцияСравнения); -// -Функция Максимум(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт -``` - -#### Сократить - -```bsl -// Выполнить агрегатную функцию над элементами коллекции. -// Терминальный метод. -// -// Параметры: -// ФункцияСокращения - Строка, ОписаниеОповещения - Функция сокращения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Произвольный - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// -// НачальноеЗначение - Произвольный - начальное значение, передаваемое в функцию сокращения в параметр "Результат" -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сокращения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сокращения. -// По умолчанию содержит одно значение - Элемент. -// -// Возвращаемое значение: -// Произвольный - результат работы агрегатной функции. -// -// Примеры: -// 2: -// ПроцессорКоллекций.Сократить("Результат = Результат + Элемент"); -// -// 2: -// Процедура МояФункцияСокращения(Результат, ДополнительныеПараметры) Экспорт -// Элемент = ДополнительныеПараметры.Элемент; -// Результат = Результат + Элемент; -// КонецПроцедуры -// -// ФункцияСокращения = Новый ОписаниеОповещения("МояФункцияСокращения", ЭтотОбъект); -// ПроцессорКоллекций.Сократить(ФункцияСокращения); -// -Функция Сократить(Знач ФункцияСокращения, - Знач НачальноеЗначение = Неопределено, - Знач ДополнительныеПараметры = Неопределено) Экспорт -``` - -#### Получить - -```bsl -// Получить коллекцию в виде объекта заданного типа. -// Терминальный метод. -// -// Параметры: -// ТипРезультата - Тип - Тип, в котором необходимо вернуть коллекцию. -// -// Возвращаемое значение: -// Произвольный - Коллекция в виде объекта нужного типа. -// -Функция Получить(ТипРезультата) Экспорт -``` - -#### ЛюбойСоответствует - -```bsl -// Проверить, что хотя бы один элемент коллекции удовлетворяет условию в функции сравнения. -// Терминальный метод. -// -// Параметры: -// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. -// По умолчанию содержит одно значение - Элемент. -// -// Возвращаемое значение: -// Булево - Истина, если минимум один из элементов коллекции удовлетворяет условию Функции сравнения. -// В обратном случае возвращает Ложь. -// Если коллекция пустая, возвращает Ложь. -// -Функция ЛюбойСоответствует(Знач ФункцияСравнения, Знач ДополнительныеПараметры = Неопределено) Экспорт -``` - -#### ВсеСоответствуют - -```bsl -// Проверить, что все элементы коллекции удовлетворяют условию в функции сравнения. -// Терминальный метод. -// -// Параметры: -// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. -// По умолчанию содержит одно значение - Элемент. -// -// Возвращаемое значение: -// Булево - Истина, если все элементы коллекции удовлетворяют условию Функции сравнения. -// В обратном случае возвращает Ложь. -// Если коллекция пустая, возвращает Истина. -// -Функция ВсеСоответствуют(Знач ОписаниеОповещения, Знач ДополнительныеПараметры = Неопределено) Экспорт -``` - -#### ВсеНеСоответствуют - -```bsl -// Проверить, что все элементы коллекции не удовлетворяют условию в функции сравнения. -// Терминальный метод. -// -// Параметры: -// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. -// По умолчанию содержит одно значение - Элемент. -// -// Возвращаемое значение: -// Булево - Истина, если все элементы коллекции не удовлетворяют условию Функции сравнения. -// В обратном случае возвращает Ложь. -// Если коллекция пустая, возвращает Истина. -// -Функция ВсеНеСоответствуют(Знач ФункцияСравнения, Знач ДополнительныеПараметры = Неопределено) Экспорт -``` - -### Модуль ПроцессорыКоллекций - -#### ИзКоллекции - -```bsl -// Создать ПроцессорКоллекций на основании переданной коллекции. -// -// Параметры: -// Коллекция - Произвольный - Коллекция (Массив, ТаблицаЗначений...), на основании которой нужно -// сформировать ПроцессорКоллекций. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций, заполненный переданной коллекцией. -// -Функция ИзКоллекции(Коллекция) Экспорт -``` - -#### ИзСтроки - -```bsl -// Создать ПроцессорКоллекций на основании переданной строки. -// Переданная строка преобразуется в коллекцию путем разделения строк. -// -// Параметры: -// Строка - Строка - Строка, на основании которой нужно сформировать ПроцессорКоллекций. -// РазделительСтрок - Строка - Разделитель строк, применяемый к Строке для получения коллекции. -// Если не передан, строка разделяется на элементы посимвольно. -// ВключатьПустые - Булево - Указывает необходимость включать в коллекцию пустые строки, -// которые могут образоваться в результате разделения исходной строки. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций. -// -Функция ИзСтроки(Строка, РазделительСтрок = Неопределено, ВключатьПустые = Истина) Экспорт -``` - -#### ИзНабора - -```bsl -// Создать ПроцессорКоллекций на основании переданного набора значений. -// Добавляет элемент в ПроцессорКоллекций, если он не равен NULL. -// -// Параметры: -// Элемент1 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент2 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент3 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// ... Всего 32 параметра ... -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций, заполненный переданным набором. -// -Функция ИзНабора(Элемент1 = NULL, Элемент2 = NULL, Элемент3 = NULL, ...) Экспорт -``` - -#### СтандартнаяФункцияСравнения - -```bsl -// Стандартная функция сравнения. -// Сравнивает значения элементов коллекции через операторы ">", "<" и "=". -// -// Возвращаемое значение: -// ОписаниеОповещения - Инстанс класса ОписаниеОповещения, указывающий на стандартную функцию сравнения. -// -Функция СтандартнаяФункцияСравнения() Экспорт -``` - -#### СтандартнаяФункцияОбработки_Сообщить - -```bsl -// Стандартная функция обработки - "Сообщить". -// Выполняет процедуру "Сообщить()" над каждым элементом коллекции. -// -// Возвращаемое значение: -// ОписаниеОповещения - Инстанс класса ОписаниеОповещения, указывающий на стандартную функцию обработки. -// -Функция СтандартнаяФункцияОбработки_Сообщить() Экспорт -``` - -### Отладка методов - -Для того, что бы работал отладчик и заходил в добавленные методы нужно: Либо установить любое значение переменной окружения с именем ```OSCRIPT_FLUENT_DEBUG```. Либо вызвать метод ```Отладка()``` - ---- -Вдохновение черпалось из java8 stream-api. +# fluent + +[![Build Status](https://travis-ci.org/nixel2007/oscript-fluent.svg?branch=develop)](https://travis-ci.org/nixel2007/oscript-fluent) +[![Quality Gate](https://sonar.openbsl.ru/api/project_badges/measure?project=oscript-fluent&metric=alert_status)](https://sonar.openbsl.ru/dashboard?id=oscript-fluent) +[![Maintainability](https://sonar.openbsl.ru/api/project_badges/measure?project=oscript-fluent&metric=sqale_rating)](https://sonar.openbsl.ru/dashboard?id=oscript-fluent) +[![Coverage](https://sonar.openbsl.ru/api/project_badges/measure?project=oscript-fluent&metric=coverage)](https://sonar.openbsl.ru/dashboard?id=oscript-fluent) + +Библиотека быстрой обработки коллекций. + +Позволяет в "текучем" стиле обрабатывать коллекции - фильтровать, упорядочивать, выполнять операции над элементы, получать результат в виде заданного типа и др. + +## Возможности + +Поддержка строк, массивов, таблиц значений, деревьев значений. +> Структуры и соответствия incoming + +Конвейерные методы: + +* Первые +* Пропустить +* Различные +* Обработать +* Развернуть +* Фильтровать +* Сортировать +* СортироватьПо + +Терминальные методы: + +* ПолучитьПервый +* ВМассив +* ВСтроку +* Количество +* ДляКаждого +* Минимум +* Максимум +* Сократить +* Получить +* ЛюбойСоответствует +* ВсеСоответствуют +* ВсеНеСоответствуют + +Функции сравнения, фильтрации, обработки могут задаваться с помощью: + +* Строк +* Описаний оповещения (библиотека [notify](https://github.com/oscript-library/notify)) + +Библиотека помимо конструктора класса `ПроцессорКоллекций` содержит вспомогательный модуль, включающий: + +* построитель процессора коллекций `ИзКоллекции()` +* построитель процессора коллекций `ИзСтроки()` +* построитель процессора коллекций `ИзНабора()` +* `СтандартнаяФункцияСравнения()` - типовой `comparator`, возвращающий результат сравнения как `1`, `0`, `-1` +* `СтандартнаяФункцияОбработки_Сообщить()` - функция сообщения каждого элемента в консоль + +## Примеры работы + +```bsl +Массив = Новый Массив; +Массив.Добавить(3); +Массив.Добавить(4); +Массив.Добавить(7); +Массив.Добавить(5); +Массив.Добавить(1); +Массив.Добавить(0); + +Результат = ПроцессорыКоллекций.ИзКоллекции(Массив) + .Пропустить(1) + .Фильтровать("Элемент >= 5") + .Первые(2) + .Обработать("Результат = Элемент + 1") + .Получить(Тип("Массив")); + +// На выходе массив [8, 6] +``` + +Тоже самое с помощью `notify`: + +```bsl +Процедура ОбработчикФильтрации(Результат, ДополнительныеПараметры) Экспорт + Результат = ДополнительныеПараметры.Элемент >= 5; +КонецПроцедуры + +Процедура ОбработчикОбработки(Результат, ДополнительныеПараметры) Экспорт + Элемент = ДополнительныеПараметры.Элемент; + Результат = Элемент + 1; + Сообщить("Я - операция map, и это мое послание миру: элемент " + Элемент + " превратился в " + Результат); +КонецПроцедуры + +ФункцияФильтрации = Новый ОписаниеОповещения("ОбработчикФильтрации", ЭтотОбъект); +ФункцияОбработки = Новый ОписаниеОповещения("ОбработчикОбработки", ЭтотОбъект); + +Результат = ПроцессорыКоллекций.ИзКоллекции(Массив) + .Пропустить(1) + .Фильтровать(ФункцияФильтрации) + .Первые(2) + .Обработать(ФункцияОбработки) + .Получить(Тип("Массив")); +``` + +```bsl +Массив = Новый Массив; +Массив.Добавить(4); +Массив.Добавить(2); +Массив.Добавить(2); +Массив.Добавить(3); +Массив.Добавить(3); +Массив.Добавить(3); + +ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Массив); +ПроцессорКоллекций + .Различные() + .Сортировать() + .ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); + +// На выходе сообщения в консоль: +// 2 +// 3 +// 4 +``` + +```bsl +Строка = "Я +|строка +|многострочная"; + +ПроцессорыКоллекций + .ИзСтроки(Строка, Символы.ПС) + .Фильтровать("Результат = СтрДлина(Элемент) > 1") + .ДляКаждого("Сообщить(Элемент)"); + +// На выходе сообщения в консоль: +// многострочная +// строка +``` + +Больше примеров работы в каталогах `examples` и `tests`. + +## Публичный интерфейс + +### Класс ПроцессорКоллекций + +> Общее API + +#### УстановитьКоллекцию + +```bsl +// Устанавливает коллекцию для обработки Процессора коллекций. +// +// Параметры: +// НоваяКоллекция - Массив, ТаблицаЗначений, ДеревоЗначений... - Коллекция, устанавливаемая в процессор. +// +Процедура УстановитьКоллекцию(НоваяКоллекция) Экспорт +``` + +> Конвейерные методы + +#### Первые + +```bsl +// Получить первые N элементов. +// Конвейерный метод. +// +// Параметры: +// Количество - Число - Число отбираемых элементов. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". +// +Функция Первые(Количество) Экспорт +``` + +#### Пропустить + +```bsl +// Пропустить первые N элементов. +// Конвейерный метод. +// +// Параметры: +// Количество - Число - Число пропускаемых элементов. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". +// +Функция Пропустить(Количество) Экспорт +``` + +#### Различные + +```bsl +// Выбрать различные элементы. +// Конвейерный метод. +// +// Параметры: +// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// Если параметр не передан, выполняется стандартная функция сравнения: +// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. +// По умолчанию содержит два значения - Элемент1 и Элемент2. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". +// +// Примеры: +// 1: +// ПроцессорКоллекций.Различные("Результат = Элемент1 > Элемент2"); +// +// 2: +// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт +// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; +// КонецПроцедуры +// +// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); +// ПроцессорКоллекций.Различные(ФункцияСравнения); +// +Функция Различные(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт +``` + +#### Обработать + +```bsl +// Обработать каждый элемент коллекции. +// Конвейерный метод. +// +// Параметры: +// ФункцияОбработки - Строка, ОписаниеОповещения - функция обработки. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Произвольный - Переменная, в которой возвращается значение работы обработчика. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая обработчику. +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции обработки. +// Служит для передачи дополнительных данных из прикладного кода в функцию обработки. +// По умолчанию содержит одно значение - Элемент. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". +// +// Примеры: +// 1: +// ПроцессорКоллекций.Обработать("Результат = Элемент + 1;"); +// +// 2: +// Процедура МояФункцияОбработки(Результат, ДополнительныеПараметры) Экспорт +// Результат = ДополнительныеПараметры.Элемент + 1; +// КонецПроцедуры +// +// ФункцияОбработки = Новый ОписаниеОповещения("МояФункцияОбработки", ЭтотОбъект); +// ПроцессорКоллекций.Обработать(ФункцияОбработки); +// +Функция Обработать(Знач ФункцияОбработки, Знач ДополнительныеПараметры = Неопределено) Экспорт +``` + +#### Развернуть + +```bsl +// Развернуть каждый элемент коллекции в процессор коллекций. +// Позволяет расширить имеющуюся коллекцию. +// Например, разворачивание массива массивов сделает новый массив, содерщщий все элементы всех массивов. +// Конвейерный метод. +// +// Параметры: +// ФункцияРазворачивания - Строка, ОписаниеОповещения - функция разворачивания. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// Результат - ПроцессорКоллекций - Переменная, в которую должен быть +// помещен результат работы функции в виде ПроцессораКоллекций. +// ДополнительныеПараметры - Структура - Структура параметров, передаваемая функции разворачивания. +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции разворачивания. +// Служит для передачи дополнительных данных из прикладного кода в функцию разворачивания. +// По умолчанию содержит одно значение - Элемент. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". +// +// Примеры: +// 1: +// ПроцессорКоллекций.Развернуть("Результат = ПроцессорыКоллекций.ИзСтроки(Элемент);"); +// +// 2: +// Процедура МояФункцияРазворачивания(Результат, ДополнительныеПараметры) Экспорт +// Результат = ПроцессорыКоллекций.ИзСтроки(ДополнительныеПараметры.Элемент); +// КонецПроцедуры +// +// ФункцияРазворачивания = Новый ОписаниеОповещения("МояФункцияРазворачивания", ЭтотОбъект); +// ПроцессорКоллекций.Развернуть(ФункцияРазворачивания); +// +Функция Развернуть(Знач ФункцияРазворачивания, Знач ДополнительныеПараметры = Неопределено) Экспорт +``` + +#### Фильтровать + +```bsl +// Фильтровать коллекцию по условию. +// Конвейерный метод. +// +// Параметры: +// ФункцияФильтрации - Строка, ОписаниеОповещения - Функция фильтрации. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции фильтрации. +// Служит для передачи дополнительных данных из прикладного кода в функцию фильтрации. +// По умолчанию содержит одно значение - Элемент. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". +// +// Примеры: +// 1: +// ПроцессорКоллекций.Фильтровать("Результат = СтрДлина(Элемент) > 1"); +// +// 2: +// Процедура МояПроцедураФильтрации(Результат, ДополнительныеПараметры) Экспорт +// Результат = СтрДлина(ДополнительныеПараметры.Элемент) > 1; +// КонецПроцедуры +// +// ФункцияФильтрации = Новый ОписаниеОповещения("МояПроцедураФильтрации", ЭтотОбъект); +// ПроцессорКоллекций.Фильтровать(ФункцияФильтрации); +// +Функция Фильтровать(Знач ФункцияФильтрации, Знач ДополнительныеПараметры = Неопределено) Экспорт +``` + +#### Сортировать + +```bsl +// Сортировать элементы коллекции. +// Конвейерный метод. +// +// Параметры: +// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// Если параметр не передан, выполняется стандартная функция сравнения: +// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. +// По умолчанию содержит два значения - Элемент1 и Элемент2. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". +// +// Примеры: +// 1: +// ПроцессорКоллекций.Сортировать("Результат = Элемент1 > Элемент2"); +// +// 2: +// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт +// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; +// КонецПроцедуры +// +// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); +// ПроцессорКоллекций.Сортировать(ФункцияСравнения); +// +Функция Сортировать(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт +``` + +#### СортироватьПо + +```bsl +// Сортировать элементы коллекции по выбранному полю. +// Конвейерный метод. +// +// Параметры: +// ИмяПоля - Строка - Имя поля элемента коллекции, по которому необходимо осуществлять сортировку. +// +// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// Если параметр не передан, выполняется стандартная функция сравнения: +// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. +// По умолчанию содержит два значения - Элемент1 и Элемент2. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". +// +// Примеры: +// 1: +// ПроцессорКоллекций.СортироватьПо("НомерСтроки", "Результат = Элемент1 > Элемент2"); +// +// 2: +// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт +// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; +// КонецПроцедуры +// +// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); +// ПроцессорКоллекций.СортироватьПо("НомерСтроки", ФункцияСравнения); +// +Функция СортироватьПо(Знач ИмяПоля, Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт +``` + +> Терминальные методы + +#### ПолучитьПервый + +```bsl +// Терминальные методы + +// Получить первый элемент. +// Терминальный метод. +// +// Возвращаемое значение: +// Произвольный - Первый элемент из коллекции. Если коллекция пуста, возвращает Неопределено. +// +Функция ПолучитьПервый() Экспорт +``` + +#### ВМассив + +```bsl +// Получить коллекцию в виде массива. +// Терминальный метод. +// +// Возвращаемое значение: +// Массив - Массив элементов коллекции. +// +Функция ВМассив() Экспорт +``` + +#### ВСтроку + +```bsl +// Получить коллекцию в виде строки. +// Терминальный метод. +// +// Параметры: +// РазделительСтрок - Строка - Используемый разделитель между элементами при конкатенации строк. +// +// Возвращаемое значение: +// Строка - Элементы коллекции, соединенные в строку методом конкатенации. +// +Функция ВСтроку(РазделительСтрок = "") Экспорт +``` + +#### Количество + +```bsl +// Получить количество элементов коллекции. +// Терминальный метод. +// +// Возвращаемое значение: +// Число - Количество элементов коллекции. +// +Функция Количество() Экспорт + +``` + +#### ДляКаждого + +```bsl +// Обработать каждый элемент коллекции и завершить работу процессора. +// Терминальный метод. +// +// Параметры: +// ФункцияОбработки - Строка, ОписаниеОповещения - функция обработки. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Произвольный - Игнорируется. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая обработчику. +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции обработки. +// Служит для передачи дополнительных данных из прикладного кода в функцию обработки. +// По умолчанию содержит одно значение - Элемент. +// +// Примеры: +// 1: +// ПроцессорКоллекций.ДляКаждого("Сообщить(Элемент);"); +// +// 2: +// ПроцессорКоллекций.ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); +// +// 3: +// Процедура МояФункцияОбработки(Результат, ДополнительныеПараметры) Экспорт +// Сообщить(ДополнительныеПараметры.Элемент); +// КонецПроцедуры +// +// ФункцияОбработки = Новый ОписаниеОповещения("МояФункцияОбработки", ЭтотОбъект); +// ПроцессорКоллекций.ДляКаждого(ФункцияОбработки); +// +Процедура ДляКаждого(Знач ФункцияОбработки, Знач ДополнительныеПараметры = Неопределено) Экспорт +``` + +#### Минимум + +```bsl +// Получить минимальный элемент. +// Терминальный метод. +// +// Параметры: +// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// Если параметр не передан, выполняется стандартная функция сравнения: +// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. +// По умолчанию содержит два значения - Элемент1 и Элемент2. +// +// Возвращаемое значение: +// Произвольный - минимальный элемент коллекции. +// +// Примеры: +// 1: +// ПроцессорКоллекций.Минимум(); +// +// 2: +// ПроцессорКоллекций.Минимум("Результат = Элемент1 > Элемент2"); +// +// 3: +// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт +// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; +// КонецПроцедуры +// +// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); +// ПроцессорКоллекций.Минимум(ФункцияСравнения); +// +Функция Минимум(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт +``` + +#### Максимум + +```bsl +// Получить максимальный элемент. +// Терминальный метод. +// +// Параметры: +// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// Если параметр не передан, выполняется стандартная функция сравнения: +// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. +// По умолчанию содержит два значения - Элемент1 и Элемент2. +// +// Возвращаемое значение: +// Произвольный - максимальный элемент коллекции. +// +// Примеры: +// 1: +// ПроцессорКоллекций.Максимум(); +// +// 2: +// ПроцессорКоллекций.Максимум("Результат = Элемент1 > Элемент2"); +// +// 3: +// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт +// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; +// КонецПроцедуры +// +// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); +// ПроцессорКоллекций.Максимум(ФункцияСравнения); +// +Функция Максимум(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт +``` + +#### Сократить + +```bsl +// Выполнить агрегатную функцию над элементами коллекции. +// Терминальный метод. +// +// Параметры: +// ФункцияСокращения - Строка, ОписаниеОповещения - Функция сокращения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Произвольный - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// +// НачальноеЗначение - Произвольный - начальное значение, передаваемое в функцию сокращения в параметр "Результат" +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сокращения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сокращения. +// По умолчанию содержит одно значение - Элемент. +// +// Возвращаемое значение: +// Произвольный - результат работы агрегатной функции. +// +// Примеры: +// 2: +// ПроцессорКоллекций.Сократить("Результат = Результат + Элемент"); +// +// 2: +// Процедура МояФункцияСокращения(Результат, ДополнительныеПараметры) Экспорт +// Элемент = ДополнительныеПараметры.Элемент; +// Результат = Результат + Элемент; +// КонецПроцедуры +// +// ФункцияСокращения = Новый ОписаниеОповещения("МояФункцияСокращения", ЭтотОбъект); +// ПроцессорКоллекций.Сократить(ФункцияСокращения); +// +Функция Сократить(Знач ФункцияСокращения, + Знач НачальноеЗначение = Неопределено, + Знач ДополнительныеПараметры = Неопределено) Экспорт +``` + +#### Получить + +```bsl +// Получить коллекцию в виде объекта заданного типа. +// Терминальный метод. +// +// Параметры: +// ТипРезультата - Тип - Тип, в котором необходимо вернуть коллекцию. +// +// Возвращаемое значение: +// Произвольный - Коллекция в виде объекта нужного типа. +// +Функция Получить(ТипРезультата) Экспорт +``` + +#### ЛюбойСоответствует + +```bsl +// Проверить, что хотя бы один элемент коллекции удовлетворяет условию в функции сравнения. +// Терминальный метод. +// +// Параметры: +// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. +// По умолчанию содержит одно значение - Элемент. +// +// Возвращаемое значение: +// Булево - Истина, если минимум один из элементов коллекции удовлетворяет условию Функции сравнения. +// В обратном случае возвращает Ложь. +// Если коллекция пустая, возвращает Ложь. +// +Функция ЛюбойСоответствует(Знач ФункцияСравнения, Знач ДополнительныеПараметры = Неопределено) Экспорт +``` + +#### ВсеСоответствуют + +```bsl +// Проверить, что все элементы коллекции удовлетворяют условию в функции сравнения. +// Терминальный метод. +// +// Параметры: +// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. +// По умолчанию содержит одно значение - Элемент. +// +// Возвращаемое значение: +// Булево - Истина, если все элементы коллекции удовлетворяют условию Функции сравнения. +// В обратном случае возвращает Ложь. +// Если коллекция пустая, возвращает Истина. +// +Функция ВсеСоответствуют(Знач ОписаниеОповещения, Знач ДополнительныеПараметры = Неопределено) Экспорт +``` + +#### ВсеНеСоответствуют + +```bsl +// Проверить, что все элементы коллекции не удовлетворяют условию в функции сравнения. +// Терминальный метод. +// +// Параметры: +// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. +// По умолчанию содержит одно значение - Элемент. +// +// Возвращаемое значение: +// Булево - Истина, если все элементы коллекции не удовлетворяют условию Функции сравнения. +// В обратном случае возвращает Ложь. +// Если коллекция пустая, возвращает Истина. +// +Функция ВсеНеСоответствуют(Знач ФункцияСравнения, Знач ДополнительныеПараметры = Неопределено) Экспорт +``` + +### Модуль ПроцессорыКоллекций + +#### ИзКоллекции + +```bsl +// Создать ПроцессорКоллекций на основании переданной коллекции. +// +// Параметры: +// Коллекция - Произвольный - Коллекция (Массив, ТаблицаЗначений...), на основании которой нужно +// сформировать ПроцессорКоллекций. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций, заполненный переданной коллекцией. +// +Функция ИзКоллекции(Коллекция) Экспорт +``` + +#### ИзСтроки + +```bsl +// Создать ПроцессорКоллекций на основании переданной строки. +// Переданная строка преобразуется в коллекцию путем разделения строк. +// +// Параметры: +// Строка - Строка - Строка, на основании которой нужно сформировать ПроцессорКоллекций. +// РазделительСтрок - Строка - Разделитель строк, применяемый к Строке для получения коллекции. +// Если не передан, строка разделяется на элементы посимвольно. +// ВключатьПустые - Булево - Указывает необходимость включать в коллекцию пустые строки, +// которые могут образоваться в результате разделения исходной строки. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций. +// +Функция ИзСтроки(Строка, РазделительСтрок = Неопределено, ВключатьПустые = Истина) Экспорт +``` + +#### ИзНабора + +```bsl +// Создать ПроцессорКоллекций на основании переданного набора значений. +// Добавляет элемент в ПроцессорКоллекций, если он не равен NULL. +// +// Параметры: +// Элемент1 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент2 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент3 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// ... Всего 32 параметра ... +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций, заполненный переданным набором. +// +Функция ИзНабора(Элемент1 = NULL, Элемент2 = NULL, Элемент3 = NULL, ...) Экспорт +``` + +#### СтандартнаяФункцияСравнения + +```bsl +// Стандартная функция сравнения. +// Сравнивает значения элементов коллекции через операторы ">", "<" и "=". +// +// Возвращаемое значение: +// ОписаниеОповещения - Инстанс класса ОписаниеОповещения, указывающий на стандартную функцию сравнения. +// +Функция СтандартнаяФункцияСравнения() Экспорт +``` + +#### СтандартнаяФункцияОбработки_Сообщить + +```bsl +// Стандартная функция обработки - "Сообщить". +// Выполняет процедуру "Сообщить()" над каждым элементом коллекции. +// +// Возвращаемое значение: +// ОписаниеОповещения - Инстанс класса ОписаниеОповещения, указывающий на стандартную функцию обработки. +// +Функция СтандартнаяФункцияОбработки_Сообщить() Экспорт +``` + +### Отладка методов + +Для того, что бы работал отладчик и заходил в добавленные методы нужно: Либо установить любое значение переменной окружения с именем ```OSCRIPT_FLUENT_DEBUG```. Либо вызвать метод ```Отладка()``` + +--- +Вдохновение черпалось из java8 stream-api. diff --git a/examples/github.os b/examples/github.os index b8dd260..18ae8ed 100644 --- a/examples/github.os +++ b/examples/github.os @@ -1,73 +1,73 @@ -#Использовать ".." -#Использовать notify - -Перем Таблица; - -Процедура ДобавитьСтрокуВТаблицу(Имя, Фолловеры, Местоположение, Контрибьюции); - Строка = Таблица.Добавить(); - Строка.Имя = Имя; - Строка.Фолловеры = Фолловеры; - Строка.Местоположение = Местоположение; - Строка.Контрибьюции = Контрибьюции; -КонецПроцедуры - -Процедура Обработчик_ФильтрацияПоМестоположению(РезультатФильтрации, ДополнительныеПараметры) Экспорт - РезультатФильтрации = ДополнительныеПараметры.Элемент.Местоположение = "Россия"; -КонецПроцедуры - -Процедура Обработчик_СортировкаПоФолловерам(РезультатСравнения, ДополнительныеПараметры) Экспорт - РезультатСравнения = ДополнительныеПараметры.Элемент1.Фолловеры < ДополнительныеПараметры.Элемент2.Фолловеры; -КонецПроцедуры - -Процедура Обработчик_СортировкаПоКонтрибьюциям(РезультатСравнения, ДополнительныеПараметры) Экспорт - РезультатСравнения = ДополнительныеПараметры.Элемент1.Контрибьюции < ДополнительныеПараметры.Элемент2.Контрибьюции; -КонецПроцедуры - -ФильтрацияПоМестоположению = Новый ОписаниеОповещения("Обработчик_ФильтрацияПоМестоположению", ЭтотОбъект); -СортировкаПоФолловерам = Новый ОписаниеОповещения("Обработчик_СортировкаПоФолловерам", ЭтотОбъект); -СортировкаПоКонтрибьюциям = Новый ОписаниеОповещения("Обработчик_СортировкаПоКонтрибьюциям", ЭтотОбъект); - - -Таблица = Новый ТаблицаЗначений; -Таблица.Колонки.Добавить("Имя"); -Таблица.Колонки.Добавить("Фолловеры"); -Таблица.Колонки.Добавить("Местоположение"); -Таблица.Колонки.Добавить("Контрибьюции"); - -ДобавитьСтрокуВТаблицу("Иванов", 10, "Новая Зеландия", 45); -ДобавитьСтрокуВТаблицу("Петров", 0, "Россия", 50); -ДобавитьСтрокуВТаблицу("Сидоров", 15, "Россия", 12); -ДобавитьСтрокуВТаблицу("Туполев", 99, "Россия", 44); -ДобавитьСтрокуВТаблицу("Миль", 23, "Нидерланды", 31); -ДобавитьСтрокуВТаблицу("Сухой", 3, "Россия", 123); -ДобавитьСтрокуВТаблицу("Лавочкин", 10, "Россия", 68); -ДобавитьСтрокуВТаблицу("Яковлев", 12, "Россия", 99); - - -ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Таблица); -Результат = ПроцессорКоллекций - .Фильтровать(ФильтрацияПоМестоположению) - .Сортировать(СортировкаПоФолловерам) - .Первые(5) - .Сортировать(СортировкаПоКонтрибьюциям) - .Первые(3) - .Получить(Тип("ТаблицаЗначений")); - -Для Каждого Элемент Из Результат Цикл - Сообщить(Элемент.Имя); -КонецЦикла; - -ПроцессорыКоллекций.ИзКоллекции(Таблица) - .Фильтровать("Результат = Элемент.Местоположение = ""Россия""") - .Сортировать("Результат = Элемент1.Фолловеры < Элемент2.Фолловеры") - .Первые(5) - .Сортировать("Результат = Элемент1.Контрибьюции < Элемент2.Контрибьюции") - .Первые(3) - .ДляКаждого("Сообщить(Элемент.Имя)"); - -// githubUsers -// .filter(_.location == 'Russia') -// .sort(_.followers) -// .take(1000) -// .sort(_.contributions) -// .take(256) +#Использовать ".." +#Использовать notify + +Перем Таблица; + +Процедура ДобавитьСтрокуВТаблицу(Имя, Фолловеры, Местоположение, Контрибьюции); + Строка = Таблица.Добавить(); + Строка.Имя = Имя; + Строка.Фолловеры = Фолловеры; + Строка.Местоположение = Местоположение; + Строка.Контрибьюции = Контрибьюции; +КонецПроцедуры + +Процедура Обработчик_ФильтрацияПоМестоположению(РезультатФильтрации, ДополнительныеПараметры) Экспорт + РезультатФильтрации = ДополнительныеПараметры.Элемент.Местоположение = "Россия"; +КонецПроцедуры + +Процедура Обработчик_СортировкаПоФолловерам(РезультатСравнения, ДополнительныеПараметры) Экспорт + РезультатСравнения = ДополнительныеПараметры.Элемент1.Фолловеры < ДополнительныеПараметры.Элемент2.Фолловеры; +КонецПроцедуры + +Процедура Обработчик_СортировкаПоКонтрибьюциям(РезультатСравнения, ДополнительныеПараметры) Экспорт + РезультатСравнения = ДополнительныеПараметры.Элемент1.Контрибьюции < ДополнительныеПараметры.Элемент2.Контрибьюции; +КонецПроцедуры + +ФильтрацияПоМестоположению = Новый ОписаниеОповещения("Обработчик_ФильтрацияПоМестоположению", ЭтотОбъект); +СортировкаПоФолловерам = Новый ОписаниеОповещения("Обработчик_СортировкаПоФолловерам", ЭтотОбъект); +СортировкаПоКонтрибьюциям = Новый ОписаниеОповещения("Обработчик_СортировкаПоКонтрибьюциям", ЭтотОбъект); + + +Таблица = Новый ТаблицаЗначений; +Таблица.Колонки.Добавить("Имя"); +Таблица.Колонки.Добавить("Фолловеры"); +Таблица.Колонки.Добавить("Местоположение"); +Таблица.Колонки.Добавить("Контрибьюции"); + +ДобавитьСтрокуВТаблицу("Иванов", 10, "Новая Зеландия", 45); +ДобавитьСтрокуВТаблицу("Петров", 0, "Россия", 50); +ДобавитьСтрокуВТаблицу("Сидоров", 15, "Россия", 12); +ДобавитьСтрокуВТаблицу("Туполев", 99, "Россия", 44); +ДобавитьСтрокуВТаблицу("Миль", 23, "Нидерланды", 31); +ДобавитьСтрокуВТаблицу("Сухой", 3, "Россия", 123); +ДобавитьСтрокуВТаблицу("Лавочкин", 10, "Россия", 68); +ДобавитьСтрокуВТаблицу("Яковлев", 12, "Россия", 99); + + +ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Таблица); +Результат = ПроцессорКоллекций + .Фильтровать(ФильтрацияПоМестоположению) + .Сортировать(СортировкаПоФолловерам) + .Первые(5) + .Сортировать(СортировкаПоКонтрибьюциям) + .Первые(3) + .Получить(Тип("ТаблицаЗначений")); + +Для Каждого Элемент Из Результат Цикл + Сообщить(Элемент.Имя); +КонецЦикла; + +ПроцессорыКоллекций.ИзКоллекции(Таблица) + .Фильтровать("Результат = Элемент.Местоположение = ""Россия""") + .Сортировать("Результат = Элемент1.Фолловеры < Элемент2.Фолловеры") + .Первые(5) + .Сортировать("Результат = Элемент1.Контрибьюции < Элемент2.Контрибьюции") + .Первые(3) + .ДляКаждого("Сообщить(Элемент.Имя)"); + +// githubUsers +// .filter(_.location == 'Russia') +// .sort(_.followers) +// .take(1000) +// .sort(_.contributions) +// .take(256) diff --git a/examples/test.os b/examples/test.os index 160d12f..7a0239e 100644 --- a/examples/test.os +++ b/examples/test.os @@ -1,112 +1,112 @@ -#Использовать ".." -#Использовать notify - -Процедура ОбработчикФильтрации(Результат, ДополнительныеПараметры) Экспорт - Элемент = ДополнительныеПараметры.Элемент; - Результат = Элемент > 3; -КонецПроцедуры - -Процедура ОбработчикОбработки(Результат, ДополнительныеПараметры) Экспорт - Элемент = ДополнительныеПараметры.Элемент; - Результат = Элемент + 1; - Сообщить("Я - операция map, и это мое послание миру: элемент " + Элемент + " превратился в " + Результат); -КонецПроцедуры - -Процедура ОбработчикСокращения(Результат, ДополнительныеПараметры) Экспорт - Элемент = ДополнительныеПараметры.Элемент; - Результат = Результат + Элемент; -КонецПроцедуры - -ФункцияФильтрации = Новый ОписаниеОповещения("ОбработчикФильтрации", ЭтотОбъект); -ФункцияОбработки = Новый ОписаниеОповещения("ОбработчикОбработки", ЭтотОбъект); -ФункцияСокращения = Новый ОписаниеОповещения("ОбработчикСокращения", ЭтотОбъект); - -Массив = Новый Массив; -Массив.Добавить(3); -Массив.Добавить(4); -Массив.Добавить(7); -Массив.Добавить(5); -Массив.Добавить(1); -Массив.Добавить(0); - -ПроцессорКоллекций = Новый ПроцессорКоллекций; -ПроцессорКоллекций.УстановитьКоллекцию(Массив); - -Результат = ПроцессорКоллекций - .Пропустить(2) - .Фильтровать(ФункцияФильтрации) - .Первые(2) - .Обработать(ФункцияОбработки) - .Получить(Тип("Массив")); - -Для Каждого Элемент Из Результат Цикл - Сообщить(Элемент); -КонецЦикла; - -ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Массив); -ПроцессорКоллекций - .Сортировать() - .ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); - -Массив = Новый Массив; -Массив.Добавить(4); -Массив.Добавить(2); -Массив.Добавить(2); -Массив.Добавить(3); -Массив.Добавить(3); -Массив.Добавить(3); - -ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Массив); -ПроцессорКоллекций - .Различные() - .ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); - -ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Массив); -Результат = ПроцессорКоллекций - .Обработать(ФункцияОбработки) - .Сократить(ФункцияСокращения, 0); - -Сообщить(Результат); - -// Результат должен различаться -ПроцессорыКоллекций - .ИзКоллекции(Массив) - .Сортировать() - .Первые(1) - .ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); -Сообщить(Массив[0]); - -Строка = "ФЫВА"; -ПроцессорыКоллекций - .ИзСтроки(Строка) - .Сортировать() - .ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); - -Строка = "Я строка с пробелами"; -ПроцессорыКоллекций - .ИзСтроки(Строка, " ") - .ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); - -Строка = "Я -|строка -|многострочная"; - -ПроцессорыКоллекций - .ИзСтроки(Строка, Символы.ПС) - .Сортировать() - .ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); - -ПроцессорыКоллекций - .ИзСтроки(Строка, Символы.ПС) - .Фильтровать("Результат = СтрДлина(Элемент) > 1") - .ДляКаждого("Сообщить(Элемент)"); - -// Структура = Новый Структура; -// Структура.Вставить("Элемент1", 0); -// Структура.Вставить("Элемент2", 1); -// Структура.Вставить("Элемент3", 2); - -// ПроцессорыКоллекций -// .ИзКоллекции(Структура) -// .Фильтровать("Результат = Элемент.Значение > 0") -// .Получить(Тип("Структура")); +#Использовать ".." +#Использовать notify + +Процедура ОбработчикФильтрации(Результат, ДополнительныеПараметры) Экспорт + Элемент = ДополнительныеПараметры.Элемент; + Результат = Элемент > 3; +КонецПроцедуры + +Процедура ОбработчикОбработки(Результат, ДополнительныеПараметры) Экспорт + Элемент = ДополнительныеПараметры.Элемент; + Результат = Элемент + 1; + Сообщить("Я - операция map, и это мое послание миру: элемент " + Элемент + " превратился в " + Результат); +КонецПроцедуры + +Процедура ОбработчикСокращения(Результат, ДополнительныеПараметры) Экспорт + Элемент = ДополнительныеПараметры.Элемент; + Результат = Результат + Элемент; +КонецПроцедуры + +ФункцияФильтрации = Новый ОписаниеОповещения("ОбработчикФильтрации", ЭтотОбъект); +ФункцияОбработки = Новый ОписаниеОповещения("ОбработчикОбработки", ЭтотОбъект); +ФункцияСокращения = Новый ОписаниеОповещения("ОбработчикСокращения", ЭтотОбъект); + +Массив = Новый Массив; +Массив.Добавить(3); +Массив.Добавить(4); +Массив.Добавить(7); +Массив.Добавить(5); +Массив.Добавить(1); +Массив.Добавить(0); + +ПроцессорКоллекций = Новый ПроцессорКоллекций; +ПроцессорКоллекций.УстановитьКоллекцию(Массив); + +Результат = ПроцессорКоллекций + .Пропустить(2) + .Фильтровать(ФункцияФильтрации) + .Первые(2) + .Обработать(ФункцияОбработки) + .Получить(Тип("Массив")); + +Для Каждого Элемент Из Результат Цикл + Сообщить(Элемент); +КонецЦикла; + +ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Массив); +ПроцессорКоллекций + .Сортировать() + .ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); + +Массив = Новый Массив; +Массив.Добавить(4); +Массив.Добавить(2); +Массив.Добавить(2); +Массив.Добавить(3); +Массив.Добавить(3); +Массив.Добавить(3); + +ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Массив); +ПроцессорКоллекций + .Различные() + .ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); + +ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Массив); +Результат = ПроцессорКоллекций + .Обработать(ФункцияОбработки) + .Сократить(ФункцияСокращения, 0); + +Сообщить(Результат); + +// Результат должен различаться +ПроцессорыКоллекций + .ИзКоллекции(Массив) + .Сортировать() + .Первые(1) + .ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); +Сообщить(Массив[0]); + +Строка = "ФЫВА"; +ПроцессорыКоллекций + .ИзСтроки(Строка) + .Сортировать() + .ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); + +Строка = "Я строка с пробелами"; +ПроцессорыКоллекций + .ИзСтроки(Строка, " ") + .ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); + +Строка = "Я +|строка +|многострочная"; + +ПроцессорыКоллекций + .ИзСтроки(Строка, Символы.ПС) + .Сортировать() + .ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); + +ПроцессорыКоллекций + .ИзСтроки(Строка, Символы.ПС) + .Фильтровать("Результат = СтрДлина(Элемент) > 1") + .ДляКаждого("Сообщить(Элемент)"); + +// Структура = Новый Структура; +// Структура.Вставить("Элемент1", 0); +// Структура.Вставить("Элемент2", 1); +// Структура.Вставить("Элемент3", 2); + +// ПроцессорыКоллекций +// .ИзКоллекции(Структура) +// .Фильтровать("Результат = Элемент.Значение > 0") +// .Получить(Тип("Структура")); diff --git "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\321\213\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\321\213\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" index f46caf4..5ced96e 100644 --- "a/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\321\213\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" +++ "b/src/internal/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\321\213\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271\320\241\320\273\321\203\320\266\320\265\320\261\320\275\321\213\320\271.os" @@ -1,17 +1,17 @@ -Процедура ФункцияСравнения(РезультатСортировки, ДополнительныеПараметры) Экспорт - Элемент1 = ДополнительныеПараметры.Элемент1; - Элемент2 = ДополнительныеПараметры.Элемент2; - - Если Элемент1 = Элемент2 Тогда - РезультатСортировки = 0; - ИначеЕсли Элемент1 > Элемент2 Тогда - РезультатСортировки = 1; - Иначе - РезультатСортировки = -1; - КонецЕсли; -КонецПроцедуры - -Процедура ФункцияОбработки_Сообщить(Результат, ДополнительныеПараметры) Экспорт // BSLLS:UnusedParameters-off - Элемент = ДополнительныеПараметры.Элемент; - Сообщить(Элемент); -КонецПроцедуры +Процедура ФункцияСравнения(РезультатСортировки, ДополнительныеПараметры) Экспорт + Элемент1 = ДополнительныеПараметры.Элемент1; + Элемент2 = ДополнительныеПараметры.Элемент2; + + Если Элемент1 = Элемент2 Тогда + РезультатСортировки = 0; + ИначеЕсли Элемент1 > Элемент2 Тогда + РезультатСортировки = 1; + Иначе + РезультатСортировки = -1; + КонецЕсли; +КонецПроцедуры + +Процедура ФункцияОбработки_Сообщить(Результат, ДополнительныеПараметры) Экспорт // BSLLS:UnusedParameters-off + Элемент = ДополнительныеПараметры.Элемент; + Сообщить(Элемент); +КонецПроцедуры diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" index eaf9019..3646992 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" @@ -1,1087 +1,1087 @@ -#Использовать notify -#Использовать logos -#Использовать strings -#Использовать tempfiles - -#Использовать "../internal" - -Перем Лог; - -Перем Конвейер; -Перем ПроцессорКоллекцийСлужебный; -Перем ВременныеОписанияОповещений; -Перем ТекстШаблонаИзолированногоКласса; - -// Флаг поддержки возможности отладки добавленных методов -Перем Отладка; - -Процедура ПриСозданииОбъекта() - Отладка = ЗначениеЗаполнено(ПолучитьПеременнуюСреды("OSCRIPT_FLUENT_DEBUG")); -КонецПроцедуры - -// Общее API - -// Устанавливает коллекцию для обработки Процессора коллекций. -// -// Параметры: -// НоваяКоллекция - Массив, ТаблицаЗначений, ДеревоЗначений - Коллекция, устанавливаемая в процессор. -// -Процедура УстановитьКоллекцию(НоваяКоллекция) Экспорт - ПроцессорКоллекцийСлужебный.УстановитьКоллекцию(НоваяКоллекция); - Лог.Отладка("Установлена коллекция размером %1", ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию().Количество()); -КонецПроцедуры - -// Включает возможность отладки. Достигается сохранением текста модуля во временный файл. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Ссылка на текущий инстанс ПроцессорКоллекций -// -Функция Отладка(Включена = Истина) Экспорт - - Отладка = Включена; - - Возврат ЭтотОбъект; - -КонецФункции - -// Конвейерные методы - -// Получить первые N элементов. -// Конвейерный метод. -// -// Параметры: -// Количество - Число - Число отбираемых элементов. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". -// -Функция Первые(Количество) Экспорт - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Количество", Количество); - - ПоложитьЯчейкуВКонвейер("Первые", , ДополнительныеПараметры); - Возврат ЭтотОбъект; - -КонецФункции - -// Пропустить первые N элементов. -// Конвейерный метод. -// -// Параметры: -// Количество - Число - Число пропускаемых элементов. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". -// -Функция Пропустить(Количество) Экспорт - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Количество", Количество); - - ПоложитьЯчейкуВКонвейер("Пропустить", , ДополнительныеПараметры); - Возврат ЭтотОбъект; - -КонецФункции - -// Выбрать различные элементы. -// Конвейерный метод. -// -// Параметры: -// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// Если параметр не передан, выполняется стандартная функция сравнения: -// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. -// По умолчанию содержит два значения - Элемент1 и Элемент2. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". -// -// Примеры: -// 1: -// ПроцессорКоллекций.Различные("Результат = Элемент1 > Элемент2"); -// -// 2: -// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт -// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; -// КонецПроцедуры -// -// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); -// ПроцессорКоллекций.Различные(ФункцияСравнения); -// -Функция Различные(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт - - Если ФункцияСравнения = Неопределено Тогда - ФункцияСравнения = ПроцессорыКоллекций.СтандартнаяФункцияСравнения(); - Иначе - Если ТипЗнч(ФункцияСравнения) = Тип("Строка") Тогда - ФункцияСравнения = СформироватьВременноеОписаниеОповещения(ФункцияСравнения, ДополнительныеПараметры); - КонецЕсли; - КонецЕсли; - ДополнитьСтруктуру(ФункцияСравнения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); - - ПоложитьЯчейкуВКонвейер("Различные", ФункцияСравнения); - Возврат ЭтотОбъект; - -КонецФункции - -// Обработать каждый элемент коллекции. -// Конвейерный метод. -// -// Параметры: -// ФункцияОбработки - Строка, ОписаниеОповещения - функция обработки. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Произвольный - Переменная, в которой возвращается значение работы обработчика. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая обработчику. -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции обработки. -// Служит для передачи дополнительных данных из прикладного кода в функцию обработки. -// По умолчанию содержит одно значение - Элемент. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". -// -// Примеры: -// 1: -// ПроцессорКоллекций.Обработать("Результат = Элемент + 1;"); -// -// 2: -// Процедура МояФункцияОбработки(Результат, ДополнительныеПараметры) Экспорт -// Результат = ДополнительныеПараметры.Элемент + 1; -// КонецПроцедуры -// -// ФункцияОбработки = Новый ОписаниеОповещения("МояФункцияОбработки", ЭтотОбъект); -// ПроцессорКоллекций.Обработать(ФункцияОбработки); -// -Функция Обработать(Знач ФункцияОбработки, Знач ДополнительныеПараметры = Неопределено) Экспорт - - Если ТипЗнч(ФункцияОбработки) = Тип("Строка") Тогда - ФункцияОбработки = СформироватьВременноеОписаниеОповещения(ФункцияОбработки, ДополнительныеПараметры); - КонецЕсли; - ДополнитьСтруктуру(ФункцияОбработки.ДополнительныеПараметры, ДополнительныеПараметры, Истина); - - ПоложитьЯчейкуВКонвейер("Обработать", ФункцияОбработки); - Возврат ЭтотОбъект; - -КонецФункции - -// Развернуть каждый элемент коллекции в процессор коллекций. -// Позволяет расширить имеющуюся коллекцию. -// Например, разворачивание массива массивов сделает новый массив, содержащий все элементы всех массивов. -// Конвейерный метод. -// -// Параметры: -// ФункцияРазворачивания - Строка, ОписаниеОповещения - функция разворачивания. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// * Результат - ПроцессорКоллекций - Переменная, в которую должен быть -// помещен результат работы функции в виде ПроцессораКоллекций. -// * ДополнительныеПараметры - Структура - Структура параметров, передаваемая функции разворачивания. -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции разворачивания. -// Служит для передачи дополнительных данных из прикладного кода в функцию разворачивания. -// По умолчанию содержит одно значение - Элемент. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". -// -// Примеры: -// 1: -// ПроцессорКоллекций.Развернуть("Результат = ПроцессорыКоллекций.ИзСтроки(Элемент);"); -// -// 2: -// Процедура МояФункцияРазворачивания(Результат, ДополнительныеПараметры) Экспорт -// Результат = ПроцессорыКоллекций.ИзСтроки(ДополнительныеПараметры.Элемент); -// КонецПроцедуры -// -// ФункцияРазворачивания = Новый ОписаниеОповещения("МояФункцияРазворачивания", ЭтотОбъект); -// ПроцессорКоллекций.Развернуть(ФункцияРазворачивания); -// -Функция Развернуть(Знач ФункцияРазворачивания, Знач ДополнительныеПараметры = Неопределено) Экспорт - - Если ТипЗнч(ФункцияРазворачивания) = Тип("Строка") Тогда - ФункцияРазворачивания = СформироватьВременноеОписаниеОповещения(ФункцияРазворачивания, ДополнительныеПараметры); - КонецЕсли; - ДополнитьСтруктуру(ФункцияРазворачивания.ДополнительныеПараметры, ДополнительныеПараметры, Истина); - - ПоложитьЯчейкуВКонвейер("Развернуть", ФункцияРазворачивания); - Возврат ЭтотОбъект; - -КонецФункции - -// Фильтровать коллекцию по условию. -// Конвейерный метод. -// -// Параметры: -// ФункцияФильтрации - Строка, ОписаниеОповещения - Функция фильтрации. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции фильтрации. -// Служит для передачи дополнительных данных из прикладного кода в функцию фильтрации. -// По умолчанию содержит одно значение - Элемент. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". -// -// Примеры: -// 1: -// ПроцессорКоллекций.Фильтровать("Результат = СтрДлина(Элемент) > 1"); -// -// 2: -// Процедура МояПроцедураФильтрации(Результат, ДополнительныеПараметры) Экспорт -// Результат = СтрДлина(ДополнительныеПараметры.Элемент) > 1; -// КонецПроцедуры -// -// ФункцияФильтрации = Новый ОписаниеОповещения("МояПроцедураФильтрации", ЭтотОбъект); -// ПроцессорКоллекций.Фильтровать(ФункцияФильтрации); -// -Функция Фильтровать(Знач ФункцияФильтрации, Знач ДополнительныеПараметры = Неопределено) Экспорт - - Если ТипЗнч(ФункцияФильтрации) = Тип("Строка") Тогда - ФункцияФильтрации = СформироватьВременноеОписаниеОповещения(ФункцияФильтрации, ДополнительныеПараметры); - КонецЕсли; - ДополнитьСтруктуру(ФункцияФильтрации.ДополнительныеПараметры, ДополнительныеПараметры, Истина); - - ПоложитьЯчейкуВКонвейер("Фильтровать", ФункцияФильтрации); - Возврат ЭтотОбъект; - -КонецФункции - -// Сортировать элементы коллекции. -// Конвейерный метод. -// -// Параметры: -// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// Если параметр не передан, выполняется стандартная функция сравнения: -// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. -// По умолчанию содержит два значения - Элемент1 и Элемент2. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". -// -// Примеры: -// 1: -// ПроцессорКоллекций.Сортировать("Результат = Элемент1 > Элемент2"); -// -// 2: -// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт -// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; -// КонецПроцедуры -// -// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); -// ПроцессорКоллекций.Сортировать(ФункцияСравнения); -// -Функция Сортировать(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт - - Если ФункцияСравнения = Неопределено Тогда - ФункцияСравнения = ПроцессорыКоллекций.СтандартнаяФункцияСравнения(); - Иначе - Если ТипЗнч(ФункцияСравнения) = Тип("Строка") Тогда - ФункцияСравнения = СформироватьВременноеОписаниеОповещения(ФункцияСравнения, ДополнительныеПараметры); - КонецЕсли; - КонецЕсли; - ДополнитьСтруктуру(ФункцияСравнения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); - - ПоложитьЯчейкуВКонвейер("Сортировать", ФункцияСравнения); - Возврат ЭтотОбъект; - -КонецФункции - -// Сортировать элементы коллекции по выбранному полю. -// Конвейерный метод. -// -// Параметры: -// ИмяПоля - Строка - Имя поля элемента коллекции, по которому необходимо осуществлять сортировку. -// -// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// Если параметр не передан, выполняется стандартная функция сравнения: -// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. -// По умолчанию содержит два значения - Элемент1 и Элемент2. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". -// -// Примеры: -// 1: -// ПроцессорКоллекций.СортироватьПо("НомерСтроки", "Результат = Элемент1 > Элемент2"); -// -// 2: -// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт -// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; -// КонецПроцедуры -// -// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); -// ПроцессорКоллекций.СортироватьПо("НомерСтроки", ФункцияСравнения); -// -Функция СортироватьПо(Знач ИмяПоля, Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт - - Если ФункцияСравнения = Неопределено Тогда - ФункцияСравнения = ПроцессорыКоллекций.СтандартнаяФункцияСравнения(); - Иначе - Если ТипЗнч(ФункцияСравнения) = Тип("Строка") Тогда - ФункцияСравнения = СформироватьВременноеОписаниеОповещения(ФункцияСравнения, ДополнительныеПараметры); - КонецЕсли; - КонецЕсли; - ДополнитьСтруктуру(ФункцияСравнения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); - - ФункцияСравнения.ДополнительныеПараметры.Вставить("ИмяПоля", ИмяПоля); - - ПоложитьЯчейкуВКонвейер("СортироватьПо", ФункцияСравнения); - Возврат ЭтотОбъект; - -КонецФункции - -// Терминальные методы - -// Получить первый элемент. -// Терминальный метод. -// -// Возвращаемое значение: -// Произвольный - Первый элемент из коллекции. Если коллекция пуста, возвращает Неопределено. -// -Функция ПолучитьПервый() Экспорт - Лог.Отладка("ПолучитьПервый"); - - ПройтиКонвейер(); - - Результат = Неопределено; - Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); - Для Каждого Элемент Из Коллекция Цикл - Результат = Элемент; - Прервать; - КонецЦикла; - - Возврат Результат; - -КонецФункции - -// Получить коллекцию в виде массива. -// Терминальный метод. -// -// Возвращаемое значение: -// Массив - Массив элементов коллекции. -// -Функция ВМассив() Экспорт - - Лог.Отладка("ВМассив"); - - ПройтиКонвейер(); - - Результат = Новый Массив; - Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); - Для Каждого Элемент Из Коллекция Цикл - Результат.Добавить(Элемент); - КонецЦикла; - - Возврат Результат; - -КонецФункции - -// Получить коллекцию в виде строки. -// Терминальный метод. -// -// Параметры: -// РазделительСтрок - Строка - Используемый разделитель между элементами при конкатенации строк. -// -// Возвращаемое значение: -// Строка - Элементы коллекции, соединенные в строку методом конкатенации. -// -Функция ВСтроку(РазделительСтрок = "") Экспорт - Лог.Отладка("ВСтроку"); - - ПройтиКонвейер(); - - Результат = ""; - Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); - Для Каждого Элемент Из Коллекция Цикл - Результат = Результат + Элемент + РазделительСтрок; - КонецЦикла; - - Если НЕ РазделительСтрок = "" И СтрДлина(Результат) > 0 Тогда - СтроковыеФункции.УдалитьПоследнийСимволВСтроке(Результат, СтрДлина(РазделительСтрок)); - КонецЕсли; - - Возврат Результат; -КонецФункции - -// Получить количество элементов коллекции. -// Терминальный метод. -// -// Возвращаемое значение: -// Число - Количество элементов коллекции. -// -Функция Количество() Экспорт - - Лог.Отладка("Количество"); - - ПройтиКонвейер(); - - Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); - Результат = Коллекция.Количество(); - - Возврат Результат; - -КонецФункции - -// Обработать каждый элемент коллекции и завершить работу процессора. -// Терминальный метод. -// -// Параметры: -// ФункцияОбработки - Строка, ОписаниеОповещения - функция обработки. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Произвольный - Игнорируется. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая обработчику. -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции обработки. -// Служит для передачи дополнительных данных из прикладного кода в функцию обработки. -// По умолчанию содержит одно значение - Элемент. -// -// Примеры: -// 1: -// ПроцессорКоллекций.ДляКаждого("Сообщить(Элемент);"); -// -// 2: -// ПроцессорКоллекций.ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); -// -// 3: -// Процедура МояФункцияОбработки(Результат, ДополнительныеПараметры) Экспорт -// Сообщить(ДополнительныеПараметры.Элемент); -// КонецПроцедуры -// -// ФункцияОбработки = Новый ОписаниеОповещения("МояФункцияОбработки", ЭтотОбъект); -// ПроцессорКоллекций.ДляКаждого(ФункцияОбработки); -// -Процедура ДляКаждого(Знач ФункцияОбработки, Знач ДополнительныеПараметры = Неопределено) Экспорт - - Лог.Отладка("ДляКаждого"); - - Если ТипЗнч(ФункцияОбработки) = Тип("Строка") Тогда - ФункцияОбработки = СформироватьВременноеОписаниеОповещения(ФункцияОбработки, ДополнительныеПараметры); - КонецЕсли; - ДополнитьСтруктуру(ФункцияОбработки.ДополнительныеПараметры, ДополнительныеПараметры, Истина); - - ПройтиКонвейер(); - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Обработчик", ФункцияОбработки); - - ПроцессорКоллекцийСлужебный.ВыполнитьОбработать(Неопределено, ДополнительныеПараметры); - - ОчиститьВременныеОписанияОповещений(); - -КонецПроцедуры - -// Получить минимальный элемент. -// Терминальный метод. -// -// Параметры: -// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// Если параметр не передан, выполняется стандартная функция сравнения: -// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. -// По умолчанию содержит два значения - Элемент1 и Элемент2. -// -// Возвращаемое значение: -// Произвольный - минимальный элемент коллекции. -// -// Примеры: -// 1: -// ПроцессорКоллекций.Минимум(); -// -// 2: -// ПроцессорКоллекций.Минимум("Результат = Элемент1 > Элемент2"); -// -// 3: -// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт -// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; -// КонецПроцедуры -// -// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); -// ПроцессорКоллекций.Минимум(ФункцияСравнения); -// -Функция Минимум(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт - - Лог.Отладка("Минимум"); - - Если ФункцияСравнения = Неопределено Тогда - ФункцияСравнения = ПроцессорыКоллекций.СтандартнаяФункцияСравнения(); - Иначе - Если ТипЗнч(ФункцияСравнения) = Тип("Строка") Тогда - ФункцияСравнения = СформироватьВременноеОписаниеОповещения(ФункцияСравнения, ДополнительныеПараметры); - КонецЕсли; - КонецЕсли; - ДополнитьСтруктуру(ФункцияСравнения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); - - ПройтиКонвейер(); - - Результат = Новый Массив; - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Обработчик", ФункцияСравнения); - - ПроцессорКоллекцийСлужебный.ВыполнитьСортировать(Результат, ДополнительныеПараметры); - - ОчиститьВременныеОписанияОповещений(); - - Если Результат.Количество() = 0 Тогда - Возврат Неопределено; - Иначе - Возврат Результат[0]; - КонецЕсли; - -КонецФункции - -// Получить максимальный элемент. -// Терминальный метод. -// -// Параметры: -// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// Если параметр не передан, выполняется стандартная функция сравнения: -// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. -// По умолчанию содержит два значения - Элемент1 и Элемент2. -// -// Возвращаемое значение: -// Произвольный - максимальный элемент коллекции. -// -// Примеры: -// 1: -// ПроцессорКоллекций.Максимум(); -// -// 2: -// ПроцессорКоллекций.Максимум("Результат = Элемент1 > Элемент2"); -// -// 3: -// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт -// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; -// КонецПроцедуры -// -// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); -// ПроцессорКоллекций.Максимум(ФункцияСравнения); -// -Функция Максимум(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт - - Лог.Отладка("Максимум"); - - Если ФункцияСравнения = Неопределено Тогда - ФункцияСравнения = ПроцессорыКоллекций.СтандартнаяФункцияСравнения(); - Иначе - Если ТипЗнч(ФункцияСравнения) = Тип("Строка") Тогда - ФункцияСравнения = СформироватьВременноеОписаниеОповещения(ФункцияСравнения, ДополнительныеПараметры); - КонецЕсли; - КонецЕсли; - ДополнитьСтруктуру(ФункцияСравнения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); - - ПройтиКонвейер(); - - Результат = Новый Массив; - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Обработчик", ФункцияСравнения); - - ПроцессорКоллекцийСлужебный.ВыполнитьСортировать(Результат, ДополнительныеПараметры); - - ОчиститьВременныеОписанияОповещений(); - - Если Результат.Количество() = 0 Тогда - Возврат Неопределено; - Иначе - Возврат Результат[Результат.Количество() - 1]; - КонецЕсли; - -КонецФункции - -// Выполнить агрегатную функцию над элементами коллекции. -// Терминальный метод. -// -// Параметры: -// ФункцияСокращения - Строка, ОписаниеОповещения - Функция сокращения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Произвольный - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// -// НачальноеЗначение - Произвольный - начальное значение, передаваемое в функцию сокращения в параметр "Результат" -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сокращения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сокращения. -// По умолчанию содержит одно значение - Элемент. -// -// Возвращаемое значение: -// Произвольный - результат работы агрегатной функции. -// -// Примеры: -// 2: -// ПроцессорКоллекций.Сократить("Результат = Результат + Элемент"); -// -// 2: -// Процедура МояФункцияСокращения(Результат, ДополнительныеПараметры) Экспорт -// Элемент = ДополнительныеПараметры.Элемент; -// Результат = Результат + Элемент; -// КонецПроцедуры -// -// ФункцияСокращения = Новый ОписаниеОповещения("МояФункцияСокращения", ЭтотОбъект); -// ПроцессорКоллекций.Сократить(ФункцияСокращения); -// -Функция Сократить(Знач ФункцияСокращения, - Знач НачальноеЗначение = Неопределено, - Знач ДополнительныеПараметры = Неопределено) Экспорт - - Лог.Отладка("Сократить"); - - Если ТипЗнч(ФункцияСокращения) = Тип("Строка") Тогда - ФункцияСокращения = СформироватьВременноеОписаниеОповещения(ФункцияСокращения, ДополнительныеПараметры); - КонецЕсли; - ДополнитьСтруктуру(ФункцияСокращения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); - - ПройтиКонвейер(); - - Результат = НачальноеЗначение; - Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); - Для Каждого Элемент Из Коллекция Цикл - ФункцияСокращения.ДополнительныеПараметры.Вставить("Элемент", Элемент); - ОписанияОповещений.ВыполнитьОбработкуОповещения(ФункцияСокращения, Результат); - КонецЦикла; - - ОчиститьВременныеОписанияОповещений(); - - Возврат Результат; - -КонецФункции - -// Получить коллекцию в виде объекта заданного типа. -// Терминальный метод. -// -// Параметры: -// ТипРезультата - Тип - Тип, в котором необходимо вернуть коллекцию. -// -// Возвращаемое значение: -// Произвольный - Коллекция в виде объекта нужного типа. -// -Функция Получить(ТипРезультата) Экспорт - - Лог.Отладка("Получить %1", ТипРезультата); - - ПройтиКонвейер(); - - Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); - КэшКолонок = ПроцессорКоллекцийСлужебный.ПолучитьКэшКолонок(); - - Результат = Новый(ТипРезультата); - - РезультатСодержитКолонки = Истина; - Попытка - Колонки = Результат.Колонки; - Исключение - РезультатСодержитКолонки = Ложь; - КонецПопытки; - - Если РезультатСодержитКолонки Тогда - Для Каждого Колонка Из КэшКолонок Цикл - Результат.Колонки.Добавить( - Колонка.Имя, - Колонка.ТипЗначения, - Колонка.Заголовок, - Колонка.Ширина - ); - КонецЦикла; - - Если Результат.Колонки.Количество() = 0 Тогда - Результат.Колонки.Добавить("Значение"); - КонецЕсли; - КонецЕсли; - - ЭлементСодержитКолонки = КэшКолонок.Количество() > 0; - Лог.Отладка("Результат содержит колонки %1", РезультатСодержитКолонки); - Лог.Отладка("Элемент содержит колонки %1", ЭлементСодержитКолонки); - Для Каждого ЭлементКоллекции Из Коллекция Цикл - Если РезультатСодержитКолонки И ЭлементСодержитКолонки Тогда - ЗаполнитьЗначенияСвойств(Результат.Добавить(), ЭлементКоллекции); - ИначеЕсли РезультатСодержитКолонки Тогда - НоваяСтрока = Результат.Добавить(); - НоваяСтрока.Значение = ЭлементКоллекции; - Иначе - Результат.Добавить(ЭлементКоллекции); - КонецЕсли; - КонецЦикла; - - Возврат Результат; - -КонецФункции - -// Проверить, что хотя бы один элемент коллекции удовлетворяет условию в функции сравнения. -// Терминальный метод. -// -// Параметры: -// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. -// По умолчанию содержит одно значение - Элемент. -// -// Возвращаемое значение: -// Булево - Истина, если минимум один из элементов коллекции удовлетворяет условию Функции сравнения. -// В обратном случае возвращает Ложь. -// Если коллекция пустая, возвращает Ложь. -// -Функция ЛюбойСоответствует(Знач ФункцияСравнения, Знач ДополнительныеПараметры = Неопределено) Экспорт - - Лог.Отладка("ЛюбойСоответствует"); - - Если ТипЗнч(ФункцияСравнения) = Тип("Строка") Тогда - ФункцияСравнения = СформироватьВременноеОписаниеОповещения(ФункцияСравнения, ДополнительныеПараметры); - КонецЕсли; - ДополнитьСтруктуру(ФункцияСравнения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); - - ПройтиКонвейер(); - - Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); - Результат = Ложь; - - ФункцияСравнения.ДополнительныеПараметры.Вставить("Элемент"); - - Для Каждого Элемент Из Коллекция Цикл - ФункцияСравнения.ДополнительныеПараметры.Элемент = Элемент; - РезультатФильтрации = Ложь; - ОписанияОповещений.ВыполнитьОбработкуОповещения(ФункцияСравнения, РезультатФильтрации); - - Если РезультатФильтрации Тогда - Результат = Истина; - Прервать; - КонецЕсли; - КонецЦикла; - - ОчиститьВременныеОписанияОповещений(); - - Возврат Результат; - -КонецФункции - -// Проверить, что все элементы коллекции удовлетворяют условию в функции сравнения. -// Терминальный метод. -// -// Параметры: -// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. -// По умолчанию содержит одно значение - Элемент. -// -// Возвращаемое значение: -// Булево - Истина, если все элементы коллекции удовлетворяют условию Функции сравнения. -// В обратном случае возвращает Ложь. -// Если коллекция пустая, возвращает Истина. -// -Функция ВсеСоответствуют(Знач ФункцияСравнения, Знач ДополнительныеПараметры = Неопределено) Экспорт - - Лог.Отладка("ВсеСоответствуют"); - - Если ТипЗнч(ФункцияСравнения) = Тип("Строка") Тогда - ФункцияСравнения = СформироватьВременноеОписаниеОповещения(ФункцияСравнения, ДополнительныеПараметры); - КонецЕсли; - ДополнитьСтруктуру(ФункцияСравнения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); - - ПройтиКонвейер(); - - Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); - Результат = Истина; - - ФункцияСравнения.ДополнительныеПараметры.Вставить("Элемент"); - - Для Каждого Элемент Из Коллекция Цикл - ФункцияСравнения.ДополнительныеПараметры.Элемент = Элемент; - РезультатФильтрации = Ложь; - ОписанияОповещений.ВыполнитьОбработкуОповещения(ФункцияСравнения, РезультатФильтрации); - - Если НЕ РезультатФильтрации Тогда - Результат = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - - ОчиститьВременныеОписанияОповещений(); - - Возврат Результат; - -КонецФункции - -// Проверить, что все элементы коллекции не удовлетворяют условию в функции сравнения. -// Терминальный метод. -// -// Параметры: -// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. -// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные -// "Результат", "ДополнительныеПараметры", "Элемент". -// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра -// (имена произвольные): -// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. -// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. -// -// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. -// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. -// По умолчанию содержит одно значение - Элемент. -// -// Возвращаемое значение: -// Булево - Истина, если все элементы коллекции не удовлетворяют условию Функции сравнения. -// В обратном случае возвращает Ложь. -// Если коллекция пустая, возвращает Истина. -// -Функция ВсеНеСоответствуют(Знач ФункцияСравнения, Знач ДополнительныеПараметры = Неопределено) Экспорт - - Лог.Отладка("ВсеНеСоответствуют"); - - Если ТипЗнч(ФункцияСравнения) = Тип("Строка") Тогда - ФункцияСравнения = СформироватьВременноеОписаниеОповещения(ФункцияСравнения, ДополнительныеПараметры); - КонецЕсли; - ДополнитьСтруктуру(ФункцияСравнения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); - - ПройтиКонвейер(); - - Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); - Результат = Истина; - - ФункцияСравнения.ДополнительныеПараметры.Вставить("Элемент"); - - Для Каждого Элемент Из Коллекция Цикл - ФункцияСравнения.ДополнительныеПараметры.Элемент = Элемент; - РезультатФильтрации = Ложь; - ОписанияОповещений.ВыполнитьОбработкуОповещения(ФункцияСравнения, РезультатФильтрации); - - Если РезультатФильтрации Тогда - Результат = Ложь; - Прервать; - КонецЕсли; - КонецЦикла; - - ОчиститьВременныеОписанияОповещений(); - - Возврат Результат; - -КонецФункции - -// Служебные процедуры и функции - -Процедура ПоложитьЯчейкуВКонвейер(ИмяОперации, - ВходящееОписаниеОповещения = Неопределено, - ДополнительныеПараметры = Неопределено) - - Сообщение = ИмяОперации; - Если ВходящееОписаниеОповещения <> Неопределено Тогда - Сообщение = Сообщение + " " + ВходящееОписаниеОповещения.ИмяПроцедуры; - КонецЕсли; - Лог.Отладка(Сообщение); - - Если ДополнительныеПараметры = Неопределено Тогда - ДополнительныеПараметры = Новый Структура; - КонецЕсли; - - Если ВходящееОписаниеОповещения <> Неопределено Тогда - ДополнительныеПараметры.Вставить("Обработчик", ВходящееОписаниеОповещения); - КонецЕсли; - - Ячейка = Новый ОписаниеОповещения("Выполнить" + ИмяОперации, ПроцессорКоллекцийСлужебный, ДополнительныеПараметры); - - Конвейер.Добавить(Ячейка); - -КонецПроцедуры - -Процедура ПройтиКонвейер() - - Лог.Отладка("Прохожу по конвейеру"); - - Результат = Новый Массив; - Для Каждого Ячейка Из Конвейер Цикл - Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); - - Лог.Отладка("Выполняю ячейку конвейера %1", Ячейка.ИмяПроцедуры); - Лог.Отладка("Размер коллекции %1", Коллекция.Количество()); - - ОписанияОповещений.ВыполнитьОбработкуОповещения(Ячейка, Результат); - ПроцессорКоллекцийСлужебный.УстановитьКоллекцию(Результат, Ложь); - КонецЦикла; - - Конвейер.Очистить(); - ОчиститьВременныеОписанияОповещений(); - -КонецПроцедуры - -Функция СформироватьВременноеОписаниеОповещения(ПользовательскоеВыражение, ДополнительныеПараметры) - - Если ДополнительныеПараметры = Неопределено Тогда - ДополнительныеПараметры = Новый Структура; - КонецЕсли; - - ТекстИзолированногоКласса = СтрЗаменить( - ТекстШаблонаИзолированногоКласса, - "А = 0;", - ПользовательскоеВыражение - ); - - Если Отладка = Истина Тогда - ИмяВременногоФайла = ВременныеФайлы.НовоеИмяФайла("os"); - ЗаписьТекста = Новый ЗаписьТекста(); - ЗаписьТекста.Открыть(ИмяВременногоФайла); - ЗаписьТекста.Записать(ТекстИзолированногоКласса); - ЗаписьТекста.Закрыть(); - ВременныйСценарий = ЗагрузитьСценарий(ИмяВременногоФайла); - Иначе - ВременныйСценарий = ЗагрузитьСценарийИзСтроки(ТекстИзолированногоКласса); - КонецЕсли; - - ОписаниеОповещения = Новый ОписаниеОповещения( - "ОбработкаОповещения", - ВременныйСценарий, - ДополнительныеПараметры - ); - - ВременныеОписанияОповещений.Добавить(ВременныйСценарий); - ВременныеОписанияОповещений.Добавить(ОписаниеОповещения); - - Возврат ОписаниеОповещения; - -КонецФункции - -Процедура ОчиститьВременныеОписанияОповещений() - Для Каждого ВременныйСценарий Из ВременныеОписанияОповещений Цикл - ОсвободитьОбъект(ВременныйСценарий); - КонецЦикла; - ВременныеОписанияОповещений = Новый Массив; -КонецПроцедуры - -Процедура Инициализация() - Конвейер = Новый Массив; - ВременныеОписанияОповещений = Новый Массив; - Лог = Логирование.ПолучитьЛог("oscript.lib.stream"); - - ПроцессорКоллекцийСлужебный = Новый ПроцессорКоллекцийСлужебный(); - - ТекстШаблонаИзолированногоКласса = - "Процедура ОбработкаОповещения(Результат, ДополнительныеПараметры) Экспорт - | - | Элемент = Неопределено; - | Элемент1 = Неопределено; - | Элемент2 = Неопределено; - | - | ДополнительныеПараметры.Свойство(""Элемент"", Элемент); - | ДополнительныеПараметры.Свойство(""Элемент1"", Элемент1); - | ДополнительныеПараметры.Свойство(""Элемент2"", Элемент2); - | - | А = 0; - | - |КонецПроцедуры"; - -КонецПроцедуры - -// Дополняет структуру значениями из другой структуры. -// -// Параметры: -// Приемник - Структура - коллекция, в которую будут добавляться новые значения. -// Источник - Структура - коллекция, из которой будут считываться пары Ключ и Значение для заполнения. -// Заменять - Булево, Неопределено - что делать в местах пересечения ключей источника и приемника: -// - Истина - заменять значения приемника (самый быстрый способ), -// - Ложь - не заменять значения приемника (пропускать), -// - Неопределено - значение по умолчанию. Бросать исключение. -// -// Функция скопирована из "Библиотеки Стандартных Подсистем" на следующих условиях: -// -// Copyright (c) 2018, ООО 1С-Софт -// Все права защищены. Эта программа и сопроводительные материалы предоставляются -// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) -// Текст лицензии доступен по ссылке: -// https://creativecommons.org/licenses/by/4.0/legalcode -// -// В функцию внесены следующие изменения: -// - использование СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку заменено на СтрШаблон; -// - добавлена инициализиация структур приемника и источника -// -Процедура ДополнитьСтруктуру(Приемник, Источник, Заменять = Неопределено) Экспорт - - Если Приемник = Неопределено Тогда - Приемник = Новый Структура; - КонецЕсли; - - Если Источник = Неопределено Тогда - Источник = Новый Структура; - КонецЕсли; - - Для Каждого Элемент Из Источник Цикл - Если Заменять <> Истина И Приемник.Свойство(Элемент.Ключ) Тогда - Если Заменять = Ложь Тогда - Продолжить; - Иначе - ВызватьИсключение СтрШаблон(НСтр("ru = 'Пересечение ключей источника и приемника: ""%1"".'"), Элемент.Ключ); - КонецЕсли; - КонецЕсли; - Приемник.Вставить(Элемент.Ключ, Элемент.Значение); - КонецЦикла; - -КонецПроцедуры - -Инициализация(); +#Использовать notify +#Использовать logos +#Использовать strings +#Использовать tempfiles + +#Использовать "../internal" + +Перем Лог; + +Перем Конвейер; +Перем ПроцессорКоллекцийСлужебный; +Перем ВременныеОписанияОповещений; +Перем ТекстШаблонаИзолированногоКласса; + +// Флаг поддержки возможности отладки добавленных методов +Перем Отладка; + +Процедура ПриСозданииОбъекта() + Отладка = ЗначениеЗаполнено(ПолучитьПеременнуюСреды("OSCRIPT_FLUENT_DEBUG")); +КонецПроцедуры + +// Общее API + +// Устанавливает коллекцию для обработки Процессора коллекций. +// +// Параметры: +// НоваяКоллекция - Массив, ТаблицаЗначений, ДеревоЗначений - Коллекция, устанавливаемая в процессор. +// +Процедура УстановитьКоллекцию(НоваяКоллекция) Экспорт + ПроцессорКоллекцийСлужебный.УстановитьКоллекцию(НоваяКоллекция); + Лог.Отладка("Установлена коллекция размером %1", ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию().Количество()); +КонецПроцедуры + +// Включает возможность отладки. Достигается сохранением текста модуля во временный файл. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Ссылка на текущий инстанс ПроцессорКоллекций +// +Функция Отладка(Включена = Истина) Экспорт + + Отладка = Включена; + + Возврат ЭтотОбъект; + +КонецФункции + +// Конвейерные методы + +// Получить первые N элементов. +// Конвейерный метод. +// +// Параметры: +// Количество - Число - Число отбираемых элементов. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". +// +Функция Первые(Количество) Экспорт + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Количество", Количество); + + ПоложитьЯчейкуВКонвейер("Первые", , ДополнительныеПараметры); + Возврат ЭтотОбъект; + +КонецФункции + +// Пропустить первые N элементов. +// Конвейерный метод. +// +// Параметры: +// Количество - Число - Число пропускаемых элементов. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". +// +Функция Пропустить(Количество) Экспорт + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Количество", Количество); + + ПоложитьЯчейкуВКонвейер("Пропустить", , ДополнительныеПараметры); + Возврат ЭтотОбъект; + +КонецФункции + +// Выбрать различные элементы. +// Конвейерный метод. +// +// Параметры: +// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// Если параметр не передан, выполняется стандартная функция сравнения: +// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. +// По умолчанию содержит два значения - Элемент1 и Элемент2. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". +// +// Примеры: +// 1: +// ПроцессорКоллекций.Различные("Результат = Элемент1 > Элемент2"); +// +// 2: +// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт +// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; +// КонецПроцедуры +// +// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); +// ПроцессорКоллекций.Различные(ФункцияСравнения); +// +Функция Различные(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт + + Если ФункцияСравнения = Неопределено Тогда + ФункцияСравнения = ПроцессорыКоллекций.СтандартнаяФункцияСравнения(); + Иначе + Если ТипЗнч(ФункцияСравнения) = Тип("Строка") Тогда + ФункцияСравнения = СформироватьВременноеОписаниеОповещения(ФункцияСравнения, ДополнительныеПараметры); + КонецЕсли; + КонецЕсли; + ДополнитьСтруктуру(ФункцияСравнения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); + + ПоложитьЯчейкуВКонвейер("Различные", ФункцияСравнения); + Возврат ЭтотОбъект; + +КонецФункции + +// Обработать каждый элемент коллекции. +// Конвейерный метод. +// +// Параметры: +// ФункцияОбработки - Строка, ОписаниеОповещения - функция обработки. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Произвольный - Переменная, в которой возвращается значение работы обработчика. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая обработчику. +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции обработки. +// Служит для передачи дополнительных данных из прикладного кода в функцию обработки. +// По умолчанию содержит одно значение - Элемент. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". +// +// Примеры: +// 1: +// ПроцессорКоллекций.Обработать("Результат = Элемент + 1;"); +// +// 2: +// Процедура МояФункцияОбработки(Результат, ДополнительныеПараметры) Экспорт +// Результат = ДополнительныеПараметры.Элемент + 1; +// КонецПроцедуры +// +// ФункцияОбработки = Новый ОписаниеОповещения("МояФункцияОбработки", ЭтотОбъект); +// ПроцессорКоллекций.Обработать(ФункцияОбработки); +// +Функция Обработать(Знач ФункцияОбработки, Знач ДополнительныеПараметры = Неопределено) Экспорт + + Если ТипЗнч(ФункцияОбработки) = Тип("Строка") Тогда + ФункцияОбработки = СформироватьВременноеОписаниеОповещения(ФункцияОбработки, ДополнительныеПараметры); + КонецЕсли; + ДополнитьСтруктуру(ФункцияОбработки.ДополнительныеПараметры, ДополнительныеПараметры, Истина); + + ПоложитьЯчейкуВКонвейер("Обработать", ФункцияОбработки); + Возврат ЭтотОбъект; + +КонецФункции + +// Развернуть каждый элемент коллекции в процессор коллекций. +// Позволяет расширить имеющуюся коллекцию. +// Например, разворачивание массива массивов сделает новый массив, содержащий все элементы всех массивов. +// Конвейерный метод. +// +// Параметры: +// ФункцияРазворачивания - Строка, ОписаниеОповещения - функция разворачивания. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// * Результат - ПроцессорКоллекций - Переменная, в которую должен быть +// помещен результат работы функции в виде ПроцессораКоллекций. +// * ДополнительныеПараметры - Структура - Структура параметров, передаваемая функции разворачивания. +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции разворачивания. +// Служит для передачи дополнительных данных из прикладного кода в функцию разворачивания. +// По умолчанию содержит одно значение - Элемент. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". +// +// Примеры: +// 1: +// ПроцессорКоллекций.Развернуть("Результат = ПроцессорыКоллекций.ИзСтроки(Элемент);"); +// +// 2: +// Процедура МояФункцияРазворачивания(Результат, ДополнительныеПараметры) Экспорт +// Результат = ПроцессорыКоллекций.ИзСтроки(ДополнительныеПараметры.Элемент); +// КонецПроцедуры +// +// ФункцияРазворачивания = Новый ОписаниеОповещения("МояФункцияРазворачивания", ЭтотОбъект); +// ПроцессорКоллекций.Развернуть(ФункцияРазворачивания); +// +Функция Развернуть(Знач ФункцияРазворачивания, Знач ДополнительныеПараметры = Неопределено) Экспорт + + Если ТипЗнч(ФункцияРазворачивания) = Тип("Строка") Тогда + ФункцияРазворачивания = СформироватьВременноеОписаниеОповещения(ФункцияРазворачивания, ДополнительныеПараметры); + КонецЕсли; + ДополнитьСтруктуру(ФункцияРазворачивания.ДополнительныеПараметры, ДополнительныеПараметры, Истина); + + ПоложитьЯчейкуВКонвейер("Развернуть", ФункцияРазворачивания); + Возврат ЭтотОбъект; + +КонецФункции + +// Фильтровать коллекцию по условию. +// Конвейерный метод. +// +// Параметры: +// ФункцияФильтрации - Строка, ОписаниеОповещения - Функция фильтрации. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции фильтрации. +// Служит для передачи дополнительных данных из прикладного кода в функцию фильтрации. +// По умолчанию содержит одно значение - Элемент. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". +// +// Примеры: +// 1: +// ПроцессорКоллекций.Фильтровать("Результат = СтрДлина(Элемент) > 1"); +// +// 2: +// Процедура МояПроцедураФильтрации(Результат, ДополнительныеПараметры) Экспорт +// Результат = СтрДлина(ДополнительныеПараметры.Элемент) > 1; +// КонецПроцедуры +// +// ФункцияФильтрации = Новый ОписаниеОповещения("МояПроцедураФильтрации", ЭтотОбъект); +// ПроцессорКоллекций.Фильтровать(ФункцияФильтрации); +// +Функция Фильтровать(Знач ФункцияФильтрации, Знач ДополнительныеПараметры = Неопределено) Экспорт + + Если ТипЗнч(ФункцияФильтрации) = Тип("Строка") Тогда + ФункцияФильтрации = СформироватьВременноеОписаниеОповещения(ФункцияФильтрации, ДополнительныеПараметры); + КонецЕсли; + ДополнитьСтруктуру(ФункцияФильтрации.ДополнительныеПараметры, ДополнительныеПараметры, Истина); + + ПоложитьЯчейкуВКонвейер("Фильтровать", ФункцияФильтрации); + Возврат ЭтотОбъект; + +КонецФункции + +// Сортировать элементы коллекции. +// Конвейерный метод. +// +// Параметры: +// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// Если параметр не передан, выполняется стандартная функция сравнения: +// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. +// По умолчанию содержит два значения - Элемент1 и Элемент2. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". +// +// Примеры: +// 1: +// ПроцессорКоллекций.Сортировать("Результат = Элемент1 > Элемент2"); +// +// 2: +// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт +// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; +// КонецПроцедуры +// +// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); +// ПроцессорКоллекций.Сортировать(ФункцияСравнения); +// +Функция Сортировать(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт + + Если ФункцияСравнения = Неопределено Тогда + ФункцияСравнения = ПроцессорыКоллекций.СтандартнаяФункцияСравнения(); + Иначе + Если ТипЗнч(ФункцияСравнения) = Тип("Строка") Тогда + ФункцияСравнения = СформироватьВременноеОписаниеОповещения(ФункцияСравнения, ДополнительныеПараметры); + КонецЕсли; + КонецЕсли; + ДополнитьСтруктуру(ФункцияСравнения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); + + ПоложитьЯчейкуВКонвейер("Сортировать", ФункцияСравнения); + Возврат ЭтотОбъект; + +КонецФункции + +// Сортировать элементы коллекции по выбранному полю. +// Конвейерный метод. +// +// Параметры: +// ИмяПоля - Строка - Имя поля элемента коллекции, по которому необходимо осуществлять сортировку. +// +// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// Если параметр не передан, выполняется стандартная функция сравнения: +// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. +// По умолчанию содержит два значения - Элемент1 и Элемент2. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций". +// +// Примеры: +// 1: +// ПроцессорКоллекций.СортироватьПо("НомерСтроки", "Результат = Элемент1 > Элемент2"); +// +// 2: +// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт +// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; +// КонецПроцедуры +// +// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); +// ПроцессорКоллекций.СортироватьПо("НомерСтроки", ФункцияСравнения); +// +Функция СортироватьПо(Знач ИмяПоля, Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт + + Если ФункцияСравнения = Неопределено Тогда + ФункцияСравнения = ПроцессорыКоллекций.СтандартнаяФункцияСравнения(); + Иначе + Если ТипЗнч(ФункцияСравнения) = Тип("Строка") Тогда + ФункцияСравнения = СформироватьВременноеОписаниеОповещения(ФункцияСравнения, ДополнительныеПараметры); + КонецЕсли; + КонецЕсли; + ДополнитьСтруктуру(ФункцияСравнения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); + + ФункцияСравнения.ДополнительныеПараметры.Вставить("ИмяПоля", ИмяПоля); + + ПоложитьЯчейкуВКонвейер("СортироватьПо", ФункцияСравнения); + Возврат ЭтотОбъект; + +КонецФункции + +// Терминальные методы + +// Получить первый элемент. +// Терминальный метод. +// +// Возвращаемое значение: +// Произвольный - Первый элемент из коллекции. Если коллекция пуста, возвращает Неопределено. +// +Функция ПолучитьПервый() Экспорт + Лог.Отладка("ПолучитьПервый"); + + ПройтиКонвейер(); + + Результат = Неопределено; + Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); + Для Каждого Элемент Из Коллекция Цикл + Результат = Элемент; + Прервать; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Получить коллекцию в виде массива. +// Терминальный метод. +// +// Возвращаемое значение: +// Массив - Массив элементов коллекции. +// +Функция ВМассив() Экспорт + + Лог.Отладка("ВМассив"); + + ПройтиКонвейер(); + + Результат = Новый Массив; + Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); + Для Каждого Элемент Из Коллекция Цикл + Результат.Добавить(Элемент); + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Получить коллекцию в виде строки. +// Терминальный метод. +// +// Параметры: +// РазделительСтрок - Строка - Используемый разделитель между элементами при конкатенации строк. +// +// Возвращаемое значение: +// Строка - Элементы коллекции, соединенные в строку методом конкатенации. +// +Функция ВСтроку(РазделительСтрок = "") Экспорт + Лог.Отладка("ВСтроку"); + + ПройтиКонвейер(); + + Результат = ""; + Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); + Для Каждого Элемент Из Коллекция Цикл + Результат = Результат + Элемент + РазделительСтрок; + КонецЦикла; + + Если НЕ РазделительСтрок = "" И СтрДлина(Результат) > 0 Тогда + СтроковыеФункции.УдалитьПоследнийСимволВСтроке(Результат, СтрДлина(РазделительСтрок)); + КонецЕсли; + + Возврат Результат; +КонецФункции + +// Получить количество элементов коллекции. +// Терминальный метод. +// +// Возвращаемое значение: +// Число - Количество элементов коллекции. +// +Функция Количество() Экспорт + + Лог.Отладка("Количество"); + + ПройтиКонвейер(); + + Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); + Результат = Коллекция.Количество(); + + Возврат Результат; + +КонецФункции + +// Обработать каждый элемент коллекции и завершить работу процессора. +// Терминальный метод. +// +// Параметры: +// ФункцияОбработки - Строка, ОписаниеОповещения - функция обработки. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Произвольный - Игнорируется. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая обработчику. +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции обработки. +// Служит для передачи дополнительных данных из прикладного кода в функцию обработки. +// По умолчанию содержит одно значение - Элемент. +// +// Примеры: +// 1: +// ПроцессорКоллекций.ДляКаждого("Сообщить(Элемент);"); +// +// 2: +// ПроцессорКоллекций.ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить()); +// +// 3: +// Процедура МояФункцияОбработки(Результат, ДополнительныеПараметры) Экспорт +// Сообщить(ДополнительныеПараметры.Элемент); +// КонецПроцедуры +// +// ФункцияОбработки = Новый ОписаниеОповещения("МояФункцияОбработки", ЭтотОбъект); +// ПроцессорКоллекций.ДляКаждого(ФункцияОбработки); +// +Процедура ДляКаждого(Знач ФункцияОбработки, Знач ДополнительныеПараметры = Неопределено) Экспорт + + Лог.Отладка("ДляКаждого"); + + Если ТипЗнч(ФункцияОбработки) = Тип("Строка") Тогда + ФункцияОбработки = СформироватьВременноеОписаниеОповещения(ФункцияОбработки, ДополнительныеПараметры); + КонецЕсли; + ДополнитьСтруктуру(ФункцияОбработки.ДополнительныеПараметры, ДополнительныеПараметры, Истина); + + ПройтиКонвейер(); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Обработчик", ФункцияОбработки); + + ПроцессорКоллекцийСлужебный.ВыполнитьОбработать(Неопределено, ДополнительныеПараметры); + + ОчиститьВременныеОписанияОповещений(); + +КонецПроцедуры + +// Получить минимальный элемент. +// Терминальный метод. +// +// Параметры: +// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// Если параметр не передан, выполняется стандартная функция сравнения: +// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. +// По умолчанию содержит два значения - Элемент1 и Элемент2. +// +// Возвращаемое значение: +// Произвольный - минимальный элемент коллекции. +// +// Примеры: +// 1: +// ПроцессорКоллекций.Минимум(); +// +// 2: +// ПроцессорКоллекций.Минимум("Результат = Элемент1 > Элемент2"); +// +// 3: +// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт +// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; +// КонецПроцедуры +// +// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); +// ПроцессорКоллекций.Минимум(ФункцияСравнения); +// +Функция Минимум(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт + + Лог.Отладка("Минимум"); + + Если ФункцияСравнения = Неопределено Тогда + ФункцияСравнения = ПроцессорыКоллекций.СтандартнаяФункцияСравнения(); + Иначе + Если ТипЗнч(ФункцияСравнения) = Тип("Строка") Тогда + ФункцияСравнения = СформироватьВременноеОписаниеОповещения(ФункцияСравнения, ДополнительныеПараметры); + КонецЕсли; + КонецЕсли; + ДополнитьСтруктуру(ФункцияСравнения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); + + ПройтиКонвейер(); + + Результат = Новый Массив; + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Обработчик", ФункцияСравнения); + + ПроцессорКоллекцийСлужебный.ВыполнитьСортировать(Результат, ДополнительныеПараметры); + + ОчиститьВременныеОписанияОповещений(); + + Если Результат.Количество() = 0 Тогда + Возврат Неопределено; + Иначе + Возврат Результат[0]; + КонецЕсли; + +КонецФункции + +// Получить максимальный элемент. +// Терминальный метод. +// +// Параметры: +// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент1", "Элемент2". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// Если параметр не передан, выполняется стандартная функция сравнения: +// см. ПроцессорыКоллекций.СтандартнаяФункцияСравнения() +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. +// По умолчанию содержит два значения - Элемент1 и Элемент2. +// +// Возвращаемое значение: +// Произвольный - максимальный элемент коллекции. +// +// Примеры: +// 1: +// ПроцессорКоллекций.Максимум(); +// +// 2: +// ПроцессорКоллекций.Максимум("Результат = Элемент1 > Элемент2"); +// +// 3: +// Процедура МояФункцияСравнения(Результат, ДополнительныеПараметры) Экспорт +// Результат = ДополнительныеПараметры.Элемент1 > ДополнительныеПараметры.Элемент2; +// КонецПроцедуры +// +// ФункцияСравнения = Новый ОписаниеОповещения("МояФункцияСравнения", ЭтотОбъект); +// ПроцессорКоллекций.Максимум(ФункцияСравнения); +// +Функция Максимум(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) Экспорт + + Лог.Отладка("Максимум"); + + Если ФункцияСравнения = Неопределено Тогда + ФункцияСравнения = ПроцессорыКоллекций.СтандартнаяФункцияСравнения(); + Иначе + Если ТипЗнч(ФункцияСравнения) = Тип("Строка") Тогда + ФункцияСравнения = СформироватьВременноеОписаниеОповещения(ФункцияСравнения, ДополнительныеПараметры); + КонецЕсли; + КонецЕсли; + ДополнитьСтруктуру(ФункцияСравнения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); + + ПройтиКонвейер(); + + Результат = Новый Массив; + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Обработчик", ФункцияСравнения); + + ПроцессорКоллекцийСлужебный.ВыполнитьСортировать(Результат, ДополнительныеПараметры); + + ОчиститьВременныеОписанияОповещений(); + + Если Результат.Количество() = 0 Тогда + Возврат Неопределено; + Иначе + Возврат Результат[Результат.Количество() - 1]; + КонецЕсли; + +КонецФункции + +// Выполнить агрегатную функцию над элементами коллекции. +// Терминальный метод. +// +// Параметры: +// ФункцияСокращения - Строка, ОписаниеОповещения - Функция сокращения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Произвольный - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// +// НачальноеЗначение - Произвольный - начальное значение, передаваемое в функцию сокращения в параметр "Результат" +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сокращения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сокращения. +// По умолчанию содержит одно значение - Элемент. +// +// Возвращаемое значение: +// Произвольный - результат работы агрегатной функции. +// +// Примеры: +// 2: +// ПроцессорКоллекций.Сократить("Результат = Результат + Элемент"); +// +// 2: +// Процедура МояФункцияСокращения(Результат, ДополнительныеПараметры) Экспорт +// Элемент = ДополнительныеПараметры.Элемент; +// Результат = Результат + Элемент; +// КонецПроцедуры +// +// ФункцияСокращения = Новый ОписаниеОповещения("МояФункцияСокращения", ЭтотОбъект); +// ПроцессорКоллекций.Сократить(ФункцияСокращения); +// +Функция Сократить(Знач ФункцияСокращения, + Знач НачальноеЗначение = Неопределено, + Знач ДополнительныеПараметры = Неопределено) Экспорт + + Лог.Отладка("Сократить"); + + Если ТипЗнч(ФункцияСокращения) = Тип("Строка") Тогда + ФункцияСокращения = СформироватьВременноеОписаниеОповещения(ФункцияСокращения, ДополнительныеПараметры); + КонецЕсли; + ДополнитьСтруктуру(ФункцияСокращения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); + + ПройтиКонвейер(); + + Результат = НачальноеЗначение; + Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); + Для Каждого Элемент Из Коллекция Цикл + ФункцияСокращения.ДополнительныеПараметры.Вставить("Элемент", Элемент); + ОписанияОповещений.ВыполнитьОбработкуОповещения(ФункцияСокращения, Результат); + КонецЦикла; + + ОчиститьВременныеОписанияОповещений(); + + Возврат Результат; + +КонецФункции + +// Получить коллекцию в виде объекта заданного типа. +// Терминальный метод. +// +// Параметры: +// ТипРезультата - Тип - Тип, в котором необходимо вернуть коллекцию. +// +// Возвращаемое значение: +// Произвольный - Коллекция в виде объекта нужного типа. +// +Функция Получить(ТипРезультата) Экспорт + + Лог.Отладка("Получить %1", ТипРезультата); + + ПройтиКонвейер(); + + Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); + КэшКолонок = ПроцессорКоллекцийСлужебный.ПолучитьКэшКолонок(); + + Результат = Новый(ТипРезультата); + + РезультатСодержитКолонки = Истина; + Попытка + Колонки = Результат.Колонки; + Исключение + РезультатСодержитКолонки = Ложь; + КонецПопытки; + + Если РезультатСодержитКолонки Тогда + Для Каждого Колонка Из КэшКолонок Цикл + Результат.Колонки.Добавить( + Колонка.Имя, + Колонка.ТипЗначения, + Колонка.Заголовок, + Колонка.Ширина + ); + КонецЦикла; + + Если Результат.Колонки.Количество() = 0 Тогда + Результат.Колонки.Добавить("Значение"); + КонецЕсли; + КонецЕсли; + + ЭлементСодержитКолонки = КэшКолонок.Количество() > 0; + Лог.Отладка("Результат содержит колонки %1", РезультатСодержитКолонки); + Лог.Отладка("Элемент содержит колонки %1", ЭлементСодержитКолонки); + Для Каждого ЭлементКоллекции Из Коллекция Цикл + Если РезультатСодержитКолонки И ЭлементСодержитКолонки Тогда + ЗаполнитьЗначенияСвойств(Результат.Добавить(), ЭлементКоллекции); + ИначеЕсли РезультатСодержитКолонки Тогда + НоваяСтрока = Результат.Добавить(); + НоваяСтрока.Значение = ЭлементКоллекции; + Иначе + Результат.Добавить(ЭлементКоллекции); + КонецЕсли; + КонецЦикла; + + Возврат Результат; + +КонецФункции + +// Проверить, что хотя бы один элемент коллекции удовлетворяет условию в функции сравнения. +// Терминальный метод. +// +// Параметры: +// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. +// По умолчанию содержит одно значение - Элемент. +// +// Возвращаемое значение: +// Булево - Истина, если минимум один из элементов коллекции удовлетворяет условию Функции сравнения. +// В обратном случае возвращает Ложь. +// Если коллекция пустая, возвращает Ложь. +// +Функция ЛюбойСоответствует(Знач ФункцияСравнения, Знач ДополнительныеПараметры = Неопределено) Экспорт + + Лог.Отладка("ЛюбойСоответствует"); + + Если ТипЗнч(ФункцияСравнения) = Тип("Строка") Тогда + ФункцияСравнения = СформироватьВременноеОписаниеОповещения(ФункцияСравнения, ДополнительныеПараметры); + КонецЕсли; + ДополнитьСтруктуру(ФункцияСравнения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); + + ПройтиКонвейер(); + + Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); + Результат = Ложь; + + ФункцияСравнения.ДополнительныеПараметры.Вставить("Элемент"); + + Для Каждого Элемент Из Коллекция Цикл + ФункцияСравнения.ДополнительныеПараметры.Элемент = Элемент; + РезультатФильтрации = Ложь; + ОписанияОповещений.ВыполнитьОбработкуОповещения(ФункцияСравнения, РезультатФильтрации); + + Если РезультатФильтрации Тогда + Результат = Истина; + Прервать; + КонецЕсли; + КонецЦикла; + + ОчиститьВременныеОписанияОповещений(); + + Возврат Результат; + +КонецФункции + +// Проверить, что все элементы коллекции удовлетворяют условию в функции сравнения. +// Терминальный метод. +// +// Параметры: +// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. +// По умолчанию содержит одно значение - Элемент. +// +// Возвращаемое значение: +// Булево - Истина, если все элементы коллекции удовлетворяют условию Функции сравнения. +// В обратном случае возвращает Ложь. +// Если коллекция пустая, возвращает Истина. +// +Функция ВсеСоответствуют(Знач ФункцияСравнения, Знач ДополнительныеПараметры = Неопределено) Экспорт + + Лог.Отладка("ВсеСоответствуют"); + + Если ТипЗнч(ФункцияСравнения) = Тип("Строка") Тогда + ФункцияСравнения = СформироватьВременноеОписаниеОповещения(ФункцияСравнения, ДополнительныеПараметры); + КонецЕсли; + ДополнитьСтруктуру(ФункцияСравнения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); + + ПройтиКонвейер(); + + Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); + Результат = Истина; + + ФункцияСравнения.ДополнительныеПараметры.Вставить("Элемент"); + + Для Каждого Элемент Из Коллекция Цикл + ФункцияСравнения.ДополнительныеПараметры.Элемент = Элемент; + РезультатФильтрации = Ложь; + ОписанияОповещений.ВыполнитьОбработкуОповещения(ФункцияСравнения, РезультатФильтрации); + + Если НЕ РезультатФильтрации Тогда + Результат = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + + ОчиститьВременныеОписанияОповещений(); + + Возврат Результат; + +КонецФункции + +// Проверить, что все элементы коллекции не удовлетворяют условию в функции сравнения. +// Терминальный метод. +// +// Параметры: +// ФункцияСравнения - Строка, ОписаниеОповещения - Функция сравнения. +// В случае передачи Строки формируется служебное описание оповещения, в контексте которого заданы переменные +// "Результат", "ДополнительныеПараметры", "Элемент". +// В случае передачи ОписанияОповещения обработчик данного описания должен содержать два параметра +// (имена произвольные): +// "Результат" - Булево - Переменная, в которой возвращается значение работы функции. +// "ДополнительныеПараметры" - Структура - Структура параметров, передаваемая функции. +// +// ДополнительныеПараметры - Структура - Структура дополнительных параметров, передаваемая функции сравнения. +// Служит для передачи дополнительных данных из прикладного кода в функцию сравнения. +// По умолчанию содержит одно значение - Элемент. +// +// Возвращаемое значение: +// Булево - Истина, если все элементы коллекции не удовлетворяют условию Функции сравнения. +// В обратном случае возвращает Ложь. +// Если коллекция пустая, возвращает Истина. +// +Функция ВсеНеСоответствуют(Знач ФункцияСравнения, Знач ДополнительныеПараметры = Неопределено) Экспорт + + Лог.Отладка("ВсеНеСоответствуют"); + + Если ТипЗнч(ФункцияСравнения) = Тип("Строка") Тогда + ФункцияСравнения = СформироватьВременноеОписаниеОповещения(ФункцияСравнения, ДополнительныеПараметры); + КонецЕсли; + ДополнитьСтруктуру(ФункцияСравнения.ДополнительныеПараметры, ДополнительныеПараметры, Истина); + + ПройтиКонвейер(); + + Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); + Результат = Истина; + + ФункцияСравнения.ДополнительныеПараметры.Вставить("Элемент"); + + Для Каждого Элемент Из Коллекция Цикл + ФункцияСравнения.ДополнительныеПараметры.Элемент = Элемент; + РезультатФильтрации = Ложь; + ОписанияОповещений.ВыполнитьОбработкуОповещения(ФункцияСравнения, РезультатФильтрации); + + Если РезультатФильтрации Тогда + Результат = Ложь; + Прервать; + КонецЕсли; + КонецЦикла; + + ОчиститьВременныеОписанияОповещений(); + + Возврат Результат; + +КонецФункции + +// Служебные процедуры и функции + +Процедура ПоложитьЯчейкуВКонвейер(ИмяОперации, + ВходящееОписаниеОповещения = Неопределено, + ДополнительныеПараметры = Неопределено) + + Сообщение = ИмяОперации; + Если ВходящееОписаниеОповещения <> Неопределено Тогда + Сообщение = Сообщение + " " + ВходящееОписаниеОповещения.ИмяПроцедуры; + КонецЕсли; + Лог.Отладка(Сообщение); + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + КонецЕсли; + + Если ВходящееОписаниеОповещения <> Неопределено Тогда + ДополнительныеПараметры.Вставить("Обработчик", ВходящееОписаниеОповещения); + КонецЕсли; + + Ячейка = Новый ОписаниеОповещения("Выполнить" + ИмяОперации, ПроцессорКоллекцийСлужебный, ДополнительныеПараметры); + + Конвейер.Добавить(Ячейка); + +КонецПроцедуры + +Процедура ПройтиКонвейер() + + Лог.Отладка("Прохожу по конвейеру"); + + Результат = Новый Массив; + Для Каждого Ячейка Из Конвейер Цикл + Коллекция = ПроцессорКоллекцийСлужебный.ПолучитьКоллекцию(); + + Лог.Отладка("Выполняю ячейку конвейера %1", Ячейка.ИмяПроцедуры); + Лог.Отладка("Размер коллекции %1", Коллекция.Количество()); + + ОписанияОповещений.ВыполнитьОбработкуОповещения(Ячейка, Результат); + ПроцессорКоллекцийСлужебный.УстановитьКоллекцию(Результат, Ложь); + КонецЦикла; + + Конвейер.Очистить(); + ОчиститьВременныеОписанияОповещений(); + +КонецПроцедуры + +Функция СформироватьВременноеОписаниеОповещения(ПользовательскоеВыражение, ДополнительныеПараметры) + + Если ДополнительныеПараметры = Неопределено Тогда + ДополнительныеПараметры = Новый Структура; + КонецЕсли; + + ТекстИзолированногоКласса = СтрЗаменить( + ТекстШаблонаИзолированногоКласса, + "А = 0;", + ПользовательскоеВыражение + ); + + Если Отладка = Истина Тогда + ИмяВременногоФайла = ВременныеФайлы.НовоеИмяФайла("os"); + ЗаписьТекста = Новый ЗаписьТекста(); + ЗаписьТекста.Открыть(ИмяВременногоФайла); + ЗаписьТекста.Записать(ТекстИзолированногоКласса); + ЗаписьТекста.Закрыть(); + ВременныйСценарий = ЗагрузитьСценарий(ИмяВременногоФайла); + Иначе + ВременныйСценарий = ЗагрузитьСценарийИзСтроки(ТекстИзолированногоКласса); + КонецЕсли; + + ОписаниеОповещения = Новый ОписаниеОповещения( + "ОбработкаОповещения", + ВременныйСценарий, + ДополнительныеПараметры + ); + + ВременныеОписанияОповещений.Добавить(ВременныйСценарий); + ВременныеОписанияОповещений.Добавить(ОписаниеОповещения); + + Возврат ОписаниеОповещения; + +КонецФункции + +Процедура ОчиститьВременныеОписанияОповещений() + Для Каждого ВременныйСценарий Из ВременныеОписанияОповещений Цикл + ОсвободитьОбъект(ВременныйСценарий); + КонецЦикла; + ВременныеОписанияОповещений = Новый Массив; +КонецПроцедуры + +Процедура Инициализация() + Конвейер = Новый Массив; + ВременныеОписанияОповещений = Новый Массив; + Лог = Логирование.ПолучитьЛог("oscript.lib.stream"); + + ПроцессорКоллекцийСлужебный = Новый ПроцессорКоллекцийСлужебный(); + + ТекстШаблонаИзолированногоКласса = + "Процедура ОбработкаОповещения(Результат, ДополнительныеПараметры) Экспорт + | + | Элемент = Неопределено; + | Элемент1 = Неопределено; + | Элемент2 = Неопределено; + | + | ДополнительныеПараметры.Свойство(""Элемент"", Элемент); + | ДополнительныеПараметры.Свойство(""Элемент1"", Элемент1); + | ДополнительныеПараметры.Свойство(""Элемент2"", Элемент2); + | + | А = 0; + | + |КонецПроцедуры"; + +КонецПроцедуры + +// Дополняет структуру значениями из другой структуры. +// +// Параметры: +// Приемник - Структура - коллекция, в которую будут добавляться новые значения. +// Источник - Структура - коллекция, из которой будут считываться пары Ключ и Значение для заполнения. +// Заменять - Булево, Неопределено - что делать в местах пересечения ключей источника и приемника: +// - Истина - заменять значения приемника (самый быстрый способ), +// - Ложь - не заменять значения приемника (пропускать), +// - Неопределено - значение по умолчанию. Бросать исключение. +// +// Функция скопирована из "Библиотеки Стандартных Подсистем" на следующих условиях: +// +// Copyright (c) 2018, ООО 1С-Софт +// Все права защищены. Эта программа и сопроводительные материалы предоставляются +// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0) +// Текст лицензии доступен по ссылке: +// https://creativecommons.org/licenses/by/4.0/legalcode +// +// В функцию внесены следующие изменения: +// - использование СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку заменено на СтрШаблон; +// - добавлена инициализиация структур приемника и источника +// +Процедура ДополнитьСтруктуру(Приемник, Источник, Заменять = Неопределено) Экспорт + + Если Приемник = Неопределено Тогда + Приемник = Новый Структура; + КонецЕсли; + + Если Источник = Неопределено Тогда + Источник = Новый Структура; + КонецЕсли; + + Для Каждого Элемент Из Источник Цикл + Если Заменять <> Истина И Приемник.Свойство(Элемент.Ключ) Тогда + Если Заменять = Ложь Тогда + Продолжить; + Иначе + ВызватьИсключение СтрШаблон(НСтр("ru = 'Пересечение ключей источника и приемника: ""%1"".'"), Элемент.Ключ); + КонецЕсли; + КонецЕсли; + Приемник.Вставить(Элемент.Ключ, Элемент.Значение); + КонецЦикла; + +КонецПроцедуры + +Инициализация(); diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\321\213\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\321\213\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" index 15130c0..bc09530 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\321\213\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\321\200\320\276\321\206\320\265\321\201\321\201\320\276\321\200\321\213\320\232\320\276\320\273\320\273\320\265\320\272\321\206\320\270\320\271.os" @@ -1,151 +1,151 @@ -#Использовать notify - -#Использовать "../internal" - -// Создать ПроцессорКоллекций на основании переданной коллекции. -// -// Параметры: -// Коллекция - Произвольный - Коллекция (Массив, ТаблицаЗначений...), на основании которой нужно -// сформировать ПроцессорКоллекций. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций, заполненный переданной коллекцией. -// -Функция ИзКоллекции(Коллекция) Экспорт - ПроцессорКоллекций = Новый ПроцессорКоллекций(); - ПроцессорКоллекций.УстановитьКоллекцию(Коллекция); - - Возврат ПроцессорКоллекций; -КонецФункции - -// Создать ПроцессорКоллекций на основании переданной строки. -// Переданная строка преобразуется в коллекцию путем разделения строк. -// -// Параметры: -// Строка - Строка - Строка, на основании которой нужно сформировать ПроцессорКоллекций. -// РазделительСтрок - Строка - Разделитель строк, применяемый к Строке для получения коллекции. -// Если не передан, строка разделяется на элементы посимвольно. -// ВключатьПустые - Булево - Указывает необходимость включать в коллекцию пустые строки, -// которые могут образоваться в результате разделения исходной строки. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций. -// -Функция ИзСтроки(Строка, РазделительСтрок = Неопределено, ВключатьПустые = Истина) Экспорт - - Если РазделительСтрок = Неопределено Тогда - Коллекция = Новый Массив; - ДлинаСтроки = СтрДлина(Строка); - Для сч = 1 По ДлинаСтроки Цикл - Коллекция.Добавить(Сред(Строка, сч, 1)); - КонецЦикла; - Иначе - Коллекция = СтрРазделить(Строка, РазделительСтрок, ВключатьПустые); - КонецЕсли; - - ПроцессорКоллекций = Новый ПроцессорКоллекций(); - ПроцессорКоллекций.УстановитьКоллекцию(Коллекция); - - Возврат ПроцессорКоллекций; - -КонецФункции - -// Создать ПроцессорКоллекций на основании переданного набора значений. -// Добавляет элемент в ПроцессорКоллекций, если он не равен NULL. -// -// Параметры: -// Элемент1 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент2 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент3 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент4 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент5 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент6 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент7 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент8 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент9 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент10 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент11 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент12 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент13 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент14 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент15 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент16 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент17 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент18 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент19 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент20 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент21 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент22 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент23 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент24 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент25 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент26 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент27 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент28 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент29 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент30 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент31 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// Элемент32 - Произвольный - Элемент для добавления в ПроцессорКоллекций. -// -// Возвращаемое значение: -// ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций, заполненный переданным набором. -// -Функция ИзНабора( - // BSLLS:NumberOfParams-off - // BSLLS:NumberOfOptionalParams-off - // BSLLS:UnusedParameters-off - Элемент1 = NULL, Элемент2 = NULL, Элемент3 = NULL, Элемент4 = NULL, Элемент5 = NULL, - Элемент6 = NULL, Элемент7 = NULL, Элемент8 = NULL, Элемент9 = NULL, Элемент10 = NULL, - Элемент11 = NULL, Элемент12 = NULL, Элемент13 = NULL, Элемент14 = NULL, Элемент15 = NULL, - Элемент16 = NULL, Элемент17 = NULL, Элемент18 = NULL, Элемент19 = NULL, Элемент20 = NULL, - Элемент21 = NULL, Элемент22 = NULL, Элемент23 = NULL, Элемент24 = NULL, Элемент25 = NULL, - Элемент26 = NULL, Элемент27 = NULL, Элемент28 = NULL, Элемент29 = NULL, Элемент30 = NULL, - Элемент31 = NULL, Элемент32 = NULL - // BSLLS:NumberOfParams-on - // BSLLS:NumberOfOptionalParams-on - // BSLLS:UnusedParameters-on - ) Экспорт - - Коллекция = Новый Массив; - Для сч = 1 По 32 Цикл - ДобавитьНеПустоеЗначениеВКоллекцию(Коллекция, Вычислить("Элемент" + сч)); - КонецЦикла; - - ПроцессорКоллекций = Новый ПроцессорКоллекций(); - ПроцессорКоллекций.УстановитьКоллекцию(Коллекция); - - Возврат ПроцессорКоллекций; - -КонецФункции - -// Стандартная функция сравнения. -// Сравнивает значения элементов коллекции через операторы ">", "<" и "=". -// -// Возвращаемое значение: -// ОписаниеОповещения - Инстанс класса ОписаниеОповещения, указывающий на стандартную функцию сравнения. -// -Функция СтандартнаяФункцияСравнения() Экспорт - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("Элемент1"); - ДополнительныеПараметры.Вставить("Элемент2"); - - ФункцияСравнения = Новый ОписаниеОповещения("ФункцияСравнения", ПроцессорыКоллекцийСлужебный, ДополнительныеПараметры); - Возврат ФункцияСравнения; -КонецФункции - -// Стандартная функция обработки - "Сообщить". -// Выполняет процедуру "Сообщить()" над каждым элементом коллекции. -// -// Возвращаемое значение: -// ОписаниеОповещения - Инстанс класса ОписаниеОповещения, указывающий на стандартную функцию обработки. -// -Функция СтандартнаяФункцияОбработки_Сообщить() Экспорт - ФункцияОбработки = Новый ОписаниеОповещения("ФункцияОбработки_Сообщить", ПроцессорыКоллекцийСлужебный); - Возврат ФункцияОбработки; -КонецФункции - -Процедура ДобавитьНеПустоеЗначениеВКоллекцию(Коллекция, Значение) - Если Значение <> NULL Тогда - Коллекция.Добавить(Значение); - КонецЕсли; -КонецПроцедуры +#Использовать notify + +#Использовать "../internal" + +// Создать ПроцессорКоллекций на основании переданной коллекции. +// +// Параметры: +// Коллекция - Произвольный - Коллекция (Массив, ТаблицаЗначений...), на основании которой нужно +// сформировать ПроцессорКоллекций. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций, заполненный переданной коллекцией. +// +Функция ИзКоллекции(Коллекция) Экспорт + ПроцессорКоллекций = Новый ПроцессорКоллекций(); + ПроцессорКоллекций.УстановитьКоллекцию(Коллекция); + + Возврат ПроцессорКоллекций; +КонецФункции + +// Создать ПроцессорКоллекций на основании переданной строки. +// Переданная строка преобразуется в коллекцию путем разделения строк. +// +// Параметры: +// Строка - Строка - Строка, на основании которой нужно сформировать ПроцессорКоллекций. +// РазделительСтрок - Строка - Разделитель строк, применяемый к Строке для получения коллекции. +// Если не передан, строка разделяется на элементы посимвольно. +// ВключатьПустые - Булево - Указывает необходимость включать в коллекцию пустые строки, +// которые могут образоваться в результате разделения исходной строки. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций. +// +Функция ИзСтроки(Строка, РазделительСтрок = Неопределено, ВключатьПустые = Истина) Экспорт + + Если РазделительСтрок = Неопределено Тогда + Коллекция = Новый Массив; + ДлинаСтроки = СтрДлина(Строка); + Для сч = 1 По ДлинаСтроки Цикл + Коллекция.Добавить(Сред(Строка, сч, 1)); + КонецЦикла; + Иначе + Коллекция = СтрРазделить(Строка, РазделительСтрок, ВключатьПустые); + КонецЕсли; + + ПроцессорКоллекций = Новый ПроцессорКоллекций(); + ПроцессорКоллекций.УстановитьКоллекцию(Коллекция); + + Возврат ПроцессорКоллекций; + +КонецФункции + +// Создать ПроцессорКоллекций на основании переданного набора значений. +// Добавляет элемент в ПроцессорКоллекций, если он не равен NULL. +// +// Параметры: +// Элемент1 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент2 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент3 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент4 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент5 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент6 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент7 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент8 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент9 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент10 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент11 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент12 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент13 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент14 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент15 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент16 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент17 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент18 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент19 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент20 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент21 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент22 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент23 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент24 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент25 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент26 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент27 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент28 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент29 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент30 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент31 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// Элемент32 - Произвольный - Элемент для добавления в ПроцессорКоллекций. +// +// Возвращаемое значение: +// ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций, заполненный переданным набором. +// +Функция ИзНабора( + // BSLLS:NumberOfParams-off + // BSLLS:NumberOfOptionalParams-off + // BSLLS:UnusedParameters-off + Элемент1 = NULL, Элемент2 = NULL, Элемент3 = NULL, Элемент4 = NULL, Элемент5 = NULL, + Элемент6 = NULL, Элемент7 = NULL, Элемент8 = NULL, Элемент9 = NULL, Элемент10 = NULL, + Элемент11 = NULL, Элемент12 = NULL, Элемент13 = NULL, Элемент14 = NULL, Элемент15 = NULL, + Элемент16 = NULL, Элемент17 = NULL, Элемент18 = NULL, Элемент19 = NULL, Элемент20 = NULL, + Элемент21 = NULL, Элемент22 = NULL, Элемент23 = NULL, Элемент24 = NULL, Элемент25 = NULL, + Элемент26 = NULL, Элемент27 = NULL, Элемент28 = NULL, Элемент29 = NULL, Элемент30 = NULL, + Элемент31 = NULL, Элемент32 = NULL + // BSLLS:NumberOfParams-on + // BSLLS:NumberOfOptionalParams-on + // BSLLS:UnusedParameters-on + ) Экспорт + + Коллекция = Новый Массив; + Для сч = 1 По 32 Цикл + ДобавитьНеПустоеЗначениеВКоллекцию(Коллекция, Вычислить("Элемент" + сч)); + КонецЦикла; + + ПроцессорКоллекций = Новый ПроцессорКоллекций(); + ПроцессорКоллекций.УстановитьКоллекцию(Коллекция); + + Возврат ПроцессорКоллекций; + +КонецФункции + +// Стандартная функция сравнения. +// Сравнивает значения элементов коллекции через операторы ">", "<" и "=". +// +// Возвращаемое значение: +// ОписаниеОповещения - Инстанс класса ОписаниеОповещения, указывающий на стандартную функцию сравнения. +// +Функция СтандартнаяФункцияСравнения() Экспорт + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("Элемент1"); + ДополнительныеПараметры.Вставить("Элемент2"); + + ФункцияСравнения = Новый ОписаниеОповещения("ФункцияСравнения", ПроцессорыКоллекцийСлужебный, ДополнительныеПараметры); + Возврат ФункцияСравнения; +КонецФункции + +// Стандартная функция обработки - "Сообщить". +// Выполняет процедуру "Сообщить()" над каждым элементом коллекции. +// +// Возвращаемое значение: +// ОписаниеОповещения - Инстанс класса ОписаниеОповещения, указывающий на стандартную функцию обработки. +// +Функция СтандартнаяФункцияОбработки_Сообщить() Экспорт + ФункцияОбработки = Новый ОписаниеОповещения("ФункцияОбработки_Сообщить", ПроцессорыКоллекцийСлужебный); + Возврат ФункцияОбработки; +КонецФункции + +Процедура ДобавитьНеПустоеЗначениеВКоллекцию(Коллекция, Значение) + Если Значение <> NULL Тогда + Коллекция.Добавить(Значение); + КонецЕсли; +КонецПроцедуры diff --git a/tasks/test.os b/tasks/test.os index 592586c..d579d3a 100644 --- a/tasks/test.os +++ b/tasks/test.os @@ -1,8 +1,8 @@ -#Использовать 1testrunner - -Тестер = Новый Тестер; - -ПутьКаталогТестов = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "tests"); -КаталогТестов = Новый Файл(ПутьКаталогТестов); - -Тестер.ТестироватьКаталог(КаталогТестов); +#Использовать 1testrunner + +Тестер = Новый Тестер; + +ПутьКаталогТестов = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "tests"); +КаталогТестов = Новый Файл(ПутьКаталогТестов); + +Тестер.ТестироватьКаталог(КаталогТестов); diff --git "a/tests/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217.os" "b/tests/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217.os" index af46640..01c7c74 100644 --- "a/tests/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217.os" +++ "b/tests/\320\230\320\275\320\270\321\206\320\270\320\260\320\273\320\270\320\267\320\260\321\206\320\270\321\217.os" @@ -1,36 +1,36 @@ -#Использовать asserts -#Использовать ".." - -// основной метод для тестирования -Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт - - ВсеТесты = Новый Массив; - - ВсеТесты.Добавить("ТестДолжен_ПроинициализироватьПроцессорКоллекций"); - ВсеТесты.Добавить("ТестДолжен_ПроинициализироватьПроцессорКоллекцийЧерезПомощник"); - ВсеТесты.Добавить("ТестДолжен_ПроинициализироватьПроцессорКоллекцийИзСтрокиЧерезПомощник"); - ВсеТесты.Добавить("ТестДолжен_ПроинициализироватьПроцессорКоллекцийИзНабораЧерезПомощник"); - - - Возврат ВсеТесты; -КонецФункции - -Процедура ТестДолжен_ПроинициализироватьПроцессорКоллекций() Экспорт - ПроцессорКоллекций = Новый ПроцессорКоллекций; -КонецПроцедуры - -Процедура ТестДолжен_ПроинициализироватьПроцессорКоллекцийЧерезПомощник() Экспорт - ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Новый Массив); - Ожидаем.Что(ПроцессорКоллекций).ИмеетТип("ПроцессорКоллекций"); -КонецПроцедуры - -Процедура ТестДолжен_ПроинициализироватьПроцессорКоллекцийИзСтрокиЧерезПомощник() Экспорт - ПроцессорКоллекций = ПроцессорыКоллекций.ИзСтроки(""); - Ожидаем.Что(ПроцессорКоллекций).ИмеетТип("ПроцессорКоллекций"); -КонецПроцедуры - -Процедура ТестДолжен_ПроинициализироватьПроцессорКоллекцийИзНабораЧерезПомощник() Экспорт - ПроцессорКоллекций = ПроцессорыКоллекций.ИзНабора(1, 2, 3); - Ожидаем.Что(ПроцессорКоллекций).ИмеетТип("ПроцессорКоллекций"); - Ожидаем.Что(ПроцессорКоллекций.Количество()).Равно(3); -КонецПроцедуры +#Использовать asserts +#Использовать ".." + +// основной метод для тестирования +Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт + + ВсеТесты = Новый Массив; + + ВсеТесты.Добавить("ТестДолжен_ПроинициализироватьПроцессорКоллекций"); + ВсеТесты.Добавить("ТестДолжен_ПроинициализироватьПроцессорКоллекцийЧерезПомощник"); + ВсеТесты.Добавить("ТестДолжен_ПроинициализироватьПроцессорКоллекцийИзСтрокиЧерезПомощник"); + ВсеТесты.Добавить("ТестДолжен_ПроинициализироватьПроцессорКоллекцийИзНабораЧерезПомощник"); + + + Возврат ВсеТесты; +КонецФункции + +Процедура ТестДолжен_ПроинициализироватьПроцессорКоллекций() Экспорт + ПроцессорКоллекций = Новый ПроцессорКоллекций; +КонецПроцедуры + +Процедура ТестДолжен_ПроинициализироватьПроцессорКоллекцийЧерезПомощник() Экспорт + ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Новый Массив); + Ожидаем.Что(ПроцессорКоллекций).ИмеетТип("ПроцессорКоллекций"); +КонецПроцедуры + +Процедура ТестДолжен_ПроинициализироватьПроцессорКоллекцийИзСтрокиЧерезПомощник() Экспорт + ПроцессорКоллекций = ПроцессорыКоллекций.ИзСтроки(""); + Ожидаем.Что(ПроцессорКоллекций).ИмеетТип("ПроцессорКоллекций"); +КонецПроцедуры + +Процедура ТестДолжен_ПроинициализироватьПроцессорКоллекцийИзНабораЧерезПомощник() Экспорт + ПроцессорКоллекций = ПроцессорыКоллекций.ИзНабора(1, 2, 3); + Ожидаем.Что(ПроцессорКоллекций).ИмеетТип("ПроцессорКоллекций"); + Ожидаем.Что(ПроцессорКоллекций.Количество()).Равно(3); +КонецПроцедуры diff --git "a/tests/\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\276\320\275\320\275\321\213\320\271\320\242\320\265\321\201\321\202.os" "b/tests/\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\276\320\275\320\275\321\213\320\271\320\242\320\265\321\201\321\202.os" index 7c8541d..39d2022 100644 --- "a/tests/\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\276\320\275\320\275\321\213\320\271\320\242\320\265\321\201\321\202.os" +++ "b/tests/\320\230\320\275\321\202\320\265\320\263\321\200\320\260\321\206\320\270\320\276\320\275\320\275\321\213\320\271\320\242\320\265\321\201\321\202.os" @@ -1,194 +1,194 @@ -#Использовать asserts -#Использовать notify -#Использовать ".." - -Перем ФункцияОбработки; -Перем ФункцияСокращения; -Перем ФункцияФильтрации; - -// основной метод для тестирования -Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт - - ВсеТесты = Новый Массив; - - ВсеТесты.Добавить("ТестДолжен_1"); - ВсеТесты.Добавить("ТестДолжен_2"); - ВсеТесты.Добавить("ТестДолжен_3"); - ВсеТесты.Добавить("ТестДолжен_4"); - ВсеТесты.Добавить("ТестДолжен_5"); - ВсеТесты.Добавить("ТестДолжен_6"); - ВсеТесты.Добавить("ТестДолжен_7"); - ВсеТесты.Добавить("ТестДолжен_8"); - ВсеТесты.Добавить("ТестДолжен_9"); - - Возврат ВсеТесты; - -КонецФункции - -Процедура ОбработчикФильтрации(Результат, ДополнительныеПараметры) Экспорт - Элемент = ДополнительныеПараметры.Элемент; - Результат = Элемент > 3; -КонецПроцедуры - -Процедура ОбработчикОбработки(Результат, ДополнительныеПараметры) Экспорт - Элемент = ДополнительныеПараметры.Элемент; - Результат = Элемент + 1; -КонецПроцедуры - -Процедура ОбработчикСокращения(Результат, ДополнительныеПараметры) Экспорт - Элемент = ДополнительныеПараметры.Элемент; - Результат = Результат + Элемент; -КонецПроцедуры - -Функция ПолучитьНачальныйМассив() - - Массив = Новый Массив; - Массив.Добавить(3); - Массив.Добавить(4); - Массив.Добавить(7); - Массив.Добавить(5); - Массив.Добавить(1); - Массив.Добавить(0); - - Возврат Массив; -КонецФункции - -Функция ПолучитьПроцессорКоллекций() - - Возврат ПроцессорыКоллекций.ИзКоллекции(ПолучитьНачальныйМассив()); - -КонецФункции - -Процедура ТестДолжен_1() Экспорт - - ПроцессорКоллекций = Новый ПроцессорКоллекций; - ПроцессорКоллекций.УстановитьКоллекцию(ПолучитьНачальныйМассив()); - - Результат = ПроцессорКоллекций - .Пропустить(2) - .Фильтровать(ФункцияФильтрации) - .Первые(2) - .Обработать(ФункцияОбработки) - .Получить(Тип("Массив")); - - Ожидаем.Что(Результат[0]).Равно(8); - Ожидаем.Что(Результат[1]).Равно(6); - -КонецПроцедуры - -Процедура ТестДолжен_2() Экспорт - - ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(ПолучитьНачальныйМассив()); - Результат = ПроцессорКоллекций - .Сортировать() - .ВМассив(); - - Ожидаем.Что(Результат[0]).Равно(0); - Ожидаем.Что(Результат[1]).Равно(1); - Ожидаем.Что(Результат[2]).Равно(3); - Ожидаем.Что(Результат[3]).Равно(4); - Ожидаем.Что(Результат[4]).Равно(5); - Ожидаем.Что(Результат[5]).Равно(7); - -КонецПроцедуры - -Процедура ТестДолжен_3() Экспорт - - ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(ПолучитьНачальныйМассив()); - Результат = ПроцессорКоллекций - .Обработать(ФункцияОбработки) - .Сократить(ФункцияСокращения, 0); - - Ожидаем.Что(Результат).Равно(26); - -КонецПроцедуры - -Процедура ТестДолжен_4() Экспорт - - // Результат должен различаться - Результат = ПроцессорыКоллекций - .ИзКоллекции(ПолучитьНачальныйМассив()) - .Сортировать() - .Первые(1) - .Получить("Массив"); - - Ожидаем.Что(Результат[0]).Равно(0); - Ожидаем.Что(ПолучитьНачальныйМассив()[0]).Равно(3); - -КонецПроцедуры - -Процедура ТестДолжен_5() Экспорт - Строка = "ФЫВА"; - Результат = ПроцессорыКоллекций - .ИзСтроки(Строка) - .Сортировать() - .ВСтроку(); - - Ожидаем.Что(Результат).Равно("АВФЫ"); - -КонецПроцедуры - -Процедура ТестДолжен_6() Экспорт - - Строка = "Я строка с пробелами"; - Результат = ПроцессорыКоллекций - .ИзСтроки(Строка, " ") - .ВСтроку(); - - Ожидаем.Что(Результат).Равно("Ястрокаспробелами"); - -КонецПроцедуры - -Процедура ТестДолжен_7() Экспорт - - Строка = "Я - |строка - |многострочная"; - - Результат = ПроцессорыКоллекций - .ИзСтроки(Строка, Символы.ПС) - .Сортировать() - .ВСтроку(Символы.ПС); - - Ожидаем.Что(Результат).Равно("Я - |многострочная - |строка"); - -КонецПроцедуры - -Процедура ТестДолжен_8() Экспорт - - Строка = "Я - |строка - |многострочная"; - - Результат = ПроцессорыКоллекций - .ИзСтроки(Строка, Символы.ПС) - .Фильтровать("Результат = СтрДлина(Элемент) > 1") - .ВСтроку(Символы.ПС); - - Ожидаем.Что(Результат).Равно("строка - |многострочная"); - -КонецПроцедуры - -Процедура ТестДолжен_9() Экспорт - - Строка = "Я - |строка - |многострочная"; - - Результат = ПроцессорыКоллекций - .ИзСтроки(Строка, Символы.ПС) - .Сортировать("Результат = ВРЕГ(Элемент1) > ВРЕГ(Элемент2)") - .ВСтроку(Символы.ПС); - - Ожидаем.Что(Результат).Равно("многострочная - |строка - |Я"); - -КонецПроцедуры - -ФункцияФильтрации = Новый ОписаниеОповещения("ОбработчикФильтрации", ЭтотОбъект); -ФункцияОбработки = Новый ОписаниеОповещения("ОбработчикОбработки", ЭтотОбъект); -ФункцияСокращения = Новый ОписаниеОповещения("ОбработчикСокращения", ЭтотОбъект); +#Использовать asserts +#Использовать notify +#Использовать ".." + +Перем ФункцияОбработки; +Перем ФункцияСокращения; +Перем ФункцияФильтрации; + +// основной метод для тестирования +Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт + + ВсеТесты = Новый Массив; + + ВсеТесты.Добавить("ТестДолжен_1"); + ВсеТесты.Добавить("ТестДолжен_2"); + ВсеТесты.Добавить("ТестДолжен_3"); + ВсеТесты.Добавить("ТестДолжен_4"); + ВсеТесты.Добавить("ТестДолжен_5"); + ВсеТесты.Добавить("ТестДолжен_6"); + ВсеТесты.Добавить("ТестДолжен_7"); + ВсеТесты.Добавить("ТестДолжен_8"); + ВсеТесты.Добавить("ТестДолжен_9"); + + Возврат ВсеТесты; + +КонецФункции + +Процедура ОбработчикФильтрации(Результат, ДополнительныеПараметры) Экспорт + Элемент = ДополнительныеПараметры.Элемент; + Результат = Элемент > 3; +КонецПроцедуры + +Процедура ОбработчикОбработки(Результат, ДополнительныеПараметры) Экспорт + Элемент = ДополнительныеПараметры.Элемент; + Результат = Элемент + 1; +КонецПроцедуры + +Процедура ОбработчикСокращения(Результат, ДополнительныеПараметры) Экспорт + Элемент = ДополнительныеПараметры.Элемент; + Результат = Результат + Элемент; +КонецПроцедуры + +Функция ПолучитьНачальныйМассив() + + Массив = Новый Массив; + Массив.Добавить(3); + Массив.Добавить(4); + Массив.Добавить(7); + Массив.Добавить(5); + Массив.Добавить(1); + Массив.Добавить(0); + + Возврат Массив; +КонецФункции + +Функция ПолучитьПроцессорКоллекций() + + Возврат ПроцессорыКоллекций.ИзКоллекции(ПолучитьНачальныйМассив()); + +КонецФункции + +Процедура ТестДолжен_1() Экспорт + + ПроцессорКоллекций = Новый ПроцессорКоллекций; + ПроцессорКоллекций.УстановитьКоллекцию(ПолучитьНачальныйМассив()); + + Результат = ПроцессорКоллекций + .Пропустить(2) + .Фильтровать(ФункцияФильтрации) + .Первые(2) + .Обработать(ФункцияОбработки) + .Получить(Тип("Массив")); + + Ожидаем.Что(Результат[0]).Равно(8); + Ожидаем.Что(Результат[1]).Равно(6); + +КонецПроцедуры + +Процедура ТестДолжен_2() Экспорт + + ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(ПолучитьНачальныйМассив()); + Результат = ПроцессорКоллекций + .Сортировать() + .ВМассив(); + + Ожидаем.Что(Результат[0]).Равно(0); + Ожидаем.Что(Результат[1]).Равно(1); + Ожидаем.Что(Результат[2]).Равно(3); + Ожидаем.Что(Результат[3]).Равно(4); + Ожидаем.Что(Результат[4]).Равно(5); + Ожидаем.Что(Результат[5]).Равно(7); + +КонецПроцедуры + +Процедура ТестДолжен_3() Экспорт + + ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(ПолучитьНачальныйМассив()); + Результат = ПроцессорКоллекций + .Обработать(ФункцияОбработки) + .Сократить(ФункцияСокращения, 0); + + Ожидаем.Что(Результат).Равно(26); + +КонецПроцедуры + +Процедура ТестДолжен_4() Экспорт + + // Результат должен различаться + Результат = ПроцессорыКоллекций + .ИзКоллекции(ПолучитьНачальныйМассив()) + .Сортировать() + .Первые(1) + .Получить("Массив"); + + Ожидаем.Что(Результат[0]).Равно(0); + Ожидаем.Что(ПолучитьНачальныйМассив()[0]).Равно(3); + +КонецПроцедуры + +Процедура ТестДолжен_5() Экспорт + Строка = "ФЫВА"; + Результат = ПроцессорыКоллекций + .ИзСтроки(Строка) + .Сортировать() + .ВСтроку(); + + Ожидаем.Что(Результат).Равно("АВФЫ"); + +КонецПроцедуры + +Процедура ТестДолжен_6() Экспорт + + Строка = "Я строка с пробелами"; + Результат = ПроцессорыКоллекций + .ИзСтроки(Строка, " ") + .ВСтроку(); + + Ожидаем.Что(Результат).Равно("Ястрокаспробелами"); + +КонецПроцедуры + +Процедура ТестДолжен_7() Экспорт + + Строка = "Я + |строка + |многострочная"; + + Результат = ПроцессорыКоллекций + .ИзСтроки(Строка, Символы.ПС) + .Сортировать() + .ВСтроку(Символы.ПС); + + Ожидаем.Что(Результат).Равно("Я + |многострочная + |строка"); + +КонецПроцедуры + +Процедура ТестДолжен_8() Экспорт + + Строка = "Я + |строка + |многострочная"; + + Результат = ПроцессорыКоллекций + .ИзСтроки(Строка, Символы.ПС) + .Фильтровать("Результат = СтрДлина(Элемент) > 1") + .ВСтроку(Символы.ПС); + + Ожидаем.Что(Результат).Равно("строка + |многострочная"); + +КонецПроцедуры + +Процедура ТестДолжен_9() Экспорт + + Строка = "Я + |строка + |многострочная"; + + Результат = ПроцессорыКоллекций + .ИзСтроки(Строка, Символы.ПС) + .Сортировать("Результат = ВРЕГ(Элемент1) > ВРЕГ(Элемент2)") + .ВСтроку(Символы.ПС); + + Ожидаем.Что(Результат).Равно("многострочная + |строка + |Я"); + +КонецПроцедуры + +ФункцияФильтрации = Новый ОписаниеОповещения("ОбработчикФильтрации", ЭтотОбъект); +ФункцияОбработки = Новый ОписаниеОповещения("ОбработчикОбработки", ЭтотОбъект); +ФункцияСокращения = Новый ОписаниеОповещения("ОбработчикСокращения", ЭтотОбъект); diff --git "a/tests/\320\232\320\276\320\275\320\262\320\265\320\271\320\265\321\200\320\275\321\213\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" "b/tests/\320\232\320\276\320\275\320\262\320\265\320\271\320\265\321\200\320\275\321\213\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" index f3213d0..b303d46 100644 --- "a/tests/\320\232\320\276\320\275\320\262\320\265\320\271\320\265\321\200\320\275\321\213\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" +++ "b/tests/\320\232\320\276\320\275\320\262\320\265\320\271\320\265\321\200\320\275\321\213\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" @@ -1,137 +1,137 @@ -#Использовать asserts -#Использовать ".." - -Функция ПолучитьИсходныйМассив() - - Массив = Новый Массив; - Массив.Добавить(2); - Массив.Добавить(1); - Массив.Добавить(4); - Массив.Добавить(1); - Массив.Добавить(0); - Массив.Добавить(3); - - Возврат Массив; - -КонецФункции - -Функция ПолучитьДлинуИсходногоМассива() - Возврат ПолучитьИсходныйМассив().Количество(); -КонецФункции - -Функция ПолучитьПроцессорКоллекций() - Массив = ПолучитьИсходныйМассив(); - Возврат ПроцессорыКоллекций.ИзКоллекции(Массив); -КонецФункции - -// основной метод для тестирования -Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт - - ВсеТесты = Новый Массив; - - ВсеТесты.Добавить("ТестДолжен_ПолучитьИзПроцессораКоллекцийМассив"); - ВсеТесты.Добавить("ТестДолжен_ПолучитьПервыеНесколькоЭлементов"); - ВсеТесты.Добавить("ТестДолжен_ПропуститьНесколькоЭлементов"); - ВсеТесты.Добавить("ТестДолжен_ПолучитьРазличныеЭлементы"); - ВсеТесты.Добавить("ТестДолжен_ПолучитьУвеличитьВсеЭлементыНаЕдиницуЧерезОбработку"); - ВсеТесты.Добавить("ТестДолжен_СобратьДваПроцессораВОдин"); - ВсеТесты.Добавить("ТестДолжен_ОтфильтроватьЭлементыМеньшеДвух"); - ВсеТесты.Добавить("ТестДолжен_ОтсортироватьЭлементы"); - ВсеТесты.Добавить("ТестДолжен_ОтсортироватьТаблицуПоКолонке"); - - // ВсеТесты.Добавить("ТестДолжен_ПроинициализироватьПроцессорКоллекцийЧерезПомощник"); - - Возврат ВсеТесты; - -КонецФункции - -Процедура ТестДолжен_ПолучитьИзПроцессораКоллекцийМассив() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - Результат = ПроцессорКоллекций.ВМассив(); - Ожидаем.Что(Результат).ИмеетТип("Массив").ИмеетДлину(ПолучитьДлинуИсходногоМассива()); -КонецПроцедуры - -Процедура ТестДолжен_ПолучитьПервыеНесколькоЭлементов() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - Результат = ПроцессорКоллекций.Первые(2).ВМассив(); - Ожидаем.Что(Результат).ИмеетДлину(2); - Ожидаем.Что(Результат[0]).Равно(2); - Ожидаем.Что(Результат[1]).Равно(1); -КонецПроцедуры - -Процедура ТестДолжен_ПропуститьНесколькоЭлементов() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - Результат = ПроцессорКоллекций.Пропустить(3).ВМассив(); - Ожидаем.Что(Результат).ИмеетДлину(ПолучитьДлинуИсходногоМассива() - 3); - Ожидаем.Что(Результат[0]).Равно(1); -КонецПроцедуры - -Процедура ТестДолжен_ПолучитьРазличныеЭлементы() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - Результат = ПроцессорКоллекций.Различные().ВМассив(); - Ожидаем.Что(Результат).ИмеетДлину(5); - - Ожидаем.Что(Результат[0]).Равно(2); - Ожидаем.Что(Результат[1]).Равно(1); - Ожидаем.Что(Результат[2]).Равно(4); - Ожидаем.Что(Результат[3]).Равно(0); - Ожидаем.Что(Результат[4]).Равно(3); -КонецПроцедуры - -Процедура ТестДолжен_ПолучитьУвеличитьВсеЭлементыНаЕдиницуЧерезОбработку() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - Результат = ПроцессорКоллекций.Обработать("Результат = Элемент + 1").ВМассив(); - ИсходныйМассив = ПолучитьИсходныйМассив(); - Для сч = 0 По ИсходныйМассив.ВГраница() Цикл - Ожидаем.Что(Результат[сч]).Равно(ИсходныйМассив[сч] + 1); - КонецЦикла; -КонецПроцедуры - -Процедура ТестДолжен_СобратьДваПроцессораВОдин() Экспорт - - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - Результат = ПроцессорКоллекций.Развернуть( - "Массив = Новый Массив; - |Массив.Добавить(Элемент); - |Массив.Добавить(Элемент + 1); - |Результат = ПроцессорыКоллекций.ИзКоллекции(Массив)" - ).Фильтровать("Результат = Элемент = 2") - .Количество(); - - Ожидаем.Что(Результат, "Процессоры коллекций должны сложиться и отфильтроваться").Равно(3); - -КонецПроцедуры - -Процедура ТестДолжен_ОтфильтроватьЭлементыМеньшеДвух() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - Результат = ПроцессорКоллекций.Фильтровать("Результат = Элемент < 2").ВМассив(); - Для Каждого Элемент Из Результат Цикл - Ожидаем.Что(Элемент).Меньше(2); - КонецЦикла; -КонецПроцедуры - -Процедура ТестДолжен_ОтсортироватьЭлементы() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - Результат = ПроцессорКоллекций.Сортировать().ВМассив(); - ПредыдущийЭлемент = -1; - Для Каждого Элемент Из Результат Цикл - Ожидаем.Что(Элемент).БольшеИлиРавно(ПредыдущийЭлемент); - ПредыдущийЭлемент = Макс(Элемент, ПредыдущийЭлемент); - КонецЦикла; -КонецПроцедуры - -Процедура ТестДолжен_ОтсортироватьТаблицуПоКолонке() Экспорт - Таблица = Новый ТаблицаЗначений(); - Таблица.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число")); - - Таблица.Добавить().НомерСтроки = 2; - Таблица.Добавить().НомерСтроки = 3; - Таблица.Добавить().НомерСтроки = 1; - - ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Таблица); - Результат = ПроцессорКоллекций.СортироватьПо("НомерСтроки").ВМассив(); - - Для сч = 0 По Таблица.Количество() - 1 Цикл - Ожидаем.Что(Таблица[сч].НомерСтроки = сч); - КонецЦикла; -КонецПроцедуры +#Использовать asserts +#Использовать ".." + +Функция ПолучитьИсходныйМассив() + + Массив = Новый Массив; + Массив.Добавить(2); + Массив.Добавить(1); + Массив.Добавить(4); + Массив.Добавить(1); + Массив.Добавить(0); + Массив.Добавить(3); + + Возврат Массив; + +КонецФункции + +Функция ПолучитьДлинуИсходногоМассива() + Возврат ПолучитьИсходныйМассив().Количество(); +КонецФункции + +Функция ПолучитьПроцессорКоллекций() + Массив = ПолучитьИсходныйМассив(); + Возврат ПроцессорыКоллекций.ИзКоллекции(Массив); +КонецФункции + +// основной метод для тестирования +Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт + + ВсеТесты = Новый Массив; + + ВсеТесты.Добавить("ТестДолжен_ПолучитьИзПроцессораКоллекцийМассив"); + ВсеТесты.Добавить("ТестДолжен_ПолучитьПервыеНесколькоЭлементов"); + ВсеТесты.Добавить("ТестДолжен_ПропуститьНесколькоЭлементов"); + ВсеТесты.Добавить("ТестДолжен_ПолучитьРазличныеЭлементы"); + ВсеТесты.Добавить("ТестДолжен_ПолучитьУвеличитьВсеЭлементыНаЕдиницуЧерезОбработку"); + ВсеТесты.Добавить("ТестДолжен_СобратьДваПроцессораВОдин"); + ВсеТесты.Добавить("ТестДолжен_ОтфильтроватьЭлементыМеньшеДвух"); + ВсеТесты.Добавить("ТестДолжен_ОтсортироватьЭлементы"); + ВсеТесты.Добавить("ТестДолжен_ОтсортироватьТаблицуПоКолонке"); + + // ВсеТесты.Добавить("ТестДолжен_ПроинициализироватьПроцессорКоллекцийЧерезПомощник"); + + Возврат ВсеТесты; + +КонецФункции + +Процедура ТестДолжен_ПолучитьИзПроцессораКоллекцийМассив() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + Результат = ПроцессорКоллекций.ВМассив(); + Ожидаем.Что(Результат).ИмеетТип("Массив").ИмеетДлину(ПолучитьДлинуИсходногоМассива()); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьПервыеНесколькоЭлементов() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + Результат = ПроцессорКоллекций.Первые(2).ВМассив(); + Ожидаем.Что(Результат).ИмеетДлину(2); + Ожидаем.Что(Результат[0]).Равно(2); + Ожидаем.Что(Результат[1]).Равно(1); +КонецПроцедуры + +Процедура ТестДолжен_ПропуститьНесколькоЭлементов() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + Результат = ПроцессорКоллекций.Пропустить(3).ВМассив(); + Ожидаем.Что(Результат).ИмеетДлину(ПолучитьДлинуИсходногоМассива() - 3); + Ожидаем.Что(Результат[0]).Равно(1); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьРазличныеЭлементы() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + Результат = ПроцессорКоллекций.Различные().ВМассив(); + Ожидаем.Что(Результат).ИмеетДлину(5); + + Ожидаем.Что(Результат[0]).Равно(2); + Ожидаем.Что(Результат[1]).Равно(1); + Ожидаем.Что(Результат[2]).Равно(4); + Ожидаем.Что(Результат[3]).Равно(0); + Ожидаем.Что(Результат[4]).Равно(3); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьУвеличитьВсеЭлементыНаЕдиницуЧерезОбработку() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + Результат = ПроцессорКоллекций.Обработать("Результат = Элемент + 1").ВМассив(); + ИсходныйМассив = ПолучитьИсходныйМассив(); + Для сч = 0 По ИсходныйМассив.ВГраница() Цикл + Ожидаем.Что(Результат[сч]).Равно(ИсходныйМассив[сч] + 1); + КонецЦикла; +КонецПроцедуры + +Процедура ТестДолжен_СобратьДваПроцессораВОдин() Экспорт + + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + Результат = ПроцессорКоллекций.Развернуть( + "Массив = Новый Массив; + |Массив.Добавить(Элемент); + |Массив.Добавить(Элемент + 1); + |Результат = ПроцессорыКоллекций.ИзКоллекции(Массив)" + ).Фильтровать("Результат = Элемент = 2") + .Количество(); + + Ожидаем.Что(Результат, "Процессоры коллекций должны сложиться и отфильтроваться").Равно(3); + +КонецПроцедуры + +Процедура ТестДолжен_ОтфильтроватьЭлементыМеньшеДвух() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + Результат = ПроцессорКоллекций.Фильтровать("Результат = Элемент < 2").ВМассив(); + Для Каждого Элемент Из Результат Цикл + Ожидаем.Что(Элемент).Меньше(2); + КонецЦикла; +КонецПроцедуры + +Процедура ТестДолжен_ОтсортироватьЭлементы() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + Результат = ПроцессорКоллекций.Сортировать().ВМассив(); + ПредыдущийЭлемент = -1; + Для Каждого Элемент Из Результат Цикл + Ожидаем.Что(Элемент).БольшеИлиРавно(ПредыдущийЭлемент); + ПредыдущийЭлемент = Макс(Элемент, ПредыдущийЭлемент); + КонецЦикла; +КонецПроцедуры + +Процедура ТестДолжен_ОтсортироватьТаблицуПоКолонке() Экспорт + Таблица = Новый ТаблицаЗначений(); + Таблица.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число")); + + Таблица.Добавить().НомерСтроки = 2; + Таблица.Добавить().НомерСтроки = 3; + Таблица.Добавить().НомерСтроки = 1; + + ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Таблица); + Результат = ПроцессорКоллекций.СортироватьПо("НомерСтроки").ВМассив(); + + Для сч = 0 По Таблица.Количество() - 1 Цикл + Ожидаем.Что(Таблица[сч].НомерСтроки = сч); + КонецЦикла; +КонецПроцедуры diff --git "a/tests/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260\320\241\321\202\321\200\320\276\320\272\320\270.os" "b/tests/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260\320\241\321\202\321\200\320\276\320\272\320\270.os" index 75eb460..b0553e2 100644 --- "a/tests/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260\320\241\321\202\321\200\320\276\320\272\320\270.os" +++ "b/tests/\320\236\320\261\321\200\320\260\320\261\320\276\321\202\320\272\320\260\320\241\321\202\321\200\320\276\320\272\320\270.os" @@ -1,42 +1,42 @@ -#Использовать asserts -#Использовать ".." - -// основной метод для тестирования -Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт - - ВсеТесты = Новый Массив; - - ВсеТесты.Добавить("ТестДолжен_ПолучитьПроцессорКоллекцииИзЗаполненнойСтроки"); - ВсеТесты.Добавить("ТестДолжен_ПолучитьПроцессорКоллекцииИзЗаполненнойСтрокиСРазделителем"); - ВсеТесты.Добавить("ТестДолжен_ДолженВернутьСтрокуИзСтроки"); - ВсеТесты.Добавить("ТестДолжен_ДолженВернутьСтрокуСРазделителемИзСтроки"); - - // ВсеТесты.Добавить("ТестДолжен_ПроинициализироватьПроцессорКоллекцийЧерезПомощник"); - - Возврат ВсеТесты; - -КонецФункции - -Процедура ТестДолжен_ПолучитьПроцессорКоллекцииИзЗаполненнойСтроки() Экспорт - ПроцессорКоллекций = ПроцессорыКоллекций.ИзСтроки("123"); - Результат = ПроцессорКоллекций.ВМассив(); - Ожидаем.Что(Результат).ИмеетДлину(3); -КонецПроцедуры - -Процедура ТестДолжен_ПолучитьПроцессорКоллекцииИзЗаполненнойСтрокиСРазделителем() Экспорт - ПроцессорКоллекций = ПроцессорыКоллекций.ИзСтроки("1 2 3", " "); - Результат = ПроцессорКоллекций.ВМассив(); - Ожидаем.Что(Результат).ИмеетДлину(3); -КонецПроцедуры - -Процедура ТестДолжен_ДолженВернутьСтрокуИзСтроки() Экспорт - ПроцессорКоллекций = ПроцессорыКоллекций.ИзСтроки("1 2 3", " "); - Результат = ПроцессорКоллекций.ВСтроку(); - Ожидаем.Что(Результат).ИмеетДлину(3); -КонецПроцедуры - -Процедура ТестДолжен_ДолженВернутьСтрокуСРазделителемИзСтроки() Экспорт - ПроцессорКоллекций = ПроцессорыКоллекций.ИзСтроки("1 2 3", " "); - Результат = ПроцессорКоллекций.ВСтроку(" "); - Ожидаем.Что(Результат).ИмеетДлину(5); -КонецПроцедуры +#Использовать asserts +#Использовать ".." + +// основной метод для тестирования +Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт + + ВсеТесты = Новый Массив; + + ВсеТесты.Добавить("ТестДолжен_ПолучитьПроцессорКоллекцииИзЗаполненнойСтроки"); + ВсеТесты.Добавить("ТестДолжен_ПолучитьПроцессорКоллекцииИзЗаполненнойСтрокиСРазделителем"); + ВсеТесты.Добавить("ТестДолжен_ДолженВернутьСтрокуИзСтроки"); + ВсеТесты.Добавить("ТестДолжен_ДолженВернутьСтрокуСРазделителемИзСтроки"); + + // ВсеТесты.Добавить("ТестДолжен_ПроинициализироватьПроцессорКоллекцийЧерезПомощник"); + + Возврат ВсеТесты; + +КонецФункции + +Процедура ТестДолжен_ПолучитьПроцессорКоллекцииИзЗаполненнойСтроки() Экспорт + ПроцессорКоллекций = ПроцессорыКоллекций.ИзСтроки("123"); + Результат = ПроцессорКоллекций.ВМассив(); + Ожидаем.Что(Результат).ИмеетДлину(3); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьПроцессорКоллекцииИзЗаполненнойСтрокиСРазделителем() Экспорт + ПроцессорКоллекций = ПроцессорыКоллекций.ИзСтроки("1 2 3", " "); + Результат = ПроцессорКоллекций.ВМассив(); + Ожидаем.Что(Результат).ИмеетДлину(3); +КонецПроцедуры + +Процедура ТестДолжен_ДолженВернутьСтрокуИзСтроки() Экспорт + ПроцессорКоллекций = ПроцессорыКоллекций.ИзСтроки("1 2 3", " "); + Результат = ПроцессорКоллекций.ВСтроку(); + Ожидаем.Что(Результат).ИмеетДлину(3); +КонецПроцедуры + +Процедура ТестДолжен_ДолженВернутьСтрокуСРазделителемИзСтроки() Экспорт + ПроцессорКоллекций = ПроцессорыКоллекций.ИзСтроки("1 2 3", " "); + Результат = ПроцессорКоллекций.ВСтроку(" "); + Ожидаем.Что(Результат).ИмеетДлину(5); +КонецПроцедуры diff --git "a/tests/\320\242\320\265\321\200\320\274\320\270\320\275\320\260\320\273\321\214\320\275\321\213\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" "b/tests/\320\242\320\265\321\200\320\274\320\270\320\275\320\260\320\273\321\214\320\275\321\213\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" index a664b70..8f0793d 100644 --- "a/tests/\320\242\320\265\321\200\320\274\320\270\320\275\320\260\320\273\321\214\320\275\321\213\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" +++ "b/tests/\320\242\320\265\321\200\320\274\320\270\320\275\320\260\320\273\321\214\320\275\321\213\320\265\320\234\320\265\321\202\320\276\320\264\321\213.os" @@ -1,229 +1,229 @@ -#Использовать asserts -#Использовать notify -#Использовать ".." - - -Функция ПолучитьНачальныйМассив() - Массив = Новый Массив; - Массив.Добавить(1); - Массив.Добавить(0); - Массив.Добавить(3); - Массив.Добавить(2); - Массив.Добавить(3); - Массив.Добавить(1); - - Возврат Массив; -КонецФункции - -Функция ПолучитьПроцессорКоллекций() - - Возврат ПроцессорыКоллекций.ИзКоллекции(ПолучитьНачальныйМассив()); - -КонецФункции - -Процедура ФункцияОбработкиСПроверкойДопПараметров(Результат, ДополнительныеПараметры) Экспорт - Результат = ДополнительныеПараметры.ПроверяемыйПараметр; -КонецПроцедуры - -// основной метод для тестирования -Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт - - ВсеТесты = Новый Массив; - - ВсеТесты.Добавить("ТестДолжен_ПолучитьПервый"); - ВсеТесты.Добавить("ТестДолжен_ВернутьМассив"); - ВсеТесты.Добавить("ТестДолжен_ВернутьСтроку"); - ВсеТесты.Добавить("ТестДолжен_ПолучитьКоличество"); - ВсеТесты.Добавить("ТестДолжен_ВыполнитьДляКаждого"); - ВсеТесты.Добавить("ТестДолжен_ПолучитьМинимальныйЭлемент"); - ВсеТесты.Добавить("ТестДолжен_ПолучитьМаксимальныйЭлемент"); - ВсеТесты.Добавить("ТестДолжен_ВыполнитьСокращение"); - ВсеТесты.Добавить("ТестДолжен_ПолучитьМассив"); - ВсеТесты.Добавить("ТестДолжен_ПолучитьТаблицуЗначений"); - ВсеТесты.Добавить("ТестДолжен_ПолучитьСписокЗначений"); - // ВсеТесты.Добавить("ТестДолжен_ПолучитьСтруктуру"); - // ВсеТесты.Добавить("ТестДолжен_ПолучитьСоответствие"); - ВсеТесты.Добавить("ТестДолжен_ПроверитьЛюбойСоответствует"); - ВсеТесты.Добавить("ТестДолжен_ПроверитьВсеСоответствуют"); - ВсеТесты.Добавить("ТестДолжен_ПроверитьВсеНеСоответствуют"); - - ВсеТесты.Добавить("ТестДолжен_ПроверитьПробросДополнительныхПараметровВОповещениеДляКаждого"); - - // ВсеТесты.Добавить("ТестДолжен_ПроинициализироватьПроцессорКоллекцийЧерезПомощник"); - - Возврат ВсеТесты; - -КонецФункции - -Процедура ТестДолжен_ПолучитьПервый() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - Результат = ПроцессорКоллекций.ПолучитьПервый(); - Ожидаем.Что(Результат).ИмеетТип("Число").Равно(1); -КонецПроцедуры - -Процедура ТестДолжен_ВернутьМассив() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - Результат = ПроцессорКоллекций.ВМассив(); - Ожидаем.Что(Результат).ИмеетТип("Массив").ИмеетДлину(6); -КонецПроцедуры - -Процедура ТестДолжен_ВернутьСтроку() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - Результат = ПроцессорКоллекций.ВСтроку(); - Ожидаем.Что(Результат).ИмеетТип("Строка").ИмеетДлину(6); -КонецПроцедуры - -Процедура ТестДолжен_ПолучитьКоличество() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - Результат = ПроцессорКоллекций.Количество(); - Ожидаем.Что(Результат).Равно(6); -КонецПроцедуры - -Процедура ТестДолжен_ВыполнитьДляКаждого() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - НачальныйМассив = ПолучитьНачальныйМассив(); - - ДополнительныеПараметры = Новый Структура; - ДополнительныеПараметры.Вставить("ВнешнийМассив", Новый Массив); - ПроцессорКоллекций.ДляКаждого("ДополнительныеПараметры.ВнешнийМассив.Добавить(Элемент + 1)", ДополнительныеПараметры); - Ожидаем.Что(ДополнительныеПараметры.ВнешнийМассив).ИмеетДлину(НачальныйМассив.Количество()); - Для сч = 0 По ДополнительныеПараметры.ВнешнийМассив.ВГраница() Цикл - Ожидаем.Что(ДополнительныеПараметры.ВнешнийМассив[сч]).Равно(НачальныйМассив[сч] + 1); - КонецЦикла; -КонецПроцедуры - -Процедура ТестДолжен_ПолучитьМинимальныйЭлемент() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - Результат = ПроцессорКоллекций.Минимум(); - Ожидаем.Что(Результат).Равно(0); -КонецПроцедуры - -Процедура ТестДолжен_ПолучитьМаксимальныйЭлемент() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - Результат = ПроцессорКоллекций.Максимум(); - Ожидаем.Что(Результат).Равно(3); -КонецПроцедуры - -Процедура ТестДолжен_ВыполнитьСокращение() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - - Результат = ПроцессорКоллекций.Сократить("Результат = Результат + Элемент", 0); - Ожидаем.Что(Результат).Равно(10); -КонецПроцедуры - -Процедура ТестДолжен_ПолучитьМассив() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - НачальныйМассив = ПолучитьНачальныйМассив(); - - Результат = ПроцессорКоллекций.Получить(Тип("Массив")); - Ожидаем.Что(Результат).ИмеетТип("Массив").ИмеетДлину(НачальныйМассив.Количество()); - - Для сч = 0 По НачальныйМассив.ВГраница() Цикл - Ожидаем.Что(НачальныйМассив[сч]).Равно(Результат[сч]); - КонецЦикла; - -КонецПроцедуры - -Процедура ТестДолжен_ПолучитьТаблицуЗначений() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - НачальныйМассив = ПолучитьНачальныйМассив(); - - Результат = ПроцессорКоллекций.Получить(Тип("ТаблицаЗначений")); - Ожидаем.Что(Результат).ИмеетТип("ТаблицаЗначений").ИмеетДлину(НачальныйМассив.Количество()); - - Для сч = 0 По НачальныйМассив.ВГраница() Цикл - Ожидаем.Что(НачальныйМассив[сч]).Равно(Результат[сч].Значение); - КонецЦикла; - -КонецПроцедуры - -Процедура ТестДолжен_ПолучитьСписокЗначений() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - НачальныйМассив = ПолучитьНачальныйМассив(); - - Результат = ПроцессорКоллекций.Получить(Тип("СписокЗначений")); - Ожидаем.Что(Результат).ИмеетТип("СписокЗначений").ИмеетДлину(НачальныйМассив.Количество()); - - Для сч = 0 По НачальныйМассив.ВГраница() Цикл - Ожидаем.Что(НачальныйМассив[сч]).Равно(Результат[сч].Значение); - КонецЦикла; - -КонецПроцедуры - -Процедура ТестДолжен_ПолучитьСтруктуру() - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - НачальныйМассив = ПолучитьНачальныйМассив(); - - Результат = ПроцессорКоллекций.Получить(Тип("Структура")); - Ожидаем.Что(Результат).ИмеетТип("Структура").ИмеетДлину(НачальныйМассив.Количество()); - - Для сч = 0 По НачальныйМассив.ВГраница() Цикл - Ожидаем.Что(НачальныйМассив[сч]).Равно(Результат[сч].Значение); - КонецЦикла; - -КонецПроцедуры - -Процедура ТестДолжен_ПолучитьСоответствие() - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - НачальныйМассив = ПолучитьНачальныйМассив(); - - Результат = ПроцессорКоллекций.Получить(Тип("Соответствие")); - Ожидаем.Что(Результат).ИмеетТип("Соответствие").ИмеетДлину(НачальныйМассив.Количество()); - - Для сч = 0 По НачальныйМассив.ВГраница() Цикл - Ожидаем.Что(НачальныйМассив[сч]).Равно(Результат[сч].Значение); - КонецЦикла; - -КонецПроцедуры - -Процедура ТестДолжен_ПроверитьЛюбойСоответствует() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - - Результат = ПроцессорКоллекций.ЛюбойСоответствует("Результат = Элемент > 1"); - Ожидаем.Что(Результат).ЭтоИстина(); - - Результат = ПроцессорКоллекций.ЛюбойСоответствует("Результат = Элемент < 0"); - Ожидаем.Что(Результат).ЭтоЛожь(); -КонецПроцедуры - -Процедура ТестДолжен_ПроверитьВсеСоответствуют() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - - Результат = ПроцессорКоллекций.ВсеСоответствуют("Результат = Элемент >= 0"); - Ожидаем.Что(Результат).ЭтоИстина(); - - Результат = ПроцессорКоллекций.ВсеСоответствуют("Результат = Элемент < 2"); - Ожидаем.Что(Результат).ЭтоЛожь(); -КонецПроцедуры - -Процедура ТестДолжен_ПроверитьВсеНеСоответствуют() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - - Результат = ПроцессорКоллекций.ВсеНеСоответствуют("Результат = Элемент < 0"); - Ожидаем.Что(Результат).ЭтоИстина(); - - Результат = ПроцессорКоллекций.ВсеНеСоответствуют("Результат = Элемент > 2"); - Ожидаем.Что(Результат).ЭтоЛожь(); -КонецПроцедуры - -Процедура ТестДолжен_ПроверитьПробросДополнительныхПараметровВОповещениеДляКаждого() Экспорт - ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); - - ДополнительныеПараметры = Новый Структура("ПроверяемыйПараметр"); - ФункцияОбработки = Новый ОписаниеОповещения( - "ФункцияОбработкиСПроверкойДопПараметров", - ЭтотОбъект, - ДополнительныеПараметры - ); - - // Ожидаем, что все варианты не выкинут исключения - ПроцессорКоллекций.ДляКаждого(ФункцияОбработки); - ПроцессорКоллекций.ДляКаждого("Результат = ДополнительныеПараметры.ПроверяемыйПараметр;", ДополнительныеПараметры); - - ФункцияОбработки = Новый ОписаниеОповещения( - "ФункцияОбработкиСПроверкойДопПараметров", - ЭтотОбъект - ); - ПроцессорКоллекций.ДляКаждого(ФункцияОбработки, ДополнительныеПараметры); - -КонецПроцедуры +#Использовать asserts +#Использовать notify +#Использовать ".." + + +Функция ПолучитьНачальныйМассив() + Массив = Новый Массив; + Массив.Добавить(1); + Массив.Добавить(0); + Массив.Добавить(3); + Массив.Добавить(2); + Массив.Добавить(3); + Массив.Добавить(1); + + Возврат Массив; +КонецФункции + +Функция ПолучитьПроцессорКоллекций() + + Возврат ПроцессорыКоллекций.ИзКоллекции(ПолучитьНачальныйМассив()); + +КонецФункции + +Процедура ФункцияОбработкиСПроверкойДопПараметров(Результат, ДополнительныеПараметры) Экспорт + Результат = ДополнительныеПараметры.ПроверяемыйПараметр; +КонецПроцедуры + +// основной метод для тестирования +Функция ПолучитьСписокТестов(ЮнитТестирование) Экспорт + + ВсеТесты = Новый Массив; + + ВсеТесты.Добавить("ТестДолжен_ПолучитьПервый"); + ВсеТесты.Добавить("ТестДолжен_ВернутьМассив"); + ВсеТесты.Добавить("ТестДолжен_ВернутьСтроку"); + ВсеТесты.Добавить("ТестДолжен_ПолучитьКоличество"); + ВсеТесты.Добавить("ТестДолжен_ВыполнитьДляКаждого"); + ВсеТесты.Добавить("ТестДолжен_ПолучитьМинимальныйЭлемент"); + ВсеТесты.Добавить("ТестДолжен_ПолучитьМаксимальныйЭлемент"); + ВсеТесты.Добавить("ТестДолжен_ВыполнитьСокращение"); + ВсеТесты.Добавить("ТестДолжен_ПолучитьМассив"); + ВсеТесты.Добавить("ТестДолжен_ПолучитьТаблицуЗначений"); + ВсеТесты.Добавить("ТестДолжен_ПолучитьСписокЗначений"); + // ВсеТесты.Добавить("ТестДолжен_ПолучитьСтруктуру"); + // ВсеТесты.Добавить("ТестДолжен_ПолучитьСоответствие"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьЛюбойСоответствует"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьВсеСоответствуют"); + ВсеТесты.Добавить("ТестДолжен_ПроверитьВсеНеСоответствуют"); + + ВсеТесты.Добавить("ТестДолжен_ПроверитьПробросДополнительныхПараметровВОповещениеДляКаждого"); + + // ВсеТесты.Добавить("ТестДолжен_ПроинициализироватьПроцессорКоллекцийЧерезПомощник"); + + Возврат ВсеТесты; + +КонецФункции + +Процедура ТестДолжен_ПолучитьПервый() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + Результат = ПроцессорКоллекций.ПолучитьПервый(); + Ожидаем.Что(Результат).ИмеетТип("Число").Равно(1); +КонецПроцедуры + +Процедура ТестДолжен_ВернутьМассив() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + Результат = ПроцессорКоллекций.ВМассив(); + Ожидаем.Что(Результат).ИмеетТип("Массив").ИмеетДлину(6); +КонецПроцедуры + +Процедура ТестДолжен_ВернутьСтроку() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + Результат = ПроцессорКоллекций.ВСтроку(); + Ожидаем.Что(Результат).ИмеетТип("Строка").ИмеетДлину(6); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьКоличество() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + Результат = ПроцессорКоллекций.Количество(); + Ожидаем.Что(Результат).Равно(6); +КонецПроцедуры + +Процедура ТестДолжен_ВыполнитьДляКаждого() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + НачальныйМассив = ПолучитьНачальныйМассив(); + + ДополнительныеПараметры = Новый Структура; + ДополнительныеПараметры.Вставить("ВнешнийМассив", Новый Массив); + ПроцессорКоллекций.ДляКаждого("ДополнительныеПараметры.ВнешнийМассив.Добавить(Элемент + 1)", ДополнительныеПараметры); + Ожидаем.Что(ДополнительныеПараметры.ВнешнийМассив).ИмеетДлину(НачальныйМассив.Количество()); + Для сч = 0 По ДополнительныеПараметры.ВнешнийМассив.ВГраница() Цикл + Ожидаем.Что(ДополнительныеПараметры.ВнешнийМассив[сч]).Равно(НачальныйМассив[сч] + 1); + КонецЦикла; +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьМинимальныйЭлемент() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + Результат = ПроцессорКоллекций.Минимум(); + Ожидаем.Что(Результат).Равно(0); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьМаксимальныйЭлемент() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + Результат = ПроцессорКоллекций.Максимум(); + Ожидаем.Что(Результат).Равно(3); +КонецПроцедуры + +Процедура ТестДолжен_ВыполнитьСокращение() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + + Результат = ПроцессорКоллекций.Сократить("Результат = Результат + Элемент", 0); + Ожидаем.Что(Результат).Равно(10); +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьМассив() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + НачальныйМассив = ПолучитьНачальныйМассив(); + + Результат = ПроцессорКоллекций.Получить(Тип("Массив")); + Ожидаем.Что(Результат).ИмеетТип("Массив").ИмеетДлину(НачальныйМассив.Количество()); + + Для сч = 0 По НачальныйМассив.ВГраница() Цикл + Ожидаем.Что(НачальныйМассив[сч]).Равно(Результат[сч]); + КонецЦикла; + +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьТаблицуЗначений() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + НачальныйМассив = ПолучитьНачальныйМассив(); + + Результат = ПроцессорКоллекций.Получить(Тип("ТаблицаЗначений")); + Ожидаем.Что(Результат).ИмеетТип("ТаблицаЗначений").ИмеетДлину(НачальныйМассив.Количество()); + + Для сч = 0 По НачальныйМассив.ВГраница() Цикл + Ожидаем.Что(НачальныйМассив[сч]).Равно(Результат[сч].Значение); + КонецЦикла; + +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьСписокЗначений() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + НачальныйМассив = ПолучитьНачальныйМассив(); + + Результат = ПроцессорКоллекций.Получить(Тип("СписокЗначений")); + Ожидаем.Что(Результат).ИмеетТип("СписокЗначений").ИмеетДлину(НачальныйМассив.Количество()); + + Для сч = 0 По НачальныйМассив.ВГраница() Цикл + Ожидаем.Что(НачальныйМассив[сч]).Равно(Результат[сч].Значение); + КонецЦикла; + +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьСтруктуру() + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + НачальныйМассив = ПолучитьНачальныйМассив(); + + Результат = ПроцессорКоллекций.Получить(Тип("Структура")); + Ожидаем.Что(Результат).ИмеетТип("Структура").ИмеетДлину(НачальныйМассив.Количество()); + + Для сч = 0 По НачальныйМассив.ВГраница() Цикл + Ожидаем.Что(НачальныйМассив[сч]).Равно(Результат[сч].Значение); + КонецЦикла; + +КонецПроцедуры + +Процедура ТестДолжен_ПолучитьСоответствие() + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + НачальныйМассив = ПолучитьНачальныйМассив(); + + Результат = ПроцессорКоллекций.Получить(Тип("Соответствие")); + Ожидаем.Что(Результат).ИмеетТип("Соответствие").ИмеетДлину(НачальныйМассив.Количество()); + + Для сч = 0 По НачальныйМассив.ВГраница() Цикл + Ожидаем.Что(НачальныйМассив[сч]).Равно(Результат[сч].Значение); + КонецЦикла; + +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьЛюбойСоответствует() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + + Результат = ПроцессорКоллекций.ЛюбойСоответствует("Результат = Элемент > 1"); + Ожидаем.Что(Результат).ЭтоИстина(); + + Результат = ПроцессорКоллекций.ЛюбойСоответствует("Результат = Элемент < 0"); + Ожидаем.Что(Результат).ЭтоЛожь(); +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьВсеСоответствуют() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + + Результат = ПроцессорКоллекций.ВсеСоответствуют("Результат = Элемент >= 0"); + Ожидаем.Что(Результат).ЭтоИстина(); + + Результат = ПроцессорКоллекций.ВсеСоответствуют("Результат = Элемент < 2"); + Ожидаем.Что(Результат).ЭтоЛожь(); +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьВсеНеСоответствуют() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + + Результат = ПроцессорКоллекций.ВсеНеСоответствуют("Результат = Элемент < 0"); + Ожидаем.Что(Результат).ЭтоИстина(); + + Результат = ПроцессорКоллекций.ВсеНеСоответствуют("Результат = Элемент > 2"); + Ожидаем.Что(Результат).ЭтоЛожь(); +КонецПроцедуры + +Процедура ТестДолжен_ПроверитьПробросДополнительныхПараметровВОповещениеДляКаждого() Экспорт + ПроцессорКоллекций = ПолучитьПроцессорКоллекций(); + + ДополнительныеПараметры = Новый Структура("ПроверяемыйПараметр"); + ФункцияОбработки = Новый ОписаниеОповещения( + "ФункцияОбработкиСПроверкойДопПараметров", + ЭтотОбъект, + ДополнительныеПараметры + ); + + // Ожидаем, что все варианты не выкинут исключения + ПроцессорКоллекций.ДляКаждого(ФункцияОбработки); + ПроцессорКоллекций.ДляКаждого("Результат = ДополнительныеПараметры.ПроверяемыйПараметр;", ДополнительныеПараметры); + + ФункцияОбработки = Новый ОписаниеОповещения( + "ФункцияОбработкиСПроверкойДопПараметров", + ЭтотОбъект + ); + ПроцессорКоллекций.ДляКаждого(ФункцияОбработки, ДополнительныеПараметры); + +КонецПроцедуры From 898683fb7053540b9816d57357185177286a255f Mon Sep 17 00:00:00 2001 From: Nikita Fedkin Date: Mon, 17 Oct 2022 20:00:44 +0400 Subject: [PATCH 6/6] 0.5.0 --- CHANGELOG.md | 4 ++++ packagedef | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9524661..42a2aff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.5.0 + +* Добавлена возможность отладки временных сценариев путем создания временных файлов под текст сценария. + ## 0.4.0 * Добавлен конвейерный метод Развернуть/flatMap diff --git a/packagedef b/packagedef index 12e19d5..7d2b395 100644 --- a/packagedef +++ b/packagedef @@ -1,6 +1,6 @@ Описание.Имя("fluent") - .Версия("0.4.0") + .Версия("0.5.0") .Описание("Библиотека для работы с коллекциями в ""текучем"" стиле") .Автор("Nikita Gryzlov") .АдресАвтора("nixel2007@gmail.com")