1с ТиС, SQL. На форме "выбор период"; списки значений: "ВыбТовар", "ВыбСклады", "ВыбКатегории"; поля выбора справочников (может быть группа): "ВыбМарка", "ВыбПоставщик", "ВыбПоставщикКарточка"; выбор документа: "ВыбПартияТовара"; выбор даты: "ДоДаты"; флаг "ОтрицательныеОстатки" Необходимо чтобы из регистра выбирались данные в зависимости от выбранных условий. Написал запрос: [code] Запрос = СоздатьОбъект("ODBCRecordset"); ТекстЗапроса = " |SELECT ОстаткиТМЦ.Товар [Товар $Справочник.Номенклатура] | , ОстаткиТМЦ.Сотрудник [Склад $Справочник.МестаХранения] | , ОстаткиТМЦ.ПрихДокумент [Партия $Документ] | , $ТМЦ.ВидЛитературы [Марка $Справочник.ВидЛитературы] | , $ТМЦ.Категория [Категория $Справочник.Категория] | , $ТМЦ.Поставщик [ПоставщикКар $Справочник.Контрагенты] | , Sum(ОстаткиТМЦ.ОстатокНачальныйОстаток) ОстатокТовараНачОст | , Sum(ОстаткиТМЦ.ОстатокКонечныйОстаток) ОстатокТовараКонОст | , Sum(ОстаткиТМЦ.ОстатокПриход) ОстатокТовараПриход | , Sum(ОстаткиТМЦ.ОстатокРасход) ОстатокТовараРасход"; ВидРесурса = ""; Если ЗакупкаСебестоимость = 1 Тогда ВидРесурса = "Закупочная стоимость"; ТекстЗапроса = ТекстЗапроса + " | ,Sum(ОстаткиТМЦ.ЗакупочнаяСтоимостьНачальныйОстаток) СтоимостьНачОст | ,Sum(ОстаткиТМЦ.ЗакупочнаяСтоимостьКонечныйОстаток) СтоимостьКонОст | ,Sum(ОстаткиТМЦ.ЗакупочнаяСтоимостьПриход) СтоимостьПриход | ,Sum(ОстаткиТМЦ.ЗакупочнаяСтоимостьРасход) СтоимостьРасход | |FROM $РегистрОстаткиОбороты.ОстаткиТовара(:НачДата,:КонДата~,,,,"; Иначе ВидРесурса = "Себестоимость"; ТекстЗапроса = ТекстЗапроса + " | ,Sum(ОстаткиТМЦ.СебестоимостьНачальныйОстаток) СтоимостьНачОст | ,Sum(ОстаткиТМЦ.СебестоимостьКонечныйОстаток) СтоимостьКонОст | ,Sum(ОстаткиТМЦ.СебестоимостьПриход) СтоимостьПриход | ,Sum(ОстаткиТМЦ.СебестоимостьРасход) СтоимостьРасход | |FROM $РегистрОстаткиОбороты.ОстаткиТовара(:НачДата,:КонДата~,,,,"; КонецЕсли; Если ЗакупкаСебестоимость = 1 Тогда ТекстЗапроса = ТекстЗапроса +",(Товар,Сотрудник,ПрихДокумент),(Остаток,ЗакупочнаяСтоимость)) AS ОстаткиТМЦ"; Иначе ТекстЗапроса = ТекстЗапроса +",(Товар,Сотрудник,ПрихДокумент),(Остаток,Себестоимость)) AS ОстаткиТМЦ"; КонецЕсли; ТекстЗапроса = ТекстЗапроса+" | LEFT JOIN $Справочник.Номенклатура AS Номенклатура With (NOLOCK) ON Товар =Номенклатура.ID | LEFT JOIN $Справочник.МестаХранения AS МестаХранения With (NOLOCK) ON Сотрудник = МестаХранения.ID | LEFT JOIN $Справочник.ВидЛитературы AS Марка With (NOLOCK) ON $ТМЦ.ВидЛитературы = Марка.ID | LEFT JOIN $Справочник.Категория AS Категория With (NOLOCK) ON $ТМЦ.Категория = Категория.ID | LEFT JOIN $Справочник.Контрагенты AS Контрагенты With (NOLOCK) ON $ТМЦ.Поставщик = Контрагенты.ID | LEFT JOIN _1SJOURN AS Журнал With (NOLOCK) ON ПрихДокумент = Журнал.IDDOC |"; естьпоступление=0; Если (ПартииДоДаты = 1) Тогда ТекстЗапроса = ТекстЗапроса+" | LEFT JOIN $Документ.ПоступлениеТовара AS ПоступлениеТовара With (NOLOCK) ON ПоступлениеТовара.IDDOC = Журнал.IDDOC |"; естьпоступление =1; ИначеЕсли (ВыбПоставщик.Выбран() = 1) и (естьпоступление = 0)Тогда ТекстЗапроса = ТекстЗапроса+" | LEFT JOIN $Документ.ПоступлениеТовара AS ПоступлениеТовара With (NOLOCK) ON ПоступлениеТовара.IDDOC = Журнал.IDDOC AND $ПоступлениеТовара.Поставщик = Контрагенты.ID |"; ИначеЕсли (ВыбПоставщик.Выбран() = 1) и (естьпоступление = 1)Тогда ТекстЗапроса = ТекстЗапроса+" | AND $ПоступлениеТовара.Поставщик = Контрагенты.ID |"; КонецЕсли; естьусловие=0; Если ВыбТовар.РазмерСписка() > 0 Тогда ТекстЗапроса = ТекстЗапроса + "WHERE(Товар IN (SELECT val FROM #ВыбТовары))"; естьусловие = 1; КонецЕсли; Если ВыбСклады.РазмерСписка() > 0 Тогда Если естьусловие = 0 Тогда ТекстЗапроса = ТекстЗапроса + "WHERE (Сотрудник IN (SELECT val FROM #СкладыВыбора))"; Иначе ТекстЗапроса = ТекстЗапроса + " AND (Сотрудник IN (SELECT val FROM #СкладыВыбора))"; КонецЕсли; естьусловие = 1; КонецЕсли; Если ВыбПоставщикКарточка.Выбран() = 1 Тогда Если естьусловие = 0 Тогда ТекстЗапроса = ТекстЗапроса + "WHERE($ТМЦ.Поставщик IN (SELECT val FROM #ВыбПостащикКарт))"; Иначе ТекстЗапроса = ТекстЗапроса + "AND ($ТМЦ.Поставщик IN (SELECT val FROM #ВыбПостащикКарт))"; КонецЕсли; естьусловие = 1; КонецЕсли; Если ВыбМарка.Выбран() =1 Тогда Если естьусловие = 0 Тогда ТекстЗапроса = ТекстЗапроса + "WHERE ($ТМЦ.ВидЛитературы IN (SELECT val FROM #ВыбМарка))"; Иначе ТекстЗапроса = ТекстЗапроса + " AND ($ТМЦ.ВидЛитературы IN (SELECT val FROM #ВыбМарка))"; КонецЕсли; естьусловие = 1; КонецЕсли; Если ВыбКатегории.РазмерСписка() > 0 Тогда Если естьусловие = 0 Тогда ТекстЗапроса = ТекстЗапроса + "WHERE ($ТМЦ.Категория IN (SELECT val FROM #ВыбКатегория))"; Иначе ТекстЗапроса = ТекстЗапроса + " AND ($ТМЦ.Категория IN (SELECT val FROM #ВыбКатегория))"; КонецЕсли; естьусловие = 1; КонецЕсли; Если ВыбПартияТовара.Выбран() = 1 Тогда Если естьусловие = 0 Тогда ТекстЗапроса = ТекстЗапроса + "WHERE (ПрихДокумент = ВыбПартияТовара)"; Иначе ТекстЗапроса = ТекстЗапроса + " AND (ПрихДокумент = ВыбПартияТовара)"; КонецЕсли; естьусловие = 1; КонецЕсли;
|