8.х Помогите оптеммизировать код плиз

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем SpiritAT, 24 дек 2014.

  1. TopicStarter Overlay
    SpiritAT
    Offline

    SpiritAT Опытный в 1С

    Регистрация:
    8 авг 2013
    Сообщения:
    157
    Симпатии:
    0
    Баллы:
    26
    Проблема в том что при компеляции выкидывает нехватка памяти((. Думаю дело в запросе.

    Код:
    Процедура СформироватьНажатие(Элемент)
     
        ЕксельФайл = Путь;
    ТЗ = Новый ТаблицаЗначений; 
    Разделитель = " "; 
    ТабличноеПоле.Колонки.Очистить();
        ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();
        Запрос = Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    |    ПаспортныеДанныеФизЛиц.ФизЛицо.Наименование,
    |    ПаспортныеДанныеФизЛиц.ФизЛицо.ДатаРождения,
    |    ПаспортныеДанныеФизЛиц.ФизЛицо.МестоРождения,
    |    ПаспортныеДанныеФизЛиц.ДокументСерия,
    |    ПаспортныеДанныеФизЛиц.ДокументНомер,
    |    ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи,
    |    ПаспортныеДанныеФизЛиц.ДокументКемВыдан,
    |    КонтактнаяИнформация.Представление
    |ИЗ
    |    РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц,
    |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация";
    ;
    РезультатЗапроса = Запрос.Выполнить();
    Выбрать=РезультатЗапроса.Выбрать();
    ТЗ.Колонки.Добавить("Фамилия");
    ТЗ.Колонки.Добавить("Имя");
    ТЗ.Колонки.Добавить("Отчество");
    ТЗ.Колонки.Добавить("Номер_паспорта");
    ТЗ.Колонки.Добавить("Когда_и_кем_выдан_паспорт");
    ТЗ.Колонки.Добавить("Дата_рождения");
    ТЗ.Колонки.Добавить("МестоРождения");
    ТЗ.Колонки.Добавить("Адрес");
    Пока Выбрать.Следующий() Цикл
     
    РазбитаяСтрока = СтрЗаменить(Выбрать.ФизлицоНаименование, Разделитель, Символы.ПС);
    Фамилия = СтрПолучитьСтроку(РазбитаяСтрока, 1);
    Имя = СтрПолучитьСтроку(РазбитаяСтрока, 2);
    Отчество = СтрПолучитьСтроку(РазбитаяСтрока, 3);
        НоваяСтрока = ТЗ.Добавить();
        НоваяСтрока.Фамилия = Фамилия;
        НоваяСтрока.Имя = Имя;
        НоваяСтрока.Отчество = Отчество;
        НоваяСтрока.Номер_паспорта = Выбрать.ДокументСерия +" "+ Выбрать.ДокументНомер;
        НоваяСтрока.Когда_и_кем_выдан_паспорт = формат(Выбрать.ДокументДатаВыдачи, "ДФ=дд.ММ.гггг") +" "+ Выбрать.ДокументКемВыдан;
        НоваяСтрока.Дата_рождения = формат(Выбрать.ФизлицоДатаРождения, "ДФ=дд.ММ.гггг");
        НоваяСтрока.МестоРождения = Сред(Выбрать.физлицоМестоРождения,2);
          НоваяСтрока.Адрес= Выбрать.Представление;
    КонецЦикла;
         ЭлементыФормы.ТабличноеПоле.Значение = ТЗ;
        ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();
     
     
            Сообщить("Данные обработаны");
     
    КонецПроцедуры
    Последнее редактирование модератором: 24 дек 2014
  2. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну первое что кидается в глаза это

    | РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц,
    | РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация";

    1.Почему нет соединения, Вам же надо получить Паспортные данные физ лица и его адрес, контактные данные - ну так сделайте связь
    2. Контактные данные он содержит данные всех, Физлица контрагнты, организации и т.д. если ищиее только по физлицам то сделайте ограничение по типу через ССЫЛКА
    3. У контактоно йинформации есть так же тип и вид - то же наложите ограничение.

    А так у Вас 10 000 контагенто+10 000 физ лиц, и у каждого по несколку типов контактной инфы вот и виснет
  3. TopicStarter Overlay
    SpiritAT
    Offline

    SpiritAT Опытный в 1С

    Регистрация:
    8 авг 2013
    Сообщения:
    157
    Симпатии:
    0
    Баллы:
    26
    Сп попробую
  4. TopicStarter Overlay
    SpiritAT
    Offline

    SpiritAT Опытный в 1С

    Регистрация:
    8 авг 2013
    Сообщения:
    157
    Симпатии:
    0
    Баллы:
    26
    Сп тема закрыта
    Сделал так
    Запрос.Текст = "ВЫБРАТЬ
    | КонтактнаяИнформация.Представление,
    | ПаспортныеДанныеФизЛиц.ДокументСерия,
    | ПаспортныеДанныеФизЛиц.ДокументНомер,
    | ПаспортныеДанныеФизЛиц.ДокументДатаВыдачи,
    | ПаспортныеДанныеФизЛиц.ДокументКемВыдан,
    | ПаспортныеДанныеФизЛиц.ФизЛицо.Ссылка
    |ИЗ
    | РегистрСведений.ПаспортныеДанныеФизЛиц КАК ПаспортныеДанныеФизЛиц
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
    | ПО ПаспортныеДанныеФизЛиц.ФизЛицо = КонтактнаяИнформация.Объект";
  5. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну это только первый шаг опять же как говорил еще можно оптимизировать - пункты 2 -3.
    Я уже не буду углу*****ся про Объединение, которое быстре работает чем соединение.
  6. TopicStarter Overlay
    SpiritAT
    Offline

    SpiritAT Опытный в 1С

    Регистрация:
    8 авг 2013
    Сообщения:
    157
    Симпатии:
    0
    Баллы:
    26
    попробую))) извини Draco а вы не знаете как выгрузить из Табличного Поля данные в Exel?
  7. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Ну выгрузить то вы не выгрузите каким то определнным методом.
    Просто тупо через COM работать, на сайте примеры есть. А данные в эксель пихать из ТЗ или Табличного поля - особой разницы нет, если вы уметте обходить эти объекты и работать с ними
  8. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    нажать правую кнопу мыши, выбрать "Вывести список", нажать Ок, Файл-Сохранить как

    ну или программно в табличный документ вывести таблицу значений - это не сложно - и потом этот табдок сохранить в формате excel

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