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

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

Арт.: 1421272

ЯДумаю.png
ЯДумаю.png

18000 руб.

4200 руб.

7500 руб.

 
 Обзор наиболее крупных и "вкусных" блоков функциональности

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

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

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

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

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

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

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

 

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

 

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

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

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

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

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

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

Фактически, это является реализацией на 1с MVC паттерна (MVC - ссылка вики) с предусмотренной защитой от наиболее распространенной ошибки применения паттерна - толстые контроллеры.

 

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

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

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

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

 

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

 

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

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

 
 Пример III-1. Работа с таблицами
 
 Конструкторы таблиц
// по другой таблице, включая результаты запроса, деревья и табличные части
ИсключаемыеКолонки = "Сумма";
Результат = Таблицы_ауф.ТаблицаЗначенийПоРезультатуЗапроса(РезультатЗапроса,, ИсключаемыеКолонки);

// по метаданным
ВидыРеквизитов = "Измерения,Ресурсы"; //если не заполнять, то сформируется по всем доступным полям физической таблицы
МетаОбъект = Метаданные.РегистрыНакопления.ОстаткиТоваров;
Результат = Таблицы_ауф.ТаблицаЗначенийПоМетаданным(МетаОбъект, ВидыРеквизитов);

// формирование кросс таблицы по ТЗ, ТЧ, данным формы
ИзмеренияСтрок = "Клиент,Договор";
ИзмерениеКолонок = "Организация";
Показатель = "Сумма";
Результат = Таблицы_ауф.КроссТаблица(Таблица, ИзмеренияСтрок, ИзмерениеКолонок, Показатель);

// формирование таблицы путём объединения других таблиц. Количество не ограничено.
// Работает как Объединить в запросе
Таблицы = МассивТаблицДляОбъединения();
ТолькоУникальныеЗаписи = Истина;
Результат = Таблицы_ауф.КроссТаблица(Таблицы , ТолькоУникальныеЗаписи);

 

 
 И много других полезных методов расширяющих возможности таблиц

 

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

 

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

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

 

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

 

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

 

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

 

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

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

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

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

 

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

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

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

 
 Пример замены по условию

 

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

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

 

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

 

 
 История релизов
 
 Релиз от 03.08.2024

 

 

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

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

Реализованная в библиотеке поддержка правильного MVC паттерна позволит реализовать гибкие программные решения.

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

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

Статистика:
Просмотры 15829
Загрузки 6
Рейтинг 18
Создание 16.04.21 16:00
Обновление 03.09.24 16:18
№ Публикации 1421272
Характеристики:
Теги
Рубрики Инструментарий разработчика
Кому Программист
Тип файла Конфигурация (md, cf)
Платформа Платформа 1С v8.3 ,
Платформа 1C v8.2 ,
Платформа 1С v8.1
Конфигурация Конфигурации 1cv8
Операционная система Не имеет значения
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Платные (руб)
Код открыт Да
1. sashocq 22.04.21 16:20 Сейчас в теме
Вообще непонятно для чего это.
Несколько функций, на разбор которых что они делают и для чего нужны нужно потратить времени не меньше, чем на написание.

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

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

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

Это о чём?

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

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

Может, конечно, это что-то крутое. Но из описания совершенно непонятно что это. + наверное кто-то поставил просто чтобы в закладки внести.
trest30; unknown181538; RustIG; sleemp; +4 Ответить
2. Техподдержка 22.04.21 16:46
(1)
Здравствуйте, благодарю, что не прошли мимо.

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

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

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

А ещё есть какая-то полная поставка аж за 15 тыщ
почему аж? Это окупится максимум за месяц, в зависимости от специфики работы.

И упоминается какая-то загадочная "динамическая подмена кода", что это?
- альтернатива динамическому обновлению.

Это о чём?
дело в том, что на практике не раз встречал различные кустарные методики подобные этой, но не обеспечивающие контроль версий, бесшовность и вообще беспроблемность при обычных обновлениях и.т.д.

Это для кого написано??? Для бухов или для разработчиков всё же?
вообще для программистов. С первых до последних слов. Программист является даже первым словом в данной публикации.

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

Если вы хотите больше иллюстраций, то в комментариях можете оставить задание, реализация которого вам не нравится и вы бы хотели посмотреть, как с данной задачей можно справиться, используя библиотеку.
3. nameless2987 07.04.23 17:21 Сейчас в теме
Здравствуйте а есть возможность увидеть больше подробностей по части динамической подмены кода? Пытался придумать как ей воспользоваться, но что-то из шаблонов кода мне не стало понятнее как этот функционал правильно и где применять возможно.

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

Еще вопрос как эту динамическую подмену применять правильно? Т.е. в теории мы должны пихать внешнюю обработку с измененным кодом для тестирования доработок и при этом нам не надо будет по 100 раз обновлять базу для тестов. Предположим я хочу подменить процедуру в модуле формы обработки или документа. Как это правильно делается?

