|
Ограничение списка видимыми объектами | ☑ | ||
---|---|---|---|---|
0
SMakcik
21.09.11
✎
16:11
|
Привет Всем!
Есть запрос вида: ВЫБРАТЬ РАЗРЕШЕННЫЕ ТоварыКПередачеСоСкладовОстатки.ДокументПередачи КАК Документ, СУММА(ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток) КАК КоличествоОстаток ИЗ РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, ) КАК ТоварыКПередачеСоСкладовОстатки СГРУППИРОВАТЬ ПО ТоварыКПередачеСоСкладовОстатки.ДокументПередачи ИМЕЮЩИЕ МАКСИМУМ(ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток) <> 0 Который получает документы еще не отгруженные. Для показа статуса исползуеться такой вид Функция ВернутьСтатусРеализацииТоваровУслуг() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ТоварыКПередачеСоСкладовОстатки.ДокументПередачи КАК Документ, | СУММА(ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток) КАК КоличествоОстаток |ИЗ | РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, ) КАК ТоварыКПередачеСоСкладовОстатки | |СГРУППИРОВАТЬ ПО | ТоварыКПередачеСоСкладовОстатки.ДокументПередачи | |ИМЕЮЩИЕ | МАКСИМУМ(ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток) <> 0"; //Запрос.УстановитьПараметр("СписокДокументов", СписокДокументов); Возврат Запрос.Выполнить().Выбрать(); КонецФункции Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок) ЕстьЯчейкаСтатуса = ЭлементыФормы.Список.Колонки.Статус.Видимость; Если ЕстьЯчейкаСтатуса Тогда Массив.Добавить(ОформлениеСтроки.ДанныеСтроки.Ссылка); //КонецЦикла; Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки; Статус = ""; Если ДанныеСтроки.Проведен Тогда Результат.Сбросить(); Если Результат.НайтиСледующий(ДанныеСтроки.Ссылка, "Документ") Тогда Если ДанныеСтроки.Ссылка.Товары.Итог("Количество") <> Результат.КоличествоОстаток Тогда ОформлениеСтроки.Ячейки["Статус"].ЦветТекста = СинийЦвет; Иначе ОформлениеСтроки.Ячейки["Статус"].ЦветТекста = КрасныйЦвет; КонецЕсли; Статус = "НЕ ОТГРУЖЕНА"; Иначе ОформлениеСтроки.Ячейки["Статус"].ЦветТекста = ЗеленыйЦвет; Статус = "ОТГРУЖЕНА"; КонецЕсли; РезультатПоДолгам.Сбросить(); Если РезультатПоДолгам.НайтиСледующий(ДанныеСтроки.Ссылка) Тогда ОформлениеСтроки.Ячейки["СуществуютДолги"].УстановитьКартинку(БиблиотекаКартинок.Важно); ОформлениеСтроки.Ячейки["СуществуютДолги"].УстановитьКартинку(БиблиотекаКартинок.Утвердить); КонецЕсли; КонецЕсли; ОформлениеСтроки.Ячейки["Статус"].УстановитьТекст(Статус); КонецЦикла; КонецЕсли; КонецПроцедуры Вопрос: Как повысить производительность данной кострукции. Первое это ограничить запрос списком видимых документов, но для этого его надо как-то получить. Можно из Оформления строк, но там нужно всегда перебирать строки, что еще дольше работает. |
|||
1
Axel2009
21.09.11
✎
16:12
|
ДанныеСтроки.Ссылка.Товары.Итог("Количество")
перекинуть на запрос |
|||
2
SMakcik
21.09.11
✎
16:14
|
(1) Так было но тоже работает очень долго
|
|||
3
SMakcik
21.09.11
✎
16:15
|
Еще дольше даже
|
|||
4
Axel2009
21.09.11
✎
16:17
|
и как же это выглядело?
|
|||
5
SMakcik
21.09.11
✎
16:19
|
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТоварыКПередачеСоСкладовОстатки.ДокументПередачи КАК Документ, //| СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество, | СУММА(ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток) КАК КоличествоОстаток |ИЗ | РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(, ) КАК ТоварыКПередачеСоСкладовОстатки //| ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары //| ПО ТоварыКПередачеСоСкладовОстатки.ДокументПередачи = РеализацияТоваровУслугТовары.Ссылка | |СГРУППИРОВАТЬ ПО | ТоварыКПередачеСоСкладовОстатки.ДокументПередачи | |ИМЕЮЩИЕ | МАКСИМУМ(ТоварыКПередачеСоСкладовОстатки.КоличествоОстаток) <> 0"; |
|||
6
Axel2009
21.09.11
✎
16:21
|
(5) ниче что там перемножение данных идет? и тупняк поэтому?
|
|||
7
SMakcik
21.09.11
✎
16:23
|
А как ты собираешься по другому сделать
|
|||
8
SMakcik
21.09.11
✎
16:24
|
Да дело даже не в этой строке а в запросе, который 85% времени занимает
|
|||
9
aple313
21.09.11
✎
16:25
|
В типовых обычно делается двумя запросами. Первый запрос собирает массив ссылок по которым накладывается условие в запросе. Второй цикл это вывод статусов.
Обычно не занимает много времени. |
|||
10
Axel2009
21.09.11
✎
16:25
|
(8) какой запрос? и где вызов этого запроса?
|
|||
11
aple313
21.09.11
✎
16:25
|
*двумя циклами
|
|||
12
SMakcik
21.09.11
✎
16:26
|
(9) и так было но что-то не понравилось
|
|||
13
SMakcik
21.09.11
✎
16:26
|
Который показан уже в трех постах, который берет остатки
|
|||
14
SMakcik
21.09.11
✎
16:28
|
(9) тут дело в том, что процедура обновления вызываеться один раз, а при получении данных (откуда можно вытащить ОформленияСтрок) нет. Поэтому Запрос получения остатков вызываеться несколько раз, хоть и с ограничением
|
|||
15
SMakcik
21.09.11
✎
16:54
|
больше ни у кого нет мыслей
|
|||
16
Axel2009
21.09.11
✎
16:58
|
(15) запрос нужно переписать правильно, а не так как в (5) с учетом комментариев
|
|||
17
SMakcik
21.09.11
✎
16:59
|
А что такм не правильно, не считая запятых не нужных которые я не убрал
|
|||
18
SMakcik
21.09.11
✎
16:59
|
я спрашиваю идеи а не то что правильно или не правильно, если не знаешь так и молчи
|
|||
19
Axel2009
21.09.11
✎
17:05
|
сколько записей возвращает запрос из (0) по документам передачи?
|
|||
20
SMakcik
21.09.11
✎
17:05
|
ну 50 или 10 может, это то причем
|
|||
21
SMakcik
21.09.11
✎
17:06
|
Тут самый смысл чтобы ограничить количество раз выполнения, а не извращаться над запросом. Запрос самый простой и легкий
|
|||
22
SMakcik
21.09.11
✎
17:06
|
+(20) 100
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |