<?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='\
а можно ли сделать чтобы подключалось к удаленной базе у хостера, по фтп или как то иначе ?
(1) Обработка для того и сделана, чтобы подключаться к базе у хостера — некоторые (не все к сожалению) дают доступ, но преимущественно если у обращающегося компа статический IP — они на него делают фильтр доступа для безопасности. Для подключения к врешней базе надо в поле Сервер указать IP сервера и указать порт, если он отличается от стандартного 3306. По фтп к базе никак не подключиться. Вариант по фтп — делать выгрузку файла в текст или csv из 1С, кидать его на фтп, потом через крон или вручную парсить файл и обновлять поля MySQL уже непосредственно на сервере, например сценарием PHP.
на 8.2 заработает?
если да то спс) теперь смогу без проблем проспрягать phpbb3 с 8.2))
если нет — жду доработки))
да ещё, я так понимаю тут только селектовый оператор, очень надо поддержка insert
кстати коонектор можно тут качнуть
(3) на 8.2 не проверял, так как работать там еще мне не на чем пока…
(4) А чем отличается SEL ECT от INS ERT или UPDATE? Ничем в нашем случае. Просто где запрос, например
Command.CommandText = «SEL ECT «+ПоляВыборки+» FROM «+ТаблицаБД+»;»;
пишем, например,
Command.CommandText = «INS ERT INTO «+ТаблицаБД+» SET «+ПоляИЗначения+»;»; ИЛИ Command.CommandText = «INS ERT INTO «+ТаблицаБД+» («+Поля+»)»+» VALUES «+»(«+Значения+»);»; — кому как нравится
И получите новую записть в таблице
ок. спс, вечером заценю)
жаль плюс не могу поставить, рейта не хватает 🙁
а как правильно настроить коннектор если мускул ставился руками, без инсталла?
чет проглючивает
[MySQL][ODBC 3.51 Driver]Can’t connect to MySQL server on ‘127.0.0.1’ (10061)
[MySQL][ODBC 3.51 Driver]Unknown MySQL server host ‘127.0.0.1:3303’ (11004)
отбой) разобрался
Если можно только читать MySQL, то более унивирсальной для хранения информации является MySQL.
Конечно через файл, любой и каждый, может делать обмен, при доболнительных затратах труда. Если баз много и растет, то это как то не очень.
Вот если ВК заполняла из 1с MySQL или какая другая dll или exe — было бы не плохо. А 8.2 работает по http …!!!???
Так и 8.1, как и MySQL работает через порт.
(10) Эта обработка не использует никаких ВК. Она работает через установленный в системе стандартный драйвер ODBC (где скачать — см. (5)).
На основе методов работы, реализованных в этой обработке можно как читать, так и заполнять БД на MySQL, можно создавать/удалять новые таблицы и т.п. Этот вопрос уже рассмотривался в (6). Нельзя только создать новую БД на MySQL сервере.
8.2 вроде не работает по http без web-компоненты, как и 8.1
Спасибо.
HTTP. В 8.1, в отличие от 8.0, которая работает через COM, использует при работе с сервером HTTP. Это точно. Проверить можно на локальной установке:
Меню Пуск=> Все программы=>1с Предприятие 8.1=>Серверы 1с предприятие.
Далее откроется консоль.
Можно например: Создать Центральный сервер 1с:Предприятие 8.1
(13) Сервер 1С:Предприятия и http сервер — это совершенно разные вещи. 1С в основном общается через порты 1562-1564 (а не 80 как у http) и формат передачи данных совсем не http (это протокол гипертекстовой разметки документов). Консолью кластера постоянно пользуюсь, так обслуживаю клиент-серверный вариант 1С, но никогда не отожествлял его с http.
Спасибо. Вы правы.
Тогда навеоное можно создать сокет, что считается элементарным.
При этом можно коннектится через инет.
(15) Обработка так и делает — коннектится через инет посредством драйвера ODBC, который и создает сокет.
И опять Вы правы. Здорово, отлично!!!+
Разрешите еще вопрос.
Вы упомянули web-компоненту.
Я понимаю так: web-компонента и возможно другие варианты — это все удобно для соединения с пользователями(посетителей сайта). Иначе говоря: Для обмена данными, Ваш вариант можно считать самым безопасным, быстрым, универсальным и перспективным.
Еще как-то (сегодня что-то туплю) не могу прочувствовать и сравнить с обменом данными через SOAP(достоинства, недостатки).
Извините если я не в тему, но мне это интересно.
я чтото не понимаю причем тут http вообще, коннект к базе должен идти по другому протоколу вообще 🙂
на 8.2 у меня работает, правда тестировал только на локальной машине, инетную базу не пробовал, но не думаю что тут должны быть проблемы, ведь настройки указываются в ODBC
(18) Веб компонента — спец компонент 1С для работы с формами 1С и БД 1С посредством браузера, то есть создаётся http сервер, который висит на 80 порту и при обращении к нему фомирует веб страницы с формами как будто работаете в 1С — интерфейс практически 1 в 1 как в 1С. Все данные сразу переносятся в рабочую базу данных SQL сервера. Но все эти формы создаются заранее, и их создание есть большой геморой, имхо.
SOAP — это как я понимаю XML ориентированный протокол обмена, поэтому данных передается сильно больше (надо передать всю структуру связей параметров). И кто будет организовывать связь посредством SOAP? Если драйвер ODBC связывается напрямую с MySQL сервером и оперирует его командами и методами (никаких доп программ на сервере не нужно), то организовывать связь по SOAP придется вручную, то есть писать какой-то обработчик на сайте (вероятно на PHP), на который бы шли команды из 1С в виде GET или POST запросов, этот обработчик и должен вносить изменения в базу MySQL или читать базу и переводить полученный результат в XML и отсылать обратно. По моему это сильно сложнее и медленнее. Хотя есть и один плюс — если хостер не дает прямого доступа к MySQL, то доступ через SOAP никак не перекрыть. Это чисто мое видение проблемы, я могу и ошибаться, так как никогда не работал с SOAP.
(19) Согласен 🙂
С http я сбойнул.
Просто ищю общий механизм для ВебКлиента и обмена данными.
(20) так суть этого метода ведь в том что не нужно никакие php обработчики не надо формировать xml, написал запрос и все 🙂 что надо получил, что надо записал
я вообще безумно рад что наконец написали эту штуку, писать обмен через ws это ещё те заморочки…
я давно искал подключение к mySQL — будем смотреть, изучать)))
(24) Смотрите на здоровье, там все очень просто и комментариев я там насовал достаточно много.
Спасибо автору! Реально полезная вещ!
Работает все отлично. Из доработок я бы добавил ОписаниеОшибки() в сообщении об ошибке подключения, т.к. пока не добавишь разобраться в слепую в чем проблема подключения не представляется возможным. Также, на всякий случай, в строку соединения добавил версию драйвера «Driver={MySQL ODBC 3.51 Driver};» (к стати использовать нужно только версию 3.51, на более поздних не работает). Для тех, кто подключается к базе удаленной (например, расположенной на платном хостинге), необходимо добавить ваш ip в список разрешенных для доступа к базе хостов. В cPanel вкладка называется «Удаленные узлы доступа к базе».
Ссылка на скачивание Драйвера:
Попробую данную штуку на Ораклянной базе