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

Обновлено: 02.07.2024

Добрый день! Пишу под себя небольшую конфигурацию в 1С:Предприятие 8.3.
Наткнулся на проблему, не могу решить пару дней.
Цель: есть документ о перемещении оборудования между нашими базами. В реквизитах документа указываем новый адрес и старый. В табличной части выбираем необходимое оборудование из справочника Оборудование. Необходимо, чтобы в выпадающем списке было только то оборудование, которое находится на эту дату на старом адресе. Записи все делаются в РегистрСведений Базировка.

В форме выбора справочника Оборудование сделал следующий произвольный запрос с помощью конструктора:

Далее в ФормеДокумента в табличной части в свойствах оборудования на вкладке Представление в Связях параметров выбора ставлю условия:

И Формой Выбора ставлю ту форму где прописывал произвольный запрос.

Когда создаю новый документ при обращении в табличной части к списку оборудования выдает ошибку:
Ошибка при выполнении запроса.
по причине:
Ошибка получения данных
по причине:
Ошибка создания набора данных "НаборДанныхДинамическогоСписка"
по причине:
Ошибка при исполнении запроса набора данных
по причине:
<(16, 43)>: Не задано значение параметра "АдресБазы"
ИЛИ БазировкаСрезПоследних.АдресБазы = <<?>>&АдресБазы

Что и где ещё необходимо прописать? Или должен быть совершенно другой алгоритм действий?

Итак в ходе поисков удалось выяснить, что код в форме документа

при записи в Событиях "Создать" и прочих не работает, а вот "НачалоВыбора" без строчки "СандартнаяОбработка=Ложь;" вызывает два окна, но работает как надо.

Так же этот код можно заменить записью в Свойствах Элемента Табличной Части: 1. "ВыборФормы" - ФормаВыбораТест и 2. "СвязиПараметровВыбора" - Период(Объект.Дата), АдресБазы(Объект.СтарыйАдрес).

В самой форме выбора прописываем:

Все параметры передаются, но если стоит режим просмотра - "Иерархический список" или "Древо", то появляется пустой список, если переключиться на режим "Список", то всё появляется согласно установленным параметрам.

Также выяснил что код

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

И как констатация факта (для себя не забыть), в ходе поиска кода запроса выяснил, что если в динамическом списке не задана "Основная таблица", то в форме при выборе нужной записи она не попадает в строчку документа. (в ходе экспериментов она стала пустой, долго искал причину ошибки)

Суть вашей проблемы что вы не заполнили параметр &АдресБазы до момента выполнения своего запроса.
То есть примерно так.

Вот это непонятные строки..

Вот это непонятные строки..

Приведите более полный код .

Прикрепил скриншот, где этот код.

Суть вашей проблемы что вы не заполнили параметр &АдресБазы до момента выполнения своего запроса.

Стесняюсь спросить "Куда ставить?"

Попробовал вставить в События при изменении:

Нет никакой реакции(((

(4) Событие "При изменении" возникает не при возникновении ваших желаний что-то поменять, а только после того как вы УЖЕ что-то поменяли.
И потому ясно , что текст ваш явно "не туда".
Кроме того вот такой (13) Пытался заполнить, но там даются только реквизиты справочника Оборудование. В форме выбора справочника Оборудование сделал следующий произвольный запрос с помощью конструктора:
Вы указали Справочник Оборудование в своей форме выбора?
Но копать нужно вам именно в этой закладке , ибо именно в ней передаются Параметы вашего запроса , а их вы не передали, вот он и пустой (14) Вы пошли совершенно не верным путем.
Вы вообще не там ищете параметры своего запроса.

Сделал следующее:
1. В Модуле "ФормаВыбораТест" прописал код:

2. В модуле Формы документа "Перемещение оборудования":

Но синтаксис ругается на Объект.Дата, если его убрать, то список открывается пустым.
Как здесь указать ссылку на дату?

Эх сегодня только помогал таким вопросом. Нужно в Передать параметр в динамический список.:
ТвойСписок .УстановитьПаратр("АдресБазы", СтарыйАдрес); (3) Понимаю, что при открытии этого списка параметры как-то должны попадать в этот запрос, но вот как и куда - остаётся для меня загадкой. Пробовал вставить в События Поля "Оборудование" ПриИзменении, о чём написал выше. (5) Событие при создании. Там передаешь параметры списку

Прописал в событие при Создании:

Ошибка так и осталась, такое ощущение, что он и не начинает работать.

(5) (4) Событие "При изменении" возникает не при возникновении ваших желаний что-то поменять, а только после того как вы УЖЕ что-то поменяли.
И потому ясно , что текст ваш явно "не туда".
Кроме того вот такой текст еще хуже.
ибо а Где же сам Запрос?

Вы должны сформировать Список запросом, который выполнится ДО открытия окна вашей формы со списком оборудования.
А до этого момента , то есть еще раньше вы должны передать пареметры в запрос.

И приведите уж весь текст модуля вашей формы, для ясности.
И Обратите внимание на советы (6).

(9)
Вначале делаю новую "ФормаВыбораТест", в которой делаю запрос в настройках списка:

И дальнейшие все мои действия не приводят к успеху (((
Весь код из модуля я сюда уже написал, другого ничего нет.

По-моему, тут не нужны никакие параметры. Платформа сама всё должна сделать, если правильно указать связи параметров выбора. И я не заметил слова "Отбор" в их представлении. (10) Так я тоже так считал, что заполнив нужные поля, должно сработать, но ни чего не получается. (12) Вы не заполнили нужные поля - Параметры выбора.
Если вы уберете из вашего запроса вообще Параметры , то он сформирует и выдаст вам список без отбора, то есть все по идее
А уже потом будете пытаться засунуть в него ограничения. (12) Проверил на тестовой базе. Всё работает без единой строчки кода. Ну и, разумеется, в тексте запроса динамического списка никаких параметров не нужно. в тексте запроса динамического списка никаких параметров не нужно
У вас в тексте параметры, их нужно удалить скорее всего (22) К сожалению в 7 дневной ограниченной версии нет доступа к этому материалу((( (19) В настройках динамического списка, что-нибудь прописывали? (25) Убрал параметры. И они должны появится, как я понимаю, в свойствах "Связи параметров выбора". Почему автоматически не предлагает эти имена. Пробовал вручную прописать в строке

Значит в динамическом списке нет записей, соответствующих отбору.
Выдержка из ИТС:
5.6.17. Связи параметров выбора
Связи параметров выбора – данное свойство позволяет указать список реквизитов, которые будут поставлять значения, используемые при выборе значения реквизита, при открытии формы выбора, при отображении списка быстрого выбора и при выполнении ввода по строке.

В качестве примера можно привести выбор договора с контрагентом. Вначале осуществляется выбор контрагента, а затем выполняется выбор договора только из списка договоров выбранного контрагента. Причем отбор автоматически изменяется при смене контрагента.

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

Рис. 151. Связи параметров выбора

Значения, указанные в данном свойстве, будут переданы в открываемую форму через структуру Параметры (см. здесь). При этом значение колонки Имя будет соответствовать ключу элемента структуры, а значение реквизита, указанное в колонке Реквизит, – значению элемента структуры. Если в колонке Имя указано значение вида Отбор.Владелец, то будет создан параметр формы Отбор (типа Структура). В этой структуре будет создан элемент с ключом Код и значением, полученным из реквизита, указанного в колонке Реквизит (в нашем примере – Поставщик).

Параметры могут использоваться практически в любом месте запроса и выполнять самые различные функции.

Параметры обозначаются знаком & после которого следует имя параметра.

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

При построении запроса конструктором на вкладке “Условия” если не стоит галочка “Произвольное”, то конструктор считает что в правом значении параметр и он записывается без символа &.


Таким образом этот блок настраивается в конструкторе.

Если значение параметра не задано, то построение СКД будет невозможно и будет выдана ошибка, поэтому такие параметры называют “обязательными” или “жесткими”.

Выбрать.

Этот блок располагается в запросе типа выборка данных пакета запросов СКД в первом запросе объединения между перечнем полей и “ИЗ” и заключается в фигурные скобки.


Таким образом этот блок настраивается в конструкторе.

При автоматическом заполнении полей набора данных, для не включенных в блок расширения “ВЫБРАТЬ”, добавляются все поля списка выборки и их дочерние поля. Они становятся доступными для выбора, упорядочивания, группировки, отбора. Также добавляются поля, которые упомянуты в параметре “Условия” виртуальных таблиц как доступные для отбора.

Отбор, установленный в пользовательских настройках, будет действовать не только на основной запрос, но и на все запросы в пакете. Но это не всегда соответствует логике отчета, к примеру, если помимо отобранной номенклатуры и сумм по ней нужно выводить общую сумму продаж для сравнения. В таких случаях нам нужны специфические отборы в каждом запросе пакета.

Блок расширения “ГДЕ” может быть расположен после или вместо обычного блока “ГДЕ” в любом запросе, подзапросе, запросах объединения и заключается в фигурные скобки. Для присвоения отбору псевдонима используется конструкция “КАК”. Псевдоним нужно использовать чтобы отбор производился конструкцией расширения языка запросов, но не происходил автоматически по наименованию поля.

Если автозаполнение полей набора отключено, поля из этого блока попадают в перечень полей набора доступными только для отбора, использование дочерних полей зависит от наличия конструкции “.*”.

Если автозаполнение включено, и это поле включено в блок расширения “ВЫБРАТЬ” тогда настройки обоих блоков объединяются. Если не включено в “ВЫБРАТЬ” то поля попадают доступными для вывода, группировки, отбора и упорядочивания.


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

Также в блоке “ГДЕ” вместо параметра может быть произвольное выражение с использованием конструкции ВЫБОР или параметров со страницы “Параметры” СКД. Правда в последнем случае вид сравнения необходимо указывать конкретно.

Нужно с осторожностью использовать вид сравнения МЕЖДУ поскольку:

Если параметры НачалоПериода и КонецПериода не будут заданы, то система получит документы за весь период.

Если параметры НачалоПериода и КонецПериода будут заданы, то система получит документы за указанный период.

Если какой-то один из параметров не будет задан, то система выдаст ошибку.

Один из вариантов решения это разбить МЕЖДУ на два условия чтобы система не выдавала ошибку в случае одного незаполненного параметра.

Это же замечание относится к любым выражением с использованием нескольких параметров.

Параметры виртуальных таблиц.

В параметрах виртуальных таблиц в отличие от предыдущих блоков, каждый параметр заключается в фигурные скобки. В полях относящихся к периоду название параметра ставится с &. Пример &ДатаНачала. В поле “Условие” параметры оформляются аналогично блоку “ГДЕ”.

Параметры из полей периода попадают на страницу “Параметры” СКД. Если автозаполнение включено и в поле периода параметр не вписан, параметры с именем поля периода будут автоматически созданы на странице “Параметры” СКД.


Таким образом, эти параметры заполняются в конструкторе запроса. Для открытия формы “Параметры виртуальной таблицы” нужно выбрать виртуальную таблицу в списке таблиц и нажать выделенную синим кнопку. Также тут у таблиц есть булевый реквизит “Обязательная” и числовой реквизит “Номер группы”. Если признак обязательности таблицы не установлен, то она будет добавляться в результирующий запрос только в случае, когда хотя бы одно поле из нее задействовано в компоновке. Номер группы заполняется для необязательных таблиц и обозначает группу таблиц, которые будут добавлены в результирующий запрос только, когда из этой группы таблиц задействовано хотя бы одно поле.

В параметрах виртуальных таблиц возможно совместное использование “жестких” параметров запросов и “мягких” параметров компоновки данных.

В этом примере если в настройках установлено значение параметра &НачалоПериода, то будет использоваться его значение. В противном случае в качестве значения параметра виртуальной таблицы будет использоваться значение “жесткого” параметра “&Начало”.

Если автозаполнение включено и в поля периода не вписаны “мягкие” параметры компоновки данных то параметры с именем поля периода будут автоматически созданы на странице “Параметры” СКД и текст запроса:

будет соответствовать следующему:

В этом случае “мягкие” параметры также будут иметь приоритет над “жесткими”.


Обзорный вид страницы.


На эту страницу автоматически добавляются все параметры из запроса. Можно добавлять свой параметр в для использования его в вычисляемых полях например.

Строка параметра имеет следующие реквизиты:


Таким же образом можно указать формат числа для численного параметра и длину строки для строкового.

А для того чтобы введенные значения интерпретировались в отчете как начало и конец дня следует в запросе использовать функции НачалоПериода() и КонецПериода() .

Также в примере к реквизиту “Тип” можно было в выражениях использовать функции встроенного языка запросов, особенность применения этих функций в данном месте такова, что строковые параметры функций надо брать в кавычки.

и в запросе можно было бы писать проще поскольку в параметрах уже будет содержаться начало и конец периода:



Даты начала и конца стандартного периода также содержат и время. ДатаНачала имеет время 00:00:00, а ДатаОкончания 23:59:59. Получится что пользователь выберет стандартный период в “Период” а разработчик будет использовать корректные “ПериодНачало” и “ПериодОкончание”.




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

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



Если Режим редактирования установить Быстрый доступ, то параметр появится на форме.


Если у параметра “Период” представление заполнить строкой “ПеРиОд”, то вместо название будет показано содержания поля представление.

Если у отчета СКД нет формы, то платформа создаст автоматическую, на которой будут табличный документ результата, кнопки управления и быстрые пользовательские настройки.


Можно создать свою форму для отчета и вывести на нее табличное поле со всеми пользовательскими настройками. Вот так:


Для этого в созданной форме в конфигураторе вытаскиваем на форму Пользовательские настройки из Компоновщика отчета.


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

Таким образом можно программно менять параметры из формы.

Параметры это ключевой инструмент для управления отчетом. Использование параметров дает возможность решить множество прикладных задач, таких как калькуляция на основе информации в базе и значений введенных интерактивно для конкретной калькуляции и многих других. В данной статье рассмотрены практически все относящиеся к параметрам механизмы и особенности. Рамках статьи не рассмотрен блок “Характеристики” Расширения языка запросов для СКД поскольку он не касается параметров. Не рассмотрена настройка параметра “Параметр функциональной опции” поскольку ее описание лучше включить в статью по функциональным опциям.

Читайте также: