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

Публикация № 1421272 16.04.21

Приемы и методы разработки - Универсальные функции

Программист - это человек, непрерывно принимающий решения. Написание кода не является процессом принятия решения - это всего лишь трансляция ваших желаний. Если вас периодически тяготит написание сотен строк кода ради решения задач, то прошу обратить внимание. Данный продукт позволит существенно сократить время на рутинные операции при разработке. За счет библиотечной реализации сокращается объём кода, а его читаемость повышается. К библиотеке прилагается документация API и шаблоны кода для наиболее популярных методов.
 
 Обзор наиболее крупных и "вкусных" блоков функциональности

 I. Запросы:
1. Существующая функциональность:

а. Универсальные, легко переопределяемые запросы к физическим и виртуальным таблицам.
б. Конструктор параметров запросов. Отборы, поля, сортировки, итоги и др. Возможность слияния и/или дополнения нескольких параметров (например, дефолтные и пользовательские).
в. Автогенерируемые запросы. Декларативные запросы к любым физическим и виртуальным таблицам с любыми отборами.
г. Автогенерируемые запросы. Возможность запроса по нескольким таблицам одного класса (документы, справочники и.т.п.).
д. Повторное использование единожды написанных запросов. Конструктор позволяющий получить результат запроса или сам запрос на основании существующего шаблона запроса и переданных параметров.
е. Возможность построения единого интерфейса обращения к данным, с использованием прокси поддерживающего автогененируемые, перепределенные разработчиком и произвольные запросы через один и тот же интерфейс. То есть обращение к данным всегда осуществляется через одну и ту же точку входа, будь то поиск документа, получение стандартной или переопределенной выборки из таблицы БД или абсолютно произвольного запроса по его имени.
2. Планы развития (уже есть решения в тестовых ветках, но не было большой потребности в доведении до релиза):
а. Пакетные запросы.
б. Запрос-объединение и/или пакетный запрос с независимыми наборами таблиц и параметров.

II. Расширение классов ДокументОбъект, справочникОбъект, ПВХОбъект и частично их менеджеров.
1. Существующая функциональность:
а. Улучшенный поиск взамен функций НайтиПо... Поддерживает сложные отборы.
б. Улучшенный поиск взамен функции Выбрать(). Поддерживает более сложные отборы, позволяет более тонко настраивать результат запроса. Для деталей см. параграф I
в. Новый конструктор для инициализации новых объектов как при создании, так и по ссылке. При создании сразу можно передать данные заполнения.
г. Упрощенный интерфейс для работы с БД. Функции Провести(), Распровести(), ПометитьНаУдаление(), СнятьПометкуНаУдаление() возвратом флага успеха/неуспеха операции
д. Логирование ошибок. Возможность переопределения формата записи ошибки в ЖР (при инициализации объекта). Также, текст исключения может быть получен для иных операций. 
е. Безопасная запись с соблюдением правил работы с транзакций. Функциональность по умолчанию работает так как заложено платформой, но предусмотрено гибкое переопределение поведения объекта в случае ошибок. Например не бросать исключение если запись не удалась, а пробросить информацию об исключении в вызывающий код или не регистрировать ошибку в ЖР, а лишь сообщить о ней пользователю.
ё. Расширение событийной модели. Добавлена возможность обработки событий: ДоНачалаТранзакции, ПослеФиксацииТранзакции, ПослеОтменыТранзакции.
ж. Мелкие удобства типа встроенной проверки наличия реквизита в объекте и изначально заполненного реквизита ссылка сразу после инициализации объекта.

III. Класс менеджер для упрощенной работы с внешними обработчиками.
а. Параметризуемая инициализация с учетом опций безопасного режима и защиты от опасных действий. 
б. Ведение списка инициализированных объектов
в. Выборочная или полная деструкция инициализированных менеджером объектов.

IV. Движение по регистрам.
1. Существующая функциональность:
а. Движение по регистрам накопления без описания движений в документе. В обработке проведения вызывается функция ДвиженияПоРегистрам, куда передаются метаданные регистра, таблица движений (как правило это выгрузка из ТЧ).
б. Движения можно выполнять в режиме эмуляции. В этом случае движения не будут записаны, а вернутся в виде таблицы значений.
в. Автоматически накладывается управляемая блокировка на регистр. Если блокировка недоступна, то накладывается автоматическая блокировка средствами платформы.
г. Для регистров остатков предусмотрен подбор и контроль отрицательных остатков по набору измерений.
д. При необходимости, алгоритм подбора остатков может быть переопределен для выбранных регистров. В данном случае, специализированный класс-расширение для менеджера регистра накопления, выполнит не собственный универсальный метод, а запросит переопределенный регистр и вернет полученный результат. Подробнее см. параграф V.

V. Расширение классов РегистрНакопленияМенеджер и РегистрСведенийМенеджер.
1. Существующая функциональность:
а. Возможность получить срезы данных со сложным отбором, как на определенную дату/момент времени, так и актуальные.
б. Возможность выполнения движений по регистру с подбором остатков при списании (для РН с видом остатки). Подбор производится по классической схеме с контролем остатков до движения, при этом можно переопределить поведение выбранного регистра и отключить контроль. При подборе автоматически подбираются измерения и ресурсы.
г. Возможность для гибкого переопределения. Может быть переопределено всё - от текста запроса остатков (по-умолчанию генерится автоматически), до набора измерений и параметров списания ресурсов. Переопределение осуществляется созданием соответствующего API в переопределяемом регистре. Интерфейс создаётся через прилагаемый к библиотеке каталог шаблонов без написания кода вручную.
2. Планы развития (уже есть решения в тестовых ветках, но не было большой потребности в доведении до релиза):
а. Добавить поддержку прочих регистров, по которым могут выполняться движения. Приоритет реализации: регистры бухгалтерии, регистры расчета.

VI Динамическая подмена кода.
1. Существующая функциональность:
а. Возможность подмены модулей объектов, менеджера и и.т.д. Как целиком так и фрагментарно (здесь потребуются точки входа в отдельных методах)
б. Подмена реализуется через создание точек входа в часто изменяемых участках кода. При первом обращении выполняется правка, создание точки входа и обновление. При повторном обращении код подменяется без обновления.
в. В случае получения отчетов/обработок через единый метод подсистемы, точки входа не нужны.
г. При следующем (плановом) обновлении, замененный код, снова будет выполняться из "родного" источника, а не из внешнего обработчиками. То есть не нужно беспокоиться о том, когда и в каких объёмах будет обновление. Достаточно, чтобы велся версионный контроль в репозитории конфигурации. Принцип работы подсистемы - "подменил и забыл", по аналогии с системами управляемого вооружения класса "выстрелил и забыл".

VII Расширение класса таблиц. Преимущественно ТЗ, но в ряде случаев поддерживаются все возможные таблицы от дерева значений до результата запроса и табличной части.
1. Существующая функциональность:
а. Конструкторы для новой пустой ТЗ по результату запроса и по метаданным.
б. Конструктор кросс-таблицы из обычной таблицы с возможностью выбора списка измерений строк и целевого показателя
в. Сложение/вычитание таблиц по аналогии со сложением и вычитанием матриц, но с поддержкой матриц разного размера, где матрицы приводятся к единому размеру виртуально по набору измерений.
г. Добавление недостающих и расширение несуществующих методов как то: отбор по сложному отбору, дополнение таблицы не только строками но и колонками, итоги по отбору, удаление по отбору, нумерация, индексация, конвертация в массив массивов и обратно, вывод в табличный документ и др.

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

Библиотека позволяет решать комплекс проблем за счет нескольких стратегических решений, которые вы можете принять и осуществить с использованием библиотеки:

I Стандартизация и сокращение объема кода. Повышение его предсказуемости и безопасности

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

- За счет сокращения объёма кода, который необходимо написать

- За счет сокращения объёма кода, который необходимо перечитать хотя бы раз (в реальной разработке бывает намного чаще)

- За счет стандартизации методологии разработки, что сокращает число обидных ошибок, когда забыл обработать исключение или неверно откатил транзакцию.

 
 Пример I-1. Сравнение способов записи группы объектов.

 

 
 Пример I-2. Движения по любому регистру накопления для любого документа в 1-2 строки

 

II Сокращение числа зависимостей между интерфейсами и архитектурой БД. 

Отказ от десятков, а то и сотен зависимостей между кодом и архитектурой, за счет повторного использования текстов запроса или их автоматической генерации. Это также позволяет экономить на поддержке текстов запросов.

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

В руках опытного специалиста, библиотека станет надежным помощником в деле изоляции интерфейсов от архитектуры БД. Как следствие - повышение гибкости программы и облегчение её сопровождения.

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

Нет необходимости собирать тексты запроса программно или делать костыли типа Не &ОтборПоОрганизации Или Организация = &Организация. Запросы параметризуются как по вашим настройкам, так и автоматически.

 

 
 Пример II-1. Запросы данных

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

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

 
 Решение 1. Запрос данных из физической таблицы (справочники, документы, регистры и.т.д.)
 
 Решение 2. Запрос данных из нескольких физических таблиц одного класса (несколько документов или справочников и.т.д.)
 
 Решение 3. Запрос данных из виртуальной таблицы (остатки, обороты, срез последних и.т.д.)
 
 Решение 4. Запрос данных с повторным использованием текста запроса
 
 Решение 5. Поиск ссылок по отбору

 

 
 Пример II-2. Регистрация исключений

 

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

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

 
 Пример III-1. Работа с таблицами
 
 Пример III-2. Работа с массивами

 

А также множество других функций типа преобразования числа из десятичной системы счисления и обратно с возможностью использования собственного набора кодовых символов не ограничиваясь разрядностью 8 16 или другой.

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

 

IV Облегчение тестирования и отказ от динамического обновления.

 

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

 

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

 

Подменить можно отдельную функцию, фрагмент кода, целый модуль (общий модуль, объекта, менеджера и.т.д.), обработку/отчет целиком, а при некоторых ограничениях и документ/справочник и другие ссылочные типы.

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

При этом обеспечивается версионная целостность данных и плановое обновление, когда оно всё таки произойдет, не сломает внеочередные заплатки, а дополнит их.

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

 

ВАЖНО! Позитивные свойства данной системы обеспечиваются версионированием данных и централизованной разработкой. Если данный механизм будет использоваться бессистемно в рамках парадигмы "хренак-хренак и в продакшн", то данная подсистема станет отличным способом отстрелить себе ногу.

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

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

 

V Совместимость

 
 Старые версии платформы
 
 Использование модальности

 

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

Причины купить

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

Сравнение версий

Библиотека никогда не планировалась и не позиционировалась как замена БСП. В некоторых моментах они могут пересекаться в функциональности, но в целом у них разное назначение. БСП содержит в себе набор готовой функциональности, снабженнной служебным кодом, который тоже можно использовать. Библиотека UFL содержит в себе шаблоны-кирпичики из которых вы можете создавать собственные решения. Помимо этого в библиотеку заложена определенная идеология архитектуры с изоляцией данных, кода и пользовательских интерфейсов друг от друга. Компактность библиотеки позволяет разворачивать небольшие решения не беспокоясь об объёме и быстродействии базы данных.

Гарантия возврата денег

ООО "Инфостарт" гарантирует Вам 100% возврат оплаты, если программа не соответствует заявленному функционалу из описания. Деньги можно вернуть в полном объеме, если вы заявите об этом в течение 14-ти дней со дня поступления денег на наш счет.

Программа настолько проверена в работе, что мы с полной уверенностью можем дать такую гарантию. Мы хотим, чтобы все наши покупатели оставались довольны покупкой.

Для возврата оплаты просто свяжитесь с нами.

Специальные предложения

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

Половина функций работы с массивами я сразу вижу, что они уже есть в БСП.

А ещё есть какая-то полная поставка аж за 15 тыщ. И упоминается какая-то загадочная "динамическая подмена кода", что это?

Данная подсистема позволяет обеспечить простой и прозрачный способ отказа от динамических обновлений без отказа от контроля версий и централизованной разработки

Это о чём?

Позитивные свойства данной системы обеспечиваются версионированием данных и централизованной разработкой

Это для кого написано??? Для бухов или для разработчиков всё же?

Может, конечно, это что-то крутое. Но из описания совершенно непонятно что это. + наверное кто-то поставил просто чтобы в закладки внести.
Оставьте свое сообщение

См. также

SALE! %

PowerTools Промо

Универсальные обработки Инструменты администратора БД Поиск данных Распределенная БД (УРИБ, УРБД) Сервисные утилиты Обработка документов Обработка справочников Чистка данных Консоль запросов Прочие инструменты разработчика v8 v8::УФ 1cv8.cf Россия Платные (руб)

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

2400 1320 руб.

14.01.2013    139653    732    0    

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

Прочие инструменты разработчика v8 1cv8.cf Платные (руб)

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

3000 руб.

14.10.2021    1581    0    0    

Работа с Конструктором запроса и с кодом и его выполнение в режиме 1С: Предприятие, с замером времени выполнения (обычные формы)

Прочие инструменты разработчика Практика программирования v8 Платформа 1C v8.2 1cv8.cf Платные (руб)

С помощью этой обработки теперь можно выполнять код не только в конфигураторе. Код в режиме Предприятия имеет вид как в конфигураторе. Есть работа с запросами.

1000 руб.

01.04.2021    2913    1    2    

Infostart Toolkit

Консоль запросов Прочие инструменты разработчика v8 v8::УФ v8::Запросы v8::СКД 1cv8.cf Платные (руб)

Простые и удобные инструменты: Консоль запросов, СКД, Редактор объекта, Поиск ссылок и другие. Редактор запросов и кода с раскраской и контекстной подсказкой. Улучшенный конструктор тонкого клиента и др.

8000 руб.

02.09.2020    40663    138    222    

Коннектор: удобный HTTP-клиент для 1С:Предприятие 8

Внешние источники данных WEB Универсальные функции Инструментарий разработчика Универсальные обработки Практика программирования v8 1cv8.cf Платные (руб)

Коннектор - библиотека для работы с HTTP запросами. Библиотека берет на себя всю рутину работы с HTTP запросами. Буквально в одну строку можно получать данные, отправлять, не заботясь о необходимости конструирования URL, кодирования данных и т.п.

2000 руб.

31.01.2019    82651    521    213    

Многопоточность. Универсальный «Менеджер потоков» 2.1

HighLoad оптимизация Инструментарий разработчика Математика и алгоритмы Универсальные функции v8 1cv8.cf Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    82583    194    80    

Подсистема "Конструктор правил заполнения объектов" на основе СКД (для обычного или управляемого приложения).

Прочие инструменты разработчика v8::УФ v8::СКД 1cv8.cf Платные (руб)

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

6000 руб.

29.03.2017    18547    5    16