Использование строковых представлений значений

В 1С:Предприятии для большинства значений поддерживается строковое представление. Под строковым представлением понимается вызываемое явно или неявно преобразование значения к значению типа Строка. Явный вызов преобразования может быть выполнен функцией Строка(). Преобразование к строке выполняется в строковых выражениях, например:

Копировать в буфер обмена

Тест:" + ТекущаяДата()

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

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

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

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

Для некоторых значений строковым представлением является пустая строка, например, для Неопределено и Null.

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

Основное правило использования строковых представлений можно сформулировать так: строковые представления должны использоваться для отображения значения в пользовательском интерфейсе и не должны использоваться для реализации бизнес-логики. То есть строковое представление значения нельзя программно анализировать и делать на его основе какие-либо "выводы" в алгоритмах конфигурации. Его можно только отображать или, например, выводить в файлы, которые предназначены для просмотра пользователем или печати.

Соответственно строковое представление нельзя использовать и для какой-либо сериализации значений (сохранения значений в строковом виде). Для  этого нужно использовать другие средства, например, запись значений в XML. Подробнее с этим вопросом можно ознакомиться в статье "Особенности использования сериализации".

Для анализа значений нужно всегда применять другие способы (отличные от анализа и сравнения строковых представлений). Например, для проверки значения типа Дата нужно сравнивать его со значением типа Дата. Для проверки типа значения нужно получить его тип и сравнить его со значением типа Тип, полученным из имени типа, а не проверять строковое представление типа или самого значения. Подробнее с этим вопросом можно ознакомиться в статье "Анализ типов значений".

У данного правила есть некоторые исключения. Очевидно, что для самого типа Строка, строковое представление является его содержимым. Кроме того, для значения типа УникальныйИдентификатор преобразование к строке выдает строковое представление, которое используется и для формирования значения данного типа из строки.

Необходимо учитывать, что получение строковых представлений для ссылок на объекты, хранящиеся в базе данных, занимает определенное время. Если таких преобразований много, то это может существенно сказаться на производительности системы. Это же относится и к преобразованию к строке значений хранящих такие значения, например, к списку значений.

Так же следует учитывать, что получение строкового представления числа, даты, и значения типа Булево зависит от региональных установок. Например, для русского языка в строковое представление числа включаются неразрывные пробелы для разделителей триад. Чтобы получить строковое представление в желаемом (не стандартном) виде необходимо использовать функцию Формат(). Подробнее с этим вопросом можно ознакомиться в статье "Особенности форматирования значений".