Вирт:V7DBNet расширение платформы 1С:Предприятие 7.7

Вирт:V7DBNet расширение платформы 1С:Предприятие 7.7

1 Вирт:V7DBNet расширение платформы 1С:Предприятие 7.7 Новое в версии Несовместимость Установка расширения (клиент) Запуск сервера Web-интерфейс Реиндексация Режимы работы Вирт:V7DBNet - Неактивный режим - Режим без использования сервера ۰ Инструкция для перевода в режим ۰ Кратко ۰ Подробно - Режим клиент-сервер ۰ Пример переноса базы 1С на сервер ۰ Кратко ۰ Подробно Параметры файла настроек сервера dbnets.ini Параметры файла настроек клиента dbnet.ini fold cdx port user pass flush fold host port szcache share Locktrycount recnofix swpath swsize sharedmem Программное взаимодействие с сервером, объект V7DBNet Методы объекта V7DBNet Version SetUserName ErrorCount ThrowError LockTryCount LockUserName DirectRead SafeWrite ListOfSession/АктивныеСеансы CurrSessionId/ИдентификаторСессии SendMessage/ОтправитьСообщение CloseSession/ЗавершитьСессию SetLockCode/БлокироватьБазу GetLockCode/ПолучитьКодБлокировки TryBeginTrans/ПопыткаНачалаТранзакции Решение проблемы 1Gb Снятие ограничения на количество записей в таблице Отладка конфигурации защищенной компонентой Вирт:V7Crypt Щербаков Анатолий Викторович ООО «Вирт»

2 Новое в версии 2510 Добавлены методы программного управления пользователями, аналогичные методам web-интерфейса. Добавлены/исправлены методы управления блокировками. Исправлены незначительные, но не приятные ошибки. Добавлен режим работы клиента с сервером (клиент и сервер должен находится на одним компьютере) через общий буфер памяти - shared memory. Несовместимость Разработка не совместима с компонентами решающими проблему 1Gb и 100% загрузки процессора, т.к. перехватывают одни и те же процедуры. Их совместное использование может привести к непредсказуемым результатам. Для решения проблемы, аналогичные функции включены в данную разработку. Разработка не будет работать на операционной системе Windows 98 и более ранних.

3 Установка расширения (клиент) Расширение платформы - Вирт:V7DBNet Клиент является оберткой (wrapper) для родной библиотеки 1С dbeng32.dll. Расширение реализовано в виде двух библиотек: самой обертки dbeng32.dll и клиента доступа к серверу Вирт:DBNet dbnet32.dll. Расширение может использоваться как в режиме доступа к серверу, так и без него. В поставку включена программа, упрощающая инсталляцию. Пункт меню: «Помощник установки». Инсталляция расширения: Запустите «Помощник установки». Нажмите кнопку «Установить» и укажите путь к исполняемым файлам 1С. стандартный файл dbeng32.dll будет переименован в 1c_dbeng32.dll в каталог bin, платформы, будет скопирован файл dbnet32.dll в каталог bin, платформы, будет скопирован файл dbeng32.dll Если операция прошла успешно, в списке появится путь к платформе. Никаких изменений в файлах 1С не производится! Деинсталляция расширения: Выберите в списке необходимую платформу и нажмите «Удалить». В случае полного удаления разработки, расширение из всех платформ списка удалится автоматически. Обновление расширения: Установите новую версию разработки в тот же каталог. При завершении установки, программа предложит обновить компоненты платформ автоматически.

4 Запуск сервера Запуск сервера может происходить в двух режимах: как приложение, и как служба. Для запуска сервера вручную используйте пункт меню «Сервер как приложение - Запуск». Для автоматического запуска сервера, зарегистрируйте его как службу «Сервер как служба - Установка», служба будет установлена и запущена. При внесении изменений в файл настроек сервера, сервер необходимо перезапустить. Web-интерфейс Сервер не имеет визуального интерфейса, для просмотра статистики его работы предусмотрен web-интерфейс. Также, в webинтерфейс включены ряд возможностей, аналогичные возможностям диспетчера терминалов, по управлению сеансами: отправка сообщений пользователям. Возможна широковещательная и индивидуальная отправка сообщений, а также получения ответов от пользователей. блокировка базы. Базу можно временно заблокировать, установив код блокировки, который будет необходимо ввести для подключения к базе. Блокировка базы не отключает существующие сеансы, она не позволяет получить доступ к базе новым сеансам. отключение сеансов. При массовом отключении, всегда используется «мягкое» завершение сеанса. Его суть в том, что при отключении, производится ожидание завершения активной транзакции. Также «мягкое» завершение сеанса, не отключает сеанс конфигуратора. При индивидуальном завершении отдельного сеанса предоставляется выбор: мягкое завершение или принудительное. Обратиться к серверу можно указав в строке web-браузера адрес вида: ( имя или ip сервера : имя порта ) например: имя пользователя по умолчанию: Admin, пароль: 123

