Моя старенькая 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);