Почему при загрузке Excel в 1С:Бухгалтерия не заполняются все ячейки и как это исправить?

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

При работе с типовыми конфигурациями 1С, такими как Бухгалтерия предприятия 8, пользователи часто сталкиваются с необходимостью загрузки данных из внешних файлов. Одной из самых распространенных задач является загрузка документов Поступление (акты, накладные, УПД) из файлов формата Excel (XLSX). Однако иногда процесс проходит некорректно: табличная часть документа заполняется лишь частично, некоторые колонки (например, суммы или количество) остаются пустыми, хотя в исходном файле данные присутствуют. Разберем подробно, почему так происходит и как решить эту проблему раз и навсегда.

Анализ проблемы: почему 1С "спотыкается" при чтении файла

Рассмотрим ситуацию: на локальном компьютере пользователя или на тестовом сервере загрузка проходит идеально, но на боевом сервере та же самая обработка "пропускает" значения. Выясним причину такого поведения. Современные типовые решения 1С для работы с файлами .xlsx не требуют установленного приложения Microsoft Excel на сервере. Система использует технологию прямого чтения структуры файла, который, по сути, является архивом с XML-данными внутри.

Проблема кроется в региональных настройках операционной системы сервера, на котором запущен процесс rphost. Когда 1С парсит XML-содержимое ячейки, она пытается преобразовать строковое представление числа в тип данных Число. Если в файле число записано с разделителем групп разрядов (например, 5 000 000,00), а настройки сервера ожидают другой формат (например, англоязычный, где запятая — это разделитель дробной части, а точка — разделитель тысяч), функция преобразования типов возвращает 0 или пустое значение. В результате ячейка в 1С остается незаполненной.

Шаг 1: Проверка и настройка региональных стандартов сервера

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

  1. Откроем Панель управления и перейдем в раздел Региональные стандарты (Region).
  2. На вкладке Форматы выберем Русский (Россия).
  3. Нажмем кнопку Дополнительные параметры и проверим, что в качестве разделителя дробной части установлена запятая (,), а в качестве разделителя групп разрядов — неразрывный пробел.

Важно понимать, что эти настройки применяются только к текущему пользователю (под которым вы зашли в систему). Однако служба 1С (сервер предприятия) работает под собственной учетной записью, настройки которой могут отличаться.

Шаг 2: Применение настроек к системной учетной записи 1С

Это критически важный этап, который часто упускают. По умолчанию сервер 1С работает под учетной записью USR1CV8 (или аналогичной). Если для этой записи не настроены региональные стандарты, она будет использовать настройки "по умолчанию" (часто en-US), что и приводит к ошибкам при загрузке чисел из Excel.

Выполним следующие действия для синхронизации настроек:

  1. В окне Региональные стандарты перейдем на вкладку Дополнительно (Administrative).
  2. Нажмем кнопку Копировать параметры (Copy settings).
  3. В открывшемся окне мы увидим текущие настройки для пользователя и для системной учетной записи.
  4. Установим галочку Экран приветствия и системные учетные записи (Welcome screen and system accounts).
  5. Нажмем ОК и согласимся на перезагрузку (или перезапустим службу 1С позже).

После этого служба 1C:Enterprise 8.3 Server Agent начнет использовать корректные правила интерпретации чисел, и разделители в Excel-файлах перестанут быть помехой.

Шаг 3: Технические особенности парсинга XLSX (XML)

Посмотрим на ситуацию с точки зрения кода. Если мы переименуем файл .xlsx в .zip и заглянем внутрь, в папку xl/worksheets/, мы увидим XML-файлы страниц. Значения в них могут храниться в узлах v. Если число отформатировано в Excel с разделителями, оно все равно может храниться как "чистое" число, но атрибуты форматирования заставляют систему загрузки интерпретировать его специфическим образом.

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


// Пример функции для очистки строки от лишних разделителей перед преобразованием
Функция ОчиститьИПреобразоватьВЧисло(ЗначениеЯчейки)
    // Убираем неразрывные пробелы (код 160) и обычные пробелы
    Стр = СтрЗаменить(ЗначениеЯчейки, Символы.НПП, "");
    Стр = СтрЗаменить(Стр, " ", "");
    
    // Приводим разделитель дробной части к стандарту текущего сеанса
    // Если сеанс русский, должна быть запятая
    Стр = СтрЗаменить(Стр, ".", ",");
    
    Попытка
        Возврат Число(Стр);
    Исключение
        Возврат 0;
    КонецПопытки;
КонецФункции

В типовых конфигурациях (например, БП 3.0) этот процесс автоматизирован, но он напрямую зависит от локали сеанса 1С, которая, в свою очередь, наследуется от настроек ОС сервера при запуске службы.

Шаг 4: Очистка кэша сервера после изменений

Иногда после изменения настроек региональных стандартов в Windows проблема сохраняется. Это может быть связано с тем, что настройки сеансов кэшируются сервером 1С. Проанализируем, как правильно сбросить эти данные:

  1. Остановим службу 1C:Enterprise 8.3 Server Agent.
  2. Перейдем в каталог данных сервера 1С (обычно это C:\Program Files\1cv8\srvinfo\).
  3. Найдем папку конкретной базы (по UID) и внутри нее папку snccntx. В ней хранятся параметры сеансов.
  4. Очистим содержимое этой папки (будьте осторожны, это приведет к сбросу активных сеансов, выполняйте на регламентном обслуживании).
  5. Запустим службу 1С снова.

Альтернативное решение: Предварительная подготовка файла

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

Это происходит потому, что при сохранении файла без разделителей Excel записывает в XML "чистое" значение без лишних символов (пробелов или запятых между тысячами), которые могли бы сбить с толку механизм типизации 1С. Однако этот метод требует ручного вмешательства в каждый файл от поставщика, что неудобно при больших объемах документов.

Выводы

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

← На главную