|
Ускорение работы запроса | ☑ | ||
---|---|---|---|---|
0
Coldboy
24.10.13
✎
16:37
|
Здравствуйте. Замерил производительность проведения документа и заметил, что документ проводится допустим 30 секунд, и самое большую часть времени его проведения занимает такая вещь (70% времени).
Функция ВыполнитьЗапросПоРасходам(Граница, Организация, ТаблицаФильтров, ТаблицаБлокировок = Неопределено) Экспорт УстановитьБлокировкиПоТаблицеФильтров("РасходыПриУСН", ТаблицаФильтров, ТаблицаБлокировок, Организация); ОбработатьТаблицуФильтров(ТаблицаФильтров); Запрос = Новый Запрос; Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("Граница", Граница); Для каждого Фильтр Из ТаблицаФильтров Цикл Запрос.УстановитьПараметр(Фильтр.ИмяПоля, Фильтр.ЗначениеПоля); КонецЦикла; Текст = "ВЫБРАТЬ | РасходыУСН.Организация, | РасходыУСН.ВидРасхода, | РасходыУСН.ЭлементРасхода, | РасходыУСН.СчетУчета, | РасходыУСН.Валюта, | РасходыУСН.ДоговорКонтрагента, | РасходыУСН.РасчетныйДокумент, | РасходыУСН.СтатусыПартийУСН, | РасходыУСН.Партия, | РасходыУСН.ОтражениеВУСН, | РасходыУСН.СтатусыОплатыРасходовУСН, | РасходыУСН.СтатусыОплатыРасходовУСН.Порядок КАК СтатусыОплатыРасходовУСНПорядок, | СУММА(РасходыУСН.КоличествоОстаток) КАК Количество, | СУММА(РасходыУСН.СуммаОстаток) КАК Сумма, | СУММА(РасходыУСН.НДСОстаток) КАК НДС, | РасходыУСН.НомерСтрокиДокумента КАК НомерСтрокиДокумента, | РасходыУСН.РеквизитыДокументаОплаты КАК РеквизитыДокументаОплаты, | РасходыУСН.Партия.Дата КАК ПартияДата, | РасходыУСН.РасчетныйДокумент.Дата КАК РасчетныйДокументДата |ИЗ | РегистрНакопления.РасходыПриУСН.Остатки(&Граница, Организация = &Организация"; Для каждого Фильтр Из ТаблицаФильтров Цикл Если Найти(Фильтр.Условие, "В") = 0 Тогда Текст = Текст + " И " + Фильтр.ИмяПоля + " " + Фильтр.Условие + " &" + Фильтр.ИмяПоля; Иначе Текст = Текст + " И " + Фильтр.ИмяПоля + " " + Фильтр.Условие + " (&" + Фильтр.ИмяПоля + ")"; КонецЕсли; КонецЦикла; Текст = Текст + ") КАК РасходыУСН | |СГРУППИРОВАТЬ ПО | РасходыУСН.Организация, | РасходыУСН.ВидРасхода, | РасходыУСН.ЭлементРасхода, | РасходыУСН.СчетУчета, | РасходыУСН.Валюта, | РасходыУСН.ДоговорКонтрагента, | РасходыУСН.РасчетныйДокумент, | РасходыУСН.СтатусыПартийУСН, | РасходыУСН.Партия, | РасходыУСН.ОтражениеВУСН, | РасходыУСН.СтатусыОплатыРасходовУСН, | РасходыУСН.НомерСтрокиДокумента, | РасходыУСН.РеквизитыДокументаОплаты | |ДЛЯ ИЗМЕНЕНИЯ | |УПОРЯДОЧИТЬ ПО | СтатусыОплатыРасходовУСНПорядок, | ПартияДата, | РасчетныйДокументДата, | НомерСтрокиДокумента"; Запрос.Текст = Текст; Возврат Запрос.Выполнить().Выгрузить(); Как это дело ускорить, мб что-нить можно сделать с регистром накопления, там доп галки индексацию ему выставить ? или взять остаточную таблицу? |
|||
1
Нуф-Нуф
24.10.13
✎
16:39
|
фильтры засунуть по возможности в параметры виртуальной таблицы
|
|||
2
Нуф-Нуф
24.10.13
✎
16:39
|
или как вариант запрос вообще заменить макетом скд и рулить отборами
|
|||
3
H A D G E H O G s
24.10.13
✎
16:40
|
Я нихрена не понял.
Это че, остаточный регистр с минимум 13 измерениями? |
|||
4
Maxus43
24.10.13
✎
16:41
|
именно запрос 70%? что там за
УстановитьБлокировкиПоТаблицеФильтров("РасходыПриУСН", ТаблицаФильтров, ТаблицаБлокировок, Организация); ОбработатьТаблицуФильтров(ТаблицаФильтров); (3) 12 вроде) |
|||
5
H A D G E H O G s
24.10.13
✎
16:41
|
Я бы тоже 30 секунд проводился.
|
|||
6
Maxus43
24.10.13
✎
16:42
|
вобще выпилить эту хрень никак? Провестись не может чтоли без накладывания таких блокировок?
|
|||
7
Coldboy
24.10.13
✎
16:42
|
это находится в конфигурации общимоймодуль.налоговыйучетУСН но конфигурация общепит 2.0. Думаю писали это рарус такую вещь, щас буду в БП 2.0 смотреть, как там ускорили.
(1) фильтры в параметры виртуальной таблицы? (3) я имел виду использовать не сам регистр накопления, как тута, а вирутальную таблицу, там будет быстрее. |
|||
8
H A D G E H O G s
24.10.13
✎
16:42
|
НомерСтрокиДокумента
РеквизитыДокументаОплаты Спорим, он не закрывается в ноль?! |
|||
9
Coldboy
24.10.13
✎
16:42
|
(4) да именно Запрос.Выполнить().Выгрузить(); показывает замер производительности на эту строчку.
|
|||
10
Maxus43
24.10.13
✎
16:42
|
>>общепит 2.0
>>писали это рарус всё сказано тут |
|||
11
Coldboy
24.10.13
✎
16:43
|
(8) кто именно не закрывается в 0?
|
|||
12
H A D G E H O G s
24.10.13
✎
16:44
|
Гыгыгы, это походу типовой регистр.
|
|||
13
H A D G E H O G s
24.10.13
✎
16:44
|
В УПП - один в один.
|
|||
14
vhl
24.10.13
✎
16:45
|
(7) а "Остатки" это что, не виртуальная таблица?
|
|||
15
vhl
24.10.13
✎
16:46
|
если убрать
| РасходыУСН.СтатусыОплатыРасходовУСН.Порядок, | РасходыУСН.Партия.Дата КАК ПартияДата, | РасходыУСН.РасчетныйДокумент.Дата намного ускорится? |
|||
16
Maxus43
24.10.13
✎
16:46
|
(13) да, жесть
|
|||
17
Maxus43
24.10.13
✎
16:47
|
| РасходыУСН.Партия.Дата КАК ПартияДата,
| РасходыУСН.РасчетныйДокумент.Дата это точно тормозит, там составные типы, в итоге большая хрень а не запрос |
|||
18
H A D G E H O G s
24.10.13
✎
16:48
|
Вынести во Временную таблицу получение остатков по всем измерениям,
потом вторым запросом - получение дат и порядка через Точку, Сортировку. |
|||
19
H A D G E H O G s
24.10.13
✎
16:48
|
Группировка там не нужна, кстати.
|
|||
20
H A D G E H O G s
24.10.13
✎
16:49
|
Мая гадбл, это типовой кот.
|
|||
21
Maxus43
24.10.13
✎
16:49
|
Я нашёл этот запрос в УПП, тоже почти такой же... НО!
Он не используется для накладывания блокировок, он не для этого. Тут тупо скопипастили его и используют не по назначению |
|||
22
Maxus43
24.10.13
✎
16:49
|
(20) не совсем
|
|||
23
H A D G E H O G s
24.10.13
✎
16:49
|
(21) (22) Ааа, точно, вижу.
|
|||
24
Coldboy
24.10.13
✎
16:50
|
(10) хочу оптимизировать, устал ждать от них ответа, типа они щас предлагают уже другую конфу купить, там все лучше.
(17) а стоит это убирать? |
|||
25
Hmster
24.10.13
✎
16:51
|
(24) попробуй, возможно из-за этого и тормозит
|
|||
26
Maxus43
24.10.13
✎
16:52
|
(24) а я хз где это дальше используется. Вынесено в общий - не только в этом доке, там может нужны эти поля. а может и тут нужны, хз.
>>устал ждать от них ответа ну напиши им что они Быдлокодеры, хотя и так знают наверно |
|||
27
Maxus43
24.10.13
✎
16:53
|
кстати в качестве эксперимента - убери "ДЛЯ ИЗМЕНЕНИЯ", насколько шустрей будет?
|
|||
28
Hmster
24.10.13
✎
16:54
|
(24) попробуй как выполняется запрос без этих полей. В крайнем случае перебором потом добавить можно будет.
|
|||
29
Hmster
24.10.13
✎
16:55
|
было пару баз с УСН, явных тормозов не наблюдал как в файловой, так и в СКЛ.
|
|||
30
Coldboy
24.10.13
✎
17:00
|
(27) а как проверить потом правильно ли все закрывается, ну щас уберу эти строчки чтобы не выбирались эти измерения. посмотрим как быстро. но правильность бы проверить.
а вопрос регистр режим блокировок автоматически, тогда УстановитьБлокировкиПоТаблицеФильтров("РасходыПриУСН", ТаблицаФильтров, ТаблицаБлокировок, Организация); зачем это, если в управлялемом тока можно мутить блокировки. |
|||
31
Coldboy
24.10.13
✎
17:00
|
(29) да вот я тоже видел усн и не видел тормозов но тута это пипец.
|
|||
32
H A D G E H O G s
24.10.13
✎
17:02
|
(30) Тупо просто проверь, в этом ли причина.
|
|||
33
Coldboy
24.10.13
✎
17:07
|
(32) щас убрал, поставил жду результаты минут через 10 скажу. там за 10 минут, 500 секунд эта вещь выполнялась остальное время на все про все уходило. не уходите никуда )))
|
|||
34
Coldboy
24.10.13
✎
17:16
|
ого че % упал аш до 23. и что теперь делать?
|
|||
35
Coldboy
24.10.13
✎
17:21
|
up...
|
|||
36
H A D G E H O G s
24.10.13
✎
17:24
|
(35) Пробуй Временную таблицу
|
|||
37
Coldboy
24.10.13
✎
17:25
|
(36) а как пробывать, что делать, ниразу не работал с временными таблицами.
|
|||
38
Hmster
24.10.13
✎
17:29
|
НоваяТЗ = Запрос.Выполнить().Выгрузить();
НоваяТЗ.Колонки.Добавить(...); Для каждого СтрНоваяТЗ Из ТЗ Цикл ... Возврат НоваяТЗ; хотя бы так |
|||
39
Coldboy
24.10.13
✎
17:30
|
(38) не вижу оптимизации, в вашем коде. если я буду выгружать с теми полями, а без низ, что я должен сделать с новойТЗ.
|
|||
40
Maxus43
24.10.13
✎
17:31
|
(34) это ты тока ДЛЯ ИЗМЕНЕНИЯ убрал? и так стало?
|
|||
41
Coldboy
24.10.13
✎
17:32
|
(40) всмысле? убрал, попробывал как без этого будет проводится и стало в разы быстрее. теперь думаю чем черевато и что делать? что значит ДЛЯ ИЗМЕНЕНИЯ ?
|
|||
42
H A D G E H O G s
24.10.13
✎
17:34
|
(40) Нет. Он убрал поля "Через точку". И Сортировку.
|
|||
43
H A D G E H O G s
24.10.13
✎
17:38
|
Афтор, попробуй выполнить такой запрос
ВЫБРАТЬ РасходыУСН.Организация, РасходыУСН.ВидРасхода, РасходыУСН.ЭлементРасхода, РасходыУСН.СчетУчета, РасходыУСН.Валюта, РасходыУСН.ДоговорКонтрагента, РасходыУСН.РасчетныйДокумент, РасходыУСН.СтатусыПартийУСН, РасходыУСН.Партия, РасходыУСН.ОтражениеВУСН, РасходыУСН.СтатусыОплатыРасходовУСН, РасходыУСН.КоличествоОстаток КАК Количество, РасходыУСН.СуммаОстаток КАК Сумма, РасходыУСН.НДСОстаток КАК НДС, РасходыУСН.НомерСтрокиДокумента КАК НомерСтрокиДокумента, РасходыУСН.РеквизитыДокументаОплаты КАК РеквизитыДокументаОплаты ПОМЕСТИТЬ Остатки ИЗ РегистрНакопления.РасходыПриУСН.Остатки(&Граница, Организация = &Организация) КАК РасходыУСН ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Остатки.Организация, Остатки.ВидРасхода, Остатки.ЭлементРасхода, Остатки.СчетУчета, Остатки.Валюта, Остатки.ДоговорКонтрагента, Остатки.РасчетныйДокумент, Остатки.СтатусыПартийУСН, Остатки.Партия, Остатки.ОтражениеВУСН, Остатки.СтатусыОплатыРасходовУСН, Остатки.СтатусыОплатыРасходовУСН.Порядок КАК СтатусыОплатыРасходовУСНПорядок, Остатки.Количество, Остатки.Сумма, Остатки.НДС, Остатки.НомерСтрокиДокумента КАК НомерСтрокиДокумента, Остатки.РеквизитыДокументаОплаты, Остатки.Партия.Дата КАК ПартияДата, Остатки.РасчетныйДокумент.Дата КАК РасчетныйДокументДата ИЗ Остатки КАК Остатки УПОРЯДОЧИТЬ ПО СтатусыОплатыРасходовУСНПорядок, ПартияДата, РасчетныйДокументДата, НомерСтрокиДокумента |
|||
44
Hmster
24.10.13
✎
17:48
|
(39) добавить колонки, которые спилил.
Работать может быстрее из-за особенности обращения к составным типам в запросе через точку. или попробуй (43) |
|||
45
Coldboy
24.10.13
✎
17:52
|
(43) а куда фильты вы дели?
|
|||
46
Coldboy
24.10.13
✎
17:52
|
фильтры
|
|||
47
H A D G E H O G s
24.10.13
✎
17:54
|
Наверное меня так же воспринимают на форумах по Дельфи и WinAPI, когда я их спрашиваю хрень...
|
|||
48
Coldboy
24.10.13
✎
17:57
|
"ВЫБРАТЬ
| РасходыУСН.Организация, | РасходыУСН.ВидРасхода, | РасходыУСН.ЭлементРасхода, | РасходыУСН.СчетУчета, | РасходыУСН.Валюта, | РасходыУСН.ДоговорКонтрагента, | РасходыУСН.РасчетныйДокумент, | РасходыУСН.СтатусыПартийУСН, | РасходыУСН.Партия, | РасходыУСН.ОтражениеВУСН, | РасходыУСН.СтатусыОплатыРасходовУСН, | РасходыУСН.КоличествоОстаток КАК Количество, | РасходыУСН.СуммаОстаток КАК Сумма, | РасходыУСН.НДСОстаток КАК НДС, | РасходыУСН.НомерСтрокиДокумента КАК НомерСтрокиДокумента, | РасходыУСН.РеквизитыДокументаОплаты КАК РеквизитыДокументаОплаты | ПОМЕСТИТЬ Остатки | ИЗ | РегистрНакопления.РасходыПриУСН.Остатки(&Граница, Организация = &Организация) КАК РасходыУСН | //////////////////////////////////////////////////////////////////////////////// | ВЫБРАТЬ | Остатки.Организация, | Остатки.ВидРасхода, | Остатки.ЭлементРасхода, | Остатки.СчетУчета, | Остатки.Валюта, | Остатки.ДоговорКонтрагента, | Остатки.РасчетныйДокумент, | Остатки.СтатусыПартийУСН, | Остатки.Партия, | Остатки.ОтражениеВУСН, | Остатки.СтатусыОплатыРасходовУСН, | Остатки.СтатусыОплатыРасходовУСН.Порядок КАК СтатусыОплатыРасходовУСНПорядок, | Остатки.Количество, | Остатки.Сумма, | Остатки.НДС, | Остатки.НомерСтрокиДокумента КАК НомерСтрокиДокумента, | Остатки.РеквизитыДокументаОплаты, | Остатки.Партия.Дата КАК ПартияДата, | Остатки.РасчетныйДокумент.Дата КАК РасчетныйДокументДата | ИЗ | Остатки КАК Остатки "; Для каждого Фильтр Из ТаблицаФильтров Цикл Если Найти(Фильтр.Условие, "В") = 0 Тогда Текст = Текст + " И " + Фильтр.ИмяПоля + " " + Фильтр.Условие + " &" + Фильтр.ИмяПоля; Иначе Текст = Текст + " И " + Фильтр.ИмяПоля + " " + Фильтр.Условие + " (&" + Фильтр.ИмяПоля + ")"; КонецЕсли; КонецЦикла; Текст = Текст + ") КАК РасходыУСН | |СГРУППИРОВАТЬ ПО | РасходыУСН.Организация, | РасходыУСН.ВидРасхода, | РасходыУСН.ЭлементРасхода, | РасходыУСН.СчетУчета, | РасходыУСН.Валюта, | РасходыУСН.ДоговорКонтрагента, | РасходыУСН.РасчетныйДокумент, | РасходыУСН.СтатусыПартийУСН, | РасходыУСН.Партия, | РасходыУСН.ОтражениеВУСН, | РасходыУСН.СтатусыОплатыРасходовУСН, | РасходыУСН.НомерСтрокиДокумента, | РасходыУСН.РеквизитыДокументаОплаты | |ДЛЯ ИЗМЕНЕНИЯ | |УПОРЯДОЧИТЬ ПО | СтатусыОплатыРасходовУСНПорядок, | ПартияДата, | РасчетныйДокументДата, | НомерСтрокиДокумента"; |
|||
49
Coldboy
24.10.13
✎
18:01
|
выдает ошибку синтаксическая при методе выбрать.
|
|||
50
Coldboy
24.10.13
✎
18:01
|
что я сделал не так?
|
|||
51
hhhh
24.10.13
✎
18:02
|
(48) СГРУППИРОВАТЬ ПО выкинь оно тут не нужно, если в фильтре только измерения, а оно так похоже и есть
(40) ДЛЯ ИЗМЕНЕНИЯ в 2-3 раза увеличивает время. Если в файловой. |
|||
52
Coldboy
24.10.13
✎
18:04
|
(51) SQl
|
|||
53
Coldboy
24.10.13
✎
18:05
|
(40) еще поля убирал | РасходыУСН.Партия.Дата КАК ПартияДата,
| РасходыУСН.РасчетныйДокумент.Дата |
|||
54
Coldboy
24.10.13
✎
18:05
|
стоит убрать чисто тока ДЛЯ ИЗМЕНЕНИЯ и посмотреть как будет?
|
|||
55
Coldboy
24.10.13
✎
18:11
|
(47) так что не так?
|
|||
56
Coldboy
24.10.13
✎
18:25
|
так что какой вариант посоветуете, (43) не завелся.
пока работает шустрее без двух полей | РасходыУСН.Партия.Дата КАК ПартияДата, | РасходыУСН.РасчетныйДокумент.Дата КАК РасчетныйДокументДата в разы быстрее в 3 раза, чем черевато, если без этого оставить? |
|||
57
Рыжий Лис
24.10.13
✎
18:32
|
(56) Вместо FIFO будет xyFO
|
|||
58
Coldboy
24.10.13
✎
18:34
|
ну как тогда мне поступить в данной ситуации, что поправить?
|
|||
59
Coldboy
24.10.13
✎
18:48
|
up
|
|||
60
Рыжий Лис
24.10.13
✎
18:53
|
(48) Условия надо в первый запрос прикручивать, а не во второй.
|
|||
61
Coldboy
24.10.13
✎
19:03
|
(60) в какой первый?
|
|||
62
Coldboy
24.10.13
✎
19:29
|
так, что есть какие-нить еще идеи или опыт?
|
|||
63
vhl
24.10.13
✎
20:17
|
(58) У вас в РасходыУСН.Партия и РасходыУСН.РасчетныйДокумент сильно много различных видов документов хранится или все одного вида?
|
|||
64
hhhh
24.10.13
✎
20:38
|
(63) ну, все, которые вспомнишь, они все есть.
|
|||
65
H A D G E H O G s
24.10.13
✎
23:23
|
(62) Да.
Включить мозг и осилить (43). |
|||
66
Coldboy
25.10.13
✎
09:06
|
(58) штук 25.
(65) а что я не так в нем сделал я же скинул результирующий, и сказал что ругается на выбрать второе, что я забыл. |
|||
67
Ёпрст
25.10.13
✎
09:20
|
(50) забыл ";" между запросами
|
|||
68
Coldboy
25.10.13
✎
09:42
|
(67) а они же разве не вместе? это же все один текст запроса или нет?
|
|||
69
Coldboy
25.10.13
✎
09:48
|
Для каждого Фильтр Из ТаблицаФильтров Цикл
Если Найти(Фильтр.Условие, "В") = 0 Тогда Текст = Текст + " И " + Фильтр.ИмяПоля + " " + Фильтр.Условие + " &" + Фильтр.ИмяПоля; Иначе Текст = Текст + " И " + Фильтр.ИмяПоля + " " + Фильтр.Условие + " (&" + Фильтр.ИмяПоля + ")"; КонецЕсли; КонецЦикла; теперь это мешается, а они вообще нужны? хотя думаю да. |
|||
70
Coldboy
25.10.13
✎
10:19
|
анализируя модуль из типовой БП 2.0 пришел к выводу что код, идентичен за исключением состава измерений партий и тд, туда добавлены типовые раруса. сам замедление в выполнение запроса заключается в следующих строчках.
|УПОРЯДОЧИТЬ ПО | ПартияДата, | РасчетныйДокументДата убирая их скорость возрастает, как думаете, мб стоит сначала выгрузить запрос, а потом ТЗ.Сортировать("Партия.Дата,РАсчетныйДокумент.Дата"); ? |
|||
71
Ёпрст
25.10.13
✎
10:33
|
(68) Это вообще то пакетный запрос, каждый запрос в пакете разделяется ";"
|
|||
72
Coldboy
25.10.13
✎
10:34
|
(71) фильтры не подошли я ушел от этой идеи, появилась вот другая, нагрузку на железо кинуть.
|
|||
73
Coldboy
25.10.13
✎
10:35
|
а железо вроде должнго вытянуть эти сортировки.
|
|||
74
Coldboy
25.10.13
✎
10:45
|
а не ошибся, в субд и то быстрее было . вариант пока без | ПартияДата,
| РасчетныйДокументДата работает самый шустрый. со временными таблицами фильтры не подсунул ... |
|||
75
Ёпрст
25.10.13
✎
10:46
|
(72) Чой то ?
Там надо было просто ГДЕ Остатки.Организациядобавить в текст запроса ну и в условия: Для каждого Фильтр Из ТаблицаФильтров Цикл Если Найти(Фильтр.Условие, "В") = 0 Тогда Текст = Текст + " И Остатки." + Фильтр.ИмяПоля + " " + Фильтр.Условие + " &" + Фильтр.ИмяПоля; Иначе Текст = Текст + " И Остатки." + Фильтр.ИмяПоля + " " + Фильтр.Условие + " (&" + Фильтр.ИмяПоля + ")"; КонецЕсли; КонецЦикла; |
|||
76
Ёпрст
25.10.13
✎
10:47
|
(74) ясен пень, нет соединения со всеми табличками доков из составного типа.
Если знаешь, какие именно должны участвовать в выборке, можешь явно ограничить выборку только из них. |
|||
77
DimGan
25.10.13
✎
10:51
|
Запрос написан, болие или менее нормально. Нужно провести реиндексацию базы в скуле или файле.
|
|||
78
ptiz
25.10.13
✎
10:58
|
(66) "штук 25" - и все используются?
|
|||
79
Coldboy
25.10.13
✎
11:02
|
(76) не тока 5-6 документов вообще в конфигурации не используется ( не работают с ними пользователи).
(77) проводил, не сильно помогло. |
|||
80
GANR
25.10.13
✎
11:09
|
(0) Чтобы понять, как ускорить запрос форум должен видеть:
1. Текст условия, которое формирует цикл в топике 2. Структуры данных левой части, на которые сие условие накладывается 3. Много ли данных возвращает запрос в конце Если в левой части условия много точек - возможно замедление, если в левой части условия составной тип данных - тоже возможно замедление, если в правой части при условии "В" большой массив данных - также возможно замедление. Если этой информации нет - состав преступления отсутствует. Сразу могу сказать, что вот это РасходыУСН.Партия.Дата и это РасходыУСН.РасчетныйДокумент.Дата - соединение со всеми таблицами документов, коими может быть партия / платежка, со всеми вытекающими последствиями. Да и вот это РасходыУСН.Партия - тут, если нужно представление получить (скажем, при выводе документа в отчет/сообщение), известен идентификатор, а какой тип документа - не понятно системе, вот и опять идет запрос ко всем таблицам документов, коими может быть партия. |
|||
81
Coldboy
25.10.13
✎
11:12
|
(80)
1.запрос выкладывал, могу текст уже конечный выложить. 2. Тоже могу выложить все фильтры 3. Данные могут плавать количество так точно не скажу. |
|||
82
ptiz
25.10.13
✎
11:15
|
(74) "со временными таблицами фильтры не подсунул ..."
Всё-таки победи временные таблицы. А вот если не поможет (а это очень вероятно), то надо курить более сложные варианты. |
|||
83
Coldboy
25.10.13
✎
11:18
|
(82) надо еще фильтры подсунуть, да пробывал я со временными, время чуть чуть меньше, но не так как без упорядночить по тем 2 датам.
|
|||
84
GANR
25.10.13
✎
11:19
|
(81) Если заранее известны типы партии и расчетного документа, то можно добиться ускорения посредством
ВЫРАЗИТЬ(Партия КАК Документ.ПоступлениеТоваровУслуг) и в условиях виртуальной таблицы Партия ССЫЛКА Документ.ПоступлениеТоваровУслуг в этом случае система будет рассматривать только партии, которые сделаны ПТиУ - будет ускорение, но снижение универсальности. К слову: если использовать ИЛИ в фильтре - система не будет использовать индексы - тоже может быть замедление. В этом случае лучше строить запросы через ОБЪЕДИНИТЬ ВСЕ, если, конечно, индексы есть, если нет - то смысл теряется. |
|||
85
Coldboy
25.10.13
✎
11:28
|
индексы как их определить?
нет не тока поступление. |
|||
86
ptiz
25.10.13
✎
11:30
|
(83) Во сколько раз ускоряет запрос выключение упорядочивания?
|
|||
87
ptiz
25.10.13
✎
11:38
|
Макс.ускорение можно получить так:
1) получить общий список документов Партия и РасчетныйДокумент из результат запроса без упорядочивания - их не должно быть слишком много. Кстати, сколько у тебя получается? 2) программно построить текст запроса-объединения такого вида "ВЫБРАТЬ Ссылка, Дата ПОМЕСТИТЬ ДокиДаты Из Документ.ВидДокумента1 КАК Док ГДЕ Ссылка В (&МассивВсехДокументов) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Ссылка, Дата ПОМЕСТИТЬ ДокиДаты Из Документ.ВидДокумента2 КАК Док ГДЕ Ссылка В (&МассивВсехДокументов) ... ИНДЕКСИРОВАТЬ ПО ССЫЛКА" и т.д. по всем возможным видам документов (можно перебрать список видов из метаданных регистра). Тут мы получим все даты. И эту таблицу присоединить к первой (несортированной) и отсортировать. Всё это делается одним пакетным запросом. |
|||
88
Ёпрст
25.10.13
✎
11:42
|
(83) см.(75)
|
|||
89
Bober
25.10.13
✎
11:43
|
(0)
1. Нужно изменить алгоритм получения даты у партии и расчетного документа. 2. в запросе не нужно использовать сгруппировать, так как 1с уже это делает за счет получения данных из вирт. таблицы остатков. Для начала оставь все как есть, только убери: - группировку, - упорядочивание - получение данных через точку (Партия.Дата, РасчетныйДокумент.Дата) |
|||
90
ptiz
25.10.13
✎
11:50
|
(89) "получение данных через точку " - так ему нужна сортировка по дате. А взять её можно только из таблиц документов.
|
|||
91
Coldboy
25.10.13
✎
11:54
|
(87) извините, но чувствую будет не очень. общий список документов это выбрать все документы?
|
|||
92
famnam
25.10.13
✎
11:55
|
(0) в качестве теста: поля фильтра расположить в том порядке, как они заданы в конфигураторе. тогда субд будет оптимально использовать индексы
|
|||
93
Coldboy
25.10.13
✎
11:56
|
(75) не понял вас и не увидел сообщения.
|
|||
94
Coldboy
25.10.13
✎
11:57
|
(92) располжены где ?
|
|||
95
Coldboy
25.10.13
✎
11:57
|
(92) точнее это же там партия и тд и тп.
|
|||
96
Coldboy
25.10.13
✎
11:58
|
(89) убрал упорядочивание и скорость ВЫРОСЛА в разы же в 3 раза. вот и спрашиваю чем это черевато.
|
|||
97
Coldboy
25.10.13
✎
11:58
|
сделал так
|УПОРЯДОЧИТЬ ПО | СтатусыОплатыРасходовУСНПорядок, // | ПартияДата, // | РасчетныйДокументДата, | НомерСтрокиДокумента"; и скорость взлетела в 3 раза. |
|||
98
Bober
25.10.13
✎
11:58
|
(96) нужно смотреть дальше по коду. это из какой конфигурации?
|
|||
99
Coldboy
25.10.13
✎
11:59
|
поэтому спрашиваю, что ждать, соотвественро еще убрал
// | ПартияДата, // | РасчетныйДокументДата, из выбрать ибо лишние поля не нужны. |
|||
100
Coldboy
25.10.13
✎
11:59
|
Общепит 2.0, она на основе БП 2.0 там такой же запрос, но нет общепитдокументов (общепит это рарус).
|
|||
101
Bober
25.10.13
✎
11:59
|
(97) группировки и получение данных через точку тоже убирал?
|
|||
102
Bober
25.10.13
✎
12:00
|
(100) проведение по партиям?
|
|||
103
Coldboy
25.10.13
✎
12:00
|
"ВЫБРАТЬ
| РасходыУСН.Организация, | РасходыУСН.ВидРасхода, | РасходыУСН.ЭлементРасхода, | РасходыУСН.СчетУчета, | РасходыУСН.Валюта, | РасходыУСН.ДоговорКонтрагента, | РасходыУСН.РасчетныйДокумент, | РасходыУСН.СтатусыПартийУСН, | РасходыУСН.Партия, | РасходыУСН.ОтражениеВУСН, | РасходыУСН.СтатусыОплатыРасходовУСН, | РасходыУСН.СтатусыОплатыРасходовУСН.Порядок КАК СтатусыОплатыРасходовУСНПорядок, | СУММА(РасходыУСН.КоличествоОстаток) КАК Количество, | СУММА(РасходыУСН.СуммаОстаток) КАК Сумма, | СУММА(РасходыУСН.НДСОстаток) КАК НДС, | РасходыУСН.НомерСтрокиДокумента КАК НомерСтрокиДокумента, | РасходыУСН.РеквизитыДокументаОплаты КАК РеквизитыДокументаОплаты // | РасходыУСН.Партия.Дата КАК ПартияДата, // | РасходыУСН.РасчетныйДокумент.Дата КАК РасчетныйДокументДата |ИЗ | РегистрНакопления.РасходыПриУСН.Остатки(&Граница, Организация = &Организация"; Для каждого Фильтр Из ТаблицаФильтров Цикл Если Найти(Фильтр.Условие, "В") = 0 Тогда Текст = Текст + " И " + Фильтр.ИмяПоля + " " + Фильтр.Условие + " &" + Фильтр.ИмяПоля; Иначе Текст = Текст + " И " + Фильтр.ИмяПоля + " " + Фильтр.Условие + " (&" + Фильтр.ИмяПоля + ")"; КонецЕсли; КонецЦикла; Текст = Текст + ") КАК РасходыУСН | |СГРУППИРОВАТЬ ПО | РасходыУСН.Организация, | РасходыУСН.ВидРасхода, | РасходыУСН.ЭлементРасхода, | РасходыУСН.СчетУчета, | РасходыУСН.Валюта, | РасходыУСН.ДоговорКонтрагента, | РасходыУСН.РасчетныйДокумент, | РасходыУСН.СтатусыПартийУСН, | РасходыУСН.Партия, | РасходыУСН.ОтражениеВУСН, | РасходыУСН.СтатусыОплатыРасходовУСН, | РасходыУСН.НомерСтрокиДокумента, | РасходыУСН.РеквизитыДокументаОплаты | // |ДЛЯ ИЗМЕНЕНИЯ // | |УПОРЯДОЧИТЬ ПО | СтатусыОплатыРасходовУСНПорядок, // | ПартияДата, // | РасчетныйДокументДата, | НомерСтрокиДокумента"; |
|||
104
Coldboy
25.10.13
✎
12:00
|
(102) да есть партионный учет. ФИФО.
|
|||
105
Coldboy
25.10.13
✎
12:00
|
щас такое дело и летает ...
|
|||
106
vhl
25.10.13
✎
12:01
|
(97) смотри, как бы не получилось то что тебе в (57) сказали :)))
|
|||
107
Coldboy
25.10.13
✎
12:01
|
14 минут на проведения целого дня, а было 40 минут, разница есть? документ оборот растет.
|
|||
108
ptiz
25.10.13
✎
12:01
|
(91) Это будет:
ВЫБРАТЬ РАЗЛИЧНЫЕ Партия ПОМЕСТИТЬ ДокументыДляДаты // и эту ВТ будем использовать для отбора документов ИЗ Остатки ОБЪЕДИНИТЬ ВЫБРАТЬ РАЗЛИЧНЫЕ РасчетныйДокумент ИЗ Остатки Чувствую, проще самому написать... |
|||
109
Coldboy
25.10.13
✎
12:01
|
(106) поэтому ищу алтернативу, чтобы не получилось как в (57) я уже понял, примерно зачем нужно упорядочивание , но не понимаю почему даты могут выйти в разброс )
|
|||
110
Coldboy
25.10.13
✎
12:02
|
(108) вообще никогда не использовал ВТ и во франче где раньше работал, открещивались, когда спрашивал про это.
|
|||
111
Bober
25.10.13
✎
12:03
|
(104) посмотри в конфигураторе сколько типов документов в измерении партий и сколько типов в расчетных документах
|
|||
112
Coldboy
25.10.13
✎
12:03
|
а типовой запрос, с не знаниями ВТ еще под ВТ крутить ну скажем не надежно )
|
|||
113
Coldboy
25.10.13
✎
12:03
|
(104) 21, 21 где то так.
|
|||
114
Bober
25.10.13
✎
12:03
|
(110) теперь все по-взрослому.
|
|||
115
Coldboy
25.10.13
✎
12:06
|
пробывать ВТ будут сам отдельно, но не в типовой и в рабочей конфигурации, с этим думаю на 3 месяца затянется, а решение надо щас прикинуть, правда попа моя от этого не горит, но емае обидно, если не поправлю. вроде нашел решение, но может выйти xFO. вот еще жду вариантов.
|
|||
116
vhl
25.10.13
✎
12:07
|
А еще можно в регистр добавить измерения "ПартияДата" и "РасчетныйДокументДата" и записывать их при проведении. Тогда у тебя сразу будут нужные даты и не будет разименовывания. Но тут вопрос - насколько далеко ты готов зайти ради оптимизации :))
|
|||
117
vhl
25.10.13
✎
12:07
|
(103) Ты тупо удалил разименовывание через точку. Это оно тормозило, а не упорядочивание.
|
|||
118
Bober
25.10.13
✎
12:14
|
(115) решение такое:
получение данных из регистра и поместить во временную таблицу, вторым запросом через объединение сделать получение дат из таблиц документов шаблон: ВЫБРАТЬ Док.Ссылка, Док.Дата ИЗ Документ.ИмяДокумента ГДЕ Док.Ссылка В (ВЫБРАТЬ РН.Партия ИЗ ДанныеИзРегистра КАК РН ГДЕ РН.Партия Ссылка Документ.ИмяДокумента) Или Док.Ссылка В (ВЫБРАТЬ РН.РАсчетный Документ ИЗ ДанныеИзРегистра КАК РН ГДЕ РН.РАсчетный Документ Ссылка Документ.ИмяДокумента) ОБЪЕДИНИТЬ ВСЕ ... и тд в конце установить ИНДЕКСИРОВАТЬ ПО Ссылка и так по все типам документов и потом в третьем запросе сделать левое соединение |
|||
119
Bober
25.10.13
✎
12:15
|
вроде уже такой вариант проскакивал. работы там на час. После этого все должно встать на свои места.
|
|||
120
Bober
25.10.13
✎
12:17
|
(103) в типовой бух там 44 типа документов в партии и 40 в расчетном документе, при получении данных через точку получается что в основному запросу (в котором 3 таблицы) присоединяются еще 84 таблицы. От такого запроса можно оживать все что угодно.
|
|||
121
ptiz
25.10.13
✎
12:27
|
Проверил, работает (только фильтры чуть по-другому написал, их не проверял :) )
Запрос = Новый Запрос; Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("Граница", Граница); Для каждого Фильтр Из ТаблицаФильтров Цикл Запрос.УстановитьПараметр(Фильтр.ИмяПоля, Фильтр.ЗначениеПоля); КонецЦикла; ТекстФильтра = ""; Для каждого Фильтр Из ТаблицаФильтров Цикл Если Найти(Фильтр.Условие, "В") = 0 Тогда ТекстФильтра = ТекстФильтра + " И " + Фильтр.ИмяПоля + " " + Фильтр.Условие + " &" + Фильтр.ИмяПоля; Иначе ТекстФильтра = ТекстФильтра + " И " + Фильтр.ИмяПоля + " " + Фильтр.Условие + " (&" + Фильтр.ИмяПоля + ")"; КонецЕсли; КонецЦикла; Текст = "ВЫБРАТЬ | РасходыУСН.Организация, | РасходыУСН.ВидРасхода, | РасходыУСН.ЭлементРасхода, | РасходыУСН.СчетУчета, | РасходыУСН.Валюта, | РасходыУСН.ДоговорКонтрагента, | РасходыУСН.РасчетныйДокумент, | РасходыУСН.СтатусыПартийУСН, | РасходыУСН.Партия, | РасходыУСН.ОтражениеВУСН, | РасходыУСН.СтатусыОплатыРасходовУСН, | РасходыУСН.СтатусыОплатыРасходовУСН.Порядок КАК СтатусыОплатыРасходовУСНПорядок, | СУММА(РасходыУСН.КоличествоОстаток) КАК Количество, | СУММА(РасходыУСН.СуммаОстаток) КАК Сумма, | СУММА(РасходыУСН.НДСОстаток) КАК НДС, | РасходыУСН.НомерСтрокиДокумента КАК НомерСтрокиДокумента, | РасходыУСН.РеквизитыДокументаОплаты КАК РеквизитыДокументаОплаты |ПОМЕСТИТЬ Остатки |ИЗ | РегистрНакопления.РасходыПриУСН.Остатки( | &Граница, | Организация = &Организация | И &ТекстФильтра) КАК РасходыУСН | |СГРУППИРОВАТЬ ПО | РасходыУСН.Организация, | РасходыУСН.ВидРасхода, | РасходыУСН.ЭлементРасхода, | РасходыУСН.СчетУчета, | РасходыУСН.Валюта, | РасходыУСН.ДоговорКонтрагента, | РасходыУСН.РасчетныйДокумент, | РасходыУСН.СтатусыПартийУСН, | РасходыУСН.Партия, | РасходыУСН.ОтражениеВУСН, | РасходыУСН.СтатусыОплатыРасходовУСН, | РасходыУСН.НомерСтрокиДокумента, | РасходыУСН.РеквизитыДокументаОплаты, | РасходыУСН.СтатусыОплатыРасходовУСН.Порядок |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | Остатки.Партия КАК Ссылка |ПОМЕСТИТЬ ДокументыВсе |ИЗ | Остатки КАК Остатки | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ РАЗЛИЧНЫЕ | Остатки.РасчетныйДокумент |ИЗ | Остатки КАК Остатки |"; Текст = СтрЗаменить(Текст, "И &ТекстФильтра", ТекстФильтра); МассивИмен = Новый Массив; Для каждого Тип Из Метаданные.РегистрыНакопления.РасходыПриУСН.Измерения.Партия.Тип.Типы() Цикл ИмяМД = Метаданные.НайтиПоТипу(Тип).Имя; Если МассивИмен.Найти(ИмяМД) = Неопределено Тогда МассивИмен.Добавить(ИмяМД); КонецЕсли; КонецЦикла; ТекстДаты = ""; Для каждого ИмяМД Из МассивИмен Цикл ТекстДаты = ТекстДаты + ?(ТекстДаты = "", "", Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ") + Символы.ПС + "ВЫБРАТЬ Ссылка, Дата " + ?(ТекстДаты = "", "ПОМЕСТИТЬ ДокиДаты", "") + Символы.ПС + " ИЗ Документ." + ИмяМД + " КАК Док ГДЕ Ссылка В (ВЫБРАТЬ Ссылка ИЗ ДокументыВсе)" КонецЦикла; Текст = Текст + ";" + ТекстДаты + " |; | ВЫБРАТЬ | Остатки.Организация, | Остатки.ВидРасхода, | Остатки.ЭлементРасхода, | Остатки.СчетУчета, | Остатки.Валюта, | Остатки.ДоговорКонтрагента, | Остатки.РасчетныйДокумент, | ДатыРасчетныхДокументов.Дата КАК РасчетныйДокументДата, | Остатки.СтатусыПартийУСН, | Остатки.Партия, | ДатыПартий.Дата КАК ПартияДата, | Остатки.ОтражениеВУСН, | Остатки.СтатусыОплатыРасходовУСН, | Остатки.СтатусыОплатыРасходовУСНПорядок, | Остатки.Количество, | Остатки.Сумма, | Остатки.НДС, | Остатки.НомерСтрокиДокумента, | Остатки.РеквизитыДокументаОплаты |ИЗ | Остатки КАК Остатки |ЛЕВОЕ СОЕДИНЕНИЕ ДокиДаты КАК ДатыПартий | ПО Остатки.Партия = ДатыПартий.Ссылка |ЛЕВОЕ СОЕДИНЕНИЕ ДокиДаты КАК ДатыРасчетныхДокументов | ПО Остатки.РасчетныйДокумент = ДатыРасчетныхДокументов.Ссылка |УПОРЯДОЧИТЬ ПО | СтатусыОплатыРасходовУСНПорядок, | ПартияДата, | РасчетныйДокументДата, | НомерСтрокиДокумента |"; |
|||
122
H A D G E H O G s
25.10.13
✎
12:37
|
Херракс!
Функция ПолучитьТаблицуОстатков() Экспорт Запрос=Новый Запрос; МенеджерВТ=Новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц=МенеджерВТ; Запрос.Текст= "ВЫБРАТЬ | РасходыУСН.Организация, | РасходыУСН.ВидРасхода, | РасходыУСН.ЭлементРасхода, | РасходыУСН.СчетУчета, | РасходыУСН.Валюта, | РасходыУСН.ДоговорКонтрагента, | РасходыУСН.РасчетныйДокумент, | РасходыУСН.СтатусыПартийУСН, | РасходыУСН.Партия, | РасходыУСН.ОтражениеВУСН, | РасходыУСН.СтатусыОплатыРасходовУСН, | РасходыУСН.КоличествоОстаток КАК Количество, | РасходыУСН.СуммаОстаток КАК Сумма, | РасходыУСН.НДСОстаток КАК НДС, | РасходыУСН.НомерСтрокиДокумента КАК НомерСтрокиДокумента, | РасходыУСН.РеквизитыДокументаОплаты КАК РеквизитыДокументаОплаты |ПОМЕСТИТЬ Остатки |ИЗ | РегистрНакопления.РасходыПриУСН.Остатки() КАК РасходыУСН |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | Остатки.РасчетныйДокумент КАК Документ, | 0 КАК НомерТипа |ИЗ | Остатки КАК Остатки | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ РАЗЛИЧНЫЕ | Остатки.Партия, | 0 |ИЗ | Остатки КАК Остатки"; ТаблицаДокументов=Запрос.Выполнить().Выгрузить(); СоответствиеНомераТипаИИмени=Новый Соответствие; ПоследнийНомерТипа=0; НомерТипа=0; Для Каждого СтрокаТЗ ИЗ ТаблицаДокументов Цикл Если Не ЗначениеЗаполнено(СтрокаТЗ.Документ) Тогда Продолжить; КонецЕсли; ИмяДокумента=СтрЗаменить(xmltypeof(СтрокаТЗ.Документ).ИмяТипа,"DocumentRef.",""); СтрокаСоответствия=СоответствиеНомераТипаИИмени.Получить(ИмяДокумента); Если СтрокаСоответствия=Неопределено Тогда НомерТипа=ПоследнийНомерТипа+1; СоответствиеНомераТипаИИмени.Вставить(ИмяДокумента,НомерТипа); ПоследнийНомерТипа=НомерТипа; Иначе НомерТипа=СтрокаСоответствия.Значение; КонецЕсли; СтрокаТЗ.НомерТипа=НомерТипа; КонецЦикла; Запрос.Текст= "ВЫБРАТЬ | ТаблицаДокументов.Документ, | ТаблицаДокументов.НомерТипа КАК НомерТипа |ПОМЕСТИТЬ ТаблицаДокументов |ИЗ | &ТаблицаДокументов КАК ТаблицаДокументов | |ИНДЕКСИРОВАТЬ ПО | НомерТипа |;"; Запрос.УстановитьПараметр("ТаблицаДокументов",ТаблицаДокументов); Префикс=""; Суффикс="ПОМЕСТИТЬ ДатыДокументов"; Для Каждого СтрокаСоответствия Из СоответствиеНомераТипаИИмени Цикл Запрос.УстановитьПараметр("НомерТипа"+Формат(СтрокаСоответствия.Значение,"ЧГ="),СтрокаСоответствия.Значение); ТекущееИмяДокумента=СтрокаСоответствия.Ключ; Запрос.Текст=Запрос.Текст+Префикс+" |ВЫБРАТЬ | ТаблицаДанных.Ссылка, | ТаблицаДанных.Дата |"+Суффикс+" |ИЗ | Документ."+ТекущееИмяДокумента+" КАК ТаблицаДанных | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаДокументов КАК ТаблицаДокументов | ПО ТаблицаДанных.Ссылка = ТаблицаДокументов.Документ | И (ТаблицаДокументов.НомерТипа = &НомерТипа"+Формат(СтрокаСоответствия.Значение,"ЧГ=")+") |"; Суффикс=""; Префикс="ОБЪЕДИНИТЬ ВСЕ"; КонецЦикла; Запрос.Текст=Запрос.Текст+" |ИНДЕКСИРОВАТЬ ПО |ТаблицаДанных.Ссылка;"; Запрос.Текст=Запрос.Текст+ " |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Остатки.Организация, | Остатки.ВидРасхода, | Остатки.ЭлементРасхода, | Остатки.СчетУчета, | Остатки.Валюта, | Остатки.ДоговорКонтрагента, | Остатки.РасчетныйДокумент, | Остатки.СтатусыПартийУСН, | Остатки.Партия, | Остатки.ОтражениеВУСН, | Остатки.СтатусыОплатыРасходовУСН, | Остатки.СтатусыОплатыРасходовУСН.Порядок КАК СтатусыОплатыРасходовУСНПорядок, | Остатки.Количество, | Остатки.Сумма, | Остатки.НДС, | Остатки.НомерСтрокиДокумента КАК НомерСтрокиДокумента, | Остатки.РеквизитыДокументаОплаты, | ЕСТЬNULL(ДатыДокументовПартии.Дата, ДАТАВРЕМЯ(1, 1, 1)) КАК ПартияДата, | ЕСТЬNULL(ДатыДокументовРасчетныхДокументов.Дата, ДАТАВРЕМЯ(1, 1, 1)) КАК РасчетныйДокументДата |ИЗ | Остатки КАК Остатки | ЛЕВОЕ СОЕДИНЕНИЕ ДатыДокументов КАК ДатыДокументовПартии | ПО Остатки.Партия = ДатыДокументовПартии.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ ДатыДокументов КАК ДатыДокументовРасчетныхДокументов | ПО Остатки.РасчетныйДокумент = ДатыДокументовРасчетныхДокументов.Ссылка | |УПОРЯДОЧИТЬ ПО | СтатусыОплатыРасходовУСНПорядок, | ПартияДата, | РасчетныйДокументДата, | НомерСтрокиДокумента"; ТЗ=Запрос.Выполнить().Выгрузить(); КонецФункции |
|||
123
H A D G E H O G s
25.10.13
✎
12:41
|
1) Фильтры на ВТ сами крутите.
2) Не уверен в связке ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТаблицаДокументов КАК ТаблицаДокументов | ПО ТаблицаДанных.Ссылка = ТаблицаДокументов.Документ | И (ТаблицаДокументов.НомерТипа =&НомерТипа Будет ли тут задействованы индексы (2 простых, 1-ый - индекс на ссылку в таблицы шапки документа, 2-ой - индекс временной таблицы). 3) Лучше выполнять на сервере 4) Респект ptiz за идею! |
|||
124
Coldboy
25.10.13
✎
12:46
|
и кто же лучше сделал. спасибо большое буду прробывать оба варианта. результат потом расскажу.
|
|||
125
ptiz
25.10.13
✎
12:53
|
Небольшая поправка...
после цикла Для каждого Тип Из Метаданные.РегистрыНакопления.РасходыПриУСН.Измерения.Партия.Тип.Типы() Цикл ... КонецЦикла надо еще на всякий пожарный цикл по типам РасчетныйДокумент: Для каждого Тип Из Метаданные.РегистрыНакопления.РасходыПриУСН.Измерения.РасчетныйДокумент.Тип.Типы() Цикл ИмяМД = Метаданные.НайтиПоТипу(Тип).Имя; Если МассивИмен.Найти(ИмяМД) = Неопределено Тогда МассивИмен.Добавить(ИмяМД); КонецЕсли; КонецЦикла; Хотя оптимальнее по методу H A D G E H O G s обойти таблицу и добавить только задействованные типы в МассивИмен. |
|||
126
H A D G E H O G s
25.10.13
✎
12:54
|
(125) Это если на сервере, оптимальнее. А так - не уверен.
|
|||
127
Coldboy
25.10.13
✎
14:00
|
пробывал ваши оба варианта, ну скажем быстрее, но не так как с первым вариантом где идет упорядочивание ...
|
|||
128
Coldboy
25.10.13
✎
14:01
|
мб вариант (126) сделал не совсем правильно.
|
|||
129
H A D G E H O G s
25.10.13
✎
14:07
|
(127) Зато алгоритм правильный.
А в числовых показателях что? |
|||
130
Coldboy
25.10.13
✎
14:20
|
(129) а что в них? они по ОСВ не идут эти числа, по ОСВ вроде все в 0 закрывается, кроме 20 бываеют там по 0.01 копейки висят.
|
|||
131
Coldboy
25.10.13
✎
14:32
|
еще момент, есть общий модуль общепитовский, теперь он утягивает все это дело в следующей строчке
РегистрОстатков = РегистрыБухгалтерии.Хозрасчетный; СтрокаОстатков.Количество = РегистрОстатков.Остатки(МоментВремени,,СтруктураОтбора,"","Количество")[0].КоличествоОстатокДт; Если СтрокаОстатков.Количество < 0 Тогда СтрокаОстатков.Количество = 0; КонецЕсли; все это в цикле Для Каждого СтрокаПроизводства Из ТаблицаПроизводства Цикл КонецЦикла; как думаете из таблицыпроизводство взять номенклатуру все в запрос получить ТЗ и потом делать НайтиСтроки(), чем каждый раз искать |
|||
132
ptiz
25.10.13
✎
14:36
|
(131) Правильно мыслишь.
|
|||
133
H A D G E H O G s
25.10.13
✎
14:36
|
Жесть, жесть, жесть.
|
|||
134
Coldboy
25.10.13
✎
14:37
|
(133) что я так сильно туплю?
|
|||
135
ptiz
25.10.13
✎
14:37
|
(134) Нет, это разработчики это чуда тупили.
|
|||
136
H A D G E H O G s
25.10.13
✎
14:38
|
Мы напишем собственную Библию. Меньше Содомы, больше Гоморры.
|
|||
137
Coldboy
25.10.13
✎
14:39
|
ну у них свое было мнение. у вас свое.
РегистрОстатков.Остатки(МоментВремени,,СтруктураОтбора,"","Количество")[0].КоличествоОстатокДт; так быстрее работает или можно Запрос.Текст = "ТутаВозьмуОстаточную таблицу." |
|||
138
ptiz
25.10.13
✎
14:39
|
(127) Жаль у меня базы данных нет с большим этим регистром, чтобы проверить. На самом деле, большого ускорения и не должно было получиться, тут, скорее, спортивный интерес.
|
|||
139
piter3
25.10.13
✎
14:41
|
(137) запросом однозначно.
|
|||
140
H A D G E H O G s
25.10.13
✎
14:42
|
(138) Да ладно. Если остатки закрываются - должно помочь.
|
|||
141
Coldboy
25.10.13
✎
14:42
|
ну ваши варианты быстрее первоначального намного. причина очевидна этих выпуском, которые в партиях участвуют их в день по 200 штук где-то.
большое ускорение я вижу тока, когда упорядночить убираю эти 2 параметра и все. (138) меня интересует быстрая скорость ибо закрытие месяца(восстановление последовательности) на недели затягивается. |
|||
142
Coldboy
25.10.13
✎
14:44
|
(140) оставил варианта ptiz, т.к. в вашем чую я косякнул, ошибки не валит, но не верю я своим рукам )
|
|||
143
piter3
25.10.13
✎
14:48
|
+ к (139)
ВЫБРАТЬ ХозрасчетныйОстатки.КоличествоОстатокДт из РегистрБухгалтерии.Хозрасчетный.Остатки(&дата,Счет=&Счет,&видысубконто,Организация=&Организация и Субконто1=&Номенклатура и Субконто2=&склад) КАК ХозрасчетныйОстатки |
|||
144
Coldboy
25.10.13
✎
14:51
|
(143) тока Субконто1 В(&СписокНоменклатура)
тока один момент вместе даты, там моментвремени, а в момнете дата и документ, это как отразить. |
|||
145
Coldboy
25.10.13
✎
14:53
|
единственный момент в таблице производства номеклатура может троится и тд. а они видать каждый раз лазиют для контроля количества, если <0 может быть, то дальше в мниус не идти.
|
|||
146
Coldboy
25.10.13
✎
14:54
|
РегистрОстатков.Остатки(МоментВремени,,СтруктураОтбора,"","Количество")[0].КоличествоОстатокДт;
будет медленее работать , чем ВЫБРАТЬ ХозрасчетныйОстатки.КоличествоОстатокДт из РегистрБухгалтерии.Хозрасчетный.Остатки(&дата,Счет=&Счет,&видысубконто,Организация=&Организация и Субконто1=&Номенклатура и Субконто2=&склад) КАК ХозрасчетныйОстатки ? |
|||
147
piter3
25.10.13
✎
14:55
|
(144) смотря в каком месте смотреть.
СтруктураПараметров.МоментВремени |
|||
148
Coldboy
25.10.13
✎
14:56
|
ну вот РегистрОстатков.Остатки(МоментВремени,,СтруктураОтбора,"","Количество")[0].КоличествоОстатокДт; щас стало утягивать время, думаю как быть теперь
|
|||
149
piter3
25.10.13
✎
14:57
|
(146) еще как и чем больше объемы...
|
|||
150
piter3
25.10.13
✎
14:57
|
(148) запрос пишешь
|
|||
151
Coldboy
25.10.13
✎
14:59
|
там по 1000 строчек, и 1000 раз такая операция выполняется.
запрос. как ваш запрос все нормально, тока видысубконто как вы сделали я не понял, это в субконто да? вместо даты, моментвремени пойдет? |
|||
152
H A D G E H O G s
25.10.13
✎
15:00
|
(151) Почитай книжки.
|
|||
153
piter3
25.10.13
✎
15:07
|
(150) можешь сначала подготовить тз и подсунуть в параметры. для ингридентов по моему там еще есть замены, аналоги.смотри внимательно.
видысубконто=Новый СписокЗначений; видысубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура); видысубконто.Добавить(ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.склад); |
|||
154
Coldboy
25.10.13
✎
15:08
|
Перед циклом вынес
Запрос = Новый Запрос; МоиВидыСубконто = Новый СписокЗначений; МоиВидыСубконто.Добавить( ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура); МоиВидыСубконто.Добавить( ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады); в цикле вместо РегистрОстатков.Остатки(МоментВремени,,СтруктураОтбора,"","Количество")[0].КоличествоОстатокДт; Запрос.Текст = "ВЫБРАТЬ ХозрасчетныйОстатки.КоличествоОстатокДт из РегистрБухгалтерии.Хозрасчетный.Остатки(&МоментВремени,Счет=&Счет,&видысубконто,Организация=&Организация и Субконто1=&Номенклатура и Субконто2=&склад) КАК ХозрасчетныйОстатки" Запрос.УстановитьПараметр("МоментВремени",МоментВремени); Запрос.УстановитьПараметр("Счет",СтруктураОтбора.Счет); Запрос.УстановитьПараметр("Организация",СтруктураОтбора.Организация); Запрос.УстановитьПараметр("Субконто1",СтруктураОтбора.Субконто1); Запрос.УстановитьПараметр("Субконто2",СтруктураОтбора.Субконто2); Запрос.УстановитьПараметр("видысубконто",МоиВидыСубконто); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда СтрокаОстатков.Количество = Выборка.КоличествоОстатокДт; Иначе СтрокаОстатков.Количество = 0; КОнецЕсли; |
|||
155
Coldboy
25.10.13
✎
15:09
|
тока параметры вметсе номенклатуры субконто1.
|
|||
156
piter3
25.10.13
✎
15:10
|
ХозрасчетныйОстатки.КоличествоОстатокДт оберни естьnull тогда
проверять в обходе не нужно будет. так все лучше чем рарус наваял |
|||
157
Coldboy
25.10.13
✎
15:11
|
а ЕстьNULL(ХозрасчетныйОстатки.КоличествоОстатокДт,0) Тогда можно сразу Выборка[0].КоличествоОстатокДт делать да?
|
|||
158
piter3
25.10.13
✎
15:12
|
(157) угу
|
|||
159
Coldboy
25.10.13
✎
15:21
|
ну пасибо прям то ли мне повезло то ли глючит один и тот же документ, на этом модуле, в 7 раз быстрее проходит все это.
|
|||
160
Coldboy
25.10.13
✎
15:22
|
с 14сек до 2 секунд сократилось.
|
|||
161
Coldboy
25.10.13
✎
15:24
|
хм еще бы их закрытый модуль по ключу защиты оптимизировать, вообще круто было бы.
|
|||
162
Coldboy
25.10.13
✎
16:57
|
ускорение работы процедуры Таблица.Свернуть()
СтрокиАвтопеределов = ТаблицаПроизводства.НайтиСтроки(Новый Структура("ИзАвтопеределов", Истина)); ТаблицаАвтопеределов = ТаблицаПроизводства.Скопировать(СтрокиАвтопеределов, "НоменклатурнаяГруппа, Ингредиент, РецептураАвтопередела, ИзАвтопеределов, КоличествоИнгредиентаНорма, КоэффициентИнгредиента, ЕдиницаИзмеренияИнгредиента"); ТаблицаАвтопеределов.Свернуть("НоменклатурнаяГруппа, Ингредиент, РецептураАвтопередела, ИзАвтопеределов, КоэффициентИнгредиента, ЕдиницаИзмеренияИнгредиента", "КоличествоИнгредиентаНорма"); можно через запрос такое сделать? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |