<?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='\
(0) Да ладно, есть подобные например:http://infostart.ru/public/78026/
По ссылке — отчет для УТ, я его видел до этого. Для БП не нашёл в свое время. Может и были отчеты, я не спорю.
А остатки на 43 в ценах продажи учитывает?
Сейчас допишу..
Отчет понравился и ему не было бы цены, если бы отбор шел не по номенклатурной группе, а по номенклатуре, было бы намного удобнее.
Добавил отбор по номенклатуре
Спасибо за оперативность.
Не отбирает по номенклатуре (целой папкой), отбор идет только по группе.Но если выбрать одну позицию, то все работает.
Понял, допишу чуть позже, на днях, дел чуть меньше станет.
Теперь отчет отбирает по группам. Чуть позже доработаю, чтобы в отчете товары группировались по группам номенклатуры.
а есть ли такая же обработка на 8.1?
Нет, могу сделать. Просто БП 2.0 на 8.1 уже не обновляется, насколько я знаю.
отличный отчет! все просто и понятно! автору огромный плюс!!! в бухгалтерии 8.2 работает «на ура». что редкость…
еще — было бы классно его чуть чуть доработать — сделать фильтр по количеству (что бы например, посмотреть только отрицательные остатки, или остатки больше определенного количества).
(1) кстати, та обработка не идет под 8.2!!!
(15) Во-первых как сказано в (2) — он для УТ и УПП, во — вторых чтоб отчет работал в 8.2 его надо конвернуть…
На неделе постараюсь добавить фильтр по количеству.
У меня бухгалтерия 2.0 (платформа 8.2). и выдается пустой отчет.
Только что скачал и перепроверил — формируется. У многих клиентов стоит. Только один раз была подобная ситуация — на «капризной» базе, в которой помимо этого было множество проблем. Попробуйте сделать тестирование и исправление базы. Может еще — с движениями по регистру бухгалтерии проблемы..
Отчет использую регулярно. Очень пригодился кладовщику для вывода остатков продукции на конкретную дату. Свиду совсем простой, но функционален.
До отчета не добрался, но вопрос в том:
Как в отчете реализовано состояние склада на определенную дату?
ВводНачОст+Приход+Перемещение-Перемещение-Расход+Возврат-Списание+Оприходование… что я забыл?
Как играть с датами?
(18) polocatik, а Вы не забыли установить тип цен? все поля заполнены? у меня такое было, когда не указал склад например — тоже выдавался пустой отчет.
Скачал и установил на программу 1С:Бухгалтерия предприятия 8.2 2.0.27.10 работает но отчете не группирует товары по группам номенклатуры. Пришлось дорабатывать. А еще не формирует когда устанавливаешь основную номенклатуру. А так отчет в принципе нужный и понятный.