<?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='\
а почему это хорошо? И почему модераторы пропускают вообще подобные штуки?
Вы понимаете что выполняя это — вы делаете очень плохо, и в первую очередь — для СУБД? Это же выстрел себе прямо в ногу 🙂
Скройте лучше публикацию пока не поздно и не набежали знающие люди и не влепили минусов.
https://infostart.ru/public/177171/
А сами пока почитайте это
(1) Вот набросился! Влепил бы минус ответу, если бы мог.
1. «модераторы пропускают подобные штуки» — потому что публикация не содержит матюков и проч. Следовательно рассуждать что такое «хорошо» и что такое «плохо» — удел публики.
2. Обработка наверняка использует штатные команды 1С. Следовательно, большого зла не натворит. Советы делать некоторые операции ср-ми СУБД более ответственны.
3. Споры про пересчет ведутся давно. И я не пытаюсь в них вступать. но у меня реальный был случай, когда пересчет ускорил работу отчета в 2 раза. А для чего-то придумала пересчет именно 1С . Только посоветовал бы не делать это слишком часто. В упомянутой статье много написано про фрагментацию.
(1)
Спасибо за статью, но в ней же статье написано:
В статье описаны как положительные стороны так и отрицательные…
В чем проблема, не пойму? Вообще пересчет итогов стандартная функция платформы, и выведена в пользовательский интерфейс любой типовой конфигурации, я всего лишь автоматизировал нажатие кнопки.
Если у вас есть инфа о том что это
для начала сообщите об этом в 1С, пока
на партнерском форуме…
(2)
1. Та понимаю, но от этогоне легче 🙂
2. Не штатные команды, а служебный функционал. Т.е. если человек понимает — что делает, он и сам напишет 5 строк кода, а если не понимает — то можно еще и навредить.
3. Споры о чем? Споры — это когда нет официальной документации, и результаты исследований дают разные ответы. Вот тогда и рождаются споры. А в вашем случае — все уже давно исследовано.
Вы хоть предупреждения напишите, статьи скиньте, или свою оформите, объясните людм — зачем это надо и почему, когда это делать, а когда не стоит это делать, чем это чревато и т.д.
Но вы просто выкинули обработку со стандартным функционалом, как вы выразились. Зачем?
Если бы это было панацеей — то 1С бы сами добавили регламенты в конфу, и всем было бы счастье, разве нет? Но они этого не сделали, вы задавались вопросом — почему?
Плюс — в метаданных обработка называется — «… регистров накопления», в статье написано, что работае и с бухгалтерскими, а еще ниже написано, что тестировалось на УТ11, где нет бух. регистров. Шта?
З.Ы. Не принимайте близко к сердцу, просто хочется видеть более качественный контент, в слудущий раз — напишите мне в личку, я попробую вам помочь оформить хорошую и полезную статью, или остановлю вас от траты времени впустую 🙂 Это не сарказм.
(3) но ниже написано, что после этого надо делать перерасчет индексов, что как бы логично, а у вас я этого не увидел, и если у меня стоит постгря — мне этот код может очень сильно снизить производительность.
http://forum.infostart.ru/forum86/topic81618/message1560967/#message1560967
Почитайте вот этот комментарий:
Т.е. из всей трагедии — вы опиали только один пункт, который помог — только вам, только в одной системе, и только для построения отчета.
а насколько просела запись, например?
Почитайте ветку целиком, включая камменты, и тогда вы познаете дзен 🙂
(4)
Вот именно что штатный. В пользовательский интерфейс кнопка выведена.
Мне понадобилась эта обработка, не нашел ее здесь, сделал, выложил. Может еще кому нужно.
Пруф можно на официальную документацию где написано что пересчет вреден абсолютно. Пожалуйста, возможно я что-то упустил.
Ну в правилах сайта нет такого. Я вроде не обязан никого посвящать, или я опять что-то пропустил?
Автоматизирован запуск в регламенте. Написано же…
По вашему 1С уже все доделали?
Не успели. В некоторых конфигурациях, 1С совместимо, такое регламентное есть.
Код написал для обоих видов регистров. тестировал только на УТ. Что это еще может значить?
Вообще не парюсь.
Обязательно напишу. Это тоже не сарказм.
(5)
Это не я написал. кому-то еще помогло)
Я про свои проблемы которые решил при помощи этой обработки не написал вообще….
(5)
Спасибо, обязательно почитаю.
(4)
А что поделаешь — оно у меня большое и доброе. И потому и заступился за автора статьи.
(4) Ну у меня вот штатная команда «Установка периода рассчитанных итогов», включенная по умолчанию в БП, нарушает напрочь эти самые итоги…