Kvůli ABASu jsem po 7 letech opustil milovanou práci

Zabudované IDE pro psaní skriptů. Ano, je to texťák. Linter to nemělo, ale aspoň že uměl CTRL+C, CTRL-V, CTRL+Z.

Na internetu toho k ABASu zas tak moc nenajdete. Pokud jste na tento článek narazili při googlování tohoto slova, tak Vás asi moc nepotěším.

To právě zavedení ABASu do naší výrobní firmy způsobil, že jsem po sedmi letech opustil práci, kterou jsem měl rád.

Člověk přirozeně zapomíná na nemilé věci. Tento článek píšu hlavně pro sebe, abych si mohl za pár let připomenout, před čím jsem to utekl.
(pozn.: Text původně zveřejněn na síti LinkedIn)

ABAS

Čím bych začal? No třeba tím, že řeknu, že ABAS je ERP systém, který vznikl v 80. letech v Německu a to ho do značné míry definuje.

ABAS je dobrý na skladové hospodářství a legislativní věci, které jeden člověk nemá šanci uhlídat. Má omezený počet uživatelských licencí. Nemá moc přívětivé GUI a tak se na výrobní hale provozují externí terminály, které jsou na ABAS připojeny skrz telnet. Tyhle terminály jsme u nás programovali v PERLu (API) a rozhraní naklikávali pomocí uživatelských datových struktur ABASu.

Neříkám, že v ABASu nejde udělat spoustu věcí, ono to asi jde, ale celý ten systém je produktem doby svého vzniku. Když porovnám programování v Typescriptu a PHPčku se skriptováním v ABASovském proprietárním jazyce FO a v Perlu, je to jako přesednout z BMW do Trabantu. Jako jede to, ale každých deset km se něco podělá, nemáš ani diagnostiku aby jsi zjistil co se děje, všechno řešíš na koleni záplatami, a co si neuděláš sám, to nemáš.

Samotný ABAS má pár věcí, se kterými jsem se těžko vyrovnával:

  • používá proprietární datové typy,
  • mezi “tabulkami” chybí jednoduché (a jednotné) vazbení. Jaká to škoda, že nefunguje něco jako yprofil^yzub^roztec („Multi-level linking is permitted“),
  • některé jsou datové „tabulky“ jen virtuální datové struktury, nelze s nimi standardně pracovat. Nikde jsem nenašel vysvětlené proč tomu tak je, nebo které z těch struktur existují a které jenom jako,
  • datová selekce umožňuje AND, umožňuje OR, ale nelze je kombinovat,
  • německé zkratky. Vyluštit barmex;leidat;vom;ma;sofort;bem;zn;gutmge vyžaduje permanentní čučení do vnitřností ABASu, nebo do oficiální dokumentace…
  • …která je přístupná jen registrovaným (a schváleným) uživatelům.

Skriptovací jazyk FO

V ABASu se skriptuje v proprietárním jazyce FO, který je ale brutálně zpátečnický:

  • vynucuje používat GOTO návěští,
  • tyto návěští navíc ořezává na prvních sedm znaků,
  • nemá normální podmínky, cykly ani uživatelské funkce,
  • s pamětí pracuje pouze pomocí číselných a písmenných bufferů,
  • nevyhnutelné je volání batchů,
  • při psaní kódu nelze používat odsazení,
  • kód je teoreticky možné psát v němčině nebo v angličtině. Bohužel, někdy funguje to a někdy ono, ale v dokumentaci to popsané není; například nefunguje n|selectedRow a G|currTime, jedou jenom jejich německé protějšky n|selzeile a G|zeitpunkt,
  • ani s oficiální online dokumentací se – když zrovna funguje – moc dobře nepracuje: když jsem potřeboval najít postup jak zjistit aktuální čas (now/jetzt), tak vyhledávání “now” našlo všechen výskyt tohoto řetězce v dokumentaci, včetně podvýrazů  jako “known” a “nowait”, ale časová funkce byla někde až hodně hluboko ve výsledcích.

IDE

ABAS u svých skriptů používá proprietární S3 kódování, takže je nelze editovat mimo ABAS, kde je k tomu určen textový editor typu notepad, takže si asi dovedete představit tu produktivitu.

Mimoto ABAS poskytuje své vlastní vývojové rozhraní abasTools. Dokonce jsem ho rozjel na linuxu (je to upravené Eclipse), a naskriptoval jsem si tam i vlastní doplněk na obousměrný převod mezi UTF8 a S3 (opakovaným voláním search-replace), ale s efektivitou práce ve Visual Studiu se to prostě nedá srovnat.

Tento obrázek nemá žádný popisek
IDE abasTools

Pitomé taky je, že firma, která v česku ABAS zprostředkuje, si nad skripty zavedla vlastní verzování, takže když jsem chtěl verzovat naše firemní věci, musel jsem udělat na lokálu mirror a verzovat vše u sebe.

Nadstavby k ABASu

No a pak jsou tu ty nadstavby v Perlu, ve kterém jsme ve firmě psali API pro věci, se kterými si ABAS neporadí. S jeho použitím přišla firma, která u nás ve firmě ABAS zaváděla.

Perl je vlastně taky produkt své doby. Funguje, ale co bych k vám k němu řekl… Pro PHPčkaře jako jsem já, bylo těžké pochopit rozdíl mezi $var, @var a %var (už jsem ho zapomněl). V Perlu stačí udělat chybu v jednom modulu a spadne celý systém. Vypotil jsem v tom fungující API, ale sám jsem cítil, že takhle už se dnes věci neprogramují.

Na začátku jsem myslel, že Perl používáme, protože má nějakou ultimátní knihovnu pro ABAS. Dnes, když vím, že Perl s ABASem komunikuje přes telnet skrz příkazy jako EXQ, EDI, SFV, GFV a nic víc, tak bych, přísahám, přísahám, že bych všechny skripty v Perlu zahodil a normálně bych vše od začátku psal v typescriptu.

Na GUI jsme používali program od dodavatelské firmy, který byl černobílý, neumožňoval formátovat texty, linkovat hypertextem, ani změnit text na buttonu, měl sice porty na různé platformy, ale ne pro web. Troufám si tvrdit, že nic z uvedeného se nikdy nezmění.

Závěrem

ABAS se ve firmě, kde jsem pracoval, zavedl proto, aby nahradil prastarý systém (PHP/MySQL), který už byl za zenitem, nestíhal.

Za téměř 7 let se malá rodinná firma, do které jsem tehdy nastoupil, změnila ve středně velkou fabriku a systémová změna už byla opravdu nutná. Zároveň s příchodem ABASu bylo nutné formalizovat spoustu činností, revidovat výrobní postupy, což byl nevyhnutelný krok vpřed.

Zároveň se na ABAS pohlíželo jako na univerzální řešení, které vyřeší všechny problémy. Omyl. Nahradilo je to svými vlastními. Ale ty už já řešit nechci.