Загрузка процессора 100% в 7.7 под Windows Server 2008 при блокировке журнала транзакций.
Разработка - Разработка внешних компонент
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Помыкавшись по сети и ввиду очень ограниченного времени на ожидание ответа от Romix'a (честь ему и хвала), воспользовались его исходниками для vk_hook1C и vk_TerminalSleep, и собрали новую vk_hook1C.dll, которая работает под 2008 сервер, не патчит BkEnd, не ругается на версии ODBC (не нужен ODBC33.DLL) и самое главное, при блокировке не грузит процессор :)
В общем принимайте наше с Old_Joe творчество.
В vk_hook добавлены 2 метода, позволяющие управлять блокировками и дедлоком
//глобальная переменная
Перем vk_hook Экспорт;
//при начале работы системы
ЗагрузитьВнешнююКомпоненту(каталогИБ()+"vk_Hook1C.dll");
vk_hook=СоздатьОбъект("Addin.vk_Hook1C");
vk_hook.ПерехватSQLPrepare();
vk_hook.ПерехватSQLExecDirect(); vk_hook.МаксимальныйSleep=1024; vk_hook.ОтключитьТаймаут = 1; //по умолчанию = 0 vk_hook.ОтключитьДедлок = 0; //по умолчанию = 0
использован материал из статьи: http://www.kb.mista.ru/article.php?id=361
"Секретный релиз" 1С: //infostart.ru/public/82018/
UPD: 2.0.0.31
добавлен метод vk_hook.ВключитьПодмену = 1; // по умолчанию = 0
перед непосредственно запросом необходимо vk_hook.ВключитьПодмену = 1;
Можно конечно один раз включить и не выключать, но тут есть определенный риск. Так что все в ваших руках :)
Принципиально изменена подмена запроса.
В данной версии можно менять как весь запрос так и по части вхождения строки.
К примеру:
vk_hook.ТекстSQL = "SP3111=?";
vk_hook.НовыйSQL = "SP3111 in (' 4 ',' 7 ') and ''<>?";
vk_hook.УстановитьЗаменуSQL();
Позволит везде использовать вместо равенства список значений.
В
Остальной функционал описаный в статье не изменен.
Вступайте в нашу телеграмм-группу Инфостарт
См. также
Разработка внешних компонент Разработчик 1С:Предприятие 7.7 1С:Предприятие 8 Абонемент ($m)
PDFConverter — высокопроизводительная нативная компонента для работы с PDF-документами в среде 1С:Предприятие 8.
10 стартмани
20.03.2026 1730 19 v_peroff 8
Разработка внешних компонент Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)
Внешняя компонента позволяет в среде 1С 7.7 работать с бинарными файлами: анализировать их, создавать новые, копировать, корректировать и комбинировать. Имеются функции сжатия и разжатия строк и бинарных данных.
1 стартмани
10.06.2025 2826 1 mdbruyfn 0
Разработка внешних компонент Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)
Внешняя компонента позволяет в среде 1С 7.7 работать с ZIP-архивами: создавать архивы, читать их и разархивировать.
1 стартмани
29.05.2025 2908 3 mdbruyfn 2
Разработка внешних компонент Разработчик 1С:Предприятие 7.7 1C77 Абонемент ($m)
Компонента позволяет в среде 1С 7.7 генерировать двухмерный QR код из любого текста длиною до 1800 символов и сохранять его в файле BMP формата. Из файла он может быть загружен в объект 1С "Картинка".
1 стартмани
29.01.2025 3392 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 7310 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 13625 2 20
Разработка внешних компонент Разработчик 1С:Предприятие 7.7 Платные (руб)
Компонента для выбора значения из больших списков значений.
5084 руб.
02.12.2021 8338 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 13278 15 softmaker 18
//////////////////////////////////////////
Перем vk_hook Экспорт;
//////////////////////////////////////////
Процедура ПриНачале.....
ЗагрузитьВнешнююКомпоненту("vk_Hook1C.dll");
vk_hook=СоздатьОбъект("Addin.vk_Hook1C");
vk_hook.ПерехватSQLExecDirect();
vk_hook.МаксимальныйSleep=1024;
vk_hook.ОтключитьТаймаут = 1; //по умолчанию = 0
vk_hook.ОтключитьДедлок = 0; //по умолчанию = 0
возможно BkEnd.dll не оригинальная. Попробуйте взять оригинальную из поставки 1С переименовать ее в BkEnd0.dll, а BkEnd.dll взять из "Секретного релиза", хотя для 2003 достаточно оригинальной BkEnd
Возможно используете ODBC32.dll в связке с ODBC33.dll. Нужна ODBC32.dll оригинальная.
Установите на виртуалке или отдельной машине оригинальную 1С, добавьте туда vk_hook1C.dll и сымитируйте блокировку транзакции.
много это сколько? при 50 не закрывается.
Ну это когда одновремено 3-5 пользователей начинаю проводит доки и тут еще масовая загрузка доков в течении сек 30, так у некоторых почему то 1с тупо закрывается и все, вот немогу понять из за чего скачал эту dll попробую место odnc33.dll
При начале работы системы сначала грузится 1Cpp, затем vk_hook1C.
Добавка: Разобрался работает если установить в SQL Совместимость c SQL2000(80). пока работает.
Замеры производительности в отладчике ничего не показали, нагрузку даёт процесс 1cv7s.exe, монитор ресурсов Windiws тоже ничего экстремального не показывает. Использование vk_hook1C результатов не дало.
Есть предположение что данное событие происходит во время краткосрочной потери связи с сервером.
Используются внешние компоненты 1С++, FormEx, DialMail. Используется Перехватчик и ТабличноеПоле, много прямых запросов через ODBCRecordSet.
Благо такое случается раз-два в неделю и в целом не мешает процессу.
если бы SQL то у всех бы тупило
если бы 1С то скорее на похожих ситуациях вешалось бы и опять таки у всех
у меня в основном 3-4 человек с такими зависаниями есть.
Если есть подозрения на "... данное событие происходит во время краткосрочной потери связи ...", то может попробовать для начала в маршрутизаторе провода в гнездах попереставлять, или вообще особо зависающих пересадить на отдельный хаб...
ну это так, мысли вслух
Имеем Win 2008 Std R2 + SQL 2008 Ent R2 + 7.7.027 + секретный релиз (начальный BkEnd оригинальный, переименован в BkEnd0).
В каталог ИБ положил Вашу dll, в глобальник прописал
ЗагрузитьВнешнююКомпоненту(каталогИБ()+"vk_Hook1C.dll");
vk_hook=СоздатьОбъект("Addin.vk_Hook1C");
vk_hook.ПерехватSQLExecDirect();
vk_hook.МаксимальныйSleep=1024;
vk_hook.ОтключитьТаймаут = 1; //по умолчанию = 0
vk_hook.ОтключитьДедлок = 0; //по умолчанию = 0
ЗагрузитьВнешнююКомпоненту и СоздатьОбъект отрабатывает правильно, а на строке
"vk_hook.ПерехватSQLExecDirect();" 1с-ка замирает и выбрасывается с ошибкой.
После этого к сожалению пришлось закоментарить в глобальнике вызов Вашей компоненты.
Не могли бы Вы помочь мне в данной ситуации ?
Пример скачать сам не могу, т.к. на форуме ещё менее 20 сообщений.
Но вчера попробовал то же самое, но при понижении режима совместимости в БД до SQL 2000. В такой ситуации Ваша dll работает и справляется с блокировками как надо. Вот только остался како-то неприятный осадок, что специально ставился секретный релиз для сохранения режима SQL 2008, но всё таки его пришлось понижать ...
(52)
по идее нужно найти как называется функция перехвата для 2005 и 2008 sql.
для 2000 она называется SQLExecDirectA и SQLPrepareA.
----
хотя не факт, что получится, т.к. нужно разбирать эту самую функцию придется.
Мне сейчас искать их ну никак не получается, воюю с почтой россии и таможней :(
здесь на Инфостарте есть публикация "Удобная "выгонялка" пользователей из 1С без доработок кода" ( ), основанная на разработке Romix'а. Она "вклинивается" в адресное пространство с целью перехвата WinAPI-функции ShellExecuteA при помощи патчинга seven.dll (заменяется с shell32.dll на hook_1c.dll). В общем, для меня весьма удобная штука была бы, если бы не одно "но"...
Беда в том, что эта "выгонялка" не работает с Секретным Релизом. Может посоветуете что, учитывая что и у вас, и в той разработке используется hook_1c.dll ?
dll можно переименовать из vk_Hook1C.dll в hook_1c.dll и в конфигурации заменить на СоздатьОбъект("Addin.vk_Hook1C");
Все остальное по идее должно работать.
Или же в указанной вами публикации в hook_1c.dll внесены дополнения?
Меня слегка смущает, что при использовании этой "выгонялки" для юзверя сообщение о блокировке базы появляется до выбора пользователей из списка 1С.
Не знаю, насколько там изменена dll-ка. Она называется HOOK_1C.DLL и загружает плагины, перечисленные в файле Hook_1C.ini, из папки Plugins.
P.S. Попробовал - пишет, что в библиотеке отсутствует точка входа ShellExecuteA :-(
(61) если у вас и так работает без "секретного релиза", то вам его не нужно устанавливать. Достаточно скачать vk_hook1C.dll
Но проблема появилась следующего характера кто сталкивался?
Неудачная попытка создания vk_hook=СоздатьОбъект("Addin.vk_Hook1C");
Спасибо за ответ.
Все прописал как и описан ов статье ушла проблема загрузки в 100% терминального сервера. НО не ушла проблема медленной работы 1С 7.7 и sql 2008 r2, все пользователи в терминале 2008 r2. Когда всех выгоняю и заходят первые люди все нормально, все работает. Но как только людей заваливается за 25-30 все начинает висеть и проведение 1 документа от 10 минут. Кто еще подскажет какие действия можно предпринять именно в данной связке(не предлагать использование sql 2000 и терминала под 2003)
База 30 Гб. Пользователей до 170.
У меня SQL сервер 16 ядер, 128 гигов оперативки. БД вся в памяти умещается пока.
База 105 гигов + log 91 гиг. tempdb на RAM диске.
Работают одновременно до 75 юзеров. Самое долгое проведение 15 секунд, самое быстрое 0.19 секунды.
То что до 10 минут проводится, означает что вы используете механизмы 1С для проведения документов, что очень плохо.
Включайте отладчик и смотрите кто тупит, скорее всего ВременныйРассчет().
И переходите на прямые запросы.
Сильно не бейте.
Скачал dll и пример базы. Все регистрируется, ошибок не выдает. НО нифига не фильтрует.
В чем может быть проблема?
Нашел ошибку - если в параметрах SQL базы установить Режим совместимости = 100 (MS SQL 2008)
то при открытии журнала документов возникает ошибка:
---------------------------
1С:Предприятие
---------------------------
SQL State: 42000
Native: 1018
Message: [Microsoft][ODBC SQL Server Driver][SQL Server]Неправильный синтаксис около "INDEX". Если имелась в виду часть табличной подсказки, то для этого теперь необходимо использовать ключевое слово A WITH и круглые скобки. Правильный синтаксис см. в электронной документации по SQL Server.
SQL State: 42000
Native: 8180
Message: [Microsoft][ODBC SQL Server Driver][SQL Server]Не удалось выполнить подготовку инструкций.
---------------------------
ОК
---------------------------
Если режим совместимости = 80, ошибка не возникает.
я использую режим совместимости sql 2014, перехват включаю только в одном журнале, перехватываю нужные мне запросы, ну и пяток не нужных, т.к. vk_hook шпарит запросы на диалекте sql 2000( другой сиснтаксис хинтов запроса ), приходится их тоже подменять.
т.е. после установки нужных мне отборов мне перехват больше не нужен, а пользоваться полноценно журналом (смотреть подчиненные документы и т.д. ) уже невозможно, т.к. придется перехватывать кучу служебных запросов и все их заменять, чего делать не хочется.
Есть ли метод остановки перехвата?
т.е. ПерехватSQLPrepare() перехват начинает, а что может его завершить?
УстановитьЗаменуSQL и УдалитьЗаменуSQL
у меня реализовано так
//======================================================================
Процедура локУстановитьВКХук(vk_hook, стрКонтр, ИДОбъектов)
т = "SP"+глМД.ИДОбъекта(Метаданные.ОбщийРеквизитДокумента(стрКонтр));
vk_hook.ТекстSQL=т+"=?";
vk_hook.НовыйSQL=ИДОбъектов+т+"=?";
vk_hook.УстановитьЗаменуSQL();
КонецПроцедуры // локУстановитьВКХук
//========================================================== ============
Процедура локУдалитьВКХук(vk_hook, стрКонтр)
т = "SP"+глМД.ИДОбъекта(Метаданные.ОбщийРеквизитДокумента(стрКонтр));
vk_hook.ТекстSQL=т+"=?";
vk_hook.УдалитьЗаменуSQL();
КонецПроцедуры // локУдалитьВКХук Показатьvk_hook.ВключитьПодмену = 1;
vk_hook.ТекстSQL="Sel ect * fr om _1SJOURN(NOLOCK) where";
vk_hook.НовыйSQL="Select * fr om _1SJOURN(NOLOCK) wh ere "+ИДОбъектовЮрЛицо+ИДОбъектов+ИДОбъектовАдмин;
vk_hook.УстановитьЗаменуSQL();и когда она более не нужна, то
vk_hook.ВключитьПодмену = 0;(доступа к с кулю не имею, SQL2008)
Подключаюсь на удаленку к клиенту
При попытке модификации метаданных - вылазит проблем.
Например:
- создаю новый справочник, сохраняю конфигурацию - все норм.
- спр.номенклатура - меняю порядок реквизитов (строки неогр.длины вниз спсика реквизитов), сохраняю конфигурацию - бежит счетчик обработки спр.номенклатруры на 900 элементе в конфигураторе окошко проблемы (пиктограмма красный круглый знак ошибки), сообщеняи на окне никакого нет и кнопкой "Ок", жмем кнопку - получаем сообщение о проблеме
- аналогично предыдущему, если пытаемся добавить реквизит в справочник.
Проблемное сообщение:
SQL State: HY000
Native: 0
.... Подключение занято до получения результатов для другого hstmt
Беглое яндексение ссылается на проблемы когда прикладная работа с базой прямыми запросами и куросрами.
Про конфигуратор - ничего бегло не нарыл.
.
куда смотреть, что копать?
Спсб.
Как вариант нарушена уникальность какого нибудь поля в этом элементе(кода как правило), запустить в режиме предприятия, сортирнуть по коду, посмотреть что за 900й элемент, попробовать пересохранить его вручную с какими либо изменениями.
да, какая то нетипичная ошибка для конфигуратора.
доступ к скулю все равно нужен.
перевести на сервере базу в синглюзер режим через менеджемент студио тот же самый, предварительно через активити монитор посмотреть все соединения к базе, закрыть его. и запустить конфигуратор для изменений.
(92)
в том то и дело, что режим совместимости sql 2014. я понимаю, что как только включается ПерехватSQLPrepare() все запросы идут через hook. я использую 27 последний релиз где используется BkEndUtls.dll, беда в том что hook перехватывает весь sql трафик и запросы идут в режиме совместимости с sql 2000. Я использую его в пределах одного журнала, и хотелось бы управлять возможностью включения и отключения перехвата, потому что вне зависимости от включенных/отключенных подмен hook пропускает через себя все запросы.
Очень уж хочется доработать библиотеку для работы без режима понижения совместимости.
Мы временно переходили на уровень совместимости 80, но остались недовольны стабильностью и уровнем производительности.
Плюс у нас появились какие-то внутренние блокировки внутри SQL Server. В базе есть куча самописных хранимых процедур, отвечающих за API доступа внешних программ, они написаны и отлажены при уровне совместимости 100. Может это вызывает такое поведение. База достаточно большая (в районе 40+ ГБ), 200 пользователей 1С и еще больше сторонних периодически дергающих данные из базы.
Основной причиной желания использования компоненты было избавиться от задваивания внутренних идентификаторов объектов 1С (в основном страдают документы да и это легче выявляется). Компонента существенно снизила дублирование IDDOC, но не убрала это явление. Поэтому провести работы по переписыванию компоненты в первоочередном порядке не получится. Будет загрузка программистов чуть меньше, я попрошу заняться решением этой задачи. Сейчас на это никто не подпишется - все заняты.
Будут подвижки - я сообщу.
А вы уверены что это дело не в логике создания объектов? IDDOC поле уникальное и чтобы его задвоить нужно постараться, или я не правильно понял ваше сообщение?
Смысл этой компоненты, это перехватить сообщение от SQL о блокировки и не пустить его в 1С, чтобы та в свою очередь не отвалилась, т.к. не умеет обрабатывать такое.
БД сейчас 300+ гигов, работает порядка 120+ пользователей + автоматы по обмену с различными сайтами, почтой, своего рода API с БД на 1С 8... тьфу, тьфу, тьфу ни разу не сталкивались с дублированием идентификаторов.
Во многом это поведение обусловлено тем, что в процедуре ПриЗаписи выполняется запись документа вручную, потом создаются элементы справочников и всё это в транзакции, чтобы добиться целостности. Если в процессе возникает транзакция, то есть приличная вероятность, что идентификаторы будут задвоены.
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 83504
Создание 31.03.11 17:28
Обновление 04.08.20 11:58
Просмотры 49134
Загрузки 440
Рейтинг
75
Комментарии 104
Код открыт Да
Рубрики Разработка внешних компонент
Кому
Системный администратор
,
Разработчик
Тип файла Компонента, плагин (dll, vbs,..)
Платформа
Оперативный учет 7.7
,
Бухгалтерский учет 7.7
,
Расчет 7.7
Конфигурация 1C77
Операционная система Windows
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)