Excel-таблица в 1С 8.3: от просмотра до загрузки в базу

· 9 мин

Содержание

Открыть XLS файл в 1С 8.3 проще всего через главное меню: Файл → Открыть (или Ctrl+O), в списке типов выбрать «Табличный документ» и указать файл .xls или .xlsx. Платформа покажет таблицу в своём редакторе. Excel на компьютере для этого не нужен.

Частое заблуждение: «раз файл открылся в 1С, данные уже в базе». Нет. Окно просмотра — просто табличный документ. Чтобы строки попали в справочник или документ, нужна загрузка: штатная команда конфигурации, внешняя обработка или свой код. Способ зависит от задачи: посмотреть таблицу, загрузить товары в документ или встроить импорт в обработку.

Просмотр XLS средствами платформы: меню «Файл»

Платформа 1С:Предприятие 8.3 умеет читать форматы xls, xlsx и ods в свой табличный документ (формат mxl). Способ одинаков для БП 3.0, ЗУП 3.1, УТ 11 и других конфигураций: это функция платформы, а не прикладного решения.

Порядок действий

  1. Нажмите кнопку главного меню (три полоски в левом верхнем углу окна).
  2. Выберите Файл → Открыть. Быстрее — Ctrl+O.
  3. В диалоге выбора файла укажите тип «Табличный документ» или «Все файлы».
  4. Выберите файл и нажмите «Открыть».

Таблица откроется в новой вкладке. Её можно отредактировать, распечатать и сохранить как mxl, xlsx или pdf через тот же пункт Файл → Сохранить как.

Если меню «Файл» не видно, проверьте права: у пользователя может быть отключено интерактивное открытие внешних файлов. Это настраивается в профиле групп доступа.

Что теряется при открытии

  • 📉 Формулы. 1С читает результат вычисления, а не саму формулу.
  • 🎨 Сложное оформление. Условное форматирование, диаграммы, сводные таблицы не переносятся.
  • 🔒 Защищённые файлы. Книгу с паролем на открытие платформа не прочитает. Снимите пароль в Excel.

Загрузка из Excel штатными командами конфигурации

В типовых конфигурациях на БСП (БП 3.0, УТ 11, КА 2, ERP) есть встроенный механизм «Загрузка данных из файла». Он открывает XLS, показывает таблицу и предлагает сопоставить колонки с реквизитами.

Где искать команду

Куда грузимГде кнопка
Номенклатура, контрагентыСписок справочника → кнопка «Загрузить» или меню «Ещё»
Товары в документе поступления или реализацииТабличная часть «Товары» → кнопка «Загрузить»
Прайс-лист в установку ценТабличная часть документа → «Загрузить»

Набор кнопок зависит от релиза конфигурации. Если кнопки нет в командной панели, откройте меню «Ещё» той же табличной части.

Как проходит загрузка

  1. Нажмите «Загрузить» и выберите файл .xls или .xlsx. Другой вариант — скопировать строки в Excel и вставить их через Ctrl+V в поле на форме загрузки.
  2. Укажите, какая колонка файла чему соответствует: артикул, наименование, количество, цена.
  3. Программа ищет номенклатуру по выбранному ключу. Ненайденные строки подсвечиваются — их можно сопоставить вручную или создать новые элементы.
  4. Подтвердите загрузку. Строки попадут в табличную часть, документ останется непроведённым.
Сопоставление полей
Артикул→Номенклатура (поиск по артикулу)
Наименование→Номенклатура (если артикула нет)
Кол-во→Количество
Цена без НДС→Цена
Ставка→Ставка НДС

Ключ поиска выбирайте один и надёжный. Поиск по наименованию ломается на лишнем пробеле или кавычке: «Бумага А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 не поддерживают вовсе.

Какой способ выбрать: сравнение

СпособНужен ExcelLinux-серверСкоростьКогда брать
Файл → ОткрытьНет——Посмотреть, распечатать, пересохранить
Штатная «Загрузить»НетДаСредняяТовары в документ, справочники в типовой
ТабличныйДокумент.ПрочитатьНетДаХорошаяСвоя обработка, регламентное задание
ADO (ACE OLEDB)Нет, нужен провайдерНетВысокаяБольшие однородные таблицы под Windows
Разбор ZIPНетДаВысокаяОчень большие .xlsx
COM ExcelДаНетНизкаяНужны формулы, макросы, запись в книгу
Что нужно сделать с файлом Excel?

Ошибки при открытии XLS в 1С и что с ними делать

Диагностика: выберите симптом

Ещё две ловушки, которые не дают ошибки, но портят данные:

  • 🔗 Объединённые ячейки. Значение хранится только в левой верхней ячейке, остальные пустые. Шапки с объединением удалите до загрузки.
  • 👁 Скрытые строки и листы. Код их читает наравне с видимыми. В выгрузках из других программ на скрытом листе часто лежат служебные данные.

Как ускорить массовую загрузку из Excel

На файле в 500 строк разница между способами незаметна. На 50 000 строк неудачный код работает десятки минут вместо одной-двух.

Читайте диапазон целиком, а не по ячейке

Через COM каждое обращение Cells(Строка, Колонка) — отдельный межпроцессный вызов. Таблица 10 000 × 5 — это 50 000 вызовов. Забирайте весь диапазон одним запросом:

Данные = Лист.UsedRange.Value;   // COMSafeArray
Для НомерСтроки = 2 По ЧислоСтрок Цикл
    Артикул = Данные.ПолучитьЗначение(НомерСтроки, 1);
    Количество = Данные.ПолучитьЗначение(НомерСтроки, 3);
КонецЦикла;

Индексы массива из Excel начинаются с 1, первый индекс — строка, второй — колонка. Код рассчитан на таблицу, которая начинается с ячейки A1.

Ищите номенклатуру одним запросом

Типичная причина медленной загрузки — НайтиПоРеквизиту в цикле по каждой строке. Лучше:

  1. Соберите все артикулы из файла в таблицу значений.
  2. Одним запросом найдите элементы справочника по списку артикулов.
  3. Сопоставьте результат через соответствие «артикул → ссылка».

Один запрос на 10 000 артикулов выполняется быстрее, чем 10 000 отдельных поисков.

Пишите порциями

  • 📦 Записывайте объекты пачками по 500–1000 штук, каждую пачку — в своей транзакции. Одна транзакция на весь файл держит блокировки и при сбое на последней строке откатывает всё.
  • 🖥 Выполняйте загрузку на сервере, а не на клиенте. Передавайте на сервер файл, а не построчные вызовы.
  • 🕓 Большие загрузки запускайте фоновым заданием, чтобы не держать форму открытой.
  • 🚫 Для COM добавьте Excel.ScreenUpdating = Ложь и не делайте Excel видимым.

Перед загрузкой в рабочую базу прогоните файл на копии. Посчитайте строки в файле и созданные элементы. Расхождение сразу покажет, где сопоставление не сработало.

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

Можно ли открыть XLS в 1С без установленного Excel?
Да. Меню Файл → Открыть и метод Прочитать табличного документа работают без Microsoft Office.
Как сохранить отчёт из 1С обратно в Excel?
Сформируйте отчёт, затем Файл → Сохранить как и выберите тип «Лист Excel». Доступны форматы xls и xlsx.
Чем отличается XLS от XLSX при загрузке в 1С?
Для платформы почти ничем: оба читаются в табличный документ. Разница появляется при разборе ZIP-архивом (только xlsx) и в строке подключения ADO.
Открывается ли XLS в веб-клиенте 1С?
Просмотр через меню работает. COM-способ в веб-клиенте недоступен, программную загрузку делайте на сервере.
Подойдёт ли файл в формате ODS из LibreOffice?
Да, платформа читает ods так же, как xlsx. Можно также пересохранить его в xlsx в самом LibreOffice.