Все импортируемые данные должны быть подготовлены в виде таблицы в одном или нескольких файлах с расширением XLS или DBF, в том числе, DBF, сопряженный с DBT-файлами. Данные в файлах (далее файлы импорта) должны иметь определенную структуру, описанную в подразделе Требования к файлу импорта.
Первый этап: загрузка импортируемых данных в таблицы импорта
Первым этапом импорта приходов от поставщиков данные из одного или нескольких файлов импорта переносятся в неизмененном виде в поля таблиц базы данных МЕДИАЛОГ (далее таблицы импорта) с именами IMP_<имя_файла_импорта без расширения>, где временно хранятся до начала обработки. Загрузка данных происходит низкоуровневыми функциями SQL-сервера, поэтому процесс загрузки не занимает много времени.
Количество созданных таблиц импорта соответствует количеству файлов импорта, набор полей в каждой таблице определяется структурой данных в соответствующем файле. В дальнейшем таблицы импорта хранятся в базе данных, их структура может оставаться постоянной или при необходимости изменяться пользователем при последующем импортировании данных.
В основную таблицу импорта, указанную в параметрах конфигурации, МИС МЕДИАЛОГ автоматически добавляет системные поля, необходимые для обработки данных при импорте:
_DM_MEDS_ID int | – ID товара, который был найден или создан в базе данных МЕДИАЛОГ; |
_DM_DOC_ID int | – ID накладной, которая была найдена или создана в базе данных МЕДИАЛОГ; |
_DM_TRANSERS_ID int | – ID позиции накладной, которая была найдена или создана в базе данных МЕДИАЛОГ; |
_STATUS int | – статус обработки записи; |
_ERR_TEXT varchar (2000) | – текст ошибки обработки импортируемой записи. |
Если в параметрах конфигурации импорта указаны Поля маппинга, т.е. соответствие параметров файла импорта и системных параметров, то основная таблица импорта будет создана с системными именами полей, а значения полей будут прописаны из соответствующих полей файла импорта.
Перед каждой новой загрузкой данных таблицы импорта очищаются от записей предыдущего импорта. При необходимости обнуления значения ID в таблицах импорта следует добавить в SQL-скрипт инициализации процедуру удаления строки из таблицы ID_VALUES, где KEY_NAME = 'IMP_файл_импорта'.
Второй этап: скрипт инициализации
После того, как все входящие файлы загружены в соответствующие им таблицы импорта, выполняется скрипт инициализации, заданный в конфигурации импорта на вкладке SQL (подготовка). После того, как все входящие данные из файлов импорта файлы загружены в соответствующие им таблицы импорта базы данных МЕДИАЛОГ, запускается SQL-скрипт инициализации, выполнение которого подготавливает импортируемые данные к быстрой обработке и переносу в системные таблицы.
Третий этап: выполнение SQL-запроса импорта
Следующим шагом после отработки скрипта инициализации выполняется SQL-запрос, результат которого хранится в оперативной памяти. Запрос может формироваться в процессе импорта автоматически в виде:
SELECT * FROM [основная таблица импорта]
с учетом заданных в параметрах конфигурации импорта полей сортировки:
ORDER BY IMP_FIELD1, IMP_FIELD2,...IMP_FIELDn
либо сформирован отдельно в модуле статистики МИС МЕДИАЛОГ и указан в параметрах конфигурации импорта.
Четвертый этап: обработка записей
Далее cистема последовательно обрабатывает записи, возвращенные SQL-запросом импорта, при этом проводятся все необходимые проверки и обновления данных, заданные в коде программы (проверка правильности указанных типов данных, удаление "ненужных" значений, поиск соответствия данных в базе и т.п.).
После обработки каждая импортируемая запись получает статус, который указывается в поле _STATUS таблицы импорта. Основные значения статуса: 0 (не обработана), 1 (пропущена), 100 (успешно обработана). Другие значения фиксируют ошибки обработки импортируемой записи, описание которых представлено в поле _ERR_TEXT основной таблицы импорта.
Во время обработки записи в таблицу импорта прописываются также найденные значения системных полей:
_DM_MEDS_ID int | – ID товара, который был найден или создан в базе данных МЕДИАЛОГ; |
_DM_DOC_ID int | – ID накладной, которая была найдена или создана в базе данных МЕДИАЛОГ; |
_DM_TRANSERS_ID int | – ID позиции накладной, которая была найдена или создана в базе данных МЕДИАЛОГ. |
Обработанные записи импортируются в системные таблицы МЕДИАЛОГ.
Пятый этап: дополнительная обработка SQL-скриптами
Для каждой успешно обработанной импортируемой записи непосредственно после добавления данных в системные таблицы может запускаться на выполнение SQL-скрипт обработки записи. Скрипт выполняется после создания или обновления накладной.
Шестой этап: обработка конфликтных записей
После первого круга обработки импортируемых данных запускается второй круг обработки, когда пользователю предлагается поочередно просмотреть все конфликтные записи и вручную указать, какое действие необходимо выполнить с каждой записью. При этом после добавления информации в базу данных МЕДИАЛОГ запись также подвергается дополнительной обработке SQL-скриптом (см. пятый этап).
Журнал импорта накладных
Все операции с импортом накладных фиксируются в системной таблице IMPORT_LOG. При каждой операции загрузки входящих файлов в таблицы импорта, в Журнале создается запись с кодом импорта. В этой записи фиксируются следующие данные:
·дата и время загрузки данных в таблицы импорта;
·пользователь, выполнивший загрузку данных;
·дата и время выполнения последнего импорта данных;
·пользователь, который последним выполнял импорт данных;
·количество записей в основной таблице импорта;
·количество ошибок;
·количество обработанных записей;
·количество пропущенных записей.
Просмотр Журнала импорта прикреплений осуществляется из окна Статистика импорта (рис. 9.5.15) по ссылкам Последняя загрузка файлов в базу данных и Последний запуск импорта данных. Для просмотра данных зарегистрирован системный статистический запрос sys_import_log.ini.
Блокировка импорта накладных
В МИС МЕДИАЛОГ установлен запрет на запуск импорта накладных в процессе выполнения импорта этой же конфигурации (т.е. запуск одной и той же конфигурации импорта несколькими пользователями). Блокировка импорта прикреплений может происходить в тот момент, когда пользователь запускает процесс импорта, а именно:
·нажимает кнопку Импортировать или Загрузить данные в окне импорта прикреплений (рис. 9.5.13),
·нажимает кнопку Создать таблицы импорта в окне настройки конфигурации (рис. 9.5.2),
·нажимает кнопку Начать в окне статистики импорта (рис. 9.5.15).
При попытке повторного запуска импорта по данной конфигурации пользователю выдается сообщение: "Этот импорт уже выполняется другим пользователем". В окне Предупреждение (рис. 9.5.14) доступны следующие действия:
·Послать сообщение – отправить сообщение пользователю, выполняющему импорт;
·Закрыть – закрыть сообщение.
Рисунок 9.5.18. Блокировка импорта накладных
Особенности обработки импортируемых накладных
·Количество создаваемых накладных равно количеству уникальных значений поля Номер документа прихода (DOC_NUM) в таблице импорта. Таким образом, все записи с одинаковым значением DOC_NUM попадают в одну накладную.
·Если по ключам поиска в базе данных найдена накладная, импортируемый товар будет прописан в нее (накладная не должна быть подтверждена). Ключи поиска определяются в конфигурации импорта.
·Если в импортируемых записях, относящихся к одной накладной, совпадают значения полей Код номенклатуры товара (CODE), Серия (SERIES) и Цена с НДС (PRICE), импортируется только первая запись, а остальные пропускаются. Если же хотя бы одно из этих полей будет иметь отличающееся значение, такая запись импортируется.
·Все импортируемые накладные создаются неподтвержденными.