- Создал(а) Отдел документирования, редактировал(а) Васильев Антон 31.08.2024
Система ActiveFrame использует драйвер, который обрабатывает запросы, передаваемые в систему в целях применения прав просмотра и корректной связи документов. Из-за этого могут возникнуть проблемы и ошибки при исполнении. Рассмотрим часто встречающиеся ошибки:
- Дубликат id_type: при написании запроса вы вынесли поле id_type, и не указали alias вашему полю. В результате в обработанном драйвером отчете будет 2 поля id_type, в результате чего система не сможет понять, какой из этих двух полей использовать и отчет прекратит исполнение с ошибкой о конфликте имен полей. Решение: присвоениеалиаса вашему id_type, например idType, или не используйте это поле, поскольку система сама добавляет обработку;
- Расхождение количества колонок в UNION – поскольку система сама добавляет id_type, у вас может появиться ситуация, где в первой части UNION у вас система добавляет id_type, а во второй части, например, вы используете выборку из вложенного запроса, в результате чего система не добавляет дополнительные колонки. Количество колонок различно, в результате запрос с точки зрения компилятора некорректен – ошибка – падение запроса. Решение: надо внимательно рассмотреть UNION и сделать так, чтобы система получала одинаковое количество колонок;
- Появление несуществующих колонок: так как система автоматически добавляетколонки columnName_type в запрос для колонок с id, если alias в одном из ваших вложенных запросов совпадает с именем из списка колонок, имеющих приложенный _type (например вы назвали текстовое имя исполнителя так: orig_shortnameasexecutor), то система попытается добавить _type в дополнение этой колонки, но во вложенном запросе такой колонки не будет, в результате чего будет ошибка. Решение: Если поле является типом id– рекомендуется добавить _type колонку во вложенный запрос. Если эта колонка не id – переименуйте alias в развернутое имя, например executor ->execBeardName;
- Зависание отчета при исполнении: такая ошибка возникает в редких случаях в отчетах со сложным запросом, включающих в себя WITH table Name AS (…). В таких случаяхприходится избавляться от WITH конструкции, перенеся таблицу из AS (…) в место, где она используется в качестве вложенного запроса. Это делает запрос значительно менее читабельным, но исправляет зависание отчета;
- Ошибки синтаксиса в запросе.
Далее приведен пример, где появляется ошибка синтаксиса в запросе и советы по обнаружению причины этой ошибки. Ранее рассматривался отчет Example3LP, в котором в запросе рассматривалась конструкцияin($P!{DocTypes}).
Рис.8.1. Запрос отчета Example3LP с ошибкой.
В запросе $P!{DocTypes} означает, что передаётся напрямую список отобранных при выполнении отчета значений. При запуске отчета на выполнение выдаётся ошибка.
Рис. 8.2. Ошибка при выполнении отчета.
В журнале cm_report.log найдем сообщения, которые относятся к выполнению данного отчета. На рисунке Рис.8.3. показан фрагмент журнала. Находим сообщение:
Sql query is not valid. Probably it contains some keyword used as column name, alias etc. In such cases keywords should be wrapped in parentheses.-
"Sql-запрос недопустим. Вероятно, он содержит какое-то ключевое слово, используемое в качестве имени столбца, псевдонима и т. д. В таких случаях ключевые слова должны быть заключены в круглые скобки".
В выражении :
and rkkbase.type in 'Письмо', 'Извещение', 'Приказ'
видно, как отобранный список подставляется в запрос. Список должен быть заключён в круглые скобки.
Рис. 8.3. Фрагмент файла cm_report.log.
Рис. 8.4. Запрос отчёта с исправленной ошибкой.
Параметр ($P!{DocTypes})заключен в круглые скобки.
Статус | ГОТОВО |
---|---|
Комментарий |
- Нет меток