Anwendung auf TSD und Kommunikation mit 1C: Enterprise 8.3 über HTTP-Service. Teil 1.1 (Detaillierte Beschreibung der API)

Dieser Teil erschien, nachdem ich mit der vollständigen Implementierung begonnen hatte. Nach dem Kampf musste die Struktur des Datenaustauschs geändert werden. Es stellte sich als sehr schwierig heraus, TSD in die Arbeit einzuführen. Als Software wurde „1C Mobile Platform“ gewählt Kotlin war sehr schwer. In diesem Teil werde ich darüber sprechen, wie der Austausch ursprünglich implementiert wurde, und Code am Beispiel eines Verzeichnisses sowohl auf der Serverseite als auch auf der Clientseite bereitstellen.

1. Allgemeine Beschreibung des Austauschalgorithmus.


Auf der Serverseite werden Austauschpläne mit automatischer Änderungsregistrierung verwendet. Die Praxis hat gezeigt, dass dies der kostengünstigste Weg in Bezug auf die Programmierung ist. Auf der TSD-Seite wurde in jedem Verzeichnis ein Dokument hinzugefügt, ein Requisit , in den Registern wurde ein Requisit mit demselben Namen hinzugefügt .

Der Austausch selbst ist nun in zwei Phasen unterteilt.

  1. Wir erhalten neue Daten, wir korrigieren ein Zeichen der Aktualisierung;
  2. Wir senden eine Bestätigung, dass die Daten empfangen wurden. Wenn die Antwort Ja lautet, entfernen wir das Zeichen des Updates.

Ein solches Schema trat auf, nachdem die TSD begann, den WiFi-Versorgungsbereich zu verlassen. Oft stellte sich heraus, dass die Daten kamen, aber die Antwort nicht gesendet wurde.

Um die Inbetriebnahme der TSD zu erleichtern, wurde jeweils ein Verzeichnis mit vordefinierten Werten angezeigt ( ).

2. Wie zuvor implementiert.


Die Anfrage wurde von der TSD initiiert. Alle 15 Sekunden wurden neue Daten für jedes Verzeichnis, Dokument und Register angefordert. Die Daten werden in Chargen von 100 Elementen gesammelt. Welches seine Grenzen auferlegte. Wenn Sie die Registrierung für den gesamten Knoten abschließen, werden die Daten ca. 30 Minuten lang geladen. weil In der aktuellen Implementierung gab es keinen Mechanismus, um die TSD über das Vorhandensein eines anderen Pakets zu informieren.

Ein Stück Code 1C auf TSD
 () 
	
	.();
	.();

	.();
	.();
			
	.();
	.();
	
	.();
	.();
	
	.();
	.();


Nachdem die Anzahl der Verzeichnisse mehr als fünf betrug, ergab sich ein trauriges Bild: Jede Aktion auf der Serverseite ist dieselbe. Die Datenanforderung ist unterschiedlich. Das Korrigieren von Änderungen für Verzeichnisse ist jedoch ein und dasselbe. Schauen wir uns das Beispiel von OKEY an. Kurz gesagt

  • Wir bereiten die Verbindung vor, nehmen alle Konstanten.
  • Wir bereiten eine Anfrage vor. Jedes Verzeichnis liegt in einer eigenen Route. Und dann folgt der Befehl mit den Parametern. so etwas :
    localhost/ws/okeis/getNew&node=.
  • Bereiten Sie die Antwortstruktur vor
  • Wir erhalten die Antwort und füllen die Struktur abhängig vom HTTP-Antwortcode aus.
  • Stellen Sie JSON bei Erfolg in 1C-Strukturen bereit.
  • Wir starten die Transaktion. Wir korrigieren Änderungen im Verzeichnis. Transaktion festschreiben
  • Wir nennen die Funktion, Änderungen auf der Serverseite festzuschreiben
  • Und jetzt ist die Fixierung auf der Serverseite genau gleich

Anfangs hatte jedes Verzeichnis sein eigenes Fixing-Verfahren, jetzt sieht es so aus.

Viel 1C-Code

	
 () 
HTTP = .HTTP();
	HTTP = .HTTP("okeis", "getAll?node="+(..()));
	
	 = HTTP.(HTTP);
	
	 =  ;
	.("", .);
	.("", .());

	 . = 200 
		 = .;
		 = .JSON();
		  .("") 
			();
			 = ;
			    .okeis 
				 = .code;
				 = .name;
				 = .fullName;
				 = .internationalReduction;
				
				 = ..();
				
				 () 
					 = .();
				
					 = ..();
				;
				
				. = ;
				. = ;
				. = ;
				. = ;
				. = ;
				
				
					.();
				
					 = ;
					;
				;
				
			;
			
			   
				();
			
				();
			;
		;			
	;




 get()
	
	 .URL.("") = "getAll" 
		
		(0,"  ");
		
		 = ..("node");
		
		 = ();
		 = HTTP(200, );
		
		(0,"  ");
		 ;
	;

	 = HTTP(400,  (",", , " "));
	 ;




 () 
	
	 =  ;
	. = "
	               |	.  
	               |
	               |	.  
	               |
	               |	.";
	
	 = .();
	 = .();
	
	 =  ;
	
	 .() 
		.( ("code", ..));
	;
	
	 =  ;
	.("okeis", );
	
	
	HTTP = .HTTP();
	HTTP = .HTTP("okeis", "dataObtained?node="+(..()));
	
	 = .();
	
	HTTP.();
	
	 = HTTP.(HTTP);
	
	 . = 200 
		();
		 = ;
				
		      
			 = ..(.code).();
			. = ;
			
				.();
			
				 = ;
				;
			;
				
		;
		
		   
			();
		
			();
		;
		
	;
	



 post()
	
	 = .URL.("");

	  = "dataObtained" 
		
		 = ..("node");
		 = ..("nameStructure");

		 = .();
		 = JSON();
		
		 =  ("", , , );
		
		  
			 = HTTP(200,  ("code", 0));
		
			 = HTTP(400,  ("code", 100));
		;
		
		 ;
	;
	 
	 = HTTP(400,  (",", , " "));
	 ;



 (, , , )
	
	 = ();
	
	();
	 = ;
	    [] 
		
		 = [].(.code);
		
		 () 
			
				.(,);
			
				 = ;
				;
			;	
		;
	;
	
	  
		();
		 ;
	
		();
		 ;
	;
	
	


Dieser Artikel beschreibt die Implementierung der Stirn. Tun Sie dies nicht, es sei denn, Sie müssen schnell einen Prototyp zusammenbauen und ihn im Kampf testen.

Wenn Ihnen der Artikel gefällt, werde ich Ihnen im nächsten Abschnitt erläutern, wie er jetzt implementiert wird.

All Articles