04.05.2016, 12:10 | #61 |
Участник
|
Моя старенькая 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); } X++: e.excel(new ComExcelDocument_RU()); e.excel().newFile("Имя файла.xlt",false); |
|
|
За это сообщение автора поблагодарили: Ruff (5), Gustav (10), Player1 (4). |
08.05.2016, 11:00 | #62 |
Участник
|
Цитата:
Сообщение от 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); X++: border = borders.Item(7); //xlEdgeLeft.... Лучше выкладывать готовые решения в проекте. |
|
10.05.2016, 17:10 | #63 |
Участник
|
Цитата:
Сообщение от Player1
Можно немного пообсуждать?
Для DAX 4 и 3 будет ошибка "Нумерация не существует." из-за "Types::UtcDateTime" X++: e.DD_FontBoldAndBackColor1("A1", "E3", true, -1, -1, -1, -1); X++: border = borders.Item(7); //xlEdgeLeft.... Лучше выкладывать готовые решения в проекте. Извините за возможные неточности , я это сделал за 1 час на коленке. Так как пользователь ждал отчета. Эта ветка идет в формате эволюции решений, поэтому и мое решение нельзя рассматривать как готовое. Хотя как показала практика, нет ничего более постоянного, чем временно сделанное на коленке. Завтра постараюсь выложить проект отдельно для Ax2009 и AX3 с учетом ваших замечаний. Отдельные проекты - чтобы не возникало проблем с кодировкой при импорте файла в AX3. |
|
11.05.2016, 14:25 | #64 |
Участник
|
В соответствии с пожеланиями выкладываю два проекта для AX2009 и AX3.
Вставил макросы вместо констант и сделал параметры по умолчанию. В моем предыдущем примере в джобе ошибка (хотя она и не повлияла на резульат ) вместо строки кода X++: e.DD_FontBoldAndBackColor1("A1", "E3", true, -1, -1, -1, -1); X++: e.DD_FontBoldAndBackColor1("A1", "E3", 1, true, -1, -1, -1); |
|
Теги |
ado, comvariant, excel, faq, odbc, sql, интеграция, прямой доступ, формат дат, экспорт, экспорт в excel |
|
|