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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.05.2016, 12:10   #61  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Моя старенькая AX2009 начала барахлить при выводе данных в Excel. Я использовал для вывода данных буфер обмена. Через много лет у некоторых пользователей (не у всех) стало вываливаться сообщение "Метод pastespecial возвратил код ошибки Неизвестно, которое обозначает Неизвестно".

В связи с этим переделал движок отчетов на технологию, описанную в этой ветке.
Обернул все тонкости работы с Recordset в класс zExcelADO, чтобы программирование отчета происходило на высоком уровне.
Вместо нулевых значений в Excel остаются пустые ячейки.
Методы DD_DrawGridToTheEnd и DD_FontBoldAndBackColor1 я таскаю с собой уже 10 лет
Класс zExcelADO прилагается. Ниже Job с примером

X++:
static void Job129(Args _args)
{
    zExcelADO         e = new zExcelADO();
    CustInvoiceJour   CustInvoiceJour;
    int               i;
    ;
    e.addField(Types::String);
    e.addField(Types::Date);
    e.addField(Types::UtcDateTime);
    e.addField(Types::Real);
    e.addField(Types::String);
    while select CustInvoiceJour
    {
        i++;
        if (i > 1000)
            break;
        e.addRecord();
        e.addCell(CustInvoiceJour.InvoiceId);
        e.addCell(CustInvoiceJour.InvoiceDate);
        e.addCell(CustInvoiceJour.createdDateTime);
        e.addCell(CustInvoiceJour.InvoiceAmount);
        e.addCell(CustInvoiceJour.salesTable().custTable_CustAccount().Name);
    }
    e.toExcel("A4");
    
    e.excel().insertValue("A1", "Список накладных");
    e.excel().insertValue("A2", "Первые 1000 штук");
    e.excel().insertValue("A3", "Номер");
    e.excel().insertValue("B3", "Дата");
    e.excel().insertValue("C3", "Дата создания");
    e.excel().insertValue("D3", "Сумма");
    e.excel().insertValue("E3", "Название клиента");

    e.DD_DrawGridToTheEnd("A3", 1, true);
    e.DD_FontBoldAndBackColor1("A1", "E3", true, -1, -1, -1, -1);
    e.excel().visible(true);
}
Данные с типом UTCDateTime выводятся в Эксель без времени, чтобы выводилось время, надо задать соответствующий формат ячеек. Можно подсунуть свой шаблон вызвав конструкцию типа
X++:
    e.excel(new ComExcelDocument_RU());
    e.excel().newFile("Имя файла.xlt",false);
Вложения
Тип файла: xpo Class_zExcelADO.xpo (11.0 Кб, 559 просмотров)
За это сообщение автора поблагодарили: Ruff (5), Gustav (10), Player1 (4).
Старый 08.05.2016, 11:00   #62  
Player1 is offline
Player1
Участник
Самостоятельные клиенты AX
 
306 / 137 (5) +++++
Регистрация: 21.04.2008
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
В связи с этим переделал движок отчетов на технологию, описанную в этой ветке.
Обернул все тонкости работы с Recordset в класс zExcelADO, чтобы программирование отчета происходило на высоком уровне.
Вместо нулевых значений в Excel остаются пустые ячейки.
Методы DD_DrawGridToTheEnd и DD_FontBoldAndBackColor1 я таскаю с собой уже 10 лет
Класс zExcelADO прилагается. Ниже Job с примером
Можно немного пообсуждать?
Для DAX 4 и 3 будет ошибка "Нумерация не существует." из-за "Types::UtcDateTime"
X++:
e.DD_FontBoldAndBackColor1("A1", "E3", true, -1, -1, -1, -1);
каждый раз писать -1 -1 -1 -1 не хочется, почему-бы не сделать эти параметры не обязательными со значением по-умолчанию = -1
X++:
border = borders.Item(7);           //xlEdgeLeft....
красивее сделать define.xlEdgeLeft(7)
Лучше выкладывать готовые решения в проекте.
Старый 10.05.2016, 17:10   #63  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Цитата:
Сообщение от Player1 Посмотреть сообщение
Можно немного пообсуждать?
Для DAX 4 и 3 будет ошибка "Нумерация не существует." из-за "Types::UtcDateTime"
X++:
e.DD_FontBoldAndBackColor1("A1", "E3", true, -1, -1, -1, -1);
каждый раз писать -1 -1 -1 -1 не хочется, почему-бы не сделать эти параметры не обязательными со значением по-умолчанию = -1
X++:
border = borders.Item(7);           //xlEdgeLeft....
красивее сделать define.xlEdgeLeft(7)
Лучше выкладывать готовые решения в проекте.
Спасибо, что проявили интерес!
Извините за возможные неточности , я это сделал за 1 час на коленке. Так как пользователь ждал отчета.
Эта ветка идет в формате эволюции решений, поэтому и мое решение нельзя рассматривать как готовое. Хотя как показала практика, нет ничего более постоянного, чем временно сделанное на коленке.
Завтра постараюсь выложить проект отдельно для Ax2009 и AX3 с учетом ваших замечаний. Отдельные проекты - чтобы не возникало проблем с кодировкой при импорте файла в AX3.
Старый 11.05.2016, 14:25   #64  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
В соответствии с пожеланиями выкладываю два проекта для AX2009 и AX3.
Вставил макросы вместо констант и сделал параметры по умолчанию.
В моем предыдущем примере в джобе ошибка (хотя она и не повлияла на резульат )

вместо строки кода
X++:
    e.DD_FontBoldAndBackColor1("A1", "E3", true, -1, -1, -1, -1);
надо писать
X++:
    e.DD_FontBoldAndBackColor1("A1", "E3", 1, true, -1, -1, -1);
Вложения
Тип файла: xpo Class_zExcelADO_AX2009.xpo (11.1 Кб, 661 просмотров)
Тип файла: xpo zExcelADO_AX3.xpo (10.5 Кб, 546 просмотров)
Теги
ado, comvariant, excel, faq, odbc, sql, интеграция, прямой доступ, формат дат, экспорт, экспорт в excel

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вспомогательный класс для импорта из Excel через ADO gl00mie DAX: База знаний и проекты 80 10.04.2017 10:55
gl00mie: Read Excel table via ADO Blog bot DAX Blogs 2 09.04.2010 08:32
C# and AX Development: Using ADO for interfacing AX with an external database Blog bot DAX Blogs 0 05.08.2008 05:18
casperkamal: Using ADO to read from Excel in Microsoft Dynamics Ax Blog bot DAX Blogs 2 14.05.2007 11:59
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:51.