Главная » Файлы » Программируем в 1С » 1С и SQL

Скачивать материалы с сайта, могут только зарегистрированные пользователи.
Для регистрации заполните два поля ниже!

Через минуту Вы получите "Гостевой доступ"




DBEng32 (8.0.0.5, Share) – выполнение прямых запросов в монопольном режиме для DBFной версии 1С:Предприятие 7.7 в среде 1С++
2009 Февраль 25, 13:39
DBEng32 (8.0.0.5, Share) – выполнение прямых запросов в монопольном режиме для DBFной версии 1С:Предприятие 7.7 в среде 1С++
  

Внешняя компонента для 1С: Бухгалтерия 7.7, 1С: Торговля и склад 7.7, 1С: Зарплата и кадры 7.7

Решение проблемы выполнения прямых запросов в монопольном режиме и исправление ошибки “CodeBase –56” для DBFной версии 1С:Предприятие 7.7.
Тестирование проводилось в 1С++ версии 2.0.3.7 с применением “Microsoft OLE DB Provider for Visual FoxPro 9.0” версии 1.2 от 16/05/2008. Время выполнения запроса по методике, описанной в http://infostart.ru/profile/2905/blogs/482/ составляет 28-30 секунд.
 

Внимание!
Версии 8.0.0.x – бета-тестирование. Пробуйте разработку на отладочной базе данных.
Установка.
В каталоге …\BIN переименовать DBEng32.dll в DBEng33.dll и распаковать архив в этот каталог.
Что делает данная разработка?
Перехватываются все функции DBEng32.dll. В функциях открытия таблиц выполняется проверка режима запуска сессии 1С. Если 1С запускается в монопольном режиме, то таблицы открываются в эксклюзивном режиме, закрываются и открываются в разделяемом режиме. Для функций, требующих эксклюзивного доступа к таблицам (реиндексация, упаковка, удаление всех записей), таблица закрывается, открывается в эксклюзивном режиме, выполняется “эксклюзивная функция”, закрывается и открывается в разделяемом режиме. Для рабочих таблиц, используемых в штатных запросах, режим открытия не изменяется.
Т.е. особенности выполнения прямых запросов через “OLE DB VFP 9” остаются и при использовании данной разработки – блокировка таблицы при выполнении запроса. И, как следствие появление ошибки “File is in use by another user” при выполнении следующей последовательности операторов:
НачатьТранзакцию();
Обновление таблицы “ААА”.
Запрос к таблице “ААА”.
ЗафиксироватьТранзакцию();

И это происходит в рамках одной сессии в любом режиме запуска сессии 1С с использованием или без использования данной разработки.
История изменений версий.
8.0.0.1 (бета-версия)
Первая опубликованная версия.
8.0.0.2 (бета-версия)
Добавлена возможность вывода отладочной информации в файлы C:\DBEng32_*.log.
Для активизации этого режима необходимо установить переменную среды текущего процесса в единицу: “SET DBEng32_Debug=1”. При включенном флаге вывода отладочной информации, система 1С будет работать очень медленно.
8.0.0.3 (бета-версия)
1) Убраны отладочные операторы. Это снижает загрузку процессора и повышает скорость работы в некоторых задачах до 30%. При этом повышение общей производительности сильно зависит от условий запуска сессии 1С. Наибольший эффект достигается при использовании системы в локальном режиме одним пользователем. Т.к. доля времени, затрачиваемая на операции ввода/вывода, уменьшается в общем времени, за счет системного и аппаратного кэширования.
2) Добавлена возможность вывода подробной отладочной информации: “SET DBEng32_Debug=2”.
P.S. В разработке “DBEng32 SEQ” отладочные операторы убираться не будут.
8.0.0.4 (бета-версия)
Добавлены переменные среды текущего процесса:
SET DBEng32_NoSEQ=1 – отключает алгоритм исправления ошибки “CodeBase –56”.
SET DBEng32_NoShare=1 – отключает алгоритм открытия таблиц БД в разделяемом режиме при запуске сессии 1С в монопольном режиме.
SET DBEng32_StopSEQ=1 – включает выдачу сообщения с ожиданием действия пользователя после выполнения метода BeginReadSequence().
По умолчанию значение всех переменных равно нулю (выключено). Значения переменных считываются в момент запуска сессии 1С.
Примеры:
1) Штатный режим работы 1С:
SET DBEng32_NoSEQ=1
SET DBEng32_NoShare=1
2) Максимальная производительность при использовании прямых запросов 1SQLite с защитой от возникновения ошибки “CodeBase –56”:
SET DBEng32_NoSEQ=0
SET DBEng32_NoShare=1
3) Возможность использования прямых запросов через “OLE DB VFP 9” c защитой от возникновения ошибки “CodeBase –56”:
SET DBEng32_NoSEQ=0
SET DBEng32_NoShare=0
4) Возможность использования прямых запросов через “OLE DB VFP 9” без защиты от возникновения ошибки “CodeBase –56”:
SET DBEng32_NoSEQ=1
SET DBEng32_NoShare=0
При использовании данного режима следует учитывать, что ошибка может возникнуть и без применения 1SQLite. Но вероятность этого очень мала.
5) Тест на появление ошибки “CodeBase –56” при использовании прямых запросов 1SQLite:
SET DBEng32_NoSEQ=1
SET DBEng32_NoShare=1
SET DBEng32_StopSEQ=1
Тест проводится в двух сессиях 1С. Локальный/сетевой режим – безразлично. В процессе запуска 1С будут выдаваться диалоговые окошки с заголовком “DBEng32 Share” и именем таблицы, для которой выдан метод BeginReadSequence(). Их нужно “угрюмо прожимать”.
После загрузки обеих сессий 1С надо в одной сессии запустить запрос 1SQLite, дождаться появления окошка с заголовком “DBEng32 Share” но не “прожимать” это окошко. А в другой сессии запустить любую задачу, обновляющую таблицу, имя которой выдалось в окошке. На моей тестовой платформе сбой происходит примерно через одну минуту. Если не удастся получить эту ошибку – выходите со мной на контакт.
8.0.0.5 (бета-версия)
Восстановлен монопольный режим открытия рабочих таблиц. Это может повысить скорость выполнения штатных запросов.

Категория: 1С и SQL | Добавил: c1 | Теги: Share) – выполнение прямых запросов, скачать программы 1с бес, DBEng32 (8.0.0.5
Просмотров: 2206 | Загрузок: 21 | Рейтинг: 0.0/0

Выразить благодарность - Поделиться с друзьями!

 

Здесь все о технической стороне 1С!

 

Узнай, как правильно администрировать 1С Предприятие
Регистрируйся на бесплатный 7-ми дневный курс сейчас:

Ваш E-Mail в безопасности



Всего комментариев: 0
avatar