При работе с крупными международными и европейскими поставщиками часто возникает требование обмениваться документами (в частности, заказами на поставку — ORDERS) в стандарте UN/EDIFACT. Разработчики 1С при встрече с этой задачей нередко ожидают увидеть привычный XML-формат или выгрузку в формате CommerceML, однако EDIFACT имеет принципиально иную структуру и правила формирования.
Разберем подробно, что представляет собой этот формат, почему для него не существует универсальной обработки .epf и какими способами можно организовать выгрузку заказов из 1С.
В отличие от XML или JSON, формат EDIFACT — это строчный текстовый формат с жесткой структурой сегментов и специальных разделителей. Каждая строка документа представляет собой определенный сегмент данных, завершающийся специальным символом (как правило, апострофом ').
Разберем основные составляющие структурыEDIFACT-сообщения типа ORDERS:
ORDERS, и версию стандарта, например D96A).В формате применяются строго определенные разделители элементов:
: — разделяет компоненты внутри составного элемента данных;+ — разделяет простые и составные элементы данных;' — знаменует окончание сегмента;? — используется как экранирующий символ перед служебными знаками.Главная сложность заключается в том, что несмотря на наличие международного стандарта ISO, почти каждый контрагент использует свое руководство по внедрению — MIG (Message Implementation Guideline). Из-за разного набора обязательных полей универсальной универсальной внешней обработки «Выгрузка в EDIFACT» в природе не существует — решение всегда адаптируется под требования конкретного получателя.
Проанализируем две основные схемы передачи EDIFACT-документов между вашей базой 1С и европейским контрагентом.
В этой схеме 1С генерирует данные в привычном формате (например, XML или модифицированный CommerceML) и отправляет их на Web-сервис EDI-провайдера. Провайдер, зная спецификацию конкретного получателя, автоматически транслирует полученный XML в текстовый файл EDIFACT и доставляет его адресату.
Преимущества метода:
Если контрагент предоставляет прямой доступ по FTP/SFTP или готов принимать файлы по e-mail/HTTP, генерацию файла EDIFACT можно выполнить средствами 1С.
Рассмотрим, как это реализовать программно с помощью объекта ЗаписьТекста.
// Пример формирования текстового файла EDIFACT (ORDERS) из документа 1С
ПутьКФайлу = "C:\EDI\orders_out.edi";
// Текстовый файл создается в кодировке ANSI (ISO-8859-1) или Windows-1251 согласно MIG контрагента
Запись = Новый ЗаписьТекста(ПутьКФайлу, КодировкаТекста.ANSI);
// 1. Служебный заголовок конверта (UNB)
// UNB + Синтаксис + GLN_Отправителя + GLN_Получателя + Дата:Время + ИД_Обмена'
Запись.ЗаписатьСтроку("UNB+UNOA:2+4601234567890:14+4012345678901:14+231025:1430+00001'");
// 2. Заголовок сообщения (UNH) и документа (BGM)
Запись.ЗаписатьСтроку("UNH+1+ORDERS:D:96A:UN:EAN008'");
Запись.ЗаписатьСтроку("BGM+220+ПО-000123+9'");
// 3. Данные о покупателе (BY) и поставщике (SU)
Запись.ЗаписатьСтроку("NAD+BY+4601234567890::9'");
Запись.ЗаписатьСтроку("NAD+SU+4012345678901::9'");
// 4. Обход табличной части документа ЗаказПокупателя
Для Каждого Стр Из ЗаказПокупателя.Товары Цикл
// LIN + НомерСтроки + + Штрихкод:ТипКода'
Запись.ЗаписатьСтроку("LIN+" + Формат(Стр.НомерСтроки, "ЧГ=0") + "++" + Стр.Штрихкод +:SRV'");
// QTY + КодТипаКоличества:Количество:ЕдиницаИзмерения'
Запись.ЗаписатьСтроку("QTY+21:" + Формат(Стр.Количество, "ЧФ=ND=3; ЧРД=.; ЧГ=0") + ":PCE'");
КонецЦикла;
// 5. Завершающие контрольные сегменты
Запись.ЗаписатьСтроку("UNT+8+1'"); // 8 — количество сегментов в сообщении
Запись.ЗаписатьСтроку("UNZ+1+00001'");
Запись.Закрыть();
Для отправки сформированного файла прямо из 1С по защищенному протоколу FTP используются стандартные объекты платформы FTPСоединение или HTTPСоединение.
Чтобы успешно запустить обмен EDIFACT с зарубежным партнером, рекомендуем придерживаться следующего алгоритма действий:
ORDERS. В нем указаны версия формата (например, D96A или D01B), обязательные сегменты и поля.ЗаписьТекста по полученному спец-шаблону.