Вообщем вроде сделал, вроде работает для любой базы.
![Улыбка Улыбка](https://www.1cpp.ru/forumfiles/Templates/Forum/default/smiley.gif)
Критика приветствуется.
Функция СформироватьОстПоГТДИзДругойБазы()
ИБ=СоздатьОбъект("ODBCDataBase");
ИБ.ПрисоединитьИБ(ПутьКБазе,"Связь","");
Мета.ПрисоединитьМд(СокрЛП(ПутьКБазе)+"1cv7.md");
ЗапросОстатковГТД.УстБд(ИБ);
ЗапросОстатковГТД.Отладка(1);
Если ВыбДата = КонКвартала(ВыбДата) Тогда
ТекстЗапроса = "
|SELECT
| ПС.SCHKOD As КодСчета
|,БИ.Счет AS Счет_Ссылка
|,БИ.Субконто1 AS Номенклатура_Ссылка
|,СпрНоменклатура.CODE AS Номенклатура_КОД
|,Спр.DESCR AS Наименование
|,$Спр.СтранаПроисхождения AS СтранаПроисхождения
|,БИ.КоличествоОстатокДт AS КонОстКол
|FROM
| (
| SELECT
| Счет
| ,Валюта
| ,Субконто1,Субконто1_вид
| ,Субконто2,Субконто2_вид
|
| ,SUM(КоличествоОстаток) КоличествоОстаток
| ,CASE WHEN SUM(КоличествоОстаток) > 0 THEN SUM(КоличествоОстаток) ELSE 0 END КоличествоОстатокДт
| ,CASE WHEN SUM(КоличествоОстаток) < 0 THEN -SUM(КоличествоОстаток) ELSE 0 END КоличествоОстатокКт
| FROM (
| SELECT
| bkttl_vt.ACCID Счет
| ,bkttl_vt.CURRID Валюта
| ,bkttl_vt.SC0 Субконто1
| ,bkttl_vt.VSC0 Субконто1_вид
| ,bkttl_vt.SC1 Субконто2
| ,bkttl_vt.VSC1 Субконто2_вид
|
| ,CASE WHEN bkttl_vt.KIND = '3' THEN bkttl_vt.SD ELSE 0 END AS КоличествоОстаток
| FROM _1SBKTTL bkttl_vt (nolock)
| WHERE (bkttl_vt.DATE = :ВыбДата)
| AND (bkttl_vt.KIND = '3')
| ) AS accountingbalance
| GROUP BY
| Счет,Валюта
| ,Субконто1,Субконто1_вид
| ,Субконто2,Субконто2_вид
|
| HAVING (SUM(КоличествоОстаток) <> 0)
|) AS БИ
|LEFT JOIN _1SACCS AS ПС (nolock)
|ON (ПС.ID = БИ.Счет)
|LEFT JOIN $Справочник.Номенклатура AS СпрНоменклатура (nolock)
|ON (СпрНоменклатура.ID = БИ.Субконто1)
|LEFT JOIN $Справочник.ГТД AS Спр (nolock)
|ON (Спр.ID = БИ.Субконто2)
|WHERE (ПС.SCHKOD like 'ГТД%') AND (БИ.КоличествоОстатокДт <> 0)
|ORDER BY СпрНоменклатура.CODE
|";
Иначе
ТекстЗапроса = "
|SELECT
| ПС.SCHKOD As КодСчета
|,БИ.Счет AS Счет_Ссылка
|,БИ.Субконто1 AS Номенклатура_Ссылка
|,СпрНоменклатура.CODE AS Номенклатура_КОД
|,Спр.DESCR AS Наименование
|,$Спр.СтранаПроисхождения AS СтранаПроисхождения
|,БИ.КоличествоОстатокДт AS КонОстКол
|FROM
| (
| SELECT
| Счет
| ,Валюта
| ,Субконто1,Субконто1_вид
| ,Субконто2,Субконто2_вид
|
| ,SUM(КоличествоОстаток) КоличествоОстаток
| ,CASE WHEN SUM(КоличествоОстаток) > 0 THEN SUM(КоличествоОстаток) ELSE 0 END КоличествоОстатокДт
| ,CASE WHEN SUM(КоличествоОстаток) < 0 THEN -SUM(КоличествоОстаток) ELSE 0 END КоличествоОстатокКт
| FROM (
| SELECT
| bkttl_vt.ACCID Счет
| ,bkttl_vt.CURRID Валюта
| ,bkttl_vt.SC0 Субконто1
| ,bkttl_vt.VSC0 Субконто1_вид
| ,bkttl_vt.SC1 Субконто2
| ,bkttl_vt.VSC1 Субконто2_вид
|
| ,CASE WHEN bkttl_vt.KIND = '3' THEN bkttl_vt.SD+bkttl_vt.OBDT1-bkttl_vt.OBKT1+bkttl_vt.OBDT2-bkttl_vt.OBKT2 ELSE 0 END AS КоличествоОстаток
| FROM _1SBKTTL bkttl_vt (nolock)
| WHERE (bkttl_vt.DATE = :ВыбДата)
| AND (bkttl_vt.KIND = '3')
|
|
|
| UNION ALL
|
| SELECT
| entry_vt.ACCDTID
| ,CASE WHEN entry_vt.DTFLAGS & 1 = 1 THEN entry_vt.CURRID ELSE ' 0 ' END
| ,entry_vt.DTSC0
| ,entry_vt.VDTSC0
| ,entry_vt.DTSC1
| ,entry_vt.VDTSC1
|
| ,entry_vt.AMOUNT
| FROM _1SENTRY entry_vt (nolock)
| WHERE (entry_vt.DATE_TIME_DOCID >= '"+формат((НачКвартала(ВыбДата)),"ДГГГГММДД")+" 0 0 ')
| AND (entry_vt.DATE_TIME_DOCID < '"+формат((ВыбДата+1),"ДГГГГММДД")+" 0 0 ')
| AND (entry_vt.ACTIVE = ' ')
|
|
| AND (entry_vt.PROVKIND <> 'K')
|
| UNION ALL
|
| SELECT
| entry_vt.ACCKTID
| ,CASE WHEN entry_vt.KTFLAGS & 1 = 1 THEN entry_vt.CURRID ELSE ' 0 ' END
| ,entry_vt.KTSC0
| ,entry_vt.VKTSC0
| ,entry_vt.KTSC1
| ,entry_vt.VKTSC1
|
| ,-entry_vt.AMOUNT
| FROM _1SENTRY entry_vt (nolock)
| WHERE (entry_vt.DATE_TIME_DOCID >= '"+формат((НачКвартала(ВыбДата)),"ДГГГГММДД")+" 0 0 ')
| AND (entry_vt.DATE_TIME_DOCID < '"+формат((ВыбДата+1),"ДГГГГММДД")+" 0 0 ')
| AND (entry_vt.ACTIVE = ' ')
|
|
| AND (entry_vt.PROVKIND <> 'D')
|
| ) AS accountingbalance
| GROUP BY
| Счет,Валюта
| ,Субконто1,Субконто1_вид
| ,Субконто2,Субконто2_вид
|
| HAVING (SUM(КоличествоОстаток) <> 0)
|) AS БИ
|LEFT JOIN _1SACCS AS ПС (nolock)
|ON (ПС.ID = БИ.Счет)
|LEFT JOIN $Справочник.Номенклатура AS СпрНоменклатура (nolock)
|ON (СпрНоменклатура.ID = БИ.Субконто1)
|LEFT JOIN $Справочник.ГТД AS Спр (nolock)
|ON (Спр.ID = БИ.Субконто2)
|WHERE (ПС.SCHKOD like 'ГТД%') AND (БИ.КоличествоОстатокДт <> 0)
|ORDER BY СпрНоменклатура.CODE
|";
КонецЕсли;
итТз = СоздатьОбъект("ИндексированнаяТаблица");
ЗапросОстатковГТД.УстановитьТекстовыйПараметр("ВыбДата",ВыбДата+1);
ЗапросОстатковГТД.ВыполнитьИнструкцию(ТекстЗапроса,итТз);
итТз.Показать();
КонецФункции
Всем спс кто наталкивал на мысли