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

ошибка при формировании excel
На страницу 1, 2  След.
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Настройка и сопровождение
Предыдущая тема :: Следующая тема  
Автор Сообщение
danzki
Участник - экстремал


Вступление в Клуб: 30.09.2010
СообщениеВт Сен 04, 2012 09:45   ошибка при формировании excel Ответить с цитатой
Полезность: Нет оценки
При формировании отчета валится с ошибкой
Unknown runtime error
..
Scode: 800a03ec

есть предположение, что происходит переполнение строки валидатора.

подскажите, строка валидатора выдает данные в клиент-скрипт частями?
что определяет то, когда нужно взять следующую часть?
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеВт Сен 04, 2012 10:14    Ответить с цитатой
Полезность: Нет оценки
http://www.cftclub.ru/viewtopic.php?t=2213&highlight=%EE%F2%EB%E0%E4%F7%E8%EA
danzki
Участник - экстремал


Вступление в Клуб: 30.09.2010
СообщениеВт Сен 04, 2012 10:22    Ответить с цитатой
Полезность: Нет оценки
это я уже читал, не тот случай...там в отчете ошибка при выводе, у меня выводится просто текст.

всё форматирование перенес в шаблон, все равно ошибка
danzki
Участник - экстремал


Вступление в Клуб: 30.09.2010
СообщениеВт Сен 04, 2012 10:25    Ответить с цитатой
Полезность: Нет оценки
у меня есть одно подозрение - есть цикл в котором выводятся однородные данные.
если данных для вывода в одной итерации много (свыше 32000), то валится с ошибкой
если данных в одной итерации меньше чем 32000, то все ок.

мне надо знать внутренние механизмы ядра при работе с экселем...
devor
Профи


Вступление в Клуб: 13.02.2012
СообщениеВт Сен 04, 2012 10:45    Ответить с цитатой
Полезность: Нет оценки
danzki пишет:
у меня есть одно подозрение - есть цикл в котором выводятся однородные данные.
если данных для вывода в одной итерации много (свыше 32000), то валится с ошибкой
если данных в одной итерации меньше чем 32000, то все ок.

мне надо знать внутренние механизмы ядра при работе с экселем...


текст клиент-скрипта сохраняется в глобальной переменной операции и выведен на экранную форму (но с отключенной видимостью). Длина этой переменной как раз varchar2(32000)

PS для отладки клиент-скрипта можно воспользоваться отладчиком Microsoft Script Debugger. На сайте сопровождения есть инструкция:
http://supportobject.ftc.ru/ibso/docum/instr_script.zip
и сам отладчик:
http://supportobject.ftc.ru/ibso/docum/scd10en.zip
Дока по написанию клиент-скрипта:
http://supportobject.ftc.ru/ibso/docum/chm_annex4.zip
Функции по работе с Excel собраны в ::[RUNTIME].[EXCEL]
danzki
Участник - экстремал


Вступление в Клуб: 30.09.2010
СообщениеВт Сен 04, 2012 11:14    Ответить с цитатой
Полезность: Нет оценки
devor пишет:

текст клиент-скрипта сохраняется в глобальной переменной операции и выведен на экранную форму (но с отключенной видимостью). Длина этой переменной как раз varchar2(32000)


как я понимаю в Локальных описаниях , выполняя различные операции из библиотеки EXCEL, я заполняю эту Глобальную переменную (назовем ее V_DEST).

эта переменная периодически очищается, записывается новый кусок и т.д. так или нет???
поэтому количество данных передаваемое в эксель ограничивается только экселем (65000 строк на листе)

я просто первый раз с такой проблемой сталкиваюсь. есть огромные отчеты в эксель (тот же ФОР), куча самописных...но не было такой проблемы
devor
Профи


Вступление в Клуб: 13.02.2012
СообщениеВт Сен 04, 2012 11:22    Ответить с цитатой
Полезность: Нет оценки
danzki пишет:

как я понимаю в Локальных описаниях , выполняя различные операции из библиотеки EXCEL, я заполняю эту Глобальную переменную (назовем ее V_DEST).

эта переменная периодически очищается, записывается новый кусок и т.д. так или нет???

Так.

danzki пишет:

поэтому количество данных передаваемое в эксель ограничивается только экселем (65000 строк на листе)

У Экселя (по крайней мере у последних версий) ограничений на количество строк нет.
danzki
Участник - экстремал


Вступление в Клуб: 30.09.2010
СообщениеВт Сен 04, 2012 11:36    Ответить с цитатой
Полезность: Нет оценки
Ок.
Эксель старый, поэтому ограничение все таки есть Smile

В каких случаях V_DEST очищается?

Ситуация такая: у меня два листа, фактически одни и те же данные выводят на оба листа, просто в разном "обрамлении". Так вот при выводе на первый лист V_DEST переполняется

Я так понимаю, что V_DEST заполняется внутри логических структур (циклов, ветвлений) и не может быть разбита на куски так, чтобы разбивались какие-то команды экселю... типа Range(Cells(1,1), Cells(5, 5)).Select должна полностью попасть в один кусок V_DEST
Я правильно думаю?

А в моем случае просто V_DEST переполняется внутри логической структуры....
как-то так...

Если это так то могу попробовать поменять код как-нибудь..
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеВт Сен 04, 2012 11:49    Ответить с цитатой
Полезность: Нет оценки
В клиент скрипте должно быть примерно так

Public Function Main(LastControl)

Execute V_DEST.Text

V_DEST.Text = ""


Main = True

If LastControl Is Nothing Then
' Действия при загрузке формы
Else

End if

Main = True

End Function
devor
Профи


Вступление в Клуб: 13.02.2012
СообщениеВт Сен 04, 2012 11:53    Ответить с цитатой
Полезность: Нет оценки
danzki пишет:
Ок.
В каких случаях V_DEST очищается?

Как насчет поставить отладку с выводом длины переменной в интересующих местах?

danzki пишет:

Я так понимаю, что V_DEST заполняется внутри логических структур (циклов, ветвлений) и не может быть разбита на куски так, чтобы разбивались какие-то команды экселю... типа Range(Cells(1,1), Cells(5, 5)).Select должна полностью попасть в один кусок V_DEST
Я правильно думаю?

А в моем случае просто V_DEST переполняется внутри логической структуры....
как-то так...

Если это так то могу попробовать поменять код как-нибудь..

Мне кажется, направление изысканий задано. Уже можно приступать к самостоятельным действиям.
danzki
Участник - экстремал


Вступление в Клуб: 30.09.2010
СообщениеВт Сен 04, 2012 12:57    Ответить с цитатой
Полезность: Нет оценки
devor пишет:

Как насчет поставить отладку с выводом длины переменной в интересующих местах?

В DEfault есть зануление V_DEST

Далее в одном месте есть
EXCEL.Exec_Script ( V_DEST );
В других местах явных манипуляций с V_DEST нет. Проверяю длину, до и после данной строки (даже выводил в дебаг V_DEST)

devor пишет:


Мне кажется, направление изысканий задано. Уже можно приступать к самостоятельным действиям.


Так то верно, но не хотелось бы после произведенных манипуляций наткнуться на эти же грабли ))) Хотелось бы знать наверняка

Кстати Клиент-скрипт - типичный для таких случаев

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

Main = True 'Результат валидатора (True, False, NULL)
End Function
devor
Профи


Вступление в Клуб: 13.02.2012
СообщениеВт Сен 04, 2012 13:09    Ответить с цитатой
Полезность: Нет оценки
danzki пишет:

Так то верно, но не хотелось бы после произведенных манипуляций наткнуться на эти же грабли ))) Хотелось бы знать наверняка


Я выше давал ссылку на отладчик Microsoft Script Debugger.
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеВт Сен 04, 2012 13:14    Ответить с цитатой
Полезность: Нет оценки
а вот так если ?

Public Function Main(LastControl)

If LastControl Is OK Then
'msgbox "ok"
Execute V_DEST.Text
V_DEST.Text = ""

end if

If LastControl Is Nothing Then
' Действия при загрузке формы
Else
' Действия при потере фокуса валидируемого контрола LastControl

End If
Main = True 'Результат валидатора (True, False, NULL)
End Function
danzki
Участник - экстремал


Вступление в Клуб: 30.09.2010
СообщениеВт Сен 04, 2012 13:41    Ответить с цитатой
Полезность: Нет оценки
vtar пишет:
а вот так если ?


Отработало без ошибок Very Happy
в чем секрет?
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеВт Сен 04, 2012 14:00    Ответить с цитатой
Полезность: Нет оценки
очевидно в
V_DEST.Text = ""
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Настройка и сопровождение Часовой пояс: GMT + 3
На страницу 1, 2  След.
Страница 1 из 2

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