При стандартном сохранении табличных форм (накладных, актов, прайс-листов) из платформы 1С:Предприятие 7.7 в формат XLS часто возникает неприятная ситуация: ячейки с кодами товаров или артикулами, состоящими из одних цифр с ведущими нулями (например, 00045), открываются в Microsoft Excel, OpenOffice или LibreOffice как обычные числа (45). Разберем причины такого поведения и рассмотрим надежные способы решения данной задачи.
Проанализируем, почему Excel автоматически отсекает нули. Встроенный модуль платформы 1С 7.7 сохраняет таблицы в формате Excel устаревшей версии (BIFF5 / Excel 95/97). При экспорте механизм выгрузки анализирует содержимое ячеек и их форматирование в табличном документе:
NUMBER). В результате Excel открывает значение как число и отбрасывает начальные нули."'"+Код), то апостроф воспринимается как печатный символ и физически отображается в ячейке и на печати.Рассмотрим самый простой и штатный способ, не требующий изменения исходного кода модулей. Достаточно скорректировать оформление печатной формы в конфигураторе или в табличном документе.
Разберем по шагам:
При таком выравнивании внутренний механизм конвертации 1С 7.7 самостоятельно передает в файл XLS признак текста. В результате значение 00045 отобразится в Excel именно как 00045 без визуального апострофа и без потери начальных нулей.
Посмотрим на ситуацию, когда по требованиям оформления документа код товара обязательно должен быть выровнен По правому краю. В этом случае смена выравнивания не подходит, а явный апостроф отображается на экране. Для обхода ограничения можно добавить в начало строки специальный непечатаемый символ с помощью функции Симв().
Рассмотрим примеры кода для заполнения ячейки макета:
// Использование символа Backspace (код 8)
ПечКод = Симв(8) + СокрЛП(Докум.Номенклатура.Код);
// Использование символа горизонтальной табуляции (код 9)
ПечКод = Симв(9) + СокрЛП(Докум.Номенклатура.Код);
Проанализируем действие этих символов: наличие символа Симв(8) или Симв(9) не позволяет алгоритму платформы преобразовать строку в чистое число, поэтому Excel открывает ячейку в текстовом формате и сохраняет все лидирующие нули, при этом значение остается выровненным по правому краю.
Также можно использовать символ неразрывного пробела:
// Добавление неразрывного пробела (код 160)
ПечКод = СокрЛП(Докум.Номенклатура.Код) + Симв(160);
В отличие от обычного пробела (Симв(32)), который удаляется при обработке, неразрывный пробел воспринимается табличным процессором как строковый символ и сохраняет текстовый тип данных.
Если требуется сформировать файл программно и избежать проблем со встроенным конвертером BIFF5, рассмотрим вариант выгрузки таблицы в формат HTML с последующим открытием в Excel. Метод Записать() объекта Таблица позволяет сохранить документ в HTML:
Таб = СоздатьОбъект("Таблица");
// Формирование и заполнение макета
Таб.ВывестиСекцию("Шапка");
Таб.ВывестиСекцию("Строка");
// Сохранение в формате HTML (тип 2)
Таб.Записать(КаталогВременныхФайлов() + "Накладная.htm", 2);
При необходимости тонкой настройки можно добавить специальный CSS-стиль Microsoft Excel для текстовых колонок: mso-number-format:"\@". При открытии такого файла в Excel ячейки с ведущими нулями гарантированно интерпретируются как текст.
Для полного контроля над структурой и типами колонок в 1С 7.7 часто применяются сторонние библиотеки конвертации, такие как компонента Йоксель (Yoksel / SpreadSheet.dll). Она перехватывает процесс сохранения табличных документов .mxl и формирует полноценные файлы .xls с корректной типизацией данных и сохранением всех форматов ячеек независимо от выравнивания текста.