<?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='\
Не забываем ставить +
а транслятор SELTA@etersoft нужно использовать? 🙂
Спасибо, +
SELTA@Etersoft выполняет трансляцию SQL-запросов из диалекта T-SQL (MS SQL Server) в PgSQL (PostgreSQL), что позволяет программам, предназначенным только для работы с MS SQL Server, функционировать и с PostgreSQL. На практике это означает, что теперь «1С: Предприятие 7.7 SQL» может хранить данные в PostgreSQL. Решение SELTA@Etersoft предназначено для работы как в MS Windows, так и под GNU/Linux (при использовании WINE@Etersoft SQL).
Транслятор реализован в виде ODBC-драйвера PostgreSQL, который представляется как ODBC-драйвер сервера MS SQL, и разбирает запросы, обращения к системным таблицам, адаптируя их для PostgreSQL. Таким образом не требуется вмешательства ни в сам сервер, ни в клиентскую программу. ODBC-драйвер выполнен в виде DLL-библиотеки, что позволяет использовать данное решение как в WINE@Etersoft под GNU/Linux, так и в Windows.
Убери пробелы.. Все таки есть и пользователи Firefox-а
WINE@Etersoft не ставил так подключаюсь к базе и меняю реквизиты.
У меня postgreSQL как процессинг, там хранятся данные о дисконтных картах:
устанавливаю соединение из кассовой программы получаю данные, обрабатываю их и записываю.
Спасибо!
Спасибо!
Попробую установитью
Автору.
у меня в БД на sql один справочник огромного размера и постоянно растет (программа собирает информацию из интернета). На сегодня в нем более 1000000 эл-тов. SQL иногда сбоит, друг посоветовал поставить PostgreSQL.
Если возможно, в двух словах, будет ли толк и как использовать Вашу обработку для этого. Спасибо.
Это просто пример установки содинения с БД под управлением pgSQL, в дальнейшем получение и изменение дынных необходимо дописывать учитывая специфику конфигурации.Данные можно получать так же как и при работе с SQL — sql запросами или использовать recordset. Соответственно есть методы и для записи.
Я пока слабоват в применении sql-запросов, т.е. для работы с базой PostgreSQL придется в конфигурации переписывать все обращения на командах PostgreSQL? Если да, то интересно (для примера), как будет выглядеть какая-либо команда и где лучше почерпнуть справочные данные? Но самый важный вопрос — до какого объема информации можно спокойно работать с БД?
На сегодня проблема в том, что на сервер (MS Server 2003) я поставил 8 гиг, винда отдает 7 гиг, но sql на работу больше 4 гиг вроде как не может взять (насколько я понял из настроек). Может, поэтому сотрудники периодически вываливаются из БД. Сервис пак поставили четвертый (на sql). Суть в том, что информация из этого здорового спр-ка нужна в основном последняя, а старая очень очень редко. Может (вроде где-то читал), разделить данные на несколько баз, а потом при необходимости из рабочей БД подсоединять необходимые БД и формировать запросы к ним, рез-ты складывать в ТЗ, а потом в отчет?Интересно будет узнать Ваше мнение. Спасибо.
Честно сказать я не силен по отношению SQL серверов, думаю , что для работы с pgSQL совместно с 1с тебе нужно в инете поискать информацию о SELTA@Etersoft. SELTA@Etersoft — программный продукт, выполняющий трансляцию SQL-запросов из диалекта T-SQL (базы данных MS SQL Server) в PgSQL (база данных PostgreSQL). Я пишу на 1с и немного на delphi, а по поводу pgSQL у меня просто был опыт интеграции с нашей кассовой программой. Суть ТЗ была в том, что информация о дисконтных картах хранится в базе под управлением pgSQL и мне необходимо быо при предоставлении скидки брать информацию из нее, что я и сделал. Просто, основная проблема — это установка соединения с базой, точнее главное правильно настроить источники данных ODBC, тобиш драйвера ADO, отвечающие за соединение с БД, через которые в дальнейшем методами 1с «коннектишся к базе» и выполняешь все необходимые тебе операции(проблема в 1с — это правильно задать строку инициализации при подключении, кодировки ANSI или OEM,порт и т.д.). Это и привело к написанию этой обработки. Естественно все козыри в ней я в ней не раскрыл, написал простенькую обработочку в помощь людям(эта доработка все таки стоит денег и не маленьких), просто подумал, что люди которые работают с SQL могут написать стандартные SQL запросы и т.д. Но если что могу тебе скинуть другой примерчик обработки, выполняющей изменения в БД под управлением pgSQL.
Еще: думаю, что у тебя стоит 32 — битная система? Вот для нее заявлено, что SQL Server поддерживает работу до 16 гигов! Но в реале 3,5 гига! Если хочешь больше ставь 64 — битную.
(14)
Спасибо, надо обдумать, а вообще, критический объем БД для SQL не подскажешь?
ты б хотябы плюс то мне поставил
а где взять дрова под постгри 8.2.3 и как их корректно настроить? а то я для ХР воспользовалсяhttp://www.citforum.ru/database/postgres/windows.shtml — и что-то не подключается по данной обработке. Если кто знает-ответьте плиз в асько200471583
при установке самой постгрии дровни сами должны стать просто надо настроить доступ через источники данных(ODBC).
Я уже и забыл про эту доработку, клиенты что то отказались. Сейас работаю над интеграцией CGI и 1с, если кто то сталкивался оставте комент или кто бедет делать могу подсказать.
«соединение» — это, конечно, хорошо… а есть ли в этой обработке пример получения данных (по запросу), например, в таблицу значений?
(у меня с рейтингом туго и как-то не радует качать только чтобы убедиться нужно или нет)
Интересуети альтернативный вариант.
ODBC — хорошая идея, однако имеет свои явные минусы в виде того, что перебор результатов неудобен.
(19) Lexus, собственно, в таблицу значений оно и выгружает. Мне вот любопытен как раз вариант выгрузки данных из 1С в базу постгреса. Не сталкивался ли кто-нибудь? Подозреваю, что ODBC драйвер из этого примера не даст возможности внести данные в базу постгреса… Буду пробовать.
P.S. Понимаю, что некропостинг, но вопрос актуален, может кто и ответит…