Имя: Пароль:
1C
1С v8
Переделать функцию
,
0 zippygrill
 
23.07.14
09:14
Привет!
Замер производительность показал что именно "Запрос.Выполнить().Выгрузить()" занимает больше всего.

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ *
        |ПОМЕСТИТЬ тзВзаиморасчетыПоДокументам
        |ИЗ
        |    &тзВзаиморасчетыПоДокументам КАК тзВзаиморасчетыПоДокументам
        |ГДЕ
        |    тзВзаиморасчетыПоДокументам.ОрганизацияПредставление = &ОрганизацияПредставление
        |    И тзВзаиморасчетыПоДокументам.КонтрагентПредставление = &КонтрагентПредставление
        |    И тзВзаиморасчетыПоДокументам.ВзаиморасчетыПриход <> 0
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ *
        |ИЗ
        |    тзВзаиморасчетыПоДокументам КАК тзВзаиморасчетыПоДокументам
        |
        |УПОРЯДОЧИТЬ ПО
        |    тзВзаиморасчетыПоДокументам.ДатаОплатыПоНакладной УБЫВ";

    Если Движения = "Расход" Тогда
        Запрос.Текст = СтрЗаменить(Запрос.Текст,"тзВзаиморасчетыПоДокументам.ВзаиморасчетыПриход <> 0", "тзВзаиморасчетыПоДокументам.ВзаиморасчетыРасход <> 0");
    КонецЕсли;
    Запрос.УстановитьПараметр("тзВзаиморасчетыПоДокументам",     ?(Параметры.ИспользоватьCOM, ЗначениеИзСтрокиВнутр(Параметры.Соединение.ЗначениеВСтрокуВнутр(тзВзаиморасчетыПоДокументам)),тзВзаиморасчетыПоДокументам));
    Запрос.УстановитьПараметр("КонтрагентПредставление",        СтрокатзВзаиморасчетыПоДоговорам.КонтрагентПредставление);
    Запрос.УстановитьПараметр("ОрганизацияПредставление",        СтрокатзВзаиморасчетыПоДоговорам.ОрганизацияПредставление);

    Возврат Запрос.Выполнить().Выгрузить();

Начал переделать через найтиСтроки() для таблицы "тзВзаиморасчетыПоДокументам" но потом вспомнил что там в структуре отборе не вставить Поле<>0.
Есть еще какие то варианты у вас?
1 zak555
 
23.07.14
09:16
тз откуда получил ?
2 Aloex
 
23.07.14
09:17
(0) Можно построитель к тз прикрутить прикрутить.
3 tdm
 
23.07.14
09:17
1. логично что Запрос.Выполнить() занимает много времени))надо относительно остального кода сомтреть
2.>>отборе не вставить Поле<>0
можно наоборот получить - Поле=0 и вырезать эти строки)
4 ДенисЧ
 
23.07.14
09:18
А что больше занимает - Выполнить() или выгрузить()?
5 zippygrill
 
23.07.14
09:18
6 Aloex
 
23.07.14
09:19
(5) Раздели "Выполнить" и "Выгрузить".
7 zippygrill
 
23.07.14
09:20
(1) из другого источника(запрос)
8 ДенисЧ
 
23.07.14
09:20
(5) А словами ответить впадлу?
9 Aloex
 
23.07.14
09:20
(7) а там же обработать не вариант?
10 zippygrill
 
23.07.14
09:21
(8) Что я тебя не понял. Скрин просто выложил чтобы был виден замер.
11 zippygrill
 
23.07.14
09:21
*что то
12 ДенисЧ
 
23.07.14
09:22
(10) То есть тебе ручками вбить 3 циферки западло, а скрин делать - нет?
А мне лень смотреть картинки на каких-то левых сайтах...
13 zippygrill
 
23.07.14
09:23
ну это же относительно ... конечно же все зависит от объема данных..
14 zak555
 
23.07.14
09:37
(6) будет ещё дольще
15 zippygrill
 
23.07.14
09:37
Разделил на:
Результат = Запрос.Выполнить();
Возврат Результат.Выгрузить();
Маразм пишет типа метод объекта(Выгрузить) не обнаружен. Впервые..
16 zippygrill
 
23.07.14
09:42
но в таблице действительно много данных могут быть. Там все движения(авансы) за весь период по контрагенту.
17 zippygrill
 
23.07.14
09:42
из регистра ВзаиморасчетыСКонтрагентами
18 jsmith82
 
23.07.14
09:46
можно не через найти строки, а в новую ТЗ в цикле
19 hhhh
 
23.07.14
09:47
(15) это сплошь и рядом бывает. Почему маразм?
20 adron
 
23.07.14
09:48
Строки найди по отбору &ОрганизацияПредставление и
&КонтрагентПредставление. А дальше уже найденные строки проверь на условие <> 0, в цикле.
21 РенеДекарт
 
23.07.14
09:49
(4)>А что больше занимает - Выполнить() или выгрузить()?
Нет, вот что а ж два раза "ВЫБРАТЬ *" выбрать все из всего, да еще и по всему в последнем запросе - это не смущает.
Смущает запись в ТЗ... великолепно...
22 adron
 
23.07.14
09:50
Короче нафига такой огород городить: получать тз потом его во временную таблицу, потом запрос к ней?
23 РенеДекарт
 
23.07.14
09:51
(19) потому что РезультатЗапроса получает. И у него должен быть метод "Выгрузить".
Но только не в 1С следовать надежности кода..
24 РенеДекарт
 
23.07.14
09:52
(22) упорядочить?
25 hhhh
 
23.07.14
09:53
(23) Ну попробуй например завести реквизит Результат типа число. И увидишь, присвоит программа ему результат запроса, или там будет всё-таки число?
26 РенеДекарт
 
23.07.14
09:55
(25)>завести реквизит Результат типа число
с чего это у автора там тип Число?
>присвоит программа ему результат запроса
это к вопросу о типизации и явном объявлении - чем так любят теперь выпячивать и красоваться одноэсники.
В нормальной среде система должна ругнуться. А 1С?
27 hhhh
 
23.07.14
09:58
(26) в 1с должно пройти преобразование одного типа в другой.

Например, ЧисловойРеквизит = "1";

в реквизите будет число. Очень удобно для задач, решаемых с помощью 1с.
28 _KaA
 
23.07.14
10:04
Вы опишите задачу полностью.

Из приведенной картинки видно что запрос выполняется 0.6 секунды. Это долго что ли?

Может проблема не в функции а в том, что ее "завут" много раз в цикле! Тогда проблема структуре построения механизма.

Вопрос из разряда: Какую таблетку выпить: круглую или длинную? (что болит, кого лечим, что за таблетки...)
29 ptiz
 
23.07.14
10:09
(15) Напиши
Результат12345 = Запрос.Выполнить();
Возврат Результат12345.Выгрузить();
30 РенеДекарт
 
23.07.14
10:15
(27)>в 1с должно пройти преобразование одного типа в другой.
вот именно. И результатЗапроса превратится в какую-то "1".
А должна быть ошибка. Чтобы остановится сразу и здесь, а не после теста на пользвателях с непредсказуемым результатом.
31 Крошка Ру
 
23.07.14
10:18
(0) Ха! Выполнение запроса занимает львиную долю времени!

То есть ты надеешься оптимизировать запрос так, чтоб он выполнялся столько же, сколько и простое присваивание значение переменной?

И кстати: получать таблицу, загружать ее в ВТ, делать там отборы, выгружать...
Может проще сразу при получении таблицы нужные отборы сделать?
32 zippygrill
 
23.07.14
11:00
(20) разбивать так тоже неплохой вариант..
33 Classic
 
23.07.14
12:15
(30)
Ниче никому не должно.
Фиксированная типизация переменных идет в пень.