|
Вычисляемая колонка в форме списка документа. | ☑ | ||
---|---|---|---|---|
0
Koliaff
14.06.13
✎
18:28
|
Попросили в форме списка документа "Внутренний заказ" сделать дополнительную колонку "Сумма в оптовых ценах". Написал запрос и подцепил его в процедуру при "ВыводеСтроки"
Процедура СписокПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) Запрос = Новый Запрос; Менеджер = новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц = Менеджер; Запрос.Текст = "ВЫБРАТЬ | ПТЗ.Номенклатура, | ПТЗ.ЕдиницаИзмерения, | ПТЗ.Количество |ПОМЕСТИТЬ ВТЗ |ИЗ | &ПТЗ КАК ПТЗ"; Запрос.УстановитьПараметр("ПТЗ", ДанныеСтроки.Ссылка.Товары.Выгрузить()); Запрос.Выполнить(); Запрос.Текст = "ВЫБРАТЬ | СУММА(ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) * ВТЗ.Количество) КАК Сумма |ИЗ | ВТЗ КАК ВТЗ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаДок, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних | ПО ВТЗ.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура | И ВТЗ.ЕдиницаИзмерения = ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения"; Запрос.УстановитьПараметр("ДатаДок", ДанныеСтроки.Ссылка.Дата); Запрос.УстановитьПараметр("ТипЦен", Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("00002")); ТЗСумм = Запрос.Выполнить().Выгрузить(); Если ТЗСумм.Количество()>0 Тогда ОформлениеСтроки.Ячейки.СуммаОпт.Значение = ТЗСумм.Итог("Сумма"); Иначе ОформлениеСтроки.Ячейки.СуммаОпт.Значение =""; КонецЕсли; КонецПроцедуры ============================================= Очень сильно тормозит. Что подскажите ? Реквизит "сумма в оптовых ценах" в документе нельзя делать, т.к. цены могут меняться и все документы надо перепроводить для истинного положения дел .... |
|||
1
Андрей Федотов
14.06.13
✎
18:33
|
Можно сделать соответтсвующий реквизит в документе конечно скрытый и выводить его просто))
При выводе строки просто очень много раз работает. |
|||
2
Koliaff
14.06.13
✎
18:34
|
(Андрей Федотов) Я в (0) писал :
Реквизит "сумма в оптовых ценах" в документе нельзя делать, т.к. цены могут меняться и все документы надо перепроводить для истинного положения дел .... |
|||
3
Koliaff
14.06.13
✎
18:38
|
Может запрос можно оптимизировать ?
|
|||
4
PR
14.06.13
✎
18:39
|
(3) ПриПолученииДанных и кеш
|
|||
5
Koliaff
14.06.13
✎
18:40
|
(PR) А в каком случае кэш обновлять ?
|
|||
6
PR
14.06.13
✎
18:48
|
(5) В случае, если в кеше нет данных для нужной строки или если поменялось в табличной части что-то, от чего зависит рассчитанное значение.
|
|||
7
banco
14.06.13
✎
18:49
|
(5) наверное при изменении оптовых цен
|
|||
8
Koliaff
14.06.13
✎
18:51
|
А как отследить что изменилась цена ? Тоже этот вариант не выход.
|
|||
9
banco
14.06.13
✎
18:51
|
(5) а главное запрос оптимизируй, например отбор по номенклатуре в параметрах виртуальной таблицы
|
|||
10
Koliaff
14.06.13
✎
18:53
|
(banco) МОжно поподробнее ? На счет отбора по номенклатуре в виртуальной таблице ...
|
|||
11
banco
14.06.13
✎
18:54
|
(8) наверное при записи регистра сведений цен, а вообще лучше в отчете все это делать, а не в форме списка документа
|
|||
12
PR
14.06.13
✎
19:00
|
(8) Ты о чем? Я говорю, при изменении данных в текущем документе. И только.
|
|||
13
PR
14.06.13
✎
19:01
|
+(12) А, пардон. У нас же форма списка. Тогда вообще только оптимизировать запрос и выполнять его в ПриПолучении Данных. А кеш можно предусмотреть обновление пользователем например.
|
|||
14
Koliaff
14.06.13
✎
19:03
|
(PR) Я работаю над формой списка, а не над одним документом.
|
|||
15
Mitriy
14.06.13
✎
19:15
|
(13)+ для запроса сделать переменную модуля и создавать его один раз перед или при открытии формы...
|
|||
16
Ювелир
14.06.13
✎
19:19
|
Кэш - делаешь, например, соответствием.
В соответствие загоняешь результаты выполнения запроса сразу по всему списку документов на момент вызова формы. На форме вешаешь кнопку - обновить и туда кидаешь процедуру обновления кэш. Ну или прописываешь события. При получении данных - выводишь из соответствия в соответствии с документом готовую цифру. |
|||
17
Mitriy
14.06.13
✎
19:24
|
Перем мКеш;
Перем мЗапрос; Процедура ДокументСписокПриПолученииДанных(Элемент, ОформленияСтрок) СоответствиеСсылок = Новый Соотвествие; МассивСсылок = Новый Массив; Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл ДокСсылка = ОформлениеСтроки.ДанныеСтроки.Ссылка; СуммаДолга = мКеш[ДокСсылка]; Если СуммаДолга = Неопределено Тогда МассивСсылок.Добавить(ДокСсылка); СоответствиеСсылок.Вставить(ДокСсылка, ОформлениеСтроки); Иначе Оформление.Ячейки.СуммаДолга.Значение = СуммаДолга; КонецЕсли; КонецЦикла; Если Не МассивСсылок.Количество() Тогда Возврат; КонецЕсли; мЗапрос.УстановитьПараметр("МассивСсылокДокументов", МассивСсылок); Выборка = мЗапрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл мКеш.Вставить(Выборка.СсылкаДока, Выборка.СуммаДолга); Оформление = СоответствиеСсылок.Получить(Выборка.СсылкаДока); Оформление.Ячейки.СуммаДолга.Значение = Выборка.СуммаДолга; КонецЦикла; КонецПроцедуры; мКеш = Новый Соответствие; мЗапрос = Новый Запрос; мЗпрос.Текст = "ВЫБРАТЬ ... | Где ЧтоТоТам В (&МассивСсылокДокументов)"; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |