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

В этой статье мы разберём 5 рабочих способов чтения Excel в 1С — от простейших (доступных даже пользователям без навыков программирования) до продвинутых (с использованием COM-объектов и ADODB). Особое внимание уделим типичным ошибкам, таким как несовпадение типов данных или кодировок, а также нюансам работы с большими файлами (10 000+ строк). Все примеры адаптированы для актуальных версий платформы 1С:Предприятие 8.3.22+, но большинство методов будут работать и в более ранних релизах.

1. Ручное чтение через "Универсальный обмен данными" (без программирования)

Самый простой способ загрузить данные из Excel в 1С — использовать встроенную обработку УниверсальныйОбменДанными.epf. Она поставляется вместе с платформой и позволяет импортировать таблицы без написания кода. Подходит для одноразовых операций или небольших файлов (до 5 000 строк).

Чтобы воспользоваться этим методом:

  • 📁 Откройте 1С в режиме "Предприятие" и перейдите в меню Файл → Открыть.
  • 🔍 Выберите файл обработки УниверсальныйОбменДанными.epf (обычно находится в каталоге установки 1С, например, C:\Program Files\1cv8\8.3.22.1854\tmplts\1c\UniversalExchange).
  • 📊 В открывшемся окне нажмите Загрузить данные и укажите путь к вашему .xlsx файлу.
  • ⚙️ Настройте соответствие колонок Excel полям 1С (например, колонка "Артикул" → поле "Код" в справочнике "Номенклатура").
⚠️ Внимание: Обработка УниверсальныйОбменДанными.epf не поддерживает формулы Excel. Если в ячейках есть вычисления (например, =СУММ(A1:B1)), они будут проигнорированы — загружаются только конечные значения.

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

  • ✅ Не требует знаний программирования.
  • ✅ Подходит для разовых операций.
  • ✅ Работает в любой конфигурации 1С (УТ, БП, ЗУП и др.).

Недостатки:

  • ❌ Медленная обработка больших файлов (от 10 000 строк).
  • ❌ Нет возможности предварительной обработки данных (например, очистки пустых строк).
  • ❌ Ограниченная поддержка форматов: только .xls и .xlsx (не работает с .csv или .ods).
📊 Как часто вам нужно загружать данные из Excel в 1С?
Ежедневно
Несколько раз в неделю
Раз в месяц
Реже
Никогда

2. Использование внешних обработок (например, "Загрузка из Excel")

Если встроенная обработка не подходит, можно воспользоваться готовыми решениями от партнёров 1С. Наиболее популярные:

  • 🔹 "Загрузка из Excel" (от фирмы "1С-Рарус") — платная обработка с расширенными настройками.
  • 🔹 "Универсальный импорт из Excel" (бесплатная версия доступна на Инфостарте).
  • 🔹 "ExcelImport" — обработка с открытым кодом, поддерживает шаблоны загрузки.

