CftClub.ru
Клуб специалистов ЦФТ-Банк

Ошибка при формировании отчета

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
mmm_kazan
Участник со стажем


Вступление в Клуб: 28.03.2018
СообщениеСр Май 30, 2018 09:58   Ошибка при формировании отчета Ответить с цитатой
Полезность: Нет оценки
Снова привет. )

Взял работающий отчет, заменил в нем начинку ( проверку, параметры, форму)

Начал на новом отчете ругаться типа:

С чем это может быть связано?

Сначала, кстати Excel не отображал - но явно отрабатывал.
Потом попытался явно указать файл excel ( не P_FILE := [MSLIB].GetReportPath||'\XLS\KAR_Прил.xls'Wink.
После этого и обратно вернуться не могу.
Ezhik
Участник со стажем


Вступление в Клуб: 17.04.2009
СообщениеСр Май 30, 2018 10:38    Ответить с цитатой
Полезность: Нет оценки
На ЭФО нет объекта Buffer. Вообще, клиент-скрипт - зло. Пользуйтесь OOXML, там и быстрее и без VBS можно обойтись.
mmm_kazan
Участник со стажем


Вступление в Клуб: 28.03.2018
СообщениеСр Май 30, 2018 11:30    Ответить с цитатой
Полезность: Нет оценки
Ezhik пишет:
На ЭФО нет объекта Buffer. Вообще, клиент-скрипт - зло. Пользуйтесь OOXML, там и быстрее и без VBS можно обойтись.


Да у нас все отчеты не через OOXML.
Поведение какое-то странное.
Вот сейчас сделал заново отчет - про Buffer не ругается, но excel не открывает.


iRow number :=16;

m_acc_20202_all varchar(2000);
m_summ_20202_all_dt number;
m_count_20202_all_dt number;
m_summ_20202_all_kt number;
m_count_20202_all_kt number;

m_summ_20202_dt varchar(2000);
m_count_20202_dt varchar(2000);
m_summ_20202_kt varchar(2000);
m_count_20202_kt varchar(2000);

begin

if p_message = 'DEFAULT' Then

EXCEL.init_xls;
V_DEST := null;
P_DATE_BEGIN := trunc(sysdate-1);
P_DEPART := SYS_CONTEXT('IBS_USER','OURDEPART');
P_KASHIR := stdlib.user_id;
P_FILE := [MSLIB].GetReportPath||'XLS\KAR_Прил.xls';

elsif p_message = 'VALIDATE' then

if P_INFO = 'OK' then

if P_DATE_BEGIN is null then
pragma error('Заполните Дату');
end if;

if P_DEPART is null then
pragma error('Заполните подразделение');
end if;

if EXCEL.f_click then

EXCEL.f_click := false;



EXCEL.open_file(P_FILE,false);
EXCEL.open_sheet('КАССА');

EXCEL.Write(7,1,'Сводная справка о кассовых оборотах по балансовым и внебалансовым счетам за '||to_char(P_DATE_BEGIN,'dd.mm.yyyy')||' г.');

m_acc_20202_all := '';
m_summ_20202_all_dt := 0;
m_count_20202_all_dt := 0;
m_summ_20202_all_kt := 0;
m_count_20202_all_kt := 0;

m_summ_20202_dt := '';
m_count_20202_dt := '';
m_summ_20202_kt := '';
m_count_20202_kt := '';

for(select ac1 (ac1 : acc_dt)
in ::[AC_FIN] all
where
substr(ac1.[MAIN_V_ID],1,Cool = '20202810'
and P_DEPART = ac1.[DEPART]
and ac1.[DATE_OP]<=P_DATE_BEGIN
and (ac1.[DATE_CLOSE]>P_DATE_BEGIN or ac1.[DATE_CLOSE] is null)
order by ac1.[MAIN_V_ID]
)
loop

m_acc_20202_all := m_acc_20202_all||ac1.acc_dt.[MAIN_V_ID]||chr(10);

for(select md1 (sum(md1.[SUM_NT]) : m_summ_20202,
count(1) : m_count_20202)
in ::[MAIN_DOCUM] all
where
md1.[ACC_DT]=ac1.[acc_dt]
and md1.[DATE_PROV] >= P_DATE_BEGIN
and md1.[DATE_PROV] < P_DATE_BEGIN+1
and md1%state='PROV'
)
loop

m_summ_20202_dt := m_summ_20202_dt||to_char(nvl(md1.m_summ_20202,0),'9999999999.99')||chr(10);
m_summ_20202_all_dt := m_summ_20202_all_dt + nvl(md1.m_summ_20202,0);
m_count_20202_dt := m_count_20202_dt||(nvl(md1.m_count_20202,0))||chr(10);
m_count_20202_all_dt := m_count_20202_all_dt + nvl(md1.m_count_20202,0);
end loop;

for(select md1 (sum(md1.[SUM_NT]) : m_summ_20202,
count(1) : m_count_20202)
in ::[MAIN_DOCUM] all
where
md1.[ACC_KT]=ac1.acc_dt
and md1.[DATE_PROV] >= P_DATE_BEGIN
and md1.[DATE_PROV] < P_DATE_BEGIN+1
and md1%state='PROV'
)
loop
m_summ_20202_kt := m_summ_20202_kt||to_char(nvl(md1.m_summ_20202,0),'9999999999.99')||chr(10);
m_summ_20202_all_kt := m_summ_20202_all_kt + nvl(md1.m_summ_20202,0);
m_count_20202_kt := m_count_20202_kt||(nvl(md1.m_count_20202,0))||chr(10);
m_count_20202_all_kt := m_count_20202_all_kt + nvl(md1.m_count_20202,0);
end loop;


EXCEL.Write(iRow,1,'20202');
EXCEL.Write(iRow,2,m_count_20202_all_dt);
EXCEL.Write(iRow,3,m_summ_20202_all_dt);
EXCEL.Write(iRow,4,m_count_20202_all_kt);
EXCEL.Write(iRow,5,m_summ_20202_all_kt);


EXCEL.Write(iRow+1,1,m_acc_20202_all);
EXCEL.Write(iRow+1,2,m_count_20202_dt);
EXCEL.Write(iRow+1,3,m_summ_20202_dt);

EXCEL.Write(iRow+1,4,m_count_20202_kt);
EXCEL.Write(iRow+1,5,m_summ_20202_kt);

end loop;

if P_KASS then
iRow := iRow + 2;
else
[EXCEL].Delete_row(iRow+1,iRow+1);
iRow := iRow + 1;
end if;

for(select md1 (sum(md1.[SUM_NT]) : m_sum_20202,
count(1) : m_count_20202)
in ::[MAIN_DOCUM] all
where
substr(md1.[ACC_DT].[MAIN_V_ID],1,Cool = '90701810'
and md1.[DATE_PROV] >= P_DATE_BEGIN
and md1.[DATE_PROV] < P_DATE_BEGIN+1
and md1%state='PROV'
and P_DEPART = md1.[ACC_DT].[DEPART]
)
loop
EXCEL.Write(iRow,2,md1.m_count_20202);
EXCEL.Write(iRow,3,md1.m_sum_20202);
exit;
end loop;

for(select md1 (sum(md1.[SUM_NT]) : m_sum_20202,
count(1) : m_count_20202)
in ::[MAIN_DOCUM] all
where
substr(md1.[ACC_KT].[MAIN_V_ID],1,Cool = '90701810'
and md1.[DATE_PROV] >= P_DATE_BEGIN
and md1.[DATE_PROV] < P_DATE_BEGIN+1
and md1%state='PROV'
and P_DEPART = md1.[ACC_KT].[DEPART]
)
loop
EXCEL.Write(iRow,4,md1.m_count_20202);
EXCEL.Write(iRow,5,md1.m_sum_20202);
exit;
end loop;

iRow := iRow + 1;

for(select md1 (sum(md1.[SUM_NT]) : m_sum_20202,
count(1) : m_count_20202)
in ::[MAIN_DOCUM] all
where
substr(md1.[ACC_DT].[MAIN_V_ID],1,Cool = '91202810'
and md1.[DATE_PROV] >= P_DATE_BEGIN
and md1.[DATE_PROV] < P_DATE_BEGIN+1
and md1%state='PROV'
and P_DEPART = md1.[ACC_DT].[DEPART]
)
loop
EXCEL.Write(iRow,2,md1.m_count_20202);
EXCEL.Write(iRow,3,md1.m_sum_20202);
exit;
end loop;

for(select md1 (sum(md1.[SUM_NT]) : m_sum_20202,
count(1) : m_count_20202)
in ::[MAIN_DOCUM] all
where
substr(md1.[ACC_KT].[MAIN_V_ID],1,Cool = '91202810'
and md1.[DATE_PROV] >= P_DATE_BEGIN
and md1.[DATE_PROV] < P_DATE_BEGIN+1
and md1%state='PROV'
and P_DEPART = md1.[ACC_KT].[DEPART]
)
loop
EXCEL.Write(iRow,4,md1.m_count_20202);
EXCEL.Write(iRow,5,md1.m_sum_20202);
exit;
end loop;

iRow := iRow + 1;

for(select md1 (sum(md1.[SUM_NT]) : m_sum_20202,
count(1) : m_count_20202)
in ::[MAIN_DOCUM] all
where
substr(md1.[ACC_DT].[MAIN_V_ID],1,Cool = '91207810'
and md1.[DATE_PROV] >= P_DATE_BEGIN
and md1.[DATE_PROV] < P_DATE_BEGIN+1
and md1%state='PROV'
and P_DEPART = md1.[ACC_DT].[DEPART]
)
loop
EXCEL.Write(iRow,2,md1.m_count_20202);
EXCEL.Write(iRow,3,md1.m_sum_20202);
exit;
end loop;

for(select md1 (sum(md1.[SUM_NT]) : m_sum_20202,
count(1) : m_count_20202)
in ::[MAIN_DOCUM] all
where
substr(md1.[ACC_KT].[MAIN_V_ID],1,Cool = '91207810'
and md1.[DATE_PROV] >= P_DATE_BEGIN
and md1.[DATE_PROV] < P_DATE_BEGIN+1
and md1%state='PROV'
and P_DEPART = md1.[ACC_KT].[DEPART]
)
loop
EXCEL.Write(iRow,4,md1.m_count_20202);
EXCEL.Write(iRow,5,md1.m_sum_20202);
exit;
end loop;

iRow := iRow + 5;
EXCEL.Write(iRow,4,P_KASHIR.[NAME]);

EXCEL.visible;
EXCEL.release;

end if;

EXCEL.exec_script(V_DEST);

end if;

end if;

end;
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеСр Май 30, 2018 14:18    Ответить с цитатой
Полезность: Нет оценки
Операцию скопировали из рабочего отчета, или новую делали?
mmm_kazan
Участник со стажем


Вступление в Клуб: 28.03.2018
СообщениеСр Май 30, 2018 15:02    Ответить с цитатой
Полезность: Нет оценки
Volod пишет:
Операцию скопировали из рабочего отчета, или новую делали?


Новую
mmm_kazan
Участник со стажем


Вступление в Клуб: 28.03.2018
СообщениеСр Май 30, 2018 15:02    Ответить с цитатой
Полезность: Нет оценки
mmm_kazan пишет:
Volod пишет:
Операцию скопировали из рабочего отчета, или новую делали?


Новую
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеСр Май 30, 2018 16:07    Ответить с цитатой
Полезность: 1
Лучше использовать копию аналогичного отчета.

Что в клиент-скрипте?
У переменной V_DEST идентификатор DEST?
Ок валидируемая?
И пишите , наконец, код в тегах Code.
Селектом, кстати, можно одним обойтись.
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеСр Май 30, 2018 16:16    Ответить с цитатой
Полезность: Нет оценки
excel.put()
....
excel.put()
---------------------
excel.print_array

на порядок быстрее выводит
mmm_kazan
Участник со стажем


Вступление в Клуб: 28.03.2018
СообщениеСр Май 30, 2018 16:54    Ответить с цитатой
Полезность: Нет оценки
Volod пишет:
Лучше использовать копию аналогичного отчета.

Что в клиент-скрипте?
У переменной V_DEST идентификатор DEST?
Ок валидируемая?
И пишите , наконец, код в тегах Code.
Селектом, кстати, можно одним обойтись.



Так в общем сделано.
Excel не хочет открываться
Ezhik
Участник со стажем


Вступление в Клуб: 17.04.2009
СообщениеСр Май 30, 2018 17:00    Ответить с цитатой
Полезность: Нет оценки
CheckValidate на DEST стоит?
Скрин вкладки "Дополнительные свойства" можно еще?
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеСр Май 30, 2018 17:18    Ответить с цитатой
Полезность: Нет оценки
Цитата:
CheckValidate на DEST стоит?


А он нужен? Достаточно Ок.

Код:
if p_info = 'OK' Then
mmm_kazan
Участник со стажем


Вступление в Клуб: 28.03.2018
СообщениеЧт Май 31, 2018 08:25    Ответить с цитатой
Полезность: Нет оценки
Ezhik пишет:
CheckValidate на DEST стоит?
Скрин вкладки "Дополнительные свойства" можно еще?


Вот
mmm_kazan
Участник со стажем


Вступление в Клуб: 28.03.2018
СообщениеЧт Май 31, 2018 08:25    Ответить с цитатой
Полезность: Нет оценки
Ezhik пишет:
CheckValidate на DEST стоит?
Скрин вкладки "Дополнительные свойства" можно еще?


Вот
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru