Как получить свойство в запросе 1с
Для работы с типами в запроса для сравнения и отборов существует две функции: ТИП() и ТИПЗНАЧЕНИЯ(), а также конструкция ССЫЛКА для ссылочных типов. В общем случае тип значения применяется для работы с составными полями, так как в других случаях тип значения известен заранее или не меняется.
Примеры проверки типа в запросах:
Получить тип в полях выборки:
ВЫБРАТЬ ТИП(Строка), ТИП(Справочник.Контрагенты)
Получить совпадение типа в выборке
Выбрать ТИПЗНАЧЕНИЯ(Ссылка) = ТИП(Справочник.Контрагенты)
Отбор по типу значения:
ВЫБРАТЬ Ссылка ИЗ Справочник.Контрагенты ГДЕ ТИПЗНАЧЕНИЯ(ОсновнойМенеджер) = ТИП(Справочник.ФизическиеЛица)
Использование конструкции ССЫЛКА:
ВЫБРАТЬ ИНН ИЗ Справочник.Контрагенты ГДЕ ОсновнойМенеджер ССЫЛКА Справочник.ФизическиеЛица
Последние две конструкции идентичны по результату исполнения, но последняя применима только к ссылочным типам, что не всегда так, но более компактна.
Допустимо использование данных конструкций и в качестве условия для соединения таблиц.
На тип значения можно проверять не только поля из выборки запроса, но и параметры:
ВЫБРАТЬ * из Справочник.Контрагенты ГДЕ ТИПЗНАЧЕНИЯ(&Параметр) = ТИП(Справочник.Контрагенты)
Параметром функции ТИПЗНАЧЕНИЯ могут выступать:
СТРОКА, ЧИСЛО, ДАТА, а также все ссылочные типы.
Чтобы проверить на несколько значений применяется условие ИЛИ или множество В()
ВЫБРАТЬ Ссылка ИЗ Справочник.Пользователи ГДЕ ФизЛицо ССЫЛКА Справочник.ФизическиеЛица ИЛИ Физлицо ССЫЛКА Справочник.Пользователи
ВЫБРАТЬ Ссылка ИЗ Справочник.Пользователи ГДЕ ТИПЗНАЧЕНИЯ(Физлицо) В (ТИП(Справочник.ФизическиеЛица),ТИП(Справочник.Пользователи))
При сравнении ссылочных типов пустые ссылки, также дают совпадение, то есть для проверки на заполненность они применимы только как вспомогательные функции
Выбрать * ИЗ Справочник.Пользователи ГДЕ ТИПЗНАЧЕНИЯ(Физлицо) <> ТИП(Неопределено) И ТИПЗНАЧЕНИЯ(Физлицо) <> ТИП(NULL) И НЕ Физлицо = ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)
Реклама — двигатель торговли, но тормоз просмотра фильмов по телевизору.
— Игорь Сиволоб
Необходимо в документ "Заказ покупателя" 1С:Торговли 8.2 в табличной части организовать подбор по свойствам номенклатуры. Т.е. есть форма подбора где указываются свойства, родителя номенклатуры и необходимо вывести найденные номенклатуры по заданным условиям. Каким образом реализовать это в запросе? (например номенклатура полотно белый дуб - свойства - покрытие шпон, стекло нет, цвет - белый дуб и таких номенклатур много) Как эту номенклатуру выбрать через запрос?
Похожие FAQ
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Cклонения по падежам 6
НаКлиенте Процедура Команда1(Команда) ФИО = " Иванов Иван Иванович" ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = " " ; Альтернативный перенос остатков между 7.7 и 8.1 (обработкой с ИТС ЗагрузкаДанныхИзТаблДокум) 2
Нашел альтернативный, практически моментальный способ переноса остатков между семерой и восьмерой (так и между восмерками). Не требуется никаких дополнительных усилий, программирования, писания обработок и т.д. и т.п. На ИТС есть обработка под наз Ввод по строке - поиск по первым символам или в любом месте наименования 6
При разработке конфигурации, для упрощении ввода документов потребовалось настроить ввод номенклатуры по совпадению любой части наименования! В 1С 8.3 по умолчанию настройки справочника номенклатуры такие: При такой настройке, механизм поиска в Выборка (перебор) элементов справочника 4
// Выбрать( , , , ) Номенклатура = Справочники.Номенклатура; Отбор = Новый Структура("ТипНоменклатуры"); Пусто = Перечисления.ТипыНоменклатуры.ПустаяСсылка(); Отбор.ТипНоменклатуры = Пусто; Выборка = Номенклатура.Выбрать(,,Отбор, "Наимено Посмотреть все результаты поиска похожих
Еще в этой же категории
Значения NULL ( ЕСТЬ NULL и ЕСТЬNULL()) 48
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL значения появляются в 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы
Ключевые слова и Изображения
Слова упорядочены по частоте использования в тексте
Изображения
Diana13, для каждого поля в Событии начало выбора прописать заполнение списка выбора по аналогии : Поле выбора ~ Как заполнить список выбора элемента формы?
ВОПРОСССССССССС.
Каким образом в обработке по подбору для каждого поля назначить список определенных значений из справочника. Т.е. например свойство цвет - белый, красный и .тд., а список открывается полностью.
Вообщем сделала так;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЦеныНоменклатурыСрезПоследних.Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Цена,
| ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения,
| ЦеныНоменклатурыСрезПоследних.Валюта КАК ВалютаЦены
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
Diana13, у Вас запрос ничего не выводит, так как условия написаны некорректно. Мой запрос по указанным параметрам вывел номенклатуру.
Ваши условия противоречат друг другу. Как минимум нужно было писать не:
Код 1C v 8.х
а
Код 1C v 8.х .
А вообще. Что бы вывести нужные поля, нужно писать гдето так:
Код 1C v 8.х
Тогда еще вопрос каким где назначить параметры Справочники.ЗначенияСвойствОбъектов и ПланыВидовХарактеристик.СвойстваОбъектов. И каким образом в обработке по подбору для каждого поля назначить список определенных значений из справочника. Т.е. например свойство цвет - белый, красный и .тд., а список открывается полностью.
Я примерно так и пишу, только он не выводит значения. У меня примерно так
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка,
| Номенклатура.Представление,
| Номенклатура.Родитель,
| Номенклатура.ЭтоГруппа,
| Номенклатура.Код,
| ЗначенияСвойствОбъектов.Объект,
| ЗначенияСвойствОбъектов.Значение,
| ЗначенияСвойствОбъектов.Свойство
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
| ПО Номенклатура.Ссылка = ЗначенияСвойствОбъектов.Объект
|ГДЕ
| Номенклатура.Родитель = &РОдитель
| И ЗначенияСвойствОбъектов.Свойство.Наименование = &Покрытие
| ИЛИ ЗначенияСвойствОбъектов.Значение.Наименование = &ПОкрытиеНом
| И ЗначенияСвойствОбъектов.Свойство.Наименование = &Цвет
| ИЛИ ЗначенияСвойствОбъектов.Значение.Наименование = &ЦветНом
Во-первых: Вопрос задан не в "вопроснике" ;)
А по теме:
я бы как-то так написал ;)
Войдите как ученик, чтобы получить доступ к материалам школы
Язык запросов 1С 8.3 для начинающих программистов: свойства объектов и столбцы таблиц
Автор уроков и преподаватель школы: Владимир Милькин
Из прошлого урока мы узнали, что все объекты базы данных хранятся в виде таблиц.
Для каждого прикладного объекта (например, справочник Еда) в базе существует своя таблица (соответственно Справочник.Еда). Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Столбцы этой таблицы представляют из себя свойства (по-другому реквизиты) прикладного объекта.
Строки же содержат непосредственно данные самих объектов.
На рисунке ниже для справочника Еда представлено соответствие тех полей, которые мы видим в пользовательском режиме реквизитам справочника, которые заданы в конфигураторе:
Поля Наименование и Код не отображаются в общем списке реквизитов, а входят в группу так называемых стандартных реквизитов для справочников.
Стандартные реквизиты, они на то и стандартные, что будут присутствовать абсолютно у всех справочников. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Список стандартных реквизитов есть у всех видов прикладных объектов. У документов они свои:
Таким образом полный список реквизитов справочника Еда будет такой:
- Вкус
- Цвет
- Калорийность
- ЭтоГруппа
- Код
- Наименование
- Родитель
- Владелец
- ПометкаУдаления
- Ссылка
- Предопределенный
- ИмяПредопределенныхДанных
Соответственно таблица Справочник.Еда будет содержать 12 столбцов (по столбцу на реквизит).
Войдите как ученик, чтобы получить доступ к материалам школы
Язык запросов 1С 8.3 для начинающих программистов: функции и операторы для работы с типами (ТИПЗНАЧЕНИЯ, ТИП, ССЫЛКА, ЕСТЬNULL, ВЫРАЗИТЬ)
Автор уроков и преподаватель школы: Владимир Милькин
Давайте вспомним, что каждый реквизит (свойство, поле) справочника, документа или любого другого прикладного объекта имеет свой тип . И этот тип мы можем посмотреть в конфигураторе:
В языке запросов существует целый класс функций и операторов для работы с типами реквизитов. Давайте рассмотрим их.
Функция ТИПЗНАЧЕНИЯ
Эта функция принимает один параметр (значение) и возвращает его тип. Для описанного на картинке (выше) реквизита Вкус справочника Еда вернётся следующее:
Если мы запросим тип поля Наименование, то, как и ожидается, получим Строка:
А теперь давайте рассмотрим реквизит ОтличительныйПризнак у справочника Города:
Вы видите, что этот реквизит может иметь один из нескольких типов: Строка, Справочник.Вкусы, Справочник.Цвета. Такой тип реквизитов называется СОСТАВНЫМ .
Если мы попытаемся заполнить значение такого реквизита в режиме 1С:Предприятие, то система спросит нас, какого типа будет вводимое значение:
И только после нашего выбора позволит ввести значение выбранного типа.
Таким образом, элементы справочника одного вида (Справочник.Города) смогут хранить в одном и том же реквизите (ОтличительныйПризнак) значения разных типов (Строка, Цвета или Вкусы).
Вы можете убедиться в этом сами пощёлкав по элементам справочника Города в режиме 1С:Предприятие. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Здесь значение отличительного признака является элементом справочника Вкусы:
А здесь вообще элементом справочника Цвета:
Вот какие возможности открывает перед нами составной тип данных!
Интересно, как поведёт себя функция ТИПЗНАЧЕНИЯ на реквизите ОтличительныйПризнак, имеющий составной тип данных:
Это уже очень интересно. Давайте разбираться с каждой строкой в отдельности.
Тип значения отличительного признака для элемента Россия равен NULL. Мы впервые сталкиваемся с этим типом. Значения данного типа используются исключительно для определения отсутствующего значения при работе с базой данных.
Так и есть, ведь элемент Россия является группой, а не обычным элементом справочника Города, поэтому у него отсутствует поле ОтличительныйПризнак. А тип у отсутствующего значения, как мы прочитали выше, всегда равен NULL.
Тип значения отличительного признака для Перми равен Вкусы. Так и есть, ведь значение отличительного признака забитое в базе для города Пермь является ссылкой на элемент справочника Вкусы.
Для Красноярска тип признака равен Цвета, потому что значение выбранное в базе является ссылкой на элемент справочника Цвета.
Для Воронежа тип признака равен Строка, потому что значение введенное в базе является обычной строкой.
Индия снова группа, поэтому значение отсутствует. А тип у отсутствующего значения, как мы помним, равен NULL.
Далее всё аналогично, кроме Сан-Паулу. Это не группа, а обычный элемент справочника (город), но тип его значения пустой. Как так?
А дело вот в чём. Если вы зайдёте в элемент справочника Города с наименованием Сан-Паулу, то увидите, что поле ОтличительныйПризнак совершенно никак не заполнено. Оно пустое. А все незаполненные поля составного типа имеют специальное значение НЕОПРЕДЕЛЕНО .
С НЕОПРЕДЕЛЕНО мы также сталкиваемся впервые.
Значение НЕОПРЕДЕЛЕНО применяется, когда необходимо использовать пустое значение, не принадлежащее ни к одному другому типу. Это как раз наша ситуация.
А тип для значения, которое не принадлежит ни к одному из типов, как вы уже наверное догадались отсутствует.
Функция ТИП
Она принимает всего один параметр - имя примитивного типа (СТРОКА, ЧИСЛО, ДАТА, БУЛЕВО), либо имя таблицы, тип ссылки которой нужно получить.
Результатом данной конструкции будет значение типа Тип для указанного типа.
Звучит туманно, не правда ли?
Давайте рассмотрим применение данной конструкции и всё сразу станет на свои места.
Пусть нам требуется отобрать все записи справочника Города, у которых составной реквизит ОтличительныйПризнак имеет значение типа СТРОКА:
Теперь давайте отберём все записи, у которых значения реквизита ОтличительныйПризнак являются ссылками на элементы справочника Цвета (таблица Справочник.Цвета):
Отступление
Как вы помните, некоторые элементы справочника Города не имеют реквизита ОтличительныйПризнак. Функция ТИПЗНАЧЕНИЯ для таких элементов выдаёт NULL.
Как можно сделать отбор таких элементов в запросе? Для этого предусмотрен специальный логический оператор ЕСТЬ NULL (не путать с функцией ЕСТЬNULL, которую мы рассмотрим ниже). Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Вот пример его использования:
Но есть и такие элементы (Сан-Паулу), у которых реквизит ОтличительныйПризнак (составного типа) просто не заполнен и равен специальному значению НЕОПРЕДЕЛЕНО.
Чтобы отобрать такие записи следует использовать другую конструкцию:
Но сравнение с НЕОПРЕДЕЛЕНО для определения пустых (не заполненных) реквизитов будет работать только для составных типов.
Кстати, у логического оператора ЕСТЬ NULL форма отрицания выглядит следующим образом:
Логический оператор ССЫЛКА
Оператор ССЫЛКА позволяет проверить, является ли значение выражения, указанного слева от него, ссылкой на таблицу , указанную справа.
К примеру, давайте выберем из справочника Города только те записи, у которых значение составного реквизита ОтличительныйПризнак являются ссылкой на элемент справочника Вкусы:
Как вы помните, эту же задачу мы могли бы решить используя ТИПЗНАЧЕНИЯ и ТИП:
Функция ЕСТЬNULL
Функция предназначена для замены значения NULL на другое значение.
Мы помним, что значение NULL возвращается в том случае, если запрашиваемый реквизит (поле, свойство) не существует.
Как например, реквизит ОтличительныйПризнак для групп справочника Города:
Функция ЕСТЬNULL поможет нам вывести другое значение в том случае, если это значение равно NULL. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Пусть в данном случае это будет строка "Такого реквизита нет!":
Получается, что если первый параметр функции ЕСТЬNULL не равен NULL, то возвращается он. Если же он равен NULL, то возвращается второй параметр.
Функция ВЫРАЗИТЬ
Эта функция предназначена только для полей , имеющих составной тип . Отличным примером такого поля является свойство ОтличительныйПризнак у элементов справочника Города.
Как мы помним, составные поля могут быть одного из нескольких типов, указанных в конфигураторе.
Для поля ОтличительныйПризнак такими допустимыми типами являются СТРОКА, Справочник.Цвета и Справочник.Вкусы.
Иногда возникает необходимость привести значения составного поля к какому-либо определенному типу.
Давайте приведём все значения поля ОтличительныйПризнак к типу Справочник.Цвета:
В результате, все значения элементов, которые имели тип Справочник.Цвета, остались заполненными и оказались приведенными к указанному типу. Все значения других типов (СТРОКА, Справочник.Вкусы) теперь стали равны NULL. В этом состоит особенность приведения типа при помощи функции ВЫРАЗИТЬ.
Приводить тип можно или к примитивному типу (БУЛЕВО, ЧИСЛО, СТРОКА, ДАТА) или к ссылочному типу. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Но тип, к которому делается приведение, обязательно должен входить в список типов для данного составного поля, иначе система выдаст ошибку.
Пройдите тест
Не все реквизиты справочников или документов имеют свой тип, но те что имеют можно посмотреть в конфигураторе
Не все реквизиты справочников или документов имеют свой тип, но те что имеют можно посмотреть в режиме 1С:Предприятие
Каждый реквизит справочника или документа имеет свой тип, который можно посмотреть в режиме 1С:Предприятие
Данная публикация описывает один из простых примеров работы со свойствами типовых объектов (в данном случае - элементов справочника "Контрагенты"), позволяющих существенно расширить работу "по условию", используя предварительно установленные свойства объектов.
Моя публикация не претендует на оригинальность, однако она наверняка поможет новичкам, интересующимся связкой "Планы видов характеристик - Регистры Сведений".
Из учебника по ООП мы помним, что объекты могут быть описаны набором свойств, при этом набор индивидуален для каждого вида объектов ( т.е. "Автобус" и "Автомобиль" - это объекты с разными наборами свойств, хотя и имеют общие свойства).
Именно такую связку представляют собой свойства объектов (здесь для краткости мы будем говорить о справочнике контрагентов, а вообще свойства применимы ко многим справочникам и документам типовой УТ).
План видов характеристик имеет структуру, очень похожую на справочник с набором предустановленных значений. Его функционал , конечно, намного богаче, но по ПВХ я отсылаю читателя к Красно-Желтой Книжке ;-).
На данный момент нам важно знать вот что - именно из ПВХ "Свойства объектов" берется значение, которое будет записано в измерение "Свойство" регистра сведений "Значения свойств объектов".
Само "Значение" регистра сведений должно быть при этом взято как характеристика (тип:Характеристика.СвойстваОбъектов) из ПВХ "Свойства объектов".
Измерение "Объект", конечно же, регистрирует ссылку на сам элемент справочника, к которому мы привязываем свойство и его значение.
итак, давайте разберем пример:
Допустим, среди всего набора контрагентов мы имеем набор клиентов, для которых необходимо определить особые условия выписки расходных накладных. Для этого свойства справочника контрагентов подходят как нельзя лучше, потому что позволяют не менять структуру самого справочника, и при этом добавлять новые возможности.
Первое, что мы делаем - заходим в справочник "Контрагенты" и открываем карточку первого клиента из нужного нам перечня. В закладке "Свойства" открывшейся карточки контрагента мы видим пустой перечень свойств. Он имеет две колонки - "Свойство" и "Значение". Когда мы нажимаем "Добавить" в панели действий, 1С предлагает нам создать новое свойство. Здесь стоит обратить внимание - создаётся свойство либо для всего справочника, либо для конкретных его элементов (если пользователь заполнит список "Назначение свойств"). Создавая новое свойство, и возможные его значения, пользователь тем самым создаёт новую запись в ПВХ "Свойства объектов", но значения к этому свойству пока не привязаны, а просто указаны ВАРИАНТЫ этих значений.
Значение к данному свойству указанного объекта будет указано только после того, как пользователь в закладке "Свойства" напротив этого самого свойства укажет в колонке "Значение" значение именно для данного контрагента (элемента справочника). На этом работа пользователя заканчивается, и начинается работа программиста.
К публикации прилагается обработка с примером простой процедуры, которую можно применить для анализа применимости условий по указанным свойствам.
Код процедуры (сорри, разукрашки нет):
ПВХ = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Особый клиент");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Значение
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Объект = &Объект
| И ЗначенияСвойствОбъектов.Свойство = &Свойство";
Запрос.УстановитьПараметр("Объект", Объект);
Запрос.УстановитьПараметр("Свойство", ПВХ);
Читайте также: