В статье Андрея Вахрина (Dolter) рассматриваются проблемы интеграции Microsoft Axapta и 1C, а также приводится демонстрационная версия интегратора с уже настроенными правилами передачи данных из Аксапты в 1С. Инструмент работает на 1Cv77 с дополнением 1С++.

axapta-1c_loader.zip (Демонстрационная версия интегратора для 1Cv77 и 1C++, 260Kb, Для загрузки требуется регистрация на форуме у Mazzy)

Андрей Вахрин (Dolter), dolter@rabota-na-rezultat.ru

Интеграция Axapta с 1C

Для автоматизации предприятий сегодня используются самые разнообразные приложения и технология. И, пока мы дожидаемся «универсальной кнопки», приходится учить эти приложения взаимодействию.

Что должно быть

Все системы интеграции приложений можно условно разделить на три уровня:

Каждый технический специалист знает, что чем ниже уровень доступа к данным, тем больше возможностей предоставляется для операций над данными, но, с другой стороны, тем больше трудозатрат для реализации алгоритма обмена. На среднем уровне трудозатраты меньше, но и вступают ограничения на возможности. Что же до высокого уровня, то порой трудоемкость предварительных настройки сводят просто на нет всю простоту его использования. До полной унификации бизнес-документов в различных системах еще очень и очень далеко.

Поэтому, принято решение использовать низкий и средний уровни доступа к данным для инструмента интеграции, принято решение пока не использовать высокий уровень.

 

Теперь рассмотрим некоторые возможности выбранных технологий на примере конкретных систем. Возьмем Аксапту и 1С:Бухгалтерия. Чаще всего Axapta применяется для ведения оперативного учета на предприятии, в то время как 1С - для бухгалтерского и налогового учетов. В оперативной учете, как правило, данных больше, и выгрузка идет из системы с большим количеством данных в систему с меньшим их количеством. Поэтому будем рассматривать пример выгрузки данных из Axapta в 1С:Бухгалтерия.

Определим набор выгружаемых из Axapta данных для отражения товароборота и взаиморасчетов с контрагентами.

Прежде всего, нам необходимы будут справочники, такие как: номенклатура и единицы измерения, контрагенты и их договора и расчетные реквизиты, валюты, склады, подразделения и сотрудники. И возьмем, для начала, пару документов: поступление и реализация товаров.

Как кажется с первого взгляда, прочитать справочник номенклатуры не так уж и сложно. Открываем соответствующую таблицу в базе Axapta, читаем необходимые поля и все. Но! В Axapta, в отличии от 1С, в данной таблице хранятся и товары, и услуги, и готовая продукция, и материалы, и основные средства… Если с номенклатурной группой, материалами и ОС более-менее понятно (есть разделитель по типу, не зависящий от версии и особенностей учета), то с видом номенклатуры могут возникнуть проблемы. Так в одной компании готовая продукция может быть в группе «Продукция», а в другой таких групп будет несколько и все будут называться по разному.

Каков же выход из данной ситуации? А выходов два: либо для каждого случая переноса данных кодировать запросы заново, либо сделать эти самые запросы настраиваемыми через различные макроподстановки его частей.

Таким образом мы пришли к очередному решению, которое должно быть реализовано в интеграторе: легкая настройка заранее подготовленных запросов, параметризация участков кода для доступа к данным, в зависимости от выбранных условий (параметры учета, версия продукта и т.п.)

 

Далее внимательно смотрим на реквизиты справочника номенклатура. Выясняется, что прежде чем его загружать надо либо предварительно загрузить справочник единиц измерения, либо в момент обработки запроса создавать необходимые элементы в указанном справочнике. ADO выполняет создание новых записей в приемнике «целиком» и мы не можем «вклиниться» между отдельными строками записи и совершить еще какое-либо действие. Т.е. правила загрузки должны обрабатываться в определенной последовательности. А вот при использовании OLE/ COM/ DCOM мы можем совершать отдельные операции над каждым объектом или строкой записи, совершать промежуточные действия. Т.е. имея некую ссылку на связанный объект и описание правила его загрузки, мы смело можем его обработать и поместить в основной объект.

Из вышесказанного делаем вывод: в продукте должны быть реализованы как описание последовательностей загрузки, так и, по возможности, загрузка связанных данных по ссылке.

 

С остальными справочниками вроде тоже все понятно. Они будут загружаться аналогично справочнику номенклатуры. Но у нас возникает еще одна задача: запись периодических реквизитов в 1С. При помощи ADO мы можем сделать для каждого периодического реквизита отдельное правило и смело писать в таблицу. Естественно, предварительно загрузив все необходимые объекты и значения реквизитов. Ну а если мы используем OLE или COM/ DCOM, то надо бы предусмотреть в коде записи либо установку периодических на определенную дату, либо иметь возможность выполнить необходимые команды для записи значения на дату из запроса – источника.

Имеем очередную задачу для продукта: реализация возможности работы с периодическими реквизитами.

 

Чуть не забыл! А как же поиск по набору ключевых полей для обновления уже имеющихся записей? Ведь не всегда мы можем четко определить четко ключ записи для объекта по одному полю. Например, для подчиненных справочников это будут владелец и код или наименование элемента, а для документов, имеющих нумерацию в пределах определенного периода – дата и номер документа. Вот и еще одна задача.

Необходимо реализовать возможность поиска объекта по сложному ключу.

 

Теперь рассмотрим загрузку документов. Документ делится на шапку и его табличную часть (части). Поэтому правил загрузки будет 1 + количество табличных частей документа. Естественно для начала мы загрузим шапку, а уж потом будем загружать ТЧ (необходимость последовательностей загрузки мы уже рассмотрели). С заполнением документа тоже не должно возникнуть проблем, т.к. мы уже рассмотрели возможность и предварительной загрузки необходимых объектов, так и загрузки по ссылке. Но документ, по крайней мере, те, что были выбраны нами для примера, не может существовать сам по себе. Он должен совершить некие записи в регистры учета о движениях, должны быть пересчитаны итоги. То есть, говоря языком 1С – документ должен быть проведен. В варианте с использованием ADO трудозатраты на совершение таких записей будут не просто велики, а огромны! При изменении правил проведения каждого из документов, нам необходимо будет полностью переписывать соответствующие скрипты. Поэтому, в данном случае, нам более выгодно использовать возможность вызова внутренних процедур проведения документов. Таким образом мы приходим к выводу:

Даже если запись в приемник производится через ADO, очень даже неплохо иметь возможность выполнения внутренних процедур приемника через выделенные интерфейсы… или…

 

Или делать загрузку непосредственно из 1С!

Получается, что если мы будем производить все действия под управлением 1С, то мы получим огромное преимущество по модификации, поиску, выполнению внутренних процедур 1С напрямую, а не через ее выделенные интерфейсы. И при этом будем иметь возможность использовать ADO для доступа к внешним данным, и для организации поиска по сложному ключу внутри 1С. Правда, это ограничит наш инструмент и привяжет нас к конкретной конфигурации 1С, но мы не будем на этом останавливаться и, в итоге, все же реализуем и работу через OLE/ COM/ DCOM, что позволит сделать наш продукт более универсальным и не зависящим от конкретных реализаций источника и приемника.

И еще одна немаловажная задача:

Есть необходимость обмена самими правилами обмена между различными конфигурациями.

Как один из способов – это описание правил при помощи самого инструмента. Второй, который мне кажется более правильным, встроенная система импорта – экспорта правил между различными конфигурациями.

 

Теперь подведем итог, какие же задачи стоят перед нами для достижения поставленной цели осуществить загрузку данных из Axapta в 1С:

  1. Подготовить общие правила обмена данных
  2. Реализовать параметризацию этих правил в зависимости от выбранных условий (параметры учета, версия продукта и т.п.).
  3. Реализовать описание последовательностей загрузки.
  4. Реализовать загрузку связанных данных по ссылке.
  5. Реализовать работу с периодическими реквизитам.
  6. Реализовать поиск объекта по сложному ключу.
  7. Реализовать возможность выполнения внутренних процедур объекта – приемника.
  8. Реализовать систему импорта – экспорта правил.

