Всем, кто работает с Excel, приходилось встречаться с автоматическим преобразованием вводимых данных в различные форматы. Например, если в ячейке набрать значение «01-3936», то оно автоматически преобразуется в Дату, а при вводе значения «52%» - формат ячейки автоматически станет «Процентный».
Конечно, в некоторых случаях, это очень удобный механизм, но иногда, авто-преобразование формата, мягко говоря, мешает работать. И для того, чтобы «отключить» последствия авто-преобразования при вводе данных в таблице Excel, приходится изменять формат ячеек вручную, или использовать пункт меню «специальная вставка».
Авто-преобразование формата данных срабатывает и при формировании Excel отчетов в DIRECTUM. Это значит, что если вы формируете сводную таблицу по документам или записям справочника, и при этом формат номеров документов или записей справочников у вас такой, который Excel может воспринимать как подходящий для авто-преобразования, например в дату, то в отчет попадут некорректные данные:
Пример исходных данных для отчета, которые могут быть распознаны как Дата:
01-3936
01/5
3.3.1
Чтобы выйти из этой ситуации, и увидеть в отчете данные, именно в том формате, в котором мы их передаем, следует модифицировать расчет отчета так, чтобы исходные данные поступали в формате, в котором Excel не будет применять автоматическое преобразование.
Обычно, выборка данных для отчета, получается с помощью SQL-запроса к БД DIRECTUM. В нашей ситуации, следует модифицировать SQL запрос таким образом, чтобы результат имел следующий формат:
="<значение>"
Пример SQL запроса на языке ISBL:
StrStart = '="'
StrEnd = '"'
QuerySQL = "Select '" & StrStart & "' + dop3 + '" & StrEnd & "' From MBAnalit
Where dop3 ='01-3936' or dop3 ='01/5' or dop3 ='3.3.1'"
SQL(QuerySQL)
После обработки IS-Builder запрос будет выглядеть так:
Select '="' + dop3 + '"'
From MBAnalit
Where dop3 ='01-3936' or dop3 ='01/5' or dop3 ='3.3.1'
Примеры возвращаемых значений:
При передаче таких данных в отчет, они будут обработаны как формула, и не будут автоматически преобразованы, а попадут в отчет в виде текстовых строк.
А что будет, если поле dop3 содержит символ <">?
Не рекомендуется использовать оператор OR в запросах SQL. Данный оператор снижает производительности, поэтому рекомендую изменить на следующий запрос:
Select'="' + dop3 + '"'
FromMBAnalit
Where dop3 IN ('01-3936','01/5','3.3.1')
Стоит отметить, что при преобразовании данных из столбца Рег.номер в Общий формат уже в самом Excel'е вместо даты в поле отображается строка из цифр составляющих количество дней от начала 20 века до той даты, которая в ячейке, а это уже совсем не те данные, которые требуются.
При решении данной проблемы в нашей фирме первое эффективное решение, которое пришло это дать Excel'ю понять, что формат данных, с которым он имеет дело совсем не Дата и было это сделано с помощью пробелов, добавленных в запросе перед данными, попадающими в поле Рег.номер. Ну а в дальнейшем Петр предложил отличную идею с формированием данных в виде формулы.
Этот вариант рассматривался, но это действует только при работе с данными через сам Excel, а при передачи данных из Directum'а данные воспринимаются как строка и апостроф остается виден и выбор формата уже не предоставляется.
Согласен c Антоном Исуповым, считаю что использование апострофа выгоднее, при этом Excel не занимается пересчетом формул и пользователь может менять формат значения по-своему усмотрению.
Мохаммед Гомаа, пруфлинк дайте плиз.
Использовал описанный Петром метод для построения таблицы данных сводной таблицы. Таблица данных сформировалась, все хорошо. А вот в самой таблице, где на основании этих данных считалось "среднее" - полезли ошибки типа "Деление на 0". Мой вывод - данный способ для сводных таблиц использовать нельзя.
В моем случае вопрос решился использованием стандатрой функции SQL2XlsTab. Она корректно заменила разделяющую точку на запятую и дробные числа Excel воспринял правильно.
Авторизуйтесь, чтобы написать комментарий