Импорт остатков номенклатуры из xls файла

Написал вот, вдруг кому будет полезно :)

function ImportStocks(xlsfile) {
  var ExlApp = new ActiveXObject("Excel.Application");
  var WorkBook = ExlApp.Workbooks.Open(xlsfile);
  var Sheet = WorkBook.ActiveSheet;
  var ds_Offering = Services.GetNewItemByUSI('ds_Offering');
  var i = 0;
  var code='';
  var stock='';
  ds_Offering.Open();
  for(var i=1;iSheet.UsedRange.Rows.Count;i++){
    code = Sheet.Cells(i, 2).Value;
    stock = Sheet.Cells(i, 3).Value;
    if (ds_Offering.Locate('OfferingName' , code)){
      ds_Offering.Edit();
      ds_Offering('Available') = stock;
      ds_Offering.Post();
    }
  }          
  ds_Offering.Close();
  WorkBook.Close();
  ExlApp.Quit();
}

Нравится

Поделиться

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

Код нужно поправить для читабельности :smile:
А способ хороший - сам часто им пользуюсь для быстрого импорта.

Ох.. недоглядел :)
Обязательно подправлю, спасибо за замечание.

Кстати, в иногда в таких случаях (при импорте больших таблиц) следует события датасета отключать. Dataset.DisableEvents();

Вот, теперь прям красота:smile:

ООО "Лайнсервис"
www.ls-crm.ru

Я еще только учусь - фактически второй день работаю с террасофтом.
Очень огорчает, конечно, отсутствие вменяемой документации.
И очень радует наличие хорошего community.
Спасибо :)

Ну такой метод, стремный. Я не совсем помню сколько записей будет в датасете после ds_Offering.Open();

Тут два варианта
1) Все. Тогда тянуть на клиент всю таблицу продуктов... Ну не самое оптимальное решение.
2) 40. Тогда ds_Offering.Locate просто не найдет кучу записей.

Я бы не стал так делать. Есть смысл если там хитрая логика, но тогда не нужно делать

"Глова Сергей" написал: Dataset.DisableEvents();

"Underscore a.k.a. _" написал:сколько записей будет в датасете после ds_Offering.Open();

в контексте - все записи будут. Если конечно не фильтровали после создания его

ООО "Лайнсервис"
www.ls-crm.ru

Просто раньше нужно было FetchRecordsCount = -1 проставлять длятого что-бы все отобрать. Потом это вроде убирали. Блин, простой вопрос в тупик поставил :)
Upd: Проверил - он таки сразу после создания -1 равен.

А как можно использовать эту функцию с вызовом окна выбора самого файла xls для импорта?

---
Конфигурация:
TSCRM 3.3.1.36
Firebird 2.0 (v.2.0.3.12981)

Окно выбора файла должно возвратить имя файла - его сюда и передаем как параметр xlsfile

ООО "Лайнсервис"
www.ls-crm.ru

"Александр Кудряшов" написал:Окно выбора файла должно возвратить имя файла - его сюда и передаем как параметр xlsfile

)) то понятно...

If OpenDialog.Execute then ImportStocks(OpenDialog.Filename);

А как это реализовать в TS :smile:

---
Конфигурация:
TSCRM 3.3.1.36
Firebird 2.0 (v.2.0.3.12981)

 var FileName = System.CreateObject('TSObjectLibrary.Value');
 if (!(System.OpenDialog(FileName, '*.xls|*.xlsx', EmptyStr, EmptyStr, EmptyStr))) {
  return;
 }
ImportStocks(FileName.Value);

--
www.it-sfera.com.ua

навскидку например так

var FileName = System.CreateObject('TSObjectLibrary.Value');
if (!(System.OpenDialog(FileName, '*.xls', EmptyStr, "Выбор файла Microsoft Excel", EmptyStr))) {
		return;
	}

имя файла вернется в FileName.Value

[опередили уже:smile:]

ООО "Лайнсервис"
www.ls-crm.ru

Жизнь такая штука... :wink:

--
www.it-sfera.com.ua

Спасибо

"Александр Кудряшов" написал:

"Виталий Ковалишин aka samael" написал:

всем и каждому...
Так глядишь и перейду с дельфы)))

---
Конфигурация:
TSCRM 3.3.1.36
Firebird 2.0 (v.2.0.3.12981)

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