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

Создать отчет и выгрузить его в excel файл

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


Вступление в Клуб: 01.07.2009
СообщениеСр Июл 01, 2009 11:51   Создать отчет и выгрузить его в excel файл Ответить с цитатой
Полезность: Нет оценки
Всем привет))) Нужна помощь новичку))) Только начал разбирать систему. И появилась задача создать отчет и выгрузить его в excel файл.
Подскажите как можно отчет выгрузить в excel файл????
Alexsey
Эксперт


Вступление в Клуб: 06.09.2007
СообщениеСр Июл 01, 2009 12:13   Re: Нужна помощь :) Ответить с цитатой
Полезность: 1
Archangel пишет:
Всем привет))) Нужна помощь новичку))) Только начал разбирать систему. И появилась задача создать отчет и выгрузить его в exel файл.
Подскажите как можно отчет выгрузить в exel файл????


один из простых отчетиков в формате Excel... собранных на коленке, ибо нужно было быстро


на форме присутсвуют ОБЯЗАТЕЛЬНО переменная V_DEST, на ней просто необходимо поставить CheckValidate = true и имя должно быть DEST (по крайней мере так нам в свое время объясняли)

секция тело выглядит следующим образом

Код:
begin
      null;
end;


секция проверка выглядит следующим образом...
Код:
procedure CALC_REPORT
is
   row       integer := 1;
   date_begin   [date_time]:= trunc(P_DATE_BEGIN);
   date_end   [date_time]:= trunc(P_DATE_END + 1);
begin
   
   -- Заполним шапку выписки
   
   excel.write(row, 1, '№ платежного документа', true);
   excel.Borders(row , 1, row , 1,'RLT');
   excel.write(row, 2, 'Дата соверш операции', true);
   excel.Borders(row , 2, row , 2,'RLT');
   excel.write(row, 3, 'Бик банка плательщика', true);
   excel.Borders(row , 3, row , 3,'RLT');
   excel.write(row, 4, 'Наименование плательщика', true);
   excel.Borders(row , 4, row , 4,'RLT');
   excel.write(row, 5, 'ИНН плательщика', true);
   excel.Borders(row , 5, row , 5,'RLT');
   excel.write(row, 6, '№ счета плательщика', true);
   excel.Borders(row , 6, row , 6,'RLT');
   excel.write(row, 7, 'БИК банка получателя', true);
   excel.Borders(row , 7, row , 7,'RLT');
   excel.write(row, 8, 'Наименование получателя', true);
   excel.Borders(row , 8, row , 8,'RLT');
   excel.write(row, 9, 'ИНН получателя', true);
   excel.Borders(row , 9, row , 9,'RLT');
   excel.write(row, 10, '№ счета получателя', true);
   excel.Borders(row , 10, row , 10,'RLT');
   excel.write(row, 11, 'сумма операции', true);
   excel.Borders(row , 11, row , 11,'RLT');
   excel.write(row, 12, 'Назначение платежа', true);
   excel.Borders(row , 12, row , 12,'RLH');
   excel.Set_Column_Width(row,12,24);
   
   --переведем строку
   row := 2;
   --debug_pipe('P_ACC.[MAIN_V_ID]'||P_ACC.[MAIN_V_ID]);
   -- найдем движения по счету
   for vip_str in P_ACC.[ARC_MOVE]
         where vip_str.[DATE] >= date_begin  and
            vip_str.[DATE] <= date_end
                  
      loop
         --Заполним таблицу и обозначим границы
         excel.write(row , 1, vip_str.[DOC].[DOCUMENT_NUM]);
         excel.Borders(row , 1, row , 1,'RLT');
         if P_TIME_FLAG then
            excel.write(row , 2, to_char(vip_str.[DOC].[DATE_PROV], 'DD/MM/YYYY HH24:MI:SS'));
         else
            excel.write(row , 2, to_char(vip_str.[DOC].[DATE_PROV], 'DD/MM/YYYY'));
         end if;
         excel.Borders(row , 2, row , 2,'RLT');
         excel.write(row , 3, nvl(vip_str.[DOC].[KL_DT].[2].[3].[BIC], vip_str.[DOC].[KL_DT].[1].[2].[FILIAL].[BANK].[BIC]));
         excel.Borders(row , 3, row , 3,'RLT');
         excel.write(row , 4, nvl(vip_str.[DOC].[KL_DT].[2].[2], vip_str.[DOC].[KL_DT].[1].[1].[NAME]));
         excel.Borders(row , 4, row , 4,'RLT');
         excel.write(row , 5, nvl(vip_str.[DOC].[KL_DT].[2].[INN], vip_str.[DOC].[KL_DT].[1].[1].[INN]));
         excel.Borders(row , 5, row , 5,'RLT');
         excel.write(row , 6, nvl(vip_str.[DOC].[KL_DT].[2].[1], vip_str.[DOC].[KL_DT].[1].[2].[MAIN_V_ID]));
         excel.Borders(row , 6, row , 6,'RLT');
         excel.write(row , 7, nvl(vip_str.[DOC].[KL_KT].[2].[3].[BIC], vip_str.[DOC].[KL_KT].[1].[2].[FILIAL].[BANK].[BIC]));
         excel.Borders(row , 7, row , 7,'RLT');
         excel.write(row , 8, nvl(vip_str.[DOC].[KL_KT].[2].[2], vip_str.[DOC].[KL_KT].[1].[1].[NAME]));
         excel.Borders(row , 8, row , 8,'RLT');
         excel.write(row , 9, nvl(vip_str.[DOC].[KL_KT].[2].[INN], vip_str.[DOC].[KL_KT].[1].[1].[INN]));
         excel.Borders(row , 9, row , 9,'RLT');
         excel.write(row , 10, nvl(vip_str.[DOC].[KL_KT].[2].[1], vip_str.[DOC].[KL_KT].[1].[2].[MAIN_V_ID]));
         excel.Borders(row , 10, row , 10,'RLT');
         excel.Set_Number_Format(row, 11, row, 11, 2, false);
         excel.write(row , 11, vip_str.[DOC].[SUM]);
         excel.Borders(row , 11, row , 11,'RLT');
         excel.write(row , 12, vip_str.[DOC].[NAZN]);
         excel.Borders(row , 12, row , 12,'RLT');
         row := row + 1;
            
   end loop;
   
   -- Наведем косметику Smile
   excel.Allign(1, 1, row -1, 12, 'CM');
   excel.Borders(1 , 1, row -1 , 12,'RLB');
   
   debug_pipe('++++++++++++++++++++++++++++');
   debug_pipe('+++ Выгрузка в Excel ... +++');
   debug_pipe('++++++++++++++++++++++++++++');
end;

begin
   if p_message = 'DEFAULT' then
      P_TIME_FLAG := false;
      P_ACC := this;
      EXCEL.INIT_XLS;
      V_DEST      := null;
      P_XLS       := ::[REPS].[SLIB].GetPath('PATH_PRINT_EXCEL','Выписка для Росфинмониторинга.xlt');
      P_DATE_BEGIN      := sysdate;
      P_DATE_END      := sysdate;
   elsif p_message = 'VALIDATE' then
      if P_DATE_BEGIN is null or P_DATE_END is null then
         pragma error('Не указан период выписки');
      end if;
      if excel.f_click then
         excel.f_click := false;
         excel.open_file (P_XLS, false);
         CALC_REPORT;
         excel.visible;
         excel.release;
      End If;
      EXCEL.EXEC_SCRIPT(V_DEST);
   end if;
end;



нечто подобное в клиент скрипте

Код:
Public Function Main(LastControl)
   If LastControl is nothing Then
      Form1.ScriptShowMonitor
   Else
      If LastControl is OK and  Dest.Text <> "" Then
         DO   'исполнение скрипта
            Execute Dest.Text
            Call Form1.ScriptServerValidate( OK, "OK")
         Loop While   Dest.Text <> ""
      End If
   End If
   Main = True
End Function


а так же не мешало бы все же заглянуть в тип RUNTIME и почитать каменты в библиотеке EXCEL

P.S.
рисование можно программно не применять, а сделать 1 строку в шаблоне.. и далее уже использовать функцию библиотеки excel - PasteSpecial
_________________
всегда есть как минимум 2 выхода
r00st
Эксперт


Вступление в Клуб: 14.09.2007
СообщениеСр Июл 01, 2009 12:17    Ответить с цитатой
Полезность: 1
http://www.cftclub.ru/viewtopic.php?t=345
пост №2
Archangel
Участник


Вступление в Клуб: 01.07.2009
СообщениеЧт Июл 02, 2009 08:18    Ответить с цитатой
Полезность: 1
Спасибо Smile Буду разбираться))))
dnk_dz
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеПт Июл 03, 2009 09:01    Ответить с цитатой
Полезность: Нет оценки
Archangel пишет:
Спасибо Smile Буду разбираться))))


НА ПРАВАХ МОДЕРАТОРА.
Archangel, прошу в следующий раз тему сообщения писать более информативно.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

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