How Can We Help?
Ustawianie cechy Enova przy wystawianiu dokumentu z Unicore Produkcja
Założenia
- W Enova mamy zdefiniowany słownik globalny “MPK”
- W Enova, w towarach mamy cechę referencyjną do słownika “MPK” o nazwie “Ref1”
- W Enova, w dokumentach magazynowych mamy cechę referencyjną “Ref2” do tego samego słownika.
Oczekiwania
Chcemy, aby przy rozliczaniu ZP na dany produkt dokumenty RW miały ustawianą cechę “Ref2” na podstawie cechy “Ref1”
Rozwiązanie
W Produkcji należy zdefiniować zdarzenie dla obiektu HMDocument: Obiekty biznesowe => Dokument (HMDocument) => zakładka “Zdarzenia” , wklejając poniższy kod.
using System; using System.Linq; using System.Windows; using Worm; using Worm.Authentication; using Worm.Ui.Wpf; using Worm.Ui.Core; using Worm.Ui.Wpf.Forms; using Worm.Ui.Wpf.Views; using Unicore.Manufacture.Business; using Hydra.Enova; using Soneta.Business; using Soneta.Handel; using Soneta.Types; using Soneta.Ksiega; using Log = Worm.Ui.Wpf.Log; public override void OnObjectUpdated (object sender, ObjectChangedEventArgs args) { if (args.IsRemote) return; var hmDoc = args.DbObject as HMDocument; //dokument Produkcja var storeDoc = StoreDocument.Get(hmDoc.ForeignId); //dokument Enova obiekt Produkcji if (hmDoc == null || storeDoc == null) return; if (storeDoc.NativeFeatures["Ref2"].Value != null) return; var issue = WorkOrderIssue.Get(iss => iss.StoreDocumentId == hmDoc.Id && iss.Input); //rozl powiązane z dokumentem if (issue == null) return; var wol = issue.WorkOrderLine; //pozycja zlecenia var kierunekFeat = wol.Product.Article.NativeFeatures["Ref1"].Value as EnovaDictionaryItem; if (kierunekFeat == null) return; try { using (var session = EnovaLoader.CreateSession()) { var handelMod = HandelModule.GetInstance(session); var ksiegaMod = KsiegaModule.GetInstance(session); var elSlow = ksiegaMod.ElemSlownikow[kierunekFeat.Id]; var enovaRw = handelMod.DokHandlowe[storeDoc.Id]; if (enovaRw == null || elSlow == null) return; using (var trans = session.Logout(true)) { enovaRw.Features["Ref2"] = elSlow; trans.Commit(); } session.Save(); } } catch(Exception e) { Log.Add(new Result().AddError(e)); } }