Excel и 1С 8.3: подготовить файл, загрузить строки и выгрузить отчёт без потерь

· 10 мин

Содержание

Обработать Excel в 1С 8.3 можно тремя путями: штатной командой «Загрузить» в списке справочника или в табличной части документа, внешней обработкой загрузки из табличного документа или своим кодом через ТабличныйДокумент.Прочитать(). Обратная задача, выгрузка, решается проще: любой отчёт или список сохраняется в .xlsx через кнопку сохранения.

Почти все сбои при импорте рождаются не в 1С, а в самом файле: объединённые ячейки, числа текстом, артикулы без ведущих нулей. Поэтому начинаем с подготовки таблицы, а потом идём от штатных средств к коду.

Подготовка таблицы Excel к загрузке в 1С

1С читает лист как сетку ячеек. Всё, что человеку помогает читать отчёт, программе мешает.

Приведите файл к виду «одна строка — один объект»:

  • 📌 Одна строка шапки с понятными именами колонок: Артикул, Наименование, Количество, Цена. Без двухэтажных заголовков.
  • 🚫 Никаких объединённых ячеек. Выделите весь лист и снимите объединение. Пустые ячейки после этого заполните значением сверху.
  • 🧹 Без промежуточных итогов, пустых строк-разделителей и подписей «Итого» внизу.
  • 🔢 Числа — числами. Уберите пробелы-разделители тысяч, символ валюты, «шт.» в ячейке количества.
  • 🏷️ Коды и артикулы — текстом. Колонку с артикулом 00125 задайте форматом «Текстовый» до вставки данных, иначе Excel превратит его в 125.
  • 📅 Даты — в одном формате, лучше ДД.ММ.ГГГГ.
  • 👁️ Скрытые строки и столбцы раскройте или удалите: при чтении они никуда не исчезают.

Сохраните файл в формате .xlsx. Старый .xls вмещает не больше 65 536 строк на листе, у .xlsx предел — 1 048 576 строк.

Перед загрузкой большого прайса сделайте пробный файл на 10–20 строк. Ошибку сопоставления проще увидеть на десяти позициях, чем на трёх тысячах.

Отдельная ловушка — неразрывный пробел. Он приходит из выгрузок банков и интернет-магазинов, выглядит как обычный, но превращает число в текст. Найдите его в Excel через Ctrl+H: в поле «Найти» наберите Alt+0160 на цифровой клавиатуре, поле «Заменить» оставьте пустым.

Файл готов к загрузке в 1С
Выполнено: 0 / 6

Штатная загрузка Excel в 1С: справочники и документы

В типовых конфигурациях на БСП (1С:Бухгалтерия 3.0, 1С:Управление торговлей 11) есть общий механизм загрузки данных из файла. Он встроен в отдельные списки и табличные части, а не вынесен в общее меню.

Загрузка в справочник «Номенклатура»

В 1С:Бухгалтерии 3.0 откройте Справочники → Товары и услуги → Номенклатура. В командной панели списка есть команда Загрузить.

  1. Нажмите Загрузить. Откроется форма с пустой таблицей, колонки которой соответствуют реквизитам номенклатуры.
  2. Откройте Excel, выделите диапазон с данными без шапки и скопируйте его Ctrl+C.
  3. Вернитесь в 1С, встаньте в первую ячейку таблицы и вставьте Ctrl+V. Можно загрузить и сам файл кнопкой загрузки из файла в этой же форме.
  4. Нажмите Далее. Программа покажет, какие строки она нашла в базе, какие создаст заново, а какие не смогла распознать.
  5. Проверьте спорные строки и подтвердите загрузку.

Загрузка строк в документ

Приходный документ на 400 позиций вручную не набирают. В табличной части «Товары» документов поступления и реализации есть команда загрузки из файла: она работает так же, как в справочнике. Если кнопки не видно на панели, загляните в меню Ещё табличной части.

Документ при этом не проводится. Сначала проверьте цены, ставки НДС и счета учёта в строках, потом проводите.

Открыть Excel как табличный документ

Самый простой способ посмотреть файл, не выходя из 1С, — открыть его через главное меню (кнопка с тремя полосками) → Файл → Открыть. Файл .xlsx откроется в 1С как табличный документ. Оттуда удобно копировать диапазоны в формы загрузки, если Excel на компьютере не установлен.

Сопоставление колонок и поиск существующих элементов

Главный вопрос любой загрузки: как 1С поймёт, что строка «Бумага А4 Снегурочка» — это уже существующая позиция, а не новая. Ответ — по ключевому полю.

Ключ поискаКогда подходитРиск
АртикулСвой каталог с уникальными артикуламиПотеря ведущих нулей в Excel
ШтрихкодРозница, товары с маркировкой EANОдин товар — несколько штрихкодов
НаименованиеКороткий справочник без кодовЛишний пробел даёт дубль
ИНН (+КПП)КонтрагентыУ обособленных подразделений один ИНН
Код 1СПовторная загрузка ранее выгруженных данныхКоды разных баз не совпадают

Порядок такой: сначала решите, по какому полю ищем, потом проверьте это поле в Excel на дубли. В Excel это делает Главная → Условное форматирование → Правила выделения ячеек → Повторяющиеся значения.

Сопоставление полей
Артикул→Номенклатура.Артикул (поиск)
Наименование→Номенклатура.Наименование
Ед. изм.→Единица измерения (классификатор)
Ставка НДС→Ставка НДС (перечисление)
Цена→Цена в строке документа
Кол-во→Количество

Ссылочные колонки — единица измерения, ставка НДС, группа — сопоставляются с тем, что уже есть в базе. Если в файле «шт», а в классификаторе «шт.», строка повиснет как нераспознанная. Унифицируйте такие значения в Excel заменой до загрузки.

Загрузка справочника создаёт элементы сразу. Сделайте резервную копию базы перед первой массовой загрузкой — откатить тысячу лишних карточек вручную долго.

Для регулярных обменов, например ежедневного прайса поставщика, сохраните настройку сопоставления в обработке, если она это позволяет. Тогда на второй раз колонки встанут на места сами.

Внешние обработки и код: когда штатной загрузки не хватает

Штатная команда есть не у всех объектов. Остатки по счетам, цены по нескольким видам, свойства номенклатуры, файлы со сложной шапкой — здесь нужны другие инструменты.

Универсальная обработка загрузки из табличного документа

Классический инструмент 1С-ника — внешняя обработка загрузки данных из табличного документа (файл .epf). Она распространяется через поддержку фирмы 1С для пользователей с действующим договором ИТС. Есть версии для обычных и для управляемых форм.

Как она работает:

  1. Открываете через Файл → Открыть в режиме 1С:Предприятие.
  2. Выбираете, куда грузить: в справочник, в табличную часть документа или в регистр сведений.
  3. Вставляете данные из Excel на вкладку табличного документа.
  4. На вкладке настройки указываете для каждого реквизита номер колонки и режим: искать, устанавливать значение или вычислять.
  5. Проверяете на «Контроле заполнения» и запускаете.

Запуск внешних обработок может быть запрещён профилем безопасности. Тогда 1С покажет предупреждение о небезопасном действии, и решать, разрешать ли файл, должен администратор базы.

Свой код на ТабличныйДокумент

Когда формат файла постоянный, проще написать короткую процедуру. С платформы 8.3.6 метод Прочитать() табличного документа открывает .xlsx без установленного Excel, поэтому код работает и на сервере.

&НаСервере
Процедура ЗагрузитьИзExcelНаСервере(АдресФайла)

    ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
    ДанныеФайла = ПолучитьИзВременногоХранилища(АдресФайла);
    ДанныеФайла.Записать(ИмяФайла);

    ТабДок = Новый ТабличныйДокумент;
    ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст);

    // Строка 1 — шапка, данные со второй строки
    Для НомерСтроки = 2 По ТабДок.ВысотаТаблицы Цикл

        Артикул = СокрЛП(ТабДок.Область(НомерСтроки, 1, НомерСтроки, 1).Текст);
        Наименование = СокрЛП(ТабДок.Область(НомерСтроки, 2, НомерСтроки, 2).Текст);
        ЦенаТекстом = СокрЛП(ТабДок.Область(НомерСтроки, 3, НомерСтроки, 3).Текст);

        Если ПустаяСтрока(Артикул) Тогда
            Продолжить;
        КонецЕсли;

        // Убираем пробелы-разделители и меняем запятую на точку
        ЦенаТекстом = СтрЗаменить(ЦенаТекстом, Символы.НПП, "");
        ЦенаТекстом = СтрЗаменить(ЦенаТекстом, " ", "");
        ЦенаТекстом = СтрЗаменить(ЦенаТекстом, ",", ".");
        Цена = Число(ЦенаТекстом);

        Сообщить(СтрШаблон("Строка %1: %2 / %3 / %4",
            Формат(НомерСтроки, "ЧГ=0"), Артикул, Наименование, Цена));

    КонецЦикла;

    УдалитьФайлы(ИмяФайла);

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

Файл на сервер передают с клиента через НачатьПомещениеФайлаНаСервер() или ПоместитьФайл() — сама процедура получает уже адрес во временном хранилище. Вместо Сообщить() подставьте поиск элемента по артикулу и запись объекта.

