Данные из 1С в Excel без кракозябр, текстовых чисел и потерянных нулей

· 11 мин

Содержание

Чтобы преобразовать выгрузку из 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С

Отчёт или печатная форма

  1. Сформируйте отчёт (например, оборотно-сальдовую ведомость) с нужными отборами.
  2. Щёлкните мышью по самому табличному полю отчёта — сохранение работает для активного табличного документа.
  3. Откройте ☰ Главное меню → Файл → Сохранить как. В большинстве отчётов есть и кнопка с дискетой на панели формы.
  4. В поле «Тип файла» выберите Лист Microsoft Excel 2007 (*.xlsx).
  5. Укажите имя и папку, нажмите «Сохранить».

Формат Лист Excel 97 (*.xls) берите, только если файл откроют в очень старой программе. У XLS жёсткий предел — 65 536 строк, у XLSX — 1 048 576 строк. Если в отчёте 80 тысяч строк, XLS их просто обрежет.

Для отчётов на СКД перед сохранением упростите структуру: в настройках отчёта оставьте одну группировку или только детальные записи и отключите итоги по группам. Excel получит ровную таблицу, по которой работают сортировка, фильтр и сводная таблица.

Список документов или справочника

Журнал документов , список номенклатуры или контрагентов отчётом не является. Для них есть отдельная команда:

  1. Откройте список и настройте отбор (по дате, организации, складу).
  2. Нажмите Ещё → Вывести список.
  3. В окне отметьте нужные колонки. Флажок «Только выделенные» выгрузит лишь отмеченные строки.
  4. Выводите в табличный документ, а не в текстовый.
  5. В открывшемся табличном документе — Файл → Сохранить как → 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 с нужной кодировкой

  1. Откройте пустую книгу Excel.
  2. Перейдите в Данные → Из текста/CSV и выберите файл.
  3. В поле «Источник файла» укажите 65001: Юникод (UTF-8) или 1251: Кириллица (Windows) — смотрите на предпросмотр, кириллица должна читаться.
  4. В поле «Разделитель» выберите точку с запятой или табуляцию — то, чем разделены колонки в файле.
  5. Нажмите «Преобразовать данные», если нужно задать типы колонок (об этом ниже), или «Загрузить».

Узнать кодировку файла быстро можно в 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. Дополнительная обработка с расписанием

В типовых конфигурациях на БСП внешнюю обработку вида «Дополнительная обработка» с серверной командой можно зарегистрировать в «Дополнительных отчётах и обработках» и задать для её команды расписание. Конфигурацию при этом не трогают вообще — удобно для баз на поддержке.

Что проверить, чтобы задание реально работало

Выгрузка по расписанию: проверка
Выполнено: 0 / 6

Самая частая причина «задание есть, а файла нет» — права. Клиент-серверная база пишет файл от имени службы сервера 1С, а не от имени пользователя. Сетевой диск Z: у службы не подключён, поэтому нужен путь вида \\server\share\.

Частые вопросы

Можно ли выгрузить из 1С в Excel сразу несколько листов?
Штатным «Сохранить как» — нет, один табличный документ даёт один лист. Несколько листов в одной книге собирают через COM или пакетом табличных документов в обработке.
Почему в Excel не работает фильтр по выгруженному отчёту?
Мешают объединённые ячейки и многоуровневая шапка. Упростите структуру отчёта перед сохранением или снимите объединение ячеек в Excel и оставьте одну строку заголовков.
Сохранятся ли группировки отчёта при выгрузке в XLSX?
Да, группировки строк переходят в структуру Excel — слева появляются кнопки «плюс/минус» уровней. Для сводной таблицы их лучше убрать: Данные → Разгруппировать → Удалить структуру.
Как выгрузить отчёт в Excel в веб-клиенте 1С?
Так же через сохранение табличного документа: браузер скачает XLSX в папку загрузок. Путь сохранения выбирают настройки браузера, а не 1С.
Что лучше для обмена с другой программой: XLSX или CSV?
Для человека — XLSX, он хранит типы ячеек. Для автоматической загрузки в другую систему — CSV с заранее оговорённой кодировкой, разделителем и форматом дат.