Gastrointestinal hastalıklar hakkında

1C veritabanları arasında veri alışverişi yapma seçeneklerinden biri COM bağlantısı üzerinden alışveriş yapmaktır.

COM bağlantısını kullanarak bir 1C veritabanından diğerine bağlanabilir ve veri okuyabilir veya yazabilirsiniz. Bu yöntem hem veritabanlarının istemci-sunucu versiyonlarında hem de dosya veritabanlarında kullanılabilir. Bu yazıda bu tür bağlantı örneklerine bakacağız. Örnekler platform 8.2'yi kullanıyor.

1C uygulaması için iki tür COM nesnesi oluşturabilirsiniz. Bu V82.Uygulama Ve V82.COM Bağlayıcı. durumunda V82.Uygulama 1C uygulamasının neredeyse tam teşekküllü bir kopyası başlatıldı. kullanım durumunda V82.COM Bağlayıcı Küçük bir sunucu kısmı başlatıldı.
Bu durumda çalışma hızı daha yüksektir ancak bazı işlevler kullanılamayabilir. Özellikle, harici bağlantılarla çalışma özelliğinin ayarlanmadığı formlar ve ortak modüllerle çalışma. Çoğunlukla kullanmalısınız V82.COM Bağlayıcı ve yalnızca işlevsellik eksikliği durumunda V82.Uygulama. Çalışma hızındaki fark özellikle büyük hacimli veritabanlarında fark edilebilir.

Öyleyse başlayalım

  1. Bir COM nesnesi oluşturalım
    • İçin V82.Uygulama Bağlantı = Yeni COMObject("V82.Application" ) ;
    • İçin V82.COM Bağlayıcı Bağlantı = Yeni COMObject("V82.COMConnector" ) ;
  2. Bir bağlantı dizesi oluşturalım
    • veritabanının sunucu sürümü için ConnectionString = "Srvr = " "SunucuAdı" ";Ref = " "BaseName" ;
    • veritabanının dosya sürümü için ConnectionString = "File = " "PathKBase" "; Usr = KullanıcıAdı; Pwd = Şifre";
  3. Veritabanına bağlanma Bağlantı Denemesi = Bağlantı. Connect(ConnectionString) ; İstisna Mesajı = Yeni MesajToKullanıcı; İleti. Metin = + ErrorDescription() ; İleti. Rapor etmek() ; Deneme Sonu;
  4. Veritabanıyla bağlantının kesilmesi Bağlantı = Tanımsız;

    Nesne için V82.Uygulama Bağlantıyı sonlandırmak gerekir, aksi takdirde tamamlanmamış bir oturum kalır ve bunun daha sonra manuel olarak silinmesi gerekir. durumunda V82.COM Bağlayıcı Bağlantının yapıldığı prosedür tamamlandığında bağlantı otomatik olarak kesiliyor. Ve bir küçük nokta daha var.

    Bağlantının yapıldığı kullanıcı için ayarlarında “Programı kapatırken onay iste” onay kutusu devre dışı bırakılmalıdır.

Şimdi tüm kodu bir araya getirelim

Bağlantı = Yeni COMObject("V82.Application" ) ; //Bağlantı = Yeni COMObject("V82.COMConnector"); ConnectionString = "Srvr = " "Sunucu1C" ";Ref = " "MyBase" "; Usr = Petya; Pwd = 123" ; //ConnectionString = "Dosya = ""С:\MyBase""; Usr = Petya; Pwd = 123"; Bağlantı Denemesi = Bağlantı. Connect(ConnectionString) ; İstisna Mesajı = Yeni MesajToKullanıcı; İleti. Metin = "Veritabanına bağlanılamadı"+ AçıklamaHatası() ; İleti. Rapor etmek() ; Deneme Sonu; Bağlantı = Tanımsız;

Bağlantı türü için V82.Uygulama yöntem, başlangıçta oluşturulan COM nesnesi için kullanılır ve V82.COM Bağlayıcı Bağlantıya yöntem uygulanır. Daha sonra istek standart 1C araçları kullanılarak işlenir. kodda şöyle görünür:

Talep = Bağlantı. NewObject("İstek"); // İçin V82.COM Bağlayıcı Talep = Bağlantı. NewObject("İstek"); // İçin V82.Uygulama Rica etmek. Metin = "SEÇ | Organizasyonların Pozisyonları, | Kuruluşların Pozisyonları.Adı|DAN | Rehber. Organizasyonların Pozisyonları AS Organizasyonların Pozisyonları"; Sonuç = Talep. Koşmak();

Örnek = Sonuç. Seçmek() ; Güle güle Seçim. Sonraki() Döngü EndLoop ; Sürüm 1C:Enterprise 8.3 için, COM nesneleri oluştururken kullanmanız gerekenler dışında her şey değişmeden kalır"V83.COM Bağlayıcısı" veya.

"V83.Uygulama"

) Bu doğru
Aynı zamanda 10 puana bile ulaşmayan yayınların basitçe "havaya uçtuğunu" birden fazla kez gördüm.


Bu neden oldu? Görünüşe göre birisi onları açıkça beğendiği için.
İşte bunu söylüyorum, derecelendirme yazısını okumadan buna ne kadar ihtiyacınız olduğunu anlamak ya da bu kadar ilkel olmayan bir şekilde +/- değerlendirmek güzel olurdu. Neyi beğendiğime gelince, bunu şu şekilde düzeltirim: yıldızların hizalanması ve birçok insanın sitede toplanması ve birçoğunun bunu sevmesi nedeniyle o kadar çok şey kazandı ki, bunun bir şans meselesi olduğunu kendiniz anlıyorsunuz çünkü Bir makale ana sayfadan çıkar çıkmaz yalnızca istek üzerine bulunabilir ve böylece herkes oy vererek geçer. Ve anladığım kadarıyla sürekli yorumlar = makalenin tanıtımı, onu ana sayfada tutmanıza izin veriyor.

Tam olarak bu yüzden halka açık caddelere dükkanlar açıyorlar; sonuçta çoğu zaman önemli olan malların kalitesi ve alaka düzeyi değil, mekanın trafiğe elverişliliğidir; yürüyen insanlar çoğu zaman ertesi gün çöpe atacakları bir şey satın alırlar. sürecin uğruna. Bu uzun zamandır herkes tarafından bilinen bir hastalıktır - alışveriş bağımlılığı. Veya sadece akışı artırmak doğru alıcının olasılığını artırır.


Onlar. Eksi aynı zamanda “teşekkür ederim” sayılır mı? Bu gibi durumlarda kullanılması gerekip gerekmediğine ve başkalarının ne kadar ilginç düşündüğüne dair fikrinizi bilmek istedim. Makale zararlı/kötü olduğunda mı yoksa sizin için sadece işe yaramaz/boş olduğunda mı koymanız gerekir?
Bana göre makale basit bir derecelendirme artışına benziyor çünkü:
1. Bahsettiğim türlerle ilgili sorun, bir sürü yorum yazamayacak kadar tembel olmamasına rağmen yazar tarafından tamamen göz ardı edildi.
2. Yazıda bariz bir yanlışlık var: Tek yolun bu olduğu söyleniyor

V82 = Yeni COMObject("V82.ComConnector"); Kod = HesapCOM.Code;


ancak şunun gibi işlemleri kullanarak bunu kolayca yapabilirim:

Rapor(Baz. Dizinler. Karşı Taraflar. Ada Göre Bul("LLC"). Kod);


ve her şey yolunda! Ve V82.ComConnector bağlantısını seçiyorum
Yazarın, makalesinin işaret edilen sorunları içermesini hiç umursamaması, ancak hiçbir şekilde tepki vermemesi bir şekilde garip.
3. Ancak “Sınıf mevcut değil” hatası çıktığında hala sorun var
4. Ancak 8.2 kurulduğunda ve ardından 8.1 kurulduğunda bir sorun var - OLE/COM aracılığıyla standart bir UT-BP değişimiyle değişim yapmayı deneyin!
5. Yeni başlayanların zaman kaybetmemesi için OLE/COM aracılığıyla evrensel olarak bağlanmanıza olanak tanıyan sitedeki ana işlemleri belirtir misiniz, onlar için siz yazın! Bu arada, bir nedenden dolayı onun resmi ekranınızda, neden? Ve sonuç olarak, esas hakkında 2 kelime ve perde arkasında 6 kelime daha.

Genelde çamur atmıyorum ama belirli boşluklara dikkat çekiyorum ama sıfır tepki var. Eğer paylaştığınız deneyim buysa, o zaman bu bir şekilde hatalı ve eksiktir.
Demek istediğim şu ki, eğer yazarın tüm aksaklıkları toplama arzusu olsaydı, en azından diğer insanların deneyimlerini dinleyebilir ve yorumlara hemen cevap veremezdi. Okuyan kişinin yazardan daha fazlasını bildiği, ona söylediği (bazen yanlış) ve o da karşılık verdiğinde hemen bir durum ortaya çıkar. Sonuç olarak tüm bilgiler makalede değil, yorumlarda! Eğlenceli! Bu sıklıkla olur, ancak en iyisini istediğiniz gerçeğine odaklanmanıza gerek yoktur; ben en iyiyi gösteririm ve diğerleri bunu gösterir! Bunu makaleye dahil ederseniz faydalı olacaktır; herkes bu çatışmayı okumakla ilgilenmiyor.


Anahtar Kelimeler: COM, bağlantı, harici, OLE, Otomasyon, Connect, ComConnector, Srvr

Verilere erişmek için 1C:Enterprise 8.0 COM bağlantılarını kullanırken, Otomasyon sunucusu kullanmaya kıyasla aşağıdaki avantajlar vardır:

  1. Ayrı bir işletim sistemi süreci oluşturmaya gerek olmadığından ve tüm eylemler çağrı süreci içerisinde gerçekleştirildiğinden daha hızlı bağlantı kurulumu;

  2. Erişimin düzenlenmesi işlemler arası iletişim gerektirmediği için 1C:Enterprise nesnelerinin özelliklerine ve yöntemlerine daha hızlı erişim;
  3. İşletim sistemi kaynaklarının daha az tüketimi.

Genel olarak, 1C:Enterprise 8.0 ile COM bağlantısı aracılığıyla çalışmak, 1C:Enterprise ile sunucu Otomasyonu modunda çalışmaya benzer. Temel farklar aşağıdaki gibidir:

  1. Otomasyon sunucusu durumunda, tam teşekküllü bir 1C:Enterprise 8.0 uygulaması başlatılır ve COM bağlantısı durumunda nispeten küçük bir işlem içi COM sunucusu başlatılır.

  2. Bir COM bağlantısı üzerinden çalışırken, 1C:Enterprise 8.0 kullanıcı arayüzünün organizasyonuyla ilgili şu veya bu şekilde işlevsellik mevcut değildir;
  3. COM bağlantısını çalıştırırken 1C:Enterprise 8.0 yapılandırma uygulama modülü kullanılmaz. COM bağlantısıyla çalışırken rolü harici bağlantı modülü tarafından oynanır.

1.1 COM bağlantısı kurma prosedürü

COM bağlantısı üzerinden 1C:Enterprise 8.0 verilerine erişimi düzenlemek için aşağıdaki eylem dizisi gerçekleştirilir:

  1. bağlantının kurulduğu V8.COMConnector tanımlayıcısıyla bir COM nesnesi oluşturulur;

  2. önceden oluşturulan V8.COMConnector nesnesinin Connect yöntemi çağrılır. Connect yöntemi, 1C:Enterprise 8.0 bilgi tabanına sahip bir COM bağlantı nesnesine bir bağlantı döndürür;
  3. Alınan COM bağlantı nesnesi üzerinden bağlantının kurulduğu bilgi bankasının geçerli yöntemlerine, özelliklerine ve nesnelerine erişilir.

Önemli! COM bağlantısında kullanıcı arayüzünün bulunmamasından dolayı tüm nesneler, özellikler ve yöntemler COM bağlantısında kullanılamaz.

COM bağlantısı aracılığıyla dışarıdan erişilebilen 1C:Enterprise nesneleri:

  1. Harici birleştirme modülünün dışa aktarılan değişkenleri ve prosedürleri/işlevleri

  2. Dışa aktarılan değişkenler ve ortak modüllerin prosedürleri/işlevleri
  3. Ortak modüllerin özelliklerini ayarlayarak tüm modülleri dahil etme ve hariç tutma

  4. Bir ön işlemci kullanarak ortak modüllerin parçalarını dahil etme ve hariç tutma
  5. İstemci uygulamasına sıkı bir şekilde bağlı nesneler hariç olmak üzere genel bağlam 1C:Enterprise 8.0 (TextDocument, TabularDocument, ...)

1.2 Harici bağlantı modülü

Daha önce belirtildiği gibi, COM bağlantısı üzerinden çalışırken uygulama modülünün sorumlulukları harici bağlantı modülü tarafından gerçekleştirilir. Bu modül, sırasıyla bağlantının başlatılması ve sonlandırılması üzerine gerçekleştirilen eylemleri içerebilen When SystemStarts() ve WhenSystemCompletes() olay işleyici prosedürlerine sahip olabilir.

Dışa aktarma anahtar sözcüğüyle harici bir birleştirme modülünde tanımlanan prosedürler, işlevler ve genel değişkenler, uygulama modülünde olduğu gibi küresel bağlamın parçası haline gelir.

1.3 Ortak modüller

Ortak modüller için "İstemci", "Sunucu" ve "Harici Bağlantı" özellikleri eklendi. İstemci - sunucu versiyonunda ve COM bağlantı modunda modüllerin konfigürasyonda kullanımını belirlemeye yöneliktirler.

1.4 Nesne "V8.COMConnector"

V8.COMConnector COM nesnesi tarafından çözülen tek görev, 1C:Enterprise 8.0 bilgi tabanıyla bir COM bağlantısı kurmaktır. V8.COMConnector nesnesinin bir örneği kullanılarak sınırsız sayıda bağlantı kurulabilir. V8.COMConnector nesnesi, 1C:Enterprise 8.0 bilgi tabanı ile COM bağlantısı kurmak için tasarlanmış tek bir Connect yöntemine sahiptir.

<СтрокаСоединенияИБ>

Bilgi güvenliği sistemi ile bağlantı hattı Parametre=Değer formundaki parçalardan oluşan bir zincirdir. Parçalar birbirinden ";" ile ayrılır. Bir değer boşluk içeriyorsa çift tırnak (") içine alınmalıdır.

Ortak parametreler:

Usr - kullanıcı adı;
Pwd - şifre.

Dosya sürümü için aşağıdaki parametre tanımlanmıştır:

Dosya - bilgi tabanı dizini.

İstemci-sunucu seçeneği için aşağıdaki parametreler tanımlanmıştır:

Srvr - 1C:Kurumsal sunucu adı;
Ref - sunucudaki bilgi tabanının adı.

Connect yöntemi, 1C:Enterprise 8.0 bilgi tabanına bir COM bağlantısı kurar ve COM bağlantı nesnesine bir bağlantı döndürür.

// Bir bağlayıcı nesnesi oluşturulur
V8 = Yeni COMObject("V8.COMConnector");
// bir COM bağlantı nesnesi yaratıldı
Bağlantı = V8.Connect("File=""c:\InfoBases\Trade""; Usr=""Director"";")

1.5 COM bağlantı nesnesi

1C:Enterprise bilgi tabanına COM bağlantısı, global bağlamına tam erişim sağlar (bkz. “Program modülü yürütme bağlamı”). Bu nedenle, bir COM bağlantısının yöntemleri şunlar olabilir: sistem sabitleri, yöneticiler kullanılarak erişilen nesnelerin yapılandırıcısında belirtilen değerler (örneğin, sabitler, numaralandırmalar, dizinler, belgeler, belge günlükleri, raporlar, işlemler, türler için planlar) karakteristiklerin, hesap planlarının, hesaplama türlerinin planlarının, kayıtların) yanı sıra Dış bağlantı modülünde Export anahtar sözcüğüyle bildirilen değişkenler.

Ayrıca COM bağlantısında belirli türlerde değerler oluşturmak için kullanılabilecek ek bir NewObject yöntemi bulunur.

tk = Bağlantı. NewObject("ValueTable");

Dize yöntemi 1C:Enterprise değerlerinin dize temsillerini elde etmenizi sağlar.

Görünüm = Connection.String(Data.UniqueIdentifier());

1.6. COM bağlantısıyla çalışmanın özellikleri

Otomasyonda ve COM bağlantısında DOĞRU ve YANLIŞ şu değerlere sahiptir: -1 (eksi bir) ve 0.

COM bağlantılarından oluşan bir havuz düzenlemek mümkündür. Aynı zamanda, alıcı sunucu 1C:Enterprise'da ÖNCEDEN birkaç COM bağlantı nesnesi oluşturulur ve yeni bir nesne oluşturmaya gerek olmadığından bağlantı kurmak daha da az zaman alır.

Belirtilen ayarlara göre sorgu metinleri oluşturmak için tasarlanmış yeni bir Sorgu Oluşturucu nesnesi uygulandı. Bu nesne, raporun bir elektronik tablo belgesine veya kullanıcı arayüzüyle ilgili diğer görevlere çıktı olarak verilmesiyle ilgili olmayan rapor oluşturucu işlevini destekler. Bu nesne 1C:Enterprise sunucusunda ve COM bağlantısında kullanılabilir.

1C:Enterprise sunucusunda yerleşik dili çalıştırırken COM nesnelerini kullanabilirsiniz.

COM hataları katıştırılmış dil istisnalarına dönüştürülür.

Yapılandırma, harici bir birleştirme modülünde, ortak bir modülde veya bir nesne modülünde elektronik tablo belgesi gibi geçersiz bir nesne oluşturmaya çalışırsa, COM bağlantısı kurulamayabilir veya bir istisna olarak sonlandırılabilir.

Soru: COM IE 11 kullanarak bir siteyi ayrıştırma


İyi günler.!
Soru acı bir şekilde iyi biliniyor, bilgiyi siteden almanız gerekiyor. Ancak nüanslar var:
1. Doğrudan yetkilendirme sayfasına gitmenin bir yolu yoktur (önce ana sayfaya gidin, Oturum Aç bağlantısını tıklayın, yetkilendirme formunu alın ve ancak bundan sonra oturum açın).
2. Sitede arama çubuğu aracılığıyla veri aramanız, ardından okumanız ve tekrar aramanız gerekir (veriler Rusça ve İngilizce olabilir, yani arama verileri Rusça ise, o zaman “ Sitenin Rusça versiyonu” ve bu aynı zamanda başka bir sayfaya giden bağlantıya tek tıklamadır. İngilizce için de aynı sorun).

Sonunda:
- ana sayfaya gidin - giriş yapın - veri arayın - (gerekirse sitenin başka bir sürümüne gidin) - alın.

Sorun:
Bir bağlantıyı takip ederken veriler "belge" özelliğine okunmaz.
İki noktada meydana gelir:
- oturum açmak için bağlantıyı takip ettiğimizde (bu bir düğme değil, yalnızca bir bağlantıdır);
- sitedeki dili değiştirdiğimizde (aynı zamanda bir bağlantı).

Not
Yetkilendirme aşamasında bir bağlantıyı takip etmeden önce bir bağlantı alırsanız, com'u kapatıp IE.navigate("link") yöntemi üzerinden geçişle tekrar açarsanız, "document" özelliğindeki veriler normal şekilde gider. Ancak sitedeki dili değiştirirken aynı şeyi yapamazsınız çünkü... Tekrar giriş yapmam gerekiyor ve ayrıca bu sorunu tam olarak bu şekilde çözmek istemem.

İşte kod:

&İstemcide Prosedür SetWaitingIE(IE, SecondCall=False) IE.Busy DEĞİLSE O halde D = CurrentDate() + 3; D >= CurrentDate() iken Döngü IE.Busy ise Sonra Durdur; endIf; EndCycle; endIf; IE.Busy Döngüsü EndLoop iken; IE.ReadyState iken< 4 Цикл КонецЦикла; Попытка Если IE.Document.ReadyState = Null Тогда IE.Refresh(); УстановитьОжиданиеИЕ(IE); КонецЕсли; Пока IE.Document.ReadyState <>"tamamlanmış" Döngü EndCycle; İkinci Arama Sonra Geri Dönülmesi Durumunda İstisna; Diğer Bağlantı = IE.KonumURL'si; IE.Quit(); IE = GetCOM("InternetExplorer.Application"); IE.Navigate(Bağlantı); SetExpectIE(IE, True); endIf; Deneme Sonu; EndProcedure &OnClient Function PerformUserAuthorization(IE, Link, Login, Password, Authorized=False, SC=0) Attempt Elements = IE.Document.GetElementsByName("kullanıcı adı"); Elements.Length = 1 ise Elementlerin Her El'i İçin Döngü El.Value = Giriş; EndCycle; endIf; Öğeler = IE.Document.GetElementsByName("şifre"); Elements.Length = 1 ise Elementlerin Her El'i İçin Döngü El.Value = Şifre; EndCycle; endIf; IE.Document.GetElementById("ID").Click(); SetWaitingIE(IE); Yetkili = Doğru; İstisna Eğer CN > 3 ise Yanlış Döndür; endIf; IE.Quit(); IE.Navigate(Bağlantı); SetWaitingIE(IE); MF = MF + 1; PerformUserAuthorization(IE, Bağlantı, Giriş, Şifre, SCH) ise True'yu Döndür; endIf; Deneme Sonu; İade Yetkilisi; EndFunction &OnClient Prosedürü Upload(Command) SpTables = GetListTablesForUpload(); SpTables = Yanlışsa Geri Dön; endIf; IE = GetCOM("InternetExplorer.Application"); SpTable.SOURCE_LIST Döngüsünden Her Satır İçin RA = Row.ID; Kaynak = String.RESOURCE; IE.Navigate(Kaynak); SetWaitingIE(IE); Deneyin If Line.NEW_PAGE_IN_LOGIN = 1 Then Classes = IE.Document.GetElementsByClassName("ClassName"); Classes.Length = 1 ise Her Sınıf İçin Sınıflardan Döngü Kaynağı = Class.All(0).Href; İptal edin; EndCycle; IE.Quit() deneniyor; IE = IE.Navigate(Kaynak); SetWaitingIE(IE); İstisna Raporu("" +String.NAME + "" sitesine bağlantı başarısız oldu!"); İptal edin; Deneme Sonu; Aksi halde Report("Siteye bağlantı "" +String.NAME + "" başarısız oldu!"); İptal edin; endIf; endIf; PerformUserAuthorization DEĞİLSE(IE, Kaynak, String.LOGIN, String.PASSWORD) Then Report("" + String.NAME + "" sitesindeki kullanıcı yetkilendirmesi tamamlanmadı!"); İptal edin; endIf; Kaynak = IE.KonumURL'si; Kişi Listesi = SpTable.FACE_CODES.FindLines(New Structure("SOURCE", RA)); ListNotFound = Yeni Dizi; Kişi Listesindeki Her Kişi İçin PersonName = Person.NAME_IN_SITE döngüsünü gerçekleştirin; Bu Rusça = KarakterKodu(KişiAdı, 1) >= 1040; TechResource = ?(Bu Rusçadır, StrReplace(Resource, "en_US", "ru_RU"), StrReplace(Resource, "ru_RU", "en_US")); TekResurs ise<>IE.LocationURL Sonra RootClasses = IE.Document.GetElementsByClassName("ClassName"); RootClasses.Length = 1 ise RootClasses'tan Her RootClass İçin Döngü Sınıfları = RootClass.Children; İptal edin; EndCycle; AmGroup = Yanlış; RuGroup = Yanlış; Sınıflardan Her Sınıf İçin Döngü Eğer HPreg(Class.ClassName) = "dropdown-header" Then AmGroup = Find(Class.InnerText, "Americans") > 0; RuGroup = Find(Class.InnerText, "Avrupa") > 0; ElseIf HPreg(Sınıf.SınıfAdı)<>"selected" Then If AmGroup And Find(Class.All(0).InnerText, "English") > 0 OR RuGroup And Find(Class.All(0).InnerText, "Russia") > 0 Then IE.Navigate(Class) .Tümü(1).Href); SetWaitingIE(IE); İptal edin; endIf; endIf; EndCycle; endIf; endIf; IE.Document.GetElementById("ID").Value = KişiAdı; FindButton = IE.Document.GetElementById("ID"); FindButton.Focus(); FindButton.Click(); SetExpect(IE)'yi kurmaya çalışıyorum; //Alınan veriyi devrelendir ExceptionListNotFound.Add(Person); Devam etmek; Deneme Sonu; EndCycle; İstisna Raporu("Hata:" + Semboller.PS + ErrorDescription()); İptal edin; Deneme Sonu; EndCycle; IE.Quit(); Prosedürü Sonlandır

Cevap:

Konu çok ilginç ama kişisel olarak maalesef bu sorunu bir şekilde anlayacak ne deneyimim ne de fırsatım var. Bu konuyla ilgili bilgi bulabilirseniz lütfen paylaşın.
--- Mesaj birleştirme, 29 Nisan 2016 ---

Anladığım kadarıyla SQL veritabanına erişim yok mu?

--- Mesaj birleştirme, 29 Nisan 2016 ---

Peki, eğer ayrıştırılıyorsa, o zaman ne tür bir erişim?

Soru: COM bağlantısı 1C 8.3 - 1C 8.3 Bağlantıya hata ayıklayıcıyı girmek mümkün mü


Forum üyelerine, 8.3.6 (BP 3.0) platformundaki bir veritabanından kendi yazdığı bir veritabanının (aynı zamanda üzerinde çalışan) harici bağlantı modülüne COM bağlantısı aracılığıyla bağlandığımda hata ayıklamanın mümkün olup olmadığını sormak istedim. Platform 8.3.6) ve işlemeyi kullanarak bu prosedürlerden dışarı aktarımları çağırın? Veritabanları şu anda dosya tabanlıdır ve tek bir bilgisayarda bulunmaktadır, ancak sunucu sürümü de planlanmaktadır. Bu zamana kadar, COM bağlantısı üzerinden yürütülmek üzere rastgele kod iletmek ve hataları günlüğe kaydetmek için aşağıdaki yapıları kullanıyordum. Harici bağlantı modülündeki kendi yazdığı veri tabanındaki prosedürlerin parçaları şunlardır:

İşlev Yürütme(Yürütme Kodu, Yardımcı Parametre = "") Dışa Aktarma
Güvenlik kontrolü(); // Başka bir kullanıcı adına harici olarak bağlanırken kötü amaçlı kod yürütme girişimlerine karşı koruma Cevap = "0" //Hiçbir şeyin döndürülmesi gerekmiyorsa, kodda hata yoksa  //sadece Tamam'ı döndürecek  //Çünkü İletilen kod hatalar içerebilir, bu durumda yürütülmesini bir denemeyle tamamlayacağız. Yürütmeyi Deneyin(CodeExecute); // COM Bağlantısı (Libra Base Harici Bağlantı Modülü) aracılığıyla kodu başka bir bilgisayarda string olarak yürütünİstisna //bir hata varsa metnini döndür Yanıt = ErrorDetailView(ErrorInfo()); Deneme Sonu; Yanıtla Geri Dön; EndFunction Function TestConnection(InParameter, OutParameter) ExportSecurityCheck(); // Başka bir kullanıcı adına harici olarak bağlanırken kötü amaçlı kod yürütme girişimlerine karşı koruma. OutParameter = "Terazi tabanı ile COM bağlantısı üzerinden bağlantı mevcuttur!"; Doğruyu Döndür; Son Fonksiyon
BP 3.0'dan aşağıdaki parçayı çalıştırıyorum:
Girişim
Com = Yeni COMObject("V83.COMConnector"); Bağlantı = Com.Connect ("Dosya = ""C:\1 c\Base_1C\Libra""; Usr = ""ComExchange""; Pwd = ""1"";"); TellUser("Test başarıyla tamamlandı! Terazi veritabanına bağlantı var"); İstisna Hatası = ErrorDetailView(ErrorInfo()); TellUser("Libra tabanına COM bağlantısı yok! Ayrıntılar"+Hata); Com=Tanımsız; Geri dönmek ; Deneme Sonu; Çıkış = ""; = "1" olarak; If Connection.Communication Test(In, Out) Then TellUser("Terazi konfigürasyonu ile iletişim testi başarılı! Cevap: "+Out); Aksi halde TellUser("Terazi konfigürasyonu ile iletişim testi başarısız oldu! Cevap: "+Out); EndIf ;
Elbette, Execute(CodeString1C8) operatörüne girmenin mümkün olmayacağını anlıyorum, ancak harici bağlantı modülünün uzak prosedürünü ana veritabanı Connection.TestConnection(In, Out)'tan çağırırken böyle bir olasılık var mı? kodunu aynı hata ayıklayıcı oturumunda Güvenlik Kontrolü işlevinde ( ) çağırma prosedürlerinde girilsin mi?
Bu konuyla ilgili bulabildiğim belgelere zaten baktım. Her iki konfigürasyonda da her yerde hata ayıklamayı ve kesme noktalarını etkinleştirecek seçenekleri ayarladım. Her iki yapılandırıcıyı da başlattım.
Bu durumda, Güvenlik Kontrolü() prosedüründe harici bağlantı modülünün yanında daha fazla hata ayıklamak mümkün müdür?

