Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут! (в рабочие часы)

ТИПЗНАЧЕНИЯ, ССЫЛКА, ТИП в запросах 1С 8.3 на примерах

В запросах 1С 8.3 существует две конструкции, которые позволяют работать с типами данных:

  • ТИПЗНАЧЕНИЯ(<Выражение>) — Название данной функции говорит само за себя, то есть она возвращает тип переданного в неё значения.
  • ССЫЛКА И  ТИП — специальные конструкции, которые могут поставить условие на тип.

Несколько примеров

Предположим, что в нашей конфигурации существует документ «ПродажаТоваров».

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

  • «Контрагент» (тип <СправочникСсылка.Контрагенты>, <СправочникСсылка.Сотрудники>)
  • «СуммаДокумента» (тип <Число>)

То есть покупки у нас может совершать, как сотрудник, так и сторонний покупатель.

Пример №1 — Получаем тип поля в результате запроса

Сделаем запрос к документу «ПродажаТоваров», в котором выберем все документы продажи где можно будет увидеть наименование покупателя, а с помощью функции  ТИПЗНАЧЕНИЯ() в отдельной колонке определим тип покупателя.

Текст запроса:

ВЫБРАТЬ
ПродажаТоваров.Ссылка КАК ДокументПродажи,
ПродажаТоваров.Покупатель КАК Покупатель,
ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) КАК ТипПокупателя
ИЗ
Документ.ПродажаТоваров КАК ПродажаТоваров

Результат запроса может выглядеть так:

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Пример №2 — Отбор с помощью функций ССЫЛКА и ТИП(…)

Функцию ТИПЗНАЧЕНИЯ() удобно применять совместно с функцией ТИП(<Имя типа>), для проверки на соответствие определённому типу значения. Немного модифицируя запрос из примера №1, выведем записи только с теми документами, в которых тип покупателя сотрудник. Для наглядности оставим поле «ТипПокупателя».

Текст запроса:

ВЫБРАТЬ
ПродажаТоваров.Ссылка КАК ДокументПродажи,
ПродажаТоваров.Покупатель КАК Покупатель,
ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) КАК ТипПокупателя
ИЗ
Документ.ПродажаТоваров КАК ПродажаТоваров
ГДЕ
ТИПЗНАЧЕНИЯ(Покупатель) = ТИП(Справочник.Сотрудники)

Результат запроса:

Стоит отметить, что аналогом такой связки ( ТИПЗНАЧЕНИЯ() + ТИП() ), исключительно для ссылочных типов данных, может служить оператор ССЫЛКА.

Тогда текст запроса мог бы выглядеть так:

ВЫБРАТЬ
ПродажаТоваров.Ссылка КАК ДокументПродажи,
ПродажаТоваров.Покупатель КАК Покупатель,
ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) КАК ТипПокупателя
ИЗ
Документ.ПродажаТоваров КАК ПродажаТоваров
ГДЕ
Покупатель ССЫЛКА Справочник.Сотрудники

Пример №3 — Использование в конструкции ВЫБОР … КОГДА … КОНЕЦ

Также  функция ТИПЗНАЧЕНИЯ() часто находит своё применение в конструкциях условного оператора «ВЫБОР».

Синтаксис оператора «ВЫБОР»:

ВЫБОР
КОГДА <ПроверяемоеВыражение> ТОГДА <ВыражениеЗамены_1>
ИНАЧЕ < ВыражениеЗамены_2>
КОНЕЦ

Допустим, в нашей информационной базе предусмотрена система скидок в зависимости от типа покупателя.  Если покупатель сотрудник делаем скидку 10%.

Используя связку, функция ТИПЗНАЧЕНИЯ() и условный оператор «ВЫБОР», можем рассчитать в запросе сумму со скидкой в отдельном поле.

Текст запроса может выглядеть так:

ВЫБРАТЬ
ПродажаТоваров.Ссылка КАК Ссылка,
ПродажаТоваров.Покупатель КАК Покупатель,
ПродажаТоваров.СуммаДокумента КАК СуммаДокумента,
ВЫБОР
КОГДА ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) = ТИП(Справочник.Сотрудники)
ТОГДА ПродажаТоваров.СуммаДокумента — ПродажаТоваров.СуммаДокумента * 0.1
ИНАЧЕ ПродажаТоваров.СуммаДокумента
КОНЕЦ КАК СуммаСоСкидкой
ИЗ
Документ.ПродажаТоваров КАК ПродажаТоваров

Результат:

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Остались вопросы?

СПРОСИТЕ в комментариях!

Комментариев: 3 на “ТИПЗНАЧЕНИЯ, ССЫЛКА, ТИП в запросах 1С 8.3 на примерах
  1. Цитата из Вашего примера
    ВЫБРАТЬ
    ПродажаТоваров.Ссылка КАК ДокументПродажи,
    ПродажаТоваров.Покупатель КАК Покупатель,
    ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) КАК ТипПокупателя
    ИЗ
    Документ.ПродажаТоваров КАК ПродажаТоваров
    ГДЕ
    ТИПЗНАЧЕНИЯ(Покупатель) = ТИП(Справочник.Сотрудники)

    условие из последней строки не работает. Конструктор выдает ошибку что переменная Покупатель не определена

    Ответить

    • Разумеется не определена, надо
      ВЫБРАТЬ
      ПродажаТоваров.Ссылка КАК ДокументПродажи,
      ПродажаТоваров.Покупатель КАК Покупатель,
      ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) КАК ТипПокупателя
      ИЗ
      Документ.ПродажаТоваров КАК ПродажаТоваров
      ГДЕ
      ТИПЗНАЧЕНИЯ(ПродажаТоваров.Покупатель) = ТИП(Справочник.Сотрудники)

      Ответить

  2. Доброго дня, а как выюрать из конкретного документа, а не всех и по периоду? Вот есть у меня выбранный документ, как мне его передать параметром в запрос?

    Ответить

Добавить комментарий:

Ваш адрес email не будет опубликован.