8.х Как ускорить заполнение табличной части документа?

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

  1. TopicStarter Overlay
    Dimka77
    Offline

    Dimka77 Опытный в 1С

    Регистрация:
    6 июн 2009
    Сообщения:
    279
    Симпатии:
    0
    Баллы:
    26
    Вот такой код загружает номенклатуру и количество в табл. часть документа:
    Код:
    ОбъектДокПостТовИУсл = НовыйДокументПостТовИУсл.Ссылка.ПолучитьОбъект();
    Пока НЕ ПолучениеДанныхИзЛиста.EOF Цикл
    
    НоваяСтрокаТабличнойЧастиДокумента = ОбъектДокПостТовИУсл.Товары.Добавить ();
    НомКод = ПолучениеДанныхИзЛиста.Fields("НомКод").value;
    Количество = ПолучениеДанныхИзЛиста.Fields("Количество").value;
    
    НоваяСтрокаТабличнойЧастиДокумента.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(НомКод);
    НоваяСтрокаТабличнойЧастиДокумента.Количество = Количество;
    
    ОбъектДокПостТовИУсл.Записать();
    ПолучениеДанныхИзЛиста.MoveNext();
    КонецЦикла;
    
    
    Нужно загрузить более 10 тыс. строк, этот код выполняется оооооооочень долго, возможно его как-то оптимизировать?
  2. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Зачем вы в цикле каждый раз перезаписываете документ. Он у Вас и будет 10 тыс раз записываться и при записи выполнять проверки разные.

    Вы сначала заполните всю ТЧ а потом уже записываете документ.
    Т.е.
    ОбъектДокПостТовИУсл.Записать(); вынесите за цикл Вы документ не в цикле создаете? зачем тогда в цикле записывать?
  3. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Какой тип у вас "ПолучениеДанныхИзЛиста"?
    Вы каждый раз обращаетесь к Экселю?
    Если да - то эффективнее будет сначала все из экселя загрузить в таблицу значений, а уж потом создавать строки ТЧ документа.
    Кстати, можно будет потом сделать (если имена колонок совпадают, и уже введенные строки до загрузки - не неужны):
    Код:
    ОбъектДокПостТовИУсл.Товары.Загрузить(ТаблицаЗначений);
    
  4. TopicStarter Overlay
    Dimka77
    Offline

    Dimka77 Опытный в 1С

    Регистрация:
    6 июн 2009
    Сообщения:
    279
    Симпатии:
    0
    Баллы:
    26
    Класс!!! Загрузка в 10тыс наимнований прошла за несколько секунд. Я впечатлён! :unsure:
  5. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    еще бы - каждый раз курсор по экселю двигать. Бедная махина ....

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