Здравствуйте.
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.17.01)
Есть такой документ как Изменение цен компании, в котором устанавливаются цены для товаров в разрезе выбранного типа цен.
Например: у поставщика куплен товар, проведена приходная накладная. В Изменение цен компании выбирается эта приходная как документ основание и заполняется ТЧ по документу основания.
В ТЧ отображаются старая цена (которая была установлена ранее), базовая цена (цена из приходной), себестоимость (судя по значениям это итоговая себестоимость товара), а также % наценки, сумма наценки и Новая цена.
Добавил поле ПредыдущаяСебестоимость, в которую вывожу себестоимость товара, но без учета товара из приходной, т.е. делаю выборку по партиям до даты приходной накладной.
Все это действие выполняю в процедуре ПриПолученииДанных - все вроде работает, но тормоза при этом неописуемые.
При любом чихе (изменение данных, простая смена строки) происходит проход по ТЧ и выполнение запроса для каждой строки, что не по феншую.
...
Если РасчетЦенОт=1 Тогда
Если НЕ ДокументОснование.Пустая() Тогда
ДокОсн = ДокументОснование.Ссылка;
//Сообщить(ДокОсн.Номер);
//Сообщить(ДокОсн.Дата);
//Сообщить(ДокОсн.Номер);
ЗапросПартии = Новый Запрос;
ЗапросПартии.Текст =
"ВЫБРАТЬ
| ПартииТоваровКомпанииОстатки.Номенклатура,
| ПартииТоваровКомпанииОстатки.СуммаУпрОстаток / ПартииТоваровКомпанииОстатки.КоличествоОстаток КАК Себест
|ИЗ
| РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки
|ГДЕ
| ПартииТоваровКомпанииОстатки.Номенклатура = &Номенклатура
| И ПартииТоваровКомпанииОстатки.Партия.Дата < &Дата";
ЗапросПартии.УстановитьПараметр("Номенклатура",ДанныеСтроки.Номенклатура);
ЗапросПартии.УстановитьПараметр("Дата",ДокОсн.Дата);
Результат = ЗапросПартии.Выполнить();
ТЗ = Результат.Выгрузить();
//ТЗ.Свернуть("Номенклатура","Себест");
Сумма = 0;
КолВо = 0;
Для Каждого Стр Из ТЗ Цикл
//Выб = Результат.Выбрать();
//ПредыдущаяСебестоимость = 0;
//Пока Выб.Следующий() Цикл
//Сообщить(Выб.Номенклатура);
//Сообщить(Выб.Себест);
Сумма = Сумма+Стр.Себест;
КолВо = КолВо+1;
Сообщить(Сумма);
Сообщить(КолВо);
//ПредыдущаяСебестоимость = Выб.Себест; //ЗапросПартии.Выполнить().Выгрузить()[0][1];//.Себест;
//Сообщить(ПредыдущаяСебестоимость);
КонецЦикла;
Попытка
ПредыдущаяСебестоимость = Сумма/КолВо;
Исключение
ПредыдущаяСебестоимость = 0;
КонецПопытки;
ОформлениеСтроки.Ячейки.ПредыдущаяСебестоимость.ОтображатьТекст=Истина;
ОформлениеСтроки.Ячейки.ПредыдущаяСебестоимость.Текст=Формат(ПредыдущаяСебестоимость,"ЧЦ=15; ЧДЦ=2");
КонецЕсли;
КонецЕсли;
...
Подскажите пожалуйста как можно оптимизировать этот процесс?