<?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='\
не работает для подчиненных справочников..
+1 исправь на ОбрабатываемыйСправочник.ВыбратьЭлементы(0);
(2) ОК, поправил, спасибо
И еще, неплохо бы, хотя-бы нумер документов править…
+4 и Кода у справочников…
(5) А смысл? Перенумераторов хватает. Зато ориентироваться по номерам или кодам будет можно при поиске ошибок.
(6) Ну, по кодам /нумеру дока влёт восстановишь наименования…
а вот без них — ужо полный аут..
А кода-нумера на всех бумажных носителях — прайсы/накладные…
+7 а так будет свой код/своя нумерация…
Так точно не докапаются, что базу слил..налево..
(7)(8) Так теряется весь смысл обработки. Передают обработанную базу в поддержку, а потом говорят — «косяк в документах с контрагентом «0000100»». Поддержка не знает ни наименования, ни вообще ничего о реальном контрагенте. А как вы предлагаете — никто ничего никогда не найдет:) Смысл?
(8) Скорее всего, для выявления ошибок в клиентских базах, перенумерация не так актуальна.
(9) Ну как, тупо взять ID например за основу кода… всё лучше, чем открытый код/нумер дока..
И вообще, смотря для каких целей и кому сливать базу…
Имхо.
+11 Еще неплохо бы выкусить период какой нить… а то в оборотке/в регистрах всё самое вкусное и валяется..
(12) Что там интересного?:) Был «Газпром», стал «010101».
(13) Я наковырял прайс и вычислил, что 010101 — это код газпрома… продал васе на 13 триллионов…
(14) Откуда наковырял? Есть только обработанная база
(15) Счет фактура/торг 12 … код клиентоса завсегда можно поднять…
(16) Так и представляю сопровожденца-Штирлица:) Для этого надо сгонять в фирму-владельца базы и прошмонать все по боевой базе. Если допустят.
(17) Нужно просто исключить все лазейки… имхо, а наковырять коды..плёвое дело..
(18) Хорошо. Допустим, поменяли все коды справочников и номера документов. Клиент звонит: неправильный расчет НДС в с/ф 100. Как мы ее искать будем? По сумме догадываться?:)
(19) я предлагал внутренний ID пихать в кода/нумера документов..
ищется всё не быстро, в очень быстро…
🙂
(20) Т.е. клиент должен сказать: проблемы в с/ф с ID «5X6W»? Или я что-то не понимаю?
(21) именно… Так по крайней мере — полная конфедициальность, по крайней мере невозможно определить по бумажным носителям ничего…
+22 Возможно, это паранойя — но я бы делал так..
А откуда бух Марья Ивановна узнает об этом ID? Откроет dh*? Или пусть в копии отправленной на поддержку базе найдет свой документ? И еще. Все-таки я не понимаю — откуда появляются бумажные документы?
(24) Ээхх… узко мыслишь…Кнопочку нажмет — посмотреть ID и привет..
А бумажный носитель тебе любой торговый даст..
или магазин..
и прайс лист с кодами номенклатуры — сама фирма. у который ты базу взял…
🙂
Автор же не указал — для каких именно целей и кому он базу собрался таким способом отдавать… мот конкурентам.. для продажи.. да мало ли…
🙂
+25 и обработка в 2 строки кода select from where … найдет сам объект по ID
(25) 🙂 Если конкурентам — зачем обработка? Чтобы совесть не мучила?:)
(27) Нет.. обработка — если на поддержку… чтоб когда марь ивановне сказали — ошибка в документе «qwe45» она с помощью обработки нашла документ по ID. ..
(28) Это Марья Ивановна должна поддержке сообщить ID документа. Ведь ошибка у нее. А саппорт по нему док у себя в базе найдет
(29) Ё… я и грю обработка + кнопка… по кнопке посмотрет ID объекта, если нужно по ID найти сам объект — запустит обработку… а кто — не важно…
(30) А потом спросит ненавязчиво про код контрагента — и пошло-поехало:)
не ну на сколько я понял это для аудиторов все верно???
тогда все каменты выше верны на 100%
(32) Как раз аудиторов это касается менее всего. Просто довольно часто встречаются ситуации, когда для поиска ошибки необходимо предоставить информационную базу. Не всегда это можно сделать без боязни, что твои данные попадут в надежные руки. А получив базу без контактной информации (пустые ИНН, измененные даты рождения или штрих коды) будет спокоен и клиент и доволен внедренец.
tomvlad — клевая идея! заморочься уж и для восьмерки сделай, что ли!
(34) Вот как раз для 8-ки делать-то ничего и не нужно. Она уже есть, причем давно, и находится на диске ИТС
Такую вещь сам планировал делать, а, оказывается, уже есть.
(35) век живи — век учись, а дураком помрешь 🙂
В чем схожи священник, врач и адвокат?
Если с ними работают, то выдают им всю информацию без утайки, либо — нет доверия, нет работы.
Можете добавить к этой тройке внедренца.
Требовать качественного внедрения закрывая инфу — бред:))).
(38) И кто от тебя чего-то требует? Не всякий клиент пойдет на предоставление информационной базы, например, с черной зарплатой.
как пример… конфа на конфе работали несколько прогеров разного уровня..
появилась необходимость перенумеровать справочник.. пришёл франч…..
Все работа встала потому как в 50 строках были явно указаны коды элементов… Я понимаю что кданной обработке это уже не относится но просто имейте ввиду когда будете пользоваться.
(41) Александр, я пардон, сильно извиняюсь, профессионалу не приходилось сталкиваться с тем, что клиент базу отдать не соглашается (намекая на ее ценность), а ошибку исправить требует? Причем на рабочем месте клиента или нет возможности работать или нет условий. Вопросы «стырить» здесь не рассматриваются. А вопрос про инспекцию вообще мог родиться только в воспаленном воображении.