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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.04.2008, 12:04   #1  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Регистрация: 12.12.2006
Адрес: Москва
Ошибка COM-объекта
Добрый день,

У меня при формировании отчетов - выгрузке на excel через стандартный класс работы с excel в системе выдается ошибка.

Можете предсказать в чем может быть ошибка ? Странно, что у нас работал этот отчет, а перестал работать без никаких модификаций.
Старый 17.04.2008, 12:08   #2  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,732 / 406 (17) +++++++
Регистрация: 23.03.2006
не помешал бы скриншот ошибки
Старый 17.04.2008, 12:20   #3  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Excel 2007 поставили? )
Старый 17.04.2008, 12:34   #4  
PMS is offline
PMS
Участник
 
54 / 29 (1) +++
Регистрация: 25.02.2005
Адрес: Санкт-Петербург
Может быть просто стало больше данных, которые выводятся в отчет?
Не забывайте об ограничении в Excel-е (до версии 2007) 65535 строк.
Или может быть в отчете используется формула типа "=A1+B1+C1+...+n1" - тут тоже может вылезти ошибка, если количество слагаемых достигло большой величины (точно не вспомню какой именно, кажется в районе 1024 символов). Такую ошибку я встречал - на малых объемах работает нормально, а потом начинает "валиться".
Старый 17.04.2008, 13:20   #5  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Регистрация: 12.12.2006
Адрес: Москва
Извините, закреплю сейчас.
Миниатюры
Нажмите на изображение для увеличения
Название: 123.jpg
Просмотров: 483
Размер:	19.5 Кб
ID:	3373  
Старый 17.04.2008, 13:20   #6  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Регистрация: 12.12.2006
Адрес: Москва
У нас ошибка выдается и в Excel 2007, и в Excel 2003...
Старый 17.04.2008, 13:23   #7  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
В range в 2007 добавили параметров в функцию. Я так понимаю, у Вас два выхода:
1) удалить 2007;
2) дописать обертку Аксапты.

Мы выбрали 1). Правда, у нас и вызов не из Аксапты был, но это дела не меняет.

Последний раз редактировалось Eldar9x; 17.04.2008 в 13:26.
Старый 17.04.2008, 13:25   #8  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
Если оба екселя стоят на компе то по-любому вызывается 2007, это вот тоже не смогли побороть, поэтому, сомневаюсь, что отчет выводится в 2003. Попробуйте удалить 2007 офис, и распечатайте заново, скорее всего все пройдет без проблем.
Старый 17.04.2008, 19:54   #9  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Регистрация: 12.12.2006
Адрес: Москва
Нет, мы пробовали на другом компьютере на разных версиях Excel, так что проблема точно не в версии, тем более, у нас раньше и работал.

Самое интересно, я проставил точки остановки в коде для отслеживания, проставил в самом конце процедуры работы с Excel, на самой последней строке, все идет нормально, как только идет последняя строка, (это excel.invisible(false)), ошибка выдается. Пробовал вообще удалить эту строку, опять же такая ситуация, т.е все нормально идет до конца, потом выдается ошибка...
Старый 18.04.2008, 10:31   #10  
PMS is offline
PMS
Участник
 
54 / 29 (1) +++
Регистрация: 25.02.2005
Адрес: Санкт-Петербург
Судя по всему, не удается найти нужный диапазон в Excel-e. Но эта ошибка должна вываливаться сразу при вставке значения в этот диапазон.
Надо пройти код по шагам и посмотреть в какие ячейки идет вставка. Наверняка что-то обнаружится.

PS: а почему у вас написан метод invisible()? Обычно используется метод visible()
Старый 18.04.2008, 11:47   #11  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Регистрация: 12.12.2006
Адрес: Москва
Ну да, visible() - я ошибся.

А то что пройти код по шагам, я и сделал, результат описал выше. Код всегда нормально идет до конца, только после последнего шага ничего не происходит, кроме выдачи ошибки.
Старый 18.04.2008, 11:57   #12  
Weez is offline
Weez
Участник
Axapta Retail User
 
