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

С подобной ошибкой любой разработчик встречался хотя бы один раз. Ее непосредственная причина – попытка запроса использовать параметр, который в запрос не был помещен.

Почему так происходит? Код постоянно меняется, текст запросов, параметры могут переименовываться, добавляться, удаляться, но в ходе работы формируются различные приемы и методики, позволяющие данную проблему нивелировать.

При инициализации запроса, параметры необходимо указывать до текста запроса. Таким образом, еще до чтения текста, вы объявляете параметры, с которым необходимо работать. Также это позволяет улучшить самоконтроль – сначала определяем параметр, а потом его используем.

Бывают ситуации, когда параметры в зависимости от различных условий не нужны.

Самое простое решение – это использовать дополнительный параметр с типом Булево, определяющий необходимость использования основного параметра.

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

Такой запрос не вполне оптимален с точки зрения быстродействия (из-за конструкции ИЛИ в условии отбора), но если потери быстродействия терпимы, то ими можно пренебречь.

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

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

Данный код приведен в качестве примера и скомпонован с целью повышения наглядности. Рекомендуется не использовать его в чистом виде, а реализовать в виде полноценного инструмента по динамической работе с отборами в запросе.

ВЫБРАТЬ

                КурсыВалют.Валюты,

                КурсыВалют.КурсПродажи,

                КурсыВалют.КурсКонвертации,

                КурсыВалют.КурсПокупки,

                КурсыВалют.КурсМагазинов,

                КурсыВалют.КурсЦБ,

                КурсыВалют.ПроцентКурсаПокупки,

                КурсыВалют.ПроцентКурсаПродажи,

                КурсыВалют.ПроцентКурсаКонвертации,

                КурсыВалют.Период

ИЗ

                РегистрСведений.Валюты КАК КурсыВалют

ГДЕ

                (КурсыВалют.Период >= &НачалоПериода) И

                (КурсыВалют.Период <= &ОкончаниеПериода)

ВЫБРАТЬ

                КурсыВалют.Валюты,

                КурсыВалют.КурсПродажи,

                КурсыВалют.КурсКонвертации,

                КурсыВалют.КурсПокупки,

                КурсыВалют.КурсМагазинов,

                КурсыВалют.КурсЦБ,

                КурсыВалют.ПроцентКурсаПокупки,

                КурсыВалют.ПроцентКурсаПродажи,

                КурсыВалют.ПроцентКурсаКонвертации,

                КурсыВалют.Период

ИЗ

                РегистрСведений.Валюты КАК КурсыВалют

{ГДЕ

                (КурсыВалют.Период >= &НачалоПериода),

                (КурсыВалют.Период <= &ОкончаниеПериода)}

Результат:

Ошибка исполнения отчета

по причине:

Ошибка получения данных

по причине:

Ошибка создания набора данных «НаборДанных1»

по причине:

Ошибка при исполнении запроса набора данных

по причине:

{(16, 23)}: Не задано значение параметра «НачалоПериода»

КурсыВалют.Период >= <<?>>&НачалоПериода

Результат:

Корректная отработка отчета

СКД: если не задано значение параметра-даты

Я
   xaozai

05.12.13 — 11:30

Простым запросом отбираются движения за определенный период &НачалоПериода и &КонецПериода.

Если значения этих параметров не задали в настройках, нужно, чтобы брались все движения.

Как это сделать?

СКД ругается:

Ошибка компоновки данных

по причине:

Ошибка получения данных

по причине:

Ошибка создания набора данных «Запрос»

по причине:

Ошибка при исполнении запроса набора данных

по причине:

{(xx, xx)}: Не задано значение параметра «НачалоПериода»

   samozvanec

1 — 05.12.13 — 11:38

закладка Компоновка в конструкторе запроса

   samozvanec

2 — 05.12.13 — 11:39

+(1) ну или в фигурные скобки возьми

   DmitriyDI

3 — 05.12.13 — 11:40

(0) {&НачалоПериода} , {&КонецПериода}

   fisher

4 — 05.12.13 — 11:49

(0) Так ругается, кажись, только если галка использования у параметра не стоит. Так что для начала задай для параметров режим использования «Всегда». После этого отчет должен формироваться без ошибок, но пустой. И лучше, честно говоря, на этом и остановиться.

Но если ты настаиваешь, то создай доп-параметр, который будет в отчете будет вместо пустой даты конца периода брать текущую дату, например, и используй его в запросах.

   Defender aka LINN

5 — 05.12.13 — 11:52

(4) Иногда лучше жевать…

   mikecool

6 — 05.12.13 — 11:53

на последних релизах 8.2 замечал, что параметры можно и не задавать и скд их нормально воспринимает…

   Бешеная Нога

7 — 05.12.13 — 11:59

ВЫБРАТЬ

    ТоварыНаСкладахОбороты.Склад,

    ТоварыНаСкладахОбороты.КоличествоОборот,

    ТоварыНаСкладахОбороты.КоличествоПриход,

    ТоварыНаСкладахОбороты.КоличествоРасход

ИЗ

    РегистрНакопления.ТоварыНаСкладах.Обороты({(&НачалоПериода)}, {(&ОкончаниеПериода)}, , ) КАК ТоварыНаСкладахОбороты

   xaozai

8 — 05.12.13 — 12:02

Добавил {…}:

ВЫБРАТЬ
    МойРегистрОстаткиИОбороты.измерение1 КАК Измерение1,
    МойРегистрОстаткиИОбороты.Измерение2 КАК Измерение2,
    МойРегистрОстаткиИОбороты.Период КАК ПериодМесяц,
    МойРегистрОстаткиИОбороты.СуммаНачальныйОстаток КАК СуммаНачальныйОстаток,
    МойРегистрОстаткиИОбороты.СуммаПриход КАК СуммаПриход,
    МойРегистрОстаткиИОбороты.СуммаРасход КАК СуммаРасход,
    МойРегистрОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток
{ВЫБРАТЬ
    Измерение1.*,
    Измерение2,
    ПериодМесяц,
    СуммаНачальныйОстаток,
    СуммаПриход,
    СуммаРасход,
    СуммаКонечныйОстаток}
ИЗ
    РегистрНакопления.МойРегистр.ОстаткиИОбороты(, , Месяц, , {(Измерение1).* КАК Измерение1, (Измерение2) КАК Измерение2, (Измерение3).* КАК Измерение3, (Измерение3.Дата >= НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ)) КАК НачалоПериода, (Измерение3.Дата <= КОНЕЦПЕРИОДА(&КонецПериода, ДЕНЬ)) КАК КонецПериода}) КАК МойРегистрОстаткиИОбороты

Теперь параметры вообще игнорируются (

Измерение3 — это ссылка на документ (не регистратор).

   xaozai

9 — 05.12.13 — 12:03

help!

   mikecool

10 — 05.12.13 — 12:04

у тебя нет параметров, (, , Месяц — тут пусто

   DmitriyDI

11 — 05.12.13 — 12:05

(8) не там добавил

   xaozai

12 — 05.12.13 — 12:06

Мне надо отбор именно по датам документов из измерения3.

   fisher

13 — 05.12.13 — 12:07

(5) А иногда — говорить

   Defender aka LINN

14 — 05.12.13 — 12:10

(13) Не в твоем случае. В первых постах были нормальные советы. В твоем — нет.

   DmitriyDI

15 — 05.12.13 — 12:12

(12) может регистр не правильно спроектирован?

   fisher

16 — 05.12.13 — 12:18

(14) В первых постах — советы бесполезные. &НачалоПериода и &КонецПериода — и так автоматом генерятся как дефолтовые параметры СКД для периодов виртуальных таблиц.

   fisher

17 — 05.12.13 — 12:19

Разве что он автозаполнение отключил…

   xaozai

18 — 05.12.13 — 12:19

(15) Есть документы, в табличных частях которых указываются некоторые показатели на определенные месяцы года, на весь год.

Эти показатели пишутся в регистр на месяцы из ТЧ (делают приход и расход).

По этим данным строится другой отчет — там всё Ок.

Это что-то типа планирования бюджета на год.

Последующие документы как бы корректируют данные других документов.

Теперь понадобилось отбирать движения еще и по датам документов, которые создают эти движения…

Т.е., как было запланировано на дату этого документа, как потом изменилась картина после этого документа и т.д.

   xaozai

19 — 05.12.13 — 12:21

(17)(14) по (8)(18) подскажите, что-нибудь.

   Бешеная Нога

20 — 05.12.13 — 12:22

(19) см (7) что еще надо

   xaozai

21 — 05.12.13 — 12:24

(20) Этот вариант мне не подходит.

   Бешеная Нога

22 — 05.12.13 — 12:25

(21) почему?

   xaozai

23 — 05.12.13 — 12:29

(22) Нужен отбор по датам документов, которые содержатся в измерении, не по датам регистратора.

   Бешеная Нога

24 — 05.12.13 — 12:29

ВЫБРАТЬ

    ТоварыНаСкладахОбороты.Склад,

    ТоварыНаСкладахОбороты.КоличествоОборот,

    ТоварыНаСкладахОбороты.КоличествоПриход,

    ТоварыНаСкладахОбороты.КоличествоРасход

ИЗ

    РегистрНакопления.ТоварыНаСкладах.Обороты(, , , {(Измерение3.Дата > НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ)}) КАК ТоварыНаСкладахОбороты

   xaozai

25 — 05.12.13 — 12:30

(23) Точнее, не по датам движений, а по датам документов из измерения.

   xaozai

26 — 05.12.13 — 12:30

(24) Я так и сделал. См. (8) Теперь параметры игнорируются вообще.

   hhhh

27 — 05.12.13 — 12:30

(25) ну вот это что за бред?

(Измерение3.Дата >= НАЧАЛОПЕРИОДА(&НачалоПериода, ДЕНЬ)) КАК НачалоПериода

то есть у вас булево значение в НАчалоПериода присваивается?

   samozvanec

28 — 05.12.13 — 12:34

(21) запрос покажи

  

xaozai

29 — 05.12.13 — 12:37

(27) О! Супер! Убрал в (8) «КАК НачалоПериода» и «КАК КонецПериода» — заработало как нужно )

Спасибо!

Вы здесь

Значение параметра не задано

Опубликовано ср, 18/09/2013 — 20:51 пользователем mak118

Добрый день! Помоги пожалуйста, я в этом новичок

Формирую в запросе ЗаказПокупателя во вложенном запросе

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

В итоге выходит ошибка,

Не задано значение параметра Счет1330.

Что я делаю не так ?

  1. Здрасьте всем.

    Захожу в некоторые ШТАТНЫЕ отчеты и обработки, и пишется вот такая штука:

    Ошибка при выполнении запроса.
    по причине:
    Ошибка получения данных
    по причине:
    Ошибка создания набора данных «НаборДанныхДинамическогоСписка»
    по причине:
    Ошибка при исполнении запроса набора данных
    по причине:
    {(25, 43)}: Не задано значение параметра «Характеристика»
    И (НастройкаДляТовара.Характеристика = <<?>>&Характеристика)

    Началось это даже не помню с чего. То ли после обновления, то ли еще когда то.
    Раньше такого не было.
    Учет товаров в разрезе характеристик не ведем. Но, когда включают галку, на Характеристики Нмнкл, то ошибка не выдается, а если снять, то выдается.
    Что делать и кто виноват?
    Спасибо.


  2. mialord

    Offline

    mialord
    Модераторы
    Команда форума
    Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.460
    Симпатии:
    53
    Баллы:
    54

    Добрый день!
    Смотрите опцию программы, скорее всего включили учет по характеристикам и теперь запрос расширяется до учета харктеристик, отключите и будет всё нормально

  3. Дык я ж говорю, что наоборот, если в настройках включить работу с характеристиками, то ошибка не выдается. А если выключить, то выдается. При этом характеристики не используем в работе.


  4. Konst82

    Offline

    Konst82
    Опытный в 1С

    Регистрация:
    29 авг 2014
    Сообщения:
    67
    Симпатии:
    4
    Баллы:
    29

    есть опция включения характеристик у вида номенклатуры и есть опция по всей программе (администрирование — настройка параметров системы — номенклатура). проверьте обе.

  5. Вообщем, как пришло, так и ушло. Может быть после обновления. Или после очистки кэша, т.к. за этот период было и то, и другое.
    Сейчас ошибки нет.


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

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