Тестирование в режиме многопользовательской работы
Для тестирования прикладных алгоритмов в режиме многопользовательской работы достаточно использовать локальные сессии. Работа одного пользователя с базой данных происходит в рамках одной сессии, которая создается при запуске клиентского приложения. Создание нескольких сессий путем копирования текущей сессии позволяет имитировать работу сразу нескольких пользователей с одной базой данных.
Создание новой сессии путем копирования параметров текущей происходит при помощи функции КОПИРОВАТЬ_ТЕК_СЕССИЮ.
В примере тестирования многопользовательского режима работы создается 5 сессий, в которых происходит работа с базой данных: в каждой сессии происходит добавление 8000 операций в журнал Тест. В цикле параллельно запускается на выполнение алгоритм по добавлению операций. Перед выполнением алгоритма добавления операций создаются объекты аналитики и динамические свойства, ссылки на которые будут выступать в качестве данных проводок журнальных операций.
Пример
ВЫЧИСЛИТЬ ПЕРЕМ КОНФИГУРАТОР: кф ЕСЛИ кф.ОТКРЫТЬ ТО ПЕРЕМ МОДИФ_ПАРАМ: мп ПЕРЕМ КФ_ОБЪЕКТ: счет счет.код = "Счет" счет.название = "Счет" счет.доступ.ПО_УМОЛЧАНИЮ кф.ЗАПИСАТЬ_ОБЪЕКТ(счет.код, счет, мп) ПЕРЕМ КФ_ДИН_СВОЙСТВА: дс_счет дс_счет.доступ = счет.доступ дс_счет.свойства["контрагент"] = [ тип = ТСВ_ССЫЛКА, значение = ССЫЛКА[] ] дс_счет.свойства["товар"] = [ тип = ТСВ_ССЫЛКА, значение = ССЫЛКА[] ] кф.ДИН_ЗАПИСАТЬ(счет.код, дс_счет) ПЕРЕМ КФ_ОБЪЕКТ: контрагент контрагент.код = "Контрагент" контрагент.название = "Контрагент" контрагент.доступ.ПО_УМОЛЧАНИЮ кф.ЗАПИСАТЬ_ОБЪЕКТ(контрагент.код, контрагент, мп) ПЕРЕМ КФ_ДИН_СВОЙСТВА: дс_контрагент дс_контрагент.доступ = контрагент.доступ дс_контрагент.свойства["название"] = [ тип = ТСВ_СТРОКА, значение = "" ] дс_контрагент.свойства["договор"] = [ тип = ТСВ_СТРОКА, значение = "" ] кф.ДИН_ЗАПИСАТЬ(контрагент.код, дс_контрагент) ПЕРЕМ КФ_ОБЪЕКТ: товар товар.код = "Товар" товар.название = "Товар" товар.доступ.ПО_УМОЛЧАНИЮ кф.ЗАПИСАТЬ_ОБЪЕКТ(товар.код, товар, мп) ПЕРЕМ КФ_ДИН_СВОЙСТВА: дс_товар дс_товар.доступ = товар.доступ дс_товар.свойства["название"] = [ тип = ТСВ_СТРОКА, значение = "" ] дс_товар.свойства["цена"] = [ тип = ТСВ_ЧИСЛО, значение = 0 ] кф.ДИН_ЗАПИСАТЬ(товар.код, дс_товар) ПЕРЕМ КФ_ОБЪЕКТ: валюта валюта.код = "USD" валюта.название = "Доллар" валюта.доступ.ПО_УМОЛЧАНИЮ кф.ЗАПИСАТЬ_ОБЪЕКТ(валюта.код, валюта, мп) ПЕРЕМ КФ_ДИН_СВОЙСТВА: дс_валюта дс_валюта.доступ = валюта.доступ дс_валюта.свойства["курс"] = [ тип = ТСВ_ЧИСЛО, значение = 1 ] кф.ДИН_ЗАПИСАТЬ(валюта.код, дс_валюта) кф.ЗАКРЫТЬ(ДА) КОНЕЦ_ЕСЛИ КОНСТ КолПараллельныхСессий = 5 ЦИКЛ ДЛЯ (и = 1, КолПараллельныхСессий) ВЫПОЛНИТЬ(["Добавление ссылок.ibx"](и), НЕТ) КОНЕЦ_ЦИКЛА КОНЕЦ
ФУНКЦИЯ ГенОшибку
ПЕРЕМ СТРОКА: сообщ
ПЕРЕМ код = ПОСЛ_ОШИБКА(сообщ)
ЕСЛИ (код = 0) И (сообщ = "") ТО
сообщ = "Неизвестная ошибка"
КОНЕЦ_ЕСЛИ
_ОШИБКА(сообщ)
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ ССЫЛКА: СлучКонтрагент
РЕЗУЛЬТАТ.код = "Контрагент"
РЕЗУЛЬТАТ.свойства["название"] = "Контрагент" + СТР(СЛУЧ_ЧИСЛО(1000))
РЕЗУЛЬТАТ.свойства["договор"] = "Договор" + СТР(СЛУЧ_ЧИСЛО(100))
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ ССЫЛКА: СлучТовар
РЕЗУЛЬТАТ.код = "Товар"
РЕЗУЛЬТАТ.свойства["название"] = "Товар" + СТР(СЛУЧ_ЧИСЛО(1000))
РЕЗУЛЬТАТ.свойства["цена"] = 10.0 + СЛУЧ_ЧИСЛО(1000) / 10.0
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ ССЫЛКА: СлучСчет
РЕЗУЛЬТАТ.код = "Счет"
РЕЗУЛЬТАТ.свойства["контрагент"] = СлучКонтрагент
РЕЗУЛЬТАТ.свойства["товар"] = СлучТовар
КОНЕЦ_ФУНКЦИИ
ФУНКЦИЯ ССЫЛКА: СлучВалюта
РЕЗУЛЬТАТ.код = "USD"
РЕЗУЛЬТАТ.свойства["курс"] = 50.0 + СЛУЧ_ЧИСЛО(100) / 10.0
КОНЕЦ_ФУНКЦИИ
ВЫЧИСЛИТЬ(ЦЕЛОЕ: номер_сессии)
ПЕРЕМ ид_сессии = КОПИРОВАТЬ_ТЕК_СЕССИЮ
ЕСЛИ ид_сессии = "" ТО
ГенОшибку
КОНЕЦ_ЕСЛИ
ПЕРЕМ ПРАВА_ДОСТУПА: доступ
доступ.ПО_УМОЛЧАНИЮ
ПЕРЕМ ЖУРНАЛ: ж = [ название = "Тест" ]
ЦИКЛ ДЛЯ(и = 1, 8000)
ПЕРЕМ ОПЕРАЦИЯ: оп
оп.номер = 0
оп.идент = ""
оп.дата_время = ДАТА_ВРЕМЯ_ТЕК
оп.комментарий = "Сессия #" + СТР(номер_сессии) + " (" + ид_сессии + "), операция #" + СТР(и)
оп.проводки[1] =
[
дебет = СлучСчет,
кредит = СлучСчет,
единицы = СлучВалюта,
количество = 10.0 + СЛУЧ_ЧИСЛО(1000) / 10.0
]
ПЕРЕМ рез = ж.ДОБАВИТЬ(оп, доступ)
ЕСЛИ НЕ рез ТО
ГенОшибку
КОНЕЦ_ЕСЛИ
КОНЕЦ_ЦИКЛА
КОНЕЦ