8.х Выгружаю из 1С в Excelпо OLE. Очень медленно! Что делать?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем rSlayer, 26 янв 2011.

  1. TopicStarter Overlay
    rSlayer
    Offline

    rSlayer Опытный в 1С

    Регистрация:
    31 мар 2009
    Сообщения:
    251
    Симпатии:
    0
    Баллы:
    26
    Добрый вечер.
    Платформа 8.1 (8.1.14.72)
    Конфа - Розница 8. Магазин одежды и обуви, редакция 1.0
    Сделал отчет.
    Необходимо его в файл Эксель сохранить.
    По ОЛЕ создаю новую книгу и в цикле выгружаю значения.
    Ну примерно так:
    Код:
    СчетчикСтрок = 5;
    Для Каждого Строка Из ТабличноеПоле Цикл
    СчетчикКолонок = 0;
    Пока СчетчикКолонок < ТабличноеПоле.Колонки.Количество() Цикл 
    WorkSheet.Cells(СчетчикСтрок, СчетчикКолонок + 1).Value = Строка[СчетчикКолонок];
    WorkSheet.Cells(СчетчикСтрок, СчетчикКолонок + 1).Borders.Linestyle = 1;
    WorkSheet.Cells(СчетчикСтрок, СчетчикКолонок + 1).Font.Size = 8;
    СчетчикКолонок = СчетчикКолонок + 1;
    КонецЦикла;
    СчетчикСтрок = СчетчикСтрок + 1;
    КонецЦикла;
    
    
    
    Итоговая таблица на тестовом примере размером 35 колонки на 650 строк.
    Время выгрузки 12,5 минут.
    Что делать, помогите? Почему так долго?
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.572
    Симпатии:
    717
    Баллы:
    204
    а сохранять в ексель-файл средством 1С нельзя?
  3. TopicStarter Overlay
    rSlayer
    Offline

    rSlayer Опытный в 1С

    Регистрация:
    31 мар 2009
    Сообщения:
    251
    Симпатии:
    0
    Баллы:
    26
    Не желательно. Автоматизация в получении файла нужна.
    Самое интересное что в эксель то сохраняется средствами платформы очень быстро :(. Как она это делает?
  4. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    1) А что значит автоматизация? Почему нельзя соответствующим образом оформить макет в 1С?
    2) Я бы посмотрел в сторону того чтобы не форматировать ячейки в цикле. Нельзя выбрать регион и применить уже к нему форматирование?
  5. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Начните с замеров производительности. При этом разделите строки получения данных из 1С и строки вставки в ёксель.
    Т.е. было так:
    Код:
    0.36    WorkSheet.Cells(СчетчикСтрок, СчетчикКолонок + 1).Value = ПроцедураПолученияДанных();
    
    
    
    А должно получится что то вроде:
    Код:
    0.26    Значение = ПроцедураПолученияДанных();
    0.10    WorkSheet.Cells(СчетчикСтрок, СчетчикКолонок + 1).Value = Значение;
    
    
    
    Чтобы сориентироваться в наиболее затратных моментах. Исходя из полученных данных решайте, что делать. Возможно - оптимизировать получение данных из базы, возможно - оптимизировать заполнение документа.

    Без четкого понимания какая инструкция жрет время, сложно выяснить, что нужно предпринять.
  6. TopicStarter Overlay
    rSlayer
    Offline

    rSlayer Опытный в 1С

    Регистрация:
    31 мар 2009
    Сообщения:
    251
    Симпатии:
    0
    Баллы:
    26
    Ну как макет ... заказчику нужен файл Эксель, они потом его отправляют в другую контору для анализа. Что я тут могу поделать? Эксель значит Эксель.

    На счет настройки общего формата для региона я думал. Но я не нашел как это сделать :). Подскажите? Как из 1С выделить область ячеек и присвоить ячейкам всем рамку и размер шрифта.

    Вызов процедуры еще более растянет время.
    Очевидно, что получение данных из таблицы значений зранящихся в памяти не жрет 10 минут времени.
    это во всем виноват перебор ячеек экселя по ОЛЕ.
  7. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Не, не понимаю. Ну нужен файл эксель. ладно. Выведите свои данные в табличный документ в 1С (с нужным оформлением) и сохраните этот табличный документ как файл эксель. В чем проблема?

    А хз. Никогда не любил OLE.
    Но если посмотреть в гугле, то что-то типа:
    Код:
    //здесь Excel=Новый COMОбъект("Excel.Application");
    WorkSheet.Range["A1:G10"].Select; //Выделяем диапазон ячеек
    Excel.Selection.Borders.LineStyle=1; //теперь работаем с этим выделением
    Excel.Selection.Font.Size=18;
    
    
    
  8. lazy
    Offline

    lazy Модераторы Команда форума Модератор

    Регистрация:
    1 сен 2007
    Сообщения:
    2.127
    Симпатии:
    4
    Баллы:
    29
    Зависит от того, что Вы храните в таблице значений. Можно хранить наименование взятое запросом в виде строки, а можно хранить ссылку, и каждый раз брать ее представление из базы, (через точку, либо приводя значение ссылка к строковому представлению) порождая огромную кучу запросов к базе. Разница скорости работы двух указанных методов будет значительна.

    Поэтому - замер производительности и с разделением момента получения данных из базы и процедурой их вставки в ёксель...
  9. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    сформированный табличный документ можно сохранить в excel средствами 1С, не используя COM.

    ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLS);
  10. TopicStarter Overlay
    rSlayer
    Offline

    rSlayer Опытный в 1С

    Регистрация:
    31 мар 2009
    Сообщения:
    251
    Симпатии:
    0
    Баллы:
    26
    Вывожу на форму в ПолеТабличногоДокумента и потом ТабДок.Записать.
    Спасибо огромное!

    Все данные у меня в ТаблицаЗначений простого типа.
    Но за совет спасибо!
  11. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Согласен с shurikvz. Из-за форматирования каждой ячейки процедура долго выполнялась. Надо сначала выгрузить все нужные данные, а потом формировать выведенную область.

Поделиться этой страницей