[ Разбор вопросов ] Способы формирования текста запроса с помощью объекта СхемаЗапроса или конкатенации. Функции языка запросов Тип и ТипЗначения

Даже относительно простая тема, как синтаксис текста запроса, может вызывать трудности у специалистов 1С.

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

Разберем два вопроса, которые задали слушатели курса Разработка и оптимизация запросов в 1С:Предприятие 8.3.

 

Вопрос №1: В каком случае при формировании текста запроса лучше использовать объект встроенного языка СхемаЗапроса, а в каком – конкатенацию отдельных “кусков”?

Подскажите, существует ли “стандарт” разработки для изменений текста запроса по условию? Я имею в виду использование объекта встроенного языка СхемаЗапроса или функции СтрЗаменить и конкатенации “кусков” текста запроса. Или может быть используются все приемы?

Ответ

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

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

Или наоборот – нужен универсальный подход, текст запроса объемный, нужно иметь возможность открыть его в конструкторе, чтобы удобнее было анализировать. Тогда можно воспользоваться схемой запроса, даже если программный код получится сложнее.

 

Вопрос №2: В чем разница между функциями языка запросов Тип() и ТипЗначения()?

Правильно ли я понимаю, что функции Тип() и ТипЗначения() для примитивных типов данных сработают одинаково, а ТИПЗНАЧЕНИЯ() имеет более широкое применение? В учебном примере используется выражение:

ГДЕ ТИПЗНАЧЕНИЯ(ТоварныеЗапасы.Регистратор) = ТИП(Документ.РасходТовара)

ТоварныеЗапасы.Регистратор” – это же ссылка на документ, а я понял так, что ссылка – это примитивный тип. Тогда почему не использовать “ТИП(ТоварныеЗапасы.Регистратор)”?

И правильно ли я читаю выражение “ГДЕ ТИПЗНАЧЕНИЯ(ТоварныеЗапасы.Регистратор) = ТИП(Документ.РасходТовара)” как “в регистре ТоварныеЗапасы отобрать только записи, сделанные  документом РасходТовара”?

Ответ

Функция ТИП, вызванная для значения примитивного типа (например, для числа), приведет к синтаксической ошибке:

ВЫБРАТЬ
    ТИП(5) КАК Поле1

А функция ТИПЗНАЧЕНИЯ вернет значение – тип Число:

ВЫБРАТЬ
    ТИПЗНАЧЕНИЯ(5) КАК Поле1

Ссылка не относится к примитивным типам. К примитивным типам относятся NULL, Булево, Дата, Число, Строка, Неопределено, Тип.

Далее немного поясню про данные функции:

  • В языке запросов функция ТИПЗНАЧЕНИЯ предназначена для определения типа данных для значения, переданного в качестве параметра функции. Параметром может быть выражение любого типа. Функция ТИПЗНАЧЕНИЯ возвращает значение типа Тип.

Пример:

ВЫБРАТЬ
    ТИПЗНАЧЕНИЯ(Продажи.Регистратор) КАК ТипПоля
ИЗ
    РегистрНакопления.Продажи КАК Продажи
  • Литерал Тип

Пример:

ТИП(Число)

или

ТИП(Справочник.Товары)

В качестве параметра можно указывать имя примитивного типа или имя таблицы, тип ссылки которой нужно получить. Результат – значение типа Тип.

В языке запросов ТИП и ТИПЗНАЧЕНИЯ можно использовать в операциях сравнения:

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

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

P.S.

Понимать, как работают запросы и уметь их строить - обязательный навык для всех, кто дорабатывает и внедряет 1С.

После курса Вы сможете:

  • Строить сложные запросы с несколькими источниками данных
  • Уверенно задействовать вложенные запросы и временные таблицы
  • Использовать встроенный язык для обработки результатов запроса
  • Учитывать особенности соединений и объединений нескольких таблиц.
  • Разрабатывать запросы на уровне задач Аттестации 1С:Специалист по платформе.
Программа, стоимость, условия и регистрация в группу: «Запросы в 1С 8.3, Базовый курс (с нуля до уровня Специалист по платформе)» Для всех, кто внедряет и дорабатывает 1С.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.