Пробелы между цифрами в 1С:Предприятие — одна из самых распространённых проблем, с которой сталкиваются пользователи при работе с номерами документов, кодами номенклатуры или реквизитами контрагентов. На первый взгляд это мелочь, но такой дефект может привести к сбоям при поиске, ошибкам в отчётах или даже проблемам с выгрузкой данных в внешние системы. Чаще всего пробелы появляются из-за некорректного импорта данных, копирования из Excel, ручного ввода с клавиатуры или особенностей обработки строк в конфигурациях.
В этой статье мы разберём 5 рабочих способов убрать пробелы между цифрами — от простых ручных методов до автоматизированных решений с использованием встроенного языка 1С. Вы узнаете, как исправить проблему в уже существующих данных, предотвратить её появление в будущем и избежать типичных ошибок. Особое внимание уделим нюансам работы с разными типами полей (строка, число, справочники) и версиям платформы 1С 8.3.
Почему появляются пробелы между цифрами в 1С?
Перед тем как убирать пробелы, важно понять их происхождение. Это поможет выбрать оптимальный способ решения и предотвратить повторное появление проблемы. Вот основные причины:
- 📑 Импорт из Excel или CSV: при переносе данных из таблиц пробелы часто сохраняются как часть строки, особенно если ячейки были отформатированы как текст.
- 🖱️ Ручной ввод: пользователи случайно добавляют пробелы при наборе длинных номеров (например,
123 4567вместо1234567). - 🔄 Обмен данными: при интеграции с другими системами (например, CRM или ERP) пробелы могут добавляться как разделители.
- 🛠️ Ошибки конфигурации: в некоторых обработках или отчётах пробелы вставляются намеренно для выравнивания колонок, но потом остаются в данных.
- 📊 Форматирование полей: если поле имеет тип "Строка" с маской ввода, пробелы могут добавляться автоматически (например, для разделения тысяч).
Интересно, что в 1С 8.3 пробелы между цифрами могут вести себя по-разному в зависимости от типа поля:
- В строковых полях пробелы сохраняются как есть и видны пользователю.
- В числовых полях пробелы обычно игнорируются при расчётах, но могут вызывать ошибки при преобразовании типов.
- В справочниках пробелы в кодах или наименованиях могут мешать поиску по частичному совпадению.
Способ 1: Ручная правка через интерфейс 1С
Если пробелов мало и они встречаются в отдельных документах или справочниках, проще всего исправить их вручную. Этот метод не требует знаний программирования и подходит для разовых исправлений.
Как убрать пробелы вручную:
- Откройте документ или элемент справочника, где есть пробелы (например, номер
123 456). - Дважды кликните по полю с номером, чтобы перейти в режим редактирования.
- Удалите пробелы клавишей
BackspaceилиDelete. - Сохраните изменения (
Ctrl+Sили кнопка "Записать").
Для ускорения процесса можно использовать комбинации клавиш:
- 🔍
Ctrl+F— найти все документы с пробелами в номере (если поле доступно для поиска). - 🔄
F5— обновить список после правки. - 📋
Shift+Enter— быстро перейти к следующему документу в списке.
⚠️ Внимание: При ручной правке в справочниках (например, номенклатуре) проверьте, не используются ли эти коды в связанных документах. Изменение кода может привести к разрыву связей в базе!
☑️ Подготовка к ручной правке
Способ 2: Поиск и замена через обработку "Поиск и замена значений"
Для массового исправления пробелов в 1С удобно использовать стандартную обработку "Поиск и замена значений". Она доступна в большинстве конфигураций и позволяет автоматизировать процесс.
Пошаговая инструкция:
- Откройте меню
Все функции → Стандартные → Поиск и замена значений(путь может отличаться в зависимости от конфигурации). - В поле
"Тип объекта"выберите документ или справочник, где нужно убрать пробелы (например,"Документ.РеализацияТоваровУслуг"). - В поле
"Реквизит"укажите название поля с номером (например,"Номер"). - В поле
"Значение для поиска"введите шаблон с пробелом, например"% %"(символ%обозначает любой набор символов). - В поле
"Значение для замены"введите тот же шаблон, но без пробела:"%%". - Нажмите
"Выполнить замену"и подтвердите действие.
Пример шаблонов для замены:
| Цель | Шаблон поиска | Шаблон замены |
|---|---|---|
| Убрать все пробелы в номере | % % |
%% |
| Убрать пробелы между цифрами (сохранить буквы) | [0-9] [0-9] |
[0-9][0-9] |
| Заменить пробел на дефис | % % |
%-% |
| Убрать пробелы в начале/конце | % или % |
% (пусто) |
⚠️ Внимание: Перед массовой заменой обязательно сделайте резервную копию базы! Ошибка в шаблоне может привести к порче данных. Например, шаблон % % заменит все пробелы, включая пробелы в тексте наименований.
Если обработка "Поиск и замена" отсутствует в вашей конфигурации, её можно добавить через "Дополнительные отчёты и обработки" или скачать с сайта 1С-ИТС (раздел "Стандартные обработки").
Способ 3: Использование запроса 1С для массового исправления
Для опытных пользователей и программистов самый эффективный способ — исправить пробелы с помощью запроса на языке 1С. Этот метод позволяет обработать тысячи записей за секунды и гибко настроить условия замены.
Пример запроса для удаления пробелов в номерах документов "РеализацияТоваровУслуг":
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка КАК Ссылка,
ЗАМЕНИТЬ(РеализацияТоваровУслуг.Номер, " ", "") КАК НовыйНомер
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
СОДЕРЖИТ(РеализацияТоваровУслуг.Номер, " ")
Чтобы применить изменения, нужно обернуть запрос в цикл обхода результата:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка КАК Ссылка,
| ЗАМЕНИТЬ(РеализацияТоваровУслуг.Номер, "" "", """") КАК НовыйНомер
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| СОДЕРЖИТ(РеализацияТоваровУслуг.Номер, "" "")";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Док = Выборка.Ссылка.ПолучитьОбъект();
Док.Номер = Выборка.НовыйНомер;
Док.Записать();
КонецЦикла;
Для обработки справочников (например, номенклатуры) используйте аналогичный подход, заменив Документ.РеализацияТоваровУслуг на Справочник.Номенклатура и поле Номер на Код или Артикул.
Как проверить запрос перед выполнением?
Перед массовым исправлением запустите запрос в режиме "Выборка" (без записи изменений). Для этого замените последнюю часть кода на:
Пока Выборка.Следующий() Цикл
Сообщить(Выборка.Ссылка + " | Старый номер: " + Выборка.Ссылка.Номер + " | Новый: " + Выборка.НовыйНомер);
КонецЦикла;
Это выведет в сообщениях все планируемые изменения без их применения.
Способ 4: Обработка через внешнюю обработку или отчёт
Если в вашей конфигурации нет подходящих инструментов для массовой замены, можно создать внешнюю обработку или использовать готовые решения от партнёров 1С. Этот метод подходит для сложных случаев, когда пробелы нужно убирать по заданным правилам (например, только в определённых видах документов или с учётом дополнительных условий).
Где взять готовую обработку:
- 📥 Сайт 1С-ИТС: в разделе "Дополнительные отчёты и обработки" есть бесплатные решения для работы со строками.
- 🛠️ Инфостарт: на этом ресурсе публикуются обработки для массового редактирования данных (например, "Универсальная обработка замены значений").
- 🔧 Гитхаб: некоторые разработчики выкладывают открытые обработки для работы с строками в 1С.
Пример кода для универсальной обработки (упрощённая версия):
Процедура УбратьПробелыИзЧисел(ТаблицаДанных, ИмяКолонки)
Для Каждого Строка Из ТаблицаДанных Цикл
Если ТипЗнч(Строка[ИмяКолонки]) = Тип("Строка") Тогда
НовоеЗначение = СтрЗаменить(Строка[ИмяКолонки], " ", "");
Если НовоеЗначение <> Строка[ИмяКолонки] Тогда
Строка[ИмяКолонки] = НовоеЗначение;
Изменено = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Изменено Тогда
Сообщить("Пробелы удалены в колонке " + ИмяКолонки);
КонецЕсли;
КонецПроцедуры
Чтобы использовать эту обработку:
- Создайте новую внешнюю обработку в Конфигураторе (
Файл → Новый → Внешняя обработка). - Добавьте на форму табличное поле и кнопку "Убрать пробелы".
- В модуле формы разместите приведённый выше код.
- Загрузите данные в таблицу (например, через запрос) и запустите обработку.
⚠️ Внимание: При использовании сторонних обработок проверьте их совместимость с вашей версией платформы 1С 8.3. Некоторые решения могут требовать доработки под конкретную конфигурацию (например, УТ 11, БП 3.0, ЗУП 3.1).
Способ 5: Предотвращение пробелов на этапе ввода (маски и события)
Лучший способ борьбы с пробелами — не допустить их появления. Для этого в 1С можно настроить:
- 🎭 Маски ввода для полей (например, запретить пробелы в номерах документов).
- 🔧 Обработчики событий
"ПриИзменении"или"ПередЗаписью", которые автоматически убирают пробелы. - 📋 Контроль ввода через модули объектов (например, проверка формата кода номенклатуры).
Пример настройки маски ввода для поля "Номер" документа:
- Откройте конфигуратор (
Ctrl+Shift+C). - Найдите документ, где нужно ограничить ввод (например,
"ПоступлениеТоваровУслуг"). - В свойствах реквизита
"Номер"установите маску ввода:(звёздочки обозначают разрешённые символы, пробелы будут запрещены). - Сохраните конфигурацию и обновите базу.
Пример кода для обработчика "ПередЗаписью" (убирает пробелы в номере документа):
Процедура ПередЗаписью(Отказ)
Если НЕ ЗначениеЗаполнено(Номер) Тогда
Возврат;
КонецЕсли;
Номер = СтрЗаменить(Номер, " ", "");
КонецПроцедуры
Для справочников (например, номенклатуры) аналогичный код можно разместить в модуле объекта:
Процедура ПередЗаписью(Отказ, ПроводитьОперативныйКонтроль)
Если НЕ ПустаяСтрока(Код) Тогда
Код = СтрЗаменить(Код, " ", "");
КонецЕсли;
Если НЕ ПустаяСтрока(Артикул) Тогда
Артикул = СтрЗаменить(Артикул, " ", "");
КонецЕсли;
КонецПроцедуры
Эти методы помогут избежать пробелов в новых данных, но не исправят уже существующие записи. Поэтому их рекомендуется комбинировать с массовыми исправлениями (см. Способ 3).
Настройка масок и обработчиков — единственный способ гарантированно предотвратить появление пробелов в будущем. Однако это требует прав доступа к конфигуратору и тестирования на копии базы.
Типичные ошибки и как их избежать
При удалении пробелов между цифрами пользователи часто сталкиваются с следующими проблемами:
- 🔢 Потеря значимых пробелов: например, в артикулах типа
AB 123 CDпробелы могут быть частью формата. В этом случае нужно использовать точную замену (например, убирать пробелы только между цифрами). - 🔗 Разрыв связей: если код номенклатуры используется в документах, его изменение может привести к ошибкам типа "Не найден элемент справочника". Перед массовой заменой проверьте ссылки!
- 📉 Ошибки в отчётах: после удаления пробелов могут "сломаться" отчёты, где использовалось сравнение с учётом пробелов (например,
Номер = "123 456"). Обновите условия в отчётах. - 🔒 Блокировки базы: массовые изменения могут заблокировать таблицы и вызвать ошибки у других пользователей. Выполняйте такие операции в нерабочее время.
Как избежать ошибок:
| Проблема | Решение |
|---|---|
| Заменили пробелы в кодах, но документы перестали проводиться | Используйте обработку, которая обновляет ссылки в связанных документах (например, через временное поле). |
| После замены пропали ведущие нули в номерах | Перед удалением пробелов преобразуйте поле в строку фиксированной длины (например, Строка(Номер, 10)). |
| Запрос выполняется слишком долго | Разбейте обработку на пакеты (например, по 1000 записей) или используйте фоновые задания. |
| Пользователи продолжают вводить пробелы | Добавьте проверку в модуль формы с выводом предупреждения: Если СтрНайти(Номер, " ") > 0 Тогда Сообщить("Пробелы в номере запрещены!"); КонецЕсли; |
⚠️ Внимание: Если вы работаете с облачной версией 1С (например, 1С:Фреш), некоторые методы (например, прямые SQL-запросы) могут быть недоступны. В этом случае используйте стандартные обработки или обратитесь в поддержку.
FAQ: Частые вопросы по удалению пробелов в 1С
Можно ли убрать пробелы в номерах документов без программирования?
Да, для этого подойдут:
- Ручная правка (если документов мало).
- Стандартная обработка "Поиск и замена значений" (доступна в большинстве конфигураций).
- Внешние обработки с сайта Инфостарт или 1С-ИТС (например, "Универсальный редактор реквизитов").
Программирование потребуется только для сложных случаев или автоматизации.
Почему после удаления пробелов некоторые документы не находятся по номеру?
Это происходит, если номер документа используется в других объектах базы (например, в регистрах или движениях). При изменении номера связь разрывается. Решения:
- Используйте обработку, которая обновляет все ссылки (например, через временное поле с старым номером).
- Восстановите связи вручную через отчёт "Проверка ссылочной целостности".
- Если документов мало — перепроведите их.
В сложных случаях может потребоваться помощь программиста.
Как убрать пробелы в выгружаемых данных (например, для Excel или XML)?
Если пробелы нужны в базе, но не должны попадать в выгрузку, исправляйте их на этапе экспорта:
- В обработке выгрузки добавьте замену:
НомерДляВыгрузки = СтрЗаменить(Документ.Номер, " ", ""); - Используйте
Формат()для числовых полей:Формат(ЧисловоеПоле, "ЧГ=0")(убирает разделители тысяч). - Для XML-выгрузки настройте шаблон так, чтобы он игнорировал пробелы.
Пример для выгрузки в Excel:
ТаблицаДанных.Колонки.Добавить("НомерБезПробелов");
Для Каждого Строка Из ТаблицаДанных Цикл
Строка.НомерБезПробелов = СтрЗаменить(Строка.Номер, " ", "");
КонецЦикла;
Можно ли настроить 1С так, чтобы пробелы автоматически заменялись на дефис?
Да, для этого модифицируйте обработчик ПриИзменении или ПередЗаписью. Пример для замены пробелов на дефис в номере документа:
Процедура ПередЗаписью(Отказ)
Если НЕ ПустаяСтрока(Номер) Тогда
Номер = СтрЗаменить(Номер, " ", "-");
КонецЕсли;
КонецПроцедуры
Для справочников (например, номенклатуры) используйте аналогичный код в модуле объекта. Если нужно заменить только пробелы между цифрами, используйте регулярные выражения:
Номер = СтрЗаменитьПоШаблону(Номер, "[0-9] [0-9]", "$1-$2");
Что делать, если пробелы появляются при импорте из Excel?
Проблема typical для импорта, так как Excel может добавлять пробелы в ячейках с текстом. Решения:
: добавьте в код обработки строку =СЖПРОБЕЛЫ(A1) или =ПОДСТАВИТЬ(A1; " "; "") перед экспортом.Данные.Номер = СтрЗаменить(Данные.Номер, " ", "");.
Если импорт выполняется через COM-соединение, настройте параметры чтения данных:
Параметры = Новый Соответствие;
Параметры.Вставить("TrimStrings", Истина); // Убирает пробелы в начале/конце
Таблица = ПолучитьДанныеИзExcel(ИмяФайла, Параметры);