на данный момент пришел к такому решению:
при старте начальной формы загружаю значения словаря в таблицу, пока форму пользователь не закрыл они будут в памяти, не нужно каждый раз читать с диска
Цитата:Form_Load(form)
base = CroApp:GetBank():GetBase(1)
voc = CroApp:GetBank():GetVocabulary()
voc_1 = voc:GetBase(1):GetRecordSet()
voc_2 = voc:GetBase(2):GetRecordSet()
end
после этого словари перевожу в табличный вид, где ключ это будет код словаря, чтобы потом было проще сопоставление делать
Цитата:tbl = {}
for record in voc.Records do
code = record:GetValue(1)
concept = record:GetValue(2)
tbl [code]=concept
end
return tbl
далее выполняю запрос по образцу и результат запроса + словари передаю в форму отображения результатов
Цитата:formArg = {}
formArg.list = records
formArg.voc_1 = tbl_voc_1
formArg.voc_2 = tbl_voc_2
CroApp.GetBank(): OpenForm(2,0,Me,formArg)
в форме вывода результата создаю этот сам список
Цитата:ArgRec = Arg.list
ArgVoc_1 = Arg.voc_1
ArgVoc_2 = Arg.voc_2
for record in ArgRec.Records do
local str1 = FncReturnStr(record:GetValue(1,0,false), ArgVoc_1, 40)
local str2 = FncReturnStr(record:GetValue(2,0,false), ArgVoc_2, 40)
local str3 = record:GetValue(3):lr(40)
Me.list1:Add(str1.." "..str2.." "..str3
end
FncReturnStr(tbl, voc, num)
local str=""
for _, I in pairs(tbl) do
str = str..voc[I].."; "
end
return string.lr(str, num)
end
такая реализация позволила создать список на 14к записей на машине пользователя в сети за
38.320 мс
возможно в тот момент число пользователей было не сильно много, не большая нагрузка на Кронос была, но скорость значительно возросла по сравнению со вчерашним днём
Большое спасибо за подсказки.
Как я понимаю если делать отображение результатов по стандартной форме, то замедления нет. Авторы системы используют какие-то свои механизмы создания таблицы просмотра со словарными полями (возможно они используют динамическую загрузку данных только для тех строк, что в данный момент видны на экране), а вот если использовать самописные формы вывода результатов - тут нужно искать решения и что-то придумывать (это актуально для версии 6, для версии 7 вроде как сделали нужный контрол)