Как организовать загрузку документов из внешнего веб-приложения в 1С:Бухгалтерия 8.3?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Интеграция 1С с внешними веб-приложениями (например, медицинскими информационными системами или интернет-магазинами) — это классическая задача, требующая понимания архитектуры платформы 1С и протоколов обмена данными. В данной статье мы подробно разберем, какие форматы и инструменты лучше всего использовать для автоматизированной передачи документов, таких как акты оказанных услуг со списанием материалов.

Выбор формата данных: JSON или XML?

Платформа 1С:Предприятие 8.3 является универсальной системой и позволяет работать практически с любыми текстовыми форматами. Проанализируем наиболее популярные из них:

  1. JSON (JavaScript Object Notation): На сегодняшний день это наиболее предпочтительный формат для веб-интеграций. Он компактен, легко читается человеком и поддерживается всеми современными языками программирования. В 1С для работы с ним используются объекты ЧтениеJSON и ЗаписьJSON.
  2. XML (eXtensible Markup Language): Традиционный формат для экосистемы 1С. Он более избыточен по объему, но обладает строгой структурой и возможностью валидации по XSD-схемам. В 1С для этого применяются объекты ЧтениеXML, ЗаписьXML и СериализаторXDTO.
  3. EnterpriseData: Это стандартизированный формат обмена данными, разработанный фирмой "1С". Он основан на XML и содержит готовые описания для большинства типовых документов (реализации, поступления, платежки).

Рассмотрим подробнее технические способы реализации обмена.

Способ 1: Использование собственных HTTP-сервисов в 1С

Это самый гибкий и рекомендуемый разработчиками путь. Мы создаем в 1С "точку входа", на которую внешнее приложение будет отправлять POST-запросы с данными в формате JSON или XML. Разберем по шагам, как это реализовать:

1. Создание HTTP-сервиса: В конфигураторе или расширении создается объект "HTTP-сервис". Для него определяется шаблон URL (например, /import_doc/) и метод (POST).

2. Написание программного кода: В модуле сервиса мы описываем логику обработки входящего запроса. Выясним причину, по которой этот метод считается лучшим: вы можете сами контролировать, как 1С должна реагировать на данные. Например, при получении JSON система должна найти контрагента по ИНН, номенклатуру по артикулу и только после этого создать документ.

Пример кода для обработки входящего JSON-запроса:


Функция ДобавитьДокумент(Запрос)
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(Запрос.ПолучитьТелоКакСтроку());
    Данные = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
    
    // Создаем документ программно
    НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
    НовыйДокумент.Дата = ТекущаяДата();
    НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию("Наша организация");
    
    // Поиск контрагента
    НовыйДокумент.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", Данные.ИНН_Клиента);
    
    // Заполнение табличной части
    Для Каждого СтрокаДанных Из Данные.Товары Цикл
        НоваяСтрока = НовыйДокумент.Товары.Добавить();
        НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", СтрокаДанных.Артикул);
        НоваяСтрока.Количество = СтрокаДанных.Количество;
        НоваяСтрока.Цена = СтрокаДанных.Цена;
    КонецЦикла;
    
    Попытка
        НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
        Возврат Новый HTTPСервисОтвет(201); // Created
    Исключение
        Возврат Новый HTTPСервисОтвет(500); // Ошибка сервера
    КонецПопытки;
КонецФункции

Способ 2: Встроенный REST API (OData)

Платформа 1С предоставляет автоматический интерфейс OData. Если его включить, то все справочники и документы 1С становятся доступными через HTTP-запросы без написания кода на стороне 1С.

Особенности этого метода:

Способ 3: Обмен через EnterpriseData

Проанализируем ситуацию, когда необходимо использовать стандартные механизмы синхронизации. 1С:Бухгалтерия поддерживает универсальный формат обмена EnterpriseData. Если ваша внешняя система сможет формировать XML-файл в строгом соответствии с XSD-схемой этого формата, то загрузку можно будет настроить через стандартный функционал "Синхронизация данных".

Этот метод хорош тем, что он поддерживает версионность и гарантирует корректность заполнения всех бухгалтерских регистров. Однако разработка формирования такого XML на стороне стороннего приложения (МИС) может оказаться трудоемкой задачей из-за сложности структуры EnterpriseData.

Обязательные технические условия для веб-интеграции

Для того чтобы 1С могла принимать запросы извне, необходимо выполнить несколько системных настроек:

  1. Публикация на веб-сервере: База 1С должна быть опубликована на веб-сервере (IIS или Apache). Это позволяет базе получить URL-адрес в локальной сети или интернете.
  2. Аутентификация: Рекомендуется создать в 1С специального пользователя для интеграции (например, Robot_Exchange). В запросах от внешней системы нужно будет передавать логин и пароль (Basic Auth).
  3. Безопасность: Если обмен идет через интернет, обязательно использование протокола HTTPS для шифрования данных.

Рекомендации для новичков

Если вы только начинаете работать с 1С, рассмотрим наиболее простой путь:

Создайте HTTP-сервис в 1С. Это позволит вам принимать данные в том формате, который удобен вашей медицинской системе (простой плоский JSON). На стороне 1С вы сможете написать понятный код, который будет искать объекты (пациентов как контрагентов, услуги как номенклатуру) и создавать нужные документы. Это гораздо проще, чем пытаться подстроиться под жесткие требования OData или EnterpriseData.

Посмотрим на пример структуры JSON, который будет удобно обрабатывать в 1С:


{
    "ID_Визита": "MIS-12345",
    "Дата": "2023-10-25T14:30:00",
    "ИНН_Пациента": "7701020304",
    "Услуги": [
        {
            "Артикул": "MED-001",
            "Наименование": "Прием терапевта",
            "Количество": 1,
            "Цена": 1500
        }
    ],
    "Материалы": [
        {
            "Артикул": "MAT-55",
            "Количество": 2
        }
    ]
}

Такой подход обеспечивает четкое разделение ответственности: ваша МИС просто "отдает" факт оказания услуги, а 1С:Бухгалтерия берет на себя всю сложность проводок, налогового учета и складских остатков.

← На главную