ERP система глазами программиста


3 2

Я сейчас работаю в одной очень интересной фирме и интересна она с разных сторон, но больше всего, своей ИТ инфраструктурой. Когда я устраивался, то по объявлению о по общению с будущим начальством я понял так, что на фирме будет использоваться jаva, а меня ждут такие интересные технологии, как J2EE, сервлеты, портлеты и т.д. Я просто сиял от счастья, потому что хотел получить опыт решения хороших и серьезных задач на jаva. Я знаю этот язык, но опыта разработки и реальной работы в промышленных условиях нет.

И вот я прихожу первый день на работу и узнаю, что на самом деле, у фирмы слишком много денег и поэтому они купили у одной Московской компании внедрение ERP системы. Если быть точнее, то у Московского офиса английской компании. Да что там скрывать, давайте называть вещи своими именами – у XXXXXXXX.

В консалтинговых компаниях работают далеко не лохи и они умеют раскручивать фирмы на бабки и нашу компанию явно раскрутили по полной программе, потому что впарили очень дорогие вещи и внедрили так криво, что уже год все консультатнты вешаются. Ну а что делать, если внедрял и писал код инженер, который н имел никакого опыта программирования.

Но статья не направлена на то, чтобы ругать внедренцев или бывшее руководство, которое повелось на ерунду, это их проблемы и меня не касаются. Мы поговорим на другие темы, более веселые.

Итак, на работе я познакомился со знаменитой ERP программой разработки PeopleSoft (www.peoplesoft.com) под названием JD Edwards. В свое время эта программа очень круто нашумела и фирму купил Oracle. Все программисты плюются от этой системы, но возникает вопрос, почему они ее внедряют? Чтобы понять, что это дерьмо, давайте посмотрим на имена таблиц: F0101, F4101, F4211 и т.д. Тебе эти имена ничего не говорят? Мне тоже . И кто бы догадался, что таблица с именем F0101 на самом деле адресная книга? Интуитивность именования таблиц стремиться к нулю.

Ну ладно таблицы, их не так уж и много и по идее, через пол года можно запомнить все имена и не тратить время на то, чтобы в спомнить, а где же у нас храниться номенклатура? А ведь от интуетивности зависит и производительность.

Но на именах таблиц ужас не заканчивается. Хотите посмотреть имена полей в таблице заказов на продажу? Пожалуйста: SDAN8, SDADDJ, SDITM, SDNXTR, SDLTTR, SDDOCO, SDLTTR и т.д. Таких полей там более 20. А вот теперь скажи мне, как много ты сможешь угадать, что означает определенное поле? Кгда я пришел на работу, то не угадал ни одного! Я думаю, у нас скоро будет атракцион с угадыванием, потому что пока рекордом было два. Смешно? А во время разработки мне абсолютно не смешно, когда приходитсья сидеть с ватманом размером с банное полотенце, и постоянно выискивать то поле, которое нужно. На одни поиски я трачу до 50% своего труда, который стоит не дешево даже в России. В Штатах труд программера еще дороже, так как же позволели такой системе стать популярной? Видимо ее писали НЕ ПРОГРАММИСТЫ для НЕ ПРОГРАММИСТОВ. И те и другие довольны.

Внедренцы не программисты и им все равно, как они внедрят. Это не только консалтинговая компания, которая внедряла нам, это абсолютно все так работают. Их задача – получить деньги, а не сделать клиента счастливым. А у нас счастья на работе нет и не предвидеться. Возможно, что JD Edwards хорошая система и я ее знаю еще плохо. Как говорит мой начальник: «Не так плох JD Edwards, как его внедрили». А может быть внедрили и хорошо.

Ладно, продолжим о плохом – производительность. Фирма работает с ERP пол года и эта фирма далеко не уровня Лукоила или подобных, а база данных уже тормозит. Оперативные отчеты появляются по 5 минут. И что же в них оперативного? Во время внедрения люди даже не подумали создать индексы, поэтому оптимизацией приходиться заниматься самостоятельно и сейчас, уже в работающей системе. А ведь чтобы создать индекс, нужно останавливать работу всех пользователей, чтобы освободить таблицы от блокировок, что далеко не всегда проходит гладко.

А теперь еще одна интересная вещь – даты. JD Edwards использует очень интересный формат даты:

YYY XXX

Где, YYY – это количество лет от 1900 года, а XXX – количество дней в этом году. Это значит, что число 107001 соответствует 1 января 2007-го года, а 107365 – это уже 31 января. Зачем это нужно? Убейте меня, но я не знаю. Почему нельзя было использовать даты базы данных? Они ведь быстрее, универсальнее и лучше. А так, нам приходиться каждую дату конвертировать в нормальное представление, а ведь конвертация занимает не один процессорный такт. При выборке 1000 строк приходиться производить 1000 преобразований, и это только при условии, что в каждой строке только одна дата. А ведь в таблице заказов около 7 дат, а значит, при этой выборке будет 7000 преобразований!!!

