Не сопоставляет типы в запросе

1. Energyoo 26.05.23 11:59 Сейчас в теме
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ВозвратСырьяОтПереработчика.Ссылка КАК Ссылка,
	|	ДвиженияСерийТоваров.Получатель КАК Склад,
	|	ВозвратСырьяОтПереработчика.Подразделение КАК Подразделение,
	|	ДвиженияСерийТоваров.Номенклатура КАК Номенклатура,
	|	ДвиженияСерийТоваров.Назначение КАК Назначение,
	|	ДвиженияСерийТоваров.Серия КАК Серия,
	|	ДвиженияСерийТоваров.Количество КАК Количество,
	|	ВозвратСырьяОтПереработчика.Дата КАК ДокументДата,
	|	ВозвратСырьяОтПереработчика.Организация КАК Организация
	|ПОМЕСТИТЬ ВТВозвратыОтПереработчикаДетальныеЗаписи
	|ИЗ
	|	РегистрНакопления.ДвиженияСерийТоваров КАК ДвиженияСерийТоваров
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ВозвратСырьяОтПереработчика КАК ВозвратСырьяОтПереработчика
	|		ПО ДвиженияСерийТоваров.Документ = ВозвратСырьяОтПереработчика.Ссылка
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТоварыНаИспытаниях_НоменклатураСерия КАК ВТТоварыНаИспытаниях_НоменклатураСерия
	|		ПО ДвиженияСерийТоваров.Номенклатура = ВТТоварыНаИспытаниях_НоменклатураСерия.Номенклатура
	|			И ДвиженияСерийТоваров.Серия = ВТТоварыНаИспытаниях_НоменклатураСерия.Серия
	|ГДЕ
	|	ДвиженияСерийТоваров.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаПоВозвратуОтКлиента)
	|	И ВЫБОР
	|			КОГДА &Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
	|				ТОГДА ИСТИНА
	|			ИНАЧЕ ДвиженияСерийТоваров.Получатель В ИЕРАРХИИ (&Склад)
	|		КОНЕЦ
	|	И ВЫБОР
	|			КОГДА НЕ &ДокументВозврата ЕСТЬ NULL
	|				ТОГДА ВЫБОР
	|						КОГДА &ДокументВозврата ССЫЛКА Документ.ВозвратСырьяОтПереработчика
	|							ТОГДА ДвиженияСерийТоваров.Документ = &ДокументВозврата
	|						ИНАЧЕ ЛОЖЬ
	|					КОНЕЦ
	|			ИНАЧЕ ИСТИНА
	|		КОНЕЦ
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ПоступлениеТоваровОтХранителя.Ссылка,
	|	ДвиженияСерийТоваров.Получатель,
	|	ПоступлениеТоваровОтХранителя.Подразделение,
	|	ДвиженияСерийТоваров.Номенклатура,
	|	ДвиженияСерийТоваров.Назначение,
	|	ДвиженияСерийТоваров.Серия,
	|	ДвиженияСерийТоваров.Количество,
	|	ПоступлениеТоваровОтХранителя.Дата,
	|	ПоступлениеТоваровОтХранителя.Организация
	|ИЗ
	|	РегистрНакопления.ДвиженияСерийТоваров КАК ДвиженияСерийТоваров
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТоварыНаИспытаниях_НоменклатураСерия КАК ВТТоварыНаИспытаниях_НоменклатураСерия
	|		ПО ДвиженияСерийТоваров.Номенклатура = ВТТоварыНаИспытаниях_НоменклатураСерия.Номенклатура
	|			И ДвиженияСерийТоваров.Серия = ВТТоварыНаИспытаниях_НоменклатураСерия.Серия
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровОтХранителя КАК ПоступлениеТоваровОтХранителя
	|		ПО ДвиженияСерийТоваров.Документ = ПоступлениеТоваровОтХранителя.Ссылка
	|ГДЕ
	|	ДвиженияСерийТоваров.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаПоВозвратуОтКлиента)
	|	И ВЫБОР
	|			КОГДА &Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
	|				ТОГДА ИСТИНА
	|			ИНАЧЕ ДвиженияСерийТоваров.Получатель В ИЕРАРХИИ (&Склад)
	|		КОНЕЦ
	|	И ВЫБОР
	|			КОГДА НЕ &ДокументВозврата ЕСТЬ NULL  
	|				ТОГДА ВЫБОР
	|						КОГДА &ДокументВозврата ССЫЛКА Документ.ПоступлениеТоваровОтХранителя
	|							ТОГДА ДвиженияСерийТоваров.Документ = &ДокументВозврата
	|						ИНАЧЕ ЛОЖЬ
	|					КОНЕЦ
	|			ИНАЧЕ ИСТИНА
	|		КОНЕЦ
Показать

Добрый день! Параметр &ДокументВозврата может принимать 3 значения:
Неопределено
Документ.ПоступлениеТоваровОтХранителя
Документ.ВозвратСырьяОтПереработчика

И данное условие не отрабатывает
ВЫБОР
	|			КОГДА НЕ &ДокументВозврата ЕСТЬ NULL
	|				ТОГДА ВЫБОР
	|						КОГДА &ДокументВозврата ССЫЛКА Документ.ВозвратСырьяОтПереработчика
	|							ТОГДА ДвиженияСерийТоваров.Документ = &ДокументВозврата
	|						ИНАЧЕ ЛОЖЬ
	|					КОНЕЦ
	|			ИНАЧЕ ИСТИНА
	|		КОНЕЦ
Показать

Пытался передавать параметр так
Если ПеремещениеОтборДокументВозврата <> Неопределено Тогда
		Запрос.УстановитьПараметр("ДокументВозврата"					, ПеремещениеОтборДокументВозврата);
	Иначе
		Запрос.УстановитьПараметр("ДокументВозврата"					, NULL);
	КонецЕсли;


ВЫБОР
	|			КОГДА &ДокументВозврата <> НЕОПРЕДЕЛЕНО 
	|				ТОГДА ВЫБОР
	|						КОГДА &ДокументВозврата ССЫЛКА Документ.ПоступлениеТоваровОтХранителя
	|							ТОГДА ДвиженияСерийТоваров.Документ = &ДокументВозврата
	|						ИНАЧЕ ЛОЖЬ
	|					КОНЕЦ
	|			ИНАЧЕ ИСТИНА
	|		КОНЕЦ
Показать

Тоже не отрабатывает. Он нехочет сопоставлять типы НЕОПРЕДЕЛЕНО или NULL с ссылкой Документ.ПоступлениеТоваровОтХранителя
По теме из базы знаний
Найденные решения
16. Energyoo 29.05.23 09:14 Сейчас в теме
Решил сделать по другому,если кому интересно.
Если ПеремещениеОтборДокументВозврата <> Неопределено Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "// ОТБОРПОДОКУМЕНТУВОЗВРАТА", "
			|				И ДвиженияСерийТоваров.Документ = &ДокументВозврата ");
		Запрос.УстановитьПараметр("ДокументВозврата", ПеремещениеОтборДокументВозврата);
	КонецЕсли;
Параметры
И Запрос:
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ВозвратСырьяОтПереработчика.Ссылка КАК Ссылка,
	|	ДвиженияСерийТоваров.Получатель КАК Склад,
	|	ВозвратСырьяОтПереработчика.Подразделение КАК Подразделение,
	|	ДвиженияСерийТоваров.Номенклатура КАК Номенклатура,
	|	ДвиженияСерийТоваров.Назначение КАК Назначение,
	|	ДвиженияСерийТоваров.Серия КАК Серия,
	|	ДвиженияСерийТоваров.Количество КАК Количество,
	|	ВозвратСырьяОтПереработчика.Дата КАК ДокументДата,
	|	ВозвратСырьяОтПереработчика.Организация КАК Организация
	|ПОМЕСТИТЬ ВТВозвратыОтПереработчикаДетальныеЗаписи
	|ИЗ
	|	РегистрНакопления.ДвиженияСерийТоваров КАК ДвиженияСерийТоваров
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ВозвратСырьяОтПереработчика КАК ВозвратСырьяОтПереработчика
	|		ПО ДвиженияСерийТоваров.Документ = ВозвратСырьяОтПереработчика.Ссылка
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТоварыНаИспытаниях_НоменклатураСерия КАК ВТТоварыНаИспытаниях_НоменклатураСерия
	|		ПО ДвиженияСерийТоваров.Номенклатура = ВТТоварыНаИспытаниях_НоменклатураСерия.Номенклатура
	|			И ДвиженияСерийТоваров.Серия = ВТТоварыНаИспытаниях_НоменклатураСерия.Серия
	|ГДЕ
	|	ДвиженияСерийТоваров.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаПоВозвратуОтКлиента)
	|	И ВЫБОР
	|			КОГДА &Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
	|				ТОГДА ИСТИНА
	|			ИНАЧЕ ДвиженияСерийТоваров.Получатель В ИЕРАРХИИ (&Склад)
	|		КОНЕЦ
	|	// ОТБОРПОДОКУМЕНТУВОЗВРАТА
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ПоступлениеТоваровОтХранителя.Ссылка,
	|	ДвиженияСерийТоваров.Получатель,
	|	ПоступлениеТоваровОтХранителя.Подразделение,
	|	ДвиженияСерийТоваров.Номенклатура,
	|	ДвиженияСерийТоваров.Назначение,
	|	ДвиженияСерийТоваров.Серия,
	|	ДвиженияСерийТоваров.Количество,
	|	ПоступлениеТоваровОтХранителя.Дата,
	|	ПоступлениеТоваровОтХранителя.Организация
	|ИЗ
	|	РегистрНакопления.ДвиженияСерийТоваров КАК ДвиженияСерийТоваров
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТоварыНаИспытаниях_НоменклатураСерия КАК ВТТоварыНаИспытаниях_НоменклатураСерия
	|		ПО ДвиженияСерийТоваров.Номенклатура = ВТТоварыНаИспытаниях_НоменклатураСерия.Номенклатура
	|			И ДвиженияСерийТоваров.Серия = ВТТоварыНаИспытаниях_НоменклатураСерия.Серия
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровОтХранителя КАК ПоступлениеТоваровОтХранителя
	|		ПО ДвиженияСерийТоваров.Документ = ПоступлениеТоваровОтХранителя.Ссылка
	|ГДЕ
	|	ДвиженияСерийТоваров.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаПоВозвратуОтКлиента)
	|	И ВЫБОР
	|			КОГДА &Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
	|				ТОГДА ИСТИНА
	|			ИНАЧЕ ДвиженияСерийТоваров.Получатель В ИЕРАРХИИ (&Склад)
	|		КОНЕЦ
	|	// ОТБОРПОДОКУМЕНТУВОЗВРАТА
	|;
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
10. spacecraft 26.05.23 13:08 Сейчас в теме
(1) вместо вот таких отборов:
ВЫБОР
| КОГДА &ДокументВозврата <> НЕОПРЕДЕЛЕНО
| ТОГДА ВЫБОР
| КОГДА &ДокументВозврата ССЫЛКА Документ.ПоступлениеТоваровОтХранителя
| ТОГДА ДвиженияСерийТоваров.Документ = &ДокументВозврата
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| ИНАЧЕ ИСТИНА
| КОНЕЦ

использовать 2 параметра:
 И (&БезОграничений ИЛИ ДвиженияСерийТоваров.Документ = &ДокументВозврата)

и передавать 2 параметра:
Если ПеремещениеОтборДокументВозврата = Неопределено Тогда
        Запрос.УстановитьПараметр("БезОграничений", Истина);
        Запрос.УстановитьПараметр("ДокументВозврата", Документы.ВозвратСырьяОтПереработчика.ПустаяСсылка());
    Иначе
        Запрос.УстановитьПараметр("БезОграничений", Ложь);
        Запрос.УстановитьПараметр("ДокументВозврата", ПеремещениеОтборДокументВозврата);
    КонецЕсли;
user1826630; +1 Ответить
12. Energyoo 26.05.23 13:37 Сейчас в теме
13. Energyoo 26.05.23 13:42 Сейчас в теме
(10)Но он же вернет у тебя &БезОграничений = ИСТИНА,эт окей,но это ДвиженияСерийТоваров.Документ = &ДокументВозврата как запрос воспримет ?
14. Energyoo 26.05.23 13:49 Сейчас в теме
15. Energyoo 29.05.23 07:38 Сейчас в теме
(10)Не верно. Если придет неопределено,тогда он сделает отбор по Документы.ВозвратСырьяОтПереработчика.ПустаяСсылка(). А там должны быть без ограничений совсем.
17. spacecraft 29.05.23 10:51 Сейчас в теме
(15) пробовали?
что будет при условии:
Истина или Ложь
Истина перекроит любое второе условие при ИЛИ.
18. Energyoo 29.05.23 13:33 Сейчас в теме
(17)Пробовал. Когда он заходит в БезОграничений,он цепляет еще и отбор по Документы.ВозвратСырьяОтПереработчика.ПустаяСсылка(). Т.е. он подбирает по ДвиженияСерийТоваров.Документ пустую ссылку. Он не перекрывает.
19. spacecraft 29.05.23 13:39 Сейчас в теме
(18) непонятно что имеете ввиду. Если есть отбор и по пустой ссылке, то и просто по ИСТИНА она должна попадать.
Или не учли круглые скобки. Они там не для красоты. Это Булева алгебра.
21. Energyoo 30.05.23 07:33 Сейчас в теме
(19)Я учел скобки. Все поставил. Просто если &БезОграничений=истина,то он начинается отрабатывать алгоритм ДвиженияСерийТоваров.Документ=Документы.ВозвратСырьяОтПереработчика.ПустаяСсылка(). Я понимаю,что там стоит ИЛИ,но при срабатывании &БезОграничений он отрабатывает и этот алгоритм ДвиженияСерийТоваров.Документ=Документы.ВозвратСырьяОтПереработчика.ПустаяСсылка()


Отработал алгоритм через СтрИзменить. Причем очень даже грамотно... Проверил производительность,стало меньше.


