Работа с данными из Microsoft Excel в 1С:Предприятие — одна из самых востребованных задач среди пользователей и разработчиков.hether вы бухгалтер, который нужно перенести остатки из таблицы в базу, или программист, автоматизирующий обмен данными между системами — умение корректно импортировать .xls/.xlsx сэкономит часы рутинной работы. В этой статье разберём все актуальные способы чтения Excel в 1С: от встроенных инструментов до написания собственного кода на 1С 8.3.

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

1. Стандартные обработки 1С для загрузки Excel

Самый простой способ импорта — использовать встроенные обработки, которые идут в комплекте с большинством конфигураций (Бухгалтерия 3.0, УТ 11, ЗУП 3.1 и др.). Например, обработка "ЗагрузкаДанныхИзТабличногоДокумента.epf" позволяет загрузить данные из Excel в справочники, документы или регистры без программирования.

Чтобы её найти:

  1. Откройте 1С в режиме Предприятие.
  2. Перейдите в меню Файл → Открыть....
  3. В поле "Тип файлов" выберите "Обработка (*.epf)".
  4. Найдите файл по пути: C:\Program Files\1cv8\templates\<ВашаКонфигурация>\ExtForms\ (путь может отличаться в зависимости от версии).

Преимущества метода:

  • 🔹 Не требует знаний программирования.
  • 🔹 Поддерживает сопоставление колонок Excel с реквизитами 1С.
  • 🔹 Может обрабатывать большие файлы (до 100 000 строк).
⚠️ Внимание: В некоторых конфигурациях (например, БП 3.0 до релиза 3.0.100) стандартная обработка не поддерживает формат .xlsx — только .xls. Для новых форматов потребуется обновление платформы или доработка.
📊 Какой формат Excel вы чаще используете для импорта в 1С?
.xls (Excel 97-2003)
.xlsx (Excel 2007 и новее)
.csv
Другой

2. Загрузка через "Универсальный обмен данными"

Если стандартные обработки отсутствуют или не подходят, воспользуйтесь механизмом "Универсальный обмен данными" (доступен в большинстве типовых конфигураций). Этот метод гибче: позволяет настраивать правила преобразования данных, обрабатывать ошибки и вести лог загрузки.

Алгоритм действий:

  1. Откройте раздел Администрирование → Обмен данными с другими программами → Универсальный обмен данными.
  2. Создайте новый обмен, выбрав источник "Файл Excel".
  3. Загрузите шаблон файла или укажите путь к вашему .xlsx.
  4. Настройте соответствие колонок Excel полям 1С (например, колонка "Наименование" → реквизит "Наименование" справочника "Номенклатура").
  5. Запустите загрузку и проверьте результат в журнале обмена.

Особенности метода:

  • 📌 Поддерживает .xls и .xlsx (начиная с платформы 8.3.10).
  • 📌 Можно сохранять настройки обмена для повторного использования.
  • 📌 Есть возможность предварительного просмотра данных перед загрузкой.
Параметр Стандартная обработка Универсальный обмен
Поддержка .xlsx Ограниченно (зависит от версии) Да (с 8.3.10)
Сопоставление полей Ручное Автоматическое + ручная корректировка
Логирование ошибок Нет Да
Обработка больших файлов (>50 000 строк) Медленно Быстрее (пакетная загрузка)

3. Программная загрузка Excel через COM-объект

Для автоматизации импорта на уровне кода используйте COM-соединение с Microsoft Excel. Этот метод требует установленного Excel на компьютере и подходит для Windows-систем. Основной плюс — полный контроль над процессом чтения данных.

Пример кода для чтения файла C:\temp\data.xlsx:

Перем Excel, Книга, Лист;

Попытка

// Создаём COM-объект Excel

Excel = Новый COMОбъект("Excel.Application");

// Открываем книгу (видимость Excel отключена для ускорения)

Excel.Visible = Ложь;

Книга = Excel.Workbooks.Open("C:\temp\data.xlsx");

Лист = Книга.Worksheets(1); // Первый лист

// Читаем данные из ячеек A1:D10

Для Строка = 1 По 10 Цикл

Для Колонка = 1 По 4 Цикл

Значение = Лист.Cells(Строка, Колонка).Value;

Сообщить(СтрШаблон("Строка %1, Колонка %2: %3", Строка, Колонка, Значение));

КонецЦикла;

КонецЦикла;

// Закрываем книгу без сохранения

Книга.Close(Ложь);

Excel.Quit();

Исключение

Сообщить("Ошибка: " + ОписаниеОшибки());

КонецПопытки;

Ключевые моменты:

  • 🔧 Требуется установленный Microsoft Excel (не работает на сервере без GUI).
  • 🔧 Медленнее, чем специализированные библиотеки, но гибче.
  • 🔧 Можно читать формулы, форматы ячеек и даже диаграммы.
⚠️ Внимание: При работе с COM-объектами всегда оборачивайте код в Попытка...Исключение. Если Excel закроется некорректно (например, из-за ошибки), процесс EXCEL.EXE останется висеть в диспетчере задач и заблокирует файл.

Убедиться, что на компьютере установлен Microsoft Excel (версия не ниже 2007)

Проверить права доступа к файлу (нет блокировки антивирусом)

Отключить видимость Excel для ускорения (Excel.Visible = Ложь)

Обработать исключения в коде (Попытка...Исключение)

Закрыть книгу и освободить COM-объект (Книга.Close(), Excel.Quit())

-->

4. Использование библиотеки OneScript.Excel (рекомендуемый способ)

Для кросс-платформенной работы (включая сервер под Linux) оптимально использовать библиотеку OneScript.Excel. Она не требует установленного Excel и работает напрямую с файлами .xls/.xlsx через EPPlus (для .xlsx) и NPOI (для .xls).

Установка и пример кода:

  1. Скачайте библиотеку с GitHub (пакет OneScript.Excel).
  2. Подключите её в 1С через ПодключитьВнешнююКомпоненту().
  3. Используйте следующий код для чтения данных:
    ПодключитьВнешнююКомпоненту("C:\path\to\OneScript.Excel.dll");
    

    Excel = Новый ExcelПриложение();

    // Открываем файл

    Документ = Excel.ОткрытьДокумент("C:\temp\data.xlsx");

    Лист = Документ.Листы[0];

    // Читаем диапазон A1:C10

    Данные = Лист.ПолучитьДиапазон("A1:C10").Значения;

    // Выводим данные в таблицу значений

    Таблица = Новый ТаблицаЗначений;

    Для Каждая Строка Из Данные Цикл

    НоваяСтрока = Таблица.Добавить();

    НоваяСтрока.Колонка1 = Строка[0];

    НоваяСтрока.Колонка2 = Строка[1];

    НоваяСтрока.Колонка3 = Строка[2];

    КонецЦикла;

Преимущества OneScript.Excel:

  • ⚡ Работает на сервере без установленного Excel.
  • ⚡ Поддерживает .xlsx (через EPPlus) и .xls (через NPOI).
  • ⚡ Быстрее COM-объекта в 3–5 раз при больших объёмах данных.
💡

Если вам нужно прочитать только первую строку Excel для определения структуры данных, используйте метод Лист.ПолучитьДиапазон("1:1") — это ускорит обработку крупных файлов.

5. Чтение Excel как XML (для форматов .xlsx)

Файлы .xlsx представляют собой ZIP-архив с XML-файлами внутри. Можно распаковать архив и прочитать данные напрямую через XDTO или DOM. Этот метод сложнее в реализации, но не требует внешних библиотек и работает на любой платформе.

