|
Переделать функцию | ☑ | ||
---|---|---|---|---|
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)
Ниче никому не должно. Фиксированная типизация переменных идет в пень. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |