<?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='\
Я так понял суть вашей статьи в том, что java умеет работать с веб сервисами. и коротко её можно переписать так
import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.SoapObject;
import org.ksoap2.serialization.SoapSerializationEnvelope;
import org.ksoap2.transport.HttpTransportSE;
))
(1) Ibrogim, Вы поняли неверно. Я думаю, любому технически подкованному специалисту должно быть понятно, что Java умеет работать с веб-сервисами.
В этой статье не все, что я хотел сказать, я написал в конце —
. Ведь с тем как работать с веб-сервисом 1С не все так прозрачно, и тратится уйма времени на понимание некоторых вещей.
А статья не Java-разработчику, а 1Снику.
(2)
Из данного предложения можно смело выкинуть слово «1С»
ksoap2 ничего не известно про 1С )
Я думаю, любому технически подкованному специалисту должно быть понятно, что 1С умеет работать с веб-сервисами.
Итого о чём статья? о том, что есть ksoap2 и все умеют работать с вебсервисами (Java ,1С)
Просто и доступно хочу людям донести то, на чем сам набил кучу шишек и потратил много времени.
Если делать такую интеграцию, как по мне, логичнее использовать REST-сервисы
(6) mihey, Вполне возможна и такая реализация, тем более 1С развивает поддержку OData. Много зависит от задачи. Конкретно моя была — создать решение под уже существующий веб-сервис и выдумывать работу с REST не пришлось
Пишите дальше!
Не обращая внимание на критику.
на данный момент как раз начинаю работать со связкой 1с и андроид, поэтому статья будет очень полезна!
ждем остальные статьи, так как тема актуальна каждый день.
например мы так и не смогли найти нормальный софт для раздачи заявок из 1С удаленным сотрудникам. Вернее такого софта куча, но оно либо с 1С не работает, либо техподдержка мертва, либо в приложении не возможно сотруднику поставить комментарии, отчет о выполнении…
Имхо, лучше пилить post запросы из андроида к 1с, т.к. ksoap не всегда подходит
(10) sarun, Уже вроде постарался разъяснить — все зависит от конкретной задачи, я рассматриваю конкретно SOAP. Более того, я буду рад, если кто-то решит задачу посредством REST и мы сможем оценить плюсы и минусы конкретных решений. Передо мной же стояла конкретная задача — написать приложение, работающее с уже существующим веб-сервисом в 1С.
У меня есть разработка, где я задумывался использовать сразу оба решения, но демо-версию для клиента надо было сделать в сжатые сроки, и заниматься изучением OData не было времени.
Если хотите понимать, какой протокол вам нужен — вот отличнейшаястатья
тут
А еще есть
SOAP и REST сравнивают не как альтернативы друг другу, а только потому, что есть круг задач, которые решают оба инструмента
Поскольку в водной статье еще никаких обменов данными нет, давайте дождемся следующей и попробуем разобраться, подойдет ли нам протокол OData.
Очень актуально продолжайте в томже духе. тоже начал изучать java и работу с веб сервисами из андроида.
А что в архиве лежит?
В архиве лежит «болванка» проекта для AndroidStudio с подключенной библиотекой ksoap2, если кому лень ковыряться.
буду следить за вашими постами и публикациями. сам раньше начинал создавать аналогичное для андроид и ios но 1с вовремя выпустили моб.платформу.
Пост не очень информативный, но навеял приятные воспоминания. В районе 2013 занимался связкой учетной системы 1С с andoid-телефонами водителей. К сожалению, тогда не было еще мобильной платформы, ни http-сервисов, ни Android Studio, ни ksoap2. На самом деле все не так уже и страшно. Во первых, программирование под Android оказалось таким же как и под 1С; во вторых протокол SOAP простой до безобразия и легко реализуется. Сначала сделал передачу примитивных типов, а через годик для пересылки фоток и архивов реализовал передачу бинарных данных. Потом опыт пригодился для реализации обмена по веб-сервисам из 1С7.7, где ничего похожего на ksoap2 не было и не будет.
Совет автору. У вас же микрозадача и, если у вас в планах нет написания отдельных статей с разбором проблем интеграции с различными версиями Android (о, как же я намучился с одной китайской партией дешевых планшетов на тройке), о реализации пушей из 1С, о борьбе против «злых юзеров» (которые на зло вам и начальству переводят время и отключают GPS и передачу данных), то стоит все описать в одной лаконичной статье. Первая часть просто ни о чем и зря отвлекла внимание.
(16) Dementor,
Возможно. Я не мастер написания статей и для меня не просто написать сразу большую, хочу понимать — что вызывает интерес, а что не стоит усилий. Поэтому вводную часть решил сделать именно такую.
Готовлю вторую часть, но местами получается наоборот чересчур тяжелая.
интерес вызывает. когда ждать продолжение?
Тема интересна и актуальна, пишите и постите дальше!
Не, ну это не статья, а так — наживка. только начал читать — а уже прочел.
А можно какой-нибудь пример работы с веб сервисом через ваш класс?
Автор все правильно делает. Сначала «прототип» статьи и если будет интерес, то продолжит, если нет, то забъет на это!
Я понял так!
Но парадокс в том, что всем это безумно интересно, но ажиотажа не видно!
а как надо проявить ажиотаж?
(23) Ким,
а его не надо проявлять, он либо есть, либо его нет!
потребность нужна!
(23) Ким, На самом деле, мне не нужен ажиотаж. Для меня лично эта статья — как средство наверно и самому систематизировать знания, полученные за последний год — начиная от мобильной платформы, расширений ACODE Tools и других подобных вещей и заканчивая нативной разработкой.
Не менее интересно мнение и сообщества, иначе статей не было бы. И что касается REST и всего остального, что в дальнейшем будет обсуждаться — все это мне интересно.
На данный момент я могу сказать только одно — имея под рукой нужный набор инструментов, можно создать приложение, готовое к обмену с 1С за время, сопоставимое с разработкой на мобильной платформе 1С. И сотня-другая голов тут гораздо лучше, чем одна.
То есть для меня самое важное — реакция сообщества в конструктивном плане, а не в плане «Уау! Статья по ондроеду!»
автору большой респект. сам плотно изучаю андроид, и времени что бы разобраться уходит уйма. в основном учишься на примерах.
Статья очень полезная (правда я уже и вторую часть статьи просмотрел).
Спасибо Автору! Серия статей это именно то что нужно. Надеюсь в скором времени воспользоваться Вашим опытом.
А почему бы не делать аналогичную задачу используя мобильную платформу 1С?
(29) gradi,
Ну во-первых, цель — рассмотреть работу с веб-сервисами в нативном приложении Android.
Кучу примеров могу привести, когда нативное приложение «интереснее».
(29) gradi, ага, читал статью, как сделать простое приложение на мобильной версии 1С, типа Hello, world. apk файл в 30 МБ 🙂
+ еще с лицензированием есть свои заморочки
+ врядли 1С реализовало полноценный Java 🙂