<?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='\
А зачем это все? Какой смысл в этом? На скринах явно видно, что пишется в Base64, но в публикации об этом ни слова .
(1) cool.vlad4, как вариант может пригодится при работе на сервере терминалов, когда открыт только буфер обмена и только перенос текста, тогда можно воспользоваться таким способом конвертации каких либо файлов в текст, перенос на сервер и там обратно превращать в нужный файл 😉
(2) shmellevich,
а какой смысл конвертации ДД в текст для передачи ???
…
вроде бы двоичные данные непосредственно можно передавать с клиента на сервер
(3) Rothschild, «при работе на сервере терминалов» ситуация, когда нужно перенести произвольный файл из своего рабочего ПК на сервер терминалов (не сервер, который платформа 1С), какой может быть клиент-сервер если вы находитесь в разных сетях, тем более закрытых друг от друга, и еще хуже на сервере терминалов отключен выход в интернет, а есть только открытый буфер обмена.
Как вариант реализации, а точнее расширение ее функционала, добавить еще окошко для ввода и вывода текста на конвертацию.
(4) shmellevich, какие-то надуманные проблемы. если сеть моя — я себя обеспечу и блэкджеками и шлю*ами, если не моя, я скажу, чтобы меня обеспечили. а работать, создавая себе какие-то бредовые трудности — это самого себя не уважать.
(4) shmellevich, вы еще скажите, что http передавать через буфер обмена, раз там интернета нет.
(5) cool.vlad4, Я тоже когда то так думал, когда сам с своих руках все держал. Но на практике бывают самые разные ситуации, и нет желания ждать несколько дней, когда среагирует аутсорсинговая контора, шоб обеспечили нужным набором благ… так шо если у вас всегда все необходимое имеется, я за вас только рад.
(1)(3) полностью поддерживаю предыдущих ораторов.
(7)
работает без 1С
Коллеги, это всего лишь мелкий инструмент, и мне несколько раз приходилось им пользоваться, при решении основных, первостепенных задач…
как минимум нас двое (я и shmellevich), кто не считает его бессмысленным..
был бы инструмент, а уж применение найдётся! 😉
(9) ddens, ну ок. только 1С не самое лучшее решение. какой-нибудь notepad++ (к тому же бесплатный и существующий в портативном виде) лучше подходит под озвученное решение некой задачи .если же файл огромный (несколько гигов), то notepad++ не подойдет…но так 1С тем более.
(10)
хотел бы я посмотреть на винду, когда base64 представление несколькигигового двоичного файла будет пихаться в буфер обмена 🙂
(11) andrewks, это я так подкалываю)))
(10) cool.vlad4, в тот момент мне проще было написать эту обработку в три строчки, чем искать что- то подобное в сети
Ps написал на том что было под рукой, вы ( как программист) наверняка имеете в своем арсенале подобного рода фитюльки 😉
A! Я понял к чему вы клоните…
Граждане, Как опубликовать бесплатную публикацию?
(14) ddens,
Фиг его знает!
Я б некоторые файлы тоже бы предпочел бесплатно выкладывать
как ссылка для скачивания в тексте статьи.
…
В настройках файлов к статье есть цена файла,
с переключателем с возможных значений, который
(покрайней мере для простых смертных)
состоит из одной, заботливо выбранной опции: «1 старт-маня (рекомендуется)»
(15)
Докопайся до техподдержки, если добъешься чего —
— надеюсь, поделишься с коллегами.
🙂
Когда я работал во франче один раз довелось столкнуться с такой проблемой и я подробно описал этот метод во внутренней базе знаний франча.
Идея в том, что на терминале нет ничего стороннего и скачать на него ничего нельзя, но есть 1С и написав простенькую обработку из пары строк получаем нужные данные без особых проблем.
Таскали через терминал кусками мегабайт по 5 даже большие cf-ники.
(0) Автор не из ЭР случаем?
(17) Антон Ширяев, Спасибо ;-)… не, не знаю что такое ЭР… я из Иркутска, про ЭР ничего не слышал. 😉 тоже много лет проработал в местном франчайзи…
(15) Rothschild, задал вопрос модератору — ответили что сейчас возможно только два варианта публикации за см и за рэ.
цитирую:
Здравствуйте! У нас сейчас есть только два варианта — выложить файл за стартмани (загрузив на закладке Файлы) или за рубли (тогда нужно заполнить закладку Магазин, прикрепить платную программу туда, полностью оформить публикацию — описание, скриншоты и заключить договор с нашим отделом продаж, позвонив 8-800-5555-256, звонок по России бесплатный)
(14) ddens, не, не поняли. она и задаром не нужна, честно говоря. ну кто будет искать в интернете эту обработку, когда быстрее самому написать аналогичных 2-3 строки кода)))
(20) cool.vlad4, ошибаетесь, коллега — целых 3 скачивания! …кому-то все же в облом эти несколько строк в конфигураторе.. 😉