Как объединить два значения в запросе 1С с условием заполненности?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке запросов в 1С часто возникает необходимость скомбинировать несколько полей в одну строку. Например, вам нужно вывести «Регистрационный номер» вместе с «Дополнительным номером контрагента», разделив их символом «/», но только в том случае, если второй номер заполнен. Рассмотрим, как правильно реализовать такую логику, используя консоль запросов и избегая типичных ошибок.

Основные правила конкатенации в запросах

Сложение строк в запросе 1С выполняется с помощью оператора +. Однако важно помнить: этот оператор работает только со строковыми типами данных. Если вы пытаетесь сложить строку с числом или ссылкой, платформа выдаст ошибку несовместимости типов. Чтобы этого избежать, необходимо приводить данные к строковому типу.

Решение через конструкцию ВЫБОР КОГДА

Для выполнения логических условий в запросе используйте оператор ВЫБОР. Это позволяет динамически формировать результат в зависимости от того, заполнено поле или нет.

Рассмотрим пример правильного написания кода для объединения значений:


ВЫБРАТЬ
    ВЫБОР 
        КОГДА СокрЛП(Справочник.ДопНомер) = "" 
        ТОГДА Справочник.ОсновнойНомер 
        ИНАЧЕ Справочник.ОсновнойНомер + "/" + Справочник.ДопНомер 
    КОНЕЦ КАК ИтоговоеПредставление
ИЗ
    Справочник.Контрагенты КАК Справочник

Почему возникают ошибки при проверке на NULL

Одной из самых частых ошибок является попытка проверки поля через выражение Поле = NULL. В языке запросов 1С NULL не является значением, которое можно сравнивать оператором равенства. Для работы с отсутствующими данными используйте конструкцию ЕСТЬ NULL.

Если же поле является строковым, то его «пустое» состояние — это пустая строка "". Для очистки от лишних пробелов перед проверкой используйте функцию СокрЛП().

Приведение типов при сложении

Если поле, которое вы хотите добавить в строку, имеет тип «Число» или другой сложный тип, платформа не позволит просто использовать +. В таких случаях необходимо преобразовать значение в строку. Хотя в современных версиях платформы можно использовать Строка(), часто надежнее применить ВЫРАЗИТЬ(Поле КАК СТРОКА(Длина)).

Посмотрим на пример с приведением типов:


ВЫБРАТЬ
    ВЫБОР 
        КОГДА Валюты.Реквизит = 0 
        ТОГДА Валюты.Наименование 
        ИНАЧЕ Валюты.Наименование + ВЫРАЗИТЬ(Валюты.Реквизит КАК СТРОКА(10)) 
    КОНЕЦ КАК Результат
ИЗ
    Справочник.Валюты КАК Валюты

Пошаговый алгоритм решения задачи

  1. Проанализируйте тип данных: Если реквизит числовой, он не может быть NULL, его нужно проверять на 0. Если строковый — на пустую строку "".
  2. Очистите строку: Используйте СокрЛП(), чтобы избавиться от незначащих пробелов, которые могут помешать корректной проверке.
  3. Примените логику ВЫБОР: В блоке КОГДА укажите условие проверки заполненности.
  4. Выполните конкатенацию: В блоке ИНАЧЕ соедините нужные поля через оператор +. Если данные имеют разный тип, обязательно используйте ВЫРАЗИТЬ или встроенную функцию Строка().
  5. Учитывайте NULL: Если запрос использует левые соединения, не забывайте проверять результат на ЕСТЬ NULL с помощью функции ЕСТЬNULL(), чтобы избежать ошибок при расчетах.

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

← На главную