Почему в форме списка номенклатуры не отображается артикул, хотя в карточке он заполнен?

Пользователь 1С v7.7 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При повседневной работе со справочником Номенклатура пользователи и администраторы иногда сталкиваются с неожиданным поведением системы: реквизит (например, Артикул) четко виден в карточке элемента и отображается в нижней информационной строке состояния, однако в таблице формы списка соответствующая ячейка остается абсолютно пустой. При этом тестирование и исправление информационной базы не выявляет логических или структурных нарушений, а ручной ввод простых тестовых значений (таких как «123») сразу выводит строку в списке корректно.

Разберем по шагам, почему возникает такой эффект, как быстро исправить проблемную позицию и как защитить базу данных от подобных сбоев при импорте или копировании данных.

Причины возникновения проблемы

Проанализируем ситуацию с точки зрения архитектуры платформы 1С:Предприятие 7.7:

  1. Невидимые символы перевода строки в начале текста: Ячейки табличной части формы списка справочников в версии 7.7 являются строго однострочными. Если строка скопирована из внешнего источника (веб-страницы, документа PDF, ячейки Excel) вместе с ведущим символом возврата каретки или перевода строки (CR / LF, коды ASCII 13 и 10), таблица отображает именно первую, пустую строку. В то же время поле ввода карточки или строка подсказки могут игнорировать этот перевод либо визуализировать его без потери текста.
  2. Управляющие и непечатные знаки (коды ASCII от 0 до 31): Символы табуляции (код 9), нулевой байт (код 0) или управляющие разделители Windows нарушают отрисовку текста в элементе управления таблицы, прерывая отображение строки.
  3. Неразрывные пробелы и ведущие отступы: Наличие неразрывного пробела (NBSP, код ASCII 160) или группы пробелов в начале строки сдвигает видимый текст вправо за пределы установленной ширины колонки «Артикул».
  4. Символы Unicode: Платформа 1С 7.7 работает в однобайтовой кодировке ANSI (Windows-1251). При вставке специализированных символов (неразрывные дефисы, длинные тире, типографские знаки) буфер обмена может транслировать их как некорректные служебные коды.

Способ 1. Быстрое ручное исправление в карточке элемента

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

  1. Откроем карточку проблемной номенклатуры.
  2. Установим курсор в поле Артикул и нажмем клавишу Home, чтобы переместиться в самое начало строки.
  3. Нажмем клавишу Delete несколько раз. Если перед первым видимым символом находился невидимый перенос строки или нулевой код, курсор визуально останется на месте, но спецсимвол будет удален.
  4. Также можно полностью стереть значение из поля и набрать артикул вручную с клавиатуры, не используя вставку через буфер обмена.
  5. Запишем элемент по кнопке ОК и проверим форму списка — значение появится в колонке.

Способ 2. Диагностика и очистка через внешний текстовый редактор

Когда визуально сложно понять, какой именно символ мешает отрисовке, воспользуемся внешним редактором:

  1. Выделим текст артикула в карточке товара и скопируем его в буфер обмена (комбинацией Ctrl+C).
  2. Вставим значение в текстовый процессор (например, Microsoft Word или Notepad++) и включим режим отображения непечатаемых знаков.
  3. В редакторе сразу станут заметны символы разрыва абзаца, табуляции или скрытые спецсимволы.
  4. Удалим лишние знаки, скопируем чистый текст обратно и вставим его в поле Артикул в 1С.

Способ 3. Программная нормализация строк при записи

Рассмотрим подробнее программные методы защиты. Стандартная системная функция СокрЛП() отсекает только обычные пробелы (ASCII-код 32). Символы перевода строк (коды 10 и 13), табуляцию (код 9) и неразрывный пробел (код 160) данная функция не удаляет.

Чтобы избежать подобных ошибок при интерактивной работе или загрузке номенклатуры из прайс-листов, добавим процедуру очистки реквизита в модуль формы элемента или в модуль объекта при записи:


Процедура ПриЗаписи()
    // Удаляем переводы строк и возвраты каретки
    Артикул = СтрЗаменить(Артикул, Симв(10), "");
    Артикул = СтрЗаменить(Артикул, Симв(13), "");
    
    // Заменяем неразрывный пробел на стандартный
    Артикул = СтрЗаменить(Артикул, Симв(160), " ");
    
    // Удаляем табуляцию
    Артикул = СтрЗаменить(Артикул, Симв(9), "");
    
    // Удаляем стандартные ведущие и концевые пробелы
    Артикул = СокрЛП(Артикул);
КонецПроцедуры

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


Функция ОчиститьСтрокуОтСпецсимволов(ВхСтрока) Экспорт
    Перем ТекСтрока, Поз, ТекКод;
    
    ТекСтрока = ВхСтрока;
    
    // Очищаем служебные символы с кодами от 0 до 31
    Для Поз = 0 По 31 Цикл
        ТекСтрока = СтрЗаменить(ТекСтрока, Симв(Поз), "");
    КонецЦикла;
    
    // Устраняем неразрывный пробел
    ТекСтрока = СтрЗаменить(ТекСтрока, Симв(160), " ");
    
    Возврат СокрЛП(ТекСтрока);
КонецФункции

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

← На главную