<?php // Полная загрузка сервисных книжек, создан 2024-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='\
1. Библиотека бесплатная?
2. Внешние ресурсы использует или работает локально?
(1) 1.Бесплатная, поддерживается сообществом, можно внести свой вклад в ее развитиеhttps://github.com/BrainJS/brain.js/blob/master/CONTRIBUTING.md
2.Работает без подключения к интернет.
(1)BrainJS/brain.js is licensed under the MIT License
(2) пытаемся продвигать таким образом 1С на глобальный рынок, публикации отлично индексируются поисковиками :-).
(2) Steelvan сам ты как не русский, вот из этого:
нет никаких гарантий что следует вот это
бесплатная, работает локально
так как
1. «открытый» код бывает платным
2. если «ничего не нужно устанавливать» это не значит что не используются веб-сервисы
3. «все присутствует в обработке» — ну не может там присутствовать ВООБЩЕ ВСЕ 🙂 так что фраза многообещающая но не гарантирующая
(3) Спасибо огромное 🙂
(5) Продвигать на мировой рынок с какой целью ?
Вроде на внутреннем рынке спрос сильно превышает предложение, это что касается работ.
Просто интересно, у этой разработки есть сценарии практического применения в области учета?
Или просто упражнения с нейросетями?
(9) Обычная оболочка для библиотеки BrainJS/brain.js
1Совского тут можно сказать ничего и нету
(9) Мне кажется можно применить в области визуальных редакторов. Например человек рисует мышкой элемент блок схемы криво и косо.
А редактор подставляет нужный из библиотеки.
(9) Очень даже область применения огромная, при должном дальнейшем развитии! Наработку можно использовать для распозновании первичных документов, их содержимого. Это ускорит ввод данных, если у вас большая текучка документов, либо документы с большим набором данных. Вот тут распознование облегчит работу бухгалтеру.
(12) именно эта «наработка» для такой задачи вообще НЕ годится.
Скиньте плиз файлик на почту кто уже скачал f1842408(собака)nwytg.net
(15) нет такого адреса
(13) почему же? какая тогда годится? finereader не предлагать
(17)
finereader?))))))))))))))))) Вы, видимо, не видите разницы между распознанием ТЕКСТА и распознанием ДОКУМЕНТА с его структурой.
Да даже распознание текста на голом 1С, то еще извращение, ключевое слово «медленно, очень медленно», начиная от разработки, заканчивая производительностью
Проще взять tesseract и через команду системы прикрепить к 1С и то толку больше будет, да и на семью время останется)
Раз уж вспомнили продукт Abby, то можно юзать Flexi Capture, правда стоит он мягко говоря дорого.
Я более скажу 1С для ML вообще не как не годится (пока нету спец. API), может какие простые модели с неочень большими объемами данных, еще можно делать, но не более, опять же проще взять python + keras tensorflow, там порог вхождения, первые 2 курса по вышке, а то и меньше.
(18) в случае если известен вид загружаемого документа (например ТОРГ-12), то вопрос структуры не особо важен.
(19) Конечно не важен этож как 2 пальца об…, вон таблица в вашей Торг12 рапознается просто идеально, при условии, что использовалась более менее нормально обученная модель на доках и норм сканер и будет что-то типа:
Номер по порядку наименование характеристика…..артикул товара код товар…и тд
1 2 3 4 5 6 7 8
1Колесо Мазда3 белое R15 шт 4 1 1 90O0 ….
2Краска белая Î2 кг 0.5 1 I O.6 1000 ….
Тут даже спорить неочем, просто попробуйте, много интересного для себя откроете)
(20) уже попробовал и открыл =) с февраля самых противных (по количеству ручного ввода) поставщиков запустили, жалоб не было. Использовал pdftotext, на выходе примерно такое и получается (часто кстати один товар на 2-4 строки растягивается). Разобрать — реально. Масштабировать на торг12 других поставщиков — тоже реально. Но не все контрагенты шлют нормальные пдф, бывают просто сканы — тогда ой.
Как понимаю, в данной публикации вы просто используете api.
Это не спортивно.
Нативное решение было бы гораздо интереснее.
(18)
FineReader это если у вас денег много (или воровать можете)
Я бы попробовал начать с Google Vision)
(21) Такое решение годится только если pdf не представляет собой картинку. Ну и естественно со сканером не подружите.
У меня в ближайших планах подружить 1с’ку с Google Vision (бесплатно для относительно небольшого числа документов в месяц), а также попробовать сделать это через камеру мобильного телефона для ввода первички.
Идея довольно оригинальная:
камера принимает массив данных кое как распознаных на лету с помощью библиотеки (в моем случае flutter vision), из полученного массива данных находим числа — проверяем ИНН ли они (по последним двум цифрам).
Если ИНН, проверяем оно принадлежит нашей организации, если да — нашли организацию, если нет — контрагенту, нашли контрагента. И тп и тд)
(24) если только числа, то будет проблема как в торг12 определить что это за число: номер колонки или количество. Буквы тоже нужны…
(25) с этим буду разбираться, алгоритм выше написал для определения организации и контрагента.
Слабо такое же полностью на встроенном языке 1С реализовать?
(27) Не слабоhttps://infostart.ru/public/200922/ но работает медленно как выше уже писали. Проще утилизировать существующие api.
(9) Еще как есть — идентификация там, где штрих коды или rfid не применяются. Например в связи с обязательной маркировкой пиломатериалов — распознавание спилов дерева (они как отпечатки пальцев — уникальны). Есть интересная статья на хабре по этому поводу