Excel и 1С 8.3: подготовить файл, загрузить строки и выгрузить отчёт без потерь
Содержание
Обработать 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 на цифровой клавиатуре, поле «Заменить» оставьте пустым.
Штатная загрузка Excel в 1С: справочники и документы
В типовых конфигурациях на БСП (1С:Бухгалтерия 3.0, 1С:Управление торговлей 11) есть общий механизм загрузки данных из файла. Он встроен в отдельные списки и табличные части, а не вынесен в общее меню.
Загрузка в справочник «Номенклатура»
В 1С:Бухгалтерии 3.0 откройте Справочники → Товары и услуги → Номенклатура. В командной панели списка есть команда Загрузить.
- Нажмите
Загрузить. Откроется форма с пустой таблицей, колонки которой соответствуют реквизитам номенклатуры. - Откройте Excel, выделите диапазон с данными без шапки и скопируйте его
Ctrl+C. - Вернитесь в 1С, встаньте в первую ячейку таблицы и вставьте
Ctrl+V. Можно загрузить и сам файл кнопкой загрузки из файла в этой же форме. - Нажмите
Далее. Программа покажет, какие строки она нашла в базе, какие создаст заново, а какие не смогла распознать. - Проверьте спорные строки и подтвердите загрузку.
Загрузка строк в документ
Приходный документ на 400 позиций вручную не набирают. В табличной части «Товары» документов поступления и реализации есть команда загрузки из файла: она работает так же, как в справочнике. Если кнопки не видно на панели, загляните в меню Ещё табличной части.
Документ при этом не проводится. Сначала проверьте цены, ставки НДС и счета учёта в строках, потом проводите.
Открыть Excel как табличный документ
Самый простой способ посмотреть файл, не выходя из 1С, — открыть его через главное меню (кнопка с тремя полосками) → Файл → Открыть. Файл .xlsx откроется в 1С как табличный документ. Оттуда удобно копировать диапазоны в формы загрузки, если Excel на компьютере не установлен.
Сопоставление колонок и поиск существующих элементов
Главный вопрос любой загрузки: как 1С поймёт, что строка «Бумага А4 Снегурочка» — это уже существующая позиция, а не новая. Ответ — по ключевому полю.
| Ключ поиска | Когда подходит | Риск |
|---|---|---|
| Артикул | Свой каталог с уникальными артикулами | Потеря ведущих нулей в Excel |
| Штрихкод | Розница, товары с маркировкой EAN | Один товар — несколько штрихкодов |
| Наименование | Короткий справочник без кодов | Лишний пробел даёт дубль |
| ИНН (+КПП) | Контрагенты | У обособленных подразделений один ИНН |
| Код 1С | Повторная загрузка ранее выгруженных данных | Коды разных баз не совпадают |
Порядок такой: сначала решите, по какому полю ищем, потом проверьте это поле в Excel на дубли. В Excel это делает Главная → Условное форматирование → Правила выделения ячеек → Повторяющиеся значения.
Ссылочные колонки — единица измерения, ставка НДС, группа — сопоставляются с тем, что уже есть в базе. Если в файле «шт», а в классификаторе «шт.», строка повиснет как нераспознанная. Унифицируйте такие значения в Excel заменой до загрузки.
Загрузка справочника создаёт элементы сразу. Сделайте резервную копию базы перед первой массовой загрузкой — откатить тысячу лишних карточек вручную долго.
Для регулярных обменов, например ежедневного прайса поставщика, сохраните настройку сопоставления в обработке, если она это позволяет. Тогда на второй раз колонки встанут на места сами.
Внешние обработки и код: когда штатной загрузки не хватает
Штатная команда есть не у всех объектов. Остатки по счетам, цены по нескольким видам, свойства номенклатуры, файлы со сложной шапкой — здесь нужны другие инструменты.
Универсальная обработка загрузки из табличного документа
Классический инструмент 1С-ника — внешняя обработка загрузки данных из табличного документа (файл .epf). Она распространяется через поддержку фирмы 1С для пользователей с действующим договором ИТС. Есть версии для обычных и для управляемых форм.
Как она работает:
- Открываете через
Файл → Открытьв режиме 1С:Предприятие. - Выбираете, куда грузить: в справочник, в табличную часть документа или в регистр сведений.
- Вставляете данные из Excel на вкладку табличного документа.
- На вкладке настройки указываете для каждого реквизита номер колонки и режим: искать, устанавливать значение или вычислять.
- Проверяете на «Контроле заполнения» и запускаете.
Запуск внешних обработок может быть запрещён профилем безопасности. Тогда 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?
.xlsx в табличный документ, Excel для этого не нужен. Office требуется только для старых обработок, работающих через COM.Подойдёт ли файл из LibreOffice или Google Таблиц?
.xlsx. Перед загрузкой откройте результат и проверьте, что числа не превратились в текст.Как загрузить начальные остатки из Excel?
Почему после выгрузки в Excel отчёт открывается с ошибкой формата?
.xls, а открывают как .xlsx, или наоборот. Сохраните отчёт заново и выберите тип «Лист Excel 2007-…».