Moderne Geschäftsprozesse funktionieren selten isoliert. Das 1C-Buchhaltungssystem muss Daten mit Websites, CRM-Systemen, Lieferdiensten, Banken und Dutzenden anderer Dienste austauschen. Dazu werden APIs verwendet – Programmierschnittstellen, die es Systemen ermöglichen, miteinander zu kommunizieren. Lassen Sie uns herausfinden, wie das funktioniert und wie Sie mit der Erstellung von Integrationen in 1C beginnen können.
Was sind APIs und warum braucht man sie?
API (Application Programming Interface) ist eine Reihe von Regeln, nach denen ein Programm Daten oder Funktionen von einem anderen anfordern kann. Stellen Sie sich vor, Sie gehen in ein Restaurant. Sie gehen nicht selbst in die Küche, um zu kochen — Sie sagen dem Kellner, was Sie bestellen möchten, er gibt die Bestellung an die Küche weiter und bringt dann das fertige Gericht. Die API funktioniert wie dieser Kellner: Sie nimmt Anfragen entgegen, bearbeitet sie und gibt das Ergebnis zurück.
Typische Aufgaben der 1C-Integration:
Bestellungen aus dem Online-Shop laden
Senden von Dokumenten an die Bank
Abrufen von Wechselkursen
Synchronisation mit CRM-Systemen
Daten an Lieferdienste senden
Abrufen von Informationen über Gegenparteien aus externen Datenbanken
REST und SOAP: zwei Ansätze zur Erstellung von APIs
SOAP — der klassische Ansatz
SOAP (Simple Object Access Protocol) ist ein Datenaustauschprotokoll, das Ende der 90er Jahre aufkam. Es verwendet XML für die Nachrichtenübertragung und hat eine strenge Struktur.
Beispiel einer SOAP-Anfrage:
<?xml version="1.0"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetClientInfo xmlns="http://example.com/">
<ClientID>12345</ClientID>
</GetClientInfo>
</soap:Body>
</soap:Envelope>SOAP-Dienste werden mit WSDL (Web Services Description Language) beschrieben, einer speziellen Datei, die alle Informationen zu verfügbaren Methoden, Parametern und Datentypen enthält. Es ist wie eine Schritt-für-Schritt-Anleitung zur Verwendung der API.
Vorteile von SOAP:
Strenge Typisierung und Datenvalidierung
Integrierte Sicherheitsunterstützung
Unterstützung komplexer Operationen und Transaktionen
Standardisierte Fehlerbehandlung
Nachteile von SOAP:
Umfangreiches XML erhöht die Größe der übertragenen Daten
Schwieriger zu erlernen und einzurichten
Langsamer aufgrund der XML-Verarbeitung
REST ist ein moderner Standard
REST (Representational State Transfer) ist ein Architekturstil, der standardmäßige HTTP-Methoden verwendet. REST ist einfacher, leichter und schneller als SOAP.
Grundlegende HTTP-Methoden in REST:
GET — Daten erhalten
POST — neuen Eintrag erstellen
PUT — vorhandenen Eintrag aktualisieren
DELETE — Eintrag löschen
Beispiel einer REST-Anfrage (Abrufen von Kundeninformationen):
GET https://api.example.com/clients/12345Vorteile von REST:
Benutzerfreundlichkeit
Schnelle Arbeit
Kompakte Daten (normalerweise JSON)
Einfach über Browser oder Postman zu testen
Nachteile von REST:
Weniger Standardisierung (jede API kann auf ihre eigene Weise eingerichtet werden)
Keine integrierte Unterstützung für komplexe Operationen
JSON — Datenaustauschsprache
JSON (JavaScript Object Notation) ist ein Textformat zum Übertragen strukturierter Daten. Aufgrund seiner Einfachheit und Lesbarkeit ist es zum Standard für REST-APIs geworden.
Beispiel für JSON-Daten:
{
"clientId": "12345",
"name": "Romashka LLC",
"inn": "7701234567",
"contacts": {
"phone": "+7 495 123-45-67",
"email": "info@romashka.ru"
},
"orders": [
{
"id": "ORD-001",
"date": "2024-12-01",
"amount": 45000
}
]
}JSON ist für Menschen leicht lesbar und kann einfach von Programmen verarbeitet werden. 1C verfügt über integrierte Tools für die Arbeit mit JSON.
Arbeiten mit HTTP-Anfragen in 1C
Zum Senden und Empfangen von Daten über die API in 1C wird das Objekt HTTPСоединение und HTTPЗапрос verwendet.
Einfache GET-Anfrage
// Verbindung zum Server wird hergestellt
Соединение = Новый HTTPСоединение(
"api.example.com", // Serveradresse
443, // Port (443 für HTTPS)
, // Login
, // Passwort
, // Proxy
30, // Timeout in Sekunden
Новый ЗащищенноеСоединениеOpenSSL() // für HTTPS
);
// Anfrage erstellen
Запрос = Новый HTTPЗапрос("/clients/12345");
// Wir senden eine Anfrage und erhalten eine Antwort
Ответ = Соединение.Получить(Запрос);
// Überprüfen Sie den Antwortcode
Если Ответ.КодСостояния = 200 Тогда
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
Сообщить(ТелоОтвета);
Иначе
Сообщить("Error: " + Ответ.КодСостояния);
КонецЕсли;POST-Anfrage mit JSON-Daten
// Wir bereiten die Daten vor
ДанныеJSON = Новый Структура;
ДанныеJSON.Вставить("name", "Vasilyok LLC");
ДанныеJSON.Вставить("inn", "7702345678");
// Konvertieren in JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, ДанныеJSON);
СтрокаJSON = ЗаписьJSON.Закрыть();
// Anfrage erstellen
Запрос = Новый HTTPЗапрос("/clients");
Запрос.Заголовки.Вставить("Content-Type", "application/json");
Запрос.УстановитьТелоИзСтроки(СтрокаJSON);
// Wird gesendet
Соединение = Новый HTTPСоединение("api.example.com", 443, , , , 30,
Новый ЗащищенноеСоединениеOpenSSL());
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
// Antwort wird bearbeitet
Если Ответ.КодСостояния = 201 Тогда
Сообщить("Customer successfully created");
КонецЕсли;JSON-Parsing in 1C
Zum Lesen von JSON wird ЧтениеJSON verwendet:
СтрокаJSON = Ответ.ПолучитьТелоКакСтроку();
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
Данные = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
// Jetzt können wir auf die Daten zugreifen
Имя = Данные["name"];
ИНН = Данные["inn"];
Телефон = Данные["contacts"]["phone"];Wenn die JSON-Struktur im Voraus bekannt ist, können Sie die Deserialisierung in der Struktur verwenden:
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
Данные = ПрочитатьJSON(ЧтениеJSON, Истина); // Wahrheit = in die Struktur lesen
ЧтениеJSON.Закрыть();
API-Authentifizierung
Die meisten APIs erfordern eine Authentifizierung. Die wichtigsten Methoden:
Basic Authentication
Login und Passwort werden im Header übertragen:
Запрос = Новый HTTPЗапрос("/api/data");
Логин = "user";
Пароль = "password";
СтрокаАвторизации = Base64Строка(Логин + ":" + Пароль);
Запрос.Заголовки.Вставить("Authorization", "Basic " + СтрокаАвторизации);API Key
Ein spezieller Schlüssel wird in der Kopfzeile oder im Parameter übergeben:
Запрос = Новый HTTPЗапрос("/api/data");
Запрос.Заголовки.Вставить("X-API-Key", "your_secret_key");Bearer Token (OAuth)
Der Zugriffstoken wird durch eine separate Anfrage erhalten:
Запрос = Новый HTTPЗапрос("/api/data");
Запрос.Заголовки.Вставить("Authorization", "Bearer " + Токен);Fehlerbehandlung
Die Fehlerbehandlung muss immer berücksichtigt werden:
Попытка
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
// Erfolgreiche Anfrage
Данные = ПолучитьДанныеИзОтвета(Ответ);
ИначеЕсли Ответ.КодСостояния = 404 Тогда
ВызватьИсключение("Resource not found");
ИначеЕсли Ответ.КодСостояния = 401 Тогда
ВызватьИсключение("Authorization error");
Иначе
ВызватьИсключение("Server error: " + Ответ.КодСостояния);
КонецЕсли;
Исключение
Сообщить("Error while working with API: " + ОписаниеОшибки());
ЗаписьЖурналаРегистрации("Integration.API",
УровеньЖурналаРегистрации.Ошибка,
,
,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())
);
КонецПопытки;Arbeiten mit SOAP in 1C
Für die Arbeit mit SOAP-Diensten kann 1C automatisch ein Objekt auf Basis von WSDL erstellen:
// Wir definieren den SOAP-Dienst über WSDL
Попытка
WSОпределения = Новый WSОпределения(
"http://example.com/service?wsdl",
"Login",
"Password"
);
// Wir erstellen einen Proxy für die Arbeit mit dem Dienst
WSПрокси = Новый WSПрокси(WSОпределения,
"ServiceNamespace",
"ServiceName");
// Wir rufen die Servicemethode auf
Результат = WSПрокси.GetClientInfo("12345");
Исключение
Сообщить("Error while working with SOAP: " + ОписаниеОшибки());
КонецПопытки;Praktische Tipps
Verwenden Sie Konstanten für Adressen und Schlüssel. Speichern Sie URLs und API-Schlüssel nicht direkt im Code, sondern in Konstanten oder Einstellungen. Dies erleichtert das Ändern der Verbindungseinstellungen.
Protokollieren Sie alle Operationen. Protokollieren Sie alle Aufrufe externer APIs: Anfragen, Antworten, Fehler. Dies hilft beim Debuggen.
Timeouts verarbeiten. Externe Dienste sind möglicherweise nicht verfügbar oder reagieren langsam. Setzen Sie angemessene Zeitlimits und behandeln Sie Situationen, in denen der Dienst nicht reagiert, korrekt.
Testen Sie mit Postman. Testen Sie die API mit Postman oder einem ähnlichen Tool, bevor Sie Code in 1C schreiben. Dies hilft, die Struktur von Anfragen und Antworten zu verstehen.
Berücksichtigen Sie die API-Limits. Viele Dienste begrenzen die Anzahl der Anfragen pro Zeiteinheit. Stellen Sie Mechanismen zur Begrenzung der Häufigkeit von Anfragen bereit.
Verwenden Sie die asynchrone Verarbeitung. Für Massenoperationen ist es besser, Hintergrundaufgaben zu verwenden, um die Arbeit des Benutzers nicht zu blockieren.
Beispiel für echte Integration
Erstellen Sie eine einfache Integration, um den Wechselkurs von der Website der Zentralbank der Russischen Föderation abzurufen:
Функция ПолучитьКурсВалюты(КодВалюты, Дата)
СтрокаДаты = Формат(Дата, "DF=dd.MM.yyyy");
Соединение = Новый HTTPСоединение("www.cbr.ru", 443, , , , 30,
Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос("/scripts/XML_daily.asp?date_req=" + СтрокаДаты);
Попытка
Ответ = Соединение.Получить(Запрос);
Если Ответ.КодСостояния = 200 Тогда
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
// XML-Analyse
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(ТелоОтвета);
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента
И Чтение.Имя = "Valute" Тогда
ТекКод = "";
ТекКурс = 0;
Пока Чтение.ПрочитатьАтрибут() Цикл
Если Чтение.Имя = "ID" И Чтение.Значение = КодВалюты Тогда
// Wir haben die richtige Währung gefunden, lesen Sie den Kurs
Пока Чтение.Прочитать() Цикл
Если Чтение.Имя = "Value" Тогда
Чтение.Прочитать();
СтрокаКурса = СтрЗаменить(Чтение.Значение, ",", ".");
Возврат Число(СтрокаКурса);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Чтение.Закрыть();
КонецЕсли;
Исключение
Сообщить("Error getting the rate: " + ОписаниеОшибки());
Возврат 0;
КонецПопытки;
Возврат 0;
КонецФункции
// Anwendung
Курс = ПолучитьКурсВалюты("R01235", ТекущаяДата()); // USD
Сообщить("Dollar exchange rate: " + Курс);Befund
Integrationen mit externen Diensten sind ein wichtiger Bestandteil der modernen Entwicklung in 1C. REST-APIs mit JSON sind aufgrund ihrer Einfachheit und Effizienz zum Standard geworden, obwohl SOAP in Unternehmenssystemen immer noch verwendet wird. Es ist besser, mit einfachen GET-Anfragen zu beginnen und schrittweise zu komplexeren Szenarien mit POST, PUT, Authentifizierung und Fehlerbehandlung überzugehen.
Nachdem Sie die Grundlagen von HTTP, JSON und API erlernt haben, können Sie 1C mit fast jedem modernen Dienst verbinden – von Online-Shops bis hin zu Bankensystemen.
Weiter geht's!
Sie können dieses Thema und vieles mehr studieren in Kodike – einer Plattform zum Erlernen der Programmierung mit praktischen Beispielen und realen Aufgaben.
Und wir haben auch einen coolen Telegram-Kanal mit einer freundlichen Entwickler-Community, in der Sie Fragen stellen, Erfahrungen teilen und über neue Materialien auf dem Laufenden bleiben können!
