Здравствуйте. Бьюсь над условием в запросе. Не могу никак сообразить. Нужна ваша помощь.3 реквизита заполняются на форме. С 2-мя из них проблем нет (вариант нашел на форуме). Перед установкой параметра в запросе проверятся на заполненность:
&ОтборПоОрганизации = ЛОЖЬ ИЛИ СписаниеСРасчетногоСчета.Организация = &Организация
Далее у меня есть строковой реквизит который на форме заполняется значением выбранным из списка выбора (вручную добавленые. Их 4). Теперь по условию хранящимся в реквизите нужно установить параметр. Но в зависимости от значения в реквизите условия будут разные. По "уплате налога" проверить можно по перечислению:
Сначало ОтборПоВидуОперации = ЗначениеЗаполнено(Объект.ВидОперацииОтбор). В условии:
&ВидОперации = ЛОЖЬ
ИЛИ ВЫБОР
КОГДА &ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПеречислениеНалога)
ТОГДА СписаниеСРасчетногоСчета.ВидОперации = &ВидОперации
КОНЕЦ
А по "платежу внутри страны" и "по международной оплате" проверка по валюте документа. Если по рублю тогда оплата внутри страны, все остальные валюты значит межд. оплата. Только я не знаю какое сделать условие. Была идея сделать так:
МассивМестнаяВалюта = Новый Массив;
МассивИностраннаяВалюта = Новый Массив;
Валюты = Справочники.Валюты.Выбрать();
Пока Валюты.Следующий() Цикл
Если Валюты.Наименование = "AZN" Тогда
МассивМестнаяВалюта.Добавить(Валюты.Ссылка);
Иначе
МассивИностраннаяВалюта.Добавить(Валюты.Ссылка);
КонецЕсли;
КонецЦикла;
Показать
Если Объект.ВидОперацииОтбор = "Платеж внутри страны" Тогда
Запрос.УстановитьПараметр("ВидОперации", МассивМестнаяВалюта);
КонецЕсли;
Если Объект.ВидОперацииОтбор = "Международный платеж" Тогда
Запрос.УстановитьПараметр("ВидОперации", МассивИностраннаяВалюта);
КонецЕсли;
А в условии сделать сначала проверку ТИПЗНАЧЕНИЯ(&ВидОперации) = ТИП(МАССИВ). А потом наверное в СписаниеСРасчетногоСчета.Валюта В (&ВидОперации). Но такого типа в запросе нет :D :D Поэтому ничего не заработало. Если у вас какие нибудь идеи какое можно задать условие?
&ОтборПоОрганизации = ЛОЖЬ ИЛИ СписаниеСРасчетногоСчета.Организация = &Организация
Прежде чем браться что-то программировать, все же стоит понять некоторые самые базовые вещи. И логические операции несомненно одна из них. Как ты думаешь, какой результат этого условия будет всегда?
(2) Он всегда будет булевый? Я подрезал этот вариант из этой статьи на этом сайте.
Я попробовал исправить и написал по другому. Таким образом:
Код
ГДЕ
(&НеПроверятьПоОрганизации ИЛИ СписаниеСРасчетногоСчета.Организация = &Организация)
Запрос.УстановитьПараметр("Организация", Объект.ОрганизацияОтбор);
Если Не ЗначениеЗаполнено(Объект.ОрганизацияОтбор) Тогда
Запрос.УстановитьПараметр("НеПроверятьПоОрганизации", Истина);
Иначе
Запрос.УстановитьПараметр("НеПроверятьПоОрганизации", Ложь);
КонецЕсли;
И это работает. Но у меня теперь ошибка выходит, что не задано значение параметра когда делаю проверку для любого другого параметров в условии. Например:
Код
ГДЕ
(&НеПроверятьПоВидуОперации
ИЛИ ВЫБОР
КОГДА &ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПеречислениеНалога)
ТОГДА СписаниеСРасчетногоСчета.ВидОперации = &ВидОперации
КОНЕЦ)
Если Не ЗначениеЗаполнено(Объект.ВидОперацииОтбор) Тогда
Запрос.УстановитьПараметр("НеПроверятьПоВидуОперации", Истина);
Иначе
Если Не Объект.ВидОперацииОтбор = "Покупка валюты" ИЛИ Не Объект.ВидОперацииОтбор = "Продажа валюты" Тогда
Запрос.УстановитьПараметр("НеПроверятьПоВидуОперации", Ложь);
Если Объект.ВидОперацииОтбор = "Уплата налога" Тогда
УплатаНалога = Перечисления.ВидыОперацийСписаниеДенежныхСредств.ПеречислениеНалога;
Запрос.УстановитьПараметр("ВидОперации", "ПеречислениеНалога");
КонецЕсли;
....
Иначе
Запрос.УстановитьПараметр("НеПроверятьПоВидуОперации", Истина);
КонецЕсли;
КонецЕсли;
ГДЕ
(&НеПроверятьПоВидуОперации
ИЛИ ВЫБОР
КОГДА &ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПеречислениеНалога)
ТОГДА СписаниеСРасчетногоСчета.ВидОперации = &ВидОперации
КОНЕЦ)
Тут не хватает секции ИНАЧЕ. При любых вариантах должен получиться булев тип.
Далее в коде установки параметра так же возможен случай не установки параметра.
(5) Спасибо. Подправил это. Я только не понимаю почему запрос не работает при этом условии:
(&НеПроверятьПоВидуОперации
ИЛИ ВЫБОР
КОГДА &ВидОперации = Значение(Перечисление.ВидыОперацийСписаниеДенежныхСредств.ПеречислениеНалога)
ТОГДА СписаниеСРасчетногоСчета.ВидОперации = &ВидОперации
ИНАЧЕ ИСТИНА
КОНЕЦ)
Что передаете в "ВидОперации"?
ИмяНалога это тип Строка.
В запросе сравниваете значение типа Строка с значением типа ПеречислениеСсылка. Это всегда будет Ложь.
В параметр запроса нужно передавать само значение перечисления.