Здравствуйте. Подскажите пожалуйста если знаете пишу запрос по SQL для получения количества проданого списка товара по регистру по списку серий по реквизиту регистра = 'Р' по списку клиентов доступ к которым можно получить через документ но в регисте нет измрения или реквизита этого документа возможноли это с использованием виртуальных таблиц Обороты
написал отдельно запрос на получения списка документов и таблицы проданных товаров объеденить не могу
запрос 1
Запрос = СоздатьОбъект("ODBCRecordset"); ПолноеУсловиеКлиенты = ""; СтрСоединенияКлиенты = ""; Если СпсКлиенты.РазмерСписка() > 0 Тогда ФлагТолькоЭлементы = 1; Для х = 1 По СпсКлиенты.РазмерСписка() Цикл ВремЗнач = СпсКлиенты.ПолучитьЗначение(х); Если ВремЗнач.ЭтоГруппа() = 1 Тогда ФлагТолькоЭлементы = 0; КонецЕсли; КонецЦикла; Если ФлагТолькоЭлементы = 1 Тогда МД = СоздатьОбъект("MetaDataWork"); Условия = ""; Для х = 1 По СпсКлиенты.РазмерСписка() Цикл Условия = Условия + "'" + МД.ЗначениеВСтрокуБД(СпсКлиенты.ПолучитьЗначение(х)) + "'"; Если х < СпсКлиенты.РазмерСписка() Тогда Условия = Условия + ","; КонецЕсли; КонецЦикла; Если ПустоеЗначение(Условия) = 0 Тогда ПолноеУсловиеКлиенты = " | СпрКлн.ID IN ("+Условия+") |"; КонецЕсли; Иначе ПолноеУсловиеКлиенты = " | СпрКлн.ID IN (SELECT Val FROM #ГруппаКлиенты) |"; Запрос.УложитьСписокОбъектов(СпсКлиенты, "#ГруппаКлиенты", "Клиенты"); КонецЕсли; СтрСоединенияКлиенты = "INNER JOIN $Справочник.Клиенты as СпрКлн ON СпрКлн.ID = $Док.Клиент AND "+ПолноеУсловиеКлиенты+""; КонецЕсли; ТекстЗапроса = " |SELECT | Жур.IDDoc as [Док $Документ], | Жур.IDDocDef as Док_вид, | $Док.РежимПроведения as РежимПроведения, | $Док.Клиент as [Клиент $Справочник.Клиенты] |FROM | _1SJourn Жур |INNER JOIN | $Документ.Расходная as Док ON Док.IDDoc = Жур.IDDoc " +СтрСоединенияКлиенты+" |WHERE | Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~ AND | Жур.IDDocDef = $ВидДокумента.Расходная AND | Жур.Closed & 1 = 1 AND | $Док.РежимПроведения = 0 |";
Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата); Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата); //******************************************* ТабВрем = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
запрос 2
Запрос = СоздатьОбъект("ODBCRecordSet"); Запрос.УстБД1С(); Запрос.РежимRPC(1); //******************************************* //******************************************* ПолноеУсловиеТовар = ""; СтрСоединенияТовары = ""; Если СпсТовары.РазмерСписка() > 0 Тогда ФлагТолькоЭлементы = 1; Для х = 1 По СпсТовары.РазмерСписка() Цикл ВремЗнач = СпсТовары.ПолучитьЗначение(х); Если ВремЗнач.ЭтоГруппа() = 1 Тогда ФлагТолькоЭлементы = 0; КонецЕсли; КонецЦикла; Если ФлагТолькоЭлементы = 1 Тогда МД = СоздатьОбъект("MetaDataWork"); Условия = ""; Для х = 1 По СпсТовары.РазмерСписка() Цикл Условия = Условия + "'" + МД.ЗначениеВСтрокуБД(СпсТовары.ПолучитьЗначение(х)) + "'"; Если х < СпсТовары.РазмерСписка() Тогда Условия = Условия + ","; КонецЕсли; КонецЦикла; Если ПустоеЗначение(Условия) = 0 Тогда ПолноеУсловиеТовар = " | СпрТов.ID IN ("+Условия+") |"; КонецЕсли; Иначе ПолноеУсловиеТовар = " | СпрТов.ID IN (SELECT Val FROM #ГруппаТовары) |"; Запрос.УложитьСписокОбъектов(СпсТовары, "#ГруппаТовары", "Товары"); КонецЕсли; СтрСоединенияТовары = "INNER JOIN $Справочник.Товары as СпрТов ON СпрТов.ID = Товар AND "+ПолноеУсловиеТовар+" "; КонецЕсли; //******************************************* //******************************************* ПолноеУсловиеСерия = ""; СтрСоединенияСерии = ""; Если СпсСерии.РазмерСписка() > 0 Тогда ФлагТолькоЭлементы = 1; Для х = 1 По СпсСерии.РазмерСписка() Цикл ВремЗнач = СпсСерии.ПолучитьЗначение(х); Если ВремЗнач.ЭтоГруппа() = 1 Тогда ФлагТолькоЭлементы = 0; КонецЕсли; КонецЦикла; Если ФлагТолькоЭлементы = 1 Тогда МД = СоздатьОбъект("MetaDataWork"); Условия = ""; Для х = 1 По СпсСерии.РазмерСписка() Цикл Условия = Условия + "'" + МД.ЗначениеВСтрокуБД(СпсСерии.ПолучитьЗначение(х)) + "'"; Если х < СпсСерии.РазмерСписка() Тогда Условия = Условия + ","; КонецЕсли; КонецЦикла; Если ПустоеЗначение(Условия) = 0 Тогда ПолноеУсловиеСерия = " | СпрСер.ID IN ("+Условия+") |"; КонецЕсли; Иначе ПолноеУсловиеСерия = " | СпрСер.ID IN (SELECT Val FROM #ГруппаСерии) |"; Запрос.УложитьСписокОбъектов(СпсСерии, "#ГруппаСерии", "Серии"); КонецЕсли; СтрСоединенияСерии = "INNER JOIN $Справочник.Серии as СпрСер ON СпрСер.ID = Серия AND "+ПолноеУсловиеСерия+""; КонецЕсли;
ТекстЗапроса = " |SELECT | Рег.Товар as [Товар $Справочник.Товары], | Рег.Серия as [Серия $Справочник.Серии], | Рег.ОстатокТовараРасход as ОстатокТовараРасход |FROM | $РегистрОбороты.ОстаткиТоваров(:НачДата,:КонДата~,,"+СтрСоединенияТовары+" "+СтрСоединенияСерии+",КодОперации = 'Р',(Товар,Серия),(ОстатокТовара)) as Рег |"; Запрос.УстановитьТекстовыйПараметр("НачДата", НачДата); Запрос.УстановитьТекстовыйПараметр("КонДата", КонДата); //******************************************* //******************************************* ТабВрем = Запрос.ВыполнитьИнструкцию(ТекстЗапроса);
|