Запросы и регистры сведений

1. user618695_ka 08.12.16 11:22 Сейчас в теме
Задача: построить отчет, который выводит остатки не свежих товаров (т.е. условие: дата закупки > X дней).

Как рассуждаю:
1. Отметаем свежие товары (Условие: ДатаЗакупки < ДекущаяДата - Х);
2. Из того что осталось, вычитаем расход товаров (у нас ФИФО);
3. Если остатки меньше нуля (т.е. не свежие кончились и пошел расход свежих) - убираем эти строки.

Пытаюсь в запросе реализовать первый пункт:

ВЫБРАТЬ
	ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоПриход,
	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход,
	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток
ИЗ
	РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты КАК ПартииТоваровНаСкладахОстаткиИОбороты
ГДЕ
	ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Дата < ДОБАВИТЬКДАТЕ(&КонецПериода, ДЕНЬ, -&КоличествоДнейСМоментаЗакупки)
Показать


Но вместо того, чтобы уменьшался приход при увеличении &КоличествоДнейСМоментаЗакупки, строки просто исчезают из отчёта целиком.

Подскажите, что не так? (приложил внешний отчет УТ10.3)
Прикрепленные файлы:
ОстаткиПоПартиям_2.erf
По теме из базы знаний
Найденные решения
14. Ганс 12.12.16 14:34 Сейчас в теме
(12) Я не уверен, но мне кажется, что для 2ух условий вам нужно будет брать 2 таблицы(и накладывать условия в виртуальной таблице, а не в "ГДЕ")

Немного не понял, почему (6) не работает? Строки он тогда не удаляет, цифры должны меняться, на худой конец сделать условие чтоб не выводил нулевые строки(для того что-бы уменьшить количество строк)
user618695_ka; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
7. alexei366 08.12.16 16:08 Сейчас в теме
(1) Почему ты считаешь что у тебя при увеличении параметра будут меняться цифры "Количество...."?
10. user618695_ka 12.12.16 13:51 Сейчас в теме
(7) Потому что условие будет выполняться для всё большего количества документов
ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Дата >= ДОБАВИТЬКДАТЕ(&КонецПериода, ДЕНЬ, -&КоличествоДнейСМоментаЗакупки)
2. S.V.Y 17 08.12.16 11:34 Сейчас в теме
Ну если только остатки, то
ВЫБРАТЬ
    ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
    ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток
ИЗ
    РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты КАК ПартииТоваровНаСкладахОстаткиИОбороты
ГДЕ
    ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Дата < ДОБАВИТЬКДАТЕ(&КонецПериода, ДЕНЬ, &КоличествоДнейСМоментаЗакупки)

Зачем усложнять? Или есть нюансы?
5. user618695_ka 08.12.16 15:49 Сейчас в теме
(2)
ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоПриход,
ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход,

Написаны для того, чтобы отследить поведение отчёта.

Так, например, данная строка не отсеивает приходы с нужной датой, а сразу удаляется и приход и расход и остаток, в общем вся строка:
ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Дата < ДОБАВИТЬКДАТЕ(&КонецПериода, ДЕНЬ, &КоличествоДнейСМоментаЗакупки)

Это не правильно, и хотелось бы разобраться почему это не работает и как правильно сделать..
3. ivan811 08.12.16 14:30 Сейчас в теме
А не проще сделать в регистре измерение- дата прихода, и смотреть по ней уже и списывать наиболее "древние товары"? Хотя если база рабочая- такие изменения вносить сложновато будет....
Просто накладывать условия не на виртуальную таблицу, а уже на выборку - неправильно все таки
4. user618695_ka 08.12.16 15:45 Сейчас в теме
(3) регистр трогать не хотелось бы, отчет внешний
6. Ганс 08.12.16 15:51 Сейчас в теме
выбор когда ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Дата < ДОБАВИТЬКДАТЕ(&КонецПериода, ДЕНЬ, -&КоличествоДнейСМоментаЗакупки) Тогда 0 Иначе ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток конец

это вместо КоличествоКонечныйОстаток

и из Где условие убери, если не хочешь чтоб он тебе строки целиком убирал
9. user618695_ka 12.12.16 13:50 Сейчас в теме
(6)
ВЫБРАТЬ
	ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход,
	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,
	ВЫБОР
		КОГДА ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Дата >= ДОБАВИТЬКДАТЕ(&КонецПериода, ДЕНЬ, -&КоличествоДнейСМоментаЗакупки)
			ТОГДА 0
		ИНАЧЕ ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоПриход
	КОНЕЦ КАК Приход
ИЗ
	РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты КАК ПартииТоваровНаСкладахОстаткиИОбороты
Показать


Так вообще поле "Приход" не отображается. Отображается, в ресурсы не добавил.
Но всё равно не работает. Не меняется количество..
12. user618695_ka 12.12.16 14:03 Сейчас в теме
(6) возможно ли в одном запросе ресурсы регистра брать на разные даты?

ВЫБРАТЬ
	ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоПриход,
	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход,
	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток
ИЗ
	РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты КАК ПартииТоваровНаСкладахОстаткиИОбороты
ГДЕ
	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоПриход (и тут условие, что КоличествоПриход на такое-то число) И
	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход (на КонецПериода)
Показать

14. Ганс 12.12.16 14:34 Сейчас в теме
(12) Я не уверен, но мне кажется, что для 2ух условий вам нужно будет брать 2 таблицы(и накладывать условия в виртуальной таблице, а не в "ГДЕ")

Немного не понял, почему (6) не работает? Строки он тогда не удаляет, цифры должны меняться, на худой конец сделать условие чтоб не выводил нулевые строки(для того что-бы уменьшить количество строк)
user618695_ka; +1 Ответить
15. user618695_ka 12.12.16 15:46 Сейчас в теме
8. E_Johnny 08.12.16 17:20 Сейчас в теме
создай список номенклатуры ЛЕВЫМ (ПРАВЫМ) соединением
и тогда список номенклатуры будет неизменным, а остатки будут меняться, вплоть до нуля
11. user618695_ka 12.12.16 13:52 Сейчас в теме
(8) было бы здорово, но не с базой где куча номенклатуры, которая не используется
13. naa1c 80 12.12.16 14:17 Сейчас в теме
(0) ДокументОприходования - это измерение РН. Для указанной задачи достаточно наложить условие в параметрах виртуальной таблицы. И использовать РегистрНакопления.ПартииТоваровНаСкладах.Остатки, а не РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты.
user618695_ka; +1 Ответить
16. user618695_ka 14.12.16 10:22 Сейчас в теме
(13) Это работает, спасибо)

На данном этапе запрос выглядит так:
ВЫБРАТЬ
	ПартииТоваровНаСкладахОстаткиИОбороты.Номенклатура,
	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоПриход,
	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоРасход,
	ПартииТоваровНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток,
	ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования,
	ПартииТоваровНаСкладахОстаткиИОбороты.ДокументОприходования.Дата
ИЗ
	РегистрНакопления.ПартииТоваровНаСкладах.ОстаткиИОбороты(, , , , ДокументОприходования.Дата < &Дата) КАК ПартииТоваровНаСкладахОстаткиИОбороты
Показать


Я добавил в него документ, совершающий движение, и увидел что работает это немножко не так..

Необходимо было отсеять поступления товаров по условию. Условие написал следующее: ДокументОприходования.Дата < &Дата
Но в итоге вместе с нужными документами отсеялись и все документы прихода, так как они тоже не выполняют этого условия.

Подскажите, как поправить этот момент?
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот