Использование функции Array

Материал из GedeminWiki
Перейти к: навигация, поиск

Пример 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

См. также

VBScript: Array function

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты