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

Ошибка ЦФТ или Я чего то не понимаю?

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


Вступление в Клуб: 25.01.2011
СообщениеСр Янв 11, 2012 13:23   Ошибка ЦФТ или Я чего то не понимаю? Ответить с цитатой
Полезность: Нет оценки
Доброго времени суток. Возникла следующая проблема, появилась необходимость создания расширения над операцией Ликвидация проведенного документа(DEL_DOC) в Платежных документах. Собственно, в расширении выполняется некая функция проверки/анализа. И вот в чем проблема: при создании расширения на операцию DEL_DOC (даже если не вводить в нем ни одной собственной строчки), возникает следующая ошибка: "maximum open cursors exceeded".
Если пройтись по логу, то можно заметить, что DEL_DOC в Платежных документах вызывает DEL_DOC(Ликвидация проведенной папки и документов) в Папки платежей, которая в свою очередь вызывает DEL_DOC в Платежных документах и так до бесконечности.
Ситуация эта возможна только в случае, если документ относится к папке, иначе все проходит без осложнений.
Собственно вопрос, если кто сталкивался с такой проблемой, то как Вы ее решали?
P.S.: Способ об отвязки докумета от папки, затем его проводки и привязки его к тойже папке конечно спасает, но как то этот способ не внушает уверенности.
Alex2019
Профи


Вступление в Клуб: 02.07.2007
СообщениеСр Янв 11, 2012 15:38    Ответить с цитатой
Полезность: 2
День добрый. Дело в том, что не все операции, будучи расширенными, остаются полностью работоспособными. И потому это условие: "даже если не вводить в нем ни одной собственной строчки" не означает сохранения функциональности. Дело в том, что при создании ЦФТ-шного расширения все вызовы этой операции переадресуются на расширение, а глобальные переменные, назначаемые в вызывающих операциях, изменяются только в исходной, расширяемой операции (но не в ее расширении). При исполнение же тела (если посмотреть по F12) происходит замещение назначенных извне значений глобальных переменных (чаще NULL-ом).
Поэтому для операций, которые имеют глобальные переменные, и вызываются из других, в которых эти переменные устанавливаются, в расширении нужно убивать/комментарить в теле строку &BASE$SETVARS; а переменные при необходимости инитить вручную. Другой вариант - инитить переменные расширения из расширения вызывающей, но минусы такого подхода видимо очевидны.
nOnAME
Участник со стажем


Вступление в Клуб: 25.01.2011
СообщениеСр Янв 11, 2012 16:24    Ответить с цитатой
Полезность: Нет оценки
Спасибо, по поводу &BASE$SETVARS попробую, не уверен, что в моем конкретном случае поможет, но попробую.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

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