<?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='\
Хм, вопрос к автору, при какой массе бд свертка действительно актуальна?
актуальность свертки решается в каждом конкретном случае, в данном случае нужно было отрезать товары, которые не будут больше продаваться (около 70 тыс штук).
Ни разу не видел розницу, распухшую настолько, что необходима была бы свертка.
Документы поступления не удалились. Чеки не удаляются.
Я ожидал что создадутся документы «Ввод начальных остатков» — их нет
либо что то сделали не так, либо надо разбираться.
(4)
Подскажите, решили ли проблему, на которую жаловался (3) Temniy? Нужна свертка, а просто так (в случае нерабочей обработки) тратить 3SM нехочется
Еще скажите, на каком релизе тестировалось и поддерживаются свежие релизы?
эта проблема могла возникнуть, если не указывали дату свертки. Проблему не решал, если дадите свой адрес могу так выслать, не жалко) хоть попробуете. Заодним поразвлекаетесь.
(6) день добрый, а можно тоже пощупать обработку?
Попробовал обработку на конфигурации 2.1.8.13.
В текущем исполнении обработка не работоспособна.
Доделал свертку регистра сведений «Действующие цены номенклатуры» и изменил немного процедуру ПометкаДокументовНаУдаление(). Не работала отмена проведения документа «Пересчет товаров». После этого база свернулась.
Здравствуйте! А на казахстанской рознице обработка будет работать?
не проверял
(10) попробовать как-то можно?
В рознице есть стандартная обработка Свертки базы. Прилично работает.
К сожалению, стандартная свертка работает не прилично.
(12) ДЛя 2.1 не нашел в конфигурации, стандартная обработка отдельно от конфигурации?
(8)
Подскажите, как вы победили документ «Пересчет товаров»?
(15) Не стал ничего побеждать. Сделал перенос базы.
(8)отлично то как
На Рознице 2.1.9.20 работает? Можно как то протестировать?
(14)Я делал давно через РИБ на магазин, потом сделал его центральным узлом.
Добрый день. Подскажите на рознице 2.2 работает?
(8) Владимир, можете поделится обработкой со своими доработками?
(21) Там где комментарий //Канатаев —
(22) Спасибо
Скачал. запустил получил это:
ВнешняяОбработка.СверткаРозницы21.Форма.Форма.Форма(246)}: Ошибка при вызове метода контекста (Записать)
Корректировка.Записать();
по причине:
Запись не верна! Значение поля «Номенклатура» не может быть пустым! (Регистр накопления: Закупки товаров; Номер строки: 60
БАза розница для казахтсана. По идее розница с россиской сделано.
Не сработало.
Жать что потратил 3 sm
(20)здравствуйте. не могу сказать, не занимаюсь больше этим
(24)надо смотреть почему пустая номенклатура приходит
(18)по идее писалась для 2.1, подрелиз к сожалению не помню, если есть какие то изменения, то они не значительны
(24) Такая же ошибка и с Российской розницей.
для розницы с ЕГАИС подходит?