Skocz do zawartości

Dostęp do pól własnych v2 na wydrukach od 31.1.0

Polecane posty

Istnieją dwa sposoby na odczytanie wartości pól własnych v2 na wydrukach:

  • po przez użycie interfejsu IPolaWlasneAdv2Accessor; szczegóły znajdują się w osobnym poście: 
  • po przez użycie identyfikatorów pól własnych; co zostało opisane w tym poście

 

Historycznie rzecz ujmując najpierw powstał sposób związany z użyciem interfejsu IPolaWlasneAdv2Accessor jednak okazało się, że zwraca on zawsze pola z pierwszej pozycji na wydruku, w związku z tym problemem powstał sposób oparty o identyfikatory.

W wersji 43.0.0 nexo poprawiliśmy jednak problem ze zwracaniem pierwszej pozycji na wydruku przy użyciu IPolaWlasneAdv2Accessor, dlatego oba powyższe sposoby stały się tak samo akceptowalne.

 

 

Identyfikator pola własnego to nazwa kolumny w bazie danych, pod którą dostępne jest to pole. Aby sprawdzić jaki identyfikator odpowiada jakiemu polu należy wejść do modułu konfiguracji pól własnych obiektu i wyświetlić tam kolumnę Id (dostępną od nexo 32.0.0). Domyślnie kolumna Id jest ukryta:

314511077_Idpolwlasnychv2.thumb.png.2f98401493352a957a4c53be50507a82.png

Więcej o identyfikatorach pól własnych można poczytać w poście dotyczącym struktury pól własnych v2 w bazie danych:

Po tym wstępie możemy przejść do konkretów:
Aby móc odwoływać się do pól własnych na wzorcu po przez ich identyfikatory, należy w drzewie obiektów znaleźć obiekt, który posiada pola własne v2 np. chcąc na wzorcu "FS standard" mieć dostęp do pól własnych v2 nabywcy, trzeba znaleźć: "Business Objects->Nabywca->Podmiot->PodmiotDlaKtoregoHistoria". Po znalezieniu kliknąć prawym przyciskiem myszy i wybrać "New Business Object", zaznaczyć "Child of Business Object", wybrać "PolaWlasneAdv2", kliknąć "OK" i ponownie "OK":

Zal1.thumb.png.99cbac3196c415e05a11fd9bde719230.png
Po wykonaniu tego w drzewie obiektów pojawią się identyfikatory pól własnych v2:

Zal2.thumb.png.e46a8b6f6fe9493ee51b04768ded3c01.png
Aby widzieć jakie identyfikatory odpowiadają jakim polom, identyfikatorom można ustawić aliasy. Robi się to po przez kliknięcie 2x na dany identyfikator i wypełnienie "Alias":

Zal3.thumb.png.1b947fafa41c17e0941d46870eec9ebf.png
Po przydzieleniu aliasów, pojawią się one obok identyfikatorów:

Zal4.thumb.png.3f6d71550d66e88c2734f7d5e2abd0fd.png
Od tej pory można używać pól własnych v2 po przez ich identyfikatory np.:

Zal5.thumb.png.559a1ed5c5d86253da82aacfd3b3daf4.png

Edytowane przez Łukasz Kubacki
dodatkowy opis na początku postu odnośnie sposobów odczytu pól własnych v2 na wydrukach
  • Lubię to 1
Link to postu

Pola słownikowe

Jeszcze chciałbym zwrócić uwagę na pola słownikowe. W moim przykładzie mam dwa pola słownikowe:

  • Pole typu "Słownik własny" o nazwie "pz slownik", które ma identyfikator: Nabywca.Podmiot.PodmiotDlaKtoregoHistoria.PolaWlasneAdv2.I1
  • Pole typu "Słownik systemowy" walut o nazwie "pz waluta", które ma identyfikator: Nabywca.Podmiot.PodmiotDlaKtoregoHistoria.PolaWlasneAdv2.G0

Identyfikatory pól słownikowych mają w sobie klucz pozycji słownika, a nie wartość pozycji słownika. Dlatego do pobrania wartości pozycji słownika, na podstawie klucza trzeba posłużyć się pomocniczymi metodami, które trzeba dodać w zakładce "Code":

Najpierw trzeba dodać na początku wzorca użycie przestrzeni nazw (ang. using):

using InsERT.Moria.PolaWlasne2;  
using InsERT.Moria.Narzedzia.PolaWlasne2;
//trzeba też sprawdzić, czy we wzorcu są poniższe dwa usingi i gdy jakiegoś brakuje, to należy go także wstawić:
using InsERT.Moria.Wydruki;
using System.Linq;

Następnie można wstawić poniższe metody:

	public string PobierzWartoscSlownikaWlasnego(string nazwaSlownika, int? klucz)
	{
		if (klucz == null)
			return null;
		var pw2Helper = PolaWlasne2Helper.BusinessObjectValue as IPolaWlasne2HelperWydruku;
		var slownik = pw2Helper.SlownikiWlasne.PobierzDefinicjeSlownikaWlasnego(nazwaSlownika);
		if (slownik == null)
			throw new InvalidOperationException("Nie znaleziono słownika własnego: " + nazwaSlownika);
		var pozycja = slownik.UtworzZapytanieLinq().FirstOrDefault(p => p.Klucz == klucz);
		return pozycja != null ? pozycja.Wartosc : null;
	}
	
	public string PobierzWartoscSlownikaWlasnegoSqlByInt(string nazwaSlownika, int? klucz)
	{
		if (klucz == null)
			return null;
		var pw2Helper = PolaWlasne2Helper.BusinessObjectValue as IPolaWlasne2HelperWydruku;
		var slownik = pw2Helper.SlownikiWlasne.PobierzDefinicjeSlownikaWlasnegoSql(nazwaSlownika);
		if (slownik == null)
			throw new InvalidOperationException("Nie znaleziono słownika własnego SQL: " + nazwaSlownika);
		var pozycja = ((ISlownikoweZrodloDanych<int>)slownik).UtworzZapytanieLinq().FirstOrDefault(p => p.Klucz == klucz);
		return pozycja != null ? pozycja.Wartosc : null;
	}
	
	public string PobierzWartoscSlownikaWlasnegoSqlByGuid(string nazwaSlownika, Guid? klucz)
	{
		if (klucz == null)
			return null;
		var pw2Helper = PolaWlasne2Helper.BusinessObjectValue as IPolaWlasne2HelperWydruku;
		var slownik = pw2Helper.SlownikiWlasne.PobierzDefinicjeSlownikaWlasnegoSql(nazwaSlownika);
		if (slownik == null)
			throw new InvalidOperationException("Nie znaleziono słownika własnego SQL: " + nazwaSlownika);		
		var pozycja = ((ISlownikoweZrodloDanych<Guid>)slownik).UtworzZapytanieLinq().FirstOrDefault(p => p.Klucz == klucz);
		return pozycja != null ? pozycja.Wartosc : null;	
	}
	
	public InsERT.Moria.ModelDanych.Waluta PobierzWartoscSlownikaSystemowegoWalut(Guid? klucz)
	{
		if (klucz == null)
			return null;
		var pw2Helper = PolaWlasne2Helper.BusinessObjectValue as IPolaWlasne2HelperWydruku;
		var slownik = pw2Helper.SlownikiWlasne.PobierzDefinicjeSlownikaWalut();
		return slownik.UtworzZapytanieLinqTypowane().FirstOrDefault(p => p.Id == klucz);
	}
	
	public InsERT.Moria.ModelDanych.Magazyn PobierzWartoscSlownikaSystemowegoMagazynow(int? klucz)
	{
		if (klucz == null)
			return null;
		var pw2Helper = PolaWlasne2Helper.BusinessObjectValue as IPolaWlasne2HelperWydruku;
		var slownik = pw2Helper.SlownikiWlasne.PobierzDefinicjeSlownikaMagazynow();
		return slownik.UtworzZapytanieLinqTypowane().FirstOrDefault(p => p.Id == klucz);
	}
	
	public InsERT.Moria.ModelDanych.RachunekBankowy PobierzWartoscSlownikaSystemowegoRachunkow(int? klucz)
	{
		if (klucz == null)
			return null;
		var pw2Helper = PolaWlasne2Helper.BusinessObjectValue as IPolaWlasne2HelperWydruku;
		var slownik = pw2Helper.SlownikiWlasne.PobierzDefinicjeSlownikaRachunkowBankowych();
		return slownik.UtworzZapytanieLinqTypowane().FirstOrDefault(p => p.Id == klucz);
	}

Metody te służą odpowiednio:

  • PobierzWartoscSlownikaWlasnego(nazwaSlownika, klucz) - zwraca wartość słownika własnego dla danego klucza
  • PobierzWartoscSlownikaWlasnegoSqlByInt(nazwaSlownika, klucz) - zwraca wartość słownika własnego SQL o kluczu Int
  • PobierzWartoscSlownikaWlasnegoSqlByGuid(nazwaSlownika, klucz) - zwraca wartość słownika własnego SQL o kluczu Guid
  • PobierzWartoscSlownikaSystemowegoWalut(klucz) - zwraca walutę dla danego klucza
  • PobierzWartoscSlownikaSystemowegoMagazynow(klucz) - zwraca magazyn dla danego klucza
  • PobierzWartoscSlownikaSystemowegoRachunkow(klucz) - zwraca rachunek bankowy dla danego klucza

Poniżej przykład użycia:

Zal6.thumb.png.ea5c4fb11cb9d0fb7e677687c8c7e44d.png

Edytowane przez Łukasz Kubacki
usuniecie powtorzonego obrazka
Link to postu
  • 1 miesiąc temu...

Po dodaniu stringu PobierzWartoscSlownikaWlasnego wyskakuje błąd (do mojego poprzedniego wzorca):

The error of compilation
The error of compilation is found in the 'ZkStandard' report:
Nie można odnaleźć nazwy typu lub przestrzeni nazw „IPolaWlasne2HelperWydruku” (czy nie brakuje dyrektywy „using” lub odwołania do zestawu?).

USINGI:

using System;
using System.Drawing;
using System.Windows.Forms;
using System.Data;
using Stimulsoft.Controls;
using Stimulsoft.Base.Drawing;
using Stimulsoft.Report;
using Stimulsoft.Report.Dialogs;
using Stimulsoft.Report.Components;
using InsERT.Moria.Wydruki.Enums;
using InsERT.Moria.Wydruki.Helpers;
using InsERT.Moria.Dokumenty.Logistyka;
using InsERT.Moria.PolaWlasne2;  
using InsERT.Moria.Narzedzia.PolaWlasne2;

A jak sklonowałem wzorzec i zedytowałem kod w ZK standard (domyślny - bez wprowadzania żadnych zmian) - początek wstawiam poniżej - to w domyślnym wzorcu podgląd generuje się bez błędów, a w moim wzorcu (po skopiowaniu całego kodu z domyślnego wzorca) wyskakuje:

The error of compilation
The error of compilation is found in the 'ZkStandard' report:
Nazwa typu lub przestrzeni nazw „DataAccess” nie istnieje w przestrzeni nazw „InsERT.Mox” (czy nie brakuje odwołania do zestawu?).
using System;
using System.Drawing;
using System.Windows.Forms;
using System.Data;
using Stimulsoft.Controls;
using Stimulsoft.Base.Drawing;
using Stimulsoft.Report;
using Stimulsoft.Report.Dialogs;
using Stimulsoft.Report.Components;
using InsERT.Moria.Wydruki.Enums;
using InsERT.Moria.Wydruki.Helpers;
using InsERT.Moria.Dokumenty.Logistyka;
using System.Linq;
using System.Collections.Generic;
using InsERT.Moria.Wydruki;
using InsERT.Moria.PolaWlasne2;  
using InsERT.Moria.Narzedzia.PolaWlasne2;

namespace Reports
{
    public class ZkStandard : Stimulsoft.Report.StiReport
    {
    	public string PobierzWartoscSlownikaWlasnego(string nazwaSlownika, int? klucz)
	{
		if (klucz == null)
			return null;
		var pw2Helper = PolaWlasne2Helper.BusinessObjectValue as IPolaWlasne2HelperWydruku;
		var slownik = pw2Helper.SlownikiWlasne.PobierzDefinicjeSlownikaWlasnego(nazwaSlownika);
		if (slownik == null)
			throw new InvalidOperationException("Nie znaleziono słownika własnego: " + nazwaSlownika);
		var pozycja = slownik.UtworzZapytanieLinq().FirstOrDefault(p => p.Klucz == klucz);
		return pozycja != null ? pozycja.Wartosc : null;
	}
        private IFunkcjaPobieraniaDanychDlaWydruku PobierzFunkcje(string nazwa)
        {            return MenedzerFunkcjiPobieraniaDanychDlaWydruku.PobierzFunkcje(nazwa);
        }

        private IFunkcjaPobieraniaDanychDlaWydruku PobierzFunkcje(Guid id)
        {
            return MenedzerFunkcjiPobieraniaDanychDlaWydruku.PobierzFunkcje(id);
        }

        public ZkStandard()        {
            this.InitializeComponent();
        }

Swoją drogą, w którym miejscu najlepiej wstawić nowe metody?

Edytowane przez Łukasz W.
dodanie 2 przypadku
Link to postu
Cytat

Po dodaniu stringu PobierzWartoscSlownikaWlasnego wyskakuje błąd (do mojego poprzedniego wzorca):


The error of compilation
The error of compilation is found in the 'ZkStandard' report:
Nie można odnaleźć nazwy typu lub przestrzeni nazw „IPolaWlasne2HelperWydruku” (czy nie brakuje dyrektywy „using” lub odwołania do zestawu?).

We wzorcu brakuje usinga:

using InsERT.Moria.Wydruki;
Cytat

Swoją drogą, w którym miejscu najlepiej wstawić nowe metody?

Nie ma to znaczenia - ja wstawiam na końcu klasy.

Link to postu

Co do tego:

Dnia 23.10.2020 o 13:39, Łukasz W. napisał:

Edytując wzorzec domyślny (dodanie USING-ów i metod) wszystko kompiluje się poprawnie, ale na podglądzie i wydruku jest puste pole, a w okienku edycji tekstu wysakuje taki czerwony błąd:

image.png.c41bbb3554cb25ee2c96eea0d8b08e8b.png

Ten "Error!" nie ma znaczenia - wysepuje on zawsze, gdy używa się metody z kodu w edytorze. Na moim przykładzie użycia metody PobierzWartoscSlownikaWlasnego też pojawia się taki sam "Error!"

W podglądzie nigdy nie będzie wartości pól - bo nie są ładowane żadne prawdziwe dane.

Pole jest puste na wydruku, dlatgo, że identyfikatorowi "I0" nie odpowiada żadne pole zaawansowane lub odpowiada pole inne niż słownikowe o słowniku "Wykonawca"

Link to postu
Cytat

Pole jest puste na wydruku, dlatgo, że identyfikatorowi "I0" nie odpowiada żadne pole zaawansowane lub odpowiada pole inne niż słownikowe o słowniku "Wykonawca"

To mam już ogarnięte, ale w podobnym wzorcu mam teraz problem:

 

Po skopiowaniu całego kodu z działającego wzorca do innego (praktycznie identycznego) pojawiają mi się takie błędy, które ciężko z czymś mi skojarzyć:

(dodając tylko 3 USING-i i PobierzWartoscSlownikaWlasnego() do starego wzorca błędy są takie same)

image.thumb.png.deb02871ba71628fbb20cda26eb0d1fa.png

image.png

image.png

image.png

image.png

Edytowane przez Łukasz W.
Link to postu
19 godzin temu, Łukasz W. napisał:

Po skopiowaniu całego kodu z działającego wzorca do innego (praktycznie identycznego) pojawiają mi się takie błędy, które ciężko z czymś mi skojarzyć:

(dodając tylko 3 USING-i i PobierzWartoscSlownikaWlasnego() do starego wzorca błędy są takie same)

image.thumb.png.deb02871ba71628fbb20cda26eb0d1fa.png

 

 

 

 

Te błędy wynikają z braku we wzorcu referencji do odpowiednich plików dll. Przy każdym błędzie z tekstem "Musisz dodać odwołanie..." napisane jest jakiego zestawu (pliku dll) brakuje np. 

Musisz dodać odwołanie do zestawu "InsERT.Mox.EntityFrameworkSupport, ..." oznacza, że brakuje referencji do pliku "InsERT.Mox.EntityFrameworkSupport.dll".

Aby dodać brakujące referencje, trzeba we właściwościach raportu znaleźć "Referenced Assemblies" i dodać tam odpowiednie nazwy plików:

2096971715_ReferencedAssemblies.thumb.png.405f1ca10eaa15cfb214bb7868a05f30.png

U mnie we wzorcu "ZK standard" są następujące:

System.Core.dll
InsERT.Moria.PolaWlasne.dll
InsERT.Mox.Core.dll
InsERT.Mox.EntityFramework.Core.dll
InsERT.Mox.EntityFrameworkSupport.dll
InsERT.Moria.ModelDanych.dll
System.Dll
System.Drawing.Dll
System.Windows.Forms.Dll
System.Data.Dll
System.Xml.Dll
Stimulsoft.Controls.Dll
Stimulsoft.Base.Dll
Stimulsoft.Report.Dll
InsERT.Moria.API.dll
InsERT.Moria.Narzedzia.dll
 

Nie rozumiem dlaczego u Pana we wzorcu brakuje tych referencji - ja używam wersji 32 i po powieleniu raportu "ZK standard" mam wszystkie potrzebne referencje i wszystko się kompiluje

 

