Недавно я подсчитал, что в той или иной степени помог 6 клиентам перейти на отправку счетов-фактур/УПД через электронный документооборот. Но интересен не сам этот факт, а то, что использовалось 4 разных технологии.
2 клиента используют технологию печати через канал MSRS с одновременным созданием XML и HTML файлов средствами самого SQL сервера (OLE automation). И это, на мой взгляд, самый правильный и простой путь
2 клиента не могут использовать технологию канала MSRS из-за очень старых версий (Scala 5.1 и iScala 2.3 SR1). Плюс у них имеются проблемы с кодовой страницей и поэтому пришлось использовать псевдо xls файлы (которые на самом деле html с прописанной внутри кодовой страницей). XML файлы получаются с помощью надстройки (макроса) в Excel. Одного из этих клиентов с самой древней версией я подумываю перевести на другую технологию, с помощью которой я сейчас пытаюсь подключить к ЭДО ещё одного клиента — это отчёт MS SQL Server Reporting Services с «прямым» обращением к таблицам базы данных. Не очень хороший вариант, но всяко лучше, чем через Эксельную надстройку.
И последний проект, который, как мне кажется, я сегодня перенёс из тестовой среды в рабочую — это печать в файлы на EDI принтер, а далее эти файлы обрабатывает механизм Epicor Service Connect:
Сложность данного проекта, разговоры о котором начались более 3-х лет назад (да-да-да и такое бывает!), состояла в том, что корпоративные ИТ руководители наотрез отказались разрешить использование OLE Automation, поэтому вся обработка перешла в Service Connect:
Но не это самое сложное. Самое сложное — то, что счета на оплату для каждого заказа должны создаваться отдельно, а акты и счета-фактуры должны объединяться по покупателю и коду проекта за период из нескольких заказов в один документ. А как это сделать, когда на вход процесса поступает только один заказ, как его объединить с тем, что ещё не поступило?
Общая схема работы процесса выглядит примерно так:
При «печати» счета-фактуры на выходной канал для печати «EDI Diadoc» iScala создаёт файл для каждого заказа/счёта-фактуры. Файл создаётся в папке, которая привязана к входному каналу Epicor Service Connect. Таким образом, этот файл сразу поступает на вход рабочего потока «DiadocIn»
На первом шаге проверяется, является ли покупатель по счёту-фактуре участником электронного документооборота (в карточке покупателя должна быть указана категория «EDI»). Если да, процесс идёт дальше, если нет, завершается и никакие файлы не создаются
Если процесс продолжается, выполняется последовательно несколько преобразований и запускается быстрый поиск, который обогащает данные, добавляя информацию, недоступную к получению с помощью DDF кодов (у клиента куча всевозможных UDDB таблиц)
После этого происходит разветвление процесса. Одна ветвь создаёт HTML файл счёта на оплату, другая ветвь записывает информацию во временные таблицы для последующей их группировки
После записи информации во временные таблицы рабочий поток сравнивает количество записей во временной таблице внутри одного и того же кода покупателя и кода проекта из заголовка заказа (учётное измерение) с аналогичным количеством записей в истории заказов (или открытых заказов). Если это количество не совпадает, например, обработан первый заказ из 2-х, процесс на этом прекращается и будет продолжен, когда во временную таблицу будет добавлена следующая запись по тому же самому коду покупателя и коду проекта из заголовка заказа (учётное измерение), т.е. Epicor Service Connect обработает следующий по списку входной файл.
Если сравнение количества записей показало совпадение, процесс продолжается.
Если возникнут вопросы, не стесняйтесь их задать 🙂