Страница 1 из 1
Открытие Excel в Report
Добавлено: 13 Апрель 2018, 10:35
Андрей
Добрый день всем !
Прошу подсказать такую штуку...
Обычно вывод в Ecxel делал из Window, а тут есть Report который множественные (по фильтру) расч. листки выводит и попросили сделать вывод в Excel. Чтоб не переносить весь код в Window, пытаюсь сделать это в Reporte и не пойму куда поставить код инициализации книги
Код: Выделить всё
bind('l:FileName',l:FileName)
l:OLE = create(0, CREATE:ole)
l:OLE{prop:Create} = 'EXCEL.Application'
L:FileName =path()&'\Отчеты\Расчетные листки.xls'
copy('.\Forms\RLmany.xls',L:FileName)
If Error()
message('Ошибка копирования шаблона ! '&error())
ELSE
l:OLE{'Application.workbooks.open("' & clip(l:FileName) & '")'}
l:ole{'visible'} = true
l:ole{'Sheets("Лист1").Select'}
end
Если ставлю его в Process Manager-Take Record, то работает для печати одного р/л, но мне ж нужна еще пакетная печать, и нельзя объект XLS множественно создавать, ставлю в Process Manager-Open - не работает, в Beginning of Procedure,After Openning Files - не работает... а куда ж правильно ?
Открытие Excel в Report
Добавлено: 13 Апрель 2018, 13:49
kreator
Вы бы версию Клаши сказали бы для начала. Я так понимаю - ABC в любом случае? Придумываете какие-то костыли, ну да ладно. В Window Manager (он же Report Manager) есть метод OpenReport. В нём (возможно после Parent Call) нужно открыть своё окно (причём скрытое) и в нём создать контрол OLE (OLE должен быть на окне, а,ИМХО, несмотря на то, что ReportManager наследник WindowManager, окна как такового нет). И потом не забыть сделать destroy и закрыть окно. Но это где-то метод EndReport или до открытия превьюера.
Открытие Excel в Report
Добавлено: 17 Апрель 2018, 8:50
Андрей
kreator писал(а): ↑13 Апрель 2018, 13:49 В Window Manager (он же Report Manager) есть метод OpenReport. В нём (возможно после Parent Call) нужно открыть своё окно (причём скрытое)
В спешке написал неточно - объект то Excel создается, только если я создаю его в Process Manager-Take Record, там где обрабатываю записи, передача в Excel идет, а если пытаюсь инициализировать его в другом месте, то он не заполняется. Пока решил проблему "костылем" - по флагу инициализирую объект там же, но один раз.
Открытие Excel в Report
Добавлено: 17 Апрель 2018, 10:06
kreator
Андрей писал(а): ↑17 Апрель 2018, 8:50
объект то Excel создается, только если я создаю его в Process Manager-Take Record,
Вы создаёте столько объектов, сколько раз вызывается Take Record? И, естественно, destroy не делаете! Непонятно, как ещё программа на GPF не вываливается? Надежда, что при закрытии окна прогресс-бара происходит автоматический destroy экранных объектов. В общем, предложение - костыли убрать и сделать по-человечески. Например, попробовать мою версию.
Версия Клариона какая?
Открытие Excel в Report
Добавлено: 17 Апрель 2018, 10:11
Андрей
kreator писал(а): ↑17 Апрель 2018, 10:06Вы создаёте столько объектов, сколько раз вызывается Take Record?
Нет, один раз по флагу
Код: Выделить всё
If ~l:flgCrtExcel
bind('l:FileName',l:FileName)
l:OLE = create(0, CREATE:ole)
l:OLE{prop:Create} = 'EXCEL.Application'
L:FileName =path()&'\Отчеты\Расчетные листки.xls'
copy('.\Forms\RLmany.xls',L:FileName)
If Error()
message('Ошибка копирования шаблона ! '&error())
ELSE
l:OLE{'Application.workbooks.open("' & clip(l:FileName) & '")'}
l:ole{'visible'} = true
l:ole{'Sheets("Лист1").Select'}
end
l:flgCrtExcel=1
end
Открытие Excel в Report
Добавлено: 17 Апрель 2018, 10:17
Дед Пахом
Можно сделать проще - создать Excel во внешней оконной процедуре (в той, из которой отчёт вызывается), и передать его в Report-процедуру как параметр.
Открытие Excel в Report
Добавлено: 17 Апрель 2018, 10:34
kreator
Андрей писал(а): ↑17 Апрель 2018, 10:11
Нет, один раз по флагу
Решает вопрос. Изначально в этом и была проблема. Только destroy хорошо бы делать (мутная тема, нигде не описанная). А Visible Экселя Вы намеренно делаете? Чтобы пользователь видел ещё и заполнение Экселевского шаблона? Или от примера какого-то осталось?
Открытие Excel в Report
Добавлено: 19 Апрель 2018, 10:07
Андрей
Visible - остался от отладки. В общем так и не понял в какой точке вставки объект XLS то инициализировать, почему пока удалось только при создании в этом месте получить заполнение, а в др. местах XLS остается пустым....