Запрос по остаткам товара на складах.

1. user606894_schana1w3 10.11.22 10:41 Сейчас в теме
Здравствуйте, подскажите пожалуйста как можно сделать.

Нужен запрос который выведет только те позиции номенклатуры которые есть на ВСЕХ складах.

К примеру.

У нас 5 складов.

Передаем в параметр запроса = "Конструктор лего"

Если "Конструктор лего" нет хотябы на 1 из 5 складов, он в результат не должен попадать.

Можно ли как-то в запросе это отобрать, или через цикл только?
По теме из базы знаний
Найденные решения
2. tamidi 8 10.11.22 10:51 Сейчас в теме
Ну самое простое выбрать номенклатуру по остаткам регистра накопления с группировкой по складам и указать в условии
ИМЕЮЩИЕ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ИмяРегистра.Склад) = 5
user1278383; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. tamidi 8 10.11.22 10:51 Сейчас в теме
Ну самое простое выбрать номенклатуру по остаткам регистра накопления с группировкой по складам и указать в условии
ИМЕЮЩИЕ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ИмяРегистра.Склад) = 5
user1278383; +1 Ответить
4. user1831019 10.11.22 16:39 Сейчас в теме
(2) А завтра в системе появится еще один (шестой) склад, и придется переписывать запрос...
6. tamidi 8 10.11.22 16:44 Сейчас в теме
(4) Можно вначале вычислять количество складов
Я предложила идею, реализацию можно сделать как угодно
8. user1831019 10.11.22 16:47 Сейчас в теме
(6) И как? Отдельным запросом к БД? Чтобы потом программно изменять текст запроса или устанавливать его новые параметры?
9. tamidi 8 10.11.22 16:53 Сейчас в теме
(8)Не поленилась я)
Мертвого достанешь своими язвительными замечаниями
ВЫБРАТЬ
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Склады.Ссылка) КАК КоличествоСкладов
ПОМЕСТИТЬ ВТ_Склады
ИЗ
	Справочник.Склады КАК Склады
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТоварыНаСкладахОстатки.Склад) КАК Склад,
	ТоварыНаСкладахОстатки.Номенклатура,
	ВТ_Склады.КоличествоСкладов
ИЗ
	РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Склады КАК ВТ_Склады
		ПО (ИСТИНА)

СГРУППИРОВАТЬ ПО
	ТоварыНаСкладахОстатки.Номенклатура,
	ВТ_Склады.КоличествоСкладов

ИМЕЮЩИЕ
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТоварыНаСкладахОстатки.Склад) = ВТ_Склады.КоличествоСкладов 
Показать
user606894_schana1w3; +1 Ответить
11. Prikum 3 10.11.22 16:56 Сейчас в теме
(9)а это точно на определенный момент работает?
12. tamidi 8 10.11.22 16:58 Сейчас в теме
(11) О каком моменте речь, что-то я к вечеру туплю?
13. Prikum 3 10.11.22 17:00 Сейчас в теме
(12)о моменте остатков, вчера были одни остатки, сегодня уже другие!
15. tamidi 8 10.11.22 17:07 Сейчас в теме
(13)А почему нет, добавить параметр не проблема, не было конкретики в вопросе, поэтому я взяла текущий остаток
18. Prikum 3 10.11.22 17:12 Сейчас в теме
22. tamidi 8 10.11.22 17:15 Сейчас в теме
(18)Да, т.к. запрос по всей номенклатуре, в отличии от вашего
23. Prikum 3 10.11.22 17:15 Сейчас в теме
(22)я уже посыпал голову пеплом!
25. tamidi 8 10.11.22 17:17 Сейчас в теме
(23)Я не успеваю за ответами следить;)
16. user1831019 10.11.22 17:10 Сейчас в теме
(13) Надо смотреть текущие оперативные остатки, судя по тексту ТС.
14. user1831019 10.11.22 17:01 Сейчас в теме
(9)
Мертвого достанешь своими язвительными замечаниями
Дык это и есть самая правильная помощь, чтобы вопрошающий начал думать и понимать смысл происходящего )))
Кто хочет - начнет думать, искать решения, и станет специалистом.
Кто не хочет - будет попрошайничать "дайте мне код".

