При работе с конфигурацией «Торговля и Склад» для платформы 1С:Предприятие 7.7 разработчики и администраторы иногда сталкиваются с неожиданным поведением системы: пользователи добавляют обычные пробелы перед наименованием позиции номенклатуры, чтобы выстроить удобный порядок отображения элементов в справочнике, однако при внесении любых изменений в структуру справочника и сохранении конфигурации эти пробелы сбрасываются.
Разберем подробнее технические причины такого поведения платформы, проанализируем риски использования отступов для группировки и рассмотрим правильные варианты решения этой задачи.
При внесении изменений в состав или свойства реквизитов справочника в Конфигураторе 1С 7.7 (особенно в файловом варианте базы данных DBF) запускается процесс реструктуризации таблиц. В ходе реструктуризации платформа переносит данные во временные файлы, пересоздает индексы и нормализует строковые поля фиксированной длины.
Встроенные механизмы платформы 1С 7.7 рассматривают обычный пробел (символ ASCII 32 / 0x20) в начале и в конце текстовой строки как неинформативный служебный разделитель. В системном реквизите Наименование при выполнении процедур записи и индексации платформой автоматически выполняется удаление лишних краевых пробелов. Это гарантирует корректную работу внутренних выборок, поиска и формирования индексов.
Использование обычных пробелов для управления сортировкой списков приводит к нестабильной работе: встроенный язык 1С при выполнении запросов или методов поиска может игнорировать ведущие пробелы, из-за чего порядок вывода позиций в диалоговых формах и в отчетах начинает различаться.
Если пользователям критически важно сохранить визуальные отступы без изменения общей структуры справочника, обычные пробелы в начале названий можно заменить на неразрывные пробелы. Символ неразрывного пробела имеет код 160 (0xA0) и не воспринимается платформой как пустой край строки, поэтому он успешно проходит реструктуризацию файлов базы данных DBF.
Проанализируем пример обработки, с помощью которой можно обойти справочник и заменить стандартные ведущие пробелы на неразрывные:
Спр = СоздатьОбъект("Справочник.Номенклатура");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
СтрНаим = Спр.Наименование;
Пока Лев(СтрНаим, 1) = " " Цикл
СтрНаим = Симв(160) + Сред(СтрНаим, 2);
КонецЦикла;
Если СтрНаим <> Спр.Наименование Тогда
Спр.Наименование = СтрНаим;
Спр.Записать();
КонецЕсли;
КонецЦикла;
После выполнения такой обработки неразрывные пробелы сохранятся в наименовании и не будут удаляться при реструктуризации конфигурации.
Вместо пробелов для сортировки элементов можно рекомендовать пользователям использовать символы-префиксы, которые находятся вверху таблицы кодировки. Посмотрим на наиболее распространенные варианты:
_Кабель силоvisible.Принтеры, -Услуги~, #, @Такие знаки гарантированно выстраивают позиции в верхней части списка, не удаляются при обновлении базы и визуально понятны пользователям.
Наиболее правильным решением с точки зрения архитектуры базы данных является разделение наименования товара и порядка его вывода на экран. Рассмотрим, как это реализовать:
Номенклатура числовой или строковый реквизит, например, Порядок или Артикул.ТК0001 (Товар - Кабель), УП0001 (Услуга - Принтер).При таком подходе полное наименование позиции остается чистым и готовым для вывода в печатные формы, а сортировка осуществляется по строго заданному правилу.
Если для удобства работы пользователей в поле Наименование применяются специфические префиксы или сокращения, разделим рабочее и печатное название:
Наименование оставляем рабочее название с префиксами для быстрого поиска и сортировки внутри программы.ПолнНаименование (Полное наименование) храним официальное наименование номенклатуры без спецсимволов.ПолнНаименование.При внесении изменений в структуре конфигурации 1С 7.7 в файловом режиме (DBF) можно добавить новый реквизит в справочник вручную через редактирование метаданных без запуска полной реструктуризации таблиц. Однако этот способ требует высокой квалификации администратора и обязательного создания резервной копии базы данных перед проведением работ.
Разберем итог: использование стандартных ведущих пробелов в 1С 7.7 является нештатным сценарием. Для решения задачи сортировки оптимально задействовать специальные символы-префиксы, неразрывный пробел Симв(160) или дополнительный реквизит сортировки.