Arka planda iş süreci anormal şekilde sonlandırıldı. Planlanmış ve arka plan işleri (1Cv8) Arka plan işi süreci anormal şekilde sonlandırıldı

Soru: Arka plandaki iş süreci anormal şekilde sonlandırıldı...


Herkese iyi günler ve iyi haftalar!)
Kurumsal Muhasebe, revizyon 3.0 (3.0.46.11).
Platform 8.3.9.2033.
Belgeleri bir grupta deftere naklederken, "Arka plandaki iş süreci anormal şekilde sonlandırıldı" hatası oluşuyor. Hiçbir sebep gösterilmedi...
SQL sunucusunu yeniden başlatmak, sunucu 1C (asla bilemezsiniz) yardımcı olmuyor ... Belki birileri benzer bir sorunla karşılaştı ??? Bu hatanın ortaya çıktıktan sonra söylemek bile zor çünkü uzun süredir grup tutma (ayın kapanışı) kullanmamışlar...

Cevap:() () Tekrar iyi günler) Teknoloji günlüğünü açtım ve böyle ilginç şeyler buldum (belki sorunun ne olduğunu biliyorsunuzdur?):
Soket olmayan bir nesne üzerinde işlem yapılmaya çalışıldı...
İşlem biter. Giden arama engellendi...
Barındırılan hizmete sahip sunucu bulunamadı ...

Soru: Arka plan işleri


Platform 1C: Enterprise 8.3 (8.3.9.2170), confa BP 3.0.
Konfigürasyonda harici veri kaynakları (DBMS tipi - OracleDatabase) aracılığıyla entegrasyon yapılandırılır. Referans verilerinin, işlemlerin yüklendiği bir dizi tablo eklendi. Çünkü çok fazla veri, arka plan işleri aracılığıyla toplu indirme yapılmasına karar verildi. Porsiyon büyüklüğü 100.000, parti büyüklüğü 10.000, belgedeki işlem sayısı 1000, aynı anda çalışan arka plan işlerinin sayısı 8'dir.
Başlatıyorum, yükle, her şey yolunda. Ama gece koyarsam 1s uyku moduna geçiyormuş gibi geliyor, yani. bir süre sonra, günlüğün gösterdiği gibi, arka plan işleri başlatılır ancak tamamlanmaz. Sonuç olarak, görevlerin gece 12'de başlayıp sabah 8'de tamamlandığı (fare ile şaka yaptığımda) ortaya çıktı ve bundan sonra normal modda daha fazla yürütülmeye devam edildi. Hem ince hem de kalın istemcilerde piyasaya sürüldü. Parametrelerde bir ayar var - pasif bir oturumda uyku süresi 1200'dür, ancak bu sadece ince istemci için geçerli değildir ve bu bir sorun olabilir mi? Kapatmak istemiyorum çünkü kullanıcılar programdan ayrılmayın, bırakın uyusunlar. Belki birisi benzer bir problemle karşılaştı? Nasıl karar verdin?

Cevap:

Böyle bir olasılık yok.

Bir arka plan işi yürütmenin ve tamamlanmasını beklemenin amacı nedir?
8'den fazla arka plan işi üretmemek için mi?

"Yönetici" arka plan işini sunucu tarafına sürükleyin ve kontrol etmesine izin verin ....

Pentuim D840'ta 40-50 arka plan görevi başlattım - uçuş normal, o zaman zaten işlemciye / belleğe dayanıyor.

S: Bir dosya arka plan işine nasıl aktarılır


Platform 8.3.6.2152
Daha fazla işlem için dosyayı UV'den arka plan işine aktarmak gerekir.
Bunu ben yaptım:
& OnClient
Prosedür Komut1 (Komut) FileDD = Yeni BinaryData (DosyaAdı); StorageAddressFor Background = PlaceTemporaryStorage (FileDD, UniqueIdentifier); StartUploadOnServer (StorageAddressFor Background) EndProcedure & OnServer Function StartUploadUploadOnServer (StorageAddressFor Background) Yöntem Parametreleri = Yeni Dizi; Yöntem Parameters.Add (Arka Plan İçin Depolama Adresi); İş = BackgroundJobs.Run ("MySharedModule.MyBackground", MethodParameters); EndFunction
Ortak bir modülde:

Prosedür MyBackground (Depolama Adresi) Dışa Aktarma FileDD = GetFrom Geçici Depolama (Depolama Adresi); IfTypeZnch (FileDD) = Tür ("BinaryData") Sonra Günlük KaydıKayıt Ol Günlük KaydıKayıt Ol("Hata Ayıklama", "DD Yok"); EndIf; EndProcedure Bunu şu şekilde denedi: PlacedFiles = New Array; PlacedFiles.Add (Yeni TransferFileDescription (DosyaAdı)); PlacedFiles = Yeni Dizi; PutFiles (PlacedFiles, PlacedFiles, False, UniqueId) DEĞİLSE, Sonra Geri Dönün; EndIf; StorageAddressFor Background = PlacedFiles.Storage; Şu şekilde denedim: StoreAddressFor Background = PutTemporalStore (Undefined, UniqueIdentifier); PlaceFile (Arka Plan İçin Depolama Adresi, DosyaAdı, Yanlış);
Geçici depolama yoluyla arka plandan istemciye, normalde aktarılır, ancak istemciden arka plana - bir nedenden dolayı.

Cevap: Genel olarak, her şeyin oldukça basit olduğu ortaya çıktı. BinaryData'yı bir arka plan işine parametre olarak aptalca aktarabileceğiniz ortaya çıktı. Vasıfsız hayranlar için yardımdan alıntı yapmaları ve "bu şekilde tasarlandığını" söylemeleri için çalışma kodu:
& OnClient
Prosedür Komut1 (Komut) StartUploadUploadOnServer (Yeni BinaryData (DosyaAdı)) EndProcedure
& AtServer Function StartUploadUploadOnServer (DD) Yöntem Parametreleri = Yeni Dizi; Method.Add (DD) Parametreleri; İş = BackgroundJobs.Run ("MySharedModule.MyBackground", MethodParameters); EndFunction Prosedürü MyBackground (FileDD) ZnchType (FileDD) = Type ("BinaryData") ise Dışa Aktarma Sonra Günlük KaydıKayıt Ol("Hata Ayıklama", "DD Var"); Aksi halde Günlük KaydıKayıt Ol("Hata Ayıklama", "DD Yok"); EndIf; Prosedürün Sonu

Soru: İstenen kullanıcı altında bir arka plan işi çalıştırma


Merhaba!
1C: Enterprise 8.3 (8.3.11.2924), UT 11.3.4.93 istemci - sunucu var.
Bu konfigürasyonda, "Müşterilerle belgelere göre mutabakatlar" kaydındaki hareketler, belgenin kaydedildiği anda değil, "Müşteriler / tedarikçilerle uzlaşmalarla ertelenmiş işlemlerin yürütülmesi" zamanlanmış görevi ile gerçekleştirilir.
Aynı zamanda, bazen zamanlanmış görev bir hata verdi, çünkü kapalı bir dönemde (düzenleme yasağı tarihinden daha erken) hareketler yapılmaya çalışıldı. Yasaklanma tarihinin açık olduğu zamanlanmış görevin ayarlarına özel bir kullanıcı kaydedildi, bundan sonra her şey çalışmaya başladı.
Ancak, kayıtlardaki hareket verilerinin, programa göre arka plan görevi başlatıldığında değil, belge gönderme anında yapıldığından emin olunması gerekir.
Bir belge gönderirken zamanlanmış bir görev gerçekleştiren kodun kendisini çalıştırırsanız, aynı hata oluşur - dönem kapanır. Belge yürütme sırasında aynı kodu başlatan bir arka plan görevini programlı olarak çalıştırırsanız, bu tam olarak aynı hataya neden olur, çünkü süre kapatılır ve programlı olarak başlatılan arka plan görevi, mevcut kullanıcı adı altında başlatılır ve yasaklanma tarihi kapatılır. Ancak, zamanlayıcı kümesinde "doğru" kullanıcıya sahip bir zamanlanmış arka plan görevi başlatıldığında, her şey bir patlama ile gider. İşte programlı olarak nasıl yapılacağı, istenen kullanıcı altında "zamanlayıcı aracılığıyla" bir arka plan görevinin programlı olarak nasıl çalıştırılacağı, standart zamanlanmış görevler bunu nasıl yapar, lütfen bana söyleyin?

Cevap:

Altında yapılandırıldığı altında değil mi?
Bu bir yapılandırma hatası olmalı

Lis2007 dedi ki:

Merhaba Aynı zamanda, bazen zamanlanmış görev bir hata verdi, çünkü kapalı bir dönemde (düzenleme yasağı tarihinden daha erken) hareketler yapılmaya çalışıldı. Yasaklanma tarihinin açık olduğu zamanlanmış görevin ayarlarına özel bir kullanıcı kaydedildi, bundan sonra her şey çalışmaya başladı

Genişletmek için tıklayın...

Soru: Bir arka plan işinde hata ayıklama


Arka plan işi bir hatayla çalışıyor. Hata ayıklamaya karar verdim.
bir satırla harici işleme yoluyla çalıştırın:
BackgroundJobs.Run ("MyModule.MyJobs");
Bir modülde bir kesme noktasına ulaşmaz.
Sunucuda hata ayıklamaya izin verilir, onay kutusu hata ayıklamada, otomatik bağlantı, arka plan işleri buna değer. Başka ne problem olabilirdi ki?

Cevap: Ortak modüllerde, sunucu yürütmesi değil istemci gerektiren işlevlere bir çağrı vardı. Onları parantez içine koymak zorunda kaldım # If Client Then. Arka plan da çalıştı.

Soru: Değişim gerçekleştirilirken bir hata oluştu


İyi günler Bana nerede kazacağımı söyle:
Muhasebe veri tabanında bir değişim gerçekleştiriyorum. Standart bir değişim yoluyla yaklaşık üç düzine belge UT-shki'den boşaltılır. Uzun bir süre (yaklaşık bir saat) düşünürler ve şu mesajla biterler:
arka plan iş süreci çöktü

İş Motoru

İş motoru, bazı uygulamaları veya işlevleri bir zamanlamaya göre veya zaman uyumsuz olarak yürütmek üzere tasarlanmıştır.

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

  • Sistem konfigürasyonu aşamasında rutin prosedürleri tanımlayabilme;
  • Belirtilen eylemlerin programa göre yürütülmesi;
  • Belirli bir prosedüre veya işleve yapılan bir çağrının yürütülmesi eşzamansızdır, yani. tamamlanmasını beklemeden;
  • Belirli bir görevin ilerlemesini izleme ve tamamlama durumunu alma (tamamlanmanın başarısını veya başarısızlığını gösteren bir değer);
  • Mevcut görevlerin bir listesini almak;
  • Bir veya daha fazla görevin tamamlanmasını bekleme yeteneği;
  • İş yönetimi (iptal etme, yürütmeyi engelleme vb.).

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

  • Zamanlanmış görevlerin meta verileri;
  • Rutin 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 için tasarlanmıştır. Arka plan işleri yerleşik dil kullanılarak uygulanır.

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

Zamanlanmış bir iş, zamanlanmış işle ilişkili yöntemin hangi zaman noktalarında yürütülmesi gerektiğini tanımlayan bir zamanlamaya sahiptir. Zamanlama, kural olarak bilgi tabanında belirtilir, ancak yapılandırma aşamasında da belirtilebilir (örneğin, önceden tanımlanmış zamanlanmış görevler için).

Görev zamanlayıcı, zamanlanmış görevlerin yürütülmesini zamanlamak için kullanılır. Zamanlanmış her görev için, zamanlayıcı, geçerli tarih ve saatin zamanlanan görevin zamanlamasında olup olmadığını düzenli olarak kontrol eder. Eğer öyleyse, zamanlayıcı yürütülecek böyle bir görevi atar. Bunu yapmak için, bu zamanlanmış görev için zamanlayıcı, gerçek işlemeyi gerçekleştiren bir arka plan görevi oluşturur.

Arka plan işleri

Arka plan işleri, hesaplamanın sonucu uzun bir süre sonra alınabildiğinde, karmaşık hesaplamalar yapmak için kullanışlıdır. İş motoru, bu tür hesaplamaları eşzamansız olarak gerçekleştirme araçlarına sahiptir.

Bir arka plan işi ile ilişkili, arka plan işi çalıştığında çağrılan bir yöntemdir. Arka plan işi yöntemi, sunucuda çağrılabilen herhangi bir genel olmayan ortak modül prosedürü veya işlevi olabilir. Arka plan iş parametreleri, sunucuya geçirilmesine izin verilen herhangi bir değer olabilir. Bir arka plan işinin parametreleri, çağırdığı prosedürün veya işlevin parametreleriyle tam olarak eşleşmelidir. Arka plan işi yöntemi bir işlevse, dönüş değeri yok sayılır.

Bir arka plan işinin bir anahtarı olabilir - herhangi bir uygulama değeri. Anahtar, arka plan işlerini başlatma konusunda bir kısıtlama getirir - birim zaman başına belirli bir anahtar değerine ve belirli bir arka plan işi yöntem adına sahip yalnızca bir arka plan işi yürütülebilir (yöntem adı, modül adı ve prosedürün veya işlevin adından oluşur) . Anahtar, aynı yöntemlere sahip arka plan işlerini belirli bir uygulama kriterine göre gruplamanıza olanak tanır, böylece bir grup içinde birden fazla arka plan işi yürütülmez.

Arka plan işleri, herhangi bir bağlantıdan programlı olarak oluşturulur ve yönetilir. Herhangi bir kullanıcının bir arka plan işi oluşturmasına izin verilir. Ayrıca, onu oluşturan kullanıcı adına yürütülür. Yönetici haklarına sahip bir kullanıcının veya bu arka plan görevlerini oluşturan kullanıcının herhangi bir bağlantıdan görevleri almasına ve tamamlanmasını beklemesine izin verilir.

Arka plan işi tamamen bir oturum nesnesidir, ancak herhangi bir kullanıcı oturumuna ait değildir. Her iş için, çağrıyı yapan kullanıcı adına çalışan özel bir sistem oturumu oluşturulur. Arka plan işlerinin kalıcı durumu yoktur.

Bir arka plan işi, diğer arka plan işlerini doğurabilir. İstemci-sunucu sürümünde bu, karmaşık hesaplamaların küme iş akışları arasında paralel hale getirilmesine olanak tanır ve bu da bir bütün olarak hesaplama sürecini önemli ölçüde hızlandırabilir. Paralelleştirme, birden çok alt arka plan işi oluşturularak ve her birinin ana arka plan işinde tamamlanması beklenerek yapılır.

Başarıyla veya anormal şekilde tamamlanan arka plan işleri 24 saat saklanır ve ardından silinir. Yürütülen arka plan işlerinin sayısı 1000'i aşarsa, en eski arka plan işleri de silinir.

Zamanlanmış görevler

Zamanlanmış görevler, belirli bir zamanlamaya göre belirli periyodik veya bir kerelik eylemlerin gerçekleştirilmesi gerektiğinde kullanılır.

Zamanlanmış işler bilgi tabanında depolanır ve konfigürasyonda tanımlanan zamanlanmış iş meta verilerine göre oluşturulur. Meta veriler, zamanlanmış bir görevin parametrelerini şu şekilde ayarlar: çağrılan yöntem, ad, anahtar, kullanım yeteneği, önceden tanımlanmış bayrak vb. Zamanlanmış bir görev oluştururken, ek olarak bir zamanlama (meta verilerde belirtilebilir), değerler belirtebilirsiniz. yöntem parametreleri, adına rutin bir görevi yerine getirmesi gereken kullanıcı adı vb.

Zamanlanmış işlerin oluşturulması ve yönetimi, herhangi bir bağlantıdan programlı olarak gerçekleştirilir ve yalnızca yönetici haklarına sahip kullanıcılara izin verilir.

Not. Dosya modunda çalışırken, görev zamanlayıcıyı başlatmadan zamanlanmış görevler oluşturmak ve düzenlemek mümkündür.

Zamanlanmış bir iş, zamanlanmış iş yürütüldüğünde çağrılan bir yöntemle ilişkilendirilir. Sunucuda çağrılabilen genel olmayan bir ortak modülün herhangi bir prosedürü veya işlevi, zamanlanmış bir iş yöntemi olarak hareket edebilir. Zamanlanmış bir işin parametreleri, sunucuya gönderilmesine izin verilen herhangi bir değer olabilir. Zamanlanmış işin parametreleri, çağırdığı prosedürün veya işlevin parametreleriyle tam olarak eşleşmelidir. Zamanlanmış iş yöntemi bir işlevse, dönüş değeri yok sayılır.

Zamanlanmış bir görevin bir anahtarı olabilir - uygulanan herhangi bir değer. Anahtar, zamanlanmış işlerin başlatılmasına bir kısıtlama getirir, çünkü zaman birimi başına, aynı meta veri nesnesiyle ilişkili zamanlanmış işler arasında, belirli bir anahtar değerine sahip yalnızca bir zamanlanmış iş yürütülebilir. Anahtar, aynı meta veri nesnesiyle ilişkili zamanlanmış görevleri belirli bir uygulama ölçütüne göre gruplandırmanıza olanak tanır, böylece bir grup içinde birden fazla zamanlanmış görev gerçekleştirilmez.

Yapılandırma sırasında önceden tanımlanmış zamanlanmış işleri tanımlayabilirsiniz. Önceden tanımlanmış zamanlanmış işler, açık bir şekilde oluşturulamamaları veya silinememeleri dışında normal zamanlanmış işlerden farklı değildir. Zamanlanmış işin meta verileri ayarlanmışsa önceden tanımlanmış bir zamanlanmış görevin işareti, ardından yapılandırma bilgi tabanında güncellendiğinde, önceden tanımlanmış bir zamanlanmış görev otomatik olarak oluşturulur. Önceden tanımlanmış bayrak temizlenirse, yapılandırma bilgi tabanında güncellendiğinde, önceden tanımlanmış zamanlanmış görev otomatik olarak silinecektir. Önceden tanımlanmış bir zamanlanmış işin (örneğin, bir zamanlama) özelliklerinin başlangıç ​​değerleri, meta verilerde ayarlanır. Daha sonra uygulama çalışırken bunlar değiştirilebilir. Önceden tanımlanmış zamanlanmış işlerin parametresi yoktur.

Zamanlanmış iş programı, zamanlanmış işin hangi zaman noktalarında başlatılması gerektiğini belirler. Program şunları ayarlamanıza izin verir: görev yürütmenin başlangıç ​​ve bitiş tarihi ve saati, yürütme periyodu, zamanlanmış görevin gerçekleştirilmesi gereken haftanın günleri ve aylar, vb. (yapı açıklamasına bakın) -dilde).

Zamanlanmış iş programlarına örnekler:

Her saat, sadece bir gün

TekrarGünleri Periyodu = 0, Bir Gün İçinde Tekrarlama Periyodu = 3600

Her gün, günde bir kez

RepeatPeriodDays = 1, RepeatPeriodOverDay = 0

Bir gün, bir kez

Tekrar Günleri Dönem = 0

Her gün, günde bir kez

Dönem Günlerini Tekrar Et = 2

Her gün 01.00 - 07.00 arası her saat

Dönem Günlerini Tekrar Et = 1

Tekrarlama DönemiOverDay = 3600

Başlangıç ​​Saati = 01.00

Bitiş Saati = 07.00

Her Cumartesi ve Pazar 09.00'da

Dönem Günlerini Tekrar Et = 1

DaysWeeks = 6, 7

Başlangıç ​​Saati = 09.00

Her gün bir hafta, haftayı atla

Dönem Günlerini Tekrar Et = 1

DönemHafta = 2

01.00'de bir kez

Başlangıç ​​Saati = 01.00

Her ayın son günü saat 9:00'dur.

Dönem Günlerini Tekrar Et = 1

DayInMonth = -1

Başlangıç ​​Saati = 09.00

Her ayın beşi saat 9:00'da

Dönem Günlerini Tekrar Et = 1

GünAy = 5

Başlangıç ​​Saati = 09.00

Her ayın ikinci çarşambası saat 9:00'da

Dönem Günlerini Tekrar Et = 1

Ay İçinde Haftanın Günü = 2

GünHafta = 3

Başlangıç ​​Saati = 09.00

Belirli bir tarih için bir işin çalışıp çalışmadığını kontrol edebilirsiniz (JobSchedule nesnesinin ExecutionRequired yöntemi). Zamanlanmış işler her zaman belirli bir kullanıcı adı altında gerçekleştirilir. Planlanan işin kullanıcısı belirtilmemişse, yürütme, yönetici haklarına sahip varsayılan kullanıcı adına gerçekleştirilir.

Zamanlanmış işler, arka plan işleri kullanılarak yürütülür. Zamanlayıcı, zamanlanmış bir işin başlatılması gerektiğini belirlediğinde, tüm diğer işlemleri gerçekleştiren bu zamanlanmış işe dayalı olarak otomatik olarak bir arka plan işi oluşturulur. Bu zamanlanmış görev zaten çalışıyorsa, zamanlamasına bakılmaksızın yeniden başlatılmayacaktır.

Zamanlanmış işler yeniden başlatma özelliğine sahiptir. Bu, özellikle zamanlanmış görev yönteminin yerine getirilmesinin garanti edilmesi gerektiğinde geçerlidir. Zamanlanmış bir iş, olağandışı bir şekilde sonlandırıldığında veya zamanlanmış işin yürütüldüğü alt işlem (istemci-sunucu sürümünde) veya istemci işlemi (dosya sürümünde) anormal şekilde sonlandırıldığında yeniden başlatılır. Zamanlanmış bir işte, kaç kez yeniden başlatılması gerektiğini ve yeniden başlatmalar arasındaki aralığı belirtebilirsiniz. Yeniden başlatılmış bir zamanlanmış görev yöntemini uygularken, yeniden başlatıldığında yürütmesinin baştan başlayacağı ve anormal sonlandırma anından itibaren devam etmeyeceği dikkate alınmalıdır.

Bunu hatırlamak önemlidir Bitiş zamanı arka plan işi mutlaka belirtilen zamanda bitmeyecektir. Bazı ifadeler:

* Bir arka plan işi, askıda kalmazsa otomatik iptalini yok sayabilir, ancak tüm platform işlemlerinin iptal edilememesi nedeniyle çalışmaya devam eder. Gömülü dilin döngüsel kodu yürütülürse, iş iptal edilebilir, aksi halde iptal edilemez. Her şey görevin ne yaptığına bağlı. * Bitiş zamanı - bir işin başlayıp bitmeyeceği sınır? * İşin zorla bitirilmesi, işlemin başladığı ana kadar yapılan değişiklikleri geri alıyor mu?

Dosya ve istemci-sunucu sürümlerinde arka plan işlerini yürütmenin ö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şlemi düzenli aralıklarla ExecuteJobProcessingGlobal bağlam işlevini çağırmalıdır. Bilgi bankası başına yalnızca bir istemci işlemi arka plan işlerini işlemelidir (ve dolayısıyla bu işlevi çağırmalıdır). Arka plan işlerini işlemek için istemci süreci oluşturulmadıysa, iş motoruna programlı olarak erişirken "İş yöneticisi etkin değil" hatası görüntülenecektir. İstemci işleminin arka plan işlerini işlemesinin diğer işlevler için kullanılması önerilmez.

Arka planda iş işlemeyi gerçekleştiren müşteri süreci başladıktan sonra, müşteri işlemlerinin geri kalanı arka plan işi motoruna programlı olarak erişebilir, yani. arka plan işlerini çalıştırabilir ve yönetebilir.

İstemci-sunucu sürümünde, arka plan görevleri, fiziksel olarak küme yöneticisinde bulunan görev zamanlayıcı kullanılarak yürütülür. Kuyruğa alınmış tüm arka plan işleri için zamanlayıcı, en az meşgul olan iş akışını alır ve ilgili arka plan işini yürütmek için bunu kullanır. Çalışan süreç işi çalıştırır ve yürütmenin sonuçlarını planlayıcıya bildirir.

İstemci-sunucu sürümünde, zamanlanmış görevlerin yürütülmesini engellemek mümkündür. Zamanlanmış görevlerin yürütülmesinin engellenmesi aşağıdaki durumlarda gerçekleşir:

  • Bilgi tabanına planlanmış işlerin açık bir şekilde engellenmesi yüklenir. Kilit, küme konsolu aracılığıyla ayarlanabilir;
  • Bilgi tabanına bir bağlantı engelleme kurulur. Kilit, küme konsolu aracılığıyla ayarlanabilir;
  • SetExclusiveMode() yöntemi, True parametresiyle gömülü dilden çağrıldı;
  • Diğer bazı durumlarda (örneğin, veritabanı yapılandırmasını güncellerken).

Zamanlanmış iş meta verilerinin oluşturulması

Bilgi tabanında programlı olarak zamanlanmış bir görev oluşturmadan önce, bunun için bir meta veri nesnesi oluşturmanız gerekir.

"Rutin görevler" dalı için "Genel" dalındaki yapılandırma ağacında zamanlanmış bir görev için bir meta veri nesnesi oluşturmak için Ekle komutunu çalıştırın ve özellikler paletinde zamanlanmış bir görevin aşağıdaki özelliklerini doldurun:

Yöntem adı - zamanlanmış iş yönteminin adını belirtir.

Anahtar - zamanlanan iş için anahtar olarak kullanılacak rastgele bir dize değeri belirtilir.

Zamanlama - zamanlanmış görevin zamanlaması belirtilir. Bir program oluşturmak için "Aç" bağlantısını tıklayın ve açılan program formunda gerekli değerleri ayarlayın.

Genel sekmesi, görevin başlangıç ​​ve bitiş tarihlerini ve tekrar modunu içerir.

“Gün” sekmesinde görevin günlük programı belirtilir.

Programı belirtin:

  • görevin başlangıç ​​ve bitiş zamanı;
  • görevin tamamlanma zamanı, ardından zorla tamamlanacak;
  • görevin tekrar süresi;
  • tekrarlar arasındaki duraklamanın uzunluğu;
  • yürütme süresi.

Koşulların keyfi bir kombinasyonuna izin verilir.

Görevin haftalık programı “Haftalık” sekmesinde belirtilir.

Görevin yürütüleceği haftanın o günleri için kutuları işaretleyin. İşi tekrarlamak istiyorsanız tekrar aralığını hafta olarak belirtin. Örneğin, görev 2 hafta sonra yürütülür, yeniden deneme değeri 2'dir.

"Aylık" sekmesinde, görevin aylık programı belirtilir.

Görevin çalışacağı ayların kutularını işaretleyin. Gerekirse, ayın / haftanın başından veya sonundan belirli bir yürütme günü (ay veya hafta) belirleyebilirsiniz.

Kullanım - ayarlanırsa, görev programa göre gerçekleştirilecektir.

Önceden tanımlanmış - ayarlanmışsa, görev önceden tanımlanmış bir görevdir.

Kilitlenmede Yeniden Deneme Sayısı — Anormal sonlandırmada yeniden deneme sayısını belirtir.

Kilitlenme yeniden deneme aralığı — Anormal yeniden deneme aralığını belirtir. Örnekleri

"Tam Metin Arama Dizinini Yenile" arka plan işini oluşturmak için:

BackgroundJobs.Run ("Tam Metin Arama İndeksinin Güncellenmesi");

Zamanlanmış bir görevin oluşturulması "Sıraları geri yükleme":

Çizelge = Planlanan İşin Yeni Çizelgesi; Schedule.Repeat PeriodDays = 1; Schedule.RepeatPeriodGün içerisinde = 0;

İş = ScheduledJobs.CreateRocularJobs ("Sıraları Geri Yükleme"); Task.Schedule = Zamanlama; Görev.Yaz ();

Görev Konsolu

ITS ile işleme, rutin görevleri yönetir:

Zamanlanmış işlerle çalışma

Görev nesneleri

İş nesneleri referans değildir, ancak veri tabanında bir tür özel depolamada saklanır.

Meta verilerde "Önceden tanımlanmış" bayrağı etkinleştirilirse, 1C: Enterprise'ı başlattığınızda böyle bir nesne otomatik olarak oluşturulur ve her zaman tam olarak bir örnekte bulunur. Böyle bir nesne silinemez.

"Önceden tanımlanmış" bayrağı ayarlanmamışsa, böyle bir görevin nesneleri, zamanlamayı ve parametreleri belirterek programlı olarak oluşturulur ve silinir.

Görev listesi alma

Görev listesi, yöntem kullanılarak elde edilebilir. Normal Görevler Alın küresel iş yöneticisi Düzenleyici Görevler

PlanlanmışİşlerYöneticisi

GetScheduledİşler

Sözdizimi:

Düzenli İşler Alın (<Отбор>)

Seçenekler:

<Отбор>(isteğe bağlı)

Tür: Yapı. Seçim yapısı. Yapı değerleri şunlar olabilir: UniqueIdentifier, Key, Metadata, Predefined, Use, Name. Seçim belirtilmezse, tüm zamanlanmış görevler alınır.

Meta verilere göre filtreleme yapıyorsanız, zamanlanan iş meta verisi nesnesi veya adı Meta Veri değeri olarak belirtilebilir.

Döndürülen değer:

Tür: Dizi.

Açıklama:

Belirli bir seçim için bir dizi rutin görev alır. Zamanlanmış görevleri almak yalnızca yönetici için mümkündür.

kullanılabilirlik:

Rutin = RutinGörevler. Rutin İşleri Al (Seçim);

Zamanlanmış Döngüden Zamanlanan her biri için NewRow = Zamanlanmış Görevler Listesi.Add (); NewString.Metadata = Normal.Metadata.Representation (); NewString.Description = Regulatory.Name; NewLine.Key = Normal.Key; NewLine.Schedule = Normal.Schedule; NewString.User = Normal.Kullanıcı Adı; NewString.Predefined = Normal.Predefined; NewString.Use = Normal.Use; NewString.Id = Normal.UniqueIdentifier;

LastJob = Scheduled.LastJob; Son Görev ise<>Tanımsız Sonra NewLine.Run = LastJob.Start; NewString.Status = LastJob.Status; EndIf; Döngü Sonu;

oluşturma

Zamanlanmış işler yöneticisinin CreateRegularTask yöntemi tarafından yaratılmıştır:

ScheduledJob = ScheduledJobs.CreateRegularJob (MetadataSelection);

Düzenleyici Görev.Adı = Ad; Normal Task.Key = Anahtar; NormalTask.Use = Kullanım; ScheduledJob.UserName = UsersSelection; Planlanmış İş.Acil Sonlandırmada Tekrar Sayısı = Acil Fesih Üzerine Tekrar Sayısı; ScheduledJob.Retry IntervalOn Anormal End = Retry IntervalOn Anormal Bitiş; ScheduledJob.Schedule = Program; NormalJob.Write ();

JobObject = ScheduledJobs.CreateRegularJobs ("ExecuteExchange");

JobObject.Name = Ad; JobObject.Usage = Doğru;

Görev nesnesi, yöntem parametrelerinin ayarlandığı "Parametreler" alanına sahiptir:

Planlanmışİş

Seçenekler(Parametreler)

Kullanım:

Okuma ve yazma.

Açıklama:

Tür: Dizi. Zamanlanmış işin parametre dizisi. Parametrelerin sayısı ve bileşimi, rutin görev yönteminin parametrelerine karşılık gelmelidir.

kullanılabilirlik:

Sunucu, Yağ İstemcisi, Dış Bağlantı.

Not:

Okuma ve yazma yetenekleri yalnızca yönetici tarafından kullanılabilir.

Siliniyor

Görev nesnesinin Delete () yöntemiyle silinir:

Zamanlanmış Görev.Kaldır ();

İş nesnesini alma

  • GetRegularJobs yöntemiyle listeleyin:

Rutin = RutinGörevler. Rutin İşleri Al (Seçim);

  • görev yöneticisinin FindByUniqueIdentifier yöntemi aracılığıyla:

Görev = Zamanlanmış Tasks.FindBy Benzersiz Tanımlayıcı (UID);

Muhtemelen, her 1C 8.3 programcısı er ya da geç belirli görevlerin yürütülmesini bir programa göre yapılandırmak zorunda kaldı. Aşağıda bu mekanizmaların ayrıntılı bir tanımını vereceğim, umarım bu acemi 1C programcıları için faydalı bilgiler olacaktır. İnsan eylemi gerektirmediği için çok uygundur, zamanlanmış bir görev 1 kez yapılandırılır ve programınıza göre çalışır.

Aşağıdaki bir örnekte ayrıntılı talimatlar bulacaksınız.

1C'de zamanlanmış ve arka plan görevleri nelerdir?

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

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

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

İlk olarak, yeni bir meta veri nesnesi oluşturalım - zamanlanmış bir iş. Görevime "Para Birimi Yükleme" adını vereceğim. Bu yapılandırma nesnesinin özellikler paletini göz önünde bulundurun:

267 1C video eğitimlerini ücretsiz edinin:

  • Yöntem adı- belirtilen programa göre 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- zamanlanmış bir görev kullanmanın bir işareti.
  • önceden belirlenmiş- zamanlanan işin önceden tanımlı olup olmadığını gösterir. Zamanlanmış görevin veritabanına yerleştirildikten hemen sonra çalışmasını istiyorsanız bu işareti belirtin. Aksi takdirde, İş Konsolu işlemeyi kullanmanız veya iş başlatmayı programlı olarak başlatmanız gerekir.
  • Görevin anormal tamamlanması durumunda yeniden deneme sayısı- bir hatayla tamamlandıysa arka plan işinin kaç kez yeniden başlatıldığı.
  • Anormal iş sonlandırma için yeniden deneme aralığı- bir hatayla yürütülürse arka plan işinin ne sıklıkla yeniden başlatılacağı.

Ve en ilginç ayar Takvim:

Burada "Yöntem adı" alanında belirtilen prosedürü başlatmak için aralığı yapılandırabilirsiniz. Diyelim ki yapılandırdım

Dikkat! DBMS düzeyinde planlanmış ve arka plan işlerinin yürütülmesinin engellenmesini devre dışı bırakmayı unutmayın!

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

1C dosya modunda zamanlanmış 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 oturumu başlatılmalıdır. Bu genellikle, oturumu her zaman çalışan "teknik" kullanıcının kurumu tarafından gerçekleştirilir.

Dosya modunda, RunJobProcessing () yöntemi başlatıldığında zamanlanan 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 -

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

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

ConnectWaitingHandler, 3600);

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

Muhtemelen 1C 8.3 veya 8.2'deki tek bir ciddi yapılandırma, planlanmış ve arka plan işleri kullanmadan yapamaz. Kullanıcı veya programcı müdahalesi olmadan açıkça tanımlanmış bir programa göre yürütülecekleri için çok uygundurlar.

Örneğin, günde bir kez başka bir programla veri alışverişi yapmanız gerekiyor. Zamanlanmış ve arka plan görevlerini kullanarak 1C, bu eylemleri örneğin mesai saatleri dışında kendi başına gerçekleştirebilecektir. Bu yöntem kullanıcı deneyimini hiçbir şekilde etkilemeyecek ve zamandan tasarruf etmenize yardımcı olacaktır.

İlk önce, ne anlama geldiklerini ve farklarının ne olduğunu anlayalım:

  • Rutin görevönceden yapılandırılmış bir programda herhangi bir belirli eylemi çalıştırmanıza olanak tanır.
  • Arka plan işi Gerçekleştirilecek eylemleri içeren bir nesnedir.

Diyelim ki firmamız bir şey satıyor ve fiyatların yer aldığı kendi web sitesine sahip. Alaka düzeylerini korumak için bunları günde bir kez boşaltmak istiyoruz.

Yapılandırmayı açın ve zamanlanmış bir iş ekleyin.

özellikleri ayarlama

Özelliklerinde doldurulması gereken en önemli parametreleri ele alalım.

  • alanında" Yöntem adı»Doğrudan yürütülecek olan belirli bir genel modülün prosedürü seçilir. Sitemize fiyat yüklemek için tüm işlemleri gösterecektir. Yürütmenin sunucuda gerçekleşeceğini unutmayın. Bu mantıklıdır, çünkü rutin işlemler kullanıcı müdahalesi olmadan gerçekleştirilir.
  • Zamanlanmış iş gerektiğinde devre dışı bırakılabilir veya etkinleştirilebilir. Her seferinde programını değiştirmek zorunda değilsin. Bunu yapmak için, " kullanım».
  • Bir diğer önemli şey, bu zamanlanmış görevin gerçekleştirilip gerçekleştirilmeyeceğinin ayarlanmasıdır. önceden belirlenmiş, ya da değil. Önceden tanımlanmış zamanlanmış işler otomatik olarak başlar. Bu işaret ayarlanmamışsa, bunları programlı olarak çalıştırmanız veya ITS'den "Görev Konsolu" işlemesini kullanmanız gerekir.
  • Ayrıca belirtebilirsiniz tekrar sayısı ve aralarındaki aralık anormal fesih üzerine. Anormal sonlandırma, görevlerin bir hata nedeniyle çalışmadığı durumları ifade eder.

Kurulum zamanlaması

Son adım, özellikler paletindeki ilgili köprüyü kullanarak siteye yüklememiz için programı ayarlamaktır.

1C 8.3'te tipik bir program ayarı göreceksiniz. Burada zor bir şey yok. Bu örneğin bir parçası olarak, sitedeki fiyatların boşaltılmasının başlatılmasını her gün sabah beşten yediye kadar yapılandırdık. Zamanlanmış görevin saat 7:00'den önce çalışacak zamanı yoksa, ertesi gün tamamlanacaktır.

Zamanlanmış işleri engelleme

"1C Enterprise sunucularının yönetimi" standart yardımcı programını çalıştırın ve zamanlanmış görevi oluşturduğunuz bilgi tabanının özelliklerini açın (1C'nin istemci-sunucu sürümleri için).

Açılan pencerede (IB'ye erişim için kullanıcı adı ve şifreyi girdikten sonra), "Zamanlanmış görevlerin engellenmesi etkinleştirildi" öğesindeki bayrağın ayarlanmadığını kontrol edin. Görevin yürümediği bir durumla karşı karşıya kalırsanız, önce bu ayarı kontrol edin.

Aynı şekilde, 1C 8.3'te zamanlanmış görevleri tamamen devre dışı bırakabilirsiniz. Belirli arka plan işlerini devre dışı bırakmak için en son sürümlerde yerleşik olarak bulunan "Arka Plan İş Konsolu" işlemini kullanabilirsiniz.

Dosya modunda arka plan ve zamanlanmış görevler

Bu modda, bu görevleri kurmak ve çalıştırmak organize etmek çok daha zordur. Çoğu zaman, oturumu her zaman açık olacak ek bir hesap oluşturulur.

Bu durumda, zamanlanmış işler "RunJobProcessing ()" yöntemi kullanılarak etkinleştirilir.

Aşağıdaki yapıyı da kullanabilirsiniz:

Prosedürün adı olarak, yürütülecek müşteri prosedürünün adını belirtmelisiniz. Aralık, yürütmenin kaç saniye süreceğini gösterir. "Bir kez" parametresi isteğe bağlıdır. Bu prosedürün bir kez mi yoksa birkaç kez mi gerçekleştirileceğini yansıtır.

Arka plan işlerinde izleme hataları

Arka plan görevlerinin ilerlemesini ve günlükte olası hataların varlığını görüntüleyebilirsiniz. Filtrede, filtreyi "Arka plan işi" uygulamasına ayarlayın ve gerekirse, yalnızca "Hatalar" gibi ilginin önemini seçin.

Günlük, seçiminizle eşleşen tüm girişleri, hatanın nedenini belirten bir yorumla birlikte gösterecektir.

Sistemde herhangi bir hesaplamayı kullanıcı fark etmeden yani arka planda yapmamızı sağlar. Ayrıca, bu mekanizma hesaplama sürecini paralel hale getirmemizi sağlar. Hatta uygulanacak prosedürü paralel hale getirebiliriz. Bunu yapmak için arka plan işimizin birkaç arka plan işi daha çalıştırması gerekiyor. Bu durumda süreçler paralelleştirilir ve çok işlemcili, çok çekirdekli bir sistemimiz varsa, algoritmamız verimli bir şekilde çalışacaktır. Birkaç işlem başlattıktan sonra, sonucu bir şekilde azaltmak için bu işlemlerin tamamlanmasını beklemenin gerekli olduğunu sisteme söyleyebiliriz.

Örneğin, tipik yapılandırmalarda, kullanıcı çalışırken çeşitli türde hizmet arka plan işleri gerçekleştirilir. Bu, bu tür eylemlerin gerçeğini kaydeden kayıt günlüğündeki girişlerle kanıtlanabilir. Üstelik bu, kullanıcının çalışmasını hiçbir şekilde etkilemez, sadece onları fark etmez.

İdeal olarak, arka plan işi istemci-sunucu sürümünde uygulanır, bu durumda tüm yük sunucuya gider. Dosya seçeneğine gelince, arka plan işi mümkündür, ancak bazı özellikleri vardır.

Bu özellikleri dikkate almazsanız ve bilgi tabanının dosya sürümünde bir arka plan görevi başlatırsanız, sistemin vereceği şey budur.


1C arka plan işinin bazı sınırlamaları vardır. Sunucu tarafında çalıştığı için etkileşimli bir kullanıcı deneyimi yoktur. Örneğin, bir mesajı veya herhangi bir bilgiyi görüntüleyemezsiniz. Tüm bu veriler bilgi tabanında saklanmalı ve bir şekilde daha fazla işlenmelidir.
Sözdizimi yardımcısı ile iletişime geçerek 1C arka plan işleri hakkında daha detaylı bilgi alabilirsiniz. Burada bunun tamamen programlı bir nesne olduğu ve veri tabanında hiçbir şekilde saklanmadığı belirtilmelidir. Yani sınıfın bir örneğini yaratırız, özellikleri başlatır ve yürütme için başlatırız.

Arka plan işlerini yönetmek için hangi araçlara sahibiz? Bu tesis bir meta veri nesnesidir "Arka Plan Yöneticisi"... Bu nesnenin bir yöntemi var "Çalıştırmak", bu yöntemle arka plan işi başlatılır.

Aşağıdaki parametrelere sahiptir:
"Yöntem Adı"- yürütülecek prosedürün veya işlevin adı ve sunucu bağlamının bir prosedürü veya işlevi olmalıdır;

"Seçenekler"- öğelerin sayısı, parametrede belirtilen prosedürümüzün / işlevimizin parametre sayısına karşılık gelmesi gereken bir parametre dizisi "Yöntem Adı";

"Anahtar"- sistemin bir arka plan görevi başlatmanın gerekli olup olmadığını veya böyle bir görevin zaten başlatılıp başlatılmadığını anladığı bir satır olan belirli bir benzersizlik anahtarı;

"İsim"- burada yöntemimizin keyfi bir açıklamasını belirtebilirsiniz.

Dönüş değeri bir nesnedir "Arka Planİşi" yöntemin geçerli adını, geçerli anahtarı ve birkaç özellik ve yöntemi daha içerir. Bu yöntemlerden biri yöntem "Tamamlanmayı Bekleyin"... Amacı, sisteme arka plan işi tamamlanana kadar hiçbir şey yapmamasını söyleyebilmemizdir.

Arka plan görevi 1C 8.2, 8.3 - Kullanım örneği

1C arka plan işleriyle çalışmaya bir örnek verelim. Öncelikle 1C sistemini şu anda hiçbir şey yapamayacağımız şekilde kısaca yükleyecek basit bir algoritma oluşturacağız.

Bunun için:

1. Genel bir modül oluşturalım "Arka Plan İş İşleyicileri" sunucu tarafında derlenecek olan;


2. İçindeki ihracat prosedürünü anlatalım. "Arka Plan Hesabını Gerçekleştir (Parametre)" hangi bir dize türünden bir parametre alır;

Prosedür ProduceBackgroundHesaplama (Parametre) ExportStartTime = CurrentDate (); CurrentDate () - TimeStart iken< = 6 Цикл КонецЦикла ; КонецПроцедуры Процедура КнНажатие() ОбработчикиФоновыхЗаданий. ПроизветиФоновоеВычисление("Bazı parametreler"); Prosedürün Sonu
Hazır. Şimdi, işlemeye başladığınızda ve düğmeye bastığınızda, sistem birkaç saniye donar ve bu sırada hiçbir şey yapılamaz. Bu tam olarak yapmamız gereken şeydi.

Şimdi bu hesaplamaların arka planda yapılmasını sağlayacağız, yani arka plan görevi 1C 8.2, 8.3 gerçekleştirilir, ancak bu bizi rahatsız etmez.

Bunun için:

1. İşlemde butona basılması durumunda aşağıdaki kodu yazınız.

Prosedür KnNazenie () Parametreler = Yeni Dizi; Seçenekler. Ekle( "Bazı parametreler"); Arka Plan İşi. Uygulamak ( "BackgroundJob Handlers.Produce andBackgroundCompute", Parametreler, Yeni UniqueIdentifier, "Ölçek"); Prosedürün Sonu

Burada, ilk parametre olarak, genel modül prosedürünün adını ve ikincisini - bir dizi parametreyi iletiyoruz. Üçüncü parametre benzersiz bir anahtardır ve dördüncüsü prosedürümüzün bir açıklamasıdır.


Tepe