TurboBL
Разработка - Разработка внешних компонент
Бесплатные
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Узнавайте о новых бесплатных решениях в нашей телеграм-группе Инфостарт БЕСПЛАТНО
| Наименование | Скачано | Бесплатно |
|---|---|---|
|
TurboBL
.zip 35,81Kb
1605
|
1605 | Скачать бесплатно |
|
Версия 1.1.0.5
.zip 39,05Kb
861
|
861 | Скачать бесплатно |
|
Версия 1.1.0.6
.zip 39,13Kb
3610
|
3610 | Скачать бесплатно |
Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Версия: 1.1.0.6
КРАТКИЙ ЭКСКУРС В МЕХАНИЗМ ВЫЗОВА МЕТОДОВ.
ДЛЯ ВСЕХ
Что происходит внутри 1С, когда мы пишем спр.ТекущийЭлемент()?
1С преобразует имя метода ТекущийЭлемент в соответствующий ему
номер, и вызывает метод объекта по номеру.
НО, клинические исследования показали, что для ЛЮБОГО объекта 1С
используется один алгоритм такого преобразования, реализованный "В ЛОБ",
и котрый заключатся в простом последовательном переборе всех имен методов
объекта и сравнении их с искомым.
Соответственно, чем больше номер метода, тем большее время занимает такой поиск.
Например, для того же "ТекущийЭлемент" перед реальным вызовом функции происходит
перебор 88 названий методов.
Аналогично и для свойств объектов.
ДЛЯ ЗНАКОМЫХ С "RAINBOW"
Как известно, для поиска номера метода применяется
virtual int CBLContext::FindMethod(const char* name);
Как оказалось, НИ В ОДНОМ из объектов 1С данный метод не
переопределен. Перехват вызова функций различных объектов
показал лень и мягко говоря, не вполне компетентность людей,
писавших этот код.
Вобщем, когда вызывается FindMethod, из него вызываются:
GetNMethods(), GetMethodName(i,0), GetMethodName(i,1)
т.е. FindMethod работает примерно так:
for(int i=0;i<GetNMethods();i++)
{
if(!stricmp(name,GetMethodName(i,0))
return i;
if(!stricmp(name,GetMethodName(i,1))
return i;
}
return -1;
Понятно, хотелось добиться универсальности и простоты, что и достигнуто.
Но при этом:
Некомпетентность: GetNMethods можно вынести из цикла.
Лень: не зря же FindMethod виртуальная, почему же она
не переопределена ни в одном из наследуемых классов для более
оптимального поиска?
Аналогичная ситуация и с FindProp.
ЦЕЛЬ КОМПОНЕНТЫ
Дабы устранить эту досадную оплошность при поиске методов и свойств,
мною и была создана данная ВК. Суть ее работы в следующем:
оптимизация алгоритма преобразования имен методов/свойств в их номера.
Попутно сделана возможность обращаться к методам и переменным модулей
ГрупповыхКонтекстов.
КАК ИСПОЛЬЗОВАТЬ
Процедура ПриНачалеРаботыСистемы()
ЗагрузитьВнешнююКомпоненту("turbobl.dll");
Вот и все.
Более никаких изменений в существующем коде конфигурации не требуется.
При загрузке компонента берет на себя всю работу по поиску номеров
методов и свойств объектов 1С.
Компонента использует "хитрый" способ загрузки, позволяющий ей загружаться
без регистрации в реестре, те ВСЕГДА и для любого пользователя.
ВЫЗОВ МЕТОДОВ МОДУЛЕЙ ГРУППОВЫХ КОНТЕКСТОВ
Да!!! Свершилось!!!
Теперь можно через контекст обратится к методам и переменным модуля контекста.
Например:
конт=0;
ОткрытьФорму("Справочник.Товары",конт);
конт.Печать(); //где Печать() - процедура в модуле ФормыСписка справочника.
//где Печать() - процедура в модуле ФормыСписка справочника.
или например:
// в модуле проведения дока Процедура
// в модуле проведения дока
Процедура ЭтоДокСТоваром()
возврат 1;
КонецПроцедуры;
Процедура ОбработкаПроведения(парам)
глНекаяГлобФункция(Контекст);
....
// В ГМ:
Процедура глНекаяГлобФункция(Конт)
Если Конт.ЭтоДокСТоваром()=1
.......
ОБЪЕКТ "УскорительГК"
Объект "УскорительГК" был предназначен для возможности обращения
через контекст к методам и переменным ВНЕШНИХ ОТЧЕТОВ.
Теперь это делается автоматически, и его метод "Ускорить" ничего не делает.
Теперь этот объект можно использовать для проверки того, что TurboBL загружена:
Попытка
СоздатьОбъект("УскорительГК");
Загружена=1;
Исключение
Загружена=0;
КонецПопытки;
Объект "Addin.TurboBL" теперь несуществует, и его создание нельзя использовать
для проверки загруженности компоненты.
ПРИМЕРЫ.
В поставку входит небольшая демобаза, для демонстрации работы компоненты.
Скопируйте turbobl.dll в bin 1С, и откройте базу.
Понажимайте на кнопочки, запускающие разные тесты.
В колонке "До" будет отображатся время выполнения (мсек) каждого теста.
Нажмите кнопку "Загрузить TurboBL".
Снова позапускайте тесты.
В колонке "После" отобразится новое время выполнения каждого теста.
Почуствуйте разницу!
СОВМЕСТИМОСТЬ С 1С++
Функционал компоненты включен в состав 1С++, поэтому применять их совместно нет смысла.
БЛАГОДАРНОСТИ
Выражаю глубокую признательность Дмитрию Гусеву aka Deb,
за плодотворное сотрудничество и помощь в тестировании компоненты.
Алексею Федорову aka АЛьФ, за сотрудничество и подсказки по правильной работе таблиц.
PS
Данная разработка не придерживается технологии Внешних Компонент.
"1С-Совместимо" нет и не будет.
Используйте на свой страх и риск.
ИСТОРИЯ ВЕРСИЙ
Версия 1.1.0.1
- Радикально упрощено использование компоненты.
- Добавлена возможность вызова методов модулей через контекст.
- Добавлена проверка установленных компонент при загрузке.
- Исправлены мелкие баги.
Версия 1.1.0.2
- Исправлена ошибка потери возвращаемого значения из функции, вызываемой через Контекст
- Исправлена ошибка, приводящая в определенных ситуациях к вылету 1С
Версия 1.1.0.3
- Изменен способ загрузки ВК, что уменьшило ее размер и позволило ей загружаться всегда.
- Добавлено автоматическое ускорение контекстов внешних отчетов.
- Исправлено обращение к шаблонам таблиц в форме при вызове функций модуля через контекст
- Исправлены мелкие баги.
Версия 1.1.0.4
- Исправлена ошибка при выполнении запросов
Версия 1.1.0.5
- Компонента доработана для работы на многопроцессорных системах и процессорах с HT.
- Компонента доработана для работы со включенным DEP.
- Оптимизировано обращение к полям ТаблицыЗначений.
Версия 1.1.0.6
- Исправлена работа при использовании #ЗагрузитьИзФайла.
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Разработка внешних компонент Разработчик 1С:Предприятие 7.7 1С:Предприятие 8 Абонемент ($m)
PDFConverter — высокопроизводительная нативная компонента для работы с PDF-документами в среде 1С:Предприятие 8.
10 стартмани
20.03.2026 1758 19 v_peroff 8
Разработка внешних компонент Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)
Внешняя компонента позволяет в среде 1С 7.7 работать с бинарными файлами: анализировать их, создавать новые, копировать, корректировать и комбинировать. Имеются функции сжатия и разжатия строк и бинарных данных.
1 стартмани
10.06.2025 2834 1 mdbruyfn 0
Разработка внешних компонент Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)
Внешняя компонента позволяет в среде 1С 7.7 работать с ZIP-архивами: создавать архивы, читать их и разархивировать.
1 стартмани
29.05.2025 2921 3 mdbruyfn 2
Разработка внешних компонент Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)
Компонента позволяет в среде 1С 7.7 генерировать двухмерный QR код из любого текста длиною до 1800 символов и сохранять его в файле BMP формата. Из файла он может быть загружен в объект 1С "Картинка".
1 стартмани
29.01.2025 3400 6 mdbruyfn 4
Разработка внешних компонент Системный администратор Разработчик 1С:Предприятие 7.7 1С:Предприятие 8 Россия Платные (руб)
Аддон "Структура Обмена" (ExchangeStruc) - это компонента, которая обеспечивает доступ к разделяемым процессом структурам, аналогичным структурам 1С. Обеспечивает прозрачную передачу данных примитивных типов, в том числе Двоичных данных, в режиме Реального времени между разными контекстами (формами) или потоками одного процесса. В перспективе функционал будет расширен для обмена между процессами, даже разных версий платформ. Совместим с версиями Windows рабочих станций и серверов, с платформами 1С разных версий и релизов в режиме Native начиная с 8.2, и в режиме COM начиная с версий 7.7. По скорости чтения и записи лишь немногим уступает стандартной структуре 1С. НОВОЕ: Добавлен функционал регистрации компоненты COM в качестве OLE Auto (COMОбъект) для поддержки её работы в серверах старых версий 1С: 8.0 и 8.1, где работа с компонентами исключена. Теперь можно коммуникацию с Фоновыми заданиями на этих версиях проводить.
7320 руб.
19.04.2023 7314 1 0
Разработка внешних компонент WEB-интеграция Разработчик 1С:Предприятие 7.7 1C77 Платные (руб)
Компонента HttpSrv7 позволяет создавать веб-сервисы в среде 1С 7.7 и, используя файлы HTML, несложные веб-сайты. С помощью нее можно обеспечить доступ к данным 1С 7.7 из браузера. Дополнительно используя компоненту HTTP_Async можно наладить обмен данными между удаленными информационными базами по протоколам HTTP, HTTPS и WebSocket. С помощью компоненты HttpSrv7 используя протокол WebSocket можно создавать и поддерживать работу нескольких чатов. С помощью компоненты HTTP_Async можно асинхронно отправлять HTTP-запросы к сайтам, веб-сервисам (в т.ч. к HTTPSrv7) и обрабатывать ответы по мере их поступления. Компонента GISMT в дополнение к HTTP_Async имеет функцию цифровой подписи в формате Base64 и, таким образом, имеет все возможности для работы с API ГИС МТ "Честный знак" непосредственно из среды 1С 7.7.
6100 руб.
27.05.2022 13637 2 20
Разработка внешних компонент Разработчик 1С:Предприятие 7.7 Платные (руб)
Компонента для выбора значения из больших списков значений.
5084 руб.
02.12.2021 8341 3 19
Разработка внешних компонент Файловый обмен (TXT, XML, DBF), FTP Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)
Эта внешняя компонента Base64.dll предназначена для платформы 1С версии 7.7. Используется для преобразования файлов из/в кодировку Base64 из встроенного языка 1С Предприятие. Компонента тестировалась на базе конфигурации Бухгалтерский учет для Казахстана, редакции 7.70.257.
10 стартмани
06.04.2021 13296 15 softmaker 18
Особенно порадовало, что можно через контекст обратится к методам и переменным модуля контекста.
Получается весьма прикольно.
У вас сказано, что "Функционал компоненты включен в состав 1С++", тогда вопрос:
Где ее включить в 1С++?
ЗагрузитьВнешнююКомпоненту("1cpp.dll")
Но пока в 1С++ более старая версия, в которой несовсем правильно работают таблицы
при вызове методов модуля через контекст, и нет автоускорения контекстов внешних отчетов.
- Скажите, это правда что вы виграли в спортлото "Волгу"?
- Правда, но не "Волгу", а 1000 руб, и не в Спортлото, а в преферанс, и не выиграл, а проиграл...
;-)
> Некомпетентность: GetNMethods можно вынести из цикла
Уверен на 90%, что это НЕ функция, как таковая, а on-line определение, типа:
class BBB
{ void *ptr;
...
public:
int GetNMethods(int i) { return ptr+i; }
}
Поэтому, выносить его нет смысла.
> Лень: не зря же FindMethod виртуальная, почему же она
не переопределена ни в одном из наследуемых классов для более
оптимального поиска?
Это не лень, а осмотрительность. Функции позднего связывания, конечно, могут серьюзно украсить алгоритм и придать ему супер крутизну, но только не скорость выполнения! Это чуть ли не самый ресурсоемкий и медленный механизм. В предложенном тобой случае 1С работала бы медленнее раза в полтора.
> Уверен на 90%, что это НЕ функция, как таковая, а on-line определение, типа:
> class BBB
> { void *ptr;
> ...
> public:
> int GetNMethods(int i) { return ptr+i; }
> }
> Поэтому, выносить его нет смысла
Ты хоть 1CHeaders смотрел когданить, в 1С++ например?
GetNMethods имеет такое объявление
virtual int GetNMethods();
А виртуальные функции не инлайнятся.
> Это не лень, а осмотрительность.
> Функции позднего связывания, конечно, могут серьюзно украсить алгоритм
> и придать ему супер крутизну, но только не скорость выполнения!
> Это чуть ли не самый ресурсоемкий и медленный механизм.
> В предложенном тобой случае 1С работала бы медленнее раза в полтора.
Странно, я как раз это реализовал (переопределение FindMethod в конечных классах)
и заработало быстрее
| Код |
|---|
Док= СоздатьОбъект("Документ.ПродажаЧерезФирму");
Док.ВыбратьДокументы(НачДата,КонДата);
Пока Док.ПолучитьДокумент()=1 Цикл
ОткрытьФорму(Док.ТекущийДокумент(),КонтДок);
КонтДок.ЗаполнитьПоДокументамЗаДень();
КонтДок.Записать();
.....
Показать полностью |
выдает:
КонтДок.Записать();
{C:\DORZH\DB77\DB_SOUZ\ПЕРЕЗАПОЛНИТЬОБЩИЕНАКЛАДНЫЕ.ERT(18)}: Данная команда не может выполняться в формуле элемента диалога!
можно как-нибудь сохранить документ?
>> Некомпетентность: GetNMethods можно вынести из цикла
>Уверен на 90%, что это НЕ функция, как таковая, а on-line определение, типа:
...
>Поэтому, выносить его нет смысла.
Не on-line, а очевидно inline? Не могет: она виртуальная. Интереснее другое: почему ее компилятор за цикл не вынес?
>> Лень: не зря же FindMethod виртуальная, почему же она не переопределена ни в одном из наследуемых классов для более
>>оптимального поиска?
>Это не лень, а осмотрительность. Функции позднего связывания, конечно, могут серьюзно украсить алгоритм и придать ему супер крутизну, но только не скорость выполнения!
Если так рассуждать, то тогда опять же, какого х. делать ф-цию виртуальной, если все равно не переопределять. Ведь вызов виртуала хоть на чуть-чуть, но медленнее вызова невиртуала.
Дык ни одной длл-кой больше не станет! Это скрипты для телепата! Подробнее можешь почитеть здесь:
Ну не надо, стоит уже год.
Телепат (+опенконф, естессно) подкупает своей открытостью, 1с++ - всеобъемлемостью. По крайней мере, пока. 1с++ = 1с++ плюс turbobl плюс FormEx плюс ещё что-то.
Просто где-то она работает (Сервер 2003), а где-то (локальная машина) не работает.
При запуске 1С, она пишет внизу "Выполнение обработки" и через 2-3 сек. закрывается.
Потом приходится заходить монопольно чтобы восстановить индексы и картина повторяется.
Может быть не срабатывает хук на CBLContext::FindMethod, но это визуально же не определишь, а копаться с отладчиком не очень хочется, но видимо прийдется...
Для конфигурирования подключен ОпенКонф + Телепат + Intellisense.
Сейчас проверил, на сервере просто стоит Опенконф+Телепат.
Удалил Intellisense на локальной машине - то же самое.
Локальные машина: Win2k3 RUS на AMD Athlon 3000+ и Win2k3 RUS на Intel Prescott 3.0Ghz с вкл. HT, на обеих вылетает.
Проверил, если на Win2k3 RUS на AMD Athlon 3000+ включаю 1С в список исключаемых из DEP, то работает.
На Win2k3 RUS на Intel Prescott 3.0Ghz с вкл. HT - не помогло...
P.S. Локально TurboBL нигде не лежит (установлена первый раз, копированием в каталог базы).
Версия 1.1.0.5
- Компонента доработана для работы на многопроцессорных системах и процессорах с HT.
- Компонента доработана для работы со включенным DEP.
- Оптимизировано обращение к полям ТаблицыЗначений.
А в 1с++ эти изменения будут внесены?
Модули справочников, доков, модулей проведения доков
использовал из текстовых файлов
например
#ЗагрузитьИзФайла Reference\НомеклатураФС.txt //модуль формыСписка Номенклатуры
в процессе работы 1С в режиме Предприятия правлю текстовые файлы модулей, изменения отражаются сразу.
Заменил на 1.1.0.5 изменения текстовых файлов модулей не отражаются, пока не закрою 1С и снова не запущу.
Откатил обратно на версию 1.1.0.2
все заработало
Просьба проверить.
На машинах win XP или 2K не работает поиск по букве в выпадающем списке значений, а это очень не удобно! (пример: открываем Анализ субконто, вид субконто 1 и пытаемся набрать ...контрагенты а в 98 работает),
P.S. нечто похожее видел в FormEX , однако 100% работоспособности не добился
В чистой конфигурации в ГМ пишу три строчки
Процедура ПриНачалеРаботыСистемы()
ЗагрузитьВнешнююКомпоненту("TurboBL.dll");
КонецПроцедуры // ПриНачалеРаботыСистемы()
Сохраняю. Запускаю1С и … 1С падает.
Но если не «три строчки», то все нормально.
TurboBL.dll v. 1.1.0.6
1С v. 7.70.025
OS WinXP home 1SP
Автору респект.
Maniac
30.08.2006 А вообще было бы круто (можно даже сказать верх совершенства) если бы компонента имела режим включения выключения (в реальном времени) на закладке свойств 1С++ (Меню сервис - Параметры). Там кстати такие кнопки уже есть под некоторые свойства FormEx. Я думаю и для ТурбоБЛ такое будет реально.
Очень уж хочется иметь возможность "быстро" сравнивать быстродействие в рабочем режиме на очень больших объемах баз данных.
Данная фича реализована в 1С++ 2.5
По умолчанию фича ТурбоБЛ в 1С++ включена. Отключить можно, но отключение будет выполнено только после перезапуска 1С.
Но можно выключить ТурбоБЛ, перезапустить 1С, выполнить код без ТурбоБЛ, включить ТурбоБЛ, выполнить код с ТурбоБЛ и сравнить результаты :)
А что это у тебя за конфа такая без справочников?
всегда получал увеличение скорости построения отчетов в 2-3 раза
однако сегодня не удача:
77 торговля (почти обычная), крутиться на 2008-м сервере, поставил
ВК, выигрыш по скорости 2-4%, т.е. почти нулевой... с чем это может быть
связано?
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 14299
Создание 15.08.06 00:00
Обновление 25.08.06 00:00
Просмотры 36037
Загрузки 6076
Рейтинг
212
Комментарии 79
Код открыт Не указано
Рубрики Разработка внешних компонент
Кому Разработчик
Тип файла Компонента, плагин (dll, vbs,..)
Платформа
Оперативный учет 7.7
,
Бухгалтерский учет 7.7
,
Расчет 7.7
Конфигурация 1C77
Операционная система Не имеет значения
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)