MyFaces Weblog

Февраль 17, 2009

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

Рубрика: 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/)

Блог на WordPress.com.