Сам интерфейс выглядит следующим образом:
Текст кода должен начинаться после ключевого слова begin.
Можно проверять выполнение функций, довольно полезно при отладке:
Можно также (это наверное самое полезное) проверять работу объектного интерфейса:
Код интерфейса довольно простой:
Код: Выделить всё
#component "Utils"
interface TestScript 'Тестирование V4A скриптов';
show at (,, 90, 35);
const
csTestScriptMemoType = 501;
end;
File _memoFile;
create view
as select
AllMemo.nRec
from
AllMemo
where
((
cox$Users == AllMemo.wTable and
UserId() == AllMemo.cRec and
csTestScriptMemoType == AllMemo.Tip
));
text AllMemo.Mem;
show at(,,, 31);
screen scrMain;
show at(, 32,,) fixed_Y;
noTableNavigation;
buttons
cmRunScript;
<<
<. Выполнить .>
>>
end
tableEvent table AllMemo;
cmUpdateRecord:
{
update current AllMemo;
}
end;
private procedure RunScript;
{
if (not _memoFile.OpenMemo(AllMemo.Mem))
exit;
if (_memoFile.GetSize() <> 0)
{
var scrNumber : longint;
scrNumber := vaGetFreeHandle();
vaAddStr(scrNumber, 'script __TestScript;'); // Добавляем имя скрипта
var wasScrEnd : boolean; // Признак наличия завершающего тега скрипта -> .end
wasScrEnd := false;
_memoFile.Seek(0);
while(not _memoFile.EOF())
{
var str : string;
_memoFile.ReadLn(str);
vaAddStr(scrNumber, str);
if (InStr('end.', str) > 0)
wasScrEnd := true;
}
if (not wasScrEnd)
vaAddStr(scrNumber, 'end.'); // Добавляем завершающий тег скрипта
var scrHandle : longint;
scrHandle := vaCompile(scrNumber);
vaFreeSource(scrNumber);
if (scrHandle <> -1)
{
var res : void;
vaExecute(scrHandle, res);
vaFree(scrHandle);
}
else
{
Message(vaErrorText(), Error);
}
}
_memoFile.Close();
}
handleEvent
cmRunScript:
{
RunScript();
}
cmInit:
{
if (getfirst fastfirstrow AllMemo <> tsOk)
{
ClearBuffer(#AllMemo);
AllMemo.Name := 'Проверка тестового скрипта';
insert current AllMemo;
}
}
end;
end.