Работа с данными из 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).
2. Использование внешних обработок (например, "Загрузка из Excel")
Если встроенная обработка не подходит, можно воспользоваться готовыми решениями от партнёров 1С. Наиболее популярные:
- 🔹 "Загрузка из Excel" (от фирмы "1С-Рарус") — платная обработка с расширенными настройками.
- 🔹 "Универсальный импорт из Excel" (бесплатная версия доступна на Инфостарте).
- 🔹 "ExcelImport" — обработка с открытым кодом, поддерживает шаблоны загрузки.
Пример работы с обработкой "Загрузка из Excel":
- Скачайте и установите обработку (файл
.epfили.erf). - Откройте её в 1С через
Файл → Открыть. - Выберите файл 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-файлы с данными. Такой подход сложнее в реализации, но универсален.
Алгоритм действий:
- Переименуйте файл
.xlsxв.zipи распакуйте его. - Найдите файл
xl/worksheets/sheet1.xml(для первого листа). - Используйте встроенные средства 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:
- Загрузите файл Excel в Google Диск.
- Создайте проект в Google Cloud Console и включите
Google Sheets API. - Используйте в 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, а для .xlsx — Microsoft.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С русские буквы отображаются как "?????"?
Проблема связана с неверной кодировкой. Решения:
- Сохраните файл Excel в формате
CSV (разделители - запятые)и укажите кодировкуUTF-8. - При чтении через ADODB добавьте в строку подключения параметр
Extended Properties="Excel 12.0;HDR=YES;IMEX=1"(IMEX=1 включает режим импорта). - Если используете COM, проверьте региональные настройки Windows (должны совпадать с кодировкой файла).
Для диагностики откройте файл в Блокноте — если вместо русского текста видны знаки "????", проблема точно в кодировке.
Как автоматизировать ежедневную загрузку данных из Excel в 1С?
Для регулярной загрузки настройте регламентное задание:
- Создайте обработку с кодом загрузки (например, через COM или ADODB).
- В конфигураторе перейдите в
Общие → Регламентные задания. - Создайте новое задание, укажите расписание (например, ежедневно в 8:00) и свяжите его с вашей обработкой.
- Настройте права доступа для пользователя, от имени которого будет выполняться задание.
Для надёжности добавьте в код обработку ошибок и отправку уведомлений (например, через Почта.ОтправитьПисьмо()) в случае сбоя.
Можно ли загрузить данные из Excel в документ "Поступление товаров"?
Да, для этого нужно:
- Считать данные из Excel (любым из описанных методов).
- Создать новый документ
ПоступлениеТоваров:
Док = Документы.ПоступлениеТоваров.СоздатьДокумент();
Док.Дата = ТекущаяДата();
Док.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("Поставщик");
- Добавить строки в табличную часть
Товары:
Для Каждого СтрокаДанных Из ДанныеExcel Цикл
НоваяСтрока = Док.Товары.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СтрокаДанных.Наименование);
НоваяСтрока.Количество = СтрокаДанных.Количество;
НоваяСтрока.Цена = СтрокаДанных.Цена;
КонецЦикла;
- Записать документ:
Док.Записать().
Пример полной обработки можно найти на Инфостарте или в базе решений 1С.