internet pencereler Android
Genişletmek

Com Bağlantısı 1C 8.3 Örnek Talep. COM nesneleriyle üç balina

) Tamam

Aynı zamanda, 10 puan bile çekmeyen yayınlardan yeni çıktığımda bir kereden fazla gördüm.
Neden oldu? Görünüşe göre biri açıkça düştüler.


Bundan bahsediyorum ve ne kadar ihtiyacın olduğunu anlamak için değerlendirmeyi okuyup okumadan iyi olacağını söyleyebilirim ya da bu kadar ilkel değil +/-. Ruhun gelince, bunu ayarlardım: Yıldızların geliştirdiği ve birçok insanın sitede toplandığı ve birçok insanın birçoğunu çok beğenmesi nedeniyle çok fazla puan aldı, çünkü bu davayı anlıyorsunuz çünkü Makale ile ayrılmaz ana Sayfa Zaten sadece istek üzerine bulunabilir ve bu yüzden her şeyi geçerken oy kullanma. Ve anlayabildiğim kadarıyla, kalıcı yorumlara izin ver, makalenin tanıtımına izin ver.
Bunun için geçen caddelerde dükkanlar var - sonuçta, malların kalitesi ve alaka düzeyi değil, ancak yerinin paslanabileceği önemlidir, ancak yürürken insanlar sık \u200b\u200bsık, ertesi gün atacaklarını satın alırlar. sürecin uğruna. Uzun zamandır tanınmış bir hastalık oldu - bir patlama. Ya da sadece akışın artırılması istenen alıcının olasılığını arttırır.

Ve artılar ve eksileri ... harcanan ve iş için sadece bir tür "teşekkür ederim"


Şunlar. "Teşekkürler" için eksi de kabul edilir? Bu gibi durumlarda koymanın gerekli olup olmadığı ve başkaları ne kadar ilginç olup olmadığı tavrınızı bilmek istedim? Makale zararlı / kötü olduğunda veya sadece sizin için tamamen / boş olduğunda yerleştirilir mi?
Bence, makale basitçe rating yükseltmek gibi görünüyor, çünkü:
1. Türlerle ilgili türlerle ilgili sorun, genellikle bir demet yorum yazmak için tembel olmasa da, yazar tarafından genellikle göz ardı edilir.
2. Makalede, açık yanlışlık: Sadece yapabileceğiniz söylenir.

V82 \u003d Yeni Savaş ("V82.comconnector"); Kod \u003d karşıparty.code;


ama bunun gibi işleme yardımıyla sakince yapıyorum:

Rapor (Base.Pravnikhniki.Tragents.nightyponiating ("LLC"). Kod);


ve her şey yolunda! Ve ben v82.comconnector bağlantısını seçiyorum
Yazarın, makalesinin belirttikleri bu tür sorunlar içerdiği ve hiçbir şekilde reaksiyona girmediği gerçeğini kesinlikle tükürmek garipdir.
3. Ancak bir hata oluştuğunda hala bir sorun var "Sınıf yok"
4. ve 8.2 yüklü olduğunda bir sorun var ve ardından 8.1 yüklü - OLE / COM standart kullanım değişimine göre değiş tokuş etmeye çalışın!
5. Yeni gelenlere başlamak için OLE / COM üzerinden evrensel olarak bağlanmanıza izin veren sitedeki ana işlemeyi belirler misiniz, onlar için yazarsınız! Bu arada, bu arada, nedense, seninle çarpıyor, neden? Sonuç olarak, sahneler için 2 kelime esasen 6'dır.

Genel olarak, çamuru sulamıyorum, ancak belirli boşluklara gelin, ancak sıfır reaksiyonlar. Bu paylaştığınız deneyim ise, bir tür hatalı ve eksik.
Yazarın tüm aksaklıkları toplamaya arzusu olacağı gerçeğiyle, daha sonra en azından başkasının deneyimini dinleyebilir ve yorumlarınızı yakalamayacak. Ayrıca, onu yazardan daha fazlasını bilen bir durum da var, ona (bazen yanlış) söylüyorlar (bazen yanlış) ve aynı zamanda savaşıyor. Sonuç olarak, tüm bilgiler makalede değil, yorumlarda! Komik! Bu yüzden sıklıkla olur, ancak ne kadar iyi istediğinizi uzaklaşmanız gerekmez - ne kadar iyi ve diğerlerinin gösterildiğini gösteriyorum! Buna makaleye dahil edin ve bu gemiyi okumak için tüm ilginç değil, aynı olacaktır.

Baskı (CTRL + P)

1C veritabanları arasında veri alışverişi için seçeneklerden biri, bir değişimdir. Com bağlantısı. COM bağlantısı ile bir veritabanından diğerine bağlanabilir ve veri okuyabilir veya yazabilirsiniz. Bu yöntemi hem üslerin istemci-sunucu sürümlerinde hem de içinde kullanabilirsiniz. dosya tabanları. Bu makale, Platform 8.3'teki bu tür bileşikleri tartışmaktadır.

com bağlantısı

Uygulama 1c için iki tür COM nesnesi oluşturabilirsiniz. Bu OLE bağlantıları V83.Application ve com bağlantıları V83.comconnector . Durumunda V83.Application 1C uygulamasının neredeyse tam örneği başlatılır. Kullanım durumunda V83.comconnector Küçük bir sunucu parçası başlatıldı. Bu durumda iş hızı daha yüksektir, ancak bazı fonksiyonlar mevcut olmayabilir. Özellikle, formlarla ve özelliğin dış bileşiklerle oluşturulmadığı ortak modüllerle birlikte çalışın. KULLANMALIDIR V83.comconnector Ve sadece işlevsellik sıkıntısı durumunda V83.Application. Özellikle şiddetli bir şekilde hızdaki fark, büyük hacmin temellerinde fark edilebilir. Platform 8.2 için kullanılır V82.Application veya v82.comconnector

OLE bağlantısını kurun

Bağlantı \u003d yeni komisyon ("V83.Application");

COM bağlantısını ayarla

Bağlantı \u003d yeni COM nesnesi ("V83.comconnector");

Bağlantı dizisi

// isteğe bağlı istemci sunucusu için
Dize İzleme \u003d "SRVR \u003d" "SEPARATE" "; ref \u003d" "" Adı ";
// Dosya Modu için seçeneği:
Dize İzleme \u003d "File \u003d" "PullBase" "; USR \u003d kullanıcı adı; PWD \u003d Şifre ";
Girişim
Bağlantı \u003d bağlantı . Bağlan.(Dize İzleme);
Bir istisna
Mesaj \u003d Yeni kullanıcı mesajı;
İleti . Metin = "Veritabanına bağlanılamadı" + Açıklama (); İleti . Rapor etmek();
Kutlamalar;

Kırılma bağlantısı

Bileşik \u003d tanımsız;
Nesne için V83.Application Bağlantıya bağlantıyı yerine getirmek gerekir, aksi takdirde eksik oturum asılır, bu da manuel olarak silinmesi gerekecektir. Durumunda V83.comconnector Bağlantı, bağlantı yapıldığı işlem tamamlandığında bağlantı otomatik olarak yırtılmıştır. Ve başka bir süre daha var. Bağlantının yapıldığı kullanıcı için, "İstek Kapatma Programı" onay kutusu ayarlarında kapatılmalıdır.

NewObject () yöntemi

Yeni bir nesne oluşturmak için, örneğin YeniObject () yöntemini kullanabilirsiniz:

için V83.comconnector

Zorlamak \u003d Bağlantı. Newobject ( "Soruşturma ") ;
Tablokom. \u003d Bağlantı. Newobject ( "Yemekleme") ;
MasscoMa \u003d bağlantı. Newobject ("dizi");

UIDCOM \u003d bağlantı .Newobject

için V83.Application

İstek \u003d Bileşik. Newobject (" Soruşturma ") ;
Tablo \u003d Bağlantı. Newobject.("Yemekleme") ;
Massive \u003d connection.newobject("Dizi");
UIDCOM \u003d Connection.Newobject("Benzersiz selfsifier", kürek);

Zorlamak . Metin \u003d."SEÇ
| Postganizasyonlar. Kod,
| Propulatör organizasyonları.
| | Dizin. Geçerlikler
Ofis olarak ";

Sonuç \u003d İstek. Performans ();
Örneklem \u003d Sonuç. Seç () ;
Örnek iken. Takip etme()Döngü
Endcycle;
Yapılandırma nesnesi yöneticilerini de kullanabilirsiniz:
Referanscom \u003d bağlantı. Dizinler. İsimlik;
DocumentCom. \u003d Bağlantı. Belgeler. Hemen;
Kayıt Ol \u003d Bağlantı. Kayıt defteri. Nameregister;

COM bağlantısı üzerinden transfer alınması ve karşılaştırılması

Konfigürasyonda tanımlanan numaralandırmaların elemanlarının değerlerini karşılaştırmak için, bu elemanları zorluklara neden olmayan ilkel türlerden birine dönüştürmek gerekir. Bu tür türler, sayısal veya bir dize tipi olabilir. Numaralandırma elemanının değerini sayısal türde dönüştürebilir

Öğe işlemleri \u003d. Bağlantı. Koşular. Pravoyer1.Nextile (1). Gerekli1;

Mümkün \u003d eleman işlemleri. Kalıplama (). Değerler;

Elemental Prosedürler \u003d Mümkün. Mümkün. Dizin (olasılık. İNTAKLAR (bağlantı .xmlstring)

Eğer eleman işlem ise \u003d 0 sonra rapor edin ( "Değerler1");

Elementarizasyonu kontrol edildi \u003d 1 Sonra Rapor ("Değerler2");

Bitti;

COM üzerinden bir nesneyi tanımlayıcı ile almak

Yapılandırma nesnesi yöneticileri aracılığıyla, örneğin bir COM nesnesi alırız:
DocumentCom. \u003d Bileşik. Belgeler. Hemen;

Sonra benzersiz bir tanımlayıcı dizgisi alırız:

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

Tanımlayıcı \u003d yeni y naturalFentifier (Kürek);
Dan syclipoider \u003d [taklit] belgeler. Tanımlayıcıya (tanımlayıcıya) dökün;

Tanımlayıcı belgesine göre bir COM nesnesi bulmanız gerekiyorsa, böyle yazmanız gerekir:

UIDCOM \u003d. Connection.newobject("Benzersiz selfsifier", kürek);
REFLD tanımlayıcısı \u003d bağlantı. Belgeler [imytrocement]. Sorun Giderme (UIDCOM);

Merhaba habravelov!

Bu makalede, organizasyonumdaki 1C platformla ne kadar entegrasyonun oluşturulduğunu anlatmak istiyorum. Neredeyse tamamen devamsızlık yapmamı istedi teknik Bilgiler Bu tema hakkında. Herhangi bir bilgi sistemine sahip demetler 1c konusu hakkında çeşitli makaleler ve raporlar okumak, bir kez daha hepsinin pazarlama, gösteri ve asla - teknik, sorunu yansıtan ve kararının özünü yansıttıklarından emin olun.

Hiçbir durumda evrensellik iddiasında yöntemi uyarıyorum. 1C konfigürasyonlarından beri çok şey var ve bilgi sistemi, Diller ve platformlar daha da fazladır, olası kombinasyonların sayısı çok büyük. Amacım olası çözümlerden birini göstermek.


1C ile entegre edilecek bir dil olarak, pitonu seçtim. Süreçlerin otomasyonu için çok uygundur. Bu, minimalist sözdizimine (kod, çok hızlı bir şekilde işe alınır), zengin bir standart kütüphane (üçüncü taraf modüllerine daha az ihtiyaç duyulur), çapraz platform - yüksek olasılıkla, Linix işletim sisteminde yazılan kod, Windows'ta başarılı bir şekilde kazanacaktır. .

Başlamak için, birlikte çalışacağımız ana hatlar. Organizasyon - Uzak Doğu Bölgesi'ndeki Enerji Kaynağı Şirketi - yaklaşık 400 bin aboneye, baz 1c kendi kendine yazılmış bir konfigürasyonda hizmet vermektedir. Her abone için, ödemeleri, tahakkukları, tüketilen hizmetler ve hesaplama planları, muhasebe cihazları, okumalar ve diğer birçok veri depolanır.

Kuruluşta bir kez Delphi'de yazılmış ve MSSQL / Firebird olarak veritabanı olarak yazılmış bir program durdu. Bu görkemli zamanlarda, herhangi bir dili kullanarak veritabanına bağlanması ve birçok işlemi yapması mümkündü - borçlu aboneleri seçmek için, alınan ödemeyi yaymak, aletlerin okumalarını düzelt. Rutini otomatikleştiren komut dosyaları koleksiyonunun sürekli büyüdüğü şaşırtıcı değildir. Programcılar programın kendisini açmadan herhangi bir eylemi gerçekleştirebilir.

Ne yazık ki, 1C sandalyelere geçişle sona erdi - tabanın doğrudan bağlanması mümkün değildi. Genel olarak, 1C platformun kendisi, diğer sistemlerle bölünmez ve zayıf bir şekilde entegredir. Söyledikleri gibi, kendi başına. 1C'ye veri yükleyerek, bunları kaldırmak o kadar kolay olmayacağı unutulmamalıdır. Ancak kuruluşun ödeme sistemlerini uygulamak için gerekli olduğu ve kişisel alanBir çözüm bulmak için gerekliydi.

Benden önümde duran temel görevler, belirli bir kişisel hesapla ilgili veri alabilme yeteneğidir - tam ad, adres, muhasebe cihazları, cihaz okumaları, ödemeler, tahakkuklar. Ayrıca, belgelerin oluşumu bir uzlaşma eylemi, ödeme makbuzudur. Bu nedenle, veritabanından doğrudan bağlantı olasılığı eksik - SQL Server'daki 1C veritabanına bakan herkes, AAA1 tipinin tablosunda, AAA2'nin anlaşılması zor olduğunu gördü. Ve bu tür tabloların ve alanların isimleri ile talepleri inşa etmek sadece gerçek değildir. Ek olarak, pek çok tablo 1C (özellikle, sonuncusu, kalıntıların ve devrimlerin kesilmiş dilimleri gibi, özellikle en önemli olan en önemli) sanal ve farklı fiziksel tablolarla dağılmıştır ve çoklu birleşme toplanır. Bu yöntem uygun değildir.

1C platform, COM bağlantısı üzerinden bağlanma yeteneği sağlar. Birçok Windows programı gibi, 1C kurulumu sırasında, sistem - otomasyon sunucusu ve COM konnektöründe iki COM nesnesi kaydedilir. COM teknolojisinin sağlandığı dili kullanarak her iki nesneyle birlikte çalışabilirsiniz.

Otomasyon sunucusu nesnesi, Normal istemci uygulamasından neredeyse farklı olmayan bir uygulama 1C'dir. Aradaki fark, uygulamanın uygulama örneğini programlama yeteneğinin görünmesidir. COM konnektör nesnesiyle çalışırken, formların mevcut olmadığı ve arayüz ile ilgili işlevler ve yöntemlerin yanı sıra, 1C uygulamasının hafif bir sürümü başlatılır ve görsel efektler. Uygulamanın kendisi "Dış Union" modunda başlar. Küresel değişkenlerin başlatılması (örneğin, tanım Şu anki kullanıcı ve ayarları) modülde yapılmalıdır. dış bileşik 1c. Koddaki harici bağlantı modunda, bu modda kullanılamayan bir işlev olarak adlandırılırsa, istisna neden olur (bu Python komut dosyasına aktarılır). Güvensiz işlevlerin çağrılması, formun tasarımları tarafından çerçevelenmelidir.

# Harici bağlantı değilse, bir uyarı ("Merhaba!"); # Endox

COM nesneleriyle çalıştığından - Teknoloji sadece Windows-SAILT, standart Python tedarikinde eksik olması şaşırtıcı değildir. Uzantıyı ayarlamanız gerekecektir - Python'da Windows altında programlama için gerekli tüm işlevleri sağlayan bir dizi modül. Daha önce toplanan bir exe yükleyici olarak indirilebilir. Uzatma, kayıt defterine, servislere, ODBC, COM nesnelerine vb. Erişim sağlar. Alternatif olarak, Win32 uzantısının kutudan geldiği Activestate Python dağılımını hemen yükleyebilirsiniz.

Bir süredir, özellikle, özellikle kişisel bir hesap geliştirmede bir COM bağlantısı ile denemedim. Aşağıdaki eksiller ortaya çıktı:

COM bağlantısı yavaş. Düşük verimlilik - ünlü eksi com teknolojisi.
- Konfigürasyona bağlı olarak, 1C ile bir bağlantı kurma işlemi, 1 ila 8 saniye arasındadır (benim durumumda - 6 saniye). Bağlantının her bir isteğin bağlantısının, her sayfanın 8 saniye boyunca yükleneceğini söylemeye değer mi?
- Python'daki web uygulamaları bağımsız bir sunucu olarak çalıştığından, önceki öğe, bağlantıyı bazı genel değişkenlerde depolayarak ve geri yüklemek için hata durumunda telafi edilebilir. PHP ile bağlantı nasıl tutulur, dürüstçe, henüz düşünmedim.
Web uygulaması çapraz platform kayboldu.

Yukarıdaki maddelere dayanarak, etkileşim ilkesini değiştirmeye, onu 2 parçaya ayrılmaya, ilk platforma bağlı (Windows), verileri 1C'yi herhangi bir uygun formata ve ikinci, platforma bağımlı olarak değiştirmeye karar verildi. Verilerle birlikte çalışabilecek olan, prensip olarak 1C'nin farkında değil.

Eylem stratejisi aşağıdaki gibidir: Python komut dosyası 1C'den bağlanır, istenen sorguları gerçekleştirir ve verileri SQLite tabanındaki boşaltır. Bu veritabanı Python, PHP, Java'dan bağlanabilir. Projelerimizin çoğu Python üzerinde çalışıyor ve çünkü Ham SQL sorgularını elleriyle yazmaktan çıkmayacağım, daha sonra tümü SQLite üssü ile çalışması orm sqlalchemy ile gerçekleştirildi. Sadece veritabanı bildirim stilinin veri yapısını tanımlamak için gereklidi:

Sqlalchemy.ext.declarative ithalat bildiriminden ithalatçı_base, sqlalchemy ithalat sütunundan, tamsayısı, sayısal, tarih, Unicode, Boolean, BighterKiner, Datetime Base \u003d BeyanTy_Base () Sınıfı Abonent (Taban): __tablename__ \u003d "Abonents" ID \u003d Sütun (Integer, Programl_Key \u003d True) Hesap \u003d Sütun (Unicode (32), Index \u003d True) Kod \u003d Sütun (Unicode (32)) Adres \u003d Sütun (Unicode (512)) FIO \u003d Sütun (Unicode (256)) Kaynak \u003d Sütun (Unicode (16) ) PSU \u003d Sütun (Unicode (256)) TSO \u003d Sütun (Unicode (256)) NP \u003d Sütun (Unicode (256)) Sokak \u003d Sütun (Unicode (256)) House \u003d Sütun (Integer) Flat \u003d Sütun (tamsayı) MRO \u003d Sütun (Unicode (256)) Sınıf Ödeme: __Tablename__ \u003d "Ödemeler" # ve benzeri ...

Şimdi bu modülü herhangi bir Python projesine almak yeterlidir ve verilerle birlikte çalışabilirsiniz.

Sorunuzu öngörüyorum - "Neden Sqlite"? Ana nedeni - baz sadece okumak için gereklidir, bu nedenle SQLite'de yazılı bir sorun olmamalıdır. İkincisi, bu DBMS'nin formatı uygundur - görüntülemek için daha uygundur (biz Firefox için süper uzatma da dahil olmak üzere birçok ücretsiz yardımcı program var). Üçüncüsü, bazı durumlarda, MySQL Server ile bağlantısı olmayan makinelerden gelen abonelere erişmek gerekliydi. Bu durumda, SQLite-veritabanı dosyasını kopyalamak yeterlidir ve bu makine tüm bilgilere erişecektir.

Boşaltma geceleri günde bir kez gerçekleşir. 1C'deki veri muhafazası aynı şekilde otomatikleştirilebilir. Örneğin, Aboneler tarafından kalan ifadeyi kişisel hesap sitesinde kaydetmeniz gerekir. Bu durumda, tekrar 1C ve yazılım yöntemiyle bağlantı kurun ve "Endikasyonları kaldırma eylemi" belgesini oluştururuz ve gerçekleştiririz. Kodu hemen hemen vereceğim.

Python'da COM nesneleriyle çalışmak biraz sıradışıdır. Öncelikle, kodun "pitonikliği" kaybolur - 1C'de değişkenleri ve işlevlerini ılımlı koymak, hafifçe söylemek gerekirse, Zen Python'a karşılık gelmez. İkincisi, herkes, 1C nesnelerinin genellikle python üzerinde gelişirken sorunlara neden olacak Kiril sembolleri olarak adlandırıldığını biliyor ... ama çözüldü. Kendinizi kodla tanıştırmayı öneriyorum:

İthalat Pythoncom İçe Aktarım Win32Com.client V82_Conn_String \u003d "SRVR \u003d V8_SERVER; REF \u003d V8_DB; USR \u003d kullanıcı adı; pwd \u003d megapass;" pythoncom.coinitializ () v82 \u003d win32com.client.Dispatch ("V82.comconnector"). Bağlan (V82_Conn_String)

Koddan görülebileceği gibi, müşteri 1C ile çalışmak için başlatılır. COM nesnesinin tanımı "V82.comconnector" adıyla gerçekleşir. Bu adın V8.2 platformu için geçerli olduğuna dikkat edin, 8.1 sürümünüz varsa, adı "V81.comconnector" olacaktır.

Başlatılan istemciye göre, bir bağlantı dizesini geçerek Bağlantı () yöntemini çağırıyoruz. Dize, Sunucu Adı, Veritabanı, Kullanıcı ve Şifre'den oluşur. Elde edilen nesne V82, 1C uygulamasıyla bağlantıyı tutar. Bağlantıyı kesme () yöntemi veya böyle bir şey yok. Bazın bağlantısını kesmek için, bir nesneyi bellek işlevi DEL ()'dan silmek veya hiçbir değişken atamak için yeterlidir.

Bir nesneye sahip olmak, küresel bağlamın 1C'nin herhangi bir alan ve yöntemlerine başvurabilirsiniz, metin belgesi, tablo ve TD türünün evrensel hacimleri ile çalışır. COM bağlantısı 1C ile çalışırken "Dış Union" modunda çalıştığını düşünmek önemlidir. Pop-up diyaloglar, bildirimler ve en önemlisi, formlar gibi etkileşimli işler için herhangi bir fonksiyon kullanılamaz. Belge Form modülündeki Prosedür 1 düğmesine () en önemli işlevselliği yapan yapılandırma geliştiricilerini değiştirdiğinizden eminim.

Kirilik nitelikleri olarak böyle bir makyaj hakkında konuşalım. 1C'nin iki dilli bir ortam olduğu gerçeğine rağmen ve her Rus yöntemi için İngilizce konuşan bir analog, er ya da geç, Kirilik özniteliğiyle iletişim kurmak gerekli olacaktır. PHP veya VBScript dillerinde herhangi bir soruna neden olmazsa,

SET CON \u003d CREATEObject ("V81.comConnector") SET V8 \u003d CON.CONNECT ("stringclining") Muhasebe şeklini ayarla \u003d V8.Documents. Schedule .... AccountScape \u003d Batarya. .... AccountScape. İşe ()

Python'daki kod sadece bir sözdizimi hatası hatası ile çöküyor. Ne yapalım? Yapılandırmayı düzenleyin? Hayır, GETATTR ve SETATTR yöntemlerini kullanmak yeterlidir. COM nesnesinin iletilmesi ve niteliğin Kiril Adı bu işlevlere göre, buna göre elde edilebilir ve değerler ayarlanabilir:

# Kodlama \u003d CP1251 Kataloğu \u003d getattr (v82.catalogs, "yüz")

Aşağıdakiler önemlidir: Ayrıntıların adları ve ayrıca fonksiyonların parametreleri ve yöntemlerin parametreleri CP1251 kodlamasında iletilmelidir. Bu nedenle, önceden kodlamalarla putnice'den kaçınmak için, dosyanın başında ilan etmek mantıklıdır: # Kodlama \u003d CP1251. Bundan sonra, kodlamaları konusunda endişelenmeden satırları aktarabilirsiniz. Fakat! 1C'den elde edilen tüm dizeler (fonksiyonların fonksiyonlarının sonuçları, istekleri) UTF-8 kodlamasında olacaktır.

1C sorgusunda gerçekleştiren bir kod örneği, sonucu ortaya çıkarır ve üssü SQLite'de kaydeder:

# Kodlama \u003d CP1251 Q \u003d "" "Bir PeriTTTE'yi seçin. Kod gibi kod, yüz. Yüz yüzü. Ekipman. Başlat. Sokak, yüz. Ekipman. Detachasts. Daire olarak dağıtım, Litsevyescheta.divizion.roditel.Naimenovanie MRO, sprvocheta. .Vidyharakteristik.territorialnosetevayaorganizatsiya)) Nasıl gidilirken, harakterilitsevyescheta.ssylkaposlednih.obekt \u003d "" "query \u003d v82.newobject ( "Sorgu", q) select \u003d query.execute (). () 'I seçin () Conn \u003d db.connect () conn.query (models.abonent) .delete () seçim .Next (): abonent \u003d models.abonent () abonent.account \u003d selection.code.strip () abonent.code \u003d selection.code abonent.fio \u003d selection.fio abonent.address \u003d selection.address abonent.psu \u003d seçim.psu abonent.tso \u003d selection.tso aboneent.tso U "asrn" abonent.np \u003d selection.np abonent.street \u003d selection.street abonent.house \u003d selection.house abonent.flat \u003d selection.flat.mro \u003d seçim.mro conn.add (abonent) conn.commit ()

Burada CN, bir SQLite-Base bağlantı oturumudur. Bir sorgu isteği nesnesi oluşturulur, metni doldurulur. Yukarıda belirtildiği gibi, sorgu metni, kodlamanın ilk ilan edildiği CP1251'de olmalıdır. Talebi yürüttükten sonra, tüm aboneler veritabanında silinir, böylece bir ördek eklememek, daha sonra döngüye eklenir ve nihai komtiyeyi takip eder.

İsteklerle çalışırken, aşağıdaki kuralları açıkladım.

Alanları seçmek, onlara Latince adlarını atayın, onlara seçici (nokta), Getatr () yerine erişmek çok daha uygun olacaktır.
- Yalnızca primit veri türlerini seçin: Satırlar, Sayılar, Tarih ve Boolean. Asla bir nesneye (belge, dizin) bağlantıları seçmeyin! Bu bağlamda, referanslar kesinlikle gerekli değildir ve hatta size zararlıdır, çünkü bağlantının detaylarına veya yöntemine herhangi bir referans, bir COM bağlantısı üzerinden talepte bulunur. Döngüdeki bağlantının nitelikleri ile iletişime geçerseniz, son derece yavaş olacaktır.
- Bir alan türü alanı seçerseniz, o zaman bir nesne pytime olarak döndürülür. Bu, COM bağlantısında tarih saatini aktarmak için özel bir veri türüdür. Her zamanki tarihte olduğu gibi, onunla birlikte çalışmak kadar uygun değildir. Bu nesneyi Int (), TimesTamp Returns'a gönderirseniz, daha sonra bir DateTime yöntemini satın alabilirsiniz ().

Şimdi nasıl oluşacağını düşünün belgeleri yazdır. Gerçek şu ki, tüketicinin Ödeme Makbuzu veya Uzlaşma Kanunu gibi önceden hazırlanmış belgeleri indirme yeteneğini sağlamalarıdır. Bu belgeler uygun olarak 1C'de oluşturulur. kurulan Gereksinimler, Python'daki uygulamaları uzun zaman alacak. Bu nedenle, 1C'de belgeleri oluşturmak ve bunları korumak daha iyidir. excel formatı.

Böylece, uzlaşma yasası özel tarafından üretilir dış işleme. 1C terminolojisine aşina olmayanlar için: İşleme, 1C ortamda başlamak için tasarlanmış bir modülü, formlara, şablonlara sahip olan bağımsız bir programdır. İşlemi başlatmak, ayrıntılarını doldurmak ve bize 1C görüntülemek için tasarlanmış bir tablo belgesine geri dönecek bir işlevi çağırmanız gerekir. Bu belge Excel formatına kaydedilmeli ve sunucuya kopyalamalı veya veritabanına yazılmalıdır.

Link \u003d getattr (v82.catalogs, "Reportsystems"). FindByDescription ("Act Records Elean") Nav_URL \u003d V82.Geturl (link, "Rapor") NAME \u003d V82.externalreports.connect (nav_url) externalReport \u003d v82.externalreports.create (İsim) SETATTR (ExternalReport, "yüz", referans) table_doc \u003d externalretretrete.getdoc () yolu \u003d v82.gettempfilename ("XLS") table_doc.write (yol, v82 .spreadsheetDocumentFileType.xls) Rapor \u003d modeller.Report () raporu .Account \u003d referans.code.strip () Report.type \u003d u "Yasası" Rapor.document \u003d Open (yol, "rb"). Read () conn.add (Rapor)

Aşağıdaki fragman takip edilir. Bir belgeyi oluşturan işleme bağlar. İşlem, bir diskte veya 1C veritabanında (bazı kılavuzlarda) saklanan konfigürasyona yerleştirilebilir. İşleme sıklıkla değiştirildiğinden, yapılandırmayı her güncellemediğinizde, en sık değiştirilen işlem raporlama kılavuzunda, raporlama kılavuzunda, Rapor adlı "Değer Depolama" tipinde depolanır. İşlem, veritabanından diske ve yüklenmesini veya referans öğesine referansın ve sahne adına atıfta bulunduğu Geturl () yöntemi ile işlem yaparak başlatılabilir. İşleme nesnesi tarafından elde edilen sahnelerin değerini atarız, GETDOC () işlevini çağırın, geçici bir Excel dosyasında depolanan bir tablo belgesi elde ediyoruz. Bu dosyanın içeriği SQLite-veritabanında kaydedilir.

Son şey dikkate alınmaya devam ediyor - bu, 1C'de geliştirilen bir yazılımdır. Abonelerden tanıklık yapmak istediğinizi varsayalım. Bunu yapmak için, "Endikasyonları Çıkarma Yasası" bir belge oluşturmak ve yürütmek için yeterlidir:

# Kodlama \u003d CP1251 ACTS \u003d getattr (v82.Documents, "Aktsnotchy") ACT \u003d ACTS.CreateDocument () SETATTR (ACT, "Endikasyon", 1024.23) SETATTR (ACT, "Abone", "ivanov") # Diğer detayları doldurma #. .. ACT.WRITE ()
Şimdi veri kasası otomatikleştirildi.

Böylece, yazılımı boşaltma ve COM bağlantısını kullanarak veri yükleme yöntemini belirledim. Bu yöntem, kuruluşumda neredeyse bir yıldır faaliyet göstermektedir. 1C'den oluşan baz, 3 ödeme sistemine, internet edinmesi (internet üzerinden kartlarca ödeme) ve kişisel bir hesap sunar. Ek olarak, rutini otomatikleştirmek için veritabanına çeşitli komut dosyaları bağlanır.

Yöntemin dezavantajlarına rağmen (com-bileşiğin yavaş hızı), genel olarak kararlıdır. Herhangi bir dilden çalışabileceğiniz bir platform tabanlı formda (SQLite) verilerimiz var. Kodun ana kısmı Python'da yazılmıştır ve bu nedenle, 1C'yi bile hayal edemeyen birçok araç ve teknik mevcuttur.

Bu biri muhtemel yöntemler 1C ile etkileşim. Yeni olmadığından ve muhtemelen zaten optimize edilmiş biri tarafından test edildiğinden eminim. Ancak, sizi kabul ettiği tuzaklardan korumak için sürecin en fazla detayını belirlemeye çalıştım.

Herkese iyi şanslar diliyorum ve onun küçük olduğu gibi 1C için çok korkunç olmadığını hatırlarım!

Veritabanları 1c arasındaki veri değişim seçeneklerinden biri, COM bağlantısı üzerinden bir değişimdir.

COM bağlantısı ile bir veritabanından diğerine bağlanabilir ve veri okuyabilir veya yazabilirsiniz. Bu yöntemi, hem veri tabanlarının ve dosya tabanlarının istemci-sunucu sürümlerinde kullanabilirsiniz. Bu yazıda, bu tür bileşiklerin örneklerini analiz edeceğiz. Örnekler, Platform 8.2'yi kullanır.

Uygulama 1c için iki tür COM nesnesi oluşturabilirsiniz. o V82.Application ve V82.comconnector. Durumunda V82.Application 1C uygulamasının neredeyse tam örneği başlatılır. Kullanım durumunda V82.comconnector Küçük bir sunucu parçası başlatıldı.
Bu durumda iş hızı daha yüksektir, ancak bazı fonksiyonlar mevcut olmayabilir. Özellikle, formlarla ve özelliğin dış bileşiklerle oluşturulmadığı ortak modüllerle birlikte çalışın. KULLANMALIDIR V82.comconnector Ve sadece işlevsellik sıkıntısı durumunda V82.Application. Özellikle şiddetli bir şekilde hızdaki fark, büyük hacmin temellerinde fark edilebilir.

Öyleyse devam et

  1. Bir COM nesnesi oluşturun
    • için V82.Application Bağlantı \u003d yeni COM nesnesi ("V82.Application");
    • için V82.comconnector Bağlantı \u003d yeni COM nesnesi ("V82.comconnector");
  2. Çoğul bağlantı kuruyoruz
    • string bağlantısının sunucu varyantı için \u003d "srvr \u003d" "imasorver" "" "; ref \u003d" "" ad ";
    • string bağlantısının dosya sürümü için \u003d "file \u003d" "Pullbazbaz" "; Usr \u003d kullanıcı adı; pwd \u003d şifre";
  3. Veritabanına bir bağlantı yap Bağlantı Denenmesi \u003d Bağlantı. Bağlayın (dize bileşiği); İstisna mesajı \u003d yeni kullanıcı mesajı; İleti. Metin \u003d + Açıklama (); İleti. Rapor etmek() ; Kutlamalar;
  4. Temel ile bağlantıyı kırmak Bileşik \u003d tanımsız;

    Nesne için V82.Application Bağlantıya bağlantıyı yerine getirmek gerekir, aksi takdirde eksik oturum asılır, bu da manuel olarak silinmesi gerekecektir. Durumunda V82.comconnector Bağlantı, bağlantı yapıldığı işlem tamamlandığında bağlantı otomatik olarak yırtılmıştır. Ve başka bir süre daha var.

    Bağlantının yapıldığı kullanıcı için, "İstek Kapatma Programı" onay kutusu ayarlarında kapatılmalıdır.

Şimdi tüm kodları bir demette toplayacağız.

Bağlantı \u003d yeni COM nesnesi ("V82.Application"); // bağlantı \u003d yeni COM nesnesi ("V82.comconnector"); Kürek indeksi \u003d "srvr \u003d" "" Server1C ""; ref \u003d "" mybase ""; usr \u003d petya; pwd \u003d 123 "; // ritching indion \u003d "dosya \u003d" "C: \\ Mybase" "; USR \u003d Peter; PWD \u003d 123"; Bağlantı Denenmesi \u003d Bağlantı. Bağlayın (dize bileşiği); İstisna mesajı \u003d yeni kullanıcı mesajı; İleti. Metin \u003d. "Veritabanına bağlanılamadı" + Açıklama (); İleti. Rapor etmek() ; Kutlamalar; Bileşik \u003d tanımsız;

Bağlantı türü için V82.Application Yöntem, başlangıçta yaratılmış olan COM nesnesine uygulanır ve V82.comconnector Yöntem bağlantı için geçerlidir. Sonra, istek ile çalışın standart demek 1c. Kodda şöyle görünüyor:

Talep \u003d Bağlantı. Newobject ("sorgu"); // için V82.comconnector Sorgu \u003d bağlantı. Newobject ("sorgu"); // için V82.Application Soruşturma. Metin \u003d "Seç | Postganizasyonlar. Kod, | Propulatör organizasyonları. | | Rehber. Ofis ALLOLIGANIZASYONLARI "; Sonuç \u003d istek. Performans (); Seçim \u003d sonuç. Seç() ; Örnek iken. En Sonrakinin () () () döngüsü;

1C sürümü için: Kurumsal 8.3 Her şey değişmeden kalır, ancak bir Comobec'ler oluşturulması durumunda kullanılmalıdır. "V83.comconnector" veya "V83.Application".

Verileri bir 1C yapılandırmadan diğerine aktarmanın bir yolu, COM kullanarak bir yazılım bağlantısıdır. Birçok şirket, belirli ilişkilerin ve bağımlılıklarının olması gereken birkaç farklı üs kullanır. Sadece veri aktarmak için değilse, aynı zamanda belirli bir veri işleme işlemi gerçekleştirmek için, COM bağlantısı en iyi mekanizma olacaktır. 1C'nin başka bir veritabanından veri analiz etme yeteneği herhangi bir geliştirici için kullanışlıdır.

COM üzerinden 1C veritabanına bağlanın

COM bağlantısını 1C'de uygulamak için, Comconnector adlı özel bir mekanizma kullanılır. Bu nesne platformla birlikte kurulur ve iletişim için kullanılır. bilgi üsleri. Versions 8.2 ve 8.3, farklı nesneler için sırasıyla "V82.Connector" ve "V83.comconnector" olduğu belirtilmelidir.

Bir lisans harcamak için COM bağlantısında bulunduğunu unutmayın - birden fazla bağlantının eşzamanlı olarak yürütülmesinde yer almak gerekli değildir. Bu, özellikle lisans sayısı sınırlı olan kuruluşlar için önemlidir. Bilgi veritabanına aktif kullanıcı bağlantılarının eksikliği sırasında çalışan yasal görevlerin yardımı ile bu konuda karar verilebilir.

Başka bir veritabanına bağlanabilmek ve aşağıdaki verileri bilmeniz gereken gerekli bilgileri talep edebilmek için:

  1. Ne tür bir türdür - dosya veya istemci-sunucu;
  2. Nerede bulunuyor;
  3. Hangi isim ve şifrenin içine gidebilir;
  4. Hangi verileri ilgilendiriyorsunuz?

COM bağlantısını uygulamak için ilk üç öğeden, parametre dizesini oluşturmanız gerekir. IB türüne bağlı olarak, farklı olacaktır. dış türler. Elde edilen dizgeyi kullanarak, herhangi bir yöntemle başka bir veritabanından veri analiz ve işleme için toplanabilecek bir bağlantı bağlanır.

Parametreler Konferans FileBEIB \u003d "" "" "PATH_BASE" "" "; USR \u003d" "Kullanıcı adı" ""; pwd \u003d "" "şifre" ""; Parametreler SonuçlarClinSerVerVEB \u003d "SRVR \u003d" "SERVER_NAME" "" "" ""; ref \u003d "" Baz adı ""; usr \u003d "" kullanıcı adı "" "; pwd \u003d" "şifre" "";

Bağlantı özelliği basittir ve tüm parametreler doğru ise, sorulara neden olmamalıdır. Hata ayıklama ve analizini hızlandırmak için olası hatalar "Girişim" tasarımında bir bağlantı sonuçlandırmak daha iyidir. İade İşlevi, çalışmanız gereken "COM nesnesi" türünün değeri olacak, gerekli verileri almak.

& Nasserver Connect işlevi () İhracat parametreleri mindictionsib \u003d "dosya \u003d" "e: \\ Base 1c \\ erp" "; usr \u003d" "Yönetici" "; pwd \u003d" "1" ""; V83Comcon \u003d yeni ortak nesne ("v83.comconnector"); V83Comcon.connect'i döndürmeye çalışın (parametreler güç noktaları); Bilgi istisnası (açıklama ()); İade tanımsız; Kutlamalar; Sonlandırma

COM bağlantısıyla yalnızca verileri seçemezsiniz, aynı zamanda bunları bağladığınız veritabanına da ekleyebilirsiniz. COM nesnesi 4 üzerinden iletebileceğimizi unutmayın. İlkel tip veri. Diğer tipler, platformda yerleşik arama işlevleri kullanılarak belirtilmelidir. Global platform fonksiyonlarının COM bağlantısı üzerinden de çağrıldığını unutmayın.

1C tabandan veri alıyoruz

İstediğiniz nesneyi aldıktan sonra, verileri başka bir tabandan okumanız gerekir. Bunu yapmak için, fonksiyondan gelen "COM nesnesi" türünü kullanarak 1C 8.3 ile COM bağlantısı üzerinden bir istek uygularız. Önce veritabanına bağlanması önemlidir ve ardından bir istek gerçekleştirin. Yürütme, bir string formunda bir nesne türü parametresi olarak bir gösterge ile NewObject yöntemiyle gerçekleşir. "İstek".

& Nasserver testleri mekanik prosedür () bağlantısı \u003d Connect (); TypeCouch (Bağlantı) Tipi ("undefind") ise, istek \u003d connection.newobject ("sorgu"); Talep. Text \u003d "İlk 15'i seçin. İtekçiProduction. Bir isim olarak isim | dizininden | dizininden. Bir dizin olarak kullanıcılar"; Örnekleme \u003d istek. Doldur (). () 'İ seçin (); Örnek iken. Sonraki () döngüsü rapor edilir (örnekleme. Endcycle; Bitti; Ekstra Prosedür\u003e

Örneğin, belirli bir birimin kullanıcıları hakkında bilgi edinmek için durumu parametreler aracılığıyla talebe ayarlayın. Bir parametre basit bir tür olacak - bir dize olacak ve ünite "Kurumsal Yapı" referans kitabı tarafından referans verilir. Sorgunun sonucu, COM bağlantısının oluştuğu veritabanında bulundukları türün listelenen alanlarına sahip bir tablodur. Onları diğer türlere dönüştürmeniz gerekirse - standart platform işlevlerini kullanın:

  • Hat();
  • Numara();
  • Tarih ().
İstek \u003d connection.newobject ("sorgu"); Requice. Text \u003d "İlk 15'i seçin. DiziniAndEnz. İsim Olarak İsim | Rehberinden | Rehberinden. ; Talep. Kurulum parametresi ("MasaToming", bileşik. Koşular. Yapıpredit. Entrypocode ("00-000023")); İstek. Kurulum parametresi ("İstenilen", "Catherine"); Örnekleme \u003d istek. Doldur (). () 'İ seçin (); Örnek iken. Bir sonraki () döngüsü bildirilir (örnekleme. İsim); Endcycle;

Birkaç parametre seçmek için veritabanına bir dizi göndermek istiyorsanız, örneğin birimler, birimler, NewObject komutu da kullanılır. Benzer şekilde, bağlantı yoluyla başka bir veritabanının elemanlarını doldurarak bir listeyi veya değer tablosunu aktarabilirsiniz. Hepinizi erişebileceğiniz arama yapmak için mevcut yöntemler Platform nesneleri ve mekanizmalar.

İstek \u003d connection.newobject. ("Sorgu"); İstek. ""; Massputs \u003d connection.newobject ("dizi"); Massput Kuvvetleri. Addly (Bileşik. Pravnochniki. Yapısal kuruluş. Entripotip ("00-000023")); Massputs kuvvetleri. Addly (bileşik. Koşular. Yapısal kuruluş. Entrypocus ("00-000038")); Massput Kuvvetleri. Addly (Bileşik. Çerçeveler. Yapısal Kurumlar. Entripotip ("00-000046")); İstek. Kurulum parametresi ("bölünme için istenen", dizi); İstek. Kurulum parametresi ("İstenilen", "Catherine"); Örnekleme \u003d istek. Doldur (). () 'İ seçin (); Örnek iken. Bir sonraki () döngüsü bildirilir (örnekleme. İsim); Endcycle;

Belgeleri veya referans elemanlarını aktarırken, belirli bir nesnenin transferini kontrol etme sorusu her zaman ortaya çıkıyor. COM bağlantılarını kullanarak, bu tür sorunlar benzersiz bir tanımlayıcıdan çözülebilir. Tanımlayıcıyı, bir dize biçiminde tanımlayıcıyı kullanarak "Dressline" işlevini kullanarak, belirli veritabanındaki belirli veritabanında bir nesneyi bulmanız gerekir. Bu bulunamadıysa, bir COM bağlantısı ile oluşturabilirsiniz.

Strider \u003d Row (dizinler. Kullanıcılar. Lightpocode ("00-0000313"). Benzersiz selfsifier ()); Eğer cinsinden değilse (bağlantı. Koşullar. Kullanıcılar. Pereskliklka (bağlantı .Newobject ("benzersiz selfsifier", streed))) Sonra yeni bir kullanıcı \u003d bileşik. Koşullar. Kullanıcılar. Oluşturma (); Yeni user.Name \u003d Referanslar. Kullanıcılar. Entiposose ("00-0000313"). İsim; Yeni user.physity \u003d Referanslar. Kullanıcılar. Entipotype ("00-0000313"). Fiziksel Yeni kullanıcı. İşe alım (); Bitti;

Ayrıca, COM bağlantısı, prosedürleri ve işlevleri kullanma hakkına sahiptir. ortak modüller 1C dahil harici bağlantı özelliği ile. Ek olarak, işlev veya prosedür denilen durum dışa aktarılmalı ve sunucuda gerçekleştirilen etkileşimli eylemleri içermemelidir. Karşılıklı durumda, operasyonun kabul edilemezliği hakkında bir hata göreceksiniz.

Bileşik ..; Makine İşlevleri \u003d Bağlantı ..; Arama\u003e Ad Döşeme\u003e ÇağrılarProcessories\u003e Nadimness\u003e

1C'de başka bir baz ile harici bir bağlantı olanakları yeterince kapsamlıdır ve çok sayıda göreve izin verebilir. Araç takımı doğru şekilde değerlendirebilmek ve en uygun çözümü seçebilmek önemlidir. Çoğu durumda, bu yetenek yalnızca deneyimli uzmanların deneyimlerini veya incelenmesiyle birlikte ortaya çıkar.