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

SOS товарищи
На страницу 1, 2  След.
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы
Предыдущая тема :: Следующая тема  
Автор Сообщение
wolfio
Участник - экстремал


Вступление в Клуб: 22.10.2012
СообщениеВт Окт 06, 2015 17:55   SOS товарищи Ответить с цитатой
Полезность: Нет оценки
Добрый день, товарищи.
такая проблема:

есть отчет, который выгружает объемный набор данных в ексель. Т.к. клиентскриптовая переменная ограничена размером, то в проверке юзают [EXCEL].Exec_Script(V_DEST) для перезаписи нового куска кода на VB, а в Клиент-скрипте Call Form1.ScriptServerValidate(OK, "OK") - пока не опустошится клиентскриптовая переменная.
Т.е. циклическая передача от тела к КСу, и снова в тело, и снова в КС..

По завершении выгрузки, форма отчета не закрывается.

чтобы закрыть форму, предпринял следующее:

Добавил еще одну переменную для клиентскрипта V_DES_FLAG. И заполняю ее только когда [EXCEL].Exec_Script вернет Done

Код:

Public Function Main(LastControl)
   If LastControl is OK and  V_DEST.Text <> "" Then
      DO
         Execute V_DEST.Text
         Call Form1.ScriptServerValidate(OK, "OK")
      Loop While   V_DEST.Text <> ""
   End If
   
   if V_DES_FLAG.Text = "1" then
      msgbox ("")
      call Form1.ScriptPostEvent(OK, "CLICK") ' shut this fucking form
   End If
   
   Main = True 'Результат валидатора (True, False, NULL)   
End Function


Обращаю внимание на выделенную строку MSGBOX. Если я оставляю ее в таком виде - выдается сообщение, и форма закрывается, если же я уберу строку, форма не закрывается, и продолжает висеть.

оч похоже на какую-то багу в стыке VB-ЦФТ, но как это исправить? может кто сталкивался?

Варианты отсюда http://www.cftclub.ru/viewtopic.php?t=1679&highlight=%E7%E0%EA%F0%FB%F2%FC+%F4%EE%F0%EC%F3 прошу не предлагать. я попробовал все, что подходило.
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеВт Окт 06, 2015 18:13    Ответить с цитатой
Полезность: Нет оценки
Не пробовали в файл выводить содержимое [RUNTIME].[EXCEL].tbl_rep?
prog
Эксперт


Вступление в Клуб: 03.03.2008
СообщениеВт Окт 06, 2015 20:42    Ответить с цитатой
Полезность: Нет оценки
не видно вашего серверного валидатора.

Если Call Form1.ScriptServerValidate(OK, "OK") не почистит V_DEST.Text то получится бесконечный цикл. попробуйте вот так на всякий случай

Код:
DO
         Execute V_DEST.Text
         V_DEST.Text = ""
         Call Form1.ScriptServerValidate(OK, "OK")
      Loop While   V_DEST.Text <> ""
Alkov
Профи


Вступление в Клуб: 23.09.2010
СообщениеСр Окт 07, 2015 02:12   Re: SOS товарищи Ответить с цитатой
Полезность: Нет оценки
wolfio пишет:
Добрый день, товарищи.
такая проблема:

есть отчет, который выгружает объемный набор данных в ексель.

По завершении выгрузки, форма отчета не закрывается.


Почему вывод в Excel не повесить на кнопку OK ?
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеСр Окт 07, 2015 09:38   Re: SOS товарищи Ответить с цитатой
Полезность: Нет оценки
wolfio пишет:
Добрый день, товарищи.
такая проблема:

есть отчет, который выгружает объемный набор данных в ексель. Т.к. клиентскриптовая переменная ограничена размером, то в проверке юзают [EXCEL].Exec_Script(V_DEST) для перезаписи нового куска кода на VB, а в Клиент-скрипте Call Form1.ScriptServerValidate(OK, "OK") - пока не опустошится клиентскриптовая переменная.
Т.е. циклическая передача от тела к КСу, и снова в тело, и снова в КС..

По завершении выгрузки, форма отчета не закрывается.

чтобы закрыть форму, предпринял следующее:

Добавил еще одну переменную для клиентскрипта V_DES_FLAG. И заполняю ее только когда [EXCEL].Exec_Script вернет Done

Код:

Public Function Main(LastControl)
   If LastControl is OK and  V_DEST.Text <> "" Then
      DO
         Execute V_DEST.Text
         Call Form1.ScriptServerValidate(OK, "OK")
      Loop While   V_DEST.Text <> ""
   End If
   
   if V_DES_FLAG.Text = "1" then
      msgbox ("")
      call Form1.ScriptPostEvent(OK, "CLICK") ' shut this fucking form
   End If
   
   Main = True 'Результат валидатора (True, False, NULL)   
End Function


Обращаю внимание на выделенную строку MSGBOX. Если я оставляю ее в таком виде - выдается сообщение, и форма закрывается, если же я уберу строку, форма не закрывается, и продолжает висеть.

оч похоже на какую-то багу в стыке VB-ЦФТ, но как это исправить? может кто сталкивался?

Варианты отсюда http://www.cftclub.ru/viewtopic.php?t=1679&highlight=%E7%E0%EA%F0%FB%F2%FC+%F4%EE%F0%EC%F3 прошу не предлагать. я попробовал все, что подходило.



Можешь mdb скинуть? ...гляну на тестовой сегодня
wolfio
Участник - экстремал


Вступление в Клуб: 22.10.2012
СообщениеСр Окт 07, 2015 10:00    Ответить с цитатой
Полезность: Нет оценки
Volod пишет:

Не пробовали в файл выводить содержимое [RUNTIME].[EXCEL].tbl_rep?

Нет. а что это даст?

prog пишет:
не видно вашего серверного валидатора.

Если Call Form1.ScriptServerValidate(OK, "OK") не почистит V_DEST.Text то получится бесконечный цикл. попробуйте вот так на всякий случай

Код:
DO
         Execute V_DEST.Text
         V_DEST.Text = ""
         Call Form1.ScriptServerValidate(OK, "OK")
      Loop While   V_DEST.Text <> ""


Как я уже написал, серверный валидатор перезаписывает V_DEST кусками VBкода, в пределах размерности переменной (32000), через дистрибутивную [EXCEL].Exec_Script(V_DEST). Прочитайте к ней коммент, если интересно.

Alkov пишет:

Почему вывод в Excel не повесить на кнопку OK ?

Как раз при нажатии на ОК отчет и начинает крутиться.



Матвеев Евгений пишет:

Можешь mdb скинуть? ...гляну на тестовой сегодня
Тут довольно много локала, который вам будет тяжко отгадывать при компиляции..


--
у меня самого появилась мысль такого рода, что MsgBox заставляет после закрытия сообщения MsgBox'а выполниться Клиент-скрипту снова, и при этом втором выполнении, он уже проверяет значение переменной V_DES_FLAG.Text = "1" и закрывает форму.
Если теория верна, как ее проверить? как заставить клиентскрипт обновить форму в каждой итерации цикла do while?
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеСр Окт 07, 2015 10:01    Ответить с цитатой
Полезность: Нет оценки
Попробуй вместо
msgbox ("")
call Form1.ScriptPostEvent(OK, "CLICK")

написать так

Lastcontrol.Setfocus
call Form1.ScriptPostEvent(OK, "CLICK")
Lastcontrol.Setfocus

какой-то Lastcontrol.Setfocus лишний, надо поэкспериментировать
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеСр Окт 07, 2015 10:14    Ответить с цитатой
Полезность: Нет оценки
wolfio пишет:
Volod пишет:

Не пробовали в файл выводить содержимое [RUNTIME].[EXCEL].tbl_rep?

Нет. а что это даст?


Запишите в файл с расширением vbs - запустите, м.б. ошибка в данных.
wolfio
Участник - экстремал


Вступление в Клуб: 22.10.2012
СообщениеСр Окт 07, 2015 10:26    Ответить с цитатой
Полезность: Нет оценки
Volod пишет:
wolfio пишет:
Volod пишет:

Не пробовали в файл выводить содержимое [RUNTIME].[EXCEL].tbl_rep?

Нет. а что это даст?


Запишите в файл с расширением vbs - запустите, м.б. ошибка в данных.


если бы была ошибка в данных, то отчет бы не формировался, либо при исполнении VB скрипта возникала бы ошибка.
Ни с тем ни с другим проблем нет
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеСр Окт 07, 2015 10:28    Ответить с цитатой
Полезность: Нет оценки
Проблема возникает только, когда
Цитата:

есть отчет, который выгружает объемный набор данных в ексель

?
Amper
Профи


Вступление в Клуб: 29.10.2010
СообщениеСр Окт 07, 2015 10:34    Ответить с цитатой
Полезность: Нет оценки
Вариант перевода на OOXML тоже не предлагать? Very Happy
Alkov
Профи


Вступление в Клуб: 23.09.2010
СообщениеСр Окт 07, 2015 10:47    Ответить с цитатой
Полезность: Нет оценки
wolfio пишет:
Alkov пишет:
Почему вывод в Excel не повесить на кнопку OK ?

Как раз при нажатии на ОК отчет и начинает крутиться.


На OK , Системное действие= OK?
Так она у вас не закрывается или виснет при выводе?
Покажите проверку блок p_info='OK'
prankster
Профи


Вступление в Клуб: 22.08.2014
СообщениеСр Окт 07, 2015 11:09    Ответить с цитатой
Полезность: Нет оценки
Amper пишет:
Вариант перевода на OOXML тоже не предлагать? Very Happy

+1 Very Happy
wolfio
Участник - экстремал


Вступление в Клуб: 22.10.2012
СообщениеЧт Окт 08, 2015 12:28    Ответить с цитатой
Полезность: Нет оценки
Сорри, афк был.

vtar пишет:
Попробуй вместо
msgbox ("")
call Form1.ScriptPostEvent(OK, "CLICK")

написать так

Lastcontrol.Setfocus
call Form1.ScriptPostEvent(OK, "CLICK")
Lastcontrol.Setfocus

какой-то Lastcontrol.Setfocus лишний, надо поэкспериментировать
нипамагло даже с двумя фокусами

Volod пишет:
Проблема возникает только, когда
Цитата:

есть отчет, который выгружает объемный набор данных в ексель

?


немного не улавливаю вашего вопроса. сама операция это отчет. на форме 2 кнопки ОК и Отмена. Нажимаю ОК, формируется классический отчет в эксель, но форма не закрывается, т.к. криво написан КС таким образом, что он не закрывает форму

Alkov пишет:

На OK , Системное действие= OK?
Так она у вас не закрывается или виснет при выводе?
Покажите проверку блок p_info='OK'
на ок системное действие ОК, просто клиентскрипт не закрывает форму, а передает управление в проверку.

Amper пишет:

Вариант перевода на OOXML тоже не предлагать? Very Happy
Отчет не мой, так что нет. надо просто решить этот баг с закрытием формы.
Volod
Эксперт


Вступление в Клуб: 19.09.2007
СообщениеЧт Окт 08, 2015 12:36    Ответить с цитатой
Полезность: Нет оценки
Я хотел уточнить, только этот отчет глючит, только на данной машине, только в конкретной версии навигатора?
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы Часовой пояс: GMT + 3
На страницу 1, 2  След.
Страница 1 из 2

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