az internet ablakok Android

COM kapcsolat 1c 8.3 Példa kérés. Három bálna a COM objektumokkal

) Rendben

Ugyanakkor többször is láttam, amikor csak kijöttem a kiadványokból, amelyek még 10 pontot sem húztak.
Miért történt ez? Nyilvánvalóan azért, mert valaki nyilvánvalóan esett.


Beszélek róla, és azt mondanám, hogy jó lenne, anélkül, hogy a cikket olvasnánk, hogy megértsük, hogy megértsük, hogy mennyire van szüksége, vagy értékelje, hogy nem annyira primitív +/-. Ami a lelket illeti, kiigazítanám ezt: annyira szerezte meg, hogy a csillagok fejlődtek, és sokan összegyűltek a helyszínen, és sokan szerették, megérted ezt az ügyet, mert Amint a cikk elhagyja főoldal Már csak kérésre megtalálható, és így mindent elfogad. És fenntartása a fő dolog, mint amennyire én értem, hogy az állandó megjegyzések \u003d promóció a cikket.
Ezért vannak olyan üzletek, amelyek az elhaladó utcákon vannak - végül is, gyakran fontos, hogy nem az áruk minősége és relevanciája, hanem a hely elfogadhatósága, az emberek, akik gyakran vásárolnak, amit a következő napon dobnak ki, csak a folyamat kedvéért. Régóta jól ismert betegség - egy robbanás. Vagy egyszerűen növeli a patak növeli a kívánt vevő valószínűségét.

És a pluszok és a hátrányok ... csak valami "köszönöm" a töltött időt és a munkát


Azok. Mínusz is figyelembe veszi a "Köszönet" -nek is? Meg akartam tudni a hozzáállásodat, hogy szükséges-e ilyen esetekben, és milyen érdekes mások? El kell kerülni, ha a cikk káros / rossz, vagy ha csak haszontalan az Ön / üres.
Véleményem szerint a cikk egyszerűen felemeli a minősítést, mert:
1. A típusú típusokkal kapcsolatos problémát általában a szerző figyelmen kívül hagyja, bár nem volt lusta, hogy írjon egy csomó megjegyzést.
2. A cikkben nyilvánvaló pontatlanság: azt mondják, hogy csak akkor lehet

V82 \u003d Új kombolás ("v82.comconnector"); Kód \u003d counterparty.code;


de nyugodtan csinálom a feldolgozás segítségével, mint ez:

Jelentés (bázis.pravnikhniki.tagents.nightyponiment ("LLC"). Kód);


És minden rendben van! És én választom a kapcsolatot V82.Comconnector
Furcsa, hogy valahogy a szerző teljesen köpessen arra a tényre, hogy cikke olyan problémákat tartalmaz, amelyeken jelezték, és semmilyen módon nem reagál.
3. De még mindig probléma merül fel, ha egy hiba megjelenik "az osztály nem létezik"
4. És van egy probléma, ha telepítve van a 8.2, majd telepítve 8.1 - Próbálja ki az OLE / COM szabvány szerinti hasznosítási csere szerint!
5. Megadhatja a webhely főfeldolgozását, amely lehetővé teszi, hogy az OLE / COM-on keresztül az OLE / COM-on keresztül az újonnan érkezettek megkezdéséhez írjon nekik! By the way, az úton, valamilyen oknál fogva, ez ütött veled, miért? És ennek eredményeképpen 2 szó lényegében 6 a jelenetek számára.

Általánosságban elmondható, hogy nem vizet kapok, de pontokat mutatnak az adott résekre, de nulla reakciókra. Ha ez az a tapasztalat, amelyet megosztasz, valamilyen hibás és hiányos.
Úgy értem, hogy a szerzőnek vágya lenne összegyűjteni az összes hibát, akkor legalább hallgathat valaki más tapasztalatait, és nem a megjegyzéseket. Van egy helyzet is, amikor az, aki elolvasta őt, többet tud, mint a szerző, azt mondják neki (néha helytelenül), és ő is harcol. Ennek eredményeként az összes információ nem szerepel a cikkben, hanem a megjegyzésekben! Vicces! Tehát gyakran történik, de nem kell elmenni attól, amit jobban akartál - megmutatom, milyen a legjobb, és mások is megjelennek! Tartalmazza azt a cikkben, és érdemes lesz, nem ugyanaz az érdekes, hogy elolvassa ezt a hajót.

Nyomtatás (Ctrl + P)

Az 1C adatbázisok közötti adatok cseréjének egyik lehetősége csere Com kapcsolat. A COM kapcsolatnál az egyik adatbázisból a másikba csatlakozhat, és adatot olvashat vagy írhat. Ezt a módszert a bázisok ügyfél-kiszolgálói verzióiban és a file bázisok. Ez a cikk az ilyen típusú vegyületeket tárgyalja a platformon 8.3

com kapcsolat

Kétféle COM objektumot hozhat létre az 1c alkalmazáshoz. Ez az olasz csatlakozások V83.Application és COM kapcsolatok V83.comconnector . Esetében V83.Application Az 1C-alkalmazás szinte teljes példánya elindul. Használat esetén V83.comconnector Egy kis szerver rész elindul. A munka sebessége ebben az esetben magasabb, de bizonyos funkciók nem állnak rendelkezésre. Különösen olyan formákkal és közös modulokkal dolgozik, amelyekre az ingatlant nem hozták létre külső vegyületekkel. Kell használni V83.comconnector És csak a funkcionalitás hiánya esetén V83.Application. Különösen erősen a sebességkülönbség a nagy térfogatú bázisokon észrevehető. A 8.2 platformhoz használt V82.Application vagy V82.Comconnector

Telepítse az OLE csatlakozást

Csatlakozás \u003d Új Comback ("V83.Application");

Állítsa be a COM kapcsolatot

Csatlakozás \u003d új COM objektum ("v83.comcconnector");

Összekötő karakterlánc

// az Option ügyfélszerver számára
String monitoring \u003d "Srvr \u003d" "szennyeződés" "; ref \u003d" "" név ";
// Fájl mód opció:
String monitoring \u003d "Fájl \u003d" "Pullbase" "; USR \u003d felhasználónév; Pwd \u003d jelszó ";
Kísérlet
Kapcsolat \u003d kapcsolat . Csatlakozás.(String monitoring);
Egy kivétel
Üzenet \u003d új felhasználói üzenet;
Üzenet . Szöveg = "Nem sikerült csatlakozni az adatbázishoz" + Leírás (); Üzenet . Jelenteni();
Ünnepségek;

Törési kapcsolat

Vegyület \u003d meghatározatlan;
Az objektumhoz V83.Application Meg kell teljesíteni a kapcsolatot a kapcsolathoz, különben a hiányos munkamenet leáll, amelyet manuálisan kell törölni. Esetében V83.comconnector A kapcsolat automatikusan megszakad, ha az eljárás befejeződött, amelyben a kapcsolatot elvégezték. És van még egy kis pillanat. A csatlakozás alatt álló felhasználó számára a "Request Closing Program" jelölőnégyzetet a beállításaiban ki kell kapcsolni.

NewObject () módszer

Új objektum létrehozásához használhatja a NewoBject () módszert, például:

-ért V83.comconnector

Megenged \u003d Kapcsolat. Newobject ( "Vizsgálat ") ;
Táblázat. \u003d Kapcsolat. Newobject ( "Baplication") ;
Masscoma \u003d kapcsolat. Newobject ("Array");

Uidcom \u003d kapcsolat .newobject

-ért V83.Application

Kérés \u003d Vegyület. NewoBject (" Vizsgálat ") ;
Tableole \u003d kapcsolat. NewObject.("Baplication") ;
Massive \u003d Connection.NewObject("Sor");
Uidcom \u003d Connection.NewObject("Egyedi önellátó", evezés);

Megenged . Szöveg \u003d."VÁLASZT
| Postniizations. Kód,
| Projeculáns szervezetek.Name
| Van | Könyvtár. Valamitoriagizations
Mint az iroda ";

Eredmény \u003d Kérés. Végezzen ();
Minta \u003d Eredmény. Választ () ;
Miközben minta. Következő()Ciklus
Endcycle;
A konfigurációs objektumkezelőket is használhatja:
ReferenciaCom \u003d Csatlakozás. Könyvtárak. Namemementy;
DokumentumCom. \u003d Kapcsolat. Dokumentáció. Azonnali;
Regisztráció \u003d kapcsolat. Nyilvántartás. Nameregister;

Az átvitel átvétele és összehasonlítása a COM kapcsolaton keresztül

Összehasonlítani az értékeket az elemek a felsorolások meghatározott konfiguráció, meg kell átalakítani ezeket az elemeket az egyik primitív típusokat, amely nem okoz nehézséget. Az ilyen típusok lehetnek numerikus vagy karakterlánc típus. Konvertálja a számítási elem értékét a numerikus típushoz

Elem tranzakciók \u003d. Kapcsolat. Fut. Pravoyer1.Nextile (1). Requisite1;

Lehetséges \u003d elem tranzakciók. Formázás (). Értékek;

Elementális eljárások \u003d lehetséges. Lehetséges. Index (lehetőség. Interities (kapcsolat .xmlstring)

Ha az elem a művelet \u003d 0, majd jelenteni ( "Értékek1");

Az elemarizáció \u003d 1 Azután Jelentés ("értékek2");

Vége lett;

Egy objektum megszerzése a COM-on az azonosítón keresztül

A konfigurációs objektumkezelők révén COM objektumot kapunk, például:
DokumentumCom. \u003d Vegyület. Dokumentáció. Azonnali;

Ezután egy egyedi azonosítót kapunk:

Evezés \u003d kapcsolat.String ( DokumentumCom.unikovyTentifier())

Azonosító \u003d új y naturalfentifier (evezés);
TÓL TŐL syclipoider \u003d [imidremence] Dokumentumok. Öntsük az azonosítóhoz (azonosító);

Ha meg kell találnia a COM objektumot az azonosító dokumentumnak megfelelően, akkor meg kell írnia ezt:

Uidcom \u003d. Connection.newObject("Egyedi önellátó", evezés);
REFLD azonosító \u003d kapcsolat. Dokumentumok [ImytroCement]. Hibahanyag (UIDCOM);

Szia habravelov!

Ebben a cikkben meg akarom mondani arról, hogy a szervezetem 1c platformjával való integráció jött létre. Arra késztett, hogy szinte teljes hiányt tegyek technikai információ erről a témáról. Különböző cikkek olvasása és jelentések az 1c-es kötegek témájáról bármely információs rendszerrel, ismét győződjön meg róla, hogy mindegyike marketing, demonstráció, és soha - a technikai, amely tükrözi a problémát és a döntés lényegét.

Figyelmeztetek arra, hogy a módszer semmilyen esetben nem igényel egyetemességet. Mivel az 1C konfigurációk maguk is sokat vannak, és információs rendszerek, a nyelvek és a platformok még inkább, a lehetséges kombinációk száma óriási. Célom az, hogy bemutassa az esetleges megoldásokat.


Az 1C-vel integrált nyelvként Python-t választottam. Nagyon alkalmas a folyamatok automatizálására. Ez hozzájárul a minimalista szintaxishoz (a kódot nagyon gyorsan felvették), gazdag standard könyvtár (kevésbé szükség van harmadik fél modulokra), a keresztplatform - nagy valószínűséggel, a Linix operációs rendszerben írt kód sikeres lesz a Windows rendszerben .

Kezdje, körvonalazza, amellyel dolgozunk. Szervezet - Energiaellátó vállalat a távol-keleti régióban - kb. 400 ezer előfizetőt, az 1c alapot önálló konfigurációra szolgál. Minden előfizető esetében a kifizetései, az eredményszemléletek, az elfogyasztott és számítási rendszerek, számviteli eszközök, olvasmányok és sok más adat tárolódnak.

Egyszer a szervezetben egy Delphiben írt program állt, és az MSSQL / Firebird adatbázisként használta. Ezekben a dicsőséges időkben bármilyen nyelven csatlakozhat az adatbázishoz, és sok műveletet készíthet - az adós előfizetők kiválasztása, a kapott fizetés terjesztése, az eszközök olvasásának javítása. Nem meglepő, hogy a rutin automatizálásának szkriptgyűjtése folyamatosan nőtt. A programozók bármilyen tevékenységet végezhetnek a program megnyitása nélkül.

Sajnos, az átmenet 1c székekre véget ért - nem volt lehetséges közvetlenül csatlakozni a bázishoz. Általánosságban elmondható, hogy az 1C platform önmagában oszthatatlan és rosszul integrálódik más rendszerekkel. Ő, ahogy azt mondják, a dolog önmagában. Az 1c-es adatok betöltésével emlékezni kell arra, hogy nem lesz olyan könnyű eltávolítani őket. De tekintettel arra, hogy a szervezetnek a fizetési rendszerek végrehajtásához és személyi területMeg kellett találni néhány megoldást.

A fő feladatok, amelyek előttem álltak, képesek gyorsan átvenni az adatokat egy adott személyes fiókra - teljes név, cím, számviteli eszközök, műszerleolványok, kifizetések, eredményszemléletek. Ráadásul a dokumentumok kialakulása a megbékélés, a fizetési nyugtázás. Tehát az adatbázisból való közvetlen kapcsolat lehetősége hiányzik - mindenki, aki az 1c-es adatbázison keresztül nézte az SQL szerveren, látta, hogy az AAA1 típusú asztal tömegében az AAA2 nehéz megérteni. És az ilyen táblázatok és mezők ilyen nevével kapcsolatos kéréseket egyszerűen irreális. Ezenkívül sok 1c tábla (különösen az utolsó, a maradékok és a forradalmak legfontosabb szeletei) virtuális és szétszórt különböző fizikai táblák, amelyek több jótkát gyűjtenek. Ez a módszer nem alkalmas.

Az 1C platform lehetővé teszi, hogy a COM kapcsolaton keresztül csatlakozzon hozzá. Mint sok Windows program, az 1C telepítése során két COM objektumot rögzítenek a rendszer - Automatizálási kiszolgáló és COM csatlakozó. Mindkét objektummal együttműködhet a COM technológia által biztosított nyelv használatával.

Az automatizálási kiszolgáló objektum 1c alkalmazás, szinte nem különbözik a szokásos ügyfélalkalmazástól. A különbség az, hogy ezenkívül megjelenik az alkalmazás alkalmazási példányának programozásának képessége. A COM csatlakozói objektummal való együttműködés során az 1c alkalmazás könnyű változata indul, amelyben az űrlapok nem állnak rendelkezésre, valamint az interfészhez kapcsolódó funkciók és módszerek vizuális effektek. Az alkalmazás maga a "Külső Unió" módban kezdődik. A globális változók inicializálása (például meghatározás) jelenlegi felhasználó és a beállításokat) kell végrehajtani a modulban külső vegyület 1c. Ha a Kódon lévő külső csatlakozási módban olyan funkciónak nevezhető, amely ebben a módban nem érhető el, a kivételt okozza (amely a Python scripthez továbbítja). A nem biztonságos funkciók hívása az űrlap tervezése által keretes

# Ha nem külső kapcsolat, akkor egy figyelmeztetés ("hi!"); # Endox

Mivel a COM objektumokkal való együttműködés - a technológia kizárólag a Windows-csak, nem meglepő, hogy a Python szabványos kínálatában hiányzik. Meg kell állítani a kiterjesztés - egy sor modulok, amelyek az összes szükséges funkciót programozásának alatt Windows python. A már összegyűjtött exe telepítőként letölthető. A kiterjesztés maga hozzáférést biztosít a rendszerleíró adatbázishoz, szolgáltatáshoz, ODBC, COM objektumokhoz stb. Alternatív megoldásként azonnal telepítheti az aktivista python eloszlást, amelyben a Win32 kiterjesztés a dobozból származik.

Egy ideig kísérleteztem a webes alkalmazások fejlesztésében, különösen egy személyes fiókban. A következő mínuszok kiderültek:

A COM kapcsolat lassú. Alacsony termelékenység - híres mínusz COM technológia.
- Az 1C-vel való kapcsolat telepítésének folyamata a konfigurációtól függően 1-8 másodpercig (az én esetemben - 6 másodperc). Érdemes azt mondani, hogy az egyes kérelmekhez való kapcsolat kapcsolatának köszönhetően mindegyik oldal 8 másodpercig betöltésre kerül.
- Mivel a webes alkalmazások python munkája, mint egy független szerver, az előző tétel lehet kompenzálni tárolására a kapcsolat az egyes globális változó, és hiba esetén az adatok helyreállítására. Hogyan tartsuk fenn a PHP-hez való kapcsolatot, én őszintén, nem gondoltam még.
A webes alkalmazás keresztplatform elvész.

A fenti tételek alapján úgy döntöttek, hogy megváltoztatják az interakció elvét, elválasztva 2 részre - az első platformfüggő (ablakok), az 1c-es adatok kirakodása bármely kényelmes formátumba, és a második, nem függ a platformtól, amely képes az adatokkal együttműködni, elvileg kb. 1c.

A stratégia a következőképpen járunk el: a python script csatlakoztatva van 1C, végrehajtja a kívánt lekérdezéseket és eltávolítja az adatokat a SQLite adatbázis. Ez az adatbázis csatlakoztatható Python, PHP, Java. A legtöbb projekt dolgozik python, és mivel én nem fog ki az írás nyers SQL lekérdezések a kezét, akkor az összes munkát a SQLite adatbázis keresztül végezzük ORM sqlalchemy. Csak az adatbázis-deklaratív stílus adatszerkezetének leírására volt szükség:

Az sqlalchemy.ext.declarative import deklarable_base az SQLalchemy import oszlopból, egész számból, numerikus, datetime, unicode, logikai, nagybánk, idegenckey bázis \u003d deklaratív_base () osztályú (bázis): __tablename__ \u003d "Abonents" id \u003d oszlop (egész szám, elsődleges_key \u003d TRUE) fiók \u003d oszlop (Unicode (32), index \u003d true) kód \u003d oszlop (Unicode (32)) cím \u003d oszlop (Unicode (512)) Fio \u003d oszlop (Unicode (256)) forrás \u003d oszlop (Unicode (16)) ) PSU \u003d oszlop (Unicode (256)) TSO \u003d oszlop (Unicode (256)) NP \u003d oszlop (Unicode (256)) Street \u003d oszlop (Unicode (256)) ház \u003d oszlop (egész szám) lapos \u003d oszlop (egész szám) \u003d Oszlop (Unicode (256)) osztályfizetés: __tablename__ \u003d "Kifizetések" # és így tovább ...

Most elég ahhoz, hogy ezt a modulot bármilyen Python projektbe importálhassa, és az adatokkal dolgozhat.

Értem a kérdést - "miért sqlite"? A fő ok - Az alap csak olvasásra van szükség, így nincs probléma az írásban SQLITE-ben. Másodszor, a DBMS formátuma kényelmes - kényelmesebb megtekinteni (sok szabadon létezünk, beleértve a Firefox szuper kiterjesztését). Harmadszor, egyes esetekben szükség volt az előfizetőkre azoknak a gépeken, amelyeken nincs kapcsolat a MySQL szerverrel. Ebben az esetben elegendő az SQLite-adatbázis fájl másolása, és ez a készülék hozzáfér minden információhoz.

Az ürítés naponta egyszer történik éjjel. Az 1C-ben lévő adatház automatizálható ugyanúgy. Például rögzítenie kell az előfizetők által elhagyott bizonyságot a személyes fiók webhelyén. Ebben az esetben ismét csatlakoztassa az 1C-t és a szoftveres módszert, amelyet létrehozunk és elvégzünk a "Jelzések eltávolítása" dokumentumot. Az alábbi kódot adom.

A Python COM-objektumokkal való együttműködés egy kicsit szokatlan. Először is, a kód "pitonicitásának" elvész - az 1C-ben lévő változók és funkciók megnevezésének szabályai enyhén, nem felelnek meg Zen Pythonnak. Másodszor, mindenki tudja, hogy az 1C tárgyakat gyakran cirill szimbólumoknak nevezik, amelyek problémákat okoznak a Python fejlesztésekor, de megoldódnak. Azt javaslom, hogy megismerkedjem a kóddal:

Import Pythoncom import win32com.Client v82_conn_string \u003d "srvr \u003d v8_server, ref \u003d v8_db; USR \u003d felhasználónév, pwd \u003d megapass;" pythoncom.coinitialize () v82 \u003d win32com.client.dispatch ("v82.comconnector"). Connect (v82_conn_string)

Amint a kódból látható, az ügyfél inicializálódik az 1C-vel való munkához. A COM objektum meghatározása a "V82.Comconnector" névvel történik. Kérjük, vegye figyelembe, hogy ez a név igaz a V8.2 platformra, ha 8.1-es verziója van, akkor a név "V81.Comconnector" lesz.

Az inicializált ügyfélnél a kapcsolat () módszert úgy hívjuk, hogy átadja a csatlakozási karakterláncot. A karakterlánc a kiszolgáló nevéből, az adatbázisból, a felhasználónak és a jelszóból áll. A kapott V82 objektum megtartja a kapcsolatot az 1C alkalmazással. Nincsenek leválasztási () módszere, vagy ilyesmi. A bázis leválasztásához elég ahhoz, hogy törölje az objektumot a DEL () Memória funkcióból, vagy hozzárendeljen egy változót.

Az objektumnak az 1C globális kontextusának bármely mezőjére és módszereire utalhat, a szöveges dokumentum, az asztal és a TD típusú univerzális kötetekkel működhet. Fontos figyelembe venni, hogy ha dolgozik a COM portot 1C működik a „Külső Unió” módban. Nem érhető el az interaktív munkák bármely funkciója, például pop-up párbeszédek, értesítések, és ami a legfontosabb formák. Biztos vagyok benne, hogy megváltoztatja a konfigurációs fejlesztőket, amelyek a legfontosabb funkciókat az eljárás 1 gombjának () a dokumentumforma modulban.

Beszéljünk ilyen hiúságról, mint Kirilic attribútumok. Annak ellenére, hogy az 1c egy kétnyelvű közeg, és minden egyes orosz módszernél egy angol nyelvű analóg, előbb-utóbb, szükség lesz a Kirilic attribútumra. Ha a PHP vagy a VBScript nyelven nem okoz problémát,

Állítsa be a CON \u003d CREATEOBEJT ("V81.COMCONCTOR") SET V8 \u003d CON.CONNECT ("STRINGCLINGING") számviteli módot \u003d v8.document. Ütemezés .... Set AccountScape \u003d akkumulátor. .... Accountscape.

A Python kódja egyszerűen összeomlik egy szintaktikai hibaüzenetet. Mit kell tenni? Konfiguráció szerkesztése? Nem, elegendő a Getattr és Setattr módszerek használata. A COM-objektum átvitele és az ezekhez a funkciókhoz tartozó attribútum cirill neve, ennek megfelelően beállíthatók és értékeket állíthatunk be:

# Kódolás \u003d cp1251 katalógus \u003d getattr (v82.catalogs, "arc")

A következő fontosságú: a részletek nevét, valamint a funkciók és módszerek paramétereit a kódolási CP1251-ben kell továbbítani. Ezért, annak érdekében, hogy elkerüljék a Putnice-t a kódolások előre, érdemes kijelenteni azt a fájl elején: # kódolás \u003d CP1251. Ezt követően a vonalakat anélkül, hogy aggódnának a kódolásuk miatt. De! Az 1C-ről (a funkciók függvényének eredményei, a kérések) az UTF-8 kódolásban lesznek.

Az 1C lekérdezésben végrehajtott kód egy példája, kideríti az eredményt, és megmenti az SQLITE bázist:

# Kódolás \u003d cp1251 q \u003d "" "" "Válasszon egy fairytte-t. Kód, mint kód, arc. Express (jellemzően desiccreet-tartó. Kapcsolat útmutatóként. Úti helyettesítő szervezet). Név, mint TSO, LITSEVYESCHETA.DIRE MRO AS AS Spravochnik.LitsevyeScheta LitsevyeScheta bal csatlakozzon RegistrSvedeniy.HarakteristikiLitsevyeScheta.SrezPoslednih (, VidHarakteristiki \u003d ÉRTÉK (Spravochnik.VidyHarakteristik.TerritorialnoSetevayaOrganizatsiya)) HOGYAN HarakteristikiLitsevyeSchetaSrezPoslednih LitsevyeScheta.Ssylka HarakteristikiLitsevyeSchetaSrezPoslednih.Obekt \u003d "" „query \u003d V82.newobject ( "Query", Q) kiválasztás \u003d Query.Execute (). Válassza ki () conn \u003d db.connect () conn.query (modellek.abonent) .Delete () Selection.Next (): ABONENT \u003d modellek.Az abonent.account \u003d selection.code.strip () abonent.code \u003d selection.code abonent.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 aponcent.house \u003d selection.house Abonent.flat \u003d selection.flat.mro \u003d selection.mro conn.add (abonent) conn.commit ()

Itt Conn egy sqlite-bázisú kapcsolat. A lekérdezési kérés objektum létrehozása, szövege kitöltött. Amint azt fentebb említettük, a lekérdezési szövegnek CP1251-ben kell lennie, amelyre a kódolást először bejelentették. A kérelem végrehajtása után minden előfizetőt törölték az adatbázisban, hogy ne adjunk hozzá egy duckot, majd hozzáadva a ciklusban, és követi a végső összefüggést.

A kérésekkel való munkavégzés során a következő szabályokat fedeztem fel.

A mezők kiválasztása, hozzárendeli őket a latin nevét, sokkal kényelmesebb lesz a választó (pont) keresztül történő eléréséhez, a getatr () helyett.
- Válasszon csak az adatok primit típusait: sorok, számok, dátum és logikai. Soha ne válasszon hivatkozásokat egy objektumra (dokumentum, könyvtár)! Ebben az összefüggésben a hivatkozások teljesen nem szükségesek, és még ártalmasak az Ön számára, mivel a kapcsolat részleteit vagy módjára való hivatkozás kérésre a COM kapcsolaton keresztül érkezik. Ha kapcsolatba lép a ciklusban lévő link attribútumainak, akkor rendkívül lassú lesz.
- Ha kiválaszt egy mezőtípus mezőt, akkor az objektumot Pytime-ként adja vissza. Ez egy speciális adattípus, amely a dátumidő átadása a COM kapcsolatban. Nem annyira kényelmes dolgozni vele, mint a szokásos DateTime. Ha ezt az objektumot INT (), az időbélyegvezetéshez küldi, ahonnan ezután kaphat egy DateTime módszert a TTIMESTAMP ().

Most fontolja meg, hogyan kell kialakítani nyomtatási dokumentumok. Az a tény, hogy a fogyasztónak meg kell adnia az előre elkészített dokumentumok letöltését, például a fizetési nyugtát vagy a megbékélési törvényt. Ezek a dokumentumok 1c-ben vannak kialakítva megállapított követelményekA Python-on végrehajtott végrehajtás sokáig tart. Ezért jobb, ha az 1c-es dokumentumokat generálja, és fenntartja őket excel formátum.

Tehát a megbékélési törvényt egy különleges külső feldolgozás. Azok számára, akik nem ismerik az 1C terminológiát: A feldolgozás olyan önálló program, amelynek modulja, formája, sablonja van, amelyet az 1C-es közegben indítanak. A feldolgozás inicializálására van szükség, töltse ki a részleteit, és hívjon olyan funkciót, amely visszatér nekünk egy táblázatos dokumentumhoz, amelyet az 1c megtekintéséhez terveztek. Ezt a dokumentumot az Excel formátumba kell menteni, és másolnia kell a szerverre, vagy írjon az adatbázisba.

