|
Оптимизация отчетов и обработок в 1С8 🠗 (Sammo 27.08.2013 14:23) | ☑ | ||
---|---|---|---|---|
0
sasha_nik
27.08.13
✎
13:34
|
Механизм ускорения отчетов/обработок в 1С8 (все нижеперечисленное протестирвоано с помощью замера производительности, такая оптимизиция дает прирост производительности до 3-х раз).
1. В отчетах, где используется выборка из регистров накопления (Остатки, Обороты), при возможности задавать критерии отбора по измерениям, а также нижнюю и верхнюю границу интервала (в случае извлечения оборотов) Пример: Медленно: Запрос.Текст=»Выбрать |* из |ИЗ |РегистрНакопления.Продажи.Обороты(,, Регистратор, ) как Продажи |Где ЗаказПокупателя в (&СписокЗаказовПокупателей) КАК Продажи Быстро: Запрос.Текст=»Выбрать |* из |ИЗ |РегистрНакопления.Продажи.Обороты(&Дата1,&Дата2, Регистратор,ЗаказПокупателя в (&СписокЗаказовПокупателей)) КАК Продажи Примечание: трудности при установке интервала дат могут возникать из-за того, что в базе зачастую Дата оплаты по заказу < Даты заказа покупателя. Поэтому перевести на интервал дат возможно только регистры, связанные с отгрузками (Продажи, Продажи себестоимость), т.к. дата накладной всегда должна быть > даты заказа покупателя (для этого сделана специальная защита). Регистры «Расчеты» и «Взаиморасчеты» в ряде случаев перевести на интервал дат невозможно. 2. Если из запроса извлекаются ссылки (документы, справочники), постараться, чтобы при переборке запросов не извлекались реквизиты этих ссылок, а все необходимые реквизиты этих ссылок извлекались сразу в запросе Пример: Медленно: Запрос=»Выбрать |ДокЗак.Ссылка как ЗаказПокупателя |Из Документ.ЗаказПокупателя |»; Выборка=Запрос.Выполнить().Выбрать(); Пока Выборка.СледующийПоЗначениюПоля(«ЗаказПокупателя») Цикл ЗаказПокупателя=Выборка.ЗаказПокупателя; Контрагент=ЗаказПокупателя.Контрагент; ДатаЗаказа=ЗаказПокупателя.Дата; …. КонецЦикла Быстро: Запрос=»Выбрать |ДокЗак.Ссылка как ЗаказПокупателя, |ДокЗаказ.Контрагент, ДокЗаказ.Дата |Из Документ.ЗаказПокупателя |»; Выборка=Запрос.Выполнить().Выбрать(); Пока Выборка.СледующийПоЗначениюПоля(«ЗаказПокупателя») Цикл ЗаказПокупателя=Выборка.ЗаказПокупателя; Контрагент=Выборка.Контрагент; ДатаЗаказа=Выборка.Дата; …. КонецЦикла Примечание: Такую оптимизацию можно сделать в простых запросах, в сложных запросах, использующих выборки из нескольких документов одновременно, с большим количеством условий, соединений и т.д., оптимизировать таким образом весьма трудоемко и может привести к ошибкам. 3. Перевод функция для выполнения на сервер (для клиент-серверного варианта). Следует помнить, что передача с клиента на сервери обратно списка значений и объекта не допускается. Можно передавать ссылки, массивы, таблицы значений Перевод осуществляется таким образом: //В модуле общего назначения Функция ПроцентОплатыПоЗаказуПокупателя() #Если Клиент тогда Возврат Функция ПроцентОплатыПоЗаказуПокупателя_НаКлиенте(); #КонецЕсли КонецФункции //В служебном модуле, предназначенном для исполнения как на сервере, так и на клиенте &НаКлиенте Функция ПроцентОплатыПоЗаказуПокупателя_НаКлиенте() Возврат Функция ПроцентОплатыПоЗаказуПокупателя_НаСервере(); КонецФункции &НаСервере Функция ПроцентОплатыПоЗаказуПокупателя_НаКлиенте() //Определение процента оплаты заказа покупателя Возврат ПроцентОплаты; КонецФункции |
|||
1
sasha_nik
27.08.13
✎
13:36
|
Вместо "Возврат Функция" читать "Возврат"
|
|||
2
Fragster
модератор
27.08.13
✎
13:36
|
продолжайте наблюдения
|
|||
3
vyaz
27.08.13
✎
13:37
|
а в чем вопрос?
|
|||
4
sasha_nik
27.08.13
✎
13:37
|
А почему обязательно должен быть вопрос. Я жду, может кто дополнит что-нибудь, а своим опытом мне не жалко поделиться.
|
|||
5
vyaz
27.08.13
✎
13:38
|
(0) а если это ликбез, то к 1 пункту тогда уж добавить про влияние порядка измерений в регистре и про индексацию
|
|||
6
sasha_nik
27.08.13
✎
13:39
|
Про индексацию сам не совсем понимаю.
|
|||
7
Dmitry1c
27.08.13
✎
13:39
|
А уж как влияет заполнение видов субконто в регистре бухгалтерии..
|
|||
8
Starhan
27.08.13
✎
13:39
|
(4)>>А почему обязательно должен быть вопрос.
Dот ты щас взял и сломал мое представление о мисте... |
|||
9
sasha_nik
27.08.13
✎
13:40
|
А,понял, для такой выборки нужно, чтобы у измерения стоял признак "Индексировать". (в моем примере у измерения регистра "Заказ покупателя". Ну ладно, буду дальше оптимизировать.
|
|||
10
vyaz
27.08.13
✎
13:41
|
(6) говорят, что вроде как по индексированным полям отбор в запросе должен работать быстрей:) ну и важно в запросе порядок расположения условий после ГДЕ...
|
|||
11
sasha_nik
27.08.13
✎
13:41
|
Я на мисте недавно, а 1С-м занимаюсь (или маьсь с ним) уже 11 лет, 8-кой 7 лет, а вообще я самоучка.
|
|||
12
sasha_nik
27.08.13
✎
13:42
|
Всем большое спасибо, вечером зайду, посмотрю Ваши советы.
|
|||
13
ptiz
27.08.13
✎
13:42
|
Нам открыли глаза!
|
|||
14
Dmitry1c
27.08.13
✎
13:43
|
(12) зашел на мисту ты, спросить советов мудрых...
|
|||
15
Starhan
27.08.13
✎
13:44
|
(12) зачем ждать, нажми красную букву Я в правом-верхнем углу топика.
|
|||
16
H A D G E H O G s
27.08.13
✎
13:53
|
Что?
Это? Было? |
|||
17
Vitamax3
27.08.13
✎
14:08
|
С такими "достижениями" можно не только опытом делиться, а нужно уже книги писать.
|
|||
18
Starhan
27.08.13
✎
14:14
|
(16) атец, фитчами делился (БЕСПЛАТНО!!!)
|
|||
19
Sammo
27.08.13
✎
14:23
|
Читай профессиональную разработку
|
|||
20
kiruha
27.08.13
✎
14:35
|
Ну зачем ветку опустили - автор открыл глаза
Побежал переписывать |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |