Jak otworzyć plik xml 1c. Generowanie pliku XML. Łatwe przesyłanie do aplikacji innej firmy. Generowanie dokumentu „Faktura”.
W organizacji księgowość można prowadzić nie tylko w rozwiązaniach na platformie 1C:Enterprise, ale także w innych systemach oprogramowania (Galaktika, Parus, SAP itp.). Rodzi to wyzwanie związane z integracją dwóch aplikacji.
Na przykład pewna aplikacja (nazwijmy ją „X”) musi przeczytać listę dokumentów konfiguracyjnych. Nie będziemy rozmawiać o praktycznych korzyściach rozwiązania takiego problemu, zaznaczę jedynie, że najwygodniejszym i uniwersalnym sposobem w takiej sytuacji byłoby przesłanie listy dokumentów w formacie XML.
Wymiana korzystająca z tego formatu jest uniwersalna, ponieważ większość aplikacji może z nim współpracować. Przyjrzyjmy się, jak przesłać listę dokumentów konfiguracyjnych do pliku XML z 1C:Enterprise.
Prześlij do XML
Przejdźmy więc do najważniejszej rzeczy. Musimy przejrzeć listę metadanych dokumentu i wygenerować listę w pliku XML. Poniższy zrzut ekranu przedstawia algorytm generowania pliku XML:
Funkcja CreateXML() Eksport // Pobierz nazwę pliku tymczasowegoŚcieżka = GetTemporaryFileName() ; // Zainicjuj klasę „Rekord XML”. Wpis = Nowy wpisXML; // Otwórz plik tymczasowy do zapisu- 8 " ) ; // Zapisz deklarację pliku XML Nagrywać. ZapiszDeklaracjaXML() ; // Nagrywać. WriteElementStart(" DokumentyKonfiguracje" ) ; // Pierwszy element // Atrybut pierwszego elementu z datą utworzenia pliku Nagrywać. WriteAttribute(" wygenerowano ", Format(CurrentDate(), " DF = rrrr-MM- ddThh:mm:ss; DLF=DT" ) ) ; // Napisz element dla każdego dokumentu konfiguracyjnego. W tekście umieszczamy nazwę dokumentu. Dla każdego dokumentu z metadanych. Rejestracja cyklu dokumentów. WriteElementStart("Dokument"); Nagrywać. WriteText(Nazwa Dokumentu) ; Nagrywać. WriteEndElement() ; Koniec cyklu ; // Zakończ pisanie pierwszego elementu Nagrywać. WriteEndElement() ; Nagrywać. Zamknąć(); // Zamknij plik // Pobierz dane binarne pliku i umieść je w magazynie tymczasowym BinaryData = nowe BinaryData(Ścieżka) ; Adres = PlaceInTemporaryStorage(BinaryData, New UniqueIdentifier) ; Adres zwrotny; // Zwraca adres pliku do magazynu Funkcja końcowaKażdy utworzony element musi zostać poprawnie ukończony. Po wykonaniu „WriteStartofElement()” należy wykonać metodę „WriteEndElement”, w przeciwnym razie struktura pliku XML będzie nieprawidłowa.
Ogólny szablon tworzenia plików XML ma następującą kolejność:
// 1. Zainicjuj klasę „Rekord XML”. Wpis = Nowy wpisXML; // 2. Otwórz plik tymczasowy do nagrania Nagrywać. OpenFile (ścieżka, „UTF - 8 " ) ; // 3. Napisz deklarację pliku XML Nagrywać. ZapiszDeklaracjaXML() ; // // 4. ++ Zapisz zawartość pliku XML Nagrywać. WriteElementStart("XMLElement"); Nagrywać. WriteEndElement() ; // -- Zapisz zawartość pliku XML // 5. Zamknij plik Nagrywać. Zamknąć();Te pięć kroków umożliwia utworzenie prawie dowolnego pliku XML.
W naszym przykładzie wygenerowany plik jest konwertowany na dane binarne i zwracany do lokalizacji, w której wywoływana jest funkcja CreateXML. Plik ten można następnie zapisać w systemie plików.
Przykład przesłanego pliku możesz zobaczyć na zrzucie ekranu powyżej.
Aplikacja strony trzeciej
Jako przykład stworzyłem aplikację w .NET Framework, aby zademonstrować czytanie pliku XML w aplikacji innej firmy.
Program odczytuje utworzony plik i wyświetla dokumenty w formie listy:
Możesz spróbować sam, aplikację można pobrać korzystając z linku na końcu artykułu.
Wszechstronność
Format XML jest używany w większości konfiguracji do wymiany danych pomiędzy rozwiązaniami aplikacyjnymi na platformie 1C:Enterprise. Inną powszechnie stosowaną metodą komunikacji jest połączenie COM. XML pozwala na wymianę z niemal każdą aplikacją, dlatego zasługuje na miano uniwersalnego.
Pliki do pobrania:
Aplikacja do odczytu plików XML.
Przetwarzanie generacji pliku XML.
Przenoszenie informacji pomiędzy bazami danych jest jednym z zadań ich obsługi i administrowania. W celu skutecznego wdrożenia przetwarzanie jest tworzone w zautomatyzowanych kompleksach 1C. Znacząco ułatwiają rutynową pracę, przyspieszają procesy wysyłania i pobierania informacji, a jednocześnie zapewniają kontrolę nad ich poprawnością. Wgranie z 1c do xml umożliwia utworzenie pliku z zawartością dowolnego skonfigurowanego obiektu konfiguracyjnego i wykorzystanie go w przypadku konieczności wgrania danych do identycznej konfiguracji.
Narzędzia do tworzenia plików do przesłania
Do eksportu informacji zawartych w bazach danych wykorzystuje się głównie format xml. Dla 1C opracowano wiele metod przetwarzania (na przykład UploadLoadDataxml82 epf), za pomocą których można wyprowadzać i ładować dane do pliku. W takim przypadku użytkownik musi otrzymać plik o określonej strukturze, która pozwala na załadowanie przechowywanych w nim informacji do natywnej bazy danych lub przeniesienie ich w inne miejsce. Podczas tworzenia uploadu należy przestrzegać następujących zasad:
- Zapisz utworzone pliki do czasu całkowitego odzyskania i zakończenia procedur weryfikacji poprawności przesłanych informacji;
- Jeśli używasz przetwarzania jako narzędzia do tworzenia kopii zapasowych, utwórz osobne podfoldery dla kopii danych i prowadź ich dziennik w celu szybkiego odzyskania.
Dostarczany w programie wsparcia użytkownika 1C, który można znaleźć na stronie internetowej lub dyskach ITS, jest doskonałym narzędziem do eksportowania i importowania informacji. Użytkownik komputera może wgrać zarówno całą bazę danych, jak i jej poszczególne obiekty, a oprócz samego eksportu wykonywane są różne operacje mające na celu sprawdzenie informacji, które pomagają pozbyć się błędów krytycznych w danych. Przetwarzanie przesyłania 1c do pliku XML działa w dwóch trybach:
- Rozładunek. Tworzy plik zawierający obiekty stronicowalne zdefiniowane przez użytkownika;
- Ładowanie. Odczytuje wcześniej wyeksportowany plik i zapisuje zawarte w nim informacje do bazy informacji.
Przetwarzanie umożliwia sprawdzenie obiektów pod kątem nieprawidłowych znaków, a także zawiera funkcję eksportowania informacji z ograniczeniami.
Przesyłanie można wykorzystać nie tylko podczas wymiany informacji między bazami danych 1C. Za jego pomocą możesz zapewnić integrację różnych kompleksów, na przykład 1C i systemu Parus. Wszechstronność formatu XML pozwala na tworzenie programów do przesyłania informacji dla niemal dowolnych banków informacji. Przetwarzanie, przesyłanie i pobieranie danych XML to najważniejsze narzędzie wymiany informacji.
Proces przesyłania danych doxml
Przyjrzyjmy się, jak przesłać plik 1c do pliku XML w trybie normalnym. Po pobraniu przetwarzającego pliku UploadLoadDataxml.epf i otwarciu go należy wykonać następujące kroki:
- Wybierz obiekty do eksportu;
- Skonfiguruj niezbędne filtry, na przykład według okresu;
- Określ lokalizację pliku z informacjami o podsystemie dysku;
- Rozpocznij rozładunek obiektów.
Należy pamiętać, że część nagłówkowa formatu przesyłanego pliku różni się od formatu pliku używanego podczas przesyłania zgodnie z planami wymiany.
xmlPlik xml jest ładowany do 1c do odbierającej bazy danych z konfiguracją identyczną z bazą źródłową. Przed załadowaniem XML 1c do 1c musisz otworzyć przetwarzanie w odbierającej bazie danych. Następnie należy podać ścieżkę do wcześniej wgranego pliku i pobrać dane klikając na przycisk „Wczytaj dane”.
W razie potrzeby aktywowane są checkboxy, które ładują dane w trybie wymiany do rozproszonej bazy danych i ignorują błędy pojawiające się podczas ładowania obiektów.
Następnie należy sprawdzić bazy danych i upewnić się, czy wszystkie elementy zostały poprawnie załadowane, aby ich nie zgubić, jeśli np. po załadowaniu obiektu wystąpił błąd w obsłudze zdarzeń.
Kiedy przedsiębiorstwo stale wykorzystuje w swojej pracy jakiś pakiet oprogramowania, wówczas oczywiście zawsze pojawia się kwestia jego bieżącego wsparcia i administracji. Nie da się uniknąć zadań związanych z wymianą, przechowywaniem i przywracaniem danych. Przyjrzyjmy się, jak załadować lub rozładować dane z 1C w formacie XML, ponieważ jest to ważna procedura w tym temacie.
Są zbudowane w taki sposób, że podczas pobierania możliwe jest uzyskanie pliku XML, w którym zapisane zostaną dane wymagane przez Klienta. Jednocześnie równolegle z rejestracją monitorowana jest poprawność przesyłanych zapisów pod kątem błędów krytycznych.
Zatem załadowanie do pliku XML (import rekordów) z jednej bazy informacji i późniejsze załadowanie z XML do drugiej oznacza wymianę danych w formacie XML pomiędzy bazami danych.
Procedura ta, zwłaszcza przy dużej ilości informacji, pozwala zaoszczędzić dużo pracy ręcznej.
Import (plik wynikowy) można również wykorzystać jako archiwum do odzyskania w nieoczekiwanych sytuacjach (w przypadku utraty lub uszkodzenia).
Opracowano wiele takich narzędzi do przetwarzania i są one dostępne w Internecie. Odpowiedzialność za ich użycie spada na ramiona (i głowę) klienta.
Ale dla oficjalnych użytkowników Odeneski programiści stworzyli uniwersalny procesor „Prześlij/Załaduj dane XML”.
WAŻNY. Eksport do XML w 1C i dalsze ładowanie do XML z 1C jest dopuszczalne przy identycznych konfiguracjach - w przeciwnym razie zostanie uszkodzony.
Uniwersalny uchwyt
Kluczowe punkty dotyczące korzystania z uniwersalnego programisty:
- Zapisuj importowane pliki do czasu zakończenia przesyłania rekordów i sprawdzenia ich poprawności;
- W przypadku stosowania jako kopie zapasowe należy zachować ich zapis w celu uporządkowania wyszukiwania.
Jego działanie odbywa się w dwóch trybach: tworzenia pliku podczas zapisywania informacji i odczytywania/zapisywania podczas importu.
Dodatkowo użytkownik może ustawić dodatkowe ograniczenia zarówno przy eksporcie, jak i ładowaniu danych.
Wyodrębnianie rekordów
Dane możesz przesyłać zarówno po całej bazie, jak i wybiórczo – obiekt po obiekcie.
Po pobraniu, zainstalowaniu i otwarciu modułu obsługi następuje następująca sytuacja:
Ich wyboru dokonuje się w oknie dialogowym otwieranym po uruchomieniu. W tym celu zaznacz pola na liście wyświetlającej obiekty metadanych do pobrania;
- Skonfigurowano niezbędne filtry (na przykład według daty);
- Wybrano miejsce na dysku;
- Rozpoczyna się sama operacja.
Przesyłanie nagrań do odbiornika
Pierwszym krokiem do przyjęcia danych do bazy odbiorczej jest otwarcie znajdującego się w niej programu procesora.
Po określeniu ścieżki do pliku źródłowego i włączeniu flag ustawień procedury (jeśli jest taka potrzeba) można rozpocząć proces przyciskiem „Wczytaj dane”.
Teraz wiesz, jak ładować lub rozładowywać dane z 1C w formacie XML, aby zapisywać dane i wymieniać się między bazami danych.
- dobrze znane strony internetowe, które są również analogiem XML ze słabymi kontrolami.
Obiekty do odczytu/zapisu XML, FastInfoset i HTML rozszerzają możliwości odczytu plików tekstowych dzięki wbudowanemu przetwarzaniu znaczników.
Są one również używane w obiektach DOMBuilder/DOMRecord (patrz poniżej) jako źródła danych.
Pliki XML 1C zawierają informacje tekstowe, to znaczy są plikami tekstowymi. Obiekty 1C XML Reader i 1C Write XML to „dodatek”, który ułatwia pracę ze znacznikami XML w pliku 1C.
Obiekty ReadingFastInfoset 1C i WritingFastInfoset 1C, ReadingHTML 1C i WritingHTML 1C są całkowicie podobne do ReadingXML 1C i WritingXML 1C i służą do pracy w ten sam sposób z innymi formatami.
Plik XML 1C użyty w przykładach
Katalog>
Katalog>
Wartość tekstowaProps>
Katalog>
Konfiguracja>
Przykład 1. Odczyt pliku XML 1C do drzewa wartości przy użyciu Reading XML 1C
//otwórz plik XML 1C do odczytu za pomocą ReadingXML 1C
Plik = Nowy ReadXML();
Plik.OpenFile("D:\ConfigurationStructure.xml");
//przygotuj drzewo wartości
//każda gałąź XML może mieć nazwę, atrybuty i wartość
dzXML = NewValueTree();
dXML.Columns.Add("Nazwa");
dzXML.Columns.Add("Wartość");
dXML.Columns.Add("Atrybuty");
//ponieważ ciąg XML może mieć kilka atrybutów, zapiszemy je w tabeli wartości
//każdy atrybut ma nazwę i wartość
tAttributes = Nowa tabela wartości();
tAttributes.Columns.Add("Nazwa");
tAttributes.Columns.Add("Wartość");
//poziom zagnieżdżenia pomoże nam zrozumieć, kiedy musimy dodać zagnieżdżoną gałąź, a kiedy musimy wrócić na wyższy poziom
Poziom zagnieżdżenia = 0;
//bieżąca linia jest linią drzewa, zmieni się wraz ze wzrostem zagnieżdżenia
CurrentRow = Niezdefiniowany;
//odczyt pliku XML 1C nie odbywa się linia po linii, ale zgodnie ze strukturą, po zakończeniu pliku odczyt zwróci FALSE
Podczas gdy File.Read() Pętla
// interesują nas trzy typy węzłów - początek elementu, tekst (wartość elementu) i koniec elementu (aby wrócić na najwyższy poziom)
Jeśli File.NodeType = XMLNodeType.ElementStart Wtedy
Poziom zagnieżdżenia = poziom zagnieżdżenia + 1;
//jeśli jest to pierwsza linia, to dodaj ją na samą górę drzewa i zapisz tylko nazwę
Jeśli CurrentRow = Niezdefiniowany, to
CurrentRow = dXML.Rows.Add();
CurrentLine.Name = Nazwa.Pliku;
Kontynuować;
W przeciwnym razie
//zagnieżdżone linie
CurrentRow = CurrentRow.Rows.Add();
CurrentLine.Name = Nazwa.Pliku; //zapisz nazwę
//czy ten element XML ma atrybuty?
Jeśli File.NumberAttributes() > 0 To
//jeśli tak, skopiuj przygotowaną pustą tabelę, aby zapisać atrybuty
tAttributesNode = tAttributes.Copy();
//przeglądaj liczbę atrybutów tego elementu
Dla konta = 0 według pliku.Number of Attributes()-1 Cycle
//dla każdego atrybutu zapamiętaj nazwę i wartość
String = tNodeAttributes.Add();
Line.Name = File.AttributeName(Sch);
Row.Value = File.AttributeValue(Ac);
Koniec cyklu;
//zapisz tabelę atrybutów elementu w bieżącym wierszu
CurrentRow.Attributes = tNodeAttributes;
koniecJeśli;
koniecJeśli;
ElseIf File.NodeType = XMLNodeType.EndElement Następnie
//na początku elementu zwiększamy poziom zagnieżdżenia, na końcu elementu zmniejszamy
Poziom zagnieżdżenia = Poziom zagnieżdżenia - 1;
//zwróć bieżącą linię o jeden poziom wyżej
CurrentRow = CurrentRow.Parent;
ElseIf File.NodeType = XMLNodeType.Text Następnie
//jeśli element ma wartość, po prostu go zapisz
CurrentRow.Value = Plik.Wartość;
koniecJeśli;
Koniec cyklu;
Plik.Zamknij();
Przykład 2. Nagrywanie pliku XML 1C przy użyciu obiektu XML Record 1C
//utwórz plik Record XML 1C
Plik = NewXMLRecord();
Plik.OpenFile("D:\ConfigurationStructure.xml", "UTF-8");
File.WriteElementStart("Konfiguracja");
//użyj metadanych do przeglądania wszystkich katalogów (więcej szczegółów znajdziesz w części „Praca z metadanymi”)
Dla każdego katalogu z cyklu Metadata.Directories
//WriteStartofElement - otwiera nową [podrzędną] gałąź
File.WriteElementStart("Katalog");
//WriteAttribute - zapisuje atrybut do wcześniej otwartej gałęzi
File.WriteAttribute("Nazwa", Katalog.Nazwa);
File.WriteAttribute("Synonym", Directory.Synonym);
//używając metadanych przeglądamy wszystkie szczegóły katalogu
Dla każdego Rekwizytu z cyklu Directory.Props
Koniec cyklu;
//użyj metadanych, aby przeglądać wszystkie tabelaryczne części katalogu
Dla każdego PM z Katalogu Części Tabelaryczne Cyklu
File.WriteElementStart("Część tabelaryczna");
File.WriteAttribute("Nazwa", PM.Name);
File.WriteAttribute("Synonim", PM.Synonym);
Za każde Rekwizyty z cyklu PM.Props
File.WriteElementStart("Rekwizyty");
File.WriteAttribute("Nazwa", Attribute.Name);
File.WriteAttribute("Synonym", Attributes.Synonym);
Plik.WriteEndElement();
Koniec cyklu;
Plik.WriteEndElement();
Koniec cyklu;
//WriteEndElement - „zamyka” gałąź wcześniej otwartą za pomocą WriteBeginElement
Plik.WriteEndElement();
Koniec cyklu;
Plik.WriteEndElement();
Plik.Zamknij();