При работе в платформе «1С:Предприятие 7.7» пользователи и разработчики часто сталкиваются с неприятной ситуацией: при формировании табличного отчета внутри 1С все строки отображаются полностью, но после сохранения документа в файл формата .xls часть текста в ячейках обрезается. Посмотрим подробнее, с чем связано такое поведение системы и какими способами можно сохранить данные без потерь.
Проанализируем ситуацию, когда в одну ячейку таблицы выводится многострочный текст (например, список номенклатуры, составной комментарий или набор кодов, разделенных спецсимволом РазделительСтрок). Если общее количество символов вместе с переводами строк превышает 255–256 знаков, файл Excel после сохранения содержит только первые 10–11 строк, а остаток текста теряется.
Причина кроется в технологических особенностях платформы «1С 7.7». Встроенный механизм сохранения табличных документов формирует файлы Excel в устаревшем формате Excel 5.0 / 95 (BIFF5). На уровне спецификации этого бинарного формата установлено жесткое ограничение: длина строкового значения в одной ячейке не может превышать 256 символов. При экспорте платформа 1С 7.7 физически обрезает все символы, выходящие за этот лимит.
Разберем самый простой и быстрый вариант решения проблемы без использования сторонних компонентов. Платформа 1С 7.7 умеет сохранять таблицы в формате HTML, где подобные ограничения по длине текста отсутствуют.
Выполним сохранение через программный код 1С:
Таб.Записать("C:\Reports\МойОтчет.html", "HTML");
Также пользователи могут сделать это вручную через стандартное меню программы: Файл — Сохранить как..., выбрав тип файла «Документ HTML (*.html, *.htm)».
После сохранения достаточно открыть полученный HTML-файл с помощью MS Excel и пересохранить его в современном формате .xls или .xlsx. Текст во всех ячейках сохранится полностью.
Если требуется регулярное и автоматическое формирование отчетов без дополнительных ручных манипуляций, рассмотрим применение бесплатной внешней компоненты Yoksel (Йоксель).
Компонента перехватывает встроенный механизм сохранения таблиц 1С и записывает файлы в формате Excel более поздних версий, в которых лимит на количество символов в ячейке существенно расширен (до 32 767 символов). Это позволяет сохранить исходное форматирование макета и полностью избежать обрезки длинных строк.
Разберем по шагам вариант с использованием текстового формата .csv. Этот способ отлично подходит для выгрузки реестров, списков и данных для последующего анализа.
Поскольку текстовый формат CSV не содержит бинарных ограничений BIFF5, все многострочные блоки данных перенесутся без изменений.
Рассмотрим вариант создания документа Excel напрямую из кода 1С с использованием OLE Automation. При прямой передаче строк через объект Excel.Application ограничение формата 95 не применяется.
Посмотрим на пример программного кода:
// Создаем объект Excel
Эксель = СоздатьОбъект("Excel.Application");
Книга = Эксель.Workbooks.Add();
Лист = Книга.Worksheets(1);
// Заполняем ячейку длинным многострочным текстом
ДлинныйТекст = "Строка1" + РазделительСтрок + "Строка2" + РазделительСтрок + "Строка3";
Лист.Cells(1, 1).Value = ДлинныйТекст;
// Делаем Excel видимым или сохраняем файл
Эксель.Visible = 1;
Проанализируем структуру самого отчета. Если вывод всех подстрок в одну ячейку с разделителями не является строгим требованием, целесообразно изменить секцию табличного документа 1С.
Вместо формирования одной ячейки с помощью переменной РазделительСтрок организуем цикл и будем выводить каждую подстроку в отдельную строку таблицы 1С. В таком случае каждая запись займет отдельную ячейку Excel, не превышая лимит по длине текста.