ТЗ на организацию электронного документооборота с
«Центр внедрения «ПРОТЕК»
Общие сведения
Необходимо реализовать автоматическую выкладку расходных накладных (РН) в формате XML на ftp-ресурс ftp://farvater. *****/, используя технологию, основанную на применении протокола обмена сообщениями на базе XML (SOAP) через ftp-ресурс farvater. protek, что ускорит обработку информации клиентом «Центр внедрения «Протек» (ЦВ «Протек») и в дальнейшем позволит быстрее передать товар на продажу.
Предложение по реализации в системе «Оперативный учет»
В контекстном меню Заказов («Заказ на склад» (класс 89), «Заказа-транзит» (класс 248)) добавить новый пункт «Отправить расходные накладные ЦВ «Протек» (см. рис. 1). Данный пункт меню должен быть доступен только для Заказов с контрагентом «Протек» (id = ).

Рис. 1. Контекстное меню
Для каждой РН формируется отдельный xml-файл. В качестве названия файла использовать значащие цифры из номер РН (см. описание тега <number></number>).
Для контроля выкладки РН и хранения образов сформированных xml-файлов создать таблицу, включающую следующие поля:
Наименование поля | Описание поля |
OID | Первичный ключ таблицы |
RN_ID | ID расходной накладной, выкладываемой ftp-ресурс |
IMAGE_FILE | Образ файла (BLOB) |
IS_UPLOADED | 0 – РН не выложена на ftp 1 – РН выложена на ftp |
UPLOAD_DATE | Дата и время выкладки файла на ftp |
Необходимо реализовать 2 варианта выкладки РН на ftp-ресурс: автоматический (при первом проведении РН) и ручной (при выборе пункта контекстного меню «Отправить расходные накладные ЦВ «Протек»).
Xml-файл для каждой РН может выкладываться на ftp-ресурс несколько раз.
Первичная выкладка происходит:
1. автоматически при проведении РН (если записи в контрольной таблице не существует);
2. в ручной режиме при ошибке автоматической выкладки (запись в контрольной таблице существует и IS_UPLOADED = 0).
Вторичная выкладка происходит:
1. автоматически при проведении РН после предшествующего отката (запись в контрольной таблице существует и IS_UPLOADED = 1);
2. в ручном режиме по запросу пользователя (запись в контрольной таблице существует и IS_UPLOADED = 1).
При каждой попытке выкладки файла на ftp-ресурс в контрольной таблице должны обновляться образ файла, дата/время выкладки и признак успешности выкладки. Файл считается отправленным, если признак IS_UPLOADED = 1.
Если при выкладке РН произошел сбой, то признак IS_UPLOADED = 0 и ответственным сотрудникам отправляется уведомление на электронную почту с сообщением об ошибке выкладки. Тема и тело сообщения совпадают: «Расходная накладная № <номер РН>. Ошибка отправки в ЦВ «Протек». Необходимо провести ручную отправку РН». Список рассылки: менеджер из Заказа и сотрудник, создавший Заказ (определить по логину пользователя, создавшего Заказ). Адрес электронной почты определить из справочника «Физические лица».
При ручной выкладке РН на ftp-ресурс пользователю выводится окно выбора РН, которое заполняется проведенными РН, подчиненными выбранному Заказу. Если проведенных РН нет, то выводить информационное сообщение: «Нет данных для отправки. Расходные накладные не проведены!».
Окно выбора РН имеет следующую структуру:
Окно выбора Расходных накладных | |
Поле | Описание |
Checkbox | Для выбора РН, по умолчанию все сняты |
№ РН | Номер РН |
Статус | Если IS_UPLOADED =1, то статус = «Отправлена», иначе статус = «Не отправлена» |
Кнопки «Отправить» и «Отмена» |
Пользователь помечает в Checkbox РН, которые необходимо отправить, и нажинает кнопку «Отправить». Для каждой помеченной РН формируется xml-файл и выкладывается на ftp-ресурс, а в таблице контроля выкладки обновляется существующая запись.
При вторичной выкладке файлов необходимо автоматически отправлять письмо на электронный адрес: *****@ (для хранения адреса завести константу). Тема письма: «, Расходная накладная № [значение из тега <number></number>]. Повторная выкладка». Во вложение добавить xml-файл РН.
Общие требования к заполнению XML-файла
1. Кодировка файла должна быть или UTF-8 или ANSI. В зависимости от этого должна заполняться первая строка файла:
<?xml version="1.0" encoding="UTF-8"?>
или
<?xml version="1.0" encoding="WINDOWS-1251"?> (только верхний регистр!!!)
2. Поля, отмеченные как Optional, необязательны для заполнения! Не заполняются только в том случае, когда в базе Поставщика нет информации.
3. Форматы дат могут быть только следующими:
T09:30:47
T09:30:47+03:00
4. Регистр написания тегов важен для дальнейшей обработки файла.
5. Когда заполнен тег lot, тогда в блоке тегов invoiceLotSet должны обязательно заполняться теги manufacturerPrice и qty.
6. Если в написании названия препарата (тег description и тег mnn) используются спецсимволы (или & или < или > или " и т. п.), то при заполнении xml они должны быть заменены (базовое требование XML).
Варианты замены спецсимволов:
& нужна замена на &
> нужна замена на >
< нужна замена на <
" нужна замена на "
' нужна замена на &apos.
7. Не использовать пробел, как разделитель групп разрядов, при написании значений в числовых полях.
8. Выкладка xml-файлов должна осуществляться на фтп-ресурс ftp://farvater. *****/ в папку INVOICE. После выкладки файлы будут обработаны процедурой, по окончании работы которой файлы будут перемещены из папки INVOICE в папку ARCHIVE. Процедура запускается каждые полчаса с 7:00 до 22:00 ежедневно без выходных (учесть данный факт при реализации автоматической выкладки файлов).
Структура xml-файла
Структура xml-файла | Описание поля | Источник данных | Обязательность поля | Пример |
<?xml version="1.0" encoding="UTF-8"?> | Данный текст должен присутствовать в каждом заголовке РН | |||
<invoice> | ||||
<comments></comments> | Комментарий к РН от Поставщика для сотрудников ЦВ «Протек», текстовое поле | Примечание из РН (document. description) + номер РН | Optional | Тестовая расходная накладная №1 |
<confirmed></confirmed> | Признак подтверждения электронной РН, числовое поле, обязательное заполнение | Всегда =1 | 1 | |
<createDate></createDate> | Дата создания электронной РН, поддерживает формат с учетом временного пояса и без, с учетом времени и без, обязательное заполнение | Дата создания xml-файла | ||
<currency></currency> | Валюта РН, текстовое поле, обязательное заполнение. Для рублей выводить – «RUR». | Буквенный код валюты из РН согласно справочнику «Курсы валют» (поле «Валюта», currency. charcode) | RUR | |
<date></date> | Дата электронной накладной (формат аналогичный createDate), обязательное заполнение | Дата документа РН (document. docdate) | ||
<doctype></doctype> | Тип электронной накладной, число | Всегда = 1 | 1 | |
<invoiceItemSet> | Параметры строк электронной накладной (начало). Блок повторяется для каждой уникальной позиции (itemIdSupplier) в составе текущей РН |
<description></description> | Наименование товарной позиции, текстовое поле, обязательное заполнение, спец. символы не допустимы | Полное наименование номенклатуры из детализации РН (resource. long_name) | Азитрокс, капс. 500 мг (1 блистер в пачку) (К) | |
<grprice></grprice> | Цена по государственному реестру за одну упаковку товара (для категории товара ЖНВЛП), числовое поле, разделитель точка, округление до 4 знаков | Зарегистрированная предельная отпускная цена производителя в рублях за одну упаковку. Для получения цены использовать алгоритм, реализованный в отчете в отчета «Федеральный протокол согласования цен ПП № 000». В отчете выводится цена за ед. изм. (т. е. за тыс. упак.), поэтому необходимо реализовать пересчет на основании справочника «Пересчет ед. измерения». | Optional | 35.8612 |
<invoiceLotSet> | Параметры блока серии электронной накладной (начало), желательный для заполнения блок. Если препарат поставляется двумя и более сериями, то блок invoiceLotSet повторяется для каждой уникальной серии препарата в составе текущей позиции | |||
<barcode></barcode> | Штрих-код упаковки, целое число | Штрих-код из справочника «Номенклатура» (barcode) | Optional |
<AmnInBox></AmnInBox> | Количество упаковок в заводской коробке (кратность короба), числовое поле | Количество упаковок в коробе из справочника «Ресурс-короб» для короба из РН, реализовать пересчет в упаковки на основании справочника «Пересчет ед. измерения» | 200 | |
<country> </country> | Страна изготовителя позиции, текстовое поле | «Страна» завода-изготовителя серии из справочника «Заводы-изготовители» | Optional | Российская Федерация |
<countryCode></countryCode> | Код страны изготовителя позиции | Пусто | Optional | |
<distributiorCharge></distributiorCharge> | Наценка (в %) предприятия поставщика по отношению к цене завода изготовителя (для категории товара ЖНВЛП), числовое поле, разделитель точка, округление до 4 знаков | % наценки получить из отчета «Федеральный протокол согласования цен ПП № 000» поле «Суммарный размер фактической оптовой надбавки организации оптовой торговли, в процентах» | Optional | 5.6908 |
<expdate></expdate> | Срок годности товарной позиции | Поле «Годен до» из справочника «Серии» (sdate) | Optional | |
<productiondate></productiondate> | Дата производства | Поле «Дата производства» из справочника «Серии» (pdate) | Optional | |
<gtd></gtd> | Номер государственной таможенной декларации, текстовое поле | № ГТД из справочника «Серии» (gtd_num) | Optional | / |
invoiceFileSet | Параметры блока образов документов качества (начало), желательный для заполнения блок. Если в справочниках поставщика существует несколько документов качества для текущей позиции/серии, то блок invoiceFileSet повторяется в составе текущего блока invoiceLotSet | |||
<fileName></filename> | Имя документа качества, текстовое поле | Поле «Сертификат» из справочника «Серии» (snumber) | Optional | POCC HR. ФM08.Д38623 |
<typeId></typeId> | Тип документа качества (1 – декларация, 2 – паспорт,3 – сертификат соответствия, 4– свидетельство о регистрации), целое число | Всегда= 1 | Optional | 1 |
</invoiceFileSet> | Параметры блока образов документов качества (конец) | |||
< lot></lot > | Номер (наименование) серии, текстовое поле | Наименование серии из справочника «Серии» | Optional | А8754 |
< manufacturer></manufacturer > | Наименование предприятия изготовителя, текстовое поле | Наименование завода-изготовителя серии из справочника «Серии» (plantid) | Optional | Фармстандарт-УфаВИТА (Уфа) |
< manufacturerAddress> </manufacturerAddress > | Адрес предприятия изготовителя, текст | Значение из поля «Адрес» справочника «Контрагенты» для контрагента, соответствующего заводу-изготовителю (поле «Контрагент» справочника «Заводы-производители») | Optional | Республика Башкортостан, |
<manufacturerPrice></manufacturerPrice > | Отпускная цена без НДС за единицу товара данной серии (партии), числовое поле, разделитель точка, округление до 4 знаков, не заполняется, только если не заполнен тег lot | Цена реализации из РН за одну упаковку. Реализовать пересчет цены на основании справочника «Пересчет ед. измерения» | 123.8341 | |
<qty></qty > | Количество упаковок данной серии, целое число | Количество из РН. Реализовать пересчет единиц измерения на основании справочника «Пересчет ед. измерения» | Optional | 1000 |
</invoiceLotSet > | Параметры блока серии электронной накладной (конец). | |||
<itemIdOKP></itemIdOKP > | Код позиции в общероссийском классификаторе продукции, целое число | Поле «ОКП» справочника «Номенклатура» | Optional | 66999 |
<itemIdSupplier> </itemIdSupplier > | Внутренний код позиции в справочниках поставщика, VARCHAR2, обязательное заполнение | Поле «Артикул» справочника «Номенклатура» | М99001 | |
<itemIdTNVED></itemIdTNVED > | Код позиции в товарной номенклатуре внешней экономической деятельности (для импортных товаров), целое число | Поле «Код ТНВЭД» справочника «Номенклатура» | Optional | 9527 |
<mnn> </mnn > | Международное непатентованное наименование, текст, специальные символы не допустимы | Поле «МНН» справочника «Номенклатура» | Optional | Азитромицин |
< price></price > | Отпускная цена без НДС за единицу товара (без учета серии), не заполняется только в случае, если в текущем инвойсе для нескольких серий (lot) одного препарата (itemIdSupplier) указаны разные отпускные цены (manufacturerPrice), числовое поле, разделитель точка, округление до 4 знаков | Цена реализации за одну упаковку номенклатуры (без учета серии), если для всех серий номенклатуры в заданной РН цены одинаковы | 123.8312 |
<qty></qty > | Количество упаковок поставляемой позиции, обязательное заполнение, целое число | Общее количество упаковок номенклатуры по всем сериям. Реализовать пересчет количества на основании справочника «Пересчет ед. измерения» | 1000 | |
<sum></sum > | Сумма по препарату без НДС, обязательное заполнение, числовое поле, разделитель точка, округление до 2 знаков, ограничение до 14 символов | Общая сумма без НДС по всем сериям номенклатуры | 133736.05 | |
< sumNds></sumNds > | Сумма по препарату с учетом НДС, обязательное заполнение, числовое поле, разделитель точка, округление до 2 знаков, ограничение до 14 символов | Общая сумма с НДС по всем сериям номенклатуры | 148596.10 | |
<tax></tax > | Налоговая ставка НДС, целое число, поле обязательное для заполнения | Ставка НДС из РН (NDSID) | 10 | |
</invoiceItemSet > | Параметры строк электронной накладной (конец) | |||
<itemqty></itemqty> | Количество уникальных позиций поставки (т. е. количество тегов itemIdSupplier в текущем invoice), целое число | Количество уникальных артикулов в РН | Optional | 1 |
<number></number> | Номер электронной накладной, числовое поле, соответствует названию xml-файла, обязательное заполнение. Если номер инвойса содержит символы, то предлагаем для написания полного номера инвойса использовать тег comments, здесь же оставить только число. Примечание: по требованию заказчика номер РН должен быть уникален в пределах года. В ОУ номер РН не является уникальным, т. к. может быть отредактирован вручную. Заказчик от этом факте предупрежден! | Значащие цифры номера РН. Пример: номер РН – «62-РН», значащие цифры – 5013. Полный номер РН вывести в теге comments></comments> | 0001 | |
<paymentterm></paymentterm> | Наименование условий оплаты поставки, текст | Пусто | Optional | Пусто |
<shipdate></shipdate> | Дата отгрузки товара, (формат createDate), обязательное заполнение | Дата первого проведения РН (movedate) | T09:30:47-05:00 | |
<sum></sum> | Сумма поставки без НДС, обязательное заполнение, числовое поле, разделитель точка, округление до 2 знаков, ограничение до 14 символов | Общая сумма документа без НДС (ramount) | 144344.70 | |
<sumnds></sumnds> | Сумма поставки с НДС, обязательное заполнение, числовое поле, разделитель точка, округление до 2 знаков, ограничение до 14 символов | Общая сумма документа c НДС (allamount) | 158779.17 | |
</invoice> |
Приложение 1: Настройка соединения с ftp-сервером
1. ФТП сервер farvater создан с технологией SSL, организовано зашифрованное соединение (FTPS).
2. Обращаться к серверу по имени farvater. ***** и не использовать его IP: 194.146.119.206.
3. Протокол ftp implicit tls, порт 21 для коннекта и с для передачи данных.
4. Пример настройки ftp на примере TotalCommander (сертификат для implicit TLS не нужен).

5. Настройка filezilla


6. Для доступа на ftp-ресурс предоставляется логин/пароль. По требованию клиента ЦВ «Протек» можем организовать ограничение доступа к farvater. ***** по IP-адресу клиента (если необходимо).
7. Настройка запуска ФТП через браузер Internet Explorer:
7.1. Откройте браузер Internet Explorer

7.2. В поисковой строке прописать ftp://farvater. *****/






7.3. Скопируйте ваш xml-файл, который хотите выложить на фтп, зайдите в папку INVOICE, и вставьте его туда:






