Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu

W przypadku wymiany informacji między dwoma bazami informacyjnymi bez obcych plików rozładunkowych i wymiany nie ma nic lepszego niż częściowe. I trudno jest spierać się z tym, ponieważ jest wystarczająco używany do stosowania tego typu związku. Ale w ten mechanizm Istnieje jeden wąski i nieprzyjemny miejsce. Oferuje czas ustawienie połączenia z inną bazą. Może w niektórych przypadkach osiągnąć wystarczająco duże wartości, tj. Być bardzo długi.

W czym problem?

W momencie połączenia COM podłączony podstawa w pełni ładuje konfigurację podstawy, do której się łączy. Po wypróbowaniu, na przykład, połączyć się z bazą danych "Rachunkowości księgowej", nazistowskie oczekiwanie trwałoby wystarczająco długo, ponieważ objętość konfiguracji jest obliczana przez setki megabajtów. Staje się jasne, że dla więcej szybka praca Wszystkie połączenia muszą być buforowane i utrzymywane.

Analiza wydajności

Zapytajmy siebie i czy konieczne jest w ogóle wspomaganie związku i przyniesie swoje owoce z intensywną pracą użytkownika za pomocą połączenia COM. Wykonaj połączenie czasu pomiaru do konfiguracji 20 KB.

Widzimy, że połączenie z małą podstawą trwało 3,5 sekundy. Po podłączeniu do bardziej obszernej podstawy, czas wzrośnie kilka razy.

Podczas przechowywania obsługiwanego połączenia, działania te przyniosą kilka rzędów wielkości mniej czasu.

Jak zapisywać aktywne połączenie COM?

Problem polega na tym, że platforma 1C nie zapewnia standardowych zakresów dla okablowania połączeń COM do IB. W książkach i dokumentach odniesienia nie ma sensu utrzymywać związek, ponieważ często może się zmieniać. Najbardziej obiecującą opcją jest przechowywanie połączenia w parametrze sesji. Ale tutaj wszystko nie jest takie gładkie. W końcu nie ma jednego odpowiedniego typu danych do przechowywania połączenia COM.

Dane argumentu prowadzi do faktu, że przechowywanie jest możliwe tylko na kliencie w pewnej zmiennej. Rozważ opcję dla formy zarządzanej. Konieczne jest zainicjowanie w formie zmiennej z dyrektywą i zmianą, gdzie zapiszemy wartości połączenia. W związku z tym możliwe jest również wywołanie tego połączenia, tylko na kliencie, ponieważ nie możesz wysłać COM z klienta do serwera na serwer. W przypadku formularzy konwencjonalnych nie ma separacji na serwerze, a klient i ten mechanizm staje się jeszcze łatwiejszy. Nie wolno zapomnieć przed zamknięciem formularza, którego używałeś do złamania połączenia, aby zapobiec wyciekowi pamięci.

Zamiast wyjścia

Chociaż ten schemat Rozwiązuje pewne problemy wydajności, ale jest daleko od ideału. Każda forma, w której musisz obsługiwać połączenie COM, utworzy nową sesję baza informacji. Odbiornik odpowiednio będzie wymagany i więcej licencji. Jednym z głównych minusów jest wyeliminowanie wsparcia dla serwera

W następnym artykule zostanie uznany za doskonały sposób, który eliminuje te problemy (łączące się za pośrednictwem usług internetowych).

Drukowanie (Ctrl + P)

Jedną z opcji wymiany danych między bazami danych 1C jest wymiana przez połączenie COM. Dzięki połączeniu COM można połączyć się z jednej bazy danych do innej i odczytu lub zapisu danych. Możesz użyć tej metody zarówno w wersji serwerów klientowych, jak iw podstawy plików.. W tym artykule omówiono ten rodzaj związków na platformie 8.3

cOM Connection.

Możesz utworzyć dwa typy obiektów COM do aplikacji 1c. To są połączenia OLE V83.Application. i połączenia COM. V83.comConnector. . W przypadku V83.Application. Rozpoczyna się niemal pełna instancja aplikacji 1C. W przypadku użycia V83.comConnector. Uruchomiony mały część serwera.. Prędkość pracy w tym przypadku jest wyższa, ale niektóre funkcje mogą nie być dostępne. W szczególności współpracę z formami i wspólnymi modułami, dla których właściwość nie jest ustalana z związkami zewnętrznymi. Potrzebny musi użyć V83.comConnector. I tylko w przypadku niedoboru funkcjonalności V83.Application.. Szczególnie silnie różnica prędkości może być zauważalna w bazach dużej objętości. Dla platformy 8.2 V82.Application lub V82.comConnector.

Zainstaluj połączenie OLE

Połączenie \u003d nowy combak ("V83.Application");

Ustaw połączenie COM.

Połączenie \u003d nowy obiekt COM ("V83.comContor");

Ciąg połączenia

// dla serwera klienta opcji
Monitorowanie łańcucha. \u003d "SRVR \u003d" "Impararacja"; Ref \u003d "" "Nazwa";
// W przypadku opcji trybu plików:
Monitorowanie łańcucha. \u003d "Plik \u003d" "PullBase" "; USR \u003d nazwa użytkownika; PWD \u003d Hasło ";
Próba
Połączenie \u003d połączenie . Połączyć.(Monitorowanie łańcuchowe);
Wyjątek
Wiadomość \u003d nowa wiadomość użytkownika;
Wiadomość . Tekst = "Nie udało się połączyć z bazą danych" + Opis (); Wiadomość . Zgłosić();
Uroczystości;

Łamanie połączenia.

Związek \u003d niezdefiniowany;
Dla obiektu. V83.Application. Konieczne jest spełnienie połączenia z połączeniem, w przeciwnym razie niekompletna sesja się powiedzie, co następnie będzie musiało zostać usunięte ręcznie. W przypadku V83.comConnector. Połączenie jest wywoływane automatycznie po zakończeniu procedury, w której połączenie zostało wykonane. I jest inny mały moment. Dla użytkownika, w którym połączenie jest wykonywane, pole wyboru "Program zamykania żądania" musi być wyłączone w swoich ustawieniach.

Metoda NewObject ()

Aby utworzyć nowy obiekt, możesz użyć metody NewObject (), na przykład:

dla V83.comConnector.

Napomnieć \u003d Połączenie. Newobject ( "Zapytanie ofertowe ") ;
Obrus. \u003d Połączenie. Newobject ( "Tablement") ;
Masscoma \u003d połączenie. NewObject ("Array");

Uidcom \u003d Connection .NewObject

dla V83.Application.

Żądanie \u003d Związek. Newobject (" Zapytanie ofertowe ") ;
Tableole \u003d połączenie. Newobject.("Tablement") ;
Massive \u003d Connection.NewObject.("Szyk");
Uidcom \u003d Connection.NewObject.("Unikalny autodola", wioślarstwo);

Napomnieć . Tekst \u003d."WYBIERAĆ
|. Postganizacje. Kod,
|. Organizacje propulatora.Name.
| IS. |. Katalog. Wartność
Jako biuro ";

Wynik \u003d Żądanie. Wykonać ();
Próba \u003d Wynik. Wybierz ();
Podczas gdy próbka. Następujący()Cykl
Endcycle;
Możesz także użyć menedżerów obiektów konfiguracji:
Referencecom \u003d połączenie. Katalogi. Namanship;
Dokumentować. \u003d Połączenie. Dokumentacja. Natychmiastowy;
Zarejestruj się \u003d połączenie. Rejestracja. Nazwa;

Odbiór i porównanie transferu za pomocą połączenia COM

Aby porównać wartości elementów wyliczeń zdefiniowanych w konfiguracji, konieczne jest przekształcenie tych elementów do jednego z typy prymitywne, którego porównanie nie powoduje trudności. Takie typy mogą być typem liczbowym lub ciągiem. Konwertuj wartość elementu wyliczającego do typu numerycznego, może być tak

Transakcje elementów \u003d. Połączenie. Biegnie. Pravoyer1.Naxile (1). Wymaganie1;

Możliwe \u003d transakcje elementów. Formowanie (). Wartości;

Procedury żywiołowe \u003d możliwe. Możliwe. Wskaźnik (możliwość. Przedziały (połączenie

Jeśli element jest operacją \u003d 0, aby zgłosić ( "Wartości1");

Wsprzyfikowany Elementarization \u003d 1 Następnie Raport ("wartości2");

Zakończony;

Uzyskiwanie obiektu za pomocą identyfikatora

Poprzez menedżerów obiektów konfiguracji, otrzymujemy obiekt COM, na przykład:
Dokumentować. \u003d Związek. Dokumentacja. Natychmiastowy;

Następnie otrzymujemy ciąg unikalnego identyfikatora:

Wioślarstwo \u003d połączenie. Dokumentom.Unikovyterifier.())

Identyfikator \u003d nowy y naturalFentifier (wioślarstwo);
Z sYCLIPOIDER \u003d [Imidcement] Dokumenty. Wlać do identyfikatora (identyfikator);

Jeśli chcesz znaleźć obiekt COM zgodnie z dokumentem identyfikatora, musisz pisać w ten sposób:

Uidcom \u003d. Połączenie.NewObject.("Unikalny autodola", wioślarstwo);
Uruchom identyfikator \u003d połączenie. Dokumenty [ImyToCement]. Wręcz (UIDCOM);

Hi Habravelov!

W tym artykule, chcę opowiedzieć o tym, jak integracja z platformą 1C w mojej organizacji jest ustalona. Skłonił mnie do prawie całkowitej nieobecności specyfikacja o tym temacie. Czytanie różnych artykułów i raporty na temat pakietów 1C z dowolnym systemem informacyjnym, po raz kolejny upewnij się, że wszystkie mają marketing, demonstrację i nigdy - techniczne, odzwierciedlające problem i istotę jego decyzji.

Ostrzegam, że metoda w żadnej sprawie uniwersalności. Od samych konfiguracji 1C są dużo, a systemy informacyjne., Języki i platformy są jeszcze bardziej, liczba możliwych kombinacji jest ogromna. Moim celem jest wykazanie jednego z możliwych rozwiązań.


Jako język, który zostanie zintegrowany z 1C, wybrałem pythona. Jest bardzo dobrze nadaje się do automatyzacji procesów. Przyczynia się to do minimalistycznej składni (kod jest bardzo rekrutowany bardzo szybko), bogata standardowa biblioteka (mniejsza potrzeba modułów innych firm), między platformą - z dużym prawdopodobieństwem, kod zapisany w systemie systemu LINIX pomyślnie zarabiał w systemie Windows .

Zacząć od, kontury, z którymi będziemy pracować. Organizacja - Spółka dostaw energii w regionie Dalekiego Wschodu - służy około 400 tysięcy abonentów, podstawy 1C na samodzielnej konfiguracji. Dla każdego subskrybenta, jego płatności, rozliczenia międzyokresowe, schematy konsumowane i obliczające, urządzenia księgowe, odczyty i wiele innych danych.

Raz w organizacji stał program napisany w Delphi i korzystając z MSSQL / Firebird jako bazy danych. W tych wspaniałych czasach można połączyć się z bazą danych za pomocą dowolnego języka i wiele działań - wybrać subskrybentów dłużnika, rozpowszechnianie otrzymanej płatności, naprawić odczyty instrumentów. Nie jest zaskakujące, że zbiór skryptów, które automatyzują procedurę stale rosły. Programiści mogą wykonywać wszelkie działania bez otwarcia samego programu.

Niestety, z przejściem do krzeseł 1c zakończonych - nie było możliwe bezpośrednio połączenia z bazy. Ogólnie rzecz biorąc, sama platforma 1C jest niepodzielna i słabo integracyjna z innymi systemami. Ona, jak mówią, sama rzecz sama. Ładując dane w 1C, należy pamiętać, że nie będzie tak łatwo je usunąć. Ale ze względu na fakt, że organizacja potrzebna do wdrożenia systemów płatności i osobisty obszarKonieczne było znalezienie rozwiązania.

Główne zadania, które stały przede mną, są możliwością szybkiego odbioru danych na konkretnym konto twarzy - Pełna nazwa, adres, urządzenia pomiarowe, odczyty instrumentów, płatności, rozligi międzynarodowe. Plus, tworzenie dokumentów jest aktem pojednania, otrzymanie płatności. Brak możliwości bezpośredniego połączenia z bazy danych - każdy, kto przeglądał bazę danych 1C na serwerze SQL, zobaczył, że w masie tabeli typu AAA1, AAA2 jest trudne do zrozumienia. I budować prośby z takimi nazwami tabel i pól, jest po prostu nierealne. Ponadto wiele tabel 1C (szczególnie najważniejsze, podobnie jak przecinane plasterki ostatnich, pozostałości i rewolucji) są wirtualne i rozproszone przez różne stoliki fizyczne, zbierając wiele jour. Ta metoda nie jest odpowiednia.

Platforma 1C zapewnia możliwość łączenia się z nim przez połączenie COM. Podobnie jak wiele programów Windows, podczas instalacji 1C, dwa obiekty COM są rejestrowane w systemie - Serwer automatyzacji i złącze COM. Możesz pracować z obu obiektów przy użyciu języka, w którym dostarczana jest technologia COM.

Obiekt serwera Automation jest aplikacją 1C, prawie nie różni się od zwykłej aplikacji klienckiej. Różnica polega na tym, że pojawia się możliwość dodatkowo zarządzanie oprogramowaniem. Instancja aplikacji. Podczas pracy z obiektem COM Connector pojawia się lekka wersja aplikacji 1C, w której formularze nie są dostępne, a także funkcje i metody związane z interfejsem i efektami wizualnymi. Sama aplikacja rozpoczyna się w trybie "Zewnętrzny". Inicjalizacja zmiennych globalnych (na przykład definicja aktualny użytkownik Oraz jego ustawienia) muszą być wykonywane w module połączenia zewnętrznego 1C. Jeśli w trybie zewnętrznym w trybie połączenia w kodzie zostanie wywołana funkcją, która nie jest dostępna w tym trybie, wywołany zostanie wyjątek (który zostanie przeniesiony do naszego skryptu Pythona). Dzwonienie do niebezpiecznych funkcji powinny być oprawione przez projekty formularza

# Jeśli nie jest połączenie zewnętrzne, a następnie ostrzeżenie ("Cześć!"); # Endoks.

Od pracy z obiektami COM - Technologia wyłącznie okna tylko, nie dziwi nie jest zaskakujące, że w standardowej podaży Pythona brakuje. Będzie to konieczne, aby ustawić rozszerzenie - zestaw modułów zapewniających wszystko potrzebujesz funkcjonalności Do programowania pod Windows w Pythonie. Można go pobrać jako zespołu EXE-Installer. Sama rozszerzenie zapewnia dostęp do rejestru, usług, ODBC, obiektów COM itp. Alternatywnie można natychmiast zainstalować rozkład Activestate Python, w którym rozszerzenie Win32 pochodzi z pola.

Od pewnego czasu eksperymentowałem z połączeniem COM w rozwijaniu aplikacji internetowych, w szczególności konto osobiste. Objawiano następujące minusy:

Połączenie COM jest powolne. Niska produktywność - znana technologia minus COM.
- Proces instalacji połączenia z 1C, w zależności od konfiguracji, może trwać od 1 do 8 sekund (w moim przypadku - 6 sekund). Czy warto powiedzieć, że połączenie połączenia z każdym żądaniem doprowadzi do tego, każda strona zostanie załadowana przez 8 sekund.
- Ponieważ aplikacje internetowe w pracy Pythona jako niezależny serwer, poprzednia pozycja może być kompensowana przez przechowywanie połączenia w niektórych zmiennych globalnej iw przypadku błędu, aby go przywrócić. Jak utrzymać połączenie z PHP, I, szczerze mówiąc jeszcze nie myśl.
Platforma krzyżowa aplikacji jest tracona.

W oparciu o powyższe elementy postanowiono zmienić zasadę interakcji, oddzielenie go na 2 części - pierwsza zależna platforma (Windows), dane rozładunku 1C do dowolnego wygodnego formatu, a drugi, niezależna od platformy, Co jest w stanie pracować z danymi, jest w zasadzie nieświadomych o 1C.

Strategia działania jest następująca: Skrypt Pythona jest podłączony z 1C, wykonuje żądane żądania i rozładowuje dane Baza Sqlite.. Ta baza danych może być podłączony z Pythona, PHP, Java. Większość naszych projektów pracuje nad Pythonem, a ponieważ nie wyjdę z pisania surowych zapytań SQL z twoimi rękami, a następnie wszystkie prace z podstawą Sqlite są wykonywane przez ORM SQLalchemy. Było wymagane tylko do opisania struktury danych stylu deklaracyjnego bazy danych:

Z sqlalchemy.ext.Declarative Import Demplative_Base z kolumny importowej Sqlalchemy, liczbę całkowitą, liczbową, datetime, Unicode, Boolean, Candbinary, Roundey Base \u003d deklaratyw_base () Kontrolka klasy (podstawa): __Tablename__ \u003d "ABONENTY" ID \u003d kolumna (liczba całkowita, podstawa_key \u003d Prawdziwe) konto \u003d kolumna (Unicode (32), index \u003d true) Code \u003d kolumna (Unicode (32)) Adres \u003d kolumna (Unicode (512)) FIO \u003d kolumna (Unicode (256)) Źródło \u003d kolumna (Unicode (16) ) PSU \u003d kolumna (Unicode (256)) TSO \u003d kolumna (Unicode (256)) NP \u003d kolumna (Unicode (256)) Street \u003d kolumna (Unicode (256)) House \u003d kolumna (integer) płaski \u003d kolumna (integer) Mro \u003d Kolumna (Unicode (256)) Klasa Płatność: __Tablename__ \u003d "Płatności" # i tak dalej ...

Teraz wystarczy importować ten moduł do każdego projektu Pythona i możesz pracować z danymi.

Przewiduję twoje pytanie - "dlaczego sqlite"? Głównym powodem - podstawa jest potrzebna tylko do czytania, więc nie powinno być problemów z pisaniem w SQLite. Po drugie, format tego DBMS jest wygodny - wygodniej jest go zobaczyć (istniejemy dużo darmowe narzędzia, w tym super ekspansja dla Firefoksa). Po trzecie przypadki konieczne było dostęp do abonentów tych maszyn, na których nie ma połączenia z serwerem MySQL. W takim przypadku wystarczy skopiować plik bazy danych SQLite, a ta maszyna będzie uzyskać dostęp do wszystkich informacji.

Rozładunek występuje raz dziennie w nocy. Obudowa danych w 1C może być zautomatyzowana w ten sam sposób. Na przykład musisz nagrać świadectwo pozostawione przez abonentów na stronie konta osobowego. W tym przypadku ponownie połączyć się z 1C i metoda oprogramowania Utwórz i wykonaj dokument "Akt wskazań do usuwania". Podam kod tuż poniżej.

Praca z obiektami COM w Pythonie jest nieco niezwykła. Po pierwsze, "Pifoniczność" kodeksu zostanie utracona - zasady nazywania zmiennych i funkcji w 1C, aby umieścić go łagodnie, nie odpowiadają zen pytonem. Po drugie, wszyscy wiedzą, że obiekty 1C są często określane jako symbole cyrylicy, które powodują problemy podczas rozwijania na Pythonie ... ale są rozwiązane. Proponuję zapoznać się z kodem:

Importuj Pythoncom Import Win32Com.Client V82_Conn_string \u003d "SRVR \u003d V8_Server; ref \u003d v8_db; usr \u003d nazwa użytkownika; pwd \u003d megapass;" Pythoncom.coinitialize () V82 \u003d Win32Com.Client.dispatch ("V82.comContor"). Connect (V82_Conn_string)

Jak widać z kodu, klient jest inicjowany do pracy z 1c. Definicja obiektu COM występuje według nazwy "V82.comConnector". Należy pamiętać, że nazwa ta jest prawdziwa dla platformy V8.2, jeśli masz wersję 8.1, nazwa będzie "V81.comConnector".

W zainicjowanym kliencie wywołujemy metodę połączenia (), przekazując jej ciąg połączenia. Ciąg składa się z nazwy serwera, bazy danych, użytkownika i hasła. Powstały obiekt V82 utrzymuje połączenie za pomocą aplikacji 1C. Nie ma metody rozłączenia () ani czegoś takiego. Aby odłączyć bazę, wystarczy usunąć obiekt z funkcji pamięci DEL () lub przypisać zmienną Brak.

Posiadanie obiektu można znaleźć w dowolnych polach i metodach kontekstu globalnego 1C, działają z uniwersalnymi woluminami typu dokumentu tekstowego, tabeli i TD. Ważne jest, aby wziąć pod uwagę, że podczas pracy przez połączenie COM 1C działa w trybie "Union zewnętrzny". Jest to niedostępne wszelkie funkcje do pracy interaktywnej, takich jak wyskakujące dialogi, powiadomienia i, co najważniejsze, formularze. Jestem pewien, że zmieniasz programistę konfiguracji, które dokonują najważniejszej funkcjonalności w przycisku procedury 1 () w module formularza dokumentu.

Porozmawiajmy o takiej próżności jako atrybuty kiriliczne. Pomimo faktu, że 1C jest dwujęzycznym medium, a dla każdej rosyjskiej metody istnieje analog angielskojęzyczny, prędzej czy później konieczne będzie skontaktować się z atrybutem kirilicznym. Jeśli on. języki PHP. lub VBScript nie spowoduje żadnych problemów

Ustaw Con \u003d CreateObject ("V81.COMConnector") Ustaw V8 \u003d Con.Connect ("Stringcklining") ustawiony sense \u003d v8.documents. Harmonogram .... Ustaw konto SetsCape \u003d bateria. .... Rectutei

Kod na Pythonie po prostu zawiesza się z błędem błędu składni. Co robić? Edytuj konfigurację? Nie, wystarczy użyć metod Getattr i Setattr. Przesyłanie obiektu COM i nazwę cyrylicy atrybutu do tych funkcji można uzyskać odpowiednio i ustawione wartości:

# Kodowanie \u003d CP1251 Catalog \u003d Getattr (V82.Catalogs, "Facial")

Ważne jest: nazwy danych szczegółów, a także parametry funkcji i metod powinny być przesyłane w kodowaniu CP1251. Dlatego, aby uniknąć Putnice z wyprzedzeniem z wyprzedzeniem, ma sens, aby zadeklarować go na początku pliku: # kodowanie \u003d CP1251. Potem możesz przenieść linie bez obaw o ich kodowania. Ale! Wszystkie ciągi uzyskane z 1C (wyniki funkcji funkcji, żądania) będą w kodowaniu UTF-8.

Przykład kodu, który wykonuje w zapytaniu 1C, okazuje się wynik i zapisuje podstawę w SQLite:

# Coding \u003d CP1251 q \u003d "" "Wybierz bajkę. Kod jak kod, twarzy twarzy. Wyposażenie. Naselipart. Nazwa +", "+ twarzy. Smartyadress jako adres, na twarz. Bonient.name jako FIO, PSU.Division. Nazwa Jako PSU, Express (charakterystycznie trwałe trwałe. relacje jako przewodnik. Organizacja substytucyjna surizacji). Operacja jako OSP, na twarz. Wyposażenie. Naselipart. Nazwa jako NP, twarzy twarzy. Urządzenia. Uruchomienie. Nazwa jako ulica, twarzy. Sprzęt. Odpiąs . Dystrybucja jako Flat, LitsevyeScheta.Divizion.Roditel.Naimenovanie mro AS AS Spravochnik.LitsevyeScheta LitsevyeScheta lewo dołączyć RegistrSvedeniy.HarakteristikiLitsevyeScheta.SrezPoslednih (, VidHarakteristiki \u003d wartość (Spravochnik.VidyHarakteristik.TerritorialnoSetevayaOrganizatsiya)) jak HarakteristikiLitsevyeSchetaSrezPoslednih LitsevyeScheta.Ssylka HarakteristikiLitsevyeSchetaSrezPoslednih.Obekt \u003d "" "Query \u003d V82.NewObject ( "Query", q) Wybór \u003d Query.execute (). Wybierz () Connen \u003d DB.Connect () Conne.Query (modele.abonent) .Delete () podczas selekcji.Next (): ABONENT \u003d modele.abonent () ABONENT.ACCOUNT \u003d selection.code.strip () ABONENT.Code \u003d selection.Code ANDENT.FIO \u003d selection.Fio ABONENT.Address \u003d selection.Address ABONENT.PSU \u003d selection.psu ABONENT.TSO \u003d Selection.tso Abonent.Source \u003d U "ASRN" ABONENT.NP \u003d selection.np ABONENT.Street \u003d selection.Street ABONent.House \u003d selection.House ABONENT.Flat \u003d selection.flat.mro \u003d selection.mro Conn.add (ABONENT) Conn.comMit ()

Tutaj Conn jest sesja połączenia z bazy sqlite. Utworzony jest obiekt żądania zapytania, jego tekst jest wypełniony. Jak wspomniano powyżej, tekst zapytania musi znajdować się w CP1251, dla którego kodowanie jest pierwsze zadeklarowane. Po wykonaniu żądania wszyscy subskrybenci zostaną usunięte w bazie danych, aby nie dodawać ducky, a następnie dodawania w cyklu i podąża za końcowym współuszczenią.

Podczas pracy z żądaniami ujawniłem następujące zasady.

Wybór pola, przypisać im nazwy łacińskiego, będzie znacznie wygodniejsze, aby uzyskać dostęp do nich przez selektor (punkt) zamiast Getat ().
- Wybierz tylko typowe typy danych: rzędy, cyfry, data i boolean. Nigdy nie wybieraj linków do obiektu (dokument, katalog)! W tym kontekście odniesienia nie są całkowicie potrzebne, a nawet szkodliwe dla Ciebie, ponieważ wszelkie odniesienie do szczegółów lub metody łącza spowoduje żądanie za pośrednictwem połączenia COM. Jeśli skontaktujesz się z atrybutami łącza w cyklu, będzie bardzo powolny.
- Jeśli wybierzesz pole typu pola, zostanie zwrócony jako obiekt w PYTIME. Jest to specjalny typ danych do przesyłania daty w połączeniu COM. To nie jest tak wygodne do pracy z nim, jak ze zwykłym datetime. Jeśli wyślesz ten obiekt na INT (), zwroty czasu, z którego możesz uzyskać metodę Datetime Fromtimestamp ().

Teraz rozważ, jak utworzone są dokumenty drukowania. Faktem jest, że konsument musi zapewnić możliwość pobrania wstępnie przygotowanych dokumentów, takich jak otrzymanie płatności lub ustawy o pojednaniu. Dokumenty te są utworzone w 1C zgodnie z ustalonymi wymogami, ich wdrożenie na Pythonie zajmie dużo czasu. Dlatego lepiej jest generować dokumenty w 1C i utrzymać je format Excel..

Więc ustawa o pojednaniu jest generowana przez wyjątkowy przetwarzanie zewnętrzne. Dla tych, którzy nie znają terminologii 1C: przetwarzanie jest samodzielnym programem, który ma moduł, formularze, szablony, zaprojektowane do uruchomienia w medium 1C. Należy zainicjować przetwarzanie, wypełnić swoje dane i spowodować, że funkcja powróci do nas dokument tabelarycznyZaprojektowany, aby wyświetlić 1c. Niniejszy dokument musi zostać zapisany w celu programu Excel i kopiowanie do serwera lub zapisu do bazy danych.

Link \u003d Getattr (V82.Catalogs, "ReportSystems"). Findbydescription ("ACT Records Elean") Nav_url \u003d v82.geturl (link, "Raport") Nazwa \u003d v82.externalreports.Connect (Nav_url) ExternalReports.Create (Nazwa) Setattr (ExternalReport, "Facial", Reference) Table_doc \u003d ExternalEtence.GetDoc () PATH \u003d V82.GetTempFileName ("XLS") Table_doc.Write (ścieżka, V82 .SpreadsheetdocumentFiletype.xls) Raport \u003d modele.Report .Count \u003d reference.code.strip () Raport.Type \u003d U "ACT" Raport.document \u003d Otwórz (ścieżka, "RB"). Czytaj () Connen.add (Raport)

Następuje następujący fragment. Łączy przetwarzanie tworzące dokument. Przetwarzanie można wbudować w konfiguracji, przechowywanej na dysku lub w bazie danych 1C (w niektórych przewodnikach). Ponieważ przetwarzanie jest często zmieniane, dzięki czemu za każdym razem nie można zaktualizować konfiguracji, najczęściej zmieniającym się przetwarzaniem jest przechowywany w podręczniku raportowania, w szczegółach o nazwie "Wartość pamięci". Przetwarzanie można zainicjować, rozładowując go z bazy danych do dysku i ładowania, lub metodą GETURL (), do której odniesienie do elementu odniesienia i nazwy rekwizytów. Przypisujemy wartość rekwizytów uzyskanych przez obiekt przetwarzania, wywołaj funkcję GetDoc (), otrzymujemy dokument tabelaryczny, który jest przechowywany w tymczasowym pliku Excel. Zawartość tego pliku jest zapisywana w bazie danych SQLite.

Ostatnia rzecz pozostaje do rozważenia - jest to oprogramowanie zwiększające w 1C. Przypuśćmy, że chcesz dokonać świadectwa z subskrybentów. Aby to zrobić, wystarczy, aby utworzyć i przeprowadzić dokument "Akt wskazań usuwania":

# Coding \u003d CP1251 Acts \u003d Getattr (V82.Documents, "AktNotchy") Act \u003d Acts.Createdocument () Setattr (ACT, "Wskaźnik", 1024.23) Setattr (ACT ", abonent", "Ivanov") # Wypełnianie Inne szczegóły. .. Act.Write ()
Teraz zautomatyzowana obudowa danych.

Dlatego przedstawiłem metodę opartą na oprogramowaniu rozładunku i ładowania danych za pomocą połączenia COM. Ta metoda pomyślnie działająca w mojej organizacji przez prawie rok. Baza utworzona z 1C służy 3 systemów płatności, dostęp do Internetu (płatność kartami przez Internet), a także konto osobiste. Ponadto różne skrypty są podłączone do bazy danych, aby zautomatyzować procedurę.

Pomimo wad metody (powolna prędkość zebranego związku), ogólnie funkcjonuje stabilne. Mamy dane w formie opartej na platformie (SQLite), z którym można pracować z dowolnego języka. Główną częścią kodu jest napisane w Pythonie, a zatem dostępne są wiele środków i technik, które nie mogą nawet marzyć o 1C.

To jest jeden z możliwe metody interakcja z 1c. Jestem pewien, że nie jest nowy i prawdopodobnie został już przetestowany przez kogoś, zoptymalizowany. Próbowałem jednak skonfigurować maksymalne informacje o procesie, aby chronić Cię przed pułapkami, do których została przyjęta.

Życzę wszystkim szczęścia i pamiętać, że nie jest tak straszne dla 1C, jak jego małe!

) W porządku

W tym samym czasie widziałem więcej niż raz, kiedy właśnie wysiadłem z publikacji, które nawet nie wyciągnęły 10 punktów.
Dlaczego to się stało? Najwyraźniej dlatego, że ktoś, kogo oczyścili.


Mówię o tym i powiedziałbym, że byłoby miło bez czytania artykułu na temat ratingu, aby zrozumieć, ile go potrzebujesz, lub ocenę nie jest tak prymitywne +/-. Jeśli chodzi o duszę, dostosowałem to: zdobyła tak wiele ze względu na fakt, że gwiazdy rozwinęły się i wielu ludzi zebrało na terenie i polubił wielu, rozumiesz tę sprawę, ponieważ jak tylko artykuł pozostawia z strona główna Można już znaleźć tylko na życzenie, a więc głosowanie wszystko przechodzi. I utrzymuj na głównej rzeczy, o ile rozumiem, umożliwiają stałe komentarze \u003d promocja artykułu.
Jest to dla tego, że w trakcie przechodzących ulic - w ogóle jest często ważna, nie jest to jakość i znaczenie towarów, ale pasabilitywa miejsca, ludzie chodzą często kupują to, co rzucą następnego dnia, po prostu ze względu na proces. Od dawna jest znana choroba - wybuch. Lub po prostu zwiększaj strumień zwiększa prawdopodobieństwo pożądanego nabywcy.

Oraz plus i minusy ... jest tylko jakimś "dziękuję" na czas spędzony i pracować


Te. Minus jest również uważany za "dzięki"? Chciałem poznać twój stosunek do tego, czy konieczne jest umieszczenie go w takich przypadkach i jak ciekawe jest inni? Czy jest umieszczony, gdy artykuł jest szkodliwy / zły lub kiedy jest po prostu bezużyteczny dla ciebie / pusty.
Moim zdaniem artykuł wygląda na po prostu podnoszenie oceny, ponieważ:
1. Problem z typami z typami jest na ogół ignorowany przez autora, chociaż nie był leniwy, aby napisać kilka komentarzy.
2. W artykule oczywiste niedokładność: Mówi się, że możesz tylko

V82 \u003d Nowa walka ("V82.comConnector"); Kod \u003d kontrabczyki.code;


ale spokojnie robię z pomocą w ten sposób:

Raport (base.pravnickhniki.tragenci) ("LLC"). Kod);


i wszystko jest w porządku! I wybiorę połączenie V82.comConnector
Jest to dziwne, że autor absolutnie pluje na fakt, że jego artykuł zawiera takie problemy, na których wskazali, i nie reaguje w żaden sposób.
3. Ale nadal istnieje problem, gdy pojawi się błąd "Klasa nie istnieje"
4. I wystąpi problem, gdy jest zainstalowany 8.2, a następnie zainstalowany 8.1 - Wypróbuj go w celu wymiany zgodnie z OLE / COM Exchange!
5. Czy mógłbyś określić główne przetwarzanie na stronie, która umożliwia powszechnie połączyć przez OLE / COM, aby rozpocząć przybysze, piszesz dla nich! Przy okazji, przy okazji, z jakiegoś powodu walczy z tobą, dlaczego? W rezultacie 2 słowa są zasadniczo 6 dla scen.

Ogólnie rzecz biorąc, nie biorę wody, ale wskazuję na konkretne luki, ale zerowe reakcje. Jeśli to jest doświadczenie, które udostępniasz, jest jakiś błędny i niekompletny.
Mam na myśli fakt, że autor miałby chęć zebrania wszystkich usterki, a potem może przynajmniej posłuchać doświadczenia kogoś innego, a nie nagrać w komentarzach. Istnieje również sytuacja, kiedy ten, który czytał jej wie, że jest autorem, mówią mu (czasami niepoprawnie), a także walczy. W rezultacie wszystkie informacje nie są w artykule, ale w uwagach! Zabawny! Więc często się dzieje, ale nie musisz uciec od tego, co chcesz, jak lepiej - pokazuję, jak najlepiej, a inni są pokazani! Uwzględnij go w artykule, a będzie wart, nie wszystkie ciekawe, aby przeczytać ten statek.

Jedną z opcji wymiany danych między bazami danych 1C jest wymiana przez połączenie COM.

Dzięki połączeniu COM można połączyć się z jednej bazy danych do innej i odczytu lub zapisu danych. Możesz użyć tej metody zarówno w wersji serwera klienta z bazy danych i baz plików. W tym artykule przeanalizujemy przykłady tego rodzaju związków. Przykłady używają platformy 8.2.

Możesz utworzyć dwa typy obiektów COM do aplikacji 1c. to V82.Application. i V82.comConnector.. W przypadku V82.Application. Rozpoczyna się niemal pełna instancja aplikacji 1C. W przypadku użycia V82.comConnector. Uruchomiono małą część serwera.
Prędkość pracy w tym przypadku jest wyższa, ale niektóre funkcje mogą nie być dostępne. W szczególności współpracę z formami i wspólnymi modułami, dla których właściwość nie jest ustalana z związkami zewnętrznymi. Potrzebny musi użyć V82.comConnector. I tylko w przypadku niedoboru funkcjonalności V82.Application.. Szczególnie silnie różnica prędkości może być zauważalna w bazach dużej objętości.

Więc postępuj

  1. Utwórz obiekt COM
    • dla V82.Application. Połączenie \u003d nowy obiekt COM ("V82.Application");
    • dla V82.comConnector. Połączenie \u003d nowy obiekt COM ("V82.comConnector");
  2. Tworzymy mnogim połączeniem
    • w przypadku wariantu serwera Connection Connection \u003d "SRVR \u003d" "Imasorver"; Ref \u003d "" "Nazwa";
    • w przypadku wersji pliku Connection Connection \u003d "Plik \u003d" "Pullbazbaz" "; USR \u003d Nazwa użytkownika; PWD \u003d Hasło";
  3. Wykonaj połączenie z bazą danych Próba połączenia \u003d połączenie. Podłączyć (związek string); Komunikat wyjątkowy \u003d nowy komunikat użytkownika; Wiadomość. Tekst \u003d + opis (); Wiadomość. Zgłosić() ; Uroczystości;
  4. Przerwać połączenie z podstawą Związek \u003d niezdefiniowany;

    Dla obiektu. V82.Application. Konieczne jest spełnienie połączenia z połączeniem, w przeciwnym razie niekompletna sesja się powiedzie, co następnie będzie musiało zostać usunięte ręcznie. W przypadku V82.comConnector. Połączenie jest wywoływane automatycznie po zakończeniu procedury, w której połączenie zostało wykonane. I jest inny mały moment.

    Dla użytkownika, w którym połączenie jest wykonywane, pole wyboru "Program zamykania żądania" musi być wyłączone w swoich ustawieniach.

Teraz zbieramy cały kod w grupie

Połączenie \u003d nowy obiekt COM ("V82.Application"); // Connection \u003d Nowy obiekt COM ("V82.comContor"); Indeks wioślarski \u003d "SRVR \u003d" "Server1C" "; Ref \u003d" "MyBase" "; USR \u003d PETYA; PWD \u003d 123"; // Indeks Ritching \u003d "Plik \u003d" "C: MyBase" "; USR \u003d Peter; PWD \u003d 123"; Próba połączenia \u003d połączenie. Podłączyć (związek string); Komunikat wyjątkowy \u003d nowy komunikat użytkownika; Wiadomość. Tekst \u003d. "Nie udało się połączyć z bazą danych" + Opis (); Wiadomość. Zgłosić() ; Uroczystości; Związek \u003d niezdefiniowany;

Dla rodzaju połączenia V82.Application. Metoda jest stosowana do obiektu COM, który został pierwotnie utworzony, a dla V82.comConnector. Metoda ma zastosowanie do podłączenia. Następnie pracuj z żądaniem idzie standardowe środki 1c. W kodzie wygląda tak:

Żądanie \u003d połączenie. NewObject ("Query"); // dla V82.comConnector. Query \u003d połączenie. NewObject ("Query"); // dla V82.Application. Zapytanie ofertowe. Tekst \u003d "Wybierz |. Postganizacje. Kod, |. Organizacje propulatora.Name. | IS. |. Katalog. Alorganizacje jako biuro "; Wynik \u003d żądanie. Wykonać (); Wybór \u003d wynik. Wybierz (); Podczas gdy próbka. Następny () cykl endackel;

W przypadku wersji 1C: Przedsiębiorstwo 8.3 Wszystko pozostaje niezmienione, z wyjątkiem tego, że podczas tworzenia Comobeców należy użyć "V83.comConnector" lub "V83.Application".

Dzwon.

Są ci, którzy przeczytali tę wiadomość przed tobą.
Subskrybuj odbieranie artykułów świeżych.
E-mail
Nazwa
Nazwisko
Jak chcesz przeczytać dzwonek
Bez spamu