<?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='\
В данной статье рассматривается пример работы с СУБД Oracle через OracleInProcServer.
Перейти к публикации
Всё это хорошо. Но где же анализ ?
Сравнение с другими способами ? (ВнешниеИсточникиДанных,ADODB)
Зачем нам нужно такое соединение ? В чем его выигрыш ?
В клиент-серверном варианте я должен устанавливать клиента Oracle на каждом клиенте 1с Прелприятия ?
В моем случае такое соединение как раз пригодилось.
По факту такой способ позволяет формировать запросы с необходимыми параметрами.
Во вторых, у меня на части машин ODBC не работает.
Клиент Oracle необходим даже при ODBC коннекте.
Однозначно необходимая вещь.
валится на строке
session = Новый COMОбъект(«OracleInProcServer.XOraSession»);
все установил что только можно
{Форма.Форма.Форма(4)}: Ошибка при вызове конструктора (COMОбъект): Недопустимая строка с указанием класса: Недопустимая строка с указанием класса
(3) pri_hod, он не видит класс OracleInProcServer.XOraSession, попробуй удалить и заново поставить клиент Oracle, если не поможет попробуй на другой машине, возможно винда моросит у тебя.
проблема в клиенте оракл. нужно использовать 32 битную версию
Зачем тут какие-то сравнения с другими способами подключения?
Вещь действительно необходимая. Я вот использую на данный момент такое же подключение к БД Oracle, только работаю через внешние источники данных (пришлось, конечно, попотеть, чтобы подключить БД — получилось только через клиента Oracle тот, который в Ora92 ставится)
Добрый день.
А что делать, если используется 64-разрядный сервер? Пробую — при создании COMОбъекта 1с рушится. 1с — файловая.
добрый день.
При попытке подключения выдает ошибку ORA-12154: TNS:невозможно разрешить заданный идентификатор соединения
клиент версии 10. sqlplus подключается без проблем.
Не подскажете куда копать?
…oracleora92
etworkadmin
В основном проблемы могут быть тут.
Сам провозился с подобной ошибкой неделю.
Снес «все» оракл настройки, заново сконфигурировал, не работало. При этом на другой машине где только что оракл поставили, завелась без проблем даже на 64 бит.
Проверка на работоспособность это обычная попытка ODBC подключения. В ней можно построить строку подключения и использовать ее.
В инете много статей по этому поводу.
Дополнение есть — Ввиду сложности полноценной настройки С НУЛЯ Оракла, не хватает добавить инструкцию по установке Oracle Objects for OLE и ODBC. Я работал всё время с MS SQL — просто прелесть, с «первой буквы», вышла нужда подключаться к базе Oracle с 1С, для меня это вышла большая ЖОПА, 3-ий день уже долблю долбанный ОРАКЛ, сотни вкладок, часы и тоны инфы (кто то неделю, кто 2 недели). Сложновато с нуля его, вот была бы путная статейка.
Я работал с ораклём через InstantClient’а — на 64 бит повозиться пришлось, но настроил в конце концов…
Там хитрости в наличии длл, путях (точнее расположении нужных каталогов в порядке указания путей) и настройке TNS
Установил ODAC 11.2, дела продвигаются, кстати, кто нибудь знает, при открытии этой обработки выдаёт сообщение: «Запуск программы невозможен, т.к. на компьютере отсутствует OCI.DLL…» Запускается терминально на Сервере, OCI.DLL Закинул уже и в System32 и в папку 1c, есть у кого нибудь опыт борьбы с этим?
(11) DenisCh, Оо, а какие хитрости?
(13) freebsdd, минимальный клиент не содержит каких-то длл (их я искал через depence browser), пути к бинам должны быть первыми в переменной Path, ну и правильно настроить TNS — но это меньшая из всех проблем…
(14) DenisCh, а правильно настроить TNS, это только файл tnsnames.ora или ещё что то?
(15) freebsdd, он самый, насколько я помню…
(16) DenisCh, Вижу это давно было :))) Буду продолжать настраивать ДОракл! Спасибо Вам за советы!
Спасибо за статью, очень вовремя нашел!
Подскажите какой клиент лучше использовать и будьте так добры выложить его тут.)
(19) ben_art, Качай с сайта Oracle, там он в свободном доступе есть.