При разработке отчетов в 1С часто возникают ситуации, когда данные в регистрах хранятся в «неудобном» формате, например, в виде Строка, тогда как в справочнике соответствующий код имеет тип Число. Прямое сравнение таких полей в языке запросов 1С невозможно из-за строгой типизации. Давайте разберем по шагам, как эффективно решить эту задачу с помощью Системы Компоновки Данных (СКД), не прибегая к радикальному изменению структуры базы данных.
Язык запросов 1С спроектирован так, чтобы обеспечить максимальную производительность и целостность данных. Операции сравнения, такие как =, В или ПОДОБНО, требуют совместимости типов. Попытка сравнить Строка и Число приведет к ошибке выполнения. Использование оператора ПОДОБНО также не является панацеей, так как он предназначен исключительно для строковых выражений и не выполняет автоматического приведения типов.
Оптимальным подходом в данной ситуации является использование Наборов данных в СКД. Этот метод позволяет нам логически связать две разные таблицы, даже если их типы данных изначально не совпадают.
РегистрСведений.Поступления платежей, из которого мы получаем наш «Код дохода» (тип Строка).Справочник.Коды доходов, из которого мы выбираем ссылку и числовой код.Чтобы привести Число к Строка для корректного сравнения, мы воспользуемся функцией ФОРМАТ. Настроим выражение связи следующим образом:
// Выражение для связи
ФОРМАТ(Справочник.Код, "ЧГ=")
Этот параметр ЧГ= указывает системе, что число нужно преобразовать в строку без использования разделителей групп разрядов (пробелов), что является критически важным для точного соответствия строковому значению из регистра.
Часто в бюджетных классификаторах возникают ситуации, когда одна строка длиннее другой (например, добавлена информация об администраторе). Если вам нужно сопоставить часть строки, используйте встроенную функцию ПОДСТРОКА:
// В выражении связи наборов данных:
ПОДСТРОКА(Регистр.КодДохода, 4, 10)
// Это позволит отсечь лишние символы и сравнить оставшуюся часть
// с кодом из справочника.
Хотя мы успешно решили задачу с помощью СКД, важно помнить, что работа с «нетипизированными» данными (хранение ссылочных сущностей в строках) создает дополнительную нагрузку на сервер при каждом формировании отчета. В долгосрочной перспективе мы рекомендуем пересмотреть архитектуру хранения:
Справочники.КодыДоходов.НайтиПоКоду().Ссылку на элемент справочника.Используя предложенный метод связей в СКД, вы получаете гибкий инструмент, который позволяет работать с данными любой сложности, сохраняя при этом чистоту кода и обеспечивая корректность результатов отчетов.