ТИПЗНАЧЕНИЯ, ССЫЛКА, ТИП в запросах 1С 8.3 на примерах
В запросах 1С 8.3 существует две конструкции, которые позволяют работать с типами данных:
- ТИПЗНАЧЕНИЯ(<Выражение>) — Название данной функции говорит само за себя, то есть она возвращает тип переданного в неё значения.
- ССЫЛКА И ТИП — специальные конструкции, которые могут поставить условие на тип.
Содержание
Несколько примеров
Предположим, что в нашей конфигурации существует документ «ПродажаТоваров».
Состав реквизитов следующий:
- «Контрагент» (тип <СправочникСсылка.Контрагенты>, <СправочникСсылка.Сотрудники>)
- «СуммаДокумента» (тип <Число>)
То есть покупки у нас может совершать, как сотрудник, так и сторонний покупатель.
Пример №1 — Получаем тип поля в результате запроса
Сделаем запрос к документу «ПродажаТоваров», в котором выберем все документы продажи где можно будет увидеть наименование покупателя, а с помощью функции ТИПЗНАЧЕНИЯ() в отдельной колонке определим тип покупателя.
Текст запроса:
ВЫБРАТЬ
ПродажаТоваров.Ссылка КАК ДокументПродажи,
ПродажаТоваров.Покупатель КАК Покупатель,
ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) КАК ТипПокупателя
ИЗ
Документ.ПродажаТоваров КАК ПродажаТоваров
Результат запроса может выглядеть так:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Пример №2 — Отбор с помощью функций ССЫЛКА и ТИП(…)
Функцию ТИПЗНАЧЕНИЯ() удобно применять совместно с функцией ТИП(<Имя типа>), для проверки на соответствие определённому типу значения. Немного модифицируя запрос из примера №1, выведем записи только с теми документами, в которых тип покупателя сотрудник. Для наглядности оставим поле «ТипПокупателя».
Текст запроса:
ВЫБРАТЬ
ПродажаТоваров.Ссылка КАК ДокументПродажи,
ПродажаТоваров.Покупатель КАК Покупатель,
ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) КАК ТипПокупателя
ИЗ
Документ.ПродажаТоваров КАК ПродажаТоваров
ГДЕ
ТИПЗНАЧЕНИЯ(Покупатель) = ТИП(Справочник.Сотрудники)
Результат запроса:
Стоит отметить, что аналогом такой связки ( ТИПЗНАЧЕНИЯ() + ТИП() ), исключительно для ссылочных типов данных, может служить оператор ССЫЛКА.
Тогда текст запроса мог бы выглядеть так:
ВЫБРАТЬ
ПродажаТоваров.Ссылка КАК ДокументПродажи,
ПродажаТоваров.Покупатель КАК Покупатель,
ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) КАК ТипПокупателя
ИЗ
Документ.ПродажаТоваров КАК ПродажаТоваров
ГДЕ
Покупатель ССЫЛКА Справочник.Сотрудники
Пример №3 — Использование в конструкции ВЫБОР … КОГДА … КОНЕЦ
Также функция ТИПЗНАЧЕНИЯ() часто находит своё применение в конструкциях условного оператора «ВЫБОР».
Синтаксис оператора «ВЫБОР»:
ВЫБОР
КОГДА <ПроверяемоеВыражение> ТОГДА <ВыражениеЗамены_1>
ИНАЧЕ < ВыражениеЗамены_2>
КОНЕЦ
Допустим, в нашей информационной базе предусмотрена система скидок в зависимости от типа покупателя. Если покупатель сотрудник делаем скидку 10%.
Используя связку, функция ТИПЗНАЧЕНИЯ() и условный оператор «ВЫБОР», можем рассчитать в запросе сумму со скидкой в отдельном поле.
Текст запроса может выглядеть так:
ВЫБРАТЬ
ПродажаТоваров.Ссылка КАК Ссылка,
ПродажаТоваров.Покупатель КАК Покупатель,
ПродажаТоваров.СуммаДокумента КАК СуммаДокумента,
ВЫБОР
КОГДА ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) = ТИП(Справочник.Сотрудники)
ТОГДА ПродажаТоваров.СуммаДокумента — ПродажаТоваров.СуммаДокумента * 0.1
ИНАЧЕ ПродажаТоваров.СуммаДокумента
КОНЕЦ КАК СуммаСоСкидкой
ИЗ
Документ.ПродажаТоваров КАК ПродажаТоваров
Результат:
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Аноним:
Цитата из Вашего примера
ВЫБРАТЬ
ПродажаТоваров.Ссылка КАК ДокументПродажи,
ПродажаТоваров.Покупатель КАК Покупатель,
ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) КАК ТипПокупателя
ИЗ
Документ.ПродажаТоваров КАК ПродажаТоваров
ГДЕ
ТИПЗНАЧЕНИЯ(Покупатель) = ТИП(Справочник.Сотрудники)
условие из последней строки не работает. Конструктор выдает ошибку что переменная Покупатель не определена
Роман:
Разумеется не определена, надо
ВЫБРАТЬ
ПродажаТоваров.Ссылка КАК ДокументПродажи,
ПродажаТоваров.Покупатель КАК Покупатель,
ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) КАК ТипПокупателя
ИЗ
Документ.ПродажаТоваров КАК ПродажаТоваров
ГДЕ
ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) = ТИП(Справочник.Сотрудники)
Начинающий:
Доброго дня, а как выюрать из конкретного документа, а не всех и по периоду? Вот есть у меня выбранный документ, как мне его передать параметром в запрос?