<?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='\
Скажите пожалуйста как создать ODBC соединение и где прописать путь к базе? Извиняюсь за ламерский вопрос, но яне понял.
Пуск — Администрирование — Источники данных ODBC
Там вкладка «Пользовательский DSN» жмем добавить, выбираем драйвер (dBASE Driver ). Затем выбираем каталог (указать каталог с базой данных), задаем название, например, «DbfScruber», версия таблиц — 5.0.
Дальше все должно заработать, только не забудьте указать правильную дату в ini файле.
Не заработало. Выдал ошибку: [Microsoft][Драйвер ODBC dBase] Индекс не найден.
Довольно странно, индексы для удаления вообще не используются. Кроме указания каталога и названия, ничего менять не надо, хотя там, в настройках ODBC, и есть возможность выбрать индексы, их не нужно указывать, поскольку все-таки у 1С формат немного другой (Fox).
Кто-то пробовал уже? Поделитесь удачными свертками…
В идеале, конечно, надо использовать Microsoft Visual Foxpro ODBC Driver, хотя, повторяю, ODBC dBase, тоже будет работать. Если что-то не работает — ковыряйте свой ODBC, для этого и сделано разделение. Программка просто выполняет нужные запросы.
«Обработка структуры 1Cv7.dd» останавливается на 1% или 11% и ошибка:
[Microsoft][Драйвер ODBC dBase] Индекс не найден.
Пишите, пожалуйста, на адрес sbs@sbs.com.ua. Мне необходимо повторить ситацию, для этого надо знать:
1. Версию драйвера
2. Операционная система
3. Появляются ли документы после анализа dd файла?
Все было проверено мной на W2k3 / W2000 / Win XP без SP —
работает четко.
Только что проверил на лицензионной Win XP SP2 со всеми последними обновлениями, чем черт не шутит 🙂
Все работает четко.
После нажатия кнопки Анализ, пишет ошибку «Обработка структуры 1Cv7.dd» 2%», и сообщение об ошибке «Run-time error ‘-2147217900 (80040e14)’: [Microsoft][Драйвер ODBC dBase] Индекс не найден.». Я уже по всякому перепробовал настраивать драйвер и все равно одна и таже ошибка. (Windows XP Pro SP2, 1C v7.7.008, размер базы 1,7Гб., драйвер Microsoft dBase Driver (*.dbf))
Автор .., а вы не могли бы пояснить, работает ли ваша программа с Регистровыми базами ??? .. я так догадываюсь, что ваша программа только для бухгалтерского учета.
Работает с регистрами тоже.
Почему не работает в вашем случае не могу сказать.
Попробуйте другие драйверы, которые понимают dbf.
Возможно, что-то с ADO или MDAC…
Если я не ошибаюсь ADO и MDAC .. это не дрова …а архитектуры доступа к БД.
почему-то удалилось все содержимое документов, а сами документы остались. что делать ??
Видимо, повторить. Для начала. Скорее всего, не закончилась очистка 1SJOURN.DBF.
Автор, вы мне ответите что нибудь по моему вопросу или как ??? Еже ли дело только с драйверами доступа к БД, то посоветуйте где их можно взять !!!
Для Denton. К сожалению, поскольку у меня никогда не возникала описанная ситуация, я не искал пути ее решения. Если Вам удасться решить вашу проблему — напишите сюда. Могу так же выложить исходные коды на VB, кому интересно.
В VB я не силен и проблему не смог решить, но было бы очень не плохо, если вы автор опубликуете подробную статью как работает ваша программа.
Исходники где можно посмотреть? Вещь хоть и сама по себе несложная , но интресная с точки зрения обучения VB и 1С.
Все живет, все работает. Автору сенкс и +1
Хотелось бы тоже самое, но только с пометкой на удаление, а не физическое удаление из таблиц
+1, а исходники можно ??
Исходники выложил как есть, однако на комментарии не рассчитываем — давно это было
Прошу прощения, а вот этот пункт каким образом можно выполнить? «7. Переносим остатки на утро указанной даты.»
Мне помогло решить проблему с индексами: [HKEY_LOCAL_MACHINESOFTWAREMicrosoftJet4.0EnginesXbase]
«BDE»=dword:00000002
У меня такой вопрос: я не могу перепровести те документы, которые остались после чистки, т.к. нет ничего на остатках. Может, нужно сразу провести документы с остатками??
У меня такой вопрос: я не могу перепровести те документы, которые остались после чистки, т.к. нет ничего на остатках. Может, нужно сразу провести документы с остатками?? И еще: при тестировании проверять физическую/логическую целосность, производить пересчет итогов и служебной инфо, или только упаковку?
С предыдущими вопросами разобралась. Только появилась новая проблема: база не проходит тест на логическую целосность. Как можно ее решить?
После обрезки базы «комплексная» сбилась нумерация, теперь новый созданный документ записывается номер 0000000001. Ну и так как этот номер уже существует ругается что номер не уникальный. Каждый раз поправлять номер тоже не айс. Может кто подскажет как исправить проблему?
хорошо справляется с поставленными задачами, мне очень сильно помогло при свертке базы 🙂
Пуск — Администрирование — Источники данных ODBC
Там вкладка «Пользовательский DSN» жмем добавить, выбираем драйвер (dBASE Driver ). Затем выбираем каталог (указать каталог с базой данных), задаем название, например, «DbfScruber», версия таблиц — 5.0.
Дальше все должно заработать, только не забудьте указать правильную дату в ini файле. при тестировании проверять физическую/логическую целосность, производить пересчет итогов и служебной инфо, или только упаковку?
Работает большое спасибо