Форум программистов, компьютерный форум, киберфорум
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
6 / 5 / 0
Регистрация: 10.08.2010
Сообщений: 47
1
1C 8.x

TWAIN_Acquire в 1С

30.11.2011, 21:38. Показов 5477. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброго времени суток! Получил задачу создать обработку, позволяющую сканировать документы из 1С. В Интернете наткнулся на интересную функцию TWAIN_Acquire. Вот как ее использование выглядит в Delphi:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 procedure TForm1.Accquire1Click(Sender: TObject);
var
 dat: hBitMap;
 PInfo: PBitMapInfoHeader;
 Height,Width:integer;
{Функция возведения 2 в степень}
function stp2(s:byte):longint;
 var
  m: longint;
  i: byte;
 begin
  m:=2;
  for i:=2 to s do m:=m*2;
  stp2:=m;
 end;
 
begin
 {Получаем указатель на графические данные}
 dat:=TWAIN_AcquireNative(Handle,0);
 if dat <> 0 then begin
  {Получаем указатель на область памяти содержащей DIB
   данные и блокируем область памяти}
  PInfo:=GlobalLock(dat);
  {Анализируем полученные данные}
  Height:=PInfo.biHeight ;
  Width:=PInfo.biWidth ;
  Wcm.Caption :=floatToStrF(100/PInfo.biXPelsPerMeter*Width,ffNumber,8,3)+' cm';
  Hcm.Caption :=floatToStrF(100/PInfo.biYPelsPerMeter*Height,ffNumber,8,3)+' cm';
  Colors.Caption := floatToStrF(stp2(PInfo.biBitCount),ffNumber,8,0)+ ' цветов';
  {Разблокируем память}
  GlobalUnlock(dat);
  {Передаем в битовую матрицу графические данные}
  {И устанавливаем перехват ошибок}
  try
   MyBitMap.Palette :=TWAIN_CreateDibPalette(dat);
   MyBitMap.Width := Width;
   MyBitMap.Height := Height;
   TWAIN_DrawDibToDC(MyBitMap.Canvas.Handle,0,0,Width,Height,dat,0,0);
  except
   {Обрабатываем наиболее вероятную ошибку связанную с не хваткой ресурсов
    для загрузки изображения}
   on EOutOFResources do
      MessageDlg('TBitMap: Нет ресурсов для загрузки изображения!',
                 mtError,[mbOk],0);
  end;
   {Отображаем графические данные}
   //Canvas.Draw(10,10,MyBitMap);
   Image1.Picture.Graphic:=MyBitMap;
   {Освобождаем память занятую графическими данными}
   TWAIN_FreeNative(dat);
 end;
 
end;

Кто-нибудь пытался использовать ее в 1с? Как это правильно сделать. Понимаю, что вопрос ламерский, но все же...
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
01.12.2011, 01:43 2
Н-да. Тут надо управляемые через ОЛЕ дрова. надо у 1с-ников спрошать. Если коробка покупалась, лучше обратиться в службу поддержки. А я вот к стыду первый раз столкнулся с задачей сканирования из 1с.
на самом деле запустить из 1с сканерщик какой-нибудь, VueScan, тот же твейн, а джпег всосать в 1с. Либо доку искать по дровам сканера, в которых оле-сервер реализован.
Попробуй скачать
http://www.dll.ru/dll/23500.html
в ней разберёшься, зарегишь, тогда, возможно, в 1сине попользуешься
0
6 / 5 / 0
Регистрация: 10.08.2010
Сообщений: 47
01.12.2011, 09:37  [ТС] 3
VueScan не хляет – он платный! Необходим доступ именно к этой функции. Как узнать, в каком приложении она зарегистрирована?
0
309 / 309 / 1
Регистрация: 16.01.2011
Сообщений: 1,073
01.12.2011, 10:21 4
Это?
0
6 / 5 / 0
Регистрация: 10.08.2010
Сообщений: 47
01.12.2011, 10:26  [ТС] 5
Надо разбираться...
0
309 / 309 / 1
Регистрация: 16.01.2011
Сообщений: 1,073
01.12.2011, 10:29 6
вот на это еще взгляни
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
01.12.2011, 11:13 7
А ты дээлельку-то скачал? Эти функции д.б. в ней. Уж извини, я сам качать не стал.
О! fimbulwinter, спасибо. Это явно 1сная заточка.
0
6 / 5 / 0
Регистрация: 10.08.2010
Сообщений: 47
09.12.2011, 21:30  [ТС] 8
Цитата Сообщение от duk337 Посмотреть сообщение
А ты дээлельку-то скачал? Эти функции д.б. в ней. Уж извини, я сам качать не стал.
О! fimbulwinter, спасибо. Это явно 1сная заточка.
Спасибо, я пошел другим путем. В WINDOWS для работы со сканерами есть свой API, отличный от Twain – WIA. А по нему есть справка на MSDN.
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
&НаКлиенте
Процедура Сканировать(Команда)
    
    ИмяФайла = "C:\Doc.png";
    ОтсканироватьИОтобразить(ИмяФайла, АдресКартинки);
    
КонецПроцедуры
 
// Процедура сканирует изображение используя установленный в системе сканер по умолчанию
// на выходе файл сохраняется на жестком диске
//
// Параметры
//  ИмяФайла - Строка - Путь до файла изображения в формате PNG
//  Реквизит - Строка - Поле картинки на форме
// 
// Пример
//  ОтсканироватьИСохранить("C:\image.png");
&НаКлиенте
Процедура ОтсканироватьИОтобразить(ИмяФайла, Реквизит)
    
    Перем АдресВременногоХранилища;
    
    //http://msdn.microsoft.com/en-us/library/ms630491(v=VS.85).aspx
    //http://www.****************/topic.php?id=232458
    Изобр = Новый COMОбъект("WIA.ImageFile");
    СканДиалог = Новый COMОбъект("WIA.CommonDialog");
    Изобр = СканДиалог.ShowAcquireImage();
    
    Фильтр = Новый COMОбъект("WIA.ImageProcess");
    Фильтр.Filters.Add(Фильтр.FilterInfos("Convert").FilterID);
    ФильтрПНГ = Фильтр.Filters(1);
    Для Инд = 1 По ФильтрПНГ.Properties.Count Цикл
        Если ФильтрПНГ.Properties(Инд).Name = "FormatID" Тогда
            ФильтрПНГ.Properties(Инд).Value = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}";
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    Изобр = Фильтр.Apply(Изобр);
    
    УдалитьФайлы(ИмяФайла);
    Изобр.SaveFile(ИмяФайла);
    
    ПоместитьФайл(АдресВременногоХранилища, ИмяФайла, "", Ложь);
    ПоместитьФайлОбъекта(АдресВременногоХранилища);
    АдресКартинки = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "ДанныеДокумента");
    
КонецПроцедуры
 
&НаСервере
Процедура ПоместитьФайлОбъекта(АдресВременногоХранилища)
    
    ЭлементСправочника = РеквизитФормыВЗначение("Объект");
    ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
    ЭлементСправочника.ДанныеДокумента = Новый ХранилищеЗначения(ДвоичныеДанные, Новый СжатиеДанных(9));
    ЭлементСправочника.Записать();
    Модифицированность = Ложь;
    УдалитьИзВременногоХранилища(АдресВременногоХранилища);
    ЗначениеВРеквизитФормы(ЭлементСправочника, "Объект");
 
КонецПроцедуры
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
09.12.2011, 21:54 9
Спасибо.
ФильтрПНГ.Properties(Инд).Value = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}";
Это что, кряк такой? Или он этот ID как маску/шаблон использует?
0
309 / 309 / 1
Регистрация: 16.01.2011
Сообщений: 1,073
10.12.2011, 00:14 10
Цитата Сообщение от duk337 Посмотреть сообщение
Спасибо.
ФильтрПНГ.Properties(Инд).Value = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}";
Это что, кряк такой? Или он этот ID как маску/шаблон использует?
Битхак на 1с))
0
6 / 5 / 0
Регистрация: 10.08.2010
Сообщений: 47
10.12.2011, 09:03  [ТС] 11
Цитата Сообщение от duk337 Посмотреть сообщение
Спасибо.
ФильтрПНГ.Properties(Инд).Value = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}";
Это что, кряк такой? Или он этот ID как маску/шаблон использует?
Это так кодируется формат файла:
wiaFormatBMP = "{B96B3CAB-0728-11D3-9D7B-0000F81EF32E}";
wiaFormatPNG = "{B96B3CAF-0728-11D3-9D7B-0000F81EF32E}";
wiaFormatGIF = "{B96B3CB0-0728-11D3-9D7B-0000F81EF32E}";
wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}";
wiaFormatTIFF = "{B96B3CB1-0728-11D3-9D7B-0000F81EF32E}";
0
2955 / 1767 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
10.12.2011, 19:25 12
Спасибо.
0
10.12.2011, 19:25
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru