Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Задачка по Express Objects / 7 сообщений из 7, страница 1 из 1
17.12.2003, 13:44
    #32355262
IE
IE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка по Express Objects
Добрый день.
Вопрос спецам по семейству Express.
Есть программка на сервере, которая формирует отчет в текстовом виде.
Надо на стороне клиента запустить этот отчет и выгрузить его в файл.
В моей интерпретации на Object-е это выглядит примерно так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub AfterItemClick ()
dim ExpCmd as ExpressCommand
dim sRep as string

set Expcmd = Express.Execute( "call myprog" )
sRep=ExpCmd.GetLog()
fdCSV.Path =  "C:\report"     'fdCSV - File Dialog

if fdCSV.Show then
   Open fdCSV.Path For Binary As # 1 
   Put # 1 ,, sRep
   Close # 1 
   shell( "cmd.exe /c "  & fdCSV.Path)
end if
End Sub

GetLog возвращает значение типа String (длина до 32767 байт).
Проблема в том, что надо получать отчеты бОльшей длины.

Посоветуйте, пожалуйста, как решить эту проблему

Спасибо
...
Рейтинг: 0 / 0
17.12.2003, 13:47
    #32355265
Birkhoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка по Express Objects
Навскидку. Может передавать параметр в вызов процедуры Express и по параметру дробить выводимый результат на части, а потом склеивать?
...
Рейтинг: 0 / 0
17.12.2003, 13:55
    #32355287
IE
IE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка по Express Objects
Да, склейка кусков - это первое, что пришло в голову.
Можно также на сервере в строковую переменную весь отчет положить - а уж затем фетчить частями.
Надеюсь, что есть более красивое решение.
...
Рейтинг: 0 / 0
17.12.2003, 14:07
    #32355307
Birkhoff
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка по Express Objects
Еще вариант. :)
А если написать серверную процедуру, которая пишет в файл результат отчета, а из обжектса просто подхватывать потом файл с результатом?
Тогда не будет склейки.
...
Рейтинг: 0 / 0
17.12.2003, 14:23
    #32355359
IE
IE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка по Express Objects
Ну в общем пока оно все так и работает. Вручную запускаем отчет - и юзеру на блюдечке.
Только юзеров на сервер пускать не хочется и привязка к директориям жесткая получается, да и сервер не под Windows может быть

Хочется чего-то большого и светлого...
...
Рейтинг: 0 / 0
17.12.2003, 15:31
    #32355550
Георгий Т.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка по Express Objects
Похоже, что чудес всё же не бывает :)

Мы свой "отчёт" сваливаем в переменную (всё это на сервере), а потом скачиваем блоками ...Пока ничего более умного не придумали. Да вроде и нужды особой нет.



В случае не-Windows сервера я обычно тупо по ftp смотрю свежеиспечённый серверной программой файл с отчётом. Либо FAR-ом либо браузером (настроил себе URL типа ftp://ЛОГИН:ПАРОЛЬ@СЕРВЕР/ПАПКА/ОТЧЁТ.html)

Конечно, для пользователя это не очень удобно.
...
Рейтинг: 0 / 0
24.12.2003, 13:47
    #32362029
IE
IE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка по Express Objects
После некоторого перерыва решил довести задачку до конца.
В итоге пошел по схеме - по команде пользователя из Objects программа на SPL на сервере записывает отчет в неиндексированную TEMP переменную типа текст, а потом частями по N строк программа на Objects с сервера ее получает.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
Sub AfterItemClick ()
dim ExpCmd as ExpressCommand
dim sRep as string
dim NumStr as long
dim i as long

set Expcmd = Express.Execute( "call to_excel(statfirst('XP_MEASUREDIM'))" )
set Expcmd = Express.Execute( "show numlines(str_var)" )
NumStr=val(ExpCmd.GetLog)

fdCSV.Path =  "C:\report" 
if fdCSV.Show then
  Open fdCSV.Path For Output As # 1 

   For i= 1  to int(NumStr/ 100 )+ 1 
    set Expcmd = Express.Execute( "show extlines(str_var " & str((i- 1 )* 100 + 1 ) & " 100 )")
    sRep=ExpCmd.GetLog
    Print # 1 , sRep 
   Next i

  Close # 1 

  shell( "cmd.exe /c "  & fdCSV.Path)
end if
End Sub


Теперь несколько слов, для чего это все затевалось.
В последнее время в нашей конторе участились запросы пользователей на предоставление информации, хранящейся в Express, в табличном виде в Excel, т.е. встала задача преобразования многомерных кубов с числом размерностей >2 в двумерный вид.

Конечно это извращение, но - НАДО и все!!!
Ломать работающее не хочу, писать индивидуальные программки под каждый "отчет" я уже устал, поэтому накарябал программку выгрузки произвольного показателя в Express в двумерный вид в формате CSV. Задумка - чтобы с любой страницы приложения пользователь мог после выбора показателя, ограничения статусов необходимых измерений нажать большую красную кнопку и получить отчет. Все без моего участия, без привязки к показателю и пр. Программка на SPL + кусок кода на Objects - легко переносятся в любое приложение.

Вроде получилось. Спасибо еще раз всем, принявшим участие в обсуждении.

Илья
...
Рейтинг: 0 / 0
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Задачка по Express Objects / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]