AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.03.2009, 14:40   #21  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
Цитата:
Сообщение от tolstjak Посмотреть сообщение
ОК.
так и сделаю.
Сделал.
Все заработало. Но почему-то стала не симпатичная форма "Генерация отчета". Раньше отображался красивый принтер, а теперь одна строка и то с нулем.
Где это можно поправить?
Заранее благодарю.
__________________
Александр
Старый 23.03.2009, 14:52   #22  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Но почему-то стала не симпатичная форма "Генерация отчета". Раньше отображался красивый принтер, а теперь одна строка и то с нулем.
А зачем он, в смысле принтер? Я его снес, по соображениям производительности. К тому же без него круче смотрится . Но если уж хочется, делается просто:
Открываете метод new() класса CXMLExcelReportEx. После строки prg.setCaption(#PRG_CAPTION);
пишете prg.setAnimation(#AviPrint);
Старый 23.03.2009, 15:23   #23  
tolstjak is offline
tolstjak
Участник
 
440 / 16 (1) ++
Регистрация: 05.01.2003
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
А зачем он, в смысле принтер? Я его снес, по соображениям производительности. К тому же без него круче смотрится . Но если уж хочется, делается просто:
Открываете метод new() класса CXMLExcelReportEx. После строки prg.setCaption(#PRG_CAPTION);
пишете prg.setAnimation(#AviPrint);
Понял. Спасибо.
__________________
Александр
Старый 25.03.2011, 12:27   #24  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
Ячейки с числами..
Вывожу строку, в некоторых ячейках есть числа.
Использую любой стиль, который выделяет строку цветом, или делает шрифт жирным (например CLR_BOLD_STR).

Строка меняет цвет, текст становится жирным, но в тех ячейках где числа - никаких изменений.
Делал свой стиль для числа - не помогает.

Можно ли числовые ячейки форматировать?
Старый 16.05.2011, 09:23   #25  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Сообщение от propeller Посмотреть сообщение
Вывожу строку, в некоторых ячейках есть числа.
Использую любой стиль, который выделяет строку цветом, или делает шрифт жирным (например CLR_BOLD_STR).

Строка меняет цвет, текст становится жирным, но в тех ячейках где числа - никаких изменений.
Делал свой стиль для числа - не помогает.

Можно ли числовые ячейки форматировать?
Конечно. Просто нужно было конкретно для числовой ячейки указать, нужный стиль:
X++:
    CExcel excel = new CExcel();
    ;

    excel.send(["Строка", 10.0], ["CLR_BOLD_STR", "", "CLR_NUM"]);
    excel.show();
Иначе, если в ячейке находится число, то берется DEF_NUM.
Ну другой вариант так делать, только тогда формат ячейки эксель будет 'общий',а не числовой:
X++:
    excel.send(["Строка", strfmt("%1", 10.0)], ["CLR_BOLD_STR"]);
Во вложении новые классы. Объединил оба класса в один. Вместо CXMLExcelReport и CXMLExcelReportEx. Избавился от класса интерфейса. RunBase классы тоже по идее не нужны, только путаница лишняя. Обратите внимание на макрос AX4 (надо определить, если выше 4ки)
Вложения
Тип файла: xpo CExcel.xpo (48.8 Кб, 542 просмотров)
Старый 16.05.2011, 11:58   #26  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
Обратите внимание на макрос AX4 (надо определить, если выше 4ки)
В теме #ifdef.ax4 предлагалось готовое решение для условной компиляции, учитывающей версию Аксапты.
Старый 16.05.2011, 12:18   #27  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
К слову, в коде метода xmlStart() зашита строка
X++:
"<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>\n"
однако, при работе в 4-ке и выше сформированная строка будет вовсе даже не в ANSI-кодировке.
Старый 16.05.2011, 14:32   #28  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Сообщение от gl00mie Посмотреть сообщение
В теме #ifdef.ax4 предлагалось готовое решение для условной компиляции, учитывающей версию Аксапты.
Видел, но там ведь только 3ка и 4ка...
Мне кажется, легче самому контролировать.

Цитата:
однако, при работе в 4-ке и выше сформированная строка будет вовсе даже не в ANSI-кодировке.
Не совсем понял... а в чем будет проблема?
Старый 31.05.2011, 18:50   #29  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
...Ну так просто: в XML будет прописана кодировка ANSI, хотя сам XML будет в UTF-16; в принципе, мелочь. Однако, применительно к 2009-й у вывода в Excel большого куска данных в XML обнаружился еще один "побочный эффект": в ядре реализовано ограничение на максимальный размер памяти, который может быть выделен одной сессией под переменные кода Х++. Если код попытается собрать слишком длинную строку, больше примерно 4-5 Мб, то вылетит ошибка времени выполнения "недостаточно памяти для выполнения скрипта". Можно настроить тот же AOS, чтобы у него не было такого ограничения, но это не спасет, если с AOS'а попытается передать такую длинную строку на клиента - вылетит точно такое же исключение. Соотв., в общем случае надо настраивать и AOS, и клиента, однако, засада в том, что клиентов может быть много, и настройку они могут читать из HKCU, так что надо по идее на каждом хостев каждом профиле прописывать в реестре настройку, снимающую ограничение на максимальный размер буфера (что именно прописывать, рассказывается в заметке Error executing code: Insufficient memory to run script в блоге EMEA DAX Support). Если клиенты запускается с определенным конфигом, да еще и лежащим где-нить на сетевой шаре, тогда проще - можно просто подправить этот конфиг и все. Но факт тот, что оперирование большими текстовыми буферами требует "тонкой настройки" сервера и клиента.
За это сообщение автора поблагодарили: Logger (7).
Старый 10.06.2011, 13:18   #30  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Цитата:
Сообщение от gl00mie Посмотреть сообщение
...Ну так просто: в XML будет прописана кодировка ANSI, хотя сам XML будет в UTF-16; в принципе, мелочь. Однако, применительно к 2009-й у вывода в Excel большого куска данных в XML обнаружился еще один "побочный эффект": в ядре реализовано ограничение на максимальный размер памяти, который может быть выделен одной сессией под переменные кода Х++. Если код попытается собрать слишком длинную строку, больше примерно 4-5 Мб, то вылетит ошибка времени выполнения "недостаточно памяти для выполнения скрипта". Можно настроить тот же AOS, чтобы у него не было такого ограничения, но это не спасет, если с AOS'а попытается передать такую длинную строку на клиента - вылетит точно такое же исключение. Соотв., в общем случае надо настраивать и AOS, и клиента, однако, засада в том, что клиентов может быть много, и настройку они могут читать из HKCU, так что надо по идее на каждом хостев каждом профиле прописывать в реестре настройку, снимающую ограничение на максимальный размер буфера (что именно прописывать, рассказывается в заметке Error executing code: Insufficient memory to run script в блоге EMEA DAX Support). Если клиенты запускается с определенным конфигом, да еще и лежащим где-нить на сетевой шаре, тогда проще - можно просто подправить этот конфиг и все. Но факт тот, что оперирование большими текстовыми буферами требует "тонкой настройки" сервера и клиента.
А, ну так это решено:

Классы для генерации отчетов в Excel

Цитата:
1) Добавлена возможность контролировать (без перегрузки метода) предельный размер буфера до выгрузки (swapQty). по умолчанию выставлено в 1000;
X++:
report.swapQty(1000);
2) Добавлена возможность контролировать размеры буфера во избежание его переполнения:
задается командой
X++:
report.autoSwap(true);
по умолчанию выключено
макимальный размер буфера (по умолчанию выставлен 1000000) задается командой
X++:
report.maxStr(1000000);
Это гарантирует работу при любом размере отчета, но несколько замедляет его вывод, поэтому при большом числе колонок лучше регулировать swapQty.
Кстати, проблема эта не только в 2009, а как минимум уже в 3ке уже есть.

Последний раз редактировалось Eldar9x; 10.06.2011 в 13:26.
Теги
excel, xml, отчет

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Исследование скорости экспорта данных из Axapta в Excel (коллективный эксперимент) Gustav DAX: База знаний и проекты 79 13.02.2014 13:18
[Excel] - Несколько версий Excel на машине клиента Андре DAX: Программирование 11 07.08.2007 13:45
Вызов Item() для коллекций Excel Владимир Максимов DAX: Программирование 15 17.08.2006 19:47
Проект "Движок отчётов с поддержкой Excel" Alks DAX: База знаний и проекты 6 07.01.2005 02:53
Экспорт отчетов в Excel tolstjak DAX: Прочие вопросы 10 18.02.2004 09:12

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:48.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.