internet Okná Android
Rozbaľovať

COM Pripojenie 1c 8.3 Príklad požiadavky. Tri veľryby práce s com objekty

) V poriadku

Zároveň som videl viac ako raz, keď som práve vystúpil z publikácií, ktoré ani nevytiahli 10 bodov.
Prečo sa to stalo? Zrejme, pretože niekto, kto zjavne spadol ako.


Hovorím o tom a povedal by som, že by to bolo pekné bez čítania článku o ratingu, aby ste pochopili, koľko to potrebujete, alebo ho potrebujete, nie je tak primitívne +/-. Pokiaľ ide o dušu, upravil by som to: ona zaznamenala toľko kvôli tomu, že hviezdy sa vyvinuli a mnohí ľudia sa zhromaždili na stránke a mnoho sa páčilo, že chápete tento prípad, pretože Akonáhle článok odchádza hlavná stránka Môže sa už nájsť len na vyžiadanie, a tak hlasovanie všetko prechádzajúce. A udržiavať na hlavnej veci, pokiaľ idem, umožniť trvalé pripomienky \u003d podpora článku.
Je to na to, že existujú obchody na prechádzajúcich uliciach - Koniec koncov, je to často dôležité, nie je to kvalita a relevantnosť tovaru, ale správnosť miesta, ľudia chôdze často kupujú, čo vyhodia ďalší deň, len v záujme procesu. Dlho je dobre známe ochorenie - prasknutie. Alebo jednoducho zvýšiť prúd zvyšuje pravdepodobnosť požadovaného kupujúceho.

A plusy a nevýhody ... je len nejaký "ďakujem" za čas strávený a pracovať


Tí. Mínus je tiež považovaný za "vďaka"? Chcel som poznať váš postoj k tomu, či je potrebné ho dať do takýchto prípadov a ako zaujímavé sú iní? Umiestni sa, keď je výrobok škodlivý / zlý alebo keď je pre vás / prázdny.
Podľa môjho názoru článok vyzerá, že jednoducho zvyšuje hodnotenie, pretože:
1. Problém s typmi s typmi s typmi sú vo všeobecnosti ignorované autorom, hoci nebol lenivý, aby napísal veľa pripomienok.
2. V článku, zrejmá nepresnosť: Hovorí sa, že môžete len

V82 \u003d Nový boj ("V82.comCanner"); Kód \u003d Protistrany.Kode;


ale pokojne robíte s pomocou tohto spracovania:

Správa (base.pravnikhniki.tragents.Noktýponiament ("LLC"). Kód);


a všetko je v poriadku! A vyberiem pripojenie V82.comConnector
Je podivné nejakým spôsobom, že autor absolútne pľuvať na skutočnosť, že jeho článok obsahuje také problémy, na ktorých uviedli, a nereaguje žiadnym spôsobom.
3. Ale stále existuje problém, keď sa chyba objaví "trieda neexistuje"
4. A je tu problém, keď je nainštalovaný 8.2, a potom nainštalovaný 8.1 - Skúste to vymieňať podľa OLE / COM Štandardná výmena využitia!
5. Mohli by ste špecifikovať hlavné spracovanie na stránke, ktoré vám umožní univerzálne pripojiť cez OLE / COM začať nováčikov, píšete pre nich! Mimochodom, mimochodom, z nejakého dôvodu, to je s tebou búchať, prečo? A v dôsledku toho sú 2 slová v podstate 6 pre scény.

Všeobecne platí, že nie je vodu bahno, ale poukazuje na konkrétne medzery, ale nulové reakcie. Ak je to skúsenosť, ktorú zdieľate, je nejaká chybná a neúplná.
Myslím tým, že autor by mal túžbu zbierať všetky závady, potom by mohol aspoň počúvať skúsenosti niekoho iného, \u200b\u200ba nie na gripe na komentáre. Tam je tiež situácia, keď ten, kto ju čítal vedieť viac ako autor, hovoria mu (niekedy nesprávne), a on tiež bojuje. V dôsledku toho všetky informácie nie sú v článku, ale v komentároch! Funny! Takže sa to často stane, ale nemusíte sa dostať preč od toho, čo ste chceli, ako lepšie - ukážem, ako najlepšie sú zobrazené iní! Zahrňte ho do článku a bude to užitočné, nie všetky rovnaké zaujímavé na čítanie tohto plavidla.

Tlač (CTRL + P)

Jednou z možností výmeny údajov medzi databázami 1C je výmena prostredníctvom Pripojenie COM. S pripojením COM sa môžete pripojiť z jednej databázy do iného a čítať alebo písať údaje. Túto metódu môžete použiť na verziách klient-servera a v základy. Tento článok sa zaoberá takýmto druhom zlúčenín na plošine 8.3

pripojenie COM

Môžete vytvoriť dva typy objektov COM na aplikáciu 1c. Toto je pripojenie OLE V83.Application a com spojenia V83.comConnector . V prípade V83.Application Začne sa takmer úplná inštancia aplikácie 1C. V prípade použitia V83.comConnector Spustí sa malá časť servera. Rýchlosť práce v tomto prípade je vyššia, ale niektoré funkcie nemusia byť k dispozícii. Pracujte najmä s formami as bežnými modulmi, pre ktoré nie je majetok stanovený s externými zlúčeninami. Musí potrebné použiť V83.comConnector A len v prípade nedostatku funkčnosti V83.Application. Zvlášť dôrazne je rozdiel v rýchlosti môže byť viditeľný na základoch veľkého objemu. Pre platformu 8.2 V82.Application alebo v82.comConnector

Nainštalujte pripojenie OLE

Pripojenie \u003d Nový boj ("V83.Application");

Nastavte pripojenie COM

Pripojenie \u003d Nový objekt COM ("V83.comConnector");

Reťazec pripojenia

// pre server klienta
Monitorovanie reťazcov \u003d "SRVR \u003d" "narušenie" "; ref \u003d" "" názov ";
// Voľba režimu súborov:
Monitorovanie reťazcov \u003d "Súbor \u003d" "pulbase" "; Usr \u003d používateľské meno; PWD \u003d heslo ";
Pokus
Pripojenie \u003d pripojenie . Pripojiť.(Monitorovanie reťazca);
Výnimka
Správa \u003d Nová používateľská správa;
Správa . Text = "Nepodarilo sa pripojiť k databáze" + Popis (); \\ T Správa . Ohlásiť();
Oslavy;

Prípojku

Zlúčenina \u003d nedefinovaná;
Pre objekt V83.Application Je potrebné splniť pripojenie k pripojeniu, inak sa neúplná relácia visí, ktorá sa potom bude musieť odstrániť manuálne. V prípade V83.comConnector Pripojenie sa automaticky roztrhne, keď je postup dokončený, v ktorom sa spojenie uskutočnilo. A je tu ďalší moment. Pre používateľa, pod ktorým sa spojenie vykoná, začiarknite políčko "Záverečný program" v jeho nastaveniach.

Newobject () metóda

Ak chcete vytvoriť nový objekt, môžete použiť metódu Newobject (), napríklad:

pre V83.comConnector

Dopyt \u003d Pripojenie. Newobject ( "Dopyt") ;
Tabuľko. \u003d Pripojenie. Newobject ( "Tablment") ;
Masscoma \u003d Pripojenie. Newobject ("Array");

Uidcom \u003d connection .Newobject

pre V83.Application

Požiadavka \u003d Zlúčenina. Newobject (" Vyšetrovanie ") ;
Tabuľka \u003d pripojenie. Newobject.("Tablment") ;
Masívne \u003d connection.newobject("Pole");
Uidcom \u003d connection.newobject("Jedinečný samozrejmosť", veslovanie);

Dopyt . Text \u003d."Vyberte si
| Postus. Kód,
| Propútorové organizácie.Name
| Je | Adresár. Platnosťorganizácie
Ako kancelária ";

Výsledok \u003d Žiadosť. Hrať ();
Vzorka \u003d Výsledok. Vybrať ();
Pričom vzorka. Nasledujúci ()Cyklus
Endcycle;
Môžete tiež použiť konfiguračný objekt manažérov:
Referencecom \u003d pripojenie. Adresárov. Namenia;
Dokumentom. \u003d Pripojenie. Dokumentácia. Okamžitá;
Registrácia \u003d pripojenie. Registrácia. Menregister;

Príjem a porovnanie prevodu prostredníctvom pripojenia COM

Ak chcete porovnať hodnoty prvkov enumerácií definovaných v konfigurácii, je potrebné transformovať tieto prvky na jeden z primitívnych typov, čo nespôsobuje ťažkosti. Takéto typy môžu byť buď číselné alebo typ reťazca. Previesť hodnotu enumeningového prvku na číselný typ môže byť

Transakcie prvkov \u003d. Pripojenie. Beží. Pravoyer1.Neextilnosť (1). Požadované1;

Možné \u003d prvok transakcie. Tvarovanie (). Hodnoty;

