<?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='\
Очень пригодилась.
А нельзя ли добавить что-то типа истории версий? До этого работал с версией 2.0.1 проблем не было. В чем отличия версии 2.1.2? А так — очень помогает, спасибо. +1
Спасибо!
для 8.1 версию дождаться реально?
Отлично!
поддерживаю уважаемого shachneff — можно ли ждать для 8.1?
Ждем для 8.1 … очень ждем!!!
забирайте для 8.1
проблема с кодировкой при записи в базу mysql, кириллические символы превращаются в «?», в базе стоит кодировка cp1251, даже если в запросе при записи в базу писать CONVERT(‘наим’ USING cp1251), все равно записывается как «?», что делать??
заранее спасибо…
разобрался, простите за флуд…
Подскажите, какова максимальная длина запроса, который будет успешно обработан?
Не хочет коннектиться к базе мускула.
1С уходит в себя и потом пишет ошибку.
И так, и сяк плясал с бубном. Ни в какую.
Что-то, с чем-то не совмещается.
Сервер, логин и пароль все рабочие и т.д.
Подключался из 1c 7.7
(12) Хостинг позволяет подключение с любого ip? Может нужно прописать в правило доступа к серверу свой ip
(13) Medvedik,
Спасибо за ответ.
Давайте попробую ответить вот как.
Через phpmyadmin базой я управляю без проблем.
Так же через скрипт php подключаюсь к базе, могу сформировать запрос к таблицам, с выводом результатов на экран.
Предполагаю, что подключение возможно с любого ip. Это моё предположение. Возможно я ошибаюсь.
(14) с большой вероятностью — ошибаешься. Хостинг чужой верно? Узнавай у них, но как правило прямой доступ они запрещают.
(14) Вероятнее всего, вы ошибаетесь. Свяжитесь с тех. поддержкой хостера, пусть подскажут, как прописать ваш ip для доступа с него к БД
(15) cool.vlad4, (16) Medvedik,
Да, хостинг чужой!
http://radyx.ru/
Использую бесплатный хостинг от
Это для отладки, экспериментов и т.д.
Но скажу по секрету, что использую так же платный хостинг отhttp://masterhost.ru/
И туда не могу попасть через ВК.
В голове рождаются следующие мысли:
1. Вряд ли захочется бесплатному хостеру каждому встречному-поперечному давать прямой доступ к базе скула.
2. Пол беды, доступ с работы к БД, ip постоянный. А из дома получится совсем засада, потому как дома выделяется динамическая статика.
Буду признателен за ваши мысли по этим пунктам!
(17) ssh доступ есть?
(17)
1. Именно
2. Это сейчас не дорого, можно и домой заказать. Мне не часто нужно обновлять прайс, я руками прописываю текущий ip раз в неделю.
(18) cool.vlad4,
Для тех кто в каске, как я, поясните про ssh доступ.
Как мне его проверить.
Могу предложить следующее, если есть время и желание.
Проверить возможность доступа к MySQL базе от Вас. 🙂
(19) Medvedik,
Всё равно как-то неудобно. 🙂
(20)спросить у провайдера, можно поднять туннель ssh(пробросить порт mysql), — как? прочитать в инете
http://yandex.ru/yandsearch?text=%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF+%D0%BA+mysql+%D1%8 7%D0%B5%D1%80%D0%B5%D0%B7+ssh&lr=213
Я бы объяснил, подробнее, но время…если это сделать — то хоть по ADO можно цеплятся к базе, и относительно безопасно.
(20) сам по себе masterhost поддерживает ssh. Вот их инструкцииhttp://masterhost.ru/support/doc/mysql/
Скачайте putty и введите данные, которые вам дал провайдер.
(23) cool.vlad4,
Спасибо!
Попробую копать дальше! 🙂
Потом расскажу, чего выкопал. :-)))
Спасибо автору аз проделанную работу! Особенно за исходники
Здравствуйте, подскажите почему не работает запрос:
INSERT INTO modx_site_content ( type , contentType, pagetitle , longtitle , alias , parent , published , isfolder , richtext , template , searchable , cacheable , hidemenu ) VALUE ( ‘document’ , ‘text/html’ , ‘Крышка на ведро 50 Консенсус’ , ‘Крышка на ведро 50 Консенсус’ , ‘Kryshka_na_vedro_50_Konsensus’ , ‘22528’ , ‘1’ , ‘0’ , ‘1’ , ‘6’ , ‘1’ , ‘1’, ‘1’ );
SET @lastID := LAST_INSERT_ID();
INSERT INTO modx_site_tmplvar_contentvalues ( tmplvarid , contentid , value ) VALUE ( ‘4’ , @lastID , ‘assets/images/Catalog/10742.jpg’ );
INSERT INTO modx_site_tmplvar_contentvalues ( tmplvarid , contentid , value ) VALUE ( ‘5’ , @lastID , ‘assets/images/Catalog/Preview/10742.jpg’ );
INSERT INTO modx_site_tmplvar_contentvalues ( tmplvarid , contentid , value ) VALUE ( ‘6’ , @lastID , ‘10742’ );
INSERT INTO modx_site_tmplvar_contentvalues ( tmplvarid , contentid , value ) VALUE ( ‘7’ , @lastID , ‘6,38’ );
Выдает ошибку:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘SET @lastID := LAST_INSERT_ID();
INSERT INTO modx_site_tmplvar_c
И заметил, что пакетный запрос, вообще не отрабатывает! Как решить проблему?
(26) igor_kav,
попробуй
Select @lastID:=Last_insert_id();
с пакетным запросом решить не удалось
только последовательный запуск по одному запросу
(27)
Спасибо за ответ, сейчас попробую.
Скажите, какая скорость работы данного метода?
Если нужно, например, залить в базу 2000 строк.
Спасибо!
Кто то пытался с ней работать в фоновом задании?
Вылетает при попытке загрузить компоненту: «Ошибка при вызове метода контекста (ЗагрузитьВнешнююКомпоненту)». При интерактивной работе все работает замечательно.
(30)
Компонента требует полных клиентских прав (так как в ней есть обращение к самой 1с для создания объектов 1с) — а фоновые задания выполняются на стороне сервера — и не имеют клиентского контекста. Эту проблему можно решить запуском 1с по расписанию с передачей ей параметра на запуск внешней обработки — которая уже и использует компоненту
тем, кто как я столкнулся с падениями 1с в паре с этой компонентой под обычным пользователем (без прав администратора):
нужно пользователю дать права на «Использовать 1С в качестве OLE Automation сервера». по умолчанию такие права не установлены. и сразу все падения прекратились.
огромное спасибо serguey_again, автору, за оперативную помощь в решении этой проблемы.
Под управляемые формы работает?
А где и как можно увидеть методы для работы с компонентой?