<?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='\
Здравствуйте. Будет работать с версией 3.0.67.74?
(1) да, структура документа Операция не меняется, поэтому на любой версии работать будет.
Замену сделал не во всех документах, почему так?
(3) слишком много вариантов, чтобы однозначно ответить. Очень часто не закрыв период (год) сворачивают базу и пытаются избавиться от старых документов — в этом случае уже индивидуально нужно смотреть документ операции и регистр, по которому переносятся остатки и дорабатывать обработку под себя. Возможно в книге покупок/продаж, сформированных позднее есть ссылки на документы старого периода — обработка в данном случае не поможет, т.к. обрабатываются только документы Операция сформированные переносом. Так же ссылки остаются в последовательности документов, которая использовалась при переносе с бухгалтерии 2.0 — опять таки обработка данная к этому отношения не имеет, и убрать ссылки из данной последовательности можно только сняв на время конфигурацию с поддержки, удалив в конфигураторе данную последовательность, удалив после этого документы, после чего вернув конфигурацию обратно на поддержку.
Часто акты сверок содержат ссылки на старые документы — тут перед удалением акты сверок лучше убрать из базы.
База свёрнута после закрытия периода, операции сформированы переносом, система но — УСН. Актов сверок в программе нет.
(5) каким переносом? Если каким-то сторонним, то вероятнее всего документы, на которые ссылаются операции записаны с признаком Проведен, чего при стандартной свертке документов не бывает, т.к. документы помечаются на удаление. Эта обработка заменяет ссылки только для тех документов, которые помечены на удаление.
Стандартная свёртка 1С ((((. Все документы помечены на удаление вижу их в журнале операций. Удалилось больше половины, остальное, видимо, уже только после ручной замены ссылки в документах, которые остались.
День добрый, могу ли я купить вашу обработку минуя данный сайт?
(им пользуюсь редко, а покупать абонемент из-за одной обработки дорого)
Подскажите пожалуйста,где что посмотреть,чтобы ушла ошибка при подключении обработки-«Нарушение прав доступа!»
Помогите разобраться,запускаю вашу обработку,после свертки,в итоге документы как были на удалении ,так и остались.Такие документы как сф полученные и выданные,пакеты электронных документов,и прочие документы остались не тронутыми,обработка не заменяет эти документы?
(10) обработка сама ничего не удаляет. После её выполнения обработку удаления помеченных на удаление документов необходимо запускать вручную.
Я поняла,что сначала мы запускаем вашу обработку,а потом уже стандартное удаление,я про это и говорю,что остаются документы типа сф,пакеты Эл.документов и т.д,у которых замена не произошла и в итоге при Удалении объектов они не уходят!
(12)
Не все базы одинаковые. Нужно смотреть какие именно документы/записи регистров ссылаются на помеченные на удаление документы. Обработка в основном работает с регистром Хозрасчетный. Всех нюансов учесть она не может.
Ещё много ссылок остается, если свертка базы происходит при некорректно закрытом (не закрытом) периоде, на конец которого происходит свертка.