Elementárne postupy \u003d možné. Možné. Index (možnosť. Mety (connection.xmlstring (transakcie prvkov));

Ak je prvok operáciu \u003d 0 potom nahlásiť ( "Hodnoty1");

Inšpekciu Elementarizácia \u003d 1 Potom Správa ("Hodnoty2");

Ukončený;

Získanie objektu cez COM identifikátorom

Prostredníctvom konfiguračných cieľových manažérov dostávame objekt COM, napríklad:
Dokumentom. \u003d Zlúčenina. Dokumentácia. Okamžitá;

Potom dostaneme reťazec jedinečného identifikátora:

Rowing \u003d Connection.string ( DocumentCom.UNIKOVYntifier())

Identifikátor \u003d nový y naturalFentifier (veslovanie);
Z sYCIPOIDER \u003d [IMIDECTY] Dokumenty. Nalejte na identifikátor (identifikátor);

Ak potrebujete nájsť objekt COM podľa identifikačného dokumentu, potom musíte písať takéto:

Uidcom \u003d. Pripojenie.NewObject("Jedinečný samozrejmosť", veslovanie);
Identifikátor REFLED \u003d pripojenie. Dokumenty [IMYTROOCEAL]. Troublesda (UIDCOM);

Ahoj Habraverov!

V tomto článku chcem povedať, ako je vytvorená integrácia s platformou 1C v mojej organizácii. Vyzvala ma, aby som robil takmer úplnú neprítomnosť technická informácia o tejto téme. Čítanie rôznych článkov a správ o téme zväzkov 1c s akýmkoľvek informačným systémom opäť sa uistite, že všetci sú marketing, demonštrácia a nikdy - technické, čo odráža problém a podstatu svojho rozhodnutia.

Upozorním, že metóda v žiadnom prípade nevyžaduje univerzálnosť. Od 1c konfigurácií je veľa, a informačné systémy, Jazyky a platformy sú ešte viac, počet možných kombinácií je obrovské. Mojím cieľom je preukázať jeden z možných riešení.


Ako jazyk, ktorý bude integrovaný s 1C, som si vybral Python. Je veľmi vhodná pre automatizáciu procesov. To prispieva k minimalistickej syntaxi (kód je prijatý veľmi rýchlo), bohatá štandardná knižnica (menšia potreba modulov tretích strán), cezhraničnú platformu - s vysokou pravdepodobnosťou, kód napísaný v operačnom systéme LINIX úspešne zarobiť v systéme Windows .

Začať, obrysy, s ktorými budeme pracovať. Organizácia - dodávateľská spoločnosť v oblasti energetiky v regióne Ďalekého východu - slúži približne 400 tisíc predplatiteľov, základňa 1C na samopísanej konfigurácii. Pre každého účastníka sa uložia jeho platby, časové rozlíšenie, služby spotrebované a výpočtu, účtovné zariadenia, čítania a mnohé ďalšie údaje.

Akonáhle v organizácii stál program napísaný v Delphi a pomocou databázy MSSQL / FIREBID. V tých slávnych časoch bolo možné pripojiť sa k databáze pomocou ľubovoľného jazyka a urobiť mnoho akcií - na výber dlžníkov predplatiteľov, šíriť prijaté platby, opravte čítanie nástrojov. Nie je prekvapujúce, že zbierka skriptov, ktoré automatizujú rutinu neustále rástla. Programátori by mohli vykonávať akékoľvek akcie bez otvorenia samotného programu.

Bohužiaľ, s prechodom na 1C stoličky skončila - nebolo možné pripojiť sa k základni priamo. Všeobecne platí, že samotná 1C platforma je nedeliteľná a nedostatočne integrácia s inými systémami. Ona, ako hovoria, vec sám o sebe. Načítaním dát v 1C je potrebné pripomenúť, že ich nebude ľahko odstrániť. Vzhľadom na to, že organizácia potrebná na realizáciu platobných systémov a osobná oblasťBolo potrebné nájsť nejaké riešenie.

Hlavné úlohy, ktoré stáli predo mnou, sú schopnosť rýchlo dostávať údaje na konkrétnom osobnom účte - celé meno, adresa, účtovné zariadenia, čítanie nástrojov, platby, časové rozlíšenie. Navyše, tvorba dokumentov je aktom zmierenia, platobného potvrdenia. Takže možnosť priameho pripojenia z databázy chýba - každý, kto sa pozrel cez 1C databázu na SQL Serveri, videl, že v hmotnosti tabuľky typu AAA1, AAA2 je ťažké pochopiť. A stavať požiadavky s takýmito menami tabuliek a polí je jednoducho neskutočné. Okrem toho, mnoho tabuliek 1c (najmä najdôležitejšie, ako napríklad rezané plátky posledných, zvyškov a revolúcií), sú virtuálne a rozptýlené rôznymi fyzickými tabuľkami, zhromažďovanie viacerých jázd. Táto metóda nie je vhodná.

Platforma 1C poskytuje možnosť pripojenia k nemu prostredníctvom pripojenia COM. Rovnako ako mnohé programy Windows, počas inštalácie 1C, dva objekty Com sú zaznamenané v systéme - automatizačný server a COM konektor. Môžete pracovať s oboma objektmi pomocou jazyka, v ktorom sa poskytuje technológia COM.

Objekt Automatizačného servera je aplikácia 1C, takmer nie je odlišná od obvyklých klientskych aplikácií. Rozdiel je, že sa objaví navyše možnosť naprogramovať inštanciu aplikácie. Pri práci s objektom konektora COM sa spustí ľahká verzia 1C aplikácie, v ktorej nie sú k dispozícii formuláre, ako aj funkcie a metódy súvisiace s rozhraním a vizuálne efekty. Samotná aplikácia začína v režime "External Union". Inicializácia globálnych premenných (napríklad definícia súčasný užívateľ a jeho nastavenia musia byť vykonané v module externá zlúčenina 1c. Ak sa v režime externého pripojenia v kóde nazýva funkcia, ktorá nie je k dispozícii v tomto režime, výnimka bude spôsobená (ktorá bude prenesená na náš python skript). Volanie nebezpečných funkcií by malo byť zarámované návrhmi formulára

# Ak nie externé pripojenie, potom upozornenie ("Ahoj!"); # Endox

Vzhľadom k tomu, že pracujete s objektmi COM - technológie, len nie je prekvapujúce, že v štandardnom prívode pythonu chýba. Budete musieť nastaviť rozšírenie - súbor modulov, ktoré poskytujú všetku potrebnú funkčnosť pre programovanie pod oknami na Python. Možno ho stiahnuť ako exe-installer už zozbieraný. Samotné rozšírenie poskytuje prístup do registra, služieb, ODBC, COM objektu atď. Alternatívne môžete okamžite nainštalovať distribúciu Activestate Python, v ktorej sa z krabice pochádza rozšírenie Win32.

Už nejaký čas experimentoval s pripojením COM pri vývoji webových aplikácií, najmä na osobnom účte. Odhalili sa nasledujúce mínusy:

Pripojenie COM je pomalé. Nízka produktivita - slávna mínusová technológia.
- Proces inštalácie spojenia s 1C, v závislosti od konfigurácie, môže trvať od 1 do 8 sekúnd (v mojom prípade - 6 sekúnd). Stojí za to, že spojenie pripojenia na každú požiadavku povedie k tomu, každá stránka sa načíta na 8 sekúnd.
- Vzhľadom k tomu, webové aplikácie na Python pracujú ako nezávislý server, predchádzajúca položka môže byť kompenzovaná tak, že uloží spojenie v nejakej globálnej premennej av prípade chyby obnoviť ho. Ako zachovať pripojenie k PHP, ja, úprimne, nemyslel si ešte.
Priebežná platforma webovej aplikácie sa stratí.

Na základe uvedených položiek sa rozhodlo zmeniť princíp interakcie, oddelenie do 2 častí - prvá plošinovka závislá (Windows), vykladanie dát 1C na akýkoľvek pohodlný formát, a druhý, nezávislý od platformy, Ktorý je schopný pracovať s údajmi, nevie o 1c v zásade.

Stratégia činnosti je nasledovná: Python skript je pripojený od 1C, vykonáva požadované dotazy a vyloží údaje v základni SQLITE. Táto databáza môže byť pripojená od Python, PHP, Java. Väčšina našich projektov pracuje na Pythone, a keďže sa nedostanem z písania SAW SQL dotazov s rukami, potom všetka práca s SQLITE BASE sa vykonáva cez ORM SQLALCHEMY. Bolo potrebné len opísať dátovú štruktúru štýlu deklarácie databázy:

Od SQLALCHEMY.EXT.EXTDECLARATIATOČNÝ IMPORT DOVOZNAČNÝ DOHAJNOSTI ZO SQLALCHEMY IMPORTOVÉHO KNIČU, INTEER, NUMBERY, DATETIME, UNICODE, BOOLEANOVEJ, LOYBINÁRNEJ, PREDAJCE BASE BASE \u003d deklaratívna_base () Trieda (základňa): __tablename__ \u003d "úsečníci" ID \u003d stĺpec (celé číslo, primary_key \u003d True) Účet \u003d stĺpec (Unicode (32), index \u003d TRUE) Kód \u003d stĺpec (Unicode (32)) adresa \u003d stĺpec (Unicode (512)) FIO \u003d stĺpec (Unicode (256)) Zdroj \u003d stĺpec (Unicode (16)) ) PSU \u003d stĺpec (Unicode (256)) TSO \u003d stĺpec (Unicode (256)) NP \u003d Stĺpec (Unicode (256)) Street \u003d stĺpec (Unicode (256)) House \u003d stĺpec (Integer) Flat \u003d stĺpec (Integer) MRO \u003d Stĺpec (Unicode (256)) Platba triedy: __tablename__ \u003d "Platby" # A tak ďalej ...

Teraz stačí importovať tento modul do akéhokoľvek projektu Python a môžete pracovať s údajmi.

Predpokladajím svoju otázku - "Prečo Sqlite"? Hlavným dôvodom - základňa je potrebná len na čítanie, takže by nemali byť žiadne problémy s písaním v SQLITE. Po druhé, formát tohto DBMS je pohodlnejší - je vhodnejšie vidieť ho (existujeme veľa bezplatných pomôcok, vrátane super-rozšírenia pre Firefox). Po tretie, v niektorých prípadoch bolo potrebné pristupovať k predplatiteľom z týchto strojov, na ktorých nie je spojenie s MySQL Serverom. V tomto prípade stačí skopírovať súbor databázy SQLITE a tento stroj bude pristupovať k všetkým informáciám.

Vykladanie sa vyskytuje raz denne v noci. Dátový kryt v 1c môže byť automatizovaný rovnakým spôsobom. Napríklad, musíte si zaznamenať svedectvo, ktoré zostali predplatitelia na stránke Osobného účtu. V tomto prípade sa opäť pripojte pomocou 1C a softvérovej metódy, ktorú vytvárame a vykonáme dokument "Akt odstránenia indikácií". Dám kód tesne nižšie.

Práca s objektmi Com v Pythone je trochu nezvyčajná. Po prvé, "Pitonicity" kódu je stratený - pravidlá premenných premenných a funkcie v 1c, aby ho mierne dali, nezodpovedajú Zen Pythonu. Po druhé, každý vie, že 1C objekty sa často označujú ako cyrilické symboly, ktoré spôsobia problémy pri vývoji na Python ... ale sú vyriešené. Navrhujem, aby som sa zoznámil s kódom:

Import Pythoncom Import Win32.Com.cLient v82_conn_string \u003d "srvr \u003d v8_server; ref \u003d v8_db; usr \u003d username; pwd \u003d megapass;" pythoncom.coinitialize () v82 \u003d win32com.clint.dispatch ("V82.comConnector"). Connect (v82_conn_string)

Ako je možné vidieť z kódu, klient je inicializovaný na prácu s 1c. Definícia objektu COM dochádza podľa názvu "V82.comCanner". Upozorňujeme, že tento názov platí pre platformu V8.2, ak máte verziu 8.1, potom názov bude "v81.comConnector".

Na inicializovanom klientovi nazývame metódu pripojenia () prejdicami pripojenia reťazca. String sa skladá z názvu servera, databázy, používateľa a hesla. Výsledný objekt V82 udržuje spojenie s 1C aplikáciou. Nemá žiadnu metódu odpojenia () alebo niečo také. Ak chcete odpojiť základňu, stačí vymazať objekt z pamäťovej funkcie DEL () alebo priradiť žiadnu premennú.

S objektom môžete odkazovať na všetky oblasti a metódy globálneho kontextu 1c, pracovať s univerzálnymi objemami typu textu, tabuľky a TD. Je dôležité zvážiť, že pri práci prostredníctvom COM Com Com Com COM pôsobí v režime "External Union". Nie je k dispozícii všetky funkcie pre interaktívnu prácu, ako sú pop-up dialógy, oznámenia, a, čo je najdôležitejšie, formuláre. Som si istý, že zmeníte konfiguračné vývojári, ktoré robia najdôležitejšiu funkčnosť v tlačidle postupu 1 () v module formulára dokumentu.

Poďme hovoriť o takej márnosti ako Kirilic Atribúty. Napriek tomu, že 1C je dvojjazyčné médium a pre každú ruskú metódu existuje anglicky hovoriaci analóg, skôr alebo neskôr bude potrebné kontaktovať kirilický atribút. Ak v jazykoch PHP alebo VBScript nespôsobuje žiadne problémy,

Nastaviť con \u003d ccaTabject ("v81.comConnector") Nastaviť v8 \u003d con.connect ("Stringcling") Nastaviť účtovníctvo \u003d V8.Documents. Plán .... nastavte Accountscape \u003d Batéria. .... Accountscape. Recruit ()

Kód na Pythone jednoducho zlyhá s chybovou chybovou syntaxou. Čo robiť? Upraviť konfiguráciu? Nie, stačí použiť metódy GetTTR a SetaTtr. Odovzdávanie objektu COM a Cyrilický názov atribútu na tieto funkcie je možné získať podľa toho a nastaviť hodnoty:

# Kódovanie \u003d CP1251 Katalóg \u003d Getattr (v82.catalogs, "tváre")

Dôležité je nasledovné: Názvy detailov, ako aj parametre funkcií a metód by sa mali prenášať v kódujúcej CP1251. Preto, aby sa zabránilo Putnice s kódmi vopred, má zmysel deklarovať ho na začiatku súboru: # kódovanie \u003d CP1251. Potom môžete prenášať čiary bez toho, aby ste sa starali o ich kódovanie. Ale! Všetky reťazce získané od 1C (výsledky funkcie funkcií, požiadaviek) budú v kódovaní UTF-8.

Príklad kódu, ktorý vykonáva v dotaze 1C, vykazuje výsledok a uloží základňu v SQLITE:

# Kódovanie \u003d CP1251 Q \u003d "" "Vyberte si faiátu. Kód, ako je kód, tváre. Express (Charakteriálne desiccreet-trvanie. Vzťah ako sprievodca. Surrians substitučná organizácia). Meno ako TSO, tváre., Litsevyescheta.divizion.roditel.naimenovanie MRO AS AS Spravochnik.LitsevyeScheta LitsevyeScheta nechal vstúpiť RegistrSvedeniy.HarakteristikiLitsevyeScheta.SrezPoslednih (, VidHarakteristiki \u003d hodnota (Spravochnik.VidyHarakteristik.TerritorialnoSetevayaOrganizatsiya)) Ako HarakteristikiLitsevyeSchetaSrezPoslednih LitsevyeScheta.Ssylka HarakteristikiLitsevyeSchetaSrezPoslednih.Obekt \u003d "" "query \u003d V82.newobject ( "Dotaz", Q) Výber \u003d Query.Excute (). Vyberte () conn \u003d db.connect () conn.Query (modely.ABONENT) .Delete () počas sekcie.Next (): Abonentné \u003d modely.ABONENT () abonent.Account \u003d selekcia.code.strip () úpadok.code \u003d selekcia.code abonent.fio \u003d selekcia.fio úpadok.address \u003d selekcia.address abonent.psu \u003d výber.psu abonent.tso \u003d výber.tso úpadok.source \u003d U "ASRN" ABONENT.NP \u003d výber.np abonent.street \u003d selekcia.street úsek.house \u003d selekcia .house abonent.flat \u003d výber.FLAT.MRO \u003d selekcia.Mro conn.add (úpadok) conn.commit

Tu obsahuje reláciu pripojenia SQLITE-BASE. Vytvorí sa objekt požiadavky dotazu, jeho text je vyplnený. Ako je uvedené vyššie, text dotazu musí byť v CP1251, pre ktorý je kódovanie najprv deklarované. Po vykonaní požiadavky sa všetci predplatitelia vymažú v databáze, aby nepridali ducky, potom v cykle pridané a sleduje konečnú kuchýň.

Pri práci s požiadavkami som odhalil nasledujúce pravidlá.

Výber polí, priraďujte im názvy latinčiny, bude oveľa pohodlnejšie pre prístup k nim prostredníctvom voliča (bod) namiesto GetTR ().
- Vyberte iba typy údajov PRIMITU: Riadky, čísla, dátum a boolean. Nikdy nezvolíte odkazy na objekt (dokument, adresár)! V tejto súvislosti sú odkazy absolútne nie sú potrebné a dokonca škodlivé pre vás, pretože akýkoľvek odkaz na podrobnosti alebo metódy odkazu bude mať za následok požiadavku prostredníctvom pripojenia COM. Ak sa obrátite na atribúty odkazu v cykle, bude to veľmi pomalé.
- Ak zvolíte pole typu poľa, potom sa vráti ako požadovaný objekt. Toto je špeciálny typ údajov na prenos dátumu v pripojení COM. Nie je to tak vhodné pracovať s ním, as obvyklým datetime. Ak tento objekt odošlete na INT (), Timestamp Returns, z ktorého môžete získať metódu datateTime fromtimestamp ().

Teraz zvážte, ako vytvoriť tlač dokumentov. Faktom je, že spotrebiteľ potrebuje poskytnúť schopnosť stiahnuť vopred pripravené dokumenty, ako je akt o prijatí platby alebo zmierenie. Tieto dokumenty sú vytvorené v 1c v súlade stanovené požiadavky, Ich implementácia na python bude trvať dlho. Preto je lepšie generovať dokumenty v 1c a udržiavať ich v formát programu Excel.

Zákon o zmierení je teda generovaný špeciálnym externé spracovanie. Pre tých, ktorí nie sú oboznámení s 1C terminológiou: Spracovanie je samostatný program, ktorý má modul, formuláre, šablóny, navrhnuté tak, aby začali v médiu 1C. Je potrebné inicializovať spracovanie, vyplňte jeho podrobnosti a zavolajte na funkciu, ktorá sa vráti k nám tabuľkový dokument určený na zobrazenie 1c. Tento dokument musí byť uložený do formátu Excel a kopírovať na server alebo zapíšte do databázy.

Link \u003d getTTR (v82.catalogs, "reportsystems"). FindByDescription ("ACT Records Elean") Nav_url \u003d v82.geturl (odkaz, "Report") Názov \u003d V82.EXTERTERALREPORTS.Connect (nav_url) ExternalreePort \u003d v82.ExternalReports.create (Názov) SetaTtr (ExternalReport, "tváre", referencia) tabuľka_doc \u003d concranderence.getdoc () cesta \u003d v82.gettempfilename ("XLS") tabuľka_doc.write (cesta, v82 .spreadsheetdocumentFiletype.xls) Správa \u003d Modely.Report () Správa .Account \u003d reference.code.strip () report.type \u003d U "ACT" Report.Document \u003d Otvoriť (cesta, "RB"). Čítať () Conn.add (správa)

Nasleduje nasledujúci fragment. Spojuje spracovanie tvoriace dokument. Spracovanie môže byť zabudované do konfigurácie, uloženej na disku alebo v databáze 1C (v niektorom návode). Vzhľadom k tomu, spracovanie sa často mení, takže pri každom nie je možné aktualizovať konfiguráciu, najčastejšie meniace sa spracovanie je uložené v Príručke na podávanie správ, v podrobnostiach správy "Skladovanie hodnôt". Spracovanie môže byť inicializované vyložením z databázy na disk a načítanie, alebo podľa metódy GetUTL (), na ktorú odkaz na referenčnú položku a názov rekvizín. Prideľujeme hodnotu rekvizín získaných spracovateľským objektom, zavolajte funkciu GetDoc (), získavame tabuľkový dokument, ktorý je uložený v dočasnom súbore Excel. Obsah tohto súboru sa zaznamenáva v databáze SQLITE.

Posledná vec zostáva zvážiť - toto je softvér, ktorý zvyšuje v 1c. Predpokladajme, že chcete urobiť svedectvo od predplatiteľov. Ak to chcete urobiť, stačí vytvoriť a vykonávať dokument "Akt odstránenia indikácií":

# Kódovanie \u003d CP1251 ACTS \u003d GETATTR (V82.Documents, "AKTSNOTCHY") ACT \u003d ACTS.CREATEDOCUMENT () SetaTtr (ACT, "Indikácia", 1024,23) SetaTtr (ACT, "Subscriber", "Ivanov") # plnenie ďalších detailov. .. Act.write ()
Teraz dátový kryt automatizovaný.

Tak som načrtol metódu, ktorá je založená na vykládke softvéru a načítania údajov pomocou pripojenia COM. Táto metóda úspešne funguje v mojej organizácii takmer rok. Základňa vytvorená z 1C slúži 3 platobné systémy, nadobúdanie internetu (platba podľa kariet cez internet), ako aj osobný účet. Okrem toho sú k databáze pripojené rôzne skripty na automatizáciu rutiny.

Napriek nevýhodám spôsobu (pomalá rýchlosť COM-zlúčeniny) vo všeobecnosti funguje stabilné. Máme údaje do formulára založeného na platforme (SQLITE), s ktorým môžete pracovať z akéhokoľvek jazyka. A hlavná časť kódu je napísaná v Pythone, a preto sú k dispozícii mnoho prostriedkov a techník, čo nemôže ani snívať o 1C.

Toto je jedno možné metódy Interakcia s 1c. Som si istý, že nie je nový a pravdepodobne už niekto testoval, optimalizovaný. Snažil som sa však stanoviť maximum podrobností o procese, aby vás chránili pred úskaliami, na ktoré sa predpokladalo.

Želám všetkým veľa šťastia a pamätajte, že to nie je tak hrozné pre 1c, ako jeho málo!

Jedna z možností výmeny údajov medzi databázami 1C je výmena prostredníctvom pripojenia COM.

S pripojením COM sa môžete pripojiť z jednej databázy do iného a čítať alebo písať údaje. Túto metódu môžete použiť na verziách klient-server databáz a súborových základov. V tomto článku budeme analyzovať príklady tohto druhu zlúčenín. Príklady používajú plošinu 8.2.

Môžete vytvoriť dva typy objektov COM na aplikáciu 1c. na to V82.Application a V82.comConnector. V prípade V82.Application Začne sa takmer úplná inštancia aplikácie 1C. V prípade použitia V82.comConnector Spustí sa malá časť servera.
Rýchlosť práce v tomto prípade je vyššia, ale niektoré funkcie nemusia byť k dispozícii. Pracujte najmä s formami as bežnými modulmi, pre ktoré nie je majetok stanovený s externými zlúčeninami. Musí potrebné použiť V82.comConnector A len v prípade nedostatku funkčnosti V82.Application. Zvlášť dôrazne je rozdiel v rýchlosti môže byť viditeľný na základoch veľkého objemu.

Pokračujte

  1. Vytvorte objekt COM
    • pre V82.Application Pripojenie \u003d Nový objekt COM ("V82.Application");
    • pre V82.comConnector Pripojenie \u003d Nový objekt COM ("V82ComConnector");
  2. Tvoríme množné číslo
    • pre variant servera pripojenia reťazca \u003d "SRVR \u003d" "IMASORVER" "; ref \u003d" "" názov ";
    • pre verziu súboru spojenie single \u003d "File \u003d" "pulbazbaz" "; Usr \u003d username; pwd \u003d heslo";
  3. Vykonajte pripojenie k databáze Pokus o pripojenie \u003d pripojenie. Pripojte (reťazca zlúčenina); Výnimka Správa \u003d Nová používateľská správa; Správu. Text \u003d + popis (); Správu. Ohlásiť() ; Oslavy;
  4. Prerušte spojenie so základňou Zlúčenina \u003d nedefinovaná;

    Pre objekt V82.Application Je potrebné splniť pripojenie k pripojeniu, inak sa neúplná relácia visí, ktorá sa potom bude musieť odstrániť manuálne. V prípade V82.comConnector Pripojenie sa automaticky roztrhne, keď je postup dokončený, v ktorom sa spojenie uskutočnilo. A je tu ďalší moment.

    Pre používateľa, pod ktorým sa spojenie vykoná, začiarknite políčko "Záverečný program" v jeho nastaveniach.

Teraz budeme zhromažďovať všetok kód v partii

Pripojenie \u003d Nový objekt COM ("V82.Application"); // Pripojenie \u003d Nový objekt COM ("V82COMKCONTICKÝTOR"); Index vesling \u003d "SRVR \u003d" "Server1c" "; Ref \u003d" "MyBase" "; USR \u003d PETYA; PWD \u003d 123"; // RITCHING IDNION \u003d "FILE \u003d" "C: MYBASE" "; USR \u003d Peter; PWD \u003d 123"; Pokus o pripojenie \u003d pripojenie. Pripojte (reťazca zlúčenina); Výnimka Správa \u003d Nová používateľská správa; Správu. Text \u003d. "Nepodarilo sa pripojiť k databáze" + Popis (); Správu. Ohlásiť() ; Oslavy; Zlúčenina \u003d nedefinovaná;

Pre typ pripojenia V82.Application Metóda sa aplikuje na objekt COM, ktorý bol pôvodne vytvorený a pre V82.comConnector Metóda sa vzťahuje na pripojenie. Ďalej pracuje s požiadavkou Štandardné prostriedky 1c. V Kódexe to vyzerá takto:

Žiadosť \u003d pripojenie. Newobject ("dotaz"); // pre V82.comConnector Dotaz \u003d pripojenie. Newobject ("dotaz"); // pre V82.Application Vyšetrovanie. Text \u003d "Vybrať | Postus. Kód, | Propútorové organizácie.Name | Je | Adresár. Allorganizácie ako kancelária "; \\ T Výsledok \u003d požiadavka. Hrať (); Výber \u003d výsledok. Vybrať (); Pričom vzorka. Nasledujúci () cyklus enackel;

Pre verziu 1c: Enterprise 8.3 Všetko zostáva nezmenené, okrem toho, že pri vytváraní comobecs by sa mal použiť "V83.comConnector" alebo "V83.Application".

Jedným zo spôsobov prenosu údajov z jednej konfigurácie 1C do iného je softvérové \u200b\u200bpripojenie pomocou COM. Mnohé spoločnosti využívajú niekoľko rôznych základov, medzi ktorými musia byť niektoré vzťahy a závislosti. Ak je to potrebné nielen previesť dáta, ale aj na vykonanie špecifického spracovania údajov, potom bude COM pripojenie najlepším mechanizmom. Schopnosť analyzovať dáta z inej databázy 1c je užitočná pre každého developer.

Pripojte sa cez COM do databázy 1c

Ak chcete implementovať pripojenie COM v 1C, použije sa špeciálny mechanizmus nazývaný comconnector. Tento objekt je nainštalovaný spolu s platformou a používa sa na komunikáciu. informačné základy. Treba poznamenať, že pre verzie 8.2 a 8.3 sa používajú rôzne objekty - "v82.connector" a "V83.comConnector".

Pamätajte, že na pripojenie COM k databáze stráviť licenciu - nie je potrebné zapojiť sa do súčasnej realizácie viacerých pripojení. To je dôležité najmä pre organizácie, ktorých počet licencií je obmedzený. O tejto otázke je možné rozhodnúť pomocou regulačných úloh spustených počas nedostatku aktívnych používateľských pripojení k informáciálnej databáze.

Aby ste sa mohli pripojiť k inej databáze a požiadajte o potrebné informácie, ktoré potrebujete poznať nasledujúce údaje:

  1. Aký druh typu je - súbor alebo klient-server;
  2. Kde sa nachádza;
  3. Za akú meno a heslo môže ísť na to;
  4. Aké údaje máte záujem.

Z prvých troch položiek na implementáciu pripojenia COM musíte vytvoriť reťazec parametrov. V závislosti od typu IB sa bude líšiť externé druhy. Pomocou výsledného reťazca je pripojené pripojenie, ktoré je možné zhromažďovať na analýzu a spracovanie údajov z inej databázy akýmkoľvek spôsobom.

Parametre Konferencia FileBeib \u003d "File \u003d" "PATH_BASE" ""; USR \u003d "" Username "" "; PWD \u003d" "" heslo ""; Parametre ZáveryCrinserVerveb \u003d "SRVR \u003d" "Server_name" ""; ref \u003d "" základný názov ""; USR \u003d "" Užívateľské meno ""; PWD \u003d "" heslo "";

Funkcia pripojenia je jednoduchá a nemala by spôsobiť otázky, ak sú všetky parametre správne. Urýchliť ladenie a analýzu možné chyby Je lepšie uzavrieť spojenie v konštrukcii "Pokus". Vrátiť funkciu bude hodnota typu "COM object", s ktorou musíte pracovať, získajte potrebné údaje.

& NESServer Connect Funkcia () Export Parametre ZáveryIn \u003d "File \u003d" "E: Základ 1c ERP" "; usr \u003d" "administrátor" "; pwd \u003d" "1" "; V83Comcon \u003d Nový Co-objekt ("V83.comCanner"); Pokúsiť sa vrátiť V83Comcon.Connect (parametre Power Body); Výnimka z informácií (popis ()); Návrat je nedefinovaný; Oslavy; Koncová funkcia

Prostredníctvom pripojenia COM nie je možné vybrať len údaje, ale tiež ich pridať do databázy, na ktorú sa pripojíte. Pamätajte, že môžeme prenášať prostredníctvom objektu COM 4 primitívny typ údaje. Ďalšie typy budú musieť byť špecifikované pomocou vyhľadávacích funkcií zabudovaných do platformy. Všimnite si, že globálne funkcie platformy sa tiež nazývajú prostredníctvom pripojenia COM.

Dostávame údaje z 1C základne

Potom, čo ste dostali požadovaný objekt, musíte si prečítať údaje z inej základne. Aby sme to urobili, aplikujeme žiadosť cez COM pripojenie na 1c 8.3 pomocou výsledného typu "COM object" z funkcie. Je dôležité najprv pripojiť k databáze a potom vykonať požiadavku. Vykonávanie sa vyskytuje prostredníctvom metódy Newobject s indikáciou ako parameter typu objektu v reťazci - "Žiadosť".

& NESServer Tests Mechanický postup () Pripojenie \u003d Connect (); Ak TypCouch (pripojenie) typu ("Undefined") potom požiadajte o pomoc \u003d connection.newobject ("dotaz"); Žiadosť. Text \u003d "Vyberte prvú 15 adresáraprodukciu. Názov ako názov | z adresára. Užívateľov ako adresár"; Odber vzoriek \u003d Žiadosť. Vyplňte (). Vyberte (); Kým vzorka. Nasledujúci () cyklus je hlásený (odber vzoriek. Endcycle; Ukončený; Extra zákrok\u003e

Ak chcete napríklad získať informácie o používateľoch konkrétnej jednotky, nastavte stav na požiadavku prostredníctvom parametrov. Jeden parameter bude jednoduchý typ - reťazec a jednotka odkazuje na referenčnú knihu "Podniková štruktúra". Výsledkom dotazu je tabuľka s uvedenými poliami typu, ktorý existujú v databáze, ku ktorým došlo k pripojeniu COM. Ak ich potrebujete previesť na iné typy - použite štandardné funkcie platformy:

  • Riadok ();
  • Číslo ();
  • Dátum().
Požiadavka \u003d connection.newobject ("dotaz"); Requescribe. Text \u003d "Vyberte prvú 15 adresár adresára. Meno ako meno | z adresára. Užívatelia ako adresár príručky I Kde adresára administratíva \u003d & dodáva | a referenčná zástrčka. Pomenovanie"% "" + ""% " ; \\ T Žiadosť. Parameter inštalácie ("Desktoming", Zlúčenina. Sprievodca. Štruktúra. Žiadosť. Parameter inštalácie ("Požadovaný", "Catherine"); Odber vzoriek \u003d Žiadosť. Vyplňte (). Vyberte (); Zatiaľ čo vzorka. Nasledujúci () cyklus je hlásený (odber vzoriek. Názov); Endcycle;

Ak chcete odoslať pole do databázy, aby ste vybrali niekoľko parametrov, napríklad jednotiek, používa sa aj príkaz NEWOPOBJEK. Podobne môžete preniesť zoznam alebo tabuľku hodnôt vyplnením prvkov inej databázy prostredníctvom pripojenia. Ak chcete hľadať všetky dostupné existujúce metódy Platforma objekty a mechanizmy.

Žiadosť \u003d Connection.NewObject. ("Dotaz"); Žiadosť. ""; Massputs \u003d Connection.NewObject ("Array"); Masputové sily. Prípadne (zlúčenina. PravNochniki. Konštrukčný podnik. EntripTotyp ("00-000023"); Masputové sily. Príslušné (zlúčeniny. Beží. Štrukturálny podnik. Entrypocus ("00-000038")); Masputové sily. Príslušná (zlúčenina. Rámy. Konštrukčný podnik. Entripotyp ("00-000046")); Žiadosť. Parameter inštalácie ("Požadovaný pre rozdelenie", Array); Žiadosť. Parameter inštalácie ("Požadovaný", "Catherine"); Odber vzoriek \u003d Žiadosť. Vyplňte (). Vyberte (); Zatiaľ čo vzorka. Nasledujúci () cyklus je hlásený (odber vzoriek. Názov); Endcycle;

Pri prenose dokumentov alebo referenčných prvkov sa vždy vznikne otázka kontroly prenosu určitého objektu. Pomocou pripojenia COM sa takéto problémy môžu vyriešiť jedinečným identifikátorom. Musíte nájsť objekt v pripojenej databáze na identifikátore z aktuálneho IB pomocou funkcie "Radline" pomocou identifikátora vo forme reťazca. Ak sa to nenašlo, môžete ho vytvoriť s pripojením COM.

Strider \u003d riadok (adresáre. Užívatelia. Lightpocode ("00-0000313"). Unikátny samohrevník ()); Ak nie je denominovaný (pripojenie. Používatelia. PereskLiklka (pripojenie .Newobject ("jedinečný samozrejmosť", štúdia))), potom nový user \u003d zlúčenina. Beží. Užívatelia. Vytvoriť prvok (); Nového user.name \u003d referencie. Používatelia. Entipocose ("00-0000313"). Názov; Nový user.Physity \u003d Referencie. Používatelia. ENTIPOTYPE ("00-0000313"). Fyzické Nového používateľa. Nábor (); Ukončený;

Pripojenie COM má právo používať postupy a funkcie bežné moduly 1c s priloženou funkciou externého pripojenia. Okrem toho, podmienka nazývaná funkcia alebo postup musí byť export a nezahŕňate interaktívne opatrenia vykonávané na serveri. V opačnom prípade uvidíte chybu o neprípustnosti operácie.

Zlúčeniny ..; Motofunkcia \u003d pripojenie ..; Volanie\u003e Názov Čalúnenie\u003e CallProcessories\u003e NázvyOstatné\u003e

Možnosti externého spojenia s inou základňou v 1c sú dostatočne rozsiahle a môžu umožniť množstvo úloh. Je dôležité, aby ste mohli správne vyhodnotiť súbor nástrojov a vybrať si optimálne riešenie. Vo väčšine prípadov sa táto schopnosť zobrazí len skúsenosť alebo štúdium príkladov skúsených špecialistov.