Интеграция 1С с внешними веб-приложениями (например, медицинскими информационными системами или интернет-магазинами) — это классическая задача, требующая понимания архитектуры платформы 1С и протоколов обмена данными. В данной статье мы подробно разберем, какие форматы и инструменты лучше всего использовать для автоматизированной передачи документов, таких как акты оказанных услуг со списанием материалов.
Платформа 1С:Предприятие 8.3 является универсальной системой и позволяет работать практически с любыми текстовыми форматами. Проанализируем наиболее популярные из них:
ЧтениеJSON и ЗаписьJSON.ЧтениеXML, ЗаписьXML и СериализаторXDTO.Рассмотрим подробнее технические способы реализации обмена.
Это самый гибкий и рекомендуемый разработчиками путь. Мы создаем в 1С "точку входа", на которую внешнее приложение будет отправлять POST-запросы с данными в формате JSON или XML. Разберем по шагам, как это реализовать:
1. Создание HTTP-сервиса: В конфигураторе или расширении создается объект "HTTP-сервис". Для него определяется шаблон URL (например, /import_doc/) и метод (POST).
2. Написание программного кода: В модуле сервиса мы описываем логику обработки входящего запроса. Выясним причину, по которой этот метод считается лучшим: вы можете сами контролировать, как 1С должна реагировать на данные. Например, при получении JSON система должна найти контрагента по ИНН, номенклатуру по артикулу и только после этого создать документ.
Пример кода для обработки входящего JSON-запроса:
Функция ДобавитьДокумент(Запрос)
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Запрос.ПолучитьТелоКакСтроку());
Данные = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
// Создаем документ программно
НовыйДокумент = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию("Наша организация");
// Поиск контрагента
НовыйДокумент.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", Данные.ИНН_Клиента);
// Заполнение табличной части
Для Каждого СтрокаДанных Из Данные.Товары Цикл
НоваяСтрока = НовыйДокумент.Товары.Добавить();
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", СтрокаДанных.Артикул);
НоваяСтрока.Количество = СтрокаДанных.Количество;
НоваяСтрока.Цена = СтрокаДанных.Цена;
КонецЦикла;
Попытка
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
Возврат Новый HTTPСервисОтвет(201); // Created
Исключение
Возврат Новый HTTPСервисОтвет(500); // Ошибка сервера
КонецПопытки;
КонецФункции
Платформа 1С предоставляет автоматический интерфейс OData. Если его включить, то все справочники и документы 1С становятся доступными через HTTP-запросы без написания кода на стороне 1С.
Особенности этого метода:
Number, Date, Inventory_LineItems).posted=true. Если материалов на складе не хватит, 1С вернет ошибку, и документ останется только в состоянии "записан" (черновик).Проанализируем ситуацию, когда необходимо использовать стандартные механизмы синхронизации. 1С:Бухгалтерия поддерживает универсальный формат обмена EnterpriseData. Если ваша внешняя система сможет формировать XML-файл в строгом соответствии с XSD-схемой этого формата, то загрузку можно будет настроить через стандартный функционал "Синхронизация данных".
Этот метод хорош тем, что он поддерживает версионность и гарантирует корректность заполнения всех бухгалтерских регистров. Однако разработка формирования такого XML на стороне стороннего приложения (МИС) может оказаться трудоемкой задачей из-за сложности структуры EnterpriseData.
Для того чтобы 1С могла принимать запросы извне, необходимо выполнить несколько системных настроек:
Robot_Exchange). В запросах от внешней системы нужно будет передавать логин и пароль (Basic Auth).Если вы только начинаете работать с 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С:Бухгалтерия берет на себя всю сложность проводок, налогового учета и складских остатков.