|
Помощь в оптимизации кода. | ☑ | ||
---|---|---|---|---|
0
Март_1c
05.02.13
✎
12:41
|
Помогите в оптимизации следующего кода для Ут.Данное решение существенно замедляет вывод Журнала Заказов ((((. Журнал Заказов - формаСписка - Добавлена колонка Сумма_К - заполнение при выводе строки.
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Если ТипЗнч(ДанныеСтроки.Ссылка) = Тип("ДокументСсылка.ЗаказПокупателя")и ДанныеСтроки.Ссылка.Проведен = Истина Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказыПокупателей.Регистратор КАК Регистратор, | ЗаказыПокупателей.Номенклатура КАК Номенклатура, | ЗаказыПокупателей.Количество КАК Количество, | ЗаказыПокупателей.Цена КАК Цена, | ЗаказыПокупателей.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов |ПОМЕСТИТЬ Вт_Корректировка |ИЗ | РегистрНакопления.ЗаказыПокупателей КАК ЗаказыПокупателей |ГДЕ | ЗаказыПокупателей.Регистратор.ЗаказПокупателя = &Регистратор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЗаказыПокупателей.Регистратор, | ЗаказыПокупателей.Номенклатура, | ЗаказыПокупателей.Количество, | ЗаказыПокупателей.Цена, | ЗаказыПокупателей.СуммаВзаиморасчетов |ПОМЕСТИТЬ Вт_Исходник |ИЗ | РегистрНакопления.ЗаказыПокупателей КАК ЗаказыПокупателей |ГДЕ | ЗаказыПокупателей.Регистратор = &Регистратор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Группировка_без_регистратора.Номенклатура, | СУММА(Группировка_без_регистратора.Количество) КАК Количество, | СУММА(Группировка_без_регистратора.Цена) КАК Цена, | СУММА(Группировка_без_регистратора.СуммаВзаиморасчетов) КАК СуммаВзаиморасчетов |ИЗ | (ВЫБРАТЬ | Вт_Корректировка.Номенклатура КАК Номенклатура, | Вт_Корректировка.Количество КАК Количество, | Вт_Корректировка.Цена КАК Цена, | Вт_Корректировка.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов | ИЗ | Вт_Корректировка КАК Вт_Корректировка | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | Вт_Исходник.Номенклатура, | Вт_Исходник.Количество, | Вт_Исходник.Цена, | Вт_Исходник.СуммаВзаиморасчетов | ИЗ | Вт_Исходник КАК Вт_Исходник) КАК Группировка_без_регистратора | |СГРУППИРОВАТЬ ПО | Группировка_без_регистратора.Номенклатура |ИТОГИ | СУММА(СуммаВзаиморасчетов) |ПО | ОБЩИЕ"; Запрос.УстановитьПараметр("Регистратор" ,ДанныеСтроки.Ссылка) ; Попытка Результат = Запрос.Выполнить().Выгрузить().Получить(0).СуммаВзаиморасчетов; ОформлениеСтроки.Ячейки.Сумма_К.УстановитьТекст(Строка(Результат)); //ОформлениеСтроки.Ячейки.Сумма_К.ОтображатьТекст = Истина ; Исключение КонецПопытки; КонецЕсли; КонецПроцедуры |
|||
1
Ёпрст
05.02.13
✎
12:42
|
В ПриПолученииДанных выполняй свой запрос с условием на список..
|
|||
2
Лефмихалыч
05.02.13
✎
12:42
|
При получении данных это делается
|
|||
3
Ёпрст
05.02.13
✎
12:43
|
а так то, зачет.. для каждой строки свой запрос с кучей временных табличек.
|
|||
4
Ёпрст
05.02.13
✎
12:44
|
ну и два раза зачет, это получение кучу полей в запросе, когда в итоге нужна только СуммаВзаиморасчетов.
|
|||
5
AaNnDdRrEeYy
05.02.13
✎
12:44
|
зачем две одинаковые временные таблицы?
Вт_Корректировка и Вт_Исходник |
|||
6
Ёпрст
05.02.13
✎
12:44
|
как бэ, всё в топку.
|
|||
7
Reset
05.02.13
✎
12:45
|
Использовать виртуальные, а не физические таблицы + (1)(2)
|
|||
8
AaNnDdRrEeYy
05.02.13
✎
12:45
|
а вообще сделай реквизит в документе и заполняй его этими данными перед записью документа, вообще летать будет.
|
|||
9
Килограмм
05.02.13
✎
12:47
|
(8) - самый годный вариант. Это проще, чем осмыслять и перелапачивать весь этот код
|
|||
10
Килограмм
05.02.13
✎
12:48
|
Запрос в ПриВыводеСтроки это как запрос в цикле, только гораздо извращенней.
|
|||
11
AaNnDdRrEeYy
05.02.13
✎
12:52
|
в типовых это уже есть, реквизит называется СуммаДокумента в ней тупо итог по колонке сумма в таб части. Очень облегчает написание отчетов
|
|||
12
Март_1c
05.02.13
✎
12:53
|
Можно подробнее описать идею с выполнением когда в процедуре ПриПолученииДанных ?
|
|||
13
Март_1c
05.02.13
✎
20:06
|
Всем Спс за участие. Может кому то будет полезно .
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок) Попытка Для Каждого Стр из ОформленияСтрок Цикл Если ТипЗнч(Стр.ДанныеСтроки.Ссылка) = Тип("ДокументСсылка.ЗаказПокупателя")и Стр.ДанныеСтроки.Ссылка.Проведен = Истина Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказыПокупателей.Регистратор КАК Регистратор, | ЗаказыПокупателей.Номенклатура КАК Номенклатура, | ЗаказыПокупателей.Количество КАК Количество, | ЗаказыПокупателей.Цена КАК Цена, | ЗаказыПокупателей.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов |ПОМЕСТИТЬ Вт_Корректировка |ИЗ | РегистрНакопления.ЗаказыПокупателей КАК ЗаказыПокупателей |ГДЕ | ЗаказыПокупателей.Регистратор.ЗаказПокупателя = &Регистратор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЗаказыПокупателей.Регистратор, | ЗаказыПокупателей.Номенклатура, | ЗаказыПокупателей.Количество, | ЗаказыПокупателей.Цена, | ЗаказыПокупателей.СуммаВзаиморасчетов |ПОМЕСТИТЬ Вт_Исходник |ИЗ | РегистрНакопления.ЗаказыПокупателей КАК ЗаказыПокупателей |ГДЕ | ЗаказыПокупателей.Регистратор = &Регистратор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Группировка_без_регистратора.Номенклатура, | СУММА(Группировка_без_регистратора.Количество) КАК Количество, | СУММА(Группировка_без_регистратора.Цена) КАК Цена, | СУММА(Группировка_без_регистратора.СуммаВзаиморасчетов) КАК СуммаВзаиморасчетов |ИЗ | (ВЫБРАТЬ | Вт_Корректировка.Номенклатура КАК Номенклатура, | Вт_Корректировка.Количество КАК Количество, | Вт_Корректировка.Цена КАК Цена, | Вт_Корректировка.СуммаВзаиморасчетов КАК СуммаВзаиморасчетов | ИЗ | Вт_Корректировка КАК Вт_Корректировка | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | Вт_Исходник.Номенклатура, | Вт_Исходник.Количество, | Вт_Исходник.Цена, | Вт_Исходник.СуммаВзаиморасчетов | ИЗ | Вт_Исходник КАК Вт_Исходник) КАК Группировка_без_регистратора | |СГРУППИРОВАТЬ ПО | Группировка_без_регистратора.Номенклатура |ИТОГИ | СУММА(СуммаВзаиморасчетов) |ПО | ОБЩИЕ"; Запрос.УстановитьПараметр("Регистратор" ,Стр.ДанныеСтроки.Ссылка) ; Результат = Запрос.Выполнить().Выгрузить().Получить(0).СуммаВзаиморасчетов; Если Не Стр.ДанныеСтроки.Сумма = Результат Тогда Стр.Ячейки.Сумма_К.Текст=Результат; Стр.Ячейки.Сумма_К.ОтображатьТекст = Истина ; Иначе продолжить Конецесли; КонецЕсли; КонецЦикла; Исключение Сообщить("При вычислении Суммы с учетом корректировок произошла ошибка.") ; КонецПопытки; КонецПроцедуры |
|||
14
Bober
05.02.13
✎
20:09
|
(13)
- Стр.ДанныеСтроки.Ссылка.Проведен - заменить на Стр.ДанныеСтроки.Проведен - заменить сумашедший запрос в цикле на один |
|||
15
Bober
05.02.13
✎
20:11
|
(13)
|ГДЕ | ЗаказыПокупателей.Регистратор.ЗаказПокупателя = &Регистратор Совсем туго с виртуальными таблицами? замени хоть на |ГДЕ | ЗаказыПокупателей.ЗаказПокупателя = &Регистратор | И ЗаказыПокупателей.Активность | И Не ЗаказыПокупателей.Регистратор Ссылка Документ.ЗаказПокупателя |
|||
16
Bober
05.02.13
✎
20:13
|
(13) странно, что значение из запроса тебя не напрягает (что она больше сумма документа заказа клиента)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |