Условия в запросе

1. NicolasCage 01.06.24 23:05 Сейчас в теме
Здравствуйте. Бьюсь над условием в запросе. Не могу никак сообразить. Нужна ваша помощь.3 реквизита заполняются на форме. С 2-мя из них проблем нет (вариант нашел на форуме). Перед установкой параметра в запросе проверятся на заполненность:
ОтборПоОрганизации = ЗначениеЗаполнено(Объект.ОрганизацияОтбор);

Потом в запросе в условии пишу:
&ОтборПоОрганизации = ЛОЖЬ ИЛИ СписаниеСРасчетногоСчета.Организация = &Организация


Далее у меня есть строковой реквизит который на форме заполняется значением выбранным из списка выбора (вручную добавленые. Их 4). Теперь по условию хранящимся в реквизите нужно установить параметр. Но в зависимости от значения в реквизите условия будут разные. По "уплате налога" проверить можно по перечислению:

Сначало ОтборПоВидуОперации = ЗначениеЗаполнено(Объект.ВидОперацииОтбор). В условии:
&ВидОперации = ЛОЖЬ
	ИЛИ ВЫБОР
		КОГДА &ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПеречислениеНалога)
			ТОГДА СписаниеСРасчетногоСчета.ВидОперации = &ВидОперации
КОНЕЦ


А по "платежу внутри страны" и "по международной оплате" проверка по валюте документа. Если по рублю тогда оплата внутри страны, все остальные валюты значит межд. оплата. Только я не знаю какое сделать условие. Была идея сделать так:

МассивМестнаяВалюта = Новый Массив;
МассивИностраннаяВалюта = Новый Массив;
Валюты = Справочники.Валюты.Выбрать();

Пока Валюты.Следующий() Цикл
	Если Валюты.Наименование = "AZN" Тогда
		МассивМестнаяВалюта.Добавить(Валюты.Ссылка);
	Иначе
		МассивИностраннаяВалюта.Добавить(Валюты.Ссылка);
	КонецЕсли;
КонецЦикла;
Показать


Если Объект.ВидОперацииОтбор = "Платеж внутри страны" Тогда
		Запрос.УстановитьПараметр("ВидОперации", МассивМестнаяВалюта); 
КонецЕсли;
	
Если Объект.ВидОперацииОтбор = "Международный платеж" Тогда
		Запрос.УстановитьПараметр("ВидОперации", МассивИностраннаяВалюта); 
КонецЕсли;


А в условии сделать сначала проверку ТИПЗНАЧЕНИЯ(&ВидОперации) = ТИП(МАССИВ). А потом наверное в СписаниеСРасчетногоСчета.Валюта В (&ВидОперации). Но такого типа в запросе нет :D :D Поэтому ничего не заработало. Если у вас какие нибудь идеи какое можно задать условие?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starjevschik 02.06.24 07:49 Сейчас в теме
(1)
&ОтборПоОрганизации = ЛОЖЬ ИЛИ СписаниеСРасчетногоСчета.Организация = &Организация

Прежде чем браться что-то программировать, все же стоит понять некоторые самые базовые вещи. И логические операции несомненно одна из них. Как ты думаешь, какой результат этого условия будет всегда?
3. spacecraft 02.06.24 08:26 Сейчас в теме
4. NicolasCage 02.06.24 11:03 Сейчас в теме
(2) Он всегда будет булевый? Я подрезал этот вариант из этой статьи на этом сайте.
Я попробовал исправить и написал по другому. Таким образом:
Код


И это работает. Но у меня теперь ошибка выходит, что не задано значение параметра когда делаю проверку для любого другого параметров в условии. Например:
Код


А как правильно тогда написать условие в запросе?
5. spacecraft 02.06.24 11:33 Сейчас в теме
(4)
ГДЕ
(&НеПроверятьПоВидуОперации
ИЛИ ВЫБОР
КОГДА &ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПеречислениеНалога)
ТОГДА СписаниеСРасчетногоСчета.ВидОперации = &ВидОперации
КОНЕЦ)

Тут не хватает секции ИНАЧЕ. При любых вариантах должен получиться булев тип.
Далее в коде установки параметра так же возможен случай не установки параметра.
NicolasCage; +1 Ответить
6. NicolasCage 02.06.24 12:52 Сейчас в теме
(5) Спасибо. Подправил это. Я только не понимаю почему запрос не работает при этом условии:

(&НеПроверятьПоВидуОперации
			ИЛИ ВЫБОР
				КОГДА &ВидОперации = Значение(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПеречислениеНалога)
					ТОГДА СписаниеСРасчетногоСчета.ВидОперации = &ВидОперации
ИНАЧЕ ИСТИНА
			КОНЕЦ)


Если Объект.ВидОперацииОтбор = "Уплата налога" Тогда
			Запрос.УстановитьПараметр("НеПроверятьПоВидуОперации", Ложь);
			УплатаНалога = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ПеречислениеНалога;
			ИндексЗначения = Перечисления.ВидыОперацийСписаниеДенежныхСредств.Индекс(УплатаНалога);
			ИмяНалога = Метаданные.Перечисления.ВидыОперацийСписаниеДенежныхСредств.ЗначенияПеречисления[ИндексЗначения].Имя;
			Запрос.УстановитьПараметр("ВидОперации", ИмяНалога );
		КонецЕсли;


Что не так я сделал? Ведь получить значения перечисления в запросе можно через Значение().
7. spacecraft 02.06.24 14:32 Сейчас в теме
(6)
УплатаНалога = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ПеречислениеНалога;
ИндексЗначения = Перечисления.ВидыОперацийСписаниеДенежныхСредств.Индекс(УплатаНалога);
ИмяНалога = Метаданные.Перечисления.ВидыОперацийСписаниеДенежныхСредств.ЗначенияПеречисления[ИндексЗначения].Имя;
Запрос.УстановитьПараметр("ВидОперации", ИмяНалога );

Что передаете в "ВидОперации"?
ИмяНалога это тип Строка.
В запросе сравниваете значение типа Строка с значением типа ПеречислениеСсылка. Это всегда будет Ложь.
В параметр запроса нужно передавать само значение перечисления.
NicolasCage; +1 Ответить
8. NicolasCage 03.06.24 09:48 Сейчас в теме
(7) Добрый человек, спасибо вам за помощь. Понял как должно быьт, исправил. Все работает корректно.
Оставьте свое сообщение

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