Имя: Пароль:
1C
1С v8
Зависает при поиске документа по номеру
,
0 evorle145
 
25.05.12
17:26
1с 8.2 Комплексная автоматизация
Добавил раскраску документов и теперь не всегда, но случается зависание при поиске документа по номеру

Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
     ЦветЗеленый  = Новый Цвет(195,251,197);
   ЦветСеребристый = Новый Цвет (220,220,220);
   ЦветАнтикБелый = Новый Цвет (255,210,129);

Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
   Если ДанныеСтроки.Ссылка.СтатусЗаказНаряда = Справочники.бит_ус_СтатусыЗаказНарядов.Закрыт И ДанныеСтроки.Проведен  Тогда
               ОформлениеСтроки.ЦветФона = ЦветЗеленый;
           ИначеЕсли ДанныеСтроки.Ссылка.СтатусЗаказНаряда = Справочники.СтатусыЗаказНарядов.ВРемзоне Тогда
               ОформлениеСтроки.ЦветФона = ЦветАнтикБелый;
           ИначеЕсли ДанныеСтроки.Ссылка.Запчасти.Количество() > 0 Тогда
               ОформлениеСтроки.ЦветФона = ЦветСеребристый;
           КонецЕсли;
       КонецЦикла;
 
КонецПроцедуры
Подскажите, с чем может быть связано периодически появляющееся зависание?
1 H A D G E H O G s
 
25.05.12
17:28
ДанныеСтроки.Ссылка.СтатусЗаказНаряда

Зло
2 DmitriyNG
 
25.05.12
17:28
Возможно долго обрабатывает эту строку "ИначеЕсли ДанныеСтроки.Ссылка.Запчасти.Количество() > 0 Тогда"
3 H A D G E H O G s
 
25.05.12
17:29
4 Fragster
 
гуру
25.05.12
17:29
сделать таблицу с индексами и ссылками, заполнить её из данных строки, сделать запрос, в котором присоединить огтовые статусы заказов, в обходе оформлений - по индексу получать статус. если всё равно медленно - то можно кэшировать
5 H A D G E H O G s
 
25.05.12
17:29
(2) Слона то я и не приметил
6 Fragster
 
гуру
25.05.12
17:30
присоединить готовые статусы заказов и количества, да
7 evorle145
 
25.05.12
17:37
(4), не совсем понял, про запрос. Какие таблицы в запросе обрабатывать?
8 Fragster
 
гуру
25.05.12
17:48
типа так:

Таб = Новый ТаблицаЗначений;
Таб.Колонки.Добавить("Индекс", ПолучитьОписаниеТиповЧисло(10,0));
Таб.Колонки.Добавить("Ссылка", ПолучитьОписаниеТиповЧисло(10,0));
Сч = 0;
Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
   ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки;
   Стр = Таб.Добавить()
   Стр.Индекс = Сч;
   Сч = Сч + 1;
   Стр.Ссылка = ДанныеСтроки.Ссылка;
КонецЦикла;

Запрос = Новый Запрос;// ...... в котором мы заполняем данные и получаем данные, отсортированные по индексу
ТабРезультат = Запрос.Выполнить().Выгрузить();

Сч = 0;
Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
   ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки;
   Стр = ТабРезультат[Сч];
   Сч = Сч + 1;
   Если Стр.СтатусЗаказНаряда = Справочники.бит_ус_СтатусыЗаказНарядов.Закрыт И ДанныеСтроки.Проведен  Тогда
               ОформлениеСтроки.ЦветФона = ЦветЗеленый;
           ИначеЕсли Стр.СтатусЗаказНаряда = Справочники.СтатусыЗаказНарядов.ВРемзоне Тогда
               ОформлениеСтроки.ЦветФона = ЦветАнтикБелый;
           ИначеЕсли Стр.КоличествоЗапчастей > 0 Тогда
               ОформлениеСтроки.ЦветФона = ЦветСеребристый;
           КонецЕсли;
       КонецЦикла;
КонецЦикла;
9 evorle145
 
25.05.12
17:53
Ого, спасибо! Теперь все понял, что имелось ввиду по индексами и запросом, буду пробовать сейчас, только не пойму, в чем здесь выигрыш в плане скорости?
10 х86
 
25.05.12
17:54
(9)в чем здесь выигрыш в плане скорости - один запрос к БД
11 Fragster
 
гуру
25.05.12
17:57
если и так медленно - то можно дальше усовершенствовать через кэширование результатов
12 evorle145
 
25.05.12
18:01
(9), то есть у меня для каждой строки идет обращение к базе "Если ДанныеСтроки.Ссылка.Запчасти.Количество() > 0 Тогда", а здесь для каждой строки только "ДанныеСтроки.Ссылка", а все остальное определяется в запросе, верно я понял?
(11), спасибо, сначала потестирую ваш способ, может и кеширование не потребуется если уберу ДанныеСтроки.Ссылка.Запчасти.Количество()
13 evorle145
 
25.05.12
18:03
*ошибся, ссылка не на (9), а на (10)
14 Fragster
 
гуру
25.05.12
18:03
(12) для каждой строки ДанныеСтроки.Ссылка.СтатусЗаказНаряда читает шапку целиком из базы, а ДанныеСтроки.Ссылка.Запчасти.Количество() - еще и таб часть. ДанныеСтроки.Ссылка ничего не читает, потому что она у тебя уже есть
15 evorle145
 
25.05.12
18:04
(12),Все понял, очень доходчиво говорите, дайте время потестировать
16 evorle145
 
25.05.12
18:05
*снова ошибся, хотел написать так:
(14),Все понял, очень доходчиво говорите, дайте время потестировать
17 evorle145
 
28.05.12
11:48
Спасибо, время поиска сильно уменьшилось, и зависаний вроде больше нет.
AdBlock убивает бесплатный контент. 1Сергей