Сканирование в 1С




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2025-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

62 Comments

  1. CheBurator

    Плюсую рейтинг, ибо ВК — правильная, не в пример sp.dll.

    Активно использую, только что закончил написание на ней настоящей «скан-машины» для тетенек сертификатчиц для сканирования сертификатов и паспортов в потоковом режиме — потому как обычный диалог сканера — ну никуда не годится для постоянной «безмозглой» работы «на конвеере»

    Афтар! Не забывай малоимущих!

    При попытке загрузить ВК в WindowsME — 1Ска тихо стоит в ступоре… уходит внутрь себя и «не отвечает» (наверное, аналогично и в 9x будет…?).

    Reply
  2. vasilykushnir

    Кстати Сhe, а не встречался ли ты с такой проблемой: расшарить сканер (подключен к локальному компу) под терминалами на сервере? У меня тоже тетеньки за….ли своими сертификатами — при подключении по сетке жуткие тормоза.

    Reply
  3. CheBurator

    Не не встречался, по терминалу не работаю — пока неактуально…

    Но где-то что-то читал, ща уже не найду.

    опять же пояндексит — не помогла?

    Reply
  4. vasilykushnir

    Не-а, не помогла. Слежу на многих форумах за темами сканирования, но пока голяк.

    Reply
  5. vasilykushnir

    Да, есть одна по…нь http://www.cit-masters.ru/soft/bs/ru/features.php, но в 1С под терминалами еще не фурычит — грозятся месяца через три сделать (значит — минимум пол-года).

    Reply
  6. CheBurator

    Вот тут лежат скриншоты программулек, которые наваял по быстрому себе для сканирования и просмотра сертификатов

    http://www.infostart.ru/file.php?0,file=14

    Reply
  7. vasilykushnir

    Cкачал. Благодарю рейтингом.

    Reply
  8. vasilykushnir

    Н-да… Скриншоты, конечно, хорошо, но сами обработки — лучше. По внешнему виду все выглядит довольно солидно. А как бы заполучить? Интересно поюзать.

    Reply
  9. CheBurator

    А! Хитрый какой…. 😉

    Ну, в принципе, можно под честное слово…

    там под свою докручено (справочник серии подчиненный номенклатуре),

    в принципе д.б. понтяно… еСли согласен на условиях нераспространения и только ознакомления..?

    Reply
  10. vasilykushnir

    Ну конечно согласен. И кстати справочник серий у меня подчинен справочнику Товары. НО! Конфа у меня настолько нестандартная, что ни одна практически обработка без доводки на нее не ложится и наоборот (почему не выставляю свои обработки). Это будет как руководство к действию.

    Reply
  11. CheBurator

    Я тож многие не выставляю по той же причине…

    ща отправлю

    Reply
  12. CheBurator

    Автору: обнаружена большая утечка памяти при использовании ВК — скинул на мыло и в личку во все места 😉

    Reply
  13. konsiv

    По поводу шары сканера через терминал —http://remote-scan.com/

    Reply
  14. support

    сканер-штрих кода под терминалом

    http://www.infostart.ru/projects/index.php?id=352

    Reply
  15. CheBurator

    Спасибо автору — оперативно поправил глюк!

    Всем бы так!

    Reply
  16. O-Planet

    + 1

    Reply
  17. snellius

    Поправлены ошибки, приводящие к утечке памяти

    Reply
  18. marshal

    Add(1);

    Reply
  19. snellius

    Добавлена возможность сохранения в TIFF.

    Пофиксены баги при работе в v8.

    В архив включена внешняя обаботка, демонстрирующая работу с компонентой из v8

    Reply
  20. Dali

    +1

    Reply
  21. Itilive.ru

    серьезно едет изображение при сканировании в tiff

    Reply
  22. and_lk

    Самое главное отсутствует инструмент обрезки изображения, при сканировании паспорта, например, зачем мне полный планшет изображения? Поэтому управляю сканером через его родную прогу: из 1С — через Twine — родное ПО — просмотр — обрезка — сканирование — запись в файл

    Reply
  23. CheBurator

    (22) а код из 1С — показать?

    Reply
  24. CheBurator

    При некотором наборе параметров сканирования — едет картинка — едет так: представим нормальную отсканированную картинку разделим ее вертикально пополам и поменяем половинки местами…

    Reply
  25. ev-kov

    А с web камерой компанента работает? Попробовал под вистой вложенный тестовый пример — не нашла вебкамеру, может я чего не так делаю ?

    Reply
  26. maxi4

    Решение супер

    Reply
  27. artbear

    При загрузке ВК пишет, что twain32.dll (без подчеркивания, т.е. не типовый twain_32.dll) не доступен 🙁

    Что делать?

    Reply
  28. artbear

    Соответственно ВК не загружается 🙁

    Reply
  29. snellius

    Не верьте тому, что пишет. На самом деле в каталоге Windows не может найти именно twain_32.dll. Собственно поэтому и не загружается.

    По поводу кривизны сканирования в TIFF: хотелось бы получить файл BMP с теми же настройками.

    Reply
  30. SultanBul

    +1. сканирования в TIFF. не увидел рулится ли при многостраничном сканировании в ОДИН ФАЙЛ или каждую страничку в свой файл.

    Reply
  31. nprice

    Автору спасибо большое за компоненту! Но вот точно чего в этой жизни не хватает так это регулировка яркости… А то очень много документов попадаются уже например ксерокопированными и тогда их сканирование в ч/б режиме приводит к ужас-ужасу… Автору если не сильно влом, доложите пожалуйста яркость, а то блин придется самому писать на дельфе, а ведь НЕОХОТО! 😉

    Reply
  32. nprice

    Хотя сейчас сам порылся с TWAIN’ом и понял что все не так просто, там яркость напрямую не задается, тоесть это надо постобработкой делать… Тогда если не лениво, можете рассказать как с картиночкой 1С-ной работать, она что обычный битмап?

    Reply
  33. manaxov83

    А эта компанента поддержывает сканирование потоком, если да то можна примерчик.

    Заранее спасиб

    Reply
  34. manaxov83

    Все разобрался, всем спасибо

    Reply
  35. elisonblack

    snellius? спс огромное!

    Reply
  36. mmk

    у меня Epson GT-2500 с авто подачей документов. не могу понять, вроде ставлю соответствующую галочку, но всё равно не сканирует.

    Reply
  37. mmk

    кстати, у меня не один сканер, а два вместо одного: Epson GT-2500 и Wia-Epson GT-2500. К чему бы это?

    Reply
  38. ITAlex

    всецело присоединяюсь к nprice

    удобная вещь, но параметра яркости не хватает очень!

    Reply
  39. x-alexis

    Господа, а сканирование из 1С Документооборота через браузер будет работать, кто нить пытал?

    Reply
  40. sipoju

    Жаль что с сетевым сканером отказываеться работать

    Reply
  41. dum

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

    Win 7 8.1.15.14

    На другом компе на буке, вобще при попытки сканировать, или получить изоображение с вебкамеры этой длл’кой происходит аварийное закрытие 1ски. WinXP

    А со сканированием очень надо разобраться, подскажите куда копать.

    Reply
  42. alu

    интересен вопрос автоподачи — написано что он будет добавлять к файлу цифру индекса

    на hp1319 такого не происходит , хотя сканировать начинает все положенные в него листы, но сохраняеет только последний

    Reply
  43. Ihty

    Программа супер. В XP работает на ура. Но под Win7 х64 — компонента не работает.

    Reply
  44. 0vrcr

    Доброго времени. Влоде быб заявлена работа под v8. А на v8.1 работает?

    {Обработка.Scanning.Форма.Форма(425)}: Ошибка при вызове метода контекста (ЗагрузитьВнешнююКомпоненту): Ошибка при загрузке внешней компоненты

    Заранее спасибо за ответ

    Reply
  45. Serg_KSV

    (44) на 8.2 работает

    Reply
  46. pena

    у меня на 8.2 релиз 219 ОС Виста

    {Обработка.Scanning.Форма.Форма(425)}: Ошибка при вызове метода контекста (ЗагрузитьВнешнююКомпоненту): Ошибка при загрузке внешней компоненты

    тоже самое где копать?

    Reply
  47. pena

    нашла где копать — ПРАВА пользователя!!!

    Reply
  48. KVS

    Супер прога, спасла жизнь и сократила время

    Reply
  49. Фред

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

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

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

    Бум ждать…)) Удачи!

    Reply
  50. r_bykov

    Добрый день. Можно поинтересоваться у автора данной разработки.

    Есть возможность доработать данный продукт под наши условия (сканирование с автоподатчика)?

    Спасибо большое.

    Reply
  51. yoyoman

    Разработка старая, автору наверное лучше через профиль писать.

    P.S. Компонента отличная!

    Reply
  52. bolush

    Вещь нужная но судя по коментам не хочеться торопиться, Люди скажите стоит качать или нет? а то не хочеться в пустую тратит заработанное добро!

    Reply
  53. alyuev

    У меня тоже ругается на то, что не найден twain32.dll (типовой twain_32.dll лежит в папке Windows). Система win2008 x64.

    Reply
  54. alyuev

    (53) Отвечаю сам себе — во-первых — нужен файл twain_32.dll версии 1.7.0.0 (у меня был 1.7.1.3). Во-вторых этот файл и папку twain_32 из папки Windows нужно скопировать в папку пользователя в созданную там папку Windows.

    Reply
  55. Mx00

    (54) попробовал сделать как ты советуешь, но если скопировать файл twain_32.dll версии 1.7.0.0

    если НЕ копировать папку twain_32, тосканирует, но обрезает изображение, если скопировать папку, то 1С вылетает

    Система win2008 x64.

    если разобрался, скинь пожалуйста файлики, которые используешь mx(собfxrf)mail.ru

    Reply
  56. S.V.Y

    Ребят, столкнулся по работе с проблемой (55) решение не подскажете?

    Reply
  57. Mx00

    (56) нет, проблема нормально не решилась, где-то проскакивало, что это проблемы со сканером Canon, на другом сканере изображение сканировалось с добавлением 1/3 листа черноты…

    в общем сейчас сделал сканирование в папку без участия 1С, а потом из 1С прикрепление файла

    Reply
  58. S.V.Y

    т.е. компонента под server 2008 x64 не работает, я правильно понял?

    Reply
  59. hibico

    Вопрос к автору, может он еще наблюдает за темой. А может еще кто поможет.

    Столкнулся с такой проблемой.

    Есть старая база с самописной конфигурацией 7.7. В данной конфе используется компонента 1CScan для получения фотографий.

    Все нормально работает. Код примерно такой:

    ЗагрузитьВнешнююКомпоненту(«1CScan.dll»);
    Камеры = СоздатьОбъект(«AddIn.ScanManager»);
    Камеры.ПолучитьКартинку(НоваяКартинка);
    ПолеКартинки.УстановитьКартинку(НоваяКартинка);
    ПолеКартинки.Сохранить(ПолноеИмяФайлаКартинки);

    При этом обратно в 7.7 картинки нормально загружаются:

    ПолеКартинки.Загрузить(ПолноеИмяФайлаКартинки);

    Но я не могу открыть сохраненные файлы картинок ни в одной из известных мне программ, кроме как в 7.7. Сейчас передо мной возникла проблема. Создается новая конфигурация уже на 8.2. Вот в нее и нужно перенести фотографии из 7.7.

    8.2 не понимает формата данных файлов, как и другие программы.

    В каком формате загружается фотография, полученная методом «ПолучитьКартинку»?

    Как мне перенести данные фотографии в 8.2?

    Жду помощи.

    Reply
  60. hibico

    (59) Вопрос закрыт.

    Помогла компонента: v7picture.dll

    Reply
  61. nuary

    СПАСИБО тебе человечище за компоненту!!!!

    Reply
  62. Alteza

    Ошибка при вызове метода контекста (ЗагрузитьВнешнююКомпоненту): Ошибка при загрузке внешней компоненты это на 8.3 выдает

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *