Данные из 1С в Excel без кракозябр, текстовых чисел и потерянных нулей
Содержание
Чтобы преобразовать выгрузку из 1С в Excel без потери данных, сохраняйте табличный документ сразу в формат Лист Microsoft Excel 2007 (*.xlsx): откройте отчёт или список, затем ☰ Главное меню → Файл → Сохранить как и выберите тип XLSX. Если данные уже лежат в CSV или TXT, не открывайте файл двойным щелчком — импортируйте его в Excel через Данные → Из текста/CSV с явной кодировкой и разделителем.
Почти все проблемы при переносе данных из 1С в Excel сводятся к трём вещам: неверная кодировка (кракозябры), неразрывные пробелы в числах (числа превращаются в текст) и автоформат Excel (пропадают ведущие нули, длинные номера уходят в 4,07E+19). Всё это лечится один раз — настройкой выгрузки, а не ручной правкой каждой таблицы. Механизмы ниже одинаковы для БП 3.0, ЗУП 3.1, УТ 11 и других конфигураций на платформе 8.3: сохранение табличного документа — функция платформы, а не прикладного решения.
Какой способ выгрузки из 1С в Excel выбрать
Способов несколько, и они решают разные задачи. Сначала определитесь, что вам нужно: разовая таблица, регулярный файл для другой программы или полностью автоматическая выгрузка.
| Способ | Когда подходит | Слабое место |
|---|---|---|
Сохранить как → XLSX | Любой отчёт, печатная форма, разовая выгрузка | Объединённые ячейки и группировки мешают фильтрам |
Ещё → Вывести список | Плоская таблица из журнала или справочника | Только видимые колонки формы |
| Копирование через буфер | Пара десятков строк «на глаз» | Числа часто приходят текстом |
| CSV из обработки | Обмен с другой системой, большие объёмы | Кодировка и разделители |
| Внешняя обработка → XLSX | Нестандартный состав колонок, повторяемая выгрузка | Нужен программист или готовая обработка |
| COM-соединение с Excel | Нужна сложная разметка, формулы, макросы книги | Медленно, нужен установленный Excel |
| Регламентное задание | Ежедневный файл в общую папку без участия человека | Права службы сервера на папку |
Для большинства бухгалтерских задач хватает первых двух строк таблицы. Остальное — для тех, кто выгружает одно и то же каждый день.
Сохранение отчёта и списка в Excel штатными средствами 1С
Отчёт или печатная форма
- Сформируйте отчёт (например, оборотно-сальдовую ведомость) с нужными отборами.
- Щёлкните мышью по самому табличному полю отчёта — сохранение работает для активного табличного документа.
- Откройте
☰ Главное меню → Файл → Сохранить как. В большинстве отчётов есть и кнопка с дискетой на панели формы. - В поле «Тип файла» выберите
Лист Microsoft Excel 2007 (*.xlsx). - Укажите имя и папку, нажмите «Сохранить».
Формат Лист Excel 97 (*.xls) берите, только если файл откроют в очень старой программе. У XLS жёсткий предел — 65 536 строк, у XLSX — 1 048 576 строк. Если в отчёте 80 тысяч строк, XLS их просто обрежет.
Для отчётов на СКД перед сохранением упростите структуру: в настройках отчёта оставьте одну группировку или только детальные записи и отключите итоги по группам. Excel получит ровную таблицу, по которой работают сортировка, фильтр и сводная таблица.
Список документов или справочника
Журнал документов , список номенклатуры или контрагентов отчётом не является. Для них есть отдельная команда:
- Откройте список и настройте отбор (по дате, организации, складу).
- Нажмите
Ещё → Вывести список. - В окне отметьте нужные колонки. Флажок «Только выделенные» выгрузит лишь отмеченные строки.
- Выводите в табличный документ, а не в текстовый.
- В открывшемся табличном документе —
Файл → Сохранить как→ XLSX.
Колонки, которых нет на форме, в окне «Вывести список
» не появятся. Сначала добавьте их через Ещё → Изменить форму, потом выводите.
Копирование через буфер обмена
Выделите область табличного документа, нажмите Ctrl+C, в Excel — Ctrl+V. Быстро, но именно здесь чаще всего получаются числа-строки с зелёным треугольником в углу ячейки. Для пары строк годится, для отчёта на сотни строк лучше сохранить файл
.
Файл MXL вместо Excel
Если вам прислали файл .mxl, Excel его не откроет. Откройте его в любой базе 1С через ☰ Главное меню → Файл → Открыть и пересохраните в XLSX тем же способом.
Текстовые файлы и кодировка: как убрать кракозябры
Кракозябры вида Остаток вместо «Остаток» означают одно: Excel прочитал файл не в той кодировке, в которой он записан. С XLSX этого не бывает, проблема только у CSV и TXT.
Что происходит на практике:
- 📄 файл записан в UTF-8 без метки BOM — Excel по умолчанию читает его как windows-1251 и ломает кириллицу;
- 📄 файл записан в windows-1251, а открывается на компьютере с другой региональной настройкой;
- 📄 файл сохранили в «Блокноте» с другой кодировкой после правки.
Импорт CSV в Excel с нужной кодировкой
- Откройте пустую книгу Excel.
- Перейдите в
Данные → Из текста/CSVи выберите файл. - В поле «Источник файла» укажите
65001: Юникод (UTF-8)или1251: Кириллица (Windows)— смотрите на предпросмотр, кириллица должна читаться. - В поле «Разделитель» выберите точку с запятой или табуляцию — то, чем разделены колонки в файле.
- Нажмите «Преобразовать данные», если нужно задать типы колонок (об этом ниже), или «Загрузить».
Узнать кодировку файла быстро можно в Notepad++: в строке состояния внизу окна написано UTF-8, UTF-8-BOM или Windows-1251.
Как записать CSV из 1С сразу правильно
Если CSV формирует обработка, задайте кодировку явно, а не надейтесь на системную. На сервере под Linux «системная» кодировка ANSI может оказаться вовсе не кириллической.
Запись = Новый ЗаписьТекста(ИмяФайла, "windows-1251");
Запись.ЗаписатьСтроку("Код;Наименование;Количество;Сумма");
Для Каждого Стр Из ТаблицаДанных Цикл
Запись.ЗаписатьСтроку(
Стр.Код + ";"
+ СтрЗаменить(Стр.Наименование, ";", ",") + ";"
+ Формат(Стр.Количество, "ЧДЦ=3; ЧРД=,; ЧГ=0; ЧН=0") + ";"
+ Формат(Стр.Сумма, "ЧДЦ=2; ЧРД=,; ЧГ=0; ЧН=0"));
КонецЦикла;
Запись.Закрыть();
Здесь три защиты сразу: кодировка windows-1251, которую русский Excel открывает без вопросов; замена точки с запятой внутри наименования, чтобы она не разорвала строку на лишние колонки; формат чисел без разделителя групп разрядов (ЧГ=0) и с запятой в дробной части (ЧРД=,). Пустые значения выводятся нулём благодаря ЧН=0.
Разделители, числа-текст и даты: чиним формат после выгрузки
Даже при правильной кодировке Excel может исказить данные. Вот что ломается чаще всего и как это исправить.
Быстрое превращение текста в числа
Если неразрывных пробелов нет, а числа всё равно текстом, помогает старый приём: выделите колонку, откройте Данные → Текст по столбцам и сразу нажмите «Готово». Excel заново распознает значения.
Второй вариант — формула в соседней колонке:
=ЧЗНАЧ(ПОДСТАВИТЬ(A2;СИМВОЛ(160);""))
Она убирает неразрывный пробел (код 160) и превращает результат в число. Растяните формулу вниз, скопируйте колонку и вставьте как значения.
Расчётные счета, ИНН, КПП, коды номенклатуры и номера ГТД никогда не переводите в числа. Excel молча обрежет ведущие нули и последние цифры длинных номеров, и такую таблицу уже нельзя загрузить обратно в 1С.
Внешняя обработка для выгрузки в Excel своих колонок
Когда стандартный отчёт не даёт нужного набора полей, пишут внешнюю обработку
(файл .epf). Она выполняет запрос, складывает результат в табличный документ и записывает его в XLSX. Excel на компьютере для этого не нужен: формат собирает сама платформа.
Пример серверной части — выгрузка номенклатуры с артикулами:
&НаСервереБезКонтекста
Функция СформироватьТаблицу()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа
| И НЕ Номенклатура.ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
ТД = Новый ТабличныйДокумент;
ТД.Область(1, 1, 1, 1).Текст = "Код";
ТД.Область(1, 2, 1, 2).Текст = "Наименование";
ТД.Область(1, 3, 1, 3).Текст = "Артикул";
НомерСтроки = 1;
Пока Выборка.Следующий() Цикл
НомерСтроки = НомерСтроки + 1;
ТД.Область(НомерСтроки, 1, НомерСтроки, 1).Текст = Выборка.Код;
ТД.Область(НомерСтроки, 2, НомерСтроки, 2).Текст = Выборка.Наименование;
ТД.Область(НомерСтроки, 3, НомерСтроки, 3).Текст = Выборка.Артикул;
КонецЦикла;
Возврат ТД;
КонецФункции
Дальше два пути. Для ручной работы выведите ТД в реквизит формы с типом «Табличный документ» — пользователь сохранит его через Файл → Сохранить как. Для записи файла без участия человека вызовите на сервере:
ТД.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
Как запустить обработку:
- 🔹 разово —
☰ Главное меню → Файл → Открыть, выбрать.epf. Нужно право на интерактивное открытие внешних обработок; - 🔹 постоянно — зарегистрировать в
Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. Тогда права на открытие любых файлов пользователям не нужны.
Шапку и ширину колонок удобнее задавать макетом обработки, а не кодом. Нарисуйте в макете область «Шапка» и область «Строка» с параметрами, заполняйте их через ПолучитьОбласть и Вывести. Ширина колонок и формат ячеек перейдут в XLSX как есть.
COM-соединение и макросы Excel из 1С
COM-объект Excel.Application позволяет управлять Excel прямо из кода 1С: создавать листы, писать формулы, ставить условное форматирование, запускать макросы готовой книги. Работает только под Windows и только там, где установлен Microsoft Excel.
Пример: создать книгу, задать текстовый формат колонке с ИНН и сохранить в XLSX.
Excel = Новый COMОбъект("Excel.Application");
Excel.DisplayAlerts = Ложь;
Книга = Excel.Workbooks.Add();
Лист = Книга.Worksheets(1);
Лист.Columns(2).NumberFormat = "@"; // колонка B — текст, нули не пропадут
Лист.Cells(1, 1).Value = "Контрагент";
Лист.Cells(1, 2).Value = "ИНН";
Лист.Cells(2, 1).Value = "ООО Ромашка";
Лист.Cells(2, 2).Value = "0012345678";
Лист.Columns("A:B").AutoFit();
Книга.SaveAs(ИмяФайла, 51); // 51 — формат xlsx
Книга.Close(Ложь);
Excel.Quit();
Текстовый формат колонки ставится до записи значений — иначе Excel успеет превратить код в число.
Запуск макроса из книги-шаблона .xlsm выглядит так: Книга = Excel.Workbooks.Open(ПутьКШаблону), затем Excel.Run("ОформитьОтчет"). Удобно, когда оформление отчёта годами живёт в макросе у финансиста и переписывать его в 1С никто не хочет.
Чего ждать от COM:
- 🐢 скорость — каждая ячейка это отдельный вызов. 10 тысяч строк по 10 колонок могут писаться минутами. Большие объёмы сначала сохраняйте в XLSX через
ТабличныйДокумент, а COM используйте только для финального оформления; - 👻 «зависшие» процессы
EXCEL.EXE— если код упал доExcel.Quit(), процесс остаётся в памяти. Оборачивайте работу вПопытка … Исключениеи закрывайте Excel в обоих ветках; - 🖥️ на сервере 1С COM с Excel не используйте: Microsoft не поддерживает Office в серверных сценариях без пользователя, процессы начинают висеть на диалогах.
Автоматическая выгрузка в Excel по расписанию
Если один и тот же файл (остатки для отдела закупок, реестр оплат для директора) нужен каждое утро, его формирует регламентное задание. Человек открывает готовый XLSX в общей папке.
Вариант 1. Регламентное задание в конфигурации
Программист добавляет в конфигурацию (лучше в расширение, чтобы не снимать типовую с поддержки) регламентное задание и процедуру общего модуля:
Процедура ВыгрузкаОстатковВExcel() Экспорт
ТД = СформироватьТаблицуОстатков(); // ваша функция, как в обработке выше
ИмяФайла = "\\fileserver\obmen\ostatki_"
+ Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd") + ".xlsx";
ТД.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);
КонецПроцедуры
Расписание и включение задания настраиваются в Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания.
Вариант 2. Дополнительная обработка с расписанием
В типовых конфигурациях на БСП внешнюю обработку вида «Дополнительная обработка» с серверной командой можно зарегистрировать в «Дополнительных отчётах и обработках» и задать для её команды расписание. Конфигурацию при этом не трогают вообще — удобно для баз на поддержке.
Что проверить, чтобы задание реально работало
Самая частая причина «задание есть, а файла нет» — права. Клиент-серверная база
пишет файл от имени службы сервера 1С, а не от имени пользователя. Сетевой диск Z: у службы не подключён, поэтому нужен путь вида \\server\share\.
Частые вопросы
Можно ли выгрузить из 1С в Excel сразу несколько листов?
Почему в Excel не работает фильтр по выгруженному отчёту?
Сохранятся ли группировки отчёта при выгрузке в XLSX?
Данные → Разгруппировать → Удалить структуру.