Компиляция в Excel

Администрирование баз данных (Pervasive.SQL, MS SQL, Oracle, утилита Support)

Модераторы: m0p3e, edward_K, Модераторы

Ответить
maikl
Местный житель
Сообщения: 1503
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Тверь

Компиляция в Excel

Сообщение maikl »

Версия 8.0. Хотим откомпилировать АРД отчет в Excel с помощью Vip.

Начинает работать компилятор-Считывается словарь.
Затем дает ошибку Delphi internal error 28 (Внутр. ошибка исполняющей системы)
Не загрузилась динамическая библиотека ExcelLib3x.dll

Пришлите кто нибудь нстроечный файл для випа, что бы можно было компилировать в Excel
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

интересно и как вы компилите? vip-ом или сапортом? ну сапорт сразу отметаем. Версия то точно 8.0? и отчет не slk?. Если да то проверяйте ExcelLib3X.dll, RegExcel.dll,extfun.res - у меня они от 24.05.2005. vip от 26.07.2005. ну остальные dll тоже должны быть где то рядом - forms, atldll , string_ и так далее. Что нибудь другое компилится нормально? Иногда помогает наоборот удаление тех dll на которые ругается(ну exe галки придется отдельное делать). И кусок отчета приведите - чтобы было понятно что же вы там такое используете. А стандартные отчеты то работают? например которые через xlt шаблоны?.
maikl
Местный житель
Сообщения: 1503
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Тверь

Сообщение maikl »

Сегодня посмотрел, точно версия 8 :-D
Отчет не slk.
Vip версия 5,1,33,0 от 23/11/2006. Остальные Dll тоже от 2006
Другие компиляции проходят (все и slk тоже), в Галактике формируются стандартные отчеты через xlt.
Какая то засада непонятная.
Вот текст всех файлов
1. Командный
\\serv2k\gal800\EXE\vip.exe Spec060.frm
2. Конфигурационный
[System]
/u=ad2n
OpenResources="\\Serv2k\GAL800\exe\extfun.res"

[HardwareKey]
SharedPath=\\GALSRV\GALSRV\HWDIR

[Database]
DataBaseName=Serv_8
DataBaseDriver=MS70DRV.DLL

[SQLDriver]
SQLServer=ncacn_ip_tcp:Serv2K[1997]

[Compilers]
OutputResourceName="C:\FormMelkom800\Primer.res"
3. Исходный текст
.Form 'Spec060'
.F 'NUL'
.ard
.Group 'Специальные отчеты'
.NameInList '06. Оперативные данные по движению денежных средств (Excel)'
.var
Дата_расчета:Date
Дата_раб:Date
Старт_дата:Date
Flag:Word
EndTab:Boolean
ТекДата:Date
ПоКассеММК:Double
ПоКассеККК:Double
ПоКассеМАП:Double
ПоБанкуММК:Double
ПоБанкуККК:Double
ПоБанкуМАП:Double
Оплата_ММК:Double
Оплата_ККК:Double
Оплата_МАП:Double
Оплата_ММК_комис:Double
Оплата_ККК_комис:Double
И_ПоКассеММК:Double
И_ПоКассеККК:Double
И_ПоКассеМАП:Double
И_ПоБанкуММК:Double
И_ПоБанкуККК:Double
И_ПоБанкуМАП:Double
И_Оплата_ММК:Double
И_Оплата_ККК:Double
И_Оплата_МАП:Double
И_Оплата_ММК_комис:Double
И_Оплата_ККК_комис:Double
План1:Double
План2:Double
План3:Double
План4:Double
План5:Double
План6:Double
РабДнМес:Double
План7:Double
План8:Double
РабДнДат:Double
XlResult:Boolean
XlStr:Longint
.endvar
.begin
Дата_расчета:=Cur_date
if runinterface('getdatesost',Дата_расчета)=11 then
{Spec060.fexit}
Старт_дата:=date(01,month(sub_day(Дата_расчета,1)),year(sub_day(Дата_расчета,1)))
end.
!---- План поступления и расходования денежных средств ------------------------------------
.Create View План As
select normrash.name(fieldname=ИмяПлана),
normrash.summa(fieldname=СуммаПлана)
from normrash,normgrup
where ((normrash.cgrup==normgrup.nrec)) and instr('поступления и расх',normgrup.name)<>0
order external by normrash.name;
!------------------------------------------------------------------------------------------
.Create View Деньги As
select datob(fieldname=Дата),
tidkgal(fieldname=Тип),
desgr(fieldname=Комплекс),
descr(fieldname=Дескрипт),
kodtec(fieldname=Назнач),
sumplat(fieldname=Сумма)
from plpor
where datob>=Старт_дата and datob<Дата_расчета and pos('ВОЗВРАТ',Upcase(plpor.namepl1))=0 and
(tidkgal=1 or tidkgal=31 or tidkgal=2 or tidkgal=7)
order external by datob;
.begin
if Деньги.getfirstin(-1,Flag)=0 then
{EndTab:=False}
else
{EndTab:=True}
if План.getfirstin(-1,Flag)=0 then // то считываем показатели плана и кол.раб.дней в месяце
{План1:=План.СуммаПлана
План.getnextin(-1,Flag)
План2:=План.СуммаПлана
План.getnextin(-1,Flag)
План3:=План.СуммаПлана
План.getnextin(-1,Flag)
План4:=План.СуммаПлана
План.getnextin(-1,Flag)
План5:=План.СуммаПлана
План.getnextin(-1,Flag)
План6:=План.СуммаПлана
План.getnextin(-1,Flag)
РабДнМес:=План.СуммаПлана
План.getnextin(-1,Flag)
План7:=План.СуммаПлана
План.getnextin(-1,Flag)
План8:=План.СуммаПлана}
end.
.fields
.endfields
.begin
XlResult:=True
XlResult:=xlCreateExcelWithTemplate('\\Galsrv\Galsrv\frm\ДвижДенСред.xls',True)
XlResult:=xlIsExcelValid
if not(XlResult) then
{message('Отсутствует шаблон отчета')
Spec060.fexit}
xlSetCellStringValue(DateToStr(Cur_Date,'DD.MM.YYYY'),1,1,1,1)
xlSetCellStringValue(String(Cur_Time),1,2,1,2)
xlSetCellStringValue(DateToStr(Дата_расчета,'DD.MM.YYYY'),1,9,1,9)
XlStr:=6
end.
.{While not EndTab
.begin
ТекДата:=Деньги.Дата
РабДнДат:=РабДнДат+1
ПоКассеММК:=0
ПоКассеККК:=0
ПоКассеМАП:=0
ПоБанкуММК:=0
ПоБанкуККК:=0
ПоБанкуМАП:=0
Оплата_ММК:=0
Оплата_ККК:=0
Оплата_МАП:=0
Оплата_ММК_комис:=0
Оплата_ККК_комис:=0
while ТекДата=Деньги.Дата and not(EndTab)
{if (Деньги.Тип=1 or Деньги.Тип=31) then
{if Деньги.Комплекс='001' and Деньги.Дескрипт='BZM' then
{Оплата_ММК:=Оплата_ММК+Деньги.Сумма}
if Деньги.Комплекс='001' and Деньги.Назнач='16' then
{Оплата_ММК_комис:=Оплата_ММК_комис+Деньги.Сумма}
if Деньги.Комплекс='002' and Деньги.Назнач='14' then
{Оплата_ККК:=Оплата_ККК+Деньги.Сумма}
if Деньги.Комплекс='002' and Деньги.Назнач='17' then
{Оплата_ККК_комис:=Оплата_ККК_комис+Деньги.Сумма}
if Деньги.Комплекс='003' and Деньги.Назнач='15' then
{Оплата_МАП:=Оплата_МАП+Деньги.Сумма}}
if Деньги.Тип=2 then
{if Деньги.Комплекс='001' then
{ПоБанкуММК:=ПоБанкуММК+Деньги.Сумма}
if Деньги.Комплекс='002' then
{ПоБанкуККК:=ПоБанкуККК+Деньги.Сумма}
if Деньги.Комплекс='003' then
{ПоБанкуМАП:=ПоБанкуМАП+Деньги.Сумма}}
if Деньги.Тип=7 then
{if Деньги.Комплекс='001' then
{ПоКассеММК:=ПоКассеММК+Деньги.Сумма}
if Деньги.Комплекс='002' then
{ПоКассеККК:=ПоКассеККК+Деньги.Сумма}
if Деньги.Комплекс='003' then
{ПоКассеМАП:=ПоКассеМАП+Деньги.Сумма}}
if Деньги.getnextin(-1,Flag)<>0 then
{EndTab:=True}}

xlSetCellStringValue(DateToStr(ТекДата,'DD.MM.YYYY'),XlStr,1,XlStr,1)
xlSetCellNumberValue(ПоКассеММК ,XlStr,2,XlStr,2)
xlSetCellNumberValue(ПоКассеККК ,XlStr,3,XlStr,3)
xlSetCellNumberValue(ПоКассеМАП ,XlStr,4,XlStr,4)
xlSetCellNumberValue(ПоБанкуММК ,XlStr,5,XlStr,5)
xlSetCellNumberValue(ПоБанкуККК ,XlStr,6,XlStr,6)
xlSetCellNumberValue(ПоБанкуМАП ,XlStr,7,XlStr,7)
xlSetCellNumberValue(ПоКассеММК+ПоБанкуММК,XlStr,8,XlStr,8)
xlSetCellNumberValue(ПоКассеККК+ПоБанкуККК,XlStr,9,XlStr,9)
xlSetCellNumberValue(ПоКассеМАП+ПоБанкуМАП,XlStr,10,XlStr,10)
xlSetCellNumberValue(Оплата_ММК ,XlStr,11,XlStr,11)
xlSetCellNumberValue(Оплата_ККК ,XlStr,12,XlStr,12)
xlSetCellNumberValue(Оплата_МАП ,XlStr,13,XlStr,13)
xlSetCellNumberValue(Оплата_ММК_комис ,XlStr,14,XlStr,14)
xlSetCellNumberValue(Оплата_ККК_комис ,XlStr,15,XlStr,15)
XlStr:=XlStr+1

И_ПоКассеММК:=И_ПоКассеММК+ПоКассеММК
И_ПоКассеККК:=И_ПоКассеККК+ПоКассеККК
И_ПоКассеМАП:=И_ПоКассеМАП+ПоКассеМАП
И_ПоБанкуММК:=И_ПоБанкуММК+ПоБанкуММК
И_ПоБанкуККК:=И_ПоБанкуККК+ПоБанкуККК
И_ПоБанкуМАП:=И_ПоБанкуМАП+ПоБанкуМАП
И_Оплата_ММК:=И_Оплата_ММК+Оплата_ММК
И_Оплата_ККК:=И_Оплата_ККК+Оплата_ККК
И_Оплата_МАП:=И_Оплата_МАП+Оплата_МАП
И_Оплата_ММК_комис:=И_Оплата_ММК_комис+Оплата_ММК_комис
И_Оплата_ККК_комис:=И_Оплата_ККК_комис+Оплата_ККК_комис
end.
.{?internal;EndTab
.begin
XlStr:=XlStr+1
xlSetCellStringValue('Итого :',XlStr,1,XlStr,1)
xlSetCellNumberValue(И_ПоКассеММК ,XlStr,2,XlStr,2)
xlSetCellNumberValue(И_ПоКассеККК ,XlStr,3,XlStr,3)
xlSetCellNumberValue(И_ПоКассеМАП ,XlStr,4,XlStr,4)
xlSetCellNumberValue(И_ПоБанкуММК ,XlStr,5,XlStr,5)
xlSetCellNumberValue(И_ПоБанкуККК ,XlStr,6,XlStr,6)
xlSetCellNumberValue(И_ПоБанкуМАП ,XlStr,7,XlStr,7)
xlSetCellNumberValue(И_ПоКассеММК+И_ПоБанкуММК,XlStr,8,XlStr,8)
xlSetCellNumberValue(И_ПоКассеККК+И_ПоБанкуККК,XlStr,9,XlStr,9)
xlSetCellNumberValue(И_ПоКассеМАП+И_ПоБанкуМАП,XlStr,10,XlStr,10)
xlSetCellNumberValue(И_Оплата_ММК ,XlStr,11,XlStr,11)
xlSetCellNumberValue(И_Оплата_ККК ,XlStr,12,XlStr,12)
xlSetCellNumberValue(И_Оплата_МАП ,XlStr,13,XlStr,13)
xlSetCellNumberValue(И_Оплата_ММК_комис ,XlStr,14,XlStr,14)
xlSetCellNumberValue(И_Оплата_ККК_комис ,XlStr,15,XlStr,15)
XlStr:=XlStr+1
xlSetCellStringValue('План :',XlStr,1,XlStr,1)
xlSetCellNumberValue(План1/РабДнМес*РабДнДат,XlStr,8,XlStr,8)
xlSetCellNumberValue(План2/РабДнМес*РабДнДат,XlStr,9,XlStr,9)
xlSetCellNumberValue(План3/РабДнМес*РабДнДат,XlStr,10,XlStr,10)
xlSetCellNumberValue(План4/РабДнМес*РабДнДат,XlStr,11,XlStr,11)
xlSetCellNumberValue(План5/РабДнМес*РабДнДат,XlStr,12,XlStr,12)
xlSetCellNumberValue(План6/РабДнМес*РабДнДат,XlStr,13,XlStr,13)
xlSetCellNumberValue(План7/РабДнМес*РабДнДат,XlStr,14,XlStr,14)
xlSetCellNumberValue(План8/РабДнМес*РабДнДат,XlStr,15,XlStr,15)
XlStr:=XlStr+1
xlSetCellStringValue('Отклон :',XlStr,1,XlStr,1)
xlSetCellNumberValue(И_ПоКассеММК+И_ПоБанкуММК-(План1/РабДнМес*РабДнДат),XlStr,8,XlStr,8)
xlSetCellNumberValue(И_ПоКассеККК+И_ПоБанкуККК-(План2/РабДнМес*РабДнДат),XlStr,9,XlStr,9)
xlSetCellNumberValue(И_ПоКассеМАП+И_ПоБанкуМАП-(План3/РабДнМес*РабДнДат),XlStr,10,XlStr,10)
xlSetCellNumberValue(И_Оплата_ММК- (План4/РабДнМес*РабДнДат),XlStr,11,XlStr,11)
xlSetCellNumberValue(И_Оплата_ККК- (План5/РабДнМес*РабДнДат),XlStr,12,XlStr,12)
xlSetCellNumberValue(И_Оплата_МАП- (План6/РабДнМес*РабДнДат),XlStr,13,XlStr,13)
xlSetCellNumberValue(И_Оплата_ММК_комис- (План7/РабДнМес*РабДнДат),XlStr,14,XlStr,14)
xlSetCellNumberValue(И_Оплата_ККК_комис- (План8/РабДнМес*РабДнДат),XlStr,15,XlStr,15)
end.
.}
.}
.begin
XlResult:=xlRunMacro('Macros')
xlkillexcel
end.
.endform
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

1. что за /u=ad2n?
2. а проектом не пробовали компилить?
в проекте
#make "*.frm"
в форме не понравилось что переменные и вьюха названа по русски.
сделайте для начала тестовую форму
с одним
XlResult:=xlCreateExcelWithTemplate('\\Galsrv\Galsrv\frm\ДвижДенСред.xls',True)
ну и вьюхой на одну таблицу.
следующую строку смысла использовать вообще нет. Остальное вроде нормально. Да еще create view лучше делать после var.
maikl
Местный житель
Сообщения: 1503
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Тверь

Сообщение maikl »

Попробовал откомпилировать проектом и о всевышний - все получилось. Менять имена на латиницу не пришлось. Строка "/u=ad2n /p:12345" задает логин и пароль для входа в систему, что б не спрашивала. Странно, но в предыдущих версиях (<8.0) нормально компилилось описанным ранее способом. Благодарен за подсказку, удачи в работе, до свидания. Михаил.
Ответить