250 / 84 (3) ++++
Регистрация: 18.01.2006
Адрес: Moscow city
Кстати странно что excel.visible(false) у вас в конце обработки стоит, по идее скрывают excel сразу после создания док-та (файла), а в конце обработки или делают видимым или просто сэйвят
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет.
Старый 18.04.2008, 12:22   #13  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,692 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Какое значение BookMark передается в Range? Этот диапазон физически существует в файле Excel?

Кстати, это случайно не терминальный режим?
Старый 18.04.2008, 12:52   #14  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Регистрация: 12.12.2006
Адрес: Москва
Вот код этой выгрузки

X++:
static void CustCMRForm_ES(CustInvoiceJour CIJ, CurrencyCode _nCCode='EUR'){
    str s;
    QueryRun                queryRun;

    Query                   query;
    QueryBuildDataSource    qbdsITrans;
    QueryBuildDataSource    qbdsInventDim;

    QueryBuildRange         qbr;

    CustInvoiceJour  IJour;

    SalesTable  SalesTable;
    CustTable Vendor,Customer;
    InventSerial ISerial;

    CustInvoiceTrans ITrans,ITrans1;
    InventTrans InventTrans;
    InventDim InventDim,InventDim1;
    RContractTable RCT;
    InventTable ITable;

    CurrencyCode CCode,nCCode=_nCCode;

    Address ADR;
    Amount sSum=0, sVAT=0,wN=0,wB=0,wNl=0,wBl=0;
    Qty sQty=0;
    counter i,p,start;
    counter RollCount=0,PalletCount=0, lRollCount=0,lPalletCount=0;
    RNumDateInWordConverter converter = RNumDateInWordConverter::construct('en-us');

    boolean ExOut=false;

    #ExcelExport

    ComExcelDocument_RU excl=new ComExcelDocument_RU();


    Str Amount2Text(real Amount, CurrencyCode Curr){
     return converter.numeralsToCurrency(Amount,Curr);
     }

    Str Qty2Text(real Amount){
     return strfmt('%1 kg %2 g',converter.numeralsToTxt( abs(Amount) - frac(abs(Amount))),int2str(decround(frac(abs(Amount)) * 100, 2)));
     }

    Str RC(int r,int c){
     return ComExcelDocument_RU::numtonamecell(c,r);//strfmt('R%1C%1',r,c);
     }
    Str RC_(int r,int c){
     return strfmt('R[%1]C[%1]',r,c);
     }

    ;

    converter.initCurrencyAndConnection();
    excl.newFile(#ExcelTemplateDir+#ExCMR_ES);            // -= ????????? ?????? =-
    excl.visible(false);
    IJour=CustInvoiceJour::findFromCustInvoiceTrans(CIJ.SalesId,CIJ.InvoiceId,CIJ.InvoiceDate,CIJ.numberSequenceGroup);// ????
    CCode=IJour.CurrencyCode?IJour.CurrencyCode:CompanyInfo::find().CurrencyCode;
    SalesTable=SalesTable::find(CIJ.SalesId);                          // ?????
    Vendor=CustTable::find(SalesTable.JuridicalPerson_NV);         // ????????? - ???? ??????????? ????
    Customer=CustTable::find(SalesTable.CustAccount);              // ??????

    p=1;
    RCT=RContractTable::find(RContractPartnerType::Cust,IJour.RContractCode,IJour.RContractAccount);
    excl.insertValue('Contract',RCT.RContractNumber,p);   // ???????
    excl.insertValue('ContractDate',date2StrUsr(RCT.ContractDate),p);  // ???? ????????
    excl.insertValue('ContractValidityDate',date2StrUsr(RCT.ContractEndDate),p);  // ???? ????????? ????????
    excl.insertValue('NumberSpecification',SalesTable.ExtNo_Spec_REP,p);      // ????????????
    excl.insertValue('DateSpecification',date2StrUsr(SalesTable.createdDate),p);      // ???? ??????????

    excl.insertValue('CustomerAdressIndex',Customer.invoiceAddress().ZipCode,p);      // ?????? ??????????
    excl.insertValue('CustomerCountryAdress',Customer.invoiceAddress().Country,p);      // ?????? ??????????
    excl.insertValue('CustomerCityAdress',Customer.invoiceAddress().City,p);      // ????? ??????????
    excl.insertValue('CustomerStreetAdress',Customer.invoiceAddress().Street,p);      // ????? ??????????
    excl.insertValue('CustomerHouseAdress',strfmt('%1 %2 %3',Customer.invoiceAddress().Estate_RU,
                                                             Customer.invoiceAddress().Building_RU,
                                                             Customer.invoiceAddress().Flat_RU),p);      // ??? ??????????
    excl.insertValue('Customer',Customer.Name);          // ??????????
    excl.insertValue('DeliveryPlace',Global_REP::CustExtAdr(Customer,Customer.invoiceAddress()),p);          // ????? ??????????


    excl.insertValue('DateShipping',date2strusr(IJour.InvoiceDate)/*systemdateget()*/,p);   // ???? ????????
    excl.insertValue('NumberShipping',IJour.InvoiceId,p);   // ????? ????????

    excl.insertValue('Amount',Currency::curAmount2CurAmount(IJour.InvoiceAmount,CCode,nCCode),p);     // ?????

    excl.insertValue('AmountStr',Amount2Text(Currency::curAmount2CurAmount(IJour.InvoiceAmount,CCode,nCCode),nCCode),p);            // ????? ????????
    excl.insertValue('NumberAutomobile',gReport_REP::VehicleNo(IJour));// ? ??????????


    i=0;

    query  = new Query();

    qbdsiTrans   = query.addDataSource(tableNum(CustInvoiceTrans));
    qbdsInventDim   = qbdsiTrans.addDataSource(tableNum(InventDim));
    qbdsInventDim.relations(true);

    qbdsITrans.addSortField(fieldNum(CustInvoiceTrans,SalesId));
    qbdsITrans.addSortField(fieldNum(CustInvoiceTrans,InvoiceId));
    qbdsITrans.addSortField(fieldNum(CustInvoiceTrans,InvoiceDate));
    qbdsITrans.addSortField(fieldNum(CustInvoiceTrans,numberSequenceGroup));
    qbdsITrans.addSortField(fieldNum(CustInvoiceTrans,ItemId));
    qbdsITrans.addSortField(fieldNum(CustInvoiceTrans,SalesUnit));
    qbdsITrans.addSortField(fieldNum(CustInvoiceTrans,SalesPrice));
    qbdsInventDim.addSortField(fieldnum(InventDim,InventSizeId));
    qbdsITrans.orderMode(ordermode::GroupBy);
    qbdsInventDim.orderMode(ordermode::GroupBy);

    qbdsITrans.addSelectionField(fieldNum(CustInvoiceTrans,SalesId));
    qbdsITrans.addSelectionField(fieldNum(CustInvoiceTrans,InvoiceId));
    qbdsITrans.addSelectionField(fieldNum(CustInvoiceTrans,InvoiceDate));
    qbdsITrans.addSelectionField(fieldNum(CustInvoiceTrans,numberSequenceGroup));
    qbdsITrans.addSelectionField(fieldNum(CustInvoiceTrans,ItemId));
    qbdsITrans.addSelectionField(fieldNum(CustInvoiceTrans,SalesUnit));
    qbdsITrans.addSelectionField(fieldNum(CustInvoiceTrans,SalesPrice));
    qbdsInventDim.addSelectionField(fieldnum(InventDim,InventSizeId));

    qbdsITrans.addSelectionField(fieldNum(CustInvoiceTrans,Qty),SelectionField::Sum);
    qbdsITrans.addSelectionField(fieldNum(CustInvoiceTrans,lineAmount),SelectionField::Sum);
    qbdsITrans.addSelectionField(fieldNum(CustInvoiceTrans,lineAmountTax),SelectionField::Sum);

    qbdsITrans.addRange(fieldNum(CustInvoiceTrans,SalesId)).value(CIJ.SalesId);
    qbdsITrans.addRange(fieldNum(CustInvoiceTrans,InvoiceId)).value(CIJ.InvoiceId);
    qbdsITrans.addRange(fieldNum(CustInvoiceTrans,InvoiceDate)).value(queryvalue(CIJ.InvoiceDate));
    qbdsITrans.addRange(fieldNum(CustInvoiceTrans,numberSequenceGroup)).value(CIJ.numberSequenceGroup);

    queryRun =  new QueryRun(query);


    while
     (queryrun.next())
     {
      ITrans=queryrun.get(tablenum(CustInvoiceTrans));
      InventDim=queryrun.get(tablenum(inventdim));
//          select * from ITrans where ITrans.SalesId==CIJ.SalesId &&
//                                     ITrans.InvoiceId==CIJ.InvoiceId &&
//                                     ITrans.InvoiceDate==CIJ.InvoiceDate &&
//                                     ITrans.numberSequenceGroup==CIJ.numberSequenceGroup {
    wNl=0;wBl=0;lRollCount=0;lPalletCount=0;ITable=InventTable::find(ITrans.ItemId);
   while select * from ITrans1 where ITrans1.SalesId==ITrans.SalesId &&
                                     ITrans1.InvoiceId==ITrans.InvoiceId &&
                                     ITrans1.InvoiceDate==ITrans.InvoiceDate &&
                                     ITrans1.numberSequenceGroup==ITrans.numberSequenceGroup &&
                                     ITrans1.ItemId==ITrans.ItemId &&
                                     ITrans1.SalesUnit==ITrans.SalesUnit &&
                                     ITrans1.SalesPrice==ITrans.SalesPrice
                                     {
    while select sum(Qty) from inventTrans join inventdim1
      group by inventserialid
      where inventtrans.inventDimId==inventdim1.inventDimId &&
            inventtrans.StatusIssue==StatusIssue::Sold &&
            inventtrans.InventTransId==iTrans1.InventTransId &&
            inventtrans.ItemId==iTrans.ItemId
            && inventdim1.InventSizeId==inventdim.InventSizeId
            {
      RollCount++;
      lRollCount++;
      }




     while select sum(Qty) from inventTrans join inventdim1
      group by wmspalletid
      where inventtrans.inventDimId==inventdim1.inventDimId &&
            inventtrans.StatusIssue==StatusIssue::Sold &&
            inventtrans.InventTransId==iTrans1.InventTransId &&
            inventtrans.ItemId==iTrans.ItemId
            && inventdim1.InventSizeId==inventdim.InventSizeId
            {
//      wB=wB+WMSPallet::find(InventDim.wMSPalletId).GrossWeight_NV;
//      wBl=wBl+WMSPallet::find(InventDim.wMSPalletId).GrossWeight_NV;
      PalletCount++;
      lPalletCount++;
      } // while sum(qty)
     } // while ITrans1
     wN=wN+ITrans.Qty;
     wNl=wNl+ITrans.Qty;

      wB=wB+ITrans.Qty*1.04;//WMSPallet::find(InventDim1.wMSPalletId).GrossWeight_NV;
      wBl=wBl+ITrans.Qty*1.04;//WMSPallet::find(InventDim1.wMSPalletId).GrossWeight_NV;

//invoice
     start=32;p=2;
     excl.insertRow(start+i,p);
     excl.insertValue(RC(start+i,1),int2str(i+1),p);
     excl.insertValue(RC(start+i,3),strfmt('%1 ? %2 (BOPP coex)',ITable.ItemName,inventDim.InventSizeId),p);
     excl.insertValue(RC(start+i,17),ITrans.SalesUnit,p);
     excl.insertValue(RC(start+i,22),ITrans.Qty,p);
     excl.insertValue(RC(start+i,28),Currency::curAmount2CurAmount(ITrans.SalesPrice,CCode,nCCode),p);
     excl.insertValue(RC(start+i,33),Currency::curAmount2CurAmount(ITrans.LineAmount+ITrans.LineAmountTax,CCode,nCCode),p);
//detail packing
     start=24;p=3;
     excl.insertRow(start+i,p);
     excl.insertValue(RC(start+i,1),int2str(i+1),p);
     excl.insertValue(RC(start+i,3),ITable.ItemGroupId,p);
     excl.insertValue(RC(start+i,7),'',p); // ???? ? ?. ?. - ?????? ????? ???????? - ?? ???????????? ??????? (??????? ??????) ?? ?????????
     excl.insertValue(RC(start+i,13),ITable.ThicknessId_NV,p);
     excl.insertValue(RC(start+i,17),inventDim.InventSizeId,p);
     excl.insertValue(RC(start+i,21),lRollCount,p);
     excl.insertValue(RC(start+i,25),lPalletCount,p);
     excl.insertValue(RC(start+i,29),ITrans.Qty,p);
     excl.insertValue(RC(start+i,34),wBl,p);
//Form A
//     start=32;p=4;
//     excl.insertValue(RC(start+i,9),strfmt('%1 ? %2 (BOPP coex) - %3 %4',ITable.itemName,inventDim.InventSizeId,iTrans.Qty,iTrans.SalesUnit),p);
//     excl.insertValue(RC(start+i,24),'\"W3920\"',p);
//Attent
     start=19;p=6;
     excl.insertRow(start+i,p);
     excl.insertValue(RC(start+i,1),int2str(i+1),p);
     excl.insertValue(RC(start+i,3),strfmt('%1 ? %2 (BOPP coex)',ITable.itemName,inventDim.InventSizeId),p);
     excl.insertValue(RC(start+i,19),ITrans.SalesUnit,p);
     excl.insertValue(RC(start+i,21),ITrans.Qty,p);




     i++;
     }

    excl.insertValue('Currency',nCCode,p);
    excl.insertValue('RollCount',RollCount,p);
    excl.insertValue('TotalPallet',PalletCount,p);
    excl.insertValue('WeightNetto',wN,p);
    excl.insertValue('WeightNettoStr',Qty2Text(wN),p);
    excl.insertValue('WeightBrutto',wB,p);

    excl.insertValue('TotalPackages','???? ??????!!!',1);
//    excl.insertValue('sQty',sQty);
//    excl.insertValue('sVAT_',sVAT);
//    excl.insertValue('sSum_',sSum);

//    excl.insertValue('sSum',Amount2Text(sSum,IJour.CurrencyCode));            // ????? ????????
//    excl.insertValue('sVAT',Amount2Text(sVAT,IJour.CurrencyCode));            // ??? ????????
    excl.visible(true);

 }
Старый 21.04.2008, 11:46   #15  
PMS is offline
PMS
Участник
 
54 / 29 (1) +++
Регистрация: 25.02.2005
Адрес: Санкт-Петербург
А шаблон случайно не менялся?
Попробуйте в начале (после создания файла) временно поставить excel.visible(true), и посмотрите как идет вставка данных в ячейки (в те ли ячейки, что нужно, они попадают).
Старый 21.04.2008, 13:03   #16  
longson is offline
longson
Участник
 
231 / 49 (2) +++
Регистрация: 12.12.2006
Адрес: Москва
Вот этот вариант может быть, правда я и начинаю поискать таким образом, спасибо за подсказку, результат сообщу
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Мониторинг состояния COM объекта axaLearner DAX: Программирование 5 10.04.2008 16:39
Работа с Excel через COM и ошибка 0x800A03EC (Range.AutoFilter) gl00mie DAX: Программирование 15 30.03.2007 18:37
Передача агументов в функцию com объекта doo DAX: Программирование 34 30.01.2007 13:14
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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