Загрузка файлов в 1С: вложения, импорт таблиц и автоматический приём данных

· 9 мин

Содержание

Отправить файл в 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С.

В табличную часть документа

  1. Откройте документ, например «Поступление (акты, накладные, УПД)» в БП 3.0.
  2. Над табличной частью «Товары» нажмите кнопку Загрузить (иногда она спрятана в меню Ещё).
  3. Откроется форма-шаблон. Скопируйте в неё строки из Excel через Ctrl+C / Ctrl+V или нажмите «Загрузить из файла» и укажите файл.
  4. Проверьте сопоставление колонок: наименование, количество, цена, сумма.
  5. На следующем шаге программа покажет, какие строки она узнала, а какие нет. Неузнанные позиции можно сопоставить вручную или создать новыми элементами.
  6. Нажмите Перенести в документ.

Лучше всего номенклатура узнаётся по артикулу или штрихкоду. По наименованию «Бумага А4 Svetocopy» и «Бумага офисная А4 SvetoCopy» — уже два разных товара.

В справочник

Для массового заполнения номенклатуры, контрагентов или физлиц откройте список справочника и найдите в меню Ещё команду загрузки из файла. Дальше та же схема: шаблон → вставка данных → сопоставление → загрузка.

Механизм ищет существующие элементы и предлагает либо обновить их, либо создать новые. Перед первой загрузкой справочника на сотни строк сделайте резервную копию базы — откатить массовое создание элементов вручную долго.

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

Если в нужном объекте нет кнопки «Загрузить», выручает внешняя обработка загрузки из табличного документа. Её ставят через Администрирование → Печатные формы, отчёты и обработки → Дополнительные отчёты и обработки и запускают из раздела, к которому она привязана. Обработка пишет данные в любой справочник, документ или регистр, поэтому доверяйте её только тому, кто понимает структуру базы.

Прикрепление файлов к документам и справочникам

Сканы, PDF и фотографии в 1С хранятся как присоединённые файлы. Они видны всем, у кого есть доступ к объекту.

Как прикрепить файл

  1. Откройте документ или карточку контрагента.
  2. Нажмите на значок скрепки в командной панели формы — откроется список «Присоединённые файлы».
  3. Нажмите Добавить и выберите «Файл с диска», «Сканировать» или создание по шаблону.
  4. Либо просто перетащите файл мышью из проводника в форму списка присоединённых файлов.

Файл можно открыть, отредактировать и вернуть обратно: команда «Редактировать» захватывает его для правки, а «Закончить редактирование» сохраняет новую версию в базу.

Где физически хранятся файлы

По умолчанию файлы лежат внутри информационной базы. Через пару лет активного сканирования база легко вырастает на десятки гигабайт, бэкап становится долгим.

Выход — хранение в томах на диске. Включается в разделе Администрирование → Общие настройки, в группе настроек работы с файлами. После включения нужно создать том — указать сетевую папку, куда 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С сохраняет файл и отвечает кодом.

Что нужно настроить

  1. В конфигураторе (лучше в расширении, чтобы не снимать типовую с поддержки) добавьте HTTP-сервис, задайте корневой URL, например upload.
  2. Добавьте шаблон URL /file/{name} и метод POST с обработчиком.
  3. Опубликуйте базу на веб-сервере (Apache или IIS): Администрирование → Публикация на веб-сервере в конфигураторе. Отметьте публикацию HTTP-сервисов, а для сервиса из расширения — ещё и публикацию HTTP-сервисов расширений.
  4. Создайте в базе отдельного пользователя для обмена с минимальными правами.

Обработчик метода 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 целиком читается в табличный документ методом ТабличныйДокумент.Прочитать(ПутьКФайлу), дальше значения берут из областей по номерам строк и колонок.

Сопоставление полей
order.number→Номер входящего документа
items.sku→Номенклатура (поиск по артикулу)
items.qty→Количество
items.price→Цена
customer.inn→Контрагент (поиск по ИНН)

Сопоставление полей зафиксируйте письменно до начала разработки. Половина вопросов «почему не загрузилось» потом снимается одним взглядом на эту таблицу.

Почему файл не загружается в 1С

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

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

Есть ли ограничение на размер присоединённого файла?
Да, в настройках работы с файлами задаётся максимальный размер одного файла. Если большой файл не прикрепляется, проверьте это значение у администратора базы.
Можно ли загрузить файл в 1С через веб-клиент?
Да. Присоединённые файлы и команды загрузки из Excel работают в веб-клиенте: браузер передаёт файл на сервер, дальше всё как в тонком клиенте.
Чем HTTP-сервис отличается от веб-сервиса в 1С?
Веб-сервис работает по протоколу SOAP и описывается WSDL. HTTP-сервис принимает обычные HTTP-запросы с любым телом, поэтому сайтам и мобильным приложениям подключаться к нему проще.
Как загрузить в 1С выписку банка из файла?
В БП 3.0 откройте Банк и касса → Банковские выписки, нажмите «Загрузить» и укажите файл kl_to_1c.txt, который выгрузил клиент-банк. Программа создаст списания и поступления по каждой строке.
Нужно ли снимать конфигурацию с поддержки, чтобы добавить HTTP-сервис?
Нет. HTTP-сервис можно добавить в расширение конфигурации, и типовая останется на полной поддержке, обновления будут ставиться как обычно.