Я тоже удивлен,что алгоритм не отработал... но так уж повелось...
2. Energyoo 26.05.23 12:00 Сейчас в теме
Почитал в инете,но они мне не подошли:( Понимаю,что таких тем уже много,но не получается у меня:(
3. starjevschik 26.05.23 12:06 Сейчас в теме
это вот убирай, не нужно
КОГДА НЕ &ДокументВозврата ЕСТЬ NULL
.
Если нужно условие на пустое значение, то проще всего так
Запрос.УстановитьПарамет("ДокументПустой", НЕ ЗначениеЗаполнено(Документ));

Потому что пустые значения у 1с бывают разные.
в остальном может быть ошибка только в параметре или данные не соответствуют запросу.
4. Energyoo 26.05.23 12:46 Сейчас в теме
(3)Но он же вернет истину или ложь.
Ты предлагаешь добавлять еще один параметр и тогда уже проверять на ссылку?
6. starjevschik 26.05.23 12:54 Сейчас в теме
(4)
Ты предлагаешь добавлять еще один параметр и тогда уже проверять на ссылку?

если зачем-то нужна проверка на заполненность, то добавить параметр.
На ссылку можно проверять и незаполненные значения. Но там может затесаться пустая ссылка..
7. Energyoo 26.05.23 12:55 Сейчас в теме
(6)Да,нужна. Это своего рода отбор. Если НЕОПРЕДЕЛЕНО,тогда юзаем обе таблицы объединения и все. Если равна какая то ссылка,то юзаем одну таблицу и получаем оттуда значения.
9. starjevschik 26.05.23 13:03 Сейчас в теме
(7) неопределено и null это разные вещи в 1с, они не равны... а еще пустая ссылка может быть, это еще одно пустое значение, третье.
поэтому я и говорю, для проверки заполненности делай отдельный параметр.
11. Energyoo 26.05.23 13:34 Сейчас в теме
(9)Но как заполнить этот отдельный параметр только ссылками? Неопределено туда сувать не надо. Только эти ссылки :
Документ.ПоступлениеТоваровОтХранителя
Документ.ВозвратСырьяОтПереработчика
8. Energyoo 26.05.23 13:03 Сейчас в теме
5. Energyoo 26.05.23 12:52 Сейчас в теме
16. Energyoo 29.05.23 09:14 Сейчас в теме
Решил сделать по другому,если кому интересно.
Если ПеремещениеОтборДокументВозврата <> Неопределено Тогда
		Запрос.Текст = СтрЗаменить(Запрос.Текст, "// ОТБОРПОДОКУМЕНТУВОЗВРАТА", "
			|				И ДвиженияСерийТоваров.Документ = &ДокументВозврата ");
		Запрос.УстановитьПараметр("ДокументВозврата", ПеремещениеОтборДокументВозврата);
	КонецЕсли;
Параметры
И Запрос:
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ВозвратСырьяОтПереработчика.Ссылка КАК Ссылка,
	|	ДвиженияСерийТоваров.Получатель КАК Склад,
	|	ВозвратСырьяОтПереработчика.Подразделение КАК Подразделение,
	|	ДвиженияСерийТоваров.Номенклатура КАК Номенклатура,
	|	ДвиженияСерийТоваров.Назначение КАК Назначение,
	|	ДвиженияСерийТоваров.Серия КАК Серия,
	|	ДвиженияСерийТоваров.Количество КАК Количество,
	|	ВозвратСырьяОтПереработчика.Дата КАК ДокументДата,
	|	ВозвратСырьяОтПереработчика.Организация КАК Организация
	|ПОМЕСТИТЬ ВТВозвратыОтПереработчикаДетальныеЗаписи
	|ИЗ
	|	РегистрНакопления.ДвиженияСерийТоваров КАК ДвиженияСерийТоваров
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ВозвратСырьяОтПереработчика КАК ВозвратСырьяОтПереработчика
	|		ПО ДвиженияСерийТоваров.Документ = ВозвратСырьяОтПереработчика.Ссылка
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТоварыНаИспытаниях_НоменклатураСерия КАК ВТТоварыНаИспытаниях_НоменклатураСерия
	|		ПО ДвиженияСерийТоваров.Номенклатура = ВТТоварыНаИспытаниях_НоменклатураСерия.Номенклатура
	|			И ДвиженияСерийТоваров.Серия = ВТТоварыНаИспытаниях_НоменклатураСерия.Серия
	|ГДЕ
	|	ДвиженияСерийТоваров.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаПоВозвратуОтКлиента)
	|	И ВЫБОР
	|			КОГДА &Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
	|				ТОГДА ИСТИНА
	|			ИНАЧЕ ДвиженияСерийТоваров.Получатель В ИЕРАРХИИ (&Склад)
	|		КОНЕЦ
	|	// ОТБОРПОДОКУМЕНТУВОЗВРАТА
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ПоступлениеТоваровОтХранителя.Ссылка,
	|	ДвиженияСерийТоваров.Получатель,
	|	ПоступлениеТоваровОтХранителя.Подразделение,
	|	ДвиженияСерийТоваров.Номенклатура,
	|	ДвиженияСерийТоваров.Назначение,
	|	ДвиженияСерийТоваров.Серия,
	|	ДвиженияСерийТоваров.Количество,
	|	ПоступлениеТоваровОтХранителя.Дата,
	|	ПоступлениеТоваровОтХранителя.Организация
	|ИЗ
	|	РегистрНакопления.ДвиженияСерийТоваров КАК ДвиженияСерийТоваров
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТоварыНаИспытаниях_НоменклатураСерия КАК ВТТоварыНаИспытаниях_НоменклатураСерия
	|		ПО ДвиженияСерийТоваров.Номенклатура = ВТТоварыНаИспытаниях_НоменклатураСерия.Номенклатура
	|			И ДвиженияСерийТоваров.Серия = ВТТоварыНаИспытаниях_НоменклатураСерия.Серия
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ПоступлениеТоваровОтХранителя КАК ПоступлениеТоваровОтХранителя
	|		ПО ДвиженияСерийТоваров.Документ = ПоступлениеТоваровОтХранителя.Ссылка
	|ГДЕ
	|	ДвиженияСерийТоваров.СкладскаяОперация = ЗНАЧЕНИЕ(Перечисление.СкладскиеОперации.ПриемкаПоВозвратуОтКлиента)
	|	И ВЫБОР
	|			КОГДА &Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка)
	|				ТОГДА ИСТИНА
	|			ИНАЧЕ ДвиженияСерийТоваров.Получатель В ИЕРАРХИИ (&Склад)
	|		КОНЕЦ
	|	// ОТБОРПОДОКУМЕНТУВОЗВРАТА
	|;
Показать
20. пользователь 29.05.23 14:06
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

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