Link \u003d getattr (V82.Catalogs, "Reportsystems"). Findbydescription ("Act Records Elean") NAV_URL \u003d V82.GETURL (Link, "Jelentés") Név \u003d V82.ExternalReports.Connect (NAV_URL) externalreport \u003d v82.Exterreports.Create (NAME) SETATTR (külsőfejlesztés, "arc", hivatkozás) table_doc \u003d külső referencia.getdoc () path \u003d v82.gettempfilename ("xls") table_doc.write (pálya, v82 .spreadsheetdocumentfiletype.xls) jelentés \u003d modellek.report () jelentés .Account \u003d reference.code.strip () jelentése.Type \u003d u "Act" Report.document \u003d nyitott (útvonal, "rb"). Olvasás () conn.add (jelentés)

A következő töredéket követjük. A dokumentum feldolgozása egy dokumentumot alkot. A feldolgozás beépíthető a lemezen, lemezen vagy 1c adatbázisban (néhány útmutatóban). Mivel a feldolgozás gyakran megváltozik, úgy, hogy minden egyes alkalommal, amikor nem frissítheti a konfigurációt, a leggyakrabban változó feldolgozás a jelentési útmutatóban tárolódik, az "Értéktároló" típusú jelentés által megadott "értéktároló" típusának részletében. A feldolgozást inicializálhatjuk az adatbázisból a lemezre és a betöltésre, vagy a Geturl () módszerre, amelyhez a hivatkozási tételre és a kellékek nevére való hivatkozás. A feldolgozási objektum által előállított kellékek értékét hozzárendeljük, hívja a GetDoc () funkciót, egy ideiglenes Excel fájlban tárolt táblázatos dokumentumot kapunk. A fájl tartalmát SQLite-adatbázisban rögzítik.

Az utolsó dolog továbbra is figyelembe kell venni - ez egy szoftver, amely 1c-ben fokozódik. Tegyük fel, hogy tanúskodni szeretne az előfizetőktől. Ehhez elegendő egy dokumentum létrehozása és elvégzése "A jelzések eltávolítása":

# Kódolás \u003d cp1251 acts \u003d getattr (v82.documents, "aktivitása") act \u003d acts.createdocument () settattr (ACT, "Jelzés", 1024.23) setattr (törvény, "előfizető", "Ivanov") # Töltés más részletek. .. act.write ()
Most az adatszolgáltató automatizált.

Tehát, felvázoltam az eljárás, amely alapján a program ki- és berakodása adatokat a COM portot. Ez a módszer szinte évente sikeresen működik a szervezetemben. Az 1C-ből kialakított bázis 3 fizetési rendszert szolgál fel, az internetes beszerzést (kártyákkal az interneten keresztül fizetés), valamint személyes fiókot. Ezenkívül különböző szkriptek kapcsolódnak az adatbázishoz a rutin automatizálásához.

A módszer hátrányai ellenére (a com-vegyület lassú sebessége), általában stabilan működik. Adataink vannak egy platform alapú formában (SQLite), amellyel bármely nyelven dolgozhat. És a kód fő része Pythonban van írva, ezért sok eszköz és technika áll rendelkezésre, ami még nem is álmodhat 1c-ről.

Ez az egyik az egyik lehetséges módszerek Interakció az 1c-vel. Biztos vagyok benne, hogy nem új, és valószínűleg már valaki tesztelte, optimalizálta. Azonban megpróbáltam meghatározni a folyamat részleteit, hogy megvédje Önt a buktatóktól, amelyekre feltételezték.

Mindenkinek sok szerencsét kívánok, és ne feledje, hogy ez nem annyira szörnyű az 1C-nek, mint a kis!

Az 1c adatbázisok közötti adatcsere az egyik adatcsere a COM kapcsolaton keresztül.

A COM kapcsolatnál az egyik adatbázisból a másikba csatlakozhat, és adatot olvashat vagy írhat. Ezt a módszert az adatbázisok és a fájlbázisok ügyfél-kiszolgálói verzióiban használhatja. Ebben a cikkben elemezzük az ilyen típusú vegyületek példáit. A példák a 8.2 platformot használják.

Kétféle COM objektumot hozhat létre az 1c alkalmazáshoz. azt V82.Application és V82.Comconnector. Esetében V82.Application Az 1C-alkalmazás szinte teljes példánya elindul. Használat esetén V82.Comconnector Egy kis szerver rész elindul.
A munka sebessége ebben az esetben magasabb, de bizonyos funkciók nem állnak rendelkezésre. Különösen olyan formákkal és közös modulokkal dolgozik, amelyekre az ingatlant nem hozták létre külső vegyületekkel. Kell használni V82.Comconnector És csak a funkcionalitás hiánya esetén V82.Application. Különösen erősen a sebességkülönbség a nagy térfogatú bázisokon észrevehető.

Tehát folytassa

  1. Hozzon létre egy COM objektumot
    • -ért V82.Application Csatlakozás \u003d Új COM objektum ("V82.Aplication");
    • -ért V82.Comconnector Csatlakozás \u003d új COM objektum ("v82.comconnector");
  2. Többes számot alkotunk
    • a String Connection szerver változatához \u003d "SRVR \u003d" "Imasorver" "";
    • a String Connection \u003d "File \u003d" "Pullbazbaz" fájl verziójához "; Usr \u003d felhasználónév, pwd \u003d jelszó";
  3. Végezze el az adatbázishoz való kapcsolatot Csatlakozás kísérlete \u003d kapcsolat. Csatlakozás (stringvegyület); Kivételes üzenet \u003d Új felhasználói üzenet; Üzenet. Szöveg \u003d + leírás (); Üzenet. Jelenteni() ; Ünnepségek;
  4. Szakítsa meg a kapcsolatot az alapgal Vegyület \u003d meghatározatlan;

    Az objektumhoz V82.Application Meg kell teljesíteni a kapcsolatot a kapcsolathoz, különben a hiányos munkamenet leáll, amelyet manuálisan kell törölni. Esetében V82.Comconnector A kapcsolat automatikusan megszakad, ha az eljárás befejeződött, amelyben a kapcsolatot elvégezték. És van még egy kis pillanat.

    A csatlakozás alatt álló felhasználó számára a "Request Closing Program" jelölőnégyzetet a beállításaiban ki kell kapcsolni.

Most összegyűjtjük az összes kódot egy csomóban

Csatlakozás \u003d Új COM objektum ("V82.Aplication"); // Connection \u003d New Com objektum ("v82.comconnector"); Evezés index \u003d "srvr \u003d" "server1c" ", ref \u003d" "mybase", usr \u003d peta; pwd \u003d 123 "; // Ritching Indion \u003d "File \u003d" C: MyBase ""; usr \u003d peter; pwd \u003d 123 "; Csatlakozás kísérlete \u003d kapcsolat. Csatlakozás (stringvegyület); Kivételes üzenet \u003d Új felhasználói üzenet; Üzenet. Szöveg \u003d. "Nem sikerült csatlakozni az adatbázishoz" + Leírás (); Üzenet. Jelenteni() ; Ünnepségek; Vegyület \u003d meghatározatlan;

A kapcsolat típusához V82.Application A módszert a COM objektumra alkalmazzák, amelyet eredetileg létrehoztak, és a V82.Comconnector A módszer a csatlakozásra vonatkozik. Ezután dolgozzon a kéréssel szabványeszközök 1c. A kódban úgy néz ki, mint ez:

Kérés \u003d kapcsolat. NewoBject ("lekérdezés"); // a V82.Comconnector Query \u003d Csatlakozás. NewoBject ("lekérdezés"); // a V82.Application Vizsgálat. Szöveg \u003d "Válassza ki | Postniizations. Kód, | Projeculáns szervezetek.Name | Van | Könyvtár. Allorganizations as office; Eredmény \u003d kérés. Végezzen (); Kiválasztás \u003d Eredmény. Választ() ; Miközben minta. Az Endackel következő () ciklusa;

Az 1C-es verzióhoz: Enterprise 8.3 Mindent változatlan marad, kivéve, hogy a ComobeCs létrehozásakor használható "V83.comConnector" vagy "V83.Application".

Az egyik módja az 1C-es konfigurációról a másikra történő átvitele egy szoftverkapcsolat a COM-on. Számos vállalat több különböző bázist is használ, amelyek között bizonyos kapcsolatoknak és függőségnek kell lenniük. Ha nem csak az adatok átvitelére van szükség, hanem egy adott adatfeldolgozás elvégzéséhez is, akkor a COM kapcsolat a legjobb mechanizmus lesz. Az 1c egy másik adatbázisból származó adatok elemzésének képessége minden fejlesztő számára hasznos.

Csatlakoztassa a COM-on az 1C adatbázisba

A COM kapcsolat 1c-ben történő megvalósításához a ComConnector nevű speciális mechanizmust használják. Ez az objektum telepítve van a platform és a kommunikációhoz. információs alapok. Meg kell jegyezni, hogy a 8.2 és 8.3 verziók esetében különböző objektumokat használnak - "v82.connector" és "v83.comconnector".

Ne feledje, hogy a COM kapcsolat az adatbázishoz egy licenc eltöltéséhez - nem szükséges bevonni a több kapcsolat egyidejű végrehajtását. Ez különösen fontos olyan szervezeteknél, amelyeknek az engedélyek száma korlátozott. Ezt a kérdést az információs adatbázis aktív felhasználói kapcsolatok hiánya alatt álló szabályozási feladatok segítségével határozhatja meg.

Hogy képes legyen csatlakozni egy másik adatbázishoz, és kérheti a szükséges információkat, amelyeket meg kell ismernie a következő adatokat:

  1. Milyen típusú - fájl vagy ügyfél-kiszolgáló;
  2. Ahol található;
  3. Milyen név és jelszó megy hozzá;
  4. Milyen adatokat érdekel.

Az első három elemből a COM kapcsolat megvalósításához a paraméter-karakterláncot kell létrehoznia. Az IB típusától függően más lesz külső fajok. A kapott karakterlánc használatával a kapcsolat csatlakoztatva van, amely bármely módszerrel összegyűjthető analízishez és feldolgozáshoz egy másik adatbázisból.

Paraméterek konferencia filebib \u003d "File \u003d" "Path_base" "", usr \u003d "" felhasználónév "" ", pwd \u003d" "jelszó" " Paraméterek CletionsclinserverVEB \u003d "SRVR \u003d" "Server_Name" "", REF \u003d "BASE NAME" ", USR \u003d" "Felhasználónév" "", PWD \u003d "" jelszó ";

A kapcsolat funkció egyszerű, és nem okozhat kérdéseket, ha minden paraméter helyes. A hibakeresés és elemzés felgyorsítása lehetséges hibák Jobb, ha kapcsolatot köt a "kísérlet" tervezésben. A funkció visszaadása lesz a "COM objektum" típusának értéke, amellyel dolgozni kell, megkapja a szükséges adatokat.

& Nasserver Connect funkció () A paraméterek exportálása Kötés \u003d "File \u003d" "E: \\ Base 1c \\ ERP" "; usr \u003d" "adminisztrátor", pwd \u003d "" 1 ""; V83COMCON \u003d Új Co-Object ("V83.comConnector"); Próbálja visszatérni a v83comcon.connect (paraméterek teljesítménypontjai); Kivétel a tájékoztatáshoz (leírás ()); A visszatérés meghatározatlan; Ünnepségek; Ülésszak

A COM kapcsolaton keresztül nemcsak az adatokat választhatja, hanem adja hozzá azokat az adatbázishoz is, amelyhez csatlakozik. Ne feledje, hogy a COM objektumon keresztül továbbíthatjuk primitív típus adat. Más típusokat kell megadni a platformba beépített keresési funkciók használatával. Ne feledje, hogy a globális platform funkcióit a COM kapcsolaton keresztül is hívják.

Adatot kapunk az 1C-bázisból

Miután megkapta a kívánt objektumot, el kell olvasnia az adatokat egy másik alapból. Ehhez kérést alkalmazunk COM kapcsolaton keresztül 1c 8.3-ra a "COM Object" típus használatával a funkcióból. Fontos, hogy először csatlakozzon az adatbázishoz, majd hajtsa végre a kérést. A végrehajtás a NewoBject módszeren keresztül történik, amely objektumtípus paraméterként szerepel egy karakterlánc formában - "kérés".

& Nasserver tesztek mechanikai eljárás () kapcsolat \u003d Connect (); Ha a Typcouch (Connection) típus ("undefined"), akkor kérés \u003d Connection.NewObject ("lekérdezés"); Kérés. Text \u003d "Válassza ki az első 15 | címtár. Név, mint név. | Könyvtár. Felhasználók könyvtáraként"; Mintavétel \u003d kérés. Töltse ki (). Válassza a (); Míg a minta. A következő () ciklus jelentkezik (mintavétel. Endcycle; Vége lett; Extra eljárás\u003e

Például, hogy információt szerezzen egy adott egység felhasználóiról, állítsa be az állapotot a kéréshez a paramétereken keresztül. Az egyik paraméter egyszerű típusú - egy karakterlánc, és a készüléket a "Enterprise Structure" referenciakönyv hivatkozza. A lekérdezés eredménye egy táblázat a felsorolt \u200b\u200bterületeken a típus, hogy létezik az adatbázisban, amelyre a COM portot történt. Ha más típusokra kell átalakítani - használja a szabványos platform funkciókat:

  • Vonal();
  • Szám();
  • Dátum().
Kérés \u003d kapcsolat.NewObject ("lekérdezés"); Requescribe. Szöveg \u003d "Válassza ki az első 15 | címtáradenz. Név neve Név | | Könyvtár. Felhasználók, mint a kézikönyvet könyvtáraként I. könyvtárak. ; Kérés. Telepítési paraméter ("Desktoming", vegyület. Fut. Strukturalpredit. Kérés. Telepítési paraméter ("kívánt", "Catherine"); Mintavétel \u003d kérés. Töltse ki (). Válassza a (); Míg a minta. A következő () ciklus jelentkezik (mintavétel. Név); Endcycle;

Ha azt szeretnénk, hogy küldjön egy tömb az adatbázis kiválasztásához több paraméter, például egységek, a NewObject parancs is használható. Hasonlóképpen átviheti a listát vagy az értéktáblákat egy másik adatbázis elemeivel a kapcsolaton keresztül. Az összes elérhető kereshető meglévő módszerek Platform objektumok és mechanizmusok.

Kérés \u003d Csatlakozás.Newject. ("Lekérdezés"); Kérés. "" MASSPUSS \u003d CSATLAKOZÁS.NEWOBEXEXE ("tömb"); Masszív erők. Adalék (összetett. Pravnochniki. Strukturális vállalkozás. MasszULÁTSZEREK Erők. Adtly (vegyület. Fut. Strukturális vállalkozás. Belépés. Masszív anyagok. Kérés. Telepítési paraméter ("kívánt részleg", tömb); Kérés. Telepítési paraméter ("kívánt", "Catherine"); Mintavétel \u003d kérés. Töltse ki (). Válassza a (); Míg a minta. A következő () ciklus jelentkezik (mintavétel. Név); Endcycle;

A dokumentumok vagy referenciaelemek átvitele során mindig felmerül egy bizonyos objektum átvitelének ellenőrzését. A COM-kapcsolatok használatával az ilyen problémák megoldhatók egy egyedi azonosítón keresztül. Meg kell találni egy tárgyat a csatlakoztatott adatbázis az azonosítót a jelenlegi IB a „Dressline” funkció segítségével az azonosító formájában egy string. Ha ez nem található, akkor létrehozhat egy COM kapcsolat.

Strider \u003d Sor (könyvtárak. Felhasználók. Lightpocode ("00-0000313"). Egyedi önellátó ()); Ha nem denominált (kapcsolat. Futtat. Felhasználók. Pereskliklka (kapcsolat .Newobject ("egyedi önellátó", Streed))) Ezután egy új felhasználó \u003d vegyület. Futtat. Fogyorszik. Új felhasználó.name \u003d Referenciák. Felhasználók. Entipocose ("00-0000313"). Név; Új felhasználó.fizicitás \u003d Referenciák. Felhasználók. EntiPotípus ("00-0000313"). Fizikai Új felhasználó. Recruit (); Vége lett;

A COM kapcsolatnak is joga van az eljárások és funkciók használata közös modulok 1c a mellékelt külső kapcsolat funkcióval. Ezenkívül a funkciónak vagy az eljárásnak az exportnak kell lennie, és nem tartalmazza a szerveren végzett interaktív műveleteket. Az ellenkező esetben hibát fogsz látni a művelet elfogadhatatlanságáról.

Összetett..; Gépfunkció \u003d kapcsolat ..; Hívás\u003e Név kárpitozás\u003e Hívásfeldolgozások\u003e NévekTeherség\u003e

Az 1C-ben egy másik bázissal rendelkező külső kapcsolat lehetősége elegendő, és több feladatot is lehetővé tehet. Fontos, hogy helyesen értékelje az eszköztárat, és válassza ki az optimális megoldást. A legtöbb esetben ez a képesség csak a tapasztalt szakemberek tapasztalataival vagy tanulmányozásával jelenik meg.