<?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='\
>>>Основной трудностью, с которой пришлось столкнуться и решать, явилось извлечение изображений из справочника ХранилищеДополнительнойИнформации.
это потому что освоил C#, но не стали изучать 8ку
задолбал, минус
>Разработчикам следует более пристально приглядеться к стандартным механизмам сохранения в 1С файлов на предмет совместимости с другими общедоступными технологиями
Зачем? К чему это все?
Может для таких случаев проще использовать общую папку с картинками?
(1) gilv, есть что по делу сказать без эмоций? Можно подумать, что я бегаю конкретно за вами и упрашиваю читать мои публикации 🙂 . Может лучше не читать вам мои заметки, чтобы не расстраиваться и «не задалбываться»? Заметьте, я не захожу в каждую вашу публикацию и не оставляю гнусные комментарии. Хотя и в вашем случае можно выдрать отдельную фразу из контекста и на славу покритиковать ее, как поступили вы в данном случае.
Поясняю: в названии статьи используется выражение «прямой доступ», это означает, что речь в ней идет о прямом доступе к базе данных MSSQL без участия 1С. Трудности, о которых говорится, относятся к получению содержимого файла изображения именно из базы данных МССКЛ через, например, C#.
Поясняю для Gilv 🙂 : Базовое образование в сфере ИТ, сертификат по 1С и опыт работы с 1С к статье прилагаются. Опыт работы с С++, С# прилагаются также.
Пиши:
ЗАЧЕМ это нужно, почему другие варианты не подходят
далее — почему выбран именно этот метод, какие есть альтернативы
какие плюсы и минусы выбранного метода решения задачи
пока по тому, что далаешь, не видно всего выше перечисленного
а что получается в результате,
мне постоянно приходится на проектах разгребать подобные «подделки», потому что новички как следует не разобравших ТАКОЕ творят, что иногда проще вместо исправлений вообще все заново написать
когда что то выкладываешь, надо осозновать ответственность за возможные последствия
уж молчу про нарушения лицензионной политики, тут и без нее видно кучу технических проблем, которые вызовет предложенный подход как в этом посту так и в других
(2) Извиняюсь за задержку с ответом. Предложенное мной решение хорошо интегрируется в стандартные механизмы 1С. Т.е. добавленные изображения выложенной обработкой нормально отображаются из 1С, но вместе с тем имеют достоинство — к ним можно без проблем обратиться методом прямого доступа (ПДД).
Случай с общей папкой — это тоже вариант. Но в данном случае имеет, как мне кажется, больше недостатков: если хранить все изображения только в общей папке, то необходимо дописывать конфигурацию 1С, чтобы отображать в них изображения. Если хранить и в информационной базе 1С и в общей папке, то получается избыточность и нужен посредник, выгружающий все изображения из информационной базы в общую папку. Посредников я не люблю.
Метод с общей папкой имеет право на существование, но как мне кажется, не в случае, когда есть прямой доступ к БД. А, например, в случае удаленного веб-сайта.
(4) Ни я и никто другой на Инфостарте не несут ответственности за то, что натворят другие, выкладывая разработки по принципу «AS IS» (как есть). Пусть за это несут ответственность их непосредственное руководство. Это первое.
http://infostart.ru/about/ и впредь будь добр «создавать атмосферу доброжелательного общения».
Второе, с каких это пор ссылки на статьи должны быть оформлены в виде научных статей с введением, описанием аналогов, выводами?
Третье, что касается лицензионного соглашения. Разговор об этом с тобой был уже в других постах. С твоего молчаливого согласия пришли к выводу, что лицензионное соглашение 1С нарушает Гражданский Кодекс РФ, где сказано, что владелец базы данных может обращаться к ней любыми способами. Но возникает другой закономерный вопрос, почему из 60 тысяч пользователей Инфостарт только тебя заботит судьба этого нового спорного пункта лицензионного соглашения?
Четвертое, почитай раздел Цели Инфостарта
Пятое, когда освоишь .net framework, о котором идет речь в моих публикациях, мы сможем с тобой на равных обсудить «технические проблемы» всех моих публикаций. Потому что .Net нормально внедрили в С++, Visual Basic, Delphi, Python, Ruby, Axapta и особых проблем в них не возникало.
интересные костыли.
(7) Действительно «костыли», лучше определение не подберешь
чет Гилев выделывается дофига.Понаполучал сертификатов и строит из себя бога