Алгоритм:

  1. Переименуйте файл data.xlsx в data.zip и распакуйте его.
  2. Найдите файл xl/worksheets/sheet1.xml (первый лист).
  3. Прочитайте XML с помощью ЧтениеXML:
    Чтение = Новый ЧтениеXML;
    

    Чтение.ОткрытьФайл("C:\temp\sheet1.xml");

    Таблица = Новый ТаблицаЗначений;

    ТекущаяСтрока = Таблица.Добавить();

    // Парсим ячейки (упрощённо)

    Пока Чтение.Прочитать() Цикл

    Если Чтение.Имя = "c" Тогда // Ячейка

    Значение = Чтение.ПолучитьАтрибут("v");

    ТекущаяСтрока.Добавить(Значение);

    КонецЕсли;

    КонецЦикла;

Ограничения метода:

  • 🛑 Сложно обрабатывать объединённые ячейки и формулы.
  • 🛑 Требует знания структуры XML-схемы .xlsx.
  • 🛑 Медленнее специализированных библиотек.

6. Типичные ошибки и их решения

Даже при правильной настройке импорта пользователи сталкиваются с ошибками. Рассмотрим самые частые:

Ошибка Причина Решение
Ошибка при открытии файла: неверный формат Файл повреждён или сохранён в несовместимой версии Excel. Сохраните файл в формате Excel 97-2003 (.xls) или Excel 2007 (.xlsx) без макросов.
Не удалось создать COM-объект Не установлен Microsoft Excel или нет прав доступа. Установите Excel или используйте OneScript.Excel.
Дата в формате 44197 вместо 01.01.2021 Excel хранит даты как числа (количество дней с 1900 года). Используйте функцию Дата(1899, 12, 30) + ЧислоДней для преобразования.
Тип не совпадает: строка вместо числа В Excel ячейка отформатирована как текст, а в 1С ожидается число. Добавьте проверку типов: Если ТипЗнч(Значение) = Тип("Строка") Тогда Значение = Число(Значение);

Если ошибка не типична, проверьте:

  • 🔍 Кодировку файла: Excel может сохранять данные в UTF-8 или Windows-1251. В 1С используйте Текст.ПреобразоватьКодировку().
  • 🔍 Разделители: В .csv часто путают запятую и точку с запятой как разделители.
  • 🔍 Пустые ячейки: В 1С они могут интерпретироваться как NULL или "" — уточните ожидаемый тип.
💡

Всегда тестируйте импорт на копии рабочей базы! Ошибки при загрузке (например, дублирование ключей) могут нарушить целостность данных.

7. Оптимизация производительности при загрузке больших файлов

Если файл Excel содержит десятки тысяч строк, стандартные методы могут работать слишком долго. Вот как ускорить процесс:

Для COM-объекта:

  • 🚀 Отключите обновление экрана: Excel.ScreenUpdating = Ложь;
  • 🚀 Читайте данные пакетами (например, по 1000 строк), а не построчно.
  • 🚀 Используйте UsedRange для определения реального диапазона данных:
Диапазон = Лист.UsedRange;

Данные = Диапазон.Value; // Массив со всеми данными

Для OneScript.Excel:

  • 🚀 Читайте только нужные колонки: Лист.ПолучитьДиапазон("A:C") вместо всего листа.
  • 🚀 Отключите проверку формул: Excel.ИгнорироватьФормулы = Истина;

Общие советы:

  • 📊 Предварительно разбейте большой файл на несколько меньших (например, по 20 000 строк).
  • 📊 Загружайте данные в временную таблицу 1С, а затем обрабатывайте её пакетами.
  • 📊 Используйте фоновые задания для импорта, чтобы не блокировать интерфейс.

8. Альтернативные форматы: почему иногда лучше использовать .csv

Если задача — просто перенести табличные данные без форматирования, рассмотрите возможность конвертации Excel в .csv. Этот формат:

  • ✅ Легче и быстрее читается (нет бинарных данных).
  • ✅ Поддерживается всеми версиями 1С без дополнительных библиотек.
  • ✅ Меньше риск ошибок с типами данных (все значения — строки).

