Краткая суть задачи. Используемый язык PHP, но к языку не обязательно привязываться, хочу просто уловить суть механизма.
Есть 10 компаний которые будут скидывать EDI файлы. Стандарты у них различные (однако они предоставили спецификации). Отрасль: грузоперевозки. EDI у нас не было и я с EDI прежде не работал, поэтому и прошу хоть каких-то подсказок. Заранее спасибо.
Хочу прописать классы с абстрактной фабрикой чтоб можно было передавать им ЕДИ файлик, а оно его жевало и всё правильно разбирало. И вот небольшой список вопросов =)
По поводу самого EDI файла.
1) UNH (это как начало конверта, насколько я понял). И вот некоторые компании скидывают всё в одном UNH (инфо о каждом грузе), другие же скидывают каждый груз в отдельном UNH - UNT.
2) В спецификации есть поле "Position", но я так и не до конца понял как лучше с ним работать. То что оно отвечает за порядок полей - я понял, однако многие поля пропускаются (Conditional)...
3) Как точно узнать к какой именно группе-сегментов относится данная строка (сегмент данных). Так же интересует про вложенные группы сегментов.
По поводу кода
Поскольку не все компании используют EDIFACT, есть ещё стандарт (не нашел нормальное название) который имеет структуру в стиле:
18AAAA1234567 7229932 2H000386CTNS 0000000752200006.86
Поскольку изначально задача стояла в разборе только 1 формата (строкой выше) и достаточно редкого применения, а сроки поджимали, то писалось на коленке...
Идея была в стиле:
Есть класс, внутри него есть массив "specification", в котором массивы по кодам
$this->specification['18'] = array();
$this->specification['18'][] = array('column_range_start' => 2, 'column_range_end' => 16);
$this->specification['18'][] = array('column_range_start' => 17, 'column_range_end' => 31);
и так по каждому коду спецификации. Потом проходили по каждой строке, брали первые 2 символа (код) и доставали откуда по куда доставать инфо.
Когда попросили добавить для EDIFACT, всё с теми же горящими сроками и всё на той же коленке.
$this->specification['RFF'] = array('callback'=>'parseMblHblUML');
Ну а при построчном переборе мы просто вызывали этот метод и через регулярные выражения доставали все необходимые значения.
Мне не надо 100% универсального решения на все случаи жизни. Просто хотелось бы услышать мнения и советы профессионалов, которые может подскажут как лучше работать с этими EDI файлами. Ибо нормальной литературы я не нашел. Разве что хоть как-то мне прояснило что такое EDI и с чем его едят
"A GXS TUTORIAL
EDIFACT Standards Overview Tutorial."
Спасибо что дочитали до конца =)