Имя: Пароль:
1C
 
Есть ли возможность заставить работать 1C с приложениями на Java?
0 Arta
 
23.02.06
21:34
Иными словами хотелось бы получить некие данные от Java приложения.
Или CreateObject(Java.траляля) тут никак не помогут?... :)

Суть в следующем. Есть терминал-сервер, есть тонкие клиенты на базе линуха (проект thinstation). Тонкие клиенты разбросаны по зданию, и рядом нет виндовых машин.
Есть острая необходимость постоянно, средставми 1С сканировать изображения. На данном этапе это уже реализовано, клиенты скомпилированы с поддержкой Sane, взята ВК sp.dll, для работы со сканерами (не знаю кто автор, но очень признателен ему), а также взят бридж SaneToTwain, небольшая софтинка, являющаяся мостом между линухом и виндами.
Изза нагромождения компонент изредка бывают глюки, которые решить может только админ, чего собственно и хочется избежать...

Сегодня нашел джава прилогу http://asprise.com/product/jsane/download.php, которая делает тоже самое, осталось достучаться до нее из 1с.

Кто что может сказать?

ЗЫ. Во избежания последующих вопросов :) Сканировать надо именно из 1с, сессии у лиентов в режиме опубликованных приложений, девайс скан-сервер стоит диких денег, а это реализовано на дешевых сканерах.
1 ШтушаКутуша
 
23.02.06
21:46
трудновасто...попробуй у Калверта (это автор книг по Delphi) насколько я помню у него поднималась такая проблема,если найдешь-хорошо,а если нет то сиукнись ко мне в асю,но предупреждаю это будет весьма не бесплатно.
2 Arta
 
23.02.06
21:49
Всегда хочется халявы :)


Хотя можно попробовать декомпайл - правка сорсов чтобы в файл валила - и опять компайл...
Такое уже делал, но не шибко серьезных приложений...
3 ШтушаКутуша
 
23.02.06
21:53
я ради прикола работал из под Дельфей с Java,но это было года 3-4 тому назад
4 ШтушаКутуша
 
23.02.06
21:55
+3 то есть такая возможнось есть,но если работать из под 1С,то наверняка придеца писать ВК
5 romix
 
модератор
23.02.06
22:21
Может в 1С нужны уже отсканированные файлы, которые можно получать, например, через ОбработкаОжидания(), опрашивая папку с файлами?
6 Arta
 
23.02.06
22:25
(5) На крайний случай так и планировал придется сделать. Но хотелось то по правдашному, по взрослому... :)

(4) От дополнительных ВК и хотелось уйти... Если бы яву можно было бы юзать как ком объект, то проблем было бы меньше :(
7 ШтушаКутуша
 
23.02.06
22:44
(6) для того штоб юзать ее как COM,а точнее как OLE (ибо 1С работает только с OLE объектами) необходимо преобразовать ээээ java-объект в COM,такая утилита поставляется в составе jsdk
8 ШтушаКутуша
 
23.02.06
22:59
или вот JavaSoft разработала (года как уж 3-4 тому назад) соедства для работы с java из под VB,а VB поддерживает только OLE,как и 1С
9 romix
 
модератор
23.02.06
23:12
Опрашивать наличие файла в папке можно кстати через ВК, а не обработкой ожидания.
10 Arta
 
23.02.06
23:39
(8) О! Это уже кое что! Спасибо, полез в дебри!
11 ШтушаКутуша
 
23.02.06
23:40
12 ШтушаКутуша
 
23.02.06
23:46
Пардон,я ошибся! коннект не с java standart edition,а с j2ee (enterprise edition!)
13 ШтушаКутуша
 
23.02.06
23:57
если интересно,то могу выслать: "j2eecas-1_0-ea4-win-combridge.exe "
14 syktyk
 
24.02.06
00:06
Там только внешняя компонента маленькая нужна для вызова Java
15 syktyk
 
24.02.06
00:07
Это шаблон:

/*
* This is a C program that calls Java code.
* This could be used as a model for building Java into an
* existing application as an extention language, for example.
*/

#include <stdio.h>
#include <jni.h>

#ident    "$Id: javafromc.c,v 1.7 2000/07/03 23:15:50 ian Exp $"
   
int
main(int argc, char *argv[])
{
   int i;
   JavaVM *jvm;        /* The Java VM we will use */
   JNIEnv *myEnv;        /* pointer to native environment */
   JDK1_1InitArgs jvmArgs; /* JNI initialization arguments */
   jclass myClass, stringClass;    /* pointer to the class type */
   jmethodID myMethod;    /* pointer to the main() method */
   jarray args;        /* becomes an array of Strings */
   jthrowable tossed;    /* Exception object, if we get one. */
   
   JNI_GetDefaultJavaVMInitArgs(&jvmArgs);    /* set up the argument pointer */
   /* Could change values now, like: jvmArgs.classpath = ...; */
   
   /* initialize the JVM! */
   if (JNI_CreateJavaVM(&jvm, &myEnv, &jvmArgs) < 0) {
       fprintf(stderr, "CreateJVM failed\n");
       exit(1);
   }
   
   /* find the class named in argv[1] */
   if ((myClass = (*myEnv)->FindClass(myEnv, argv[1])) == NULL) {
       fprintf(stderr, "FindClass %s failed\n", argv[1]);
       exit(1);
   }

   /* find the static void main(String[]) method of that class */
   myMethod = (*myEnv)->GetStaticMethodID(myEnv, myClass, "main", "([Ljava/lang/String;)V");
   /* MyMethod = (*myEnv)->GetMethodID(myEnv, myClass, "test", "(I)I"); */
   if (myMethod == NULL) {
       fprintf(stderr, "GetStaticMethodID failed\n");
       exit(1);
   }

   /* Since we're calling main, must pass along the command line arguments,
    * in the form of Java String array?
    */
   if ((stringClass = (*myEnv)->FindClass(myEnv, "java/lang/String")) == NULL){
       fprintf(stderr, "get of String class failed!!\n");
       exit(1);
   }
   /* make an array of Strings, subtracting 1 for progname & 1 for the
    * java class name */
   if ((args = (*myEnv)->NewObjectArray(myEnv, argc-2, stringClass, NULL))==NULL) {
       fprintf(stderr, "Create array failed!\n");
       exit(1);
   }
   /* fill the array */
   for (i=2; i<argc; i++)
       (*myEnv)->SetObjectArrayElement(myEnv,
           args, i-2, (*myEnv)->NewStringUTF(myEnv, argv[i]));

   /* finally, call the method. */
   (*myEnv)->CallStaticVoidMethodA(myEnv, myClass, myMethod, &args);

   /* And check for exceptions */
   if ((tossed = (*myEnv)->ExceptionOccurred(myEnv)) != NULL) {
       fprintf(stderr, "%s: Exception detected:\n", argv[0]);
       (*myEnv)->ExceptionDescribe(myEnv);    /* writes on stderr */
       (*myEnv)->ExceptionClear(myEnv);    /* OK, we're done with it. */
   }
   
   (*jvm)->DestroyJavaVM(jvm);    /* no error checking as we're done anyhow */
   return 0;
}
16 Arta
 
24.02.06
00:08
Давай, мыло в подмыльнике!
17 Arta
 
24.02.06
00:52
(13),(15) Спасибо, буду разбираться.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой