Помогите сформировать правильно запрос

1. ghostrid3r 30.08.18 09:53 Сейчас в теме
Добрый день уважаемые форумчане.
Суть вопроса в чем, необходимо чтобы запрос показал все данные списаний за период, где в день списания по списываемому товары не было прихода на склад.
Что то я не соображу как прикрутить.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Doreng 27 30.08.18 10:08 Сейчас в теме
(1)1-й запрос - Выбрать товары по которым были приходы на склад 2-й запрос - выбрать товары из регистра накопления где регистратор списание с фильтром по списку из первого запроса, свернуть по регистратору, если нужен текст запроса указывайте конфигурацию в которой работаете
SagittariusA; +1 Ответить
3. ghostrid3r 30.08.18 10:15 Сейчас в теме
4. ghostrid3r 30.08.18 10:31 Сейчас в теме
(2)
получается мы вибираем все приходы за период из регистра Товары на складах, далее вторым запросом выбираем из регистра "Товары на складах" все списания по товарам из прихода?
А если не было прихода, или был а потом отменили.
Вот такие ситуации надо показать, когда прихода небыло, а сделали списание.
5. Doreng 27 30.08.18 10:35 Сейчас в теме
(4)Возможно я не совсем уловил суть задачи, но попробуйте так
ВЫБРАТЬ
	ТоварыНаСкладах.Номенклатура
ПОМЕСТИТЬ ВтПриход
ИЗ
	РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
ГДЕ
	ТоварыНаСкладах.Склад = &Склад
	И ТоварыНаСкладах.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
	И ТоварыНаСкладах.Период >= &ДатаНачала
	И ТоварыНаСкладах.Период <= &ДатаОкончания
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ТоварыНаСкладах.Регистратор
ИЗ
	РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
		ЛЕВОЕ СОЕДИНЕНИЕ ВтПриход КАК ВтПриход
		ПО ТоварыНаСкладах.Номенклатура <> ВтПриход.Номенклатура
ГДЕ
	ТоварыНаСкладах.Регистратор ССЫЛКА Документ.СписаниеТоваров
	И ТоварыНаСкладах.Период >= &ДатаНачала
	И ТоварыНаСкладах.Период <= &ДатаОкончания
	И ТоварыНаСкладах.Склад = &Склад
Показать

Приложил обработку которой тестировал
Прикрепленные файлы:
ЗапросСФильтромПоСписанию.epf
6. ghostrid3r 30.08.18 10:54 Сейчас в теме
(5)
так тут не видно даты прихода товара на склад.
просто вся номенклатура которая приходила на склад за выбранный период.

а нужно именно показать ту ситуацию, где в день списания товара (именно в тот день когда был документ "Списание товара"), не было прихода (не было документа "Поступления товаров и услуг")
9. Doreng 27 30.08.18 11:06 Сейчас в теме
(6)Давайте попробуем дубово - для понимания задачи
Процедура КнопкаВыполнитьНажатие(Кнопка)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |	ТоварыНаСкладах.Номенклатура,
               |	ТоварыНаСкладах.Регистратор,
               |	ТоварыНаСкладах.Регистратор.Дата Как Дата
               |ИЗ
               |	РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
               |ГДЕ
               |	ТоварыНаСкладах.Регистратор ССЫЛКА Документ.СписаниеТоваров
               |	И ТоварыНаСкладах.Период >= &ДатаНачала
               |	И ТоварыНаСкладах.Период <= &ДатаОкончания
               |	И ТоварыНаСкладах.Склад = &Склад";
Склад =  Справочники.Склады.НайтиПоКоду("000000001");
Запрос.УстановитьПараметр("ДатаНачала",Дата("20180101"));
Запрос.УстановитьПараметр("ДатаОкончания",Дата("20180501"));
Запрос.УстановитьПараметр("Склад",Склад);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Если ПроверитьПриход(Результат.Номенклатура,Результат.Дата,Склад) = Ложь Тогда
Сообщить(Результат.Регистратор);	
	КонецЕсли;
	КонецЦикла;
КонецПроцедуры

Функция ПроверитьПриход(Номенклатура,Дата,Склад)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |	ТоварыНаСкладах.Номенклатура
               |ИЗ
               |	РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
               |ГДЕ
               |	ТоварыНаСкладах.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
               |	И ТоварыНаСкладах.Период >= &ДатаНачала
               |	И ТоварыНаСкладах.Период <= &ДатаОкончания
               |	И ТоварыНаСкладах.Склад = &Склад
               |	И ТоварыНаСкладах.Номенклатура = &Номенклатура";
Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(Дата));
Запрос.УстановитьПараметр("ДатаОкончания",КонецДня(Дата));
Запрос.УстановитьПараметр("Склад",Склад);
Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
Возврат Истина;
Иначе
Возврат Ложь;
	КонецЕсли;
	КонецФункции

Показать
7. ghostrid3r 30.08.18 10:59 Сейчас в теме
т.е. если товар пришел на склад 29.08.18, а списание было уже 30.08.18 такой случай надо показать
а если в один день и пришел и списали. то такие ситуации не нужно отображать.
8. herfis 500 30.08.18 11:06 Сейчас в теме
1. Делаем выборку "дни/номенклатура", по которым были списания за период во временную таблицу.
2. Левым соединением к ней цепляем приходы по день/номенклатура с условием в ГДЕ приход ЕСТЬ NULL, выбирая различные день/номенклатура (это будет табличка комбинаций день/номенклатура, по которым списания были, а приходов не было)
3. Фильтруем списания за период полученной табличкой.
10. ghostrid3r 30.08.18 12:14 Сейчас в теме
(8) запрос такой ?
ВЫБРАТЬ РАЗЛИЧНЫЕ
	ТаблицаСписаний.Номенклатура,
	ТаблицаСписаний.ДатаСписания,
	ТоварыНаСкладах.Период КАК ДатаПрихода
ИЗ
	(ВЫБРАТЬ
		СписаниеТоваровТовары.Номенклатура КАК Номенклатура,
		СписаниеТоваровТовары.Ссылка.Дата КАК ДатаСписания,
		СписаниеТоваровТовары.Ссылка.Склад КАК Склад
	ИЗ
		Документ.СписаниеТоваров.Товары КАК СписаниеТоваровТовары
	ГДЕ
		СписаниеТоваровТовары.Ссылка.Проведен
		И СписаниеТоваровТовары.Ссылка.Дата МЕЖДУ &ДатаНач И &ДатаКон) КАК ТаблицаСписаний
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
		ПО ТаблицаСписаний.Номенклатура = ТоварыНаСкладах.Номенклатура
			И (НАЧАЛОПЕРИОДА(ТаблицаСписаний.ДатаСписания, ДЕНЬ) = НАЧАЛОПЕРИОДА(ТоварыНаСкладах.Период, ДЕНЬ))
			И ТаблицаСписаний.Склад = ТоварыНаСкладах.Склад
ГДЕ
	ТоварыНаСкладах.ВидДвижения = &ВидДвижения
	И ТоварыНаСкладах.Период МЕЖДУ &ДатаНач И &ДатаКон
	И ТоварыНаСкладах.Количество ЕСТЬ NULL 
Показать
11. ghostrid3r 30.08.18 12:24 Сейчас в теме
(10) мне кажется где то накосячил, т.к. запрос данных не выдает, пишет что мол все уходило и приходило в один день.
12. herfis 500 30.08.18 13:17 Сейчас в теме
(11)
ТоварыНаСкладах.ВидДвижения = &ВидДвижения 

Это надо перенести в условия соединения. Да и без параметра можно сделать.
ЗЫ. Источники данных обсуждать не буду - может и лучше можно сделать. Но сама логика примерно такая.
13. user821733 30.08.18 16:36 Сейчас в теме
ВЫБРАТЬ
ТоварыНаСкладахОбороты.Номенклатура,
ТоварыНаСкладахОбороты.Регистратор,
ТоварыНаСкладахОбороты.КоличествоПриход,
ТоварыНаСкладахОбороты.КоличествоРасход,
НАЧАЛОПЕРИОДА(ТоварыНаСкладахОбороты.Период, ДЕНЬ) КАК День
ПОМЕСТИТЬ табТоварыНаСкладах
ИЗ
РегистрНакопления.ТоварыНаСкладах.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, ) КАК ТоварыНаСкладахОбороты
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
табТоварыНаСкладах.Номенклатура,
табТоварыНаСкладах.День
ПОМЕСТИТЬ табПриходы
ИЗ
табТоварыНаСкладах КАК табТоварыНаСкладах
ГДЕ
табТоварыНаСкладах.КоличествоПриход > 0

СГРУППИРОВАТЬ ПО
табТоварыНаСкладах.Номенклатура,
табТоварыНаСкладах.День
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
табТоварыНаСкладах.Номенклатура,
табТоварыНаСкладах.Регистратор,
табТоварыНаСкладах.КоличествоРасход,
табТоварыНаСкладах.День
ИЗ
табТоварыНаСкладах КАК табТоварыНаСкладах
ЛЕВОЕ СОЕДИНЕНИЕ табПриходы КАК табПриходы
ПО (табПриходы.Номенклатура = табТоварыНаСкладах.Номенклатура)
И (табПриходы.День = табТоварыНаСкладах.День)
ГДЕ
табПриходы.Номенклатура ЕСТЬ NULL
Оставьте свое сообщение

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