Skocz do zawartości

Notatka na liście magazynowej - jak usunąć zduplikowane notatki

Polecane posty

W edytorze wydruków do mojej listy magazynowej dodałem sobie kolumnę tabeli do której przypisałem taki kod:

private void OnBeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
String a = xtraReport1.GetCurrentColumnValue("Paczka_Notatki").ToString();
	a = a.Replace(". wiadomość od klienta:", ":");

xrTableCell3.Text = a;

}

 

wypisuje on notatki przypisane do drukowanej paczki

 

Idziemy dalej.

Tutaj przykład pewnej paczki z notatką która jest niepotrzebnie zdublowana dwa razy.

notatki-duplikat.png

 

Jak widać do paczki mam notatkę, która składa się z trzech linijek tego samego tekstu. Ktoś wypełnił 3 razy formularz dostawy allegro i dlatego sello wypisało to 3 razy. Da się to wyłączyć, żeby na mojej liście magazynowej pokazało TYLKO tą notatkę z formularza dostawy allegro którego status jest "Zakończony" a wszystkie notatki z formularzy których status jest "Anulowana" zostały zignorowane/ukryte. Może da się odnieść do takiej notatki która mnie interesuje?

 

Druga metoda to dopisać w kodzie zaprezentowanym powyżej jakaś funkcję, która usunie zduplikowane notatki. Ja już jak widzicie dodałem kod który usuwa z notatki taki tekst " wiadomość od klienta:". Troszkę to uszczupla notatkę ale to nie jest do końca to chcę osiągnąć.

 

Ktoś ma jakiś pomysł?

 

Dodam, że w znalazłem taki kod na internecie który mógłby tutaj pomóc lecz mi nie działa (wywala dużo błędów)

 

foreach (var message in Regex.Split(str, @"\d+\. message: ")
   .GroupBy(m => m)
   .Where(m => m.Count() == 1 && m.Key != string.Empty)
   .Select(m => new { message = m.Key }))
{

   Console.WriteLine(message.message);
}

 

tutaj przyklad jak to dziala w C#

http://ideone.com/KfbXwL

Link to postu

Pierwszego rozwiązanie w chwili obecnej nie da się zastosować. Można to jedynie zrealizować poprzez odznaczenie ikonki wydruku przy tych niepotrzebnych notatkach. Wtedy do wydruku trafi tylko jedna.

 

Powyższy kod nie będzie działać, ponieważ korzysta z technologii LINQ, która jest dostępne zdaje się dopiero w .NET Framework 3.5, wydruki w Sello korzystają z 2.0.

 

Trzeba by to zrobić ręcznie, czyli najpierw funkcją Split podzielić notatkę na fragmenty i zapisać je np w liście stringów (lub w słowniku), potem pozbyć się duplikatów (http://stackoverflow.com/a/1335611/1038481) i na koniec wypisać zawartość pozostałej listy (słownika).

Link to postu

Dzięki za odpowiedź.

Gdzieś w internecie ktoś dał mi takie wyrażenie regularne:

 

\d{1,}\.\s wiadomość od klienta::\s(?<Message>[\D\s]+)

które zapisywało by tekst następujący po wyrażeniu np: "1. wiadomość od klienta: "

Pomógłbyś mi to teraz poskładać w działającą całość?

Link to postu

Nie mam przy sobie Sello ale machnąłem na szybko w samym C# kod, który powinien zrobić co trzeba. Zmienną text zainicjuj wartością tagu Paczka_Notatki tak jak w pierwszym poście - tu na potrzeby testu wpisałem przykładową zawartość notatek. Możesz na koniec usunąć też napis wiadomość od klienta:

            string text = "1. wiadomość od klienta: wiadomość taka sama\r\n2. wiadomość od klienta: wiadomość taka sama\r\n3. wiadomość od klienta: wiadomość inna\r\n4. notatka zupełnie inna\r\n";

    string finalNote = "";
    string[] notes = System.Text.RegularExpressions.Regex.Split(text, @"\d{1,}\.\s(?<Message>[\D\s]+)");

    foreach (string note in notes)
    {
        if (!String.IsNullOrEmpty(note) && finalNote.IndexOf(note) == -1)
            finalNote += note;
    }

Link to postu

private void OnBeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
String text = xtraReport1.GetCurrentColumnValue("Paczka_Notatki").ToString();

    	string finalNote = "";
string[] notes = System.Text.RegularExpressions.Regex.Split(text, @"\d{1,}\.\s(?<Message>[\D\s]+)");

foreach (string note in notes)
{
	if (!String.IsNullOrEmpty(note) && finalNote.IndexOf(note) == -1)
	finalNote += note;
    	}
xrTableCell3.Text = finalNote;
}

 

Powiem Ci, że po wstępnych testach skrypt działa. Będe informować jak coś wyjdzie w praktyce

Link to postu

poprawiłem to wyrażenie regularne na

@"\d{1,}\.\swiadomość od klienta:(?<Message>[\D\s]+)"

i teraz wyłapuje bez "wiadomość od klienta:"

 

