Запрос с обязательным и не обязательным условием

1. den_vrn 12 12.08.19 16:44 Сейчас в теме
Необходимо настроить связи между двумя таблицами По Номенклатуре Количеству и Цене

Номенклатура обязательная связь (без неё никак) :
ВТ_ДаннЗаказа.НоменклатураЗаказано = ВТ_ДаннПоставщика.Номенклатура


Количество и цена не обязательные (есть хорошо нет ну черт с ними)

ВТ_ДаннЗаказа.КоличествоЗаказано = ВТ_ДаннПоставщика.Количество
ВТ_ДаннЗаказа.ЦенаЗаказано = ВТ_ДаннПоставщика.Цена



Можно ли это реализовать?

пробовал вот такую конструкцию чето не катит ))))

ВТ_ДаннЗаказа.НоменклатураЗаказано = ВТ_ДаннПоставщика.Номенклатура И
ВТ_ДаннЗаказа.КоличествоЗаказано = ВТ_ДаннПоставщика.Количество
	ИЛИ ВТ_ДаннЗаказа.ЦенаЗаказано = ВТ_ДаннПоставщика.Цена
По теме из базы знаний
Ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
5. Fox-trot 157 12.08.19 17:28 Сейчас в теме
(1) количество и все что хочется сравнить используй в секции Упорядочить типа КоличествоЗаказано = Количество УБЫВ
6. den_vrn 12 13.08.19 07:59 Сейчас в теме
(5) пробовал но в моем случае не прокатывает и конструкция получается
УПОРЯДОЧИТЬ ПО
	|	НомерСтрокиДокумента,
	|	АртикулЗаказано,
	|	КоличествоЗаказано,
	|	КоличествоПоставщика,
	|	ЦенаЗаказано,
	|	ЦенаРасхождения
2. aka Любитель XML 12.08.19 17:17 Сейчас в теме
И (ВЫБОР КОГДА ВТ_ДаннПоставщика.Количество <> NULL ТОГДА
ВТ_ДаннЗаказа.КоличествоЗаказано = ВТ_ДаннПоставщика.Количество
ИНАЧЕ ИСТИНА
КОНЕЦ)


Как-то так попробуй в связи прописать. сравнение на null возможно надо по-другому написать, но смысл должен быть понятен
3. antz 12.08.19 17:19 Сейчас в теме
(2) С null'ом сравнивать нельзя :)
4. aka Любитель XML 12.08.19 17:22 Сейчас в теме
(3) значит ВЫБОР КОГДА ЕСТЬNULL(ВТ_ДаннПоставщика.Количество,0) <> 0
7. den_vrn 12 13.08.19 08:01 Сейчас в теме
С нулами все ОК ))) они во первых обрабатывется во временных таблицах во вторых вероятность: ЕСТЬNULL только если данных вообще нет.
8. den_vrn 12 13.08.19 08:02 Сейчас в теме
собственно запрос вот такой



ВЫБРАТЬ
	ДанныеПоставщика.ЗагружаемыйАртикул КАК Артикул,
	ДанныеПоставщика.Номенклатура,
	ДанныеПоставщика.Количество,
	ДанныеПоставщика.Цена
ПОМЕСТИТЬ ВТ_ДаннПоставщика
ИЗ
	&ДанныеПоставщика КАК ДанныеПоставщика
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ДанныеИзЗаказа.АртикулЗаказано,
	ДанныеИзЗаказа.НоменклатураЗаказано,
	ДанныеИзЗаказа.КоличествоЗаказано,
	ДанныеИзЗаказа.ЦенаЗаказано,
	ЕСТЬNULL(ДанныеИзЗаказа.НомерСтрокиДокумента, 0) КАК НомерСтрокиДокумента
ПОМЕСТИТЬ ВТ_ДаннЗаказа
ИЗ
	&ДанныеИзЗаказа КАК ДанныеИзЗаказа
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_ДаннЗаказа.АртикулЗаказано КАК АртикулЗаказано,
	ВТ_ДаннЗаказа.НоменклатураЗаказано КАК НоменклатураЗаказано,
	ВТ_ДаннЗаказа.КоличествоЗаказано КАК КоличествоЗаказано,
	ВТ_ДаннЗаказа.ЦенаЗаказано КАК ЦенаЗаказано,
	ВТ_ДаннПоставщика.Артикул КАК АртикулПоставщика,
	ВТ_ДаннПоставщика.Номенклатура КАК НоменклатураПоставщика,
	ВТ_ДаннПоставщика.Количество КАК КоличествоПоставщика,
	ВТ_ДаннПоставщика.Цена КАК ЦенаПоставщика,
	ВЫБОР
		КОГДА ЕСТЬNULL(ВТ_ДаннЗаказа.АртикулЗаказано, "") <> ЕСТЬNULL(ВТ_ДаннПоставщика.Артикул, "")
			ТОГДА ИСТИНА
	КОНЕЦ КАК АртикулРасхождения,
	ЕСТЬNULL(ВТ_ДаннЗаказа.ЦенаЗаказано, 0) - ЕСТЬNULL(ВТ_ДаннПоставщика.Цена, 0) КАК ЦенаРасхождения,
	ЕСТЬNULL(ВТ_ДаннЗаказа.КоличествоЗаказано, 0) - ЕСТЬNULL(ВТ_ДаннПоставщика.Количество, 0) КАК КоличествоРасхождения,
	ВТ_ДаннЗаказа.НомерСтрокиДокумента
ПОМЕСТИТЬ ВТ_Итоговая
ИЗ
	ВТ_ДаннЗаказа КАК ВТ_ДаннЗаказа
		ПОЛНОЕ СОЕДИНЕНИЕ ВТ_ДаннПоставщика КАК ВТ_ДаннПоставщика
		ПО ВТ_ДаннЗаказа.НоменклатураЗаказано = ВТ_ДаннПоставщика.Номенклатура
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Итоговая.АртикулЗаказано КАК АртикулЗаказано,
	ВТ_Итоговая.НоменклатураЗаказано,
	ВТ_Итоговая.КоличествоЗаказано КАК КоличествоЗаказано,
	ВТ_Итоговая.ЦенаЗаказано КАК ЦенаЗаказано,
	ВТ_Итоговая.АртикулПоставщика КАК АртикулПоставщика,
	ВТ_Итоговая.НоменклатураПоставщика,
	ВТ_Итоговая.КоличествоПоставщика КАК КоличествоПоставщика,
	ВТ_Итоговая.ЦенаПоставщика,
	ВТ_Итоговая.АртикулРасхождения,
	ВТ_Итоговая.ЦенаРасхождения КАК ЦенаРасхождения,
	ВТ_Итоговая.КоличествоРасхождения КАК КоличествоРасхождения,
	ВЫБОР
		КОГДА ВТ_Итоговая.АртикулРасхождения
			ТОГДА ИСТИНА
		КОГДА ВТ_Итоговая.КоличествоРасхождения <> 0
			ТОГДА ИСТИНА
		КОГДА ВТ_Итоговая.ЦенаРасхождения <> 0
			ТОГДА ИСТИНА
		ИНАЧЕ ЛОЖЬ
	КОНЕЦ КАК ЕстьРасхождения,
	ВТ_Итоговая.НомерСтрокиДокумента КАК НомерСтрокиДокумента
ИЗ
	ВТ_Итоговая КАК ВТ_Итоговая

УПОРЯДОЧИТЬ ПО
	НомерСтрокиДокумента,
	АртикулЗаказано
Показать
9. den_vrn 12 13.08.19 08:05 Сейчас в теме
Вот там где связь:
ПОЛНОЕ СОЕДИНЕНИЕ ВТ_ДаннПоставщика КАК ВТ_ДаннПоставщика 
ПО ВТ_ДаннЗаказа.НоменклатураЗаказано = ВТ_ДаннПоставщика.Номенклатура 

надо долепить ещё и

ВТ_ДаннЗаказа.КоличествоЗаказано = ВТ_ДаннПоставщика.Количество 
ИЛИ ВТ_ДаннЗаказа.ЦенаЗаказано = ВТ_ДаннПоставщика.Цена
10. catena 110 13.08.19 08:20 Сейчас в теме
(9)Сколько будет 2*2+2?
ИЛИ - логическое сложение.
И - логическое умножение.
Расставьте скобки и будет вам щастье.
12. den_vrn 12 13.08.19 09:03 Сейчас в теме
(10) 1С-ка сама скобки убирает в связях не прокатывает
13. catena 110 13.08.19 10:20 Сейчас в теме
(12)
1С-ка сама скобки убирает в связях не прокатывает
Вы врете, 1С убирает только те скобки, которые не играют роли приоритета. Скопируйте текст ниже, отформатируйте конструктором и убедитесь.

ВЫБРАТЬ
	ИСТИНА
		И (ИСТИНА
			ИЛИ ЛОЖЬ) КАК Поле1
14. den_vrn 12 13.08.19 10:59 Сейчас в теме
(13)
рете, 1С убирает только те скобки, которые не играют роли приоритета. Скопируйте текст ниже, отформатируйте конструктором и убедитесь.


Значит через скобки тоже не работает, делал так:

(ВТ_ДаннЗаказа.НоменклатураЗаказано = ВТ_ДаннПоставщика.Номенклатура 
  И ВТ_ДаннЗаказа.КоличествоЗаказано = ВТ_ДаннПоставщика.Количество
  И ВТ_ДаннЗаказа.ЦенаЗаказано = ВТ_ДаннПоставщика.Цена)                             ИЛИ

(ВТ_ДаннЗаказа.НоменклатураЗаказано = ВТ_ДаннПоставщика.Номенклатура 
  И ВТ_ДаннЗаказа.КоличествоЗаказано = ВТ_ДаннПоставщика.Количество)        ИЛИ

(ВТ_ДаннЗаказа.НоменклатураЗаказано = ВТ_ДаннПоставщика.Номенклатура 
  И ВТ_ДаннЗаказа.ЦенаЗаказано = ВТ_ДаннПоставщика.Цена)                             ИЛИ

(ВТ_ДаннЗаказа.НоменклатураЗаказано = ВТ_ДаннПоставщика.Номенклатура)		
Показать
15. catena 110 14.08.19 06:19 Сейчас в теме
(14)Ну, значит нет там совпадений. Все работает.
Прикрепленные файлы:
11. den_vrn 12 13.08.19 08:33 Сейчас в теме
Смысл в том что я не могу наложить одновременно несколько условий мне нужно гибкое применение в этом случае одно условие в этом 3 условия что то типо этого

ИЗ
	ВТ_ДаннЗаказа КАК ВТ_ДаннЗаказа
		ПОЛНОЕ СОЕДИНЕНИЕ ВТ_ДаннПоставщика КАК ВТ_ДаннПоставщика
		ПО (ВЫБОР
				КОГДА ВТ_ДаннЗаказа.НоменклатураЗаказано = ВТ_ДаннПоставщика.Номенклатура
						И ВТ_ДаннЗаказа.КоличествоЗаказано = ВТ_ДаннПоставщика.Количество
						И ВТ_ДаннЗаказа.ЦенаЗаказано = ВТ_ДаннПоставщика.Цена
					ТОГДА ВТ_ДаннЗаказа.НоменклатураЗаказано = ВТ_ДаннПоставщика.Номенклатура
							И ВТ_ДаннЗаказа.КоличествоЗаказано = ВТ_ДаннПоставщика.Количество
							И ВТ_ДаннЗаказа.ЦенаЗаказано = ВТ_ДаннПоставщика.Цена
				КОГДА ВТ_ДаннЗаказа.НоменклатураЗаказано = ВТ_ДаннПоставщика.Номенклатура
						И ВТ_ДаннЗаказа.КоличествоЗаказано = ВТ_ДаннПоставщика.Количество
					ТОГДА ВТ_ДаннЗаказа.НоменклатураЗаказано = ВТ_ДаннПоставщика.Номенклатура
							И ВТ_ДаннЗаказа.КоличествоЗаказано = ВТ_ДаннПоставщика.Количество
				КОГДА ВТ_ДаннЗаказа.НоменклатураЗаказано = ВТ_ДаннПоставщика.Номенклатура
						И ВТ_ДаннЗаказа.ЦенаЗаказано = ВТ_ДаннПоставщика.Цена
					ТОГДА ВТ_ДаннЗаказа.НоменклатураЗаказано = ВТ_ДаннПоставщика.Номенклатура
							И ВТ_ДаннЗаказа.ЦенаЗаказано = ВТ_ДаннПоставщика.Цена
				ИНАЧЕ ВТ_ДаннЗаказа.НоменклатураЗаказано = ВТ_ДаннПоставщика.Номенклатура
			КОНЕЦ)
;
Показать


но тоже не работает
Оставьте свое сообщение

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