Внимание!
Версии 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 (бета-версия)
Восстановлен монопольный режим открытия рабочих таблиц. Это может повысить скорость выполнения штатных запросов.
8.0.0.6 (бета-версия)
Исправлена ошибка "При добавлении любого реквизита в шапку...". Подробнее см. сообщения 33-35 данной темы.
8.0.0.7 (бета-версия)
Исправлена ошибка "...при изменении кодовой страницы в Висте...". Подробнее см. сообщение 36 данной темы.
8.0.0.9 (бета-версия)
1) Добавлен алгоритм взаимодействия с утилитой LockDB. См. //infostart.ru/public/86647/
2) Добавлена переменная среды текущего процесса: DBEng32_LockDB - задаёт количество миллисекунд между опросами блокировок транзакций со стороны "DBEng32 Share" при взаимодействии с утилитой LockDB. Рекомендуется устанавливать значение - 1000 (одна секунда) и более. Умолчание для переменной - одна секунда.
8.0.1.1
Добавлена переменная среды текущего процесса DBEng32_Exclusive.
Описание см.: //infostart.ru/public/87339/ .
8.0.1.2
Исправлена ошибка в полном пересчете бухгалтерских итогов.