5 Реиндексация При использовании режима клиент-сервер, программа будет предлагать реиндексацию только в том случае, если упавший сеанс находился в режиме записи. Тем не менее, плановая реиндексация необходима, она позволяет упаковать индексы. Пример файла для планировщика - reindex.bat Пример файла пакетного режима конфигуратора reindex.conf net stop V7DBNet ping -n 300 -w >nul net start V7DBNet 1CV7.exe CONFIG /Dпуть к базе /NПользователь /PПароль [General] Output=D:\1C_Base\reindex.log CheckAndRepair=1 Quit=1 [CheckAndRepair] Repair=0 PhysicalIntegrity=0 Reindex=1 LogicalIntegrity=0 RecalcSecondaries=0 RecalcTotals=0 Pack=0

6 Режимы работы Вирт:V7DBNet Расширение может работать как в режиме подключения к серверу (клиент-сервер) так и без него. Для управления режимами работы расширения в каталог базы данных 1С необходимо поместить файл настроек расширения - dbnet.ini, и указать в нем необходимые параметры. Неактивный режим Если в каталоге базы 1С отсутствует файл dbnet.ini или в нем не указан или отключен параметр fold, 1С работает в своем обычном режиме, не используя расширение Вирт:V7DBNet. Режим без использования сервера Режим интересен, как минимум, в нескольких случаях: решение проблемы 1Gb. снятие ограничения на количество записей в таблице отладка конфигурации защищенной компонентой Вирт:V7Crypt Инструкция для перевода в режим «без использования сервера», кратко: 1. Создайте в каталоге базы данных 1С каталог DB (к примеру), переместите в него файлы DBF и CDX 2. Создайте в каталоге базы данных файл dbnet.ini и внесите в него строку: fold=db Перенос файлов DBF и CDX в отдельный каталог нужен на случай, если «не исправленная» программа попытается обратиться к базе. Худшее, что она сделает, это создаст пустые копии файлов, но не испортит рабочие.

7 Инструкция для перевода в режим «без использования сервера», подробно: Допустим, база данных 1С размещена в каталоге «Бухгалтерия». Типичное размещение файлов выглядит следующим образом: [ Бухгалтерия ] -----[ ExtForms ] -----[ Userdef ] -----[. ] -----< 1Cv7.MD > -----< 1Cv7.DD > -----<. > -----< *.DBF > -----< *.CDX > 1. Создадим в каталоге базы данных 1С каталог с именем «DB», и переместим в него файлы DBF и CDX 2. Создадим в каталоге базы данных файл dbnet.ini с параметром: fold=db Получим: [ Бухгалтерия ] -----[ ExtForms ] -----[ Userdef ] -----[. ] -----[ DB ] -----< *.DBF > -----< *. CDX > -----< 1Cv7.MD > -----< 1Cv7.DD > -----<. > -----< dbnet.ini > Минимальное содержимое файла dbnet.ini: fold=db

8 Режим клиент-сервер Сервер Вирт:V7DBNet создан специально для работы с 1С:Предприятием 7.7, для повышения производительности работы платформы в режиме DBF. Перевод 1С:Предприятия из режима блокировок в режим транзакций, а также кэширование данных на стороне клиента, устраняет падение производительности 1С при работе по сети («проблема второго пользователя»). Файлы DBF не предоставляются в общий доступ, с ними работает только один сеанс сервер, что позволяет не использовать специальных «серверных» операционных систем, а также снизить требования к «железу» сервера. Также тот факт, что файлы находятся на защищенной области диска, интересен с точки зрения политики безопасности организации. Клиентская часть разработки перехватывает обращения к файлам DBF и CDX и передает запросы на сервер, сервер возвращает результат в виде кэш-страниц. Далее клиент работает с такой страницей без обращения к серверу, пока сервер не сообщит о потере ее актуальности. Для обеспечения надежности каждый сеанс работает с сервером через изолированную транзакцию, что помимо стабильности обеспечивает полную параллельность доступа по чтению, даже если в данный момент происходит запись в таблицы. Запись происходит также в отдельной изолированной транзакции, но поочередно. Клиент подает запрос серверу на запись, сервер добавляет его в очередь ожидания, или сразу дает разрешение. Сервер регулирует очередность записи, разделяя время между претендентами, сводя к минимуму «Ошибку блокировки транзакции». Также, для исключения неудачного захвата транзакции, в клиенте, стандартный вопрос 1С о невозможности захвата транзакции заменен на вопрос с автоповтором попытки через 3 секунды. Если клиент сообщает, что он завершает запись успешно, и других измененных данных не будет, сервер отражает измененные данные в файлах и фиксирует совою транзакцию. В случае неудачного завершения транзакции, она просто удаляется, никаких изменений не происходит.

9 Пример переноса базы 1С на сервер Вирт:V7DBNet, кратко: 1. Создайте каталог, в котором будут располагаться каталоги с файлами баз данных (например: D:\V7DBNet). 2. В файле настроек сервера (dbnets.ini), файл находится в каталоге сервера и доступен из меню «Настройка сервера», укажите выбранный путь в параметре fold (например: fold=d:\v7dbnet). 3. Запустите сервер, убедитесь, что порт разрешен вашей системой безопасности компьютера, открыв web-интерфейс сервера с компьютера клиента. 4. Создайте каталог для файлов базы данных в каталоге по указанному пути в настройках сервера (например: D:\V7DBNet\Бухгалтерия), переместите в него файлы DBF и CDX из базы данных 1С. 5. Создайте в каталоге базы данных 1С файл dbnet.ini с параметрами fold= Бухгалтерия, host=ip или имя сервера 6. Установите клиент в платформу 1С:Предприятия 7.7. Для отмены переноса базы не сервер, переместите файлы DBF и CDX обратно в каталог базы данных 1С, и удалите из него файл dbnet.ini

10 Пример переноса базы 1С на сервер Вирт:V7DBNet, подробно: Предположим, у нас есть сервер «serv-1c», с размещенной на нем базой 1С и административная установка 1С:Предприятие 7.7, в виде ресурса с общим доступом «D:\1C». И несколько клиентов. serv-1c D: -----[ 1C ] - общий ресурс -----[ 1Cv77.ADM ] платформа 1С:Предприятие [ bin ] ----< 1Cv7.exe > -----[ Бухгалтерия ] база данных бухгалтерии организации -----[ ExtForms ] -----[ Userdef ] -----[. ] -----< 1Cv7.MD > -----< 1Cv7.DD > -----<. > -----< *.DBF > -----< *.CDX > Предположим, что место для размещения баз сервера Вирт:V7DBNet, мы определили как D:\V7DBNet\ 1. Откроем файл настроек сервера dbnets.ini через пункт меню: [Пуск] [Все программы] [Вирт V7DBNet - Сервер] [Настройка сервера]. 2. Включим параметр fold, убрав точку с запятой, и укажем в качестве значения необходимый нам путь D:\V7DBNet 3. Запустим сервер.

11 4. Для того чтобы убедиться что порт разрешен (ни кем не занят и не заблокирован) попробуем войти в web-интерфейс сервера с компьютера клиента, браузер предложит указать имя пользователя и пароль на доступ. 5. Создадим каталог для размещения баз - V7DBNet, на диске D: сервера. 6. Создадим в нем каталог нашей базы, пусть он будет называться также как и исходная база «Бухгалтерия», хотя названия могут и не совпадать. 7. Переместим в каталог базы сервера «D:\V7DBNet\Бухгалтерия\» файлы *.DBF и *.CDX из каталога базы 1С. 8. В каталоге базы 1C создадим файл dbnet.ini с необходимыми параметрами. Получим: serv-1c D: -----[ 1C ] -----[ 1Cv77.ADM ] -----[ bin ] ----< 1Cv7.exe > -----[ Бухгалтерия ] -----[ ExtForms ] -----[ Userdef ] -----[. ] -----< 1Cv7.MD > -----< 1Cv7.DD > -----<. > -----< dbnet.ini > [ V7DBNet ] -----[ Бухгалтерия ] -----< *.DBF > -----< *.CDX > Минимальное содержимое файла dbnets.ini fold= D:\V7DBNet user=admin pass=123 Минимальное содержимое файла dbnet.ini host=serv-1c fold=бухгалтерия szcache=50mb

