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

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
Сообщение было скрыто модератором.
...
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)