Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.07.19;
Скачать: CL | DM;

Вниз

Помогите улучшить код на 1c. Быстродействие   Найти похожие ветки 

 
12 ©   (2009-05-18 09:13) [0]

Надо мне из excel загрузить в справочники инфу
1с путем не знаю, но написал следующее (че хаха, пол дня писал.. )
Вот этот код на этом файле работает 4 часа
т.е. 4 часа магазин работать не будет. В военное время - за это расстреляли бы :)

//*******************************************
Процедура ДобавитьНоменклатуру(ВхГруппа, ВхНаименование, ВхАртикул)
 перем Код;
СпНомен = СоздатьОбъект("Справочник.Номенклатура");
СпНомен.ИспользоватьРодителя(ВхГруппа);
СпНомен.Новый();
СпНомен.Наименование = ВхНаименование;
СпНомен.Артикул = ВхАртикул;
СпНомен.ПолнНаименование = ВхНаименование;
Код = СпНомен.Код;
СпНомен.Записать();
СпНомен.НайтиПоКоду(Код,0);
 СпЕдин = СоздатьОбъект("Справочник.Единицы");
 СпЕдин.ИспользоватьВладельца(СпНомен);
 СпЕдин.Новый();
  СпОКЕИ = СоздатьОбъект("Справочник.ОКЕИ");
  СпОКЕИ.найтипонаименованию("шт.");
  СпОКЕИ = СпОКЕИ.ТекущийЭлемент();
 СпЕдин.ОКЕИ= СпОКЕИ;
 СпЕдин.ШтрихКод = ВхАртикул;
 СпЕдин.Записать();
СпНомен.БазоваяЕдиница = спЕдин.ТекущийЭлемент();
СпНомен.Записать();
КонецПроцедуры

//================================================================================ =============

Процедура Сформировать()
 
СпНоменГр = СоздатьОбъект("Справочник.Номенклатура");
СпНоменГр.НоваяГруппа();
СпНоменГр.Наименование = "Май2009";
СпНоменГр.Записать();

 Excel = СоздатьОбъект("Excel.Application");
 Excel.Workbooks.Open(Сокрлп("D:\1c\1.xls"));
 Книга = Excel.ActiveWorkbook;
 Строк = Excel.Cells.CurrentRegion.Rows.Count;
 //Строк = 300;
 СчЦикл = 0;
 ГруппаНов = "";
 ГруппаСтар = "";
 Сообщить(ТекущееВремя());
 Для СчЦикл = 2 По Строк-1 Цикл
  ГруппаНов = Excel.Cells(СчЦикл, 2).Value;
  Если ГруппаНов<>ГруппаСтар Тогда
      ГруппаСтар = ГруппаНов;
 РабНоменГр = СоздатьОбъект("Справочник.Номенклатура");
 РабНоменГр.ИспользоватьРодителя(СпНоменГр);
 РабНоменГр.НоваяГруппа();
 РабНоменГр.Наименование = ГруппаНов;
 РабНоменГр.Записать();
  КонецЕсли;
ДобавитьНоменклатуру(РабНоменГр, Excel.Cells(СчЦикл, 8).Value, Excel.Cells(СчЦикл, 1).Value);
//Состояние(СчЦикл);
 КонецЦикла;
 Сообщить(ТекущееВремя());
 Excel.Visible = 1;
КонецПроцедуры


 
tesseract ©   (2009-05-18 10:45) [1]

Excel конечно протормаживает. Загружай из csv или подключайся по ODBC к книге.


 
12 ©   (2009-05-18 11:00) [2]

знать бы как это делается..
Может, в текстовый файл тогда записать и оттуда считывать?


 
tesseract ©   (2009-05-18 11:29) [3]


> в текстовый файл тогда записать и оттуда считывать?


Csv и есть текстовый файл :-) Разделённый точкой с запятыми. А по ODBC ты просто плоскую выборку получишь. 1c OLE держит на ура-ура! Восьмёрка и Com научилась нормально держать.


 
test ©   (2009-05-18 17:31) [4]

tesseract ©   (18.05.09 11:29) [3]
Если она держит OLE то чтобы не создать экземпляр Excel и напрямую через Васик и т.д. не грузить?


 
test ©   (2009-05-18 17:33) [5]

tesseract ©   (18.05.09 11:29) [3]
ЗЫ Com то зачем удаленный Excel юзать?


 
tesseract ©   (2009-05-18 17:46) [6]


> ЗЫ Com то зачем удаленный Excel юзать?


Во первых он не удалённый. Com шибко быстрее OLE, но 7.7 его не держит напрямую.


 
12 ©   (2009-05-19 14:10) [7]

Ничего не стал менять - некогда было и не охота, тем более время все-таки не военное :)
На работе сделалось все за час.

Сильно разочаровался в своем домашнем компе.. Вроде и брал недавно, и винт достаточно быстрый, и памяти 2 гига, и проц 2х ядерный по 2.5..
Из-за чего такая разница..


 
tesseract ©   (2009-05-19 14:43) [8]


> Сильно разочаровался в своем домашнем компе..


Следовало разочароваться в своих руках. Пошто машину загадил кривым кодом ? :-)


 
test ©   (2009-05-19 14:47) [9]

12 ©   (19.05.09 14:10) [7]
Тебе бы своим кодом супер компьютеры тестить, куда там Каспарову. Вот же талант пропадает!


 
12 ©   (2009-05-20 09:16) [10]

Есть такое понятие - надо сделать вчера. :)
Ну, это к делу не относится,
я спрашивал, почему такая разница во времени..
Мне же сказали про руки, Каспарова ..
Родственники Копира?


 
test ©   (2009-05-20 09:36) [11]

12 ©   (20.05.09 09:16) [10]
Разница по времени потому что машины по разному настроены, алгоритм не оптимален. Выбирай что тебе больше нравиться. А машину ты свою домашнюю конечно круто положил! Это ж надо машина уровня сервака 2000 года легла от формирования Excel файла.



Страницы: 1 вся ветка

Текущий архив: 2009.07.19;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.011 c
15-1242678602
Юрий
2009-05-19 00:30
2009.07.19
С днем рождения ! 19 мая 2009 вторник


2-1243330709
set1212
2009-05-26 13:38
2009.07.19
Компонент ADODataSet


15-1242376187
oldman
2009-05-15 12:29
2009.07.19
При загрузке ХР не может загрузить "текущий профиль пользователя"


2-1243162261
Dr.Andrew
2009-05-24 14:51
2009.07.19
Как перевести на делфи строку int s=length/sizeof(short)?


2-1243264032
Wadim005
2009-05-25 19:07
2009.07.19
Как на WinApi получить все дочерние окна приложения?