Число() вызовет исключение, если в ячейке текст вроде «по запросу». Оберните преобразование в Попытка … Исключение и собирайте номера плохих строк в список, а не прерывайте всю загрузку.

Чтение через COM-объект Excel

Старый способ — Новый COMОбъект("Excel.Application"). Он требует установленного Excel и Windows на той машине, где выполняется код. На сервере 1С под Linux или на сервере без Office он не работает, а зависший процесс EXCEL.EXE остаётся в памяти. Для новых разработок берите ТабличныйДокумент.

СпособНужен ExcelСкоростьКогда выбирать
Штатная команда ЗагрузитьНетСредняяНоменклатура, строки документов
Внешняя обработка .epfНетСредняяРазовая загрузка в любой объект
Код на ТабличныйДокументНетВысокаяРегулярный файл одного формата
COM Excel.ApplicationДаНизкаяТолько поддержка старых доработок

Выгрузка данных из 1С в Excel

Выгрузка в 1С 8.3 почти всегда сводится к сохранению табличного документа.

Отчёт. Сформируйте отчёт, например оборотно-сальдовую ведомость, и нажмите кнопку сохранения (значок дискеты) в командной панели. В окне выбора укажите тип файла «Лист Excel 2007-…» (.xlsx). Сохранятся и группировки, и форматирование.

Список справочника или журнала. Откройте список, настройте отбор и колонки, затем Ещё → Вывести список…. Отметьте нужные колонки, нажмите ОК, и полученный табличный документ сохраните в .xlsx.

Печатная форма. Счёт, накладная, акт сверки сохраняются так же: кнопка сохранения в форме предварительного просмотра, формат Excel.

Из кода. Табличный документ записывается одной строкой:

ТабДок.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLSX);

Если в Excel нужно продолжить расчёты, перед выгрузкой отчёта снимите группировки в его настройках. Плоская таблица без вложенных итогов сразу годится для сводной таблицы.

Как ускорить загрузку и выгрузку больших файлов

Прайс на 50 тысяч строк в штатной форме может грузиться долго. Что помогает:

  • ✂️ Делите файл на порции по несколько тысяч строк. Если загрузка упадёт на середине, повторять придётся одну порцию, а не весь файл.
  • 🎯 Удалите лишние колонки до загрузки. Каждая сопоставляемая ссылочная колонка — это поиск в базе по каждой строке.
  • 🔍 Ищите по индексируемому полю. Поиск по коду или артикулу идёт быстрее, чем по длинному наименованию.
  • 💾 В своём коде пишите объекты пачками в транзакции, а не по одному с отдельной записью каждого. Но не держите транзакцию на весь файл: при долгой блокировке мешаете другим пользователям.
  • 🌙 Массовую загрузку запускайте вне рабочего времени в многопользовательской базе: она нагружает сервер и держит блокировки на записываемых данных.
  • 📤 При выгрузке ставьте отборы. Вывести список на 200 тысяч строк в табличный документ — долго и тяжело для клиента; выгрузка за месяц или по одной организации идёт быстро.

Для обмена, который повторяется каждый день, Excel — слабое звено: формат файла меняет человек. Если поставщик готов отдавать данные в CommerceML, XML или через ЭДО, лучше перейти на такой обмен.

Ошибки при импорте Excel в 1С и как их исправить

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

После загрузки откройте список справочника с отбором по дате создания или по группе, куда грузили, и выборочно проверьте 5–10 карточек. Отдельно посмотрите на позиции с длинными наименованиями: при превышении длины реквизита текст обрезается.

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

Можно ли загрузить Excel в 1С без установленного Microsoft Office?
Да. Платформа 8.3 сама читает .xlsx в табличный документ, Excel для этого не нужен. Office требуется только для старых обработок, работающих через COM.
Подойдёт ли файл из LibreOffice или Google Таблиц?
Да, если сохранить его в .xlsx. Перед загрузкой откройте результат и проверьте, что числа не превратились в текст.
Как загрузить начальные остатки из Excel?
Удобнее всего через внешнюю обработку загрузки в табличную часть документа ввода остатков. Перед проведением сверьте итог по каждому счёту с итогом в файле.
Почему после выгрузки в Excel отчёт открывается с ошибкой формата?
Обычно файл сохранили в .xls, а открывают как .xlsx, или наоборот. Сохраните отчёт заново и выберите тип «Лист Excel 2007-…».
Можно ли настроить автоматическую загрузку файла из папки?
Да, но только доработкой: регламентное задание читает файл из папки по расписанию и вызывает код загрузки. Штатно такой функции в типовых конфигурациях нет.