1. У тебя в запросе нет количества номенклатуры.
2. Непонятный агрегат КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТоварыНаСкладахОстатки.Склад) КАК Склад
17. tamidi 8 10.11.22 17:12 Сейчас в теме
(14)
У тебя в запросе нет количества номенклатуры

Количество зачем?
вопрос был: запрос который выведет только те позиции номенклатуры которые есть на ВСЕХ складах.

(14)
Непонятный агрегат КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТоварыНаСкладахОстатки.Склад) КАК Склад

Это ответ на форуме, его следует оформлять согласно стандартам?
21. user1831019 10.11.22 17:14 Сейчас в теме
(17)
те позиции номенклатуры которые есть на ВСЕХ складах.
Согласен, проглядел.
его следует оформлять согласно стандартам?
Стандартов нет, есть только взаимоуважение. Одну строчку кода можно написать и обычным текстом (по моему скромному убеждению).
3. Azgerd 10.11.22 16:37 Сейчас в теме
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Склады.Ссылка КАК Ссылка,
		|	Склады.Представление КАК Представление,
		|	ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток
		|ИЗ
		|	Справочник.Склады КАК Склады
		|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(&МоментВремени, Номенклатура = &Номенклатура) КАК ОстаткиНоменклатурыОстатки
		|		ПО Склады.Ссылка = ОстаткиНоменклатурыОстатки.Склад";
	
	Запрос.УстановитьПараметр("МоменВремени", МоментВремени());
	Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Если ВыборкаДетальныеЗаписи.КоличествоОстаток = 0 Тогда
			Отказ = Истина;
		КонецЕсли;	
	КонецЦикла;
Показать
5. user1831019 10.11.22 16:42 Сейчас в теме
(3) И как это поможет? Надо сначала получить таблицу складов, по которой потом делать отдельное внутреннее соединение с таблицей остатков. (С постусловием ГДЕ НЕ Склад ЕСТЬ NULL)

И что такое Отказ = Истина в обработке запроса?
7. tamidi 8 10.11.22 16:46 Сейчас в теме
(3) И еще цикл по номенклатуре добавить?
10. Prikum 3 10.11.22 16:54 Сейчас в теме
Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ РАЗЛИЧНЫЕ 
        |ОстаткиНоменклатурыОстатки.Склад КАК Склад
        | Поместить ВТ_Остатки        
        |    ИЗ
        |        РегистрНакопления.ОстаткиНоменклатуры.Остатки(&МоментВремени, Номенклатура = &Номенклатура) КАК ОстаткиНоменклатурыОстатки
        | ;
        |Выбрать 
        |   Склады.Ссылка 
        |ИЗ Справочник.Склады КАК Склады
        |ГДЕ
        | НЕ Склады.Ссылка В ( Выбрать ВТ_Остатки.Склад ИЗ ВТ_Остатки)
        |
        |";
    
    Запрос.УстановитьПараметр("МоменВремени", МоментВремени());
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Если РезультатЗапроса.Пустой() Тогда
// все отлично
КонецЕсли;
Показать
19. user1831019 10.11.22 17:12 Сейчас в теме
(10) Что это? В результате нужны позиции номенклатуры, а не список складов.
20. Prikum 3 10.11.22 17:13 Сейчас в теме
(19)да, лопухнулся
user1831019; +1 Ответить
24. user1831019 10.11.22 17:17 Сейчас в теме
(20) Не сочти мой плюс за радость. Это профессиональное уважение к коллегам, которые имеют силу воли признать ошибку.
Ошибаются все!
26. Prikum 3 10.11.22 17:18 Сейчас в теме
(24)с кем не бывает, как говорят и на старуху, бывает проруха!

Автор что то пропал.
user1831019; +1 Ответить
27. user1831019 10.11.22 17:23 Сейчас в теме
28. user606894_schana1w3 11.11.22 11:55 Сейчас в теме
Всем спасибо, получилось все.)
Оставьте свое сообщение

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