12 Параметры файла настроек сервера - dbnets.ini Файл настроек сервера - dbnets.ini - находится в каталоге исполняемых файлов сервера, доступен через меню: [Пуск] [Все программы] [Вирт V7DBNet - Сервер] [Настройка сервера]. Каждая запись в файле должна находиться в отдельной строке без пробелов, вида: параметр=значение. В качестве временного отключения параметра можно использовать символ - точку с запятой, вставляя его в начало строки. fold (обязательный параметр) абсолютный путь к каталогу размещения каталогов баз. Т.е. к тому месту на диске сервера, где в последствии Вы будете размещать каталоги (имена баз), содержащие файлы DBF и CDX. cdx параметр предназначен для случая размещения CDX файлов на RAM-диск, возможно это и лишнее, но вдруг пригодится. Абсолютный путь к месту размещения каталогов баз (имен баз) содержащих файлы CDX. Каталог имени базы сервер создаст автоматически, при необходимости. Как правило, запись будет выглядеть примерно так: cdx=r: port номер порта сервера, в случае если он отличается от заданного по умолчанию. Порт по умолчанию user имя пользователя для доступа к web-интерфейсу сервера. pass пароль для доступа к web-интерфейсу сервера. flush=1 включает режим принудительной записи информации на диск после каждой операции (на случай отсутствия бесперебойника на сервере). Снижает скорость записи.

