PDA

Просмотр полной версии : Запрос с параметром



DenisSt
13.01.2017, 23:51
Хочу получить запросом запись из справочника. Конкретную запись получаю через параметр. Потом запросом заполняю макет.На нем есть кнопка и реквизит "Цель"
Но проблема в том,что запрос в результате оказывается пустой. Подскажите,как решить проблему?!



&НаКлиенте
Процедура СформироватьОтчет(Команда)
ЗаполнитьТабДок(ТабДок,Цел ь);
КонецПроцедуры


&НаСервереБезКонтекста
Процедура ЗаполнитьТабДок(ТабДок,Цел ь)

ТабДок.Очистить();
Макет = Отчеты.ТестовыйОтчет.Получ итьМакет("Макет");

ОблШапка = Макет.ПолучитьОбласть("Шапка");
ОблЭлемент = Макет.ПолучитьОбласть("Элемент");

ОблШапка.Параметры.ДатаОтч ета = Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy; ДЛФ=DDT");
ТабДок.Вывести(ОблШапка);

Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПрограммыТренировок.Прогр� �мма.Реквизит1,
| ПрограммыТренировок.Ссылк� �
|ИЗ
| Справочник.ПрограммыТрени� �овок КАК ПрограммыТренировок
|ГДЕ
| ПрограммыТренировок.Ссылк� � = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",Цель);
Результат = Запрос.Выполнить();
Выборка = Запрос.Выполнить().Выбрать() ;

Пока Выборка.Следующий() Цикл
ОблЭлемент.Параметры.Запол нить(Выборка);
ТабДок.Вывести(ОблЭлемент);
КонецЦикла;

КонецПроцедуры

alexandr_ll
14.01.2017, 09:06
Что собой представляет реквизит Цель?

DenisSt
14.01.2017, 11:16
Это объект перечисление. Если же цель совпадает с одной из ссылок в справочнике. то беру именно эту строку. Могу скрин выложить. будет понятнее

alexandr_ll
14.01.2017, 14:51
Это объект перечисление. Если же цель совпадает с одной из ссылок в справочнике. то беру именно эту строку. Могу скрин выложить. будет понятнее

Объект перечисление не может совпадать со ссылкой на справочник. Могут совпадать наименования, но объекты эти разные. Либо реквизит Цель должен быть ссылкой на элемент справочника, либо в условии запроса должен быть другой параметр.

DenisSt
14.01.2017, 19:59
Вот смотрите. Я выбираю цель(ПеречислениеСсылка.Це льПриСоставленииПрограммы Тренировок)
https://pp.vk.me/c837735/v837735275/1e325/7xnZywpejvI.jpg

Потом это значение передаю в процедуру. И сравниваю в запросе. Но если не так,то как иначе мне это реализовать.

alexandr_ll
15.01.2017, 08:26
Как я понимаю реквизит Цель (Перечисление) является одним из возможных реквизитов справочника ПрограммыТренировок, но никак не элементом этого справочника. А вы в запросе пытаетесь сравнить реквизит справочника (Цель) с каким-либо элементом этого справочника. Поэтому запрос ничего и не возвращает.
Ну так и сравнивайте Цель с реквизитом справочника, а не с ссылкой на элемент справочника.
То есть вместо
|ГДЕ
| ПрограммыТренировок.Ссылк� � = &Ссылка";

Лолжно быть что-то вроде
|ГДЕ
| ПрограммыТренировок.Прогр� �мма.Реквизит1= &Ссылка";

DenisSt
15.01.2017, 11:54
Ага. Я вас понял. Сравниваю наименование с целью. Если есть совпадения,беру реквизит1 как реквизит ТЧ.
https://pp.vk.me/c639616/v639616275/422/-5v1lWaQ5vA.jpg

|ГДЕ
| ПрограммыТренировок.Наиме� �ование = &Ссылка

Результат получается тот же.
Но все ра

DenisSt
15.01.2017, 12:40
Но все равно результат один и тот же.

alexandr_ll
15.01.2017, 16:05
Но все равно результат один и тот же.

Ну как вы не понимаете - нельзя в условии сравнивать разные объекты: справочник (ПрограммыТренировок.Ссылк а) с перечислением (Цель), строку (Наименование) с перечислением (Цель). Можно сравнивать только однотипные объекты.
То есть следует сравнивать реквизит справочника типа перечисление с реквизитом вашей обработки Цель, имеющим тот же тип.

Анатолик
15.01.2017, 18:12
Для начала предлагаю автору поста изучить метаданные конфигурации! Что наименование - это строковый тип данных и он не может быть равен ссылка, так же ссылка не равно Объект. Наименование можно сравнивать например с наименованием ссылки типа Наименование = Ссылка.Наименование, а ссылка это может быть что угодно - и справочник и документ и др, и это всё со своими реквизитами, в том числе и с наименованием.

Анатолик
15.01.2017, 18:16
У Вас реквизит1 находится в таблице, но при этом в запросе она нигде не фигурирует, должно быть что-то типа
Где
ПрограммыТренировок.ВашаТ� �.Реквизит1 = Значение(Перечисление.Назв аниеПеречисление.Кардио)

Mexxe
08.02.2017, 08:06
Добрый день помогите пожалуйста новичку, как можно в запросе формат даты без времени вывести?
Вот код


Запрос.Текст = "ВЫБРАТЬ
| ДанныеКлиентаСрезПоследни х.ПаспортСерия КАК Серия,
| ДанныеКлиентаСрезПоследни х.ПаспортНомер КАК Номер,
| ДанныеКлиентаСрезПоследни х.ПаспортВыдан КАК Выдан,
| ДанныеКлиентаСрезПоследни х.ВидДокумента,
| ДанныеКлиентаСрезПоследни х.ДатВыдачиПаспорта КАК ДатаВыдачи,
|ИЗ
| Справочник.Клиенты КАК бсКлиенты
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеКли� �нта.СрезПоследних(, Клиент = &Клиент) КАК ДанныеКлиентаСрезПоследни х
| ПО Клиенты.Ссылка = ДанныеКлиентаСрезПоследни х.Клиент
|ГДЕ
| Клиенты.Ссылка = &Клиент";

Запрос.УстановитьПараметр("Клиент",СсылкаНаОбъект.КлиентЗака зчик);
Выборка = Запрос.Выполнить().Выбрать() ;

Дата выводится "ДатВыдачиПаспорта" формата "dd.mm.yyyy чч.мм.сс", а нужно что бы выводилось в печатной форме как "dd.mm.yyyy", как это возможно сделать?
Подскажите пожалуйста. Спасибо!