вроде получилось так:
Цитата:Процедура Сформировать()
//получим ИД элемента из чужой базы по наименованию
IDсубк1 = ПолучитьИдСпр(СокрЛП(Субконто1.Наименование),"Номенклатура",1);
//получим временную таблицу с подчиненными элементам. Спасибо Satans Claws
ЗапросФильтр = СоздатьОбъект("AccountsRecordSet");
ИмяВремТаблицы = "#Группа";
ЗапросФильтр.УстБД(БД);
тзпФильтр = "
|SELECT '" + IDсубк1 + "' ID Into " + ИмяВремТаблицы + "
|
|While @@RowCount > 0
|INSERT INTO " + ИмяВремТаблицы + "
|SELECT
| Спр.ID
|FROM
| $Справочник.Номенклатура Спр (NoLock)
|WHERE
| ParentID != $ПустойИД
| And ParentID In (SELECT ID FROM " + ИмяВремТаблицы + " (NoLock))
| And ID Not In (SELECT ID FROM " + ИмяВремТаблицы + " (NoLock))
|
|If (SELECT Count(*) From " + ИмяВремТаблицы + " (NoLock)) > 100
| Create Clustered Index " + СтрЗаменить(ИмяВремТаблицы, "[#", "[#IX_") + " on " + ИмяВремТаблицы + " (ID)
|";
Результат = ЗапросФильтр.ВыполнитьИнструкцию(тзпФильтр);
ЗапросФильтр.Закрыть();
//получим данные по бух. счету
Запрос = СоздатьОбъект("AccountsRecordSet");
Запрос.УстановитьТекстовыйПараметр("НАчалоПериода", Дата("01.09.2013"));
Запрос.УстановитьТекстовыйПараметр("КонецПериода", Дата("01.09.2013"));
Запрос.УстановитьТекстовыйПараметр("Счет41",ПолучитьИдСчета("%41. 2.%"));
Запрос.отладка();
Запрос.УстБД(БД);
ТекстЗапроса = "
|SELECT
|Субконто1 [Субконто1 $Субконто]
|, Субконто1_вид
|, СпрНом.code as Код
|, СпрНом.descr as Наименование
|, $СпрНом.Артикул as Артикул
|, $СпрНом.Размер as Размер
|, Субконто2 [Субконто2 $Субконто]
|, Субконто2_вид
|, Субконто3 [Субконто3 $Субконто]
|, Субконто3_вид
|, КоличествоНачальныйОстатокДТ as СНД3
|, КоличествоОборотДт as ДО3
|, КоличествоОборотКт as КО3
|, КоличествоКонечныйОстатокДТ as СКД3
|FROM $БИОстаткиОбороты.Основной(:НАчалоПериода, :КонецПериода,
|,
|,,
|Счет = :Счет41,(Номенклатура,МестаХранения,Контрагенты),!УсловиеСубконто!) БИОстаткиОборотыОсновной
";
//добавим условие у запрос, если выбраны элементы на форме
УсловиеСубконто ="";
Если ПустоеЗначение(Субконто1) = 0 Тогда
УсловиеСубконто = УсловиеСубконто+"Субконто1 IN (SELECT ID FROM #Группа)";
КонецЕСли;
Если ПустоеЗначение(Субконто2) = 0 Тогда
УсловиеСубконто = УсловиеСубконто+?(УсловиеСубконто="",""," AND ")+"Субконто2=:Субконто2";
КонецЕСли;
УсловиеСубконто = ?(УсловиеСубконто="","","("+УсловиеСубконто+")");
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"!УсловиеСубконто!",УсловиеСубконто);
Результат = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
//запустим на форму результат
ТабЗн.Загрузить(Результат);
//удалим времнную таблицу
Запрос.Выполнить("drop table #Группа");
Запрос.Закрыть();
КонецПроцедуры
berezdetsky, в
AccountsRecordSet пробовал
Запрос.УложитьСписокГрупп(СЗ, "#Группа", "");, где СЗ список ID, но все сводится к тому же
УложитьСписокОбъектов и к тому же у меня ругалось, что не установлена БД, пришлось параметром еще и БД передавать.
Цитата:Процедура УложитьСписокГрупп(СписокОбъектов, ИмяТаблицы, ВидОбъектов = "",БД="") Экспорт
рс = СоздатьОбъект("ODBCRecordSet");
Если БД <> "" Тогда
рс.УстБД(БД);
КонецЕСли;
рс.Отладка(ОтладкаВключена % 2);
Если СтрДлина(ВидОбъектов) = 0 Then
рс.УложитьСписокОбъектов(СписокОбъектов, ИмяТаблицы);
Иначе
.........................
В СЗ у меня получилось примерно 250 000 записей и
УложитьСписокОбъектов отрабатывал неприлично долго. В любом случае спасибо за
$БИОстаткиОборотыМожет можно что-то оптимизировать? Хотя запрос и так достаточно быстро выполняется.