<?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='\
Такая подача материала характеризуется очень просто — «в час по чайной ложе».
Если быть честным до конце, то это просто халтура.
мое мнение может не совпадать …бла бла бла.
(1) Тролли всегда найдут до чего докопаться. Их мнение меня слабо интересует
(1) Сказал человек, имеющий нулевой вклад в сообщество…
(1) Верну тебе один минус, но все же. Может и по чайной ложке, но из таких маленьких статей, потом можно собрать всю необходимую информации. Если сделать конкретный запрос, получишь ссылку на статью (если она есть) с конкретным ответом. И не придется листать огромную статью, в поисках нужного материала.
А если модераторы пропустили статью, значит какое то право на жизнь она имеет.
Ребят, это же все есть в БСП…
(5) в 2.4?
В 2.3.5 я такого не нашел
(7) Плюсану, но «Не нашел как добавить отбор в элемент»????? что же такое творится то !!!
ОбщегоНазначенияКлиентСервер — живет там не первый год вместе со всем остальным
по поводу первого — сериализатором XDTО не проще воспользоваться для сохранения настроек и всего прочего — благо все сериализуется? Все равно если реквизит сохранятеся в хранилище настроек форм — там то он хранится в сериализованном виде
(5)
(8)
Коллеги, позвольте уточнить, что во второй части публикации основная мысль не «как добавить отбор», а «как установить служебный отбор в списке, в котором уже могут присутствовать ручные и служебные отборы». Я этот служебный отбор назвал Предопределенным. Моя идея в том, чтобы собрать их в группу, а группу узнавать по представлению. Тогда служебные отборы будут жить вместе с ручными и мы не удалим лишнего при переключении служебного отбора.
Подумаю, как лучше сформулировать эту мысль в публикации, чтобы не возникало таких двусмысленностей.
(5)
Немного неточно сформулировал мой вопрос.
Я не могу найти модуль КомпоновкаДанныхКлиентСервер и метод СкопироватьЭлементы().
Установил ещё БСП 3, но не оказалось на компе платформы 12. Чуть позже поковыряюсь. Интересно что там нового появилось.
Спасибо за комментарий. Возможно действительно велосипед, но я ее писал полтора года назад, когда ещё не было новых БСП
(8) настройки динамических списков не сохраняются. Нет там галочки Сохранение, посмотрите повнимательнее.
Если же их сериализовать, то чтобы потом вставить в динамический список, нужна функция копирования отборов. Я такой функции в типовых конфигурациях не встречал. Если встречали вы, то просьба скинуть в каком модуле она лежит и как называется
И кстати, предложенная мною функция копирует не только отборы, а любые элементы настроек. Отборы приведены в качестве примера
(12)
это вы как обычно троллите?
Или сможете привести доказательство, что вы это уже где-нибудь встречали?
полученных знаний.
Слова человека, который прикипел к одной конфигурации и не представляет себе ситуации, когда разработчик может поддерживать десять и более конфигураций одновременно, с разными версиями БСП, с разными режимами совместимости.
(14) если бы могли, то сделали.
А если не хотите тратить свое время — то что вы тут комментируете тогда.
Дело не во времени, а в том, что вы сначала написали, а потом не можете подтвердить свои слова. Так делают обычные балаболы
(15) «лечить» наивность труд неблагодарный, вы должны сами все найти и усвоить, тогда будет толк. Лучший способ это сделать — балаболить.
(16) спасибо за ваши советы, о великий разработчик, зарегестрированный 1,5 года назад даже без аватара.
Буду счастлив, если вы избавите меня от своих комментариев
(17) это ж хорошо, если мои слова делают вас счастливее, а ум пытливым
будет отлично — если вы избавитесь от привычки уходить от темы на личности.
(18)
а дело не в личности, а в вашей компетенции.
Сколько я ни пытаюсь, не могу понять, почему ваши слова достойны внимания. Что вы из себя представляете как специалист. Чем вы отличаетесь от тролля
С любого конкретного вопроса вы съезжаете. Типа нет времени или еще какая причина.
Но зато грязь подливаете вы охотно, причем не только в мою публикацию
(11)
Я про реквизиты формы в целом писал — предварительная сериализация проходит, как еще они иначе храняться=)
(20)
да, прошу прощения, неправильно понял. С телефона читал.
(22) выглядит солидно.
Спасибо большое, чуть позже поразбираюсь.
Возможно вы правы, и велосипед имеет место быть))