Загрузка файлов в 1С: вложения, импорт таблиц и автоматический приём данных
Содержание
Отправить файл в 1С можно четырьмя способами, и выбор зависит от того, что должно получиться. Скан договора прикрепляют к документу через команду «Присоединённые файлы» (значок скрепки). Таблицу Excel с товарами загружают командой «Загрузить» в табличной части документа или в списке справочника. Регулярный поток файлов от другой программы принимают через папку обмена или HTTP-сервис, а данные из XML, JSON и CSV разбирают кодом.
Типичная ситуация: поставщик прислал накладную на 300 строк в Excel, а менеджер по продажам хочет, чтобы заказы с сайта сами падали в базу. Это две разные задачи. Первую бухгалтер решает сам за пять минут, вторая требует настройки на стороне сервера. Всё, что описано ниже, относится к платформе 8.3 и типовым конфигурациям на БСП: БП 3.0, ЗУП 3.1, УТ 11.
Какой способ загрузки файлов выбрать
| Задача | Способ | Кто делает | Нужен ли программист |
|---|---|---|---|
| Приложить скан, договор, фото к документу | Присоединённые файлы | Пользователь | Нет |
| Перенести строки из Excel в документ | Команда «Загрузить» в табличной части | Пользователь | Нет |
| Залить справочник (номенклатура, контрагенты) | «Загрузить из файла» в списке справочника | Пользователь с правами | Нет |
| Загрузить банковскую выписку | Загрузка из файла kl_to_1c.txt | Бухгалтер | Нет |
| Принимать файлы от другой программы по расписанию | Папка обмена + регламентное задание | Администратор | Да |
| Принимать файлы по сети в реальном времени | HTTP-сервис | Программист | Да |
Если задача разовая — хватит штатных команд. Если файлы приходят каждый день от сайта, сканера ТСД или учётной системы партнёра — нужна автоматизация.
Загрузка таблиц из Excel через штатные команды
В типовых конфигурациях на БСП есть встроенный механизм загрузки табличных данных. Он умеет читать xlsx, xls, ods, csv и mxl и сопоставляет колонки файла с полями 1С.
В табличную часть документа
- Откройте документ, например «Поступление (акты, накладные, УПД)» в БП 3.0.
- Над табличной частью «Товары» нажмите кнопку Загрузить (иногда она спрятана в меню Ещё).
- Откроется форма-шаблон. Скопируйте в неё строки из Excel через
Ctrl+C/Ctrl+Vили нажмите «Загрузить из файла» и укажите файл. - Проверьте сопоставление колонок: наименование, количество, цена, сумма.
- На следующем шаге программа покажет, какие строки она узнала, а какие нет. Неузнанные позиции можно сопоставить вручную или создать новыми элементами.
- Нажмите Перенести в документ.
Лучше всего номенклатура узнаётся по артикулу или штрихкоду. По наименованию «Бумага А4 Svetocopy» и «Бумага офисная А4 SvetoCopy» — уже два разных товара.
В справочник
Для массового заполнения номенклатуры, контрагентов или физлиц откройте список справочника и найдите в меню Ещё команду загрузки из файла. Дальше та же схема: шаблон → вставка данных → сопоставление → загрузка.
Механизм ищет существующие элементы и предлагает либо обновить их, либо создать новые. Перед первой загрузкой справочника на сотни строк сделайте резервную копию базы — откатить массовое создание элементов вручную долго.
Когда штатной загрузки не хватает
Если в нужном объекте нет кнопки «Загрузить», выручает внешняя обработка загрузки из табличного документа. Её ставят через Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки и запускают из раздела, к которому она привязана. Обработка пишет данные в любой справочник, документ или регистр, поэтому доверяйте её только тому, кто понимает структуру базы.
Прикрепление файлов к документам и справочникам
Сканы, PDF и фотографии в 1С хранятся как присоединённые файлы. Они видны всем, у кого есть доступ к объекту.
Как прикрепить файл
- Откройте документ или карточку контрагента.
- Нажмите на значок скрепки в командной панели формы — откроется список «Присоединённые файлы».
- Нажмите Добавить и выберите «Файл с диска», «Сканировать» или создание по шаблону.
- Либо просто перетащите файл мышью из проводника в форму списка присоединённых файлов.
Файл можно открыть, отредактировать и вернуть обратно: команда «Редактировать» захватывает его для правки, а «Закончить редактирование» сохраняет новую версию в базу.
Где физически хранятся файлы
По умолчанию файлы лежат внутри информационной базы. Через пару лет активного сканирования база легко вырастает на десятки гигабайт, бэкап становится долгим.
Выход — хранение в томах на диске. Включается в разделе Администрирование → Общие настройки, в группе настроек работы с файлами. После включения нужно создать том — указать сетевую папку, куда 1С будет складывать файлы, и при необходимости перенести туда уже накопленные вложения.
Папка тома должна быть доступна пользователю, от имени которого работает сервер 1С (обычно USR1CV8), а не только вашей учётной записи Windows. Иначе файл прикрепится у одного пользователя и не откроется у другого.
Тома не входят в выгрузку .dt. Копируйте их отдельно вместе с резервной копией базы.
Папка обмена: автоматический импорт файлов
Самая простая автоматизация — сетевая папка. Внешняя программа кладёт туда файлы, а 1С по расписанию забирает их, разбирает и переносит обработанные в архив.
Синхронизация между базами 1С
Если обе стороны — конфигурации 1С, ничего писать не надо. В Администрирование → Синхронизация данных настраивается обмен, где транспортом выбирают локальный или сетевой каталог, FTP или почту. Пакеты идут в формате EnterpriseData (это XML), расписание задаётся в настройках синхронизации.
Своя загрузка из каталога
Для файлов от сторонних систем пишут регламентное задание. Его каркас выглядит так:
Процедура ЗагрузитьФайлыИзПапкиОбмена() Экспорт
Каталог = "\\fileserver\exchange\in\";
Архив = "\\fileserver\exchange\done\";
Файлы = НайтиФайлы(Каталог, "*.xml");
Для Каждого Файл Из Файлы Цикл
Попытка
ЗагрузитьОдинФайл(Файл.ПолноеИмя); // ваш разбор файла
ПереместитьФайл(Файл.ПолноеИмя, Архив + Файл.Имя);
Исключение
ЗаписьЖурналаРегистрации("Обмен.ЗагрузкаИзПапки",
УровеньЖурналаРегистрации.Ошибка, , ,
Файл.Имя + ": " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Три правила, без которых такая загрузка ломается:
- 📂 Путь — с точки зрения сервера. Регламентное задание выполняется на сервере 1С. Диск
D:\вашего компьютера сервер не видит, нужен UNC-путь вида\\сервер\папка. - 🔐 Права у службы. Учётная запись службы сервера 1С должна иметь чтение и запись в папке обмена и архиве.
- ⏳ Недописанные файлы. Если внешняя программа пишет большой файл долго, 1С может схватить его наполовину. Договоритесь, что отправитель пишет файл с расширением
.tmpи переименовывает в.xmlпосле записи.
Обработанный файл обязательно уносите из входящей папки. Иначе при следующем запуске он загрузится повторно и создаст дубли документов.
HTTP-сервис для приёма файлов в 1С
Когда файлы должны попадать в базу сразу, без ожидания расписания, в конфигурации создают HTTP-сервис. Сайт или мобильное приложение отправляет POST-запрос, 1С сохраняет файл и отвечает кодом.
Что нужно настроить
- В конфигураторе (лучше в расширении, чтобы не снимать типовую с поддержки) добавьте HTTP-сервис, задайте корневой URL, например
upload. - Добавьте шаблон URL
/file/{name}и методPOSTс обработчиком. - Опубликуйте базу на веб-сервере (Apache или IIS):
Администрирование → Публикация на веб-серверев конфигураторе. Отметьте публикацию HTTP-сервисов, а для сервиса из расширения — ещё и публикацию HTTP-сервисов расширений. - Создайте в базе отдельного пользователя для обмена с минимальными правами.
Обработчик метода POST
Функция ФайлPOST(Запрос)
ИмяФайла = Запрос.ПараметрыURL.Получить("name");
Данные = Запрос.ПолучитьТелоКакДвоичныеДанные();
Если Данные = Неопределено Или Данные.Размер() = 0 Тогда
Ответ = Новый HTTPСервисОтвет(400);
Ответ.УстановитьТелоИзСтроки("Пустой файл");
Возврат Ответ;
КонецЕсли;
Данные.Записать("\\fileserver\exchange\in\" + ИмяФайла);
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки("OK");
Возврат Ответ;
КонецФункции
Обработчик здесь только сохраняет файл в папку обмена, а разбор делает регламентное задание из предыдущего раздела. Так быстрее отвечать отправителю, и упавший разбор не теряет сам файл.
Проверить сервис можно из командной строки:
curl -X POST -u exchange:пароль --data-binary @order.xml ^
http://srv-web/buh/hs/upload/file/order.xml
Путь собирается из имени публикации (buh), сегмента hs для HTTP-сервисов, корневого URL сервиса и шаблона. Ответ 200 OK — файл принят.
Не подставляйте имя файла из запроса в путь без проверки. Строка вида ..\..\ в параметре name позволит записать файл куда угодно. Удаляйте из имени слеши и точки-переходы или генерируйте имя сами через Новый УникальныйИдентификатор.
Если нужен не файл, а запись данных в справочники и документы, иногда хватает стандартного интерфейса OData: его включают в публикации, и внешняя система работает с объектами 1С через REST без единой строки кода в конфигурации.
Разбор XML, JSON и CSV при импорте
Файл в папке или в теле запроса — только половина дела. Дальше его надо прочитать и превратить в объекты 1С.
XML
Для XML в платформе есть ЧтениеXML для потокового чтения и XDTO для работы по схеме. Если у партнёра есть XSD-схема, загрузите её в пакет XDTO — разбор сведётся к обращению к свойствам объекта без ручного обхода узлов.
JSON
Чтение = Новый ЧтениеJSON;
Чтение.ОткрытьФайл(ПутьКФайлу);
Заказ = ПрочитатьJSON(Чтение, Истина); // Истина — получить Соответствие
Чтение.Закрыть();
НомерЗаказа = Заказ.Получить("number");
Для Каждого Строка Из Заказ.Получить("items") Цикл
Артикул = Строка.Получить("sku");
Количество = Строка.Получить("qty");
// поиск номенклатуры по артикулу и заполнение документа
КонецЦикла;
Второй параметр Истина выбран не случайно. Со значением Ложь JSON читается в структуру, а ключи вроде order-id или 1c_code не годятся в имена свойств структуры — чтение падает с ошибкой. Соответствие принимает любые ключи.
CSV
Текст = Новый ЧтениеТекста(ПутьКФайлу, КодировкаТекста.UTF8);
Строка = Текст.ПрочитатьСтроку(); // заголовок пропускаем
Строка = Текст.ПрочитатьСтроку();
Пока Строка <> Неопределено Цикл
Поля = СтрРазделить(Строка, ";", Истина);
Артикул = Поля[0];
Цена = Число(СтрЗаменить(Поля[2], ",", "."));
// обработка строки
Строка = Текст.ПрочитатьСтроку();
КонецЦикла;
Текст.Закрыть();
Третий параметр СтрРазделить = Истина сохраняет пустые поля, иначе колонки «съедут» на строках с пропусками. Excel в русской локали сохраняет CSV с разделителем ; и в кодировке Windows-1251 — для таких файлов указывайте КодировкаТекста.ANSI.
Файл Excel целиком читается в табличный документ методом ТабличныйДокумент.Прочитать(ПутьКФайлу), дальше значения берут из областей по номерам строк и колонок.
Сопоставление полей зафиксируйте письменно до начала разработки. Половина вопросов «почему не загрузилось» потом снимается одним взглядом на эту таблицу.
Почему файл не загружается в 1С
Частые вопросы
Есть ли ограничение на размер присоединённого файла?
Можно ли загрузить файл в 1С через веб-клиент?
Чем HTTP-сервис отличается от веб-сервиса в 1С?
Как загрузить в 1С выписку банка из файла?
Банк и касса → Банковские выписки, нажмите «Загрузить» и укажите файл kl_to_1c.txt, который выгрузил клиент-банк. Программа создаст списания и поступления по каждой строке.