Skocz do zawartości

Znajdź zawartość

Wyświetlanie wyników dla tagów 'tutorial' .

  • Wyszukaj za pomocą tagów

    Wpisz tagi, oddzielając je przecinkami.
  • Wyszukaj przy użyciu nazwy użytkownika

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Od tej daty

    Do tej daty


Ostatnia aktualizacja

  • Od tej daty

    Do tej daty


Filtruj po ilości...

Dołączył

  • Od tej daty

    Do tej daty


Grupa podstawowa


O mnie


Tytuł własny

Znaleziono 15 wyników

  1. Poniższy tutorial opisuje, jak we własnym zakresie na wydruku paczek dodać pole własne towaru. Pola własne na wydrukach? W edytorze wydruków jest dostępny tylko pewien zamknięty zbiór statycznych pól, do których można się odwołać (np Paczka_Dostawa). Nie ma tam pól własnych, które są polami dynamicznymi (można je dodawać lub usuwać w słowniku). Silnik wydruków umożliwia jednak wykonywanie fragmentów skryptów pisanych w języku C#. Poniżej przedstawiamy krok po kroku jak wyświetlić na wydruku dowolne pole własne Sello jak i pole własne zewnętrzne (z Subiekta). Edytor wydruków Edytor wydruków jest dostępny w USTAWIENIA => SŁOWNIKI => Wydruki. W poniższym opisie przedstawimy modyfikację listy magazynowej, ale ten sam sposób można zastosować do dowolnego wydruku. Przed zmianami w wydruku warto zrobić jego kopię bezpieczeństwa (są na to dwa sposoby). Sposób pierwszy to powielenie wydruku listy magazynowej z poziomu słowników. Sposób ten ma wadę taką, że w razie potrzeby przepięcia się na poprzednią listę magazynową, trzeba zmieniać przypisanie wydruku we wszystkich używanych dostawach. Po otwarciu wydruku edytor można uruchomić linkiem Otwórz edytor wydruków. Sposób drugi, to skorzystanie z eksportu wzorca wydruku do pliku repx. W edytorze można aktualny wzorzec zapisać korzystając z menu Plik => Zapisz jako... W razie problemów z działaniem wydruku można go w podobny sposób przywrócić, za pomocą funkcji Plik => Otwórz. Ten sposób stworzenia kopii zapasowej zalecamy. Wzorzec wydruku Główną część okna edytora zajmuje wzorzec wydruku. Wygląda na skomplikowany ale w istocie składa się on z różnych sekcji, w których to sekcjach umieszczone są fragmenty wydruku, odpowiedzialne np za nagłówek strony, dane paczki, dane towarów paczki, stopkę listy towarów itp. W skrócie, sekcja Detail drukuje się raz dla każdej paczki, sekcja DetailReport - "Towary" drukuje się dla każdego towaru w paczce, tworząc tabelkę z kolejnymi towarami. Tabelka z towarami ma swój nagłówek i stopkę a więc znalazły się one również w tej sekcji jako GroupHeader1 (nagłówek) oraz GroupFooter1 (stopka). W środku sekcja Detail1 jest powtarzana dla każdego towaru w paczce. Edycja wzorca Pola własne należą do towarów, nie do paczek, zatem naturalnie umieścić je należy w sekcji DetailReport - "Towary". Aby dodać nową kolumnę, zacząć należy od sekcji nagłówka tabeli. Klikamy np na nagłówek Nazwa i z menu pod prawym klawiszem myszy wybieramy Wstaw => Kolumnę po prawej (lewej). W ten sposób należy dodać także nową kolumnę w sekcji Detail1. Aby zmienić nazwę kolumny nagłówka, czcionkę itp. należy wybrać ten element (xrTableCell9 w tym przypadku) i po prawej stronie w oknie Właściwości zmienić w danych pole Dane->Text, np. na nazwę swojego pola własnego (nazwa tutaj nie ma znaczenia, poniżej kolor). Podłączanie danych Następnie należy przejść do nowej komórki dodanej w sekcji Detail (tutaj xrTableCell10, nazwy mogą mieć inny indeks) i tym razem wybieramy z właściwości i Zachowanie->Scripts i klikamy przycisk po prawej stronie na skrypcie o nazwie Before Print. Gdyby chodziło o statyczne dane towaru, jak nazwa, symbol itp, można się tutaj odwołać do danych poprzez pole Dołączanie danych i wskazać np. Towary -> Towar_Nazwa. W przypadku pól własnych trzeba dodać skrypt w Before Print. Pojawi się okno z domyślnym (pustym) skryptem wykonywanym tuż przed drukowaniem tej komórki tabeli. Aby zawartość pola własnego pojawiła się w tym polu, należy w skrypcie dopisać jedną linijkę: ((XRControl)sender).Text = PoleWlasneSello("kolor"); Aby odwołać się do pola własnego zewnętrznego: ((XRControl)sender).Text = PoleWlasneZewnetrzne("kolor"); Linijkę tę należy wstawić pomiędzy nawiasy { i } oraz zmienić nazwę pola na takie jakie ma być umieszczone w tej komórce (tutaj dałem kolor). Aby sięgnąć do pól, które zawierają spację w nazwie, należy ją zamienić na podkreślnik ("kolor rękawa" -> "kolor_rękawa") Skryptu Before Print powinien wyglądać tak jak poniżej: Podobnie można dodać inne pola własne do tabeli czy do pola tekstowego, istotne jest aby w skrypcie znalazła się taka linijka wskazująca z którego pola własnego ma zostać pobrana wartość. Konfiguracja Sięganie do pól własnych działa w oparciu o bezpośrednie połączenie do bazy danych Sello. Należy zatem wykonać jeszcze jeden krok. W oknie Eksplorator po prawej stronie, należy zaznaczyć pierwszy element w drzewie (nadrzędny), xtraReport1 i dla niego również przejść do właściwości Zachowanie -> Scripts -> Before Print i wkleić poniższą zawartość (zastąpić domyślny - pusty skrypt). Jeśli skrypty mają jakąś niepustą zawartość, wtedy widać ich pierwszą linijkę (w tym przypadku komentarz // KONFIGURACJA). Dzięki temu łatwo ustalić gdzie jest wpisany jakiś skrypt. // KONFIGURACJA ------------------------------------------------------ // Adres serwera SQL z bazą Sello string serwerSQL = @"(local)\INSERTGT"; // Autentykacja Windows (true), autentykacja login+hasło (false) bool autentykacjaWindows = false; // Login SQL (jeśli autentykacjaWindows = false, domyślnie "sa") string loginSQL = "sa"; // Hasło SQL (jeśli autentykacjaWindows = false, domyślnie "") string hasloSQL = ""; // Nazwa bazy danych Sello string bazaDanych = "TUTAJ_NAZWA_BAZY_DANYCH_SELLO"; // Tryb debugowania (wyświetlania błędów) bool debug = false; // KONIEC KONFIGURACJI ------------------------------------------------------ // Poniższego kodu nie edytować using System.Data.SqlClient; using System.Data; string connectionString; bool connectionValid = false; private void OnBeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) { SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(); sb.ConnectTimeout = 10; sb.DataSource = serwerSQL; sb.IntegratedSecurity = autentykacjaWindows; sb.Password = hasloSQL; sb.UserID = loginSQL; sb.InitialCatalog = bazaDanych; connectionString = sb.ConnectionString; using(SqlConnection conn = new SqlConnection(connectionString)) { try { conn.Open(); connectionValid = true; } catch(SqlException ex) { System.Windows.Forms.MessageBox.Show(ex.Message); connectionValid = false; } } } public string PoleWlasneSello(string nazwa) { if(!connectionValid) return "- błąd konfiguracji -"; using(SqlConnection conn = new SqlConnection(connectionString)) { SqlCommand cmd = new SqlCommand(@"select ia_AttributeValue from it_CustomAttributes join sl_CustomAttributes on cat_id = ia_AttributeId where ia_ItemId = @id and cat_name = @name", conn); cmd.Parameters.Add("@id", SqlDbType.Int); cmd.Parameters["@id"].Value = DetailReport.GetCurrentColumnValue("Towar_ID").ToString(); cmd.Parameters.Add("@name", SqlDbType.NVarChar); cmd.Parameters["@name"].Value = nazwa; try { conn.Open(); return (string)cmd.ExecuteScalar(); } catch(SqlException ex) { if(debug) System.Windows.Forms.MessageBox.Show(ex.Message); } } return "-błąd-"; } public string PoleWlasneZewnetrzne(string nazwa) { if(!connectionValid) return "- błąd konfiguracji -"; using(SqlConnection conn = new SqlConnection(connectionString)) { SqlCommand cmd = new SqlCommand(@"select eca_Value from it_ExternalCustomAttributes join it_ExternalCustomAttributesDict on ecd_id = eca_AttributeId where eca_ItemId = @id and ecd_SelloName = @name", conn); cmd.Parameters.Add("@id", SqlDbType.Int); cmd.Parameters["@id"].Value = DetailReport.GetCurrentColumnValue("Towar_ID").ToString(); cmd.Parameters.Add("@name", SqlDbType.NVarChar); cmd.Parameters["@name"].Value = nazwa; try { conn.Open(); return (string)cmd.ExecuteScalar(); } catch(SqlException ex) { if(debug) System.Windows.Forms.MessageBox.Show(ex.Message); } } return "-błąd-"; } W sekcji // KONFIGURACJA należy uzupełnić dane dostępowe do swojej bazy Sello, z której wydruk ma czerpać dane, w szczególności nazwę bazy danych. Uruchomienie Po wpisaniu danych można uruchomić testowo wydruk, aby sprawdzić, czy pola własne działają, oraz czy połączenie się udało. Jeśli konfiguracja jest niepoprawna, pojawi się okienko z błędem. Jeśli jego treść będzie niezrozumiała prosimy podesłać ją do nas na forum. Aby wyjść z podglądu, należy przełączyć się na zakładkę Projektant. Wartości pól własnych w podglądzie mogą nie być widoczne, gdyż zależy to mocno od korelacji między danymi testowymi na wydruku a istniejącymi w bazie polami własnymi. Jeśli nie pojawi się żaden błąd podczas uruchamiania podglądu, można uznać, że połączenie się udało i przetestować działanie wydruku na faktycznych paczkach. Edytor można tym samym zamknąć (zapisać wzorzec), zapisać wydruk Sello.
  2. Czy można przypisać do każdego konta Allegro osobne konta mailowe, tak żeby mailing wysyłał się z tych kont?
  3. CZYM SIĘ RÓŻNI AUKCJA POWIĄZANA Z TOWAREM OD AUKCJI BEZ POWIĄZANIA? Aukcje powiązane można rozpoznać po tym, że w kolumnie TOWAR mają podaną nazwę towaru. Na poniższym screenie pierwsza aukcja nie jest powiązana, druga jest: Po wejściu w edycję aukcji, w polu towar znajduje się również jego nazwa. TOWAR CZY PRODUKT? Określenie Towar tyczy się asortymentu z kartoteki w Sello, którą można tworzyć ręcznie, wygenerować z aukcji bądź pobrać z Subiekta. Produkt jest zaś asortymentem zdefiniowanym w bazie produktów Allegro. Służy w serwisie Allegro do grupowania tego samego asortymentu (produktyzacja) od różnych sprzedających. PO CO TO POWIĄZANIE? Powiązanie towarów z aukcjami jest konieczne w przypadku gdy chcemy wystawiać dokumenty w Subiekcie. Sello musi wiedzieć jaki towar Subiekta kupił klient aby poprawnie obsłużyć magazyn. CO JEŚLI NIE POWIĄŻĘ? Transakcje, które powstają do aukcji bez powiązania z towarem zawierają towar jednorazowy, który nazywa się tak jak tytuł aukcji. Może to nieraz wprowadzić w błąd, jeśli aukcja ma nazwę identyczną z towarem. W takiej sytuacji Sello nie będzie w stanie utworzyć dokumentu w Subiekcie. Pojawi się komunikat informujący o tym, że żadna pozycja w transakcji nie zawiera towaru powiązanego. Towary jednorazowe oznaczone są ikonką [1] w kolumnie J na liście towarów w transakcji. Aby wystawić dokument dla takiej transakcji należy podmienić ręcznie ten towar jednorazowy na towar z kartoteki. Innym rozwiązaniem jest też usunięcie takiej transakcji i pobranie jej ponownie z Allegro (wybierając opcję pobierz zamówienia Allegro ponownie z X dni) gdy już źródła aukcja będzie miała powiązanie z towarem. JAK DZIAŁA POWIĄZANIE? Trzeba wiedzieć, że aukcja nie jest powiązana wprost z towarem w Subiekcie, a z towarem w Sello na zasadzie: Aukcja -> Towar Sello -> Towar Subiekta Oznacza to, że problem z utworzeniem dokumentu może również wystąpić nawet jeśli aukcja jest powiązana z towarem Sello, w sytuacji, gdy wybrany towar Sello nie jest powiązany z towarem w Subiekcie. Są to sporadyczne przypadki ale się zdarzają. Dlatego jeśli w transakcji jest towar kartotekowy zamiast jednorazowego, a Sello nadal twierdzi, że w transakcji nie ma żadnej pozycji z systemu handlowego, może to oznaczać, że towar użyty w transakcji nie jest powiązany z towarem Subiekta. To należy sprawdzić wchodząc w ten towar w kartotece Sello czy jest on powiązany z Subiektem. JAK POWIĄZAĆ AUKCJĘ Z TOWAREM? W menu modułu AUKCJE pod prawym przyciskiem myszy znajduje się funkcja Powiąż z towarem. Spowoduje ona wyświetlenie listy towarów z kartoteki Sello, z której można wskazać towar do powiązania. Dodanie powiązania towaru z aukcją nie skutkuje żadną zmianą w istniejących już transakcjach. Dlatego należy te towary podmienić także w transakcjach - jeśli dokumenty nie chcą się utworzyć. Od momentu powiązania aukcji z towarem każda nowa pobrana transakcja będzie już miała poprawny towar z kartoteki, zamiast towaru jednorazowego. JAK POWIĄZAĆ WIELE AUKCJI Z TOWARAMI ZBIORCZO? Aby Sello było w stanie (pół)automatycznie powiązać wiele aukcji z odpowiednimi towarami w samej aukcji musi być coś co pozwoli jednoznacznie wskazać towar z kartoteki. Może to być np. symbol towaru, który może się znajdować np w polu Sygnatura w aukcji. Należy się wówczas posłużyć oknem zmian zbiorczych dla wybranych aukcji (ctrl+B) i przejść na zakładkę TOWARY. W polu Wybierz z aukcji należy za pomocą tagów Sello wskazać jaką wartość z aukcji należy wziąć jako wzór do wyszukiwania (tutaj [Aukcja::Sygnatura] ). Tag Sello można szybko wstawić za pomocą menu tagów (po prawej stronie TAG), dalej Szybki wybór > Sygnatura. Następnie w Szukaj w towarach w polu należy wybrać pole towaru w którym Sello ma szukać wartości wybranej z aukcji (czyli sygnatury w tym przypadku). Po kliknięciu Wyszukaj dopasowanie program dla każdej aukcji z listy wykona takie wyszukiwanie i automatycznie wstawi z prawej strony znaleziony towar. Po weryfikacji czy dopasowanie zostało zrobione poprawnie można zastosować zmiany zbiorcze przyciskiem OK - dopiero w tym momencie aukcje powiązane zostaną z towarami. Może się zdarzyć, że program znajdzie więcej dopasowań, wtedy w kolumnie T pojawi się czerwona ikonka, po kliknięciu której pojawi się lista znalezionych wielu towarów do wyboru. Na liście można również ręcznie wskazać towar do powiązania klikając dwukrotnie na wiersz. CO JEŚLI SYMBOL ZNAJDUJE SIĘ W TYTULE AUKCJI? Przypadek trudniejszy, bo wymaga zaznajomienia się dokładniej z działaniem tagów Sello oraz z modyfikatorami tagów. Dokładny ich opis można znaleźć w pomocy pod klawiszem F1 > wyszukać słowo kluczowe tag. Można również skorzystać z menu TAG > Szybki wybór, gdzie jest kilka predefiniowanych wartości, np Ostatnie słowo tytułu. W powyższym przykładzie modyfikatorem jest substr_after_last=` ` co oznacza wycięcie z wartości tagu [Aukcja::Tytul] fragmentu za ostatnim znakiem spacji (` ` - spacja pomiędzy grawisami). Dodatkowo aby upewnić się, że zapis poprawnie wyciągnie z tytułu ostatni wyraz po wybraniu na dolnej liście dowolnej aukcji pojawi się podgląd działania tagu z modyfikatorami, bazujący już na danych wybranej aukcji - tutaj pojawił się symbol PEFLEUR15 wyciągnięty z tytułu Fleur 15ml perfumy toalet. PEFLEUR15. Dalej sposób działania jest standardowy, czyli należy wskazać w jakim polu w towarach ma być szukana dana wartość i użyć funkcji Wyszukaj dopasowanie. PRZYPADEK TRUDNIEJSZY, SYMBOL ZNAJDUJE SIĘ W OPISIE AUKCJI Trudniejszy jedynie dlatego, że trzeba wyciąć pojedynczą wartość z całego opisu. Opis zapisany jest w postaci HTMLa, dlatego jeśli odwołamy się do całego opisu to w podglądzie pojawi się opis wraz z kodem HTML. Załóżmy więc, że symbol towaru znajduje się w treści opisu w poniższy sposób: Aby wyciągnąć tę wartość z opisu należy skorzystać z dostępnych modyfikatorów. Na początek jednak odwołajmy się do całego tagu [Aukcja::Opis], żeby zobaczyć co on zwraca: Jak widać, są tam tagi HTML typu <h1>, <h2>, <ul>, <li> Nasz symbol znajduje się za słowem Symbol:. W związku z tym należy wyciąć wszystko co jest przed tym słowem. Wśród dostępnych modyfikatorów odnajdujemy modyfikator substr_after_first, który wycina fragment za daną frazą. Wpisuję zatem słowo kluczowe, które znajduje się bezpośrednio przed symbolem, ale co ważne, uwzględniam też spację, która znajduje się pomiędzy słowem Symbol: a PEFLEUR15. Podczas wpisywania modyfikatora (który należy oddzielić znakiem | ), Sello na bieżąco będzie pokazywać jak zmienia się wartość zwrócona przez tag z dodanym modyfikatorem. Chcemy aby symbol towaru znalazł się na samym początku. Pozostaje już tylko odciąć to co jest za symbolem. Dzięki temu, że opis posiada tagi HTML możemy się odwołać również do nich. I tak wytniemy wszystko co znajduje się przed tagiem zamykającym listę wypunktowaną </li> za pomocą modyfikatora substr_before_first=`</li>`. Na podglądzie widać, że z całego opisu jaki zwraca tag [Aukcja::Opis] został już tylko właściwy symbol, który można już wyszukać w towarach w polu symbol, tak jak wspomniałem we wcześniejszych przypadkach. Podczas korzystania z modyfikatorów proszę zwrócić uwagę, aby korzystać ze znaków grawis ` a nie apostrof '. Grawis znajduje się pod klawiszem Escape (tylda ~).
  4. W najbliższym czasie chcę przeprowadzić następującą operację: Aktualnie korzystam z Sgt + Sello + Allegro + ProstaPaczka. Niebawem chcę przenieść wszystko (towary/kartoteki z Subiekta, bazę z Sello) na firmę z nowym NIP-em. Zastanawiam się jak zrobić to najpłynniej. Czyli - nowy komputer, na nim nowy Subiekt + Sello. 1. Czy można jakoś w prosty sposób przenieść towary, które aktualnie mam w Subiekcie oznaczone do serwisów aukcyjnych do nowego Subiekta na nowym komputerze? Na nowym Subiekcie chcę wprowadzić pozycje towarowe, przeprowadzić cesję konta i wtedy obsługiwać transakcje. Czy można jakoś przetransferować towary (kartoteki) z jednego Subiekta do drugiego (inny komputer, inna licencja) czy pozostaje ręczna robota? 2. Czy wystarczy, że zarchiwizuję obecną bazę Sello i na nowym komputerze po zainstalowaniu Sello uruchomię je wybierając tę bazę? Chcę założyć jeszcze jedno konto na Allegro i Sello dla innego asortymentu. W firmie chciałbym mieć jeden komputer z wersją serwerową + jeden komputer z wersją kliencką Sello przy stanowisku dla pracownika tylko z widocznymi zakładkami DO PACZEK i DO WYSŁANIA. 3. Jak (krok po kroku) okroić Sello z zakładek i cyferek, których nie chcę udostępniać pracownikowi? Podczas uruchamiania komputera pracownika będzie on musiał też uruchomić Subiekta na swoim komputerze? 4. Czy żeby obsługiwać transakcje w Sello z danego konta Allegro będę musiał każdorazowo wybierać to konto, które mnie interesuje? 5. Czy mając dwa konta Allegro i dwie licencje Sello jest możliwa praca na jednej bazie, w tym sensie, że na jednym komputerze wybieram jedno konto Allegro i na nim pracuję, a na drugim pracownik klika drugie konto i obsługuje transakcje z drugiego konta Allegro? Z góry dziękuję za podpowiedzi.
  5. Witam, Mam mały problem, ponieważ zaczyna mi brakować darmowego miejsca 10GB bazy danych. Czy da się jakoś delikatnie odchudzić bazę danych bez większych ingerencji? Będę wdzięczna za "łopatologiczny tutorial" Pozdrawiam Justyna Majka
  6. Dzień dobry, Z racji tego, że prowadzę sprzedaż opartą o lokalną hurtownię nie posiadam na stanie większości towarów. Stany na aukcjach sprawdzam sobie porównując Indeksy produktów z indeksami hurtowni. Z racji tego, że produktów robi się coraz więcej, a dodawanie produktu w Sello potem w excel itd jest czasochłonne chciałem dopytać czy jest możliwość wyeksportowania wszystkich indeksów produktów i nazw do Excela?
  7. Jak zrobić dynamiczną listę w nowym opisie Allegro generowaną z pól własnych towaru? Na początek należy utworzyć pola własne - tyle ile maksymalnie może być różnych elementów na liście wypunktowanej. Można oczywiście posłużyć się również już zdefiniowanymi polami, lub też polami z Subiekta. Ja posłużę się dla przykładu nowymi 4 polami (można dodać dowolną ilość pól). W słowniku pól własnych tworzę pola: cecha_1 cecha_2 cecha_3 cecha_4 itd.. W tych polach będą umieszczane wartości, które mają się pojawić na liście wypunktowanej. Następnie dodaję nowe pole globalne o nazwie cechy_towaru z poniższą zawartością: <ul> [Towar::PW::cecha_1 | template=`<li>{value}</li>`] [Towar::PW::cecha_2 | template=`<li>{value}</li>`] [Towar::PW::cecha_3 | template=`<li>{value}</li>`] [Towar::PW::cecha_4 | template=`<li>{value}</li>`] </ul> W tym miejscu można użyć w podobny sposób innych pól towaru własnych lub zewnętrznych. Modyfikator template zapewni dodatkowo, żeby nie generowały się puste wypunktowane elementy. Jeśli w towarze nie będzie danego tagu to nie zostanie wygenerowany element listy li. W towarze, można teraz przypisywać cechy do pól własnych cecha_1..cecha_4 Natomiast w szablonie opisu aukcji, należy wstawić tag: [Podmiot::PW::cechy_towaru] W ten sposób dodając wybrane pola własne do towaru (co można robić zbiorczo) możemy za pomocą jednego tagu dodawać dynamicznie generowaną listę wypunktowaną nie wnikając w HTML, który jest pod spodem.
  8. Witam, proszę o pomoc jak przenieść aukcje w obrębie jednej bazy na inne konto na allegro. Kiedy zaznaczam kilka aukcji i wchodzę w zmiany zbiorcze opcję konto mam nieaktywną - czy może to być spowodowane tym, że drugie konto aktualnie ma nieważną licencję sello ?
  9. W przypadku etykiet adresowych, cały adres tworzony jest przez kontrolki zawierające pojedyncze dane. Jeśli któreś z pól adresu jest puste, wtedy na wydruku powstaje dodatkowy odstęp. Można temu zaradzić dokonując kilku zmian, oraz formatując cały adres za pomocą skryptu. Zalety i właściwości: 1. W przypadku obecności nazwy firmy jak i imienia z nazwiskiem całość będzie sformatowana następująco: Firma - Imię nazwisko. Jeśli tylko jedna z tym danych będzie dostępna to zostanie wyświetlona tylko ona, bez spacji i myślników jak było w rozwiązaniu wcześniejszym. 2. Brak luk pomiędzy wierszami. Jeśli wierszy jest więcej (np adres linia 2) lub wiersz nie mieści się w jednej linii to zostanie dołożony wiersz. 3. Miasto wypisywane jest tuż za kodem pocztowym, WIELKIMI literami. 4. Jeśli państwem docelowym nie jest polska, to nazwa państwa zostanie wstawiona na samym końcu, pod kodem pocztowym. (skrypt porównuje nazwę państwa ze słowem "polska", nie patrząc na wielkość liter) Po pierwsze, zamiast kilku kontrolek z tekstem należy wstawić/pozostawić jedną z nich. Na rysunku poniżej widać starą i nową wersję. Kontrolkę należy rozciągnąć możliwie najszerzej, aby zajmowała całą dostępną przestrzeń w której będzie mógł się pojawić adres. Następnie należy upewnić się, że pole nie jest powiązane ze źródłem danych - nie jest to potrzebne (pole Tekst ma być puste, przy polu nie może być ikonki walca symbolizującej bazę danych). Dodatkowo należy zaznaczyć dwie opcje, wiele linii i zawijanie wierszy Następnie, należy dodać dla tej kontrolki (najpierw ją zaznaczyć w edytorze) skrypt formatujący adres, odszukując na liście właściwości odpowiednie pole i naciskając ikonkę edycji. Należy tam wkleić poniższy kod, zastępując wszystko co tam jest. private void OnBeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) { System.Text.StringBuilder adres = new System.Text.StringBuilder(100); if( !String.IsNullOrEmpty(xtraReport1.GetCurrentColumnValue("Odbiorca_Firma").ToString()) ) { adres.Append( xtraReport1.GetCurrentColumnValue("Odbiorca_Firma") ); if( !String.IsNullOrEmpty(xtraReport1.GetCurrentColumnValue("Odbiorca_ImieNazwisko").ToString()) ) adres.AppendFormat(" - {0}", xtraReport1.GetCurrentColumnValue("Odbiorca_ImieNazwisko") ); } else adres.Append(xtraReport1.GetCurrentColumnValue("Odbiorca_ImieNazwisko") ); adres.AppendLine(); if( !String.IsNullOrEmpty(xtraReport1.GetCurrentColumnValue("Odbiorca_AdresLinia1").ToString()) ) adres.AppendLine( xtraReport1.GetCurrentColumnValue("Odbiorca_AdresLinia1").ToString()); if( !String.IsNullOrEmpty(xtraReport1.GetCurrentColumnValue("Odbiorca_AdresLinia2").ToString()) ) adres.AppendLine( xtraReport1.GetCurrentColumnValue("Odbiorca_AdresLinia2").ToString()); adres.AppendFormat("{0} {1}", xtraReport1.GetCurrentColumnValue("Odbiorca_KodPocztowy").ToString(), xtraReport1.GetCurrentColumnValue("Odbiorca_Miasto").ToString().ToUpper() ); System.String panstwo = xtraReport1.GetCurrentColumnValue("Odbiorca_Panstwo").ToString(); if( !String.IsNullOrEmpty(panstwo) && panstwo.ToLower() != "polska" ) { adres.AppendLine(); adres.Append(panstwo); } ((XRLabel)sender).Text = adres.ToString(); } Na koniec, można jeszcze ustalić w którym miejscu powinien się ten adres pojawiać, wybierając odpowiednie położenie tekstu we właściwościach kontrolki z adresem. Najlepsze zdaje się być przyleganie do lewej i centrowanie w pionie, lub centrowanie tekstu w pionie i poziomie - ale to już kwestia gustu No i porównanie, od lewej: wersja poprzednia, nowa wersja wyrównana do lewej i wycentrowana w pionie, nowa wersja wycentrowana w pionie i poziomie Wszelkie sugestie mile widziane. Jeśli rozwiązanie się przyjmie zostanie wprowadzone do wszystkich naszych wydruków.
  10. Wiele osób o to pyta i czeka od dłuższego czasu na wskazówki jak zrobić etykiety o rozmiarze, którego w Sello nie ma... stąd mały tutorial, jak to zrobić we własnym zakresie i bezboleśnie Po pierwsze, skorzystamy z powielania istniejącego szablonu, bo tak będzie prościej. Administracja->Słowniki->Wydruki, wybieramy opcję powiel na istniejącej etykiecie podobnego typu. Zmieniamy nazwę na nową, np Etykieta adresowa (2x4). Następnie klikamy OK. Nie edytujemy jeszcze wzorca, najpierw musi się powielić i zapisać w bazie. Na liście jest teraz powielony wzorzec o nowej nazwie, otwieramy go zatem ponownie i wybieramy opcję Otwórz edytor wydruków. Po chwili pojawi się edytor, poniżej wycinek przedstawiający szablon etykiety. Jeśli spojrzymy na prawą stronę edytora w okienko Eksplorator i rozwiniemy listę, pojawi się takie oto drzewo obiektów. xtraReport1 - nazwa całego raportu (wydruku), tu można ustawić między innymi wielkość kartki (np A4) Detail - sekcja w raporcie, która definiuje co dokładnie powinno być drukowane dla pojedynczego obiektu, w tym przypadku dla pojedynczej paczki. Tu można ustalić ile kolumn ma wydruk (do tego wrócę za chwilę), jaka jest wysokość oraz szerokość pojedynczej etykiety. xrPanelPlaceHolder - jest to specjalny niewidoczny (pusty) element dodany na potrzeby realizacji pomijania określonej liczny etykiet przy drukowaniu xrPanel1 - to jest już panel, który wewnątrz zawiera to co faktycznie stanowi zawartość etykiety. W skrypcie OnBeforePrint (wywoływanym przed drukowaniem) zawiera on kod, który faktycznie wyświetla lub nie puste etykiety które należy pominąć. Wersja silnika raportów użyta w Sello potrafi pomijać elementy, ale i tak zaczynała je drukować od pierwszego miejsca, stąd takie rozwiązanie xrLabel1..6 - to już są elementy wyświetlające dane Etykieta 2x8 jaką mamy zamiar zrobić jest większa niż ta którą przerabiamy. Jej rozmiar to przykładowo 105 x 74.2mm i zamiast 3 kolumn, ma 2. rozpoczynamy zatem od powiększenia obszaru roboczego etykiety, czyli Detail. Najlepiej w tym celu wybrać ten element w oknie Eksploratora, następnie pod spodem w oknie Właściwości odszukać wysokość (Height) i wpisać tam wysokość nowej etykiety w dziesiętnych częściach milimetra. Czyli 74.2 mm to będzie x10 = 742. Po zatwierdzeniu obszar Detail powinien się rozciągnąć w dół wg strzałki. Następnie klikamy w Eksploratorze na kolejny element w drzewie, czyli xrPanelPlaceHolder. Zmieniamy mu wysokość na cały rozmiar sekcji Detail, czyli na 742. Zaznaczony prostokąt powinien się rozciągnąć wg strzałki. Można to oczywiście zrobić ręcznie rozciągając zaznaczony prostokąt przy pomocy myszki ciągnąc za białe kwadraciki - oczywiście jeśli nie jest wymagana precyzja co do dziesiątych części milimetra Podobnie postępujemy z kolejnymi elementami, czyli xrPanel1. Można go śmiało ręcznie przeciągnąć, ponieważ zawiera on tylko ramkę wokół etykiety. Istotna rzecz, zmiana szerokości i liczby kolumn. Wybrać należy element Detail, w jego właściwościach odszukujemy Multi-Column Options i ustawiamy tam kolumny (column count)2, i szerokość (column width) kolumny 105 x10 = 1050. Dodatkowo, jeśli zachodzi taka potrzeba można ustalić odległości między kolumnami (Column spacing), jednak tu wystarczy odpowiednio ustawić ramkę xrPanel1. Podobnie jak poprzednio trzeba dopasować wszystkie kolejne elementy do obszaru roboczego - tym razem w poziomie, czyli po kolei xrPanelPlaceHolder i xrPanel1. Następnie należy dopasować już za pomocą myszki kontrolki zawierające dane, rozciągając ja na szerokość i wysokość, zwiększając/zmniejszając czcionkę (na górze edytora) w sposób identyczny jak w jakimkolwiek programie do edycji tekstu (Word, Power Point). Na koniec na dole edytora można obejrzeć podgląd z danymi przykładowymi (przycisk podgląd). Jeśli etykeity nie mieszczą się na stronie, lub zostaje zbyt dużo miejsca pomiędzy nimi, albo pod nimi, należy skorygować wartości odpowiednich elementów. Warto też zwrócić uwagę, jak zachowują się kontrolki z danymi przy długich nazwach - ale to już trzeba obejrzeć na podglądzie wydruku jakiejś paczki. W przypadku gdy długie np. nazwisko się nie mieści, za pomocą smart tagu (ikonka [>]) należy zaznaczyć opcję zawijania wierszy (word wrap) i odpowiednio zwiększyć wysokość elementu. Nie zaznaczać opcji "może rosnąć" (can grow), gdyż wtedy wielkość całej etykiety będzie dynamicznie zwiększana gdy pojawią się dwie linie
  11. Operacje, jakie można wykonywać na polach tekstowych będziemy umieszczać tutaj "hurtem" w pierwszym poście, żeby nie zaśmiecać forum pojedynczymi tematami. Poniższe skrypty należy dodać dla pola (kontrolki) z przypisaną zmienną tekstową. Są to fragmenty skryptów, więc aby działały poprawnie należy dany fragment wkleić pomiędzy klamry w edytorze skryptu (Nie usuwać skryptu domyślnego) 1. Duże litery Skrypt OnBeforePrint ((XRLabel)sender).Text = ((XRLabel)sender).Text.ToUpper(); Dla przykładu, powyższą linijkę należy wkleić np dla pola zawierającego miasto aby uzyskać: private void OnBeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) { ((XRLabel)sender).Text = ((XRLabel)sender).Text.ToUpper(); } 2. Warunkowe wyświetlanie wartości liczbowych Skrypt OnBeforePrint Dotyczy np pola Paczka_Masa, gdy masa w paczce jest 0, to wartość nie powinna być drukowana: if( Convert.ToDecimal( ((XRTableCell)sender).Text) == 0 ) ((XRTableCell)sender).Text = ""; } Uwaga: powyższy kod dotyczy wartości w komórkach tabeli (XRTableCell). Jeśli zamiast tego zmieniana jest wartość zwykłego pola typu Label, (XRTableCell) należy zamienić na (XRLabel)
  12. Tylko dla 5 cyfrowych kodów pocztowych. private void OnBeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) { String kod = ((XRLabel)sender).Text; String cyfry = ""; for(int i = 0; i < kod.Length; i++ ) if( Char.IsDigit(kod[i]) ) cyfry += kod[i]; if( cyfry.Length == 5 ) ((XRLabel)sender).Text = String.Format("{0} {1} {2} {3} {4}", cyfry[0],cyfry[1],cyfry[2],cyfry[3],cyfry[4]); } To co jest podane wewnątrz funkcji Format, czyli "{0} {1} {2} {3} {4}" to jest formatowanie kolejnych cyfr z kodu. Dostawiasz sobie tam tyle spacji ile trzeba pomiędzy {X}
  13. Osobno czesc calkowita kwoty pobrania i osobno grosze. Trzeba by to zrobić za pomocą skryptów. Dodajemy dwa pola np w kwotę pobrania osobno dla zł, osobno dla gr. Do obu pól należy dołączyć te same dane (Paczka_PobranieKwota w tym pyrzypadku) W polu zł, zastępujemy skrypt OnBeforePrint kodem: private void OnBeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) { ((XRLabel)sender).Text = ((int) Convert.ToDecimal(((XRLabel)sender).Text)).ToString(); } Spowoduje to, że wartość Paczka_PobranieKwota zostanie zrzutowane na typ przecinkowy, (np 13,90) następnie rzutowanie na typ (int) wytnie część po przecinku. Na koniec konwersja ToString() bo wartość jest przypisywana do pola tekstowego. Dla pola gr. analogiczny kod: private void OnBeforePrint(object sender, System.Drawing.Printing.PrintEventArgs e) { ((XRLabel)sender).Text = String.Format("{0:00}", (((int) (Convert.ToDecimal( ((XRLabel)sender).Text ) * 100) % 100)) ); } , który wyciągnie z pola Paczka_PobranieKwota część po przecinku.
  14. Czy planujecie wdrożyć pole wystawcy oferty albo opiekuna? A może da radę w jakiś sposób to podejrzeć tylko nie wiem jak?
  15. Przed rozpoczęciem modyfikacji bazy danych zwracam uwagę na to, że nieumiejętne posługiwanie się narzędziami może doprowadzić do uszkodzenia bazy. Dlatego też przed wykonaniem jakiegokolwiek zabiegu na bazie należy przeprowadzić archiwizację. Za wszelkie uszkodzenia bazy w wyniku nieumiejętnego posługiwania się narzędziami SQL winę ponosi użytkownik. W praktyce archiwizacja lub backup bazy jest wystarczającym zabezpieczeniem. Poniższy tutorial odbędzie się na przykładzie zapytania SQL wymuszającego pobranie kategorii serwisu aukcyjnego Program SQL Server Management Studio Express Edition (SSMSEE) jest darmowym programem firmy Microsoft do obsługi baz danych MSSQL. W SQL Server 2005 (dołączonym standardowo do Sello) nie ma tego programu i należy go pobrać ze strony http://www.microsoft.com/downloads/details.aspx?FamilyId=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796&displaylang=en . Znajdują się tam dwie wersje, 32 i 64bit. Domyślnie w Sello jest serwer 32bit i taki SSMSEE należy w tym przypadku pobrać. Program należy oczywiście zainstalować, najlepiej na komputerze na którym jest umieszczona baza danych Sello (choć nie jest to wymagane). Uwaga: W przypadku posiadania wersji SQL Server 2008 Express, SSMSEE musi być w tej samej wersji. SSMSEE 2005 nie obsługuje serwerów 2008. Po uruchomieniu pojawi się okno logowania do serwera. Należy tu podać te same dane, które są podawane w Sello przy logowaniu do bazy danych, (kliknij w miniaturkę aby powiększyć obrazek) czyli nazwę serwer (uwaga, zamiast local należy wpisać localhost, lub nazwę komputera jak na zrzucie ekranu) Wybrać typ autentykacji: Windows Authentication - autentykacja windowsowa, zazwyczaj dostępna jeśli serwer jest na tym samym komputerze SQL Server Authentication - autentykacja SQL, tym przypadku należy dodatkowo podać nazwę użytkownika i hasło (domyślnie w Sello: użytkownik(sa), hasło(puste) ) Następnie nacisnąć przycisk Connect Po udanym zalogowaniu w oknie Object Explorer pojawi się drzewko, w którym są między innymi widoczne bazy danych (Databases). Należy tu odnaleźć swoją bazę Sello po nazwie, w moim przypadku jest to baza o nazwie roboczy. Przed rozpoczęciem modyfikacji proponuję zrobić backup (kopie zapasową) tej bazy (jeśli nie została wykonana archiwizacja z Sello). Backup wykonuje się dosyć prosto, klikając prawym klawiszem myszki na konkretnej bazie i wybierając opcję Tasks\Back up... Pojawi się następujące okno, gdzie należy upewnić się, że jest wybrana odpowiednia baza (Database) a następnie nacisnąć przycisk Add... jeśli w polu Destination nie ma wybranych żadnych docelowych lokalizacji na backup. W kolejnym oknie należy wpisać lub wybrać (...) miejsce docelowe oraz nazwę pliku (tutaj: moj_backup). Domyślnie backup wykonuje się w folderze /Backup SQL servera. Następnie zamknąć to okno. Teraz nazwa ta powinna się pojawić w oknie głównym backupu, gdzie należy kliknąć OK, aby rozpocząć. Może to chwilę potrwać, zależnie od wielkości bazy danych. Przy kolejnych próbach backupu nazwa pliku docelowego będzie już zapamiętana, więc wystarczy kliknąć OK. Teraz sedno sprawy, wykonanie polecenia SQL. Przy zaznaczonej (wybranej) bazie Sello należy nacisnąć przycisk New query (Ctrl+N). Należy zwrócić uwagę, aby w liście rozwijanej (3) była wybrana nasza baza a nie inna (np. master). Wybranie naszej bazy przed kliknięciem New query ustawi kontekst pracy na naszą bazę (roboczy). Wykonanie polecenia na niewłaściwej bazie najczęściej kończy się komunikatem: Invalid object name .... Może się zdarzyć, że SSMSEE zażąda ponownego zalogowania do serwera, należy to zrobić dokładnie w takim sam sposób jak pierwsze logowanie. Następnie można już wkleić w pole po prawej zapytanie, w tym przypadku wymuszające pobranie kategorii ze wszystkich serwisów aukcyjnych. update st__Site set st_CategoriesVersion = NULL, st_FormVersion = NULL, st_AttributesVersion = NULL, st_UpdateNeeded = 1 Powyżej przycisk 2 (parse) sprawdzi poprawność składni zapytania/polecenia. Przycisk 3(Execute) wykona, co zakończy się mniej więcej komunikatem: (5 row(s) affected) , zależnie od tego ile serwisów aukcyjnych jest zdefiniowanych w Sello. W przypadku wystąpienia jakichkolwiek błędów, należy w pierwszej kolejności spróbować go zinterpretować (wymagana znajomość języka angielskiego), bo w treści błędu jest informacja co jest nie tak . I to już wszystko. Sello po wybraniu synchronizacji parametrów powinno pobrać wszystkie kategorie, atrybuty ze wszystkich serwisów.
×
×
  • Dodaj nową pozycję...