Konfiguracja sprzętu i oprogramowania

Standardowy interfejs Odata.

Drukuj (Ctrl+P)

Widać drugą część

Informacje ogólne

W wersji platformy 8.3.5.1068 , opublikowanym we wrześniu 2015 r., pojawił się mechanizm integracji 1C z zewnętrznymi programami za pomocą technologii Interfejs REST. Platforma wykorzystuje protokół OData jako protokół dostępu. Jest to otwarty protokół sieciowy do odpytywania i aktualizowania danych. Pozwala manipulować danymi za pomocą poleceń HTTP jako żądań. Odpowiedzi w wersji 8.3.5.1068 można było odbierać tylko w formacie Atom/XML . Jednak począwszy od wydania 8.3.8.1652 w sierpniu 2017 r. pojawiła się druga opcja pobierania danych w formacie JSON (JavaScript Object Notation). . W porównaniu z XML jest łatwy do odczytania przez ludzi i zajmuje mniej miejsca. Ponadto wszystkie przeglądarki mają wbudowane narzędzia do pracy z JSON.

Praca z protokołem OData na platformie 1C: Enterprise można znaleźć w książce 1C: Developer's Guide w rozdziale 17 Mechanizmy usług internetowych, akapit 17.2.1 Standardowy interfejs OData. Możesz też spojrzeć na przykłady rozszerzenia obsługi protokołu OData,

Wykorzystaj przewagę Interfejs REST. stwierdza, że ​​w celu uzyskania dostępu do danych systemowych z: aplikacja zewnętrzna nie jest wymagana modyfikacja kodu zastosowane rozwiązanie(na przykład, jeśli zastosowane rozwiązanie jest obsługiwane). Aby uzyskać ten dostęp, należy w specjalny sposób opublikować aplikację na serwerze WWW i określić, które obiekty konfiguracyjne będą w ten sposób wykorzystywane. Następnie systemy innych firm mogą uzyskiwać dostęp do Twojej aplikacji za pomocą żądań HTTP.

Publikacja standardowego interfejsu OData odbywa się za pomocą okna dialogowego publikowania na serwerze sieciowym (Administracja - Publikuj do serwer internetowy) i opisane w książce 1C: Enterprise 8.3. „Przewodnik administratora”.
Ważny! Aby obiekty konfiguracyjne były dostępne za pośrednictwem standardowego interfejsu OData, należy to włączyć za pomocą metody kontekstu globalnego Ustaw kompozycję StandardODataInterface().
Mechanizm ustawiania kompozycji obiektów dostępnych poprzez standardowy interfejs OData może być wykonany jako przetwarzanie zewnętrzne. Nie wymaga to modyfikacji zastosowanego rozwiązania.

Do interakcji z zewnętrznym serwerem WWW REST z 1C:Enterprise używane są narzędzia dostępne na platformie do pracy z HTTP: obiekty HTTPConnection, HTTPRequest i HTTPResponse.

W tej serii artykułów pokażę przykłady typowych operacji przy użyciu odpowiedniej metody HTTP;

  • Akwizycja danych — metoda DOSTWAĆ;
  • Tworzenie obiektów - metoda POCZTA;
  • Aktualizacja danych: metoda SKRAWEK- w tym przypadku można określić tylko te właściwości, które wymagają aktualizacji; metoda UMIEŚCIĆ– w tym przypadku konieczne jest określenie wszystkich właściwości podmiotu;
  • Usuwanie danych - metoda KASOWAĆ.

1. Przykłady akwizycji danych. Metoda HTTP GET

Serwerem będzie baza danych opublikowana na serwerze WWW o nazwie webbuha(Baza demo „Rachunkowość Przedsiębiorstwa 3.0”). Użyję formatu JSON jako formatu wymiany danych. Więcej informacji o pracy z JSON można znaleźć w dostępnej dokumentacji. Aby otrzymać dane z serwera metodą GET HTTP, należy utworzyć obiekt Czytanie JSON do sekwencyjnego odczytu danych JSON z pliku lub ciągu. Aby zorganizować sekwencyjną rejestrację obiektów i tekstów na serwerze metodą POST PATCH PUT HTTP, należy utworzyć obiekt Wpis JSON. Zauważ, że metoda DELETE nie wymaga JSON.

Jako ilustrację strumieniowego odczytu i zapisu JSON podczas uzyskiwania dostępu do interfejsu REST, wywołam następującą funkcję niestandardową ogólnego przeznaczenia: CallHTTPMethodOnServer :

&Na serwerze // <Описание функции>// // Parametry: // - Ciąg znaków zawierający nazwę metody HTTP dla żądania ("POST"."PATCH", "PUT" ,"GET","DELETE" // - obiekt HTTPConnection //<АдресРесурса>— Ciąg zasobu http, do którego zostanie wysłane żądanie HTTP. //<ОтправляемыеДанные>- Struktura lub korespondencja zawierająca dane wysłane na podany adres w celu przetworzenia // do serwera przy użyciu określonej metody HTTP "POST" lub "PATCH" lub "PUT" // Zwracana wartość: // Struktura odpowiedzi serwera w zależności od metody HTTP// Funkcja CallHTTPMethodOnServer(HTTPMethod,HTTPConnection,ResourceAddress,SubmittedData = Nieokreślony ) // Utwórz żądanie HTTP nagłówki = nowe dopasowanie(); Nagłówki.Wstaw(„Typ treści”, „aplikacja/json”); Żądanie HTTP = Nowe żądanie HTTP ( Adres zasobu, nagłówki ); // Pisanie JSON do tworzenia i aktualizowania danych Jeśli HTTPMethod="POST" lub HTTPMethod="PATCH" lub HTTPMethod="PUT" Then JSONWriter = NewJSONWriter ; Parametry JSON = Nowy Parametry wpisy JSON(Zawijaj JSON.Auto,"",True ); JSON Write.SetString(Parametry JSON ); WriteJSON(WriteJSON, Wysłane dane ); // Wysłane dane wymagane w tym przypadku StringForBody = NapiszJSON.Zamknij(); RequestHTTP.SetBodyFromString(CiągDlaCiała , KodowanieTekst.UTF8, Korzystanie z ByteOrderMark. Nie używaj); EndIf; // Wywołaj metodę połączenia HTTP OdpowiedźHTTP = HTTPConnection.CallHTTPMethod (HTTPMethod, żądanie HTTP) ; Struktura odpowiedzi= Nowa struktura ; Struktura odpowiedzi.Insert ("Kod Stanu", Odpowiedź HTTP. Kod statusu); // Odczytaj JSON tylko dla metody GET Jeśli HTTPMethod="POBIERZ" Następnie próba czytania JSON = Nowy odczyt JSON ; Odpowiedź serwera = OdpowiedźHTTP.GetBodyAsString(„UTF-8”); ReadJSON.SetString(ServerResponse); Dopasuj = ReadJSON(ReadingJSON,Prawdziwe ); Struktura odpowiedzi.Wstaw("Odpowiedź serwera",Konformizm) ; Struktura odpowiedzi.Wstawić (" Odpowiedź serwera Nieodszyfrowana”, Odpowiedź serwera ); Wyjątek Zgłoś(Opis błędu()); Zwrot Nieokreślony; Koniec próby; koniec jeśli; Powrót Struktura odpowiedzi ; Funkcje końcowe // Wywołaj HTTPMethodOnServer()

Aby otrzymać z serwera w formacie JSON, przy dostępie do interfejsu REST aplikacji należy podać w zasobach adres $format=json. Lub określ typ MIME aplikacja/json w tytule:

nagłówki = nowe dopasowanie(); Headers.Insert("Typ zawartości", "aplikacja/json") ; Adres zasobu =" webbuha/odata/standard.odata/ ?$format=json" Żądanie HTTP = Nowe HTTPRequest (adres zasobu, nagłówki);

