в общем вычисляемые поля выводят заранее объявленные переменные
заполнение этих переменных делается процедурой первого вычивляемого поля, т.е.
Если ТекущийЭлемент().ЭтоГруппа() = 1 Тогда
Трн1 = "";
Свр1 = "";
Уд1 = "";
Трг1 = "";
Осн1 = "";
Рез1 = "";
Рез2 = "";
Цена1 = "";
Валюта1 = "";
Возврат Осн1;
КонецЕсли;
НомСтр = 0;
Если ТаблицаКЭША.НайтиЗначение(ТекущийЭлемент(),НомСтр,"Товар") = 1 Тогда
Осн1 = ТаблицаКЭША.ПолучитьЗначение(НомСтр,"Осн1");
Трг1 = ТаблицаКЭША.ПолучитьЗначение(НомСтр,"Трг1");
Трн1 = ТаблицаКЭША.ПолучитьЗначение(НомСтр,"Трн1");
Срв1 = ТаблицаКЭША.ПолучитьЗначение(НомСтр,"Срв1");
Уд1 = ТаблицаКЭША.ПолучитьЗначение(НомСтр,"Уд1" );
Рез1 = ТаблицаКЭША.ПолучитьЗначение(НомСтр,"Рез1");
Рез2 = ТаблицаКЭША.ПолучитьЗначение(НомСтр,"Рез2" );
Цена1 = ТаблицаКЭША.ПолучитьЗначение(НомСтр,"Цена" );
Валюта1 = ТаблицаКЭША.ПолучитьЗначение(НомСтр,"Вал" );
Иначе
RS.УстПараметр(2, ТекущийЭлемент());
RS.УстПараметр(1, ТранзитныйСклад);
Трн1 = RS.ВыполнитьСкалярный();
RS.УстПараметр(1, СервисныйСклад);
Срв1 = RS.ВыполнитьСкалярный();
RS.УстПараметр(1, УдаленныйСклад);
Уд1 = RS.ВыполнитьСкалярный();
Трг1 = 0;
Для Сч = 1 По ТорговыйСклад.РазмерСписка()Цикл
RS.УстПараметр(1,ТорговыйСклад.ПолучитьЗначение(Сч));
Трг1 = Трг1 + RS.ВыполнитьСкалярный();
КонецЦикла;
RS.УстПараметр(1, ОсновнойСклад);
Осн1 = RS.ВыполнитьСкалярный();
Рез1 = зервТовара");
Если ВыбПодразделение.Выбран() = 1 Тогда
Рез2 = ;
Иначе
Рез2 = Рез1 - РезервыТоваров.СводныйОстаток(ТекущийЭлемент(),,,"РезервТовара");
КонецЕсли;
Цена1 = "";
Валюта1 = "";
ТекЦена = глВернутьЦену(ТекущийЭлемент(), ТипЦены);
Если ПустоеЗначение(ТекЦена) = 0 Тогда
ТекЦена.ИспользоватьДату(ДатаЦен);
Валюта = ТекЦена.Валюта;
ЕдЦены = ТекЦена.Единица;
ЕдПоУм = ТекущийЭлемент().ЕдиницаПоУмолчанию;
Если ЕдЦены.Коэффициент <> ЕдПоУм.Коэффициент Тогда
Если ЕдЦены.Коэффициент < ЕдПоУм.Коэффициент Тогда
Цена1 = ТекЦена.Цена * (ЕдПоУм.Коэффициент / ?(ЕдЦены.Коэффициент = 0, 1, ЕдЦены.Коэффициент));
ИначеЕсли ЕдЦены.Коэффициент > ЕдПоУм.Коэффициент Тогда
Цена1 = ТекЦена.Цена / (ЕдЦены.Коэффициент / ?(ЕдПоУм.Коэффициент = 0, 1, ЕдПоУм.Коэффициент));
КонецЕсли;
Иначе
Цена1 = ТекЦена.Цена;
КонецЕсли;
Цена1 = ?(Валюта = Рубли, Окр(Цена1, 0, 1), Цена1);
Цена1 = Формат(Цена1,"Ч .2");
Валюта1 = Валюта;
КонецЕсли;
ТаблицаКЭША.НоваяСтрока();
ТаблицаКЭША.Товар = ТекущийЭлемент();
ТаблицаКЭША.Осн1 = Осн1;
ТаблицаКЭША.Трг1 = Трг1;
ТаблицаКЭША.Уд1 = Уд1;
ТаблицаКЭША.Трн1 = Трн1;
ТаблицаКЭША.Срв1 = Срв1;
ТаблицаКЭША.Рез1 = Рез1;
ТаблицаКЭША.Рез2 = Рез2;
ТаблицаКЭША.Цена = Цена1;
ТаблицаКЭША.Вал = Валюта1;
КонецЕсли;
Возврат Осн1;
ТекстЗапроса = "
|SELECT
| $Рег.ОстатокТовара as Количество
|FROM
| $РегистрИтоги.ОстаткиТоваров as Рег
|WHERE
| Рег.Period = {d'2009-01-01'} AND
| $Рег.Склад = ? AND
| $Рег.Товар = ?";
RS = СоздатьОбъект("ODBCRecordset");
RS.Подготовить(ТекстЗапроса);
RS.ПостроитьПараметры();
ОсновнойСклад = глПолучитьСкладПоУмолчанию("ОсновнойСклад");
ТранзитныйСклад = глПолучитьСкладПоУмолчанию("ТранзитныйСклад");
СервисныйСклад = глПолучитьСкладПоУмолчанию("СервисныйСклад");
УдаленныйСклад = глПолучитьСкладПоУмолчанию("УдаленныйСклад");
ТорговыйСклад = СоздатьОбъект("СписокЗначений");
СпрДП = СоздатьОбъект("Справочник.ДанныеПодразделений");
СпрСП = СоздатьОбъект("Справочник.СкладыПодразделений");
СпрДП.ИспользоватьВладельца(глПользователь.Подразделение);
Если СпрДП.НайтиПоРеквизиту("Фирма",глПользователь.ОсновнаяФирма.Фирма,0) = 1 Тогда
СпрСП.ИспользоватьВладельца(СпрДП.ТекущийЭлемент());
СпрСП.ВыбратьЭлементы();
Пока СпрСП.ПолучитьЭлемент() = 1 Цикл
Если СпрСП.Склад.ТипСклада = Перечисление.ТипыСкладов.Торговый Тогда
ТорговыйСклад.ДобавитьЗначение(СпрСП.Склад);
КонецЕсли;
КонецЦикла;
КонецЕсли;
ТаблицаКЭША = СоздатьОбъект("ТаблицаЗначений");
ТаблицаКЭША.НоваяКолонка("Товар","Справочник.Номенклатура");
ТаблицаКЭША.НоваяКолонка("Осн1","Число");
ТаблицаКЭША.НоваяКолонка("Трг1","Число");
ТаблицаКЭША.НоваяКолонка("Уд1" ,"Число");
ТаблицаКЭША.НоваяКолонка("Трн1","Число");
ТаблицаКЭША.НоваяКолонка("Срв1","Число");
ТаблицаКЭША.НоваяКолонка("Рез1","Число");
ТаблицаКЭША.НоваяКолонка("Рез2","Число");
ТаблицаКЭША.НоваяКолонка("Цена","Строка");
ТаблицаКЭША.НоваяКолонка("Вал" );
как видно также используется КЭШ, но и это не особо помогает, т.к. проивзодительностьувеличилась приблизительно на 15-20%, но время открытия формы все еще не удовлетворительно
может еще есть какие-то советы?