Пример работы с обработкой "Загрузка из Excel":

  1. Скачайте и установите обработку (файл .epf или .erf).
  2. Откройте её в 1С через Файл → Открыть.
  3. Выберите файл Excel и укажите:
    • 📋 Лист для импорта (если в файле несколько вкладок).
    • 🔄 Начиная с какой строки начинаются данные (обычно со 2-й, если 1-я строка — заголовки).
    • 🔗 Соответствие колонок полям 1С (можно сохранить шаблон для повторного использования).
  • Запустите загрузку и проверьте результаты.
  • Обработка Стоимость Поддержка больших файлов Особенности
    "Загрузка из Excel" (1С-Рарус) Платная (~3 000 руб.) До 50 000 строк Гибкие настройки, поддержка шаблонов
    "Универсальный импорт из Excel" Бесплатно До 10 000 строк Простой интерфейс, подходит для новичков
    "ExcelImport" Бесплатно (открытый код) До 100 000 строк* Требует доработки под специфические задачи

    * При большом объёме данных возможны зависания — рекомендуется разбивать файл на части.

    ⚠️ Внимание: Перед использованием внешних обработок проверьте их совместимость с вашей версией 1С. Некоторые решения могут не работать в облачных версиях (1С:Fresh) или на Linux-серверах.

    Удалите объединённые ячейки (они могут вызвать ошибки)

    Проверьте, что в колонках нет пустых строк внутри данных

    Преобразуйте формулы в значения (выделите ячейки → Ctrl+C → ПКМ → "Значения")

    Сохраните файл в формате .xlsx (не .xls для больших файлов)

    -->

    3. Чтение Excel через COM-объект (для разработчиков)

    Если вам нужно автоматизировать загрузку данных или интегрировать её в бизнес-процессы, можно использовать COM-объект Excel.Application. Этот метод требует знаний встроенного языка 1С и работает только на Windows (не поддерживается в Linux или веб-клиенте).

    Пример кода для чтения данных из Excel:

    Процедура ЧтениеExcelЧерезCOM()
    

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

    РабочаяКнига = Excel.Workbooks.Open("C:\путь\к\файлу.xlsx");

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

    // Чтение данных с 1-й строки, начиная со 2-го ряда (пропускаем заголовки)

    Строка = 2;

    Пока Лист.Cells(Строка, 1).Value <> Неопределено Цикл

    Сообщить(Лист.Cells(Строка, 1).Value); // Вывод значения из 1-й колонки

    Строка = Строка + 1;

    КонецЦикла;

    РабочаяКнига.Close(False);

    Excel.Quit();

    КонецПроцедуры

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

    • 🔧 Полный контроль над процессом чтения (можно обрабатывать ячейки по условию, преобразовывать данные на лету).
    • 📈 Высокая скорость работы по сравнению с ручным импортом.
    • 🖥️ Работает только на Windows (требует установленного Microsoft Excel или Excel Viewer).
    ⚠️ Внимание: При работе с COM-объектами 1С может "подвисать", если не корректно закрыть экземпляр Excel. Всегда используйте Excel.Quit() и очищайте память с помощью Excel = Неопределено.
    Что делать, если COM-объект не создаётся?

    Если при выполнении кода Новый COMОбъект("Excel.Application") возникает ошибка, проверьте:

    1. Установлен ли Microsoft Excel на компьютере (или Excel Viewer).

    2. Запущена ли 1С с правами администратора (иногда требуется для доступа к COM).

    3. Не блокирует ли антивирус создание COM-объектов (добавьте 1С в исключения).

    4. Для 64-битной 1С требуется 64-битный Excel (и наоборот).

    4. Чтение через ADODB (альтернатива COM для больших файлов)

    Если файл Excel очень большой (100 000+ строк), использование ADODB может быть эффективнее, чем COM. Этот метод также работает только на Windows, но позволяет читать данные как из базы, что ускоряет обработку.

    Пример кода для подключения к Excel через ADODB:

    Процедура ЧтениеExcelЧерезADODB()
    

    Соединение = Новый COMОбъект("ADODB.Connection");

    Запрос = Новый COMОбъект("ADODB.Recordset");

    // Строка подключения для Excel 2007+ (.xlsx)

    СтрокаПодключения = "Provider=Microsoft.ACE.OLEDB.12.0;" +

    "Data Source=C:\путь\к\файлу.xlsx;" +

    "Extended Properties='Excel 12.0 Xml;HDR=YES';";

    Соединение.Open(СтрокаПодключения);

    Запрос.Open("SELECT * FROM [Лист1$]", Соединение);

    Пока Не Запрос.EOF Цикл

    Сообщить(Запрос.Fields("Column1").Value); // Замените на имя вашей колонки

    Запрос.MoveNext();

    КонецЦикла;

    Запрос.Close();

    Соединение.Close();

    КонецПроцедуры

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

    • 🔑 Требуется установленный драйвер Microsoft Access Database Engine (скачать с сайта Microsoft).
    • 📊 Параметр HDR=YES указывает, что первая строка содержит заголовки (если нет — используйте HDR=NO).
    • 🚀 Скорость чтения в 2-3 раза выше, чем через COM, для больших файлов.
    Метод Скорость Макс. размер файла Требуемые компоненты
    COM-объект Средняя До 50 000 строк Microsoft Excel
    ADODB Высокая 100 000+ строк Microsoft Access Database Engine
    Универсальный обмен Низкая До 5 000 строк Нет
    💡

    Если при подключении через ADODB возникает ошибка "Provider cannot be found", скачайте и установите драйвер с официального сайта Microsoft: "Microsoft Access Database Engine 2016 Redistributable". Выбирайте версию (32- или 64-битную) в соответствии с разрядностью вашей 1С.

    5. Чтение Excel как XML (для кросс-платформенных решений)

    Если вам нужно решение, которое будет работать и на Linux, и в веб-клиенте, можно рассматривать Excel-файл как XML-архив. Формат .xlsx — это ZIP-архив, содержащий XML-файлы с данными. Такой подход сложнее в реализации, но универсален.

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

    1. Переименуйте файл .xlsx в .zip и распакуйте его.
    2. Найдите файл xl/worksheets/sheet1.xml (для первого листа).
    3. Используйте встроенные средства 1С для чтения XML (ЧтениеXML).

    Пример кода для чтения XML:

    Процедура ЧтениеExcelКакXML()
    

    ЧтениеXML = Новый ЧтениеXML;

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

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

    Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда

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

    Значение = ЧтениеXML.ПолучитьАтрибут("r"); // Адрес ячейки (например, A1)

    Сообщить(Значение);

    КонецЕсли;

    КонецЕсли;

    КонецЦикла;

    ЧтениеXML.Закрыть();

    КонецПроцедуры

    Плюсы метода:

    • ✅ Работает на любой платформе (Windows, Linux, macOS).
    • ✅ Не требует дополнительных компонентов (только стандартные средства 1С).

    Минусы:

    • ❌ Сложная структура XML — требуется глубокое понимание формата.
    • ❌ Медленная обработка из-за большого объёма XML-тегов.
    • ❌ Не поддерживает формулы и некоторые форматы ячеек.
    💡

    Чтение Excel как XML — единственный кросс-платформенный метод, но он требует значительных доработок для реальных задач. Рекомендуется использовать только если другие способы недоступны (например, в Linux-серверных решениях).

    6. Автоматизация через внешние сервисы (REST API)

    Для облачных решений (например, 1С:Fresh) или интеграции с другими системами можно использовать внешние API, которые преобразуют Excel в JSON или CSV. Популярные сервисы:

    • 🌐 Google Sheets API — если файл загружен в Google Диск.
    • 🌐 Microsoft Graph API — для файлов в OneDrive/SharePoint.
    • 🌐 Собственный микросервис на Python/Node.js, который парсит Excel и отдаёт данные в 1С по HTTP.

    Пример работы с Google Sheets API:

    1. Загрузите файл Excel в Google Диск.
    2. Создайте проект в Google Cloud Console и включите Google Sheets API.
    3. Используйте в 1С HTTPСоединение для запроса данных:
    Процедура ЧтениеИзGoogleSheets()
    

    HTTP = Новый HTTPСоединение("www.googleapis.com", 443, "", "", 30);

    Запрос = Новый HTTPЗапрос("/v4/spreadsheets/ID_ДОКУМЕНТА/values/Лист1!A1:D100");

    Запрос.УстановитьЗаголовок("Authorization", "Bearer ВАШ_TOKEN");

    Ответ = HTTP.Получить(Запрос);

    Данные = JSON.Прочитать(Ответ.ПолучитьТекст());

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

    Сообщить(Строка[0]); // Первая колонка

    КонецЦикла;

    КонецПроцедуры

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

    • 🌍 Работает в любых конфигурациях, включая облачные.
    • 🔄 Легко интегрируется с другими системами.
    • 📊 Поддерживает реальное время (можно настроить вебхуки для обновлений).
    ⚠️ Внимание: При использовании внешних API учитывайте ограничения на количество запросов (например, в Google Sheets API бесплатный тариф ограничен 100 запросами в минуту). Для производственных систем может потребоваться оплачиваемый тариф.

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

    При чтении Excel в 1С часто возникают ошибки, связанные с несовпадением форматов данных или особенностями файлов. Рассмотрим самые распространённые:

    Ошибка Причина Решение
    Ошибка при создании COM-объекта Не установлен Excel или отсутствуют права Установите Excel Viewer или запустите 1С от имени администратора
    Тип не совпадает (строка вместо числа) Excel хранит все данные как строки, а 1С ожидает число Используйте Число(Значение) для преобразования
    Файл повреждён или имеет неверный формат Файл сохранён в старом формате (.xls) или повреждён Сохраните файл в формате .xlsx (Excel 2007+)
    Ошибка доступа к файлу Файл открыт в другом приложении Закройте Excel и повторно запустите загрузку

    Критическая информация: Если при чтении через ADODB вы получаете ошибку "External table is not in the expected format", проверьте, что строка подключения соответствует версии Excel. Для файлов .xls (Excel 97-2003) используйте провайдер Microsoft.Jet.OLEDB.4.0, а для .xlsxMicrosoft.ACE.OLEDB.12.0.

    Другие частые проблемы:

    • 🗃️ Объединённые ячейки: 1С не может корректно их обработать — разъедините ячейки перед загрузкой.
    • 📅 Даты в Excel: Часто считываются как строки. Используйте Дата(Значение) для преобразования.
    • 💾 Кодировка: Если в данных есть кириллица, убедитесь, что файл сохранён в UTF-8.

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

    Можно ли загрузить данные из Excel в 1С на Mac?

    На macOS методы с использованием COM-объектов (Excel.Application или ADODB) не работают. Альтернативы:

    • Используйте чтение Excel как XML (см. раздел 5).
    • Преобразуйте файл в CSV и загружайте через ЧтениеТекста.
    • Настройте обмен через REST API (например, Google Sheets).

    Для автоматизации на Mac часто используют внешние скрипты на Python, которые парсят Excel и передают данные в 1С по HTTP.

    Как загрузить данные из Excel в справочник "Номенклатура" с созданием новых элементов?

    Пример кода для создания элементов справочника на основе данных из Excel (через COM):

    Процедура ЗагрузкаНоменклатурыИзExcel()
    

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

    РабочаяКнига = Excel.Workbooks.Open("C:\номенклатура.xlsx");

    Лист = РабочаяКнига.Worksheets(1);

    Строка = 2; // Начинаем со 2-й строки

    Пока Лист.Cells(Строка, 1).Value <> Неопределено Цикл

    Артикул = Лист.Cells(Строка, 1).Value;

    Наименование = Лист.Cells(Строка, 2).Value;

    Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул);

    Если Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда

    Номенклатура = Справочники.Номенклатура.СоздатьЭлемент();

    Номенклатура.Артикул = Артикул;

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

    Номенклатура.Записать();

    КонецЕсли;

    Строка = Строка + 1;

    КонецЦикла;

    РабочаяКнига.Close(False);

    Excel.Quit();

    КонецПроцедуры

    В этом примере код ищет номенклатуру по артикулу и создаёт новый элемент, если не находит.

    Почему при загрузке из Excel в 1С русские буквы отображаются как "?????"?

    Проблема связана с неверной кодировкой. Решения:

    1. Сохраните файл Excel в формате CSV (разделители - запятые) и укажите кодировку UTF-8.
    2. При чтении через ADODB добавьте в строку подключения параметр Extended Properties="Excel 12.0;HDR=YES;IMEX=1" (IMEX=1 включает режим импорта).
    3. Если используете COM, проверьте региональные настройки Windows (должны совпадать с кодировкой файла).

    Для диагностики откройте файл в Блокноте — если вместо русского текста видны знаки "????", проблема точно в кодировке.

    Как автоматизировать ежедневную загрузку данных из Excel в 1С?

    Для регулярной загрузки настройте регламентное задание:

    1. Создайте обработку с кодом загрузки (например, через COM или ADODB).
    2. В конфигураторе перейдите в Общие → Регламентные задания.
    3. Создайте новое задание, укажите расписание (например, ежедневно в 8:00) и свяжите его с вашей обработкой.
    4. Настройте права доступа для пользователя, от имени которого будет выполняться задание.

    Для надёжности добавьте в код обработку ошибок и отправку уведомлений (например, через Почта.ОтправитьПисьмо()) в случае сбоя.

    Можно ли загрузить данные из Excel в документ "Поступление товаров"?

    Да, для этого нужно:

    1. Считать данные из Excel (любым из описанных методов).
    2. Создать новый документ ПоступлениеТоваров:
    Док = Документы.ПоступлениеТоваров.СоздатьДокумент();
    

    Док.Дата = ТекущаяДата();

    Док.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("Поставщик");

    1. Добавить строки в табличную часть Товары:
    Для Каждого СтрокаДанных Из ДанныеExcel Цикл
    

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

    НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СтрокаДанных.Наименование);

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

    НоваяСтрока.Цена = СтрокаДанных.Цена;

    КонецЦикла;

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

    Пример полной обработки можно найти на Инфостарте или в базе решений 1С.