Jak wysłać cokolwiek

From The Joel on Software Translation Project

Jump to: navigation, search

Joel Spolsky
13 grudnia 2005
Wersja oryginalna: How to Ship Anything
Przełożył: Szymon Kobalczyk


Kiedy rozpoczęliśmy na naszych stronach sprzedaż płyt DVD Aardvark, nie sądziliśmy, że tak trudno będzie je pakować i wysyłać. Przede wszystkim nie spodziewaliśmy się, że będzie ich tak dużo, a poza tym tak jakoś przypadkiem pominęliśmy takie niewielkie problemy jak wypełnianie deklaracji celnych, które okazały się wielkim koszmarem.

W przypadku pierwszej wysłanej parti robiliśmy wszystko dosyć doraźnie. Użyłem funkcji Mail Merge w Microsoft Word do wydrukowania większości nalepek, dla zamówień zagranicznych napisałem małą aplikację w Accessie, która wypełniała formularze na stronach USPS (United States Postal Service, Poczta Stanów Zjednoczonych), i tak dalej.

Sama wysyłka okazała się dosyć trudna. To niesamowite jak małe ergonomiczne problemy stają się istnym utrapieniem, kiedy wysyłasz tysiące zamówień do 60 różnych krajów. Na przykład, deklaracje celne generowane na stronach USPS musiały zostać podpisane. Mieliśmy ich całą masę. Próbowaliśmy je „podpisywać” przepuszczając je ponownie przez drukarkę laserową i dodrukowując klika obrazów podpisów w odpowiednich miejscach. Udawało się to na jednej drukarce, ale każda inna drukarka w biurze zacinała się po podaniu jej papieru już zadrukowanego przez drukarkę laserową. Dlaczego? Oczywiście, w końcu w drukarce która mogła drukować podpisy skończył się toner. Była to drukarka Della. Dell nie pozwala sklepom z artykułami biurowymi sprzedawać swoich tonerów. Jedynym sposobem zdobycia tego tonera było zamówienie go u Della i wydanie sporej kwoty za natychmiastową dostawę.

Według moich szacunków obsłużenie jednego zamówienia trwało około trzech minut i udało nam się zejść tak nisko tylko dlatego, że przetwarzaliśmy je partiami. Co gorsze, wymagało to zaangażowania kogoś znającego zapytania SQL i Mail Marge to stworzenia etykiet.

W ostatni weekend, pomyślałem musi być jakiś prostszy sposób. Poświęciłem trochę czasu na znalezienie w Internecie narzędzi, które mogłyby nam pomóc i w poniedziałek zacząłem budować nasz nowy Super Hiper System Wysyłkowy, vel FogShip, którego poskładanie, oprogramowanie i usunięcie usterek zajęło około trzech dni.

Oto jak wygląda fizyczny system.

Całym procesem steruje pojedynczy komputer pod kontrolą Microsoft Access. Same dane wysyłkowe znajdują się w bazie SQL Server.

Każdego dnia kiedy jesteś gotowy do wysyłania, klikasz na przycisk w Accessie, który powoduje wydrukowanie sterty listów przewozowych. Typowy list przewozowy jest pokazany po prawej.

Dlaczego Microsoft Access? Sam byłem nastawiony sceptycznie? Nigdy w życiu nie użyłem funkcji „raportów” Accessa. Zawsze wyobrażałem sobie, że jest ona przeznaczona dla staroświeckich osób, które z niejasnych powodów muszą mieć swoje dane wydrukowane i nie mogą pojąć koncepcji przeglądania informacji w komputerze.

No cóż, okazuje się że raporty Accessa są idealne do generowania listów przewozowych. To jest to, do czego zostały stworzone. Ponieważ znajdują się już w bazie SQL Serwer, zajęło mi nie więcej niż parę godzin ułożenie i zaprojektowanie raportu dokładnie w taki sposób, jak chciałem.

Przy listach przewozowych doświadczenie nauczyło nas jeszcze dwóch rzeczy. Przede wszystkim, zamiast drukować je na kartkach normalnych rozmiarów, wydrukowałem je na kartach 5x8 cali. Ma to dwie wielkie zalety. Po pierwsze, bez zaginania mieszczą się w kopertach, których używamy do wysyłki większości książek, CD-ROM-ów i DVD. To naprawdę robi różnicę, kiedy masz mnóstwo rzeczy do wysłania. Po drugie, ponieważ karty są trochę bardziej sztywne niż papier, łatwiej jest je wrzucać do koperty.

Kolejną rzeczą jest kod kreskowy drukowany u góry po środku. Istnieje wiele różnych schematów drukowania kodów kreskowych, ale jeśli drukujesz swoje własne kody, najłatwiejszym w użyciu jest coś o nazwie Kod 39. Inne system kodów kreskowych wymagają dodania sumy kontrolnej na końcu kodu, a to oznacza, że będziesz musiał napisać odrobinę kodu aby wyliczyć tą sumę kontrolną. Natomiast Kod 39 osadza protokół korekcji błędów w każdej literze, co oznacza że możesz dostać czcionkę dla Kodu 39, która będzie działała tak jak każda inna czcionka bez pisania jakiegokolwiek oprogramowania.

Kiedy jesteś gotowy do rozpoczęcia wysyłki łapiesz list przewozowy i skanujesz go.

Nie bardzo wiedziałem jaki skaner kodów kreskowy mam kupić, a niezależnie od tego jak bardzo próbowałem, nie mogłem znaleźć w internecie żadnych recenzji takich skanerów. Dowiedziałem się, że typ skanera jaki potrzebuje to skaner keyboard wedge USB. Oznacza to, że ma on złącze USB, co znacznie ułatwia podłączenie, zaś z punktu widzenia twojego komputera zachowuje się dokładnie tak samo jak klawiatura. Dowiedziałem się również, że chcę skaner laserowy, a nie z matrycą CCD, ponieważ ten pierwszy działa na odległość. W końcu kupiłem model Wasp WLS-9000 razem ze stojakiem, co można zobaczyć na zdjęciu. Jak na razie spisuje się świetnie.

Podłączenie skanera było najłatwiejszą rzeczą na świecie. Wystarczy go podłączyć do portu USB i to wszystko. W zestawie dołączona jest cała książka kodów kreskowych, których zeskanowanie umożliwia skonfigurowanie go na wiele interesujących sposobów, którą od razu można wyrzucić do kosza. Bez żadnej konfiguracji, kiedy zeskakujesz kod kreskowy skaner wpisze litery reprezentowane przez ten kod na klawiaturze i naciśnie Enter.

W systemie FogShip, zeskanowanie kodu kreskowego uruchamia proces VBA wykonujący trzy rzeczy.

Najpierw zamówienie zostaje oznaczone jako wysłane w naszej bazie danych dostępnej online, przez co klient otrzymuje e-mail powiadamiający, że jego zamówienie jest już w drodze. Tak naprawdę należałoby zawiadamiać klienta, że zamówienie zostało wysłane dopiero kiedy pojawi się listonosz i zabierze przesyłkę, ale to rozszerzenie wymaga dodatkowego oprogramowania i będzie musiało poczekać.

Drugą rzeczą, którą program robi po zeskanowaniu kodu kreskowego, jest wyświetlenie informacji z listu przewozowego na dodatkowym dużym monitorze wypisanych olbrzymią czcionką. Dzięki temu można od razu wrzucić list przewozowy do koperty... nie trzeba trzymać go cały czas pod ręką tylko po to by śledzić co się pakuje. Tej lekcji nauczyła nas pierwsza tura wysyłki, kiedy musieliśmy trzymać list przewozowy poza kopertą aż do ostatniej chwili, żeby wiedzieć co mamy spakować i jaka jest metoda wysyłki. Trzymanie listu przewozowego do ostatniej chwili na zewnątrz było kolejną irytującą rzeczą, która komplikowała cały proces.

Po trzecie, program drukuje naklejkę na list oraz, dla zamówień międzynarodowych, deklarację celną.

Chcąc wydrukować naklejkę na list USPS z opłatą pocztową, tak naprawdę mamy tylko trzy możliwości. Można użyć strony USPS („Click ‘n’ Ship”) ale ten mechanizm jest przeznaczony dla użytkowników domowych wysyłających jedną czy dwie rzeczy. Nie nadaje się do automatyzacji i zawsze drukuje mnóstwo dodatkowych instrukcji, które i tak lądują w koszu. Ponieważ tworzenie naklejki oparte jest na Adobe Acrobat Readerze, proces drukowania jest kłopotliwy i nie działa dobrze o ile nie używasz drogich naklejek rozmiaru całej strony 8.5 x 11 cali z drukarki laserowej. Tak czy inaczej Click ‘n’ Ship nie jest dla nas. Pozostałe dwa rozwiązania to Stamps.com i Endicia. Obywa umożliwiają drukowanie naklejek programistycznie.

Endica ma dla naszych zastosować klika przewag nad Stamps.com: ma niezłe narzędzie pozwalające na rozplanowanie deklaracji celnych i etykiet dokładnie tak jak chcieliśmy i cała dokumentacja jest dostępna na ich stronach WWW. Stamps.com wymaga zarejestrowania się w programie dla deweloperów więc trochę trwało zdobycie potrzebnej nam dokumentacji, a ponieważ potrzebowaliśmy tego na wczoraj po prostu użyliśmy Endicia.

System drukowania naklejek Endicia nie mógłby być prostszy. Wystarczy stworzyć plik XML z wszystkimi informacjami przewozowymi i uruchomić aplikację podając w wierszu poleceń nazwę tego pliku XML. Program wypluwa naklejkę i kończy działanie tworząc nowy plik XML z informacjami do śledzenia przesyłki oraz informacją o statusie. O ile wiem, system Stamps.com jest oparty na ActiveX, co również nadawałoby się dla naszej aplikacji.

Skoro o tym mowa… pomówmy o drukowaniu naklejek. Jeśli robisz więcej niż trzy czy cztery naklejki dziennie, potrzebujesz drukarkę do naklejek, a jeśli chcesz by cały proces przebiegał szybko to potrzebujesz naprawdę szybką drukarkę do naklejek, a nie drukarkę laserową która musi się rozgrzać. Wszyscy polecali firmę Zebra, która produkuje profesjonalne, bardzo wydajne drukarki do naklejek. Wybraliśmy model Z4Mplus, której zrobienie naklejki 4x6 cali zajmuje mniej niż sekundę. Co więcej, ta drukarka może także odklejać naklejkę za ciebie o ile dokupisz przystawkę do odklejania (piszę się na to!) Ta rzecz jest naprawdę super. A jeśli jeszcze użyjesz naklejek typu Direct Thermal, nie musisz kupować taśmy, ani tuszu, ani tonera, ani czegokolwiek... nadruk jest jakoś wypalany na naklejce.

Kolejny problem: deklaracje celne dla zamówień międzynarodowych. Deklaracja celna wygląda tak:

Zielona część po lewej to naklejka, którą trzeba oderwać i przykleić na kopertę. Biała część to zwykły papier połączony przez perforację. Całość trzeba wypełnić szczegółowo podając cenę, dokładny opis produktów, ile ważą oraz trzeba podpisać obie strony. Ich wypełnianie to istny koszmar.

Pierwsza trudność polegała na znalezieniu drukarki, która potrafiłay drukować na papierze 4 x 7 cali, bo takiego rozmiaru są deklaracje celne, nie psując części z naklejką. Musiała również potrafić drukować dosyć blisko krawędzi strony, nie mogła wymagać ręcznego podawania każdej deklaracji i jakość wydruku musiała być na tyle dobra żeby obraz podpisu nie wyglądał na zbytnio podrabiany. Musiała szybko drukować i nie rozgrzewać się zbyt długo, żeby nie spowalniać całego procesu.

Drukarką która spełniała wszystkie te kryteria był HP LaserJet 2420. Kupiliśmy dwie takie (druga drukuje listy przewozowe). W pojemniku na koperty może pomieścić 100 czystych deklaracji... okazało się, że deklaracje maję prawie taki sam rozmiar jak koperty monarchy, co jest standardowym formatem dla większości programów.

Program instalacyjny dostarczany z tą drukarką jest po prostu okropny i rozwalił się podczas próby instalacji na nowiutkim komputerze z Windows XP. Musieliśmy poświęcić kilka godzin na zabawę ze sterownikami zanim udało się wydrukować cokolwiek prawidłowo. W międzyczasie, dało się drukować tylko super wolno i nie mogliśmy dociec dlaczego. Jestem zaszokowany, że w naszych czasach HP nadal produkuje drukarki, których normalni ludzie nie są w stanie skonfigurować.

Wróćmy do Microsoft Access, gdzie stworzyłem raport dla deklaracji celnych. Przy użyciu linijki dokładnie zmierzyłem pozycję każdego pola na papierze i odpowiednio rozplanowałem raport w Accessie. Udało się znakomicie, łącznie z umieszczeniem przyzwoitego facsimile podpisu w miejscu do tego przeznaczonym!

Ostatnim krokiem procesu jest przyczepienie pozostałych śmieci, jak znaczki poczty lotniczej lub przesyłki priorytetowej.

I (werble!) gotowe.

Wysłanie zamówienia międzynarodowego trwa teraz około 35 sekund, podczas gdy wcześniej trwało 3 minuty, i może zostać wykonane przez kogokolwiek, niezależnie czy zna on SQLa i Mail Merge. Zamówienia krajowe zajmują jeszcze mniej ponieważ nie wymagają deklaracji celnej. A co najważniejszej, całość to niezła zabawa.

Personal tools