Разделители EDIFACT
Разделители EDIFACT — это служебные символы, используемые в синтаксисе стандарта электронного обмена данными EDIFACT (Electronic Data Interchange For Administration, Commerce and Transport) для структурирования и разграничения составных частей сообщения. Они определяют границы между сегментами, элементами данных, составными элементами и повторяющимися группами, обеспечивая однозначное машинное чтение и интерпретацию передаваемой информации.
История и назначение
Стандарт EDIFACT был разработан в рамках ООН (UN/CEFACT) и Международной организации по стандартизации (ISO) в конце 1980-х годов. Его основная цель — унификация форматов электронных документов (заказов, счетов, накладных, таможенных деклараций) для международной торговли. Ключевой особенностью синтаксиса EDIFACT является использование фиксированного набора разделителей, которые задаются в начале каждого сообщения, а не жёстко прописаны в самом стандарте. Это позволяет адаптировать передачу данных под разные системы и протоколы, сохраняя при этом единую логику разбора.
Типы разделителей
В EDIFACT выделяют четыре основных типа разделителей, каждый из которых выполняет свою функцию. Они определяются в первом сегменте сообщения — UNA (Service String Advice). Если сегмент UNA отсутствует, используются значения по умолчанию, установленные стандартом.
1. Разделитель сегментов (Segment Terminator)
Обозначает конец одного сегмента данных и начало следующего. По умолчанию используется символ апострофа ('). Сегмент — это строка, содержащая тег сегмента (например, NAD, LIN, UNH) и его данные. После завершения сегмента ставится терминатор, который сообщает парсеру, что текущая запись закончена.
2. Разделитель элементов данных (Data Element Separator)
Разделяет простые элементы данных внутри одного сегмента. По умолчанию используется символ плюса (+). Например, в сегменте NAD+BY+123456 плюс отделяет тег сегмента (NAD) от первого элемента данных (BY), а второй плюс — первый элемент от второго (123456).
3. Разделитель составных элементов (Component Data Element Separator)
Используется для разделения частей внутри составного элемента данных. По умолчанию применяется двоеточие (:). Составной элемент объединяет несколько связанных значений в одну логическую единицу. Например, в сегменте DTM+137:20250315:102 двоеточие отделяет квалификатор даты (137), саму дату (20250315) и формат даты (102).
4. Разделитель повторений (Repetition Separator)
Указывает на повторение одного и того же элемента данных несколько раз в рамках одного сегмента. По умолчанию используется символ звёздочки (*). Этот разделитель применяется реже остальных и предназначен для случаев, когда один элемент может иметь несколько значений, например, несколько номеров телефонов в одном сегменте.
Синтаксис и использование
Разделители задаются в сегменте UNA, который является необязательным. Если он присутствует, то должен располагаться в самом начале сообщения, сразу после заголовка. Структура сегмента UNA жёстко фиксирована и состоит из шести символов, каждый из которых определяет конкретный разделитель:
- Первый символ (UNA1) — разделитель составных элементов (по умолчанию
:). - Второй символ (UNA2) — разделитель элементов данных (по умолчанию
+). - Третий символ (UNA3) — десятичный знак (по умолчанию
.). - Четвёртый символ (UNA4) — символ экранирования (escape character), используется для отмены специального значения следующего за ним символа (по умолчанию
?). - Пятый символ (UNA5) — разделитель повторений (по умолчанию
*). - Шестой символ (UNA6) — разделитель сегментов (по умолчанию
').
Пример сегмента UNA, задающего нестандартные разделители: UNA:+.?*' — здесь разделитель составных элементов — двоеточие, разделитель элементов данных — плюс, десятичный знак — точка, escape-символ — вопросительный знак, разделитель повторений — звёздочка, терминатор сегмента — апостроф.
Если сегмент UNA не указан, парсер автоматически использует значения по умолчанию. При этом важно, чтобы выбранные символы не встречались внутри самих данных, иначе они будут ошибочно интерпретированы как разделители. Для предотвращения этого используется экранирование: перед символом, который может быть воспринят как разделитель, ставится escape-символ (по умолчанию ?). Например, если в тексте поля встречается символ +, его нужно записать как ?+.
Пример сообщения с разделителями
Рассмотрим фрагмент сообщения EDIFACT, содержащего заказ на поставку:
`` UNH+1+ORDERS:D:96A:UN' BGM+220+ORD12345' DTM+137:20250315:102' NAD+BY+123456' LIN+1++PROD001:VN' QTY+21:50' UNS+S' UNT+7+1' ``
Здесь:
- Апостроф (
') завершает каждый сегмент. - Плюс (
+) разделяет элементы данных:UNH+1+ORDERS:D:96A:UN— три элемента (номер сообщения, идентификатор типа документа). - Двоеточие (
:) разделяет составные части внутри элементаORDERS:D:96A:UN(тип документа, версия, релиз, контролирующий орган).
Значение в обработке данных
Разделители EDIFACT играют критическую роль в автоматизированной обработке электронных документов. Они позволяют:
- Однозначно разбирать сообщения без использования регулярных выражений или сложных парсеров, основанных на позициях символов.
- Передавать структурированные данные в компактном текстовом формате, что снижает объём трафика по сравнению с XML-подобными форматами.
- Обеспечивать совместимость между различными информационными системами (ERP, WMS, бухгалтерскими программами) в международной торговле.
Неправильная настройка разделителей (например, использование символа, который встречается в данных, без экранирования) приводит к ошибкам парсинга и искажению информации. Поэтому при разработке и тестировании EDIFACT-сообщений особое внимание уделяется корректному определению и обработке разделителей.
Особенности в российской практике
В России стандарт EDIFACT активно используется в системах электронного документооборота, в том числе для взаимодействия с таможенными органами (например, в рамках предварительного информирования) и в логистике. Российские участники ВЭД (внешнеэкономической деятельности) применяют разделители EDIFACT в соответствии с международными спецификациями, однако в некоторых национальных профилях (например, в профилях ФТС России) могут быть установлены дополнительные требования к синтаксису. При этом сам принцип разделителей остаётся неизменным.
Источники
- UN/EDIFACT Syntax Rules (ISO 9735).
- UN/CEFACT — United Nations Centre for Trade Facilitation and Electronic Business.
- Руководство по применению EDIFACT в России (ФТС России, Минпромторг).
- Спецификация EDIFACT: Service String Advice (UNA).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →