|
Проблема с запросом по остаткам | ☑ | ||
---|---|---|---|---|
0
slafor
20.12.21
✎
11:00
|
Есть запрос по партиям на складах (конфигурация - доработанная Розница, с добавленным партионным учетом - т.е. есть еще регистр ПартииНаСкладах с измерениями Номенклатура, Партия). Мне нужно получить приход за период поступлений (задается пользователем), за расход за период продаж (тоже задается пользователем), конечный остаток (на дату формирования отчета) - это все в разрезе партий, и начальные остатки - это уже по номенклатуре в целом. Первые идут "на ура", а вот с начальными остатками - просто беда.
Дело в том, что там поступления с февраля 2019 года. Когда я пишу отдельный запрос по остаткам на начало года, он мне, как и положено, выдает пустой результат. А когда включаю этот же запрос как временную таблицу и соединяю с таблицей приходов (она у меня основная, то есть я считаю номенклатуру именно из приходов, другая мне не нужна), у меня на начало года почему-то выдаются какие-то остатки, хотя их там в принципе не может быть. Никак не могу разобраться, почему так. В отличие от остальных временных таблиц, здесь соединение идет только по номенклатуре, без партий - то есть я должен увидет состояние по номенклатуре в целом. Вот этот отчет: ВЫБРАТЬ ПартииНаСкладахНачальныеОстатки.Номенклатура КАК Номенклатура, ПартииНаСкладахНачальныеОстатки.КоличествоОстаток КАК КоличествоОстаток, ПартииНаСкладахНачальныеОстатки.СуммаОстаток КАК СуммаОстаток ПОМЕСТИТЬ втПартииНаСкладахНачальныеОстатки ИЗ РегистрНакопления.ПартииНаСкладах.Остатки(&НачалоПериодаДоПрихода, ) КАК ПартииНаСкладахНачальныеОстатки ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПартииНаСкладахОстаткиИОборотыПриход.Номенклатура КАК Номенклатура, ПартииНаСкладахОстаткиИОборотыПриход.Партия КАК Партия, ПартииНаСкладахОстаткиИОборотыПриход.Партия.Контрагент КАК Поставщик, ПартииНаСкладахОстаткиИОборотыПриход.Партия.Дата КАК ДатаПрихода, ПартииНаСкладахОстаткиИОборотыПриход.КоличествоПриход КАК КоличествоПриход, ПартииНаСкладахОстаткиИОборотыПриход.СуммаПриход КАК СуммаПриход, ПартииНаСкладахОстаткиИОборотыПриход.КоличествоНачальныйОстаток КАК КоличествоНачальныйОстаток, ПартииНаСкладахОстаткиИОборотыПриход.СуммаНачальныйОстаток КАК СуммаНачальныйОстаток ПОМЕСТИТЬ втПартииНаСкладахОстаткиИОборотыПриход ИЗ РегистрНакопления.ПартииНаСкладах.ОстаткиИОбороты(&НачалоПериодаПриход, &КонецПериодаПриход, , , ) КАК ПартииНаСкладахОстаткиИОборотыПриход ГДЕ ПартииНаСкладахОстаткиИОборотыПриход.Партия.Дата МЕЖДУ &НачалоПериодаПриход И &КонецПериодаПриход ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПартииНаСкладахОстаткиИОборотыРасход.Номенклатура КАК Номенклатура, ПартииНаСкладахОстаткиИОборотыРасход.Партия КАК Партия, СУММА(ПартииНаСкладахОстаткиИОборотыРасход.КоличествоРасход) КАК КоличествоРасход, СУММА(ПартииНаСкладахОстаткиИОборотыРасход.СуммаРасход) КАК СуммаРасход ПОМЕСТИТЬ втПартииНаСкладахОстаткиИОборотыРасход ИЗ РегистрНакопления.ПартииНаСкладах.ОстаткиИОбороты(&НачалоПериодаРасход, &КонецПериодаРасход, , , ) КАК ПартииНаСкладахОстаткиИОборотыРасход СГРУППИРОВАТЬ ПО ПартииНаСкладахОстаткиИОборотыРасход.Номенклатура, ПартииНаСкладахОстаткиИОборотыРасход.Партия ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПартииНаСкладахКонечныеОстатки.Номенклатура КАК Номенклатура, ПартииНаСкладахКонечныеОстатки.Партия КАК Партия, СУММА(ПартииНаСкладахКонечныеОстатки.КоличествоОстаток) КАК КоличествоОстаток, СУММА(ПартииНаСкладахКонечныеОстатки.СуммаОстаток) КАК СуммаОстаток ПОМЕСТИТЬ втПартииНаСкладахКонечныеОстатки ИЗ РегистрНакопления.ПартииНаСкладах.Остатки КАК ПартииНаСкладахКонечныеОстатки СГРУППИРОВАТЬ ПО ПартииНаСкладахКонечныеОстатки.Номенклатура, ПартииНаСкладахКонечныеОстатки.Партия ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ втПартииНаСкладахОстаткиИОборотыПриход.Номенклатура КАК Номенклатура, втПартииНаСкладахОстаткиИОборотыПриход.Партия КАК Партия, втПартииНаСкладахОстаткиИОборотыПриход.Партия.Контрагент КАК Поставщик, втПартииНаСкладахОстаткиИОборотыПриход.Партия.Дата КАК ДатаПрихода, втПартииНаСкладахОстаткиИОборотыПриход.КоличествоПриход КАК КоличествоПриход, втПартииНаСкладахОстаткиИОборотыПриход.СуммаПриход КАК СуммаПриход, ВЫРАЗИТЬ(ЕСТЬNULL(втПартииНаСкладахОстаткиИОборотыРасход.КоличествоРасход, 0) КАК ЧИСЛО(15, 3)) КАК КоличествоРасход, втПартииНаСкладахОстаткиИОборотыРасход.СуммаРасход КАК СуммаРасход, втПартииНаСкладахКонечныеОстатки.КоличествоОстаток КАК КоличествоКонечныйОстаток, втПартииНаСкладахКонечныеОстатки.СуммаОстаток КАК СуммаКонечныйОстаток, втПартииНаСкладахНачальныеОстатки.КоличествоОстаток КАК КоличествоНачальныйОстаток, втПартииНаСкладахНачальныеОстатки.СуммаОстаток КАК СуммаНачальныйОстаток ИЗ втПартииНаСкладахОстаткиИОборотыПриход КАК втПартииНаСкладахОстаткиИОборотыПриход ЛЕВОЕ СОЕДИНЕНИЕ втПартииНаСкладахОстаткиИОборотыРасход КАК втПартииНаСкладахОстаткиИОборотыРасход ПО втПартииНаСкладахОстаткиИОборотыПриход.Номенклатура = втПартииНаСкладахОстаткиИОборотыРасход.Номенклатура И втПартииНаСкладахОстаткиИОборотыПриход.Партия = втПартииНаСкладахОстаткиИОборотыРасход.Партия ЛЕВОЕ СОЕДИНЕНИЕ втПартииНаСкладахНачальныеОстатки КАК втПартииНаСкладахНачальныеОстатки ПО втПартииНаСкладахОстаткиИОборотыПриход.Номенклатура = втПартииНаСкладахНачальныеОстатки.Номенклатура ЛЕВОЕ СОЕДИНЕНИЕ втПартииНаСкладахКонечныеОстатки КАК втПартииНаСкладахКонечныеОстатки ПО втПартииНаСкладахОстаткиИОборотыПриход.Номенклатура = втПартииНаСкладахКонечныеОстатки.Номенклатура И втПартииНаСкладахОстаткиИОборотыПриход.Партия = втПартииНаСкладахКонечныеОстатки.Партия |
|||
1
slafor
20.12.21
✎
11:04
|
&НачалоПериодаДоПрихода - это на СКД параметр ДОБАВИТЬКДАТЕ(&ПериодПриход.ДатаНачала,"СЕКУНДА",-1). То есть это за секунду до первого прихода из периода, заданного пользователем.
|
|||
2
slafor
20.12.21
✎
11:09
|
То есть первая вт
ВЫБРАТЬ ПартииНаСкладахНачальныеОстатки.Номенклатура КАК Номенклатура, ПартииНаСкладахНачальныеОстатки.КоличествоОстаток КАК КоличествоОстаток, ПартииНаСкладахНачальныеОстатки.СуммаОстаток КАК СуммаОстаток ПОМЕСТИТЬ втПартииНаСкладахНачальныеОстатки ИЗ РегистрНакопления.ПартииНаСкладах.Остатки(&НачалоПериодаДоПрихода, ) КАК ПартииНаСкладахНачальныеОстатки при отдельном запуске работает нормально - там вообще нули в итоге стоят. А при соединении с таблицей приходов - уже какие-то непонятные значения. |
|||
3
DrShad
20.12.21
✎
11:49
|
я бы делал через объединение наборов данных
|
|||
4
slafor
20.12.21
✎
12:10
|
(3) А в чем разница? Я же все равно у одному РН обращаюсь, просто в случает с оборотами - к виртуальной таблице ОстаткиИОбороты, а в другом случае - к таблице остатков.
|
|||
5
slafor
20.12.21
✎
14:16
|
(3) Спасибо, сделал путем объединения наборов данных - помогло решить вопрос.
Но теперь другая небольшая проблема - дублируются количества и суммы начального остатка, то есть и по партиям, и в целом по номенклатуре показывается начальный остаток по номенклатуре. Как это можно обойти? https://yadi.sk/i/41KSmL5YCAvQmQ . То есть надо, чтобы показывал только по Номенклатуре (этих партий-то еще не было). Пробовал по настройке ресурсов - пока не помогло. https://yadi.sk/i/blwDR29hk075cQ . |
|||
6
slafor
20.12.21
✎
17:00
|
+(5) Я, кажется, понял: когда я получал остатки на начало периода в том же наборе данных, где у меня находится основной запрос по оборотам, то моя настройка https://yadi.sk/i/blwDR29hk075cQ работает, а когда они находятся в разных наборах - нет. Не знаете, как это можно сделать?
И попутно - похожий вопрос по конечным остаткам. Решил тоже перенести их в отдельный набор данных, потому что возможно есть остатки, по которым были приходы раньше выбранного периода поступлений. Можно ли в основном запросе как-то определить, была ли партия в выбранном периоде или нет? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |