<?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='\
НЕ делает отбор по организациям( у меня неск. фирм в базе. списывает у всех подряд.. жаль
можно сделать отбор по конкретной организации! я это учту и выложу улучшенную обработку
из 20 поступлений выбрал одно! на своё усмотрение! а где возможность выбора конкретных поступлений?
поступления выбираются в интервале дат начало и конец периода
Отличная обработка, спасибо огромное. 🙂 🙂 🙂 Не подскажите, есть что-нибудь подобное для 7.7?
Спасибо! К сожалению на 7.7 ничего подобного нет. Так как начинал кодить с 8ки
Очень понравилась идея заложенная в этой обработке.
Однако, в ней не хватает
1. Дата документа списания может отличаться от даты получения. Желательно иметь возможность задавать Дату списания.
2. В полученном документе не проставляется пользователь (кто использовал эту обработку).
3. Не корректно обрабатывается счет 26 (2-3 субконто)
Кроме того совсем «здорово» было бы если бы была возможность формировать на выбор или Требование-накладную или Передача материалов в эксплуатацию.
Да, и еще, было бы хорошо запоминать настройки обработки.
Спасибки, просто чудно все! Даже если надо, что то в документе исправить, всяко лучше, чем ручками все это набивать 😀
Когда надо заполнить, то сразу видишь Где надо заполнить.
А когда исправляешь, то надо — все проверять.
Что «творится» с проводками — просто жуть.
Однозначно «-» 🙁
Отличная обработка. Даже с мелкими проблемами, всяко лучше чем руками колупать!!!
Судя по описанию, это очень полезная обрадотка!
Плюсую за полезность:)
«Авансовый отчет по табличной части Товары», надо понимать что речь идет об УТ 10, т.к. в УТ11 в документе Авансовый отчет» вкладки товары нет, есть только ссылка на документ поступление товаров
Эта обработка писалась для 1с 8.1 Бухгалтерия предприятия, в описании же есть, причем здесь торговля
Добрый день!
Возможно ли средствами 1с вывести список материалов, которые не списаны более 30 ней?
Спасибо!
Что значит не списаны более 30 дней?
(17) материал принят в эксплуатацию Датой1, а Датой2 он должен быть списан и разница между датами не более 30 дней.
Т.е. если материал принят в эксплуатацию более 30 дней назад и всё ещё не списан, то необходимо по нему и подобным сделать отчёт!