Вот мы описали минимально необходимые требования для инструмента, который поможет нам связать Axapta и 1С. Осталось теперь только реализовать сам интегратор и заняться описанием правил для чтения, модификации и записи данных.

Ну а для тех, кто ценит свое время мы представляем демонстрационную версию интегратора, который удовлетворяет всем вышеперечисленным требованиям и, кроме того, уже содержит готовые правила для обмена между стандартной Аксаптой и типовой конфигурацией 1С:Бухгалтерии (Axapta SP4 и 1С:Бухгалтерия 7.70.443).

 

Описание настроенных правил обмена

Ниже приводится краткое описание правил обмена, которые представлены в демонстрационной версии, а также некоторые их возможности:

Примечание: В многоуровневых справочниках группы и элементы можно загружать последовательно, а можно, при использовании метода загрузки по ссылке, и одним правилом. Во втором случае вся структура групп будет создана «автоматически», при правильной настройке источника и приемника.

Примечание: Как и в случае с группами справочников, подчиненные элементы должны загружаться после создания их владельцев, пока не реализована загрузка по ссылке.

 

Каждый документ в 1С v77, как правило, состоит из шапки и табличной части, что и определяет наличие двух правил загрузки для каждого документа. Также предусмотрено проведение документов после загрузки, а для расходных накладных и отмена проведения перед повторной загрузкой. Дело в том, что нашим обработчиком предусмотрено не перегружать документы, которые проведены в 1С. Также все правила загрузки документов формируют записи в файл протокола загрузки с результатами обработки.

Практически все приходы в Axapta совершаются одним видом документов, а в 1С приходится создавать документы поступления для различных видов ценностей. Это производится либо на этапе формирования источника, либо при создании объекта – приемника. Первый способ более предпочтителен, т.к. более быстрый в обработке и более простой в реализации.

 

Как установить интегратор?

Поставка демонстрационной версии продукта состоит из файла конфигурации (LoaderV770001demo.md), файла подключаемого глобального модуля и файла для импорта необходимых справочников.

  1. Объединяем вашу уже установленную конфигурацию 1С:Бухгалтерия с конфигурацией из файла LoaderV770001demo.md:

Меню->Конфигурация->ОбъединениеКонфигураций…

Снимаем все флажки с объектов, кроме тех, что показанны на рисунке:

  1. Копируем в каталог базы данных 1С:Бухгалтерия файл Loader_ГлобальныйМодуль.txt.
  2. Копируем в каталог программных файлов 1С внешнюю библиотеку 1CPP.dll ( http://www.trad.nm.ru/1CPP1817beta1.rar)
  3. Если у вас DBF версия 1С:Бухгалтерии, то вам также необходимо установить «свежий» драйвер доступа к файлам, который можно скачать по адресу http://msdn.microsoft.com/vfoxpro/downloads/updates/odbc/default.aspx
  4. С диска ИТС фирмы 1С запускаем обработку TRANREF.ERT и загружаем данные справочников из файла Loader_Refs.txt.
  5. Сохраняем и запускаем конфигурацию 1С:Бухгалтерия.
  6. Все работы с обменом начинаются только с открытия обработки Loader_ Main!

Меню- >Операции- >Обработка…

  1. Выбрать режим «Базы», проверить и, если нужно, изменить параметры соединения с Microsoft Axapta
  2. Далее в обработке выбрать режим «Загрузка».
  3. В появившемся окне «Обработка правила обмена», в поле «Объект» выбрать сначала Последовательность «Справочники» и нажать кнопку «ОК», далее выбрать Последовательность «Документы» и еще раз нажать кнопку «ОК».

После всех этих действий у вас в общем журнале документов появятся заполненные и проведенные документы поступления и реализации товаров.

 

Как изменить правила обмена

Описание базы данных

Выбор типа базы необходим для работы по COM или OLE интерфейсам, которые отключены в демонстрационной версии.

Провайдер, источник данных, пользователь и пароль имеют смысл только при загрузке не в объекты 1С, а напрямую в таблицы, что также сейчас отключено.

Префикс имеет смысл, когда мы не указываем БД в строке соединения. Используется в запросах через подстановку вместо строки «&Префикс».

Строку соединения можно «собрать» через объект «DataLinks».

 

Описание источников данных

Источник данных это, практически, T-SQL запрос к выбранной базе, данные из которого обработчиком помещаются в таблицу значений для дальнейшей обработки.

Синтаксис данного запроса отличается от стандарта T-SQL следующими особенностями:

Таким образом, достигается возможность быстро перенастроить источник под различные БД, как по составу полей, так и по их значениям.

 

Описание соответствий

Соответствия могут быть следующего типа:

  1. Простое значение: подставляется «Строка-значение»
  2. Значение из источника: подставляется строка типа «select <строка-значение> from ({источник}) s»
  3. Перечисление: подставляется строка типа «case <строка-значение> when <параметр> then <значение> … else '' end»
  4. Перечисление из источника: заполняется аналогично п.3, но с возможностью заполнить параметры из выбранного источника.

 

Правила загрузки объектов и таблиц

Для описания правила, прежде всего, необходимо выбрать объект, куда будем производить загрузку. Таким объектом может являться либо таблица в БД-приемнике (в данной версии отключено), либо справочник или документ.

При выборе объекта, его структура автоматически заполняется в таблицу. В этой таблице мы можем выбрать набор ключевых полей, а также полей, которые будут обновляться при обработке правила.

Справа от таблицы находятся значения, которые отвечают за значения заполнения выбранного поля. Реквизит «Тип» содержит как информативное значение, так и значение для подбора агрегатных значений. Например, для поля «Владелец» справочника Договоры, «Тип» может содержать значение «Справочник.Контрагенты:Код,ВидКонтрагента», что означает поиск в указанном справочнике по полям «Код» и «ВидКонтрагента». В таком случае в Поле «Значение» необходимо указать через запятую имена переменных, в которых будут содержаться соответствующие значения для поиска.

В случае, если поле объекта являются справочником или документом, возможно указание Объекта, Источника и ключевых полей со значениями отбора для так называемой загрузки по ссылке (в данной версии отключено). Эта возможность позволяет не загружать предварительно необходимые справочники и документы, а создавать их «на лету».

Кроме того, для правила можно назначить выполнение функций, которые должны размещаться в глобальном модуле, либо в файле Loader_ГлобальныйМодуль.txt, который подключается в момент обработки правила. Функции имеют следующие типы: "Перед загрузкой", "При создании нового, "При начале изменений", "Перед добавлением строки", "После добавления строки", "Перед записью", "После записи", "После загрузки". При помощи данных функций можно совершать множество действий: пересчитывать данные в загружаемом объекте, изменять их, совершать запись в журнал регистрации, проводить документы и многое другое (ограничивается только вашей фантазией).

 

Последовательности загрузки объектов

Последовательность позволяет упорядочить загрузку объектов. При указании в обработке загрузки последовательности, либо группы последовательностей, объекты и источники выбираются из данного справочника и обрабатываются автоматически.

 

Загрузка объектов

В данной обработке для загрузки необходимо выбрать объект (либо последовательность) и источник (в случае с последовательностью источник не выбирается), а также заполнить таблицу параметров (в данной версии отключено). Для установки периодических реквизитов справочников необходимо указать дату, на которую будут выставляться значения по умолчанию (иначе можно сделать это через функцию правила).

Кроме загрузки в базу, данная обработка может выгрузить таблицу источника в текстовый файл, либо в файл формата XML (в данной версии отключено). В случае выгрузки в XML все данные «по ссылке» из объектов также выгружаются.

 

Заключение

Интегратор позволяет передать данные из Microsoft Axapta в 1С. Вы можете загрузить демонстрационную версию интегратора с уже подготовленными правилами для передачи данных из Microsoft Axapta в 1С.

Чтобы приобрести полнофункциональную версию интегратора обращайтесь в компанию Работа на результат!

Дополнительную информацию о полнофункциональной версии можно получить у Андрея Вахрина.


Андрей Вахрин (Dolter), dolter@rabota-na-rezultat.ru