Excel-таблица в 1С 8.3: от просмотра до загрузки в базу
Содержание
Открыть XLS файл в 1С 8.3 проще всего через главное меню: Файл → Открыть (или Ctrl+O), в списке типов выбрать «Табличный документ» и указать файл .xls или .xlsx. Платформа покажет таблицу в своём редакторе. Excel на компьютере для этого не нужен.
Частое заблуждение: «раз файл открылся в 1С, данные уже в базе». Нет. Окно просмотра — просто табличный документ. Чтобы строки попали в справочник или документ, нужна загрузка: штатная команда конфигурации, внешняя обработка или свой код. Способ зависит от задачи: посмотреть таблицу, загрузить товары в документ или встроить импорт в обработку.
Просмотр XLS средствами платформы: меню «Файл»
Платформа 1С:Предприятие 8.3 умеет читать форматы xls, xlsx и ods в свой табличный документ (формат mxl). Способ одинаков для БП 3.0, ЗУП 3.1, УТ 11 и других конфигураций: это функция платформы, а не прикладного решения.
Порядок действий
- Нажмите кнопку главного меню (три полоски в левом верхнем углу окна).
- Выберите
Файл → Открыть. Быстрее —Ctrl+O. - В диалоге выбора файла укажите тип «Табличный документ» или «Все файлы».
- Выберите файл и нажмите «Открыть».
Таблица откроется в новой вкладке. Её можно отредактировать, распечатать и сохранить как mxl, xlsx или pdf через тот же пункт Файл → Сохранить как.
Если меню «Файл» не видно, проверьте права: у пользователя может быть отключено интерактивное открытие внешних файлов. Это настраивается в профиле групп доступа.
Что теряется при открытии
- 📉 Формулы. 1С читает результат вычисления, а не саму формулу.
- 🎨 Сложное оформление. Условное форматирование, диаграммы, сводные таблицы не переносятся.
- 🔒 Защищённые файлы. Книгу с паролем на открытие платформа не прочитает. Снимите пароль в Excel.
Загрузка из Excel штатными командами конфигурации
В типовых конфигурациях на БСП (БП 3.0, УТ 11, КА 2, ERP) есть встроенный механизм «Загрузка данных из файла». Он открывает XLS, показывает таблицу и предлагает сопоставить колонки с реквизитами.
Где искать команду
| Куда грузим | Где кнопка |
|---|---|
| Номенклатура, контрагенты | Список справочника → кнопка «Загрузить» или меню «Ещё» |
| Товары в документе поступления или реализации | Табличная часть «Товары» → кнопка «Загрузить» |
| Прайс-лист в установку цен | Табличная часть документа → «Загрузить» |
Набор кнопок зависит от релиза конфигурации. Если кнопки нет в командной панели, откройте меню «Ещё» той же табличной части.
Как проходит загрузка
- Нажмите «Загрузить» и выберите файл
.xlsили.xlsx. Другой вариант — скопировать строки в Excel и вставить их черезCtrl+Vв поле на форме загрузки. - Укажите, какая колонка файла чему соответствует: артикул, наименование, количество, цена.
- Программа ищет номенклатуру по выбранному ключу. Ненайденные строки подсвечиваются — их можно сопоставить вручную или создать новые элементы.
- Подтвердите загрузку. Строки попадут в табличную часть, документ останется непроведённым.
Ключ поиска выбирайте один и надёжный. Поиск по наименованию ломается на лишнем пробеле или кавычке: «Бумага А4» и «Бумага А4» — разные строки.
Внешние универсальные обработки
Для конфигураций без встроенной загрузки используют внешнюю обработку «Загрузка данных из табличного документа». Классическая версия написана под обычные формы. Для управляемых форм есть адаптированные варианты.
Обработка открывается через Файл → Открыть как файл .epf. Она умеет грузить в любой справочник, документ или регистр сведений. Перед загрузкой в рабочую базу сделайте резервную копию: массовая запись с ошибкой в сопоставлении колонок испортит сотни элементов за секунду.
Чтение XLS из кода без запуска Excel
Когда загрузку нужно встроить в свою обработку или регламентное задание, файл читают программно. Есть три пути, которым Excel не нужен.
Метод Прочитать табличного документа
Самый надёжный вариант для 8.3. Работает на сервере 1С, в том числе на Linux, без Microsoft Office.
&НаСервере
Процедура ЗагрузитьИзФайлаНаСервере(АдресФайла)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла);
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
ДвоичныеДанные.Записать(ИмяФайла);
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
Для НомерСтроки = 2 По ТабДок.ВысотаТаблицы Цикл
Стр = Формат(НомерСтроки, "ЧГ=0");
Артикул = СокрЛП(ТабДок.Область("R" + Стр + "C1").Текст);
Количество = СокрЛП(ТабДок.Область("R" + Стр + "C3").Текст);
Если ПустаяСтрока(Артикул) Тогда
Продолжить;
КонецЕсли;
// здесь поиск номенклатуры и запись строки
КонецЦикла;
УдалитьФайлы(ИмяФайла);
КонецПроцедуры
Строка 1 пропущена — в ней заголовки. Обратите внимание на расширение временного файла: оно должно совпадать с реальным форматом. Файл .xls, сохранённый с расширением .xlsx, не прочитается.
С клиента файл передают на сервер через ПоместитьФайлАсинх (платформа 8.3.18 и новее) или НачатьПомещениеФайла в более ранних версиях. Результат — адрес во временном хранилище, его и получает процедура выше.
ADO-подключение к книге как к базе данных
Провайдер Microsoft.ACE.OLEDB.12.0 позволяет выполнить SQL-запрос к листу Excel. Сам Excel не запускается, но провайдер (пакет Access Database Engine) должен стоять на компьютере, где выполняется код. Работает только под Windows.
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.Open("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + ПутьКФайлу
+ ";Extended Properties=""Excel 12.0 Xml;HDR=YES;IMEX=1""");
Набор = Соединение.Execute("SELECT * FROM [Лист1$]");
Пока Не Набор.EOF Цикл
Артикул = Набор.Fields(0).Value;
Количество = Набор.Fields(2).Value;
// обработка строки
Набор.MoveNext();
КонецЦикла;
Набор.Close();
Соединение.Close();
HDR=YES— первая строка считается заголовком.IMEX=1— смешанные колонки читаются как текст. Без него ADO по первым строкам решает, что колонка числовая, и превращает артикулы вроде00-0123в пустоту.- Для старого формата
.xlsв строке подключения пишутExcel 8.0вместоExcel 12.0 Xml.
Разбор XLSX как ZIP-архива
Файл .xlsx — это архив с XML внутри. Его можно распаковать через ЧтениеZipФайла и прочитать листы (xl/worksheets/sheet1.xml) и общие строки (xl/sharedStrings.xml) через ЧтениеXML. Способ кроссплатформенный и самый быстрый на больших файлах, но кода много: нужно самому собирать текст ячеек по индексам и переводить адреса вида C15 в номера колонок. Берите его, если метод Прочитать упирается в память на файлах в сотни тысяч строк. Для .xls (формат 97–2003) этот путь не подходит.
COM-соединение с Excel: классика с оговорками
Старый способ — управлять самим Excel через COM. Нужны Windows и установленный Microsoft Excel на той машине, где выполняется код: на клиенте при &НаКлиенте, на сервере 1С при &НаСервере.
Excel = Неопределено;
Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.DisplayAlerts = Ложь;
Книга = Excel.Workbooks.Open(ПутьКФайлу);
Лист = Книга.Worksheets(1);
ЧислоСтрок = Лист.UsedRange.Rows.Count;
Для НомерСтроки = 2 По ЧислоСтрок Цикл
Артикул = Лист.Cells(НомерСтроки, 1).Value;
Количество = Лист.Cells(НомерСтроки, 3).Value;
// обработка строки
КонецЦикла;
Книга.Close(Ложь);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
Если Excel <> Неопределено Тогда
Excel.Quit();
КонецЕсли;
Excel.Quit() вызывается в любом случае. Иначе после ошибки в диспетчере задач остаётся процесс EXCEL.EXE, который держит файл и память.
Excel на сервере 1С — плохая идея. Microsoft не поддерживает серверную автоматизацию Office: Excel может показать невидимое окно-диалог и подвесить сеанс. Плюс нужна настройка прав DCOM для пользователя службы 1С. На сервере используйте метод Прочитать табличного документа.
Веб-клиент и мобильный клиент COM не поддерживают вовсе.
Какой способ выбрать: сравнение
| Способ | Нужен Excel | Linux-сервер | Скорость | Когда брать |
|---|---|---|---|---|
Файл → Открыть | Нет | — | — | Посмотреть, распечатать, пересохранить |
| Штатная «Загрузить» | Нет | Да | Средняя | Товары в документ, справочники в типовой |
ТабличныйДокумент.Прочитать | Нет | Да | Хорошая | Своя обработка, регламентное задание |
| ADO (ACE OLEDB) | Нет, нужен провайдер | Нет | Высокая | Большие однородные таблицы под Windows |
| Разбор ZIP | Нет | Да | Высокая | Очень большие .xlsx |
| COM Excel | Да | Нет | Низкая | Нужны формулы, макросы, запись в книгу |
Файл → Открыть или Ctrl+O. Ничего программировать не нужно.Прочитать табличного документа на сервере. Работает без Office и на Linux.Ошибки при открытии XLS в 1С и что с ними делать
Прочитать табличного документа..xls. Откройте его в Excel и пересохраните как «Книга Excel (.xlsx)».EXCEL.EXE в диспетчере задач.Дата(1899, 12, 30) + Число * 86400. Например, 45658 — это 1 января 2025 года.00123 превратился в 123. Задайте колонке текстовый формат до заполнения или используйте IMEX=1 в ADO.Ещё две ловушки, которые не дают ошибки, но портят данные:
- 🔗 Объединённые ячейки. Значение хранится только в левой верхней ячейке, остальные пустые. Шапки с объединением удалите до загрузки.
- 👁 Скрытые строки и листы. Код их читает наравне с видимыми. В выгрузках из других программ на скрытом листе часто лежат служебные данные.
Как ускорить массовую загрузку из Excel
На файле в 500 строк разница между способами незаметна. На 50 000 строк неудачный код работает десятки минут вместо одной-двух.
Читайте диапазон целиком, а не по ячейке
Через COM каждое обращение Cells(Строка, Колонка) — отдельный межпроцессный вызов. Таблица 10 000 × 5 — это 50 000 вызовов. Забирайте весь диапазон одним запросом:
Данные = Лист.UsedRange.Value; // COMSafeArray
Для НомерСтроки = 2 По ЧислоСтрок Цикл
Артикул = Данные.ПолучитьЗначение(НомерСтроки, 1);
Количество = Данные.ПолучитьЗначение(НомерСтроки, 3);
КонецЦикла;
Индексы массива из Excel начинаются с 1, первый индекс — строка, второй — колонка. Код рассчитан на таблицу, которая начинается с ячейки A1.
Ищите номенклатуру одним запросом
Типичная причина медленной загрузки — НайтиПоРеквизиту в цикле по каждой строке. Лучше:
- Соберите все артикулы из файла в таблицу значений.
- Одним запросом найдите элементы справочника по списку артикулов.
- Сопоставьте результат через соответствие «артикул → ссылка».
Один запрос на 10 000 артикулов выполняется быстрее, чем 10 000 отдельных поисков.
Пишите порциями
- 📦 Записывайте объекты пачками по 500–1000 штук, каждую пачку — в своей транзакции. Одна транзакция на весь файл держит блокировки и при сбое на последней строке откатывает всё.
- 🖥 Выполняйте загрузку на сервере, а не на клиенте. Передавайте на сервер файл, а не построчные вызовы.
- 🕓 Большие загрузки запускайте фоновым заданием, чтобы не держать форму открытой.
- 🚫 Для COM добавьте
Excel.ScreenUpdating = Ложьи не делайте Excel видимым.
Перед загрузкой в рабочую базу прогоните файл на копии. Посчитайте строки в файле и созданные элементы. Расхождение сразу покажет, где сопоставление не сработало.
Частые вопросы
Можно ли открыть XLS в 1С без установленного Excel?
Файл → Открыть и метод Прочитать табличного документа работают без Microsoft Office.Как сохранить отчёт из 1С обратно в Excel?
Файл → Сохранить как и выберите тип «Лист Excel». Доступны форматы xls и xlsx.Чем отличается XLS от XLSX при загрузке в 1С?
xlsx) и в строке подключения ADO.Открывается ли XLS в веб-клиенте 1С?
Подойдёт ли файл в формате ODS из LibreOffice?
ods так же, как xlsx. Можно также пересохранить его в xlsx в самом LibreOffice.