Загрузка таблицы Excel в 1С 8.3: от буфера обмена до своей обработки
Содержание
Перенести данные из Excel в 1С проще всего встроенной командой Загрузить в списке справочника или в табличной части документа: копируете строки из таблицы, вставляете их в окно загрузки, сопоставляете колонки и жмёте «Загрузить». В 1С:Бухгалтерии 3.0 так грузят номенклатуру и товары в поступление и реализацию. Для остального есть типовая обработка загрузки из табличного документа, CSV и собственный код.
Частое заблуждение — что 1С «не читает» Excel и файл нужно сначала конвертировать в XML. Платформа 8.3 открывает .xlsx сама, как табличный документ. Проблемы почти всегда не в формате, а в грязных данных: объединённых ячейках, числах-тексте и названиях, которые не совпадают с базой.
Подготовка файла Excel перед переносом в 1С
Проблемы с загрузкой проще всего снять ещё в Excel. Потратьте время на файл — и сама загрузка займёт минуты.
Что сделать с таблицей:
- Оставьте одну строку заголовков и данные сразу под ней. Шапку документа, логотип, итоги и пустые строки удалите.
- Разъедините все объединённые ячейки. Загрузчик читает объединённую ячейку как одну, и соседние строки съезжают.
- Одна колонка — одно поле. «Пачка 10 шт» разнесите на «Единица» и «Количество».
- Уберите пробелы по краям: в Excel это функция
СЖПРОБЕЛЫ(). Неразрывные пробелы она не убирает — их ищите через «Найти и заменить». - Числа должны быть числами. Если в ячейке зелёный треугольник «число сохранено как текст», преобразуйте колонку.
- ИНН, КПП, артикулы с ведущими нулями храните как текст. Иначе Excel превратит
0274012345в274012345, и контрагент не найдётся.
Отдельно решите, по какому полю 1С будет искать существующие элементы. Наименование — плохой ключ: «Бумага А4 Снегурочка» и «Бумага А4 “Снегурочка”» для программы разные товары. Надёжнее артикул, штрихкод, ИНН или код.
Какой формат файла сохранить
- 📗
.xlsx— основной вариант. Его читает и команда загрузки, и табличный документ платформы. - 📕
.xlsстарого формата тоже открывается, но если файл пришёл из сторонней программы, надёжнее пересохранить его в.xlsx. - 📄
.csv— когда файл выгружен из другой системы или нужен для автоматической загрузки кодом.
Формулы в ячейках перед загрузкой лучше заменить значениями: Копировать → Специальная вставка → Значения. Загрузчик обычно берёт уже вычисленное значение, но ссылки на другие листы и внешние книги при открытии файла вне Excel могут не пересчитаться.
Если в книге несколько листов, данные для загрузки держите на первом. Так проще и пользователю, и обработке, которая по умолчанию читает первый лист.
Перед массовой загрузкой сделайте пробную на 5–10 строках. Так вы увидите, правильно ли сопоставились колонки, до того как в базе появятся 2 000 дублей.
Первую загрузку делайте в копии базы. Отменить массовое создание элементов одной кнопкой нельзя, удалять придётся вручную или пометкой на удаление.
Перенос из Excel через буфер обмена и команду «Загрузить»
Это основной способ для пользователя без доступа к Конфигуратору. В типовых конфигурациях на библиотеке стандартных подсистем он устроен одинаково: окно с пустой таблицей, куда вставляют данные, затем шаг сопоставления.
Загрузка номенклатуры в справочник
В 1С:Бухгалтерии 3.0:
- Откройте
Справочники → Товары и услуги → Номенклатура. - Нажмите
Загрузитьв командной панели списка. - В открывшемся окне вставьте скопированные из Excel строки (
Ctrl+Cв Excel,Ctrl+Vв таблицу 1С). Либо загрузите файл кнопкой выбора файла. - Над каждой колонкой укажите, какому реквизиту 1С она соответствует. Лишние колонки оставьте без сопоставления.
- Перейдите к следующему шагу. Программа покажет, какие строки нашла в базе, а какие будут созданы как новые.
- Проверьте спорные строки и запустите загрузку.
Загрузка в табличную часть документа
В документах поступления и реализации команда загрузки находится над табличной частью «Товары». В зависимости от релиза она стоит отдельной кнопкой или спрятана в меню Ещё.
Логика та же: вставили таблицу, сопоставили «Номенклатура», «Количество», «Цена». Если товара нет в справочнике, программа предложит создать его или выбрать вручную. Сумму и НДС документ пересчитает сам по цене и количеству.
При вставке из буфера дробные числа должны быть с запятой, как в русской локали Windows. Цена 125.50 с точкой может прочитаться как текст и не встать в колонку «Цена».
Типовая обработка «Загрузка данных из табличного документа»
Когда команды Загрузить в нужном справочнике нет, выручает универсальная внешняя обработка ЗагрузкаДанныхИзТабличногоДокумента.epf. Её распространяют на дисках ИТС, есть версия для управляемых форм. Она умеет загружать в любой справочник, табличную часть или регистр сведений
.
Как с ней работать:
- Откройте обработку через главное меню:
☰ → Файл → Открыть. В БП 3.0 программа предупредит о внешнем файле — подтвердите, если источник надёжный. - Выберите режим: в справочник, в табличную часть или в регистр сведений.
- Укажите объект, например справочник «Контрагенты».
- Вставьте данные из Excel в табличный документ обработки или откройте файл.
- В настройках колонок отметьте, какой реквизит из какого номера колонки брать, и какой реквизит — ключ поиска.
- Нажмите контроль заполнения, затем загрузку.
Для ссылочных реквизитов (единица измерения, вид номенклатуры, группа) обработка ищет значение по представлению. Значит, в Excel должно быть написано ровно так, как в базе: «шт», а не «штука».
Права нужны соответствующие: открывать внешние обработки может пользователь с полными правами или с отдельно выданным разрешением.
Загрузка данных из CSV и текстового файла
CSV удобен, когда файл приходит из другой программы, а не руками собран в Excel. Минусы — кодировка и разделители.
Что знать про CSV из Excel:
- 📄 Excel с русской локалью сохраняет «CSV (разделители — запятые)» на самом деле с разделителем
;. - 🔤 Обычный CSV пишется в кодировке Windows-1251, вариант «CSV UTF-8» — в UTF-8. Перепутаете — получите кракозябры.
- 🔢 Десятичный разделитель — запятая. При чтении кодом её нужно заменить на точку.
- ✂️ Если в наименовании есть
;, Excel возьмёт поле в кавычки. Простое разбиение строки по разделителю такую строку сломает.
Самый простой путь — не писать код вообще: откройте CSV в Excel, проверьте колонки, скопируйте и вставьте в окно команды Загрузить. Код нужен, когда файл приходит регулярно и грузится без участия человека.
Пример чтения CSV на сервере, где первая строка — заголовок, колонки: артикул, наименование, количество:
Функция ПрочитатьCSV(ИмяФайла) Экспорт
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("Артикул");
Результат.Колонки.Добавить("Наименование");
Результат.Колонки.Добавить("Количество");
Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.ANSI);
Строка = Чтение.ПрочитатьСтроку(); // пропускаем заголовок
Строка = Чтение.ПрочитатьСтроку();
Пока Строка <> Неопределено Цикл
Поля = СтрРазделить(Строка, ";", Истина);
Если Поля.Количество() >= 3 Тогда
НоваяСтрока = Результат.Добавить();
НоваяСтрока.Артикул = СокрЛП(Поля[0]);
НоваяСтрока.Наименование = СокрЛП(Поля[1]);
ТекстЧисла = СтрЗаменить(СокрЛП(Поля[2]), Символы.НПП, "");
ТекстЧисла = СтрЗаменить(ТекстЧисла, " ", "");
ТекстЧисла = СтрЗаменить(ТекстЧисла, ",", ".");
НоваяСтрока.Количество = Число(ТекстЧисла);
КонецЕсли;
Строка = Чтение.ПрочитатьСтроку();
КонецЦикла;
Чтение.Закрыть();
Возврат Результат;
КонецФункции
Для файла «CSV UTF-8» замените КодировкаТекста.ANSI на КодировкаТекста.UTF8. Если в данных бывают поля в кавычках, этот разбор не подойдёт — проще читать исходный .xlsx через табличный документ, как в разделе ниже.
Универсальный обмен данными в формате XML: когда он уместен
Обработка «Универсальный обмен данными в формате XML» работает по правилам, которые готовят в конфигурации «Конвертация данных». Она переносит объекты между базами 1С с разной структурой: например, справочники из старой самописной базы в БП 3.0.
Для обычной таблицы Excel это лишний круг. Правила обмена описывают объекты метаданных 1С, а не колонки произвольного файла. Чтобы использовать XML-обмен, пришлось бы сначала превратить Excel в XML нужной структуры — это дольше, чем загрузить таблицу напрямую.
XML уместен в двух случаях:
- 🔁 данные из Excel уже однажды загружены в промежуточную базу 1С, и их нужно регулярно переносить в рабочую;
- 🏢 миграция большого объёма между конфигурациями, где кроме справочников нужны документы и остатки.
Ещё один вариант — сохранить книгу в Excel как «Таблица XML 2003» и разобрать её объектом ЧтениеXML. Технически это работает, но для .xlsx в 8.3 есть путь короче.
Своя обработка: чтение .xlsx через табличный документ
Если загрузка повторяется каждый день или неделю, практичнее написать небольшую внешнюю обработку. Платформа 8.3 читает .xlsx методом Прочитать() табличного документа — Excel на компьютере для этого не нужен.
Пример серверной процедуры. Файл пользователь выбирает на клиенте, и он попадает во временное хранилище стандартными средствами передачи файла на сервер:
&НаСервере
Процедура ЗагрузитьНоменклатуруНаСервере(АдресФайла)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФайла);
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
ДвоичныеДанные.Записать(ИмяФайла);
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
УдалитьФайлы(ИмяФайла);
Для НомерСтроки = 2 По ТабДок.ВысотаТаблицы Цикл
Артикул = СокрЛП(ТабДок.Область(НомерСтроки, 1, НомерСтроки, 1).Текст);
Наименование = СокрЛП(ТабДок.Область(НомерСтроки, 2, НомерСтроки, 2).Текст);
Если ПустаяСтрока(Артикул) Тогда
Продолжить;
КонецЕсли;
Ссылка = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", Артикул);
Если Ссылка.Пустая() Тогда
Объект = Справочники.Номенклатура.СоздатьЭлемент();
Объект.Артикул = Артикул;
Иначе
Объект = Ссылка.ПолучитьОбъект();
КонецЕсли;
Объект.Наименование = Наименование;
// заполните обязательные реквизиты своей конфигурации:
// единицу измерения, вид номенклатуры, ставку НДС
Объект.Записать();
КонецЦикла;
КонецПроцедуры
Строка 1 пропускается — в ней заголовки. Для другой колонки поменяйте второй параметр Область().
Почему не COM: вариант Новый COMОбъект("Excel.Application") требует установленного Excel на той машине, где выполняется код, работает только в Windows и медленно. На сервере 1С под Linux его нет вовсе. Табличный документ этих ограничений не имеет.
Если загрузка регулярная и большая, оберните запись в транзакцию порциями по несколько сотен строк и пишите в журнал регистрации строки, которые не загрузились. Пользователю потом не придётся гадать, какие 12 позиций из 3 000 «потерялись».
Сравнение способов:
| Способ | Когда подходит | Риски |
|---|---|---|
Команда Загрузить | Справочник или документ поддерживает загрузку | Дубли при плохом ключе поиска |
| Обработка из табличного документа | Нет встроенной загрузки, разовый перенос | Нужны права на внешние обработки |
| CSV + код | Файл из другой системы, автозагрузка | Кодировка, разделители, кавычки |
| XML-обмен | Перенос между базами 1С | Долго готовить правила |
Своя обработка .xlsx | Регулярная загрузка одного формата | Нужен программист и сопровождение |
Ошибки при загрузке из Excel и как их исправить
После загрузки откройте список справочника и отсортируйте по дате создания или по коду. Новые элементы окажутся в конце, их легко проверить глазами.
Частые вопросы
Можно ли загрузить из Excel начальные остатки?
Сколько строк можно загрузить за раз?
Нужен ли установленный Excel на компьютере?
.xlsx. Excel нужен только для подготовки файла.Как загрузить картинки товаров из Excel?
Работает ли загрузка в 1С:Фреш и облаке?
Загрузить работает. Открытие своих внешних обработок в сервисе ограничено, их нужно согласовывать с провайдером.