Список форумов Акцент Акцент
официальный форум разработчика программы Акцент
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

передать массив через MAP.

 
Начать новую тему   Ответить на тему    Список форумов Акцент -> Акцент 6.0
Предыдущая тема :: Следующая тема  
Автор Сообщение
prospector



Зарегистрирован: 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
объекты и кол-во не заполняются.

как еще можно сделать?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
AllexL



Зарегистрирован: 10.03.2005
Сообщения: 434
Откуда: Donetsk

СообщениеДобавлено: Пн Ноя 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
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
prospector



Зарегистрирован: 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

а это знаю
ошибся, когда писал пост Smile
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"
сенкс Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Sasha
Гость





СообщениеДобавлено: Ср Июл 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
Вернуться к началу
kris



Зарегистрирован: 12.01.2006
Сообщения: 371

СообщениеДобавлено: Ср Июл 07, 2010 2:30 pm    Заголовок сообщения: Ответить с цитатой

Sasha писал(а):
я зробив так:
Код:
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. А де гарантія, що якщо ви закинули туди якусь змінну, то її не вийме і не змінить хтось не той, кому вона адресувалась (ну там інша форма чи діалог)?
Можна, звичайно, давати унікальні імена елементам мапу, чистити його після використання... Але набагато простіше і правильніше робити так, як написано вище, мап форм і діалогів для того і був придуманий Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Акцент -> Акцент 6.0 Часовой пояс: GMT + 2
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group