Всем доброго дня! Интересная выборка получается прямым запросом. В 1С стандартный запрос по оборотам товаров (анализ продаж для заявок с 1 числа по 31):
ТекстЗапроса=" |ПЕРИОД С НачДата По КонДата; |Товар = Регистр.ОстаткиТоваров.Товар; |Склад = Регистр.ОстаткиТоваров.МестоХранения; |ОстатокТовара = Регистр.ОстаткиТоваров.ОстатокТовара; |Функция Нач =НачОст(ОстатокТовара); |Функция Прих=Приход(ОстатокТовара); |Функция Расх=Расход(ОстатокТовара); |Функция Кон =КонОст(ОстатокТовара); |Условие (Склад = выбСклад); |Условие (Товар в СписТМЦ); |Группировка Товар Без Групп; |Группировка День;"; Попадают все дни (31), даже если закупка и продажа не каждый день, но на остатке что-то есть.
А прямым запросом: ТекстЗапроса = "
А прямым запросом: ТекстЗапроса = " |SELECT | Рег.Склад as [Склад $Справочник.МестаХранения], | Рег.Товар as [Товар $Справочник.ТМЦ], | Рег.ОстатокТовараНачальныйОстаток as КоличествоНачОст, | Рег.ОстатокТовараПриход as КоличествоПриход, | Рег.ОстатокТовараРасход as КоличествоРасход, | Рег.ОстатокТовараКонечныйОстаток as КоличествоКонОст, | Рег.Период Период |FROM | $РегистрОстаткиОбороты.ОстаткиТоваров( | :НачДата, :КонДата~, День, ДвиженияИГраницыПериода,, | Склад in (Select val from #ВыбСклад) | And Товар in (Select val from #СписТМЦ), | (Склад,Товар), | (ОстатокТовара)) as Рег";
Запрос.УстановитьТекстовыйПараметр("НачДата",НачДата); Запрос.УстановитьТекстовыйПараметр("КонДата",КонДата); Запрос.УложитьСписокОбъектов(ВыбСклад,"#ВыбСклад","МестаХранения"); Запрос.УложитьСписокОбъектов(СписТМЦ ,"#СписТМЦ" ,"ТМЦ"); ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); попадают только дни по которым были движения (закупка и продажа). А по нашему алготитму, если товар находится на полке, но не продался в этот день, то считается тоже в продажу. Что неправильно работает 1С++ или SQL?
|