Отладка отчетов

Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.

Изменения (27)

просмотр истории страницы
Для доступа к демо базе авторизуйтесь на [странице|https://www.carbonsoft.ru/products/carbon_billing/demo-access/?land=modern]
{info}
# Если в свежей версии отчёта также есть ошибка обратитесь в [техническую поддержку|https://www.carbonsoft.ru/support/] к [нам|https://helpdesk.carbonsoft.ru/login.php]

h1. Почему вообще могут возникнуть ошибки?
from
abonents a
join attribute_values av_addr on a.id=av.abonent_id and av.attribute_id=3
on a.id=av.abonent_id and av.attribute_id=3
join homes h
join homes h on av_addr.attribute_value=h.id
join tarif t on a.tarif_id=t.id
on a.tarif_id=t.id
where
a.deleted=0
Исправив ошибку алиаса, мы получаем новую и тоже "Column unknown". Поле которое его вызвало - *u.ip*. Если посмотреть набор таблиц, которые мы объединяем, то таблицы учетных записей _users_ мы там не найдем. Для исправления присоедините эту таблицу:
{code:title=Было}
from
abonents a
join attribute_values av_addr on a.id=av_addr.abonent_id and av_addr.attribute_id=3
on a.id=av_addr.abonent_id
and av_addr.attribute_id=3
{code}
{code:title=Стало}
from
abonents a
join users u on a.id=u.abonent_id
on a.id=u.abonent_id
join attribute_values av_addr on a.id=av_addr.abonent_id and av_addr.attribute_id=3
on a.id=av_addr.abonent_id
and av_addr.attribute_id=3
{code}

Отчёт опять завершится ошибкой, но уже другой: "_arithmetic exception, numeric overflow, or string truncation_". Она говорит о том, что мы пытамся производить операции над данными [разных типов|https://firebirdsql.org/manual/migration-mssql-data-types.html], что в ряде случаев пройдет успешно и СУБД произведёт конверсию автоматический, но не всегда.
Чтобы решить проблему, все данные приведём к единому типу: текст. Преобразуем *a.activate_date* в строковый формат, чтобы СУБД могла правильно объединить его с остальным текстом:
Если взять пример где все записи были "None" и убрать оттуда предварительную конверсию даты в строку, вот так:
Возьмём пример с датой выше и добавим преобразование в строку:
{code:title=Было}'Создан: ' || coalesce(a.activate_date,'1970-01-01 00:00:01') || ';' ||{code}
{code:title=Стало}'Создан: ' || coalesce(cast(a.activate_date as varchar(32)),'1970-01-01 00:00:01') || ';' ||{code}
Попробуйте заменить объединения через JOIN на LEFT JOIN (о разницы между ними Вы можете почитать в [справке по оператору в Википедии|https://ru.wikipedia.org/wiki/Join_(SQL)])
{code:title=Было}
join attribute_values av_addr on a.id=av_addr.abonent_id and av_addr.attribute_id=3
on a.id=av_addr.abonent_id
and av_addr.attribute_id=3
join homes h
join homes h on av_addr.attribute_value=h.id
{code}
{code:title=Стало}
left join attribute_values av_addr on a.id=av_addr.abonent_id and av_addr.attribute_id=3
on a.id=av_addr.abonent_id
and av_addr.attribute_id=3
left join homes h
left join homes h on av_addr.attribute_value=h.id
{code}
{info}Если данных в таблицах много, LEFT JOIN может существенно замедлить выполнение отчета.{info}
Причиной данной ошибки является превышение количества символов при наименовании столбца кирилицей в итоговом отчете. Поле может иметь название не более 18 символов.
Пример:
{code:title=Обозначить столбец в отчете "Время начала звонка"}s_time as "Время начала звонка"{code}
{code:title=Было}s_time as "Время начала звонка"{code}
Для решения проблемы, если используете кирилицу - сократите название, либо укажите наименование латиницей.
Несколько вариантов, как можно исправить наименование поля:
{code:title=Стало, вариант 1}
s_time as "Вр.начала звонка"
{code}
{code:title=Стало, вариант 2}
s_time as "Начало звонка"
{code}
{code:title=Стало, вариант 3}
s_time as "Vremia nachala zvonka"
{code}



h2. Я не могу найти ошибку. Что делать?
+Локализуйте проблему+. Максимально упростите запрос и постепенно добавляйте объединения таблиц, или наоборот - постепенно удаляйте поля из исходного запроса.