Написал вот, вдруг кому будет полезно :)
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();
}
Код нужно поправить для читабельности :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);
навскидку например так
var FileName = System.CreateObject('TSObjectLibrary.Value'); if (!(System.OpenDialog(FileName, '*.xls', EmptyStr, "Выбор файла Microsoft Excel", EmptyStr))) { return; }
имя файла вернется в FileName.Value
[опередили уже:smile:]
ООО "Лайнсервис"
www.ls-crm.ru
Спасибо
"Александр Кудряшов" написал:
"Виталий Ковалишин aka samael" написал:
всем и каждому...
Так глядишь и перейду с дельфы)))
---
Конфигурация:
TSCRM 3.3.1.36
Firebird 2.0 (v.2.0.3.12981)