Импорт документов "Отгрузка" из xls файлов

Еще одна функция загрузки из .xls
Обработку для выгрузки из 1С выложу немного позднее.

function ImportOffMov() {
  var ExlApp = new ActiveXObject("Excel.Application");
  var WorkBook = ExlApp.Workbooks.Open(xlfile);
  var Sheet = WorkBook.ActiveSheet;    
  var ds_Store = Services.GetNewItemByUSI('ds_Store');
  var ds_Account = Services.GetNewItemByUSI('ds_Account');
  var ds_Offering = Services.GetNewItemByUSI('ds_Offering');
  var ds_OfferingMovement = Services.GetNewItemByUSI('ds_OfferingMovement');
  var ds_OfferingInMovement = Services.GetNewItemByUSI('ds_OfferingInMovement');
       
  ds_Store.Open();
  ds_Offering.Open();
  ds_Account.Open();
  ds_OfferingMovement.Open();
  ds_OfferingInMovement.Open();

  for(var i=1;iSheet.UsedRange.Rows.Count;i++){
    if(Sheet.Cells(i, 1).Value=='Ш'){
      ds_Account.Locate('INN' , Sheet.Cells(i, 4));
      ds_OfferingMovement.Append();
      ds_OfferingMovement('Number')=Sheet.Cells(i, 2);
      ds_OfferingMovement('AccountID')=ds_Account('ID');
      ds_OfferingMovement('TypeID')='{A48368CD-E28D-458D-8AE8-E2A314186C5C}';
      ds_OfferingMovement('Amount')=Sheet.Cells(i, 5).Value;
      ds_OfferingMovement('Date')=StrToDate(Sheet.Cells(i, 3).Value).getVarDate();
      ds_OfferingMovement.Post();
    }
    if(Sheet.Cells(i, 1).Value=='С'){
      ds_Offering.Locate('OfferingName', Sheet.Cells(i, 2));
      ds_OfferingInMovement.Append();
      ds_OfferingInMovement('OfferingMovementID')=ds_OfferingMovement('ID');
      ds_OfferingInMovement('OfferingID')=ds_Offering('ID');
      ds_OfferingInMovement('UnitName')='Шт.';
      ds_OfferingInMovement('StoreID')=ds_Store('ID');
      ds_OfferingInMovement('Quantity')=Sheet.Cells(i, 4).Value;
      ds_OfferingInMovement('Cost')=Sheet.Cells(i, 3).Value;
      ds_OfferingInMovement('Amount')=Sheet.Cells(i, 5).Value;
      ds_OfferingInMovement('SignedAmount')=Sheet.Cells(i, 5).Value;
      ds_OfferingInMovement('SignedQuantity')=Sheet.Cells(i, 4).Value;
      ds_OfferingInMovement.Post();
    }
  }
  ds_Store.Close();
  ds_Account.Close();
  ds_Offering.Close();
  ds_OfferingMovement.Close();
  ds_OfferingInMovement.Close();
  WorkBook.Close();
  ExlApp.Quit();
}

Нравится

Поделиться

5 комментариев

Антон, снова теги мешают :smile:

да, тут беда какая то со вставкой - надо сначала отправить, потом уже менять чтобы вручную теги не удалать

ds_OfferingMovement('TypeID')='{A48368CD-E28D-458D-8AE8-E2A314186C5C}';

IDшники желательно определять в скрипте scr_Consts, читать удобнее и в случае изменения нужно будет поправить только в одном месте.

И опять же я бы на Update переделал. Хотя по ситуации, конечно. Скажу Вам как новичку: датасеты на массовых апдейтах - зло :)

посчитайте строки перед циклом

...
  var RowsCount = Sheet.UsedRange.Rows.Count;
  for(var i=1;i<RowsCount;i++)
...   

при больших Excel-файлах заметите невероятное ускорение в скорости )
Видимо коварный ексель при обращению к свойству Count пересчитывает UsedRange...
Была подобная задача. На файлах в 5000 строк разнится по скорости отработки цикла - 10-ки раз.

Показать все комментарии