Добрый день!
При нажатии на кнопку экземпляра шаблона должен осуществляться переход на соответствующую подстраницу.
Информация по странице берется из БД. Вот код процедуры.
var
sResult: string;
lSubpage: TM_Subpage;
begin
if DataSet.Tag=2 then
begin
sResult:='spg' + DataSet.Fields[0].AsStr;
lSubpage:=GetSubpageByName(sResult);
if lSubpage <> nil then
begin
AddMessage(Now,mkMessage,'Переход на подстраницу ' + sResult,false,true);
lSubpage.GoToSubpageClient(GetClientName);
// spg22.GoToSubpageClient(GetClientName);
end;
end;
end.
Имя страницы формируется корректно, о чем свидетельствует наличие сообщений в журнале. Но переход не происходит.
Пишу явный переход (под комментарием). Перехода все равно нет. В чем может быть проблема? Что не так делаю? Версия 2.5.15.3.
Здравствуйте.
Кроме конфликта клиентов для Вашего примера еще есть конфликт SQL-запросов и конфликт двух одиночных нажатий ЛКМ (двойной клик) оператором.
С оператором, увы, сделать ничего нельзя. Разрешить первые два эти конфликта можно двумя способами:
1. "кто первый встал тому и тапки" - отклонением действий всех клиентов, кроме первого. В качестве флажка возможности перехода можно использовать "пустое" значение переменной vCurrentClient.
Скрипт по нажатию кнопки:begin
if vCurrentClient.AsStr <> '' then exit;
vCurrentClient.Value := GetClientName;
RunSQL('...', nil, 2);
. . .
end.
Скрипт обработки SQL-запроса:begin
. . .
GetSubpageByName('spg' + DataSet.Fields[0].AsStr).GoToSubpageClient(vCurrentClient.AsStr);
vCurrentClient.Value "= '';
...
end.
2. Использовать список клиентов, запросивших переход к подстранице. Список обслуживается аналогично пункту 1. Размер списка определяет количество одновременно обслуживаемых клиентов и теоретически равен удвоенному числу клиентов, максимально возможных к одновременному подключению.
Во вложении пример подстраничного перехода для списка из 6 элементов. К проекту необходимо предварительно подключить БД. В индикации (одной на всех) указаны имя подстраницы перехода, имя клиента и Tag запроса. Первый запрос имеет Tag=1, второй - 2 и т.д.
При некотором терпении, "двойной клик ЛКМ" может вызвать два перехода - см. счетчик максимального заполнения списка.