Skocz do zawartości

Wzorce wydruków - informacje z własnej tablicy

Polecane posty

Pracując z wydrukami zauważyłem jeden problem.

 

Generując dokumenty w języku angielskim informacje w informacjach o nabywcy wyświetla się polska nazwa kraju zamiast angielskiej.2016-12-09_09h04_39.png

 

Jak co jest to fragment Państwa wydruku.

 

Przeglądając bazę danych nie znalazłem nigdzie tłumaczonych nazw Państw.

 

Pytanie w przypadku gdybym stworzył własną Tabelę z nazwami państw wraz z ich tłumaczeniami kodami i innymi informacjami, jak uzyskać te informacje na dokumencie.

Link to postu

Należałoby:

1. Stworzyć połączenie do bazy we wzorcu wydruku (New Data Source w Data Sources).

2. Utworzyć kod (strona Code) pobierający odpowiednią nazwę i wstawiający zamiast nazwy z podmiotu.

 

Przykład:

Zapytanie w Connection:

select Id, Polski, Angielski, Niemiecki from PanstwaSlownikWielojezyczny

Metoda zwracająca tłumaczenie:

	private string PodajNazwePanstwa(string jezyk, int idPanstwa, string domyslnaNazwa)
	{
		var panstwa = PanstwaSlownikWielojezyczny;
		if (panstwa.RealCount > 0)
		{
			panstwa.First();
			while (!panstwa.IsEof)
			{
				var id = panstwa["Id"];
				if (id is int && idPanstwa == (int)id)
					return (string)panstwa[jezyk];
				panstwa.Next();
			}
		}
		return domyslnaNazwa;
	}

Ponieważ we wzorcu konieczne jest utworzenie połączenia z bazą zawierającą tabelę z tłumaczeniami może utworzyć słownik we wzorcu. Oczywiście ma to głównie sens wtedy gdy tych krajów nie ma wiele itd. itd.

 

Zysk z tego connectiona jest taki, że można trzymać tego typu dane/słowniki w innej bazie niż nexo. 

Edytowane przez Jarek K.
Link to postu

Dobra poległem.

 

Tablica z Państwami nazywa się ModelDanychContainer.AKC_Panstwa 

2016-12-14_09h41_56.png

 

Kod użyty:

	private string PanstwoAngielski()
		{
		var panstwaTabela = ModelDanychContainer.AKC_Panstwa;
		string PanstwoPL = Nabywca.AdresKorespondencyjny.Panstwo.Nazwa;
		string PanstwoEN = string.Empty;
			if (panstwaTabela.RealCount > 0)
				{
				panstwaTabela.First();
				while (!panstwaTabela.isEoF)
					{
					var PL = panstwaTabela["PanstwoPL"];
					if (PL is string && PanstwoPL == (string)PL)
						return (string)PanstwoEN;
					panstwaTabela.Next();
					}
				}
		return PanstwoEN;
		}

I niestety przy kompilacji zwraca błąd: Nazwa 'ModelDanychContainer' nie istnieje w bieżącym kontekście.

 

Jakiś pomysł jak to rozwiązać.

Link to postu

Dobra tablica z dbo schema dała radę.

 

Za to pojawił się problem z EndofFile,

The error of compilation
The error of compilation is found in the 'FsStandard' report:
Element „Reports.FsStandard.AKC_PanstwaDataSource” nie zawiera definicji „EoF”, a nie odnaleziono metody rozszerzającej „EoF”, która przyjmuje pierwszy argument typu „Reports.FsStandard.AKC_PanstwaDataSource” (czy nie brakuje dyrektywy using lub odwołania do zestawu?).

Jakiś pomysł jak to rozwiązać?

Link to postu

To czy taka czy inna schema to nie ma znaczenia. Istotna jest tu nazwa utworzonego źródła danych (DataSource). Nieważne jest też, czy zostało utworzone na podstawie zapytania (query), tablicy, procedury składowanej, widoku itp.

Nazwa źródła danych w kodzie nie może mieć w nazwie kropki i to jest na pewno błąd. Żeby sprawdzić jak Stimulsoft nazwał źródło danych najprościej w menu kontekstowym na stronie Code zaznaczyć opcję Show Auto Generated Code i w kodzie, który się pojawi znaleźć swoje źródło danych, np:

public ModelDanychContainer_AKC_PanstwaDataSource ModelDanychContainer_AKC_Panstwa;

 

Co do problemu:

"IsEof" != "isEoF" != "EoF"

Wielkość liter ma znaczenie.

Edytowane przez Jarek K.
Link to postu

Hmm.

Problem pozostaje nie ważne czy użyję IsEoF czy EoF w każdym przypadku mam błąd że nie odnaleziono metody.o.O

 

private string PanstwoAngielski()
	{
	var panstwaTabela = AKC_Panstwa;
	string PanstwoPL = Nabywca.AdresKorespondencyjny.Panstwo.Nazwa;
	string PanstwoEN = string.Empty;
		//magic
		if (panstwaTabela.RealCount > 0)
			{
			panstwaTabela.First();
			while (!panstwaTabela.IsEoF)
				{
				var PL = panstwaTabela["PanstwoPL"];
					if (PL is string && PanstwoPL == (string)PL)
						return (string)PanstwoEN;
				panstwaTabela.Next();
				}
			}
		return PanstwoEN;
	}

 

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