Пример чтения .csv в 1С:

Текст = Новый ЧтениеТекста;

Текст.ОткрытьФайл("C:\temp\data.csv");

Таблица = Новый ТаблицаЗначений;

Пока Текст.ПрочитатьСтроку() Цикл

СтрокаДанных = РазложитьСтрокуПоРазделителю(Текст.ТекущаяСтрока, ";");

НоваяСтрока = Таблица.Добавить();

НоваяСтрока.Колонка1 = СтрокаДанных[0];

НоваяСтрока.Колонка2 = СтрокаДанных[1];

КонецЦикла;

Обратите внимание на:

  • 📌 Разделитель: в Excel при сохранении в .csv можно выбрать запятую (,) или точку с запятой (;). В 1С используйте ту же настройку.
  • 📌 Кодировку: сохраняйте .csv в UTF-8 или Windows-1251 (в зависимости от региональных настроек 1С).
  • 📌 Экранирование: если в данных есть разделители (например, ";" внутри ячейки), Excel обернёт её в кавычки. Учитывайте это при разборе.
Как сохранить Excel в CSV без потери данных?

1. Откройте файл в Excel.

2. Выделите лист с данными.

3. Перейдите в Файл → Сохранить как → CSV (разделители - запятые) (*.csv).

4. В появившемся окне выберите "Текущий лист" и нажмите Сохранить.

5. Если появится предупреждение о несовместимости форматов, подтвердите сохранение.

FAQ: Ответы на частые вопросы

Можно ли прочитать Excel на сервере 1С под Linux?

Да, но только с помощью библиотек вроде OneScript.Excel или через разбор .xlsx как XML. COM-объект Microsoft Excel на Linux не работает.

Почему при загрузке даты сбиваются на 4 года (например, 2021 становится 2017)?

Это известная проблема с летоисчислением в Excel: он считает 1900 год високосным (что неверно). В 1С используйте корректировку:

Если Значение > 59 Тогда // Даты в Excel до 01.03.1900 имеют смещение

Значение = Значение - 2;

КонецЕсли;

ДатаExcel = Дата(1899, 12, 30) + Значение;

Как загрузить данные из Excel в документ 1С (например, "Поступление товаров")?

Используйте следующий алгоритм:

  1. Прочитайте данные из Excel в ТаблицаЗначений.
  2. Создайте новый документ: Док = Документы.ПоступлениеТоваров.СоздатьДокумент();
  3. Заполните реквизиты документа (дату, контрагента и т.д.).
  4. Перенесите данные из таблицы в табличную часть документа:
    Для Каждая Строка Из Таблица Цикл
    

    НоваяСтрока = Док.Товары.Добавить();

    НоваяСтрока.Номенклатура = Строка.Номенклатура;

    НоваяСтрока.Количество = Строка.Количество;

    КонецЦикла;

  5. Запишите документ: Док.Записать();

Какая максимальная скорость загрузки Excel в 1С?

Производительность зависит от метода:

  • COM-объект: ~500–1000 строк/сек (зависит от версии Excel).
  • OneScript.Excel: ~2000–5000 строк/сек.
  • Чтение .csv: ~10 000–20 000 строк/сек.

Для ускорения отключите визуализацию (Excel.Visible = Ложь), читайте данные пакетами и используйте фоновые задания.

Можно ли автоматически обновлять данные в 1С при изменении Excel-файла?

Да, для этого настройте регламентное задание в 1С:

  1. Создайте обработку, которая проверяет дату изменения файла Excel.
  2. Если файл изменился, запустите процедуру импорта.
  3. Настройте выполнение задания по расписанию (например, раз в час).

Альтернатива — использовать файловый триггер (на Windows) или cron (на Linux), который будет запускать 1С с параметрами для импорта.