Имя: Пароль:
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 все отлично отрабатывает. Тема закрыта.
AdBlock убивает бесплатный контент. 1Сергей