Funkcja kontekstu globalnego ReadJSON(ReadJSON, prawda )

  • Jeśli wartość drugiego parametru jest ustawiona na True , odczytanie obiektu JSON będzie zrobione za Konformizm.Jeśli ustawione na False , obiekty zostaną wczytane do obiektu typu Struktura.
  • Podczas deserializacji obiektów JSON do struktury należy pamiętać o wymaganiach dotyczących klucza struktury. Jeśli deserializacja obiektu znajdzie nazwę właściwości, która nie jest prawidłowa dla klucza struktury, zostanie zgłoszony wyjątek.

1. 1 Konfiguracja parametrów połączenia HTTP

Aby zorganizować kliencką część interakcji z zewnętrznym serwerem WWW REST, stworzyłem od podstaw konfigurację klienta opartą na BSP. Na tej konfiguracji utworzyłem katalog do ustawiania parametrów połączenia (patrz rys. 1)

Rys. 1 Instrukcja konfiguracji parametrów połączenia HTTP z zewnętrznym IB za pośrednictwem interfejsu reszty

Po naciśnięciu przycisku Sprawdź odpowiedź serwera wywoływana jest procedura, za pomocą której klient będzie próbował odebrać odpowiedź serwera. Kod programu procedura jest opisana poniżej:

Procedura &OnClient Sprawdź adres połączenia (polecenia) = Object.ServerAddress; Użytkownik = Obiekt.Użytkownik; Hasło = Obiekt.Hasło; Nazwa podstawowa = Nazwa obiektu; Port = ? (Obiekt.Port<>0,Obiekt.Port,80); Połączenie HTTP = Nowe Połączenie HTTP (adres, port, użytkownik, hasło); Adres Zasobów = Nazwa Bazowa + "/odata/standard.odata/ $metadane "; //Połączenie funkcja niestandardowa Struktura odpowiedzi= B callHTTPMethodOnServer("DOSTWAĆ", Połączenie HTTP, adres zasobu) ; Jeśli Struktura odpowiedzi <> Niezdefiniowane wtedy Ogólnego przeznaczeniaClientServer.InformUser("Kod stanu"+Struktura odpowiedzi.Kod stanu); koniec jeśli; Koniec procedury

Celem tej procedury jest: kontrola serwisowa i czy użytkownik poprawnie wprowadził parametry połączenia. Aby to zrobić, po prostu wyślij żądanie GET:
HTTPConnection.CallHTTPMethod( "DOSTWAĆ", żądanie HTTP) ;
przy użyciu adresu zasobu:
Adres zasobu =Nazwa podstawowa+ /odata/standard.odata/ “;
Możesz również sprawdzić działanie serwisu w przeglądarce za pomocą
URL
http://host/WebBuh/odata/standard.odata. W wyniku takiego zapytania uzyskuje się jedynie listę podmiotów. Pełny opis standardowego interfejsu OData (lista dostępnych encji, ich atrybutów i funkcji w postaci XML-
dokument.) musisz wykonać żądanie GET za pomocą parametru $metadane. URL http://host/WebBuh/odata/standard.odata/$metadata. Szczegółowy opis dokumentu można znaleźć na stronie http://www.odata.org/documentation/ (w języku angielskim).
Możesz otrzymać odpowiedzi w formacie Atom/XML lub JSON. Kody statusu odpowiedzi według Protokół HTTP możesz zobaczyć odpowiedzi w zakresach:

  • 100-199 – odpowiedzi informacyjne wskazujące, że żądanie klienta zostało przyjęte i jest przetwarzane.
  • 200-299 – oznacza, że ​​żądanie klienta zostało pomyślnie przetworzone.
  • 300-399 oznacza, że ​​żądanie nie powiodło się i klient musi podjąć pewne działania, aby spełnić żądanie.
  • 400-499 - informuje o błędach po stronie aplikacji klienckiej. Kody te mogą również wskazywać, że od klienta wymagane są dodatkowe informacje.
  • 500-599 - Informuje o błędzie po stronie serwera, wskazuje, że serwer napotkał błąd i prawdopodobnie nie będzie w stanie spełnić żądania klienta.

1.2 Wyszukiwanie obiektu po ID

Poniższa funkcja służy do wyszukiwania katalogu lub dokumentu na serwerze według unikalnego identyfikatora. Jeśli obiekt zostanie znaleziony, to funkcja zwraca ciąg wartości identyfikatora (Ref_Key) , w przeciwnym razie zwraca nieokreślony. Do funkcji przekazywane są następujące parametry:

  • HTTPConnection — Obiekt typu HTTPConnection
  • PublishName — nazwa bazy danych serwera publikowanego
  • Element - identyfikator podmiotu obiektu, np. Katalog_Organizacje lub Document_ - katalog Organizacji.
  • Identyfikator - identyfikator obiektu do wyszukania na serwerze, np. Organizacja.Unikalny identyfikator()
&W funkcji serwera Wyszukaj obiekt według identyfikatora GUID (Połączenie HTTP, nazwa publikacji, element, unikalny identyfikator) GUID = ciąg (unikalny identyfikator)); // przekonwertuj na ciąg ResourceAddress = + Element+ "(guid""+ GUID+ "")?$format=json" ; Struktura odpowiedzi = BcallHTTPMethodOnServer("DOSTWAĆ" , Połączenie HTTP, adres zasobu) ; Jeśli Struktura odpowiedzi .Kod statusu >= 400 Wtedy //General PurposeClientServer.InformUser(Element+ "Error"+ResponseStructure.StatusCode+ //General PurposeClientServer.InformUser(ResponseStructure.ServerResponseUndecoded); powrót niezdefiniowany; EndIf ; Dopasuj = Struktura odpowiedzi. Serwer odpowiedzi a; Tablica = Dopasuj["wartość"]; If Array = Undefined Then Return Match ["Ref_Key"] Else Return Array ["Ref_Key"]; EndIf; Funkcje końcowe

Parametr Adres zasobu służy do uzyskiwania dostępu do usługi REST. Aby sprawdzić działanie serwisu, możesz w ten sposób określić zasób w przeglądarce

http://(WebServerAddress)/(PubName)/odata/standard.odata/(Item)?(Parameters) ,gdzie

  • Adres serwera WWW– Adres serwera WWW, na którym publikowana jest usługa, na przykład Localhost
  • NazwaPublikacje– nazwa infobazy podana przy publikacji rozwiązania
  • /odata/standard.odata/ – Znak dostępu do standardowego interfejsu OData
  • Element – identyfikator zasobu lub predefiniowane zasoby. Na przykład Catalog_Account(guid'value').
  • Parametry– parametry zasobów. Wykorzystywane np. do selekcji, w akceptowanych żądaniach HTTP: ?klucz=wartość&klucz2=wartość2

1.3 Wyszukiwanie obiektu według pól wyszukiwania

Poniższa funkcja zdefiniowana przez użytkownika służy do wyszukiwania obiektu według pól wyszukiwania w przypadku, gdy obiekt ma numer identyfikacyjny. Ciąg obiektu funkcji Ref_Key-numer identyfikacyjny.

&W funkcji serwera P searchObjectBySearchFields (połączenie HTTP, nazwa publikacji, element, pola wyszukiwania) Warunek = "" ; Dla każdej wartości klucza z pętli pola wyszukiwania Stan: schorzenie = Stan: schorzenie + KluczWartość.Klucz+"równ.""+ KeyValue.Value+ "" i "; EndCycle; Tekst zapytania =Lew (stan, długość siły (stan)-5); // usuń ostatnie 5 znaków Adres zasobu= NazwaPublikacji+ "/odata/standard.odata/" +Element+ „?$filter=” + Tekst zapytania+ "&$format=json& $select=Ref_Key" ; // Wywołaj moją niestandardową funkcję Struktura odpowiedzi= callHTTPMethodOnServer( "DOSTWAĆ",Połączenie HTTP,Adres zasobu); Jeśli Struktura odpowiedzi .Kod statusu >= 400 Wtedy //General PurposeClientServer.NotifyUser(Element+ "Błąd"+Struktura odpowiedzi.StatusCode); //General PurposeClientServer.NotifyUser(ResponseStructure.ServerResponseUndecrypted); powrót niezdefiniowany; EndIf; Dopasuj = Struktura odpowiedzi. Serwer odpowiedzi a; Tablica = Dopasuj["wartość" ]; If Array = Undefined Then Return Match ["Ref_Key" ] Else Return Array ["Ref_Key" ]; EndIf; Funkcje końcowe

Jak widać z korpusu procedury P WyszukajObiekt według pólSzukaj, wybór zaczyna się od słowa kluczowego$filtrw adresie zasobu. Formalny parametrPola wyszukiwania —jest to korespondencja zawierająca nazwy i wartości atrybutów.

Zwróć uwagę, że nazwa szczegółów czasami nie jest oczywista. Należy pamiętać, że dla katalogów:

  • kod - kod,
  • Opis
  • DeletionMark - znak usunięcia,
  • IsFolder - znak grupy,
  • Parent_Key jest rodzicem.
  • Jeśli atrybut jest typu referencyjnego, dodaj sufiks _Key do jego nazwy, na przykład Contractor_Key.

W przypadku dokumentów:

  • Numer – numer dokumentu,
  • Data - data dokumentu.

Logiczne operacje wyboru

  • eq - Równe; /Catalog_Cities?$filter=Nazwa eq „Główne”;
  • ne - Nie równe; /Catalog_Cities?$filter=Nazwa ne „Perm”;
  • gt - więcej; /Catalog_Products?$filter= Cena gt 10;
  • ge - Większe lub równe; /Catalog_Products?$filter=Cena ge 10;
  • lt - mniej; /Catalog_Products?$filter=Cena lt 10;
  • le - Mniejszy lub równy; /Catalog_Products?$filter=Cena klasy 10;
  • lub - logiczny LUB; /Katalog_ Produkty ?$filter= Cena lt 10 lub Cena gt 100;
  • oraz - logiczne AND; / Katalog _Produkty?$ filter =Cena g t 10 i Cena l t 100;
  • nie - Negacja; /Katalog_ Produkty ?$filter=not (równa cena 10);

Zauważ również, że wartość rzeczywistego parametru Element(lub podmiot) które przekazuję do funkcji utworzone zgodnie z następującą zasadą:

Nazwa przedrostka_Nazwa_obiektu_konfiguracji_Nazwa przedrostka.

Korzystając ze standardowego interfejsu OData, możesz uzyskać dostęp następujące obiekty (Prefiks nazwy):

  • Katalog - Katalog;
  • Dokument - Dokument;
  • Dziennik Dokumentów - Dziennik Dokumentów;
  • Stała - Stała;
  • Plan Wymiany - Plan Wymiany;
  • Plan kont - ChartOfAccounts
  • Plan typu obliczeń - ChartOfCalculationTypes;
  • Wykres typów cech - ChartOfCharacteristicTypes;
  • Rejestr informacyjny - Rejestr informacyjny;
  • Rejestr akumulacji - Rejestr akumulacji;
  • Rejestr obliczeń - Rejestr obliczeń;
  • Rejestr księgowy - KsięgowośćRejestr;
  • Proces biznesowy - BusinessProcess;
  • Zadanie - Zadanie.

NazwaObiektu Konfiguracji- właściwość "Nazwa" obiektu konfiguracyjnego tak jak jest ustawiona w konfiguratorze.

Przyrostek nazwy- potrzebne do określenia nazwy zasobu, opcjonalnie, może przyjmować następujące wartości:

  • Nazwa tabelarycznej części obiektu;
  • Nazwa wirtualnej tabeli obiektu;
  • RowType - wiersz części tabelarycznej obiektu;
  • RecordType to pojedynczy wpis w rejestrze.

Opcje dostępu do zasobów

Po utworzeniu nazwy zasobu należy zdefiniować parametry dostępu do zasobu, np. ?$filtr= Oznaczający &$format=json& $wybierz= Ref_Key ,

  • $filtr- wybór podczas odbierania danych
  • $format- określa format zwracanych danych,
  • $wybierz- wyliczenie właściwości encji, które zostaną uwzględnione w wyniku zapytania;
  • $metadane- zwraca opis standardowego interfejsu OData (używany bez podania sufiksu nazwy, przykład na jednym z obrazków powyżej);
  • $do góry- ograniczenie liczby zwracanych rekordów;
  • $pomiń- usuwa określoną liczbę rekordów z wyniku zapytania;
  • $count- zwraca liczbę rekordów w wyborze zapytania;
  • $inlinecount=allpage(=brak)- dodaje informację o ilości rekordów do wyniku zapytania
  • $zamówienie=<Реквизит1>asc,<Реквизит2>opis- sortuj wynik zapytania
  • tylko zezwolić- tylko dozwolone (używane bez znaku „$”).

1.4 Uzyskaj tablicę wpisów do rejestru informacji

Spójrzmy na przykład pozyskania tablicy ewidencji rejestru informacji o imieniu i nazwisku osób, np. historii zmiany imienia i nazwiska indywidualny

NazwaPublikacje ="WebBuh"; Element = "InformationRegister_Name of Individuals"; Okres = Nieokreślony ; Dane typu odniesienia= Nowa struktura(); D Typ referencji danych.Insert("OsobaFizyczna",Klucz_OsobyFizycznej); Typ danych bez referencji= Nowa struktura(); Typ danych bez referencji.Insert("PhysicalPerson_Type", "StandardODATA.Catalog_PhysicalPersons") Tablica = GetRegisterRecordSetDetails(Połączenie HTTP, Nazwa Publikacji, Pozycja, Okres, WymiaryReferenceType, Pomiary typu non-reference)

Poniżej przedstawiono treść funkcji GetRegisterRecordSet, która jest wywoływana w tym przykładzie.

&W funkcji serwera PobierzZarejestrujSzczegółyZestawuRekordu(Połączenie HTTP , Nazwa publikacji , Pozycja , Okres = Niezdefiniowane , WymiaryReferenceType= Niezdefiniowane , Pomiary typu non-reference= nieokreślony ) Tekst żądania ="" ; Jeśli okres<>Niezdefiniowane wtedy Okres sformatowania= Format(kropka ,"DF=rrrr-MM-ddTHH:mm:ss"); QueryText = "Okres = data/godzina""+ FormattedPeriod + """ ; EndIf; Jeśli WymiaryReferenceType <>Niezdefiniowane następnie dla każdej wartości klucza WymiaryReferenceType Cykl skompresowany = ? ( Wypełnione wartości(Tekst Zapytania ), "," ,""); Tekst zapytania = Tekst zapytania+ Zasilany + KluczWartość.Klucz+ "=przewodnik(""+ KeyValue.Value+ "")"; EndCycle; EndIf; If Pomiary typu non-reference<> Niezdefiniowane wtedy Dla każdej wartości klucza Pomiary typu non-reference Cykl Pytanie = ? ( Wypełnione wartości(Tekst Zapytania ), "," ,""); Tekst zapytania = Tekst zapytania + Zapytanie+ K kluczWartość.Klucz + "=" + KeyValue.Value; Zakończ cykl; EndIf; Adres Zasobów = Nazwa Publikacji + " /odata/standard.odata/" + Element + "("+ Tekst zapytania + + ") ?$format=json"; // Wywołaj moją niestandardową funkcję Struktura odpowiedzi = CallHTTPMethodOnServer("GET", połączenie HTTP, adres zasobu); Jeśli Struktura odpowiedzi.Kod statusu >= 400 Wtedy//General PurposeClientServer.NotifyUser(Element+ "Błąd"+Struktura odpowiedzi.StatusCode); //General PurposeClientServer.NotifyUser(ResponseStructure.ServerResponseUndecrypted); powrót niezdefiniowany; EndIf; Dopasuj = 0

W 1C:Enterprise, począwszy od wersji 8.3.5, platforma może automatycznie generować interfejs REST dla całej konfiguracji. Działa na protokole OData i umożliwia pracę z katalogami, dokumentami i rejestrami za pośrednictwem serwera WWW. Ogólnie rzecz biorąc, prędkość odbierania danych jest o kilka rzędów wielkości szybsza niż za pośrednictwem COM lub plików, co jest dobrą wiadomością.

Do różnych operacji używane są różne zapytania:

  • GET - służy do pobierania danych;
  • POST - służy do tworzenia obiektów;
  • PATCH - modyfikacja istniejącego obiektu;
  • DELETE - usuwanie obiektu.

Prefiksy służą do uzyskiwania dostępu do różnych obiektów:

  • Katalog - Katalog;
  • Dokument - Dokument;
  • Dziennik Dokumentów - Dziennik Dokumentów;
  • Stała - Stała;
  • Plan Wymiany - Plan Wymiany;
  • Plan kont - ChartOfAccounts
  • Plan typu obliczeń - ChartOfCalculationTypes;
  • Wykres typów cech - ChartOfCharacteristicTypes;
  • Rejestr informacyjny - Rejestr informacyjny;
  • Rejestr akumulacji - Rejestr akumulacji;
  • Rejestr obliczeń - Rejestr obliczeń;
  • Rejestr księgowy - KsięgowośćRejestr;
  • Proces biznesowy - BusinessProcess;
  • Zadanie - Zadanie.

Korzystając z protokołu ODATA można również korzystać z wbudowanych metod obiektów wykonując żądania POST.

  • W przypadku dokumentu Post() i Unpost();
  • Dla zadania - ExecuteTask();
  • Dla procesu biznesowego - Start();
  • Rejestr informacji - SliceLast() i SliceFirst();
  • Dla rejestru akumulacji i rejestru księgowego - Balance(), Turnovers() i BalanceAndTurnovers();
  • Dla rejestru obliczeń – ScheduleData(), ActualActionPeriod(),<ИмяПерерасчета>() i podstawa<Имя базового регистра расчета>().

Aby rozpocząć pracę z tym interfejsem, musisz go opublikować. Odbywa się to poprzez menu konfiguratora "Administracja" - "Publikuj na serwerze WWW", zaznacz pole "Opublikuj standardowy interfejs OData" i kliknij "Opublikuj".

Po publikacji działanie protokołu można sprawdzić pod adresem http://<ИмяСервера>/<ИмяБазы>/odata/standard.odata. W odpowiedzi musimy otrzymać cały skład opublikowanych tabel. Powinno wyglądać jak na poniższym obrazku.


Jeżeli po opublikowaniu interfejsu REST kompozycja publikowanych danych jest pusta, to należy skorzystać z metody SetStandardODataInterfaceComposition. Na wejściu posiada 1 parametr typu „tablica”. Musisz dodać do tablicy metadane, które chcesz opublikować.

Skład = nowa tablica;
Kompozycja.Dodaj(Metadane.Katalogi.Konta);
SetCompositionStandardInterfaceOData(Skład);

http://<ИмяСервера>/<ИмяБазы><ИмяСправочника>

Podczas wysyłania zapytań możesz skorzystać z następujących opcji:

select - w tym parametrze określamy potrzebne nam pola;

format - ustaw format, w jakim chcemy otrzymać odpowiedź (XML lub JSON), domyślnie XML

odata - jeśli nie potrzebujemy w odpowiedzi opisu metadanych, to piszemy „odata=nometadata”

filtr - tutaj wskazujemy wybory.

Jak napisałem powyżej, możemy otrzymać odpowiedź w dwóch formatach XML lub JSON, domyślnie używany jest XML. Aby uzyskać dane w formacie JSON, musisz dodać „?$format=application/json” do adresu URL.

http://<ИмяСервера>/<ИмяБазы>/odata/standard.odata/Katalog_<ИмяСправочника>?$format=aplikacja/json

Zasadniczo musimy pobrać konkretny element katalogu, a nie wszystkie jego wpisy. Aby to zrobić, używamy magicznego słowa "filtr".

http://<ИмяСервера>/<ИмяБазы>/odata/standard.odata/Katalog_<ИмяСправочника>?$format=application/json&$filter=Ref_Key eq guid'UID'

Jeśli zauważyłeś, adres URL zawiera dwa parametry $format i $filter, można je umieścić w dowolnej kolejności, najważniejsze jest to, że pierwszy parametr powinien być poprzedzony znakiem „ ? „, a przed drugim” & “. Logika jest taka, że ​​w pierwszej części wskazujemy adres katalogu, a w drugiej parametry. Części te są oddzielone znakiem „ ? „, ale same parametry są oddzielone znakiem „ & “. Schematycznie wygląda to tak

Tabele adresowe ? $Parametr1=Wartość parametru1 & $Parametr2=Wartość parametru2

Przegląd OData

OData to internetowy interfejs API do uzyskiwania dostępu do danych i manipulowania nimi. Jest podobny do interfejsów API mini-ODBC i JDBC, ale jest przeznaczony specjalnie dla Internetu. Mówiąc dokładniej, OData umożliwia klientom konstruowanie identyfikatorów URI w celu nazwania zestawu jednostek, filtrowania jednostek, które zawiera zestaw oraz śledzenia relacji z powiązanymi jednostkami i kolekcjami jednostek. Aby uzyskać więcej informacji, zobacz Wprowadzenie OData: dostęp do danych w sieci Web, w chmurze, na urządzeniach przenośnych i nie tylko. urządzenia mobilne itp.).

Rysunek 1. Udostępnianie bazy danych w Internecie za pomocą ogólnego dostawcy OData

Diagram na rysunku 1 pokazuje, w jaki sposób zasób, taki jak baza danych, może zostać udostępniony w Internecie za pośrednictwem ogólnego dostawcy OData. Składnia OData umożliwia przeglądarkom sieci Web manipulowanie danymi w powyższej bazie danych w celu różnych manipulacji (tworzenie, aktualizacja, usuwanie, zapytania).

Rysunek 2. Język definicji schematu pojęciowego (CSDL)

Rysunek 2 przedstawia schemat CSDL (Conceptual Schema Definition Language). CSDL to opcjonalne narzędzie, które pomaga zużywającym aplikacje zrozumieć strukturę ujawnionych danych. CSDL jest jak metadane w JDBC i ODBC, pomaga aplikacjom klienckim zrozumieć, do czego dokładnie uzyskują dostęp.

W Internecie istnieją tysiące internetowych interfejsów API. OData jest jednym z przykładów takiego API. Aby uzyskać więcej informacji na temat internetowych interfejsów API, odwiedź witrynę internetową: Programmable Web. Standaryzacja takich interfejsów poprawi konsolidację w tym ważnym obszarze technologii i pomoże innowacjom nadążać za wymaganiami rynku, w szczególności w celu wspierania nowych konstrukcji danych i inicjatyw dotyczących otwartych danych.

OData w organizacji OASIS

Projekt statutu OData został przesłany do Organizacji Rozwoju Standardów Informacji Strukturalnej (OASIS). Poniżej znajduje się fragment tekstu z tego dokumentu.

Praca będzie skoncentrowana na osiągnięciu następujących celów.

  • Tworzenie usług danych RESTful opartych na HTTP, możliwość identyfikacji zasobów za pomocą identyfikatorów URI (Uniform Resource Identifier) ​​oraz definiowania zasobów za pomocą abstrakcyjnego modelu danych, możliwość publikowania i edycji przez klientów WWW za pomocą prostych komunikatów HTTP.
  • Wyświetlanie i wyszukiwanie informacji z różnych źródeł, w tym między innymi z relacyjnych baz danych, systemy plików, systemy zarządzania treścią i tradycyjne strony internetowe.

Dokumenty specyfikacji OData przesłane do organizacji OASIS, a także projekt karty, są dostępne pod poniższymi linkami.

Oprócz specyfikacji OData, do organizacji OASIS przekazano następujące cztery dokumenty z rozszerzeniami OData.

Dokumenty te, wraz z rozszerzeniami, mają na celu zainicjowanie prac nad proponowanym Komitetem Technicznym OASIS OData. Na stronie OASIS możesz przeczytać pełny tekst Karty OData i dokumenty rozszerzające.

Produkty OData i IBM

Następujące produkty IBM obsługują OData.

  • Produkt wspierający dostęp dla różnych klientów.
  • Produkty DB2 i Informix mogą korzystać z OData za pośrednictwem firmy Microsoft studio wizualne. Jeszcze dokładna informacja na ten temat jest zawarty.

Przykłady

W tej sekcji przedstawiono kilka prostych przykładów OData, które uzyskują dostęp do usługi Netflix.

Domyślna Gatunki Tytuły . . . . . . Tytuły http://odata.netflix.com/v2/Catalog/Titles/ 2012-05-23T21:41:18Z Wokalista Anthony Kiedis, basista Flea, ... 2012-01-31T09:45:16Z . . . http://odata.netflix.com/v2/Catalog/Titles("13aly") Red Hot Chili Peppers: Funky Monks Wokalista Anthony Kiedis, basista Flea, perkusista Chad Smith ... 2012-01-31T09:45:16Z . . . 13aly Red Hot Chili Peppers: Funky Monks Red Hot Chili Peppers: Funky Monks Wokalista Anthony Kiedis, basista Flea, perkusista Chad Smith ... 3.4 1991 . . .

OData i inne internetowe interfejsy API

Obecnie w użyciu są tysiące internetowych interfejsów API. Popularne interfejsy API w tej kategorii obejmują usługi mapowe. Według stanu na czerwiec 2012 r. w witrynie Programmable Web znajduje się ponad 6000 internetowych interfejsów API (patrz uwaga zatytułowana: Modele biznesowe interfejsu API zajmują centralne miejsce). Niedawne badanie przeprowadzone przez firmę Vordel wykazało, że „połowa przedsiębiorstw wdraża interfejsy API do tworzenia nowych kanałów biznesowych”, a 25% tych interfejsów zostało opracowanych specjalnie z myślą o aplikacjach mobilnych.

Jednym z obszarów zainteresowania jest to, jak OData odnosi się do działań w obszarze Linked Data API. Grupa robocza Grupa robocza W3C Linked Data Platform (LDP) i Komitet Techniczny OASIS OData mają na celu określenie interfejsów API typu REST do pobierania i manipulowania danymi w sieci za pomocą różne modele dane. Platforma LDP jest oparta na modelu danych określonym przez Microsoft i wywodzi się z Entity Relationship Model Petera Chena sformułowanego w 1976 roku (Peter Chen). Model EDM jest nadal używany w projektowaniu relacyjne bazy danych dane. Model danych EDM opiera się na przekształcaniu informacji w podmioty i relacje. Ten model używa wartości specyficznych dla domeny, takich jak numery ubezpieczenia społecznego, numery faktur, numery pozycji, do odwoływania się do zasobów i ich właściwości oraz do łączenia informacji.

EDM przedstawia informacje w sposób znany wielu programistom danych. To znacznie ułatwia zrozumienie i korzystanie z tego modelu przez programistów. RDF pozwala na łączenie danych na całym świecie i wspiera tworzenie wnioskowań poprzez wnioskowanie logiczne, czyli pozwala na wyciągnięcie nowych faktów z istniejące informacje przy użyciu uniwersalnych identyfikatorów, powiązanych definicji i właściwości.

Budowanie adapterów między heterogenicznymi internetowymi interfejsami API jest całkowicie możliwe. Na przykład prototypowy adapter do łączenia rozwiązań elementów roboczych uzyskanych za pomocą interfejsu Linked Data API o nazwie OSLC (Open Services for Life Cycle Collaboration) oraz Dokumenty Microsoft Sharepointy uzyskane za pośrednictwem OData można znaleźć pod następującym linkiem: http://wiki.eclipse.org/Lyo/SharepointAdapter .

Wraz z rozwojem rynku pojawiają się nowe interfejsy API. Chociaż ich możliwości mogą się pokrywać w różnym stopniu, nie ma wątpliwości, że deweloperzy będą nadal wprowadzać innowacje w tym obiecującym obszarze technologii w miarę identyfikowania nowych przypadków użycia.

Dziękuję

Wyrażam głęboką wdzięczność za opinie i sugestie moim kolegom: Elizabeth Cleary, Andrew Eisenberg, Diane Jordan, Arnaud Le Hors.

Wyobraźmy sobie przez chwilę, że mamy bazy informacyjne na platformie 1C:Enterprise 8, z danymi których potrzebujemy regularnie pracować. Ale niestety nie mamy możliwości wprowadzenia jakichkolwiek zmian w ich konfiguracji. Być może to (w obecności pełnoprawnej platformy); lub bezpłatnie „1C: UNF dla Ukrainy. Mikro”; lub ze względu na korzyści automatyczna aktualizacja nie chcemy wycofywać poparcia; lub firma usługowa wymieniła koszt swoich usług, który nie otrzymał zgody kierownictwa i nie ma własnego „programisty 1C” ...

I w takich warunkach masz zadanie zintegrowania tej bazy i jakiegoś zewnętrznego systemu. Co robić i jakie mamy opcje? Można mnie uzupełnić w komentarzach, ale na razie widzę dokładnie 5 sposobów:

  1. Dostęp do bazy danych przez rodzinę Obiekty COM(V83.ComConnector i wcześniejsze). Ograniczenie: Platforma musi być zainstalowana w systemie Windows.
  2. Dostęp bezpośredni do tabel bazy danych. Oto przykład dla DBMS. . Ograniczenie: Zapobiegaj bezpośredniemu dostępowi do danych w umowa licencyjna; niestabilność otrzymanego dostępu; zmiana danych może prowadzić do naruszenia logicznej integralności bazy danych.
  3. Począwszy od wersji platformy 8.3.5, możliwe stało się zapewnienie dostępu do danych poprzez: automatyczny interfejs REST w oparciu o protokół OData v.3.0. Ograniczenie: Musisz zainstalować serwer WWW i moduł rozszerzenia serwera WWW z dostawy platformy.
  4. Począwszy od wersji platformy 8.3.6 mechanizm przedłużający, co pozwala na „podpięcie” nowej funkcjonalności bez dokonywania zmian w konfiguracji głównej. Wśród nowych funkcjonalności są interesujące nas usługi WEB i HTTP. Począwszy od wersji platformy 8.3.11 dostępna stała się możliwość rozbudowy struktury tabel bazy danych (dodanie nowych szczegółów przechowywania danych serwisowych na potrzeby integracji). Ograniczenie: konieczne jest posiadanie programisty, który opracuje rozszerzenie i będzie monitorował jego działanie podczas aktualizacji; w przypadku usług należy zainstalować serwer WWW i moduł rozszerzenia serwera WWW z dostawy platformy.
  5. Możemy odmówić „natychmiastowego dostępu” i wtedy możemy użyć wyzwalanie przetwarzania zewnętrznego za pomocą parametru wiersz poleceń/wykonać. W takim scenariuszu można zaplanować regularne uruchamianie niektórych procesów, które będą sprawdzać zasób zewnętrzny pod kątem instrukcji do wykonania i umieszczać tam wyniki swojej pracy. Możesz także niezależnie uruchomić aplikację kliencką 1C, aby opracować swoje polecenia, jeśli masz dostęp do systemu operacyjnego, w którym znajduje się baza. Ograniczenie: konieczne jest posiadanie programisty, który stworzy przetwarzanie; obecność opóźnienia w reakcji systemu na wartość interwału między uruchomieniami w harmonogramie lub na czas startu aplikacji klienckiej.

Tak więc spośród 5 opcji najszybszym i najłatwiejszym sposobem dla administratora jest automatyczny dostęp poprzez protokół oData. Ta sama opcja jest wieloplatformowa.

A opcja z protokołem oData jest tańsza pod względem opracowania łącza z bazą 1C. Faktem jest, że Microsoft mocno to naciska. Oprócz wydania OData SDK dla .NET, AJAX, PHP, Java, JavaScript, WebOS i Objective-C, firma zaimplementowała ten protokół w swoich popularnych produktach: Excel, PowerPoint, SharePoint, MsSQL i innych. Dzięki temu nie musisz tworzyć własnej wersji CommerceML i analizować teksty XML i JSON zarówno po swojej stronie, jak i po stronie bazy 1C, tak jakbyś wdrażał własne usługi WEB i HTTP. Korzystając z OData, od razu będziesz mieć gotowe biblioteki do pozyskiwania lub modyfikowania danych do wykorzystania w swoim system zewnętrzny, natomiast po stronie podstawy 1C wszystko stanie się automatycznie.

Czy minęła już minuta?

Możemy wydychać - nie mamy już żadnych ograniczeń i możemy zrobić dowolną integrację! Na początku specjalnie ograniczyłem naszą wyobraźnię, aby nie boleśnie wymieniać wszystkich opcji ze znanej książki „1C: Enterprise Integration Technologies” ISBN 978-5-9677-1462-7 autorstwa DI Goncharova. i Khrustaleva E.Yu (a tym bardziej nie trać czasu na wyliczanie słabości tych opcji). Możesz mi wierzyć na słowo tutaj lub możesz rozpocząć dyskusję w komentarzach, ale opcja OData nadal jest najatrakcyjniejsza.

Zainteresowanych tematem zapraszamy na oficjalną stronę protokołu – www.odata.org. Jeszcze raz chciałbym zaznaczyć, że pomimo tego, że obecna wersja protokół jest już w wersji 4.0 i został ustandaryzowany przez konsorcjum OASIS w dniu 17 marca 2014 r., ale platforma 1C:Enterprise 8 nadal używa bardziej wczesna wersja 3.0. Przy okazji nie zapomnij zajrzeć do sekcji ekosystem protokołów i podziwiać wzmiankę o naszym 1C:Enterprise, który jest pierwszy na liście :))

Wymagane ustawienia

Jak wspomniałem, musisz mieć serwer WWW. Od wersji 8.4 część serwerowa platformy będzie miała już własny serwer WWW, ale na razie musimy skorzystać z usług innych firm - IIS lub Apache. Jak wszystko ustawić, jest dobrze opisane w żółtej książeczce dla administratora. Ale jeśli lubisz zdjęcia i doświadczenia innych ludzi, to wyciągnąłem to w wyszukiwarce: , i oczywiście :) Nie mogę ręczyć za kompletność i trafność danych zawartych w tych artykułach i w ogóle nie znam autorów . Jeśli masz jakiekolwiek problemy, przeczytaj Przewodnik administratora dla swojej wersji platformy - znajdziesz tam wszystko, czego potrzebujesz.

Po tym, jak masz już zainstalowany serwer WWW i nie zawiesza się on już podczas uruchamiania z powodu problemów z rozszerzeniem dostępu do 1C (zgadnijmy - zainstalowałeś 32-bitowy Apache i 64-bitową platformę), niewiele zostało. W konfiguratorze przejdź do menu „Administracja” i kliknij polecenie „Opublikuj na serwerze WWW…”. W wyświetlonym oknie musisz określić następujące ważne punkty:

  • Nazwa Twojej bazy danych w polu „Nazwa”, za pomocą której serwer WWW zapewni do niej dostęp (jeśli nie chcesz problemów, to nie pisz cyrylicą);
  • Określ serwer sieciowy, który jest zainstalowany ten komputer(jeśli masz zainstalowane aż dwa serwery WWW, to z rozwijanej listy będzie można wybrać);
  • Ścieżka do katalogu publikowania, do którego wybrany serwer WWW powinien mieć dostęp;
  • A co najważniejsze - pole wyboru "Publikuj standardowy interfejs OData"!

Po kliknięciu przycisku „Opublikuj” zostanie utworzony plik default.vrd (plik XML zawierający dane, które wprowadziłeś w ustawieniach publikowania) pod ścieżką określoną w ustawieniach oraz wpis o Twojej publikacji o tej nazwie zostanie dodany do konfiguracji serwera WWW, który określiłeś. Po opublikowaniu serwer WWW powinien zostać zrestartowany.

Kilka uwag na temat publikacji. Jeśli masz kilka baz danych do opublikowania, to każda z nich musi mieć swój własny katalog. Natychmiast pomyśl o użytkowniku, który będzie miał dostęp do bazy danych - musi mieć niezbędne role i nazwę literami łacińskimi bez znaków specjalnych (jeśli chcesz w przyszłości walczyć z kodowaniami, możesz zrobić nazwę po rosyjsku ze spacjami) . Jeśli pracujesz w systemie Windows i masz włączoną kontrolę konta użytkownika, przed publikacją powinieneś uruchomić konfigurator jako administrator. Jeśli pracujesz na Linuksie - trzymaj się, wierzymy w Ciebie! :)

Oto jak wygląda działający default.vrd z opublikowanym interfejsem OData:

Jak widać z pliku publikacji, serwer WWW absolutnie nie dba o to, gdzie fizycznie znajduje się infobaza, ścieżka do niej jest zapisywana w ten sam sposób, w jaki wpisujesz ją na liście baz w początkowym oknie. Najważniejsze jest, aby rozszerzenie dostępu było zainstalowane na tym samym komputerze z serwerem WWW, a lokalizacja bazy danych była fizycznie dostępna przez sieć dla usługi serwera WWW z prawami do zmiany. Mogą też wystąpić problemy z uzyskaniem licencji i trzeba będzie zagłębić się w plik nethasp.ini, ale to wszystko standardowe procedury i do normalnej instalacji platformy.

Po zakończeniu publikacji i ponownym uruchomieniu serwera możemy sprawdzić wyniki w przeglądarce. W tym celu należy podać nazwę serwera WWW, następnie nazwę bazy danych z publikacji, a następnie ścieżkę /odata/standard.odata/ . Powinieneś zostać poproszony o podanie hasła, a zobaczysz coś podobnego do tego:

Aby zademonstrować możliwości omawianej w artykule technologii, wybrałem konfigurację „Zarządzanie handlem (podstawowe)”, wydanie 10.3”, w której tryb zgodności jest ustawiony na „Wersja 8.2.13” i dlatego wszystkie metadane są od razu dostępne poprzez interfejs REST, a funkcja SetCompositionStandardInterfaceOData() w celu kontrolowania dostępności kompozycji jest wyłączona.

Jeśli masz zmodyfikowaną transakcję 10.3, w której ustawiłeś tryb zgodności na „Version 8.3.5” lub nowszy, lub jeśli masz bardziej nowoczesne konfiguracje, wszystkie metadane będą domyślnie ukryte i będziesz musiał użyć specjalnego przetwarzania, aby wskazać widoczność wymaganych danych. Aby nie tracić czasu na tworzenie własnego przetwarzania, możesz skorzystać z mojej pracy, która jest odpowiednia zarówno dla zwykłych, jak i zarządzanych interfejsów (patrz załączniki).

Malkontencki...

Szczerze mówiąc, nie bardzo rozumiałem ten pomysł z niestandardową listą metadanych. Jakieś połowiczne rozwiązanie. Skoro celem było zwiększenie bezpieczeństwa, to dlaczego od razu podaje się to za dozwolone dane? pełny dostęp do edycji i usuwania, a nie dostrajania praw z możliwością udostępniania tylko do odczytu? Oczywiście można rozwiązać kwestię uprawnień za pomocą specjalnie skonfigurowanej roli, ale jest to już niepotrzebna modyfikacja zastosowanego rozwiązania i nawet w tym przypadku nie wpuszczę nikogo do bazy danych przez interfejs REST poza dla skryptów serwerowych mojej strony (back-end), które zadecydują co dawać a czego nie.

Gdyby chcieli zminimalizować głośność przesyłane informacje, potem jeszcze bardziej wątpliwa decyzja - patrzą na metadane tylko kilka razy, aby zbadać funkcjonalność, a następnie pracować z danymi. Czy logiczne byłoby dokonywanie optymalizacji danych? W końcu można by ograniczyć listę pól żądanych z obiektów, a szczególnie ważne jest ograniczenie informacji ujawnianych przez parametr $ expand, który ściąga cały skojarzony obiekt, podczas gdy my potrzebujemy z niego tylko jednego lub dwóch pól .

A co dalej?

Myślę, że możemy Ci pogratulować - wszystko jest ustawione i pracuje dla Ciebie! Jakie są następne kroki? Wszystko zależy od tego, dlaczego trzeba było zorganizować dostęp do bazy danych - wymieniać informacje z firmowym serwisem WWW, obsługiwać aplikację mobilną, łączyć się z firmowym oprogramowaniem...

Jeśli chcesz zrobić coś w rodzaju konta użytkownika w serwisie z udostępnieniem historii wzajemnych rozliczeń, aktualnych cen z uwzględnieniem rabatów osobistych, wprowadzania zamówień i innych gadżetów, to na oficjalnej stronie mamy kilka gotowych bibliotek do naszych usług. Istnieje nawet cały framework OpenUI5 od SAP, który pozwala na stworzenie pełnoprawnej aplikacji biznesowej w oparciu o bazę danych pozyskaną za pośrednictwem protokołu OData. Ogólnie rzecz biorąc, przestrzeń dla kompetentnego programisty JS.

Słowo ostrzeżenia o „rowerach”

Prawdopodobnie po przeczytaniu ostatniej frazy, Twoje oczy mogą się zaświecić - „Do diabła ze standardowym klientem internetowym 1C! Dzięki takim możliwościom stworzę własny interfejs do bazy danych z blackjackiem i przyjemną firmą”. Ale na twoim miejscu nie spieszyłoby mi się konkurowanie na tym polu z 1C, gdzie doświadczeni web developerzy od kilku lat tworzą to, co wszyscy widzimy po fakcie. Czy naprawdę chcesz powtórzyć smutną chwałę „projektu dominikańskiego”?

Twórcy mogą mi się sprzeciwić i – ryzyko jest warte wysiłku i już prawie gotowe do komercyjnego użytku produkty zostały już stworzone. Pracownicy Oknosoftu często lubią się tu chwalić, że na ich rozwój stoi kolejka klientów na długie lata. I bardzo się z tego cieszę - chłopaki znaleźli swoją niszę. Ale według ich artykułów odniosłem wrażenie, że ich kompleks metadata.js jest internetową analogią popularnego niegdyś programu DISCo Extensions for Pocket Computers, który umożliwił zwykłym programistom 1C pisanie aplikacji na smartfony. A gdzie jest teraz ten program? Sam 1C dał tę samą funkcjonalność do tworzenia rozwiązań mobilnych (a jeszcze bogatszych i dla większej liczby platform) za darmo w ramach dostarczania swojej platformy.

Z osobiste doświadczenie. W pewnym momencie, po mojej uwadze „nie można tego zrobić w kliencie sieciowym 1C”, moja dawna firma postanowiła stworzyć własny alternatywny interfejs sieciowy. Zatrudniliśmy kilku programistów JavaScript, wzięliśmy popularną wówczas bibliotekę interfejsów z pięknymi siatkami i wykresami jako podstawę dla front-endu i wybraliśmy node.js jako serwer. Zaimplementowałem dla tego projektu interfejs dostępu do danych SOAP (wtedy nie było usług HTTP) iw ciągu kilku tygodni otrzymaliśmy piękną formę list zamówień. Nie wiem dokładnie, co działo się tam w fazie rozwoju, ale po kilku miesiącach heroicznej walki z atakiem błędów projekt został zamknięty, a deweloperzy pożegnali się. Ale programiści firmy 1C w tym czasie nie czekali bezczynnie, ale wydali szereg aktualizacji, po których korzystanie ze standardowego klienta internetowego stało się nieco przyjemniejsze.

Powiedzmy, że nie jesteśmy kompetentnymi programistami JS, ale chcemy zawiesić jakąś listę na stronie. Otworzyłem artykuł z listą najpopularniejszych obecnie bibliotek do tworzenia tabel i znalazłem w nim prostą bibliotekę jsGrid specjalnie dla naszego przypadku. Badamy ich witrynę, bierzemy przykład ich kodu do korzystania z OData i wklejamy tam ścieżkę do naszych danych.

Aby być całkowicie leniwym i nie programować niczego dla naszego przykładu, muszę poprosić o pełnoprawną tabelę bez konieczności ładowania reprezentacji ciągów przez linki. W typowym UT10.3 wybór pod tym względem nie jest zbyt bogaty, dlatego zajmę się katalogiem Counterparties.

Teraz najciekawsze. Ale jak utworzyć ciąg zapytania do odczytu potrzebnych nam danych? To proste! Patrzymy na naszą ścieżkę do katalogu głównego OData (dla mnie to jest), jak ten katalog jest poprawnie nazywany - Katalog_Wykonawcy. Następnie otwórz adres w nowym oknie http://localhost/DemoTrdBase/odata/standard.odata/Katalog_Wykonawcyzobaczymy zawartość całego katalogu w formacie XML. Ale w naszym przykładzie potrzebujemy JSON, a zatem musimy dodać parametr do ciągu:$format=json - zadziała http://localhost/DemoTrdBase/odata/standard.odata/Katalog_Wykonawcy? $format=json . Nie interesują nas więc grupy i usuńmy je za pomocą parametru filtra:$filter=IsFolder eq false - zadziała http://localhost/DemoTrdBase/odata/standard.odata/Katalog_Wykonawcy? $format=json & $filter=IsFolder eq false . Blok parametrów, jak już zauważyłeś, zaczyna się od symbolu „?”, a same parametry są połączone ze sobą symbolem „&”. Pełną listę dostępnych opcji i funkcji można znaleźć w dokumentacji platformy.

Wynikowy plik umieszczamy w katalogu, który jest skonfigurowany jako katalog główny na serwerze WWW. Jest to konieczne, aby „domeny” strony i żądane dane pasowały do ​​siebie, w przeciwnym razie otrzymasz niekończący się wskaźnik aktualizacji i błąd w dziennikach: „Żądany zasób nie zawiera nagłówka „Access-Control-Allow-Origin”. W związku z tym nie ma dostępu do źródła „null”. Odpowiedź miała kod statusu HTTP 401. "


Dosłownie kilka minut spędzonego czasu i już mamy przyzwoity znak, który jest nawet automatycznie zaznaczany na stronach. Tylko prośba o uwierzytelnienie wygląda trochę niezręcznie, a żeby nie wpisywać loginu i hasła za każdym razem, zarejestrowałem je od razu w linii dostępowej. Finalny plik okazał się dość prosty i każdy może go bez problemu powtórzyć, ale na wszelki wypadek umieszczę go również w załącznikach.

Co powiesz na brak programowania?

Witryny, aplikacje mobilne, magistrala wiadomości i innymi słowy dla każdego specjalisty IT brzmi fajnie, ale nie znajduje odpowiedzi w sercach wysokich szefów. Ich głównym narzędziem pracy jest Excel, do którego płoną z irracjonalną miłością, nawet jeśli mają potężny podsystem raportowania ze swoich baz danych 1C. I w tym momencie pamiętamy, że to Microsoft wymyślił standard OData i zaimplementował go w swoich programach począwszy od Office 2010. programy biurowe możemy albo po prostu wyświetlić tabele z danymi, albo użyć mechanizmów zapytań, aby uzyskać więcej interesujących informacji naraz bez konieczności łączenia tabel z różnych arkuszy.

Na przykład interesują nas dłużnicy. W UT10 możemy je pobrać z wirtualnej tabeli sald rejestru akumulacji Wzajemne rozliczenia z kontrahentami nakładając filtr tak, aby kwota zadłużenia była większa od zera (inaczej są to zaliczki). Nie będę ustalał terminu, ponieważ interesują mnie aktualne dane. Dla mojej bazy będzie to poniższy link: http://localhost/DemoTrdBase/odata/standard.odata/AccumulationRegister_Calculations z kontrahentami/Saldo?$filter=AmountBalance gt 0

Po przejrzeniu wyniku możemy zauważyć, że nie mamy widoków dla kontrahentów, a jedynie klucze do tabeli katalogu kontrahentów. Dlatego poprosimy również o te dane pomocnicze. Aby to zrobić, użyj linku bez filtrów: http://localhost/DemoTrdBase/odata/standard.odata/Catalog_Contractors

A teraz prosta sekwencja kroków:

  1. Otwórz Excel (mam wersję 2016; jeśli masz 2010 lub 2013, menu może się nieco różnić)
  2. Podążamy ścieżką nawigacji: „Dane” / „Utwórz zapytanie” / „Z innych źródeł” / „Z kanału ODATA”.
  3. Wskazujemy nasz link do rejestru wzajemnych rozliczeń
  4. Na formularzu autoryzacji wybierz trzecią opcję „Podstawowe” i podaj login/hasło. Kliknij „Połącz”.
  5. W oknie edytora zapytań, które się otworzy, zamiast nazwy „Zapytanie1” podamy coś ciekawszego dla nas – „Rozliczenia”
  6. Na środku okna edytora zapytań widzimy kolumnę „Lista”, w której każdy wiersz zawiera słowo „Rekord”. Możemy użyć polecenia kontekstowego „Do tabeli” lub kliknąć odpowiedni przycisk w menu „Przekształć” edytora. Odpowiedz na pytanie "OK".
  7. Teraz kolumna nazywa się „Kolumna1”, a obok niej znajduje się przycisk ze strzałkami w różnych kierunkach. Kliknij na to. Opis istniejących kolumn zostanie pobrany z serwera. Wyczyść wszystkie pola wyboru i pozostaw je tylko w kolumnach „Account_Key” i „AmountControlBalance”. Kliknij „OK”, a pojawi się tabela z dwiema wybranymi kolumnami z potrzebnymi nam danymi.
  8. Poza naszą uwagą były takie wymiary, jak organizacja, kontrakt i transakcja, ale nadal były wymagane. W rezultacie mamy teraz linie kontrahenta z różnymi kwotami. Można je zwijać za pomocą grupowania. Aby to zrobić, albo z menu, albo z kontekstu, wywołaj polecenie „Grupuj według”. W polach grupujących pozostaw tylko kontrahenta, a pole z kwotą usuń. Nazwij nową kolumnę „Dług”, w operacji wybierz „Kwota”, a w kolumnie określ pole naszej kwoty. Klikamy na "OK" iw efekcie dostajemy trochę mniej wpisów.
  9. Teraz musimy odszyfrować kontrahentów. W tym celu w lewym panelu „Wnioski”, gdzie znajduje się już aktualny wniosek „Rozliczenia”, zadzwoń menu kontekstowe i wybierz „Nowe zapytanie” / „Inne źródła” / „Kanał ODATA”. W wyświetlonym oknie podaj ścieżkę do katalogu kontrahenta. Następnie ponownie określ login/hasło autoryzacji, kliknij „OK” w podglądzie i nazwij nowe żądanie „Konta”.
  10. Wróćmy do zapytania „Rozliczenia” (kliknij w nazwę na panelu zapytań).
  11. Teraz połączmy nasze dwa pytania. W tym celu wywołaj polecenie „Połącz” / „Połącz zapytania” w menu głównym edytora. W oknie projektanta unii pojawi się nasza tabela wzajemnych rozliczeń. W środku, w rozwijanym polu, wybierz zapytanie „Konta”. Typ połączenia pozostaje tym, który jest domyślnie (po lewej stronie zewnętrznej). Następnie kliknij, aby wybrać kolumny dla warunku połączenia. Zgadzamy się ze wszystkim, co jest nam oferowane poniżej.
  12. Po połączeniu otrzymaliśmy nową kolumnę „Konta” ze znajomym przyciskiem ze strzałkami wielokierunkowymi. Klikamy w ten przycisk i wybieramy interesujące nas kolumny. W przypadku zainteresowania wybierz „NazwaPełny” i „Rodzic” (grupa). Kolumna "Rodzic" również zaprasza nas do otwarcia - wybierz w niej pole "Opis" (zwykła nazwa katalogu).
  13. Zróbmy to pięknie. Pierwszą kolumnę możemy usunąć kluczem kontrahenta. Kolumnę grupy nazwijmy „Grupa”, kolumnę z nazwą kontrahenta nadajmy nazwę „Kontrahenci”, a kolumnę zadłużenia przesuńmy na koniec tabeli wynikowej.
  14. Teraz możemy kliknąć przycisk home edytor - "Zamknij i załaduj".
  15. Następnie możesz użyć pobranej tabeli jako danych dla tabeli przestawnej lub wykresu przestawnego. Lub podczas tworzenia tych nowych obiektów jako źródło danych podajemy nasze żądanie „Wzajemne rozliczenia”.

Ale, jak mówią, lepiej raz zobaczyć niż sto razy usłyszeć. Próbowałem nagrać tę samą sekwencję działań na wideo. I od razu ostrzegam, że kiedy to powtórzysz, będzie trochę inaczej - zostanie poproszona o autoryzacja, jak wspomniałem powyżej. Już w momencie nagrywania wideo Excel pamiętał już moją nazwę użytkownika i hasło.

Wyniki

Mam nadzieję, że mój artykuł był pomocny. Zgłosiłem istnienie i korzyści Nowa technologia platformy. Wyjaśniono również szczegółowo ustawienia dostępu w baza informacji przy użyciu protokołu OData i podał kilka przykładów praktycznego zastosowania.

Aby uniknąć uprzedzeń, że dostęp do OData może być używany tylko do zarządzanego interfejsu na najnowsze wersje platforma, jako przykład szkoleniowy wybrałem bazę konfiguracji demo "Zarządzanie handlem (podstawowa), wydanie 10.3" w trybie zgodności 8.2. Nawet mając bazę danych o takiej konfiguracji, wystarczy kilka kliknięć myszką, aby uzyskać aktualne dane o długach w skoroszycie Excela i równie łatwo byłoby uzyskać aktualne stany magazynowe, dane sprzedażowe i inne przydatne informacje.

PS Kontynuację tego artykułu, omawiającego operacje tworzenia i modyfikowania danych, opublikowano pod adresem:

Zaimplementowano możliwość automatycznego generowania interfejsu OData REST dla całego rozwiązania aplikacyjnego. Dzięki temu mamy możliwość zapewnienia pełnego dostępu aplikacja strony trzeciej do bazy danych 1C za pomocą zaledwie kilku kliknięć.

Ten mechanizm ma na celu rozwiązanie kilku typowych zadań:

  • Wgrywanie/ładowanie danych do/z rozwiązania aplikacyjnego;
  • Integracja ze stronami internetowymi (sklepy internetowe);
  • Zwiększenie funkcjonalności zastosowanego rozwiązania bez zmiany konfiguracji;
  • Integracja z innymi systemy korporacyjne(czasami bez dodatkowego programowania).

Interfejs OData REST może być używany do wymiany danych między bazami danych 1C, ale ponieważ istnieją już inne, wygodniejsze mechanizmy, głównym celem interfejsu OData REST jest integracja z systemami innych firm.

I jest to naprawdę wygodne, biorąc pod uwagę, że klienci OData istnieją na wszystkich głównych platformach, odpowiednie biblioteki można pobrać.

W tym artykule postaram się szczegółowo wyjaśnić, czym jest interfejs OData REST i jak można z niego korzystać.

Publikowanie interfejsu OData REST

Aby skorzystać z interfejsu OData należy go opublikować, a do tego potrzebujemy serwera WWW - Apache 2.2 lub IIS (od wersji również Apache 2.4). Następnie należy przejść do menu "Administracja" -> "Publikowanie na serwerze WWW...".

W oknie, które się otworzy, wypełnij wymagane pola i kliknij „Opublikuj”:

Następnie musisz określić skład interfejsu OData, tj. wskazać, które obiekty konfiguracyjne są w niej zawarte, a które nie (początkowo w kompozycji nie ma ani jednego obiektu).

Możesz to zrobić tak:

Procedura &AtServer SetODataAtServer() tArray = New Array; tArray.Add(Metadane.Katalogi.Produkty); SetStandardInterface CompositionOData(tArray); Koniec procedury

&Na serwerze

Procedura SetODataOnServer()

tArray= Nowa tablica;

tArray. Dodaj(Metadane. Katalogi. Produkty) ;

Ustaw kompozycję interfejsu standardowego OData(tArray) ;

Koniec procedury


Podobał Ci się artykuł? Podziel się z przyjaciółmi!
Czy ten artykuł był pomocny?
tak
Nie
Dziekuję za odpowiedź!
Coś poszło nie tak i Twój głos nie został policzony.
Dziękuję Ci. Twoja wiadomość została wysłana
Znalazłeś błąd w tekście?
Wybierz, kliknij Ctrl+Enter a my to naprawimy!