Имя: Пароль:
1C
1С v8
Как ускорить обращение к одной и той же таблице и данным?
0 ИС-2
 
naïve
19.08.13
17:46
В модуле документа РеализацияТоваровУслуг есть множество проверок, которые используются запрос к документу Документы.РеализацияТоваровУслуг (по наличию дублей, лимитам и т.д).

Сейчас надо запустить эти проверки для множества документов т.е классический запрос в цикле. Кроме получения самого объекта будет выполняться кучу раз запрос к одной и той же таблице.
Для оптицизации я переделал так, что перед выполнением запроса все нужные данные пихаются в менеджер временных таблиц и проверки в объкте используют его. Т.е запрос в цикле остался, но без обращения в запросе  к данным из базы.

Можно ли как-то ускорить получение объекта?
Есть ли какая-то настройка для ускорения обращения к данной таблице?
Можно ли на определенный момент передать 75% ресурсов системы определенному пользователю?

Идеальный вариант переписать все в один запрос, но после этого ЗУПовские запросы будут отдыхать...
1 Fragster
 
модератор
19.08.13
17:50
сделать все проверки самому одним запросом, а документы записывать в режиме обмена данных
2 Fragster
 
модератор
19.08.13
17:51
а зачем кучу документов перепроводить?
3 Злопчинский
 
19.08.13
17:57
> Сейчас надо запустить эти проверки для множества документов т.е классический запрос в цикле.
- это разовая работа? или таковое будет выполняться постоянно регламентом? если разово - забей нафиг на оптимизацию, времени больше потратишь
4 Лефмихалыч
 
19.08.13
18:01
1. убрать ненужные проверки. Например выгрести одним запросом только те документы, которые проходят по условиям проверок
2. убрать запрос в цикле
3. возможно добавить индексов
5 ИС-2
 
naïve
20.08.13
07:16
(2) они не перепроводятся. Запускается вечером только куча проверок т.к какие-то данные в течении дня могли изменить.
6 el-gamberro
 
20.08.13
07:23
Пусть каждая проверка работает с массивом документов. Так избавишься от цикла.
7 el-gamberro
 
20.08.13
07:25
ИМХО требуется более подробное разъяснение задачи
8 shuhard
 
20.08.13
07:28
(0) ответ очевидный,
всё необходимое надо хранить вне документа
9 ИС-2
 
naïve
20.08.13
07:40
(6) сейчас переделываю. Все переношу в модуль менеджера у документа
(7) надо провести все проверки за 30 секунд. Вот и вся задача
(8) это что?
10 Defender aka LINN
 
20.08.13
08:05
(9) А цифра 30 секунд - она как-то обоснована, или просто мухи на потолке так сложились?
11 ИС-2
 
naïve
20.08.13
08:52
(10) прекрасная мотивация к самосовершенствованию. А так, если бизнесу надо, то 1Cник должен сделать
12 shuhard
 
20.08.13
08:55
(9) это дружок называется регистры
13 Леха Дум
 
20.08.13
08:56
(9) 30 секунд - это на один документ?
14 ИС-2
 
naïve
20.08.13
09:02
(12) а вот и нет. Если мне надо анализировать данные данные самого документа, то запрос по документа работает быстрее чем по РН. Это если не делать свой РН, который дублирует документ. А в моей типовой подходящего регистра нет (проджаи не содержат нужной информации).
(13) нет на 1500 :D
15 ИС-2
 
naïve
20.08.13
09:03
почему же запрос не может работать с объектом напрямую
16 Леха Дум
 
20.08.13
09:05
(14) ну тогда не вижу ничего плохого в запросах круче чем в ЗУПе, главное результат запроса, а не его размер
17 ИС-2
 
naïve
20.08.13
09:12
(16) тут даже не знаю куда пойти в решении задачи - везде зло.
1) Простой и понятный код - медленно. Запрос в цикле
2) Дублирование функционала - тяжело сопровождать
3) Один код и для проверки объекта и массива ссылок - тяжелый для анализа и модификаций

вот и не знаю как делать
18 Леха Дум
 
20.08.13
09:42
(17) укажи для начала хотя бы какие проверки. Я тоже думал, что какой то вопрос можно только циклом решить, но оказалось нужно немного дольше подумать :)
19 ИС-2
 
naïve
20.08.13
09:52
(18) можно, но решение слишком сложное (дорогое) получается. Пока буду дублировать функционал, как бы мне не было противно это.

Вот пример. Клиенту можно отправить подарок, если сумма продаж  (без подарков) больше опредленного значения. Могут создать документ пустышку основной продажи, ввести подарок, отменить основной документ.
20 vde69
 
модератор
20.08.13
10:01
(19) подобную задачу следует решать так

1. документ при проведении пишет себя в РС "КРасчету"
2. регламентное задание смотрит делает запрос к РС "КРасчету" и вызывает обработку документов, результат пишется в регистр остатков "Подарки" (план), далее идет проверка план/факт и если нужно уведомляем менеджера о необходимости подарка
3. менеджер делает документ "выдача подарка" который пишет факт в регистр "Подарки"

на выходе имеем
1. отгрузки не тормозят (нету там расчетов)
2. получаем искомый результат
21 vde69
 
модератор
20.08.13
10:03
(20)+ и разнесение во времени план/факт по подаркам, это тоже важно по тому что обычно подарки дают после оплаты или после истечения срока возврата...
22 ИС-2
 
naïve
20.08.13
10:07
(20) мне тоже нравиться вариант с рег. заданием, но по тех. причнам он не возможен.

На ПолучитьОбъект() уходит 45% процентов ресурсов. Как-то можно его ускорить. На запросы с менеджером временных таблиц меньше
23 ИС-2
 
naïve
20.08.13
11:19
сделал псевдо получение объкта.
1) Создаю новый документ
2) Заполняю свойства объекта по ссылке (ЗаполнитьЗначенияСвойств)

в процентном соотношении стало быстрее
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.