<?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='\
А под 8.2 возможно запилить такое ? под жирненького клиента ?
(1) alex_4x, легко
(1) alex_4x, Работаю на этим. Но платформа 8.2 не поддерживает шифрование SSL, а поддержка включена с платформы 8.3.1, то для работы с SSL необходимо исользование платфомы не ниже 8.3.1. А по моим данным в корпоративном секторе мало кто еще перешел.
Для JSON в 8.2 есть обработки.
Совсем не понял на кой черт эта обработка?
Приложение дли виндовс Яндекс.Диск не решает ли те же задачи?
чет я совсем не вижу преимуществ такой разработки, читаю статью и чувствую, что автор не слышал про ГИТ и множество других систем контроля версий.
https://github.com/znsoft/external1CProgs/tree/master/src
GIT позволяет делать тоже самое плюс версионирование плюс командная разработка плюс история изменений видны сразу, версии можно откатывать и плюшка от гитхаба это issues считай трекер задач. Вот к примеру мой тестовый репо:
, а закрытая разработка ведется на bitbucket.
там уже реальные вещи делаем
https://github.com/xDrivenDevelopment/precommit1c
при помощи вот этой утилиты
ПС: хотя любая программа имеет право на жизнь 🙂 извиняюсь если кого задел своим сообщением
(4) echo77, (5) eugeniezheludkov Предполагается что сама разработка, тестирование, контроль версий осуществляется на другом компьютере с локальной копией Яндекс.Диск.
А Обработка предназначена для быстрого обновления своих наработок у Клиента!!! Не по одной, запоминая в уме что надо обновить а сразу все вместе по нажатию одной кнопки.
Связку с ЯД можно подсмотреть в 1С:Деньги, там доступ по логину и паролю, без токенов и ограничений по периоду их использования. Кстати, и в веб клиенте работает.
Меня всегда забавляла наивная уверенность некоторых специалистов в двух вещах — наличии устойчивого 4G в масштабах всея Земли, и сохранности-безопасности данных, хранимых где-то в сети. Эта уверенность обычно резко проходит после двух-трёх встреч с рукояткой жизненных граблей)
(7) kotlovD, Из статьи на Инфостартеhttp://infostart.ru/public/304373/
«Чтобы получить access_token мы должны предварительно настроить веб-сервер и опубликовать на нем http-сервис ЯндексДеньги.»
(8) Yashazz,
Ну по поводу безопасности в 1С я удержусь высказываться.
А вот проверить работу обработки на 3G сети по телефона — проведу тест. И другим предлагаю предоставлять информацию.
(8) Yashazz, Не знаю, что Вы имеете ввиду,но по 3G телефону с задержкой все работает
не понял какие проблемы с синхронизации через WebDav ,подождать в обработке на 5 сек дольше уже стало проблемой?
заводим ящик расшариваем папку ему с доступом на чтение, сетевой диск подключаем и отключаем в обработке и без всяких страданий с токенами
net use U: https:\webdav.yandex.ru /User:help@sss.net password /persistent:no
(12) gonzo111, Так первоначальная идея сделать аналог Yandex disk, переродилась в идею обновления в отдельной базе 1C своих внешних доработок.
Исправил ошибку если есть поддиректории в Yandex Disk. Их не берем в таблицу.
Заметил что одним запросом Yandex получает только 20 элементов. Это значение по умолчанию. Если у Вас больше файлов в директории это введет к ошибкам. Поставил 100. Думаю хватить. Или лучше сделать параметром?
Иногда для скачивания Yandex выдает 302 и перенаправляет на другой ресурс. Доделываем.
(8) Yashazz, ты слишком критичен. для любой разработки можно найти условия , где она либо бессмысленна, либо не будет работать. автор же не писал, что она будет работать везде. если не будет интернета, она точно работать не будет, например.
и что там с безопасностью хранения обработок в яндекс диске? (я подозреваю насколько мне позволяют мои скромные знания, что в яндекс в плане безопасности куда лучше чем в 1с и тем не менее в конфах предусмотрен обмен по почте, которая кстати на том же яндекс может быть, и ничего)
А что мешает делать вот так? Это ж WebDAV, 1С успешно справляется с этим.
С самого начала не доверял облачным сервисам и не доверяю. Главным образом по тому, что пока есть Интернет, или они работают — все ОК. А как только нет сети или облако «полетело», так все, приехали. В этом плане нет ничего надежнее личной флешки или жесткого диска. Поэтому логичнее настроит обновление и проверку с них. К тому же об уровне безопасности всех этих облаков тоже пока не все известно. Крадут же фотки знаменитостей.
ЦЕННИКИ НЕ ГУМАННЫЕ!!!
Нужно было бы мне лично, не качал бы вовсе!
(19) apostal86, облачные клиенты в папку на жестком диске файлы кладут. Отсутствие интернета повлияет только на оперативную синхронизацию.
(19) apostal86, НЕ согласен. Если нет интернета, то все данные и так у вас на флешке. А вот если ваша флешка сгорит, то вот тут облачные данные спасут вас от «расстрела». Проверенно на личном опыте, правда на dropbox. День работы был спасен только благодаря облачному сервис !!!
Уменьшил стоимость скачивания.
Спасибо за статью, очень полезно.
Может подскажешь, я сделал все до твоей строки «И показывают пустое окошко с Вашим ключом (token). Он действителен в течение года.» и получил этот длинный токен, Но при вставке его в обработку пишет что не авторизован. Что я не сделал.
(25) pavel_pss, Сложно сказать удаленно, попробуй точно скопировать все знаки ключа и нажми кнопку обновить.
(0)Нет возможности хранить код, на гитхабе. Приходится страдать такой ерундой(вообще мысль хорошая, я уже думал в этом направлении, но как то не додумал).
(27)
См. 5-е сообщение.
(27) Еще раз по порядку — хранить разработку и версии большого пути можете где угодно. Github, SVN или все что Вам нравиться. Тем более что устанавливая Yandex диск на компьютере работает с ней как с локальным файлом.
Но если Вам нужно постоянно обновлять свои обработки в рабочей базе, один раз настраиваем и обновляем одним нажатием все обработки.
Теперь понятно?
(29)Просто синхронизация. Я понял. Я просто сейчас постоянно чешу репу на тему «где свежая версия обработки? у меня или у клиента? И если у клиента, то у какого?» Уже стали возникать всякие неприятные моменты. Для синхронизации есть целая куча решений и ваша проблема началась с того, что ваш любимый инструмент стал недоступен на работе. Повторюсь, сама по себе мысль отличная. Но чего то не хватает… пока не могу понять чего. Обработку скачаю на досуге обязательно, может придумаю чего нить. У нас с вами разные цели. Вы сидите на одном месте, у меня везде разные рабочие места, разное окружение, все и всегда разное. Гит отличная штука, и решил бы все вопросы, но не таскать же его на флешке… Или таскать?
Зачем WinHttpRequest.5.1, если есть HTTPЗапрос и HTTPСоединение?
(31)Он же пишет:
Придется использовать ActiveX: ADODB.Stream, WinHttp.WinHttpRequest.5.1 и ограничиться только Windows решением. Решение получается тяжеловатым. Требует MDAC 2.5 и выше.
(0)Скачал обработку, получил токен, нажимаю «Синхронизировать», сервер отвечает 401, в чем может быть проблема? В отладчике видно, что в запросе передается указанный мной токен.
Нашел проблему, поле слишком короткое, токен не влазил целиком из-за того, что поле оформлено как пароль сразу не бросилось в глаза, что не хватает 4х символов.