Сканирование документов в 1С — паспорта РФ, заграничные паспорта и водительские удостоверения

Коротенькая статья о том, как использовать ABBY Passport Reader SDK в 1С.

Эта полезная утилита позволяет например сканировать паспорт гражданина РФ и выделять из него такие поля как Серия, Номер, Дата выдачи, Дата рождения, Ф.И.О., кем и когда выдан, фотографию и скан самого паспорта.

В SDK есть COM-объект, который после установки этой SDK регистрируется в Windows.

Как правильно обращаться к COM-объекту и имя класса в мануале не было написано. Пришлось ковырять системный реестр, чтобы узнать имя COM-объекта ABBYY.PassportReaderSdk.RecognitionEngine

Есть платные сырцы на инфостарте и есть конфигурации, которые используют эту утилиту. Денег на сырцы руководство пожалело, по-этому пришлось разбираться самому. А о покупке конфигурации ради пару строчек кода и речи не было 🙂

Да простят меня те жлобы, которые на простых кусочках кода делают деньги.

Приведу сразу листинг с примером сканирования только лишь Паспорта РФ:

Вот и все. В результате у нас получится структура Рез с необходимыми полями. Остальное — дело техники. Если соберусь силами, расскажу подробно.

COM-Объект для работы с Web-камерой в 1С

В этой статье я расскажу как можно сделать свой собственный COM-объект на примере работы с веб-камерой, который можно будет использовать в 1С.

Почему именно для вебки? Такова была моя реальная задача на работе. И я хочу поделиться опытом, как это можно реализовать.

Собственно задача, а точнее подсистема, которую мне нужно было реализовать: фотографировать сотрудников и посетителей и сохранять фото в 1С и во внешней среде СКУД Gate-IP. Т.к. оболчка этой СКУД очень «СКУДна», а точнее не «юзабельна» для сотрудников службы безопасности, да и просто для рядового пользователя, то руководством было принято решение сделать некую оболочку в среде 1С на «Тонких» формах 🙂

Перекопал весь интернет в поисках какой-нибудь внешней компоненты для работы с веб-камерой. К сожалению, не нашел ничего полезного или работающего на Windows 10 и Windows 7.

Нет. Конечно кое-что нашел и рабочее, но реализованное в виде компоненты ActiveX, которую сложно прикрутить к управляемым формам.

Один хороший человек под ником Душелов (светлая память ему!!! говорят, что был отличным программистом 1С и не только 1С. Он погиб в автокатастрофе 🙁 🙁 🙁 ) опубликовал статью http://infostart.ru/public/16446/ в которой собственно и выложил свою компоненту ActiveX, написанную цать лет назад для 7.7. К сожалению, исходников его компоненты я не нашел. Прикрутить её получилось на Обычных формах. Трансляция в форму 1С работает. Но не сохраняет картинку. Понять причину не удалось, но возможно всё дело в винде 10ке 🙁 Пробовал прикрутить её в Управляемые формы, используя как COM-объект. Опять же — запускается, но не фоткает. Этот способ Душелова собственно и вдохновил меня на написание собственного COM-объекта.

Когда искал — всюду натыкался на некую библиотеку AviCap (сокр. от AVI Capture). Эта библиотека, а точнее форма (диалоговое окно) Windows для работы с веб-камерой, которое запечатано в avicap32.dll и лежит в папочке Windows\System32. Библиотека должна быть даже в древних XPюшках и возможно 98х.

Удобная штука, т.к. не нужно ставить никаких драйверов и стороних софтин для веб-камеры. Просто «ваткнул» и поехал.

Используя эту библиотеку, можно вызвать окно вебки скрытым или видимым и посылать этому окну такие команды, как:

  • подключиться к вебке
  • сделать стоп-кадр (сфотографировать)
  • сохранить этот стоп-кадр в буфер обмена или в файл
  • отключиться от вебки
  • и многое другое полезное.

Пробовал напрямую дергать методы этой dll’ки из 1С, но увы — бесполезно. Может мой level в 1С не достаточно высок 🙂

Покурил в интернетах о том, как же написать свою внешнюю компоненту для 1С и наткнулся на статью всё там же на Инфостарте http://infostart.ru/public/151246/. Имея опыт кодера на C и небольшой опыт на C# — решить эту проблему было не сложно.

И так….

Запускаем среду Visual Studio (у меня 2015 «лицензионная») .Безымянный

Создаем новый проект Visual C# -> Библиотека классов.

Как и в статье, удаляем нафиг весь код.

И пишем (кому лень, сырцы выложу в конце статьи):

Далее ищем guidgen.exe там, где установлена Visual Stuido. (З.ы. Можно искать прямо из корня диска C:) Запускаем. И ставим пункт 5 (на Инфостарте пример на старой среде Visual Studio, но не важно).

Безымянный1

Жмем Создать GUID до тех пор, пока нам не понравится GUID. Шутка 🙂

Жмем Копировать. И вставляем в код, чтобы модуль выглядел примерно следующим образом.

Далее буду копировать текст с Инфостарта со своим кодом.

Определим интерфейс для COM-событий(новый GUID получаем с помощью утилиты guidgen.exe)

Описываем класс реализующий интерфейсы(новый GUID получаем с помощью утилиты guidgen.exe)

Вот так мы описали пространство имен и класс нашего будущего COM-объекта. Чего-то в нем не хватает. Ах да. Методов (процедур, функций, которые мы будем дергать, например из 1С). Устал? Нет? Тогда let’s go.

В своем примере я описал такие методы:

  • функция OpenWindow(Caption, x, y, w, h) (открывает (создает) окошко с видеопотоком вебки).
    Возвращает Handle окна. Что это? Расскажу своими словами как я это понимаю. Каждое открытое окно, каждый элемент управления на открытой форме в среде Windows имеет свой Handle — числовой код, номер. Что-то вроде Ссылки в 1С. Идентифицирует открытые окна на твоем экране. По этому Хэндлу ты можешь обратиться к этому окну (или элементу управления) с помощью функций WinApi и например, жмакнуть программно кнопку, или получить текст из поля ввода, или закрыть окно. Даже можно нарисовать свой собственный элемент управления в чужой форме. Круто? Да. Но моя статья не об этом.
    Параметры функции думаю понятны. Caption — заголовок окна (строка), x, y, w, h — координаты окна на экране и размеры (числа).
  • Функция SavePic(int _hWndC, string filepath). Сохраняет изображение (стоп-кадр) в файл filepath. Первым параметром передаем тот же Handle окна, который мы получили с помощью функции OpenWindow (для чего? расскажу далее).
  • Процедура HideWindow(int _hWndC). Прячет окно вебки (не закрывает его!!!). Параметром передаем Handle окна.
  • Процедура ShowWindow(int _hWndC). Показывает окно вебки, которое мы спрятали с помощью функции HideWindow.  Параметром передаем Handle окна.
  • Процедура CloseWindow(int _hWndC). Закрывает наше окошко вебки («убивает» его).

Для чего я сделал так много методов ? Да потому использую этот COM-объект в 1С на Управляемых формах на клиенте. Не нашел способа в 1С передавать созданный COM-объект между клиентскими процедурами и событиями 1С. По-этому решил хранить в 1С в реквизите формы не COM-объект, а Handle окна, которое мы создаем с помощью функции OpenWindow.

А для чего нужно было делать HideWindow и ShowWindow? Можно и без них. Первоначально получился COM-объект, который создает окно вебки, но не показывает его. По кнопке в 1С сохраняет картинку и показывает на форме 1С. Оказалось не удобно, т.к. получается в слепую нужно прицелиться вебкой на фэйс физлица и нажимать кнопку «Сфотографировать» до тех пор, пока не получится удачный кадр. По-этому и созрела мысль сделать некий прицел — открывается форма вебки, в которой мы видим видеопоток (изображение с веб-камеры) и жмем кнопку «Сфотографировать». По нажатию этой кнопки прячется форма вебки (HideWindow). В случае, если решили перефоткать опять нажимаем эту кнопку и отображается форма вебки (ShowWindow). Фуууух. Надеюсь понятно объяснил, т.к. сам в шоке от того что пишу 🙂

В полном листинге присутствуют описания функций CreateWindowEx и DrawFrameControl. Я их закомментировал. Этими функциями я хотел нарисовать собственную кнопку в чужом окне (окно веб-камеры, не является родным окном 1С). Роль этой кнопки — фотографирование и оповещение 1Ске откуда забрать файл с кадром. Но увы — не взлетело 🙁 Развивать не стал. Может у тебя получится 😉 З.ы. если получится, буду признателен за сырцы, которые ты мне вышлешь на birgom собака birgom точка ru.

Продолжим….

Опишем в нашем классе процедуры и функции из внешних библиотек.

Этот код должен быть между скобочками {} в public classe MyClass:IMyClass

Первая функция capCreateCaptureWindowA из библиотеки avicap32.dll собственно и создает окошко вебки (окно видеозахвата).

SendMessage из user32 — универсальная функция WinApi, которая посылает сообщение с номером Msg окну с хэндлом hWnd и два произвольных параметра wParam и lParam (приведенных к числам. Например адрес памяти, где лежит массив или структура). Если в кратце, то у любого окна (или элемента формы) есть стандартные и определенные пользователем события на определенные сообщения Msg. В качестве параметров в эти события передаются wParam и lParam. Посылая сообщения определенному окну (элементу) мы как бы говорим — обработай команду Msg и вот тебе два параметра wParam и lParam (в них может передаваться что угодно). Понятно? Нет? — Кури WinApi. Функция может возвращать что угодно, например булево Истина — 1, Ложь — 0.

SetWindowPos из user32 — задает положение окна. Параметры должны быть понятны, кроме wFlags. ХЗ что это за параметр (какие-то флаги). Особо не вникал. См. WinApi

ShowWindowAsync из user32 — показывает или прячет окно. А точнее управляет видимостью окна.
Далее привожу полный листинг:

Все. С кодом справились. Осталось настроить проект.

На вкладке Сборка ставим галочку «Регистрация для COM-взаимодействия». Кстати, после окончательной сборки она снимается автоматически. Так и должно быть. Ставить её повторно не нужно!

Переходим на вкладку Подписывание.

Выбираем Создать, там где написано Выберите файл ключа строгого имени. Пароль на файл задавать не обязательно. В итоге должно получиться в этом поле SoyuzWebCam.snk.

Чуть не забыл. Переходим на вкладку Приложение и меняем версию .NET Framework на 2.0. Выше ставить нет необходимости, т.к. используемые библиотеки и весь проект вполне довольны версией 2.0 (установлено опытным путем). При создании нового проекта по умолчанию ставится последняя версия. Есть сомнения по-поводу того, нужна ли проекту .NET Framework, но увы — возможность отключить не нашел, да и не искал.

Переходим в файл AssemblyInfo.cs, нажимая два раза на нем в обозревателе решений.

И вставляем следующие две строки (выделены цветом):

Все. Компилируем проект. Если все правильно сделали, то на выходе должна получиться dll’ка. Лежит она в папке Документы\Visual Studio 2015\Projects\SoyuzWebCam\SoyuzWebCam\bin\Release.

Чтобы установить компоненту необходимо запустить консоль от Администратора. Создаем ярлык на рабочем столе и в качестве пути к файлу пишем cmd.exe. Далее жмем правой кнопкой мыши на ярлыке и выбираем пункт «Запуск от имени администратора».

Выполняем команду cd C:\Windows\Microsoft.NET\Framework\v2.0.50727

Для удобства можно положить скомпилированную dll’ку в корень диска C.

Далее выполняем команду regasm.exe «c:\SoyuzWebCam.dll» /codebase

Если видим сообщение «Типы успешно зарегистрированы» значит все ОК — COM-объект зарегистрирован.

У Душелова например, написан готовый bat’ник (файл с расширением bat), который я немного изменил:

Запускаем его также от администратора (правой кнопкой мыши по нему ;)).

Что он делает: копирует файл dll в папку Windows и регистрирует её.

Всю папку проекта (вместе с скомпилированным файлом) завернул в архив и положил сюда.

А папку с «установщиком» завернул сюда.

Как пользоваться «установщиком»: распаковываем SoyuzWebCam_COM.rar в папку корень диска С, чтобы dll’ка была доступна по следующему пути c:\SoyuzWebCam_COM\SoyuzWebCam.dll. Запускаем от Администратора reg.bat.

Фууух. Самое сложное сделали.

Переходим к 1Ске.

Сложного тут мало.

Приведу сразу полный листинг общей формы, которая вызывается как форма выбора.

Всё! Надеюсь, что кому-нибудь пригодится. Предложения и критику пишите в комментарии или мне на почту birgom собака birgom точка ru.

Ещё раз: проект C# лежит здесь, а «установщик» здесь

Мобильное приложение для Подготовки к 1С Профессионалу

Как и обещал… Приложение лежит здесь http://birgom.ru/f/1cema.xml

Для тех кто хочет посмотреть саму конфигурацию — выгрузка ИБ лежит здесь http://birgom.ru/f/1Cv8.dt

XML с вопросами и ответами лежит здесь http://birgom.ru/f/test1c_data.xml

И так…

Первая ссылка http://birgom.ru/f/1cema.xml — описание конфигурации в XML для Мобильной платформы 1С. Для установки на телефон её вполне достаточно.

Для этого думаю подойдет Учебная версия http://online.1c.ru/catalog/free/18610119/

На момент написания статьи эта Учебная платформа (1С Предприятие + Мобильная Платформа) весила 2,2 Гб.

Скачиваем архив. Распаковываем. В папке архива переходим в mobile_8_3_8_58\Android\ и устанавливаем на телефон 1cem-arm.apk.

Добавлено 03.12.2016: Обратите внимание на версию мобильной платформы которая стояла у меня на момент написания статьи — 8.3.8.58.
В более поздних версиях (например 8.3.9.74) могут наблюдаться разнообразные ошибки, одна из которых связанная с Многострочностью поля в Таблице. Код ошибки: 10170418 на сайте ИТС 1С. Сей баг в моем приложении уже пофиксен небольшим «костылем» с проверкой номера релиза. Спасибо пользователям (а именно Евгению М. 😉 )!
Пусть 1С на меня не держит зла за то, что я выложу здесь apk с версией 8.3.8.58

Замечу, что в архиве есть 1cem-x86.apk, но т.к. в основном все стоковые устройства на Андроид идут на процессоре ARM, то этот файл не для нас.

Так же замечу, что если у тебя Windows Phone или iPhone, тебе нужно установить приложение из соответствующей папки Windows или iOS.

Будем считать, что приложение ты установил.

Далее нужно установить «моё Приложение» в это приложение. Да, такая тавтология 🙂

Порядок установки XML следующий:

  1. Запускаем 1С Предприятие на мобильнике. В меню «Приложения» нажимаем Добавить — «+»
  2. Вводим адрес http://birgom.ru/f/1cema.xml и нажимаем «Загрузить»
    Установка мобильного приложения 1С Профессионал Тестирование
  3. После Загрузки приложение спросит как его назвать. Называем как угодно и нажимаем «ОК»
    Окно настройки мобильного приложения 1С Профессионал Тестирование
  4. После установки запускаем его
    Меню приложения выглядит так.
    Меню мобильного приложения 1С Профессионал Тестирование Раздел меню Настройки мобильного приложения 1С Профессионал Тестирование Раздел меню Подготовка мобильного приложения 1С Профессионал Тестирование Раздел меню Тестирование мобильного приложения 1С Профессионал Тестирование
  5. Пол дела сделано. Осталось загрузить сами вопросы. Переходим в меню «Настройки» -> «Загрузка».
  6. Далее выбираем «Загрузить из макета»И дожидаемся окончания Загрузки.
    Начало загрузки Тестов мобильного приложения 1С Профессионал Тестирование Окончание загрузки Тестов мобильного приложения 1С Профессионал Тестирование
  7. На этом всё. Поздравляю счастливого обладателя этого скромного приложения

Для подготовки воспользуйся пунктом меню «Подготовка«.

Вариантов тестирования несколько:

Тестирование — похож на официальный экзамен. Рандомно подбираются 14 вопросов (по одному на каждый раздел).

Тестирование по разделам — «бесконечное» тестирование по выбранному разделу (разделам) пока не надоест (команда «Завершить»).

Неправильно отвеченные вопросы накапливаются, для последующего Тестирования по неправильным.

Критикам заранее скажу, что приложение далеко не идеально, т.к. торопился и делал для себя. Но у тебя есть выбор — пользоваться, переделать и пользоваться, или не пользоваться 😉

В приложении есть «Хранилище настроек», в котором можно задать настройку Анализировать результаты при подборе вопросов (да/нет) и Период анализа результатов при подборе вопросов (в минутах, например 25 минут). На примере, эти настройки означают, что вопросы, на которые ты отвечал за последние 25 минут не будут подобраны в новый тест (Тестирование).
Хранилище настроек мобильного приложения 1С Профессионал Тестирование. Скриншот 1 Хранилище настроек мобильного приложения 1С Профессионал Тестирование. Скриншот 2

Есть небольшое количество вопросов в разделе № 15 Удаленные, помеченных на удаление. При включенной настройке Не подбирать удаленные такие вопросы не попадут в (Тестирование), а при включенной настройке Не показывать удаленные они не показываются при Подготовке. Эти вопросы из актуального теста на май 2016.

В вопросах, как и в оригинальном тесте, есть Картинки. На моем экране в 5,1 дюйма они отображаются не очень, по этому сделал возможность просмотра картинки отдельно, для этого тапни на неё.
Вопрос теста Редакторы и инструменты режима разработки - При выполнении операции Поиск ссылок в объекте в ситуации, отображенной на картинке в мобильном приложении 1С Профессионал Тестирование Картинка Вопроса теста в мобильном приложении 1С Профессионал Тестирование. Открытие Картинка Вопроса теста в мобильном приложении 1С Профессионал Тестирование. Просмотр

Приложение в APK (для Android) не собирал. Возможно сделаю это позже.

На настройки, а точнее константы Адрес веб сервиса и Путь к файлу — не обращайте внимания. Скажу лишь то, что в Приложении реализована возможность Загрузки вопросов через веб-сервис или из файла. Но так как проще всего оказалось хранить вопросы в макете в двоичных данных и загружать их оттуда,  то первые две возможности отключил (спрятал кнопки).

Вопросы и критику оставляйте в Комментариях, либо пишите на мою почту birgom на этом же домене.

Вот ещё несколько картинок:

Вопрос теста Общие механизмы - Объект конфигурации Константа... в мобильном приложении 1С Профессионал Тестирование. Ответ   Вопрос теста Общие механизмы - Объект конфигурации Константа... в мобильном приложении 1С Профессионал Тестирование. Тестирование Вопрос теста Редакторы и инструменты общие - Редактор графической схемы может использоваться в мобильном приложении 1С Профессионал Тестирование Результат тестирования в мобильном приложении 1С Профессионал Тестирование Вопрос теста Технология разработки - В каких областях может использоваться глобальный поиск, вызываемый из пункта меню Правка конфигуратора в мобильном приложении 1С Профессионал Тестирование. Ответ Информация о мобильном приложении 1С Профессионал Тестирование

Желаю успешной сдачи экзамена!

Привет, мир!

Привет.

Меня зовут Дима. Это моя личная страничка.

Здесь я собираюсь публиковать мои решения задач и материалы, которые тебе возможно помогут при подготовке к сертифицированному экзамену 1С Профессионал и 1С Специалист по платформе 8.3.

Также здесь возможно буду выкладывать я и все желающие свои решения, разработки, примеры и т.д и т.п. не связанные с экзаменом.

Планирую организовать здесь форум.

Сертификат Профессионала по платформе у меня уже есть. Активно (не всегда, порой ленюсь) готовлюсь к Специалисту. Собираюсь сдать ещё по ERP и Бухгалтерии.

Есть мое мобильное приложение 1С, которое мне очень помогло при подготовке к экзамену. Очень удобно готовиться в метро, в пробках, в очередях или просто лежа на диване. Скоро выложу и расскажу как настроить.

Пока написать больше нечего, т.к. надо идти спать. Завтра на работу.