kararname

Veri geçmişi. Veritabanındaki dizini veya belgeyi kim değiştirdi? Çalışmalarınızda başarılar dileriz

1C:Enterprise'da sürüm oluşturma ➾ Nesne değişikliklerinin geçmişi ➾ 1C:Enterprise'da nesnelerin sürüm oluşturma nasıl ayarlanır? ➾ Sürüm oluşturma nedir? Ayar seçenekleri, roller, sürüm oluşturma mekanizması vb.

Durumu hayal edin: siz bir satış yöneticisisiniz. Malları ona göre göndermeniz gereken bir alıcı siparişi oluşturdunuz. Bir satış belgesi oluşturduk ve içindeki verilerin alıcının siparişiyle eşleşmediğini gördük. Belgede kimin tarafından, ne zaman ve hangi değişikliklerin yapıldığını öğrenmek için 1C:ПІdpriemstvo 8 yapılandırmalarında bir sürüm oluşturma mekanizması vardır.

Sürüm oluşturma, nesnelerde yapılan değişikliklerin geçmişinin depolanmasıdır. Günlüğün aksine, kimin, ne zaman ve hangi nesnenin geçmişini tutmanın yanı sıra, sürüm oluşturma mekanizması sistem yöneticisinin kullanıcıların yaptığı belirli değişiklikleri görmesine izin verir.

Sistem, bir nesnenin herhangi bir sürümünü görüntülemenize veya bir nesnenin herhangi bir sürümünü birbiriyle karşılaştırmanıza olanak tanır. Nesnelerdeki değişikliklerin geçmişiyle çalışmak için önce onların sürümlerini yapılandırmanız gerekir. Sistem yöneticisi, sürüm geçmişini yapılandırır ve görüntüler.


Nesne sürümü oluşturma nasıl yapılandırılır?

Üzerinde şu an Sürüm oluşturma mekanizması, aşağıdakiler gibi birçok tipik, en yaygın konfigürasyonda mevcuttur:

Sürüm oluşturma, Sistem Yöneticisi tarafından tam haklara sahip olarak yapılandırılır.

"Sürüm Oluşturma" sekmesini açın ve "Nesne sürümü oluşturmayı kullan" onay kutusunu işaretleyin:

"Nesne Sürüm Oluşturmayı Yapılandır..." seçeneğine tıklayın.

Her belge ve dizin türü için sürüm oluşturmayı ayarlarken şunları belirtebilirsiniz:

  • Sürüm yapmayın - değer, varsayılan olarak tüm nesnelere ayarlanır;
  • Sürüm - değer, dizinleri ve belgeleri ayarlamak için kullanılır;
  • Gönderirken sürüm - değer yalnızca belgeler için kullanılır.

Sürüm Oluşturma seçeneği seçilirse, bir nesne her değiştirildiğinde, nesnenin sonraki sürümü sürüm geçmişine yazılır.

Bir belgenin kayıt sırasında Sürüm Oluşturma modu ayarlanmışsa, belgenin ilk sürümü yalnızca belgenin ilk kaydından sonra tarihe yazılır. Daha sonra, kaydedilen bir belge her kaydedildiğinde belge sürümleri kaydedilecektir. Mod, IB'nin boyutunu büyütmemek için, kullanıcı tarafından tamamen doldurulmamış yeni belgelerin sürümlerini oluşturmamanızı sağlar. Bu ayarın tüm belgelere uygulanması önerilir.

sürüm oluşturma Büyük bir sayı nesneler büyümeye yol açabilir bilgi tabanı sürümlerinin depolanması nedeniyle. Bu nedenle, bu özelliğin seçici olarak kullanılması önerilir.

Nesnelerdeki değişikliklerin geçmişini görüntülemek için Araçlar/nesnelerdeki değişikliklerin geçmişi'ni açın. Komut yalnızca sistem yöneticisi tarafından ve yalnızca sürüm oluşturma yapılandırılmış nesneler için kullanılabilir. Açılan formda bir nesne seçin (örnekte bu bir Alıcının siparişidir), sürümleri seçin bu nesne karşılaştırmak için Sürümleri Karşılaştır düğmesini tıklayın.

Bu komut, bir Nesne Sürümü Değişiklikleri Raporu oluşturacaktır (büyütmek için resmin üzerine tıklayın):


Anahtar kelimeler: Tescil, tarih, değişim.

Bu makale, seslendirilen üçüncü algoritmanın bir açıklamasıdır.

Veritabanındaki nesnelerin detaylarındaki değişikliklerin geçmişini depolamakla ilgilidir.

içindeki nesneler bu durum- bunlar, genel olarak, kullanıcı tarafından manuel olarak girilen, değişiklik geçmişinin ayrıntılı olarak saklanmasının gerekli olduğu ve bir bağlantının yapılabileceği dizinler, belgeler, değişim planları, özellik türleri için planlar vb. yaptı.

Nesnelerin bileşimi isteğe bağlıdır ve programcı tarafından belirlenir, yani, örneğin mekanizmayı yalnızca tüm dizinler ve seçici belgeler için yapılandırabilirsiniz.

Genel fikir, bir madeni parada dört ruble kadar basittir.
Ancak daha yakından incelendiğinde, birkaç nüans netleşti.
Ve düşünceler bir makaleye dönüştürüldüğünde her şey değişti.

Sırayla başlayalım.

Başlamak için, kayıt memuruna atıfta bulunmadan periyodik olarak "Ayrıntıların tarihi" bilgi kaydını yapıyoruz.

O zaman, bu bilgi kaydında gerçekten "Herhangi bir referans" türünün "Nesne" boyutuna sahip olmak istiyorum, ancak bu yapılamaz.
Bunun nedeni, kayıtta referans alınacağından, silinmek üzere işaretlenen nesneleri silme yeteneğimizi kaybetmemizdir.
Bu boyut önde gelen yapılırsa, silerken, nesnenin kendisiyle birlikte silinecek olan bu nesnenin tüm geçmişini kaybederiz.
Öte yandan, bu gereklilik olmadan bile, ne bir rapor oluşturmak ne de basitçe bir nesne bulmak için kesinlikle hiçbir yer yoktur.
Bu nedenle, öznitelik değişikliklerinin kaydının gerekli olduğu her nesnede, "String (32)" tipinin "GUID" özniteliğini ekleriz.
Ayrıca, "Attributes History" bilgi kaydına "String (32)" tipinin "Object GUID" boyutunu ekliyoruz.

O yüzden önce yazmak istedim.

Sonra iyi düşündüm.

İlk olarak, sorgularda nesne tablolarına farklı birleştirmeler yapmak çok kötüdür. istenen nesne"GUID" özniteliği ile.

İkinci olarak, 1C'nin kayıt günlüğü, nesnenin bağlantısını tam olarak herhangi bir GUID'de değil, "Veri" özniteliğinde depolayacak şekilde uygulanır.
Sadece nesneleri silerken, kayıt günlüğü referans bütünlüğü kontrolüne katılmaz ve bir nesneyi sildikten sonra, içindeki "Veri" özniteliği, birçok kişiye tanıdık gelen yazıyı gösterir.<Объект не найден> ...".

Üçüncü olarak, bağlantılar yerine GUID'in kalan alanlara, yani kullanıcıya, eski değere ve yeni değere eklenmesi gerekecektir.

Dördüncüsü, işaretlenmiş nesneleri silmek için kendi algoritmanızı yapmak çok sinirlenmekten daha ucuzdur.
Ayrıca, tipik algoritma son derece zayıftır.

Doğru, bu makale çerçevesinde, işaretli nesneleri silmek için alternatif bir algoritma açıklamayacağım, kendimi yalnızca bu algoritmanın "Ayrıntıların geçmişi" bilgi kaydındaki işaretli nesneleri silerken tüm referansları değiştirmesi gerektiğini söylemekle sınırlayacağım. boş referansları olan silinmiş nesnelere.
Neden boş?
Evet, veritabanının referans bütünlüğünün ihlal edilmemesi için her şey basittir.

Bu nedenle, "Herhangi bir bağlantı" türünün "Object" boyutunu ekliyoruz.
"Herhangi bir bağlantı" türü yerine, belirli nesneler için kutuları işaretleyebilirsiniz, fark yok.

Devam ediyoruz.

Nesneye ek olarak, değişen öznitelik hakkında bilgi sahibi olmanız gerekir.
Bu nedenle, "Dize (25)" veya "Directory.Object Details" türünden "Attributes" boyutunu istediğiniz gibi ekliyoruz.
Örneğin, onu bir dize yaptım.

Ardından değişiklikleri yapan kullanıcı hakkında bilgi ekliyoruz.
Bunu yapmak için "Directory.Users" türündeki "Kullanıcı" kaynağını ekleyin.
Ayrıca "String (25)" türündeki "Computer Name" kaynağını da ekliyoruz.
25 karakterin yetmediği, istenilen miktarda değişebilir.

Hangi dağıtık veritabanında gereksinimlerin değiştirildiğini bilmek için, dağıtılmış veritabanlarının kullanılması durumunda, "Dağıtılmış veritabanları" değişim planı türünden bir "Dağıtılmış veritabanı" kaynağı eklemeniz gerekir.

Ve son olarak, bileşik türden "OldValue" ve "NewValue" olmak üzere iki kaynak ekliyoruz.
"Sayı", "Dize", "Boolean", "Tarih" ve "Herhangi Bir Referans" türlerinin bir parçası olarak.
"Sayı" ve "Dize" türlerinin boyutu, herhangi bir özelliğin içeriğinin buna uyması için olası olanların maksimumuna ayarlanır.
Burada talihsiz bir an var, türlere sınırsız uzunlukta bir dizi eklenemez.
Bu nedenle, mekanizma, içeriği daha uzun olan sınırsız uzunluktaki diziler için kullanılamaz. en büyük boy bizim türümüzdeki dizeler.

Şimdi nesnelerdeki ayarlar hakkında.
Geçmişi kaydedilecek tüm nesnelerde aşağıdaki kod gereklidir.
"RecordSetHistoryObjects" değişkeni, yeni bir nesne için ayrıntıların "BeforeWrite" prosedüründe kontrol edilmesi ve "Object" özniteliğinin "Reference" değeriyle doldurulması gerektiğinden modül değişkenlerine taşındı. "OnWrite" prosedürü, çünkü "BeforeWrite" prosedüründe yeni nesne için henüz bağlantılar yoktur.
Değişken RecordsetHistoryObjects; Kayıt Öncesi Prosedür (Arıza) ProcessAttributeChange(RecordSetHistoryObjects, "Kod"); ProcessAttributeChange(RecordSetHistoryObjects, "Ad"); ProcessAttributeChange(RecordSetHistoryObjects, "Üst"); ProcessAttributeChange(RecordSetHistoryObjects, "Sahip"); A = 0 için ThisObject.Metadata().Attributes.Quantity() Tarafından - 1 Döngü ProcessAttributeChange(RecordSetObjectHistory, ThisObject.Metadata().Attributes[A].Name); Bitiş Döngüsü; RecordsetHistoryObjects.Quantity() If Write(Failure) İşleminin Sonu Prosedürü<>0 Sonra RecordsetHistoryObjects'den Her Kayıt İçin Döngü Record.Object = Link; Bitiş Döngüsü; RecordSetHistoryObjects.Write(False); EndIf; EndProcedure Prosedür ProcessAttributeChange(RecordsetObjectHistory, AttributeName) If ThisObject[AttributeName]<>Reference[AttributeName] Sonra NewRecord = RecordSetHistoryObjects.Add(); NewRecord.Period = CurrentDate(); NewRecord.Attribute = AttributeName; NewEntry.ComputerName = BilgisayarAdı(); NewRecord.User = SessionParameters.CurrentUser; NewRecord.DistributedBase = SessionParameters.CurrentDistributedBase; NewRecord.OldValue = Bağlantı[ÖzellikAdı]; NewRecord.NewValue = BuNesne[ÖzellikAdı]; EndIf; İşlem Sonu

Hiyerarşik bir alt dizin için bir örnek verilmiştir.
Başka bir nesne, örneğin bir belge alırsak, hizmet ayrıntılarının bileşimi "Kod", "Ad", "Üst" ve "Sahip" değil, "Tarih" ve "Numara" farklı olacaktır.

Aşağıdaki makaleler, bu makalede açıklanan mekanizmayı kullanma örneklerini ele alacaktır.

Dağılmış.

Geniya 1C'den: Görmek

"1C: Muhasebe 8" de (rev. 3.0), 3.0.35 sürümünden başlayarak, belgelerde ve dizinlerde yapılan değişikliklerin geçmişini izleyebileceğiniz, nesnelerin sürümlenmesi için bir mekanizma uygulanır.

Sürüm oluşturma, nesnelerde yapılan değişikliklerin geçmişinin depolanması anlamına gelir. Yalnızca kimin, ne zaman ve hangi nesnenin geçmişini tutabilen günlüğün aksine, sürüm oluşturma mekanizması yönetici haklarına sahip bir kullanıcının şunları yapmasına izin verir:

  • belirli kullanıcıların yaptığı belirli değişiklikleri görün;
  • nesnenin herhangi bir sürümünü görüntüleyin;
  • bir nesnenin herhangi bir sürümünü birbiriyle karşılaştırın;
  • nesnenin son durumundan daha eksiksiz veya daha doğru olan önceki bir sürümüne geri dönün.

Sürüm oluşturmanın kullanımı özellikle şunlarla ilgilidir: İlk aşama programın uygulanması, bilgi miktarı az olduğunda ve sanatçılar birçok hata yaptığında (örneğin, gereksiz bilgiler girerler veya nesne içindeki bir özelliğin adını veya değerini temizlerler).

Nesnelerde kaydedilen değişikliklerin geçmişi, referans kitaplarını ve belgeleri sıraya koymanıza ve sonraki çalışmalarda yaygın hatalardan kaçınmak için kullanıcıların eylemlerinin sırasını analiz etmelerine yardımcı olur.

Gelecekte, programdaki bilgi miktarı arttığında, genel olarak bazı nesnelerin sürümlerini kademeli olarak bırakabilir veya yalnızca belirli bir şekilde uygulayabilirsiniz. önemli noktalar, örneğin, belgeleri yürütürken. Sürümlerin saklama süresini, örneğin bir yıl sınırlayabilirsiniz. Bundan sonra, sürümler zamanlanmış bir görev tarafından otomatik olarak silinecektir. Zamanlanmış bir görevin başlatılması, sürüm oluşturma ayarları sayfasında yapılandırılır.

Nesneleri Sürüm Oluşturma

Sürümleri depolama yeteneği, muhasebe sisteminin aşağıdaki bölümleriyle ilgili dizinler ve belgeler için desteklenir:

  • Banka ve kasa;
  • Satış;
  • alımlar;
  • Stoklamak;
  • Üretme;
  • OS ve maddi olmayan duran varlıklar;
  • Maaş ve personel.

Seçilen katalog veya belge için sürüm oluşturma etkinleştirilirse, komut kendi biçiminde kullanılabilir olacaktır. Değişikliklerin tarihi(Şek. 1).

Pirinç. 1. Takım Değişikliklerin tarihi bir dizin öğesi biçiminde.

Bu komut, nesne sürümlerinin listesini açar (Şekil 2).

Pirinç. 2. Nesne değişikliklerinin tarihi.

Liste, nesne değişikliklerinin geçmişini görüntülemek ve saklanan sürümleri seçmek için tasarlanmıştır. Sürüm geçmişi, soruları hızlı bir şekilde yanıtlamanıza olanak tanır:

  • Nesneyi kim değiştirdi?
  • Değişiklikler ne zaman gerçekleşti?
  • Nesnede ne değişti?

Liste aşağıdaki bilgileri görüntüler:

  • - seri numarası sürümler, sürümler azalan sırada listelenmiştir; sayılar, ilk versiyon listenin en altındadır;
  • Değişikliklerin yazarı- nesneyi düzenleyen kullanıcı;
  • tarih- düzenleme tarihi ve saati;
  • Yorum- bu alana belirli bir sürüm hakkında ayrıntılı bilgi girebilirsiniz. Program, örneğin başka bir sürüme geçerken bu alanı otomatik olarak doldurur.

seçim yoluyla Ayrıntılardaki değişiklikler değişiklikleri sadece belirli ayrıntılara yansıtmak mümkündür. Bunu yapmak için, seçim formunda, değişikliklerin sürüm listesine yansıtılması gereken ayrıntıları bayraklarla işaretlemek ve düğmesine tıklamak gerekir. Seçmek.

İlgili düğmeleri kullanarak, liste formunda aşağıdaki eylemler kullanılabilir:

  • Açık sürüm- ilgilenilen zamanda nesnenin durumu hakkında bir raporun görüntülenmesi;
  • Sürümleri Karşılaştır- listede önceden seçilmiş iki veya daha fazla sürümün durumunu değiştirmeye ilişkin bir raporu görüntüleme (rapor tam olarak hangi ayrıntıların farklı olduğunu gösterecektir);
  • Sürüme git -önce seçilmesi gereken nesnenin önceki sürümlerinden birine dönün (bu sürümü kaydettikten sonra yapılan değişiklikler iptal edilecektir).

Lütfen bir nesne silindiğinde geçmişinin de silindiğini unutmayın, bu nedenle sürüm oluşturma bu durumda yardımcı olmaz.

Sürüm depolama ayarları

Nesnelerde yapılan değişikliklerin geçmişini korumak için komutu seçinDestek ve bakım bölümden Yönetimve bayrağın olduğundan emin olunNesne sürümü oluşturma açık (Şekil 3).

Pirinç. 3. Bir bölüm içindeki nesnelerin sürüm oluşturma mekanizması Yönetim.

Pirinç. 4. Nesne sürüm oluşturma ayarları.

Şeklinde Nesne sürümü oluşturma aşağıdakilerin bir listesi görüntülenir:

  • Bir obje- nesne türlerine göre gruplandırılmış bir ağaç biçimindeki program nesnelerinin listesi;
  • sürüm oluşturma seçeneği- seçili sürüm oluşturma seçeneği;
  • Sürüm saklama süresi- seçilen sürüm saklama süresi.

Bir sürüm oluşturma seçeneği belirlemek için bir veya daha fazla nesne seçin ve ardından düğmesine tıklayın. Sürüm oluşturma seçeneğini ayarlayın. Açılır listeden seçin istenilen seçenek her tür belge ve dizin için sürüm oluşturma:

  • sürüm yapma- nesne sürüm geçmişi korunmaz;
  • Yazma Sürümü - Yeni giriş bir referans veya belge her değiştirildiğinde (veya yenisi oluşturulduğunda) sürüm geçmişine kaydedilir;
  • - seçenek yalnızca gönderiye izin verilen belgeler için geçerlidir. Belgenin ilk versiyonu, ancak belgenin ilk kaydından sonra tarihe kaydedilecektir; daha sonra, belgenin versiyonları, gönderilen belgenin her kaydıyla birlikte kaydedilecektir. Bu ayar, programda depolanan bilgi miktarında artışa yol açan yeni tamamlanmamış belgelerin sürümlerini oluşturmanıza izin vermez;
  • Başlangıçta sürüm- Bu seçenek yalnızca iş süreçleri için geçerlidir. İş sürecinin ilk versiyonu ancak başladıktan sonra kaydedilecektir. Mod, lansmana hazırlanırken iş süreçlerinin gereksiz versiyonlarını oluşturmamanızı sağlar;
  • Varsayılan- önerilen ayarları yapın (dizinler için - sürüm yapma, belgeler için - Beklemedeki Sürüm).

Sürüm oluşturma, bir grup program nesnesi için hemen yapılandırılabilir; örneğin, tüm belgeleri veya tüm dizinleri seçebilirsiniz.

Bir kez daha, çok sayıda nesneyi sürümlendirmenin programda depolanan bilgi miktarında bir artışa yol açtığını ve bu da programı önemli ölçüde yavaşlatabileceğini unutmayın, bu nedenle bu özelliğin seçici olarak kullanılması önerilir.

Sürümler için saklama süresini seçmek için düğmesine tıklayın. ve ardından açılır listeden seçin doğru zaman her tür belge ve dizin için sürümlerin depolanması. Sürümler saklanabilir:

  • Son bir hafta için;
  • Geçen ay için;
  • Son üç ayda;
  • Son altı ayda;
  • Başına Geçen yıl;
  • Süresiz.

Takımlar Sürüm oluşturma seçeneğini ayarla ve Sürüm saklama süresini ayarla menüde de bulunabilir Daha veya sağ tıklama bağlam menüsünde.

alanında Toplam eski sürümler programdaki eski sürümlerin sayısı ve hacmi hakkında bilgi sağlar. Eski sürümleri kaldırmak için düğmeyi tıklamanız gerekir. Temizlemek.

İçin , eski sürümlerin otomatik olarak silinmesi için ilgili bayrağı etkinleştirmeli ve köprüyü izlemelisiniz Bir program ayarlayın(Şek. 5). Yapılandırılan program pencerenin altında görüntülenecektir.

Pirinç. 5. Eski sürümleri kaldırmak için zamanlanmış bir görev ayarlama.

Yapılan ayarlara göre, eski sürümler zamanlanmış bir görev tarafından otomatik olarak silinecektir (örneğimizde günlük).

Bu makale, yeni işlevlerin duyurusudur.
Yeni işlevler öğrenmek için bu makalenin içeriğini kullanmanız önerilmez.
Yeni işlevin tam açıklaması, ilgili sürümün belgelerinde sağlanacaktır.
Tam liste yeni sürümdeki değişiklikler v8Update.htm dosyasında verilmiştir.

8.3.11.2867 sürümünde uygulandı.

Yeni bir mekanizma hayata geçirdik, veri geçmişi, kullanıcılar tarafından uygulama verilerinde yapılan değişikliklerin geçmişini kompakt bir şekilde saklar. Hazır arayüz çözümleri veya yerleşik dili kullanarak artık veri değişikliklerini esnek bir şekilde analiz edebilir, farklı sürümleri karşılaştırabilir ve verileri seçilen sürümdeki durumuna geri yükleyebilirsiniz.

Hangi senaryolarda veri geçmişiyle çalışmanız gerekir?

Çoğu zaman, bazı değişiklik yapan kullanıcıyı belirlemek için veri geçmişine erişmek gerekir. Örneğin, bir ürün karşı tarafa çok büyük bir indirimle satıldı ve şimdi böyle bir indirimi kimin belirlediğini anlamak istiyorum. Veya bir ürünün fiyatının doğru göründüğü, ancak geçmişte bu ürünün daha düşük bir fiyata satıldığı başka bir durum. Fiyatı kimin değiştirdiğini ve ardından önceki değerine döndürdüğünü bulmamız gerekiyor.

Veri geçmişine ihtiyaç duyulan bir başka durum da şu anda verideki bazı özniteliklerin değerinin olmasıdır. Muhasebe Sistemi sonuçlanacak şekilde ayarlayın Olumsuz sonuçlar. Bu değerin tam olarak ne zaman ayarlandığını ve hangi kullanıcının ayarladığını bulmanız gerekir.

Durumu daha fazla analiz etmek için, bir zamanlar yanlış bir şey yapan belirli bir kullanıcının yaptığı tüm değişiklikleri bulmak gerekebilir. Çünkü başka durumlarda da benzer bir hata yapabilirdi.

Son olarak, tüm uygun olmayan değişiklikler bulunduktan sonra, verilerin önceki, doğru durumunu geri yüklemek veya hatta doğrudan silinen verileri geri yüklemek için doğal bir istek olabilir.

Aynı zamanda, tüm bu senaryolarda, bu özelliklerin minimum performans ve disk alanı kaybı ile elde edilmesini istiyorsunuz.

Böylece değişen nesnelerin geçmişi, birlikte çalıştığınız faydalı nesnelerden daha fazla yer kaplamaz. Veya bu hükümlerin gerçekleşmemesi için işlevsellik kullanıcı deneyiminde önemli bir yavaşlamaya neden olur.

Performans kayıplarını tamamen ortadan kaldırmanın imkansız olduğu açıktır, çünkü bir eylem yerine iki eylem gerçekleştirilmelidir: nesneyi kaydetme ve ayrıca geçmişini kaydetme. Ama aynı zamanda bu kayıpların görünmez olmasını istiyorum.

İşlevsellikle ilgili olmayan ve işlevsellikle ilgili olmayan başka bir özellik daha var. teknik gereksinimler, ancak 1C: Enterprise pazarının özellikleriyle. Hızlı çalışacak ve harika işlevselliğe sahip çok iyi bir mekanizma ile karşılaşabilirsiniz. Ancak kurmak, açmak ve bakımını yapmak için önemli bir teknik bilgi gerektiriyorsa, tüm avantajlarını ortadan kaldırabilir.

Bu nedenle, böyle bir mekanizmanın yönetimi hem geliştirici hem de bilgi bankası yöneticisi için zor olmamalıdır. Gerçekten de, küçük dosya uygulamalarında, yönetici genellikle bu uygulama çözümünün kullanıcılardan biri ve bazen de tek kullanıcısıdır.

Platformda geçmiş analizi için hangi fırsatlar zaten var?

"Sistemde neler olup bittiğini" analiz etmek için kullanabileceğiniz ana araç günlüktür. Diğer şeylerin yanı sıra, veri değişikliklerinin gerçeklerini kaydeder. Yani, bazı nesnelerin verilerini kimin ve ne zaman değiştirdiğini öğrenebilirsiniz. Ancak tartışılan alandaki yetenekleri burada bitiyor, çünkü kayıt günlüğünden tam olarak hangi özelliğin değiştirildiğini, önceki durumunun ne olduğunu anlamak imkansız. Ve dahası, kayıt günlüğü kullanılarak özniteliğin önceki durumunu veya tüm nesneyi geri yüklemek imkansızdır.

Uzun süredir var olan ve tüm dolaşım çözümlerinde bulunan başka bir araç, standart alt sistemlerden oluşan bir kitaplık olan BSP'dir. Bir nesne sürüm oluşturma alt sistemi içerir. Bu alt sistem, listelenen tüm işlevleri içerir, ancak bazı pratik sınırlamaları vardır.

İlk olarak, kitaplığın bir parçasıdır, bu nedenle uygulanan çözümde uygulanması nitelikli bir geliştiricinin katılımını gerektirir. BSP'nin uygulanan çözümde başlangıçta mevcut olması iyidir. Ancak orada değilse, yönetici veya dahası nitelikli bir kullanıcı bunu kendi başına uygulayamaz.

İkincisi, veri geçmişini koruma görevi kendi içinde düşük seviyeli bir görevdir ve bunu platformun teknolojik katmanında çözmek daha verimlidir.

Platforma entegre bir çözümün faydaları

Mevcut durumu analiz ettiğimizde, BSP'yi kullanma konusundaki mevcut deneyim, tüm artıları ve eksileri tarttı, şu sonuca vardık: etkili çözüm veri geçmişini teknolojik platformun kendisinin bir parçası olarak uygulayacaktır. Bu, aşağıdaki faydaları sağlayacaktır:

  • Bu mekanizmayı kullanmak için yönetici veya kullanıcının konfigürasyonu değiştirmesi gerekmez, ihtiyacınız olan her şey zaten platformdadır. Sadece açmanız gerekiyor.
  • Bu mekanizma, konfigürasyonun bir parçası olarak uygulanan analoglardan daha hızlı çalışacaktır, çünkü. yerleşik dilde bulunmayan özellikleri kullanacaktır.
  • Veri geçmişinin kendisi daha az yer kaplar, çünkü verilerin bir kopyası değil, yalnızca önceki sürümden farklılıkları saklanır. Ek olarak, sürüm oluşturmanın kendisi tüm ayrıntılara değil, yalnızca ilgi çekici olanlara uygulanabilir. Ayrıca ek tasarruf sağlayacaktır.
  • Yalnızca benzersiz bir bağlantıya (referans kitapları, belgeler vb.) sahip olan nesnelerin değil, örneğin bilgi kayıtlarının kayıtları gibi nesne olmayan varlıkların da sürümlendirilmesini desteklemek mümkün olacaktır.

Mekanizma hakkında temel bilgiler

Veri geçmişi mekanizması, platform içinde tam olarak uygulanmaktadır, herhangi bir ek yazılım kurulumu gerektirmez, her an çalışmaya hazırdır, ancak varsayılan olarak etkin değildir.

Hem yapılandırıcıda hem de 1C:Enterprise modunda etkinleştirebilirsiniz. Konfigüratörde bu, geliştirici tarafından 1C:Enterprise kullanıcı modunda yerleşik dilde yazılmış işleme kullanılarak yapılabilir.

Mekanizmanın "etkinleştirilmesi", hangi belirli yapılandırma nesneleri için değişiklik geçmişinin tutulacağını belirtmektir. Ayrıca, tarih yalnızca tüm nesne için değil, aynı zamanda bireysel olarak da etkinleştirilebilir. oluşturan parçalar: ayrıntılar, ölçümler, kaynaklar. sahne dahil tabular parçalar. Böylece şunları seçebilirsiniz: tüm bilgileri saklayın veya yerden tasarruf edin.

Dizinler, belgeler, görevler, iş süreçleri ve bilgi kayıtları için geçmiş depolamayı uyguladık. Belki gelecekte bu listeyi genişleteceğiz.

Geçmiş verilerini ayrı bilgi tabanı tablolarında saklarız. Verimlilik için yalnızca veri sürümleri arasındaki farkı saklarız. Tablo bölümünde çok sayıda satır içeren "ağır" bir belgeniz varsa ve belgenin kendisinde yalnızca bir özniteliği değiştirirseniz, veri geçmişine yalnızca bu değişiklik kaydedilir. Yani, bu nesnenin çok sayıda kopyasını saklamayacak ve diskte yer kaplamayacaksınız.

Veri değişikliklerine ek olarak, sürümün yazıldığı sırada nesne meta verilerini de saklarız. Bu, farklı bir konfigürasyon durumunda yazılmış nesneler hakkında doğru bir şekilde raporlar oluşturmak için gereklidir. Örneğin, bazı ayrıntılar farklı çağrıldığında, başka ayrıntı yoktu ve üçüncüler mevcuttu, ancak daha sonra kaldırıldı.

Veri Değişikliği İşleme

Veri sürümü oluşturma işlemi iki adımdan oluşur. İlk olarak, bir nesne (örneğin bir belge) yazdığınızda, bir özel mesaj, kuyruğa yerleştirilir. Bu aşama platform tarafından gerçekleştirilir, geliştirici buna katılmaz.

Ancak ikinci aşama geliştirici tarafından başlatılır. İkinci aşama, kuyruk işlenirken bu verilerin alınması, sürüm deposuna yerleştirilmesi ve onlarla çalışmak için uygun hale gelmesidir.

Kuyruğu bu şekilde işlemek için veri geçmişi yöneticisi ( DataHistoryManager) bir yöntem var Tarihi Güncelle(). Tam metin arama dizinini güncellemek için benzer bir yöntemle aynı şekilde kullanacağınızı varsayıyoruz. Yani, belirli bir sıklıkta gerçekleştirilen bazı zamanlanmış görevlerde geçmişi güncelleyeceksiniz.

Bu asenkron çalışma sonucunda hem nesnelerin verimli yazılması hem de performans kayıplarının en aza indirilmesinin sağlanacağına inanıyoruz.

Kullanıcı arayüzü

1C:Enterprise'ın kullanıcı arayüzünde, yeni mekanizma denir. Değişikliklerin tarihi. Bu makalenin başında listelenen eylemleri gerçekleştirmenize izin veren birkaç form içerir.

Belirli bir nesne için sürümlerin listesi

Bir nesne için geçmiş kaydı etkinleştirilirse, standart nesne komutları arasında yeni bir komut görünür. Değişikliklerin tarihi.

Bir nesnenin tüm değişikliklerinin (sürümlerinin) bir listesini görmenizi sağlar.

bir sütunda Kaynak değişiklikler Değişiklik düğümde yapıldıysa ve veri alışverişi sonucunda bu veritabanına "geldiyse", bir değişim planı düğümü de belirtilebilir.

Bu listede, sütunda

Tipik konfigürasyonlarda 1C:Enterprise 8.3 göründü yeni fırsat - Nesne sürümü oluşturma, ilk olarak, seçilen bilgi bankası nesnesinde (belge veya dizin) yapılan tüm değişiklikleri görüntülemenize ve ikinci olarak, bu nesnenin önceki sürümlerinden herhangi birine dönmenize izin verir. Bunu yapmak için, nesneleri değiştirirken, sistem değişiklikleri yalnızca nesnenin kendisinde değil, aynı zamanda ayrı bir varlık oluşturur - bilgi tabanı nesnesinin sürümü. Her sürüm, onu kimin ve ne zaman oluşturduğu hakkında bilgi içerir. Sürümü bir öncekiyle karşılaştırarak, sürümde yapılan değişikliklerin bir listesini alıyoruz.

Öncelikle programda bu seçeneği etkinleştirmeniz ve gerekli ayarları yapmanız gerekiyor:

Açılan listede seçeneği kullanmak için bayrağı ayarlayın ve depolama ayarları:

Açılan listede, versiyonlamak istediğimiz nesnelerin listesini seçin (yani, bu nesnelerin tüm varyantlarını değiştiklerinde kaydedin). Örneğin, dizin sürümünü ayarlayalım isimlendirme ve belge Mal ve hizmetlerin alınması.


dizinler için yeni bir versiyon belge, dizin öğesinin yazılması sırasında kaydedilir, ancak belgeler için yalnızca aşağıdakileri gerçekleştirirken yeni sürümleri kaydetmek mümkün olur:


Bu durumda, sistem belgenin yeni sürümlerini ancak yeniden gönderilirse kaydedecek ve belge, nesnenin bir sürümü oluşturulmadan yazılacaktır. Sürüm oluşturma seçeneğine ek olarak, sürüm oluşturma dönemini de seçmemiz gerekiyor:


Burada, kendi takdirinize bağlı olarak seçin, ancak nesne sürümlerini depolamanın bilgi tabanının boyutunu artırdığını ve performansını azalttığını unutmayın; bu nedenle, mümkünse, nesnelerin eski gereksiz sürümlerini periyodik olarak silmeye çalışın. Bunu yapmak için, formun altındaki programı ayarlayabilirsiniz:


İsimlendirmeye ek olarak, makbuz belgelerinin versiyonlarını seçeceğiz:

Şimdi Nomenclature dizininin herhangi bir öğesini açalım ve ayrıntıları keyfi olarak değiştirelim, örneğin Makale, KDV oranı ve yorum:

sonuç olarak, değişiklikler oldu:


Şimdi üst komut çubuğundaki sürüm görünümü düğmesini açın:


Açılan listede, nesnenin kaydedilmiş tüm sürümlerinin bir listesini görüyoruz. Görüntülemek için herhangi bir sürümü açabilir, seçici olarak birbiriyle karşılaştırabilir veya kaydedilmiş herhangi bir sürüme geçebiliriz (örneğin, son değişiklikler kılavuz/belge gerekli değildir).

Anahtarı basılı tutmak Ctrl, dizinin iki versiyonunu seçin ve Sürümleri Karşılaştır:


Dizinde yapılan tüm değişiklikleri görebileceğiniz sürüm değişiklikleriyle ilgili bir rapor oluşturuldu:


Gerekirse, karşılaştırma için ayrıntıları noktasal olarak seçebiliriz, rapor bu ayrıntıları yalnızca iki versiyonda karşılaştıracaktır:

Şimdi makbuz belgesi ile benzer manipülasyonları yapacağız.

Örneğin, tablo bölümündeki tutarı değiştirelim ve birincil belgenin numarasını ve tarihini dolduralım.


Sürümleri görüntüle düğmesine tıklandığında ilgili pencere açılır:


Burada her şey dizinlerle aynıdır: belirli bir sürümü görüntüleyebilir, iki sürümü birbiriyle karşılaştırabilir veya belgeyi kaydedilmiş herhangi bir sürüme döndürebilirsiniz. Listenin iki satırını seçin ve Sürümleri Karşılaştır:


Diğer tipik 1C:Enterprise 8.3 yapılandırmalarında, sürüm oluşturma aynı şekilde yapılandırılır.