Программа для склада, для магазина, для производства |
Vvs "Офис-Склад-Магазин"Редактирование форм документов и отчетов |
П.12. Использование кода на Visual Basic Script и JavaScript.
В форме документов и отчетов можно вставлять фрагменты, написанные на Visual Basic Script (VBScript) и JavaScript (JScript). Процедуры и функции, написанные VBScript или JScript, могут вызываться из макроязыка, значения, возвращаемые функциями, могут записываться в переменные. Значения из базы данных и другие значения выражений макроязыка, передаются в параметрах процедур и функций VBScript или JScript.
Использование Visual Basic Script и JScript существенно увеличивают возможности макроязыка. Например, это позволяет использовать Ole Automation для связи с объектами других приложений и операционной системы.
По сравнению с простым макроязыком программы, написание скриптов требует знания программирования на Visual Basic или Java Script. Документацию по Visual Basic Script и JavaScript можно скачать на сайте Microsoft.
Поддержка VBScript и JScript имеется в относительно свежих версиях Windows (начиная с Windows'98) и Internet Explorer. Для более старых версий поддержку VBScript и JScript можно установить.
Формат выражений.
Фрагменты кода на VBScript должны начинаться со строки
@SCRIPT
или
@SCRIPT VBScript
Фрагменты кода на JScript должны начинаться со строки
@SCRIPT
JScript
Окончание кода помечается строкой:
@ENDSCRIPT
Например, функция для вывода сообщения, всегда возвращает 123:
@SCRIPT
Function MyMessage(say)
MsgBox
say,vbYesNoCancel,"Мой Скрипт"
MyMessage="123
End Function
@ENDSCRIPT
Для вызова процедур и функция используются следующие конструкции.
Вызов без проверки возвращаемого значения:
@RUNSCRIPT Имя_функции|Параметр1|Параметр2|Параметр3 ...
Вызов функции с сохранением возвращаемого значения в числовую переменную X1:
@X1=:Имя_функции|Параметр1|Параметр2|Параметр3 ...
Вызов функции с сохранением возвращаемого значения в строковую переменную Y1:
@Y1=:Имя_функции|Параметр1|Параметр2|Параметр3 ...
Разделителем параметров служит символ | или табуляция. Поэтому символ | нельзя передать в параметрах.
Например, вызовы функции MyMessage могут быть следующие:
@RUNSCRIPT MyMessage|Проверочное сообщение!
@RUNSCRIPT MyMessage|Товар [DTWR,-1] кончился!
@X1=:MyMessage|Клиент [BP2,-1] имеет баланс [BP31,-1]!
@Y1=:MyMessage|2+2=[2+2]!
Имеется ограничение на количество параметров в одной функции.
Примеры.
Пример 1. Функция для преобразования всех символов в строке в заглавные буквы. Выводим названия товаров в верхнем регистре.
@SCRIPT
Function Upper(str)
Upper = UCase(str)
End Function
@ENDSCRIPT
@// в переменную YS
записываем название товара (DTWR)
в верхнем регистре.
{
@YS=:Upper|[DTWR,-1]
[YS,-1]
}
Тот же пример, с использованием JavaScript.
@SCRIPT
JScript
function Upper(str)
{
return str.toUpperCase();
}
@ENDSCRIPT
{
@YS=:Upper|[DTWR,-1]
[YS,-1]
}
Пример 2. Выбор каталога для вывода текстового файла с отчетом.
@SCRIPT
Function browse()
Set WSHShellApp =CreateObject("Shell.Application")
Set SelectedItem = WSHShellApp.BrowseForFolder(0, "Куда
выводить отчет:", 0, 0)
browse=""
if (not SelectedItem is nothing) then
browse=SelectedItem.Items.Item.Path
end if
End Function
@ENDSCRIPT
@YPATH=:browse
@IFNOT[YPATH
]@BREAK
Отчет сохранен в файл: [YPATH,-1]\report_from_vvs.txt
@SETOUT [YPATH,-1]\report_from_vvs.txt
Отчет!
.....
Пример 3. Вывод данных в Word. Вывод данных в файл barcode1.doc, в котором находится таблица с этикеткой товара. Этикетки печатаются в том количестве, сколько товаров выбрано в заказе.
@SCRIPT
Dim wrd
Dim Doc
Function Connect(fileName)
On Error Resume Next
Set
wrd = GetObject(, "Word.Application")
If
err <> 0 Then
err.Clear
Set wrd = CreateObject("Word.Application")
If err <> 0 Then
err.Clear
Connect=0
Exit Function
end if
End
if
On
Error GoTo 0
wrd.Visible
= True
Set
Doc = wrd.Documents.Open(fileName)
Connect=1
End Function
Function
PrintLabel(kod,text1,price,text2,kol)
Doc.Tables(1).Rows(1).Cells(1).Range.Text=text1
Doc.Tables(1).Rows(3).Cells(1).Range.Text=price
Doc.Tables(1).Rows(3).Cells(2).Range.Text=text2
Doc.PrintOut
true,false,"0","","","",0,kol
End Function
@ENDSCRIPT
@XIS=:Connect|[YPATHEXE,-1]barcode1.doc
@IF[ISNUL(XIS)]@BREAK
{
@RUNSCRIPT PrintLabel|[DP5,-1]|[DTWR,-1]|[DC1,-1]|[DP3,-1]|[~HP7,-1]
}