13 Параметры файла настроек клиента dbnet.ini Файл настроек клиента - dbnet.ini должен находиться в каталоге базы данных 1С. Каждая запись в файле должна находиться в отдельной строке без пробелов, вида: параметр=значение. В качестве временного отключения параметра можно использовать символ - точку с запятой, вставляя его в начало строки. fold - В режиме клиент-сервер имя базы сервера (имя каталога на сервере, содержащего файлы DBF и CDX, не должно содержать в режиме без сервера - имя каталога внутри каталога базы данных 1C (не должно содержать для размещения файлов DBF и CDX, или абсолютный путь к этим файлам. Если параметр отсутствует расширение не активно. host имя или IP-адрес сервера, для режима клиент-сервер. port номер порта сервера, в случае если он отличается от заданного по умолчанию. Порт по умолчанию szcache максимальный размер кэш клиента, для режима клиент-сервер, размещается в оперативной памяти. Формат значения допускает использование постфиксов Mb и Kb, а также указания значения в HEX, например: szcache=100mb, или szcache=0x Желательно подобрать такое значение, чтобы на обычных операциях, кеш не переполнялся. share=1 разрешает доступ к данным из разных копий ИБ.

14 locktrycount количество попыток захвата транзакции (-1 или отсутствие параметра бесконечно, 0 одна попытка, 1 попытка и запрос на повтор, 2 - две попытки и т.д.). recnofix имена таблиц через запятую, для которых не создавать тег IDELETED в индексе. Подробнее - «Снятие ограничения на количество записей в таблице». swpath Для режима режима клиент-сервер. Полный путь на клиенте или имя переменной среды, где будет создан файл «подкачки» для хранения кусков кэш, которые в данной момент не нужны, но остались неизменными. Например: swpath=temp swsize устанавливает ограничение на размер файла «подкачки». Доступны постфиксы Mb, Gb. sharedmem = 1 разрешает использовать режим общего буфера памяти для обмена данными между клиентом и сервером, в случае их расположения не одном компьютере (например, сервер терминалов).

15 Программное взаимодействие с сервером, объект - V7DBNet. Для программного взаимодействия с сервером в разработке реализован объект языкового расширения V7DBNet. Пример создания объекта: Перем V7DBNet Экспорт; Попытка V7DBNet=СоздатьОбъект("V7DBNet"); Исключение V7DBNet =0; Сообщить("Для ускорения работы установите расширение Вирт:V7DBNet ( "); КонецПопытки; Если V7DBNet <>0 Тогда V7DBNet.DirectRead(); КонецЕсли;

16 Методы объекта V7DBNet Функция Version() - возвращает номер версии в виде числа (пример: 2510) Процедура SetUserName(строка) процедура позволяет установить произвольное имя пользователя отличное от системного. Функция ErrorCount() - возвращает количество критических ошибок других сеансов приводящих к необходимости реиндексации. Возможно, программно отслеживая результат возврата данной функции, попросить пользователей завершить работу и войти монопольно. Значения возврата: 0 ошибок нет, > 0 количество ошибок, -1 программа в режиме без севера. Процедура ThrowError() - установить признак ошибки (потребовать переиндексацию при следующем запуске). Функция LockTryCount(<число>) - программный аналог параметра locktrycount - количество попыток захвата транзакции (-1 или отсутствие параметра бесконечно, 0 одна попытка, 1 попытка и запрос на повтор, 2 - две попытки и т.д.). Возвращает предыдущее значение. Пример: _пред=v7dbnet.locktrycount(0); попытка доки.записать(); исключение сообщить(описаниеошибки()); конецпопытки; V7DBNet.LockTryCount(_пред);

17 Функция LockUserName() - функция возвращает имя пользователя блокирующего объект, доступ к которому не удалось получить. Так же работает для транзакций на запись. Функция TryBeginTrans(), или ПопыткаНачалаТранзакции - функция возвращает 1 при успешном захвате транзакции или 0. Функция ListOfSession( СписокЗначений ), или АктивныеСеансы - функция заполняет, переданный в нее список значений, идентификаторами сеансов, и возвращает размер списка. Функция CurrSessionId(), или ИдентификаторСессии - функция для получения идентификатора текущего сеанса. Процедура SendMessage( ид_сеанса, строка ), или ОтправитьСообщение процедура отправки сообщения. Если идентификатор сеанса пустая строка, то рассылка всем, кроме собственного. Процедура CloseSession( ид_сеанса, жестко ), или ЗавершитьСессию процедура завершения сеанса. Если идентификатор сеанса пустая строка, то завершение всех кроме собственного. Параметр «жестко» определяет, следует ли завершить сессии принудительно, не дожидаясь окончания записи. Значения 0 ждать, 1 не ждать, завершить жестко. Процедура SetLockCode( код_блокировки ), или БлокироватьБазу установить код блокировки, который будет необходимо ввести для подключения к базе. Блокировка базы не отключает существующие сеансы, она не позволяет получить доступ к базе новым сеансам. Пустой код снимает блокировку. Функция GetLockCode(), или ПолучитьКодБлокировки возвращает текущий код блокировки.

18 Процедура DirectRead(<число>) - Включает/отключает режим «прямого доступа» - режим, в котором создается отдельная изолированная транзакция для сеанса срез данных на момент вызова процедуры. Основное назначение режима - формирования отчетов. Возможные значения аргумента 1 включить (по умолчанию), 0 выключить. Режим автоматически отключается при завершении вызывающей процедуры или при попытке записи. Процедура SafeWrite(<число>) - Включает/отключает режим «безопасной записи».режим, при котором данные блокируются для изменений в момент выборки, гарантируя тем самым их неизменность другими сеансами. Для иллюстрации работы данного режима хорошо подходит пример наращивания значения одного элемента справочника несколькими сеансами одновременно. Например необходимо нарастить значение счетчика двумя сеансами 50 раз. Без использования данного режима результат будет непредсказуем, т. к. с большой вероятностью один из сеансов отвалится с ошибкой «Объект заблокирован». Чтобы избежать длительного захвата транзакции на запись, при использовании данного режима, транзакция автоматически создается при первой попытке чтения любого объекта, завершается после записи любого объекта, затем процесс повторяется до выхода из режима. Для эффективного использования данного режима, необходимо соблюдать определенное правило построения текста программы: Выборки объектов, их модификация и запись не должны быть перемешаны.

📎📎📎📎📎📎📎📎📎📎