02.10.2008, 19:13 | #1 |
Участник
|
Ошибка оборотно-сальдовой ведомости ГК
Аксапта 4.0 SP2 на "большом" плане счетов при построении ОСВ по ГК выдается следующая ошибка: "Ошибка времени выполнения: Выполняемая операция генерирует оператор SQL, содержащий большое количество вложенных операторов. Разбейте данную операцию не несколько частей и повторите попытку.
Трассировка стека (C)\Classes\QueryRun\next (C)\Classes\FormDataSource\executeQuery (C)\Forms\RLedgerSheetTurnoverBalance\Data Sources\LedgerTable\Methods\executeQuery (C)\Classes\FormDataSource\research (C)\Forms\RLedgerSheetTurnoverBalance\Methods\init (C)\Classes\SysSetupFormRun\init - line 3 " Установкой фильтра на меньший диапазон счетов ГК эта проблема решается. Подскажите возможные пути решения проблемы. |
|
03.10.2008, 06:57 | #2 |
Мрачный тип
|
В
\Forms\RLedgerSheetTurnoverBalance\Data Sources\LedgerTable\Methods\executeQuery вставьте перед вызовом super() X++: info(this.query().datasourceno(1).toString()); Так же интересует - какова глубина вложенности плана счетов ? Всю структуру запроса там делает класс RLedgerSheetEngine_TurnoverBalance по настройке структуры плана счетов. Копайте в нем, вполне возможно что заданный диапазон счетов имеет в плане счетов такую структуру, что формируемый этим классом запрос просто выходит за рамки возможностей системы.
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
06.10.2008, 09:16 | #3 |
Участник
|
Аналогичная проблема.
5000 строк в таблице LedgerTable. При формировании отчета указываю условие запроса "!9*". Генирируется честный запрос SELECT * FROM LedgerTable WHERE ((AccountNum = N'00' OR AccountNum = N'10000000' OR AccountNum = N'10009990' OR AccountNum = N'10100000' OR AccountNum = N'10110000' OR AccountNum = N'10111010' OR AccountNum = N'10112000' OR AccountNum = N'10112010' OR AccountNum = N'10112028' OR AccountNum = N'10113000' OR AccountNum = N'10113010' OR AccountNum = N'10113028' OR AccountNum = N'10114000' OR AccountNum = N'10114010' OR ....... и так далее перечисление по всем счетам, т.е. более 3000 счетов. Как результат имеем ошибку: "Ошибка времени выполнения: Выполняемая операция генерирует оператор SQL, содержащий большое количество вложенных операторов. Разбейте данную операцию не несколько частей и повторите попытку. Получается системная ошибка при использовании стандартных запросов. Есть ли рецепты по решению этой проблемы? Спасибо. |
|
06.10.2008, 10:21 | #4 |
Участник
|
Тут только один выход. Менять запрос и вместо запихивания в range списка счетов переделывать на соединение с таблицей. Саму таблицу следует заполнять до вызова запроса.
Делал такую штуку. Если найду код, то до конца дня выложу. |
|
06.10.2008, 10:29 | #5 |
Участник
|
Цитата:
А можно просто запрос переписать, чтобы "!9*" превращалась именно в NOT LIKE "9%" без расшифрования на отдельные счета. |
|
06.10.2008, 10:31 | #6 |
Участник
|
Цитата:
Обидно натыкаться на такие грабли, использую стандартный функционал. Нужно изначально позиционировать систему с ограничениями, количество счетов не более ХХХ. Последний раз редактировалось ena_ax; 06.10.2008 в 10:33. |
|
06.10.2008, 10:36 | #7 |
Участник
|
Цитата:
О части из них, кстати, честно говорится в соответствующих мануалах и тренингах. |
|
06.10.2008, 11:23 | #8 |
Мрачный тип
|
5000 счетов, это, простите, Ваша собственная придумка на проекте или это консалтер от внедренца предложил таким способом пару разрезов аналитических в учете завести ( т.е. в LedgerTable запихать) ?
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
06.10.2008, 11:34 | #9 |
Участник
|
проект по трансформации бухгалтерской отчетности в управленческую.
5000 счетов это план счетов МСФО. Не вижу в этом ничего плохого. Аналитика тоже испоьзуется. |
|
06.10.2008, 11:46 | #10 |
Участник
|
Вопросы ко всем:
1. В каком виде и для каких целей используется данный отчёт? 2. Если в нём вам не нужно проводок, может, проще настроить свой финансовый отчёт? Будет работать на порядок быстрее. |
|
06.10.2008, 12:11 | #11 |
Участник
|
1. Использование отчета стандартное - распечатка обротов и сальдо по счетам для целей проверки, просмотра. контроля и тд.
2. Финансовыми отчетами пользуемся. К стандартному отчету ОСВ првавыкли пользователи. Опять же используя финансовые отчеты, нужно постоянно поддерживать структуры этих отчетов в актуальном состоянии плана счетов и аналитик. |
|
06.10.2008, 12:20 | #12 |
Участник
|
Именно такой ответ я и ожидал. И сколько страниц содержит такой отчёт с 5000 счетов и проводками? По опыту, данные такого отчёта используются максимум на долю процентов, не более. Если нужно выверить что-то конкретное, то так и делают, фильтруя не более десятка счетов для выверки.
Извините, но в 4.0 это можно один раз настроить, чтобы структура поддерживалась. Бывают какие-то баги, не без этого, конечно. |
|
06.10.2008, 12:32 | #13 |
Участник
|
Вопрос был не в том как использовать отчет, а понять причину ошибки и устранить ее.
Теперь все ясно, Ошибка системная, исправляется программированием. Для меня это было совсем не очевидно. |
|
06.10.2008, 16:02 | #14 |
Участник
|
Увы, с примером кода я поторопился. Поиски привели к осознанию того, что выполнял эту модификацию на прошлой работе. Естественно, что того приложения у меня нет.
|
|
06.05.2011, 13:06 | #15 |
Developer
|
Обсуждение, конечно, давнее, но есть еще один "стремный" способ обойти эту пробему. Стемный - потому что для специфических случаев может не прокатить
Можно сгруппировать счета: Пусть некоторые счета удовлетворяют одной конкретной маске (отберем все счета для этой маски). Если в плане счетов нет ни одного счета, который подходит под указанную маску и не используется для отчета, то исходные счета можно заменить маской. Например, счета 1000000, 2000000, 3000000 можно заменить маской ?000000. Маски ?000000, ?100000, ?200000 можно заменить маской ??00000. И т.д. Подмена на маску осуществляется только если все счета, которые удовлетворяют маске, используются в отчете. И не забыть про спец. символы. В принципе - работает, но лучше все-таки через таблицу, как посоветовал Raven Melancholic, хотя и там есть свои "прелести". |
|
06.05.2011, 14:26 | #16 |
северный Будда
|
Цитата:
Мне кажется, что план счетов из 5000 строк (даже если 1000 из них - это уровни иерархии) в принципе малоуправляем и трудноанализируем с точки зрения управленческого учёта. наличие такой детализации ИМХО автоматически должно привести к тому, что обозреватся будут 2-3 сотни итоговых счетов, а остальные будут содержать редко востребованную детализацию. Что само по себе наводит в итоге на мысль о 2-3 сотнях счетов и переводе остальной детализации в финаналитику. Поправьте меня, если ошибаюсь. Проект с участием МСФО у меня был только один
__________________
С уважением, Вячеслав Последний раз редактировалось pitersky; 06.05.2011 в 14:30. |
|
06.05.2011, 16:55 | #17 |
Участник
|
Цитата:
Сообщение от pitersky
Если не секрет - кто всё-таки разрабатывал ваш план счетов по МСФО? Вы сами, внедренец, контора управленческого консалтинга или кто-то ещё?
Мне кажется, что план счетов из 5000 строк (даже если 1000 из них - это уровни иерархии) в принципе малоуправляем и трудноанализируем с точки зрения управленческого учёта. наличие такой детализации ИМХО автоматически должно привести к тому, что обозреватся будут 2-3 сотни итоговых счетов, а остальные будут содержать редко востребованную детализацию. Что само по себе наводит в итоге на мысль о 2-3 сотнях счетов и переводе остальной детализации в финаналитику. Поправьте меня, если ошибаюсь. Проект с участием МСФО у меня был только один |
|
06.05.2011, 18:33 | #18 |
северный Будда
|
понятно. ИМХО это ошибка учётной политики. Мне даже интересно, как можно проанализировать операции по 5000 счетов за адекватное время.
По теме топика - у меня на одной задаче тоже возникла необходимость наложения ограничения виде "!АА*". Но никакого перечисления в итоговой строке запроса я не получил. На сиквел ушло (NOT(Field1 LIKE "AA*")). Правда, я это на 3.0 делал
__________________
С уважением, Вячеслав |
|