Имя: Пароль:
1C
1С v8
Ошибка при работе с типами COMОбъекта
0 Crashxxx
 
11.12.14
16:42
Всем привет. Платформа 8.3.5.1119, при работе с ABBYY FlexiCaptureEngine через COMОбъект возникает ошибка "Типы не совпадают (0)".
API FlexiCaptureEngine предоставляет интерфейс для распознавания текста изображений и экспорта этих данных в нужном формате.

engineLoader  = Новый COMОбъект("FCEngine.InprocLoader");
    Engine = engineLoader.Load(СерийныйНомер, );
    processor = Engine.CreateFlexiCaptureProcessor();
    processor.AddDocumentDefinitionFile("C:\ТоварнаяНакладная.fcdot");
    processor.AddImageFile("C:\накладная 1.pdf");
    document = processor.RecognizeNextDocument();
    processor.ExportDocumentEx(document, "C:\ТовНаклПроектФлКапч", "exportFileName", 0);

В строке document = processor.RecognizeNextDocument(); получаем объект типа Document (объект со свойствами и методами распознанного документа). В 1С он преобразуется в COMОбъект, далее этот документ необходимо передать в метод ExportDocumentEx для экспорта. Первый параметр этого метода так же ожидает объект типа Document. Но при вызове метода как указано в примере выше возникает ошибка "Типы не совпадают (0)". Какие могут быть варианты решения?
1 Господин ПЖ
 
11.12.14
16:44
processor.ExportDocumentEx(processor.RecognizeNextDocument(), "C:\ТовНаклПроектФлКапч", "exportFileName", 0);

?
2 Garykom
 
гуру
11.12.14
16:45
(0) мдааа слов нету

прям из анегдота когда один программер печатает 2 камаза бумаги, а другой их распознает
3 Garykom
 
гуру
11.12.14
16:46
(0) Нельзя позвонить поставщику и попросить прислать тоже самое но в Excel? Ну или в PDF но которая из текста а не картинкой?
4 Serginio1
 
11.12.14
16:47
Может
processor.ExportDocumentEx(document, "C:\ТовНаклПроектФлКапч", "exportFileName", неопределено);
5 Smallrat
 
11.12.14
16:55
(3) мы как-то попросили, нам отказали. один фиг в pdf таблицы нарисованы поверх текста.
6 Smallrat
 
11.12.14
16:55
пришлось мутить конвертацию pdf
7 Лефмихалыч
 
11.12.14
16:58
(3) позвонить и попросить можно, чо ж нельзя-то?.. Правда получить положительный ответ на просьбу вряд ли получится. Такова вот селяви
8 Garykom
 
гуру
11.12.14
17:03
а может тогда поискать http://forum.ocrsdk.com/questions/1016/how-to-match-diferent-images-to-different-templates

типа забыли // load all to memory
processor.PrepareProcessing();

после выбора образа и перед распознанием?
9 Garykom
 
гуру
11.12.14
17:05
(8) или вообще лучше через создание пакета(batch) пойти http://club.directum.ru/post/Abbyy-FlexiCapture-Engine--IS-Builder--Avtomatizacija-vvoda-i-obrabotki-dokumentov.aspx
10 Serginio1
 
11.12.14
18:24
11 Garykom
 
гуру
11.12.14
18:38
(10) 2012 год, какая там версия?
12 Serginio1
 
11.12.14
18:55
13 Garykom
 
гуру
11.12.14
18:57
(12) это к чему?
14 Serginio1
 
11.12.14
19:10
(13) в 11 просто примеры. там в 4 параметре стоит неопределено (null)

Скачивай последний SDK который будет поддерживать последние версии
15 Crashxxx
 
12.12.14
10:34
(1) Пробовал, не помогло, еще пробовал создавать пустой документ
processor.ExportDocumentEx(processor.CreateDocument(), "C:\ТовНаклПроектФлКапч", "exportFileName", 0);

Тоже не помогло

(4)Пробовал Непределно, 0, пустые строки, нули, просто ничего не передавал processor.ExportDocumentEx(document, "C:\ТовНаклПроектФлКапч", "exportFileName", );
все глухо, ну и судя по всему ошибка в первом параметре

(8)Не то, этот метод загружает определения документа в память и делает настройки конфигурации, для серверных решений.

(9)Пробовал, есть разница между работой через батчи и с использованием процессора. Везде свои "+" и "-", мне нужен именно вариант процессора. Батч тоже пробовал, там возникает ошибка при заполнении экспортных параметров в файл, могу описать её, но это трата времени. И вообще во многих местах, где необходимо передать параметры (в методы ком объекта) и, судя по документации, можно передать значение "0" для использования параметров по умолчанию, возникают ошибки и приходится создавать пустые объекты, и их передавать в виде параметров.

(10)Именно это я и хочу реализовать. В примере кода инициализация engine  на с++ происходит вызовом InitializeEngine, этот как я понимаю процедура из предварительно загруженной FCEngine.dll (могу ошибаться.)
Вообще вот этот кусок мне на 100% не ясен

[DllImport("FCEngine.dll", CharSet = CharSet.Unicode), PreserveSig]

private static extern int InitializeEngine(string devSN, string reserved1, string reserved2, out IEngine engine);
[DllImport("FCEngine.dll", CharSet = CharSet.Unicode), PreserveSig]

но в 1с я все равно могу только реализовать все это через COMОбъект, как указано в (0).

(11), (14)Версия 10. SDK последняя. Неопределено пробовал, и много чего еще, как и писал выше.
16 Crashxxx
 
12.12.14
10:42
Мой вариант такой что 1С конвертирует тип значения document  при его получении document = processor.RecognizeNextDocument(); в COMОбъект, а далее при передаче в processor.ExportDocumentEx(document, "C:\ТовНаклПроектФлКапч", "exportFileName", 0); переменная document не конвертируется в ожидаемый методом тип FCEngine.IDocument.
вот пример из VB
Public Engine As FCEngine.IEngine
Dim processor As FCEngine.IFlexiCaptureProcessor
Dim document As FCEngine.IDocument
...
' Export results
processor.ExportDocument document, "D:\ExportResults"

По хорошему 1С здесь надо бы уметь сделать что-то типа
document = Новый FCEngine.IDocument;

Поэтому мой вариант это писать внешнюю комноненту на том же c++, VB, Delphi... на всем что нормально отработает вызовы методов и передачу параметров. А дальше уже используя ВК делать то что необходимо. Но писать эту ВК не хочется. Может есть какой вариант заставить все это цивилизованно работать и без ВК.
17 Serginio1
 
12.12.14
14:33
(16) Можешь использовать сборки Net v8: v8: Использование сборок .NET в 1С 7.x и 8.x
18 Garykom
 
гуру
12.12.14
22:59
(16) зачем писать ВК когда можно быстро использовать vbs?
19 Crashxxx
 
15.12.14
09:10
(18)Да, тоже этот вариант решил сначала проверить и выяснилось в итоге что проблема была в некорректно написанном определении документа "C:\ТоварнаяНакладная.fcdot". Хотя оно отлично отрабатывало в FlexiCapture 10, при использовании в коде тоже не выдавало явных ошибок, указывающих на его проблемы. Но при тестировании данного кода на тестовых данных из поставки sdk все отлично отрабатывает. Тема закрыта.