Ошибка при передаче параметра в запросе

  • Remove From My Forums
  • Question

  • Hi Gurus,

    I have created a SSRS report and i wnated to send some parameter also along with the query .

    its is showing up a error message like «A error occured during the local report processing , the definition of the report /report name is invalid ,

    the expression used for the parameter @parameterid in the dataset  @parameterid refers to a field , field cannot be used in the parameter expression.

    Please helo me out to resolve this error . this is my first report with passing parameter to a report .

    Thanks in advance .

    Thanks,

    SS

Answers

  • CRM_Learner,

    I think you should try it again,

    What you can do is first of all, remove the  @parameterid parameter from parameter section(if any).

    -> Create a new dataset, and add the query that you are trying to run.

    eg. select * from tablename where @param = 2

    -> Click on (@ symbol), add param
    to the section and assign it a value.

    or just execute the
    query (click on the green arrow), you will see a prompt asking for param value.

    -> Click Ok

    -> A new parameter will be created automatically.

    -> Execute your report.

    Please, let me know if you require furthur details

    Regards

    Manoj

    • Marked as answer by

      Monday, August 15, 2011 3:30 PM

   Григорополисец

22.04.22 — 23:00

Здравствуйте!

Опять я решил обратиться к гуру 1С.

В общем, у меня проблема, связанная с ошибкой при исполнении метода ВЫПОЛНИТЬ() запроса.

Написание:

——————————————————

    СписокМагазиновМассив = Новый Массив;

    Для каждого Стр Из ЭтаФорма.СписокМагазинов Цикл

        СписокМагазиновМассив.Добавить(Стр);

    КонецЦикла;    

    
    Узнать = Новый Запрос;

    Узнать.Текст = «ВЫБРАТЬ

               |    ХозрасчетныйОстатки.Счет КАК Счёт,

               |    ХозрасчетныйОстатки.Подразделение КАК Подразделение,

               |    ХозрасчетныйОстатки.Субконто1 КАК РасходБудущихПериодов,

               |    СУММА(ХозрасчетныйОстатки.СуммаОстаток) КАК Сумма

               |ИЗ

               |    РегистрБухгалтерии.Хозрасчетный.Остатки(

               |            КОНЕЦПЕРИОДА(&Дата1, ДЕНЬ),

               |            Счет = &СчётУчёта,

               |            ,

               |            Подразделение В (&СписокМагазинов)

               |                И Организация В (&Организация)) КАК ХозрасчетныйОстатки

               |

               |СГРУППИРОВАТЬ ПО

               |    ХозрасчетныйОстатки.Счет,

               |    ХозрасчетныйОстатки.Субконто1,

               |    ХозрасчетныйОстатки.Подразделение

               |

               |УПОРЯДОЧИТЬ ПО

               |    Счёт,

               |    РасходБудущихПериодов,

               |    Подразделение

               |АВТОУПОРЯДОЧИВАНИЕ»;

    
    Узнать.УстановитьПараметр(«Дата1», ЭтаФорма.ДатаОстатка);

    Узнать.УстановитьПараметр(«СчётУчёта», ПланыСчетов.Хозрасчетный.НайтиПоНаименованию(«Прочие расходы будущих периодов», Истина));

    Узнать.УстановитьПараметр(«СписокМагазинов», СписокМагазиновМассив);

    Узнать.УстановитьПараметр(«Организация», Справочники.Организации.НайтиПоКоду(«00-000001», Истина));

    
    Вып = Узнать.Выполнить();

——————————————————

Выдаёт это дело следующую ошибку.

Ошибка при вызове метода контекста (Выполнить)

    Вып = Узнать.Выполнить();

по причине:

{(11, 21)}: Неверные параметры

Подразделение В (<<?>>&СписокМагазинов)

——————————————————

Уже второй день очень счастлив, не понимая, что не так. Похожие темы на форумах есть, но я там ответа не нашёл. Либо не увидел ввиду недостаточности опыта.

P.S. Пробовал на простой форме точно такую же конструкцию, там всё отлично.

Пожалуйста, помогите советов или киньте хотя бы ссылку на ликбезную ветку.

Заранее благодарен!

   Григорополисец

4 — 23.04.22 — 07:00

(3) Благодарю Вас! Вы решили проблему. Дело было действительно в том, что «Стр сама по себе помещала в массив не элемент справочника «Подразделения», а ДанныеФормыЭлементКоллекции. Решение, конечно же, лежало на поверхности.

Содержание:

1.       Как установить параметр в запросе?

2.       Функция параметра «Ссылка»

3.       Параметр «Дата»

Параметр в 1С – это некий элемент, принятый функцией. В данной статье поговорим о видах и типах параметров, а также рассмотрим, как задать параметры так, чтобы избежать ошибки «Неверные параметры» в 1С.  

1.    Как установить параметр в запросе?

Параметр запроса – это некоторый элемент, который находится внутри функции поиска по базе данных. Рассмотрим пример, как должны быть установлены параметры запроса. Например, пускай нам нужно получить составляющие из перечня-справочника под названием «Еда» красного, жёлтого или зелёного цвета, это будет иметь такой вид:

Как установить параметр в запросе «Красный»

Рис. 1 Как установить параметр в запросе «Красный»

Как установить параметр в запросе желтый


Рис. 2 Как установить параметр в запросе «Желтый»

Как установить параметр в запросе


Рис. 3 Как установить параметр в запросе «Зеленый»

Можно увидеть, что, по факту, все эти запросы одинаковые и разность только в цвете. Это-то и есть наш параметр – та переменная, которую не хотелось бы каждый раз повторять. В вышеуказанном примере параметр – это цвет, дадим ему имя «ВыбранныйЦвет» и поменяем значения цветов на эту переменную внутри запроса. А для того чтобы указать, что это именно параметр, нужно приписать перед именем амперсанд «&», тогда мы сможем задать параметр в запросе:

Как задать параметр в запросе

Рис. 4 Как задать параметр в запросе «ВыбранныйЦвет»

После этой процедуры пробуем выполнить наш запрос, результат будет пустым и выглядеть так:

Результат неверного параметра в запросе пустой

Рис. 5 Результат неверного параметра в запросе пустой

Результат запроса пустой по причине того, что в коде не было указано само значение параметра. Выберем имя, для этого потребуется задействовать панель, которая находится над редактором запросов. Внутри данной панели размещен текст запросов:

Редактор запросов – панель с текстом запросов

Рис. 6 Редактор запросов – панель с текстом запросов

Система 1С уже узнала параметр внутри запроса и выделила его в соответствующей секции, но пока без значений. Меняем пустое значение запроса, например, на значение «Жёлтый».

панель с текстом запросов


Рис. 7 Смена пустого значения запроса на «Желтый»

Теперь запрос выполнится! Аналогично можно заполнить оставшиеся значения. Так при помощи параметра можно в одном и том же запросе получать результаты, которые отличаются. То есть, главная функция параметров внутри запросов – делать их более обобщёнными. Это особенно актуально в сложных запросах, так как достаточно будет только изменить сам параметр, не меняя весь запрос.  

2.    Функция параметра «Ссылка»

В этом варианте будет сравниваться в качестве ограничения для параметра не название цвета, а значение по ссылке:

Ограничение для параметра – значение по ссылке

Рис. 8 Ограничение для параметра – значение по ссылке

Наш параметр «ВыбранныйЦвет» из строки превратился в ссылку на какой-то элемент внутри справочника «Цвета», поэтому у пользователя есть возможность изменить параметр и его тип:

Ограничение для параметра

Рис. 9 Изменения типа параметра в 1С

После этого, в момент, когда ведётся выбор значения данного параметра, перед нами появится выпадающий список с перечнем цветов – это функция параметра ссылки.  

3.    Параметр «Дата»

Допустим, нужен запрос, который будет выбирать заказы клиентов в определённый период. Данный период будет иметь две границы – «НачалоИнтервала» и «КонецИнтервала».

Параметр «Дата»

Рис. 10 Параметр «Дата»

Аналогично выполняем данный запрос и видим, что 1С уже распознала, что у данного параметра тип «Дата». Пусть нам нужны заказы за январь 2014 года, тогда получим:

Параметр «Дата» в 1С

Рис. 11 Пример запроса по параметру «Дата»

Результат запроса с параметром «Дата» будет выглядеть следующим образом:

Результат запроса с параметром «Дата»

Рис. 12 Результат запроса с параметром «Дата»

В данной статье были рассмотрены параметры в системе 1С, видов параметр внутри запроса, параметр с типом «Дата», параметры с типом «Ссылка», аналогично проводится работа с параметрами в списках таблиц и таблиц со значениями. Ошибка в них возникает в случае задания невозможного названия, типа, их несоответствий, пунктуационных ошибок в коде программы.

Специалист компании «Кодерлайн»

Айдар Фархутдинов

Jasont

22 / 22 / 9

Регистрация: 05.02.2013

Сообщений: 95

1

RAD XE3+

Ошибка при передачи параметра в запрос

20.02.2023, 12:52. Показов 305. Ответов 2

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Есть такой запрос

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
DM.DT_Find.Close;
  DM.DT_Find.CommandText :=
    'SELECT B.ID FROM TimeTable B LEFT JOIN IDTable R ON  B.RID = R.ID WHERE R.ID = :ID and (not ( ( :TimeIn < TimeIn and :TimeOut <  TimeIn ) or ( :TimeOut > TimeOut and :TimeIn > TimeOut) ))';
 
  DM.DT_Find.Parameters.ParamByName('ID').DataType := ftInteger;
  DM.DT_Find.Parameters.ParamByName('ID').Value := ID;
  DM.DT_Find.Parameters.ParamByName('TimeIn').DataType := ftDateTime;
  DM.DT_Find.Parameters.ParamByName('TimeIn').Value := TimeIn;
  DM.DT_Find.Parameters.ParamByName('TimeOut').DataType := ftDateTime;
  DM.DT_Find.Parameters.ParamByName('TimeOut').Value := TimeOut;
 
DM.DT_Find.Open;

Выдается ошибка: неправильно определен объект parameter предоставлены несогласованные или неполные данные
Ругается так на параметры типа datetime

При тестировании запроса в SSMS подставлял параметры подобным образом

SQL
1
2
3
4
DECLARE @ID INT, @TimeIn datetime, @TimeOut datetime;
SET @ID = 1;
SET @TimeIn = '20.02.2023 12:31:19';
SET @TimeOut = '20.02.2023 12:31:19';

и проблем не возникало.

Куда копать?

Миниатюры

Ошибка при передачи параметра в запрос
 



0



Пытливый

3452 / 2091 / 666

Регистрация: 29.05.2013

Сообщений: 8,955

20.02.2023, 13:01

2

Лучший ответ Сообщение было отмечено Jasont как решение

Решение

Нельзя использовать в запросе имя параметра дважды. Т.е. ваш запрос надо переписать так:

SQL
1
SELECT B.ID FROM TimeTable B LEFT JOIN IDTable R ON  B.RID = R.ID WHERE R.ID = :ID AND (NOT ( ( :TimeIn1 < TimeIn AND :TimeOut1 <  TimeIn ) OR ( :TimeOut2 > TimeOut AND :TimeIn2 > TimeOut) ))

Добавлено через 5 минут
А вообще есть у меня подозрение, что условие в вашем запросе можно написать иначе:

SQL
1
WHERE (:TimeIn BETWEEN TimeIn AND TimeOut) AND (:TimeOut BETWEEN TimeIn AND TimeOut)



1



22 / 22 / 9

Регистрация: 05.02.2013

Сообщений: 95

20.02.2023, 13:10

 [ТС]

3

Кстати, хорошая мысль с переделкой запроса. Спасибо

P.S. надеюсь переделка передачи дат из строки запроса в параметр поможет решить основную проблему, независимости от локали.



0



bless18
17.05.2010 20:26 Прочитано: 11795

Здравствуйте!
Имеется ТЧ с реквизитами: Задача, ОписаниеЗадачи и Отдел
Необходимо вывести Задачу и ее описание, которые хранятся в регистре сведений
При этом, задачи должны выводиться для того отдела, в котором работает пользователь системы
Пишу запрос:
Код 1C v 8.х

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

Для Каждого СтрокаТекущиеЗадачи Из ТзВрем Цикл
СтрокаОписаниеЗадачи = ЭтотОбъект.ЗадачиРаботаПользователей.Добавить();
СтрокаОписаниеЗадачи.ОписаниеЗадачи = СтрокаТекущиезадачи.ОписаниеЗадачи;
СтрокаОписаниеЗадачи.Задача = СтрокаТекущиеЗадачи.НаименованиеЗадачи;
КонецЦикла;

Выдается такая ошибка:
{Обработка.РаботаПользователей.Форма.Форма(196)}: Ошибка при вызове метода контекста (Выполнить): {(6, 2)}: Ошибка обработки представления «РегистрСведений.ТекущиеЗадачи.СрезПоследних:Несоответствие типов (параметр номер «»1″»)»
<<?>>РегистрСведений.ТекущиеЗадачи.СрезПоследних(&Отдел, ) КАК ТекущиеЗадачиСрезПоследних
Результат = Запрос.Выполнить();
Табличная часть расположена на панели
На всякий случай пришлю код всей процедуры:
Код 1C v 8.х

 
Процедура ПриОткрытии()
ОбработкаОбъект.Пользователь = ПараметрыСеанса.ТекущийПользователь;
ОбработкаОбъект.ПолучательЗадачи = ПараметрыСеанса.ТекущийПользователь.Сотрудник;
ОбработкаОбъект.Отдел = ПараметрыСеанса.ТекущийПользователь.Сотрудник.Отдел;

ЭтотОбъект.Дата=КонецДня(ТекущаяДата());
ЭлементыФормы.Польз.Заголовок = ПараметрыСеанса.ТекущийПользователь;
ЭлементыФормы.Получ.Заголовок = ПараметрыСеанса.ТекущийПользователь.Сотрудник;
ЭлементыФормы.Отд.Заголовок = ПараметрыСеанса.ТекущийПользователь.Сотрудник.Отдел;

Запрос = новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РаспределениеЗадачиСрезПоследних.ИсполнительЗадачи,
| РаспределениеЗадачиСрезПоследних.НаименованиеЗадачи,
| РаспределениеЗадачиСрезПоследних.Пользователь,
| РаспределениеЗадачиСрезПоследних.Приоритет,
| РаспределениеЗадачиСрезПоследних.ДатаВыполнения,
| РаспределениеЗадачиСрезПоследних.ДатаНачалаВыполнения
|ИЗ
| РегистрСведений.РаспределениеЗадачи.СрезПоследних(&Дата, ) КАК РаспределениеЗадачиСрезПоследних";
Запрос.УстановитьПараметр("Дата", КонецДня(ЭтотОбъект.Дата));
Результат = Запрос.Выполнить();
ТзВрем = Результат.Выгрузить();
ТзВрем.Колонки.Добавить("Номер");
ТзВрем.Колонки.Добавить("ПроцентОставшегосяВремени");
Для Каждого СтрокаРаспределениеЗадачи Из ТзВрем Цикл
СтрокаТабличнойЧасти = ЭтотОбъект.Пользователи.Добавить();
СтрокаТабличнойЧасти.ПользовательСистемы = СтрокаРаспределениеЗадачи.Пользователь;
СтрокаТабличнойЧасти.ТекущаяЗадача = СтрокаРаспределениеЗадачи.НаименованиеЗадачи;
СтрокаТабличнойЧасти.Приоритет = СтрокаРаспределениеЗадачи.Приоритет;
СтрокаТабличнойЧасти.ДатаНачалаВыполнения = СтрокаРаспределениеЗадачи.ДатаНачалаВыполнения;
СтрокаТабличнойЧасти.ДатаВыполненияПоПлану = СтрокаРаспределениеЗадачи.ДатаВыполнения;
СтрокаТабличнойЧасти.ИсполнительЗадачи = СтрокаРаспределениеЗадачи.ИсполнительЗадачи;

ДатаНачала = СтрокаРаспределениеЗадачи.ДатаНачалаВыполнения;
ДатаКонца = СтрокаРаспределениеЗадачи.ДатаВыполнения;

КоличествоДнейНаВыполнение = РазностьДат(ДатаКонца,ДатаНачала);
КоличествоДнейСоДняНачалаВыполнения = РазностьДат(ТекущаяДата(),ДатаНачала);
Если ТекущаяДата()>ДатаКонца тогда
СтрокаРаспределениеЗадачи.ПроцентОставшегосяВремени="100 %";
Иначе
СтрокаРаспределениеЗадачи.ПроцентОставшегосяВремени=Окр(Число(КоличествоДнейСоДняНачалаВыполнения / КоличествоДнейНаВыполнение) * 100, 2);
КонецЕсли;
СтрокаТабличнойЧасти.ПроцентОставшегосяВремени = Строка(СтрокаРаспределениеЗадачи.ПроцентОставшегосяВремени)+ " ";

Если СтрокаТабличнойЧасти.Приоритет = Перечисления.Приоритет.Высокий Тогда
СтрокаТабличнойЧасти.Номер = Число(1);
ИначеЕсли СтрокаТабличнойЧасти.Приоритет = Перечисления.Приоритет.Средний Тогда
СтрокаТабличнойЧасти.Номер = Число(2);
ИначеЕсли СтрокаТабличнойЧасти.Приоритет = Перечисления.Приоритет.Низкий Тогда
СтрокаТабличнойЧасти.Номер = Число(3);
КонецЕсли;
КонецЦикла;
ЭтотОбъект.Пользователи.Сортировать("ДатаВыполненияПоПлану Возр,Номер Возр");
ЭлементыФормы.Польз1.Заголовок = ПараметрыСеанса.ТекущийПользователь;
ЭлементыФормы.Получ1.Заголовок = ПараметрыСеанса.ТекущийПользователь.Сотрудник;
ЭлементыФормы.Отд1.Заголовок = ПараметрыСеанса.ТекущийПользователь.Сотрудник.Отдел;
Запрос = новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ТекущиеЗадачиСрезПоследних.НаименованиеЗадачи,
| ТекущиеЗадачиСрезПоследних.ОписаниеЗадачи,
| ТекущиеЗадачиСрезПоследних.Отдел
|ИЗ
| РегистрСведений.ТекущиеЗадачи.СрезПоследних(&Отдел, ) КАК ТекущиеЗадачиСрезПоследних";
Запрос.УстановитьПараметр("Отдел", ПараметрыСеанса.ТекущийПользователь.Сотрудник.Отдел);
Результат = Запрос.Выполнить();
ТзВрем = Результат.Выгрузить();

Для Каждого СтрокаТекущиеЗадачи Из ТзВрем Цикл
СтрокаОписаниеЗадачи = ЭтотОбъект.ЗадачиРаботаПользователей.Добавить();
СтрокаОписаниеЗадачи.ОписаниеЗадачи = СтрокаТекущиезадачи.ОписаниеЗадачи;
СтрокаОписаниеЗадачи.Задача = СтрокаТекущиеЗадачи.НаименованиеЗадачи;
КонецЦикла;
КонецПроцедуры

Подскажите, пожалуйста, как исправить эту ошибку

Понравилась статья? Поделить с друзьями:
  • Ошибка при передаче налоговой декларации
  • Ошибка при передаче на международную перевозку что это
  • Ошибка при передаче на международную перевозку али что значит
  • Ошибка при передаче команды приложению
  • Ошибка при передаче документа на сервер атол