Excel и 1С 8.3: загрузка таблиц, выгрузка отчётов и COM-ошибки
Содержание
Поставщик прислал прайс на 300 позиций в Excel, а их нужно занести в поступление. Вручную это полдня. В БП 3.0 и УТ 11 загрузить такой файл из Экселя в 1С можно штатно: в табличной части документа нажмите Загрузить, вставьте строки из Excel или откройте файл, сопоставьте колонки и проверьте, что номенклатура нашлась.
Обратная задача ещё проще. Любой отчёт, список или печатная форма в 1С 8.3 сохраняется в .xlsx кнопкой «Сохранить» (значок дискеты) или сочетанием Ctrl+S. Сложности начинаются, когда штатной загрузки нет, файл кривой или обработка падает на COM-ошибке. Об этом — подробно ниже.
Какие форматы Excel понимает 1С и какой выбрать
Табличный документ 1С 8.3 сохраняет и читает несколько форматов. Для обмена с Excel важны три.
| Формат | Чтение в 1С | Запись из 1С | Когда брать |
|---|---|---|---|
.xlsx | да, без установленного Excel | да | основной вариант для любых задач |
.xls | да | да | файл от старой программы или контрагента, который шлёт «Excel 97-2003» |
.csv | через текстовый файл или обработку | через обработку | выгрузка из банков, маркетплейсов, сайтов |
.ods | да | да | у получателя LibreOffice или «Мой Офис» |
💡 Если контрагент прислал .csv, откройте его в Excel и пересохраните в .xlsx. Так вы уйдёте от проблем с кодировкой и разделителем «точка с запятой».
⚠️ Перед загрузкой закройте файл в Excel. Открытая книга заблокирована, и 1С выдаст ошибку чтения или прочитает пустую таблицу.
Сравнение способов обмена между 1С и Excel
Способов пять. Выбор зависит от того, есть ли штатная команда и сколько раз вы будете повторять загрузку.
| Способ | Нужен ли Excel на компьютере | Кому подходит | Ограничения |
|---|---|---|---|
Штатная команда Загрузить в документе или справочнике | нет | бухгалтеру, разово и регулярно | только там, где команда предусмотрена |
Копирование Ctrl+C → Ctrl+V в форму загрузки | нет | быстрые загрузки до нескольких сотен строк | нужно держать порядок колонок |
| Универсальная внешняя обработка загрузки из табличного документа | нет | справочники и регистры без своей команды | нужны права на внешние обработки, риск испортить данные |
Своя обработка через ТабличныйДокумент.Прочитать | нет | регулярная загрузка нестандартного файла | нужен программист |
COM-соединение Excel.Application | да, на той машине, где выполняется код | сложные книги: формулы, несколько листов, форматирование | медленно, зависит от Office, ошибки DCOM |
Для 90% бухгалтерских задач хватает первых двух строк таблицы. COM имеет смысл, только когда нужно управлять самим Excel: строить книгу с формулами, читать конкретные листы по имени, работать с макросами.
Как выгрузить отчёт, список или документ из 1С в Excel
Отчёт или печатная форма
- Сформируйте отчёт (ОСВ, анализ счёта, акт сверки) или откройте печатную форму документа.
- Нажмите кнопку с дискетой «Сохранить» или
Ctrl+S. - В поле типа файла выберите «Лист Excel 2007-… (*.xlsx)».
- Укажите папку и имя, нажмите «Сохранить».
Группировки отчёта при этом сохраняются как структура Excel, а суммы — как числа, а не текст. Их можно сразу складывать формулами.
Список справочника или журнал документов
- Откройте список, например
Справочники → Товары и услуги → Номенклатура. - Настройте отбор и колонки, которые нужны.
- Нажмите
Ещё → Вывести список..., отметьте колонки и выберите вывод в табличный документ. - Сохраните полученный документ в
.xlsx, как отчёт.
💡 Нужен кусок таблицы на пару строк? Выделите ячейки в списке или табличной части мышкой с Shift, нажмите Ctrl+C и вставьте в Excel. Колонки лягут как в 1С.
Через отчёт на СКД
Если в стандартном списке не хватает полей, соберите универсальный отчёт: Отчёты → Стандартные отчёты → Универсальный отчёт в БП 3.0. Там можно выбрать любой справочник или регистр, вывести нужные реквизиты и сохранить результат в .xlsx.
Как подготовить таблицу Excel к загрузке в 1С
Девять из десяти неудачных загрузок — это не ошибка 1С, а неподготовленный файл. Перед тем как выгрузить данные из Экселя в 1С, приведите таблицу к простому виду.
- 📄 Один лист, одна таблица. Удалите шапку поставщика, логотип, реквизиты и итоговую строку «Всего».
- 🔤 Одна строка заголовков. Названия колонок короткие: «Артикул», «Наименование», «Количество», «Цена», «Сумма».
- 🚫 Никаких объединённых ячеек. Выделите всю таблицу, снимите объединение, пустые ячейки заполните.
- 🔢 Числа — числами. Проверьте, что в «Цене» нет текста «150 руб.» и пробелов-разделителей тысяч, скопированных с сайта.
- 0️⃣ Коды — текстом. Артикулы, ИНН, штрихкоды и коды ТН ВЭД с ведущими нулями задайте форматом «Текстовый», иначе Excel превратит
0012345в12345, а штрихкод — в4,6E+12. - ✂️ Без лишних пробелов. Функция
=СЖПРОБЕЛЫ(A2)в соседнем столбце убирает пробелы по краям. Иначе «Молоко » и «Молоко» станут двумя разными товарами. - 👁️ Без скрытых строк и фильтров. Скрытые строки 1С всё равно прочитает.
- 📏 Единицы измерения как в 1С. Если в справочнике «шт», то в файле не «штука» и не «шт.».
Как загрузить из Экселя в 1С штатными средствами
В типовых конфигурациях на БСП есть общий механизм «Загрузка данных из файла». Он подключён к табличным частям документов с товарами и к ряду справочников.
Загрузка товаров в документ
- Создайте документ, например
Покупки → Поступление (акты, накладные, УПД)в БП 3.0. - Заполните шапку: контрагента, договор, склад.
- На закладке «Товары» нажмите кнопку
Загрузить. - Откроется форма с таблицей-шаблоном. Вставьте в неё колонки из Excel через буфер обмена или загрузите файл с диска.
- Программа сопоставит строки с номенклатурой по наименованию, артикулу или штрихкоду.
- Посмотрите строки, которые не нашлись. Их можно сопоставить вручную или создать новые элементы.
- Подтвердите загрузку — строки попадут в табличную часть. Проверьте итоговую сумму с суммой в файле поставщика.
Сверяйте сумму документа с итогом файла до проведения. Одна строка, где Excel хранил цену текстом, загрузится с нулём, и разницу вы увидите только в акте сверки.
Загрузка в справочник
В списке номенклатуры, контрагентов и некоторых других справочников есть команда Загрузить (в части релизов она в меню Ещё). Механизм тот же: шаблон колонок, вставка данных, сопоставление, создание новых элементов.
💡 Перед массовой загрузкой справочника включите в файл колонку, по которой 1С найдёт уже существующие элементы: артикул или ИНН. Так вы обновите старые позиции, а не наплодите дублей.
Загрузка цен
Прайс-лист обычно грузят в документ установки цен. В УТ 11 документ «Установка цен номенклатуры» находится в разделе CRM и маркетинг → Ценообразование. В БП 3.0 документ «Установка цен номенклатуры» открывается из раздела Склад. Порядок тот же: шапка документа, затем загрузка табличной части.
Внешние обработки и расширения для загрузки из Excel
Когда штатной команды нет (например, нужно загрузить остатки в регистр или реквизиты в нестандартный справочник), используют внешнюю обработку .
Универсальная загрузка из табличного документа
Самая известная — ЗагрузкаДанныхИзТабличногоДокумента.epf. Она распространяется фирмой 1С на диске ИТС и подходит к любой конфигурации. Принцип работы:
- Выберите режим: загрузка в справочник, в табличную часть или в регистр сведений .
- Укажите объект загрузки.
- Откройте файл Excel или вставьте данные на закладку с табличным документом.
- Для каждой колонки задайте реквизит 1С и способ поиска: по наименованию, коду, артикулу.
- Нажмите «Контроль заполнения» и исправьте строки с ошибками.
- Запустите загрузку.
⚠️ Эта обработка пишет напрямую в справочники и регистры, в обход логики документов. Перед загрузкой сделайте резервную копию базы или потренируйтесь на копии. Откатить тысячу кривых элементов справочника кнопкой «Отменить» нельзя.
Как запустить внешнюю обработку
- Разово:
Главное меню → Файл → Открыть, выбрать.epf. Платформа покажет предупреждение безопасности — подтвердите, если файл получен из надёжного источника. - Постоянно: зарегистрировать в
Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.
Если пункт открытия файла не срабатывает, у пользователя нет права на интерактивное открытие внешних обработок. Его выдаёт администратор базы в профиле групп доступа.
Расширение вместо внешней обработки
Если загрузку одного и того же файла делают каждую неделю, программист может оформить её расширением конфигурации. Плюсы: команда появляется прямо в нужном документе, не теряется при обновлении типовой конфигурации, не требует прав на внешние файлы. Расширения работают на платформе 8.3.6 и выше.
Чтение Excel кодом: табличный документ и COM
Без Excel: метод Прочитать
Платформа 8.3 читает .xlsx своими силами. Excel на компьютере не нужен, а значит, нет и COM-ошибок. Метод выполняется на сервере, поэтому файл сначала передают с клиента во временное хранилище.
&НаСервере
Процедура ЗагрузитьНаСервере(АдресФайла)
ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
Данные = ПолучитьИзВременногоХранилища(АдресФайла);
Данные.Записать(ИмяФайла);
ТабДок = Новый ТабличныйДокумент;
ТабДок.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Текст);
// Строка 1 — заголовки, данные со второй
Для НомерСтроки = 2 По ТабДок.ВысотаТаблицы Цикл
Артикул = СокрЛП(ТабДок.Область(НомерСтроки, 1).Текст);
Если ПустаяСтрока(Артикул) Тогда
Продолжить;
КонецЕсли;
ТекстЦены = СтрЗаменить(ТабДок.Область(НомерСтроки, 3).Текст, " ", "");
ТекстЦены = СтрЗаменить(ТекстЦены, Символы.НПП, "");
ТекстЦены = СтрЗаменить(ТекстЦены, ",", ".");
Попытка
Цена = Число(ТекстЦены);
Исключение
Сообщить(СтрШаблон("Строка %1: цена «%2» не число", Формат(НомерСтроки, "ЧГ=0"), ТекстЦены));
Продолжить;
КонецПопытки;
// Здесь — поиск номенклатуры по артикулу и запись цены
КонецЦикла;
УдалитьФайлы(ИмяФайла);
КонецПроцедуры
Очистка пробелов и неразрывных пробелов в примере — не перестраховка. Именно на них чаще всего спотыкается преобразование Число() для файлов, скачанных с сайтов поставщиков.
Через Excel.Application
COM нужен, когда работать приходится с самим Excel: листы по имени, формулы, оформление.
Excel = Новый COMОбъект("Excel.Application");
Excel.DisplayAlerts = Ложь;
Книга = Excel.Workbooks.Open(ИмяФайла);
Лист = Книга.Worksheets(1);
Значение = Лист.Cells(2, 1).Value;
// ...
Книга.Close(Ложь);
Excel.Quit();
💡 Обращение к каждой ячейке через COM — это отдельный межпроцессный вызов. На 10 000 строк обработка будет идти минуты. Быстрее прочитать весь диапазон разом: Лист.UsedRange.Value возвращает COMSafeArray, который метод Выгрузить() превращает в обычный массив 1С.
Ошибки COM-соединения с Excel и как их исправить
Главное правило: COM-объект создаётся там, где выполняется код. В клиент-серверной базе процедура с директивой &НаСервере работает на сервере 1С. Значит, Excel должен стоять на сервере, а запускаться будет от имени учётной записи службы агента сервера (по умолчанию USR1CV8), а не от вашей.
⚠️ Перед тем как завершать процессы EXCEL.EXE на сервере, убедитесь, что в этот момент не идёт чужая загрузка или печать отчёта. Принудительное завершение оборвёт её без сохранения. Делайте это в паузе работы пользователей.
Microsoft официально не поддерживает автоматизацию Office из серверных служб. Поэтому серверный COM — это решение «на свой страх», а для регулярных загрузок на сервере надёжнее ТабличныйДокумент.Прочитать.