dzięki wielkie stary

 

Mam jeszcze jedno zastrzeżenie. Wartość tagu Paczka_Notatki chyba zawiera znaki {ENTER} i nie są one interpretowane jako jakiś odstęp typu {SPACJA} albo {ENTER} tylko są tak jakby ignorowane. Jak można je zamienić w wydrukach na znak "spacji" ?

 

Dodano:

Ok już sobie poradziłem

text = text.Replace("\r", " ");

Link to postu
  • 1 miesiąc temu...

Nie wyświetlają się notatki wcale. Natomiast bez skryptu wyświetlają się notatki powielone. Mam w xrTableCell wstawiony parametr [paczka_notatki].

 

użyj opcji "Podgląd" w Edytorze wydruków (Projektant raportów) czy nie zwróci jakiegoś błędu. Jeśli zwróci to napisz go nam tutaj.

Link to postu

w kodzie linijka:

 

xrTableCell3.Text = finalNote;

 

wyświetli wynik w komórce o nazwie "xrTableCell3" a przecież ty takiej nie masz. To było podane dla przydkładu. Ty musisz tam wstawić nazwę swojej komórki. Nie wiem dokładnie jak to będzie się definiowało w kodzie ale bedzie na zasadzie:

 

[Paczka_Notatki].Text = finalNote;

Link to postu
  • 3 miesiące temu...

Witam

Przy wklejeniu skryptu sello wywala błąd który załączam.

 

Skrypt wklejony w before print

 

private void OnBeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
String text = xtraReport1.GetCurrentColumnValue("Paczka_Notatki").ToString();

    	string finalNote = "";
string[] notes = System.Text.RegularExpressions.Regex.Split(text, @"\d{1,}\.\s(?<Message>[\D\s]+)");

foreach (string note in notes)
{
	if (!String.IsNullOrEmpty(note) && finalNote.IndexOf(note) == -1)
	finalNote += note;
    	}
[Paczka_Notatki].Text = finalNote;
}

 

 

Co można w tej kwestii zrobić? Rozumiem, że jedyne co jest potrzebne aby wydruk miał notatki od kupujących to wklejenie tego skryptu?

5aa37f91bb793_beztytuu.JPG.65759e2ea8f05d4b4b6c0da78800058d.JPG

Link to postu

Skrypt musisz wrzucać do właściwości elementu, który ma to wyświetlić, czyli np do tabeli.

U mnie wygląda to tak:

lista-mag.thumb.png.e09c5a379f957d060bcbc0459855c859.png

 

u siebie musisz zmienić wartość xrTableCell3 na tą do której chcesz żeby wstawiło notatkę po modyfikacjach

 

kod:

private void OnBeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
String text = xtraReport1.GetCurrentColumnValue("Paczka_Notatki").ToString();
text = text.Replace("\r", " ");
    	string finalNote = "";
string[] notes = System.Text.RegularExpressions.Regex.Split(text, @"\d{1,}\.\s(?<Message>[\D\s]+)");

foreach (string note in notes)
{
	if (!String.IsNullOrEmpty(note) && finalNote.IndexOf(note) == -1)
	finalNote += note;
    	}
finalNote = finalNote.Replace("wiadomość od klienta:", "");
xrTableCell3.Text = finalNote;
}

Link to postu

Skrypt mam wpisany w before print, to odpowiednie miejsce czy wpisać go gdzieś indziej? Przyznam, że to dla mnie nowość i trochę opornie idzie ;)

Na podglądzie wydruku nie wywala błedów i notatki się pokazują, niestety na normalnym wydruku już nie. Załączam zdjęcia jak to u mnie wygląda. Powiedz mi jeszcze czy w skrypcie powinno być [Paczka_Notatki] czy xTableCell29 ?

skr.thumb.JPG.88e15e9eee01c594f2f22dbd9570bd1f.JPG

not.JPG.f0394a8f1920034c0996e5ff5cca7827.JPG

Link to postu

Co masz dokładnie na myśli? Chodzi ci o ikonkę drukarki przy notatkach której ja nie mam?

Tak. Jak wejdziesz w każdą notatkę to u góry po lewej masz dwie opcje:

-wydruk

-dokument

 

Żeby notatka drukowała się na jakichkolwiek wydrukach to musi być w takiej notatce zaznaczony ptaszek na opcji "wydruk". Często się o tym zapomina, a bez tego notatka się nie wydrukuje, mimo iż we wzorcu wydruku wszystko jest prawidłowo.

Link to postu

A da się to ustawić żeby domyślnie było zaptaszkowane do wszystkich transkacji?

W słownikach masz szablony notatek i dla szablonu notatki można to domyślnie zaznaczyć ale tutaj podałeś notatkę z adresem punktu odbioru i nie wiem jak te konkretne notatki działają bo wciąż mam starą wersję Sello :(

 

Może ktoś inny pomoże.

Link to postu

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.
Uwaga: Twój wpis zanim będzie widoczny, będzie wymagał zatwierdzenia moderatora.

Użytkownik forum
Odpowiedz...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...