Яж этот вопрос давно поднимал!
вот готовый класс да и еще с извращениями может не сильно оптимальный но для примера пойдет:
Перем ТипЦены Экспорт;
Перем Фирма Экспорт;
Перем Элемент Экспорт;
Перем Склад Экспорт;
Перем Поставщик;
Перем СпКолонки;
Функция Сам(Конт) Возврат Конт; КонецФункции //:Контекст
Функция УстановитьСклад(Объект) Экспорт
Склад=Объект;
УсловиеСклада="";
Если ПустоеЗначение(Склад)=0 Тогда
УсловиеСклада=" and Склад=?ВыбСклад(14,9)"
КонецЕсли;
РадугаМД = СоздатьОбъект("MetaDataWork");
реквАналог = "SP" + РадугаМД.ИДРеквизитаСправочника("Аналоги", "Аналог");
Текст="
|select
| ТМЦ.code as Код,
| $Аналоги.Аналог as [Аналог $Справочник.ТМЦ],
| $ПоследнееЗначение.Цены.Единица(Цены.id,:ВыбДата) as [Ед $Справочник.Единицы],
| $ПоследнееЗначение.Цены.Валюта(Цены.id,:ВыбДата) as [Вал $Справочник.Валюты],
| $ПоследнееЗначение.Цены.Цена(Цены.id,:ВыбДата) as Цена
|,
| (select sum(Резервы.РезервТовараОстаток)
| from $РегистрОстатки.РезервыТоваров(,,
| Товар="+реквАналог+",
| Товар, РезервТовара
| ) Резервы
| ) as Резерв,
| (select sum(Остатки.ОстатокТовараОстаток)
| from $РегистрОстатки.ОстаткиТоваров(,,
| Товар="+реквАналог+" and Фирма=?ВыбФирма(14,9) "+УсловиеСклада+",
| Товар, ОстатокТовара
| ) Остатки
| ) as Остаток,
| Аналоги.code as КодАналога,
| Аналоги.row_id as row_id
|from $Справочник.Аналоги as Аналоги (nolock)
|inner join $Справочник.ТМЦ as ТМЦ on ТМЦ.id = $Аналоги.Аналог
|left join $Справочник.Цены as Цены on Цены.parentext = $Аналоги.Аналог and $Цены.КатегорияЦены = ?ВыбЦена(14,9)
|where Аналоги.parentext=?ТекТовар(14,9)
|";
Поставщик.УстановитьТекстовыйПараметр("ВыбДата",РабочаяДата());
Поставщик.УстТекстЗапроса(Текст);
Если ПустоеЗначение(Склад)=0 Тогда
Поставщик.Параметры.Установить("ВыбСклад",Склад);
КонецЕсли;
Поставщик.УстКлючПорядка("КодАналога,row_id");
Поставщик.Параметры.Установить("ТекТовар",Элемент);
Поставщик.Параметры.Установить("ВыбФирма",Фирма);
Поставщик.Параметры.Установить("ВыбЦена",ТипЦены);
Для н=1 По СпКолонки.РазмерСписка() Цикл
Представление="";
Имя=СпКолонки.ПолучитьЗначение(н,Представление);
Поле=Поставщик.Поля.Добавить(Имя);
Поле.Автоудаление=0;
КонецЦикла;
Поставщик.Обновить();
КонецФункции // ПриИзмененииСклада
Функция Инит(КонтекстФормы, ИдентификаторРеквизита) Экспорт
оФорма = СоздатьОбъект("Форма");
оФорма.УстановитьФорму(КонтекстФормы.Форма);
ТП=оФорма.СоздатьЭлементУправления(Сам(Контекст), ИдентификаторРеквизита);
Источник = СоздатьОбъект("ODBCDataProvider.MSSQL");
Источник.БазаДанных = СоздатьОбъект("ODBCDatabase");
ТП.ПоставщикДанных=Источник;
Поставщик=ТП.ПоставщикДанных;
ТП.СтильЗаголовков = 0;
ТП.ТаймАутОбновления=0;
УстановитьСклад(Склад);
Колонки = ТП.Колонки;
Колонки.Очистить();
Для н=1 По СпКолонки.РазмерСписка() Цикл
Представление="";
Имя=СпКолонки.ПолучитьЗначение(н,Представление);
Колонка=Колонки.Добавить(Имя);
Колонка.Заголовок=Представление;
Колонка.Данные=Имя;
КонецЦикла;
КонецФункции
Функция УстановитьЭлемент(Объект) Экспорт
Элемент=Объект;
Поставщик.Параметры.Установить("ТекТовар",Элемент);
Поставщик.Обновить();
КонецФункции // УстановитьЭлемент
Функция УстановитьФирму(Объект) Экспорт
Фирма=Объект;
Поставщик.Параметры.Установить("ВыбФирма",Фирма);
Поставщик.Обновить();
КонецФункции // УстановитьФирму
Функция УстановитьТипЦены(Объект) Экспорт
ТипЦены=Объект;
Поставщик.Параметры.Установить("ВыбЦена",ТипЦены);
Поставщик.Обновить();
КонецФункции // УстановитьТипЦены
СпКолонки=СоздатьОбъект("СписокЗначений");
СпКолонки.ДобавитьЗначение("Код","Код");
СпКолонки.ДобавитьЗначение("Аналог","Аналог");
СпКолонки.ДобавитьЗначение("Цена","Цена");
СпКолонки.ДобавитьЗначение("Вал","Вал");
СпКолонки.ДобавитьЗначение("Ед","Ед");
СпКолонки.ДобавитьЗначение("Остаток","ост.");
СпКолонки.ДобавитьЗначение("Резерв","рез.");
Да забыл добавить
На форме списка вешае функцию
Типа
УстДоспупность()
у меня на она имеее такой вид:
Функция УстДоступность()
Если ФормаОткрыта=1 Тогда
ТПОстатки.УстановитьЭлемент(ТекущийЭлемент());
ТПвПути.УстановитьЭлемент(ТекущийЭлемент());
ТПАналоги.УстановитьЭлемент(ТекущийЭлемент());
ТПРемКомплекты.УстановитьЭлемент(ТекущийЭлемент());
КонецЕсли;
Возврат "";
КонецФункции
и всех делов то.
ФормаСписка просто летает!