Sidslog

Февраль 17, 2009

Работа с 1С с помощью jacob

Filed under: Uncategorized — Метки: , , — sidslog @ 11:44 пп

Основная задача состояла в синхронизации нашего сервиса с 1С(списком контрагентов, номенклатуры и т.д.)
При этом 1С могла быть как на dbf-файлах, так и на MSSQL, поэтому было решено испольнозовать COM для связи сервиса с 1С. Конечно, если бы 1С работала на SQL, гораздо проще было бы общаться с ней с помощью jdbc драйвера, но так как варианты конфигурации могли быть самые разные, использование сom решало все проблемы.
JACOB идеально подошел нашим требованиям. Дальше задача выглядела тривиально: переписать код 1С через com.

Инициализация и авторизация в 1С:

try {
    sC = new ActiveXComponent(_1CUtils.V7_APPLICATION);
    sControl = (Dispatch)sC.getObject();
} catch (Exception e) {
    e.printStackTrace();
    throw new _1CException(_1CException._1C_NOT_AVAILABLE) ;
}
int rmTradeId ;
try {
    rmTradeId = Dispatch.getIDOfName(sC, _1CUtils.V7_RM_TRADE) ;
} catch (Exception e) {
    e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    throw new _1CException(_1CException.RM_TRADE_NOT_AVAILABLE);
}
Variant rmTradeVar = Dispatch.invoke(sControl, rmTradeId, Dispatch.Get, new Object[]{}, new     int[]{rmTradeId}) ;
int id = Dispatch.getIDOfName(sControl, _1CUtils.V7_INITIALIZE) ;

Object[] args = new Object[3] ;
args[0] = rmTradeVar.getInt() ;
args[1] = "/D" + ResourceUtils.getResource("path") + " /N" + ResourceUtils.getResource("user") + " /P" +   ResourceUtils.getResource("password")  ;
args[2] = new Variant("NO_SPLASH_SHOW").getString() ;
Variant result = Dispatch.invoke(sControl, _1CUtils.V7_INITIALIZE, Dispatch.Get, args, new int[]{id}) ;
if (!result.getBoolean())  {
    throw new _1CException(_1CException.NOT_AUTHORISED);
}

В переменных _1CUtils.V7_APPLICATION, _1CUtils.V7_RM_TRADE, _1CUtils.V7_INITIALIZE хранятся соответсвующие значения:

  • V77.Application
  • RMTrade
  • Initialize

Для авторизации используется второй параметр функции Initialize – “/DПуть /NПользователь /PПароль”.

Далее, используя стандартные функции 1С, мы можем получить доступ ко всем данным.

  • Для чтения свойства справочника воспользоваться функцией GetAttrib, для записи – SetAttrib.
  • Для создания объекта – CreateObject
  • Для поиска – FindByCode, FindByDescr
  • Для выбора из перечисления функциями – ValueByIdentifier
  • Для создания нового объекта – New
  • Для получения текщуго значения – CurrentItem, выбора значений -SelecвtItems, выбора текущего значения – GetItem
  • Для записи – Write
  • и т.д.

Прекрасный справочник по работе с функциями 1С можно скачать здесь

Весь функционал работы с 1С был вынесен на отдельный сервер под Windows)), общение с которым осуществлялось псредством веб-сервисов(использовалась связка tomcat+metro).

Не забудьте положить jacob.dll в classpath(или Windows/system32/)

Theme: Silver is the New Black. Блог на WordPress.com.

Follow

Get every new post delivered to your Inbox.