Цитата:
Сообщение от
Gustav
а 8 пробовали?
Вот полностью код, думаю, что Class Declaration не интересует. Строка под названием "Серийные номера". Если описать ее как str - некоторые строки остаются пустыми, если как мемо, вылетает ошибка, указанная выше (Кстати AX 3.0, SP3, SQL 2005).
X++:
void Exec(str Path,SnQueryTableTmp SnQ)
{
;
xlApp = new COM('Excel.Application');
xlApp.Visible(true);
wbks = xlApp.Workbooks();
wbk = wbks.Add();
wkss = wbk.Worksheets();
wks = wkss.Add();
wks = wkss.Item(1);
//wks2 = wkss.Item(2);
//wks3 = wkss.Item(3);
wks.Name('Итог');
//wks2.Name('Суммы по дилерам');
//wks3.Name('Склад');
rng = wks.Range('A1');
//rng2= wks2.Range('A1');
//rng3= wks3.Range('A1');
//==================================Первая вкладка=======================
rstAxa = new COM('ADODB.Recordset');
flds = rstAxa.Fields();
flds.Append('Дата закрытия' ,this.adoTypeToExcel('date'));
flds.Append('Отгрузочная накладная' ,this.adoTypeToExcel('str'));
flds.Append('Заказ' ,this.adoTypeToExcel('str'));
flds.Append('Безналичная накладная' ,this.adoTypeToExcel('str'));
flds.Append('Менеджер' ,this.adoTypeToExcel('str'));
flds.Append('Код клиента' ,this.adoTypeToExcel('str'));
flds.Append('Дата отгрузочной накладной' ,this.adoTypeToExcel('date'));
flds.Append('Город' ,this.adoTypeToExcel('str'));
flds.Append('Краткое наименование' ,this.adoTypeToExcel('str'));
flds.Append('Номенклатура' ,this.adoTypeToExcel('str'));
flds.Append('Код дет. в спецификации' ,this.adoTypeToExcel('str'));
flds.Append('Название' ,this.adoTypeToExcel('str'));
flds.Append('Склад' ,this.adoTypeToExcel('str'));
flds.Append('Цена ед.' ,this.adoTypeToExcel('num'));
flds.Append('Себестоимость' ,this.adoTypeToExcel('num'));
flds.Append('Количество' ,this.adoTypeToExcel('num'));
flds.Append('Сумма по позиции' ,this.adoTypeToExcel('num'));
flds.Append('Прибыль' ,this.adoTypeToExcel('num'));
flds.Append('Каталожный номер' ,this.adoTypeToExcel('str'));
flds.Append('Серийные номера' ,this.adoTypeToExcel('memo'));
flds.Append('REF' ,this.adoTypeToExcel('str'));
flds.Append('Квота' ,this.adoTypeToExcel('str'));
flds.Append('Конечный клиент' ,this.adoTypeToExcel('str'));
flds.Append('Номер партии' ,this.adoTypeToExcel('str'));
rstAxa.Open();
// SnQ.setTmpData(SnQ);
while select SnQ
{
rstAxa.AddNew();
// fld = flds.Item('Каталожный номер'); fld.Value(SelloutMsTable.A_PartNumber);
fld = flds.Item('Дата закрытия'); fld.Value(SnQ.DeliveryDate);
fld = flds.Item('Отгрузочная накладная'); fld.Value(SnQ.PickingListId);
fld = flds.Item('Заказ'); fld.Value(SnQ.SalesId);
fld = flds.Item('Безналичная накладная'); fld.Value(SnQ.InvoiceIdElect);
fld = flds.Item('Менеджер'); fld.Value(SnQ.SalesResponsible);
fld = flds.Item('Код клиента'); fld.Value(SnQ.CustAccount);
fld = flds.Item('Дата отгрузочной накладной'); fld.Value(SnQ.PickingListDate);
fld = flds.Item('Город'); fld.Value(SnQ.City);
fld = flds.Item('Краткое наименование'); fld.Value(SnQ.NameAlial);
fld = flds.Item('Номенклатура'); fld.value(SnQ.ItemId);
fld = flds.Item('Код дет. в спецификации'); fld.Value(SnQ.ChosenPartNumber);
fld = flds.Item('Название'); fld.Value(SnQ.ItemName);
fld = flds.Item('Склад'); fld.Value(SnQ.InventLocationId);
fld = flds.Item('Цена ед.'); fld.Value(SnQ.A_SalesPrice);
fld = flds.Item('Себестоимость'); fld.Value(SnQ.SalesCostPrice);
fld = flds.Item('Количество'); fld.Value(SnQ.Qty);
fld = flds.Item('Сумма по позиции'); fld.Value(SnQ.Amount);
fld = flds.Item('Прибыль'); fld.Value(SnQ.SalesProfit);
fld = flds.Item('Каталожный номер'); fld.Value(SnQ.A_PartNumber);
fld = flds.Item('Серийные номера'); fld.Value(SnQ.findSerialNumbersFromWMS(SnQ));
fld = flds.Item('REF'); fld.Value(SnQ.REF);
fld = flds.Item('Квота'); fld.value(SnQ.InventQuotationId);
fld = flds.Item('Конечный клиент'); fld.Value(SnQ.EndPartnerCode);
fld = flds.Item('Номер партии'); fld.Value(SnQ.InventBatchId);
rstAxa.Update();
}
iMax = flds.Count() - 1;
for (i = 0; i <= iMax; i++)
{
fld = flds.Item(i);
cell = rng.Offset(0,i);
cell.Value2(fld.Name());
}
cell = rng.Offset(1,0);
cell.CopyFromRecordset(rstAxa);
rstAxa.close();
actWin = xlApp.ActiveWindow();
// actWin.FreezePanes(true);
}