powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Задачка по Express Objects
7 сообщений из 7, страница 1 из 1
Задачка по Express Objects
    #32355262
IE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IE
Гость
Добрый день.
Вопрос спецам по семейству 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
Задачка по Express Objects
    #32355265
Birkhoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Навскидку. Может передавать параметр в вызов процедуры Express и по параметру дробить выводимый результат на части, а потом склеивать?
...
Рейтинг: 0 / 0
Задачка по Express Objects
    #32355287
IE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IE
Гость
Да, склейка кусков - это первое, что пришло в голову.
Можно также на сервере в строковую переменную весь отчет положить - а уж затем фетчить частями.
Надеюсь, что есть более красивое решение.
...
Рейтинг: 0 / 0
Задачка по Express Objects
    #32355307
Birkhoff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вариант. :)
А если написать серверную процедуру, которая пишет в файл результат отчета, а из обжектса просто подхватывать потом файл с результатом?
Тогда не будет склейки.
...
Рейтинг: 0 / 0
Задачка по Express Objects
    #32355359
IE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IE
Гость
Ну в общем пока оно все так и работает. Вручную запускаем отчет - и юзеру на блюдечке.
Только юзеров на сервер пускать не хочется и привязка к директориям жесткая получается, да и сервер не под Windows может быть

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

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



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

Конечно, для пользователя это не очень удобно.
...
Рейтинг: 0 / 0
Задачка по Express Objects
    #32362029
IE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IE
Гость
После некоторого перерыва решил довести задачку до конца.
В итоге пошел по схеме - по команде пользователя из 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
7 сообщений из 7, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Задачка по Express Objects
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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