18.06.2010, 11:23 | #1 |
Участник
|
День добрый, никто не сталкивался со подобной задачей? Суть в том что из макроса нужно запускать отчет Navision у которого в target=Report reportNo view=SORTING(Field3) WHERE(Field3=1(ActiveCell.Value)) проблемма же заключается в следующем стандартную навовскую ссылку типа
navision://client/run?servername=ServerName%26database=DatabaseName%26company=CompanyName%26target=Report%20ReportNo%26view=SORTING(Field3)%20WHERE(Field3=1(Param))%26requestform=Да%26servertype=MSSQL VBA не понимает. а при использовании ссылки: Program = "C:\Program Files\Navision Attain\Client\fin.exe servername=ServerName, database=DatabaseName, company=CompanyName, target=Report ReportNo view=SORTING(Field3) WHERE(Field3=1(ActiveCell.Value)) requestform=Да,servertype=MSSQL" вылетает ошибка "неизвестное свойство программы 'target'." |
|
18.06.2010, 11:33 | #2 |
Участник
|
Попробуй создать ярлык для отчёта и запускать его из макроса.
|
|
18.06.2010, 11:45 | #3 |
Участник
|
В том и дело что это не выход, проблемма в том что есть документ Excel в котором сохранены номера документов которые должны указываться в WHERE(Field3=1(ActiveCell.Value)) в качестве ActiveCell.Value (для построения отчета по ним) а соответветственно придеться создавать ярлыки из того же макроса для каждого номер документа(хотя я сомневаюсь в самой возможности этого) и запускать их
|
|
18.06.2010, 12:12 | #4 |
Участник
|
Ну на край в файле ярлыка свободный доступ к пути и параметрам, можно подредактировать его через макрос, понимаю изврат, но это на крайний случай -)
|
|
18.06.2010, 16:07 | #5 |
Участник
|
Действительно что на крайний случай... А насчет изврат, так тут сама задача изврат
|
|
18.06.2010, 16:17 | #6 |
Участник
|
А функцию Shell не пробовал?
|
|
18.06.2010, 16:25 | #7 |
Участник
|
Через нее родную и пытаюсь:
Sub RunNav() On Error Resume Next Program = "C:\Program Files\Navision Attain\Client\fin.exe servername=ServerName, database=DatabaseName, company=CompanyName, target= Report ReportNo, view=SORTING(Field3) WHERE(Field3=1(ActiveCell.Value)), requestform=Да,servertype=MSSQL" TaskID = Shell(Program, 1) If Err <> 0 Then MsgBox "Нельзя запустить" & Program, vbCritical, "Ошибка" End If End Sub вот так оно выглядит(я в VBA дуб-дерево =)) |
|
18.06.2010, 17:58 | #8 |
Участник
|
Может Report ReportNo в кавычки попробовать взять? "Report ReportNo" или без пробела?
|
|
21.06.2010, 08:09 | #9 |
Участник
|
Как и предполагалось эффекта от кавычек или удаления пробела 0, собственно как я понимаю VBA ругаеться не на значение target = .....,
а на сам target, так как сам не знает что за свойство программы. |
|
21.06.2010, 10:01 | #10 |
Участник
|
Ну раз уж пошла такая "пьянка". Может подскажешь как сделать свободный доступ к пути в файле *lnk ?
|
|
21.06.2010, 11:32 | #11 |
Участник
|
Попробуйте сделать в ячейке гиперссылку и использовать следующий вариант открытия Nav из VB:
Код: Sub RunNav() Excel.ActiveSheet.Range("A1").Hyperlinks(1).Follow End Sub |
|
21.06.2010, 11:56 | #12 |
Участник
|
Сейчас VBA script выглядит так:
Sub RunLNK() Set WshShell = CreateObject("WScript.Shell") Set WshUrlShortcut = WshShell.CreateShortcut(Desktop & "nav.lnk") WshUrlShortcut.TargetPath = "navision://client/run?servername=ServerName%26database=DatabaseName%26company=CompanyName%26target=Report%20ReportNo%26view=SORTING(Field3)%20WHERE(Field3=1(ActiveCell.Value))%26requestform=Да%26servertype=MSSQL" WshUrlShortcut.Save WshShell.Run ("""*Путь к ярлыку*\nav.lnk""") End Sub запускает Nav и казалось бы все путем но значение ActiveCell.Value, не учитывает то есть в отчете в фильтре стоит номер первого документа а не указанного в документе(находящегося в активной ячейке Excel) |
|
21.06.2010, 16:37 | #13 |
Участник
|
во-вторых, присоединяюсь к Quattro используйте Excel.ActiveSheet.Range("A1").Hyperlinks(1).Follow
|
|
22.06.2010, 10:44 | #14 |
Участник
|
Не уверен что это решить проблему, так как сами ссылки сделанные из Nav'а запускаются с тем же успехом =(
то есть в отчете в фильтре указывается не параметр размещенный в ссылке(даже если воспользоваться "Файл->Отправить->Создать ярлык" или "Правка->Копировать ссылку и дальше создать ярлык самому") эффект одинаков открывает отчет в фильтре которого указан не тот документ что указан view=SORTING(Field3)%20WHERE(Field3=1(DocNo)) а первый документ. |
|
23.06.2010, 13:08 | #15 |
Участник
|
Как я и предполагал никакого эффекта, все тоже самое что при использовании моего макроса=(
|
|
23.06.2010, 14:13 | #16 |
Участник
|
Слушай, мы тут недавно столкнулись с такой проблемой, при вызове функции из отчёта, оказывается обрабатывается триггер OnInitRecord отчёта, посмотри может он тебе настройки сбивает.
|
|
23.06.2010, 14:40 | #17 |
Участник
|
OnInitRecord - даже не нашел такой =(
возможно речь идет о OnInitReport - он пустой |
|
23.06.2010, 16:04 | #18 |
Участник
|
Я сделал это! Правда считаю это полным извратом, но всё же выложу код макроса:
Sub Run() txt1 = "[InternetShortcut]" txt2 = "navision://client/run?servername=ServerName%26database=DatabaseName%26company=CompanyName% 26target=Report%20ReportNo%26view=SORTING(Field3)%20WHERE(Field3=1(" + ActiveCell.Value + "))%26requestform=Да% 26servertype=MSSQL" Open "c:\ПУТЬ К ТЕМПОВОЙ ПАПКЕ\mylink.url" For Output Access Write As 1 Print #1, txt1 Print #1, txt2 Close #1 mycommand = "c:\mylink.url" Set WshScript = CreateObject("WScript.Shell") D = WshScript.Run(mycommand, 4, False) End Sub Есть и второй вариант, только что додумал: единственная сложность это непостоянность путей к iexplore и темповой папке Второй вариант будет попроще: sub run() Shell "C:\Program Files\Internet Explorer\iexplore.exe navision://client/run?servername=ServerName%26database=DatabaseName%26company=CompanyName% 26target=Report%20ReportNo%26view=SORTING(Field3)%20WHERE(Field3=1(" + ActiveCell.Value + "))%26requestform=Да% 26servertype=MSSQL", 1 end sub Вот такие идеи, проверил, работает -) |
|
23.06.2010, 16:29 | #19 |
Участник
|
Спасибо за помощь, но увы , возможно дело каких нибудь специфических насройках самого Nav'a буду рыть в этом направлении
|
|
23.06.2010, 16:42 | #20 |
Участник
|
Забавно но если в самом Nav'e номер документа(поля фильтра в которое заносятся данные из ссылки) пустое то все нормально работает, и ваши макросы, и мой.
|
|