Soru: COM bağlantısında yanlış IP adresi


Sunucular arasında V83.ComConnector üzerinden doküman aktarımını sağlayan işlem bulunmaktadır. Sunucu 1 (1C sürüm 8.2.19.90) her zaman Sunucu 2'ye (sürüm 8.3.8.2033) bağlanır. Bağlantı hattında sunucu 2'nin IP adresi vardı ve her şey yolunda gitti. Sunucu 1'in kendisinde de kurulu platformu sunucu 2'deki sürüm 8.3.9.2033 olarak gördüm (eğer bu önemliyse).

Sorun şu ki, Sunucu 2'de IP adresi değişti, işlem elbette çalışmayı durdurdu ve bağlantı hattına yeni bir IP girdiğimde işlem, açıklaması hala eski IP (!) ve metin olan bir hata üretiyor "Bağlantı kurma girişimi başarısız oldu, çünkü başka bir bilgisayardan gerekli yanıt gereken süre içinde alınamadı veya önceden kurulmuş bir bağlantı, zaten bağlı olan bir bilgisayardan gelen yanlış yanıt nedeniyle sonlandırıldı."

Her şeyi yeniden başlattılar, önbellekleri temizlediler vb., yöneticiler kendi açılarından her şeyin yolunda olduğuna yemin ediyorlar, bir sunucudan diğerine RDP vb. aracılığıyla giriş yapabilirsiniz.

Sorun ne olabilir, nasıl çözebilirim? İnternetin her yerine baktım ve böyle bir durum bulamadım!

Cevap:() %100 eminim! İkinci gün denediğimde, yazdığım gibi, hata ayıklayıcıyla bakıyorum, hatta bağlantı testi için aptalca bir tek hücreli işlem bile oluşturdum, o hata çıkıyor ve hepsi bu.

Soru: Farklı sürümlere COM bağlantısı


Herkese selam.
Farklı veritabanlarından farklı verileri toplayan ve her şeyi tek bir yığında toplayan "Konsolidasyon" adlı bir veritabanım var. Sorun şu ki, bu veritabanlarına com aracılığıyla bağlanmanız gerekiyor, ancak bunlar farklı sürümler, bu yüzden sonunda şöyle bir hata alıyorum:
Bağlantı hatası!(ExternalProcessing.TransferHistory.Form.Form.Form(12)) : Bağlam yöntemini çağırırken hata (Connect) : Bir istisna oluştu (V83.COMConnector.1 ) : İstemci ve sunucu sürümleri arasında uyumsuzluk 1 C:Enterprise Client sürümler farklı ve sunucu (8.3.8.1964 - 8.3.6.2332), istemci uygulaması: COM bağlantısı

Bir bağlantı kuruyorum, diğeri kopuyor...

Bir şekilde bileşen hizmeti aracılığıyla her sürüm için "kendi sınıflarınızı (bağlayıcılar)" oluşturabileceğinizi ve ardından sınıfın platform sürümüne karşılık gelen Yeni bir COM Nesnesi oluşturabileceğinizi biliyorum... belki yanılıyorum.

Bu sorunu aşmama yardım edin...

Cevap:İşte bu... Soruyu kaldıracağım..

Soru: Doldurma İşleminde Com Hatası


Merhaba.
8.2 Perakende 1.
8.1'e bağlanıyorum Tipik bir yapılandırma değil.
Veritabanına com üzerinden bağlanıp bir belge oluşturmaya çalışıyorum ancak “CreateDocument()” veya “GetObject()” çağrılırken prosedürde bir hata oluşuyor İşlemeDolgu. şek.

Aynı şeyi 8.1 veritabanının kendisinde de deniyorum ama hata yok ve Doldurma İşlemine de girmiyorum.
Ne yanlış olabilir?

Cevap: turboq, çarpık yazılmış bir belge modülü!

5 dakika sonra eklendi
O çağrılmadı! Derlemeye çalışıyor! Ancak ComConnector aracılığıyla bağlanırken Diyalog Modu sorunu MEVCUT OLMADIĞINDAN, belge modülü derlenemez.
Bu gibi durumlarda, bir nesne modülünde bir iletişim kutusuyla çalışmanın uygulanması gerektiğinde, ön işlemciye verilen talimatları kullanın.

Bu sizin hatanız değil, bağlandığınız veritabanındaki belge modülündeki bir hatadır.

Veritabanında kod istemcide yürütülür ve bir Diyalog Modu vardır, böylece her şey hatasız gerçekleşir

Bağlantı için ComConnector, V8.Application'ı kullanmayın, o zaman arayüz şeyleri kullanımınıza sunulacaktır

5 dakika sonra eklendi
=======================================================================================================================
harici bağlantının (SP) açıklamasından ComConnections hakkında okumanız gerekenleri kalın harflerle vurguladım

Tanım:

Genel olarak, 1C:Enterprise 8 ile harici bir bağlantı aracılığıyla çalışmak, 1C:Enterprise ile sunucu Otomasyonu modunda çalışmaya benzer. Temel farklar aşağıdaki gibidir:

  • Bir Otomasyon sunucusu durumunda, tam teşekküllü bir 1C:Enterprise 8 uygulaması başlatılır ve harici bir bağlantı durumunda, nispeten küçük bir işlem içi COM sunucusu başlatılır.
  • Harici bir bağlantı üzerinden çalışırken, 1C: Enterprise 8 kullanıcı arayüzünün organizasyonuyla şu veya bu şekilde ilgili işlevsellik mevcut değildir;
  • Harici bir bağlantıyla çalışırken, 1C: Enterprise 8 yapılandırmasının yönetilen uygulama modülü (normal uygulama modülü) kullanılmaz. Harici bir bağlantıyla çalışırken rolü, harici bağlantı modülü tarafından oynanır.
Harici bağlantı kullanıldığında, Otomasyon sunucusu kullanmaya kıyasla aşağıdaki avantajlar vardır:
  • Ayrı bir işletim sistemi süreci oluşturmaya gerek olmadığından ve tüm eylemler çağrı süreci içerisinde gerçekleştirildiğinden daha hızlı bağlantı kurulumu;
  • Erişimin düzenlenmesi işlemler arası iletişim gerektirmediği için 1C:Enterprise nesnelerinin özelliklerine ve yöntemlerine daha hızlı erişim;
  • İşletim sistemi kaynaklarının daha az tüketimi.
1C:Enterprise 8 verilerine harici bir bağlantı aracılığıyla erişimi düzenlemek için aşağıdaki eylem dizisi gerçekleştirilir:
  • bağlantının kurulduğu bir COM bağlantı yöneticisi oluşturulur;
  • COM bağlantı yöneticisinin Connect yöntemine bir çağrı yapılır. Connect yöntemi, 1C:Enterprise 8 bilgi tabanına harici bir bağlantı döndürür;
  • harici bir bağlantı aracılığıyla bağlantı kurulan bilgi tabanının geçerli yöntemlerine, özelliklerine ve nesnelerine erişim sağlanır.
Önemli! Kullanıcı arayüzünün olmaması nedeniyle tüm nesneler, özellikler ve yöntemler bir dış bağlantıda kullanılamaz.
Dış birleşim, genel bağlamına tam erişim sağlar. Bu nedenle, yöntemleri olarak harici bir bağlantı şunları içerebilir: sistem sabitleri, yapılandırıcıda belirtilen nesnelerin değerleri, erişim yöneticiler kullanılarak gerçekleştirilir (örneğin, sabitler, numaralandırmalar, dizinler, belgeler, belge günlükleri, raporlar) , işleme, özellik türleri planları, hesap planları, hesaplama türü planları, kayıtlar) ve ayrıca harici bağlantı modülünde Export anahtar sözcüğüyle bildirilen değişkenler.

Kullanılabilirlik:

Entegrasyon.

Soru: COM bağlantısı, özellik tipi planı


Görev, bir COM bağlantısı aracılığıyla bilinen bir karakteristik tür planında programlı olarak yeni bir öğe oluşturmaktır. Bağlantı kuruldu, burada her şey yolunda.

Şöyle yazıyorum:

TypeDescriptionTech = New TypeDescription("DirectoryLink.Karşı Taraflar"); AmaçÖzellikler = Bağlantı. Karakteristik Türlerinin Planları. Nesnelerin Kategorilerinin Özelliklerinin Amaçları. Ada Göre Bul(“Dizin “Bireyler””); NewElement = Bağlantı. Karakteristik Türlerinin Planları. Nesne Özellikleri. CreateItem(); Yeni Öğe. Ad = ÖzellikAdı; Yeni Öğe. ÖzellikAtaması = ÖzellikAtaması; Yeni Öğe. ValueType = AçıklamaTypesTech;

Son satır çalışmıyor. Ve bu anlaşılabilir bir durum, 1C'nin çalıştığı veritabanı için böyle bir tür buluyor, ancak ekli veritabanı için bir türe ihtiyacım var. Nasıl elde edilir?

Benim versiyonumda, "Özel Liste" değer türüne sahip bir öğe basitçe oluşturuldu. Prensipte çalışıyor ama bir şekilde çirkin.

Platformformu 8.3. COM bağlantısı bir önkoşuldur. Kullanımı olmayan çözümler ilgi çekici değildir.

Cevap:

Rulo. Teşekkürler, işe yaradı.

Soru: COM bağlantısı. Sorgu parametresi sorunu


İyi günler.
COM bağlantısı üzerinden istekte sorun var.

Perem TK; Adlandırma Dizi = COM.NewObject("Array"); TZNomenclature Döngüsü Adlandırmasındaki Her Satır İçin = COM.Directories.Nomenclature.GetLink(COM.NewObject("UniqueIdentifier", Abbr(String.Nomenclature.Identifier))); Adlandırma Array.Add(Adlandırma); EndCycle; If ArrayItems.Quantity()<>0 Sonra İstek = COM.NewObject("İstek"); request.Text = "SELECT |PricesItemsSliceLast.Commodities AS Adlandırma, |PricesItemsSliceLast.SalePrice AS Fiyat, |PricesItemsSliceLast.KDV Oranı, |PricesItemsSliceLast.RateNP |FROM |RegisterInformation.PricesSliceLast(|&DataDoc, | PriceType = &PriceType |Ve Envanter B ( &Array) Nomenclature) |Ve Envanter ve Malzemeler.ThisGroup = FALSE |Ve Kayıt Kuruluşu LINK Belgesi.SatışFiyatlarını Ayarlama) AS NomenclaturePricesSliceLast"; request.SetParameter("Öğe Dizisi", Öğe Dizisi); request.SetParameter("DataDoc", EndDay(ParametersStructure.DataDoc)); request.SetParameter("PriceType", COM.Directories.PriceTypes.GetRef(COM.NewObject("UniqueIdentifier", ParameterStructure.PriceType.Identifier))); TZ = COM.NewObject("Değer Tablosu"); TK = request.Execute().Upload(); Aksi halde TK = Yeni Değer Tablosu; TK.Columns.Add("Adlandırma"); TK.Columns.Add("Fiyat"); TK.Columns.Add("Yüzde"); TK.Columns.Add("KDV oranı"); endIf;

Sorun tam olarak öğede veya öğe dizisindedir; bunları parametre olarak ayarlarsanız istek boş fiyatlar döndürür; bu parametreyi hiç belirtmezseniz istek doğru verileri döndürür.
Aynı harici veritabanının sorgu konsolunda her şey sorunsuz bir şekilde işlenir.
Ne yanlış olabilir?

Cevap:

Bunu VremTable aracılığıyla yapmayı deneyin. Sütunlarla bir değerler tablosu oluşturun. Mesela doldurun, talebe çekin ve ardından dahili bir bağlantıyla uygulayın.

Soru: Dosya veritabanından dosya veritabanına Com bağlantısı


Günaydın. Com bağlantısını kullanarak başka bir dosya veritabanına bağlanmaya çalıştığım 8.3 dosya veritabanım var:

Dizin = "C:\Kullanıcılar\1C\İş Akışı (test)"; Kullanıcı = "Yönetici"; Şifre = ""; Bağlantı Parametreleri = "Dosya="+Directory+";Usr="+Kullanıcı+";Pwd="+Şifre+";"; V83 = Yeni COMObject("V83.COMConnector"); Bağlantı Denemesi = V83.Connect(ConnectionParameters); İstisna Raporu("Belge akışına bağlanılamadı!"); Deneme Sonu;


Hata açıklaması olmadan bir istisna atılır.
Her iki veritabanı da 8.3'te başlatılmaya zorlanıyor. Dizin ve kullanıcı doğru şekilde belirtildi. Sebebi ne olabilir?

Cevap:

V82 = New COMObject(" kod satırını yazıyorum V83.COMConnector"); ve kodun geri kalanı değişiklik olmadan aşağıdaki gibidir.

Kaynak ve hedef platformların sürümleri farklı olduğunda hata oluşur.

Kütüphanenin hangi sürümünün kaydedileceği ve nereye kaydedileceği belli değil mi?

Sanırım kitaplığı 8.2.18.61 sürümüne kaydetmem gerekiyor ve bunu bir yarasa dosyası aracılığıyla yapıyorum

regsvr32 /n /i:kullanıcı "C:\Program Files (x86)\1cv82\8.2.18.61\bin\comcntr.dll"
Duraklat

msk-test1c:1641 -- bu sunucu 8.3.5.1098
V82 = Yeni COMObject("V82.COMConnector"); Rapor ("Muhasebe 3.0'a Bağlan..."); Bağlanmayı Denemek = V82. Connect("srvr = ""msk-test1c:1641""; ref = ""db_test""; usr = ""Yönetici""; pwd = ""123"""); Bildir ("Yaşasın bağlantı kuruldu!"); İstisna Raporu("Veritabanına bağlantı yok!"); Rapor(HataAçıklaması()); // Bilgi = Hata Hakkında Bilgi(); // Rapor("Açıklama= "" + Bilgi.Açıklama + """); // Rapor ("ModülAdı= "" + Bilgi.ModülAdı + """); // Rapor ("HatNumarası=" + Bilgi.HatNumarası); // Rapor ("KaynakHat=) "" + Info.SourceString + """); Return; EndAttempt;

Kütüphane istemcide, 8.2 sunucusunda, 8.3 sunucusunda nereye kaydedilmeli? Aşağıdaki şekil.
(istemci-sunucu sürümü ve 1C veritabanının dosya sürümü için)

Cevap: Bir web hizmeti aracılığıyla bir terminalle iletişim kurma görevi vardı. Tabanı hafif diyelim. Ayrıca 0,5 veya daha hızlı mı?

Bunu söylemek zor; elimde yeterli veri yok. 0,5 saniyeden memnun kaldık, eksi üçüncü taraf bir makinedeki gereksiz 1C istemcisi, eksi 1C motorunu güncelledikten sonra kütüphane sürümlerinin senkronizasyonu, eksi kahrolası comsafearray, normal isimler ve alan türleri... Bizi düşündü diğer taraf (1C ile entegre olan bir sistem), 1C çağrılarını yeni bir "sistem iletişim modeline" yeniden yazmaları gerektiği ortaya çıktığında "anlamayacaklar". Ancak test veritabanında bir kez bir işlevi denedikten sonra, şimdi "hadi en kısa sürede hizmete geçelim" diye alay ediliyoruz.

Soru: Com nesneleri için TypeContains nasıl kullanılır?


If Attribute.Type.ContainsType(Type("DirectoryLink.Nomenclature")) Then There IsNomenclature = True; endIf;

"Props" başka bir 1c veritabanıyla olan com bağlantısından alındı. Karşılaştırma sırasında bir hata oluşuyor:

(ExternalProcessing.Cotained Recalculation.Form.Form.Form(183)): Bağlam yöntemini çağırırken hata oluştu (ContainsType)
If Attribute.Type.ContainsType(Type("DirectoryLink.Nomenclature")) Sonra
yüzünden:
Bir istisna oluştu (1C:Enterprise 8.3.8.1964): Tip uyuşmazlığı (parametre numarası "1")

Com'daki türle karşılaştırılması gerektiğinden şüpheleniyorum? Tip nasıl doğru şekilde kontrol edilir?

Cevap:

Yuvarlanmıyor. Sorunu şu şekilde çözdüm:
Genel modüldeki alıcı veritabanında harici bağlantı onay kutusu işaretlendiğinde kod şöyledir:

Function CheckAttributeType(Attribute, Type) Export Return Attribute.Type.ContainsType(Type(Type)); Son Fonksiyon

Bağlandığım veritabanında prosedürü Com aracılığıyla çağırıyorum:

ComConnection.Avis_ExchangeProcedures.CheckAttributeType(Attribute, "DirectoryLink.Nomenclature")



Bir hata fark ederseniz bir metin parçası seçin ve Ctrl+Enter tuşlarına basın
PAYLAŞMAK: