Как исправить некорректное отображение Excel-файлов, сохраненных из мобильного приложения 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При разработке мобильных приложений на платформе 1С:Предприятие программисты часто сталкиваются с неприятной особенностью: метод Записать() для объекта ТабличныйДокумент отлично работает при сохранении в PDF, но выдает визуально искаженные файлы при выборе форматов ТипФайлаТабличногоДокумента.XLSX или XLS. В этой статье мы подробно разберем, почему это происходит, проанализируем технические ограничения мобильной платформы и изучим пошаговые инструкции по обходу этой проблемы.

Выясним причину проблемы: почему PDF работает, а Excel — нет?

Для начала проанализируем ситуацию. Когда мы сохраняем ТабличныйДокумент в формат PDF, платформа формирует фиксированную верстку, где каждый символ и линия имеют жесткие координаты. Мобильные просмотрщики (такие как Google Drive PDF Viewer) просто отрисовывают готовую «картинку».

Однако формат XLSX — это по сути архив с набором XML-схем. Мобильная платформа 1С использует упрощенные алгоритмы для генерации этой структуры. Основные причины «кривого» отображения (смещения колонок, пропажи границ, некорректных шрифтов) заключаются в следующем:

  1. Строгость стандартов XML: Мобильные офисные пакеты (WPS Office, Microsoft Excel для Android) гораздо строже интерпретируют разметку стилей, чем десктопные версии. Любое упрощение в описании объединения ячеек или высоты строк в исполнении 1С приводит к визуальному хаосу.
  2. Отсутствие шрифтов: В ОС Android отсутствуют стандартные шрифты Windows (Arial, Calibri, Times New Roman). Если в 1С задан шрифт Arial, мобильное устройство заменяет его на системный (например, Roboto). Поскольку метрики этих шрифтов (ширина букв) различаются, заранее рассчитанная 1С ширина колонок «едет», и текст перестает помещаться в ячейки.
  3. Ограничения мобильного движка: В мобильном клиенте функции конвертации документов ограничены по сравнению с полноценным сервером 1С.

Решение №1: Формирование файла на стороне сервера (самый надежный способ)

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

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

  1. Передаем сформированный ТабличныйДокумент с клиента на сервер.
  2. На сервере сохраняем его во временный файл в формате XLSX.
  3. Помещаем файл во временное хранилище.
  4. Возвращаем адрес хранилища на мобильное устройство.
  5. На мобильном устройстве получаем данные и сохраняем их в локальную файловую систему.

Посмотрим на пример кода, реализующего эту схему:


// Код на стороне мобильного клиента
&НаКлиенте
Процедура СохранитьЭкселНаСервере(Команда)
    
    // Получаем табличный документ (например, из реквизита формы)
    ТабДок = Объект.ТабличныйДокумент;
    
    // Отправляем на сервер для генерации «правильного» XLSX
    АдресФайла = СформироватьФайлНаСервере(ТабДок);
    
    Если ЗначениеЗаполнено(АдресФайла) Тогда
        // Получаем данные из хранилища и сохраняем на мобильном устройстве
        ДанныеФайла = ПолучитьИзВременногоХранилища(АдресФайла);
        ПутьКФайлу = ФайловаяСистема.ПутьКДокументам() + "report.xlsx";
        ДанныеФайла.Записать(ПутьКФайлу);
        
        // Информируем пользователя
        ПоказатьОповещениеПользователю("Файл сохранен", , ПутьКФайлу);
    КонецЕсли;
    
КонецПроцедуры

&НаСервереБезКонтекста
Функция СформироватьФайлНаСервере(Знач ТабДок)
    
    ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
    // На сервере метод Записать() отработает корректно
    ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
    
    Данные = Новый ДвоичныеДанные(ИмяФайла);
    Адрес = ПоместитьВоВременноеХранилище(Данные);
    
    УдалитьФайлы(ИмяФайла);
    Возврат Адрес;
    
КонецФункции

Этот метод гарантирует, что структура XLSX будет сформирована полноценным движком 1С, который гораздо лучше совместим со стандартами Microsoft Excel.

Решение №2: Использование формата HTML как альтернативы

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

Попробуем изменить тип файла при сохранении:


ПутьКФайлу = ФайловаяСистема.ПутьКДокументам() + "report.html";
ТабДок.Записать(ПутьКФайлу, ТипФайлаТабличногоДокумента.HTML);

Преимущество: Сетка, цвета и объединения ячеек в HTML сохраняются гораздо точнее. Недостаток: При открытии в WPS Office файл может открыться как веб-страница, а не как таблица, что затруднит дальнейшие расчеты.

Решение №3: Оптимизация оформления табличного документа

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

Рассмотрим пример кода для программной «очистки» документа перед сохранением:


Процедура ОчиститьДокументПередСохранением(ТабДок)
    // Удаляем все рисунки (картинки, логотипы)
    Пока ТабДок.Рисунки.Количество() > 0 Цикл
        ТабДок.Рисунки.Удалить(0);
    КонецЦикла;
    
    // Сбрасываем закрепление областей
    ТабДок.ФиксацияСверху = 0;
    ТабДок.ФиксацияСлева = 0;
КонецПроцедуры

Решение №4: Формат XLS (Excel 97-2003)

Как показывает практика, старый бинарный формат ТипФайлаТабличногоДокумента.XLS (без буквы X в конце) иногда обрабатывается мобильной платформой стабильнее. Это связано с тем, что его структура проще и менее требовательна к описанию пространств имен XML, в которых мобильная 1С иногда допускает ошибки.

Подведем итоги

Мы выяснили, что проблема «кривого» Excel в мобильной 1С — это следствие упрощенной реализации экспорта в мобильном движке.

Рекомендованная стратегия:

  1. Если есть интернет-соединение — всегда используйте серверное формирование. Это даст 100% результат.
  2. Если нужен просто визуальный отчет — используйте PDF.
  3. Если нужна передача данных без оформления — рассмотрите формат CSV.
  4. В крайнем случае используйте HTML или старый XLS, предварительно очистив документ от сложного форматирования.

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

← На главную