Универсальная коллекция. Класс-надстройка

25.09.24

Разработка - Инструментарий разработчика

Несколько упакованных в один класс интерфейсов для обработки популярных универсальных коллекций. Для тех, кого раздражает отсутствие действительно единого интерфейса для универсальных коллекций.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Универсальная коллекция. Все среды
.cf 41,03Kb
0
0 Скачать (5 SM) Купить за 3 050 руб.
Сокращенная поставка. Обработка. Только сервер
.epf 18,64Kb
0
0 Скачать (3 SM) Купить за 2 450 руб.

Общий концепт

Класс задумывался, как сборник интерфейсов, позволяющих единообразно обрабатывать различные универсальные коллекции, не тратя время на особенности реализации каждой из них. В итоге, получилось как и было задумано; и дописывая последние на момент первого релиза методы и тесты, уже в полной мере пользовался новыми интерфейсами, что на последних этапах ускорило процесс разработки функциональности и тестов. То есть уже на этапе саморазработки, класс активно использовался и помогал в работе.

В ходе обсуждения, стало ясно, что без тонкого клиента впечатление будет неполным, поэтому добавлена поддержка тонкого и веб клиентов.

 

Описание

 
 Поддерживаемые коллекции
 
 Список интерфейсов
 
 Список всех методов интерфейсов со спецификацией

 

Планы развития

 - реализовать задуманные методы (список прямо в коде в секции "Описание"), если возникнет нужда или попросят пользователи.

 - реализовать подкласс для обработки таблиц, в том числе таблиц формы и динамических списков. остальные коллекции более менее хорошо живут в одном интерфейсе, но таблицам точно нужно расширение ассортимента методов.

 

Примеры кода

 

 
 Скопировать коллекцию (внутренний метод)
 
 Зафиксировать коллекцию (внутренний метод).
 
 Тест методов Итератора
 
 Получение уникальных значений коллекции (Такой метод есть в классе, просто пример)

 

Быстродействие и некоторые кейсы применения

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

Операции поиска без индексирования имеет смысл использовать при однократном поиске или небольших размерах коллекций или если эти коллекции Массив/Список значений на современных версиях платформы.

Операции множественного поиска рекомендуется использовать совместно с индексированием. Скорость поиска в данном случае вырастает на 1-3 порядка в зависимости от типа исходной коллекции.

То есть если использовать с умом, по ряду операций можно реально ускорить поиск, без увеличения объёма кода. Но в основном, назначение данного продукта это ускорение разработки прикладных решений, а не выполнения кода. Узкие места всегда можно расшить, в случае нужды, а вот написание кода, порой занимает много времени.

 
 Среднестатистический результат замеров методов поиска

 

Общее впечатления от использования:

Так как давно хотел, но не доходили руки, то впечатления сугубо положительные. Код становится меньше похож на фарш, а обработка разнотипных коллекций становится тривиальной задачей. таким образом алгоритмы без особых усилий становятся универсальными и повторно используемыми.

 

Архитектура решения:

 
 Это для пытливых, поэтому помещаю под кат

 

Технические требования

  • Не требует никаких библиотек для использования, полностью самодостаточный продукт
  • В коде ничего кроме СтрСоединить, кажется не используется, поэтому требования к версии платформы гуманные. Если нужна адаптация под раритетную версию платформы, пишите в комментариях - помогу.
  • Обработка не имеет графического интерфейса, за исключением формы, для проведения тестирования методов.

 

Варианты поставок и внедрения

Сокращенная поставка с поддержкой только сервера. В виде внешней обработки - загружается в конфигурацию и используется. Не забудьте выдать права пользователям на её использование.

ВАЖНО! Чисто серверная поставка больше развиваться не будет. Причины в разделе "Архитектура решения".

Поставка "УниверсальнаяКоллекция" реализована как микро-библиотека, содержащая реализацию класса. Поддерживается Сервер и толстые клиенты, тонкий и веб клиенты. 

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

  • Сравнить/Объединить
  • В ответ на предложение поставить на поддержку согласиться
  • В окне сравнения/объединения снять все флаги со свойств шапки (версия, поставщик, итд)
  • Дальше ничего не выбирать
  • При последующих обновлениях выбирать пункт - Поддержка\Обновить конфигурацию\Из файла
  • После первого обновления добавить роль из поставки в профили доступа. Если профили не используются, то дать права на использование обработки "УниверсальнаяКоллекция".

Если нужна поставка с техподдержкой и обновлениями - пишите в ЛС или в комментариях. Добавлю поставку за рубли.

 

Условия использования

Всё стандартно - пользуйтесь на своё усмотрение, но не отчуждайте неотчуждаемое право на авторство.

Проверено на следующих конфигурациях и релизах:

  • 1С:ERP Управление предприятием 2, релизы 2.5.19.63

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    151749    833    397    

841

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

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

9360 руб.

17.05.2024    20403    59    42    

106

Поиск данных Внешние источники данных Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Если вам нужно автоматически генерировать представления (view) к вашей базе данных 1С (есть две версии - для СУБД MS SQL Server и для PostgreSQL) по структуре метаданных 1С, то вам необходима данная обработка. Наш "Генератор View", другими словами - это коннектор к данным 1С для Power BI - незаменимый помощник для бизнес-аналитиков, работающих с базами 1С из Yandex Datalens/Power BI и т.д. Работает для обычных и управляемых форм под 1С 8.3

230000 руб.

31.07.2020    13507    13    48    

25

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

OneRPA - платформа роботизации рутинных операций, в основе которой лежит платформа 1С:Предприятие. Данная платформа позволяет использовать современные технологии роботизации, не теряя при этом наработки, которые были созданы в ходе автоматизации. При этом платформа роботизации сохраняет все преимущества платформы 1С: гибкость, кроссплатформенность, мобильный и Web доступ, простоту расширения. Ну и конечно же роботы создаются и сопровождаются простыми специалистами 1С, при этом не обязательно программистами. Self hosted версия

300000 руб.

03.03.2021    14193    12    27    

36

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Бизнес-аналитик Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:ERP. Управление холдингом Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 руб.

20.08.2024    3911    22    6    

36

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    14026    36    7    

69

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    9113    33    10    

56

SALE! %

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3840 руб.

14.01.2013    185487    1127    0    

899
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. alexey_kurdyukov 165 26.09.24 09:41 Сейчас в теме
А по какому признаку это "класс"?
2. Артано 786 26.09.24 10:46 Сейчас в теме
(1) Здесь использовалась аллюзия на ООП-подобные паттерны. И здесь эта обработка выполняет функции класса, в той степень в какой это возможно реализовать в 1с. Соблюдая принцип удобства применимости, конечно, ради которого, всё и затевалось.

Наследоваться без костылей он не сможет, хотя существует прототип класса-наследника для работы с таблицами, но в остальном основные принципы соблюдены:
- Данные и реализация класса закрыты от несанкционированного изменения. Есть лазейка для некоторых случаев применения, конечно, но проистекает из специфики конкретного класса.
- Реализация обеспечивает возможность обрабатывать разнотипные входящие данные единообразным способом.
- Про абстракцию, полагаю, нет нужды упоминать, достаточно было осмотреть перечень интерфейсов.
3. kalyaka 1099 26.09.24 15:44 Сейчас в теме
Тема интересная, хотелось бы более "жизненных" примеров использования :)
4. Артано 786 27.09.24 00:55 Сейчас в теме
(3) В личной практике, это в основном алгоритмы, когда нужно обработать входящий набор произвольных данных не заморачиваясь над тем как именно эти данные хранятся и не заморачивая фронт необходимостью подготовить данные в определенном формате. То есть данные в конфе частенько приходится конвертировать, чтобы отдать какому-то алгоритму. Разработчик этого алгоритма вынужден или чертыхаться с разными типами коллекций или ограничивать форматы входящих данных. С этим классом один и тот же алгоритм может обрабатывать коллекции без предварительной конвертации. Примеры приведены в описании.

Вторая фича, это индексирование и ускорение поиска. Потребность в ней появляется реже, но преимущества те же: без необходимости как-то самому готовить данные, можно одинаково быстро искать данные в разного типа коллекциях. Реализовал это опираясь на прошлый опыт и понимаю, что необходимость в этом возникает намного реже, ибо поиск это один из множества универсальных алгоритмов, о которых речь шла выше.

Третья фича - своего рода синтаксический сахар, когда обычные операции с заранее известным типом коллекции становятся более удобными. Это и поиск данных и итерация в структурах/коллекциях, и менее экзотические кейсы (пример ниже):

Заполнение соответствия и получение списка его ключей для получения списка уникальных значений массива. Ничего сверхестественного, просто сахар.
        // Получение уникальных значений массива
        УникальныеЗначения = Обработки.УниверсальнаяКоллекция_бук.Создать();
        УникальныеЗначения.Инициализировать("Соответствие");
        Для Каждого ТекЗначение Из ВходящийМассив Цикл
                УникальныеЗначения.Вставить(ТекЗначение, Истина);
        КонецЦикла;	
        Результат = УникальныеЗначения.ВыгрузитьКлючи();
Показать


Но даже на этом простом примере, легко предположить, что вместо массива может быть любая другая коллекция (кроме Таблиц) и алгоритм станет больше лишь на пару строк:

        // Получение уникальных значений коллекции (Массив,СписокЗначений,Структура,Соответствие, фикс. коллекции)
        КоллекцияДанных = Обработки.УниверсальнаяКоллекция_бук.Создать();
        КоллекцияДанных.Инициализировать(ВходящиеДанные);       
        УникальныеЗначения = Обработки.УниверсальнаяКоллекция_бук.Создать();
        УникальныеЗначения.Инициализировать("Соответствие");
        Пока КоллекцияДанных.Следующий() Цикл
                УникальныеЗначения.Вставить(КоллекцияДанных.Значение(), Истина);
        КонецЦикла;	
        Результат = УникальныеЗначения.ВыгрузитьКлючи();
Показать
5. seperblunt 27.09.24 07:22 Сейчас в теме
получается только на сервере можно применит? или чего то не понял
6. Артано 786 27.09.24 07:29 Сейчас в теме
(5) да, только на сервере и в толстом клиенте. Объект типа ОбработкаОбъект нельзя инициализировать на тонких клиентах. Поэтому или использую на сервере или обхожусь статическими аналогами, если тянуть данные с клиента нет возможности/смысла итд.

То есть любой из этих методов будет работать на тонком клиенте, но сама обработка, в которую упакованы методы так не умеет.
7. amiralnar 9 27.09.24 08:28 Сейчас в теме
Идея интересная. А может концепция обработки быть переосмыслена для работы в тонком клиенте, например через подсистему общих модулей, по аналогии с ОбщегоНазначения|Клиент|Сервер|ВызовСервера ?
8. Артано 786 27.09.24 08:45 Сейчас в теме
(7) Оно в комплексных решениях так и реализовано. И даже если присмотреться к "техническим" модулям той же БСП, то большая часть того, что представлено в данном продукте уже есть в статическом исполнении. Но при статическом исполнении методов теряется куча фич, которые доступны из объекта:
- Не будет итератора. А лично для меня это одна из главных фич данной обработке
- Не будет индексированного поиска по разным коллекциям

А то что будет, будет завязано на общие модули еще имеет некоторый недостаток. Вот например как будет выглядеть добавление неких значений в коллекцию из структуры:

Для Каждого Элемент Из СтруктураИсточник Цикл
    Если НекоеУсловие Тогда
        РаботаСКоллекциямиИмениНуралиеваБорисаГеоргевичаКлиентСервер­.Добавить(Элемент.Значение, КоллекцияПриемник);
    КонецЕсли;
КонецЦикла;


Или так (если неизвестно заранее, что источник структура):

Для Каждого Элемент Из КоллекцияИсточник Цикл	
    Если НекоеУсловие Тогда
        Значение = РаботаСКоллекциямиИмениНуралиеваБорисаГеоргевичаКлиентСервер­.ЗначениеЭлементаКоллекции(Элемент, КоллекцияИсточник); 
        РаботаСКоллекциямиИмениНуралиеваБорисаГеоргевичаКлиентСервер­.Добавить(Значение, КоллекцияПриемник);
    КонецЕсли;
КонецЦикла;


В общем, мрак и беспросветность на клиенте будет. Были бы сущности типа классов в других языках программирования, не было бы таких проблем. Технически это несложно реализовать, наверное, но сейчас платформа не позволяет развернуться во всю ширину плеч.

Но, повторюсь. Если интересно, вместо обработки, может быть поставка комплекта общих модулей типа:
Коллекции
КоллекцииКлиентСервер
КоллекцииВызовСервера

с методами реализующими большую часть функциональности обработки
amiralnar; +1 Ответить
9. ktb 629 27.09.24 14:22 Сейчас в теме
(8) Для использования на клиенте можно просто в форме обработки все реализовать.
Чтобы решить делать это дублированием кода или вызовом "серверных" методов нужно погонять тесты на производительность.
Артано; +1 Ответить
10. Артано 786 27.09.24 14:24 Сейчас в теме
(9) Думал над этим. Сделать общую форму. Но боюсь там быстродействие будет хромать, надо потестить. Костыль конечно, будет знатный, и без контекстной подсказки, но всё же лучше чем общие модули
ktb; amiralnar; +2 Ответить
12. ktb 629 28.09.24 06:49 Сейчас в теме
(10) Да можно прям форму обработки и сделать. Единственная "неприятность" это не очень красивый код создания экземпляра объекта (формы), вот тут как раз можно сделать функцию в общем модуле. Ну или "по стандарту "Коллекции", "КоллекцииКлиент", "КоллекцииВызовСервера" и т.п. :-)
И можно еще сделать текучий (fluent) интерфейс:
        УникальныеЗначения = Обработки.УниверсальнаяКоллекция_бук.Создать();
        Результат = УникальныеЗначения.Инициализировать("Соответствие")
                                      .Вставить("Ключ1", Истина)
                                      .Вставить("Ключ2", Истина)
                                      .Вставить("Ключ3", Истина)
                                      .Сортировать()
                                      .ВыгрузитьКлючи();
Показать
Артано; +1 Ответить
13. Артано 786 28.09.24 09:20 Сейчас в теме
(12) Проверил - накладные расходы ни инициализацию непосредственно формы и на каждый вызов ещё методов , довольно невелики - единицы миллисекунд. Учитывая, что сверхбольшие коллекции на клиенте встречаются редко, наверное, приемлемо. Но в любом случае реализация на форме потребует чего-то большего чем копирование кода на форму, но теперь я точно вижу техническую реализацию перед внутренним взором. Спасибо!
11. bulpi 217 27.09.24 20:21 Сейчас в теме
Неважно, пригодится, или нет. Просто красиво! Плюсую!
14. Артано 786 28.09.24 19:24 Сейчас в теме
(12) Возрадуйтесь граждане. Теперь есть поддержка тонкого клиента.
VAAngelov; +1 Ответить
Оставьте свое сообщение