  • Lubię to 1
Link to postu
21 minut temu, Łukasz Kubacki napisał:

Poniżej zauważyłem, gdzie jest błąd:

Jako pierwszy parametr podaje się nazwę słownika - czyli powinno być "Wykonawcy" - ale to już chyba Pan zauważył

Ja również zauważyłem to po napisaniu postu - jak zwykle najprostszy błąd najciężej znaleźć.

 

33 minuty temu, Łukasz Kubacki napisał:

Nie rozumiem dlaczego u Pana we wzorcu brakuje tych referencji - ja używam wersji 32 i po powieleniu raportu "ZK standard" mam wszystkie potrzebne referencje i wszystko się kompiluje

 

U mnie były tylko te poniżej - pewnie korzystałem z jakiegoś starego wzorca (tak jak pisałem wcześniej - korzystałem z działającego, ale nie z najnowszej wersji)

System.Dll
System.Drawing.Dll
System.Windows.Forms.Dll
System.Data.Dll
System.Xml.Dll
Stimulsoft.Controls.Dll
Stimulsoft.Base.Dll
Stimulsoft.Report.Dll
InsERT.Moria.API.dll
InsERT.Moria.Narzedzia.dll
  • Lubię to 1
Link to postu
  • 2 miesiące temu...

U mnie również brakowało referencji (wzorzec Zlecenie serwisowe), po ich dodaniu został ostatni błąd i tu nie za bardzo wiem gdzie dokładnie leży problem. Widzę w screenach, że u Łukasza W. wysypał się podobny error.

__

Edit: brakowało usingu

using System.Linq;

po jego dodaniu wszystko zaczęło działać.

 

1.thumb.jpg.af1e99b33000d08b99cce8165c498f1d.jpg

Edytowane przez Rafał Męcikiewicz
Rozwiązanie
  • Lubię to 1
Link to postu
  • 1 rok później...
  • 1 rok później...

Dzień dobry,

"Business Objects->Nabywca->Podmiot->PodmiotDlaKtoregoHistoria".  Czy na tej samej zasadzie mogę dodać zaawansowane pola na wydruku dotyczące asortymentu ?

Pola własne zaawansowane dla asortymentu:  Utworzyłem grupę pola SEKTORY. Utworzyłem pole zaawansowane: "Miejsce w magazynie", gdzie można wybrać z pola wyboru sektory (Sektor001-Sektor099); (załącznik 28.02.jpg). Teraz chcę to umieścić na wydruku dokumentu WZ. Rozumiem, że wybieram jak Pan pisał: "Business Objects->Nabywca->Podmiot->PodmiotDlaKtoregoHistoria". itd itd ? Uprzejmie proszę o pomoc.

28.02.jpg

Link to postu

Instrukcja jest ogólna, ale przedstawiony w pierwszej wiadomości przykład dotyczył dodania pól własnych klienta na wydruk FS. W przypadku asortymentu ścieżka prowadząca do pól własnych będzie inna.

 

Tutaj chciałbym zwrócić uwagę, że jest to instrukcja techniczna. Została stworzona z myślą o osobach zajmujących się wdrażaniem/serwisowaniem aplikacji. Polecam zatem skorzystać z pomocy takiej osoby. Proszę przejrzeć naszą listę serwisantów.

Link to postu
×
×
  • Dodaj nową pozycję...