16.06.2011, 16:45 | #1 |
Участник
|
"Печать" отчета в Excel - проблема с округлением real полей
Имеется в виду проблема при стандартной печати самописного отчета с real-полями, когда отчет выводится на экран, а уже оттуда "печатается" в Excel. Поля представляют собой результат работы функций. На экране в некоторых столбцах(полях) делается округление до 2 знаков, а в некоторых до 3 знаков. При"печати" же с экрана в Excel информация из 3 знака исчезает, число округляется до 2 знаков. Я понимаю, что если заменю 3хзначные поля на строковые, то решу эту проблему. Но хочу спросить, может быть есть какая-то настройка, чтобы решить эту проблему проще. В проблемных полях настроила свойства NoOfDecimals=3, MinNoOfDecimals=3, изменила тип функции c real на SalesQty, но это не помогает.
Последний раз редактировалось Яга; 16.06.2011 в 16:51. |
|
16.06.2011, 16:56 | #2 |
Участник
|
Вроде как в стандартном функционале нет встроенной возможности отправить внутренний отчёт в Excel. Скорее всего это локальная доработка. И скорее всего в недрах у себя она использует функцию strfmt(), которая как раз так неподобающе ведёт себя с дробными знаками.
X++: info(strfmt("%1", 1.999)); |
|
16.06.2011, 17:07 | #3 |
Участник
|
Ну как же нет, в отчете щелкаешь по значку принтера, открывается окно Натройка принтера с выбором принтера, Ехсеl/Получатель почты/Файл/Принтер, количетсво экз
|
|
16.06.2011, 17:13 | #4 |
Участник
|
Это приколы самого экселя, можете в свойствах ячейки настроить количество знаков после зяпятой. Но я бы все таки пользовался num2str, это обезопасит от проблем, в случае если в шаблоне кто-то что-то поменяет в этих ячейках.
|
|
16.06.2011, 17:54 | #5 |
Участник
|
Цитата:
DAX2009,ru5 Нет вывода в Excel стандартных отчетов Кстати, о какой версии Axapta идет речь? Если эту доработку у Вас не трогали, то там экспорт идет через буфер обмена, содержимое которого формируется именно через strFmt(). Как следствие, количество знаков автоматически округляется до 2. Если Вы хотите этого избежать, то Вам надо либо модифицировать класс подготовки данных для экспорта в Excel, либо конвертировать число в строку уже в стандартном отчете Axapta. Тогда класс экспорта возмет ее "как есть" ------------------ PS: Если речь идет о версии Ax3.0 или выше, то, можно выполнить модификацию классов Columbus следующим образом. 1. Вызов их класса находится в методе стандартного класса \Classes\ClassFactory\createViewer(). Как именно он называется я не знаю, но его имя, скорее всего он будет содержать слово "Excel" и вызываться в case ReportOutputUserType::Viewer4 2. В этом классе должен быть метод writeReal(). Так вот, в нем вместо конструкции вроде StrFmt("%1",_field.value()) необходимо записать _field.formatValue() Свойство formatValue() как раз и преобразовывает значение в символьную строку с учетом всех настроенных форматов в отчете. Вот этих самых NoOfDecimals и MinNoOfDecimals. Правда, могут возникнуть проблемы с форматированием уже в Excel. Но в данном случае это решаемо указанием формата ячейки в Excel после вывода отчета. Аналогичным образом следует модифицировать методы writeSum(), writeInt(), writeDate() в том же классе. Последний раз редактировалось Владимир Максимов; 16.06.2011 в 18:35. |
|
|
За это сообщение автора поблагодарили: Яга (1). |
17.06.2011, 14:02 | #6 |
Участник
|
Огромное спасибо! Все получилось, хотя в Excel и приходится менять формат, но по крайней мере число приходит неповрежденным, все три знака. И пользователь сразу может складывать числа, окрашивая ячейки (в отличие от предложенного способа через num2str).
У нас есть еще одна проблема с этими же классами, может быть тоже кто-то уже столкнулся с такими же проблемами и поделится опытом. После перехода в Ax2009 некоторые отчеты при такой же "печати" в Excel стали выводиться не полностью, а только 1-2 последних секции. Так, в некоторых после "печати" с экрана в Excel отсутствует заголовок, а в некоторых отсутствует сама таблица (видна только строка итогов). |
|
17.06.2011, 14:57 | #7 |
Участник
|
Цитата:
Сообщение от Яга
У нас есть еще одна проблема с этими же классами, может быть тоже кто-то уже столкнулся с такими же проблемами и поделится опытом. После перехода в Ax2009 некоторые отчеты при такой же "печати" в Excel стали выводиться не полностью, а только 1-2 последних секции. Так, в некоторых после "печати" с экрана в Excel отсутствует заголовок, а в некоторых отсутствует сама таблица (видна только строка итогов).
Попробуй скачать по приведенной выше ссылке мое решение с использованием копирования ADO RecordSet. Я там попутно сильно "вылизал" анализ того какую секцию надо печатать, а какую - нет. Правда, это тоже без гарантий. При определенном способе использования ProgrammableSection может "пойти лесом" любая логика. |
|
Теги |
excel, экспорт, экспорт в excel |
|
|