Загрузка файлов в 1С 8.3 — от кнопки «Загрузить» до HTTP-сервиса
Содержание
Отправить файл в 1С можно шестью путями. Разовую таблицу Excel загружают кнопкой Загрузить в списке или табличной части документа. Банковскую выписку — через Банк и касса → Банковские выписки. Регулярные файлы от поставщика разбирает внешняя обработка, обмен с другой базой идёт через XML. Если файлы шлёт сайт или сторонняя программа, нужен HTTP-сервис, OData или COM-соединение.
Выбор зависит от трёх вещей: кто отправляет файл (человек или программа), как часто и в каком формате. Человеку с одной таблицей в месяц API не нужен. Интернет-магазину с сотней заказов в день не подойдёт ручная загрузка.
Какой способ передачи файла в 1С выбрать
Сначала определите сценарий, потом инструмент. Сводная таблица:
| Способ | Когда подходит | Кто запускает | Что нужно |
|---|---|---|---|
Кнопка Загрузить в форме | Разовый список товаров, контрагентов, строк документа | Пользователь | Ничего, есть в типовых конфигурациях |
| Обмен с банком | Выписки из клиент-банка | Бухгалтер | Файл в формате 1CClientBankExchange |
| Внешняя обработка | Регулярные файлы одного формата | Пользователь или регламентное задание | Файл .epf, права на дополнительные обработки |
| XML / EnterpriseData | Перенос данных между базами 1С | Пользователь или расписание | Настроенная синхронизация или правила обмена |
| HTTP-сервис, OData, SOAP | Файлы от сайта, CRM, мобильного приложения | Внешняя программа | Публикация базы на веб-сервере |
| COM-соединение | Скрипт на той же Windows-машине | Внешняя программа | Зарегистрированный comcntr.dll |
Отдельный случай — прикрепить файл к документу : скан договора, фото накладной. Это не загрузка данных, а вложение. Про него ниже, в ручных способах.
Загрузка файла в 1С вручную через интерфейс
Таблица Excel в справочник или документ
В БП 3.0, УТ 11 и других типовых конфигурациях на базе БСП есть встроенный загрузчик табличных данных. Он работает так:
- Откройте список справочника (например,
Справочники → Номенклатура) или табличную часть документа. - Нажмите
Загрузить. Если кнопки не видно на панели, ищите её в менюЕщё. - В открывшейся форме вставьте данные из Excel через буфер обмена или выберите файл.
- Сопоставьте колонки файла с реквизитами 1С: наименование, артикул, количество, цена.
- Программа покажет, какие строки нашла в базе, какие создаст заново, а какие не распознала.
- Проверьте список и подтвердите перенос.
Самая частая беда — дубли номенклатуры. Если в файле «Бумага А4» без артикула, а в базе «Бумага офисная А4», загрузчик создаст новую позицию. Сопоставляйте по артикулу или коду, а не по наименованию.
Форматы: .xlsx, .xls, .csv, а также табличный документ 1С .mxl. Первая строка с заголовками колонок облегчает сопоставление.
Банковская выписка
Клиент-банк выгружает текстовый файл (часто он называется kl_to_1c.txt). Внутри — формат 1CClientBankExchange, его понимают все бухгалтерские программы на 1С.
- Откройте
Банк и касса → Банковские выписки. - Нажмите
Загрузитьи укажите файл. - Программа покажет список платежей и подберёт контрагентов по ИНН.
- Строки, где контрагент или договор не найден, выделяются — заполните их вручную.
- Нажмите
Загрузитьв форме обработки.
Если банк поддерживает прямой обмен (DirectBank), файл вообще не нужен: выписки приходят в 1С по кнопке.
Вложение к документу или справочнику
Скан, PDF, фото прикрепляют через кнопку со скрепкой («Присоединённые файлы») в форме документа. Файл можно перетащить мышью прямо в список вложений.
Где хранятся файлы, решает администратор: внутри информационной базы или в томах на диске. Если вложений много, базу лучше разгрузить и хранить их в томах — иначе резервные копии быстро растут.
Регулярная загрузка через внешнюю обработку
Когда файл приходит каждую неделю в одном формате (прайс поставщика, заказы маркетплейса, отчёт склада), ручное сопоставление колонок утомляет. Здесь выручает внешняя обработка — файл .epf с кодом под конкретный формат.
Как подключить обработку
- Откройте
Администрирование → Печатные формы, отчеты и обработки. - Включите флажок дополнительных отчётов и обработок и перейдите в их список.
- Нажмите
Добавить из файлаи выберите.epf. - Укажите, в каких разделах обработка видна, и каким пользователям доступна.
- Запишите карточку.
Теперь обработка открывается из раздела, а не через Файл → Открыть. Плюс: её можно поставить на расписание, если разработчик предусмотрел запуск как регламентного задания.
Что должна уметь хорошая обработка загрузки
- 📄 читать файл в той кодировке, в которой его шлют (UTF-8 или Windows-1251);
- 🔎 искать элементы по коду, артикулу или ИНН, а не по названию;
- 🧪 показывать предпросмотр перед записью;
- 📝 писать протокол: что создано, что пропущено и почему;
- ♻️ не задваивать данные при повторной загрузке того же файла.
Перед первой загрузкой новой обработкой сделайте резервную копию базы — обработка пишет данные пакетом, и откатить сотню созданных документов вручную долго.
Файлы XML и JSON: обмен между базами и чтение кодом
Обмен между базами 1С
Для переноса данных между типовыми конфигурациями используют формат EnterpriseData. Настройка — в Администрирование → Синхронизация данных. Там выбирают программу-приёмник и транспорт: общий каталог, FTP, электронная почта или интернет.
Для конфигураций без синхронизации есть обработка «Универсальный обмен данными в формате XML». Она загружает файл, выгруженный по правилам обмена из «Конвертации данных». Без правил она не работает .
Обработка «Выгрузка и загрузка данных XML» переносит объекты один к одному между базами с одинаковой конфигурацией. Для разных конфигураций она не годится — ссылки на объекты не совпадут.
Чтение JSON во встроенном языке
Если сторонняя программа кладёт JSON-файл, его разбирают штатными объектами платформы. Пример файла:
{"orders": [
{"number": "A-101", "client": "7701234567", "sum": 15400.50},
{"number": "A-102", "client": "5009876543", "sum": 3200}
]}
Код, который читает его и выводит номера и суммы:
Чтение = Новый ЧтениеJSON;
Чтение.ОткрытьФайл("C:\Exchange\orders.json");
Данные = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
Для Каждого Заказ Из Данные.orders Цикл
Сообщить(СтрШаблон("Заказ %1, ИНН %2, сумма %3",
Заказ.number, Заказ.client, Формат(Заказ.sum, "ЧДЦ=2; ЧГ=0")));
КонецЦикла;
ПрочитатьJSON возвращает структуру, массивы становятся массивами. ИНН в файле стоит держать строкой: числом он потеряет ведущий ноль.
XML читают объектом ЧтениеXML или через ФабрикаXDTO, если есть XSD-схема. Для простых файлов хватает последовательного чтения узлов.
Отправить файл в 1С по API: HTTP-сервис, OData, SOAP
Когда файлы шлёт сайт, CRM или телефон, база публикуется на веб-сервере (IIS или Apache) через утилиту публикации из Конфигуратора. После этого у неё появляется адрес, на который внешняя программа делает запросы.
| Механизм | Что умеет | Нужен ли программист 1С |
|---|---|---|
| Стандартный интерфейс OData | Читать и записывать объекты базы по REST | Нет, настраивается в типовой конфигурации |
| HTTP-сервис | Любая логика: принять файл, разобрать, создать документ | Да, пишется в расширении |
| Веб-сервис SOAP | То же, но по строгой WSDL-схеме | Да |
OData
В типовых конфигурациях стандартный интерфейс OData включают в разделе Администрирование → Синхронизация данных: там же выбирают, какие объекты доступны. Адрес выглядит так: https://server/base/odata/standard.odata/.
OData удобен для структурированных данных, но не для самих файлов. Загрузить через него PDF как вложение неудобно.
HTTP-сервис для приёма файлов
Для приёма файла пишут HTTP-сервис в расширении конфигурации — типовая остаётся на поддержке. Обработчик метода POST сохраняет тело запроса:
Функция ЗагрузкаФайлаPOST(Запрос)
ДвоичныеДанные = Запрос.ПолучитьТелоКакДвоичныеДанные();
ИмяФайла = Запрос.ПараметрыURL.Получить("name");
Если ИмяФайла = Неопределено Тогда
Возврат Новый HTTPСервисОтвет(400);
КонецЕсли;
ДвоичныеДанные.Записать("D:\Inbox\" + ИмяФайла);
Возврат Новый HTTPСервисОтвет(200);
КонецФункции
Шаблон URL сервиса задаётся вида /upload/{name}. Внешняя система отправляет файл так:
curl -X POST -u integr:пароль --data-binary @order.xml \
"https://server/base/hs/files/upload/order.xml"
Имя файла из запроса в примере используется как есть. В рабочем коде проверьте его: уберите .., слэши и двоеточия, иначе отправитель сможет записать файл в любую папку сервера.
SOAP
Веб-сервисы выбирают, когда партнёр требует WSDL или уже работает по SOAP. Файл передают в теле сообщения в Base64 — это раздувает размер примерно на треть.
COM-соединение: скрипт на Windows передаёт данные в базу
COM подходит, если внешняя программа работает на той же Windows-машине или в той же сети и умеет вызывать COM-объекты: Python, PowerShell, VBScript, Delphi.
- Зарегистрируйте компоненту: из папки
binустановленной платформы выполнитеregsvr32 comcntr.dllот имени администратора. - Разрядность компоненты должна совпадать с разрядностью программы-клиента: 64-битному Python нужна 64-битная платформа.
- Подключитесь к базе и вызывайте её объекты.
Пример на Python (пакет pywin32):
import win32com.client
connector = win32com.client.Dispatch("V83.COMConnector")
base = connector.Connect('File="C:\\Bases\\Buh";Usr="Интеграция";Pwd="***";')
print(base.Метаданные.Имя)
Для серверной базы строка другая: Srvr="server";Ref="buh";.
COM-соединение занимает лицензию, как обычный сеанс. Не держите его открытым часами: подключились, передали данные, освободили объект.
Обмен через общую папку для распределённых баз
В распределённой информационной базе (РИБ) и в синхронизации данных самый простой транспорт — общий каталог. Узлы кладут туда файлы сообщений и забирают ответные.
Как это устроено:
- 📁 одна сетевая папка, к которой есть доступ у обеих баз;
- 🔄 каждая база выгружает свои изменения в файл и читает файл от соседа;
- ⏰ выгрузку и загрузку ставят на расписание в настройках синхронизации;
- ✅ после загрузки база подтверждает приём, и в следующем сообщении изменения не дублируются.
Для удалённых филиалов вместо сетевой папки берут FTP-каталог — механизм тот же.
В клиент-серверном варианте файлы читает не ваш компьютер, а сервер 1С. Папка должна быть доступна учётной записи, под которой запущена служба сервера (по умолчанию USR1CV8), а путь — указан в формате UNC: \\fileserver\exchange\, а не Z:\.
Ошибки при загрузке файлов и защита обмена
Частые сбои
Безопасность
- 🔐 Для внешних программ заведите отдельного пользователя 1С с минимальными правами — только на нужные объекты. Не давайте интеграции роль полных прав.
- 🌐 HTTP-сервисы и OData публикуйте по HTTPS. Логин и пароль в обычном HTTP передаются почти открыто.
- 🧾 Пароль не храните в тексте скрипта — используйте переменные окружения или хранилище учётных данных Windows.
- 🛡️ Внешние обработки
.epfисполняют код. Подключайте только те, источник которых знаете. Защита от опасных действий в свойствах пользователя предупредит перед открытием непроверенного файла — не отключайте её без необходимости. - 🗂️ Папку обмена закройте от посторонних: в ней лежат данные контрагентов и суммы.