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

Найти ошибку...

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


Вступление в Клуб: 05.06.2008
СообщениеПн Июн 30, 2008 11:16   Найти ошибку... Ответить с цитатой
Полезность: Нет оценки
Всем здрасте! Помогите пожалуйста, не могу найти почему при выводе EXCEL дважды выдает отчет Sad :

Код:

Begin
   if P_MESSAGE = 'DEFAULT' then
      P_DATE_END   :=   ::[SYSTEM].[OP_DATE];
         
      [EXCEL].INIT_XLS;      
         
   elsif P_MESSAGE = 'VALIDATE' then
         if P_INFO = 'P_DATE_END' then
         if P_DATE_BEG is null  then
            pragma error('Введите дату начала');
         end if;
      elsif P_INFO = 'OK' then
      
         if [EXCEL].F_Click then
            [EXCEL].F_Click := false;
               debug_pipe('E  X  C  E  L!!!', 0);
            [EXCEL].open_file(::[SYSTEM_PARAMS].[GET]('PATH_PRINT_EXCEL')||'faktura_otchet.XLT');

            declare
              r_chet [accnum] := 0;
                          CurRow integer := 6;
                          i integer := 1;
              type cur is
                                     select lnk(cl.[CLIENTREF]  : CL_NAME
                                       ,cl.[CLIENTREF].[NAME]   : CL_LINKS_OTHER
                                       ,cl.[DATE_BEGINING]      : CL_DATA
                                       ,cl.[ACC_TRACE] :cl_trace
                                       ,lnk.[ACC_REF].[MAIN_V_ID] :lnk_NAME   
                                        ) in ::[WC_ACC_TRACE], (::[WCLIENT]: cl)
                                                all
                                               where lnk%collection = cl.[ACC_TRACE]
                                               order by cl.[CLIENTREF].[NAME];

                        begin
               
               Put(1, 1, ::[SYSTEM].[SYS_MY_COMPANY].[NAME],null,false);
               Put(2, 1, 'Даты первых операций, прошедших по системе Faktura.ru '||to_char(P_DATE_END, 'DD.MM.YYYY')) ;
                      
                 for Ob in cursor cur
                     loop
                       debug_pipe(' Клиент:  '||Ob.CL_LINKS_OTHER||' -- Счёт: '||Ob.lnk_NAME||' -- Договор: '||Ob.CL_DATA, 0);

                         if Ltrim(Ob.lnk_NAME) <> r_chet then
                               for( select oper ( oper.[ACC_DT].[MAIN_V_ID] :chet
                                     ,oper.[DATE_PROV]  : data_prov
                                     ,oper.[DOCUMENT_UNO] :nomer
                                   )
                               in ::[MAIN_DOCUM]
                                   where
                                   oper.[DATE_PROV] >= Ob.CL_DATA
                                   and  oper%state = 'PROV'
                                   and  oper.[ACC_DT].[MAIN_V_ID] = Ob.lnk_NAME
                                   and  oper.[DOCUMENT_UNO]  like 'BF%'
                                   Order by oper.[DATE_PROV]
                                  )
                                               loop
                                                  Put(CurRow, 1, i, 'L', false);
                                                  Put(CurRow, 2, Ob.CL_LINKS_OTHER, 'L', false);
                                                  Put(CurRow, 3, oper.chet, 'C', false);
                                                  Put(CurRow, 4, to_char(oper.data_prov,'dd.mm.yy'), 'C', false);   
                                                 
                                                  CurRow := CurRow + 1;
                                                   i := i + 1;
                                                  Exit;
                                            end loop;
      r_chet := Ob.lnk_NAME;
      
       --  if r_chet = '40702810700000000083' then
        --    Exit;
      --   end if;
                         end if;
                 end loop;
                        end;
                  [EXCEL].visible;
                  [EXCEL].release;
         end if;
         end if;
   end if;
      
[EXCEL].Exec_Script(V_DEST_STR);
End;
 


Заранее спасибо Smile .
ssa774
Профи


Вступление в Клуб: 30.11.2007
СообщениеПн Июн 30, 2008 11:22    Ответить с цитатой
Полезность: Нет оценки
По-моему, клиент-скрипт дважды выполняется(собственно в клиент-скрипте и в коде проверки). Перенесла в проверку условия P_INFO.
Код:
Begin
   if P_MESSAGE = 'DEFAULT' then
      P_DATE_END   :=   ::[SYSTEM].[OP_DATE];
         
      [EXCEL].INIT_XLS;       
         
   elsif P_MESSAGE = 'VALIDATE' then
         if P_INFO = 'P_DATE_END' then
         if P_DATE_BEG is null  then
            pragma error('Введите дату начала');
         end if;
      elsif P_INFO = 'OK' then
       
         if [EXCEL].F_Click then
            [EXCEL].F_Click := false;
               debug_pipe('E  X  C  E  L!!!', 0);
            [EXCEL].open_file(::[SYSTEM_PARAMS].[GET]('PATH_PRINT_EXCEL')||'faktura_otchet.XLT');

            declare
              r_chet [accnum] := 0;
                          CurRow integer := 6;
                          i integer := 1;
              type cur is
                                     select lnk(cl.[CLIENTREF]  : CL_NAME
                                       ,cl.[CLIENTREF].[NAME]   : CL_LINKS_OTHER
                                       ,cl.[DATE_BEGINING]      : CL_DATA
                                       ,cl.[ACC_TRACE] :cl_trace
                                       ,lnk.[ACC_REF].[MAIN_V_ID] :lnk_NAME   
                                        ) in ::[WC_ACC_TRACE], (::[WCLIENT]: cl)
                                                all
                                               where lnk%collection = cl.[ACC_TRACE]
                                               order by cl.[CLIENTREF].[NAME];

                        begin
               
               Put(1, 1, ::[SYSTEM].[SYS_MY_COMPANY].[NAME],null,false);
               Put(2, 1, 'Даты первых операций, прошедших по системе Faktura.ru '||to_char(P_DATE_END, 'DD.MM.YYYY')) ;
                       
                 for Ob in cursor cur
                     loop
                       debug_pipe(' Клиент:  '||Ob.CL_LINKS_OTHER||' -- Счёт: '||Ob.lnk_NAME||' -- Договор: '||Ob.CL_DATA, 0);

                         if Ltrim(Ob.lnk_NAME) <> r_chet then
                               for( select oper ( oper.[ACC_DT].[MAIN_V_ID] :chet
                                     ,oper.[DATE_PROV]  : data_prov
                                     ,oper.[DOCUMENT_UNO] :nomer
                                   )
                               in ::[MAIN_DOCUM]
                                   where
                                   oper.[DATE_PROV] >= Ob.CL_DATA
                                   and  oper%state = 'PROV'
                                   and  oper.[ACC_DT].[MAIN_V_ID] = Ob.lnk_NAME
                                   and  oper.[DOCUMENT_UNO]  like 'BF%'
                                   Order by oper.[DATE_PROV]
                                  )
                                               loop
                                                  Put(CurRow, 1, i, 'L', false);
                                                  Put(CurRow, 2, Ob.CL_LINKS_OTHER, 'L', false);
                                                  Put(CurRow, 3, oper.chet, 'C', false);
                                                  Put(CurRow, 4, to_char(oper.data_prov,'dd.mm.yy'), 'C', false);   
                                                 
                                                  CurRow := CurRow + 1;
                                                   i := i + 1;
                                                  Exit;
                                            end loop;
      r_chet := Ob.lnk_NAME;
       
       --  if r_chet = '40702810700000000083' then
        --    Exit;
      --   end if;
                         end if;
                 end loop;
                        end;
                  [EXCEL].visible;
                  [EXCEL].release;
         end if;
 [EXCEL].Exec_Script(V_DEST_STR);   
      end if;
   

   end if;
       
End;
InNesKA
Участник со стажем


Вступление в Клуб: 05.06.2008
СообщениеПн Июн 30, 2008 11:31    Ответить с цитатой
Полезность: Нет оценки
ssa774 пишет:
По-моему, клиент-скрипт дважды выполняется(собственно в клиент-скрипте и в коде проверки). Перенесла в проверку условия P_INFO.


Не помогло Sad
ssa774
Профи


Вступление в Клуб: 30.11.2007
СообщениеПн Июн 30, 2008 11:41    Ответить с цитатой
Полезность: Нет оценки
InNesKA пишет:
ssa774 пишет:
По-моему, клиент-скрипт дважды выполняется(собственно в клиент-скрипте и в коде проверки). Перенесла в проверку условия P_INFO.


Не помогло Sad


Код клиент-скприта нужно посмотреть.
InNesKA
Участник со стажем


Вступление в Клуб: 05.06.2008
СообщениеПн Июн 30, 2008 11:47    Ответить с цитатой
Полезность: Нет оценки
ssa774 пишет:
InNesKA пишет:
ssa774 пишет:
По-моему, клиент-скрипт дважды выполняется(собственно в клиент-скрипте и в коде проверки). Перенесла в проверку условия P_INFO.


Не помогло Sad


Код клиент-скприта нужно посмотреть.


Код:

Public Function Main(LastControl)
   Execute DEST_STR.TEXT
   If LastControl is Nothing Then
      ' Действия при загрузке формы
   End If
   If LastControl is OK and  V_DEST_STR.Text <> "" Then
      DO
         Execute V_DEST_STR.Text
         Call Form1.ScriptServerValidate( OK, "OK")
      Loop While   V_DEST_STR.Text <> ""
   End If
   
   Main = True
End Function

Вот он.
ssa774
Профи


Вступление в Клуб: 30.11.2007
СообщениеПн Июн 30, 2008 11:48    Ответить с цитатой
Полезность: 2
вот так будет работать. должно выполняться только по ОК
Код:

Public Function Main(LastControl)
   If LastControl is Nothing Then
      ' Действия при загрузке формы
   End If
   If LastControl is OK and  V_DEST_STR.Text <> "" Then
      DO
         Execute V_DEST_STR.Text
         Call Form1.ScriptServerValidate( OK, "OK")
      Loop While   V_DEST_STR.Text <> ""
   End If
   
   Main = True
End Function
InNesKA
Участник со стажем


Вступление в Клуб: 05.06.2008
СообщениеПн Июн 30, 2008 11:50    Ответить с цитатой
Полезность: Нет оценки
ssa774 пишет:
вот так будет работать. должно выполняться только по ОК
Код:

Public Function Main(LastControl)
   If LastControl is Nothing Then
      ' Действия при загрузке формы
   End If
   If LastControl is OK and  V_DEST_STR.Text <> "" Then
      DO
         Execute V_DEST_STR.Text
         Call Form1.ScriptServerValidate( OK, "OK")
      Loop While   V_DEST_STR.Text <> ""
   End If
   
   Main = True
End Function


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

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