Отчеты в терминальном режиме
5 (1)
Отчеты в терминальном режиме ( Mushfig 04.10.2006 10:37 )
5(1)Здравствуйте
Посоветуйте как можно переделать уже существующий отчет выходящий в терминальном окне, на отчет выходящий в Екселе. Т.е. уже отчет есть, только надо поменять метод вывода.
Заранее спасибо
>> ОтветитьНеужели никто не знает? ( Mushfig 04.10.2006 11:28 )
4(1)Not specified
>> ОтветитьВсе знают, но молчат ( Ltybc 04.10.2006 12:11 )
5(1)Надо его переписать. А как, это уже долгая история.
>> ОтветитьЗаново переписать ( Mushfig 04.10.2006 12:16 )
5(1)Эээ. Пример чего? ( Ltybc 04.10.2006 12:51 )
4(1)Работы с Excel?
import rslx, rcw; if (IsStandAlone()) // двухзвенная архитектура if ((ValType(ex)!=V_UNDEF) and (ex.Visible==False)) ex = ActiveX("Excel.Application",NULL,false); else ex = ActiveX("Excel.Application",NULL,true); end; else // трехзвенная архитектура ob = CreateObject ("rsax","TRsAxServer","RsAxServer",false); ex = ob.CreateComObject ("Excel.Application"); end; obBook = ex.Workbooks.add(); obSheet = obBook.ActiveSheet(); obSheet.Range("A1").Value = "Hello, world!"; ex.Visible = true;
>> Ответитьизвините за ламерский вопрос ( Mushfig 04.10.2006 13:19 )
5(1)Писать отчет с выходом в Ексел я в принципе уже разобрался. просто у меня есть пару отчетов, результат которых выходит в терминальное окно, я хочу их как то сделать чтобы они вылезали с тем результатом только в Ексел. Переделывать весь макрос не хочется, да и не все мне в нем понятно... просто РСЛ не так хорошо еще знаю. Может в макросе что то надо дописать типа подпрограммы чтобы те перменные которые он выплевывает в терминалку, выплевывал в Ексел.
>> ОтветитьА пример я имел ввиду, может у кого есть пример переделывания отчета (из терминалки в Ексел) ( Mushfig 04.10.2006 13:21 )
5(1)Not specified
>> ОтветитьЕсть интересный инструмент ( JVR 05.10.2006 05:34 )
3(2)В дистрибутивной поставке есть Windows Report - очень удобная штука, позволяет лепить произвольные отчеты и выводить в Word, Excel, ASCII -- куда душе угодно. Написан на RSL
>> ОтветитьА здесь не нужно новые писать, нужно старые переделать :-) ( Ltybc 05.10.2006 08:52 )
5(1)Врядли кто-то будет это делать. Ищем конструкции [######]();
и под каждой пишем Sheet.Range("").Value = ""; что тут еще скажешь.
>> ОтветитьА как сделать чтобы Ексел по ячейкам разбрасывал (по циклу) ( Mushfig 05.10.2006 14:37 )
4(2)Вот часть кода:
[##### #############](numcon,schpros);
obSheet.Range("A1").Select;
obSheet.Range("A1").Value = "RS Code";
obSheet.Range("A2").Value=numcon;
ex.Visible = true;
Как здесь дать цикл, чтобы Ексел дал список numcon и schptos
Заранее благодарю.... не судите строго... я в РСЛе начинающий
>> Ответитьвместо Range("A2").Value удобнее Range(1,1).Value. Или в Вашем случае range(num,1) и num=num+1; ( Тхор А.В. 06.10.2006 11:25 )
5(1)сабж
>> Ответить
WIndows Report? вы про какую версию говорите? про 5.10.093ю35 или про v.6 Oracle? ( Mushfig 05.10.2006 08:59 )
5(1)WIndows Report? вы про какую версию говорите? про 5.10.093ю35 или про v.6 Oracle?
>> ОтветитьА как мне эту библиотеку достать ... у меня сборка 5.10.093.25.... в дистрибутиве его нету ..помоему ( Mushfig 05.10.2006 09:36 )
5(1)Not specified
>> Ответить5,00,90,33 ( JVR 05.10.2006 09:55 )
5(1)Но она и в 5.10 есть (у нас в Лоансе работает)
поищите в дистрибутивных макросах or_rep_h.mac
>> ОтветитьСпасибо...нашел...в нашем дистрибутиве эти макросы есть ( Mushfig 05.10.2006 10:12 )
5(1)Not specified
>> Ответить
а у Вас сразу он заработал? править не пришлось? ( Тхор А.В. 05.10.2006 11:00 )
5(1)сабж
>> ОтветитьКак переводить отчеты на WR ( Seltchenko 05.10.2006 12:09 )
4(1)Добрый день!
В двух словах я могу рассказать как быстро переводить обычные отчеты на WR.
Процедура перевода включает в себя следующие пункты:
1) Включить в отчет файлы инструмента (Import "or_rep_h.mac";)
2) Создать объект WR-а (var ObjPrint:CMakeReport = CMakeReport(Header)), в качестве параметра можно передать шапку таблицы.
3) Все статические строки (например, [### текст #####]) взять в кавычки и передать в функцию AutoScan
4) Заменить вывод данных в таблицу на AddPrintCell и AddStr (см. пример)
5) Запустить отчет на выполнение
P.S. если есть вопросы, спрашивайте, буду отвечать.
{ Обычный отчет
[
Отчет
#############################################
]( string("за ", Date()):c );
[
┌───────────────┬─────────────────────────────┐
│ Код │ название │
├───────────────┼─────────────────────────────┤];
var i :integer = 0;
var Size:integer = 10;
while( i < Size )
[│###############│#############################│](i, i);
if( i+1 == Size )
[└───────────────┴─────────────────────────────┘];
else
[├───────────────┼─────────────────────────────┤];
end;
i = i + 1;
end;
}
{ Отчет переведенный на WR
Import "or_rep_h.mac";
var Header:string =
"┌───────────────┬─────────────────────────────┐\n"+
"│ Код │ название │\n"+
"├───────────────┼─────────────────────────────┤";
var ObjPrint:CMakeReport = CMakeReport(Header);
ObjPrint.AutoScan(
"[ \n"+
" Отчет \n"+
" ############################################# \n"+
"]", string("за ", Date()), "c:ex_FS(B)" );
var i :integer = 0;
var Size:integer = 10;
while( i < Size )
ObjPrint.AddPrintCell(i, 0, 0, "l", REP_ELEM_TABL);
ObjPrint.AddPrintCell(i, 0, 0, "c", REP_ELEM_TABL);
ObjPrint.AddStr();
i = i + 1;
end;
ObjPrint.SetWinRepOutput(WINREP_OUTPUT_EXCEL, WINREP_FORMAT_XLS); // указать формат вывода
ObjPrint.PrintWinRep(); // Заполнение данных
ObjPrint.ShowWinRep (); // Вывод отчета
}
>> ОтветитьА у меня почему то вылазит ошибка компиляции.... ( Mushfig 05.10.2006 13:59 )
5(1)у меня что ошибка вылезает... ошибка компиляции.. при нажатии Esc вылазит сам or_rep_h.mac и показывает на ошибку в строке import "trlocale.d32". У меня трехзвенка... может что то делаю не так.
>> Ответитьнет слов!!! спасибо огромное). тест прошел, оч. полезная штука ( Тхор А.В. 06.10.2006 09:51 )
5(1)
ну почти сразу, ( JVR 05.10.2006 12:12 )
5(1)немного подкрутили и заработал. В основном проблемы с 3х-звенкой были.
>> Ответить3-х звенка ( Seltchenko 05.10.2006 14:34 )
5(1)Особенности при работе WR-а в 3-х звенке:
1) На терминал необходимо скопировать расширение языка (из папки setup\Remote.EXT\ADD\RSL\)
2) На терминале должна быть dll-ка cw3220.dll
3) После этого, при первом запуске отчета реализованного на WR, на терминале будет создана папка MAC, куда будут скопированы файлы инструмента, и папка TXTFILE, куда будут копироваться (с сервера) отчеты.
P.S. Есть одна тонкость: иногда (причина пока не установлена) папки на терминале не создаются, соответственно отчеты не работают. Лечится созданием соответствующих папок вручную.
>> ОтветитьСделал как вы сказали... но точно таже ошибка компиляции. ( Mushfig 05.10.2006 14:53 )
5(1)Сделал как вы сказали... но точно таже ошибка компиляции.
>> Ответитьtrlocale.d32 ( Seltchenko 05.10.2006 14:57 )
5(1)А trlocale.d32 на терминал в паку MAC скопировалась?
>> ОтветитьДа...но я их сам вручную создал и скинул туда все mac файлы из директории RS-Bank/MAc/Exchange (у м) ( Mushfig 05.10.2006 15:13 )
5(1)Да...но я их сам вручную создал и скинул туда все mac файлы из директории RS-Bank/MAc/Exchange (у меня там все эти маки Windows reporta), При запуске отчета, РСЛ пишет ошибку на файл or_rep_h.mac, когда прописываю ему путь
import "..\\Mac\Exchange\\or_rep_h.mac", РСЛ пишет ошибку на import "trlocale.d32"
>> ОтветитьНельзя так делать!!! ( Seltchenko 05.10.2006 15:38 )
5(1)Нельзя так делать!!!
Или прописываете для всех импортируемы модулей такой путь (import "..\\Mac\Exchange\\", т.е. "..\\Mac\Exchange\\trlocale.d32"), или сделайте все по человечески. Т.е. так как я описал (в папку терминала скидываем расширение языка, если хотите, то на терминале (в папке терминала) создаете папку MAC и туда скиньте макросы инструмента (но лучше это пункт отдать самому инструменту, он все сделает сам)).
>> ОтветитьЯ все понимаю... но если я не прописываю путь ... то дает ошибку ( Mushfig 05.10.2006 16:22 )
5(1)Я все понимаю... но если я не прописываю путь, а оставляю import "or_rep_h.mac"... то дает ошибку при компиляции.... пример отчета я бросил в туже папку /mac/Exchange... т.е. чтобы его макросы кинулись в терминалку.. должен же отчет пойти все таки.... Извините за назойливость.... но все таки это очень интересный инструмент... и он очень облегчит нашу работу
>> ОтветитьДавайте по порядку: ( Seltchenko 05.10.2006 17:02 )
5(1)Давайте по порядку:
1) У Вас должна быть папка терминала, назовем её Term (где находятся выполняемые файлы терминальной части программы)
2) В нее Вы должны скопировать расширение языка RSL.
3) Тестовый пример выкладываете на сервер и запускаете его на выполнение
4) Инструмент, АВТОМАТИЧЕСКИ, создаст папку MAC на терминале и скопирует в него терминальную часть инструмента (весь он не нужен)
5) После чего он создаст отчет на сервере и перешлет его на терминал в папку TXTFILE, которую сам и создаст
6) Всё, отчет получен
P.S. Если Вы повторите все эти действия, то проблем быть не должно.
>> Ответитьпроблема останется и не одна.. ( garanin 10.10.2006 10:25 )
5(1)проблема останется и не одна..
1. файл or_const.mac скопируется в $term\mac; этот файл подключается из or_exl_h.mac, который так же копируется в $term\mac и используется в дальнейшем как на терминале, так и на сервере (то есть or_exl_h.mac идентичен и там и там). но проблема в том, что сервер при строке
IMPORT "or_const.mac"; /* Константы, применяемые в инструменте */
прошвырнётся по всем каталогам поиска макросов и найдёт этот файл, а терминал прошвырнётся только по текущему каталогу $term и этого файла не найдёт. вот и будет вам ошибка компиляции.
2. файлы trlocale.d32 и fileop.d32 скидывается так же в папку $term\mac. то есть проблема будет та же самая, что и в 1 случае (подключаются из макросов or_exl_h.mac и or_trm_h.mac соответственно)
3. файл or_worm.mac скидывается туда же. вот строка из макроса or_rep_h.mac на сервере:
if( CopyFile( NameMacDirServ + "or_worm.mac", NameMacDirTerm + "or_worm.mac" ) )
но вызов в дальнейшем этого макроса в дальнейшем происходит следующим образом:
VerInstrTerm = CallRemoteRsl("or_worm.mac", "GetVerInstr", SubStr(VerInstrFileNameTerm, 2) );
то есть опять же проблема с каталогом поиска подключаемых/вызываемых макросов на терминале.
предлагаемое решение: найти параметр term.ini, аналогичный параметру реестру АБС BANK_INI\ОБЩИЕ ПАРАМЕТРЫ\ДИРЕКТОРИИ\MACRODIR. потому что параметр этот распространяется только на двухзвенку и на сервер приложений. терминал (равно как и вызов CallRemoteRSL) этот параметр игнорирует. Поиск по форумам/базам знаний результата не дала.
PS. Проблема с автоматическим созданием каталога Mac на терминале заключается в отсутствии на терминале расширения по работе с файлами и каталогами ;) (rsextt.d32 вроде)
PPS. Простите, что так много. Старался, чтоб как можно понятнее было
>> ОтветитьRSEXTT.INI ( Seltchenko 10.10.2006 10:37 )
5(1)Решение очень простое. На терминале должен быть файл RSEXTT.INI (из расширения языка), в котором указывается путь до макросов
{
; Каталог макрофайлов
INCPATH = mac
}
тогда сервер "прошвырнётся" по папке $term\mac
>> Ответитьотлично ( garanin 10.10.2006 10:48 )
5(1)отлично! отлично! а то я запарился подменять CallRemoteRsl на сервере и import на терминалах на нужный путь.
не плохо было бы опубликовать в базу знаний ;)
>> Ответить
я в нем вчера как раз ковырялся и пришел к выводу, что там пути для терминалки неправильные. + ( Тхор А.В. 06.10.2006 10:32 )
5(1)исправил - заработало
>> ОтветитьГде исправил... подскажи ( Mushfig 06.10.2006 11:34 )
3(2)Not specified
>> Ответить