Это только самые мягкие эмоции от ERP и его внедрения, на самом деле, все в нашем отделе думают об этой системе и о фирме, которая внедряла, не в очень лестных словах. Как говорит мой начальник, при разговоре об этой программе, мат на букву Б употреблять не более 35 раз. У меня в минуту разговора выходит больше :).

На последок, просто чтоб поржать, показываю запрос, который получает прайсовую стоимость продукции. Запрос возвращает поле с именем price, в котором и есть цена, но сколько для этого нужно сделать!! О какой производительности можно после этого говорить?

select case when sd.sddcto in ('SD') then NVL(bp1.bpuprc,NVL(bp2.bpuprc,NVL(bp3.bpuprc,
   NVL(bp4.bpuprc,NVL(bp5.bpuprc,NVL(bp6.bpuprc,0))))))*(NVL(ad1.adfvtr,1000000)/1000000)  
   else sd.sduprc end as price 
from proddta.f4211 sd 
inner join proddta.f0301 a5 on sd.sdan8=a5.a5an8 
left join proddta.f40941 ik on sd.sdprgr=ik.ikprgr and ik.ikigp1 <> '00' 
left join proddta.f40941 ik1 on sd.sdprgr=ik1.ikprgr and ik1.ikigp1 = '00' 
left join proddta.f40942 ck on a5.a5cpgp=ck.ckcpgp 
left join proddta.f4072 ad1 on ad1.adcgid=ck.ckcgid and ad1.adeftj<=sd.sddrqj and 
        ad1.adexdj>=sd.sddrqj and ad1.adigid=nvl(ik1.ikigid,ik.ikigid) 
left join proddta.f4106 bp1 on bp1.bpmcu='          00' and bp1.bpitm=sd.sditm and 
        bp1.bpeftj<=sd.sddrqj and bp1.bpexdj>=sd.sddrqj and bp1.bpan8 = sd.sdan8 
left join proddta.f4106 bp2 on bp2.bpmcu='          00' and bp2.bpitm=sd.sditm and 
        bp2.bpeftj<=sd.sddrqj and bp2.bpexdj>=sd.sddrqj and bp2.bpcgid=ck.ckcgid and bp2.bpan8 = 0 
left join proddta.f4106 bp3 on bp3.bpmcu='          00' and bp3.bpitm=sd.sditm and 
        bp3.bpeftj<=sd.sddrqj and bp3.bpexdj>=sd.sddrqj and bp3.bpcgid=0 and bp3.bpan8 = 0 
left join proddta.f4106 bp4 on nvl(bp4.bpitm,0)=0 and bp4.bpigid=nvl(ik1.ikigid,ik.ikigid) 
        and bp4.bpeftj<=sd.sddrqj and bp4.bpexdj>=sd.sddrqj and bp1.bpeftj<=sd.sddrqj and 
		bp1.bpexdj>=sd.sddrqj and bp4.bpan8 = sd.sdan8 
left join proddta.f4106 bp5 on nvl(bp5.bpitm,0)=0 and bp5.bpigid=nvl(ik1.ikigid,ik.ikigid) 
        and bp5.bpeftj<=sd.sddrqj and bp5.bpexdj>=sd.sddrqj and bp5.bpcgid=ck.ckcgid and 
		bp5.bpan8 = 0 
left join proddta.f4106 bp6 on nvl(bp6.bpitm,0)=0 and bp6.bpigid=nvl(ik1.ikigid,ik.ikigid) 
        and bp6.bpeftj<=sd.sddrqj and bp6.bpexdj>=sd.sddrqj and bp6.bpcgid=0 and bp6.bpan8 = 0 
     where sd.sddcto in ('SO','S1','SF','SH','S8','SD') 
       and sd.sdaddj>107001 
       and sd.sdlttr>=562 and sd.sdlttr<>980 
       and sd.sdnxtr>=562 
       and sd.sdsoqs>0 

Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку уже лайкнули 2 человек


Комментарии

Сергей Генадьевич

01 Марта 2009

На тему, о том как впаривают системы хорошая статья &quot;Как сделать успешный ЕРП проект&quot; была в Компьютерре. Но у них я ее чтото не нашел, нашел на сайте Кодер Лоджика: [url]http://www.koderlogic.ru/stat_7_1.htm[/url]


Алексей Суслов

21 Февраля 2014

Эта система разрабатывалась не  People Soft, а One World с 1977 года для system/34, во времена перфокарт. Имя таблицы (тогда они назывались файлами) ограничивалось 8 символами, что вызывало вынужденную зашифрованность имен. С именами таблиц и полей все просто - нужно понять схему образования, в основном она логична. А про юлианскую дату - это нативный формат в древней системе, не переделывать же. В общем, это просто история про полное отсутствия рефакторинга в течение десятилетий.
А видели бы вы исходники процедур на языке RPL...


Gallemar

22 Сентября 2018

Очепятки:
"поле? КГДА я пришел"
"который Н имел"


Добавить Комментарий

Еще что-нибудь

Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне