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

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

Часто в процессе разработки отчетов или обработки данных возникает необходимость вывести информацию в виде комбинации значений. Например, нам нужно отобразить результат группировки в формате 4/5, где каждое число является результатом работы агрегатной функции КОЛИЧЕСТВО. Рассмотрим, как правильно реализовать это в языке запросов 1С, избегая ошибок и лишних преобразований.

Почему использование функции ПРЕДСТАВЛЕНИЕ — не лучший выбор

Многие разработчики на первых этапах пытаются решить задачу вывода чисел в строку с помощью функции ПРЕДСТАВЛЕНИЕ. Хотя этот метод позволяет получить строковое значение, он имеет существенные недостатки:

  1. Форматирование данных: ПРЕДСТАВЛЕНИЕ учитывает настройки системы, что может приводить к появлению лишних пробелов или специфических символов форматирования чисел (например, неразрывных пробелов в тысячных разрядах).
  2. Тип данных: Результат этой функции сложнее контролировать при математических или строковых операциях.
  3. Ограничения: Попытка конкатенировать (соединить) строки, полученные через ПРЕДСТАВЛЕНИЕ, зачастую приводит к ошибкам несовместимости типов или к непредсказуемому поведению системы.

Решение задачи с использованием функции СТРОКА

Начиная с версии платформы 8.3.20, разработчики 1С получили удобный инструмент — прямое приведение типов непосредственно в тексте запроса. Теперь мы можем использовать функцию СТРОКА, которая позволяет преобразовать результат агрегатной функции или числового поля в строковый тип. Это открывает возможность для использования оператора сложения + для объединения данных.

Рассмотрим пошагово, как это реализовать:

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

Пример реализации в коде

Представим, что у нас есть два числовых поля, полученных в результате группировки. Вместо того чтобы создавать временные таблицы с ПРЕДСТАВЛЕНИЕ, мы можем сформировать итоговое поле прямо в основном запросе:


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

Важные рекомендации при работе со строками в запросах

Для того чтобы ваш запрос работал стабильно и не вызывал ошибок, примите во внимание следующие советы:

Таким образом, использование оператора СТРОКА позволяет нам легко формировать нужные строковые представления данных «на лету». Это избавляет от необходимости писать сложный код на стороне 1С (в процедурах вывода данных) и позволяет сразу получать готовый для отчетов результат.

← На главную