Использование функции Array
Пример 1
Недавно натолкнулся на такой код обработчика события OnExecute в одной из наших настроек:
option explicit
sub usrg_act_previewOnExecute(ByVal Sender)
dim P(0)
dim gdcOrder
set gdcOrder = Sender.Form.gdcObject
P(0) = gdcOrder.Id
call System.ReportSystem.BuildReportWithParam(_
gdcBaseManager.GetIDByRUIDString("147149305_362821871"), P)
end sub
Как видно, в нем создается переменная P типа массив для передачи в функцию System.ReportSystem.BuildReportWithParam параметров построения отчета. В VBScript есть встроенная функция Array, которая возвращает массив из заданных значений. Использование данной функции существенно сокращает код:
option explicit
sub usrg_act_previewOnExecute(ByVal Sender)
System.ReportSystem.BuildReportWithParam _
gdcBaseManager.GetIDByRUIDString("147149305_362821871"),_
Array(Sender.OwnerForm.gdcObject.ID)
end sub
Так же обратите внимание на использование свойства OwnerForm вместо Owner, что логически более правильно, если мы хотим обращаться к свойству gdcObject, которое есть только у просмотровой формы или диалогового окна бизнес-объекта.
Пример 2
На этот раз речь пойдет о фунции подготовливающей данные для отчета "ценники" из стандартной настройки складского учета и торговли. Обратим внимание на такой блок кода:
while not q1.EOF
if CountOnQuantity then
for i = 0 to Int(q1.FieldByName("quantity").AsCurrency) - 1
q11.Append
q11.FieldByName("documentdate").AsDateTime = _
q1.FieldByName("documentdate").AsDateTime
q11.FieldByName("NUMBER").AsString=_
q1.FieldByName("NUMBER").AsString
q11.FieldByName("goodname").AsString = _
q1.FieldByName("goodname").AsString
q11.FieldByName("goodalias").AsString = _
q1.FieldByName("goodalias").AsString
q11.FieldByName("name").AsString = _
q1.FieldByName("name").AsString
q11.FieldByName("TO_USR$INV_COSTRETAILNCU").AsCurrency = _
q1.FieldByName("TO_USR$INV_COSTRETAILNCU").AsCurrency
q11.Post
next
else
q11.Append
q11.FieldByName("documentdate").AsDateTime = _
q1.FieldByName("documentdate").AsDateTime
q11.FieldByName("NUMBER").AsString=_
q1.FieldByName("NUMBER").AsString
q11.FieldByName("goodname").AsString = _
q1.FieldByName("goodname").AsString
q11.FieldByName("goodalias").AsString = _
q1.FieldByName("goodalias").AsString
q11.FieldByName("name").AsString = _
q1.FieldByName("name").AsString
q11.FieldByName("TO_USR$INV_COSTRETAILNCU").AsCurrency = _
q1.FieldByName("TO_USR$INV_COSTRETAILNCU").AsCurrency
q11.Post
end if
q1.Next
wend
Упростим его:
Dim I, J, K, A()
A = Array("documentdate", "number", "goodname", "goodalias", "name", "TO_USR$INV_COSTRETAILNCU")
While Not q1.EOF
if CountOnQuantity then
J = Int(q1.FieldByName("quantity").AsCurrency) - 1
else
J = 0
end if
For I = 0 to J
q11.Append
For K = LBound(A) To UBound(A)
q11.FieldByName(A(K)).Assign q1.FieldByName(A(K))
Next
q11.Post
Next
WEnd