Как решить проблему, когда числа из 1С копируются в Excel как текст с пробелами через RDP

Бухгалтер 1С v8.3 (Обычные формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

Каждый бухгалтер или активный пользователь 1С хотя бы раз сталкивался с ситуацией, когда при копировании табличной части или отчета из удаленного рабочего стола (RDP) в локальный Microsoft Excel числовые значения превращаются в обычный текст. При попытке подвести итоги или сложить скопированные суммы Excel выдает нулевой результат или ошибку, поскольку воспринимает эти данные как текстовые строки из-за наличия пробелов между разрядами. Нам приходится вручную удалять эти пробелы, что отнимает колоссальное количество рабочего времени.

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

Выясним причину: почему числа превращаются в текст при копировании через RDP

Разберем по шагам, что именно происходит в момент копирования числовых данных из терминальной сессии 1С на ваш локальный компьютер:

  1. Баг утилиты rdpclip.exe: Начиная с операционных систем Windows 10 (сборка 1607) и Windows Server 2016, компания Microsoft обновила механизм работы системной утилиты буфера обмена rdpclip.exe. Из-за внутренней программной ошибки при передаче данных из удаленного сеанса на локальный ПК полностью теряется специализированная разметка формата Microsoft Excel 8.0 (Biff5/Biff8). В результате данные приходят в локальный буфер обмена исключительно в виде простого текста (Plain Text), Unicode-текста или HTML-кода.
  2. Специфика форматирования в 1С: Платформа 1С:Предприятие для удобства чтения разделяет тысячи в числах специальным символом — неразрывным пробелом (символ с кодом ASCII 160, в то время как обычный пробел имеет код ASCII 32).
  3. Реакция Excel на вставку: Когда мы вставляем скопированные данные в локальный Excel, программа получает обычный неразмеченный текст. Видя в текстовой строке символ с кодом 160 (неразрывный пробел), Excel не может сопоставить его со своим системным разделителем групп разрядов. Программа делает логичный вывод: перед нами текстовая строка (например, "150 000,00"), а не число. Соответственно, любые математические операции с этой ячейкой становятся невозможными.

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

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

Решение 1: Прямое сохранение файла вместо копирования (Рекомендуемый способ)

Посмотрим на самый простой и надежный способ, который позволяет полностью избежать проблем с буфером обмена RDP. Вместо привычной, но ненадежной цепочки действий "Вывести список -> Выделить -> Скопировать -> Вставить" мы рекомендуем сохранять документы напрямую.

Выполните следующие шаги в интерфейсе 1С:

  1. Сформируйте необходимый отчет или выведите список документов с помощью стандартной команды "Вывести список...".
  2. В главном меню 1С (левый верхний угол) нажмите кнопку меню и выберите "Файл" -> "Сохранить как..." (или нажмите на пиктограмму дискеты на панели инструментов).
  3. В открывшемся диалоговом окне укажите путь для сохранения (например, на ваш подключенный локальный диск или сетевую папку).
  4. В поле "Тип файла" обязательно выберите "Лист Excel (*.xlsx)".
  5. Нажмите кнопку "Сохранить".

При таком подходе платформа 1С самостоятельно и корректно формирует структуру файла Excel, прописывая числовые ячейки в соответствующем типе данных. Когда вы откроете этот файл в локальном Excel, все суммы сразу будут доступны для вычислений.

Решение 2: Быстрое удаление неразрывных пробелов через автозамену в Excel

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

Разберем этот процесс по шагам:

  1. Выделите весь столбец или диапазон ячеек с проблемными суммами в Excel.
  2. Нажмите сочетание клавиш Ctrl + H для вызова окна "Найти и заменить".
  3. Установите курсор в поле "Найти".
  4. Зажмите клавишу Alt на клавиатуре и, удерживая её, наберите на правой цифровой клавиатуре (NumPad) комбинацию цифр 0160, после чего отпустите Alt. В поле визуально ничего не появится (оно останется пустым), но там будет записан невидимый символ неразрывного пробела.

    Альтернативный вариант: если у вас нет блока цифровой клавиатуры справа (например, на ноутбуке), просто зайдите в любую проблемную ячейку Excel, выделите мышкой этот "пробел" между цифрами, скопируйте его (Ctrl+C) и вставьте в поле "Найти".

  5. Поле "Заменить на" оставьте абсолютно пустым.
  6. Нажмите кнопку "Заменить все".

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

Решение 3: Использование формулы Excel для автоматического преобразования

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

Посмотрим на пример формулы для русскоязычной версии Microsoft Excel. Предположим, что текстовое число с пробелом находится в ячейке A1. В соседней ячейке пропишем следующую формулу:

=ЗНАЧ(ПОДСТАВИТЬ(A1; СИМВ(160); ""))

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

=VALUE(SUBSTITUTE(A1; CHAR(160); ""))

Как работает эта формула? Функция ПОДСТАВИТЬ находит в указанной ячейке все символы с кодом 160 (неразрывный пробел) и заменяет их на пустоту (удаляет их). Затем функция ЗНАЧ преобразует получившуюся текстовую строку обратно в число, с которым можно проводить любые арифметические расчеты.

Решение 4: Исправление работы буфера обмена RDP (Решение для системных администраторов)

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

Разберем системный алгоритм действий:

  1. Подключитесь к терминальному серверу (например, под управлением Windows Server 2016) с правами администратора.
  2. Перейдите в каталог C:\Windows\System32.
  3. Вам необходимо заменить исполняемый файл rdpclip.exe на аналогичный файл из дистрибутива Windows Server 2019 или более старого Windows Server 2012 R2 (в этих версиях баг отсутствует). Перед заменой обязательно сделайте резервную копию оригинального файла, переименовав его, например, в rdpclip.bak.

    Чтобы произвести замену, вам может потребоваться завершить процесс rdpclip.exe через Диспетчер задач для всех активных пользователей, либо временно забрать права на файл у системы (через вкладку "Безопасность" в свойствах файла).

  4. После успешной замены файла перезапустите службу буфера обмена или перезагрузите сервер.

После проведения этой процедуры буфер обмена начнет корректно транслировать формат Excel 8.0 (BIFF8) на локальные компьютеры пользователей, и числа будут вставляться без потери форматирования.

Решение 5: Настройка на стороне 1С (Решение для разработчиков)

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

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


// Пример программного исключения неразрывных пробелов в табличном документе
Для Строка = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл
    Для Колонка = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл
        Ячейка = ТабличныйДокумент.Область(Строка, Колонка);
        Если ТипЗнч(Ячейка.Значение) = Тип("Число") Тогда
            // Убираем неразрывный пробел из отображаемого текста ячейки
            Ячейка.Текст = СтрЗаменить(Ячейка.Текст, Символы.НПП, "");
        КонецЕсли;
    КонецЦикла;
КонецЦикла;

При использовании этого кода принудительно заменяется системный символ неразрывного пробела Символы.НПП в тексте ячеек на пустую строку. Числа визуально будут выводиться сплошным текстом без разделения на тысячи, зато при стандартном копировании через буфер обмена RDP они без проблем распознаются локальным Excel как числовые значения.

Мы надеемся, что предложенные варианты помогут вам оптимизировать работу и навсегда забыть о ручном удалении пробелов в таблицах Excel!

← На главную