Для других может быть тут очевидно применение библиотеки динамической подмены, но не для меня. Если сможете описать несколько хороших примеров живых, буду очень признателен, потому что лаконичность в описании это хорошо, но без живых примеров вообще непонятно как ее правильно применять
4. Техподдержка 10.04.23 10:20
(3) Примеры подмены модуля целиком

Подмена отдельной процедуры так же доступна, но придётся создавать отдельный идентификатор. Обычно это полное имя плюс имя процедуры.
Далее так же подменяете объект и вызываете нужную процедуру. Разница в том, что в подменяющем объекте будет только эта процедура. остальной код не будет затронут
Прикрепленные файлы:
5. nameless2987 10.04.23 16:16 Сейчас в теме
(4) 1. Подскажите пожалуйста в какие события нужно вклиниваться у исходного объекта для выполнения подмены?

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

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

2. Не очень понятно как мы должны достигать эффекта, что мы один раз сделали подмену и можем без динамического обновления делать эксперименты с кодом?

3. Еще если не ошибаюсь должна быть справка к этой библиотеке, только не смог ее нигде найти. Не подскажете куда помещена справка по этой библиотеке?

Вопрос живых примеров остается. Лучше один рабочий пример правильной и полезной подмены кода, чем обрывочная информация
6. Техподдержка 11.04.23 15:39
(5)
1. Оптимальнее подменять целиком сам объект из вызывающего его кода. Если хотите подменять форму "на лету", то ПриОткрытии выполняете проверку подмены, если подмена выполнена, то формируете параметры и открываете форму внешней обработки, эмулирующей подменяемый объект.

2. Не понял вопроса. Если один раз сделали - то обновление уже не нужно. Можно ещё что-то поправить и снова подменить - браться будет объект с актуальной версией. Причем, при равенстве версий запустится встроенный объект.

3. Поищу примеры подмены самой формы, если примеры с подменой объекта целиком не устраивают. Это не совсем удобная и стандартная практика, но если настаиваете, конечно покажу. Но нужно действительно поискать по репозиториям
7. nameless2987 11.04.23 16:20 Сейчас в теме
(6)
1. Так при создании на сервере мы не можем открыть форму другого объекта, это можно на клиенте только делать или мы параметры потом в событие при открытии передавать должны?

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

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

У меня видимо неправильное понимание работы библиотеки подмены, поэтому я не очень вообще понимаю ее применение и плюсы использования.

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

Потому что из текущей информации вообще непонятно где, как, когда применять эту подмену и какие плюсы по факту мы от этого получаем
8. Техподдержка 11.04.23 16:41
(7)

Посмотрите на примеры кода в (4)

Типовой кейс:
1. Протестировать какую-то функциональность можно только на определённом сервере, где развёрнуто тестовое окружение имитирующее прод.
2. Пишем код, и вставляем точки входа для подмены для того кода, который не смогли протестировать или в котором не уверены.
3. Обновляем базу. Тестим, смотрим ошибки. Если находим, то вносим правки. Если правки внесены в объект на который мы внесли точки входа, то подменяем его целиком и продолжаем тестирование до успешного завершения.
4. Не забываем соблюдать правило - правки вносятся сразу в репозиторий и оттуда выгружаются уже для замены.
5. На выходе без обновлений, получаем проверенную функциональность, которую смело можем запускать в прод.

Хардкорный кейс:
Всё то же самое, но это не тестовый сервер, а прод и мы рассчитываем исправить ошибки до того как они станут фатальными, причем без обновлений.
9. Техподдержка 11.04.23 16:45
(7)

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


Потому что у вас получится только заменить конкретный запускаемый интерактивно объект. Для более сложных случаев, когда используются разнообразные общие модули, другие объекты, много уровней вложенности итд. Здесь не получится просто взять и скопировать
10. RustIG 29.12.23 09:29 Сейчас в теме
(0) видеообзор выложите - иначе не понятно что вы разработали

Оставьте свое сообщение

См. также

Infostart Toolkit — Инструменты разработчика 1С 8.3

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

12000 руб.

Database Compression Tool (DCT) Универсальный инструмент сжатия, свертки и конвертации баз данных 1С

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

8400 руб.

OneDebugger - инструмент для отладки кода в 1С без использования конфигуратора

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

9360 руб.

Infostart PrintWizard (конструктор печатных форм)

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

22200 руб.

PowerTools: Инструменты администратора 1С 8.3

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

4800 3840 руб.

SALE! 20%

Infostart DataFormWizard: Управление данными и формами 1С 8.3

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

15000 руб.

Конструктор АРМ

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

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

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

5000 руб.

SWEET - Swagger для 1С. Инструмент для генерации OpenApi спецификаций

Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С. Представляет собой консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок д...

18000 руб.