<?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='\
Абалдеть, 40 скачиваний и ни комента, ни плюса … 🙂
Оптимист… Многие (и я в том числе) не хотят ставить плюс без проверки работоспособности. Особенно когда обработка заявлена «универсальная». Ну на тебе плюс авансом. Проверить сильно охота, но и боязно: недавно у нас как раз сворачивали сильномодифицированную УПП, наскоками, частичными откатами, подчисткой хвостов занимались… с месяц. Так я думаю, у меня проверка займет с неделю…
(2) кончено, я после написания это обработки свою УТ неделю учился сворачивать так, чтобы данные корректность не потеряли. Но сама же обработка строго выполняет то, что её указали.
БУду испытывать сейчас 😀
Если у документа нет поля с датой, то вылетает с ошибкой 🙁 вот в этом месте
Если Док.ДатаПоля = NULL Тогда
Продолжить;
КонецЕсли;
Надо ставить доп проверку…на существование поля
(5) Возможно я не понял вопрос, но как это документ без поля «Дата»?
Возможно я не так выразился — сори 🙂
Вы делаете проверку
Если Док.ДатаПоля = NULL Тогда
Продолжить;
КонецЕсли;
что и как и зачем и откуда я не знаю — не вникал.
Док это у вас строкатаблицызначенией. в этой таблице есть поля:
ДатаПоля
ДокументПартии
регдата
регистратор
В какой-то момент у этой таблицы есть только поле Заказклиета и всё
Почему — не знаю — не вникал. Конфигурация не типовая, а Типография(УПП+Типография),купленная у армекса на ранних стадиях и именно на их документах обработка валится 🙁
а так же создать в нём реквизит: Комментарий — иначе вылетает.
(0) Спасибо. Обработка выручила! После обработки напильником все прошло очень хорошо!
— случай указанный в (7);
— замена универсального документа типовой КорректировкойРегистров
— установка доп. свойства для объектов, которое потом анализируется в модулях перед записью для оптимизации
— сокращение визуальных эффектов типа «состояние».
Кстати оставшееся время обработки действительно довольно точно оценивается!
собираю все для проверки, т.к. итс-овская вылетает.
чет у меня не пошла. ошибку выкинуло
Спасибо, сильно облегчила жизнь при свертке не типовой УТ,спасибо Serj1C за идею
— замена универсального документа типовой КорректировкойРегистров
Очень жаль, что без свертки по регистру бухгалтерии, очень полезная свертка была бы. А так, очень даже ничего. Рекомендую!
Добрый день. Подскажите, правильно ли понимаю. В ней можно свернуть базу допустим на 31,12,11 и документы введённые после этого останутся (если да, то как будет выглядеть привязка к документу-основанию в срезанном периоде). Или всё таки необходимо сворачивать на сейчас и с этого момента начинать работу? Заранее спасибо.
Если я правильно помню, то она оставляет те документы, которые нельзя удалить. Т.е. по идее возвраты по продажам прошлого года вводить можно будет, основание будет, однако я не помню снимет ли она их с проведения или нет — проверяйте 🙂 это было почти 2 года назад, плохо помню.
Свертка отличная, в моей УТ просто выбрал дату и нажал «Выполнить все». Пользуюсь второй год.
дорабатывай регистры
УТ 10.3 «практически типовая» добавлено парочка регистров накоплений…
настройки по умолчанию позволяют удалить 3000 из 103000 документов…
Это нормально?
Не могу скачать, выдает ошибку:
Fatal error: Call-time pass-by-reference has been removed in /srv/www/core/bitrix/templates/.default/components/bitrix/asd.elements.list/is_buy_download_file/result_modifier.php on line 7
в УТ 10.3 под 1С 8.1 ничего почти не сделала из 3900 документов удалила только 277 и ничего не свернула. Что не так могу делать?
(21) dyak84, писал конкретно под самописную. база была существенно меньше, уже 2 года 1С не занимаюсь. удачи 🙂
Непонятная обработина. Нужно сразу писать в описании, что она ничем не отличается от банальной пометки документов на удаление по периоду. Можно использовать стандартную обработку «групповая обработка справочников и документов» и помечать на удаление по дате. И ошибок много с регистрами.
попробовал, — хрень, использовал стандартную, все получилось….