Справка Инфо-Бухгалтер 10

Тестирование в режиме многопользовательской работы

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

Создание новой сессии путем копирования параметров текущей происходит при помощи функции КОПИРОВАТЬ_ТЕК_СЕССИЮ.

В примере тестирования многопользовательского режима работы создается 5 сессий, в которых происходит работа с базой данных: в каждой сессии происходит добавление 8000 операций в журнал Тест. В цикле параллельно запускается на выполнение алгоритм по добавлению операций. Перед выполнением алгоритма добавления операций создаются объекты аналитики и динамические свойства, ссылки на которые будут выступать в качестве данных проводок журнальных операций.

Пример

ВЫЧИСЛИТЬ
  ПЕРЕМ КОНФИГУРАТОР: кф
  ЕСЛИ кф.ОТКРЫТЬ ТО    
    ПЕРЕМ МОДИФ_ПАРАМ: мп
    
    ПЕРЕМ КФ_ОБЪЕКТ: счет 
    счет.код = "Счет"
    счет.название = "Счет"
    счет.доступ.ПО_УМОЛЧАНИЮ
    кф.ЗАПИСАТЬ_ОБЪЕКТ(счет.код, счет, мп)
    
    ПЕРЕМ КФ_ДИН_СВОЙСТВА: дс_счет
    дс_счет.доступ = счет.доступ
    дс_счет.свойства["контрагент"] = [ тип = ТСВ_ССЫЛКА, значение = ССЫЛКА[] ]
    дс_счет.свойства["товар"] = [ тип = ТСВ_ССЫЛКА, значение = ССЫЛКА[] ]
    кф.ДИН_ЗАПИСАТЬ(счет.код, дс_счет)

    ПЕРЕМ КФ_ОБЪЕКТ: контрагент 
    контрагент.код = "Контрагент"
    контрагент.название = "Контрагент"
    контрагент.доступ.ПО_УМОЛЧАНИЮ
    кф.ЗАПИСАТЬ_ОБЪЕКТ(контрагент.код, контрагент, мп)
    
    ПЕРЕМ КФ_ДИН_СВОЙСТВА: дс_контрагент
    дс_контрагент.доступ = контрагент.доступ
    дс_контрагент.свойства["название"] = [ тип = ТСВ_СТРОКА, значение = "" ]
    дс_контрагент.свойства["договор"] = [ тип = ТСВ_СТРОКА, значение = "" ]
    кф.ДИН_ЗАПИСАТЬ(контрагент.код, дс_контрагент)

    ПЕРЕМ КФ_ОБЪЕКТ: товар 
    товар.код = "Товар"
    товар.название = "Товар"
    товар.доступ.ПО_УМОЛЧАНИЮ
    кф.ЗАПИСАТЬ_ОБЪЕКТ(товар.код, товар, мп)
    
    ПЕРЕМ КФ_ДИН_СВОЙСТВА: дс_товар
    дс_товар.доступ = товар.доступ
    дс_товар.свойства["название"] = [ тип = ТСВ_СТРОКА, значение = "" ]
    дс_товар.свойства["цена"] = [ тип = ТСВ_ЧИСЛО, значение = 0 ]
    кф.ДИН_ЗАПИСАТЬ(товар.код, дс_товар)
    
    ПЕРЕМ КФ_ОБЪЕКТ: валюта 
    валюта.код = "USD"
    валюта.название = "Доллар"
    валюта.доступ.ПО_УМОЛЧАНИЮ
    кф.ЗАПИСАТЬ_ОБЪЕКТ(валюта.код, валюта, мп)
    
    ПЕРЕМ КФ_ДИН_СВОЙСТВА: дс_валюта
    дс_валюта.доступ = валюта.доступ
    дс_валюта.свойства["курс"] = [ тип = ТСВ_ЧИСЛО, значение = 1 ]
    кф.ДИН_ЗАПИСАТЬ(валюта.код, дс_валюта)
    
    кф.ЗАКРЫТЬ(ДА)
  КОНЕЦ_ЕСЛИ

  КОНСТ КолПараллельныхСессий = 5
  ЦИКЛ ДЛЯ (и = 1, КолПараллельныхСессий)
    ВЫПОЛНИТЬ(["Добавление ссылок.ibx"](и), НЕТ)
  КОНЕЦ_ЦИКЛА
КОНЕЦ
Показатьполностью исходный код Добавление ссылок.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
        ]
        
    ПЕРЕМ рез = ж.ДОБАВИТЬ(оп, доступ)
    ЕСЛИ НЕ рез ТО
      ГенОшибку
    КОНЕЦ_ЕСЛИ  
  КОНЕЦ_ЦИКЛА    
КОНЕЦ

См. также: