Использование параметров в скд. Использование параметров в скд Создаем новый отчет
В СКД есть запрос,в котором есть условия и соответственно параметры.
Есть параметр, предопределенное при открытии отчета каждый раз.Как его правильно указать в СКД?
Можно делать так:
Процедура ПриОткрытии()
//.........................
ПараметрДанных= КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Товар");
ПараметрДанных.Значение = Справочники.Номенклатура.НайтиПоНаименованию("Гвозди");
ПараметрДанных.Использование=Истина;
//...........................................
КонецПроцедуры
//////////////////////////////////////////
Особенности работы с параметрами виртуальных функций
Параметр запроса
В языке запросов имеется возможность указать значение параметра виртуальной функции. При этом для большинства параметров в качестве значения параметра может использоваться выражение. В качестве выражения может выступать и параметр.
Пример: РегистрНакопления. Продажи. Обороты (& Начало)
В данном примере в качестве значения первого параметра виртуальной таблицы будет использовано значение параметра &Начало.
Параметр компоновки данных
При помощи специальных инструкций в тексте запроса можно указать, какой параметр компоновки данных будет использоваться в качестве значения параметра виртуальной таблицы.
РегистрНакопления. Продажи. Обороты ({& НачалоПериода })
В данном примере в качестве значения первого параметра виртуальной таблицы будет использовано значение параметра &НачалоПериода, если его значение установлено в настройках компоновки данных.
Совместное использование параметра запроса и параметра компоновки данных
Если в запросе указано и выражение параметра и параметр компоновки данных, то значение параметра компоновки данных используется в случае, если значение данного параметра установлено в настройках компоновки. В противном случае в качестве значения параметра используется результат выражения, указанного в параметре виртуальной функции.
РегистрНакопления. Продажи. Обороты (& Начало {& НачалоПериода })
В этом примере, если в настройках установлено значение параметра НачалоПериода, то будет использоваться его значение. В противном случае в сгенерированном тексте запроса останется исходное выражение, т. е. &Начало, и в качестве значения параметра виртуальной таблицы будет использоваться значение этого параметра.
Параметры при автоматическом заполнении полей набора данных
При автоматическом заполнении доступных полей набора данных схемы компоновки данных, система автоматически добавляет в схему параметры виртуальных таблиц с именами, соответствующих именам параметров виртуальной таблицы, в случае если у параметра виртуальной таблицы отсутствует описание параметра компоновки данных.
Таким образом, запись:
РегистрНакопления. Продажи. Обороты (& Начало)
соответствует следующей:
РегистрНакопления. Продажи. Обороты (& Начало {& НачалоПериода }, {& КонецПериода})
И значение параметра &Начало используется только в случае если в настройках не установлено значение параметра &НачалоПериода.
[необходимо зарегистрироваться для просмотра ссылки]
Внимание! Перед вами ознакомительная версия урока, материалы которого могут быть неполными.
Войдите на сайт как ученик
Войдите как ученик, чтобы получить доступ к материалам школы
Система компоновки данных 1С 8.3 для начинающих: делаем связь наборов данных
- Написать отчёт, который выводит клиентов и их любимые продукты. У каждого клиента есть любимый цвет, а у каждого продукта свой цвет - вот на основании этих цветов и нужно определять "любимость" продукта. К примеру, если у Андрея любимый цвет красный, то одним из его любимых продуктов будут помидоры (они красного цвета).
- Применить в отчёте два набора данных. Первый набор - это данные из таблицы справочника "Клиенты". Второй - данные из таблицы справочника "Еда".
- Осуществить связь этих двух наборов , чтобы в отчёте остались только любимые продукты для каждого из клиентов.
Создаем новый отчет
Открываем базу "Гастроном" в конфигураторе и через главное меню создаём новый отчет:
Вид документа - "Внешний отчет":
В форме нового отчёта указываем имя "Урок6" и нажимаем кнопку "Открыть схему компоновки данных":
Оставляем имя схемы по умолчанию:
Добавляем первый набор данных
В открывшейся схеме переходим на закладку "Наборы данных" и через зелёный плюсик выбираем "Добавить набор данных - запрос":
Вызываем конструктор запроса:
Указываем таблицу "Клиенты" и поля, которые требуется получить из запроса:
Добавляем второй набор данных
Добавляем второй набор данных:
Выделяем его (НаборДанных2) и снова вызываем конструктор запроса:
Указываем таблицу справочника "Еда" и поля, которые требуется получить из запроса:
Получился такой текст запроса:
Обратите внимание, что у нас сейчас в отчёте присутствуют два набора данных: НаборДанных1 и НаборДанных2. У каждого свой текст запроса и свои данные.
Делаем имена более наглядными
Для наглядности, давайте переименуем НаборДанных1 в Клиенты, а НаборДанных2 в Еда.
Сделайте это двойным щелчком по каждому из наборов:
Данные каждого из наборов мы сможем использовать в нашем отчёте. К этим данным мы будем обращаться через поля.
В данный момент у набора "Клиенты" следующие поля: "Наименование" и "ЛюбимыйЦвет", а у набора "Еда": "Наименование" и "Цвет".
Видим, что имена пересекаются и мы легко запутаемся. Поэтому давайте изменим имена полей на более говорящие.
Выделяем набор "Клиенты" и меняем имена полей так:
Затем выделяем набор "Еда" и меняем имена полей так:
Вызываем конструктор настроек
Наконец, переходим на закладку "Настройки" и нажимаем волшебную палочку, чтобы вызвать конструктор настроек:
Тип отчета - "Список...":
Выбираем поля для отчета из обоих наборов:
Видите почему так важно было изменить имена полей? На этапе настроек компоновки данных мы не видим из каких наборов эти поля. Видим только их имена.
Проверяем отчёт
Сохраняем отчет и формируем в режиме пользователя:
Ага. Хорошо, но не совсем. Произошло так называемое перекрёстное соединение двух наборов (вам это должно быть хорошо знакомо по соединениям в запросах, которые мы изучали в прошлых модулях). Каждой записи из таблицы "Клиенты" сопоставлена запись из таблицы "Еда".
Но нам нужно из всех этих записей оставить только те у которых поле "ЛюбимыйЦветКлиента" равно полю "ЦветЕды":
Осуществляем связь двух наборов данных
Для этого осуществим связь двух наборов данных (Клиенты и Еда) по полям ЛюбимыйЦветКлиента и ЦветЕды.
Переходим на закладку "Связи наборов данных" и нажимаем на кнопку-плюсик, чтобы добавить новую связь:
Настраиваем параметры как на рисунке ниже:
Сделаю пояснения.
Источник и приёмник связи. Ну тут всё понятно. Указываем первый набор (Клиенты) и второй набор (Еда) данных. Хочу обратить особое внимание, что связь будет осуществляться по принципу внешнего левого соединения (мы его проходили в теме запросов в прошлых модулях). Исходя из этого и нужно выбирать какой набор будет источником, а какой приёмником.
Выражение источник. Указываем здесь выражение или просто поле из набора данных источника (мы здесь указали поле ЛюбимыйЦветКлиента из набора Клиенты).
Выражение приемник. Указываем здесь выражение или просто поле из набора данных приёмника (мы здесь указали поле ЦветЕды из набора Еда).
Таким образом данная связь оставит из прошлого списка только те строки, у которых поле ЛюбимыйЦветКлиента равно полю ЦветЕды.
Сохраним отчёт и запустим в режиме пользователя:
Отлично!
Сделаю пояснение про поле "Условие связи ", об которое так часто бьют свои копья начинающие программисты.
Условие связи - это вспомогательное поле. Туда можно писать выражения с участием полей только из набора данных, указанного в источнике связи .
В этом случае для всех строк из источника связи перед осуществлением связи будет проверяться это выражение (условие связи). И если это выражение равно ИСТИНА, то будет предприниматься попытка установить связи этой строки со строками из приемника связи. Если же выражение равно ЛОЖЬ, то таких попыток предприниматься не будет.