1c rutin ve arka plan görevlerini işleme. Rutin ve arka plan görevleri

Muhtemelen her 1C 8.3 programcısı er ya da geç belirli görevlerin bir programa göre yürütülmesini ayarlamak zorunda kaldı. Aşağıda bu mekanizmaların ayrıntılı bir açıklamasını vereceğim, bunun acemi 1C programcıları için yararlı bilgi olacağını umuyorum. Bu çok kullanışlıdır çünkü insan eylemi gerektirmez, rutin görev bir kez yapılandırılır ve programınıza göre çalışır.

Aşağıda bir örneği kullanarak ayrıntılı talimatlar bulacaksınız.

1C'de rutin ve arka plan görevleri nelerdir?

  • Zamanlanmış görevler belirli bir programa göre belirli bir eylemi gerçekleştirmek için tasarlanmış özel bir 1C Enterprise 8.3 mekanizmasıdır.
  • Arka plan işi- kullanıcının veya 1C 8.2 programcısının katılımı olmadan doğrudan amaçlanan eylemi gerçekleştiren rutin bir görev tarafından oluşturulan nesneler.

Zamanlanmış ve arka plan işlerinin mekanizması, DBMS'nin işlevselliği sayesinde istemci-sunucu modunda (SQL) çalışır. Bir dosya veritabanınız varsa, görev de yapılandırılabilir, ancak biraz farklı bir prensibe göre.

1C istemci-sunucu modunda arka plan işlerini ayarlama

İlk olarak, yeni bir meta veri nesnesi (rutin bir görev) oluşturalım. Görevime “Döviz Kurlarını Yükleme” adını vereceğim. Bu yapılandırma nesnesinin özellikler paletine bakalım:

1C'de 267 video dersini ücretsiz alın:

  • Yöntem adı— belirli bir zamanlamaya göre bir arka plan işinde yürütülecek prosedürün yolu. Prosedür ortak bir modülde olmalıdır. Standart olanları kullanmamanız, kendinizinkini oluşturmanız önerilir. Arka plan işlerinin sunucuda çalıştığını unutmayın!
  • Kullanım— rutin bir görevi kullanmanın işareti.
  • Önceden belirlenmiş— rutin görevin önceden belirlenip belirlenmediğini gösterir. Rutin görevin veritabanına yerleştirildikten hemen sonra çalışmasını istiyorsanız bu bayrağı belirtin. Aksi takdirde, İş Konsolu işlemeyi kullanmanız veya işin programlı olarak çalıştırılmasını sağlamanız gerekecektir.
  • Bir iş anormal şekilde sonlandırıldığında yeniden deneme sayısı— bir hatayla yürütüldüyse arka plan işinin kaç kez yeniden başlatıldığı.
  • İş anormal şekilde sonlandırıldığında yeniden deneme aralığı— bir hatayla tamamlanmışsa arka plan işinin ne sıklıkta yeniden başlatılacağı.

Ve en ilginç ortam Takvim:

Burada “Yöntem adı” alanında belirtilen prosedürün başlatma aralığını yapılandırabilirsiniz. Diyelim ki yapılandırdım

Dikkat! Rutin ve arka plan işlerinin DBMS düzeyinde yürütülmesini engellemeyi devre dışı bırakmayı unutmayın!

Bu, istemci-sunucu sürümünün yönetim yardımcı programında veya yeni bir veritabanı oluştururken yapılabilir:

1C dosya modunda rutin görevleri ayarlama

Dosya modunda bu tür işleri ayarlamak biraz daha zordur. Böyle bir görev için 1C programının ayrı bir oturumunun başlatılması gerekir. Bu genellikle oturumu her zaman çalışan bir "teknik" kullanıcı oluşturularak çözülür.

Dosya modunda, “RunTaskProcessing()” yöntemi başlatıldığında rutin bir iş başlatılır.

Belirli bir kullanıcı için bu yöntemi başka bir yöntem kullanarak çalışacak şekilde yapılandırabilirsiniz –

ConnectWaitHandler( <ИмяПроцедуры>, <Интервал>, <Однократно>).

  • Prosedür adı— bekleme işleyicisi olarak bağlanan prosedürün adı. Yönetilen bir uygulama modülünün (normal bir uygulama modülü) veya genel paylaşılan bir modülün dışa aktarılan prosedürünün adı. Prosedür istemcide bulunmalıdır.
  • Aralık- saniye cinsinden işlemlerin yürütülmesi arasındaki süre.
  • Bir kere- görevin bir kez olsun ya da olmasın nasıl tamamlanacağı.

ConnectWaitHandler, 3600 ) ;

1C yapılandırıcısında rutin bir görevin nasıl ayarlanacağını gösteren iki dakikalık bir video:

1C'deki zamanlanmış görevler, belirli prosedürleri belirli bir sıklıkta, bir programa göre gerçekleştirmek için tasarlanmıştır.

Rutin görevler bilgi tabanında saklanır ve bir başlatma planına sahiptir. Bilgi tabanı istemci-sunucu modunda çalışıyorsa, başlatma tamamen otomatiktir. Veritabanı dosya tabanlıysa aşağıdaki adımları uygulamanız gerekir:

  • rutin görevleri gerçekleştirmek için özel bir kullanıcı tahsis edin;
  • Bu kullanıcı altında işlevin periyodik olarak yürütülmesi gereken bir veritabanı açılmalıdır. ExecuteTaskProcessing().

Rutin bir görev oluşturma

Zamanlanmış görevler bir 1C yapılandırma meta veri nesnesidir. Genel grupta yer alır. Rutin görevlerin parametrelerini ve özelliklerini ele alalım.

Yöntem adı— belirli bir programa göre yürütülecek genel modüldeki dışa aktarma prosedürünün yolu. Prosedürün sunucuda yürütülmesi gerekir. Bu bakımdan rutin görevler bir nevi nesneye benzemektedir. Etkinliğe abone olun.

Anahtar— aynı türden birkaç rutin görev oluşturmanıza olanak tanır. Örneğin, birden fazla bilgi tabanı arasındaki veri senkronizasyonu, tek bir meta veri nesnesi kullanılarak gerçekleştirilebilir. Rutin görev, birkaç rutin görevin kendileri oluşturulacak (değişim için veri tabanlarının sayısına göre). Bu rutin görevler, özellik kullanılarak farklılaştırılacaktır. Anahtar. Aynı anahtarla yalnızca bir iş aynı anda yürütülebilir.

Kullanım— zamanlanmış görevin etkinleştirilip etkinleştirilmediğini gösteren bir bayrak.

Önceden belirlenmiş— burada önceden tanımlanmış dizin öğeleriyle bir benzetme yapabiliriz. Önceden tanımlanmış öğeler yapılandırıcıda oluşturulur ve kullanıcılar tarafından çalışmalarında kullanılır. Kullanıcı sıradan unsurları kendisi yaratır. Rutin görevlerde de durum aynıdır: Eğer önceden tanımlanmışsa, o zaman mevcuttur ve yapılandırıcıda oluşturulduktan hemen sonra bir programa göre yürütülebilir. Eğer bayrak Önceden belirlenmiş kurulu değilse, kullanıcının bu türden bir veya daha fazla rutin görev oluşturması gerekir (örneğin, İş Konsolu).

Bir iş anormal şekilde sonlandırıldığında yeniden deneme sayısı— bir arka plan işinin hatalı bir şekilde tamamlanması durumunda kaç kez yeniden başlatılacağını belirler.

İş anormal şekilde sonlandırıldığında yeniden deneme aralığı— bir hatayla tamamlanmışsa arka plan işinin ne sıklıkta yeniden başlatılacağını belirler.

Rutin görevlerle program çalışması

Bu örneklerde sıradan, önceden tanımlanmamış, rutin görevlerle çalışmayı ele alacağız.

Rutin bir görevin programlı oluşturulması

//Bir görev oluştur
"NormalGörevAdı") ;

//Zamanlanmış görevin anahtarını ayarlayın (isteğe bağlı)
Egzersiz yapmak. Anahtar = "GörevAnahtarı";

//Rutin görevi etkinleştir
Egzersiz yapmak. Kullanım = Doğru;

// Rutin bir görev yaz
Egzersiz yapmak. Yazmak() ;

Parametreleri değiştirmek için zamanlanmış bir görevin programlı olarak alınması

Bu örnekte, belirli bir türde yalnızca bir rutin görevin olduğunu varsayalım. Birkaç görev varsa, o zaman bilerek kodda uygun değişiklikleri yapmak zor değildir.


"RutinGörevAdı"] ) ) ;


Görevler ise. Miktar() > 0 Sonra
İş= İşler[ 0 ] ;


Aksi takdirde
Görev = DüzenliGörevler. RutinGörev Oluştur( "RutinGörevAdı") ;

EndIf ;

//Rutin görev Görev değişkenindedir. Parametrelerini değiştirebilirsiniz.

Rutin bir görevin zamanlamasını değiştirmek için iletişim kutusunu çağırma

Rutin bir görevin programıyla çalışmak için özel bir diyalog türü vardır. Hala bu türden yalnızca bir rutin görevimizin olduğunu varsayıyoruz.

//Gerekli türde rutin görevleri içeren bir dizi alın
Görevler = Düzenli Görevler. Get RoutineTasks(new Structure("Metadata" , Metadata.RoutineTasks[ "RutinGörevAdı"] ) ) ;

//Görev mevcutsa, koşula göre birdir
Görevler ise. Miktar() > 0 Sonra
İş= İşler[ 0 ] ;

//Görev yoksa oluştur
Aksi takdirde
Görev = DüzenliGörevler. RutinGörev Oluştur( "RutinGörevAdı") ;

EndIf ;

Zamanlama=Görev. Takvim;

//Rutin bir görevin zamanlamasını değiştirmek için bir iletişim kutusu oluşturun
Düzenleme İletişim Kutusu = RoutineTask'ın (Schedule) Yeni ScheduleDialog'u;

//Diyaloğu kullanıcıya göster ve zamanlama değişikliklerini işle
IfEditDialog. OpenModal() Daha sonra
Egzersiz yapmak. Zamanlama = EditDialog. Takvim;
Egzersiz yapmak. Yazmak() ;
EndIf ;

Kayıtları periyodik olarak temizlemek (örneğin, SCP yapılandırmasındaki "Nesne Sürümleri" bilgi kaydı), bir programa göre hesaplamalar yapmak, belgeleri belirli bir zamanda tamamlamak - bu, 1C rutin görevleri kullanılarak gerçekleştirilebilecek eylemlerin tam listesi değildir.

Görev oluştur

Amacımız çalıştırılabilir modülün kodunu anlatmak değil; rutin bir görevin genel çalışma prensiplerini ve oluşturulmasını göstereceğiz.

Rutin görevin yeri doldurulamaz:

  1. Eldeki görevin koşullarından biri belirli bir algoritmanın periyodik olarak yürütülmesi ihtiyacını içeriyorsa;
  2. Kodun operatörlerin ve veritabanı kullanıcılarının eylemlerinden bağımsız olarak yürütülmesi gerekiyorsa;
  3. Yürütülebilir bir prosedürün başlatılması, bilgi tabanı nesnelerinde meydana gelen harici olaylara bağlı değilse.

Bunu oluşturmak için “Yapılandırıcı” modunda bilgi tabanına gitmeniz gerekir. Daha sonra konfigürasyon ağacında "Rutin görevler" dalını bulun, bunlar "Genel" sekmesinde bulunur ve "Ekle" düğmesine tıklayın (Şekil 1)

Özellikler penceresine daha yakından bakalım (Şekil 2):
İncir. 2

  1. Ad, eş anlamlı ve yorum - bu alanların doldurulmasına ilişkin kurallar ve ilkeler tüm yapılandırma nesneleri için benzerdir ve bunları yeniden tanımlamaya gerek yoktur;
  2. Yöntem adı - gerekli algoritmayı mümkün olduğu kadar doğru bir şekilde tanımlayan genel modülün bir prosedürü (seçme düğmesine tıklamak, temsili genel modülün adından ve çeşitli sütunlardaki prosedürün adından oluşan mevcut prosedürleri açar) tablonun);
  3. Anahtar - zamanlanan görevin benzersizliğini değil, göreve bağlı olarak başlatılan arka plan sürecinin benzersizliğini belirler; bunun bir uzunluk sınırı vardır;
  4. Program – makalemizin ayrı bir paragrafını bu unsurun açıklamasına ayıracağız;
  5. Kullanım – bu kutunun işaretlenmesi görevin etkinliğini belirler; DOĞRU, görevin zamanlamaya göre başlatılacağı ve yürütüleceği anlamına gelir;
  6. Önceden tanımlanmış – eğer bir öğe bu onay kutusuna sahipse, bu görevler silinemez; konfigürasyon veritabanına kaydedildiğinde otomatik olarak oluşturulurlar;
  7. Tekrar sayısı - yürütme sırasında bir istisna meydana gelirse, yeniden başlatılır, böylece sonsuz bir döngü oluşmaz, program yeniden başlatma sayısını sınırlar;
  8. Yeniden deneme aralığı – anormal şekilde tamamlanan görevlerin yeniden başlatılması arasındaki saniye cinsinden süre.

Programa daha yakından bakalım.

Rutin görevlerin zamanlaması

Şek. 3

Öncelikle pencerenin alt kısmına dikkat etmelisiniz, burası görevin ne sıklıkta ve ne zaman gerçekleştirileceğine dair ayrıntılı bilgilerin görüntülendiği yerdir.

"Genel sekmesi:

  • Görev başlangıç ​​tarihi;
  • İşleme bitiş tarihi;
  • Görev tekrarının sıklığı.

Bu sekmede tarih belirtilmezse görev için son tarih belirlenmeyecektir.

“Günlük” sekmesi (Şek. 4)
Şekil 4

Görevin başlangıç ​​ve bitiş zamanına ve gün içinde başlatılma sıklığına ilişkin giriş alanlarına ek olarak, yürütme sıklığının ayrıntılı konfigürasyonu için tablo şeklinde bir bölüm içerir.

“Günlük” ve “Haftalık” sekmeleri ilgili dönemlere ilişkin bilgileri içerir.

Operasyonun özellikleri

İşin istemci-sunucu versiyonunda, rutin görevlerin yürütülmesi sunucu araçları tarafından belirlenir. Yönetim konsolundan belirli bir veritabanına yönelik görevleri çalıştırma özelliğini etkinleştirebilir veya devre dışı bırakabilirsiniz.

İşin dosya sürümünde durum çok daha karmaşıktır. Belirli bir platform sürümünden önce, arka plan ve rutin prosedürler yalnızca sistem belirli bir kullanıcı altında başlatıldığında ExecuteTaskProcessing() yöntemi etkinleştirildiğinde yürütülüyordu. Bu durumda yöntemi başlatan kullanıcı programda olduğu sürece algoritmalar periyodik olarak çalıştırılıyordu.

Şu anda, işin dosya sürümündeki arka plan işlerinin çalışması, veritabanında yetkili kullanıcılar arasında eşit olarak dağıtılmaktadır; program, AllowExecuteSheduledJobs ek parametresiyle başlatıldıysa, rutin çalışmadan sorumlu olacak olan bu işlemdir.

Veritabanının bulunduğu klasördeki DoNotCopy.txt dosyasını silerek veya yeniden adlandırarak, dosya modunda çalışan bir veritabanındaki arka plan ve rutin çalışmayı tamamen devre dışı bırakabilirsiniz. Bu dosyanın varlığı platforma işin veritabanının bir kopyasında değil orijinalinde yapıldığını bildirir.

Ayrıca standart 1C teslimatlarında, planlanan çalışmaları “Yapılandırıcıya” girmeden doğrudan programdan yönetmek mümkün hale geldi. “ZUP” konfigürasyonu, sürüm 3.1.3.223'te, yönetim formunu Yönetim->Bakım->Rutin işlemler->Rutin ve arka plan görevleri menüsünden açabilirsiniz (Şekil 5)
Şekil 5

Açılan form sezgisel bir arayüze sahiptir ve şunları yapmanıza olanak tanır:


Ayrıca bir görevi doğrudan formdan da başlatabilirsiniz.

" İçinde sistem arayüzüyle ilgili olmayan, ancak 1C: Enterprise 8 platformunun sağlanan işlevselliğini önemli ölçüde genişleten yeni özelliklere bakacağız.

Uygulanabilirlik

Makalede 1C:Enterprise platformunun 8.3.4.437 sürümü tartışılmaktadır. Makalede açıklanan tüm işlevler 8.3.11 sürümüne güncellendi.

1C:Enterprise 8.3'teki diğer yenilikler

1C:Enterprise 8.3 platformunun yeniliklerini tanımaya devam edelim.

Dosya bilgi tabanındaki arka plan ve rutin görevler

Birçok tipik platform konfigürasyonunda 8.2 dosya sürümünde görevlerin yürütüldüğü kullanıcıyı belirten bir sabit vardı.

Sistem bu kullanıcı altında çalışmaya başladığında, belirli bir periyodiklikle yerleşik dil yöntemini çağıran bir bekleme işleyicisi bağlandı. ExecuteTaskProcessing().

Bu yaklaşım, dosya veritabanındaki rutin görevlerin kullanılmasında ek zorluklar ve sakıncalar yarattı.

Bu, aşağıdaki gibi konfigürasyonlarla çalışırken özellikle kritik olabilir: “Kapsamlı otomasyon” veya “Üretim İşletme Yönetimi” Düzenleyici görevlerin oldukça önemli bir rol oynadığı.

Bu Dosya IB ise O Zaman
=
Constants.UserForExecutingRoutineTasksInFileVariant.Get();
Eğer chValueVariable(“glMevcutKullanıcı”) =
Kullanıcı YürütülecekTaskRegl Daha sonra
// saniyelik aralıklarla rutin görevlerle çalışma prosedürünü çağırıyoruz
DestekRegularTaskForFileVersion();
IntervalForPoll=
Constants.IntervalForPollingRoutineTasksInFileVariant.Get();
Eğer IntervalForPoll= Tanımsız
VEYA IntervalForPoll= 0 O zaman
IntervalForPoll= 60 ;
EndIf ;
ConnectWaitHandler(“RoutineTaskForFileVersion Desteği”,
IntervalForPoll);
EndIf ;
EndIf ;

Platformda 8.3 global bağlam yöntemi çağrısını kullanmadan dosya bilgi tabanındaki arka plan ve rutin işlerin çalışmasını uyguladı ExecuteTaskProcessing().

Arka plan ve rutin görevler doğrudan istemci uygulamalarından birinde (ince, kalın istemci) veya bir web sunucusu uzantısı tarafından gerçekleştirilir.

Bir oturum tarafından başlatılan bir arka plan işi, onu başlatan aynı istemci uygulaması tarafından yürütülür.

Arka plan işleri sırayla yürütülür; Bir istemci uygulamasında aynı anda yalnızca bir arka plan görevi (rutin olanlar dahil) yürütülebilir.

Rutin görevler yalnızca bir istemci uygulaması tarafından gerçekleştirilir. Zamanlanmış görevlerin başlatılmasını kontrol etmek için bir komut satırı anahtarı kullanılır /AllowExecuteZamanlanmışİşler.

Rutin görevler, başlangıç ​​sırasındaki ilk istemci uygulaması tarafından yürütülür ve bu uygulamanın rutin görevleri yürütmesi yasak değildir (oturumun yasaklanması için oturumun komut satırı parametresiyle başlatılması gerekir). /AllowExecuteZamanlanmışİşler -Kapalı).

Bu oturum sona erdiğinde yürütme, kalan çalışan oturumlardan herhangi birine geçer.

İstemci uygulamasının başlatma satırında rutin görevlerin çalıştırılmasının gerekliliği açıkça belirtiliyorsa (komut satırında belirtilir) /AllowExecuteScheduledJobs -Force), daha sonra diğer oturumların varlığına bakılmaksızın rutin görevler yürütülmeye başlar.

Rutin görevler her 60 saniyede bir işlenir.

Uygulama çözümünün (dosya sürümünde) rutin görevlerinin, istemci uygulamasının başlatılmasından en geç 1 dakika sonra yürütülmeye başladığını unutmayın. 8.3.8 sürümünden itibaren bu süre iki katına çıkarıldı ve bu nedenle rutin görevler, istemci başlatıldıktan maksimum 2 dakika sonra (dosya sürümünde) yürütülmeye başlanıyor.

Bu karar, uygulamanın başlatılmasındaki gecikmenin azalmasından kaynaklanmaktadır. Ayrıca 8.3.7 sürümü, mevcut oturumun bir arka plan iş oturumu olduğunu hızla belirleme olanağını da ekledi. Bu, yeni genel bağlam yöntemi GetCurrentInfoBaseSession()'ın yanı sıra bilgi tabanı oturumu için yeni bir yöntem kullanılarak uygulanır. GetBackgroundTask().

Aşağıda yukarıdakileri gösteren kod verilmiştir:

Büyütmek için görselin üzerine tıklayın.

Sağlama toplamlarının hesaplanması

Platform artık veri sağlama toplamlarını hesaplamak için mekanizmalar içeriyor.

Sağlama toplamının (hash), belirli bir algoritma uygulanarak bir veri kümesinden hesaplanan ve iletim veya depolama sırasında verinin bütünlüğünü kontrol etmek için kullanılan bir değer olduğunu hatırlayalım.

Hash'ler, verilerin kimliğini kontrol etmek için kullanılabilir (örneğin, aktarırken dosyanın hasar görmediğinden emin olmanız gerekir; dosyada değişiklik yapılıp yapılmadığını kontrol etmeniz ve eğer öyleyse, onu tekrar veritabanına yüklemeniz gerekir) .

Bu amaçla platformda bir nesne hayata geçirildi. HashingVerileri, sunucuda, kalın istemcide, harici bağlantıda ve ayrıca mobil uygulama sunucusunda mevcuttur.

Bu nesnenin iki yöntemi vardır: Eklemek() Ve Dosya Ekle() parametrelerde iletilen verileri dikkate alarak karma toplamını güncelleyen.

platformu 8.3.4.437 aşağıdaki karma fonksiyonlarının hesaplanmasını destekler: CRC32, MD5, SHA1, SHA256. Ancak işlevler SHA1 Ve SHA256 mobil platformda desteklenmemektedir.

Basit bir örneğe bakalım. Program dizinindeki sunucuda bir dosyanın olduğu varsayılmaktadır “ ragent.exe" Hesaplamak gerekiyor MD5-sum bu dosya için.

Bunu yapmak için, komutu yerleştireceğimiz formda harici bir işlem oluşturacağız. Hesaplamak. İşleyici aşağıdaki kodu içerir:

&İstemcide
Prosedür Hesaplama (Komut)
Sonuç = HesaplaSunucuda();
Rapor(Dize(Sonuç));
Prosedürün Sonu
&Sunucuda
İşlev HesaplaSunucuda()
Karma = Yeni HashingVerileri(HashFunction.MD5);
Hash.AddFile(KatalogProgramlar() + “ragent.exe”);
Hash.HashSum'u döndürün;
Son Fonksiyon

Yöntemde platform 8.3.10+ sürümünde Eklemek() nesne HashingVerileri Karma toplamların güncellenmesiyle ilgili çeşitli uygulamalı sorunların çözümünde kullanımlarını büyük ölçüde basitleştiren bir ikili veri akışını kullanmak mümkün hale geldi.

Protokollerin korumalı sürümleriyle çalışma SMTP/POP3

Platformda 8.3 protokollerin korumalı versiyonlarını kullanmak mümkün hale geldi SMTP/POP3(şartlar var SMTPS/POP3S veya SSLSMTP/SSLPOP3).

Nesne için İnternetPosta Profili uygulanan yeni özellikler:

  • SSLSMTP'yi kullanın;
  • SSLPOP3'ü kullanın;
  • Yalnızca SecureAuthenticationSMTP;
  • Yalnızca POP3 Güvenli Kimlik Doğrulaması.

Özellikler SMTP Kimlik Doğrulaması Ve POP3 kimlik doğrulaması nesne İnternetPosta Profili ve ayrıca transferler SMTP Kimlik doğrulama yöntemi Ve POP3 Kimlik Doğrulama Yöntemi Bunların kullanılması tavsiye edilmez; uyumluluk açısından desteklenirler.

Güvenli bir protokol kullanma SMTPS'ler adresinden posta göndermeyi mümkün kılar 1C posta kutusu kullanma Google.

Bir örneğe bakalım. Forma, mektubun konusunu ve alıcının adresini girmek için alanlar ve mektubun metnini girmek için biçimlendirilmiş bir belge alanı yerleştireceğiz.

Büyütmek için görselin üzerine tıklayın.

Düğmeye bastığınızda Göndermek Aşağıdaki kod yürütülecektir:

&İstemcide
Prosedür Gönderim (Komut) Postası = Yeni InternetMail; Profil = Yeni İnternetPosta Profili;
Profil.SMTPSunucuAdresi= “smtp.googlemail.com” ;
Profil.KullanıcıSMTP= “[e-posta korumalı]” ;
Profil.PasswordSMTP= “ŞİFRE” ;
Profile.UseSSLSMTP= Doğru;
Profil.SMTPPort = 465; Girişim
Mail.Connect(Profil);
İstisna
Rapor(HataAçıklaması());
Geri dönmek ;
Deneme Sonu; PostaMesajMetni= “” ;
Ekler = Yeni Yapı;
Text.GetHTML(PostaMesajMetni, Ekler); PostaMesajı= Yeni İnternetPostaMesaj;
MailMessage.Recipients.Add(Kime );
MailMessage.Subject= Konu;
MailMessage.Texts.Add(PostaMesajMetni,
MailMessageTextType.HTML); Posta.Gönder ( PostaMesajı); Posta.Bağlantıyı Kes();
Prosedürün Sonu

Örneğimizde, SMTP sunucusu alıcıya/alıcılara e-posta gönderemezse yöntemin Mail.Send(MailMessage) bir istisna attı. Bu, geliştiriciler için bazı rahatsızlıklara neden oldu, çünkü... İstisnanın atılmasının nedeni açık değildi.

Sürüm 8.3.9'da bu davranış değişti ve artık Send() yöntemi, anahtarı alıcı olan ve değeri posta sunucusundan gelen tanı olan bir eşleşme döndürüyor. Bu, her alıcıya e-posta iletisi gönderilememesinin nedenlerini doğru bir şekilde belirlemenize olanak tanır. 8.3.8 sürümüyle uyumluluk modunda davranış değişmedi.

Çift taraflı yazdırma

Platformda 8.2 Platformun kendisi çift taraflı yazdırmayı yönetmiyordu; bu işlev yalnızca yazıcı sürücüsü kullanılarak kontrol edilebiliyordu.

Platformda 8.3 bir elektronik tablo belgesi, bir grafik diyagramı (yerleşik dilden ve etkileşimli olarak) ve bir metin belgesi (yalnızca etkileşimli) için çift taraflı yazdırmayı kontrol etmek mümkün hale geldi.

Sistem numaralandırmaları yerleşik dilde göründü:

  • Çift Taraflı Yazdırma Türü(Yok, FlipUp, FlipLeft);
  • (Otomatik, MirrorTop, MirrorLeft, Kullanmayın).

Ve nesneler için TabloluBelge Ve GrafikŞemasıözellikler ortaya çıktı Çift taraflı yazdırma Ve Sayfa Düzenlemelerinin Değişimi Yazdırılan sayfaların düzenini değiştirebileceğiniz.

Platform sürümü 8.3.9'da DuplexPrintType sistem numaralandırması yeni bir katma değere sahiptir YazıcıAyarlarını Kullan. Bu değerin seçilmesi, sistem belgeleri yazdırılırken yazıcı ayarlarının kullanılmasına olanak sağladı. 8.3.8 uyumluluk modunda davranış değişmez ve ilgili yazıcı ayarları göz ardı edilir.

Bir web sunucusunda bilgi tabanı yayınlamaya yönelik iletişim kutusu daha işlevsel hale getirildi. Artık yapılandırıcıdan yayınlamak tüm dosya parametrelerini ayarlamanıza olanak tanıyor varsayılan.vrd.

Bir web istemcisini ve Web hizmetlerini yapılandırıcı aracılığıyla yayınlamaya yönelik iletişim kutusu için aşağıdakiler uygulanır:

  • Web hizmetlerinin kullanılabilirliğini varsayılan olarak kontrol etme yeteneği (özellik pointEnableCommon eleman ws);
  • dosya sürümünde arka plan işlerinin yürütülmesini kontrol etme yeteneği (özellik izin veryürütünzamanlanmışişler eleman ws).

Eğer onay kutusu “Web Hizmetlerini Varsayılan Olarak Yayınla” yer iminde "Temel" yüklendiğinde, yayın güncellenirken seçilen Web hizmetleri otomatik olarak yayınlanacaktır.

Aksi takdirde Web hizmetleri yayınlanamaz olarak işaretlenecektir. Bu bayrak özelliğe karşılık gelir pointEnableCommon eleman ws dosyada varsayılan.vrd, bir web istemcisi ve Web hizmetleri kurmak için tasarlanmıştır.

Bağlanmak pointEnableCommon ws öğesi, bu bilgi tabanında açıkça kullanım izni belirtilmeden yayınlanan Web hizmetlerinin kullanılma olasılığından sorumludur (özellik olanak vermek eleman nokta).

Özelliğin bir değeri varsa doğru, ardından öznitelik değerinin açıkça belirtilmediği tüm Web hizmetleri olanak vermek eleman nokta kullanımına izin verilecektir.

Aksi takdirde bu tür Web hizmetlerinin kullanımı yasaklanacaktır.

Ayarlar “Dosya modunda arka plan işleri”öznitelikle eşleşir izin veryürütünzamanlanmışişler dosyadaki ws öğesi varsayılan.vrd.

Bağlanmak izin veryürütünzamanlanmışişler bilgi tabanının dosya sürümü için web sunucusu uzantısı tarafından rutin görevleri yürütme yeteneğini kontrol eder.

Özellik aşağıdaki değerleri alabilir:

  • kapalı– bu durumda web sunucusu uzantısı rutin görevleri gerçekleştirmeyecektir. Rutin görevler, bir web sunucusu kullanmadan doğrudan bilgi tabanına bağlanan bir istemci uygulaması (varsa) tarafından gerçekleştirilecektir.
  • güç– bu durumda web sunucusu uzantısı rutin görevleri yerine getirecektir.
    Bu özelliğin değeri belirtilmezse, rutin görevler bilgi tabanına ilk bağlantının kurulacağı uygulama tarafından gerçekleştirilecektir.

Web hizmetindeki yayınlama penceresi, platformun mevcut sürümünde daha da kullanışlı ve ergonomik hale geldi. Artık OpenID kimlik doğrulamasını açıklayan parametreler ayrı bir sekmeye yerleştirildi.

Bilgi bankası nesnelerinin numaralandırılması

Platformda 8.3 Bilgi tabanı nesnelerinin otomatik olarak numaralandırılmasına yönelik mekanizma yeniden düzenlendi. Bir nesneyi kaydederken bir sayının veya kodun benzersizliği (bir sayının veya kodun otomatik olarak oluşturulması sonucunda elde edilenler dahil) her zaman kontrol edilir.

Bir sayı veya kodun benzersizliğinin ihlaline ilişkin mesaj metnine hangi sayı veya kodun benzersiz olmadığına dair bir gösterge eklenmiştir.

Boş bir numaranın veya kodun kullanımı değişti. Numara veya kodun daha büyük (sıralı) ön ekine sahip önceden verilmiş numaralar veya kodlar varsa, serbest bırakılan numaralar veya kodlar kullanılmadan yeni bir numara veya kod atanır.

Veri kompozisyon sistemi ifade dilinin toplu işlevleri

Veri kompozisyon sisteminin ifade dilinde yeni toplama işlevleri uygulanmıştır:

  • Her();
  • Herhangi();
  • StandardDeviationofPopulation();
  • StandardSampleDeviation();
  • VarianceSamples();
  • Popülasyonun Varyansı();
  • KovaryansNüfus();
  • SampleCovariance();
  • Korelasyon();
  • RegresyonEğimi();
  • RegresyonSegment();
  • RegresyonSayısı();
  • RegresyonR2();
  • RegresyonAverageX();
  • RegresyonOrtalamaY();
  • RegresyonAverageSXX();
  • RegresyonAverageSYY();
  • RegresyonOrtalamaSXY().

İsimlerinden de anlaşılacağı gibi bunlar istatistiksel işlevlerdir; bu, geliştiricilerin istatistiksel verileri hesaplamak için prosedürler geliştirmek zorunda kalmadan karmaşık raporlar oluşturma fırsatına sahip olduğu anlamına gelir.

Büyütmek için görselin üzerine tıklayın.

Şekilden de görebileceğiniz gibi, açılır listede yeni işlevler yoktur, ancak bunları manuel olarak girerseniz herhangi bir hata mesajı olmayacak ve rapor oluşturulacaktır:

Ayrıca yeni bir özellik de ilgi çekicidir SınıflandırmaABC(). Fonksiyonun sonucu, 1'den başlayarak sınıf numarası olacaktır (1, A sınıfına, 2, B sınıfına, 3, C sınıfına vb. karşılık gelir).

Bu fonksiyonun nasıl çalıştığını gösterelim. Yeni bir harici rapor oluşturalım “Malların sınıflandırılması” istek üzerine:

SEÇMEK
Ürün tüketimiÜrünler.Ürün,
Ürün TüketimiÜrünler.Miktar
İTİBAREN
Belge.Malların Tüketimi.Mallar NASIL Ürün tüketimiÜrünler

Yeni bir hesaplanan alan tanımlayalım Sınıf:

Büyütmek için görselin üzerine tıklayın.

Kaynakları şu şekilde yapılandıralım:

Büyütmek için görselin üzerine tıklayın.

Kullanıcı modunda rapor şöyle görünür:

Sonuç olarak, 1C 8.3 platformunda baskıdan baskıya ACS mekanizmasının sürekli olarak geliştirildiğini ve iyileştirildiğini ve "acemi" makalemiz çerçevesinde bu değişiklikleri tam olarak sunmanın mümkün olmadığını not ediyoruz. Evet, bu gereksiz görünüyor, çünkü platformun mevcut sürümü üzerinde çalışırken, bu mekanizmanın çalışmasının şu veya bu yönünü analiz etmenize yardımcı olacak çeşitli yardım sistemlerini her zaman kullanabilirsiniz.

Ek olarak, bu mekanizmayla çalışırken tüm incelikleri ve tuzakları atomlara ayıran Veri Kompozisyon Sistemi ile ilgili 1C 8.3'teki raporların profesyonel geliştirilmesi ayrı kursumuzu da unutmayın. Demoyu kendiniz inceleyin.

O halde ara sonuçları özetleyelim. Bu noktaya kadar, Taksi arayüzünün ve yönetilen formların yeni özelliklerinin yanı sıra platformun daha önce sağlanmamış bazı yetenekleriyle de tanıştık. Artık yapılandırıcıda geliştiricinin kullanımına hangi kullanışlı özelliklerin sunulduğunu görmenin zamanı geldi.

1C'de çalışırken, bir veya başka bir eylemi gerçekleştirmek için başlatılması veya programlanması gereken birçok rutin işlem vardır, örneğin: belgeleri yayınlamak veya bir web sitesinden 1C'ye veri yüklemek.

Yakın zamanda bir makale yayınladım: Bunu otomatikleştirmenin zamanı geldi:

Rutin ve arka plan görevleri

İş motoru, herhangi bir uygulamayı veya işlevi bir programa göre veya eşzamansız olarak gerçekleştirmek üzere tasarlanmıştır.

Görev mekanizması aşağıdaki görevleri çözer:

  • Sistem yapılandırma aşamasında düzenleyici prosedürleri tanımlayabilme;
  • Belirtilen eylemlerin programa göre yürütülmesi;
  • Belirli bir prosedüre veya fonksiyona eşzamansız olarak çağrı yapılması, ör. tamamlanmasını beklemeden;
  • Belirli bir görevin ilerleyişini takip etmek ve tamamlanma durumunu (başarılı olup olmadığını gösteren bir değer) elde etmek;
  • Mevcut görevlerin bir listesinin alınması;
  • Bir veya daha fazla görevin tamamlanmasını bekleyebilme;
  • İş yönetimi (iptal olasılığı, yürütmenin engellenmesi vb.).

İş mekanizması aşağıdaki bileşenlerden oluşur:

  • Rutin görevlerin meta verileri;
  • Düzenli görevler;
  • Arka plan işleri;
  • Görev Zamanlayıcısı.

Arka plan işleri &, uygulama görevlerini eşzamansız olarak gerçekleştirmek üzere tasarlanmıştır. Arka plan görevleri yerleşik dil kullanılarak uygulanır.

Zamanlanmış görevler ve uygulama görevlerini bir zamanlamaya göre gerçekleştirmek için tasarlanmıştır. Rutin görevler bilgi tabanında saklanır ve konfigürasyonda tanımlanan meta verilere göre oluşturulur. Bir düzenleme görevinin meta verileri ad, yöntem, kullanım vb. bilgileri içerir.

Rutin bir görev, rutin görevle ilişkili yöntemin hangi zamanlarda yürütülmesi gerektiğini belirleyen bir zamanlamaya sahiptir. Program, kural olarak bilgi tabanında belirtilir, ancak aynı zamanda yapılandırma aşamasında da belirtilebilir (örneğin, önceden tanımlanmış rutin görevler için).

Görev zamanlayıcı, rutin görevlerin yürütülmesini planlamak için kullanılır. Zamanlanan her iş için zamanlayıcı, geçerli tarih ve saatin zamanlanan işin zamanlamasına uyup uymadığını düzenli olarak kontrol eder. Eşleşirse, zamanlayıcı bu görevi yürütmeye atar. Bunu yapmak için, bu zamanlanmış görev için zamanlayıcı, asıl işlemi gerçekleştiren bir arka plan görevi oluşturur.

Açıklamanın bu kadar yeterli olduğunu düşünüyorum; hadi uygulamaya geçelim:

Rutin bir görev oluşturma

Yöntem adı– belirli bir zamanlamaya göre bir arka plan işinde yürütülecek prosedürün yolu. Prosedür ortak bir modülde olmalıdır. Standart ortak modüllerin kullanılması değil, kendinizinkini oluşturmanız önerilir. Arka plan işlerinin sunucuda çalıştığını unutmayın!

Kullanım– rutin bir görevi kullanmanın işareti.

Önceden belirlenmiş– rutin görevin önceden belirlenip belirlenmediğini gösterir.

Rutin görevin veritabanına yerleştirildikten hemen sonra çalışmasını istiyorsanız özelliği belirtin. Önceden belirlenmiş. Aksi takdirde, "İş Konsolu" işlemini kullanmanız veya görevi programlı olarak çalışacak şekilde tetiklemeniz gerekecektir.

Bir iş anormal şekilde sonlandırıldığında yeniden deneme sayısı– bir hatayla yürütüldüyse arka plan işinin kaç kez yeniden başlatıldığı.

İş anormal şekilde sonlandırıldığında yeniden deneme aralığı– bir hatayla tamamlanmışsa arka plan işinin ne sıklıkla yeniden başlatılacağı.

Bir program ayarlama

Takvim görevi tamamlama:

Her saat, sadece bir günTekrarDays Dönemi = 0, TekrarDays Dönemi = 3600
Her gün günde bir kezTekrarDays Dönemi = 1, TekrarDays Dönemi = 0
Bir gün, bir kezDönemTekrarGünler = 0
Gün aşırı günde bir kezDönemTekrarGünler = 2
Her gün 01.00 ile 07.00 arası her saat başıPeriodRepeatDays = 1RepeatPeriodDuringDay = 3600BaşlangıçZamanı = 01.00

Bitiş Saati = 07.00

Her cumartesi ve pazar saat 09.00'daTekrarGünleri Dönemi = 1HaftaGünleri = 6, 7BaşlangıçZamanı = 09.00
Bir hafta boyunca her gün, bir haftayı atlayınDönemTekrarGünleri = 1DönemHaftaları = 2
Saat 01.00'de bir kezBaşlama Saati = 01.00
Her ayın son günü saat 9:00'da.PeriodRepeatDays = 1DayInMonth = -1StartTime = 09.00
Her ayın beşinci günü saat 9:00'daDönemTekrarDays = 1DayInMonth = 5BaşlangıçZamanı = 09.00
Her ayın ikinci Çarşamba günü saat 9:00'daDönemTekrarDays = 1DayWeekMonth = 2DaysWeek = 3

Başlama Saati = 09.00

Dosya ve istemci-sunucu değişkenlerinde arka plan işlerini yürütme özellikleri

Dosya ve istemci-sunucu sürümlerinde arka plan işlerini yürütme mekanizmaları farklıdır.

Dosya sürümünde arka plan işlerini gerçekleştirecek özel bir istemci işlemi oluşturmanız gerekir. Bunu yapmak için, istemci işleminin periyodik olarak küresel bağlam işlevi ExecuteJobProcessing'i çağırması gerekir. Bilgi tabanı başına yalnızca bir istemci işlemi arka plan işlerini işlemelidir (ve buna göre bu işlevi çağırmalıdır). Arka plan işlerini işlemek için bir istemci işlemi oluşturulmadıysa, iş motoruna programlı olarak erişildiğinde "İş Yöneticisi etkin değil" hatası görüntülenecektir. Diğer işlevler için arka plan işlerini işleyen bir istemci işleminin kullanılması önerilmez.

İstemci işlemi arka plan işlerini işlemeye başladığında, diğer istemci işlemleri arka plan iş motoruna programlı olarak erişebilir; arka plan işlerini çalıştırabilir ve yönetebilir.

İstemci-sunucu versiyonunda Arka plan işlerini yürütmek için, fiziksel olarak küme yöneticisinde bulunan bir görev zamanlayıcı kullanılır. Tüm sıraya alınmış arka plan işleri için, zamanlayıcı en az yüklü çalışan işlemini alır ve bunu karşılık gelen arka plan işini çalıştırmak için kullanır. Çalışan süreç işi yürütür ve zamanlayıcıya yürütme sonuçlarını bildirir.

İstemci-sunucu sürümünde rutin görevlerin yürütülmesini engellemek mümkündür. Rutin görevlerin yürütülmesi aşağıdaki durumlarda engellenir:

  • Bilgi tabanına rutin görevlerin açık bir şekilde engellenmesi eklenmiştir. Kilit, küme konsolu aracılığıyla ayarlanabilir;
  • Bilgi tabanında bağlantı bloğu bulunmaktadır. Kilit, küme konsolu aracılığıyla ayarlanabilir;
  • True parametresine sahip SetExclusiveMode() yöntemi yerleşik dilden çağrıldı;
  • Diğer bazı durumlarda (örneğin, veritabanı yapılandırmasını güncellerken).

Zamanlanmış görevlerin başlatılmasını ve görüntülenmesini işleme buradan indirebilirsiniz.