Пробелы в числовых полях 1С:Предприятие 8 — одна из самых раздражающих мелочей, с которыми сталкиваются и бухгалтеры, и программисты. Казалось бы, что тут сложного: удали лишний символ и работай дальше. Но на практике эта проблема приводит к сбоям при загрузке данных, ошибкам в отчётах и даже блокировке документов. Особенно часто пробелы «проскальзывают» при импорте из Excel, ручном вводе или после обновлений конфигурации.

В этой статье мы разберём 5 проверенных способов очистки чисел от пробелов — от простых ручных методов до автоматизированных решений на встроенном языке. Вы узнаете, как исправить ошибки без потери данных, почему пробелы вообще появляются в числовых полях и как предотвратить их появление в будущем. А для программистов приведём готовые кодовые конструкции с пояснениями.

📊 С какой частотой вы сталкиваетесь с пробелами в числах 1С?
Ежедневно
Раз в неделю
Редко, но метко
Никогда не замечал

Почему в 1С появляются пробелы в числах?

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

Самая распространённая ситуация — импорт данных из внешних источников. Например, при загрузке прайс-листа из Excel или CSV, где числа отформатированы как текст с разделителями тысяч (например, 1 000 000). воспринимает такой формат как строку, и пробелы «прилипают» к числу. Другая типичная причина — ручной ввод с клавиатуры, когда пользователь случайно нажимает Пробел перед или после цифр.

Менее очевидные, но не менее коварные источники:

  • 🔄 Обновления конфигурации, после которых изменяется формат хранения данных (например, переход с 1С 8.2 на 8.3)
  • 📥 Обмен данными между базами, где в одной из них числа хранятся как строки
  • 🖥️ Ошибки ОС или драйверов клавиатуры, из-за которых воспринимает нажатия некорректно
  • 📊 Отчёты с пользовательскими настройками, где числа форматируются с разделителями

Интересно, что в некоторых конфигурациях (например, 1С:Бухгалтерия 3.0) пробелы в числах могут автоматически приводить к ошибке «Некорректное значение» при проведении документов, тогда как в других (например, 1С:УТ 11) они просто игнорируются — до поры до времени. Это зависит от настроек проверки данных в конкретной конфигурации.

💡

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

Способ 1: Ручная правка через интерфейс 1С

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

Алгоритм действий:

  1. Откройте документ или справочник, где обнаружено число с пробелом.
  2. Дважды кликните по полю с числом — оно станет доступно для редактирования.
  3. Удалите пробелы вручную (можно использовать комбинацию Ctrl + → для перемещения между символами).
  4. Сохраните изменения (Ctrl + S или кнопка «Записать»).

Для ускорения процесса используйте поиск и замену в табличных частях:

  • 🔍 Выделите колонку с числами (кликните по заголовку колонки).
  • 📝 Нажмите Ctrl + H (или меню «Правка → Заменить»).
  • 🚫 В поле «Что» введите пробел, в поле «На что» оставьте пустое значение.
  • ✅ Нажмите «Заменить всё».
⚠️ Внимание: При ручной правке в табличных частях может автоматически округлять числа после удаления пробелов. Проверяйте итоговые значения!

Проверить права доступа к документу

Сделать резервную копию базы (для критичных данных)

Убедиться, что поле действительно числовое (а не строковое)

Отключить автоокругление в настройках пользователя-->

Способ 2: Форматирование через Excel и обратный импорт

Если пробелы массово появились после импорта из Excel, логично исправить их там же. Этот метод подходит для обработки больших объёмов данных (например, прайс-листов или остатков).

Инструкция:

  1. Экспортируйте данные из в Excel (меню «Файл → Сохранить как» или через обработку выгрузки).
  2. В Excel выделите колонку с числами, содержащими пробелы.
  3. Используйте функцию =ЗАМЕНИТЬ(A1; " "; ""), где A1 — ячейка с данными. Растяните формулу на всю колонку.
  4. Скопируйте результаты и вставьте их поверх исходных данных (значениями, а не формулами!).
  5. Сохраните файл и импортируйте обратно в .

Альтернативный вариант — использовать настройку формата ячеек:

  • 📊 Выделите колонку → правый клик → «Формат ячеек».
  • 🔢 Выберите формат «Числовой» (не «Текстовый!»).
  • Excel автоматически удалит пробелы-разделители.
Метод Плюсы Минусы
Функция ЗАМЕНИТЬ Точно удаляет только пробелы Требует ручного растягивания формулы
Изменение формата Быстро обрабатывает большие массивы Может исказить числа с десятичными разделителями
Поиск/замена (Ctrl+H) Просто и быстро Не работает, если пробелы невидимые (спецсимволы)
⚠️ Внимание: При импорте обратно в проверьте, что колонка в Excel имеет формат «Общий» или «Числовой». Формат «Текстовый» может снова добавить пробелы!

Способ 3: Обработка «Поиск и замена» в конфигураторе

Для программистов и администраторов самый эффективный способ — использовать встроенную обработку «Поиск и замена». Она позволяет массово исправить пробелы во всех документах или справочниках без ручного редактирования.

Пошаговая инструкция:

  1. Откройте конфигуратор (1С:Предприятие → Конфигуратор).
  2. Перейдите в меню «Администрирование → Поиск и замена значений».
  3. В поле «Тип данных» выберите «Число» или «Строка» (в зависимости от структуры вашей базы).
  4. В поле «Искать» введите пробел (или комбинацию % %, если пробелы в начале/конце).
  5. Поле «Заменять на» оставьте пустым.
  6. Укажите область поиска (например, документ «Поступление товаров»).
  7. Нажмите «Выполнить».

Нюансы метода:

  • 🔧 Работает только для полей, где пробелы хранятся как часть строки (не для чисел с форматированием!).
  • 📌 Для числовых полей предварительно может потребоваться конвертация в строку.
  • ⚡ При замене в больших базах рекомендуется сделать резервную копию.

// Пример кода для конвертации числа в строку перед заменой

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Ссылка КАК Ссылка,

| ЗНАЧЕНИЕ(Строка(ЧисловоеПоле)) КАК ЧисловоеПолеСтрокой

|ИЗ

| Документ.ПоступлениеТоваров КАК Док";

Что делать, если обработка не находит пробелы?

Если поиск не срабатывает, проверьте:

1. Тип поля — возможно, пробелы хранятся в другом реквизите (например, в комментарии).

2. Формат данных — в некоторых конфигурациях числа хранятся как строки с невидимыми символами (например, неразрывный пробел).

3. Права доступа — у вашей роли может не хватать прав на массовое редактирование.

Способ 4: Программное удаление пробелов (код 1С)

Для автоматизации процесса напишем универсальную функцию на встроенном языке , которая будет удалять пробелы из чисел в любых документах или справочниках. Этот метод подходит для программистов и позволяет интегрировать очистку в регулярные процедуры (например, при загрузке данных).

Базовый код для удаления пробелов из строкового представления числа:

Функция УдалитьПробелыИзЧисла(Значение) Экспорт

Если ТипЗнч(Значение) = Тип("Строка") Тогда

Возврат СтрЗаменить(Значение, " ", "");

ИначеЕсли ТипЗнч(Значение) = Тип("Число") Тогда

Возврат Значение; // Пробелов в числовом типе быть не должно, но на всякий случай

КонецЕсли;

Возврат Значение;

КонецФункции

// Пример использования для обработки табличной части

Процедура ОбработатьТабличнуюЧасть(ТабличнаяЧасть)

Для Каждого Строка Из ТабличнаяЧасть Цикл

Если ТипЗнч(Строка.Количество) = Тип("Строка") Тогда

Строка.Количество = УдалитьПробелыИзЧисла(Строка.Количество);

КонецЕсли;

КонецЦикла;

КонецПроцедуры

Для массовой обработки всех документов определенного типа:

Процедура ОчиститьПробелыВоВсехДокументах()

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Ссылка КАК Ссылка

|ИЗ

| Документ.ПоступлениеТоваров КАК Док

|ГДЕ

| НЕ Док.ПометкаУдаления";

Результат = Запрос.Выполнить();

Пока Результат.Следующий() Цикл

Док = Результат.Ссылка.ПолучитьОбъект();

ОбработатьТабличнуюЧасть(Док.Товары);

Док.Записать();

КонецЦикла;

КонецПроцедуры

Важные замечания:

  • 🔄 Перед запуском массовой обработки протестируйте код на копии базы.
  • 📌 Для ускорения работы с большими базами используйте НачатьТранзакцию() и ЗафиксироватьТранзакцию().
  • ⚡ Если числа хранятся как строки с невидимыми символами (например, NBSP), используйте СтрЗаменить(Значение, Символы.НПП, "").
💡

Всегда проверяйте тип поля перед обработкой! Attempt to call method "УдалитьПробелыИзЧисла" for non-string values may cause runtime errors.

Способ 5: Настройка формата чисел в конфигурации

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

Как настроить формат:

  1. Откройте конфигуратор и перейдите в раздел «Общие → Форматы».
  2. Найдите формат, используемый для числовых полей (например, ФорматЧисло15_2).
  3. Проверьте параметр «Разделитель групп разрядов». Если он установлен в «Пробел», смените на «Нет» или «Запятую».
  4. Сохраните изменения и обновите конфигурацию базы (Конфигурация → Обновить конфигурацию базы данных).

Для пользовательских форм (например, в отчётах):

  • 📊 Откройте макет отчёта в конфигураторе.
  • 🔧 Выделите поле с числом → свойство «Формат».
  • 🚫 Уберите галочку «Разделять группы разрядов» или измените разделитель.

Если вы работаете с управляемыми формами, проверьте настройки элементов:

// Пример изменения формата для поля ввода

&НаКлиенте

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

ЭлементыФормы.Цена.Формат = "ЧДЦ=3; ЧРД=0; ЧГ= ; НулНеПоказ=1";

КонецПроцедуры

⚠️ Внимание: Изменение системных форматов может повлиять на отображение чисел во всей базе. Перед внесением изменений согласуйте их с администратором!

Типичные ошибки и как их избежать

Даже опытные пользователи иногда допускают ошибки при удалении пробелов. Вот самые распространённые из них и способы их предотвратить:

Ошибка Последствия Как избежать
Удаление пробелов в числах с десятичными разделителями (например, 1 000,501000,50) Искажение данных в отчётах Используйте СтрЗаменить() только для целых чисел или проверяйте наличие запятой/точки
Массовая замена без резервной копии Потеря данных при сбое Всегда делайте бэкап перед массовыми операциями
Игнорирование невидимых символов (например, NBSP) Пробелы остаются на месте Используйте СтрЗаменить(Значение, Символы.НПП, "")
Изменение формата чисел без тестирования Проблемы с выводом отчётов Проверяйте отображение чисел в печатных формах

Ещё одна частая проблема — пробелы в начала или конце строки, которые не видны при обычном просмотре. Чтобы их обнаружить, используйте функцию СокрЛП() (сократить левые пробелы) или СокрП() (сократить правые пробелы):

ЧислоБезПробелов = Число(СокрЛП(СокрП(СтрокаСПробелами)));

Если после удаления пробелов числа всё равно не проводятся, проверьте:

  • 🔍 Тип поля — возможно, оно должно быть «Число», а не «Строка».
  • 📏 Длину строки — если число превышает допустимый размер (например, 10000000000 в поле с длиной 10 символов).
  • 🔢 Формат хранения — в некоторых конфигурациях числа хранятся в виде строк с фиксированной длиной.

FAQ: Ответы на частые вопросы

Почему после удаления пробелов числа в отчётах отображаются без разделителей тысяч?

Это происходит потому, что разделители тысяч в настраиваются отдельно от хранения данных. Чтобы вернуть разделители в отчётах:

  1. Откройте макет отчёта в конфигураторе.
  2. Найдите поле с числом и в свойствах включите параметр «Разделять группы разрядов».
  3. Укажите нужный разделитель (пробел, запятую или точку).

Это не повлияет на хранение данных, только на их отображение.

Можно ли настроить 1С так, чтобы пробелы в числах не появлялись вообще?

Да, для этого нужно:

  1. В конфигураторе отключить разделители групп разрядов в форматах чисел (меню «Общие → Форматы»).
  2. Для полей ввода на формах установить обработчик события ПриИзменении, который будет автоматически удалять пробелы:
&НаКлиенте

Процедура ЦенаПриИзменении(Элемент)

Элемент.Значение = СтрЗаменить(Элемент.Значение, " ", "");

КонецПроцедуры

Также проверьте настройки импорта данных — часто пробелы добавляются при загрузке из Excel.

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

Это связано с тем, что Excel может сохранять числа в текстовом формате с невидимыми символами. Решения:

  • Перед экспортом в преобразуйте колонку в Excel в числовой формат (Правка → Специальная вставка → Умножить на 1).
  • Используйте обработку импорта с предварительной очисткой:
Для Каждого Строка Из ТаблицаExcel Цикл

Строка.Цена = Число(СтрЗаменить(Строка.Цена, " ", ""));

КонецЦикла;

Как удалить пробелы в числах в мобильной версии 1С?

В мобильном клиенте функционал ограничен, но можно:

  1. Использовать веб-версию 1С:Предприятие для ручной правки.
  2. Создать обработку на сервере, которая будет очищать пробелы при синхронизации.
  3. Для 1С:Мобильная платформа написать серверный код, который будет автоматически форматировать данные перед отправкой на устройство.

Пример серверного кода:

Функция ПодготовитьДанныеДляМобильногоКлиента(Данные)

Для Каждого Строка Из Данные Цикл

Строка.Цена = УдалитьПробелыИзЧисла(Строка.Цена);

КонецЦикла;

Возврат Данные;

КонецФункции

Что делать, если после удаления пробелов числа стали отрицательными?

Это происходит, если пробел в начале числа воспринимался как разделитель, а на самом деле был частью формата (например, " 1000" после очистки становится 1000, но из-за ошибок в коде интерпретируется как -1000). Решения:

  • Проверьте код обработки на наличие ошибок приведений типов (например, Число(Строка) вместо Val(Строка)).
  • Используйте явное приведение к положительному числу:
Число = Абс(Число(СтрЗаменить(СтрокаСПробелами, " ", "")));

Также проверьте, не добавлен ли знак «минус» в другом месте (например, в формуле расчёта).