Помощь с запросом

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


Соответственно функцию вызываю при выборе товара на возврат

Если БылВозвратПоЗаявке(ТекСтрока.ДокументПродажи,ТекСтрока.Номенклатура) Тогда
		Предупреждение ("По данной номенклатуре в заявке был оформлен возврат!",10);
		Возврат;
	КонецЕсли;


Подскажите, пожалуйста, как сделать так, если в заявке может быть по количеству не один товар, а вернуть могли только один. Как это проверять?
По теме из базы знаний
Найденные решения
5. starjevschik 21.10.20 10:59 Сейчас в теме
Надо возвращать не ложь/истина, а количество возвращенного, и сравнивать с тем, что было отгружено. Посчитать, сколько еще можно вернуть этого товара, и если 0, тогда уже запрещать.
*если я правильно понял задачу*
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. BackinSoda 20.10.20 16:51 Сейчас в теме
(1) сравнивать еще и количество, видимо.
3. M_A_D 184 20.10.20 17:42 Сейчас в теме
проверяйте не строки...
Сделайте группировку строк и суммирование по количеству и проверяйте количество, если возвращаемое количество равно возвращенному, то пропускаете или ошибку выдавайте, а если возвращаемое количество меньше, то делайте возврат на количество, которое равно разнице возвращенного и возвращаемого количества товара
4. m_nazar 21.10.20 10:02 Сейчас в теме
Из регистрара продаж можна сразу получить количество и продажи и возврата по заказу. Например так:
ВЫБРАТЬ
	ВложенныйЗапрос.Регистратор,
	ВложенныйЗапрос.ЗаказПокупателя,
	ВложенныйЗапрос.Номенклатура,
	ВложенныйЗапрос.Количество,
	ВложенныйЗапрос1.РегистраторВозврат,
	ВложенныйЗапрос1.КоличествоВозврат
ИЗ
	(ВЫБРАТЬ
		Продажи.Регистратор КАК Регистратор,
		Продажи.ЗаказПокупателя КАК ЗаказПокупателя,
		Продажи.Номенклатура КАК Номенклатура,
		СУММА(Продажи.Количество) КАК Количество
	ИЗ
		РегистрНакопления.Продажи КАК Продажи
	ГДЕ
		Продажи.ЗаказПокупателя = &ЗаказПокупателя
		И Продажи.Номенклатура = &Номенклатура
		И Продажи.Количество > 0
	
	СГРУППИРОВАТЬ ПО
		Продажи.Номенклатура,
		Продажи.ЗаказПокупателя,
		Продажи.Регистратор) КАК ВложенныйЗапрос
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			Продажи.Регистратор КАК РегистраторВозврат,
			Продажи.ЗаказПокупателя КАК ЗаказПокупателя,
			Продажи.Номенклатура КАК Номенклатура,
			СУММА(Продажи.Количество) КАК КоличествоВозврат
		ИЗ
			РегистрНакопления.Продажи КАК Продажи
		ГДЕ
			Продажи.ЗаказПокупателя = &ЗаказПокупателя
			И Продажи.Номенклатура = &Номенклатура
			И Продажи.Количество < 0
		
		СГРУППИРОВАТЬ ПО
			Продажи.Номенклатура,
			Продажи.ЗаказПокупателя,
			Продажи.Регистратор) КАК ВложенныйЗапрос1
		ПО ВложенныйЗапрос.ЗаказПокупателя = ВложенныйЗапрос1.ЗаказПокупателя
			И ВложенныйЗапрос.Номенклатура = ВложенныйЗапрос1.Номенклатура
Показать
5. starjevschik 21.10.20 10:59 Сейчас в теме
Надо возвращать не ложь/истина, а количество возвращенного, и сравнивать с тем, что было отгружено. Посчитать, сколько еще можно вернуть этого товара, и если 0, тогда уже запрещать.
*если я правильно понял задачу*
6. user1255844 21.10.20 11:30 Сейчас в теме
(5) спасибо, ваш совет помог!
7. dehro 7 23.10.20 16:19 Сейчас в теме
В запросе "... | И ВозвратТоваровОтПокупателя.Проведен = ИСТИНА..." Излишне. Внутренее соединение с регистром выведет только проведённые элементы (как обмануть систему я знаю, но подозреваю что в бубен возле это базы никто не бил)

"... | И Продажи.Номенклатура.Ссылка = &Номенклатура";
Масло маслянное: | И Продажи.Номенклатура = &Номенклатура";
А то +1 таблица в sql запросе будет соединяться.

В остальном уже ответили.
Оставьте свое сообщение

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