Текущее время: Вс, июн 22 2025, 21:43

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Таблицу из VBA в ФМник
СообщениеДобавлено: Пт, июн 15 2012, 16:28 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, мар 23 2012, 11:54
Сообщения: 58
Пол: Мужской
Коллеги, добрый день! Подскажите пожалуйста такую вещь:

из вба вызываю фм и передаю ему значение признака для обработки:
FM1.exports("I_OBJ") = RESULT
и так каждый раз для каждого значения. I_OBJ - типа char 20, RESULT - значение из ячейки.

Как сделать передачу сразу списка значений? Как это реализовать на стороне VBA? Конкретно вопрос в том, как сделать на вба переменную типа таблица и аппендить в нее строчки и чтобы фм ее принял как родную? )) I_OBJ к примеру будет типа "таблица с 2 полями".
Заранее благодарю.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Таблицу из VBA в ФМник
СообщениеДобавлено: Пт, июн 15 2012, 16:55 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Вс, янв 11 2009, 14:41
Сообщения: 902
Откуда: Москва
Пол: Мужской
Думаю, общая идея будет понятна (это, правда, на чтение табличных данных, для записи будет очень похоже). Чтобы лучше разобраться следует подсоединить через reference библиотеки (парочку, имена сейчас не вспомню), чтобы потом в навигаторе (по F2 который вызывается) посмотреть по ним справочную информацию (по крайней мере параметры вызова и связку между объектами)

Code:
' получить список переменных
Private Function GetVarInfoList _
( _
    p_QueryID As String _
) As Collection

    Dim objFuncCtrl As Object
    Dim objFunc As Object
    Dim objRow As Object
    Dim objVarInfoList As Collection
    Dim objVarInfo As CVarInfo
   
    On Error GoTo ErrHandler
   
    Set objFuncCtrl = CreateObject("SAP.Functions")
    Set objFuncCtrl.Connection = Connection
       
    Set objFunc = objFuncCtrl.Add("Z00BW_STA_GET_VAR_INFO")
    objFunc.exports("P_GENUNIID") = p_QueryID
       
    If objFunc.Call Then
        Set objVarInfoList = New Collection
       
        For Each objRow In objFunc.tables("P_VARINFO_TAB").Rows
            Set objVarInfo = New CVarInfo
            objVarInfo.vnam = objRow.Value("VNAM")
            objVarInfo.vartyp = objRow.Value("VARTYP")
            objVarInfo.vproctp = objRow.Value("VPROCTP")
            objVarInfo.vparsel = objRow.Value("VPARSEL")
            objVarInfo.iobjnm = GetParsedIOBJNM(objRow.Value("IOBJNM"))
            objVarInfo.varinput = objRow.Value("VARINPUT")
            objVarInfo.dynchange = objRow.Value("DYNCHANGE")
            objVarInfo.txtlg = objRow.Value("TXTLG")
            objVarInfo.posn = objRow.Value("POSN")
            objVarInfo.intlen = objRow.Value("INTLEN")
           
            objVarInfo.split_report = True
            objVarInfoList.Add objVarInfo, "K" & objVarInfo.posn
        Next
       
        Set GetVarInfoList = objVarInfoList
    End If
   
    Exit Function
   
ErrHandler:

    MsgBox "Невозможно получить информацию о переменных ", , "Ошибка"
End Function


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Таблицу из VBA в ФМник
СообщениеДобавлено: Пт, июн 15 2012, 17:36 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, мар 23 2012, 11:54
Сообщения: 58
Пол: Мужской
Спасибо, это как раз был второй вопрос - как получить таблицу )). Тут смысл в том, что экспортируемая таблица записывается по строчкам в objVarInfo, а он имеет тип CVarInfo. А что это за тип такой?

Я конкретно не понимаю одну вещь - как мне сделать RESULT типом "таблица с 2мя столбцами" и туда вбить 5 строчек из А1:B5 к примеру.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Таблицу из VBA в ФМник
СообщениеДобавлено: Пт, июн 15 2012, 19:05 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Вс, янв 11 2009, 14:41
Сообщения: 902
Откуда: Москва
Пол: Мужской
CVarInfo - это просто класс, в котором, кроме PUBLIC полей, ничего нет... с этим классом я потом в коде работаю, то есть для вызова ФМ он никакой смысловой нагрузки не несет.

Чтобы передать таблицу в ФМ с данными надо работь в VBA не с типом Object, а с нормальными типизированными классами. Для этого, как я уже писал, следует подключить парочку библиотек TLB. Один из файлов назывался как-то (по маске) *w*func*.ocx. Расположены эти файлы были где-то в SAP-овской директории, точнее не скажу, так как системы сейчас нет под рукой. После соединения с данными файлами можно будет тип Object заменить на нормальный. В таком виде будет легче практиковаться в передаче параметров.

Например, можно будет сделать примерно следующее

Dim objTable as XXXX.YYYYYY
Set objTable = objFunc.tables("RESULT")
objTable.

ну и после точки появится подсказка с методами. В них поискать что-то типа Add или AddRow или т.п. Состряпать простейший ФМ-ник и отладить на нем передачу параметров.

Сами значения будут присваиваться (добавляться в таблицу) примерно так

objRow.Value("VNAM") = objVarInfo.vnam


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Таблицу из VBA в ФМник
СообщениеДобавлено: Сб, июн 16 2012, 08:58 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Вс, янв 11 2009, 14:41
Сообщения: 902
Откуда: Москва
Пол: Мужской
Библиотеки:

C:\Program Files\SAP\FrontEnd\SAPgui\wdtlogU.ocx - соединение
C:\Program Files\SAP\FrontEnd\SAPgui\wdtfuncU.ocx - описание функции и ее вызов
C:\Program Files\SAP\FrontEnd\SAPgui\wdtaocxU.ocx - параметры типа структура и таблица

Суффикс U означает unicode-версия. Если будут проблемы при коннекте или данные библиотеки просто отсутствуют, то тогда следует брать их аналоги без суффикса U (в той же директории)

Присоединяем эти библиотеки через Reference и все сразу становится хорошо... Изображение


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Таблицу из VBA в ФМник
СообщениеДобавлено: Вс, июн 17 2012, 13:36 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, мар 23 2012, 11:54
Сообщения: 58
Пол: Мужской
Спасибо! Буду разбираться


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Таблицу из VBA в ФМник
СообщениеДобавлено: Пн, июн 18 2012, 13:32 
Младший специалист
Младший специалист

Зарегистрирован:
Пт, мар 23 2012, 11:54
Сообщения: 58
Пол: Мужской
Все оказалось до умиления просто:

murmur написал:
Чтобы передать таблицу в ФМ с данными надо работь в VBA не с типом Object, а с нормальными типизированными классами.


Все-таки с Object )

Dim objTable as Object
Set objTable = objFunc.tables("RESULT")
For i = 1 To j
objTable.Rows.Add(i, "NAME_OF_ROW") = Cells(x, y).Value
.....
objFunc.Call
И все ) ФМ-ник принимает такую табличку с полем "NAME_OF_ROW"

Спасибо за идеи!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Таблицу из VBA в ФМник
СообщениеДобавлено: Пн, июн 18 2012, 15:43 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Вс, янв 11 2009, 14:41
Сообщения: 902
Откуда: Москва
Пол: Мужской
zzvl написал:
Все оказалось до умиления просто:

murmur написал:
Чтобы передать таблицу в ФМ с данными надо работь в VBA не с типом Object, а с нормальными типизированными классами.


Все-таки с Object )

Dim objTable as Object
Set objTable = objFunc.tables("RESULT")
For i = 1 To j
objTable.Rows.Add(i, "NAME_OF_ROW") = Cells(x, y).Value
.....
objFunc.Call
И все ) ФМ-ник принимает такую табличку с полем "NAME_OF_ROW"

Спасибо за идеи!


Нет, отладку кода надо делать с присоединенными библиотеками, чтобы явно видеть классы, которые используешь и методы - то есть использовать все преимущества TLB. После того, как вся функциональность будет отлажена, можно заменить явные имена классов на тип Object и отсоединить библиотеки в Reference. Делают это с единственной целью - обеспечить работу программы на разных версиях используемых библиотек (у разных пользователей могут стоять разные версии библиотек).

Работать с типом Object, когда есть TLB-файлы с явными именами классов, как минимум странно

PS: Надеюсь, вы когда классы из библиотек пытались прикрутить заменяли CreateObject на New


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB