Если ДатаОтбора>ПолучитьДатуТА() Тогда ДатаОтбора=ПолучитьДатуТА(); ВидЗапроса=1; Иначе ВидЗапроса=2; КонецЕсли; ТекстЗапроса=" |SELECT | Рег.Фирма AS [Фирма $Справочник.Фирмы], | Рег.Товар AS [Товар $Справочник.Номенклатура], | ICASE(COUNT(DISTINCT Рег.ЦенаПродажи)=1,0,1) AS ФлагРазныхЦен, | SUM(Рег.ОстатокТовара) AS Остаток |FROM | (SELECT | $Рег_1.Фирма AS Фирма, | $Рег_1.Склад AS Склад, | $Рег_1.Товар AS Товар, | $Рег_1.ЦенаПродажи AS ЦенаПродажи, | $Рег_1.ОстатокТовара AS ОстатокТовара | FROM | $РегистрИтоги.ОстаткиПоСкладамИПартиям AS Рег_1 | WHERE | (PERIOD = :ПредМесяц~~)"; Если ПустоеЗначение(СкладОтбора)=0 Тогда ТекстЗапроса=ТекстЗапроса+" | AND ($Рег_1.Склад=:Склад)"; КонецЕсли; ТекстЗапроса=ТекстЗапроса+" | AND ($Рег_1.Фирма=:Фирма) | | UNION ALL | | SELECT | $Рег_2.Фирма AS Фирма, | $Рег_2.Склад AS Склад, | $Рег_2.Товар AS Товар, | $Рег_2.ЦенаПродажи AS ЦенаПродажи, | $Рег_2.ОстатокТовара*(1-Рег_2.debkred*2) AS ОстатокТовара | FROM | $Регистр.ОстаткиПоСкладамИПартиям AS Рег_2 | INNER JOIN | 1sjourn jr ON Рег_2.iddoc = jr.iddoc | AND (jr.date BETWEEN :НачалоМесяца~~ AND :ПредДата~~) | AND ($ФлагРегистра.ОстаткиПоСкладамИПартиям = 1) | WHERE"; Если ПустоеЗначение(СкладОтбора)=0 Тогда ТекстЗапроса=ТекстЗапроса+" | ($Рег_2.Склад=:Склад) AND "; КонецЕсли; ТекстЗапроса=ТекстЗапроса+" | ($Рег_2.Фирма=:Фирма) | ) Рег | |GROUP BY | Рег.Товар, | Рег.Фирма | |HAVING | SUM(Рег.ОстатокТовара)>0 | |ORDER BY | Рег.Товар"; БыстрыйЗапрос.Отладка(1); БыстрыйЗапрос.УстановитьТекстовыйПараметр("Фирма",ФирмаОтбора); БыстрыйЗапрос.УстановитьТекстовыйПараметр("Склад",СкладОтбора); БыстрыйЗапрос.УстановитьТекстовыйПараметр("ПредДата",ДатаОтбора); бора)-1)); Попытка ТЗТоваров_Р=БыстрыйЗапрос.ВыполнитьИнструкцию(ТекстЗапроса); ТЗТоваров_Р.Сортировать("-ФлагРазныхЦен,+Товар"); ТЗТоваров_Р.ВыбратьСтроку(); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; СтрТаб=0; ТЗТоваров_Р.НайтиЗначение(0,СтрТаб,"ФлагРазныхЦен"); Если СтрТаб=0 Тогда Предупреждение("Отсутствует товар с разной продажной ценой"); Возврат; КонецЕсли; Сообщить(Строка(ТЗТоваров_Р.КоличествоСтрок())); Сообщить(Строка(СтрТаб)); // условия по товарам для второго запроса с полным разворотов по партиям СписокТоваров=СоздатьОбъект("СписокЗначений"); ТЗТоваров_Р.Выгрузить(СписокТоваров,1,СтрТаб-1,"Товар"); Сообщить(Строка(СписокТоваров.РазмерСписка())); ИмяТаблицы="#Список"; БыстрыйЗапрос.УложитьСписокОбъектов(СписокТоваров,ИмяТаблицы,"Номенклатура"); ТекстЗапроса=" |SELECT | Рег.Фирма AS [Фирма $Справочник.Фирмы], | Рег.Склад AS [Склад $Справочник.МестаХранения], | Рег.Товар AS [Товар $Справочник.Номенклатура], | Рег.Партия AS [Партия $Документ], | SUM(Рег.ОстатокТовара) AS Остаток |FROM | (SELECT | $Рег_1.Фирма AS Фирма, | $Рег_1.Склад AS Склад, | $Рег_1.Товар AS Товар, | $Рег_1.ПрихДокумент AS Партия, | $Рег_1.ОстатокТовара AS ОстатокТовара | FROM | $РегистрИтоги.ОстаткиПоСкладамИПартиям AS Рег_1 | WHERE | (PERIOD = :ПредМесяц~~)"; Если ПустоеЗначение(СкладОтбора)=0 Тогда ТекстЗапроса=ТекстЗапроса+" | AND ($Рег_1.Склад=:Склад)"; КонецЕсли; ТекстЗапроса=ТекстЗапроса+" | AND ($Рег_1.Фирма=:Фирма) | AND ($Рег_1.Товар IN (SELECT Val FROM "+ИмяТаблицы+")) | | UNION ALL | | SELECT | $Рег_2.Фирма AS Фирма, | $Рег_2.Склад AS Склад, | $Рег_2.Товар AS Товар, | $Рег_2.ПрихДокумент AS Партия, | $Рег_2.ОстатокТовара*(1-Рег_2.debkred*2) AS ОстатокТовара | FROM | $Регистр.ОстаткиПоСкладамИПартиям AS Рег_2 | INNER JOIN | 1sjourn jr ON Рег_2.iddoc = jr.iddoc | AND (jr.date BETWEEN :НачалоМесяца~~ AND :ПредДата~~) | AND ($ФлагРегистра.ОстаткиПоСкладамИПартиям = 1) | WHERE"; Если ПустоеЗначение(СкладОтбора)=0 Тогда ТекстЗапроса=ТекстЗапроса+" | ($Рег_2.Склад=:Склад) AND "; КонецЕсли; ТекстЗапроса=ТекстЗапроса+" | ($Рег_2.Фирма=:Фирма) | AND ($Рег_2.Товар IN (SELECT Val FROM "+ИмяТаблицы+")) | ) Рег |GROUP BY | Рег.Товар, | Рег.Фирма, | Рег.Склад, | Рег.Партия | |HAVING | SUM(Рег.ОстатокТовара)>0 | |ORDER BY | Рег.Товар"; БыстрыйЗапрос.УстановитьТекстовыйПараметр("Фирма",ФирмаОтбора); БыстрыйЗапрос.УстановитьТекстовыйПараметр("Склад",СкладОтбора); БыстрыйЗапрос.УстановитьТекстовыйПараметр("ПредДата",ДатаОтбора); бора)-1)); Попытка ТЗТоваров=БыстрыйЗапрос.ВыполнитьИнструкцию(ТекстЗапроса); ТЗТоваров.ВыбратьСтроку(); Исключение Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки;
|