Зарегистрирован: 02.09.2005 Сообщения: 51 Откуда: Brazil
Добавлено: Пн Ноя 12, 2007 1:06 pm Заголовок сообщения: передать массив через MAP.
задача: открыть в форме новую операцию и заполнить в этой операции объекты учета и количество.
делал так:
Set Form = App.CreateForm(FrmID,,, TmlID)
Set Form.Map("MarrEntitites") = arrEntitites
выдает ошибку - Требуется объект: 'Form.Map'
и так делал:
Set TmpOp = Form.CurrentOperation
For k = 1 To l
TmpOp.Trans(1, k).EntID = arrEntitites(1, k)
TmpOp.Trans(1, k).Qty = arrEntitites(2, k)
Next
объекты и кол-во не заполняются.
Добавлено: Пн Ноя 12, 2007 3:36 pm Заголовок сообщения: Re: передать массив через MAP.
prospector писал(а):
задача: открыть в форме новую операцию и заполнить в этой операции объекты учета и количество.
делал так:
Set Form = App.CreateForm(FrmID,,, TmlID)
Set Form.Map("MarrEntitites") = arrEntitites
выдает ошибку - Требуется объект: 'Form.Map'
Во 1-х, массив присваивается без SET
Во 2-х, если уж МАРу присваивать указатель на объект, то делается это через, например, Set Form.Map.Item("SomeObject") = Op.Trans(1,1).Entity
prospector писал(а):
и так делал:
Set TmpOp = Form.CurrentOperation
For k = 1 To l
TmpOp.Trans(1, k).EntID = arrEntitites(1, k)
TmpOp.Trans(1, k).Qty = arrEntitites(2, k)
Next
объекты и кол-во не заполняются.
как еще можно сделать?
Посмотрите под отладчиком Ваш код.
Попробуйте в FORM_onLoad:
Код:
if Form.map.exists("Op2Copy") then
With Form.map("Op2Copy").translist(1)
For i = 1 to .Rows
op.Trans(1,i).entId = .Item(i).EntId
Next
End With
map.Remove("Op2Copy")
end if
перед созданием формы - Set Form.Map.Item("Op2Copy") = SourceOp
Зарегистрирован: 02.09.2005 Сообщения: 51 Откуда: Brazil
Добавлено: Пн Ноя 12, 2007 4:06 pm Заголовок сообщения: Re: передать массив через MAP.
AllexL писал(а):
Во 1-х, массив присваивается без SET
не знал
AllexL писал(а):
Во 2-х, если уж МАРу присваивать указатель на объект, то делается это через, например, Set Form.Map.Item("SomeObject") = Op.Trans(1,1).Entity
а это знаю
ошибся, когда писал пост
AllexL писал(а):
Посмотрите под отладчиком Ваш код.
Попробуйте в FORM_onLoad:
Код:
if Form.map.exists("Op2Copy") then
With Form.map("Op2Copy").translist(1)
For i = 1 to .Rows
op.Trans(1,i).entId = .Item(i).EntId
Next
End With
map.Remove("Op2Copy")
end if
перед созданием формы - Set Form.Map.Item("Op2Copy") = SourceOp
попробую
я выкрутился передачей через Map ссылки на лист, откуда вызывается форма и вызовом "FireOnUser"
сенкс
Добавлено: Ср Июл 07, 2010 11:00 am Заголовок сообщения:
я зробив так:
Код:
Dim j
j=0
For i=1 To T1.Rows
If T1.Cell(i,4).Value <> 0 Then
ReDim Preserve Arr(j,2)
Arr(j,0) = T1.Cell(i,6).Value
Arr(j,1) = T1.Cell(i,5).Value
Arr(j,2) = T1.Cell(i,4).Value
j=j+1
End If
Next
WorkArea.Map.Item("Arr") = Arr
Unload vbOK
а потім:
Код:
For j=0 To UBound(Workarea.Map.Item("Arr"))
MsgBox Workarea.Map.Item("Arr")(j,0)
MsgBox Workarea.Map.Item("Arr")(j,1)
MsgBox Workarea.Map.Item("Arr")(j,2)
Next
Dim j
j=0
For i=1 To T1.Rows
If T1.Cell(i,4).Value <> 0 Then
ReDim Preserve Arr(j,2)
Arr(j,0) = T1.Cell(i,6).Value
Arr(j,1) = T1.Cell(i,5).Value
Arr(j,2) = T1.Cell(i,4).Value
j=j+1
End If
Next
WorkArea.Map.Item("Arr") = Arr
Unload vbOK
а потім:
Код:
For j=0 To UBound(Workarea.Map.Item("Arr"))
MsgBox Workarea.Map.Item("Arr")(j,0)
MsgBox Workarea.Map.Item("Arr")(j,1)
MsgBox Workarea.Map.Item("Arr")(j,2)
Next
І невірно зробили. Я ж так розумію, що масив з мапу ви потім не витираєте? Не треба захламляти глобальний мап непотрібними для того речами:
1. Память займає
2. А де гарантія, що якщо ви закинули туди якусь змінну, то її не вийме і не змінить хтось не той, кому вона адресувалась (ну там інша форма чи діалог)?
Можна, звичайно, давати унікальні імена елементам мапу, чистити його після використання... Але набагато простіше і правильніше робити так, як написано вище, мап форм і діалогів для того і був придуманий
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах