Часто при разработке отчетов в 1С разработчики сталкиваются с ситуацией, когда данные, которые в документе отображаются полностью, при выводе в отчет внезапно обрезаются до 10 символов. Рассмотрим, как проанализировать эту ситуацию, найти источник проблемы и устранить её.
Первым делом необходимо понять, на каком этапе происходит потеря данных. Если в документе вы видите номер прицепа, состоящий из 15 символов, а в отчете — только 10, значит, проблема кроется либо в запросе, либо в самом источнике, из которого данные попадают в отчет.
Воспользуйтесь отладчиком. Установите точку останова на строке, где происходит заполнение параметров или вывод данных:
ОбластьГруппа.Параметры.Заполнить(Строка);
Посмотрите значение переменной Строка.НомерПрицепа прямо в отладчике. Если там уже обрезанное значение, значит, данные были извлечены из базы уже в таком виде. Это сужает круг поиска до структуры данных в конфигураторе.
Самая распространенная причина — ограничение длины реквизита в метаданных. В 1С длина строки определяется на этапе создания реквизита в конфигураторе. Если вы выбираете данные из Регистра накопления или Регистра сведений, обязательно проверьте свойства этого реквизита:
Данные и найдите реквизит НомерПрицепа.Длина в типе данных Строка.Если там установлено значение 10, то при записи данных в этот регистр 1С принудительно обрезает строку до указанной длины. Это объясняет, почему в документе данные видны полностью (там может быть другая длина или тип), а в регистре — нет.
Для быстрой проверки данных в базе используйте Консоль запросов. Это позволит вам увидеть результат выполнения запроса к СУБД в чистом виде, без влияния кода 1С:
ВЫБРАТЬ
Взвешивание.НомерПрицепа
ИЗ
РегистрНакопления.Взвешивание КАК Взвешивание
Если в результате выполнения этого запроса в консоли вы видите обрезанные значения, значит, источник проблемы — метаданные регистра. Если же данные в консоли полные, значит, проблема в коде модуля отчета (например, в типизации временных таблиц или приведении типов).
Если вы используете сложные запросы, проверьте, нет ли в них функции ВЫРАЗИТЬ. Принудительное приведение типа может быть причиной обрезания:
ВЫБРАТЬ
ВЫРАЗИТЬ(Взвешивание.НомерПрицепа КАК СТРОКА(10)) КАК НомерПрицепа
ИЗ
РегистрНакопления.Взвешивание КАК Взвешивание
Если вы встретили такую конструкцию, измените значение длины в функции ВЫРАЗИТЬ или вовсе уберите приведение типа, чтобы система использовала исходную длину поля.
Если данные в запросе получены корректно и полностью, но в самом отчете все равно обрезаются, проверьте настройки макета табличного документа:
НомерПрицепа.Размещение текста.Размещение не выбрано значение Обрезать при слишком узкой колонке.В завершение, всегда помните, что 1С — это строгая система. Если длина реквизита в Регистре определена как 10, то ни один отчет не сможет \"растянуть\" эту строку до 15 символов, так как физически в базе их просто нет. Решением будет либо изменение длины реквизита в конфигураторе (что требует аккуратности, так как может повлиять на производительность и структуру БД), либо создание дополнительного реквизита для длинных номеров.