Страница 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 остается пустым....